diff --git a/lib/config/config_parser.yy b/lib/config/config_parser.yy index ad2fcff99..eb8a046d3 100644 --- a/lib/config/config_parser.yy +++ b/lib/config/config_parser.yy @@ -641,6 +641,18 @@ lterm: type $$ = new SetExpression(MakeIndexer(ScopeGlobal, $2), OpSetLiteral, $4); free($2); } + | T_VAR rterm + { + Expression *expr = $2; + BindToScope(expr, ScopeLocal); + $$ = new SetExpression(expr, OpSetLiteral, MakeLiteral(), DebugInfoRange(@1, @2)); + } + | T_VAR rterm combined_set_op rterm + { + Expression *expr = $2; + BindToScope(expr, ScopeLocal); + $$ = new SetExpression(expr, $3, $4, DebugInfoRange(@1, @4)); + } | rterm { $$ = $1; @@ -752,18 +764,6 @@ rterm: T_STRING { $$ = new GetScopeExpression(ScopeThis); } - | T_VAR rterm - { - Expression *expr = $2; - BindToScope(expr, ScopeLocal); - $$ = new SetExpression(expr, OpSetLiteral, MakeLiteral(), DebugInfoRange(@1, @2)); - } - | T_VAR rterm combined_set_op rterm - { - Expression *expr = $2; - BindToScope(expr, ScopeLocal); - $$ = new SetExpression(expr, $3, $4, DebugInfoRange(@1, @4)); - } | rterm_array { $$ = $1; diff --git a/test/config-ops.cpp b/test/config-ops.cpp index 6b0ec3953..ca74749cf 100644 --- a/test/config-ops.cpp +++ b/test/config-ops.cpp @@ -299,6 +299,14 @@ BOOST_AUTO_TEST_CASE(advanced) expr = ConfigCompiler::CompileText("", "3 = 3"); BOOST_CHECK_THROW(expr->Evaluate(frame), ScriptError); delete expr; + + expr = ConfigCompiler::CompileText("", "var e; e"); + BOOST_CHECK(expr->Evaluate(frame).IsEmpty()); + delete expr; + + expr = ConfigCompiler::CompileText("", "var e = 3; e"); + BOOST_CHECK(expr->Evaluate(frame) == 3); + delete expr; } BOOST_AUTO_TEST_SUITE_END()