]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3502] Checkpoint before final regen
authorFrancis Dupont <fdupont@isc.org>
Wed, 7 Aug 2024 19:49:16 +0000 (21:49 +0200)
committerFrancis Dupont <fdupont@isc.org>
Wed, 21 Aug 2024 13:12:38 +0000 (15:12 +0200)
src/lib/eval/parser.cc
src/lib/eval/parser.yy
src/lib/eval/tests/context_unittest.cc

index c40bbf75eca48653625a1ec18297e8f64d6ed267..cc7c1e825ac94abe81f6476ad33aeb6dbf1a4115 100644 (file)
@@ -864,7 +864,8 @@ namespace isc { namespace eval {
   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);
                 }
@@ -894,7 +895,8 @@ namespace isc { namespace eval {
   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);
                 }
@@ -1269,7 +1271,8 @@ namespace isc { namespace eval {
   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));
@@ -1283,7 +1286,8 @@ namespace isc { namespace eval {
   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);
                   }
index 7fe9c5ea54faf33a72a520dd869c996027862d63..56eee14487348c5a9e202d0c580596132bd40b51 100644 (file)
@@ -163,7 +163,8 @@ bool_expr : "(" bool_expr ")"
                     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);
                 }
@@ -179,7 +180,8 @@ bool_expr : "(" bool_expr ")"
                     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);
                 }
@@ -437,7 +439,8 @@ string_expr : STRING
                       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));
@@ -445,7 +448,8 @@ string_expr : STRING
                       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);
                   }
index 52010bf576683b46c2c8bfb4942516cc3b79eeea..03210a71cc2aa95c79505c9f87a6e8cba72c97d8 100644 (file)
@@ -1441,7 +1441,7 @@ TEST_F(EvalContextTest, logicalOps) {
     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);
@@ -1492,10 +1492,12 @@ TEST_F(EvalContextTest, logicalPrecedence) {
         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);
 }
 
@@ -1745,7 +1747,7 @@ TEST_F(EvalContextTest, plusStrictIfElse) {
     checkTokenString(tmp6, "");
     checkTokenIfElse(tmp7);
     checkTokenConcat(tmp8);
-    checkTokenConcat(tmp9, "foobar");
+    checkTokenString(tmp9, "foobar");
     checkTokenEq(tmp10);
 }
 
@@ -1779,7 +1781,7 @@ TEST_F(EvalContextTest, plusIfElse) {
     checkTokenPopAndBranchFalse(tmp5, 1);
     checkTokenString(tmp6, "bar");
     checkTokenBranch(tmp7, 2);
-    checkTokenLabel(tmp8, 1)
+    checkTokenLabel(tmp8, 1);
     checkTokenString(tmp9, "");
     checkTokenLabel(tmp10, 2);
     checkTokenConcat(tmp11);