forked from OSchip/llvm-project
parent
284136170e
commit
34d10a1aab
|
@ -132,19 +132,21 @@ int yywrap() {
|
|||
|
||||
%}
|
||||
|
||||
Comment \/\/.*
|
||||
Comment \/\/.*
|
||||
|
||||
Identifier [a-zA-Z_][0-9a-zA-Z_]*
|
||||
Integer [-+]?[0-9]+|0x[0-9a-fA-F]+|0b[01]+
|
||||
StringVal \"[^"]*\"
|
||||
IncludeStr include[ \t\n]+\"[^"]*\"
|
||||
Identifier [a-zA-Z_][0-9a-zA-Z_]*
|
||||
Integer [-+]?[0-9]+|0x[0-9a-fA-F]+|0b[01]+
|
||||
CodeFragment \[\{([^}]+|\}[^\]])*\}\]
|
||||
StringVal \"[^"]*\"
|
||||
IncludeStr include[ \t\n]+\"[^"]*\"
|
||||
|
||||
%%
|
||||
|
||||
{Comment} { /* Ignore comments */ }
|
||||
|
||||
{IncludeStr} { HandleInclude(yytext); }
|
||||
|
||||
{CodeFragment} { Filelval.StrVal = new std::string(yytext+2, yytext+yyleng-2);
|
||||
return CODEFRAGMENT; }
|
||||
|
||||
int { return INT; }
|
||||
bit { return BIT; }
|
||||
|
|
|
@ -155,7 +155,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
|
|||
|
||||
%token INT BIT STRING BITS LIST CODE CLASS DEF FIELD SET IN
|
||||
%token <IntVal> INTVAL
|
||||
%token <StrVal> ID STRVAL
|
||||
%token <StrVal> ID STRVAL CODEFRAGMENT
|
||||
|
||||
%type <Ty> Type
|
||||
%type <RecPtr> DefList DefListNE
|
||||
|
@ -217,6 +217,9 @@ Value : INTVAL {
|
|||
} | STRVAL {
|
||||
$$ = new StringInit(*$1);
|
||||
delete $1;
|
||||
} | CODEFRAGMENT {
|
||||
$$ = new CodeInit(*$1);
|
||||
delete $1;
|
||||
} | '?' {
|
||||
$$ = new UnsetInit();
|
||||
} | '{' ValueList '}' {
|
||||
|
|
|
@ -18,6 +18,7 @@ class BitInit;
|
|||
class BitsInit;
|
||||
class IntInit;
|
||||
class StringInit;
|
||||
class CodeInit;
|
||||
class ListInit;
|
||||
class DefInit;
|
||||
class TypedInit;
|
||||
|
@ -39,6 +40,7 @@ struct RecTy {
|
|||
virtual Init *convertValue( IntInit *II) { return 0; }
|
||||
virtual Init *convertValue(StringInit *SI) { return 0; }
|
||||
virtual Init *convertValue( ListInit *LI) { return 0; }
|
||||
virtual Init *convertValue( CodeInit *CI) { return 0; }
|
||||
virtual Init *convertValue(VarBitInit *VB) { return 0; }
|
||||
virtual Init *convertValue( DefInit *DI) { return 0; }
|
||||
virtual Init *convertValue( TypedInit *TI) { return 0; }
|
||||
|
@ -135,6 +137,7 @@ public:
|
|||
///
|
||||
struct CodeRecTy : public RecTy {
|
||||
Init *convertValue(UnsetInit *UI) { return (Init*)UI; }
|
||||
Init *convertValue( CodeInit *CI) { return (Init*)CI; }
|
||||
|
||||
void print(std::ostream &OS) const { OS << "code"; }
|
||||
};
|
||||
|
@ -321,6 +324,20 @@ public:
|
|||
virtual void print(std::ostream &OS) const { OS << "\"" << Value << "\""; }
|
||||
};
|
||||
|
||||
/// CodeInit - "[{...}]" - Represent a code fragment.
|
||||
///
|
||||
class CodeInit : public Init {
|
||||
std::string Value;
|
||||
public:
|
||||
CodeInit(const std::string &V) : Value(V) {}
|
||||
|
||||
virtual Init *convertInitializerTo(RecTy *Ty) {
|
||||
return Ty->convertValue(this);
|
||||
}
|
||||
|
||||
virtual void print(std::ostream &OS) const { OS << "[{" << Value << "}]"; }
|
||||
};
|
||||
|
||||
/// ListInit - [AL, AH, CL] - Represent a list of defs
|
||||
///
|
||||
class ListInit : public Init {
|
||||
|
|
Loading…
Reference in New Issue