40 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- Parser.cpp - Top-Level TableGen Parser implementation --------------===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "llvm/TableGen/Parser.h"
 | 
						|
#include "TGParser.h"
 | 
						|
#include "llvm/Support/MemoryBuffer.h"
 | 
						|
#include "llvm/TableGen/Record.h"
 | 
						|
 | 
						|
using namespace llvm;
 | 
						|
 | 
						|
bool llvm::TableGenParseFile(SourceMgr &InputSrcMgr, RecordKeeper &Records) {
 | 
						|
  // Initialize the global TableGen source manager by temporarily taking control
 | 
						|
  // of the input buffer in `SrcMgr`. This is kind of a hack, but allows for
 | 
						|
  // preserving TableGen's current awkward diagnostic behavior. If we can remove
 | 
						|
  // this reliance, we could drop all of this.
 | 
						|
  SrcMgr = SourceMgr();
 | 
						|
  SrcMgr.takeSourceBuffersFrom(InputSrcMgr);
 | 
						|
  SrcMgr.setIncludeDirs(InputSrcMgr.getIncludeDirs());
 | 
						|
  SrcMgr.setDiagHandler(InputSrcMgr.getDiagHandler(),
 | 
						|
                        InputSrcMgr.getDiagContext());
 | 
						|
 | 
						|
  // Setup the record keeper and try to parse the file.
 | 
						|
  auto *MainFileBuffer = SrcMgr.getMemoryBuffer(SrcMgr.getMainFileID());
 | 
						|
  Records.saveInputFilename(MainFileBuffer->getBufferIdentifier().str());
 | 
						|
 | 
						|
  TGParser Parser(SrcMgr, /*Macros=*/None, Records);
 | 
						|
  bool ParseResult = Parser.ParseFile();
 | 
						|
 | 
						|
  // After parsing, reclaim the source manager buffers from TableGen's global
 | 
						|
  // manager.
 | 
						|
  InputSrcMgr.takeSourceBuffersFrom(SrcMgr);
 | 
						|
  SrcMgr = SourceMgr();
 | 
						|
  return ParseResult;
 | 
						|
}
 |