diff options
author | Andrei Pavel <andrei.pavel@qualitance.com> | 2017-08-17 20:04:29 +0200 |
---|---|---|
committer | Andrei Pavel <andrei.pavel@qualitance.com> | 2017-08-17 20:04:29 +0200 |
commit | 529d15326887b3513413567e497118b3db2c24f3 (patch) | |
tree | 8b66b262349433802bd52e920bb4783baac57cb3 /src/lib/eval/parser.cc | |
parent | Added mysql_execute_script (diff) | |
parent | [master] Added ChangeLog 1288 for trac 5315. (diff) | |
download | kea-529d15326887b3513413567e497118b3db2c24f3.tar.xz kea-529d15326887b3513413567e497118b3db2c24f3.zip |
Merge branch 'isc-master' into minor-changes
Diffstat (limited to 'src/lib/eval/parser.cc')
-rw-r--r-- | src/lib/eval/parser.cc | 627 |
1 files changed, 319 insertions, 308 deletions
diff --git a/src/lib/eval/parser.cc b/src/lib/eval/parser.cc index 2891cb0b4e..f952ef31de 100644 --- a/src/lib/eval/parser.cc +++ b/src/lib/eval/parser.cc @@ -253,47 +253,47 @@ namespace isc { namespace eval { { switch (that.type_get ()) { - case 56: // option_repr_type + case 59: // option_repr_type value.move< TokenOption::RepresentationType > (that.value); break; - case 60: // pkt4_field + case 63: // pkt4_field value.move< TokenPkt4::FieldType > (that.value); break; - case 61: // pkt6_field + case 64: // pkt6_field value.move< TokenPkt6::FieldType > (that.value); break; - case 58: // pkt_metadata + case 61: // pkt_metadata value.move< TokenPkt::MetadataType > (that.value); break; - case 62: // relay6_field + case 65: // relay6_field value.move< TokenRelay6Field::FieldType > (that.value); break; - case 45: // "constant string" - case 46: // "integer" - case 47: // "constant hexstring" - case 48: // "option name" - case 49: // "ip address" + case 60: // nest_level + value.move< int8_t > (that.value); + break; + + case 47: // "constant string" + case 48: // "integer" + case 49: // "constant hexstring" + case 50: // "option name" + case 51: // "ip address" value.move< std::string > (that.value); break; - case 55: // option_code + case 58: // option_code value.move< uint16_t > (that.value); break; - case 54: // integer_expr - case 59: // enterprise_id + case 57: // integer_expr + case 62: // enterprise_id value.move< uint32_t > (that.value); break; - case 57: // nest_level - value.move< uint8_t > (that.value); - break; - default: break; } @@ -309,47 +309,47 @@ namespace isc { namespace eval { state = that.state; switch (that.type_get ()) { - case 56: // option_repr_type + case 59: // option_repr_type value.copy< TokenOption::RepresentationType > (that.value); break; - case 60: // pkt4_field + case 63: // pkt4_field value.copy< TokenPkt4::FieldType > (that.value); break; - case 61: // pkt6_field + case 64: // pkt6_field value.copy< TokenPkt6::FieldType > (that.value); break; - case 58: // pkt_metadata + case 61: // pkt_metadata value.copy< TokenPkt::MetadataType > (that.value); break; - case 62: // relay6_field + case 65: // relay6_field value.copy< TokenRelay6Field::FieldType > (that.value); break; - case 45: // "constant string" - case 46: // "integer" - case 47: // "constant hexstring" - case 48: // "option name" - case 49: // "ip address" + case 60: // nest_level + value.copy< int8_t > (that.value); + break; + + case 47: // "constant string" + case 48: // "integer" + case 49: // "constant hexstring" + case 50: // "option name" + case 51: // "ip address" value.copy< std::string > (that.value); break; - case 55: // option_code + case 58: // option_code value.copy< uint16_t > (that.value); break; - case 54: // integer_expr - case 59: // enterprise_id + case 57: // integer_expr + case 62: // enterprise_id value.copy< uint32_t > (that.value); break; - case 57: // nest_level - value.copy< uint8_t > (that.value); - break; - default: break; } @@ -386,100 +386,100 @@ namespace isc { namespace eval { << yysym.location << ": "; switch (yytype) { - case 45: // "constant string" + case 47: // "constant string" -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } #line 394 "parser.cc" // lalr1.cc:636 break; - case 46: // "integer" + case 48: // "integer" -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } #line 401 "parser.cc" // lalr1.cc:636 break; - case 47: // "constant hexstring" + case 49: // "constant hexstring" -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } #line 408 "parser.cc" // lalr1.cc:636 break; - case 48: // "option name" + case 50: // "option name" -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } #line 415 "parser.cc" // lalr1.cc:636 break; - case 49: // "ip address" + case 51: // "ip address" -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } #line 422 "parser.cc" // lalr1.cc:636 break; - case 54: // integer_expr + case 57: // integer_expr -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< uint32_t > (); } #line 429 "parser.cc" // lalr1.cc:636 break; - case 55: // option_code + case 58: // option_code -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< uint16_t > (); } #line 436 "parser.cc" // lalr1.cc:636 break; - case 56: // option_repr_type + case 59: // option_repr_type -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< TokenOption::RepresentationType > (); } #line 443 "parser.cc" // lalr1.cc:636 break; - case 57: // nest_level + case 60: // nest_level -#line 105 "parser.yy" // lalr1.cc:636 - { yyoutput << yysym.value.template as< uint8_t > (); } +#line 108 "parser.yy" // lalr1.cc:636 + { yyoutput << yysym.value.template as< int8_t > (); } #line 450 "parser.cc" // lalr1.cc:636 break; - case 58: // pkt_metadata + case 61: // pkt_metadata -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< TokenPkt::MetadataType > (); } #line 457 "parser.cc" // lalr1.cc:636 break; - case 59: // enterprise_id + case 62: // enterprise_id -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< uint32_t > (); } #line 464 "parser.cc" // lalr1.cc:636 break; - case 60: // pkt4_field + case 63: // pkt4_field -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< TokenPkt4::FieldType > (); } #line 471 "parser.cc" // lalr1.cc:636 break; - case 61: // pkt6_field + case 64: // pkt6_field -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< TokenPkt6::FieldType > (); } #line 478 "parser.cc" // lalr1.cc:636 break; - case 62: // relay6_field + case 65: // relay6_field -#line 105 "parser.yy" // lalr1.cc:636 +#line 108 "parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< TokenRelay6Field::FieldType > (); } #line 485 "parser.cc" // lalr1.cc:636 break; @@ -586,7 +586,7 @@ namespace isc { namespace eval { /// The return value of parse (). int yyresult; - // FIXME: This shoud be completely indented. It is not yet to + // FIXME: This should be completely indented. It is not yet to // avoid gratuitous conflicts when merging into the master branch. try { @@ -681,47 +681,47 @@ namespace isc { namespace eval { when using variants. */ switch (yyr1_[yyn]) { - case 56: // option_repr_type + case 59: // option_repr_type yylhs.value.build< TokenOption::RepresentationType > (); break; - case 60: // pkt4_field + case 63: // pkt4_field yylhs.value.build< TokenPkt4::FieldType > (); break; - case 61: // pkt6_field + case 64: // pkt6_field yylhs.value.build< TokenPkt6::FieldType > (); break; - case 58: // pkt_metadata + case 61: // pkt_metadata yylhs.value.build< TokenPkt::MetadataType > (); break; - case 62: // relay6_field + case 65: // relay6_field yylhs.value.build< TokenRelay6Field::FieldType > (); break; - case 45: // "constant string" - case 46: // "integer" - case 47: // "constant hexstring" - case 48: // "option name" - case 49: // "ip address" + case 60: // nest_level + yylhs.value.build< int8_t > (); + break; + + case 47: // "constant string" + case 48: // "integer" + case 49: // "constant hexstring" + case 50: // "option name" + case 51: // "ip address" yylhs.value.build< std::string > (); break; - case 55: // option_code + case 58: // option_code yylhs.value.build< uint16_t > (); break; - case 54: // integer_expr - case 59: // enterprise_id + case 57: // integer_expr + case 62: // enterprise_id yylhs.value.build< uint32_t > (); break; - case 57: // nest_level - yylhs.value.build< uint8_t > (); - break; - default: break; } @@ -739,8 +739,8 @@ namespace isc { namespace eval { { switch (yyn) { - case 4: -#line 119 "parser.yy" // lalr1.cc:859 + case 6: +#line 128 "parser.yy" // lalr1.cc:859 { TokenPtr neg(new TokenNot()); ctx.expression.push_back(neg); @@ -748,8 +748,8 @@ namespace isc { namespace eval { #line 749 "parser.cc" // lalr1.cc:859 break; - case 5: -#line 124 "parser.yy" // lalr1.cc:859 + case 7: +#line 133 "parser.yy" // lalr1.cc:859 { TokenPtr neg(new TokenAnd()); ctx.expression.push_back(neg); @@ -757,8 +757,8 @@ namespace isc { namespace eval { #line 758 "parser.cc" // lalr1.cc:859 break; - case 6: -#line 129 "parser.yy" // lalr1.cc:859 + case 8: +#line 138 "parser.yy" // lalr1.cc:859 { TokenPtr neg(new TokenOr()); ctx.expression.push_back(neg); @@ -766,8 +766,8 @@ namespace isc { namespace eval { #line 767 "parser.cc" // lalr1.cc:859 break; - case 7: -#line 134 "parser.yy" // lalr1.cc:859 + case 9: +#line 143 "parser.yy" // lalr1.cc:859 { TokenPtr eq(new TokenEqual()); ctx.expression.push_back(eq); @@ -775,8 +775,8 @@ namespace isc { namespace eval { #line 776 "parser.cc" // lalr1.cc:859 break; - case 8: -#line 139 "parser.yy" // lalr1.cc:859 + case 10: +#line 148 "parser.yy" // lalr1.cc:859 { TokenPtr opt(new TokenOption(yystack_[3].value.as< uint16_t > (), TokenOption::EXISTS)); ctx.expression.push_back(opt); @@ -784,8 +784,8 @@ namespace isc { namespace eval { #line 785 "parser.cc" // lalr1.cc:859 break; - case 9: -#line 144 "parser.yy" // lalr1.cc:859 + case 11: +#line 153 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V4: @@ -808,13 +808,13 @@ namespace isc { namespace eval { #line 809 "parser.cc" // lalr1.cc:859 break; - case 10: -#line 164 "parser.yy" // lalr1.cc:859 + case 12: +#line 173 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V6: { - TokenPtr opt(new TokenRelay6Option(yystack_[8].value.as< uint8_t > (), yystack_[3].value.as< uint16_t > (), TokenOption::EXISTS)); + TokenPtr opt(new TokenRelay6Option(yystack_[8].value.as< int8_t > (), yystack_[3].value.as< uint16_t > (), TokenOption::EXISTS)); ctx.expression.push_back(opt); break; } @@ -826,8 +826,8 @@ namespace isc { namespace eval { #line 827 "parser.cc" // lalr1.cc:859 break; - case 11: -#line 178 "parser.yy" // lalr1.cc:859 + case 13: +#line 187 "parser.yy" // lalr1.cc:859 { // Expression: vendor-class[1234].exists // @@ -839,8 +839,8 @@ namespace isc { namespace eval { #line 840 "parser.cc" // lalr1.cc:859 break; - case 12: -#line 187 "parser.yy" // lalr1.cc:859 + case 14: +#line 196 "parser.yy" // lalr1.cc:859 { // Expression: vendor[1234].exists // @@ -852,8 +852,8 @@ namespace isc { namespace eval { #line 853 "parser.cc" // lalr1.cc:859 break; - case 13: -#line 196 "parser.yy" // lalr1.cc:859 + case 15: +#line 205 "parser.yy" // lalr1.cc:859 { // Expression vendor[1234].option[123].exists // @@ -866,8 +866,8 @@ namespace isc { namespace eval { #line 867 "parser.cc" // lalr1.cc:859 break; - case 14: -#line 208 "parser.yy" // lalr1.cc:859 + case 16: +#line 217 "parser.yy" // lalr1.cc:859 { TokenPtr str(new TokenString(yystack_[0].value.as< std::string > ())); ctx.expression.push_back(str); @@ -875,8 +875,8 @@ namespace isc { namespace eval { #line 876 "parser.cc" // lalr1.cc:859 break; - case 15: -#line 213 "parser.yy" // lalr1.cc:859 + case 17: +#line 222 "parser.yy" // lalr1.cc:859 { TokenPtr hex(new TokenHexString(yystack_[0].value.as< std::string > ())); ctx.expression.push_back(hex); @@ -884,8 +884,8 @@ namespace isc { namespace eval { #line 885 "parser.cc" // lalr1.cc:859 break; - case 16: -#line 218 "parser.yy" // lalr1.cc:859 + case 18: +#line 227 "parser.yy" // lalr1.cc:859 { TokenPtr ip(new TokenIpAddress(yystack_[0].value.as< std::string > ())); ctx.expression.push_back(ip); @@ -893,8 +893,8 @@ namespace isc { namespace eval { #line 894 "parser.cc" // lalr1.cc:859 break; - case 17: -#line 223 "parser.yy" // lalr1.cc:859 + case 19: +#line 232 "parser.yy" // lalr1.cc:859 { TokenPtr opt(new TokenOption(yystack_[3].value.as< uint16_t > (), yystack_[0].value.as< TokenOption::RepresentationType > ())); ctx.expression.push_back(opt); @@ -902,8 +902,8 @@ namespace isc { namespace eval { #line 903 "parser.cc" // lalr1.cc:859 break; - case 18: -#line 228 "parser.yy" // lalr1.cc:859 + case 20: +#line 237 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V4: @@ -926,13 +926,13 @@ namespace isc { namespace eval { #line 927 "parser.cc" // lalr1.cc:859 break; - case 19: -#line 249 "parser.yy" // lalr1.cc:859 + case 21: +#line 258 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V6: { - TokenPtr opt(new TokenRelay6Option(yystack_[8].value.as< uint8_t > (), yystack_[3].value.as< uint16_t > (), yystack_[0].value.as< TokenOption::RepresentationType > ())); + TokenPtr opt(new TokenRelay6Option(yystack_[8].value.as< int8_t > (), yystack_[3].value.as< uint16_t > (), yystack_[0].value.as< TokenOption::RepresentationType > ())); ctx.expression.push_back(opt); break; } @@ -944,8 +944,8 @@ namespace isc { namespace eval { #line 945 "parser.cc" // lalr1.cc:859 break; - case 20: -#line 264 "parser.yy" // lalr1.cc:859 + case 22: +#line 273 "parser.yy" // lalr1.cc:859 { TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as< TokenPkt::MetadataType > ())); ctx.expression.push_back(pkt_metadata); @@ -953,8 +953,8 @@ namespace isc { namespace eval { #line 954 "parser.cc" // lalr1.cc:859 break; - case 21: -#line 269 "parser.yy" // lalr1.cc:859 + case 23: +#line 278 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V4: @@ -971,8 +971,8 @@ namespace isc { namespace eval { #line 972 "parser.cc" // lalr1.cc:859 break; - case 22: -#line 283 "parser.yy" // lalr1.cc:859 + case 24: +#line 292 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V6: @@ -989,13 +989,13 @@ namespace isc { namespace eval { #line 990 "parser.cc" // lalr1.cc:859 break; - case 23: -#line 297 "parser.yy" // lalr1.cc:859 + case 25: +#line 306 "parser.yy" // lalr1.cc:859 { switch (ctx.getUniverse()) { case Option::V6: { - TokenPtr relay6field(new TokenRelay6Field(yystack_[3].value.as< uint8_t > (), yystack_[0].value.as< TokenRelay6Field::FieldType > ())); + TokenPtr relay6field(new TokenRelay6Field(yystack_[3].value.as< int8_t > (), yystack_[0].value.as< TokenRelay6Field::FieldType > ())); ctx.expression.push_back(relay6field); break; } @@ -1007,8 +1007,8 @@ namespace isc { namespace eval { #line 1008 "parser.cc" // lalr1.cc:859 break; - case 24: -#line 312 "parser.yy" // lalr1.cc:859 + case 26: +#line 321 "parser.yy" // lalr1.cc:859 { TokenPtr sub(new TokenSubstring()); ctx.expression.push_back(sub); @@ -1016,8 +1016,8 @@ namespace isc { namespace eval { #line 1017 "parser.cc" // lalr1.cc:859 break; - case 25: -#line 317 "parser.yy" // lalr1.cc:859 + case 27: +#line 326 "parser.yy" // lalr1.cc:859 { TokenPtr conc(new TokenConcat()); ctx.expression.push_back(conc); @@ -1025,8 +1025,8 @@ namespace isc { namespace eval { #line 1026 "parser.cc" // lalr1.cc:859 break; - case 26: -#line 322 "parser.yy" // lalr1.cc:859 + case 28: +#line 331 "parser.yy" // lalr1.cc:859 { // expression: vendor.enterprise // @@ -1038,8 +1038,8 @@ namespace isc { namespace eval { #line 1039 "parser.cc" // lalr1.cc:859 break; - case 27: -#line 331 "parser.yy" // lalr1.cc:859 + case 29: +#line 340 "parser.yy" // lalr1.cc:859 { // expression: vendor-class.enterprise // @@ -1052,8 +1052,8 @@ namespace isc { namespace eval { #line 1053 "parser.cc" // lalr1.cc:859 break; - case 28: -#line 341 "parser.yy" // lalr1.cc:859 + case 30: +#line 350 "parser.yy" // lalr1.cc:859 { // This token will search for vendor option with // specified enterprise-id. If found, will search @@ -1065,8 +1065,8 @@ namespace isc { namespace eval { #line 1066 "parser.cc" // lalr1.cc:859 break; - case 29: -#line 350 "parser.yy" // lalr1.cc:859 + case 31: +#line 359 "parser.yy" // lalr1.cc:859 { // expression: vendor-class[1234].data // @@ -1082,8 +1082,8 @@ namespace isc { namespace eval { #line 1083 "parser.cc" // lalr1.cc:859 break; - case 30: -#line 363 "parser.yy" // lalr1.cc:859 + case 32: +#line 372 "parser.yy" // lalr1.cc:859 { // expression: vendor-class[1234].data[5] // @@ -1099,8 +1099,8 @@ namespace isc { namespace eval { #line 1100 "parser.cc" // lalr1.cc:859 break; - case 31: -#line 376 "parser.yy" // lalr1.cc:859 + case 33: +#line 385 "parser.yy" // lalr1.cc:859 { TokenPtr integer(new TokenInteger(yystack_[0].value.as< uint32_t > ())); ctx.expression.push_back(integer); @@ -1108,208 +1108,208 @@ namespace isc { namespace eval { #line 1109 "parser.cc" // lalr1.cc:859 break; - case 32: -#line 383 "parser.yy" // lalr1.cc:859 + case 34: +#line 392 "parser.yy" // lalr1.cc:859 { yylhs.value.as< uint32_t > () = ctx.convertUint32(yystack_[0].value.as< std::string > (), yystack_[0].location); } #line 1117 "parser.cc" // lalr1.cc:859 break; - case 33: -#line 389 "parser.yy" // lalr1.cc:859 + case 35: +#line 398 "parser.yy" // lalr1.cc:859 { yylhs.value.as< uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as< std::string > (), yystack_[0].location); } #line 1125 "parser.cc" // lalr1.cc:859 break; - case 34: -#line 393 "parser.yy" // lalr1.cc:859 + case 36: +#line 402 "parser.yy" // lalr1.cc:859 { yylhs.value.as< uint16_t > () = ctx.convertOptionName(yystack_[0].value.as< std::string > (), yystack_[0].location); } #line 1133 "parser.cc" // lalr1.cc:859 break; - case 35: -#line 399 "parser.yy" // lalr1.cc:859 + case 37: +#line 408 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenOption::RepresentationType > () = TokenOption::TEXTUAL; } #line 1141 "parser.cc" // lalr1.cc:859 break; - case 36: -#line 403 "parser.yy" // lalr1.cc:859 + case 38: +#line 412 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL; } #line 1149 "parser.cc" // lalr1.cc:859 break; - case 37: -#line 409 "parser.yy" // lalr1.cc:859 + case 39: +#line 418 "parser.yy" // lalr1.cc:859 { - yylhs.value.as< uint8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as< std::string > (), yystack_[0].location); + yylhs.value.as< int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as< std::string > (), yystack_[0].location); } #line 1157 "parser.cc" // lalr1.cc:859 break; - case 38: -#line 418 "parser.yy" // lalr1.cc:859 + case 40: +#line 427 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt::MetadataType > () = TokenPkt::IFACE; } #line 1165 "parser.cc" // lalr1.cc:859 break; - case 39: -#line 422 "parser.yy" // lalr1.cc:859 + case 41: +#line 431 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt::MetadataType > () = TokenPkt::SRC; } #line 1173 "parser.cc" // lalr1.cc:859 break; - case 40: -#line 426 "parser.yy" // lalr1.cc:859 + case 42: +#line 435 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt::MetadataType > () = TokenPkt::DST; } #line 1181 "parser.cc" // lalr1.cc:859 break; - case 41: -#line 430 "parser.yy" // lalr1.cc:859 + case 43: +#line 439 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt::MetadataType > () = TokenPkt::LEN; } #line 1189 "parser.cc" // lalr1.cc:859 break; - case 42: -#line 436 "parser.yy" // lalr1.cc:859 + case 44: +#line 445 "parser.yy" // lalr1.cc:859 { yylhs.value.as< uint32_t > () = ctx.convertUint32(yystack_[0].value.as< std::string > (), yystack_[0].location); } #line 1197 "parser.cc" // lalr1.cc:859 break; - case 43: -#line 440 "parser.yy" // lalr1.cc:859 + case 45: +#line 449 "parser.yy" // lalr1.cc:859 { yylhs.value.as< uint32_t > () = 0; } #line 1205 "parser.cc" // lalr1.cc:859 break; - case 44: -#line 446 "parser.yy" // lalr1.cc:859 + case 46: +#line 455 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::CHADDR; } #line 1213 "parser.cc" // lalr1.cc:859 break; - case 45: -#line 450 "parser.yy" // lalr1.cc:859 + case 47: +#line 459 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::HLEN; } #line 1221 "parser.cc" // lalr1.cc:859 break; - case 46: -#line 454 "parser.yy" // lalr1.cc:859 + case 48: +#line 463 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::HTYPE; } #line 1229 "parser.cc" // lalr1.cc:859 break; - case 47: -#line 458 "parser.yy" // lalr1.cc:859 + case 49: +#line 467 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::CIADDR; } #line 1237 "parser.cc" // lalr1.cc:859 break; - case 48: -#line 462 "parser.yy" // lalr1.cc:859 + case 50: +#line 471 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::GIADDR; } #line 1245 "parser.cc" // lalr1.cc:859 break; - case 49: -#line 466 "parser.yy" // lalr1.cc:859 + case 51: +#line 475 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::YIADDR; } #line 1253 "parser.cc" // lalr1.cc:859 break; - case 50: -#line 470 "parser.yy" // lalr1.cc:859 + case 52: +#line 479 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::SIADDR; } #line 1261 "parser.cc" // lalr1.cc:859 break; - case 51: -#line 474 "parser.yy" // lalr1.cc:859 + case 53: +#line 483 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE; } #line 1269 "parser.cc" // lalr1.cc:859 break; - case 52: -#line 478 "parser.yy" // lalr1.cc:859 + case 54: +#line 487 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt4::FieldType > () = TokenPkt4::TRANSID; } #line 1277 "parser.cc" // lalr1.cc:859 break; - case 53: -#line 484 "parser.yy" // lalr1.cc:859 + case 55: +#line 493 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE; } #line 1285 "parser.cc" // lalr1.cc:859 break; - case 54: -#line 488 "parser.yy" // lalr1.cc:859 + case 56: +#line 497 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenPkt6::FieldType > () = TokenPkt6::TRANSID; } #line 1293 "parser.cc" // lalr1.cc:859 break; - case 55: -#line 494 "parser.yy" // lalr1.cc:859 + case 57: +#line 503 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR; } #line 1301 "parser.cc" // lalr1.cc:859 break; - case 56: -#line 498 "parser.yy" // lalr1.cc:859 + case 58: +#line 507 "parser.yy" // lalr1.cc:859 { yylhs.value.as< TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR; } #line 1309 "parser.cc" // lalr1.cc:859 break; - case 57: -#line 504 "parser.yy" // lalr1.cc:859 + case 59: +#line 513 "parser.yy" // lalr1.cc:859 { TokenPtr str(new TokenString(yystack_[0].value.as< std::string > ())); ctx.expression.push_back(str); @@ -1317,8 +1317,8 @@ namespace isc { namespace eval { #line 1318 "parser.cc" // lalr1.cc:859 break; - case 58: -#line 511 "parser.yy" // lalr1.cc:859 + case 60: +#line 520 "parser.yy" // lalr1.cc:859 { TokenPtr str(new TokenString(yystack_[0].value.as< std::string > ())); ctx.expression.push_back(str); @@ -1326,8 +1326,8 @@ namespace isc { namespace eval { #line 1327 "parser.cc" // lalr1.cc:859 break; - case 59: -#line 516 "parser.yy" // lalr1.cc:859 + case 61: +#line 525 "parser.yy" // lalr1.cc:859 { TokenPtr str(new TokenString("all")); ctx.expression.push_back(str); @@ -1591,153 +1591,162 @@ namespace isc { namespace eval { } - const signed char EvalParser::yypact_ninf_ = -91; + const signed char EvalParser::yypact_ninf_ = -106; const signed char EvalParser::yytable_ninf_ = -1; const short int EvalParser::yypact_[] = { - 3, 3, 3, -5, 13, 23, 4, 14, 54, 80, - 68, 37, 95, -91, -91, -91, -91, 93, 35, 98, - -91, 73, -91, 67, 67, 64, 50, 69, 45, 45, - 84, -20, 74, -20, 81, -91, 3, 3, 45, -91, - -91, -91, 109, 111, -91, 112, -91, -91, -91, -91, - -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, - -91, 114, 115, 116, 100, 103, 96, 97, -91, -91, - -91, -91, -91, 118, -91, 119, -91, -91, 129, -91, - 120, 121, 122, 67, 67, 64, -20, -20, 94, 45, - 123, 125, 16, 28, 6, 127, 128, 130, 131, 132, - -91, 113, 140, -14, -2, -91, -91, -91, -91, -91, - -91, 135, -91, -91, -91, 134, 136, 137, 138, 139, - -30, -91, -91, 142, 143, -91, 67, 58, 58, 12, - 108, 149, -91, -91, 155, 117, 67, 145, 147, 148, - -91, 150, 151, 152, 67, 67, -91, 153, 70, 156, - 157, 86, -91, -91, 154, 158, -91, -91, 58, 58 + 24, 8, 51, 5, 8, 8, -2, 10, 20, -7, + 31, 47, 72, 42, 69, 90, -106, -106, -106, -106, + -106, 83, 78, -106, 25, 82, 108, 91, 104, -106, + -106, 36, -106, 71, 71, 53, 44, 85, 51, 51, + 87, -17, 86, -17, 88, 8, 8, 51, 71, 71, + 53, -17, -17, -106, -106, -106, 114, 116, -106, 118, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, 99, 100, -106, -106, -106, + -106, -106, 121, -106, 122, -106, -106, 132, -106, 124, + 125, 126, 127, 128, 129, 130, 131, 96, 51, 133, + 134, 135, 136, 137, 138, 139, 55, 60, -5, -106, + 113, 152, -16, 7, 110, 110, 23, 115, 148, -106, + -106, -106, -106, -106, -106, 145, -106, -106, -106, -28, + -106, -106, 146, 147, -106, 149, 150, 71, -106, -106, + 158, 117, 71, 71, 71, 151, -106, 153, 154, 155, + 156, 157, -106, 159, 160, 161, 63, 76, 110, 110, + -106, -106, -106, -106 }; const unsigned char EvalParser::yydefact_[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 32, 15, 16, 0, 2, 0, - 31, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, - 33, 34, 0, 0, 37, 0, 38, 39, 40, 41, - 20, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 21, 0, 0, 0, 0, 0, 0, 0, 53, 54, - 22, 43, 42, 0, 27, 0, 26, 5, 6, 7, + 0, 0, 0, 0, 0, 0, 16, 34, 17, 18, + 2, 4, 0, 33, 0, 0, 0, 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, 5, 35, 36, 0, 0, 39, 0, + 40, 41, 42, 43, 22, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 23, 0, 0, 55, 56, 24, + 45, 44, 0, 29, 0, 28, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 0, 0, 35, 36, 8, 17, 9, - 18, 0, 55, 56, 23, 0, 0, 0, 0, 0, - 0, 25, 11, 29, 0, 12, 0, 0, 0, 0, - 0, 0, 59, 58, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 10, 19, 0, 0, 13, 28, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, + 38, 10, 19, 11, 20, 0, 57, 58, 25, 0, + 27, 13, 31, 0, 14, 0, 0, 0, 61, 60, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 12, 21, 15, 30 }; - const signed char + const short int EvalParser::yypgoto_[] = { - -91, -91, 30, -27, -91, -24, -90, 79, -91, -23, - -91, -91, -91, -91, -91 + -106, -106, -106, 18, -1, -106, -34, -105, 140, -106, + -22, -106, -106, -106, -106, -106 }; const short int EvalParser::yydefgoto_[] = { - -1, 17, 18, 19, 20, 42, 108, 45, 50, 73, - 60, 70, 114, 101, 134 + -1, 3, 20, 21, 22, 23, 56, 122, 59, 64, + 82, 74, 79, 128, 110, 140 }; const unsigned char EvalParser::yytable_[] = { - 43, 66, 67, 110, 132, 122, 1, 124, 2, 23, - 75, 79, 3, 4, 5, 111, 133, 125, 112, 113, - 26, 138, 71, 6, 112, 113, 72, 24, 7, 123, - 27, 21, 22, 105, 106, 107, 8, 25, 110, 9, - 10, 36, 37, 11, 12, 105, 106, 109, 13, 14, - 15, 31, 16, 32, 61, 62, 63, 28, 153, 95, - 96, 157, 102, 98, 99, 6, 77, 78, 153, 157, - 7, 46, 47, 48, 49, 105, 106, 39, 8, 36, - 37, 9, 10, 29, 30, 64, 65, 105, 106, 152, - 13, 14, 15, 35, 16, 51, 52, 53, 54, 55, - 56, 57, 137, 105, 106, 156, 38, 58, 59, 33, - 44, 34, 142, 40, 86, 41, 32, 87, 74, 34, - 149, 150, 68, 69, 80, 76, 81, 82, 83, 84, - 85, 88, 89, 90, 91, 36, 92, 93, 94, 103, - 100, 104, 115, 116, 121, 117, 118, 119, 120, 126, - 127, 123, 128, 129, 130, 131, 135, 136, 139, 140, - 143, 144, 145, 141, 97, 146, 147, 0, 148, 151, - 158, 154, 155, 0, 159 + 57, 29, 124, 131, 125, 30, 138, 126, 127, 36, + 124, 4, 33, 5, 89, 90, 133, 6, 7, 8, + 139, 84, 31, 32, 34, 80, 134, 132, 9, 92, + 93, 81, 135, 10, 35, 126, 127, 75, 76, 48, + 53, 11, 45, 46, 12, 13, 88, 37, 14, 15, + 38, 161, 163, 161, 163, 16, 17, 18, 40, 19, + 24, 25, 26, 86, 87, 60, 61, 62, 63, 1, + 2, 9, 119, 120, 121, 39, 10, 119, 120, 123, + 119, 120, 160, 41, 11, 42, 47, 12, 13, 45, + 46, 27, 28, 119, 120, 162, 49, 111, 16, 17, + 18, 58, 19, 145, 43, 51, 44, 42, 148, 149, + 150, 65, 66, 67, 68, 69, 70, 71, 52, 54, + 44, 55, 50, 72, 73, 77, 78, 119, 120, 94, + 83, 95, 85, 96, 97, 98, 99, 100, 45, 101, + 102, 103, 104, 105, 109, 106, 107, 108, 129, 112, + 113, 114, 115, 116, 117, 118, 130, 136, 132, 137, + 141, 142, 146, 143, 144, 147, 151, 0, 152, 153, + 154, 155, 0, 156, 0, 157, 158, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 91 }; const short int EvalParser::yycheck_[] = { - 24, 28, 29, 93, 34, 19, 3, 9, 5, 14, - 33, 38, 9, 10, 11, 9, 46, 19, 12, 13, - 16, 9, 42, 20, 12, 13, 46, 14, 25, 43, - 16, 1, 2, 17, 18, 19, 33, 14, 128, 36, - 37, 6, 7, 40, 41, 17, 18, 19, 45, 46, - 47, 14, 49, 16, 9, 10, 11, 3, 148, 83, - 84, 151, 89, 86, 87, 20, 36, 37, 158, 159, - 25, 21, 22, 23, 24, 17, 18, 4, 33, 6, - 7, 36, 37, 3, 16, 40, 41, 17, 18, 19, - 45, 46, 47, 0, 49, 26, 27, 28, 29, 30, - 31, 32, 126, 17, 18, 19, 8, 38, 39, 14, - 46, 16, 136, 46, 14, 48, 16, 14, 44, 16, - 144, 145, 38, 39, 15, 44, 15, 15, 14, 14, - 14, 35, 35, 15, 15, 6, 16, 16, 16, 16, - 46, 16, 15, 15, 4, 15, 15, 15, 35, 14, - 16, 43, 16, 16, 16, 16, 14, 14, 9, 4, - 15, 14, 14, 46, 85, 15, 15, -1, 16, 16, - 16, 15, 15, -1, 16 + 34, 2, 107, 19, 9, 0, 34, 12, 13, 16, + 115, 3, 14, 5, 48, 49, 9, 9, 10, 11, + 48, 43, 4, 5, 14, 42, 19, 43, 20, 51, + 52, 48, 9, 25, 14, 12, 13, 38, 39, 14, + 4, 33, 6, 7, 36, 37, 47, 16, 40, 41, + 3, 156, 157, 158, 159, 47, 48, 49, 16, 51, + 9, 10, 11, 45, 46, 21, 22, 23, 24, 45, + 46, 20, 17, 18, 19, 3, 25, 17, 18, 19, + 17, 18, 19, 14, 33, 16, 8, 36, 37, 6, + 7, 40, 41, 17, 18, 19, 14, 98, 47, 48, + 49, 48, 51, 137, 14, 14, 16, 16, 142, 143, + 144, 26, 27, 28, 29, 30, 31, 32, 14, 48, + 16, 50, 14, 38, 39, 38, 39, 17, 18, 15, + 44, 15, 44, 15, 35, 35, 15, 15, 6, 15, + 15, 15, 15, 15, 48, 16, 16, 16, 35, 16, + 16, 16, 16, 16, 16, 16, 4, 9, 43, 14, + 14, 14, 4, 14, 14, 48, 15, -1, 15, 15, + 15, 15, -1, 16, -1, 16, 16, 16, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 50 }; const unsigned char EvalParser::yystos_[] = { - 0, 3, 5, 9, 10, 11, 20, 25, 33, 36, - 37, 40, 41, 45, 46, 47, 49, 51, 52, 53, - 54, 52, 52, 14, 14, 14, 16, 16, 3, 3, - 16, 14, 16, 14, 16, 0, 6, 7, 8, 4, - 46, 48, 55, 55, 46, 57, 21, 22, 23, 24, - 58, 26, 27, 28, 29, 30, 31, 32, 38, 39, - 60, 9, 10, 11, 40, 41, 53, 53, 38, 39, - 61, 42, 46, 59, 44, 59, 44, 52, 52, 53, - 15, 15, 15, 14, 14, 14, 14, 14, 35, 35, - 15, 15, 16, 16, 16, 55, 55, 57, 59, 59, - 46, 63, 53, 16, 16, 17, 18, 19, 56, 19, - 56, 9, 12, 13, 62, 15, 15, 15, 15, 15, - 35, 4, 19, 43, 9, 19, 14, 16, 16, 16, - 16, 16, 34, 46, 64, 14, 14, 55, 9, 9, - 4, 46, 55, 15, 14, 14, 15, 15, 16, 55, - 55, 16, 19, 56, 15, 15, 19, 56, 16, 16 + 0, 45, 46, 53, 3, 5, 9, 10, 11, 20, + 25, 33, 36, 37, 40, 41, 47, 48, 49, 51, + 54, 55, 56, 57, 9, 10, 11, 40, 41, 56, + 0, 55, 55, 14, 14, 14, 16, 16, 3, 3, + 16, 14, 16, 14, 16, 6, 7, 8, 14, 14, + 14, 14, 14, 4, 48, 50, 58, 58, 48, 60, + 21, 22, 23, 24, 61, 26, 27, 28, 29, 30, + 31, 32, 38, 39, 63, 56, 56, 38, 39, 64, + 42, 48, 62, 44, 62, 44, 55, 55, 56, 58, + 58, 60, 62, 62, 15, 15, 15, 35, 35, 15, + 15, 15, 15, 15, 15, 15, 16, 16, 16, 48, + 66, 56, 16, 16, 16, 16, 16, 16, 16, 17, + 18, 19, 59, 19, 59, 9, 12, 13, 65, 35, + 4, 19, 43, 9, 19, 9, 9, 14, 34, 48, + 67, 14, 14, 14, 14, 58, 4, 48, 58, 58, + 58, 15, 15, 15, 15, 15, 16, 16, 16, 16, + 19, 59, 19, 59 }; const unsigned char EvalParser::yyr1_[] = { - 0, 50, 51, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 54, 55, 55, 56, 56, 57, 58, 58, - 58, 58, 59, 59, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 61, 61, 62, 62, 63, 64, 64 + 0, 52, 53, 53, 54, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 57, 58, 58, 59, 59, 60, + 61, 61, 61, 61, 62, 62, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 64, 64, 65, 65, 66, + 67, 67 }; const unsigned char EvalParser::yyr2_[] = { - 0, 2, 1, 3, 2, 3, 3, 3, 6, 6, - 11, 6, 6, 11, 1, 1, 1, 6, 6, 11, - 3, 3, 3, 6, 8, 6, 3, 3, 11, 6, - 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 1, 3, 2, 3, 3, 3, + 6, 6, 11, 6, 6, 11, 1, 1, 1, 6, + 6, 11, 3, 3, 3, 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 + 1, 1 }; @@ -1755,23 +1764,25 @@ namespace isc { namespace eval { "\"giaddr\"", "\"yiaddr\"", "\"siaddr\"", "\"substring\"", "\"all\"", "\",\"", "\"concat\"", "\"pkt6\"", "\"msgtype\"", "\"transid\"", "\"vendor-class\"", "\"vendor\"", "\"*\"", "\"data\"", "\"enterprise\"", - "\"constant string\"", "\"integer\"", "\"constant hexstring\"", - "\"option name\"", "\"ip address\"", "$accept", "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 + "\"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 }; #if EVALDEBUG const unsigned short int EvalParser::yyrline_[] = { - 0, 114, 114, 117, 118, 123, 128, 133, 138, 143, - 163, 177, 186, 195, 207, 212, 217, 222, 227, 248, - 263, 268, 282, 296, 311, 316, 321, 330, 340, 349, - 362, 375, 382, 388, 392, 398, 402, 408, 417, 421, - 425, 429, 435, 439, 445, 449, 453, 457, 461, 465, - 469, 473, 477, 483, 487, 493, 497, 503, 510, 515 + 0, 117, 117, 118, 123, 126, 127, 132, 137, 142, + 147, 152, 172, 186, 195, 204, 216, 221, 226, 231, + 236, 257, 272, 277, 291, 305, 320, 325, 330, 339, + 349, 358, 371, 384, 391, 397, 401, 407, 411, 417, + 426, 430, 434, 438, 444, 448, 454, 458, 462, 466, + 470, 474, 478, 482, 486, 492, 496, 502, 506, 512, + 519, 524 }; // Print the state stack on the debug stream. @@ -1806,8 +1817,8 @@ namespace isc { namespace eval { #line 14 "parser.yy" // lalr1.cc:1167 } } // isc::eval -#line 1810 "parser.cc" // lalr1.cc:1167 -#line 522 "parser.yy" // lalr1.cc:1168 +#line 1821 "parser.cc" // lalr1.cc:1167 +#line 531 "parser.yy" // lalr1.cc:1168 void isc::eval::EvalParser::error(const location_type& loc, |