From: Francis Dupont Date: Mon, 30 Mar 2020 14:27:22 +0000 (+0000) Subject: [#1070] regen flex and bison (d2) X-Git-Tag: Kea-1.7.7~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7415942352154eef82f327d253d4e4442c55ec94;p=thirdparty%2Fkea.git [#1070] regen flex and bison (d2) --- diff --git a/src/bin/d2/d2_parser.cc b/src/bin/d2/d2_parser.cc index b85c1f6d3c..cf4823c1e5 100644 --- a/src/bin/d2/d2_parser.cc +++ b/src/bin/d2/d2_parser.cc @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.4.2. +// A Bison parser, made by GNU Bison 3.5.3. // Skeleton implementation for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -185,10 +185,11 @@ namespace isc { namespace d2 { /// Build a parser object. D2Parser::D2Parser (isc::d2::D2ParserContext& ctx_yyarg) - : #if D2_PARSER_DEBUG - yydebug_ (false), + : yydebug_ (false), yycdebug_ (&std::cerr), +#else + : #endif ctx (ctx_yyarg) {} @@ -237,7 +238,7 @@ namespace isc { namespace d2 { if (state == empty_state) return empty_symbol; else - return yystos_[state]; + return yystos_[+state]; } D2Parser::stack_symbol_type::stack_symbol_type () @@ -316,6 +317,42 @@ namespace isc { namespace d2 { } #if YY_CPLUSPLUS < 201103L + D2Parser::stack_symbol_type& + D2Parser::stack_symbol_type::operator= (const stack_symbol_type& that) + { + state = that.state; + switch (that.type_get ()) + { + case 72: // value + case 76: // map_value + case 100: // ncr_protocol_value + value.copy< ElementPtr > (that.value); + break; + + case 60: // "boolean" + value.copy< bool > (that.value); + break; + + case 59: // "floating point" + value.copy< double > (that.value); + break; + + case 58: // "integer" + value.copy< int64_t > (that.value); + break; + + case 57: // "constant string" + value.copy< std::string > (that.value); + break; + + default: + break; + } + + location = that.location; + return *this; + } + D2Parser::stack_symbol_type& D2Parser::stack_symbol_type::operator= (stack_symbol_type& that) { @@ -385,44 +422,44 @@ namespace isc { namespace d2 { { case 57: // "constant string" #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < std::string > (); } -#line 390 "d2_parser.cc" + { yyoutput << yysym.value.template as < std::string > (); } +#line 427 "d2_parser.cc" break; case 58: // "integer" #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < int64_t > (); } -#line 396 "d2_parser.cc" + { yyoutput << yysym.value.template as < int64_t > (); } +#line 433 "d2_parser.cc" break; case 59: // "floating point" #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < double > (); } -#line 402 "d2_parser.cc" + { yyoutput << yysym.value.template as < double > (); } +#line 439 "d2_parser.cc" break; case 60: // "boolean" #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < bool > (); } -#line 408 "d2_parser.cc" + { yyoutput << yysym.value.template as < bool > (); } +#line 445 "d2_parser.cc" break; case 72: // value #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 414 "d2_parser.cc" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 451 "d2_parser.cc" break; case 76: // map_value #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 420 "d2_parser.cc" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 457 "d2_parser.cc" break; case 100: // ncr_protocol_value #line 116 "d2_parser.yy" - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 426 "d2_parser.cc" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 463 "d2_parser.cc" break; default: @@ -515,7 +552,6 @@ namespace isc { namespace d2 { int D2Parser::parse () { - // State. int yyn; /// Length of the RHS of the rule being reduced. int yylen = 0; @@ -551,7 +587,7 @@ namespace isc { namespace d2 { | yynewstate -- push a new symbol on the stack. | `-----------------------------------------------*/ yynewstate: - YYCDEBUG << "Entering state " << yystack_[0].state << '\n'; + YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; // Accept? if (yystack_[0].state == yyfinal_) @@ -565,7 +601,7 @@ namespace isc { namespace d2 { `-----------*/ yybackup: // Try to take a decision without lookahead. - yyn = yypact_[yystack_[0].state]; + yyn = yypact_[+yystack_[0].state]; if (yy_pact_value_is_default_ (yyn)) goto yydefault; @@ -595,7 +631,9 @@ namespace isc { namespace d2 { to detect an error, take that action. */ yyn += yyla.type_get (); if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ()) - goto yydefault; + { + goto yydefault; + } // Reduce or error. yyn = yytable_[yyn]; @@ -612,7 +650,7 @@ namespace isc { namespace d2 { --yyerrstatus_; // Shift the lookahead token. - yypush_ ("Shifting", yyn, YY_MOVE (yyla)); + yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla)); goto yynewstate; @@ -620,7 +658,7 @@ namespace isc { namespace d2 { | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: - yyn = yydefact_[yystack_[0].state]; + yyn = yydefact_[+yystack_[0].state]; if (yyn == 0) goto yyerrlab; goto yyreduce; @@ -683,293 +721,293 @@ namespace isc { namespace d2 { { case 2: #line 125 "d2_parser.yy" - { ctx.ctx_ = ctx.NO_KEYWORD; } -#line 688 "d2_parser.cc" + { ctx.ctx_ = ctx.NO_KEYWORD; } +#line 726 "d2_parser.cc" break; case 4: #line 126 "d2_parser.yy" - { ctx.ctx_ = ctx.CONFIG; } -#line 694 "d2_parser.cc" + { ctx.ctx_ = ctx.CONFIG; } +#line 732 "d2_parser.cc" break; case 6: #line 127 "d2_parser.yy" - { ctx.ctx_ = ctx.DHCPDDNS; } -#line 700 "d2_parser.cc" + { ctx.ctx_ = ctx.DHCPDDNS; } +#line 738 "d2_parser.cc" break; case 8: #line 128 "d2_parser.yy" - { ctx.ctx_ = ctx.TSIG_KEY; } -#line 706 "d2_parser.cc" + { ctx.ctx_ = ctx.TSIG_KEY; } +#line 744 "d2_parser.cc" break; case 10: #line 129 "d2_parser.yy" - { ctx.ctx_ = ctx.TSIG_KEYS; } -#line 712 "d2_parser.cc" + { ctx.ctx_ = ctx.TSIG_KEYS; } +#line 750 "d2_parser.cc" break; case 12: #line 130 "d2_parser.yy" - { ctx.ctx_ = ctx.DDNS_DOMAIN; } -#line 718 "d2_parser.cc" + { ctx.ctx_ = ctx.DDNS_DOMAIN; } +#line 756 "d2_parser.cc" break; case 14: #line 131 "d2_parser.yy" - { ctx.ctx_ = ctx.DDNS_DOMAINS; } -#line 724 "d2_parser.cc" + { ctx.ctx_ = ctx.DDNS_DOMAINS; } +#line 762 "d2_parser.cc" break; case 16: #line 132 "d2_parser.yy" - { ctx.ctx_ = ctx.DNS_SERVERS; } -#line 730 "d2_parser.cc" + { ctx.ctx_ = ctx.DNS_SERVERS; } +#line 768 "d2_parser.cc" break; case 18: #line 133 "d2_parser.yy" - { ctx.ctx_ = ctx.DNS_SERVERS; } -#line 736 "d2_parser.cc" + { ctx.ctx_ = ctx.DNS_SERVERS; } +#line 774 "d2_parser.cc" break; case 20: #line 141 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } -#line 742 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } +#line 780 "d2_parser.cc" break; case 21: #line 142 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } -#line 748 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } +#line 786 "d2_parser.cc" break; case 22: #line 143 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } -#line 754 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } +#line 792 "d2_parser.cc" break; case 23: #line 144 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } -#line 760 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } +#line 798 "d2_parser.cc" break; case 24: #line 145 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } -#line 766 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } +#line 804 "d2_parser.cc" break; case 25: #line 146 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 772 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 810 "d2_parser.cc" break; case 26: #line 147 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 778 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 816 "d2_parser.cc" break; case 27: #line 150 "d2_parser.yy" - { + { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); } -#line 787 "d2_parser.cc" +#line 825 "d2_parser.cc" break; case 28: #line 155 "d2_parser.yy" - { + { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 798 "d2_parser.cc" +#line 836 "d2_parser.cc" break; case 29: #line 160 "d2_parser.yy" - { + { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place // for it. } -#line 808 "d2_parser.cc" +#line 846 "d2_parser.cc" break; case 30: #line 166 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 814 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 852 "d2_parser.cc" break; case 33: #line 173 "d2_parser.yy" - { + { // map containing a single entry ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); } -#line 823 "d2_parser.cc" +#line 861 "d2_parser.cc" break; case 34: #line 177 "d2_parser.yy" - { + { // map consisting of a shorter map followed by // comma and string:value ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); } -#line 833 "d2_parser.cc" +#line 871 "d2_parser.cc" break; case 35: #line 184 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 842 "d2_parser.cc" +#line 880 "d2_parser.cc" break; case 36: #line 187 "d2_parser.yy" - { + { // list parsing complete. Put any sanity checking here } -#line 850 "d2_parser.cc" +#line 888 "d2_parser.cc" break; case 39: #line 195 "d2_parser.yy" - { + { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } -#line 859 "d2_parser.cc" +#line 897 "d2_parser.cc" break; case 40: #line 199 "d2_parser.yy" - { + { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } -#line 868 "d2_parser.cc" +#line 906 "d2_parser.cc" break; case 41: #line 210 "d2_parser.yy" - { + { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); error(yystack_[1].location, "got unexpected keyword \"" + keyword + "\" in " + where + " map."); } -#line 879 "d2_parser.cc" +#line 917 "d2_parser.cc" break; case 42: #line 220 "d2_parser.yy" - { + { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 890 "d2_parser.cc" +#line 928 "d2_parser.cc" break; case 43: #line 225 "d2_parser.yy" - { + { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place // for it. } -#line 900 "d2_parser.cc" +#line 938 "d2_parser.cc" break; case 52: #line 247 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("DhcpDdns", m); ctx.stack_.push_back(m); ctx.enter(ctx.DHCPDDNS); } -#line 911 "d2_parser.cc" +#line 949 "d2_parser.cc" break; case 53: #line 252 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 920 "d2_parser.cc" +#line 958 "d2_parser.cc" break; case 54: #line 257 "d2_parser.yy" - { + { // Parse the dhcpddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 930 "d2_parser.cc" +#line 968 "d2_parser.cc" break; case 55: #line 261 "d2_parser.yy" - { + { // parsing completed } -#line 938 "d2_parser.cc" +#line 976 "d2_parser.cc" break; case 71: #line 285 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 946 "d2_parser.cc" +#line 984 "d2_parser.cc" break; case 72: #line 287 "d2_parser.yy" - { + { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", s); ctx.leave(); } -#line 956 "d2_parser.cc" +#line 994 "d2_parser.cc" break; case 73: #line 293 "d2_parser.yy" - { + { if (yystack_[0].value.as < int64_t > () <= 0 || yystack_[0].value.as < int64_t > () >= 65536 ) { error(yystack_[0].location, "port must be greater than zero but less than 65536"); } ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", i); } -#line 968 "d2_parser.cc" +#line 1006 "d2_parser.cc" break; case 74: #line 301 "d2_parser.yy" - { + { if (yystack_[0].value.as < int64_t > () <= 0) { error(yystack_[0].location, "dns-server-timeout must be greater than zero"); } else { @@ -977,67 +1015,67 @@ namespace isc { namespace d2 { ctx.stack_.back()->set("dns-server-timeout", i); } } -#line 981 "d2_parser.cc" +#line 1019 "d2_parser.cc" break; case 75: #line 310 "d2_parser.yy" - { + { ctx.enter(ctx.NCR_PROTOCOL); } -#line 989 "d2_parser.cc" +#line 1027 "d2_parser.cc" break; case 76: #line 312 "d2_parser.yy" - { + { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 998 "d2_parser.cc" +#line 1036 "d2_parser.cc" break; case 77: #line 318 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 1004 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } +#line 1042 "d2_parser.cc" break; case 78: #line 319 "d2_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 1010 "d2_parser.cc" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } +#line 1048 "d2_parser.cc" break; case 79: #line 322 "d2_parser.yy" - { + { ctx.enter(ctx.NCR_FORMAT); } -#line 1018 "d2_parser.cc" +#line 1056 "d2_parser.cc" break; case 80: #line 324 "d2_parser.yy" - { + { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 1028 "d2_parser.cc" +#line 1066 "d2_parser.cc" break; case 81: #line 330 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1036 "d2_parser.cc" +#line 1074 "d2_parser.cc" break; case 82: #line 332 "d2_parser.yy" - { + { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); ConstElementPtr old = parent->get("user-context"); @@ -1059,20 +1097,20 @@ namespace isc { namespace d2 { parent->set("user-context", user_context); ctx.leave(); } -#line 1063 "d2_parser.cc" +#line 1101 "d2_parser.cc" break; case 83: #line 355 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1071 "d2_parser.cc" +#line 1109 "d2_parser.cc" break; case 84: #line 357 "d2_parser.yy" - { + { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); @@ -1096,132 +1134,132 @@ namespace isc { namespace d2 { parent->set("user-context", user_context); ctx.leave(); } -#line 1100 "d2_parser.cc" +#line 1138 "d2_parser.cc" break; case 85: #line 382 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("forward-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.FORWARD_DDNS); } -#line 1111 "d2_parser.cc" +#line 1149 "d2_parser.cc" break; case 86: #line 387 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1120 "d2_parser.cc" +#line 1158 "d2_parser.cc" break; case 87: #line 392 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reverse-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.REVERSE_DDNS); } -#line 1131 "d2_parser.cc" +#line 1169 "d2_parser.cc" break; case 88: #line 397 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1140 "d2_parser.cc" +#line 1178 "d2_parser.cc" break; case 95: #line 416 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-domains", l); ctx.stack_.push_back(l); ctx.enter(ctx.DDNS_DOMAINS); } -#line 1151 "d2_parser.cc" +#line 1189 "d2_parser.cc" break; case 96: #line 421 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1160 "d2_parser.cc" +#line 1198 "d2_parser.cc" break; case 97: #line 426 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 1169 "d2_parser.cc" +#line 1207 "d2_parser.cc" break; case 98: #line 429 "d2_parser.yy" - { + { // parsing completed } -#line 1177 "d2_parser.cc" +#line 1215 "d2_parser.cc" break; case 103: #line 441 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1187 "d2_parser.cc" +#line 1225 "d2_parser.cc" break; case 104: #line 445 "d2_parser.yy" - { + { ctx.stack_.pop_back(); } -#line 1195 "d2_parser.cc" +#line 1233 "d2_parser.cc" break; case 105: #line 449 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1204 "d2_parser.cc" +#line 1242 "d2_parser.cc" break; case 106: #line 452 "d2_parser.yy" - { + { // parsing completed } -#line 1212 "d2_parser.cc" +#line 1250 "d2_parser.cc" break; case 115: #line 469 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1220 "d2_parser.cc" +#line 1258 "d2_parser.cc" break; case 116: #line 471 "d2_parser.yy" - { + { if (yystack_[0].value.as < std::string > () == "") { error(yystack_[1].location, "Ddns domain name cannot be blank"); } @@ -1230,111 +1268,111 @@ namespace isc { namespace d2 { ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1234 "d2_parser.cc" +#line 1272 "d2_parser.cc" break; case 117: #line 481 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1242 "d2_parser.cc" +#line 1280 "d2_parser.cc" break; case 118: #line 483 "d2_parser.yy" - { + { ElementPtr elem(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("key-name", name); ctx.leave(); } -#line 1253 "d2_parser.cc" +#line 1291 "d2_parser.cc" break; case 119: #line 493 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dns-servers", l); ctx.stack_.push_back(l); ctx.enter(ctx.DNS_SERVERS); } -#line 1264 "d2_parser.cc" +#line 1302 "d2_parser.cc" break; case 120: #line 498 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1273 "d2_parser.cc" +#line 1311 "d2_parser.cc" break; case 121: #line 503 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 1282 "d2_parser.cc" +#line 1320 "d2_parser.cc" break; case 122: #line 506 "d2_parser.yy" - { + { // parsing completed } -#line 1290 "d2_parser.cc" +#line 1328 "d2_parser.cc" break; case 125: #line 514 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1300 "d2_parser.cc" +#line 1338 "d2_parser.cc" break; case 126: #line 518 "d2_parser.yy" - { + { ctx.stack_.pop_back(); } -#line 1308 "d2_parser.cc" +#line 1346 "d2_parser.cc" break; case 127: #line 522 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1317 "d2_parser.cc" +#line 1355 "d2_parser.cc" break; case 128: #line 525 "d2_parser.yy" - { + { // parsing completed } -#line 1325 "d2_parser.cc" +#line 1363 "d2_parser.cc" break; case 137: #line 541 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1333 "d2_parser.cc" +#line 1371 "d2_parser.cc" break; case 138: #line 543 "d2_parser.yy" - { + { if (yystack_[0].value.as < std::string > () != "") { error(yystack_[1].location, "hostname is not yet supported"); } @@ -1343,123 +1381,123 @@ namespace isc { namespace d2 { ctx.stack_.back()->set("hostname", name); ctx.leave(); } -#line 1347 "d2_parser.cc" +#line 1385 "d2_parser.cc" break; case 139: #line 553 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1355 "d2_parser.cc" +#line 1393 "d2_parser.cc" break; case 140: #line 555 "d2_parser.yy" - { + { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", s); ctx.leave(); } -#line 1365 "d2_parser.cc" +#line 1403 "d2_parser.cc" break; case 141: #line 561 "d2_parser.yy" - { + { if (yystack_[0].value.as < int64_t > () <= 0 || yystack_[0].value.as < int64_t > () >= 65536 ) { error(yystack_[0].location, "port must be greater than zero but less than 65536"); } ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", i); } -#line 1377 "d2_parser.cc" +#line 1415 "d2_parser.cc" break; case 142: #line 575 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tsig-keys", l); ctx.stack_.push_back(l); ctx.enter(ctx.TSIG_KEYS); } -#line 1388 "d2_parser.cc" +#line 1426 "d2_parser.cc" break; case 143: #line 580 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1397 "d2_parser.cc" +#line 1435 "d2_parser.cc" break; case 144: #line 585 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 1406 "d2_parser.cc" +#line 1444 "d2_parser.cc" break; case 145: #line 588 "d2_parser.yy" - { + { // parsing completed } -#line 1414 "d2_parser.cc" +#line 1452 "d2_parser.cc" break; case 150: #line 600 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1424 "d2_parser.cc" +#line 1462 "d2_parser.cc" break; case 151: #line 604 "d2_parser.yy" - { + { ctx.stack_.pop_back(); } -#line 1432 "d2_parser.cc" +#line 1470 "d2_parser.cc" break; case 152: #line 608 "d2_parser.yy" - { + { // Parse tsig key list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1442 "d2_parser.cc" +#line 1480 "d2_parser.cc" break; case 153: #line 612 "d2_parser.yy" - { + { // parsing completed } -#line 1450 "d2_parser.cc" +#line 1488 "d2_parser.cc" break; case 163: #line 630 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1458 "d2_parser.cc" +#line 1496 "d2_parser.cc" break; case 164: #line 632 "d2_parser.yy" - { + { if (yystack_[0].value.as < std::string > () == "") { error(yystack_[1].location, "TSIG key name cannot be blank"); } @@ -1468,20 +1506,20 @@ namespace isc { namespace d2 { ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1472 "d2_parser.cc" +#line 1510 "d2_parser.cc" break; case 165: #line 642 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1480 "d2_parser.cc" +#line 1518 "d2_parser.cc" break; case 166: #line 644 "d2_parser.yy" - { + { if (yystack_[0].value.as < std::string > () == "") { error(yystack_[1].location, "TSIG key algorithm cannot be blank"); } @@ -1489,32 +1527,32 @@ namespace isc { namespace d2 { ctx.stack_.back()->set("algorithm", elem); ctx.leave(); } -#line 1493 "d2_parser.cc" +#line 1531 "d2_parser.cc" break; case 167: #line 653 "d2_parser.yy" - { + { if (yystack_[0].value.as < int64_t > () < 0 || (yystack_[0].value.as < int64_t > () > 0 && (yystack_[0].value.as < int64_t > () % 8 != 0))) { error(yystack_[0].location, "TSIG key digest-bits must either be zero or a positive, multiple of eight"); } ElementPtr elem(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("digest-bits", elem); } -#line 1505 "d2_parser.cc" +#line 1543 "d2_parser.cc" break; case 168: #line 661 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1513 "d2_parser.cc" +#line 1551 "d2_parser.cc" break; case 169: #line 663 "d2_parser.yy" - { + { if (yystack_[0].value.as < std::string > () == "") { error(yystack_[1].location, "TSIG key secret cannot be blank"); } @@ -1522,322 +1560,322 @@ namespace isc { namespace d2 { ctx.stack_.back()->set("secret", elem); ctx.leave(); } -#line 1526 "d2_parser.cc" +#line 1564 "d2_parser.cc" break; case 170: #line 677 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("control-socket", m); ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 1537 "d2_parser.cc" +#line 1575 "d2_parser.cc" break; case 171: #line 682 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1546 "d2_parser.cc" +#line 1584 "d2_parser.cc" break; case 179: #line 698 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1554 "d2_parser.cc" +#line 1592 "d2_parser.cc" break; case 180: #line 700 "d2_parser.yy" - { + { ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 1564 "d2_parser.cc" +#line 1602 "d2_parser.cc" break; case 181: #line 706 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1572 "d2_parser.cc" +#line 1610 "d2_parser.cc" break; case 182: #line 708 "d2_parser.yy" - { + { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 1582 "d2_parser.cc" +#line 1620 "d2_parser.cc" break; case 183: #line 716 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1590 "d2_parser.cc" +#line 1628 "d2_parser.cc" break; case 184: #line 718 "d2_parser.yy" - { + { ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1599 "d2_parser.cc" +#line 1637 "d2_parser.cc" break; case 185: #line 723 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1607 "d2_parser.cc" +#line 1645 "d2_parser.cc" break; case 186: #line 725 "d2_parser.yy" - { + { ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1616 "d2_parser.cc" +#line 1654 "d2_parser.cc" break; case 187: #line 730 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1624 "d2_parser.cc" +#line 1662 "d2_parser.cc" break; case 188: #line 732 "d2_parser.yy" - { + { ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1633 "d2_parser.cc" +#line 1671 "d2_parser.cc" break; case 189: #line 742 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); ctx.stack_.push_back(m); ctx.enter(ctx.LOGGING); } -#line 1644 "d2_parser.cc" +#line 1682 "d2_parser.cc" break; case 190: #line 747 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1653 "d2_parser.cc" +#line 1691 "d2_parser.cc" break; case 194: #line 764 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 1664 "d2_parser.cc" +#line 1702 "d2_parser.cc" break; case 195: #line 769 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1673 "d2_parser.cc" +#line 1711 "d2_parser.cc" break; case 198: #line 781 "d2_parser.yy" - { + { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 1683 "d2_parser.cc" +#line 1721 "d2_parser.cc" break; case 199: #line 785 "d2_parser.yy" - { + { ctx.stack_.pop_back(); } -#line 1691 "d2_parser.cc" +#line 1729 "d2_parser.cc" break; case 209: #line 802 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1699 "d2_parser.cc" +#line 1737 "d2_parser.cc" break; case 210: #line 804 "d2_parser.yy" - { + { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1709 "d2_parser.cc" +#line 1747 "d2_parser.cc" break; case 211: #line 810 "d2_parser.yy" - { + { ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 1718 "d2_parser.cc" +#line 1756 "d2_parser.cc" break; case 212: #line 814 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1726 "d2_parser.cc" +#line 1764 "d2_parser.cc" break; case 213: #line 816 "d2_parser.yy" - { + { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 1736 "d2_parser.cc" +#line 1774 "d2_parser.cc" break; case 214: #line 822 "d2_parser.yy" - { + { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 1747 "d2_parser.cc" +#line 1785 "d2_parser.cc" break; case 215: #line 827 "d2_parser.yy" - { + { ctx.stack_.pop_back(); ctx.leave(); } -#line 1756 "d2_parser.cc" +#line 1794 "d2_parser.cc" break; case 218: #line 836 "d2_parser.yy" - { + { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1766 "d2_parser.cc" +#line 1804 "d2_parser.cc" break; case 219: #line 840 "d2_parser.yy" - { + { ctx.stack_.pop_back(); } -#line 1774 "d2_parser.cc" +#line 1812 "d2_parser.cc" break; case 227: #line 855 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1782 "d2_parser.cc" +#line 1820 "d2_parser.cc" break; case 228: #line 857 "d2_parser.yy" - { + { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 1792 "d2_parser.cc" +#line 1830 "d2_parser.cc" break; case 229: #line 863 "d2_parser.yy" - { + { ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 1801 "d2_parser.cc" +#line 1839 "d2_parser.cc" break; case 230: #line 868 "d2_parser.yy" - { + { ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 1810 "d2_parser.cc" +#line 1848 "d2_parser.cc" break; case 231: #line 873 "d2_parser.yy" - { + { ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 1819 "d2_parser.cc" +#line 1857 "d2_parser.cc" break; case 232: #line 878 "d2_parser.yy" - { + { ctx.enter(ctx.NO_KEYWORD); } -#line 1827 "d2_parser.cc" +#line 1865 "d2_parser.cc" break; case 233: #line 880 "d2_parser.yy" - { + { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pattern", sev); ctx.leave(); } -#line 1837 "d2_parser.cc" +#line 1875 "d2_parser.cc" break; -#line 1841 "d2_parser.cc" +#line 1879 "d2_parser.cc" default: break; @@ -1919,11 +1957,11 @@ namespace isc { namespace d2 { stack_symbol_type error_token; for (;;) { - yyn = yypact_[yystack_[0].state]; + yyn = yypact_[+yystack_[0].state]; if (!yy_pact_value_is_default_ (yyn)) { - yyn += yyterror_; - if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) + yyn += yy_error_token_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_) { yyn = yytable_[yyn]; if (0 < yyn) @@ -1945,7 +1983,7 @@ namespace isc { namespace d2 { YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); // Shift the error token. - error_token.state = yyn; + error_token.state = state_type (yyn); yypush_ ("Shifting", YY_MOVE (error_token)); } goto yynewstate; @@ -2016,7 +2054,7 @@ namespace isc { namespace d2 { { // Number of reported tokens (one for the "unexpected", one per // "expected"). - size_t yycount = 0; + std::ptrdiff_t yycount = 0; // Its maximum. enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; // Arguments of yyformat. @@ -2040,18 +2078,18 @@ namespace isc { namespace d2 { - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state - merging (from LALR or IELR) and default reductions corrupt the - expected token list. However, the list is correct for - canonical LR with one exception: it will still contain any - token that will not be accepted due to an error action in a - later state. + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. */ if (!yyla.empty ()) { - int yytoken = yyla.type_get (); + symbol_number_type yytoken = yyla.type_get (); yyarg[yycount++] = yytname_[yytoken]; - int yyn = yypact_[yystate]; + + int yyn = yypact_[+yystate]; if (!yy_pact_value_is_default_ (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in @@ -2062,7 +2100,7 @@ namespace isc { namespace d2 { int yychecklim = yylast_ - yyn + 1; int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; for (int yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_ + if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_ && !yy_table_value_is_error_ (yytable_[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) @@ -2095,7 +2133,7 @@ namespace isc { namespace d2 { std::string yyres; // Argument number. - size_t yyi = 0; + std::ptrdiff_t yyi = 0; for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { @@ -2240,7 +2278,7 @@ namespace isc { namespace d2 { 367, 368, 374, 369, 370, 371, 372, 378 }; - const unsigned short + const short D2Parser::yytable_[] = { 70, 110, 109, 126, 125, 141, 140, 21, 32, 22, @@ -2385,7 +2423,7 @@ namespace isc { namespace d2 { 205, 206, 208, 207 }; - const unsigned char + const signed char D2Parser::yyr2_[] = { 0, 2, 0, 3, 0, 3, 0, 3, 0, 3, @@ -2471,7 +2509,7 @@ namespace isc { namespace d2 { }; #if D2_PARSER_DEBUG - const unsigned short + const short D2Parser::yyrline_[] = { 0, 125, 125, 125, 126, 126, 127, 127, 128, 128, @@ -2509,7 +2547,7 @@ namespace isc { namespace d2 { i = yystack_.begin (), i_end = yystack_.end (); i != i_end; ++i) - *yycdebug_ << ' ' << i->state; + *yycdebug_ << ' ' << int (i->state); *yycdebug_ << '\n'; } @@ -2517,7 +2555,7 @@ namespace isc { namespace d2 { void D2Parser::yy_reduce_print_ (int yyrule) { - unsigned yylno = yyrline_[yyrule]; + int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; // Print the symbols being reduced, and their result. *yycdebug_ << "Reducing stack by rule " << yyrule - 1 @@ -2532,7 +2570,7 @@ namespace isc { namespace d2 { #line 14 "d2_parser.yy" } } // isc::d2 -#line 2536 "d2_parser.cc" +#line 2574 "d2_parser.cc" #line 886 "d2_parser.yy" diff --git a/src/bin/d2/d2_parser.h b/src/bin/d2/d2_parser.h index bda7ba31f5..74a5c14a3f 100644 --- a/src/bin/d2/d2_parser.h +++ b/src/bin/d2/d2_parser.h @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.4.2. +// A Bison parser, made by GNU Bison 3.5.3. // Skeleton interface for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -43,7 +43,7 @@ #ifndef YY_D2_PARSER_D2_PARSER_H_INCLUDED # define YY_D2_PARSER_D2_PARSER_H_INCLUDED -// // "%code requires" blocks. +// "%code requires" blocks. #line 17 "d2_parser.yy" #include @@ -103,28 +103,26 @@ using namespace std; #endif # include "location.hh" #include -#ifndef YYASSERT +#ifndef YY_ASSERT # include -# define YYASSERT assert +# define YY_ASSERT assert #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif #endif /* Suppress unused-variable warnings by "using" E. */ @@ -136,11 +134,11 @@ using namespace std; #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -153,6 +151,27 @@ using namespace std; # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -180,7 +199,7 @@ using namespace std; #line 14 "d2_parser.yy" namespace isc { namespace d2 { -#line 184 "d2_parser.h" +#line 203 "d2_parser.h" @@ -212,14 +231,14 @@ namespace isc { namespace d2 { semantic_type (YY_RVREF (T) t) : yytypeid_ (&typeid (T)) { - YYASSERT (sizeof (T) <= size); + YY_ASSERT (sizeof (T) <= size); new (yyas_ ()) T (YY_MOVE (t)); } /// Destruction, allowed only if empty. ~semantic_type () YY_NOEXCEPT { - YYASSERT (!yytypeid_); + YY_ASSERT (!yytypeid_); } # if 201103L <= YY_CPLUSPLUS @@ -228,8 +247,8 @@ namespace isc { namespace d2 { T& emplace (U&&... u) { - YYASSERT (!yytypeid_); - YYASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (std::forward (u)...); } @@ -239,8 +258,8 @@ namespace isc { namespace d2 { T& emplace () { - YYASSERT (!yytypeid_); - YYASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (); } @@ -250,8 +269,8 @@ namespace isc { namespace d2 { T& emplace (const T& t) { - YYASSERT (!yytypeid_); - YYASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (t); } @@ -280,9 +299,9 @@ namespace isc { namespace d2 { T& as () YY_NOEXCEPT { - YYASSERT (yytypeid_); - YYASSERT (*yytypeid_ == typeid (T)); - YYASSERT (sizeof (T) <= size); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == typeid (T)); + YY_ASSERT (sizeof (T) <= size); return *yyas_ (); } @@ -291,9 +310,9 @@ namespace isc { namespace d2 { const T& as () const YY_NOEXCEPT { - YYASSERT (yytypeid_); - YYASSERT (*yytypeid_ == typeid (T)); - YYASSERT (sizeof (T) <= size); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == typeid (T)); + YY_ASSERT (sizeof (T) <= size); return *yyas_ (); } @@ -309,8 +328,8 @@ namespace isc { namespace d2 { void swap (self_type& that) YY_NOEXCEPT { - YYASSERT (yytypeid_); - YYASSERT (*yytypeid_ == *that.yytypeid_); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == *that.yytypeid_); std::swap (as (), that.as ()); } @@ -519,7 +538,7 @@ namespace isc { namespace d2 { enum { empty_symbol = -2 }; /// Internal symbol number for tokens (subsumed by symbol_number_type). - typedef unsigned char token_number_type; + typedef signed char token_number_type; /// A complete symbol. /// @@ -725,9 +744,6 @@ switch (yytype) /// \a empty when empty. symbol_number_type type_get () const YY_NOEXCEPT; - /// The token. - token_type token () const YY_NOEXCEPT; - /// The symbol type. /// \a empty_symbol when empty. /// An int, not token_number_type, to be able to store empty_symbol. @@ -748,65 +764,65 @@ switch (yytype) symbol_type (int tok, location_type l) : super_type(token_type (tok), std::move (l)) { - YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS); + YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS); } #else symbol_type (int tok, const location_type& l) : super_type(token_type (tok), l) { - YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS); + YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, bool v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { - YYASSERT (tok == token::TOKEN_BOOLEAN); + YY_ASSERT (tok == token::TOKEN_BOOLEAN); } #else symbol_type (int tok, const bool& v, const location_type& l) : super_type(token_type (tok), v, l) { - YYASSERT (tok == token::TOKEN_BOOLEAN); + YY_ASSERT (tok == token::TOKEN_BOOLEAN); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, double v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { - YYASSERT (tok == token::TOKEN_FLOAT); + YY_ASSERT (tok == token::TOKEN_FLOAT); } #else symbol_type (int tok, const double& v, const location_type& l) : super_type(token_type (tok), v, l) { - YYASSERT (tok == token::TOKEN_FLOAT); + YY_ASSERT (tok == token::TOKEN_FLOAT); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, int64_t v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { - YYASSERT (tok == token::TOKEN_INTEGER); + YY_ASSERT (tok == token::TOKEN_INTEGER); } #else symbol_type (int tok, const int64_t& v, const location_type& l) : super_type(token_type (tok), v, l) { - YYASSERT (tok == token::TOKEN_INTEGER); + YY_ASSERT (tok == token::TOKEN_INTEGER); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, std::string v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { - YYASSERT (tok == token::TOKEN_STRING); + YY_ASSERT (tok == token::TOKEN_STRING); } #else symbol_type (int tok, const std::string& v, const location_type& l) : super_type(token_type (tok), v, l) { - YYASSERT (tok == token::TOKEN_STRING); + YY_ASSERT (tok == token::TOKEN_STRING); } #endif }; @@ -1738,8 +1754,8 @@ switch (yytype) D2Parser (const D2Parser&); D2Parser& operator= (const D2Parser&); - /// State numbers. - typedef int state_type; + /// Stored state numbers (used for stacks). + typedef short state_type; /// Generate an error message. /// \param yystate the state where the error occurred. @@ -1750,7 +1766,7 @@ switch (yytype) /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack - state_type yy_lr_goto_state_ (state_type yystate, int yysym); + static state_type yy_lr_goto_state_ (state_type yystate, int yysym); /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check @@ -1764,40 +1780,42 @@ switch (yytype) static const signed char yytable_ninf_; /// Convert a scanner token number \a t to a symbol number. - static token_number_type yytranslate_ (token_type t); + /// In theory \a t should be a token_type, but character literals + /// are valid, yet not members of the token_type enum. + static token_number_type yytranslate_ (int t); // Tables. - // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - // STATE-NUM. - static const short yypact_[]; + // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + // STATE-NUM. + static const short yypact_[]; - // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - // Performed when YYTABLE does not specify something else to do. Zero - // means the default is an error. - static const unsigned char yydefact_[]; + // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + // Performed when YYTABLE does not specify something else to do. Zero + // means the default is an error. + static const unsigned char yydefact_[]; - // YYPGOTO[NTERM-NUM]. - static const short yypgoto_[]; + // YYPGOTO[NTERM-NUM]. + static const short yypgoto_[]; - // YYDEFGOTO[NTERM-NUM]. - static const short yydefgoto_[]; + // YYDEFGOTO[NTERM-NUM]. + static const short yydefgoto_[]; - // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - // positive, shift that token. If negative, reduce the rule whose - // number is the opposite. If YYTABLE_NINF, syntax error. - static const unsigned short yytable_[]; + // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + // positive, shift that token. If negative, reduce the rule whose + // number is the opposite. If YYTABLE_NINF, syntax error. + static const short yytable_[]; - static const short yycheck_[]; + static const short yycheck_[]; - // YYSTOS[STATE-NUM] -- The (internal number of the) accessing - // symbol of state STATE-NUM. - static const unsigned char yystos_[]; + // YYSTOS[STATE-NUM] -- The (internal number of the) accessing + // symbol of state STATE-NUM. + static const unsigned char yystos_[]; - // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. - static const unsigned char yyr1_[]; + // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. + static const unsigned char yyr1_[]; - // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. - static const unsigned char yyr2_[]; + // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. + static const signed char yyr2_[]; /// Convert the symbol name \a n to a form suitable for a diagnostic. @@ -1807,8 +1825,8 @@ switch (yytype) /// For a symbol, its name in clear. static const char* const yytname_[]; #if D2_PARSER_DEBUG - // YYRLINE[YYN] -- Source line where rule number YYN was defined. - static const unsigned short yyrline_[]; + // YYRLINE[YYN] -- Source line where rule number YYN was defined. + static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. @@ -1860,7 +1878,8 @@ switch (yytype) symbol_number_type type_get () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. - enum { empty_state = -1 }; + /// We use the initial state, as it does not have a value. + enum { empty_state = 0 }; /// The state. /// \a empty when empty. @@ -1882,6 +1901,10 @@ switch (yytype) /// Assignment, needed by push_back by some old implementations. /// Moves the contents of that. stack_symbol_type& operator= (stack_symbol_type& that); + + /// Assignment, needed by push_back by other implementations. + /// Needed by some other old implementations. + stack_symbol_type& operator= (const stack_symbol_type& that); #endif }; @@ -1894,45 +1917,28 @@ switch (yytype) typedef typename S::reverse_iterator iterator; typedef typename S::const_reverse_iterator const_iterator; typedef typename S::size_type size_type; + typedef typename std::ptrdiff_t index_type; stack (size_type n = 200) : seq_ (n) {} - /// Random access. - /// - /// Index 0 returns the topmost element. - T& - operator[] (size_type i) - { - return seq_[size () - 1 - i]; - } - - /// Random access. - /// - /// Index 0 returns the topmost element. - T& - operator[] (int i) - { - return operator[] (size_type (i)); - } - /// Random access. /// /// Index 0 returns the topmost element. const T& - operator[] (size_type i) const + operator[] (index_type i) const { - return seq_[size () - 1 - i]; + return seq_[size_type (size () - 1 - i)]; } /// Random access. /// /// Index 0 returns the topmost element. - const T& - operator[] (int i) const + T& + operator[] (index_type i) { - return operator[] (size_type (i)); + return seq_[size_type (size () - 1 - i)]; } /// Steal the contents of \a t. @@ -1947,7 +1953,7 @@ switch (yytype) /// Pop elements from the stack. void - pop (int n = 1) YY_NOEXCEPT + pop (std::ptrdiff_t n = 1) YY_NOEXCEPT { for (; 0 < n; --n) seq_.pop_back (); @@ -1961,10 +1967,16 @@ switch (yytype) } /// Number of elements on the stack. - size_type + index_type size () const YY_NOEXCEPT { - return seq_.size (); + return index_type (seq_.size ()); + } + + std::ptrdiff_t + ssize () const YY_NOEXCEPT + { + return std::ptrdiff_t (size ()); } /// Iterator on top of the stack (going downwards). @@ -1985,20 +1997,20 @@ switch (yytype) class slice { public: - slice (const stack& stack, int range) + slice (const stack& stack, index_type range) : stack_ (stack) , range_ (range) {} const T& - operator[] (int i) const + operator[] (index_type i) const { return stack_[range_ - i]; } private: const stack& stack_; - int range_; + index_type range_; }; private: @@ -2033,6 +2045,10 @@ switch (yytype) /// Pop \a n symbols from the stack. void yypop_ (int n = 1); + /// Some specific tokens. + static const token_number_type yy_error_token_ = 1; + static const token_number_type yy_undef_token_ = 2; + /// Constants. enum { @@ -2040,8 +2056,6 @@ switch (yytype) yylast_ = 304, ///< Last index in yytable_. yynnts_ = 148, ///< Number of nonterminal symbols. yyfinal_ = 20, ///< Termination state number. - yyterror_ = 1, - yyerrcode_ = 256, yyntokens_ = 61 ///< Number of tokens. }; @@ -2052,7 +2066,7 @@ switch (yytype) inline D2Parser::token_number_type - D2Parser::yytranslate_ (token_type t) + D2Parser::yytranslate_ (int t) { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. @@ -2093,15 +2107,14 @@ switch (yytype) 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60 }; - const unsigned user_token_number_max_ = 315; - const token_number_type undef_token_ = 2; + const int user_token_number_max_ = 315; - if (static_cast (t) <= yyeof_) + if (t <= 0) return yyeof_; - else if (static_cast (t) <= user_token_number_max_) + else if (t <= user_token_number_max_) return translate_table[t]; else - return undef_token_; + return yy_undef_token_; } // basic_symbol. @@ -2271,30 +2284,9 @@ switch (yytype) return type; } - inline - D2Parser::token_type - D2Parser::by_type::token () const YY_NOEXCEPT - { - // YYTOKNUM[NUM] -- (External) token number corresponding to the - // (internal) symbol number NUM (which must be that of a token). */ - static - const unsigned short - yytoken_number_[] = - { - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315 - }; - return token_type (yytoken_number_[type]); - } - #line 14 "d2_parser.yy" } } // isc::d2 -#line 2298 "d2_parser.h" +#line 2290 "d2_parser.h" diff --git a/src/bin/d2/location.hh b/src/bin/d2/location.hh index 4b3b9e9f9f..b40cac1064 100644 --- a/src/bin/d2/location.hh +++ b/src/bin/d2/location.hh @@ -1,9 +1,9 @@ -// Generated 202003230818 -// A Bison parser, made by GNU Bison 3.4.2. +// Generated 202003301427 +// A Bison parser, made by GNU Bison 3.5.3. // Locations for Bison parsers in C++ -// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -39,7 +39,6 @@ #ifndef YY_D2_PARSER_LOCATION_HH_INCLUDED # define YY_D2_PARSER_LOCATION_HH_INCLUDED -# include // std::max # include # include @@ -57,16 +56,19 @@ #line 14 "d2_parser.yy" namespace isc { namespace d2 { -#line 60 "location.hh" +#line 59 "location.hh" /// A point in a source file. class position { public: + /// Type for line and column numbers. + typedef int counter_type; + /// Construct a position. explicit position (std::string* f = YY_NULLPTR, - unsigned l = 1u, - unsigned c = 1u) + counter_type l = 1, + counter_type c = 1) : filename (f) , line (l) , column (c) @@ -75,8 +77,8 @@ namespace isc { namespace d2 { /// Initialization. void initialize (std::string* fn = YY_NULLPTR, - unsigned l = 1u, - unsigned c = 1u) + counter_type l = 1, + counter_type c = 1) { filename = fn; line = l; @@ -86,17 +88,17 @@ namespace isc { namespace d2 { /** \name Line and Column related manipulators ** \{ */ /// (line related) Advance to the COUNT next lines. - void lines (int count = 1) + void lines (counter_type count = 1) { if (count) { - column = 1u; + column = 1; line = add_ (line, count, 1); } } /// (column related) Advance to the COUNT next columns. - void columns (int count = 1) + void columns (counter_type count = 1) { column = add_ (column, count, 1); } @@ -105,22 +107,21 @@ namespace isc { namespace d2 { /// File name to which this position refers. std::string* filename; /// Current line number. - unsigned line; + counter_type line; /// Current column number. - unsigned column; + counter_type column; private: /// Compute max (min, lhs+rhs). - static unsigned add_ (unsigned lhs, int rhs, int min) + static counter_type add_ (counter_type lhs, counter_type rhs, counter_type min) { - return static_cast (std::max (min, - static_cast (lhs) + rhs)); + return lhs + rhs < min ? min : lhs + rhs; } }; /// Add \a width columns, in place. inline position& - operator+= (position& res, int width) + operator+= (position& res, position::counter_type width) { res.columns (width); return res; @@ -128,21 +129,21 @@ namespace isc { namespace d2 { /// Add \a width columns. inline position - operator+ (position res, int width) + operator+ (position res, position::counter_type width) { return res += width; } /// Subtract \a width columns, in place. inline position& - operator-= (position& res, int width) + operator-= (position& res, position::counter_type width) { return res += -width; } /// Subtract \a width columns. inline position - operator- (position res, int width) + operator- (position res, position::counter_type width) { return res -= width; } @@ -182,6 +183,8 @@ namespace isc { namespace d2 { class location { public: + /// Type for line and column numbers. + typedef position::counter_type counter_type; /// Construct a location from \a b to \a e. location (const position& b, const position& e) @@ -197,8 +200,8 @@ namespace isc { namespace d2 { /// Construct a 0-width location in \a f, \a l, \a c. explicit location (std::string* f, - unsigned l = 1u, - unsigned c = 1u) + counter_type l = 1, + counter_type c = 1) : begin (f, l, c) , end (f, l, c) {} @@ -206,8 +209,8 @@ namespace isc { namespace d2 { /// Initialization. void initialize (std::string* f = YY_NULLPTR, - unsigned l = 1u, - unsigned c = 1u) + counter_type l = 1, + counter_type c = 1) { begin.initialize (f, l, c); end = begin; @@ -223,13 +226,13 @@ namespace isc { namespace d2 { } /// Extend the current location to the COUNT next columns. - void columns (int count = 1) + void columns (counter_type count = 1) { end += count; } /// Extend the current location to the COUNT next lines. - void lines (int count = 1) + void lines (counter_type count = 1) { end.lines (count); } @@ -244,39 +247,45 @@ namespace isc { namespace d2 { }; /// Join two locations, in place. - inline location& operator+= (location& res, const location& end) + inline location& + operator+= (location& res, const location& end) { res.end = end.end; return res; } /// Join two locations. - inline location operator+ (location res, const location& end) + inline location + operator+ (location res, const location& end) { return res += end; } /// Add \a width columns to the end position, in place. - inline location& operator+= (location& res, int width) + inline location& + operator+= (location& res, location::counter_type width) { res.columns (width); return res; } /// Add \a width columns to the end position. - inline location operator+ (location res, int width) + inline location + operator+ (location res, location::counter_type width) { return res += width; } /// Subtract \a width columns to the end position, in place. - inline location& operator-= (location& res, int width) + inline location& + operator-= (location& res, location::counter_type width) { return res += -width; } /// Subtract \a width columns to the end position. - inline location operator- (location res, int width) + inline location + operator- (location res, location::counter_type width) { return res -= width; } @@ -305,7 +314,8 @@ namespace isc { namespace d2 { std::basic_ostream& operator<< (std::basic_ostream& ostr, const location& loc) { - unsigned end_col = 0 < loc.end.column ? loc.end.column - 1 : 0; + location::counter_type end_col + = 0 < loc.end.column ? loc.end.column - 1 : 0; ostr << loc.begin; if (loc.end.filename && (!loc.begin.filename @@ -320,6 +330,6 @@ namespace isc { namespace d2 { #line 14 "d2_parser.yy" } } // isc::d2 -#line 323 "location.hh" +#line 333 "location.hh" #endif // !YY_D2_PARSER_LOCATION_HH_INCLUDED diff --git a/src/bin/d2/position.hh b/src/bin/d2/position.hh index 941b0caac8..fd13c299f5 100644 --- a/src/bin/d2/position.hh +++ b/src/bin/d2/position.hh @@ -1,11 +1,11 @@ -// Generated 202003230818 -// A Bison parser, made by GNU Bison 3.4.2. +// Generated 202003301427 +// A Bison parser, made by GNU Bison 3.5.3. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined in "location.hh". // // To get rid of this file: -// 1. add 'require "3.2"' (or newer) to your grammar file +// 1. add '%require "3.2"' (or newer) to your grammar file // 2. remove references to this file from your build system // 3. if you used to include it, include "location.hh" instead. diff --git a/src/bin/d2/stack.hh b/src/bin/d2/stack.hh index d44fbcfc6c..6ddcf3dd70 100644 --- a/src/bin/d2/stack.hh +++ b/src/bin/d2/stack.hh @@ -1,9 +1,9 @@ -// Generated 202003230818 -// A Bison parser, made by GNU Bison 3.4.2. +// Generated 202003301427 +// A Bison parser, made by GNU Bison 3.5.3. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined with the parser itself. // // To get rid of this file: -// 1. add 'require "3.2"' (or newer) to your grammar file +// 1. add '%require "3.2"' (or newer) to your grammar file // 2. remove references to this file from your build system.