diff --git a/tools/qfcc/include/rua-lang.h b/tools/qfcc/include/rua-lang.h index 034e8918c..37caef25c 100644 --- a/tools/qfcc/include/rua-lang.h +++ b/tools/qfcc/include/rua-lang.h @@ -83,6 +83,7 @@ rua_macro_t *rua_macro_arg (rua_macro_t *arg, void *scanner); void rua_start_pragma (void *scanner); void rua_start_text (void *scanner); void rua_start_expr (void *scanner); +void rua_start_include (void *scanner); void rua_expand_on (void *scanner); void rua_expand_off (void *scanner); void rua_end_directive (void *scanner); diff --git a/tools/qfcc/source/pre-parse.y b/tools/qfcc/source/pre-parse.y index d21af382d..a69994c66 100644 --- a/tools/qfcc/source/pre-parse.y +++ b/tools/qfcc/source/pre-parse.y @@ -179,8 +179,8 @@ directive_list eod : EOD { rua_end_directive (scanner); } ; directive - : INCLUDE expand string extra_warn eod { rua_include_file ($3, scanner); } - | EMBED expand string extra_ignore eod { rua_embed_file ($3, scanner); } + : INCLUDE incexp string extra_warn eod { rua_include_file ($3, scanner); } + | EMBED incexp string extra_ignore eod { rua_embed_file ($3, scanner); } | DEFINE ID { $$ = rua_start_macro ($2, false, scanner); } body { rua_macro_finish ($body, scanner); } eod @@ -244,6 +244,10 @@ body: /* empty */ { $$ = $0; } body_token : TOKEN | ',' | '(' | ')' ; +incexp + : { rua_start_include (scanner); } + ; + expand : { rua_start_expr (scanner); } ; diff --git a/tools/qfcc/source/qc-lex.l b/tools/qfcc/source/qc-lex.l index 022c6fe0e..24023cbde 100644 --- a/tools/qfcc/source/qc-lex.l +++ b/tools/qfcc/source/qc-lex.l @@ -276,8 +276,8 @@ pp_vnumber '({s}*{m}?{pp_number}){2,4}{s}*'{ULFD}? [\\]* { return PRE_TEXT; } ## { return PRE_CONCAT; } # { return '#'; } -{h_string} { return PRE_HSTRING; } -{q_string} { return PRE_QSTRING; } +{h_string} { return PRE_HSTRING; } +{q_string} { return PRE_QSTRING; } defined { return PRE_DEFINED; } {ID} { return PRE_ID; } @@ -1654,6 +1654,16 @@ rua_start_text (void *scanner) yy_push_state (TEXT, scanner); } +void +rua_start_include (void *scanner) +{ + auto extra = qc_yyget_extra (scanner); + extra->expand = true; + + yy_pop_state (scanner); + yy_push_state (PREPROC, scanner); +} + void rua_start_expr (void *scanner) {