diff options
Diffstat (limited to 'llvm/lib/AsmParser/llvmAsmParser.y')
-rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y index c459a0eec0e..d73b008416a 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y +++ b/llvm/lib/AsmParser/llvmAsmParser.y @@ -719,26 +719,41 @@ static PATypeHolder HandleUpRefs(const Type *ty) { } -//===----------------------------------------------------------------------===// -// RunVMAsmParser - Define an interface to this parser -//===----------------------------------------------------------------------===// -// -Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) { - llvmAsmin = F; - CurFilename = Filename; - llvmAsmlineno = 1; // Reset the current line number... +// common code from the two 'RunVMAsmParser' functions + static Module * RunParser(Module * M) { - // Allocate a new module to read - CurModule.CurrentModule = new Module(Filename); + llvmAsmlineno = 1; // Reset the current line number... + CurModule.CurrentModule = M; yyparse(); // Parse the file, potentially throwing exception Module *Result = ParserResult; - - llvmAsmin = stdin; // F is about to go away, don't use it anymore... ParserResult = 0; return Result; + + } + +//===----------------------------------------------------------------------===// +// RunVMAsmParser - Define an interface to this parser +//===----------------------------------------------------------------------===// +// +Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) { + set_scan_file(F); + + CurFilename = Filename; + return RunParser(new Module(CurFilename)); +} + +Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) { + set_scan_string(AsmString); + + CurFilename = "from_memory"; + if (M == NULL) { + return RunParser(new Module (CurFilename)); + } else { + return RunParser(M); + } } %} |