mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3548 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- Parser.cpp - Main dispatch module for the Parser library -------------===
 | |
| //
 | |
| // This library implements the functionality defined in llvm/assembly/parser.h
 | |
| //
 | |
| //===------------------------------------------------------------------------===
 | |
| 
 | |
| #include "llvm/Analysis/Verifier.h"
 | |
| #include "llvm/Module.h"
 | |
| #include "ParserInternals.h"
 | |
| using std::string;
 | |
| 
 | |
| // The useful interface defined by this file... Parse an ascii file, and return
 | |
| // the internal representation in a nice slice'n'dice'able representation.
 | |
| //
 | |
| Module *ParseAssemblyFile(const string &Filename) { // throw (ParseException)
 | |
|   FILE *F = stdin;
 | |
| 
 | |
|   if (Filename != "-") {
 | |
|     F = fopen(Filename.c_str(), "r");
 | |
| 
 | |
|     if (F == 0)
 | |
|       throw ParseException(Filename, "Could not open file '" + Filename + "'");
 | |
|   }
 | |
| 
 | |
|   Module *Result;
 | |
|   try {
 | |
|     Result = RunVMAsmParser(Filename, F);
 | |
|   } catch (...) {
 | |
|     if (F != stdin) fclose(F);      // Make sure to close file descriptor if an
 | |
|     throw;                          // exception is thrown
 | |
|   }
 | |
| 
 | |
|   if (F != stdin)
 | |
|     fclose(F);
 | |
| 
 | |
|   return Result;
 | |
| }
 | |
| 
 | |
| 
 | |
| //===------------------------------------------------------------------------===
 | |
| //                              ParseException Class
 | |
| //===------------------------------------------------------------------------===
 | |
| 
 | |
| 
 | |
| ParseException::ParseException(const string &filename, const string &message, 
 | |
| 			       int lineNo, int colNo) 
 | |
|   : Filename(filename), Message(message) {
 | |
|   LineNo = lineNo; ColumnNo = colNo;
 | |
| }
 | |
| 
 | |
| ParseException::ParseException(const ParseException &E) 
 | |
|   : Filename(E.Filename), Message(E.Message) {
 | |
|   LineNo = E.LineNo;
 | |
|   ColumnNo = E.ColumnNo;
 | |
| }
 | |
| 
 | |
| const string ParseException::getMessage() const { // Includes info from options
 | |
|   string Result;
 | |
|   char Buffer[10];
 | |
| 
 | |
|   if (Filename == "-") 
 | |
|     Result += "<stdin>";
 | |
|   else
 | |
|     Result += Filename;
 | |
| 
 | |
|   if (LineNo != -1) {
 | |
|     sprintf(Buffer, "%d", LineNo);
 | |
|     Result += string(":") + Buffer;
 | |
|     if (ColumnNo != -1) {
 | |
|       sprintf(Buffer, "%d", ColumnNo);
 | |
|       Result += string(",") + Buffer;
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   return Result + ": " + Message;
 | |
| }
 |