mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
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
This commit is contained in:
parent
98c162a086
commit
6184febcda
@ -32,6 +32,13 @@
|
||||
#include <cctype>
|
||||
#include <cstdlib>
|
||||
|
||||
void set_scan_file(FILE * F){
|
||||
yy_switch_to_buffer(yy_create_buffer( F, YY_BUF_SIZE ) );
|
||||
}
|
||||
void set_scan_string (const char * str) {
|
||||
yy_scan_string (str);
|
||||
}
|
||||
|
||||
#define RET_TOK(type, Enum, sym) \
|
||||
llvmAsmlval.type = Instruction::Enum; return sym
|
||||
|
||||
|
@ -42,6 +42,10 @@ Module *llvm::ParseAssemblyFile(const std::string &Filename) {
|
||||
return Result;
|
||||
}
|
||||
|
||||
Module *llvm::ParseAssemblyString(const char * AsmString, Module * M) {
|
||||
return RunVMAsmParser(AsmString, M);
|
||||
}
|
||||
|
||||
|
||||
//===------------------------------------------------------------------------===
|
||||
// ParseException Class
|
||||
|
@ -22,10 +22,17 @@
|
||||
#include "llvm/Assembly/Parser.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
|
||||
|
||||
// Global variables exported from the lexer...
|
||||
extern std::FILE *llvmAsmin;
|
||||
|
||||
extern int llvmAsmlineno;
|
||||
|
||||
extern std::string &llvmAsmTextin;
|
||||
|
||||
// functions exported from the lexer
|
||||
void set_scan_file(FILE * F);
|
||||
void set_scan_string (const char * str);
|
||||
|
||||
// Globals exported by the parser...
|
||||
extern char* llvmAsmtext;
|
||||
extern int llvmAsmleng;
|
||||
@ -38,6 +45,9 @@ extern std::string CurFilename;
|
||||
class Module;
|
||||
Module *RunVMAsmParser(const std::string &Filename, FILE *F);
|
||||
|
||||
// Parse a string directly
|
||||
Module *RunVMAsmParser(const char * AsmString, Module * M);
|
||||
|
||||
|
||||
// UnEscapeLexed - Run through the specified buffer and change \xx codes to the
|
||||
// appropriate character. If AllowNull is set to false, a \00 value will cause
|
||||
|
@ -719,26 +719,41 @@ static PATypeHolder HandleUpRefs(const Type *ty) {
|
||||
}
|
||||
|
||||
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
%}
|
||||
|
Loading…
Reference in New Issue
Block a user