X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Flexer.l;h=ab26f4be2e1b465e5522d02299b3703ef3465e5e;hp=64eee279a3d0f3311c5c3cfe9770dfb5bd69797d;hb=fb5a2b71f85614114663c86dbba62c5c491a11b9;hpb=ce2275ed4fa099035af123c25a1a7657f1ea6e78 diff --git a/discover/grub2/lexer.l b/discover/grub2/lexer.l index 64eee27..ab26f4b 100644 --- a/discover/grub2/lexer.l +++ b/discover/grub2/lexer.l @@ -51,15 +51,19 @@ VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) /* anything that's not a metachar: return as a plain word */ {WORD} { - yylval->word = create_word(yyget_extra(yyscanner), yytext, - false, false); + yylval->word = create_word_text(yyget_extra(yyscanner), yytext); return TOKEN_WORD; } \${VARNAME} | \$\{{VARNAME}\} { - yylval->word = create_word(yyget_extra(yyscanner), yytext, - true, true); + if (yytext[1] == '{') { + yytext[yyleng-1] = '\0'; + yytext++; + } + yytext++; + yylval->word = create_word_var(yyget_extra(yyscanner), yytext, + true); return TOKEN_WORD; } @@ -71,8 +75,7 @@ VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) yy_pop_state(yyscanner); } [^']+ { - yylval->word = create_word(yyget_extra(yyscanner), yytext, - false, false); + yylval->word = create_word_text(yyget_extra(yyscanner), yytext); return TOKEN_WORD; } @@ -83,11 +86,22 @@ VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) \" { yy_pop_state(yyscanner); } -([^"]|\\\")+ { - yylval->word = create_word(yyget_extra(yyscanner), yytext, - true, false); +([^"\$]|\\\")+ { + yylval->word = create_word_text(yyget_extra(yyscanner), yytext); return TOKEN_WORD; } +\${VARNAME} | +\$\{{VARNAME}\} { + if (yytext[1] == '{') { + yytext[yyleng-1] = '\0'; + yytext++; + } + yytext++; + yylval->word = create_word_var(yyget_extra(yyscanner), yytext, + false); + return TOKEN_WORD; + } + /* blocks */