X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAsmParser%2FParser.cpp;h=0005e11737b8e781c4e79c80dd3231168da7555a;hb=629c1a3f78494d0dd769fe82bd2bd17df0555843;hp=7bb4f0a362f8a91644223863983d681e554109cb;hpb=6184febcda9b97cd053b2e7557a681a2d78625c8;p=oota-llvm.git diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp index 7bb4f0a362f..0005e11737b 100644 --- a/lib/AsmParser/Parser.cpp +++ b/lib/AsmParser/Parser.cpp @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -13,60 +13,62 @@ #include "ParserInternals.h" #include "llvm/Module.h" +#include "llvm/Support/MemoryBuffer.h" +#include using namespace llvm; -// 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 *llvm::ParseAssemblyFile(const std::string &Filename) { - FILE *F = stdin; - - if (Filename != "-") { - F = fopen(Filename.c_str(), "r"); - if (F == 0) - throw ParseException(Filename, "Could not open file '" + Filename + "'"); - } +ParseError* TheParseError = 0; /// FIXME: Not threading friendly - 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 +Module *llvm::ParseAssemblyFile(const std::string &Filename, ParseError* Err) { + std::string ErrorStr; + MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrorStr); + if (F == 0) { + if (Err) + Err->setError(Filename, "Could not open input file '" + Filename + "'"); + return 0; } - - if (F != stdin) - fclose(F); - + + TheParseError = Err; + Module *Result = RunVMAsmParser(F); + delete F; return Result; } -Module *llvm::ParseAssemblyString(const char * AsmString, Module * M) { - return RunVMAsmParser(AsmString, M); +Module *llvm::ParseAssemblyString(const char *AsmString, Module *M, + ParseError *Err) { + TheParseError = Err; + MemoryBuffer *F = MemoryBuffer::getMemBuffer(AsmString, + AsmString+strlen(AsmString), + ""); + Module *Result = RunVMAsmParser(F); + delete F; + return Result; } //===------------------------------------------------------------------------=== -// ParseException Class +// ParseError Class //===------------------------------------------------------------------------=== -ParseException::ParseException(const std::string &filename, - const std::string &message, - int lineNo, int colNo) - : Filename(filename), Message(message) { - LineNo = lineNo; ColumnNo = colNo; +void ParseError::setError(const std::string &filename, + const std::string &message, + int lineNo, int colNo) { + Filename = filename; + Message = message; + LineNo = lineNo; + colNo = colNo; } -ParseException::ParseException(const ParseException &E) +ParseError::ParseError(const ParseError &E) : Filename(E.Filename), Message(E.Message) { LineNo = E.LineNo; ColumnNo = E.ColumnNo; } // Includes info from options -const std::string ParseException::getMessage() const { +const std::string ParseError::getMessage() const { std::string Result; char Buffer[10];