From 908564a182467b04da7d1ac42f1caef31757a5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xenxo=20Espasand=C3=ADn?= Date: Mon, 15 May 2023 17:33:52 +0200 Subject: [PATCH] fix(arc): refactor regressions & func objects (#123) --- gen/arc/parser.ypp | 17 +- gen/gsc/parser.ypp | 17 +- src/arc/assembler.cpp | 2 +- src/arc/compiler.cpp | 6 +- src/arc/parser.cpp | 370 ++++++++++++++++++++++-------------------- src/gsc/parser.cpp | 306 +++++++++++++++++----------------- 6 files changed, 379 insertions(+), 339 deletions(-) diff --git a/gen/arc/parser.ypp b/gen/arc/parser.ypp index 303db383..32819a43 100644 --- a/gen/arc/parser.ypp +++ b/gen/arc/parser.ypp @@ -734,9 +734,22 @@ expr_call : expr_function { $$ = expr_call::make(@$, std::move($1)); } | expr_pointer { $$ = expr_call::make(@$, std::move($1)); } ; + expr_method - : expr_object expr_function { $$ = expr_method::make(@$, std::move($1), std::move($2)); } - | expr_object expr_pointer { $$ = expr_method::make(@$, std::move($1), std::move($2)); } + : expr_object expr_function + { + if ($1->loc().begin.line != $2->loc().begin.line) + error($2->loc(), "missing ';' ?"); + + $$ = expr_method::make(@$, std::move($1), std::move($2)); + } + | expr_object expr_pointer + { + if ($1->loc().begin.line != $2->loc().begin.line) + error($2->loc(), "missing ';' ?"); + + $$ = expr_method::make(@$, std::move($1), std::move($2)); + } ; expr_function diff --git a/gen/gsc/parser.ypp b/gen/gsc/parser.ypp index 58dedebb..6165b763 100644 --- a/gen/gsc/parser.ypp +++ b/gen/gsc/parser.ypp @@ -728,9 +728,22 @@ expr_call : expr_function { $$ = expr_call::make(@$, std::move($1)); } | expr_pointer { $$ = expr_call::make(@$, std::move($1)); } ; + expr_method - : expr_object expr_function { $$ = expr_method::make(@$, std::move($1), std::move($2)); } - | expr_object expr_pointer { $$ = expr_method::make(@$, std::move($1), std::move($2)); } + : expr_object expr_function + { + if ($1->loc().begin.line != $2->loc().begin.line) + error($2->loc(), "missing ';' ?"); + + $$ = expr_method::make(@$, std::move($1), std::move($2)); + } + | expr_object expr_pointer + { + if ($1->loc().begin.line != $2->loc().begin.line) + error($2->loc(), "missing ';' ?"); + + $$ = expr_method::make(@$, std::move($1), std::move($2)); + } ; expr_function diff --git a/src/arc/assembler.cpp b/src/arc/assembler.cpp index 43a9aa69..bc07f975 100644 --- a/src/arc/assembler.cpp +++ b/src/arc/assembler.cpp @@ -207,7 +207,7 @@ auto assembler::assemble(assembly const& data) -> buffer if (ctx_->props() & props::size64) script_.write(head.name); else - script_.write(head.name); + script_.write(static_cast(head.name)); script_.write(head.stringtablefixup_count); script_.write(head.exports_count); diff --git a/src/arc/compiler.cpp b/src/arc/compiler.cpp index 8112f36e..ef4e2e11 100644 --- a/src/arc/compiler.cpp +++ b/src/arc/compiler.cpp @@ -372,8 +372,8 @@ auto compiler::emit_stmt_ifelse(stmt_ifelse const& stm) -> void insert_label(else_loc); - paren = scopes_.back(); - scopes_.push_back(scope(paren.brk, paren.cnt)); + auto& paren2 = scopes_.back(); + scopes_.push_back(scope(paren2.brk, paren2.cnt)); emit_stmt(*stm.stmt_else); scopes_.pop_back(); @@ -936,7 +936,6 @@ auto compiler::emit_expr_increment(expr_increment const& exp, bool is_stmt) -> v { emit_expr_variable_ref(*exp.lvalue, false); emit_opcode(opcode::OP_Inc); - emit_opcode(opcode::OP_SetVariableField); } else { @@ -950,7 +949,6 @@ auto compiler::emit_expr_decrement(expr_decrement const& exp, bool is_stmt) -> v { emit_expr_variable_ref(*exp.lvalue, false); emit_opcode(opcode::OP_Dec); - emit_opcode(opcode::OP_SetVariableField); } else { diff --git a/src/arc/parser.cpp b/src/arc/parser.cpp index b0a83e7a..e5e8e52c 100644 --- a/src/arc/parser.cpp +++ b/src/arc/parser.cpp @@ -3441,505 +3441,515 @@ namespace xsk { namespace arc { break; case 190: // expr_method: expr_object expr_function -#line 738 "parser.ypp" - { yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); } -#line 3453 "parser.cpp" +#line 740 "parser.ypp" + { + if (yystack_[1].value.as < expr::ptr > ()->loc().begin.line != yystack_[0].value.as < call::ptr > ()->loc().begin.line) + error(yystack_[0].value.as < call::ptr > ()->loc(), "missing ';' ?"); + + yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); + } +#line 3458 "parser.cpp" break; case 191: // expr_method: expr_object expr_pointer -#line 739 "parser.ypp" - { yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); } -#line 3459 "parser.cpp" +#line 747 "parser.ypp" + { + if (yystack_[1].value.as < expr::ptr > ()->loc().begin.line != yystack_[0].value.as < call::ptr > ()->loc().begin.line) + error(yystack_[0].value.as < call::ptr > ()->loc(), "missing ';' ?"); + + yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); + } +#line 3469 "parser.cpp" break; case 192: // expr_function: expr_identifier "(" expr_arguments ")" -#line 744 "parser.ypp" +#line 757 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::normal); } -#line 3465 "parser.cpp" +#line 3475 "parser.cpp" break; case 193: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 746 "parser.ypp" +#line 759 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, std::move(yystack_[5].value.as < expr_path::ptr > ()), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::normal); } -#line 3471 "parser.cpp" +#line 3481 "parser.cpp" break; case 194: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 748 "parser.ypp" +#line 761 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::thread); } -#line 3477 "parser.cpp" +#line 3487 "parser.cpp" break; case 195: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 750 "parser.ypp" +#line 763 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, std::move(yystack_[5].value.as < expr_path::ptr > ()), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::thread); } -#line 3483 "parser.cpp" +#line 3493 "parser.cpp" break; case 196: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 755 "parser.ypp" +#line 768 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_pointer::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::normal); } -#line 3489 "parser.cpp" +#line 3499 "parser.cpp" break; case 197: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 757 "parser.ypp" +#line 770 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_pointer::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::thread); } -#line 3495 "parser.cpp" +#line 3505 "parser.cpp" break; case 198: // expr_parameters: expr_parameters "," expr_parameters_default -#line 762 "parser.ypp" +#line 775 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = std::move(yystack_[2].value.as < expr_parameters::ptr > ()); yylhs.value.as < expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3501 "parser.cpp" +#line 3511 "parser.cpp" break; case 199: // expr_parameters: expr_parameters "," expr_identifier -#line 764 "parser.ypp" +#line 777 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = std::move(yystack_[2].value.as < expr_parameters::ptr > ()); yylhs.value.as < expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3507 "parser.cpp" +#line 3517 "parser.cpp" break; case 200: // expr_parameters: expr_parameters_default -#line 766 "parser.ypp" +#line 779 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = expr_parameters::make(yylhs.location); yylhs.value.as < expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3513 "parser.cpp" +#line 3523 "parser.cpp" break; case 201: // expr_parameters: expr_identifier -#line 768 "parser.ypp" +#line 781 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = expr_parameters::make(yylhs.location); yylhs.value.as < expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3519 "parser.cpp" +#line 3529 "parser.cpp" break; case 202: // expr_parameters: %empty -#line 770 "parser.ypp" +#line 783 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = expr_parameters::make(yylhs.location); } -#line 3525 "parser.cpp" +#line 3535 "parser.cpp" break; case 203: // expr_parameters_default: expr_identifier "=" expr -#line 775 "parser.ypp" +#line 788 "parser.ypp" { yylhs.value.as < expr::ptr > () = expr_assign::make(yylhs.location, std::move(yystack_[2].value.as < expr_identifier::ptr > ()), std::move(yystack_[0].value.as < expr::ptr > ()), expr_assign::op::eq); } -#line 3531 "parser.cpp" +#line 3541 "parser.cpp" break; case 204: // expr_arguments: expr_arguments_no_empty -#line 780 "parser.ypp" +#line 793 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = std::move(yystack_[0].value.as < expr_arguments::ptr > ()); } -#line 3537 "parser.cpp" +#line 3547 "parser.cpp" break; case 205: // expr_arguments: %empty -#line 782 "parser.ypp" +#line 795 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = expr_arguments::make(yylhs.location); } -#line 3543 "parser.cpp" +#line 3553 "parser.cpp" break; case 206: // expr_arguments_no_empty: expr_arguments "," expr -#line 787 "parser.ypp" +#line 800 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = std::move(yystack_[2].value.as < expr_arguments::ptr > ()); yylhs.value.as < expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3549 "parser.cpp" +#line 3559 "parser.cpp" break; case 207: // expr_arguments_no_empty: expr -#line 789 "parser.ypp" +#line 802 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = expr_arguments::make(yylhs.location); yylhs.value.as < expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3555 "parser.cpp" +#line 3565 "parser.cpp" break; case 208: // expr_getnextarraykey: "getnextarraykey" "(" expr "," expr ")" -#line 794 "parser.ypp" +#line 807 "parser.ypp" { yylhs.value.as < expr_getnextarraykey::ptr > () = expr_getnextarraykey::make(yylhs.location, std::move(yystack_[3].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3561 "parser.cpp" +#line 3571 "parser.cpp" break; case 209: // expr_getfirstarraykey: "getfirstarraykey" "(" expr ")" -#line 799 "parser.ypp" +#line 812 "parser.ypp" { yylhs.value.as < expr_getfirstarraykey::ptr > () = expr_getfirstarraykey::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3567 "parser.cpp" +#line 3577 "parser.cpp" break; case 210: // expr_getdvarcoloralpha: "getdvarcoloralpha" "(" expr ")" -#line 804 "parser.ypp" +#line 817 "parser.ypp" { yylhs.value.as < expr_getdvarcoloralpha::ptr > () = expr_getdvarcoloralpha::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3573 "parser.cpp" +#line 3583 "parser.cpp" break; case 211: // expr_getdvarcolorblue: "getdvarcolorblue" "(" expr ")" -#line 809 "parser.ypp" +#line 822 "parser.ypp" { yylhs.value.as < expr_getdvarcolorblue::ptr > () = expr_getdvarcolorblue::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3579 "parser.cpp" +#line 3589 "parser.cpp" break; case 212: // expr_getdvarcolorgreen: "getdvarcolorgreen" "(" expr ")" -#line 814 "parser.ypp" +#line 827 "parser.ypp" { yylhs.value.as < expr_getdvarcolorgreen::ptr > () = expr_getdvarcolorgreen::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3585 "parser.cpp" +#line 3595 "parser.cpp" break; case 213: // expr_getdvarcolorred: "getdvarcolorred" "(" expr ")" -#line 819 "parser.ypp" +#line 832 "parser.ypp" { yylhs.value.as < expr_getdvarcolorred::ptr > () = expr_getdvarcolorred::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3591 "parser.cpp" +#line 3601 "parser.cpp" break; case 214: // expr_getdvarvector: "getdvarvector" "(" expr ")" -#line 824 "parser.ypp" +#line 837 "parser.ypp" { yylhs.value.as < expr_getdvarvector::ptr > () = expr_getdvarvector::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3597 "parser.cpp" +#line 3607 "parser.cpp" break; case 215: // expr_getdvarfloat: "getdvarfloat" "(" expr ")" -#line 829 "parser.ypp" +#line 842 "parser.ypp" { yylhs.value.as < expr_getdvarfloat::ptr > () = expr_getdvarfloat::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3603 "parser.cpp" +#line 3613 "parser.cpp" break; case 216: // expr_getdvarint: "getdvarint" "(" expr ")" -#line 834 "parser.ypp" +#line 847 "parser.ypp" { yylhs.value.as < expr_getdvarint::ptr > () = expr_getdvarint::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3609 "parser.cpp" +#line 3619 "parser.cpp" break; case 217: // expr_getdvar: "getdvar" "(" expr ")" -#line 839 "parser.ypp" +#line 852 "parser.ypp" { yylhs.value.as < expr_getdvar::ptr > () = expr_getdvar::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3615 "parser.cpp" +#line 3625 "parser.cpp" break; case 218: // expr_gettime: "gettime" "(" ")" -#line 844 "parser.ypp" +#line 857 "parser.ypp" { yylhs.value.as < expr_gettime::ptr > () = expr_gettime::make(yylhs.location); } -#line 3621 "parser.cpp" +#line 3631 "parser.cpp" break; case 219: // expr_abs: "abs" "(" expr ")" -#line 849 "parser.ypp" +#line 862 "parser.ypp" { yylhs.value.as < expr_abs::ptr > () = expr_abs::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3627 "parser.cpp" +#line 3637 "parser.cpp" break; case 220: // expr_vectortoangles: "vectortoangles" "(" expr ")" -#line 854 "parser.ypp" +#line 867 "parser.ypp" { yylhs.value.as < expr_vectortoangles::ptr > () = expr_vectortoangles::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3633 "parser.cpp" +#line 3643 "parser.cpp" break; case 221: // expr_angleclamp180: "angleclamp180" "(" expr ")" -#line 859 "parser.ypp" +#line 872 "parser.ypp" { yylhs.value.as < expr_angleclamp180::ptr > () = expr_angleclamp180::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3639 "parser.cpp" +#line 3649 "parser.cpp" break; case 222: // expr_anglestoforward: "anglestoforward" "(" expr ")" -#line 864 "parser.ypp" +#line 877 "parser.ypp" { yylhs.value.as < expr_anglestoforward::ptr > () = expr_anglestoforward::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3645 "parser.cpp" +#line 3655 "parser.cpp" break; case 223: // expr_anglestoright: "anglestoright" "(" expr ")" -#line 869 "parser.ypp" +#line 882 "parser.ypp" { yylhs.value.as < expr_anglestoright::ptr > () = expr_anglestoright::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3651 "parser.cpp" +#line 3661 "parser.cpp" break; case 224: // expr_anglestoup: "anglestoup" "(" expr ")" -#line 874 "parser.ypp" +#line 887 "parser.ypp" { yylhs.value.as < expr_anglestoup::ptr > () = expr_anglestoup::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3657 "parser.cpp" +#line 3667 "parser.cpp" break; case 225: // expr_vectorscale: "vectorscale" "(" expr "," expr ")" -#line 879 "parser.ypp" +#line 892 "parser.ypp" { yylhs.value.as < expr_vectorscale::ptr > () = expr_vectorscale::make(yylhs.location, std::move(yystack_[3].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3663 "parser.cpp" +#line 3673 "parser.cpp" break; case 226: // expr_isdefined: "isdefined" "(" expr ")" -#line 884 "parser.ypp" +#line 897 "parser.ypp" { yylhs.value.as < expr_isdefined::ptr > () = expr_isdefined::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3669 "parser.cpp" +#line 3679 "parser.cpp" break; case 227: // expr_reference: "::" expr_identifier -#line 889 "parser.ypp" +#line 902 "parser.ypp" { yylhs.value.as < expr_reference::ptr > () = expr_reference::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3675 "parser.cpp" +#line 3685 "parser.cpp" break; case 228: // expr_reference: expr_path "::" expr_identifier -#line 891 "parser.ypp" +#line 904 "parser.ypp" { yylhs.value.as < expr_reference::ptr > () = expr_reference::make(yylhs.location, std::move(yystack_[2].value.as < expr_path::ptr > ()), std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3681 "parser.cpp" +#line 3691 "parser.cpp" break; case 229: // expr_array: expr_object "[" expr "]" -#line 896 "parser.ypp" +#line 909 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3687 "parser.cpp" +#line 3697 "parser.cpp" break; case 230: // expr_array: expr_getdvarvector "[" expr "]" -#line 898 "parser.ypp" +#line 911 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_getdvarvector::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3693 "parser.cpp" +#line 3703 "parser.cpp" break; case 231: // expr_array: expr_vectortoangles "[" expr "]" -#line 900 "parser.ypp" +#line 913 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_vectortoangles::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3699 "parser.cpp" +#line 3709 "parser.cpp" break; case 232: // expr_array: expr_angleclamp180 "[" expr "]" -#line 902 "parser.ypp" +#line 915 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_angleclamp180::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3705 "parser.cpp" +#line 3715 "parser.cpp" break; case 233: // expr_array: expr_anglestoforward "[" expr "]" -#line 904 "parser.ypp" +#line 917 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_anglestoforward::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3711 "parser.cpp" +#line 3721 "parser.cpp" break; case 234: // expr_array: expr_anglestoright "[" expr "]" -#line 906 "parser.ypp" +#line 919 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_anglestoright::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3717 "parser.cpp" +#line 3727 "parser.cpp" break; case 235: // expr_array: expr_anglestoup "[" expr "]" -#line 908 "parser.ypp" +#line 921 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_anglestoup::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3723 "parser.cpp" +#line 3733 "parser.cpp" break; case 236: // expr_array: expr_vectorscale "[" expr "]" -#line 910 "parser.ypp" +#line 923 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr_vectorscale::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3729 "parser.cpp" +#line 3739 "parser.cpp" break; case 237: // expr_field: expr_object "." expr_identifier_nosize -#line 915 "parser.ypp" +#line 928 "parser.ypp" { yylhs.value.as < expr_field::ptr > () = expr_field::make(yylhs.location, std::move(yystack_[2].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3735 "parser.cpp" +#line 3745 "parser.cpp" break; case 238: // expr_size: expr_object "." "size" -#line 920 "parser.ypp" +#line 933 "parser.ypp" { yylhs.value.as < expr_size::ptr > () = expr_size::make(yylhs.location, std::move(yystack_[2].value.as < expr::ptr > ())); } -#line 3741 "parser.cpp" +#line 3751 "parser.cpp" break; case 239: // expr_paren: "(" expr ")" -#line 925 "parser.ypp" +#line 938 "parser.ypp" { yylhs.value.as < expr_paren::ptr > () = expr_paren::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3747 "parser.cpp" +#line 3757 "parser.cpp" break; case 240: // expr_object: expr_call -#line 929 "parser.ypp" +#line 942 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_call::ptr > ()); } -#line 3753 "parser.cpp" +#line 3763 "parser.cpp" break; case 241: // expr_object: expr_method -#line 930 "parser.ypp" +#line 943 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_method::ptr > ()); } -#line 3759 "parser.cpp" +#line 3769 "parser.cpp" break; case 242: // expr_object: expr_array -#line 931 "parser.ypp" +#line 944 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_array::ptr > ()); } -#line 3765 "parser.cpp" +#line 3775 "parser.cpp" break; case 243: // expr_object: expr_field -#line 932 "parser.ypp" +#line 945 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_field::ptr > ()); } -#line 3771 "parser.cpp" +#line 3781 "parser.cpp" break; case 244: // expr_object: expr_game -#line 933 "parser.ypp" +#line 946 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_game::ptr > ()); } -#line 3777 "parser.cpp" +#line 3787 "parser.cpp" break; case 245: // expr_object: expr_self -#line 934 "parser.ypp" +#line 947 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_self::ptr > ()); } -#line 3783 "parser.cpp" +#line 3793 "parser.cpp" break; case 246: // expr_object: expr_anim -#line 935 "parser.ypp" +#line 948 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_anim::ptr > ()); } -#line 3789 "parser.cpp" +#line 3799 "parser.cpp" break; case 247: // expr_object: expr_level -#line 936 "parser.ypp" +#line 949 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_level::ptr > ()); } -#line 3795 "parser.cpp" +#line 3805 "parser.cpp" break; case 248: // expr_object: expr_identifier -#line 937 "parser.ypp" +#line 950 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_identifier::ptr > ()); } -#line 3801 "parser.cpp" +#line 3811 "parser.cpp" break; case 249: // expr_empty_array: "[" "]" -#line 942 "parser.ypp" +#line 955 "parser.ypp" { yylhs.value.as < expr_empty_array::ptr > () = expr_empty_array::make(yylhs.location); } -#line 3807 "parser.cpp" +#line 3817 "parser.cpp" break; case 250: // expr_undefined: "undefined" -#line 947 "parser.ypp" +#line 960 "parser.ypp" { yylhs.value.as < expr_undefined::ptr > () = expr_undefined::make(yylhs.location); } -#line 3813 "parser.cpp" +#line 3823 "parser.cpp" break; case 251: // expr_game: "game" -#line 952 "parser.ypp" +#line 965 "parser.ypp" { yylhs.value.as < expr_game::ptr > () = expr_game::make(yylhs.location); } -#line 3819 "parser.cpp" +#line 3829 "parser.cpp" break; case 252: // expr_self: "self" -#line 957 "parser.ypp" +#line 970 "parser.ypp" { yylhs.value.as < expr_self::ptr > () = expr_self::make(yylhs.location); } -#line 3825 "parser.cpp" +#line 3835 "parser.cpp" break; case 253: // expr_anim: "anim" -#line 962 "parser.ypp" +#line 975 "parser.ypp" { yylhs.value.as < expr_anim::ptr > () = expr_anim::make(yylhs.location); } -#line 3831 "parser.cpp" +#line 3841 "parser.cpp" break; case 254: // expr_level: "level" -#line 967 "parser.ypp" +#line 980 "parser.ypp" { yylhs.value.as < expr_level::ptr > () = expr_level::make(yylhs.location); } -#line 3837 "parser.cpp" +#line 3847 "parser.cpp" break; case 255: // expr_animation: "%" "identifier" -#line 972 "parser.ypp" +#line 985 "parser.ypp" { yylhs.value.as < expr_animation::ptr > () = expr_animation::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3843 "parser.cpp" +#line 3853 "parser.cpp" break; case 256: // expr_animtree: "#animtree" -#line 977 "parser.ypp" +#line 990 "parser.ypp" { yylhs.value.as < expr_animtree::ptr > () = expr_animtree::make(yylhs.location); } -#line 3849 "parser.cpp" +#line 3859 "parser.cpp" break; case 257: // expr_identifier_nosize: "identifier" -#line 982 "parser.ypp" +#line 995 "parser.ypp" { yylhs.value.as < expr_identifier::ptr > () = expr_identifier::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3855 "parser.cpp" +#line 3865 "parser.cpp" break; case 258: // expr_identifier: "identifier" -#line 987 "parser.ypp" +#line 1000 "parser.ypp" { yylhs.value.as < expr_identifier::ptr > () = expr_identifier::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3861 "parser.cpp" +#line 3871 "parser.cpp" break; case 259: // expr_identifier: "size" -#line 989 "parser.ypp" +#line 1002 "parser.ypp" { yylhs.value.as < expr_identifier::ptr > () = expr_identifier::make(yylhs.location, "size"); } -#line 3867 "parser.cpp" +#line 3877 "parser.cpp" break; case 260: // expr_path: "path" "/" "identifier" -#line 994 "parser.ypp" +#line 1007 "parser.ypp" { yylhs.value.as < expr_path::ptr > () = expr_path::make(yylhs.location, yystack_[2].value.as < std::string > () + "/" + yystack_[0].value.as < std::string > ()); } -#line 3873 "parser.cpp" +#line 3883 "parser.cpp" break; case 261: // expr_path: "identifier" -#line 996 "parser.ypp" +#line 1009 "parser.ypp" { yylhs.value.as < expr_path::ptr > () = expr_path::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3879 "parser.cpp" +#line 3889 "parser.cpp" break; case 262: // expr_path: "path" -#line 998 "parser.ypp" +#line 1011 "parser.ypp" { yylhs.value.as < expr_path::ptr > () = expr_path::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3885 "parser.cpp" +#line 3895 "parser.cpp" break; case 263: // expr_istring: "localized string" -#line 1003 "parser.ypp" +#line 1016 "parser.ypp" { yylhs.value.as < expr_istring::ptr > () = expr_istring::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3891 "parser.cpp" +#line 3901 "parser.cpp" break; case 264: // expr_string: "string literal" -#line 1008 "parser.ypp" +#line 1021 "parser.ypp" { yylhs.value.as < expr_string::ptr > () = expr_string::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3897 "parser.cpp" +#line 3907 "parser.cpp" break; case 265: // expr_vector: "(" expr "," expr "," expr ")" -#line 1013 "parser.ypp" +#line 1026 "parser.ypp" { yylhs.value.as < expr_vector::ptr > () = expr_vector::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[3].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3903 "parser.cpp" +#line 3913 "parser.cpp" break; case 266: // expr_hash: "hash string" -#line 1018 "parser.ypp" +#line 1031 "parser.ypp" { yylhs.value.as < expr_hash::ptr > () = expr_hash::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3909 "parser.cpp" +#line 3919 "parser.cpp" break; case 267: // expr_float: "-" "float" -#line 1023 "parser.ypp" +#line 1036 "parser.ypp" { yylhs.value.as < expr_float::ptr > () = expr_float::make(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3915 "parser.cpp" +#line 3925 "parser.cpp" break; case 268: // expr_float: "float" -#line 1025 "parser.ypp" +#line 1038 "parser.ypp" { yylhs.value.as < expr_float::ptr > () = expr_float::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3921 "parser.cpp" +#line 3931 "parser.cpp" break; case 269: // expr_integer: "-" "integer" -#line 1030 "parser.ypp" +#line 1043 "parser.ypp" { yylhs.value.as < expr_integer::ptr > () = expr_integer::make(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3927 "parser.cpp" +#line 3937 "parser.cpp" break; case 270: // expr_integer: "integer" -#line 1032 "parser.ypp" +#line 1045 "parser.ypp" { yylhs.value.as < expr_integer::ptr > () = expr_integer::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3933 "parser.cpp" +#line 3943 "parser.cpp" break; case 271: // expr_false: "false" -#line 1037 "parser.ypp" +#line 1050 "parser.ypp" { yylhs.value.as < expr_false::ptr > () = expr_false::make(yylhs.location); } -#line 3939 "parser.cpp" +#line 3949 "parser.cpp" break; case 272: // expr_true: "true" -#line 1042 "parser.ypp" +#line 1055 "parser.ypp" { yylhs.value.as < expr_true::ptr > () = expr_true::make(yylhs.location); } -#line 3945 "parser.cpp" +#line 3955 "parser.cpp" break; -#line 3949 "parser.cpp" +#line 3959 "parser.cpp" default: break; @@ -5423,15 +5433,15 @@ namespace xsk { namespace arc { 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 713, 718, 720, 722, 724, 729, 734, 735, - 738, 739, 743, 745, 747, 749, 754, 756, 761, 763, - 765, 767, 770, 774, 779, 782, 786, 788, 793, 798, - 803, 808, 813, 818, 823, 828, 833, 838, 843, 848, - 853, 858, 863, 868, 873, 878, 883, 888, 890, 895, - 897, 899, 901, 903, 905, 907, 909, 914, 919, 924, - 929, 930, 931, 932, 933, 934, 935, 936, 937, 941, - 946, 951, 956, 961, 966, 971, 976, 981, 986, 988, - 993, 995, 997, 1002, 1007, 1012, 1017, 1022, 1024, 1029, - 1031, 1036, 1041 + 739, 746, 756, 758, 760, 762, 767, 769, 774, 776, + 778, 780, 783, 787, 792, 795, 799, 801, 806, 811, + 816, 821, 826, 831, 836, 841, 846, 851, 856, 861, + 866, 871, 876, 881, 886, 891, 896, 901, 903, 908, + 910, 912, 914, 916, 918, 920, 922, 927, 932, 937, + 942, 943, 944, 945, 946, 947, 948, 949, 950, 954, + 959, 964, 969, 974, 979, 984, 989, 994, 999, 1001, + 1006, 1008, 1010, 1015, 1020, 1025, 1030, 1035, 1037, 1042, + 1044, 1049, 1054 }; void @@ -5464,9 +5474,9 @@ namespace xsk { namespace arc { #line 13 "parser.ypp" } } // xsk::arc -#line 5474 "parser.cpp" +#line 5484 "parser.cpp" -#line 1045 "parser.ypp" +#line 1058 "parser.ypp" namespace xsk::arc diff --git a/src/gsc/parser.cpp b/src/gsc/parser.cpp index 9f29c884..30d6624a 100644 --- a/src/gsc/parser.cpp +++ b/src/gsc/parser.cpp @@ -52,10 +52,6 @@ namespace xsk::gsc // Take the name prefix into account. #define yylex GSClex - - - - #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS @@ -3221,412 +3217,422 @@ namespace xsk { namespace gsc { break; case 183: // expr_method: expr_object expr_function -#line 732 "parser.ypp" - { yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); } -#line 3230 "parser.cpp" +#line 734 "parser.ypp" + { + if (yystack_[1].value.as < expr::ptr > ()->loc().begin.line != yystack_[0].value.as < call::ptr > ()->loc().begin.line) + error(yystack_[0].value.as < call::ptr > ()->loc(), "missing ';' ?"); + + yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); + } +#line 3235 "parser.cpp" break; case 184: // expr_method: expr_object expr_pointer -#line 733 "parser.ypp" - { yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); } -#line 3236 "parser.cpp" +#line 741 "parser.ypp" + { + if (yystack_[1].value.as < expr::ptr > ()->loc().begin.line != yystack_[0].value.as < call::ptr > ()->loc().begin.line) + error(yystack_[0].value.as < call::ptr > ()->loc(), "missing ';' ?"); + + yylhs.value.as < expr_method::ptr > () = expr_method::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < call::ptr > ())); + } +#line 3246 "parser.cpp" break; case 185: // expr_function: expr_identifier "(" expr_arguments ")" -#line 738 "parser.ypp" +#line 751 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::normal); } -#line 3242 "parser.cpp" +#line 3252 "parser.cpp" break; case 186: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 740 "parser.ypp" +#line 753 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, std::move(yystack_[5].value.as < expr_path::ptr > ()), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::normal); } -#line 3248 "parser.cpp" +#line 3258 "parser.cpp" break; case 187: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 742 "parser.ypp" +#line 755 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::thread); } -#line 3254 "parser.cpp" +#line 3264 "parser.cpp" break; case 188: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 744 "parser.ypp" +#line 757 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, std::move(yystack_[5].value.as < expr_path::ptr > ()), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::thread); } -#line 3260 "parser.cpp" +#line 3270 "parser.cpp" break; case 189: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 746 "parser.ypp" +#line 759 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::childthread); } -#line 3266 "parser.cpp" +#line 3276 "parser.cpp" break; case 190: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 748 "parser.ypp" +#line 761 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_function::make(yylhs.location, std::move(yystack_[5].value.as < expr_path::ptr > ()), std::move(yystack_[3].value.as < expr_identifier::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::childthread); } -#line 3272 "parser.cpp" +#line 3282 "parser.cpp" break; case 191: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 753 "parser.ypp" +#line 766 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_pointer::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::normal); } -#line 3278 "parser.cpp" +#line 3288 "parser.cpp" break; case 192: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 755 "parser.ypp" +#line 768 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_pointer::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::thread); } -#line 3284 "parser.cpp" +#line 3294 "parser.cpp" break; case 193: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 757 "parser.ypp" +#line 770 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_pointer::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::childthread); } -#line 3290 "parser.cpp" +#line 3300 "parser.cpp" break; case 194: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 759 "parser.ypp" +#line 772 "parser.ypp" { yylhs.value.as < call::ptr > () = expr_pointer::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr_arguments::ptr > ()), call::mode::builtin); } -#line 3296 "parser.cpp" +#line 3306 "parser.cpp" break; case 195: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 764 "parser.ypp" +#line 777 "parser.ypp" { yylhs.value.as < expr_add_array::ptr > () = expr_add_array::make(yylhs.location, std::move(yystack_[1].value.as < expr_arguments::ptr > ())); } -#line 3302 "parser.cpp" +#line 3312 "parser.cpp" break; case 196: // expr_parameters: expr_parameters "," expr_identifier -#line 769 "parser.ypp" +#line 782 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = std::move(yystack_[2].value.as < expr_parameters::ptr > ()); yylhs.value.as < expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3308 "parser.cpp" +#line 3318 "parser.cpp" break; case 197: // expr_parameters: expr_identifier -#line 771 "parser.ypp" +#line 784 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = expr_parameters::make(yylhs.location); yylhs.value.as < expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3314 "parser.cpp" +#line 3324 "parser.cpp" break; case 198: // expr_parameters: %empty -#line 773 "parser.ypp" +#line 786 "parser.ypp" { yylhs.value.as < expr_parameters::ptr > () = expr_parameters::make(yylhs.location); } -#line 3320 "parser.cpp" +#line 3330 "parser.cpp" break; case 199: // expr_arguments: expr_arguments_no_empty -#line 778 "parser.ypp" +#line 791 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = std::move(yystack_[0].value.as < expr_arguments::ptr > ()); } -#line 3326 "parser.cpp" +#line 3336 "parser.cpp" break; case 200: // expr_arguments: %empty -#line 780 "parser.ypp" +#line 793 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = expr_arguments::make(yylhs.location); } -#line 3332 "parser.cpp" +#line 3342 "parser.cpp" break; case 201: // expr_arguments_no_empty: expr_arguments "," expr -#line 785 "parser.ypp" +#line 798 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = std::move(yystack_[2].value.as < expr_arguments::ptr > ()); yylhs.value.as < expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3338 "parser.cpp" +#line 3348 "parser.cpp" break; case 202: // expr_arguments_no_empty: expr -#line 787 "parser.ypp" +#line 800 "parser.ypp" { yylhs.value.as < expr_arguments::ptr > () = expr_arguments::make(yylhs.location); yylhs.value.as < expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3344 "parser.cpp" +#line 3354 "parser.cpp" break; case 203: // expr_isdefined: "isdefined" "(" expr ")" -#line 792 "parser.ypp" +#line 805 "parser.ypp" { yylhs.value.as < expr_isdefined::ptr > () = expr_isdefined::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3350 "parser.cpp" +#line 3360 "parser.cpp" break; case 204: // expr_istrue: "istrue" "(" expr ")" -#line 797 "parser.ypp" +#line 810 "parser.ypp" { yylhs.value.as < expr_istrue::ptr > () = expr_istrue::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3356 "parser.cpp" +#line 3366 "parser.cpp" break; case 205: // expr_reference: "::" expr_identifier -#line 802 "parser.ypp" +#line 815 "parser.ypp" { yylhs.value.as < expr_reference::ptr > () = expr_reference::make(yylhs.location, expr_path::make(yylhs.location), std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3362 "parser.cpp" +#line 3372 "parser.cpp" break; case 206: // expr_reference: expr_path "::" expr_identifier -#line 804 "parser.ypp" +#line 817 "parser.ypp" { yylhs.value.as < expr_reference::ptr > () = expr_reference::make(yylhs.location, std::move(yystack_[2].value.as < expr_path::ptr > ()), std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3368 "parser.cpp" +#line 3378 "parser.cpp" break; case 207: // expr_tuple: "[" expr_tuple_arguments "]" -#line 809 "parser.ypp" +#line 822 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[1].value.as < expr_tuple::ptr > ()); yylhs.value.as < expr::ptr > ()->as().temp = expr_identifier::make(yylhs.value.as < expr::ptr > ()->loc(), fmt::format("_temp_{}", ++index)); } -#line 3377 "parser.cpp" +#line 3387 "parser.cpp" break; case 208: // expr_tuple_arguments: expr_tuple_arguments "," expr_tuple_types -#line 817 "parser.ypp" +#line 830 "parser.ypp" { yylhs.value.as < expr_tuple::ptr > () = std::move(yystack_[2].value.as < expr_tuple::ptr > ()); yylhs.value.as < expr_tuple::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3383 "parser.cpp" +#line 3393 "parser.cpp" break; case 209: // expr_tuple_arguments: expr_tuple_types -#line 819 "parser.ypp" +#line 832 "parser.ypp" { yylhs.value.as < expr_tuple::ptr > () = expr_tuple::make(yylhs.location); yylhs.value.as < expr_tuple::ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr::ptr > ())); } -#line 3389 "parser.cpp" +#line 3399 "parser.cpp" break; case 210: // expr_tuple_types: expr_array -#line 823 "parser.ypp" +#line 836 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_array::ptr > ()); } -#line 3395 "parser.cpp" +#line 3405 "parser.cpp" break; case 211: // expr_tuple_types: expr_field -#line 824 "parser.ypp" +#line 837 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_field::ptr > ()); } -#line 3401 "parser.cpp" +#line 3411 "parser.cpp" break; case 212: // expr_tuple_types: expr_identifier -#line 825 "parser.ypp" +#line 838 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_identifier::ptr > ()); } -#line 3407 "parser.cpp" +#line 3417 "parser.cpp" break; case 213: // expr_array: expr_object "[" expr "]" -#line 830 "parser.ypp" +#line 843 "parser.ypp" { yylhs.value.as < expr_array::ptr > () = expr_array::make(yylhs.location, std::move(yystack_[3].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3413 "parser.cpp" +#line 3423 "parser.cpp" break; case 214: // expr_field: expr_object "." expr_identifier_nosize -#line 835 "parser.ypp" +#line 848 "parser.ypp" { yylhs.value.as < expr_field::ptr > () = expr_field::make(yylhs.location, std::move(yystack_[2].value.as < expr::ptr > ()), std::move(yystack_[0].value.as < expr_identifier::ptr > ())); } -#line 3419 "parser.cpp" +#line 3429 "parser.cpp" break; case 215: // expr_size: expr_object "." "size" -#line 840 "parser.ypp" +#line 853 "parser.ypp" { yylhs.value.as < expr_size::ptr > () = expr_size::make(yylhs.location, std::move(yystack_[2].value.as < expr::ptr > ())); } -#line 3425 "parser.cpp" +#line 3435 "parser.cpp" break; case 216: // expr_paren: "(" expr ")" -#line 845 "parser.ypp" +#line 858 "parser.ypp" { yylhs.value.as < expr_paren::ptr > () = expr_paren::make(yylhs.location, std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3431 "parser.cpp" +#line 3441 "parser.cpp" break; case 217: // expr_object: expr_call -#line 849 "parser.ypp" +#line 862 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_call::ptr > ()); } -#line 3437 "parser.cpp" +#line 3447 "parser.cpp" break; case 218: // expr_object: expr_method -#line 850 "parser.ypp" +#line 863 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_method::ptr > ()); } -#line 3443 "parser.cpp" +#line 3453 "parser.cpp" break; case 219: // expr_object: expr_array -#line 851 "parser.ypp" +#line 864 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_array::ptr > ()); } -#line 3449 "parser.cpp" +#line 3459 "parser.cpp" break; case 220: // expr_object: expr_field -#line 852 "parser.ypp" +#line 865 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_field::ptr > ()); } -#line 3455 "parser.cpp" +#line 3465 "parser.cpp" break; case 221: // expr_object: expr_game -#line 853 "parser.ypp" +#line 866 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_game::ptr > ()); } -#line 3461 "parser.cpp" +#line 3471 "parser.cpp" break; case 222: // expr_object: expr_self -#line 854 "parser.ypp" +#line 867 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_self::ptr > ()); } -#line 3467 "parser.cpp" +#line 3477 "parser.cpp" break; case 223: // expr_object: expr_anim -#line 855 "parser.ypp" +#line 868 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_anim::ptr > ()); } -#line 3473 "parser.cpp" +#line 3483 "parser.cpp" break; case 224: // expr_object: expr_level -#line 856 "parser.ypp" +#line 869 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_level::ptr > ()); } -#line 3479 "parser.cpp" +#line 3489 "parser.cpp" break; case 225: // expr_object: expr_identifier -#line 857 "parser.ypp" +#line 870 "parser.ypp" { yylhs.value.as < expr::ptr > () = std::move(yystack_[0].value.as < expr_identifier::ptr > ()); } -#line 3485 "parser.cpp" +#line 3495 "parser.cpp" break; case 226: // expr_thisthread: "thisthread" -#line 862 "parser.ypp" +#line 875 "parser.ypp" { yylhs.value.as < expr_thisthread::ptr > () = expr_thisthread::make(yylhs.location); } -#line 3491 "parser.cpp" +#line 3501 "parser.cpp" break; case 227: // expr_empty_array: "[" "]" -#line 867 "parser.ypp" +#line 880 "parser.ypp" { yylhs.value.as < expr_empty_array::ptr > () = expr_empty_array::make(yylhs.location); } -#line 3497 "parser.cpp" +#line 3507 "parser.cpp" break; case 228: // expr_undefined: "undefined" -#line 872 "parser.ypp" +#line 885 "parser.ypp" { yylhs.value.as < expr_undefined::ptr > () = expr_undefined::make(yylhs.location); } -#line 3503 "parser.cpp" +#line 3513 "parser.cpp" break; case 229: // expr_game: "game" -#line 877 "parser.ypp" +#line 890 "parser.ypp" { yylhs.value.as < expr_game::ptr > () = expr_game::make(yylhs.location); } -#line 3509 "parser.cpp" +#line 3519 "parser.cpp" break; case 230: // expr_self: "self" -#line 882 "parser.ypp" +#line 895 "parser.ypp" { yylhs.value.as < expr_self::ptr > () = expr_self::make(yylhs.location); } -#line 3515 "parser.cpp" +#line 3525 "parser.cpp" break; case 231: // expr_anim: "anim" -#line 887 "parser.ypp" +#line 900 "parser.ypp" { yylhs.value.as < expr_anim::ptr > () = expr_anim::make(yylhs.location); } -#line 3521 "parser.cpp" +#line 3531 "parser.cpp" break; case 232: // expr_level: "level" -#line 892 "parser.ypp" +#line 905 "parser.ypp" { yylhs.value.as < expr_level::ptr > () = expr_level::make(yylhs.location); } -#line 3527 "parser.cpp" +#line 3537 "parser.cpp" break; case 233: // expr_animation: "%" "identifier" -#line 897 "parser.ypp" +#line 910 "parser.ypp" { yylhs.value.as < expr_animation::ptr > () = expr_animation::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3533 "parser.cpp" +#line 3543 "parser.cpp" break; case 234: // expr_animtree: "#animtree" -#line 902 "parser.ypp" +#line 915 "parser.ypp" { yylhs.value.as < expr_animtree::ptr > () = expr_animtree::make(yylhs.location); } -#line 3539 "parser.cpp" +#line 3549 "parser.cpp" break; case 235: // expr_identifier_nosize: "identifier" -#line 907 "parser.ypp" +#line 920 "parser.ypp" { yylhs.value.as < expr_identifier::ptr > () = expr_identifier::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3545 "parser.cpp" +#line 3555 "parser.cpp" break; case 236: // expr_identifier: "identifier" -#line 912 "parser.ypp" +#line 925 "parser.ypp" { yylhs.value.as < expr_identifier::ptr > () = expr_identifier::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3551 "parser.cpp" +#line 3561 "parser.cpp" break; case 237: // expr_identifier: "size" -#line 914 "parser.ypp" +#line 927 "parser.ypp" { yylhs.value.as < expr_identifier::ptr > () = expr_identifier::make(yylhs.location, "size"); } -#line 3557 "parser.cpp" +#line 3567 "parser.cpp" break; case 238: // expr_path: "path" "/" "identifier" -#line 919 "parser.ypp" +#line 932 "parser.ypp" { yylhs.value.as < expr_path::ptr > () = expr_path::make(yylhs.location, yystack_[2].value.as < std::string > () + "/" + yystack_[0].value.as < std::string > ()); } -#line 3563 "parser.cpp" +#line 3573 "parser.cpp" break; case 239: // expr_path: "identifier" -#line 921 "parser.ypp" +#line 934 "parser.ypp" { yylhs.value.as < expr_path::ptr > () = expr_path::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3569 "parser.cpp" +#line 3579 "parser.cpp" break; case 240: // expr_path: "path" -#line 923 "parser.ypp" +#line 936 "parser.ypp" { yylhs.value.as < expr_path::ptr > () = expr_path::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3575 "parser.cpp" +#line 3585 "parser.cpp" break; case 241: // expr_istring: "localized string" -#line 928 "parser.ypp" +#line 941 "parser.ypp" { yylhs.value.as < expr_istring::ptr > () = expr_istring::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3581 "parser.cpp" +#line 3591 "parser.cpp" break; case 242: // expr_string: "string literal" -#line 933 "parser.ypp" +#line 946 "parser.ypp" { yylhs.value.as < expr_string::ptr > () = expr_string::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3587 "parser.cpp" +#line 3597 "parser.cpp" break; case 243: // expr_vector: "(" expr "," expr "," expr ")" -#line 938 "parser.ypp" +#line 951 "parser.ypp" { yylhs.value.as < expr_vector::ptr > () = expr_vector::make(yylhs.location, std::move(yystack_[5].value.as < expr::ptr > ()), std::move(yystack_[3].value.as < expr::ptr > ()), std::move(yystack_[1].value.as < expr::ptr > ())); } -#line 3593 "parser.cpp" +#line 3603 "parser.cpp" break; case 244: // expr_float: "-" "float" -#line 943 "parser.ypp" +#line 956 "parser.ypp" { yylhs.value.as < expr_float::ptr > () = expr_float::make(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3599 "parser.cpp" +#line 3609 "parser.cpp" break; case 245: // expr_float: "float" -#line 945 "parser.ypp" +#line 958 "parser.ypp" { yylhs.value.as < expr_float::ptr > () = expr_float::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3605 "parser.cpp" +#line 3615 "parser.cpp" break; case 246: // expr_integer: "-" "integer" -#line 950 "parser.ypp" +#line 963 "parser.ypp" { yylhs.value.as < expr_integer::ptr > () = expr_integer::make(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3611 "parser.cpp" +#line 3621 "parser.cpp" break; case 247: // expr_integer: "integer" -#line 952 "parser.ypp" +#line 965 "parser.ypp" { yylhs.value.as < expr_integer::ptr > () = expr_integer::make(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3617 "parser.cpp" +#line 3627 "parser.cpp" break; case 248: // expr_false: "false" -#line 957 "parser.ypp" +#line 970 "parser.ypp" { yylhs.value.as < expr_false::ptr > () = expr_false::make(yylhs.location); } -#line 3623 "parser.cpp" +#line 3633 "parser.cpp" break; case 249: // expr_true: "true" -#line 962 "parser.ypp" +#line 975 "parser.ypp" { yylhs.value.as < expr_true::ptr > () = expr_true::make(yylhs.location); } -#line 3629 "parser.cpp" +#line 3639 "parser.cpp" break; -#line 3633 "parser.cpp" +#line 3643 "parser.cpp" default: break; @@ -4893,13 +4899,13 @@ namespace xsk { namespace gsc { 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 707, 712, 714, 716, 718, - 723, 728, 729, 732, 733, 737, 739, 741, 743, 745, - 747, 752, 754, 756, 758, 763, 768, 770, 773, 777, - 780, 784, 786, 791, 796, 801, 803, 808, 816, 818, - 823, 824, 825, 829, 834, 839, 844, 849, 850, 851, - 852, 853, 854, 855, 856, 857, 861, 866, 871, 876, - 881, 886, 891, 896, 901, 906, 911, 913, 918, 920, - 922, 927, 932, 937, 942, 944, 949, 951, 956, 961 + 723, 728, 729, 733, 740, 750, 752, 754, 756, 758, + 760, 765, 767, 769, 771, 776, 781, 783, 786, 790, + 793, 797, 799, 804, 809, 814, 816, 821, 829, 831, + 836, 837, 838, 842, 847, 852, 857, 862, 863, 864, + 865, 866, 867, 868, 869, 870, 874, 879, 884, 889, + 894, 899, 904, 909, 914, 919, 924, 926, 931, 933, + 935, 940, 945, 950, 955, 957, 962, 964, 969, 974 }; void @@ -4932,9 +4938,9 @@ namespace xsk { namespace gsc { #line 13 "parser.ypp" } } // xsk::gsc -#line 4939 "parser.cpp" +#line 4949 "parser.cpp" -#line 965 "parser.ypp" +#line 978 "parser.ypp" namespace xsk::gsc