case 8: // bool_expr: bool_expr "and" $@1 bool_expr
#line 165 "parser.yy"
{
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
}
case 11: // bool_expr: bool_expr "or" $@2 bool_expr
#line 181 "parser.yy"
{
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
}
case 41: // $@4: %empty
#line 439 "parser.yy"
{
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
unsigned target2 = ++ctx.label;
ctx.labels.push_back(target2);
TokenPtr branch(new TokenBranch(target2));
case 42: // string_expr: "ifelse" "(" bool_expr "," $@3 string_expr "," $@4 string_expr ")"
#line 447 "parser.yy"
{
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
}
TokenPtr pobf(new TokenPopOrBranchFalse(target));
ctx.expression.push_back(pobf);
} bool_expr {
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
}
TokenPtr pobt(new TokenPopOrBranchTrue(target));
ctx.expression.push_back(pobt);
} bool_expr {
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
}
TokenPtr pabf(new TokenPopAndBranchFalse(target));
ctx.expression.push_back(pabf);
} string_expr "," {
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
unsigned target2 = ++ctx.label;
ctx.labels.push_back(target2);
TokenPtr branch(new TokenBranch(target2));
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
} string_expr ")" {
- unsigned target = ctx.labels.pop_back();
+ unsigned target = ctx.labels.back();
+ ctx.labels.pop_back();
TokenPtr lab(new TokenLabel(target));
ctx.expression.push_back(lab);
}
EXPECT_NO_THROW(parsed_ =
evalo.parseString("option[123].exists or option[123].exists"));
EXPECT_TRUE(parsed_);
- ASSERT_EQ(3, evalo.expression.size());
+ ASSERT_EQ(4, evalo.expression.size());
token = evalo.expression.at(1);
checkTokenPopOrBranchTrue(token, 1);
token = evala.expression.at(3);
evaloa.parseString("option[123].exists or option[123].exists "
"and option[123].exists"));
EXPECT_TRUE(parsed_);
- ASSERT_EQ(5, evaloa.expression.size());
- token = evaloa.expression.at(2);
- checkTokenPopOrBranchFalse(token, 1);
- token = evaloa.expression.at(4);
+ ASSERT_EQ(7, evaloa.expression.size());
+ token = evaloa.expression.at(1);
+ checkTokenPopOrBranchTrue(token, 1);
+ token = evaloa.expression.at(5);
+ checkTokenLabel(token, 2);
+ token = evaloa.expression.at(6);
checkTokenLabel(token, 1);
}
checkTokenString(tmp6, "");
checkTokenIfElse(tmp7);
checkTokenConcat(tmp8);
- checkTokenConcat(tmp9, "foobar");
+ checkTokenString(tmp9, "foobar");
checkTokenEq(tmp10);
}
checkTokenPopAndBranchFalse(tmp5, 1);
checkTokenString(tmp6, "bar");
checkTokenBranch(tmp7, 2);
- checkTokenLabel(tmp8, 1)
+ checkTokenLabel(tmp8, 1);
checkTokenString(tmp9, "");
checkTokenLabel(tmp10, 2);
checkTokenConcat(tmp11);