Parser.cpp revision 32299911657651ea6738d5ce085803dc7b991d34
1//===- Parser.cpp - Main dispatch module for the Parser library -------------=== 2// 3// This library implements the functionality defined in llvm/assembly/parser.h 4// 5//===------------------------------------------------------------------------=== 6 7#include "llvm/Analysis/Verifier.h" 8#include "llvm/Module.h" 9#include "ParserInternals.h" 10using std::string; 11 12// The useful interface defined by this file... Parse an ASCII file, and return 13// the internal representation in a nice slice'n'dice'able representation. 14// 15Module *ParseAssemblyFile(const string &Filename) { // throw (ParseException) 16 FILE *F = stdin; 17 18 if (Filename != "-") { 19 F = fopen(Filename.c_str(), "r"); 20 21 if (F == 0) 22 throw ParseException(Filename, "Could not open file '" + Filename + "'"); 23 } 24 25 Module *Result; 26 try { 27 Result = RunVMAsmParser(Filename, F); 28 } catch (...) { 29 if (F != stdin) fclose(F); // Make sure to close file descriptor if an 30 throw; // exception is thrown 31 } 32 33 if (F != stdin) 34 fclose(F); 35 36 return Result; 37} 38 39 40//===------------------------------------------------------------------------=== 41// ParseException Class 42//===------------------------------------------------------------------------=== 43 44 45ParseException::ParseException(const string &filename, const string &message, 46 int lineNo, int colNo) 47 : Filename(filename), Message(message) { 48 LineNo = lineNo; ColumnNo = colNo; 49} 50 51ParseException::ParseException(const ParseException &E) 52 : Filename(E.Filename), Message(E.Message) { 53 LineNo = E.LineNo; 54 ColumnNo = E.ColumnNo; 55} 56 57const string ParseException::getMessage() const { // Includes info from options 58 string Result; 59 char Buffer[10]; 60 61 if (Filename == "-") 62 Result += "<stdin>"; 63 else 64 Result += Filename; 65 66 if (LineNo != -1) { 67 sprintf(Buffer, "%d", LineNo); 68 Result += string(":") + Buffer; 69 if (ColumnNo != -1) { 70 sprintf(Buffer, "%d", ColumnNo); 71 Result += string(",") + Buffer; 72 } 73 } 74 75 return Result + ": " + Message; 76} 77