]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#150,!385] regen bison
authorFrancis Dupont <fdupont@isc.org>
Fri, 14 Jun 2019 18:53:54 +0000 (18:53 +0000)
committerTomek Mrugalski <tomasz@isc.org>
Wed, 14 Aug 2019 08:13:02 +0000 (10:13 +0200)
src/lib/eval/parser.cc
src/lib/eval/parser.h

index 890a4706eb8333107f25ccd951b39d83ae93547f..7406d17dfba6d225ac9c311bb2bf3efed1996f45 100644 (file)
@@ -251,27 +251,27 @@ namespace isc { namespace eval {
   {
     switch (that.type_get ())
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.YY_MOVE_OR_COPY< TokenOption::RepresentationType > (YY_MOVE (that.value));
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.YY_MOVE_OR_COPY< TokenPkt4::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.YY_MOVE_OR_COPY< TokenPkt6::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.YY_MOVE_OR_COPY< TokenPkt::MetadataType > (YY_MOVE (that.value));
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.YY_MOVE_OR_COPY< TokenRelay6Field::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.YY_MOVE_OR_COPY< int8_t > (YY_MOVE (that.value));
         break;
 
@@ -284,11 +284,12 @@ namespace isc { namespace eval {
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.YY_MOVE_OR_COPY< uint16_t > (YY_MOVE (that.value));
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.YY_MOVE_OR_COPY< uint32_t > (YY_MOVE (that.value));
         break;
 
@@ -307,27 +308,27 @@ namespace isc { namespace eval {
   {
     switch (that.type_get ())
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.move< TokenOption::RepresentationType > (YY_MOVE (that.value));
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.move< TokenPkt4::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.move< TokenPkt6::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.move< TokenPkt::MetadataType > (YY_MOVE (that.value));
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.move< TokenRelay6Field::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.move< int8_t > (YY_MOVE (that.value));
         break;
 
@@ -340,11 +341,12 @@ namespace isc { namespace eval {
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.move< uint16_t > (YY_MOVE (that.value));
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.move< uint32_t > (YY_MOVE (that.value));
         break;
 
@@ -363,27 +365,27 @@ namespace isc { namespace eval {
     state = that.state;
     switch (that.type_get ())
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.move< TokenOption::RepresentationType > (that.value);
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.move< TokenPkt4::FieldType > (that.value);
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.move< TokenPkt6::FieldType > (that.value);
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.move< TokenPkt::MetadataType > (that.value);
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.move< TokenRelay6Field::FieldType > (that.value);
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.move< int8_t > (that.value);
         break;
 
@@ -396,11 +398,12 @@ namespace isc { namespace eval {
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.move< uint16_t > (that.value);
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.move< uint32_t > (that.value);
         break;
 
@@ -444,87 +447,93 @@ namespace isc { namespace eval {
     switch (yytype)
     {
       case 50: // "constant string"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < std::string > (); }
-#line 450 "parser.cc"
+#line 453 "parser.cc"
         break;
 
       case 51: // "integer"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < std::string > (); }
-#line 456 "parser.cc"
+#line 459 "parser.cc"
         break;
 
       case 52: // "constant hexstring"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < std::string > (); }
-#line 462 "parser.cc"
+#line 465 "parser.cc"
         break;
 
       case 53: // "option name"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < std::string > (); }
-#line 468 "parser.cc"
+#line 471 "parser.cc"
         break;
 
       case 54: // "ip address"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < std::string > (); }
-#line 474 "parser.cc"
+#line 477 "parser.cc"
         break;
 
       case 60: // integer_expr
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < uint32_t > (); }
-#line 480 "parser.cc"
+#line 483 "parser.cc"
         break;
 
       case 61: // option_code
-#line 111 "parser.yy"
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < uint16_t > (); }
-#line 486 "parser.cc"
+#line 489 "parser.cc"
         break;
 
-      case 62: // option_repr_type
-#line 111 "parser.yy"
+      case 62: // sub_option_code
+#line 112 "parser.yy"
+        { yyoutput << yysym.value.template as < uint16_t > (); }
+#line 495 "parser.cc"
+        break;
+
+      case 63: // option_repr_type
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < TokenOption::RepresentationType > (); }
-#line 492 "parser.cc"
+#line 501 "parser.cc"
         break;
 
-      case 63: // nest_level
-#line 111 "parser.yy"
+      case 64: // nest_level
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < int8_t > (); }
-#line 498 "parser.cc"
+#line 507 "parser.cc"
         break;
 
-      case 64: // pkt_metadata
-#line 111 "parser.yy"
+      case 65: // pkt_metadata
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < TokenPkt::MetadataType > (); }
-#line 504 "parser.cc"
+#line 513 "parser.cc"
         break;
 
-      case 65: // enterprise_id
-#line 111 "parser.yy"
+      case 66: // enterprise_id
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < uint32_t > (); }
-#line 510 "parser.cc"
+#line 519 "parser.cc"
         break;
 
-      case 66: // pkt4_field
-#line 111 "parser.yy"
+      case 67: // pkt4_field
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < TokenPkt4::FieldType > (); }
-#line 516 "parser.cc"
+#line 525 "parser.cc"
         break;
 
-      case 67: // pkt6_field
-#line 111 "parser.yy"
+      case 68: // pkt6_field
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < TokenPkt6::FieldType > (); }
-#line 522 "parser.cc"
+#line 531 "parser.cc"
         break;
 
-      case 68: // relay6_field
-#line 111 "parser.yy"
+      case 69: // relay6_field
+#line 112 "parser.yy"
         { yyoutput << yysym.value.template as < TokenRelay6Field::FieldType > (); }
-#line 528 "parser.cc"
+#line 537 "parser.cc"
         break;
 
       default:
@@ -741,27 +750,27 @@ namespace isc { namespace eval {
          when using variants.  */
       switch (yyr1_[yyn])
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         yylhs.value.emplace< TokenOption::RepresentationType > ();
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         yylhs.value.emplace< TokenPkt4::FieldType > ();
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         yylhs.value.emplace< TokenPkt6::FieldType > ();
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         yylhs.value.emplace< TokenPkt::MetadataType > ();
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         yylhs.value.emplace< TokenRelay6Field::FieldType > ();
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         yylhs.value.emplace< int8_t > ();
         break;
 
@@ -774,11 +783,12 @@ namespace isc { namespace eval {
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         yylhs.value.emplace< uint16_t > ();
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         yylhs.value.emplace< uint32_t > ();
         break;
 
@@ -803,61 +813,61 @@ namespace isc { namespace eval {
           switch (yyn)
             {
   case 6:
-#line 131 "parser.yy"
+#line 132 "parser.yy"
     {
                     TokenPtr neg(new TokenNot());
                     ctx.expression.push_back(neg);
                 }
-#line 812 "parser.cc"
+#line 822 "parser.cc"
     break;
 
   case 7:
-#line 136 "parser.yy"
+#line 137 "parser.yy"
     {
                     TokenPtr neg(new TokenAnd());
                     ctx.expression.push_back(neg);
                 }
-#line 821 "parser.cc"
+#line 831 "parser.cc"
     break;
 
   case 8:
-#line 141 "parser.yy"
+#line 142 "parser.yy"
     {
                     TokenPtr neg(new TokenOr());
                     ctx.expression.push_back(neg);
                 }
-#line 830 "parser.cc"
+#line 840 "parser.cc"
     break;
 
   case 9:
-#line 146 "parser.yy"
+#line 147 "parser.yy"
     {
                     TokenPtr eq(new TokenEqual());
                     ctx.expression.push_back(eq);
                 }
-#line 839 "parser.cc"
+#line 849 "parser.cc"
     break;
 
   case 10:
-#line 151 "parser.yy"
+#line 152 "parser.yy"
     {
                     TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
                 }
-#line 848 "parser.cc"
+#line 858 "parser.cc"
     break;
 
   case 11:
-#line 156 "parser.yy"
+#line 157 "parser.yy"
     {
                     TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
                 }
-#line 857 "parser.cc"
+#line 867 "parser.cc"
     break;
 
   case 12:
-#line 161 "parser.yy"
+#line 162 "parser.yy"
     {
                    switch (ctx.getUniverse()) {
                    case Option::V4:
@@ -877,11 +887,11 @@ namespace isc { namespace eval {
                        error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                    }
                 }
-#line 881 "parser.cc"
+#line 891 "parser.cc"
     break;
 
   case 13:
-#line 181 "parser.yy"
+#line 182 "parser.yy"
     {
                     switch (ctx.getUniverse()) {
                     case Option::V6:
@@ -895,11 +905,11 @@ namespace isc { namespace eval {
                         error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                     }
                 }
-#line 899 "parser.cc"
+#line 909 "parser.cc"
     break;
 
   case 14:
-#line 195 "parser.yy"
+#line 196 "parser.yy"
     {
                   // Expression: vendor-class[1234].exists
                   //
@@ -908,11 +918,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendorClass(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 912 "parser.cc"
+#line 922 "parser.cc"
     break;
 
   case 15:
-#line 204 "parser.yy"
+#line 205 "parser.yy"
     {
                   // Expression: vendor[1234].exists
                   //
@@ -921,11 +931,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 925 "parser.cc"
+#line 935 "parser.cc"
     break;
 
   case 16:
-#line 213 "parser.yy"
+#line 214 "parser.yy"
     {
                   // Expression vendor[1234].option[123].exists
                   //
@@ -935,11 +945,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), TokenOption::EXISTS, yystack_[3].value.as < uint16_t > ()));
                   ctx.expression.push_back(exist);
                }
-#line 939 "parser.cc"
+#line 949 "parser.cc"
     break;
 
   case 17:
-#line 223 "parser.yy"
+#line 224 "parser.yy"
     {
                   // Expression member('foo')
                   //
@@ -954,56 +964,56 @@ namespace isc { namespace eval {
                   TokenPtr member(new TokenMember(cc));
                   ctx.expression.push_back(member);
               }
-#line 958 "parser.cc"
+#line 968 "parser.cc"
     break;
 
   case 18:
-#line 240 "parser.yy"
+#line 241 "parser.yy"
     {
                       TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(str);
                   }
-#line 967 "parser.cc"
+#line 977 "parser.cc"
     break;
 
   case 19:
-#line 245 "parser.yy"
+#line 246 "parser.yy"
     {
                       TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(hex);
                   }
-#line 976 "parser.cc"
+#line 986 "parser.cc"
     break;
 
   case 20:
-#line 250 "parser.yy"
+#line 251 "parser.yy"
     {
                       TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(ip);
                   }
-#line 985 "parser.cc"
+#line 995 "parser.cc"
     break;
 
   case 21:
-#line 255 "parser.yy"
+#line 256 "parser.yy"
     {
                       TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
                       ctx.expression.push_back(opt);
                   }
-#line 994 "parser.cc"
+#line 1004 "parser.cc"
     break;
 
   case 22:
-#line 260 "parser.yy"
+#line 261 "parser.yy"
     {
                       TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
                       ctx.expression.push_back(opt);
                   }
-#line 1003 "parser.cc"
+#line 1013 "parser.cc"
     break;
 
   case 23:
-#line 265 "parser.yy"
+#line 266 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1023,11 +1033,11 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                      }
                   }
-#line 1027 "parser.cc"
+#line 1037 "parser.cc"
     break;
 
   case 24:
-#line 286 "parser.yy"
+#line 287 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1041,20 +1051,20 @@ namespace isc { namespace eval {
                          error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1045 "parser.cc"
+#line 1055 "parser.cc"
     break;
 
   case 25:
-#line 301 "parser.yy"
+#line 302 "parser.yy"
     {
                       TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
                       ctx.expression.push_back(pkt_metadata);
                   }
-#line 1054 "parser.cc"
+#line 1064 "parser.cc"
     break;
 
   case 26:
-#line 306 "parser.yy"
+#line 307 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1068,11 +1078,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
                      }
                   }
-#line 1072 "parser.cc"
+#line 1082 "parser.cc"
     break;
 
   case 27:
-#line 320 "parser.yy"
+#line 321 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1086,11 +1096,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
                      }
                   }
-#line 1090 "parser.cc"
+#line 1100 "parser.cc"
     break;
 
   case 28:
-#line 334 "parser.yy"
+#line 335 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1104,47 +1114,47 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1108 "parser.cc"
+#line 1118 "parser.cc"
     break;
 
   case 29:
-#line 349 "parser.yy"
+#line 350 "parser.yy"
     {
                       TokenPtr sub(new TokenSubstring());
                       ctx.expression.push_back(sub);
                   }
-#line 1117 "parser.cc"
+#line 1127 "parser.cc"
     break;
 
   case 30:
-#line 354 "parser.yy"
+#line 355 "parser.yy"
     {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1126 "parser.cc"
+#line 1136 "parser.cc"
     break;
 
   case 31:
-#line 359 "parser.yy"
+#line 360 "parser.yy"
     {
                       TokenPtr cond(new TokenIfElse());
                       ctx.expression.push_back(cond);
                   }
-#line 1135 "parser.cc"
+#line 1145 "parser.cc"
     break;
 
   case 32:
-#line 364 "parser.yy"
+#line 365 "parser.yy"
     {
                       TokenPtr tohex(new TokenToHexString());
                       ctx.expression.push_back(tohex);
                   }
-#line 1144 "parser.cc"
+#line 1154 "parser.cc"
     break;
 
   case 33:
-#line 369 "parser.yy"
+#line 370 "parser.yy"
     {
                     // expression: vendor.enterprise
                     //
@@ -1153,11 +1163,11 @@ namespace isc { namespace eval {
                     TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1157 "parser.cc"
+#line 1167 "parser.cc"
     break;
 
   case 34:
-#line 378 "parser.yy"
+#line 379 "parser.yy"
     {
                     // expression: vendor-class.enterprise
                     //
@@ -1167,11 +1177,11 @@ namespace isc { namespace eval {
                                                          TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1171 "parser.cc"
+#line 1181 "parser.cc"
     break;
 
   case 35:
-#line 388 "parser.yy"
+#line 389 "parser.yy"
     {
                     // This token will search for vendor option with
                     // specified enterprise-id.  If found, will search
@@ -1180,11 +1190,11 @@ namespace isc { namespace eval {
                     TokenPtr opt(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), yystack_[0].value.as < TokenOption::RepresentationType > (), yystack_[3].value.as < uint16_t > ()));
                     ctx.expression.push_back(opt);
                 }
-#line 1184 "parser.cc"
+#line 1194 "parser.cc"
     break;
 
   case 36:
-#line 397 "parser.yy"
+#line 398 "parser.yy"
     {
                     // expression: vendor-class[1234].data
                     //
@@ -1197,11 +1207,11 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, 0));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1201 "parser.cc"
+#line 1211 "parser.cc"
     break;
 
   case 37:
-#line 410 "parser.yy"
+#line 411 "parser.yy"
     {
                     // expression: vendor-class[1234].data[5]
                     //
@@ -1214,247 +1224,255 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, index));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1218 "parser.cc"
+#line 1228 "parser.cc"
     break;
 
   case 38:
-#line 423 "parser.yy"
+#line 424 "parser.yy"
     {
                     TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
                     ctx.expression.push_back(integer);
                 }
-#line 1227 "parser.cc"
+#line 1237 "parser.cc"
     break;
 
   case 39:
-#line 430 "parser.yy"
+#line 431 "parser.yy"
     {
                      yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1235 "parser.cc"
+#line 1245 "parser.cc"
     break;
 
   case 40:
-#line 436 "parser.yy"
+#line 437 "parser.yy"
     {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1243 "parser.cc"
+#line 1253 "parser.cc"
     break;
 
   case 41:
-#line 440 "parser.yy"
+#line 441 "parser.yy"
     {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1251 "parser.cc"
+#line 1261 "parser.cc"
     break;
 
   case 42:
-#line 446 "parser.yy"
+#line 447 "parser.yy"
+    {
+                     yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
+                 }
+#line 1269 "parser.cc"
+    break;
+
+  case 43:
+#line 453 "parser.yy"
     {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
                       }
-#line 1259 "parser.cc"
+#line 1277 "parser.cc"
     break;
 
-  case 43:
-#line 450 "parser.yy"
+  case 44:
+#line 457 "parser.yy"
     {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
                       }
-#line 1267 "parser.cc"
+#line 1285 "parser.cc"
     break;
 
-  case 44:
-#line 456 "parser.yy"
+  case 45:
+#line 463 "parser.yy"
     {
                      yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1275 "parser.cc"
+#line 1293 "parser.cc"
     break;
 
-  case 45:
-#line 465 "parser.yy"
+  case 46:
+#line 472 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
                   }
-#line 1283 "parser.cc"
+#line 1301 "parser.cc"
     break;
 
-  case 46:
-#line 469 "parser.yy"
+  case 47:
+#line 476 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
                   }
-#line 1291 "parser.cc"
+#line 1309 "parser.cc"
     break;
 
-  case 47:
-#line 473 "parser.yy"
+  case 48:
+#line 480 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
                   }
-#line 1299 "parser.cc"
+#line 1317 "parser.cc"
     break;
 
-  case 48:
-#line 477 "parser.yy"
+  case 49:
+#line 484 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
                   }
-#line 1307 "parser.cc"
+#line 1325 "parser.cc"
     break;
 
-  case 49:
-#line 483 "parser.yy"
+  case 50:
+#line 490 "parser.yy"
     {
                        yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                    }
-#line 1315 "parser.cc"
+#line 1333 "parser.cc"
     break;
 
-  case 50:
-#line 487 "parser.yy"
+  case 51:
+#line 494 "parser.yy"
     {
                        yylhs.value.as < uint32_t > () = 0;
                    }
-#line 1323 "parser.cc"
+#line 1341 "parser.cc"
     break;
 
-  case 51:
-#line 493 "parser.yy"
+  case 52:
+#line 500 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
                 }
-#line 1331 "parser.cc"
+#line 1349 "parser.cc"
     break;
 
-  case 52:
-#line 497 "parser.yy"
+  case 53:
+#line 504 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
                 }
-#line 1339 "parser.cc"
+#line 1357 "parser.cc"
     break;
 
-  case 53:
-#line 501 "parser.yy"
+  case 54:
+#line 508 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
                 }
-#line 1347 "parser.cc"
+#line 1365 "parser.cc"
     break;
 
-  case 54:
-#line 505 "parser.yy"
+  case 55:
+#line 512 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
                 }
-#line 1355 "parser.cc"
+#line 1373 "parser.cc"
     break;
 
-  case 55:
-#line 509 "parser.yy"
+  case 56:
+#line 516 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
                 }
-#line 1363 "parser.cc"
+#line 1381 "parser.cc"
     break;
 
-  case 56:
-#line 513 "parser.yy"
+  case 57:
+#line 520 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
                 }
-#line 1371 "parser.cc"
+#line 1389 "parser.cc"
     break;
 
-  case 57:
-#line 517 "parser.yy"
+  case 58:
+#line 524 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
                 }
-#line 1379 "parser.cc"
+#line 1397 "parser.cc"
     break;
 
-  case 58:
-#line 521 "parser.yy"
+  case 59:
+#line 528 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
                  }
-#line 1387 "parser.cc"
+#line 1405 "parser.cc"
     break;
 
-  case 59:
-#line 525 "parser.yy"
+  case 60:
+#line 532 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
                  }
-#line 1395 "parser.cc"
+#line 1413 "parser.cc"
     break;
 
-  case 60:
-#line 531 "parser.yy"
+  case 61:
+#line 538 "parser.yy"
     {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
                  }
-#line 1403 "parser.cc"
+#line 1421 "parser.cc"
     break;
 
-  case 61:
-#line 535 "parser.yy"
+  case 62:
+#line 542 "parser.yy"
     {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
                  }
-#line 1411 "parser.cc"
+#line 1429 "parser.cc"
     break;
 
-  case 62:
-#line 541 "parser.yy"
+  case 63:
+#line 548 "parser.yy"
     {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
                    }
-#line 1419 "parser.cc"
+#line 1437 "parser.cc"
     break;
 
-  case 63:
-#line 545 "parser.yy"
+  case 64:
+#line 552 "parser.yy"
     {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
                    }
-#line 1427 "parser.cc"
+#line 1445 "parser.cc"
     break;
 
-  case 64:
-#line 551 "parser.yy"
+  case 65:
+#line 558 "parser.yy"
     {
                     TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                     ctx.expression.push_back(str);
                 }
-#line 1436 "parser.cc"
+#line 1454 "parser.cc"
     break;
 
-  case 65:
-#line 558 "parser.yy"
+  case 66:
+#line 565 "parser.yy"
     {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1445 "parser.cc"
+#line 1463 "parser.cc"
     break;
 
-  case 66:
-#line 563 "parser.yy"
+  case 67:
+#line 570 "parser.yy"
     {
                      TokenPtr str(new TokenString("all"));
                      ctx.expression.push_back(str);
                  }
-#line 1454 "parser.cc"
+#line 1472 "parser.cc"
     break;
 
 
-#line 1458 "parser.cc"
+#line 1476 "parser.cc"
 
             default:
               break;
@@ -1725,33 +1743,33 @@ namespace isc { namespace eval {
   }
 
 
-  const signed char EvalParser::yypact_ninf_ = -118;
+  const signed char EvalParser::yypact_ninf_ = -120;
 
   const signed char EvalParser::yytable_ninf_ = -1;
 
   const short
   EvalParser::yypact_[] =
   {
-      25,    50,    -6,    14,    50,    50,     8,    20,    32,    39,
-      41,   108,    96,   145,   146,   147,   134,    35,    88,  -118,
-    -118,  -118,  -118,  -118,    85,     9,  -118,   137,   138,   139,
-     124,   125,  -118,  -118,    79,  -118,    92,    92,   104,   106,
-      73,    82,    -6,    -6,    50,    -6,    80,    27,   110,    27,
-     111,    50,    50,    -6,    92,    92,   104,    27,    27,  -118,
-    -118,  -118,   143,   144,  -118,   148,   157,  -118,  -118,  -118,
-    -118,  -118,  -118,  -118,  -118,  -118,  -118,  -118,  -118,  -118,
-    -118,  -118,   126,   127,     0,   129,  -118,  -118,  -118,  -118,
-    -118,   150,  -118,   151,  -118,  -118,   162,  -118,   153,   154,
-     155,   156,   158,   159,   160,   161,  -118,   122,    -6,    -6,
-      -6,   163,   164,   165,   166,   167,   168,   169,     7,    98,
-      66,  -118,   152,   171,   170,   175,    -7,     2,    45,   128,
-      68,   141,   180,   176,  -118,  -118,  -118,  -118,  -118,  -118,
-     177,  -118,  -118,  -118,   -27,  -118,    -6,  -118,  -118,   178,
-     179,  -118,   181,   182,   183,    92,    92,  -118,  -118,   186,
-     191,   149,    92,    92,    92,    92,   185,   187,  -118,  -118,
-     188,   189,   192,   193,   194,   190,   195,  -118,   196,   197,
-     198,   199,   112,   115,   118,   128,   128,   128,  -118,  -118,
-    -118,  -118,  -118,  -118
+     -24,    80,   116,    21,    80,    80,    -5,    24,    46,    84,
+      85,    88,   118,   119,   125,   126,   121,    20,    67,  -120,
+    -120,  -120,  -120,  -120,    91,   127,  -120,   124,   128,   129,
+      71,    78,  -120,  -120,    56,  -120,    43,    82,    89,    86,
+      34,   -15,   116,   116,    80,   116,    74,    -9,    94,    -9,
+      99,    80,    80,   116,    43,    82,    89,    -9,    -9,  -120,
+    -120,  -120,   131,  -120,   132,  -120,   133,   147,  -120,  -120,
+    -120,  -120,  -120,  -120,  -120,  -120,  -120,  -120,  -120,  -120,
+    -120,  -120,  -120,   122,   135,    -3,   136,  -120,  -120,  -120,
+    -120,  -120,   141,  -120,   145,  -120,  -120,   146,  -120,   148,
+     149,   153,   157,   158,   159,   160,   161,  -120,   111,   116,
+     116,   116,   162,   163,   164,   165,   166,   167,   168,    10,
+      52,    35,  -120,   139,   182,   151,   184,   -12,     0,    13,
+      81,    41,   117,   180,   175,  -120,  -120,  -120,  -120,  -120,
+    -120,   176,  -120,  -120,  -120,   -28,  -120,   116,  -120,  -120,
+     177,   178,  -120,   179,   181,   183,    82,    82,  -120,  -120,
+     191,   193,   150,    82,    82,    82,    82,   186,   187,  -120,
+    -120,   188,   189,   190,   192,   194,   195,   196,  -120,   197,
+     198,   199,   200,    55,    58,    61,    81,    81,    81,  -120,
+    -120,  -120,  -120,  -120,  -120
   };
 
   const unsigned char
@@ -1763,90 +1781,88 @@ namespace isc { namespace eval {
        0,     0,     3,     1,     0,     6,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     5,
-      40,    41,     0,     0,    44,     0,     0,    45,    46,    47,
-      48,    25,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    26,     0,     0,     0,     0,    60,    61,    27,    50,
-      49,     0,    34,     0,    33,     7,     8,     9,     0,     0,
-       0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
+      40,    41,     0,    42,     0,    45,     0,     0,    46,    47,
+      48,    49,    25,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    26,     0,     0,     0,     0,    61,    62,    27,
+      51,    50,     0,    34,     0,    33,     7,     8,     9,     0,
+       0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    64,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    42,    43,    10,    21,    12,    23,
-       0,    62,    63,    28,     0,    30,     0,    32,    14,    36,
-       0,    15,     0,     0,     0,     0,     0,    66,    65,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    29,    31,
-       0,     0,     0,     0,     0,     0,     0,    37,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    11,    22,
-      13,    24,    16,    35
+       0,     0,    65,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    43,    44,    10,    21,    12,
+      23,     0,    63,    64,    28,     0,    30,     0,    32,    14,
+      36,     0,    15,     0,     0,     0,     0,     0,    67,    66,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    29,
+      31,     0,     0,     0,     0,     0,     0,     0,    37,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    11,
+      22,    13,    24,    16,    35
   };
 
   const short
   EvalParser::yypgoto_[] =
   {
-    -118,  -118,  -118,     5,    -2,  -118,   -36,  -117,   172,  -118,
-     -28,  -118,  -118,  -118,  -118,  -118
+    -120,  -120,  -120,     1,    -2,  -120,   155,   -53,  -119,   143,
+    -120,   -11,  -120,  -120,  -120,  -120,  -120
   };
 
   const short
   EvalParser::yydefgoto_[] =
   {
-      -1,     3,    23,    24,    25,    26,    62,   137,    65,    71,
-      91,    81,    88,   143,   122,   159
+      -1,     3,    23,    24,    25,    26,    62,    64,   138,    66,
+      72,    92,    82,    89,   144,   123,   160
   };
 
   const unsigned char
   EvalParser::yytable_[] =
   {
-      32,    63,   139,    27,    28,    29,    51,    52,   157,    34,
-      35,   150,   139,   148,    33,    10,   133,    53,    98,    99,
-      11,    93,   151,    36,   158,   134,   135,   136,    12,   101,
-     102,    13,    14,    15,    16,    37,   109,    30,    31,   149,
-      82,    83,    39,    85,    19,    20,    21,    38,    22,    84,
-      47,    97,    48,     4,   152,     5,    95,    96,    40,     6,
-       7,     8,     9,   134,   135,   189,   191,   193,   189,   191,
-     193,    10,    89,     1,     2,   140,    11,   153,    90,   141,
-     142,   141,   142,    59,    12,    51,    52,    13,    14,    15,
-      16,    51,    52,    17,    18,    67,    68,    69,    70,    42,
-      19,    20,    21,    49,    22,    50,   123,   124,   125,    72,
-      73,    74,    75,    76,    77,    78,   134,   135,   138,   166,
-     167,    86,    87,    79,    80,    41,   171,   172,   173,   174,
-     134,   135,   188,   134,   135,   190,   134,   135,   192,    57,
-      58,    48,    50,    60,   160,    61,   134,   135,    43,    44,
-      45,    46,    54,    55,    56,    64,    66,    92,    94,   103,
-     104,   106,   107,   108,   105,   110,   111,   112,    51,   113,
-     114,   115,   116,   121,   117,   145,   118,   119,   120,   147,
-     126,   127,   128,   129,   130,   131,   132,   149,   144,   154,
-     168,   155,   156,   161,   162,   169,   163,   164,   165,     0,
-     170,   175,     0,   176,   177,   178,   146,   182,   179,   180,
-     181,     0,   183,   184,   185,   186,   187,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   100
+      32,   140,   100,    51,    52,    34,    35,   158,   149,   151,
+      36,   140,    73,    74,    75,    76,    77,    78,    79,   134,
+     152,    33,   153,   159,     1,     2,    80,    81,   135,   136,
+     137,   135,   136,   110,   150,    47,    90,    48,    94,    37,
+      83,    84,    91,    86,   141,    85,   102,   103,   142,   143,
+     154,    98,    96,    97,   142,   143,    68,    69,    70,    71,
+      59,    38,    51,    52,   190,   192,   194,   190,   192,   194,
+     135,   136,   139,   135,   136,   189,   135,   136,   191,   135,
+     136,   193,    49,     4,    50,     5,    57,    39,    48,     6,
+       7,     8,     9,    58,    60,    50,    61,    51,    52,   135,
+     136,    10,    40,   167,   168,    41,    11,   124,   125,   126,
+     172,   173,   174,   175,    12,    87,    88,    13,    14,    15,
+      16,    42,    43,    17,    18,    27,    28,    29,    44,    45,
+      19,    20,    21,    63,    22,    53,    67,    10,    46,    54,
+      65,    93,    11,    55,    56,   161,    95,   104,   105,   106,
+      12,   107,    51,    13,    14,    15,    16,   112,   108,    30,
+      31,   113,   122,   150,   114,   115,    19,    20,    21,   116,
+      22,   109,   111,   117,   118,   145,   119,   120,   121,   127,
+     128,   129,   130,   131,   132,   133,   146,   147,   148,   155,
+     156,   157,   162,   163,   164,   169,   165,   170,   166,   101,
+       0,   171,   176,   177,   178,   179,   180,     0,   181,    99,
+     182,     0,   183,   184,   185,   186,   187,   188
   };
 
   const short
   EvalParser::yycheck_[] =
   {
-       2,    37,   119,     9,    10,    11,     6,     7,    35,     4,
-       5,     9,   129,    20,     0,    21,     9,     8,    54,    55,
-      26,    49,    20,    15,    51,    18,    19,    20,    34,    57,
-      58,    37,    38,    39,    40,    15,    36,    43,    44,    46,
-      42,    43,     3,    45,    50,    51,    52,    15,    54,    44,
-      15,    53,    17,     3,     9,     5,    51,    52,    17,     9,
-      10,    11,    12,    18,    19,   182,   183,   184,   185,   186,
-     187,    21,    45,    48,    49,     9,    26,     9,    51,    13,
-      14,    13,    14,     4,    34,     6,     7,    37,    38,    39,
-      40,     6,     7,    43,    44,    22,    23,    24,    25,     3,
-      50,    51,    52,    15,    54,    17,   108,   109,   110,    27,
-      28,    29,    30,    31,    32,    33,    18,    19,    20,   155,
-     156,    41,    42,    41,    42,    17,   162,   163,   164,   165,
-      18,    19,    20,    18,    19,    20,    18,    19,    20,    15,
-      15,    17,    17,    51,   146,    53,    18,    19,     3,     3,
-       3,    17,    15,    15,    15,    51,    50,    47,    47,    16,
-      16,     4,    36,    36,    16,    36,    16,    16,     6,    16,
-      16,    16,    16,    51,    16,     4,    17,    17,    17,     4,
-      17,    17,    17,    17,    17,    17,    17,    46,    36,     9,
-       4,    15,    15,    15,    15,     4,    15,    15,    15,    -1,
-      51,    16,    -1,    16,    16,    16,    36,    17,    16,    16,
-      16,    -1,    17,    17,    17,    17,    17,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56
+       2,   120,    55,     6,     7,     4,     5,    35,    20,     9,
+      15,   130,    27,    28,    29,    30,    31,    32,    33,     9,
+      20,     0,     9,    51,    48,    49,    41,    42,    18,    19,
+      20,    18,    19,    36,    46,    15,    45,    17,    49,    15,
+      42,    43,    51,    45,     9,    44,    57,    58,    13,    14,
+       9,    53,    51,    52,    13,    14,    22,    23,    24,    25,
+       4,    15,     6,     7,   183,   184,   185,   186,   187,   188,
+      18,    19,    20,    18,    19,    20,    18,    19,    20,    18,
+      19,    20,    15,     3,    17,     5,    15,     3,    17,     9,
+      10,    11,    12,    15,    51,    17,    53,     6,     7,    18,
+      19,    21,    17,   156,   157,    17,    26,   109,   110,   111,
+     163,   164,   165,   166,    34,    41,    42,    37,    38,    39,
+      40,     3,     3,    43,    44,     9,    10,    11,     3,     3,
+      50,    51,    52,    51,    54,     8,    50,    21,    17,    15,
+      51,    47,    26,    15,    15,   147,    47,    16,    16,    16,
+      34,     4,     6,    37,    38,    39,    40,    16,    36,    43,
+      44,    16,    51,    46,    16,    16,    50,    51,    52,    16,
+      54,    36,    36,    16,    16,    36,    17,    17,    17,    17,
+      17,    17,    17,    17,    17,    17,     4,    36,     4,     9,
+      15,    15,    15,    15,    15,     4,    15,     4,    15,    56,
+      -1,    51,    16,    16,    16,    16,    16,    -1,    16,    54,
+      16,    -1,    17,    17,    17,    17,    17,    17
   };
 
   const unsigned char
@@ -1858,20 +1874,20 @@ namespace isc { namespace eval {
       43,    44,    59,     0,    58,    58,    15,    15,    15,     3,
       17,    17,     3,     3,     3,     3,    17,    15,    17,    15,
       17,     6,     7,     8,    15,    15,    15,    15,    15,     4,
-      51,    53,    61,    61,    51,    63,    50,    22,    23,    24,
-      25,    64,    27,    28,    29,    30,    31,    32,    33,    41,
-      42,    66,    59,    59,    58,    59,    41,    42,    67,    45,
-      51,    65,    47,    65,    47,    58,    58,    59,    61,    61,
-      63,    65,    65,    16,    16,    16,     4,    36,    36,    36,
-      36,    16,    16,    16,    16,    16,    16,    16,    17,    17,
-      17,    51,    69,    59,    59,    59,    17,    17,    17,    17,
-      17,    17,    17,     9,    18,    19,    20,    62,    20,    62,
-       9,    13,    14,    68,    36,     4,    36,     4,    20,    46,
-       9,    20,     9,     9,     9,    15,    15,    35,    51,    70,
-      59,    15,    15,    15,    15,    15,    61,    61,     4,     4,
-      51,    61,    61,    61,    61,    16,    16,    16,    16,    16,
-      16,    16,    17,    17,    17,    17,    17,    17,    20,    62,
-      20,    62,    20,    62
+      51,    53,    61,    51,    62,    51,    64,    50,    22,    23,
+      24,    25,    65,    27,    28,    29,    30,    31,    32,    33,
+      41,    42,    67,    59,    59,    58,    59,    41,    42,    68,
+      45,    51,    66,    47,    66,    47,    58,    58,    59,    61,
+      62,    64,    66,    66,    16,    16,    16,     4,    36,    36,
+      36,    36,    16,    16,    16,    16,    16,    16,    16,    17,
+      17,    17,    51,    70,    59,    59,    59,    17,    17,    17,
+      17,    17,    17,    17,     9,    18,    19,    20,    63,    20,
+      63,     9,    13,    14,    69,    36,     4,    36,     4,    20,
+      46,     9,    20,     9,     9,     9,    15,    15,    35,    51,
+      71,    59,    15,    15,    15,    15,    15,    62,    62,     4,
+       4,    51,    62,    62,    62,    62,    16,    16,    16,    16,
+      16,    16,    16,    17,    17,    17,    17,    17,    17,    20,
+      63,    20,    63,    20,    63
   };
 
   const unsigned char
@@ -1881,9 +1897,9 @@ namespace isc { namespace eval {
       58,    58,    58,    58,    58,    58,    58,    58,    59,    59,
       59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
       59,    59,    59,    59,    59,    59,    59,    59,    59,    60,
-      61,    61,    62,    62,    63,    64,    64,    64,    64,    65,
-      65,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      67,    67,    68,    68,    69,    70,    70
+      61,    61,    62,    63,    63,    64,    65,    65,    65,    65,
+      66,    66,    67,    67,    67,    67,    67,    67,    67,    67,
+      67,    68,    68,    69,    69,    70,    71,    71
   };
 
   const unsigned char
@@ -1895,7 +1911,7 @@ namespace isc { namespace eval {
        6,     8,     6,     3,     3,    11,     6,     9,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1
+       1,     1,     1,     1,     1,     1,     1,     1
   };
 
 
@@ -1917,22 +1933,22 @@ namespace isc { namespace eval {
   "\"top-level bool\"", "\"top-level string\"", "\"constant string\"",
   "\"integer\"", "\"constant hexstring\"", "\"option name\"",
   "\"ip address\"", "$accept", "start", "expression", "bool_expr",
-  "string_expr", "integer_expr", "option_code", "option_repr_type",
-  "nest_level", "pkt_metadata", "enterprise_id", "pkt4_field",
-  "pkt6_field", "relay6_field", "start_expr", "length_expr", YY_NULLPTR
+  "string_expr", "integer_expr", "option_code", "sub_option_code",
+  "option_repr_type", "nest_level", "pkt_metadata", "enterprise_id",
+  "pkt4_field", "pkt6_field", "relay6_field", "start_expr", "length_expr", YY_NULLPTR
   };
 
 #if EVALDEBUG
   const unsigned short
   EvalParser::yyrline_[] =
   {
-       0,   120,   120,   121,   126,   129,   130,   135,   140,   145,
-     150,   155,   160,   180,   194,   203,   212,   222,   239,   244,
-     249,   254,   259,   264,   285,   300,   305,   319,   333,   348,
-     353,   358,   363,   368,   377,   387,   396,   409,   422,   429,
-     435,   439,   445,   449,   455,   464,   468,   472,   476,   482,
-     486,   492,   496,   500,   504,   508,   512,   516,   520,   524,
-     530,   534,   540,   544,   550,   557,   562
+       0,   121,   121,   122,   127,   130,   131,   136,   141,   146,
+     151,   156,   161,   181,   195,   204,   213,   223,   240,   245,
+     250,   255,   260,   265,   286,   301,   306,   320,   334,   349,
+     354,   359,   364,   369,   378,   388,   397,   410,   423,   430,
+     436,   440,   446,   452,   456,   462,   471,   475,   479,   483,
+     489,   493,   499,   503,   507,   511,   515,   519,   523,   527,
+     531,   537,   541,   547,   551,   557,   564,   569
   };
 
   // Print the state stack on the debug stream.
@@ -1967,9 +1983,9 @@ namespace isc { namespace eval {
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 1971 "parser.cc"
+#line 1987 "parser.cc"
 
-#line 569 "parser.yy"
+#line 576 "parser.yy"
 
 void
 isc::eval::EvalParser::error(const location_type& loc,
index 3959db25e5343957c36820eaf3e3a75c379ec078..c7c0e7e3db78d2f5665f8faf4a965570c94f6fd4 100644 (file)
@@ -409,6 +409,7 @@ namespace isc { namespace eval {
       char dummy7[sizeof (std::string)];
 
       // option_code
+      // sub_option_code
       char dummy8[sizeof (uint16_t)];
 
       // integer_expr
@@ -707,27 +708,27 @@ namespace isc { namespace eval {
         // Type destructor.
 switch (yytype)
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.template destroy< TokenOption::RepresentationType > ();
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.template destroy< TokenPkt4::FieldType > ();
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.template destroy< TokenPkt6::FieldType > ();
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.template destroy< TokenPkt::MetadataType > ();
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.template destroy< TokenRelay6Field::FieldType > ();
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.template destroy< int8_t > ();
         break;
 
@@ -740,11 +741,12 @@ switch (yytype)
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.template destroy< uint16_t > ();
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.template destroy< uint32_t > ();
         break;
 
@@ -1987,8 +1989,8 @@ switch (yytype)
     enum
     {
       yyeof_ = 0,
-      yylast_ = 228,     ///< Last index in yytable_.
-      yynnts_ = 16,  ///< Number of nonterminal symbols.
+      yylast_ = 217,     ///< Last index in yytable_.
+      yynnts_ = 17,  ///< Number of nonterminal symbols.
       yyfinal_ = 33, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
@@ -2063,27 +2065,27 @@ switch (yytype)
   {
     switch (this->type_get ())
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.move< TokenOption::RepresentationType > (std::move (that.value));
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.move< TokenPkt4::FieldType > (std::move (that.value));
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.move< TokenPkt6::FieldType > (std::move (that.value));
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.move< TokenPkt::MetadataType > (std::move (that.value));
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.move< TokenRelay6Field::FieldType > (std::move (that.value));
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.move< int8_t > (std::move (that.value));
         break;
 
@@ -2096,11 +2098,12 @@ switch (yytype)
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.move< uint16_t > (std::move (that.value));
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.move< uint32_t > (std::move (that.value));
         break;
 
@@ -2119,27 +2122,27 @@ switch (yytype)
   {
     switch (this->type_get ())
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.copy< TokenOption::RepresentationType > (YY_MOVE (that.value));
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.copy< TokenPkt4::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.copy< TokenPkt6::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.copy< TokenPkt::MetadataType > (YY_MOVE (that.value));
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.copy< TokenRelay6Field::FieldType > (YY_MOVE (that.value));
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.copy< int8_t > (YY_MOVE (that.value));
         break;
 
@@ -2152,11 +2155,12 @@ switch (yytype)
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.copy< uint16_t > (YY_MOVE (that.value));
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.copy< uint32_t > (YY_MOVE (that.value));
         break;
 
@@ -2182,27 +2186,27 @@ switch (yytype)
     super_type::move (s);
     switch (this->type_get ())
     {
-      case 62: // option_repr_type
+      case 63: // option_repr_type
         value.move< TokenOption::RepresentationType > (YY_MOVE (s.value));
         break;
 
-      case 66: // pkt4_field
+      case 67: // pkt4_field
         value.move< TokenPkt4::FieldType > (YY_MOVE (s.value));
         break;
 
-      case 67: // pkt6_field
+      case 68: // pkt6_field
         value.move< TokenPkt6::FieldType > (YY_MOVE (s.value));
         break;
 
-      case 64: // pkt_metadata
+      case 65: // pkt_metadata
         value.move< TokenPkt::MetadataType > (YY_MOVE (s.value));
         break;
 
-      case 68: // relay6_field
+      case 69: // relay6_field
         value.move< TokenRelay6Field::FieldType > (YY_MOVE (s.value));
         break;
 
-      case 63: // nest_level
+      case 64: // nest_level
         value.move< int8_t > (YY_MOVE (s.value));
         break;
 
@@ -2215,11 +2219,12 @@ switch (yytype)
         break;
 
       case 61: // option_code
+      case 62: // sub_option_code
         value.move< uint16_t > (YY_MOVE (s.value));
         break;
 
       case 60: // integer_expr
-      case 65: // enterprise_id
+      case 66: // enterprise_id
         value.move< uint32_t > (YY_MOVE (s.value));
         break;
 
@@ -2299,7 +2304,7 @@ switch (yytype)
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 2303 "parser.h"
+#line 2308 "parser.h"