Give the asmparser the ability to parse strings. Patch contributed by
Alexander Friedman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22146 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index c459a0e..d73b008 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -719,26 +719,41 @@
}
+// common code from the two 'RunVMAsmParser' functions
+ static Module * RunParser(Module * M) {
+
+ llvmAsmlineno = 1; // Reset the current line number...
+
+ CurModule.CurrentModule = M;
+ yyparse(); // Parse the file, potentially throwing exception
+
+ Module *Result = ParserResult;
+ ParserResult = 0;
+
+ return Result;
+
+ }
+
//===----------------------------------------------------------------------===//
// RunVMAsmParser - Define an interface to this parser
//===----------------------------------------------------------------------===//
//
Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
- llvmAsmin = F;
+ set_scan_file(F);
+
CurFilename = Filename;
- llvmAsmlineno = 1; // Reset the current line number...
+ return RunParser(new Module(CurFilename));
+}
- // Allocate a new module to read
- CurModule.CurrentModule = new Module(Filename);
+Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
+ set_scan_string(AsmString);
- 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;
+ CurFilename = "from_memory";
+ if (M == NULL) {
+ return RunParser(new Module (CurFilename));
+ } else {
+ return RunParser(M);
+ }
}
%}