X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser_proc.y;h=32cba5d48daa207f3f669a438a5e062bee1e09bd;hp=a189a885081ccf54fafed87e1813bb9fd5082847;hb=d560a27ff8431c678d25ecf4d8190b562a766f41;hpb=1d0049e066faab3c40dcf238c92daab45aadddd7 diff --git a/src/parser_proc.y b/src/parser_proc.y index a189a88..32cba5d 100644 --- a/src/parser_proc.y +++ b/src/parser_proc.y @@ -16,6 +16,7 @@ /* TOKEN is defined inside syntax_error */ %syntax_error { PSI_ParserSyntaxError(P, P->psi.file.fn, P->line, "Unexpected token '%s'", TOKEN->text); + TOKEN->type = PSI_T_NAME; } %nonassoc NAME. @@ -457,8 +458,23 @@ return_stmt(ret) ::= RETURN set_value(val) EOS. { %type free_stmt {free_stmt*} %destructor free_stmt {free_free_stmt($$);} -free_stmt(free) ::= FREE decl_vars(vars) EOS. { - free = init_free_stmt(vars); +free_stmt(free) ::= FREE free_calls(calls) EOS. { + free = init_free_stmt(calls); +} + +%type free_calls {free_calls*} +%destructor free_calls {free_free_calls($$);} +free_calls(calls) ::= free_call(call). { + calls = init_free_calls(call); +} +free_calls(calls) ::= free_calls(calls_) COMMA free_call(call). { + calls = add_free_call(calls_, call); +} + +%type free_call {free_call*} +%destructor free_call {free_free_call($$);} +free_call(call) ::= NAME(F) LPAREN decl_vars(vars) RPAREN. { + call = init_free_call(F->text, vars); } %type impl_type {impl_type*}