fix(arc): refactor regressions & func objects (#123)

This commit is contained in:
Xenxo Espasandín 2023-05-15 17:33:52 +02:00 committed by GitHub
parent 806b5249fa
commit 5a144a3ba7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 379 additions and 339 deletions

View File

@ -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

View File

@ -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

View File

@ -207,7 +207,7 @@ auto assembler::assemble(assembly const& data) -> buffer
if (ctx_->props() & props::size64)
script_.write<u32>(head.name);
else
script_.write<u32>(head.name);
script_.write<u16>(static_cast<u16>(head.name));
script_.write<u16>(head.stringtablefixup_count);
script_.write<u16>(head.exports_count);

View File

@ -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
{

View File

@ -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

View File

@ -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<expr_tuple>().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