2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 14:05:33 +00:00

[#2197] release changes

This commit is contained in:
Andrei Pavel
2021-11-22 12:59:15 +02:00
parent b0b750c76c
commit c160323039
41 changed files with 753 additions and 512 deletions

12
AUTHORS
View File

@@ -6,7 +6,7 @@ Primary developers:
memfile, database interface, core libdhcp++, memfile, database interface, core libdhcp++,
host reservation, MAC extraction in DHCPv6, host reservation, MAC extraction in DHCPv6,
statistics manager, kea-shell, netconf, flex/bison statistics manager, kea-shell, netconf, flex/bison
parsers, flex-id, documentation) parsers, flex-id, documentation, config backend)
- Marcin Siodelski (DHCPv4, DHCPv6 components, options handling, perfdhcp, - Marcin Siodelski (DHCPv4, DHCPv6 components, options handling, perfdhcp,
host reservation, lease file cleanup, lease expiration, host reservation, lease file cleanup, lease expiration,
control agent, shared networks, high availability, control agent, shared networks, high availability,
@@ -14,18 +14,20 @@ Primary developers:
- Thomas Markwalder (DDNS, user_chk, global host reservations, stat commands, - Thomas Markwalder (DDNS, user_chk, global host reservations, stat commands,
congestion handling, config backend, multi-threading mode congestion handling, config backend, multi-threading mode
of high availability, forensic logging, leasequery) of high availability, forensic logging, leasequery)
- Wlodek Wencel (testing, release engineering) - Wlodek Wencel (testing, release engineering, hammer, perfdhcp)
- Francis Dupont (crypto, flex/bison parsers, perfdhcp, control agent, - Francis Dupont (crypto, flex/bison parsers, perfdhcp, control agent,
radius, netconf, config backend, multi-threading) radius, netconf, config backend, multi-threading,
GSS-TSIG)
- Razvan Becheriu (cassandra, netconf, multi-threading, forensic logging, - Razvan Becheriu (cassandra, netconf, multi-threading, forensic logging,
run script hook, multi-threading mode of high availability) run script hook, multi-threading mode of high availability,
GSS-TSIG)
- Vicky Risk (documentation) - Vicky Risk (documentation)
- Suzanne Goldlust (documentation) - Suzanne Goldlust (documentation)
- Andrei Pavel (build system, documentation, hammer, netconf, perfdhcp, - Andrei Pavel (build system, documentation, hammer, netconf, perfdhcp,
release engineering, shell scripts, testing) release engineering, shell scripts, testing)
- Peter Davies (documentation) - Peter Davies (documentation)
- Slawek Figiel (documentation) - Slawek Figiel (documentation)
- Dan Theisen (documentation) - Dan Theisen (documentation, option handling)
Former developers who are no longer active: Former developers who are no longer active:
- Stephen Morris (Hooks, MySQL) - Stephen Morris (Hooks, MySQL)

View File

@@ -1,25 +1,47 @@
1966. [build] razvan Kea 2.1.1 (development) released on Nov 24, 2021
1970. [build] razvan
Library version numbers bumped for Kea 2.1.1 development Library version numbers bumped for Kea 2.1.1 development
version. version.
(Gitlab #2195) (Gitlab #2195)
1965. [func] djt 1969. [build] andrei
Fixed "make check -j N" running tests in parallel in src/lib/log.
(Gitlab #2172)
1968. [build] andrei
Fixed make check failing when googletest support was disabled.
(Gitlab #2167)
1967. [bug] andrei
Fixed a bug where keactrl did not color the active status code
for kea-dhcp-ddns as it did for the other servers.
(Gitlab #2117)
1966. [func] djt
Allow Kea to pack opaque data tuples within options with zero Allow Kea to pack opaque data tuples within options with zero
length to accommodate some DHCP clients who have been observed length to accommodate some DHCP clients who have been observed
to send DHCPv4 option 124 with zero length tuples. to send DHCPv4 option 124 with zero length tuples.
(Gitlab #2021) (Gitlab #2021)
1964. [func] andrei 1965. [func] andrei
Increase the value that "maxsize" can take from 2GB to 2PB. Increase the value that "maxsize" can take from 2GB to 2PB.
(Gitlab #2130) (Gitlab #2130)
1964. [func] wlodek
Added support for Debian 11 in hammer.py.
(Gitlab #2042, #2193)
1963. [func] andrei 1963. [func] andrei
A few improvements on hammer.py: vagrant will be automatically hammer.py has had several improvements.
upgraded if it is too outdated, error messages are more clear NETCONF and PostgreSQL will be properly configured when running
when running on unsupported systems and it is now able to detect prepare-system on Fedora and FreeBSD.
Arch Linux distributions, even though support for them is not on vagrant will be automatically upgraded if it is too outdated.
par with the other systems: it is only able to prepare-system Error messages are more clear when running on unsupported
with freeradius and netconf support. systems.
hammer.py is now able to detect Arch Linux distributions and
offers limited support for it, being able to prepare-system with
freeradius and netconf support.
(Gitlab #2111, #2112) (Gitlab #2111, #2112)
1962. [func] andrei 1962. [func] andrei
@@ -40,7 +62,7 @@
store-extended-info, on-fail. store-extended-info, on-fail.
(Gitlab #2136) (Gitlab #2136)
1961. [func] tomek,tmark 1961. [func] tomek, tmark
The initial, stubbed version of the PostgreSQL CB hook The initial, stubbed version of the PostgreSQL CB hook
library has been created. The library is not yet functional library has been created. The library is not yet functional
and does not installed. and does not installed.
@@ -54,15 +76,16 @@
1959. [doc] djt 1959. [doc] djt
Move documentation for acceptable format strings into the Kea Move documentation for acceptable format strings into the Kea
ARM. The relevent section of the ARM was previously referring ARM. The relevant section of the ARM was previously referring
to a dead link in the Log4cpp documentation. to a dead link in the Log4cpp documentation.
(Gitlab #2134)
1958. [func] tomek 1958. [func] tomek, tmark
PostgreSQL database schema has been extended with tables for PostgreSQL database schema has been extended with tables for
Config Backend (CB). This is the first step towards PostgreSQL Config Backend (CB). This is the first step towards PostgreSQL
CB. However, as there is no code yet to use those new tables, CB. However, as there is no code yet to use those new tables,
they're not not functional yet. they're not not functional yet.
(Gitlab #90) (Gitlab #90, #2166)
Kea 2.1.0 (development) released on Oct 27, 2021 Kea 2.1.0 (development) released on Oct 27, 2021

View File

@@ -1,5 +1,5 @@
Grammar generated on 2021-06-22 19:06. See Chapter :ref:`kea-ctrl-agent` for an explanation. Grammar generated from agent_parser.yy. See Chapter :ref:`kea-ctrl-agent` for an explanation.
.. code-block:: BNF .. code-block:: BNF
:linenos: :linenos:

View File

@@ -1,5 +1,5 @@
Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp-ddns-server` for an explanation. Grammar generated from d2_parser.yy. See Chapter :ref:`dhcp-ddns-server` for an explanation.
.. code-block:: BNF .. code-block:: BNF
:linenos: :linenos:
@@ -130,7 +130,7 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp-ddns-server` for a
| ddns_domain_params "," ddns_domain_param | ddns_domain_params "," ddns_domain_param
ddns_domain_param ::= ddns_domain_name ddns_domain_param ::= ddns_domain_name
| ddns_domain_key_name | ddns_key_name
| dns_servers | dns_servers
| user_context | user_context
| comment | comment
@@ -138,7 +138,7 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp-ddns-server` for a
ddns_domain_name ::= "name" ":" STRING ddns_domain_name ::= "name" ":" STRING
ddns_domain_key_name ::= "key-name" ":" STRING ddns_key_name ::= "key-name" ":" STRING
dns_servers ::= "dns-servers" ":" "[" dns_server_list "]" dns_servers ::= "dns-servers" ":" "[" dns_server_list "]"
@@ -157,6 +157,7 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp-ddns-server` for a
dns_server_param ::= dns_server_hostname dns_server_param ::= dns_server_hostname
| dns_server_ip_address | dns_server_ip_address
| dns_server_port | dns_server_port
| ddns_key_name
| user_context | user_context
| comment | comment
| unknown_map_entry | unknown_map_entry

View File

@@ -1,5 +1,5 @@
Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp4` for an explanation. Grammar generated from dhcp4_parser.yy. See Chapter :ref:`dhcp4` for an explanation.
.. code-block:: BNF .. code-block:: BNF
:linenos: :linenos:
@@ -141,6 +141,7 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp4` for an explanati
| dhcp_multi_threading | dhcp_multi_threading
| ip_reservations_unique | ip_reservations_unique
| compatibility | compatibility
| parked_packet_limit
| unknown_map_entry | unknown_map_entry
valid_lifetime ::= "valid-lifetime" ":" INTEGER valid_lifetime ::= "valid-lifetime" ":" INTEGER
@@ -167,6 +168,8 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp4` for an explanati
server_tag ::= "server-tag" ":" STRING server_tag ::= "server-tag" ":" STRING
parked_packet_limit ::= "parked-packet-limit" ":" INTEGER
echo_client_id ::= "echo-client-id" ":" BOOLEAN echo_client_id ::= "echo-client-id" ":" BOOLEAN
match_client_id ::= "match-client-id" ":" BOOLEAN match_client_id ::= "match-client-id" ":" BOOLEAN

View File

@@ -1,5 +1,5 @@
Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp6` for an explanation. Grammar generated from dhcp6_parser.yy. See Chapter :ref:`dhcp6` for an explanation.
.. code-block:: BNF .. code-block:: BNF
:linenos: :linenos:
@@ -144,6 +144,7 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp6` for an explanati
| dhcp_multi_threading | dhcp_multi_threading
| ip_reservations_unique | ip_reservations_unique
| compatibility | compatibility
| parked_packet_limit
| unknown_map_entry | unknown_map_entry
data_directory ::= "data-directory" ":" STRING data_directory ::= "data-directory" ":" STRING
@@ -210,6 +211,8 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp6` for an explanati
server_tag ::= "server-tag" ":" STRING server_tag ::= "server-tag" ":" STRING
parked_packet_limit ::= "parked-packet-limit" ":" INTEGER
ip_reservations_unique ::= "ip-reservations-unique" ":" BOOLEAN ip_reservations_unique ::= "ip-reservations-unique" ":" BOOLEAN
interfaces_config ::= "interfaces-config" ":" "{" interfaces_config_params "}" interfaces_config ::= "interfaces-config" ":" "{" interfaces_config_params "}"
@@ -786,6 +789,12 @@ Grammar generated on 2021-06-22 19:06. See Chapter :ref:`dhcp6` for an explanati
| option_data_list | option_data_list
| user_context | user_context
| comment | comment
| preferred_lifetime
| min_preferred_lifetime
| max_preferred_lifetime
| valid_lifetime
| min_valid_lifetime
| max_valid_lifetime
| unknown_map_entry | unknown_map_entry
client_class_name ::= name client_class_name ::= name

View File

@@ -1,5 +1,5 @@
Grammar generated on 2021-06-22 19:06. See Chapter :ref:`netconf` for an explanation. Grammar generated from netconf_parser.yy. See Chapter :ref:`netconf` for an explanation.
.. code-block:: BNF .. code-block:: BNF
:linenos: :linenos:

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton implementation for Bison LALR(1) parsers in C++ // Skeleton implementation for Bison LALR(1) parsers in C++
@@ -160,9 +160,9 @@ namespace isc { namespace agent {
AgentParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW AgentParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{} {}
/*---------------. /*---------.
| symbol kinds. | | symbol. |
`---------------*/ `---------*/
@@ -457,7 +457,7 @@ namespace isc { namespace agent {
} }
void void
AgentParser::yypop_ (int n) AgentParser::yypop_ (int n) YY_NOEXCEPT
{ {
yystack_.pop (n); yystack_.pop (n);
} }
@@ -500,13 +500,13 @@ namespace isc { namespace agent {
} }
bool bool
AgentParser::yy_pact_value_is_default_ (int yyvalue) AgentParser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yypact_ninf_; return yyvalue == yypact_ninf_;
} }
bool bool
AgentParser::yy_table_value_is_error_ (int yyvalue) AgentParser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yytable_ninf_; return yyvalue == yytable_ninf_;
} }
@@ -1875,16 +1875,16 @@ namespace isc { namespace agent {
// Actual number of expected tokens // Actual number of expected tokens
int yycount = 0; int yycount = 0;
int yyn = yypact_[+yyparser_.yystack_[0].state]; const int yyn = yypact_[+yyparser_.yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn)) if (!yy_pact_value_is_default_ (yyn))
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */ this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0; const int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname. // Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1; const int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx) for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
&& !yy_table_value_is_error_ (yytable_[yyx + yyn])) && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -1905,6 +1905,9 @@ namespace isc { namespace agent {
int int
AgentParser::yy_syntax_error_arguments_ (const context& yyctx, AgentParser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const symbol_kind_type yyarg[], int yyargn) const
@@ -2340,7 +2343,7 @@ namespace isc { namespace agent {
#line 14 "agent_parser.yy" #line 14 "agent_parser.yy"
} } // isc::agent } } // isc::agent
#line 2344 "agent_parser.cc" #line 2347 "agent_parser.cc"
#line 782 "agent_parser.yy" #line 782 "agent_parser.yy"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton interface for Bison LALR(1) parsers in C++ // Skeleton interface for Bison LALR(1) parsers in C++
@@ -132,12 +132,18 @@ using namespace std;
# define YY_USE(E) /* empty */ # define YY_USE(E) /* empty */
#endif #endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ /* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop") _Pragma ("GCC diagnostic pop")
#else #else
@@ -199,7 +205,7 @@ using namespace std;
#line 14 "agent_parser.yy" #line 14 "agent_parser.yy"
namespace isc { namespace agent { namespace isc { namespace agent {
#line 203 "agent_parser.h" #line 209 "agent_parser.h"
@@ -208,27 +214,32 @@ namespace isc { namespace agent {
class AgentParser class AgentParser
{ {
public: public:
#ifndef AGENT_STYPE #ifdef AGENT_STYPE
# ifdef __GNUC__
# pragma GCC message "bison: do not #define AGENT_STYPE in C++, use %define api.value.type"
# endif
typedef AGENT_STYPE value_type;
#else
/// A buffer to store and retrieve objects. /// A buffer to store and retrieve objects.
/// ///
/// Sort of a variant, but does not keep track of the nature /// Sort of a variant, but does not keep track of the nature
/// of the stored data, since that knowledge is available /// of the stored data, since that knowledge is available
/// via the current parser state. /// via the current parser state.
class semantic_type class value_type
{ {
public: public:
/// Type of *this. /// Type of *this.
typedef semantic_type self_type; typedef value_type self_type;
/// Empty construction. /// Empty construction.
semantic_type () YY_NOEXCEPT value_type () YY_NOEXCEPT
: yybuffer_ () : yyraw_ ()
, yytypeid_ (YY_NULLPTR) , yytypeid_ (YY_NULLPTR)
{} {}
/// Construct and fill. /// Construct and fill.
template <typename T> template <typename T>
semantic_type (YY_RVREF (T) t) value_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T)) : yytypeid_ (&typeid (T))
{ {
AGENT__ASSERT (sizeof (T) <= size); AGENT__ASSERT (sizeof (T) <= size);
@@ -237,13 +248,13 @@ namespace isc { namespace agent {
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
/// Non copyable. /// Non copyable.
semantic_type (const self_type&) = delete; value_type (const self_type&) = delete;
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&) = delete; self_type& operator= (const self_type&) = delete;
#endif #endif
/// Destruction, allowed only if empty. /// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT ~value_type () YY_NOEXCEPT
{ {
AGENT__ASSERT (!yytypeid_); AGENT__ASSERT (!yytypeid_);
} }
@@ -387,7 +398,7 @@ namespace isc { namespace agent {
private: private:
#if YY_CPLUSPLUS < 201103L #if YY_CPLUSPLUS < 201103L
/// Non copyable. /// Non copyable.
semantic_type (const self_type&); value_type (const self_type&);
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&); self_type& operator= (const self_type&);
#endif #endif
@@ -397,7 +408,7 @@ namespace isc { namespace agent {
T* T*
yyas_ () YY_NOEXCEPT yyas_ () YY_NOEXCEPT
{ {
void *yyp = yybuffer_.yyraw; void *yyp = yyraw_;
return static_cast<T*> (yyp); return static_cast<T*> (yyp);
} }
@@ -406,7 +417,7 @@ namespace isc { namespace agent {
const T* const T*
yyas_ () const YY_NOEXCEPT yyas_ () const YY_NOEXCEPT
{ {
const void *yyp = yybuffer_.yyraw; const void *yyp = yyraw_;
return static_cast<const T*> (yyp); return static_cast<const T*> (yyp);
} }
@@ -439,18 +450,19 @@ namespace isc { namespace agent {
union union
{ {
/// Strongest alignment constraints. /// Strongest alignment constraints.
long double yyalign_me; long double yyalign_me_;
/// A buffer large enough to store any of the semantic values. /// A buffer large enough to store any of the semantic values.
char yyraw[size]; char yyraw_[size];
} yybuffer_; };
/// Whether the content is built: if defined, the name of the stored type. /// Whether the content is built: if defined, the name of the stored type.
const std::type_info *yytypeid_; const std::type_info *yytypeid_;
}; };
#else
typedef AGENT_STYPE semantic_type;
#endif #endif
/// Backward compatibility (Bison 3.8).
typedef value_type semantic_type;
/// Symbol locations. /// Symbol locations.
typedef location location_type; typedef location location_type;
@@ -537,7 +549,7 @@ namespace isc { namespace agent {
}; };
/// Token kind, as returned by yylex. /// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type; typedef token::token_kind_type token_kind_type;
/// Backward compatibility alias (Bison 3.6). /// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type; typedef token_kind_type token_type;
@@ -739,7 +751,7 @@ namespace isc { namespace agent {
typedef Base super_type; typedef Base super_type;
/// Default constructor. /// Default constructor.
basic_symbol () basic_symbol () YY_NOEXCEPT
: value () : value ()
, location () , location ()
{} {}
@@ -875,6 +887,8 @@ namespace isc { namespace agent {
clear (); clear ();
} }
/// Destroy contents, and record that is empty. /// Destroy contents, and record that is empty.
void clear () YY_NOEXCEPT void clear () YY_NOEXCEPT
{ {
@@ -937,7 +951,7 @@ switch (yykind)
void move (basic_symbol& s); void move (basic_symbol& s);
/// The semantic value. /// The semantic value.
semantic_type value; value_type value;
/// The location. /// The location.
location_type location; location_type location;
@@ -952,22 +966,24 @@ switch (yykind)
/// Type access provider for token (enum) based symbols. /// Type access provider for token (enum) based symbols.
struct by_kind struct by_kind
{ {
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor. /// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type; typedef token_kind_type kind_type;
/// Default constructor.
by_kind () YY_NOEXCEPT;
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that) YY_NOEXCEPT;
#endif
/// Copy constructor.
by_kind (const by_kind& that) YY_NOEXCEPT;
/// Constructor from (external) token numbers. /// Constructor from (external) token numbers.
by_kind (kind_type t); by_kind (kind_type t) YY_NOEXCEPT;
/// Record that this symbol is empty. /// Record that this symbol is empty.
void clear () YY_NOEXCEPT; void clear () YY_NOEXCEPT;
@@ -997,59 +1013,69 @@ switch (yykind)
typedef basic_symbol<by_kind> super_type; typedef basic_symbol<by_kind> super_type;
/// Empty symbol. /// Empty symbol.
symbol_type () {} symbol_type () YY_NOEXCEPT {}
/// Constructor for valueless symbols, and symbols from each type. /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l) symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l)) : super_type (token_kind_type (tok), std::move (l))
#else #else
symbol_type (int tok, const location_type& l) symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l) : super_type (token_kind_type (tok), l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
AGENT__ASSERT (tok == token::TOKEN_END AGENT__ASSERT (tok == token::TOKEN_END
|| (token::TOKEN_AGENT_error <= tok && tok <= token::TOKEN_START_SUB_AGENT)); || (token::TOKEN_AGENT_error <= tok && tok <= token::TOKEN_START_SUB_AGENT));
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, bool v, location_type l) symbol_type (int tok, bool v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const bool& v, const location_type& l) symbol_type (int tok, const bool& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
AGENT__ASSERT (tok == token::TOKEN_BOOLEAN); AGENT__ASSERT (tok == token::TOKEN_BOOLEAN);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, double v, location_type l) symbol_type (int tok, double v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const double& v, const location_type& l) symbol_type (int tok, const double& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
AGENT__ASSERT (tok == token::TOKEN_FLOAT); AGENT__ASSERT (tok == token::TOKEN_FLOAT);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, int64_t v, location_type l) symbol_type (int tok, int64_t v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const int64_t& v, const location_type& l) symbol_type (int tok, const int64_t& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
AGENT__ASSERT (tok == token::TOKEN_INTEGER); AGENT__ASSERT (tok == token::TOKEN_INTEGER);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l) symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const std::string& v, const location_type& l) symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
AGENT__ASSERT (tok == token::TOKEN_STRING); AGENT__ASSERT (tok == token::TOKEN_STRING);
#endif
} }
}; };
@@ -1098,7 +1124,7 @@ switch (yykind)
/// YYSYMBOL. No bounds checking. /// YYSYMBOL. No bounds checking.
static std::string symbol_name (symbol_kind_type yysymbol); static std::string symbol_name (symbol_kind_type yysymbol);
// Implementation of make_symbol for each symbol type. // Implementation of make_symbol for each token kind.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
static static
symbol_type symbol_type
@@ -1940,19 +1966,19 @@ switch (yykind)
/// Whether the given \c yypact_ value indicates a defaulted state. /// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue); static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
/// Whether the given \c yytable_ value indicates a syntax error. /// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue); static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
static const short yypact_ninf_; static const short yypact_ninf_;
static const signed char yytable_ninf_; static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind. /// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum. /// are valid, yet not members of the token_kind_type enum.
static symbol_kind_type yytranslate_ (int t); static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
/// Convert the symbol name \a n to a form suitable for a diagnostic. /// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr); static std::string yytnamerr_ (const char *yystr);
@@ -1984,14 +2010,14 @@ switch (yykind)
static const short yycheck_[]; static const short yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
// symbol of state STATE-NUM. // state STATE-NUM.
static const unsigned char yystos_[]; static const unsigned char yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives. // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
static const unsigned char yyr1_[]; static const unsigned char yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
static const signed char yyr2_[]; static const signed char yyr2_[];
@@ -2090,7 +2116,7 @@ switch (yykind)
typedef typename S::size_type size_type; typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type; typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200) stack (size_type n = 200) YY_NOEXCEPT
: seq_ (n) : seq_ (n)
{} {}
@@ -2169,7 +2195,7 @@ switch (yykind)
class slice class slice
{ {
public: public:
slice (const stack& stack, index_type range) slice (const stack& stack, index_type range) YY_NOEXCEPT
: stack_ (stack) : stack_ (stack)
, range_ (range) , range_ (range)
{} {}
@@ -2219,7 +2245,7 @@ switch (yykind)
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack. /// Pop \a n symbols from the stack.
void yypop_ (int n = 1); void yypop_ (int n = 1) YY_NOEXCEPT;
/// Constants. /// Constants.
enum enum
@@ -2237,7 +2263,7 @@ switch (yykind)
inline inline
AgentParser::symbol_kind_type AgentParser::symbol_kind_type
AgentParser::yytranslate_ (int t) AgentParser::yytranslate_ (int t) YY_NOEXCEPT
{ {
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex. // TOKEN-NUM as returned by yylex.
@@ -2283,7 +2309,7 @@ switch (yykind)
if (t <= 0) if (t <= 0)
return symbol_kind::S_YYEOF; return symbol_kind::S_YYEOF;
else if (t <= code_max) else if (t <= code_max)
return YY_CAST (symbol_kind_type, translate_table[t]); return static_cast <symbol_kind_type> (translate_table[t]);
else else
return symbol_kind::S_YYUNDEF; return symbol_kind::S_YYUNDEF;
} }
@@ -2328,6 +2354,7 @@ switch (yykind)
template <typename Base> template <typename Base>
AgentParser::symbol_kind_type AgentParser::symbol_kind_type
AgentParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT AgentParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -2335,6 +2362,7 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
template <typename Base> template <typename Base>
bool bool
AgentParser::basic_symbol<Base>::empty () const YY_NOEXCEPT AgentParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -2381,13 +2409,13 @@ switch (yykind)
// by_kind. // by_kind.
inline inline
AgentParser::by_kind::by_kind () AgentParser::by_kind::by_kind () YY_NOEXCEPT
: kind_ (symbol_kind::S_YYEMPTY) : kind_ (symbol_kind::S_YYEMPTY)
{} {}
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
inline inline
AgentParser::by_kind::by_kind (by_kind&& that) AgentParser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{ {
that.clear (); that.clear ();
@@ -2395,15 +2423,17 @@ switch (yykind)
#endif #endif
inline inline
AgentParser::by_kind::by_kind (const by_kind& that) AgentParser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{} {}
inline inline
AgentParser::by_kind::by_kind (token_kind_type t) AgentParser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
: kind_ (yytranslate_ (t)) : kind_ (yytranslate_ (t))
{} {}
inline inline
void void
AgentParser::by_kind::clear () YY_NOEXCEPT AgentParser::by_kind::clear () YY_NOEXCEPT
@@ -2426,6 +2456,7 @@ switch (yykind)
return kind_; return kind_;
} }
inline inline
AgentParser::symbol_kind_type AgentParser::symbol_kind_type
AgentParser::by_kind::type_get () const YY_NOEXCEPT AgentParser::by_kind::type_get () const YY_NOEXCEPT
@@ -2433,9 +2464,10 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
#line 14 "agent_parser.yy" #line 14 "agent_parser.yy"
} } // isc::agent } } // isc::agent
#line 2439 "agent_parser.h" #line 2471 "agent_parser.h"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Locations for Bison parsers in C++ // Locations for Bison parsers in C++

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton implementation for Bison LALR(1) parsers in C++ // Skeleton implementation for Bison LALR(1) parsers in C++
@@ -160,9 +160,9 @@ namespace isc { namespace d2 {
D2Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW D2Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{} {}
/*---------------. /*---------.
| symbol kinds. | | symbol. |
`---------------*/ `---------*/
@@ -447,7 +447,7 @@ namespace isc { namespace d2 {
} }
void void
D2Parser::yypop_ (int n) D2Parser::yypop_ (int n) YY_NOEXCEPT
{ {
yystack_.pop (n); yystack_.pop (n);
} }
@@ -490,13 +490,13 @@ namespace isc { namespace d2 {
} }
bool bool
D2Parser::yy_pact_value_is_default_ (int yyvalue) D2Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yypact_ninf_; return yyvalue == yypact_ninf_;
} }
bool bool
D2Parser::yy_table_value_is_error_ (int yyvalue) D2Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yytable_ninf_; return yyvalue == yytable_ninf_;
} }
@@ -2150,16 +2150,16 @@ namespace isc { namespace d2 {
// Actual number of expected tokens // Actual number of expected tokens
int yycount = 0; int yycount = 0;
int yyn = yypact_[+yyparser_.yystack_[0].state]; const int yyn = yypact_[+yyparser_.yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn)) if (!yy_pact_value_is_default_ (yyn))
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */ this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0; const int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname. // Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1; const int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx) for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
&& !yy_table_value_is_error_ (yytable_[yyx + yyn])) && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -2180,6 +2180,9 @@ namespace isc { namespace d2 {
int int
D2Parser::yy_syntax_error_arguments_ (const context& yyctx, D2Parser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const symbol_kind_type yyarg[], int yyargn) const
@@ -2691,7 +2694,7 @@ namespace isc { namespace d2 {
#line 14 "d2_parser.yy" #line 14 "d2_parser.yy"
} } // isc::d2 } } // isc::d2
#line 2695 "d2_parser.cc" #line 2698 "d2_parser.cc"
#line 929 "d2_parser.yy" #line 929 "d2_parser.yy"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton interface for Bison LALR(1) parsers in C++ // Skeleton interface for Bison LALR(1) parsers in C++
@@ -133,12 +133,18 @@ using namespace std;
# define YY_USE(E) /* empty */ # define YY_USE(E) /* empty */
#endif #endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ /* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop") _Pragma ("GCC diagnostic pop")
#else #else
@@ -200,7 +206,7 @@ using namespace std;
#line 14 "d2_parser.yy" #line 14 "d2_parser.yy"
namespace isc { namespace d2 { namespace isc { namespace d2 {
#line 204 "d2_parser.h" #line 210 "d2_parser.h"
@@ -209,27 +215,32 @@ namespace isc { namespace d2 {
class D2Parser class D2Parser
{ {
public: public:
#ifndef D2_PARSER_STYPE #ifdef D2_PARSER_STYPE
# ifdef __GNUC__
# pragma GCC message "bison: do not #define D2_PARSER_STYPE in C++, use %define api.value.type"
# endif
typedef D2_PARSER_STYPE value_type;
#else
/// A buffer to store and retrieve objects. /// A buffer to store and retrieve objects.
/// ///
/// Sort of a variant, but does not keep track of the nature /// Sort of a variant, but does not keep track of the nature
/// of the stored data, since that knowledge is available /// of the stored data, since that knowledge is available
/// via the current parser state. /// via the current parser state.
class semantic_type class value_type
{ {
public: public:
/// Type of *this. /// Type of *this.
typedef semantic_type self_type; typedef value_type self_type;
/// Empty construction. /// Empty construction.
semantic_type () YY_NOEXCEPT value_type () YY_NOEXCEPT
: yybuffer_ () : yyraw_ ()
, yytypeid_ (YY_NULLPTR) , yytypeid_ (YY_NULLPTR)
{} {}
/// Construct and fill. /// Construct and fill.
template <typename T> template <typename T>
semantic_type (YY_RVREF (T) t) value_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T)) : yytypeid_ (&typeid (T))
{ {
D2_PARSER__ASSERT (sizeof (T) <= size); D2_PARSER__ASSERT (sizeof (T) <= size);
@@ -238,13 +249,13 @@ namespace isc { namespace d2 {
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
/// Non copyable. /// Non copyable.
semantic_type (const self_type&) = delete; value_type (const self_type&) = delete;
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&) = delete; self_type& operator= (const self_type&) = delete;
#endif #endif
/// Destruction, allowed only if empty. /// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT ~value_type () YY_NOEXCEPT
{ {
D2_PARSER__ASSERT (!yytypeid_); D2_PARSER__ASSERT (!yytypeid_);
} }
@@ -388,7 +399,7 @@ namespace isc { namespace d2 {
private: private:
#if YY_CPLUSPLUS < 201103L #if YY_CPLUSPLUS < 201103L
/// Non copyable. /// Non copyable.
semantic_type (const self_type&); value_type (const self_type&);
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&); self_type& operator= (const self_type&);
#endif #endif
@@ -398,7 +409,7 @@ namespace isc { namespace d2 {
T* T*
yyas_ () YY_NOEXCEPT yyas_ () YY_NOEXCEPT
{ {
void *yyp = yybuffer_.yyraw; void *yyp = yyraw_;
return static_cast<T*> (yyp); return static_cast<T*> (yyp);
} }
@@ -407,7 +418,7 @@ namespace isc { namespace d2 {
const T* const T*
yyas_ () const YY_NOEXCEPT yyas_ () const YY_NOEXCEPT
{ {
const void *yyp = yybuffer_.yyraw; const void *yyp = yyraw_;
return static_cast<const T*> (yyp); return static_cast<const T*> (yyp);
} }
@@ -439,18 +450,19 @@ namespace isc { namespace d2 {
union union
{ {
/// Strongest alignment constraints. /// Strongest alignment constraints.
long double yyalign_me; long double yyalign_me_;
/// A buffer large enough to store any of the semantic values. /// A buffer large enough to store any of the semantic values.
char yyraw[size]; char yyraw_[size];
} yybuffer_; };
/// Whether the content is built: if defined, the name of the stored type. /// Whether the content is built: if defined, the name of the stored type.
const std::type_info *yytypeid_; const std::type_info *yytypeid_;
}; };
#else
typedef D2_PARSER_STYPE semantic_type;
#endif #endif
/// Backward compatibility (Bison 3.8).
typedef value_type semantic_type;
/// Symbol locations. /// Symbol locations.
typedef location location_type; typedef location location_type;
@@ -545,7 +557,7 @@ namespace isc { namespace d2 {
}; };
/// Token kind, as returned by yylex. /// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type; typedef token::token_kind_type token_kind_type;
/// Backward compatibility alias (Bison 3.6). /// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type; typedef token_kind_type token_type;
@@ -791,7 +803,7 @@ namespace isc { namespace d2 {
typedef Base super_type; typedef Base super_type;
/// Default constructor. /// Default constructor.
basic_symbol () basic_symbol () YY_NOEXCEPT
: value () : value ()
, location () , location ()
{} {}
@@ -926,6 +938,8 @@ namespace isc { namespace d2 {
clear (); clear ();
} }
/// Destroy contents, and record that is empty. /// Destroy contents, and record that is empty.
void clear () YY_NOEXCEPT void clear () YY_NOEXCEPT
{ {
@@ -987,7 +1001,7 @@ switch (yykind)
void move (basic_symbol& s); void move (basic_symbol& s);
/// The semantic value. /// The semantic value.
semantic_type value; value_type value;
/// The location. /// The location.
location_type location; location_type location;
@@ -1002,22 +1016,24 @@ switch (yykind)
/// Type access provider for token (enum) based symbols. /// Type access provider for token (enum) based symbols.
struct by_kind struct by_kind
{ {
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor. /// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type; typedef token_kind_type kind_type;
/// Default constructor.
by_kind () YY_NOEXCEPT;
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that) YY_NOEXCEPT;
#endif
/// Copy constructor.
by_kind (const by_kind& that) YY_NOEXCEPT;
/// Constructor from (external) token numbers. /// Constructor from (external) token numbers.
by_kind (kind_type t); by_kind (kind_type t) YY_NOEXCEPT;
/// Record that this symbol is empty. /// Record that this symbol is empty.
void clear () YY_NOEXCEPT; void clear () YY_NOEXCEPT;
@@ -1047,59 +1063,69 @@ switch (yykind)
typedef basic_symbol<by_kind> super_type; typedef basic_symbol<by_kind> super_type;
/// Empty symbol. /// Empty symbol.
symbol_type () {} symbol_type () YY_NOEXCEPT {}
/// Constructor for valueless symbols, and symbols from each type. /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l) symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l)) : super_type (token_kind_type (tok), std::move (l))
#else #else
symbol_type (int tok, const location_type& l) symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l) : super_type (token_kind_type (tok), l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
D2_PARSER__ASSERT (tok == token::TOKEN_END D2_PARSER__ASSERT (tok == token::TOKEN_END
|| (token::TOKEN_D2_PARSER_error <= tok && tok <= token::TOKEN_SUB_HOOKS_LIBRARY)); || (token::TOKEN_D2_PARSER_error <= tok && tok <= token::TOKEN_SUB_HOOKS_LIBRARY));
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, bool v, location_type l) symbol_type (int tok, bool v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const bool& v, const location_type& l) symbol_type (int tok, const bool& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
D2_PARSER__ASSERT (tok == token::TOKEN_BOOLEAN); D2_PARSER__ASSERT (tok == token::TOKEN_BOOLEAN);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, double v, location_type l) symbol_type (int tok, double v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const double& v, const location_type& l) symbol_type (int tok, const double& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
D2_PARSER__ASSERT (tok == token::TOKEN_FLOAT); D2_PARSER__ASSERT (tok == token::TOKEN_FLOAT);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, int64_t v, location_type l) symbol_type (int tok, int64_t v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const int64_t& v, const location_type& l) symbol_type (int tok, const int64_t& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
D2_PARSER__ASSERT (tok == token::TOKEN_INTEGER); D2_PARSER__ASSERT (tok == token::TOKEN_INTEGER);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l) symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const std::string& v, const location_type& l) symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
D2_PARSER__ASSERT (tok == token::TOKEN_STRING); D2_PARSER__ASSERT (tok == token::TOKEN_STRING);
#endif
} }
}; };
@@ -1148,7 +1174,7 @@ switch (yykind)
/// YYSYMBOL. No bounds checking. /// YYSYMBOL. No bounds checking.
static std::string symbol_name (symbol_kind_type yysymbol); static std::string symbol_name (symbol_kind_type yysymbol);
// Implementation of make_symbol for each symbol type. // Implementation of make_symbol for each token kind.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
static static
symbol_type symbol_type
@@ -2110,19 +2136,19 @@ switch (yykind)
/// Whether the given \c yypact_ value indicates a defaulted state. /// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue); static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
/// Whether the given \c yytable_ value indicates a syntax error. /// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue); static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
static const short yypact_ninf_; static const short yypact_ninf_;
static const signed char yytable_ninf_; static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind. /// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum. /// are valid, yet not members of the token_kind_type enum.
static symbol_kind_type yytranslate_ (int t); static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
/// Convert the symbol name \a n to a form suitable for a diagnostic. /// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr); static std::string yytnamerr_ (const char *yystr);
@@ -2154,14 +2180,14 @@ switch (yykind)
static const short yycheck_[]; static const short yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
// symbol of state STATE-NUM. // state STATE-NUM.
static const unsigned char yystos_[]; static const unsigned char yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives. // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
static const unsigned char yyr1_[]; static const unsigned char yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
static const signed char yyr2_[]; static const signed char yyr2_[];
@@ -2260,7 +2286,7 @@ switch (yykind)
typedef typename S::size_type size_type; typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type; typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200) stack (size_type n = 200) YY_NOEXCEPT
: seq_ (n) : seq_ (n)
{} {}
@@ -2339,7 +2365,7 @@ switch (yykind)
class slice class slice
{ {
public: public:
slice (const stack& stack, index_type range) slice (const stack& stack, index_type range) YY_NOEXCEPT
: stack_ (stack) : stack_ (stack)
, range_ (range) , range_ (range)
{} {}
@@ -2389,7 +2415,7 @@ switch (yykind)
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack. /// Pop \a n symbols from the stack.
void yypop_ (int n = 1); void yypop_ (int n = 1) YY_NOEXCEPT;
/// Constants. /// Constants.
enum enum
@@ -2407,7 +2433,7 @@ switch (yykind)
inline inline
D2Parser::symbol_kind_type D2Parser::symbol_kind_type
D2Parser::yytranslate_ (int t) D2Parser::yytranslate_ (int t) YY_NOEXCEPT
{ {
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex. // TOKEN-NUM as returned by yylex.
@@ -2454,7 +2480,7 @@ switch (yykind)
if (t <= 0) if (t <= 0)
return symbol_kind::S_YYEOF; return symbol_kind::S_YYEOF;
else if (t <= code_max) else if (t <= code_max)
return YY_CAST (symbol_kind_type, translate_table[t]); return static_cast <symbol_kind_type> (translate_table[t]);
else else
return symbol_kind::S_YYUNDEF; return symbol_kind::S_YYUNDEF;
} }
@@ -2498,6 +2524,7 @@ switch (yykind)
template <typename Base> template <typename Base>
D2Parser::symbol_kind_type D2Parser::symbol_kind_type
D2Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT D2Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -2505,6 +2532,7 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
template <typename Base> template <typename Base>
bool bool
D2Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT D2Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -2550,13 +2578,13 @@ switch (yykind)
// by_kind. // by_kind.
inline inline
D2Parser::by_kind::by_kind () D2Parser::by_kind::by_kind () YY_NOEXCEPT
: kind_ (symbol_kind::S_YYEMPTY) : kind_ (symbol_kind::S_YYEMPTY)
{} {}
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
inline inline
D2Parser::by_kind::by_kind (by_kind&& that) D2Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{ {
that.clear (); that.clear ();
@@ -2564,15 +2592,17 @@ switch (yykind)
#endif #endif
inline inline
D2Parser::by_kind::by_kind (const by_kind& that) D2Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{} {}
inline inline
D2Parser::by_kind::by_kind (token_kind_type t) D2Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
: kind_ (yytranslate_ (t)) : kind_ (yytranslate_ (t))
{} {}
inline inline
void void
D2Parser::by_kind::clear () YY_NOEXCEPT D2Parser::by_kind::clear () YY_NOEXCEPT
@@ -2595,6 +2625,7 @@ switch (yykind)
return kind_; return kind_;
} }
inline inline
D2Parser::symbol_kind_type D2Parser::symbol_kind_type
D2Parser::by_kind::type_get () const YY_NOEXCEPT D2Parser::by_kind::type_get () const YY_NOEXCEPT
@@ -2602,9 +2633,10 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
#line 14 "d2_parser.yy" #line 14 "d2_parser.yy"
} } // isc::d2 } } // isc::d2
#line 2608 "d2_parser.h" #line 2640 "d2_parser.h"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Locations for Bison parsers in C++ // Locations for Bison parsers in C++

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton implementation for Bison LALR(1) parsers in C++ // Skeleton implementation for Bison LALR(1) parsers in C++
@@ -160,9 +160,9 @@ namespace isc { namespace dhcp {
Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{} {}
/*---------------. /*---------.
| symbol kinds. | | symbol. |
`---------------*/ `---------*/
@@ -507,7 +507,7 @@ namespace isc { namespace dhcp {
} }
void void
Dhcp4Parser::yypop_ (int n) Dhcp4Parser::yypop_ (int n) YY_NOEXCEPT
{ {
yystack_.pop (n); yystack_.pop (n);
} }
@@ -550,13 +550,13 @@ namespace isc { namespace dhcp {
} }
bool bool
Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yypact_ninf_; return yyvalue == yypact_ninf_;
} }
bool bool
Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yytable_ninf_; return yyvalue == yytable_ninf_;
} }
@@ -4479,16 +4479,16 @@ namespace isc { namespace dhcp {
// Actual number of expected tokens // Actual number of expected tokens
int yycount = 0; int yycount = 0;
int yyn = yypact_[+yyparser_.yystack_[0].state]; const int yyn = yypact_[+yyparser_.yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn)) if (!yy_pact_value_is_default_ (yyn))
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */ this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0; const int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname. // Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1; const int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx) for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
&& !yy_table_value_is_error_ (yytable_[yyx + yyn])) && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -4509,6 +4509,9 @@ namespace isc { namespace dhcp {
int int
Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx, Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const symbol_kind_type yyarg[], int yyargn) const
@@ -5833,7 +5836,7 @@ namespace isc { namespace dhcp {
#line 14 "dhcp4_parser.yy" #line 14 "dhcp4_parser.yy"
} } // isc::dhcp } } // isc::dhcp
#line 5837 "dhcp4_parser.cc" #line 5840 "dhcp4_parser.cc"
#line 2732 "dhcp4_parser.yy" #line 2732 "dhcp4_parser.yy"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton interface for Bison LALR(1) parsers in C++ // Skeleton interface for Bison LALR(1) parsers in C++
@@ -133,12 +133,18 @@ using namespace std;
# define YY_USE(E) /* empty */ # define YY_USE(E) /* empty */
#endif #endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ /* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop") _Pragma ("GCC diagnostic pop")
#else #else
@@ -200,7 +206,7 @@ using namespace std;
#line 14 "dhcp4_parser.yy" #line 14 "dhcp4_parser.yy"
namespace isc { namespace dhcp { namespace isc { namespace dhcp {
#line 204 "dhcp4_parser.h" #line 210 "dhcp4_parser.h"
@@ -209,27 +215,32 @@ namespace isc { namespace dhcp {
class Dhcp4Parser class Dhcp4Parser
{ {
public: public:
#ifndef PARSER4_STYPE #ifdef PARSER4_STYPE
# ifdef __GNUC__
# pragma GCC message "bison: do not #define PARSER4_STYPE in C++, use %define api.value.type"
# endif
typedef PARSER4_STYPE value_type;
#else
/// A buffer to store and retrieve objects. /// A buffer to store and retrieve objects.
/// ///
/// Sort of a variant, but does not keep track of the nature /// Sort of a variant, but does not keep track of the nature
/// of the stored data, since that knowledge is available /// of the stored data, since that knowledge is available
/// via the current parser state. /// via the current parser state.
class semantic_type class value_type
{ {
public: public:
/// Type of *this. /// Type of *this.
typedef semantic_type self_type; typedef value_type self_type;
/// Empty construction. /// Empty construction.
semantic_type () YY_NOEXCEPT value_type () YY_NOEXCEPT
: yybuffer_ () : yyraw_ ()
, yytypeid_ (YY_NULLPTR) , yytypeid_ (YY_NULLPTR)
{} {}
/// Construct and fill. /// Construct and fill.
template <typename T> template <typename T>
semantic_type (YY_RVREF (T) t) value_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T)) : yytypeid_ (&typeid (T))
{ {
PARSER4__ASSERT (sizeof (T) <= size); PARSER4__ASSERT (sizeof (T) <= size);
@@ -238,13 +249,13 @@ namespace isc { namespace dhcp {
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
/// Non copyable. /// Non copyable.
semantic_type (const self_type&) = delete; value_type (const self_type&) = delete;
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&) = delete; self_type& operator= (const self_type&) = delete;
#endif #endif
/// Destruction, allowed only if empty. /// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT ~value_type () YY_NOEXCEPT
{ {
PARSER4__ASSERT (!yytypeid_); PARSER4__ASSERT (!yytypeid_);
} }
@@ -388,7 +399,7 @@ namespace isc { namespace dhcp {
private: private:
#if YY_CPLUSPLUS < 201103L #if YY_CPLUSPLUS < 201103L
/// Non copyable. /// Non copyable.
semantic_type (const self_type&); value_type (const self_type&);
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&); self_type& operator= (const self_type&);
#endif #endif
@@ -398,7 +409,7 @@ namespace isc { namespace dhcp {
T* T*
yyas_ () YY_NOEXCEPT yyas_ () YY_NOEXCEPT
{ {
void *yyp = yybuffer_.yyraw; void *yyp = yyraw_;
return static_cast<T*> (yyp); return static_cast<T*> (yyp);
} }
@@ -407,7 +418,7 @@ namespace isc { namespace dhcp {
const T* const T*
yyas_ () const YY_NOEXCEPT yyas_ () const YY_NOEXCEPT
{ {
const void *yyp = yybuffer_.yyraw; const void *yyp = yyraw_;
return static_cast<const T*> (yyp); return static_cast<const T*> (yyp);
} }
@@ -445,18 +456,19 @@ namespace isc { namespace dhcp {
union union
{ {
/// Strongest alignment constraints. /// Strongest alignment constraints.
long double yyalign_me; long double yyalign_me_;
/// A buffer large enough to store any of the semantic values. /// A buffer large enough to store any of the semantic values.
char yyraw[size]; char yyraw_[size];
} yybuffer_; };
/// Whether the content is built: if defined, the name of the stored type. /// Whether the content is built: if defined, the name of the stored type.
const std::type_info *yytypeid_; const std::type_info *yytypeid_;
}; };
#else
typedef PARSER4_STYPE semantic_type;
#endif #endif
/// Backward compatibility (Bison 3.8).
typedef value_type semantic_type;
/// Symbol locations. /// Symbol locations.
typedef location location_type; typedef location location_type;
@@ -695,7 +707,7 @@ namespace isc { namespace dhcp {
}; };
/// Token kind, as returned by yylex. /// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type; typedef token::token_kind_type token_kind_type;
/// Backward compatibility alias (Bison 3.6). /// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type; typedef token_kind_type token_type;
@@ -1353,7 +1365,7 @@ namespace isc { namespace dhcp {
typedef Base super_type; typedef Base super_type;
/// Default constructor. /// Default constructor.
basic_symbol () basic_symbol () YY_NOEXCEPT
: value () : value ()
, location () , location ()
{} {}
@@ -1494,6 +1506,8 @@ namespace isc { namespace dhcp {
clear (); clear ();
} }
/// Destroy contents, and record that is empty. /// Destroy contents, and record that is empty.
void clear () YY_NOEXCEPT void clear () YY_NOEXCEPT
{ {
@@ -1561,7 +1575,7 @@ switch (yykind)
void move (basic_symbol& s); void move (basic_symbol& s);
/// The semantic value. /// The semantic value.
semantic_type value; value_type value;
/// The location. /// The location.
location_type location; location_type location;
@@ -1576,22 +1590,24 @@ switch (yykind)
/// Type access provider for token (enum) based symbols. /// Type access provider for token (enum) based symbols.
struct by_kind struct by_kind
{ {
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor. /// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type; typedef token_kind_type kind_type;
/// Default constructor.
by_kind () YY_NOEXCEPT;
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that) YY_NOEXCEPT;
#endif
/// Copy constructor.
by_kind (const by_kind& that) YY_NOEXCEPT;
/// Constructor from (external) token numbers. /// Constructor from (external) token numbers.
by_kind (kind_type t); by_kind (kind_type t) YY_NOEXCEPT;
/// Record that this symbol is empty. /// Record that this symbol is empty.
void clear () YY_NOEXCEPT; void clear () YY_NOEXCEPT;
@@ -1621,59 +1637,69 @@ switch (yykind)
typedef basic_symbol<by_kind> super_type; typedef basic_symbol<by_kind> super_type;
/// Empty symbol. /// Empty symbol.
symbol_type () {} symbol_type () YY_NOEXCEPT {}
/// Constructor for valueless symbols, and symbols from each type. /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l) symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l)) : super_type (token_kind_type (tok), std::move (l))
#else #else
symbol_type (int tok, const location_type& l) symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l) : super_type (token_kind_type (tok), l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER4__ASSERT (tok == token::TOKEN_END PARSER4__ASSERT (tok == token::TOKEN_END
|| (token::TOKEN_PARSER4_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL)); || (token::TOKEN_PARSER4_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL));
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, bool v, location_type l) symbol_type (int tok, bool v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const bool& v, const location_type& l) symbol_type (int tok, const bool& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER4__ASSERT (tok == token::TOKEN_BOOLEAN); PARSER4__ASSERT (tok == token::TOKEN_BOOLEAN);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, double v, location_type l) symbol_type (int tok, double v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const double& v, const location_type& l) symbol_type (int tok, const double& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER4__ASSERT (tok == token::TOKEN_FLOAT); PARSER4__ASSERT (tok == token::TOKEN_FLOAT);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, int64_t v, location_type l) symbol_type (int tok, int64_t v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const int64_t& v, const location_type& l) symbol_type (int tok, const int64_t& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER4__ASSERT (tok == token::TOKEN_INTEGER); PARSER4__ASSERT (tok == token::TOKEN_INTEGER);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l) symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const std::string& v, const location_type& l) symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER4__ASSERT (tok == token::TOKEN_STRING); PARSER4__ASSERT (tok == token::TOKEN_STRING);
#endif
} }
}; };
@@ -1722,7 +1748,7 @@ switch (yykind)
/// YYSYMBOL. No bounds checking. /// YYSYMBOL. No bounds checking.
static std::string symbol_name (symbol_kind_type yysymbol); static std::string symbol_name (symbol_kind_type yysymbol);
// Implementation of make_symbol for each symbol type. // Implementation of make_symbol for each token kind.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
static static
symbol_type symbol_type
@@ -4844,19 +4870,19 @@ switch (yykind)
/// Whether the given \c yypact_ value indicates a defaulted state. /// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue); static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
/// Whether the given \c yytable_ value indicates a syntax error. /// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue); static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
static const short yypact_ninf_; static const short yypact_ninf_;
static const signed char yytable_ninf_; static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind. /// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum. /// are valid, yet not members of the token_kind_type enum.
static symbol_kind_type yytranslate_ (int t); static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
/// Convert the symbol name \a n to a form suitable for a diagnostic. /// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr); static std::string yytnamerr_ (const char *yystr);
@@ -4888,14 +4914,14 @@ switch (yykind)
static const short yycheck_[]; static const short yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
// symbol of state STATE-NUM. // state STATE-NUM.
static const short yystos_[]; static const short yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives. // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
static const short yyr1_[]; static const short yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
static const signed char yyr2_[]; static const signed char yyr2_[];
@@ -4994,7 +5020,7 @@ switch (yykind)
typedef typename S::size_type size_type; typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type; typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200) stack (size_type n = 200) YY_NOEXCEPT
: seq_ (n) : seq_ (n)
{} {}
@@ -5073,7 +5099,7 @@ switch (yykind)
class slice class slice
{ {
public: public:
slice (const stack& stack, index_type range) slice (const stack& stack, index_type range) YY_NOEXCEPT
: stack_ (stack) : stack_ (stack)
, range_ (range) , range_ (range)
{} {}
@@ -5123,7 +5149,7 @@ switch (yykind)
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack. /// Pop \a n symbols from the stack.
void yypop_ (int n = 1); void yypop_ (int n = 1) YY_NOEXCEPT;
/// Constants. /// Constants.
enum enum
@@ -5141,7 +5167,7 @@ switch (yykind)
inline inline
Dhcp4Parser::symbol_kind_type Dhcp4Parser::symbol_kind_type
Dhcp4Parser::yytranslate_ (int t) Dhcp4Parser::yytranslate_ (int t) YY_NOEXCEPT
{ {
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex. // TOKEN-NUM as returned by yylex.
@@ -5202,7 +5228,7 @@ switch (yykind)
if (t <= 0) if (t <= 0)
return symbol_kind::S_YYEOF; return symbol_kind::S_YYEOF;
else if (t <= code_max) else if (t <= code_max)
return YY_CAST (symbol_kind_type, translate_table[t]); return static_cast <symbol_kind_type> (translate_table[t]);
else else
return symbol_kind::S_YYUNDEF; return symbol_kind::S_YYUNDEF;
} }
@@ -5252,6 +5278,7 @@ switch (yykind)
template <typename Base> template <typename Base>
Dhcp4Parser::symbol_kind_type Dhcp4Parser::symbol_kind_type
Dhcp4Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT Dhcp4Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -5259,6 +5286,7 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
template <typename Base> template <typename Base>
bool bool
Dhcp4Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT Dhcp4Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -5310,13 +5338,13 @@ switch (yykind)
// by_kind. // by_kind.
inline inline
Dhcp4Parser::by_kind::by_kind () Dhcp4Parser::by_kind::by_kind () YY_NOEXCEPT
: kind_ (symbol_kind::S_YYEMPTY) : kind_ (symbol_kind::S_YYEMPTY)
{} {}
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
inline inline
Dhcp4Parser::by_kind::by_kind (by_kind&& that) Dhcp4Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{ {
that.clear (); that.clear ();
@@ -5324,15 +5352,17 @@ switch (yykind)
#endif #endif
inline inline
Dhcp4Parser::by_kind::by_kind (const by_kind& that) Dhcp4Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{} {}
inline inline
Dhcp4Parser::by_kind::by_kind (token_kind_type t) Dhcp4Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
: kind_ (yytranslate_ (t)) : kind_ (yytranslate_ (t))
{} {}
inline inline
void void
Dhcp4Parser::by_kind::clear () YY_NOEXCEPT Dhcp4Parser::by_kind::clear () YY_NOEXCEPT
@@ -5355,6 +5385,7 @@ switch (yykind)
return kind_; return kind_;
} }
inline inline
Dhcp4Parser::symbol_kind_type Dhcp4Parser::symbol_kind_type
Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT
@@ -5362,9 +5393,10 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
#line 14 "dhcp4_parser.yy" #line 14 "dhcp4_parser.yy"
} } // isc::dhcp } } // isc::dhcp
#line 5368 "dhcp4_parser.h" #line 5400 "dhcp4_parser.h"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Locations for Bison parsers in C++ // Locations for Bison parsers in C++

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton implementation for Bison LALR(1) parsers in C++ // Skeleton implementation for Bison LALR(1) parsers in C++
@@ -160,9 +160,9 @@ namespace isc { namespace dhcp {
Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{} {}
/*---------------. /*---------.
| symbol kinds. | | symbol. |
`---------------*/ `---------*/
@@ -497,7 +497,7 @@ namespace isc { namespace dhcp {
} }
void void
Dhcp6Parser::yypop_ (int n) Dhcp6Parser::yypop_ (int n) YY_NOEXCEPT
{ {
yystack_.pop (n); yystack_.pop (n);
} }
@@ -540,13 +540,13 @@ namespace isc { namespace dhcp {
} }
bool bool
Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue) Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yypact_ninf_; return yyvalue == yypact_ninf_;
} }
bool bool
Dhcp6Parser::yy_table_value_is_error_ (int yyvalue) Dhcp6Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yytable_ninf_; return yyvalue == yytable_ninf_;
} }
@@ -4601,16 +4601,16 @@ namespace isc { namespace dhcp {
// Actual number of expected tokens // Actual number of expected tokens
int yycount = 0; int yycount = 0;
int yyn = yypact_[+yyparser_.yystack_[0].state]; const int yyn = yypact_[+yyparser_.yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn)) if (!yy_pact_value_is_default_ (yyn))
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */ this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0; const int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname. // Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1; const int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx) for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
&& !yy_table_value_is_error_ (yytable_[yyx + yyn])) && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -4631,6 +4631,9 @@ namespace isc { namespace dhcp {
int int
Dhcp6Parser::yy_syntax_error_arguments_ (const context& yyctx, Dhcp6Parser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const symbol_kind_type yyarg[], int yyargn) const
@@ -5977,7 +5980,7 @@ namespace isc { namespace dhcp {
#line 14 "dhcp6_parser.yy" #line 14 "dhcp6_parser.yy"
} } // isc::dhcp } } // isc::dhcp
#line 5981 "dhcp6_parser.cc" #line 5984 "dhcp6_parser.cc"
#line 2864 "dhcp6_parser.yy" #line 2864 "dhcp6_parser.yy"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton interface for Bison LALR(1) parsers in C++ // Skeleton interface for Bison LALR(1) parsers in C++
@@ -133,12 +133,18 @@ using namespace std;
# define YY_USE(E) /* empty */ # define YY_USE(E) /* empty */
#endif #endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ /* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop") _Pragma ("GCC diagnostic pop")
#else #else
@@ -200,7 +206,7 @@ using namespace std;
#line 14 "dhcp6_parser.yy" #line 14 "dhcp6_parser.yy"
namespace isc { namespace dhcp { namespace isc { namespace dhcp {
#line 204 "dhcp6_parser.h" #line 210 "dhcp6_parser.h"
@@ -209,27 +215,32 @@ namespace isc { namespace dhcp {
class Dhcp6Parser class Dhcp6Parser
{ {
public: public:
#ifndef PARSER6_STYPE #ifdef PARSER6_STYPE
# ifdef __GNUC__
# pragma GCC message "bison: do not #define PARSER6_STYPE in C++, use %define api.value.type"
# endif
typedef PARSER6_STYPE value_type;
#else
/// A buffer to store and retrieve objects. /// A buffer to store and retrieve objects.
/// ///
/// Sort of a variant, but does not keep track of the nature /// Sort of a variant, but does not keep track of the nature
/// of the stored data, since that knowledge is available /// of the stored data, since that knowledge is available
/// via the current parser state. /// via the current parser state.
class semantic_type class value_type
{ {
public: public:
/// Type of *this. /// Type of *this.
typedef semantic_type self_type; typedef value_type self_type;
/// Empty construction. /// Empty construction.
semantic_type () YY_NOEXCEPT value_type () YY_NOEXCEPT
: yybuffer_ () : yyraw_ ()
, yytypeid_ (YY_NULLPTR) , yytypeid_ (YY_NULLPTR)
{} {}
/// Construct and fill. /// Construct and fill.
template <typename T> template <typename T>
semantic_type (YY_RVREF (T) t) value_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T)) : yytypeid_ (&typeid (T))
{ {
PARSER6__ASSERT (sizeof (T) <= size); PARSER6__ASSERT (sizeof (T) <= size);
@@ -238,13 +249,13 @@ namespace isc { namespace dhcp {
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
/// Non copyable. /// Non copyable.
semantic_type (const self_type&) = delete; value_type (const self_type&) = delete;
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&) = delete; self_type& operator= (const self_type&) = delete;
#endif #endif
/// Destruction, allowed only if empty. /// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT ~value_type () YY_NOEXCEPT
{ {
PARSER6__ASSERT (!yytypeid_); PARSER6__ASSERT (!yytypeid_);
} }
@@ -388,7 +399,7 @@ namespace isc { namespace dhcp {
private: private:
#if YY_CPLUSPLUS < 201103L #if YY_CPLUSPLUS < 201103L
/// Non copyable. /// Non copyable.
semantic_type (const self_type&); value_type (const self_type&);
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&); self_type& operator= (const self_type&);
#endif #endif
@@ -398,7 +409,7 @@ namespace isc { namespace dhcp {
T* T*
yyas_ () YY_NOEXCEPT yyas_ () YY_NOEXCEPT
{ {
void *yyp = yybuffer_.yyraw; void *yyp = yyraw_;
return static_cast<T*> (yyp); return static_cast<T*> (yyp);
} }
@@ -407,7 +418,7 @@ namespace isc { namespace dhcp {
const T* const T*
yyas_ () const YY_NOEXCEPT yyas_ () const YY_NOEXCEPT
{ {
const void *yyp = yybuffer_.yyraw; const void *yyp = yyraw_;
return static_cast<const T*> (yyp); return static_cast<const T*> (yyp);
} }
@@ -444,18 +455,19 @@ namespace isc { namespace dhcp {
union union
{ {
/// Strongest alignment constraints. /// Strongest alignment constraints.
long double yyalign_me; long double yyalign_me_;
/// A buffer large enough to store any of the semantic values. /// A buffer large enough to store any of the semantic values.
char yyraw[size]; char yyraw_[size];
} yybuffer_; };
/// Whether the content is built: if defined, the name of the stored type. /// Whether the content is built: if defined, the name of the stored type.
const std::type_info *yytypeid_; const std::type_info *yytypeid_;
}; };
#else
typedef PARSER6_STYPE semantic_type;
#endif #endif
/// Backward compatibility (Bison 3.8).
typedef value_type semantic_type;
/// Symbol locations. /// Symbol locations.
typedef location location_type; typedef location location_type;
@@ -702,7 +714,7 @@ namespace isc { namespace dhcp {
}; };
/// Token kind, as returned by yylex. /// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type; typedef token::token_kind_type token_kind_type;
/// Backward compatibility alias (Bison 3.6). /// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type; typedef token_kind_type token_type;
@@ -1388,7 +1400,7 @@ namespace isc { namespace dhcp {
typedef Base super_type; typedef Base super_type;
/// Default constructor. /// Default constructor.
basic_symbol () basic_symbol () YY_NOEXCEPT
: value () : value ()
, location () , location ()
{} {}
@@ -1528,6 +1540,8 @@ namespace isc { namespace dhcp {
clear (); clear ();
} }
/// Destroy contents, and record that is empty. /// Destroy contents, and record that is empty.
void clear () YY_NOEXCEPT void clear () YY_NOEXCEPT
{ {
@@ -1594,7 +1608,7 @@ switch (yykind)
void move (basic_symbol& s); void move (basic_symbol& s);
/// The semantic value. /// The semantic value.
semantic_type value; value_type value;
/// The location. /// The location.
location_type location; location_type location;
@@ -1609,22 +1623,24 @@ switch (yykind)
/// Type access provider for token (enum) based symbols. /// Type access provider for token (enum) based symbols.
struct by_kind struct by_kind
{ {
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor. /// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type; typedef token_kind_type kind_type;
/// Default constructor.
by_kind () YY_NOEXCEPT;
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that) YY_NOEXCEPT;
#endif
/// Copy constructor.
by_kind (const by_kind& that) YY_NOEXCEPT;
/// Constructor from (external) token numbers. /// Constructor from (external) token numbers.
by_kind (kind_type t); by_kind (kind_type t) YY_NOEXCEPT;
/// Record that this symbol is empty. /// Record that this symbol is empty.
void clear () YY_NOEXCEPT; void clear () YY_NOEXCEPT;
@@ -1654,59 +1670,69 @@ switch (yykind)
typedef basic_symbol<by_kind> super_type; typedef basic_symbol<by_kind> super_type;
/// Empty symbol. /// Empty symbol.
symbol_type () {} symbol_type () YY_NOEXCEPT {}
/// Constructor for valueless symbols, and symbols from each type. /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l) symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l)) : super_type (token_kind_type (tok), std::move (l))
#else #else
symbol_type (int tok, const location_type& l) symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l) : super_type (token_kind_type (tok), l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER6__ASSERT (tok == token::TOKEN_END PARSER6__ASSERT (tok == token::TOKEN_END
|| (token::TOKEN_PARSER6_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL)); || (token::TOKEN_PARSER6_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL));
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, bool v, location_type l) symbol_type (int tok, bool v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const bool& v, const location_type& l) symbol_type (int tok, const bool& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER6__ASSERT (tok == token::TOKEN_BOOLEAN); PARSER6__ASSERT (tok == token::TOKEN_BOOLEAN);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, double v, location_type l) symbol_type (int tok, double v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const double& v, const location_type& l) symbol_type (int tok, const double& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER6__ASSERT (tok == token::TOKEN_FLOAT); PARSER6__ASSERT (tok == token::TOKEN_FLOAT);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, int64_t v, location_type l) symbol_type (int tok, int64_t v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const int64_t& v, const location_type& l) symbol_type (int tok, const int64_t& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER6__ASSERT (tok == token::TOKEN_INTEGER); PARSER6__ASSERT (tok == token::TOKEN_INTEGER);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l) symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const std::string& v, const location_type& l) symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
PARSER6__ASSERT (tok == token::TOKEN_STRING); PARSER6__ASSERT (tok == token::TOKEN_STRING);
#endif
} }
}; };
@@ -1755,7 +1781,7 @@ switch (yykind)
/// YYSYMBOL. No bounds checking. /// YYSYMBOL. No bounds checking.
static std::string symbol_name (symbol_kind_type yysymbol); static std::string symbol_name (symbol_kind_type yysymbol);
// Implementation of make_symbol for each symbol type. // Implementation of make_symbol for each token kind.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
static static
symbol_type symbol_type
@@ -4997,19 +5023,19 @@ switch (yykind)
/// Whether the given \c yypact_ value indicates a defaulted state. /// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue); static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
/// Whether the given \c yytable_ value indicates a syntax error. /// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue); static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
static const short yypact_ninf_; static const short yypact_ninf_;
static const signed char yytable_ninf_; static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind. /// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum. /// are valid, yet not members of the token_kind_type enum.
static symbol_kind_type yytranslate_ (int t); static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
/// Convert the symbol name \a n to a form suitable for a diagnostic. /// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr); static std::string yytnamerr_ (const char *yystr);
@@ -5041,14 +5067,14 @@ switch (yykind)
static const short yycheck_[]; static const short yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
// symbol of state STATE-NUM. // state STATE-NUM.
static const short yystos_[]; static const short yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives. // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
static const short yyr1_[]; static const short yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
static const signed char yyr2_[]; static const signed char yyr2_[];
@@ -5147,7 +5173,7 @@ switch (yykind)
typedef typename S::size_type size_type; typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type; typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200) stack (size_type n = 200) YY_NOEXCEPT
: seq_ (n) : seq_ (n)
{} {}
@@ -5226,7 +5252,7 @@ switch (yykind)
class slice class slice
{ {
public: public:
slice (const stack& stack, index_type range) slice (const stack& stack, index_type range) YY_NOEXCEPT
: stack_ (stack) : stack_ (stack)
, range_ (range) , range_ (range)
{} {}
@@ -5276,7 +5302,7 @@ switch (yykind)
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack. /// Pop \a n symbols from the stack.
void yypop_ (int n = 1); void yypop_ (int n = 1) YY_NOEXCEPT;
/// Constants. /// Constants.
enum enum
@@ -5294,7 +5320,7 @@ switch (yykind)
inline inline
Dhcp6Parser::symbol_kind_type Dhcp6Parser::symbol_kind_type
Dhcp6Parser::yytranslate_ (int t) Dhcp6Parser::yytranslate_ (int t) YY_NOEXCEPT
{ {
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex. // TOKEN-NUM as returned by yylex.
@@ -5356,7 +5382,7 @@ switch (yykind)
if (t <= 0) if (t <= 0)
return symbol_kind::S_YYEOF; return symbol_kind::S_YYEOF;
else if (t <= code_max) else if (t <= code_max)
return YY_CAST (symbol_kind_type, translate_table[t]); return static_cast <symbol_kind_type> (translate_table[t]);
else else
return symbol_kind::S_YYUNDEF; return symbol_kind::S_YYUNDEF;
} }
@@ -5405,6 +5431,7 @@ switch (yykind)
template <typename Base> template <typename Base>
Dhcp6Parser::symbol_kind_type Dhcp6Parser::symbol_kind_type
Dhcp6Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT Dhcp6Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -5412,6 +5439,7 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
template <typename Base> template <typename Base>
bool bool
Dhcp6Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT Dhcp6Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -5462,13 +5490,13 @@ switch (yykind)
// by_kind. // by_kind.
inline inline
Dhcp6Parser::by_kind::by_kind () Dhcp6Parser::by_kind::by_kind () YY_NOEXCEPT
: kind_ (symbol_kind::S_YYEMPTY) : kind_ (symbol_kind::S_YYEMPTY)
{} {}
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
inline inline
Dhcp6Parser::by_kind::by_kind (by_kind&& that) Dhcp6Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{ {
that.clear (); that.clear ();
@@ -5476,15 +5504,17 @@ switch (yykind)
#endif #endif
inline inline
Dhcp6Parser::by_kind::by_kind (const by_kind& that) Dhcp6Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{} {}
inline inline
Dhcp6Parser::by_kind::by_kind (token_kind_type t) Dhcp6Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
: kind_ (yytranslate_ (t)) : kind_ (yytranslate_ (t))
{} {}
inline inline
void void
Dhcp6Parser::by_kind::clear () YY_NOEXCEPT Dhcp6Parser::by_kind::clear () YY_NOEXCEPT
@@ -5507,6 +5537,7 @@ switch (yykind)
return kind_; return kind_;
} }
inline inline
Dhcp6Parser::symbol_kind_type Dhcp6Parser::symbol_kind_type
Dhcp6Parser::by_kind::type_get () const YY_NOEXCEPT Dhcp6Parser::by_kind::type_get () const YY_NOEXCEPT
@@ -5514,9 +5545,10 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
#line 14 "dhcp6_parser.yy" #line 14 "dhcp6_parser.yy"
} } // isc::dhcp } } // isc::dhcp
#line 5520 "dhcp6_parser.h" #line 5552 "dhcp6_parser.h"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Locations for Bison parsers in C++ // Locations for Bison parsers in C++

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Locations for Bison parsers in C++ // Locations for Bison parsers in C++

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton implementation for Bison LALR(1) parsers in C++ // Skeleton implementation for Bison LALR(1) parsers in C++
@@ -160,9 +160,9 @@ namespace isc { namespace netconf {
NetconfParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW NetconfParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{} {}
/*---------------. /*---------.
| symbol kinds. | | symbol. |
`---------------*/ `---------*/
@@ -447,7 +447,7 @@ namespace isc { namespace netconf {
} }
void void
NetconfParser::yypop_ (int n) NetconfParser::yypop_ (int n) YY_NOEXCEPT
{ {
yystack_.pop (n); yystack_.pop (n);
} }
@@ -490,13 +490,13 @@ namespace isc { namespace netconf {
} }
bool bool
NetconfParser::yy_pact_value_is_default_ (int yyvalue) NetconfParser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yypact_ninf_; return yyvalue == yypact_ninf_;
} }
bool bool
NetconfParser::yy_table_value_is_error_ (int yyvalue) NetconfParser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yytable_ninf_; return yyvalue == yytable_ninf_;
} }
@@ -1749,16 +1749,16 @@ namespace isc { namespace netconf {
// Actual number of expected tokens // Actual number of expected tokens
int yycount = 0; int yycount = 0;
int yyn = yypact_[+yyparser_.yystack_[0].state]; const int yyn = yypact_[+yyparser_.yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn)) if (!yy_pact_value_is_default_ (yyn))
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */ this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0; const int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname. // Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1; const int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx) for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
&& !yy_table_value_is_error_ (yytable_[yyx + yyn])) && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -1779,6 +1779,9 @@ namespace isc { namespace netconf {
int int
NetconfParser::yy_syntax_error_arguments_ (const context& yyctx, NetconfParser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const symbol_kind_type yyarg[], int yyargn) const
@@ -2188,7 +2191,7 @@ namespace isc { namespace netconf {
#line 14 "netconf_parser.yy" #line 14 "netconf_parser.yy"
} } // isc::netconf } } // isc::netconf
#line 2192 "netconf_parser.cc" #line 2195 "netconf_parser.cc"
#line 706 "netconf_parser.yy" #line 706 "netconf_parser.yy"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton interface for Bison LALR(1) parsers in C++ // Skeleton interface for Bison LALR(1) parsers in C++
@@ -132,12 +132,18 @@ using namespace std;
# define YY_USE(E) /* empty */ # define YY_USE(E) /* empty */
#endif #endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ /* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop") _Pragma ("GCC diagnostic pop")
#else #else
@@ -199,7 +205,7 @@ using namespace std;
#line 14 "netconf_parser.yy" #line 14 "netconf_parser.yy"
namespace isc { namespace netconf { namespace isc { namespace netconf {
#line 203 "netconf_parser.h" #line 209 "netconf_parser.h"
@@ -208,27 +214,32 @@ namespace isc { namespace netconf {
class NetconfParser class NetconfParser
{ {
public: public:
#ifndef NETCONF_STYPE #ifdef NETCONF_STYPE
# ifdef __GNUC__
# pragma GCC message "bison: do not #define NETCONF_STYPE in C++, use %define api.value.type"
# endif
typedef NETCONF_STYPE value_type;
#else
/// A buffer to store and retrieve objects. /// A buffer to store and retrieve objects.
/// ///
/// Sort of a variant, but does not keep track of the nature /// Sort of a variant, but does not keep track of the nature
/// of the stored data, since that knowledge is available /// of the stored data, since that knowledge is available
/// via the current parser state. /// via the current parser state.
class semantic_type class value_type
{ {
public: public:
/// Type of *this. /// Type of *this.
typedef semantic_type self_type; typedef value_type self_type;
/// Empty construction. /// Empty construction.
semantic_type () YY_NOEXCEPT value_type () YY_NOEXCEPT
: yybuffer_ () : yyraw_ ()
, yytypeid_ (YY_NULLPTR) , yytypeid_ (YY_NULLPTR)
{} {}
/// Construct and fill. /// Construct and fill.
template <typename T> template <typename T>
semantic_type (YY_RVREF (T) t) value_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T)) : yytypeid_ (&typeid (T))
{ {
NETCONF__ASSERT (sizeof (T) <= size); NETCONF__ASSERT (sizeof (T) <= size);
@@ -237,13 +248,13 @@ namespace isc { namespace netconf {
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
/// Non copyable. /// Non copyable.
semantic_type (const self_type&) = delete; value_type (const self_type&) = delete;
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&) = delete; self_type& operator= (const self_type&) = delete;
#endif #endif
/// Destruction, allowed only if empty. /// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT ~value_type () YY_NOEXCEPT
{ {
NETCONF__ASSERT (!yytypeid_); NETCONF__ASSERT (!yytypeid_);
} }
@@ -387,7 +398,7 @@ namespace isc { namespace netconf {
private: private:
#if YY_CPLUSPLUS < 201103L #if YY_CPLUSPLUS < 201103L
/// Non copyable. /// Non copyable.
semantic_type (const self_type&); value_type (const self_type&);
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&); self_type& operator= (const self_type&);
#endif #endif
@@ -397,7 +408,7 @@ namespace isc { namespace netconf {
T* T*
yyas_ () YY_NOEXCEPT yyas_ () YY_NOEXCEPT
{ {
void *yyp = yybuffer_.yyraw; void *yyp = yyraw_;
return static_cast<T*> (yyp); return static_cast<T*> (yyp);
} }
@@ -406,7 +417,7 @@ namespace isc { namespace netconf {
const T* const T*
yyas_ () const YY_NOEXCEPT yyas_ () const YY_NOEXCEPT
{ {
const void *yyp = yybuffer_.yyraw; const void *yyp = yyraw_;
return static_cast<const T*> (yyp); return static_cast<const T*> (yyp);
} }
@@ -438,18 +449,19 @@ namespace isc { namespace netconf {
union union
{ {
/// Strongest alignment constraints. /// Strongest alignment constraints.
long double yyalign_me; long double yyalign_me_;
/// A buffer large enough to store any of the semantic values. /// A buffer large enough to store any of the semantic values.
char yyraw[size]; char yyraw_[size];
} yybuffer_; };
/// Whether the content is built: if defined, the name of the stored type. /// Whether the content is built: if defined, the name of the stored type.
const std::type_info *yytypeid_; const std::type_info *yytypeid_;
}; };
#else
typedef NETCONF_STYPE semantic_type;
#endif #endif
/// Backward compatibility (Bison 3.8).
typedef value_type semantic_type;
/// Symbol locations. /// Symbol locations.
typedef location location_type; typedef location location_type;
@@ -532,7 +544,7 @@ namespace isc { namespace netconf {
}; };
/// Token kind, as returned by yylex. /// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type; typedef token::token_kind_type token_kind_type;
/// Backward compatibility alias (Bison 3.6). /// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type; typedef token_kind_type token_type;
@@ -714,7 +726,7 @@ namespace isc { namespace netconf {
typedef Base super_type; typedef Base super_type;
/// Default constructor. /// Default constructor.
basic_symbol () basic_symbol () YY_NOEXCEPT
: value () : value ()
, location () , location ()
{} {}
@@ -849,6 +861,8 @@ namespace isc { namespace netconf {
clear (); clear ();
} }
/// Destroy contents, and record that is empty. /// Destroy contents, and record that is empty.
void clear () YY_NOEXCEPT void clear () YY_NOEXCEPT
{ {
@@ -910,7 +924,7 @@ switch (yykind)
void move (basic_symbol& s); void move (basic_symbol& s);
/// The semantic value. /// The semantic value.
semantic_type value; value_type value;
/// The location. /// The location.
location_type location; location_type location;
@@ -925,22 +939,24 @@ switch (yykind)
/// Type access provider for token (enum) based symbols. /// Type access provider for token (enum) based symbols.
struct by_kind struct by_kind
{ {
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor. /// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type; typedef token_kind_type kind_type;
/// Default constructor.
by_kind () YY_NOEXCEPT;
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that) YY_NOEXCEPT;
#endif
/// Copy constructor.
by_kind (const by_kind& that) YY_NOEXCEPT;
/// Constructor from (external) token numbers. /// Constructor from (external) token numbers.
by_kind (kind_type t); by_kind (kind_type t) YY_NOEXCEPT;
/// Record that this symbol is empty. /// Record that this symbol is empty.
void clear () YY_NOEXCEPT; void clear () YY_NOEXCEPT;
@@ -970,59 +986,69 @@ switch (yykind)
typedef basic_symbol<by_kind> super_type; typedef basic_symbol<by_kind> super_type;
/// Empty symbol. /// Empty symbol.
symbol_type () {} symbol_type () YY_NOEXCEPT {}
/// Constructor for valueless symbols, and symbols from each type. /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l) symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l)) : super_type (token_kind_type (tok), std::move (l))
#else #else
symbol_type (int tok, const location_type& l) symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l) : super_type (token_kind_type (tok), l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
NETCONF__ASSERT (tok == token::TOKEN_END NETCONF__ASSERT (tok == token::TOKEN_END
|| (token::TOKEN_NETCONF_error <= tok && tok <= token::TOKEN_START_SUB_NETCONF)); || (token::TOKEN_NETCONF_error <= tok && tok <= token::TOKEN_START_SUB_NETCONF));
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, bool v, location_type l) symbol_type (int tok, bool v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const bool& v, const location_type& l) symbol_type (int tok, const bool& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
NETCONF__ASSERT (tok == token::TOKEN_BOOLEAN); NETCONF__ASSERT (tok == token::TOKEN_BOOLEAN);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, double v, location_type l) symbol_type (int tok, double v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const double& v, const location_type& l) symbol_type (int tok, const double& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
NETCONF__ASSERT (tok == token::TOKEN_FLOAT); NETCONF__ASSERT (tok == token::TOKEN_FLOAT);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, int64_t v, location_type l) symbol_type (int tok, int64_t v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const int64_t& v, const location_type& l) symbol_type (int tok, const int64_t& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
NETCONF__ASSERT (tok == token::TOKEN_INTEGER); NETCONF__ASSERT (tok == token::TOKEN_INTEGER);
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l) symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const std::string& v, const location_type& l) symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
NETCONF__ASSERT (tok == token::TOKEN_STRING); NETCONF__ASSERT (tok == token::TOKEN_STRING);
#endif
} }
}; };
@@ -1071,7 +1097,7 @@ switch (yykind)
/// YYSYMBOL. No bounds checking. /// YYSYMBOL. No bounds checking.
static std::string symbol_name (symbol_kind_type yysymbol); static std::string symbol_name (symbol_kind_type yysymbol);
// Implementation of make_symbol for each symbol type. // Implementation of make_symbol for each token kind.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
static static
symbol_type symbol_type
@@ -1853,19 +1879,19 @@ switch (yykind)
/// Whether the given \c yypact_ value indicates a defaulted state. /// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue); static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
/// Whether the given \c yytable_ value indicates a syntax error. /// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue); static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
static const signed char yypact_ninf_; static const signed char yypact_ninf_;
static const signed char yytable_ninf_; static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind. /// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum. /// are valid, yet not members of the token_kind_type enum.
static symbol_kind_type yytranslate_ (int t); static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
/// Convert the symbol name \a n to a form suitable for a diagnostic. /// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr); static std::string yytnamerr_ (const char *yystr);
@@ -1897,14 +1923,14 @@ switch (yykind)
static const short yycheck_[]; static const short yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
// symbol of state STATE-NUM. // state STATE-NUM.
static const unsigned char yystos_[]; static const unsigned char yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives. // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
static const unsigned char yyr1_[]; static const unsigned char yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
static const signed char yyr2_[]; static const signed char yyr2_[];
@@ -2003,7 +2029,7 @@ switch (yykind)
typedef typename S::size_type size_type; typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type; typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200) stack (size_type n = 200) YY_NOEXCEPT
: seq_ (n) : seq_ (n)
{} {}
@@ -2082,7 +2108,7 @@ switch (yykind)
class slice class slice
{ {
public: public:
slice (const stack& stack, index_type range) slice (const stack& stack, index_type range) YY_NOEXCEPT
: stack_ (stack) : stack_ (stack)
, range_ (range) , range_ (range)
{} {}
@@ -2132,7 +2158,7 @@ switch (yykind)
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack. /// Pop \a n symbols from the stack.
void yypop_ (int n = 1); void yypop_ (int n = 1) YY_NOEXCEPT;
/// Constants. /// Constants.
enum enum
@@ -2150,7 +2176,7 @@ switch (yykind)
inline inline
NetconfParser::symbol_kind_type NetconfParser::symbol_kind_type
NetconfParser::yytranslate_ (int t) NetconfParser::yytranslate_ (int t) YY_NOEXCEPT
{ {
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex. // TOKEN-NUM as returned by yylex.
@@ -2196,7 +2222,7 @@ switch (yykind)
if (t <= 0) if (t <= 0)
return symbol_kind::S_YYEOF; return symbol_kind::S_YYEOF;
else if (t <= code_max) else if (t <= code_max)
return YY_CAST (symbol_kind_type, translate_table[t]); return static_cast <symbol_kind_type> (translate_table[t]);
else else
return symbol_kind::S_YYUNDEF; return symbol_kind::S_YYUNDEF;
} }
@@ -2240,6 +2266,7 @@ switch (yykind)
template <typename Base> template <typename Base>
NetconfParser::symbol_kind_type NetconfParser::symbol_kind_type
NetconfParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT NetconfParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -2247,6 +2274,7 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
template <typename Base> template <typename Base>
bool bool
NetconfParser::basic_symbol<Base>::empty () const YY_NOEXCEPT NetconfParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -2292,13 +2320,13 @@ switch (yykind)
// by_kind. // by_kind.
inline inline
NetconfParser::by_kind::by_kind () NetconfParser::by_kind::by_kind () YY_NOEXCEPT
: kind_ (symbol_kind::S_YYEMPTY) : kind_ (symbol_kind::S_YYEMPTY)
{} {}
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
inline inline
NetconfParser::by_kind::by_kind (by_kind&& that) NetconfParser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{ {
that.clear (); that.clear ();
@@ -2306,15 +2334,17 @@ switch (yykind)
#endif #endif
inline inline
NetconfParser::by_kind::by_kind (const by_kind& that) NetconfParser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{} {}
inline inline
NetconfParser::by_kind::by_kind (token_kind_type t) NetconfParser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
: kind_ (yytranslate_ (t)) : kind_ (yytranslate_ (t))
{} {}
inline inline
void void
NetconfParser::by_kind::clear () YY_NOEXCEPT NetconfParser::by_kind::clear () YY_NOEXCEPT
@@ -2337,6 +2367,7 @@ switch (yykind)
return kind_; return kind_;
} }
inline inline
NetconfParser::symbol_kind_type NetconfParser::symbol_kind_type
NetconfParser::by_kind::type_get () const YY_NOEXCEPT NetconfParser::by_kind::type_get () const YY_NOEXCEPT
@@ -2344,9 +2375,10 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
#line 14 "netconf_parser.yy" #line 14 "netconf_parser.yy"
} } // isc::netconf } } // isc::netconf
#line 2350 "netconf_parser.h" #line 2382 "netconf_parser.h"

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2019-2020 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2019-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2019 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2019-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2014-2020 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2014-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Locations for Bison parsers in C++ // Locations for Bison parsers in C++

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton implementation for Bison LALR(1) parsers in C++ // Skeleton implementation for Bison LALR(1) parsers in C++
@@ -160,9 +160,9 @@ namespace isc { namespace eval {
EvalParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW EvalParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{} {}
/*---------------. /*---------.
| symbol kinds. | | symbol. |
`---------------*/ `---------*/
@@ -575,7 +575,7 @@ namespace isc { namespace eval {
} }
void void
EvalParser::yypop_ (int n) EvalParser::yypop_ (int n) YY_NOEXCEPT
{ {
yystack_.pop (n); yystack_.pop (n);
} }
@@ -618,13 +618,13 @@ namespace isc { namespace eval {
} }
bool bool
EvalParser::yy_pact_value_is_default_ (int yyvalue) EvalParser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yypact_ninf_; return yyvalue == yypact_ninf_;
} }
bool bool
EvalParser::yy_table_value_is_error_ (int yyvalue) EvalParser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
{ {
return yyvalue == yytable_ninf_; return yyvalue == yytable_ninf_;
} }
@@ -1806,16 +1806,16 @@ namespace isc { namespace eval {
// Actual number of expected tokens // Actual number of expected tokens
int yycount = 0; int yycount = 0;
int yyn = yypact_[+yyparser_.yystack_[0].state]; const int yyn = yypact_[+yyparser_.yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn)) if (!yy_pact_value_is_default_ (yyn))
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */ this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0; const int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname. // Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1; const int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx) for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
&& !yy_table_value_is_error_ (yytable_[yyx + yyn])) && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -1836,6 +1836,9 @@ namespace isc { namespace eval {
int int
EvalParser::yy_syntax_error_arguments_ (const context& yyctx, EvalParser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const symbol_kind_type yyarg[], int yyargn) const
@@ -2184,7 +2187,7 @@ namespace isc { namespace eval {
#line 14 "parser.yy" #line 14 "parser.yy"
} } // isc::eval } } // isc::eval
#line 2188 "parser.cc" #line 2191 "parser.cc"
#line 626 "parser.yy" #line 626 "parser.yy"

View File

@@ -1,4 +1,4 @@
// A Bison parser, made by GNU Bison 3.7.6. // A Bison parser, made by GNU Bison 3.8.2.
// Skeleton interface for Bison LALR(1) parsers in C++ // Skeleton interface for Bison LALR(1) parsers in C++
@@ -132,12 +132,18 @@ using namespace isc::eval;
# define YY_USE(E) /* empty */ # define YY_USE(E) /* empty */
#endif #endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ /* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop") _Pragma ("GCC diagnostic pop")
#else #else
@@ -199,7 +205,7 @@ using namespace isc::eval;
#line 14 "parser.yy" #line 14 "parser.yy"
namespace isc { namespace eval { namespace isc { namespace eval {
#line 203 "parser.h" #line 209 "parser.h"
@@ -208,27 +214,32 @@ namespace isc { namespace eval {
class EvalParser class EvalParser
{ {
public: public:
#ifndef EVALSTYPE #ifdef EVALSTYPE
# ifdef __GNUC__
# pragma GCC message "bison: do not #define EVALSTYPE in C++, use %define api.value.type"
# endif
typedef EVALSTYPE value_type;
#else
/// A buffer to store and retrieve objects. /// A buffer to store and retrieve objects.
/// ///
/// Sort of a variant, but does not keep track of the nature /// Sort of a variant, but does not keep track of the nature
/// of the stored data, since that knowledge is available /// of the stored data, since that knowledge is available
/// via the current parser state. /// via the current parser state.
class semantic_type class value_type
{ {
public: public:
/// Type of *this. /// Type of *this.
typedef semantic_type self_type; typedef value_type self_type;
/// Empty construction. /// Empty construction.
semantic_type () YY_NOEXCEPT value_type () YY_NOEXCEPT
: yybuffer_ () : yyraw_ ()
, yytypeid_ (YY_NULLPTR) , yytypeid_ (YY_NULLPTR)
{} {}
/// Construct and fill. /// Construct and fill.
template <typename T> template <typename T>
semantic_type (YY_RVREF (T) t) value_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T)) : yytypeid_ (&typeid (T))
{ {
EVAL_ASSERT (sizeof (T) <= size); EVAL_ASSERT (sizeof (T) <= size);
@@ -237,13 +248,13 @@ namespace isc { namespace eval {
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
/// Non copyable. /// Non copyable.
semantic_type (const self_type&) = delete; value_type (const self_type&) = delete;
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&) = delete; self_type& operator= (const self_type&) = delete;
#endif #endif
/// Destruction, allowed only if empty. /// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT ~value_type () YY_NOEXCEPT
{ {
EVAL_ASSERT (!yytypeid_); EVAL_ASSERT (!yytypeid_);
} }
@@ -387,7 +398,7 @@ namespace isc { namespace eval {
private: private:
#if YY_CPLUSPLUS < 201103L #if YY_CPLUSPLUS < 201103L
/// Non copyable. /// Non copyable.
semantic_type (const self_type&); value_type (const self_type&);
/// Non copyable. /// Non copyable.
self_type& operator= (const self_type&); self_type& operator= (const self_type&);
#endif #endif
@@ -397,7 +408,7 @@ namespace isc { namespace eval {
T* T*
yyas_ () YY_NOEXCEPT yyas_ () YY_NOEXCEPT
{ {
void *yyp = yybuffer_.yyraw; void *yyp = yyraw_;
return static_cast<T*> (yyp); return static_cast<T*> (yyp);
} }
@@ -406,7 +417,7 @@ namespace isc { namespace eval {
const T* const T*
yyas_ () const YY_NOEXCEPT yyas_ () const YY_NOEXCEPT
{ {
const void *yyp = yybuffer_.yyraw; const void *yyp = yyraw_;
return static_cast<const T*> (yyp); return static_cast<const T*> (yyp);
} }
@@ -454,18 +465,19 @@ namespace isc { namespace eval {
union union
{ {
/// Strongest alignment constraints. /// Strongest alignment constraints.
long double yyalign_me; long double yyalign_me_;
/// A buffer large enough to store any of the semantic values. /// A buffer large enough to store any of the semantic values.
char yyraw[size]; char yyraw_[size];
} yybuffer_; };
/// Whether the content is built: if defined, the name of the stored type. /// Whether the content is built: if defined, the name of the stored type.
const std::type_info *yytypeid_; const std::type_info *yytypeid_;
}; };
#else
typedef EVALSTYPE semantic_type;
#endif #endif
/// Backward compatibility (Bison 3.8).
typedef value_type semantic_type;
/// Symbol locations. /// Symbol locations.
typedef location location_type; typedef location location_type;
@@ -562,7 +574,7 @@ namespace isc { namespace eval {
}; };
/// Token kind, as returned by yylex. /// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type; typedef token::token_kind_type token_kind_type;
/// Backward compatibility alias (Bison 3.6). /// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type; typedef token_kind_type token_type;
@@ -676,7 +688,7 @@ namespace isc { namespace eval {
typedef Base super_type; typedef Base super_type;
/// Default constructor. /// Default constructor.
basic_symbol () basic_symbol () YY_NOEXCEPT
: value () : value ()
, location () , location ()
{} {}
@@ -887,6 +899,8 @@ namespace isc { namespace eval {
clear (); clear ();
} }
/// Destroy contents, and record that is empty. /// Destroy contents, and record that is empty.
void clear () YY_NOEXCEPT void clear () YY_NOEXCEPT
{ {
@@ -968,7 +982,7 @@ switch (yykind)
void move (basic_symbol& s); void move (basic_symbol& s);
/// The semantic value. /// The semantic value.
semantic_type value; value_type value;
/// The location. /// The location.
location_type location; location_type location;
@@ -983,22 +997,24 @@ switch (yykind)
/// Type access provider for token (enum) based symbols. /// Type access provider for token (enum) based symbols.
struct by_kind struct by_kind
{ {
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor. /// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type; typedef token_kind_type kind_type;
/// Default constructor.
by_kind () YY_NOEXCEPT;
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that) YY_NOEXCEPT;
#endif
/// Copy constructor.
by_kind (const by_kind& that) YY_NOEXCEPT;
/// Constructor from (external) token numbers. /// Constructor from (external) token numbers.
by_kind (kind_type t); by_kind (kind_type t) YY_NOEXCEPT;
/// Record that this symbol is empty. /// Record that this symbol is empty.
void clear () YY_NOEXCEPT; void clear () YY_NOEXCEPT;
@@ -1028,29 +1044,33 @@ switch (yykind)
typedef basic_symbol<by_kind> super_type; typedef basic_symbol<by_kind> super_type;
/// Empty symbol. /// Empty symbol.
symbol_type () {} symbol_type () YY_NOEXCEPT {}
/// Constructor for valueless symbols, and symbols from each type. /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l) symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l)) : super_type (token_kind_type (tok), std::move (l))
#else #else
symbol_type (int tok, const location_type& l) symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l) : super_type (token_kind_type (tok), l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
EVAL_ASSERT (tok == token::TOKEN_END EVAL_ASSERT (tok == token::TOKEN_END
|| (token::TOKEN_EVALerror <= tok && tok <= token::TOKEN_TOPLEVEL_STRING)); || (token::TOKEN_EVALerror <= tok && tok <= token::TOKEN_TOPLEVEL_STRING));
#endif
} }
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l) symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l)) : super_type (token_kind_type (tok), std::move (v), std::move (l))
#else #else
symbol_type (int tok, const std::string& v, const location_type& l) symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l) : super_type (token_kind_type (tok), v, l)
#endif #endif
{ {
#if !defined _MSC_VER || defined __clang__
EVAL_ASSERT ((token::TOKEN_STRING <= tok && tok <= token::TOKEN_IP_ADDRESS)); EVAL_ASSERT ((token::TOKEN_STRING <= tok && tok <= token::TOKEN_IP_ADDRESS));
#endif
} }
}; };
@@ -1099,7 +1119,7 @@ switch (yykind)
/// YYSYMBOL. No bounds checking. /// YYSYMBOL. No bounds checking.
static std::string symbol_name (symbol_kind_type yysymbol); static std::string symbol_name (symbol_kind_type yysymbol);
// Implementation of make_symbol for each symbol type. // Implementation of make_symbol for each token kind.
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
static static
symbol_type symbol_type
@@ -2091,19 +2111,19 @@ switch (yykind)
/// Whether the given \c yypact_ value indicates a defaulted state. /// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue); static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
/// Whether the given \c yytable_ value indicates a syntax error. /// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check /// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue); static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
static const short yypact_ninf_; static const short yypact_ninf_;
static const signed char yytable_ninf_; static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind. /// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum. /// are valid, yet not members of the token_kind_type enum.
static symbol_kind_type yytranslate_ (int t); static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
/// Convert the symbol name \a n to a form suitable for a diagnostic. /// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr); static std::string yytnamerr_ (const char *yystr);
@@ -2135,14 +2155,14 @@ switch (yykind)
static const unsigned char yycheck_[]; static const unsigned char yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
// symbol of state STATE-NUM. // state STATE-NUM.
static const signed char yystos_[]; static const signed char yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives. // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
static const signed char yyr1_[]; static const signed char yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
static const signed char yyr2_[]; static const signed char yyr2_[];
@@ -2241,7 +2261,7 @@ switch (yykind)
typedef typename S::size_type size_type; typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type; typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200) stack (size_type n = 200) YY_NOEXCEPT
: seq_ (n) : seq_ (n)
{} {}
@@ -2320,7 +2340,7 @@ switch (yykind)
class slice class slice
{ {
public: public:
slice (const stack& stack, index_type range) slice (const stack& stack, index_type range) YY_NOEXCEPT
: stack_ (stack) : stack_ (stack)
, range_ (range) , range_ (range)
{} {}
@@ -2370,7 +2390,7 @@ switch (yykind)
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack. /// Pop \a n symbols from the stack.
void yypop_ (int n = 1); void yypop_ (int n = 1) YY_NOEXCEPT;
/// Constants. /// Constants.
enum enum
@@ -2388,7 +2408,7 @@ switch (yykind)
inline inline
EvalParser::symbol_kind_type EvalParser::symbol_kind_type
EvalParser::yytranslate_ (int t) EvalParser::yytranslate_ (int t) YY_NOEXCEPT
{ {
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex. // TOKEN-NUM as returned by yylex.
@@ -2435,7 +2455,7 @@ switch (yykind)
if (t <= 0) if (t <= 0)
return symbol_kind::S_YYEOF; return symbol_kind::S_YYEOF;
else if (t <= code_max) else if (t <= code_max)
return YY_CAST (symbol_kind_type, translate_table[t]); return static_cast <symbol_kind_type> (translate_table[t]);
else else
return symbol_kind::S_YYUNDEF; return symbol_kind::S_YYUNDEF;
} }
@@ -2499,6 +2519,7 @@ switch (yykind)
template <typename Base> template <typename Base>
EvalParser::symbol_kind_type EvalParser::symbol_kind_type
EvalParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT EvalParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -2506,6 +2527,7 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
template <typename Base> template <typename Base>
bool bool
EvalParser::basic_symbol<Base>::empty () const YY_NOEXCEPT EvalParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -2571,13 +2593,13 @@ switch (yykind)
// by_kind. // by_kind.
inline inline
EvalParser::by_kind::by_kind () EvalParser::by_kind::by_kind () YY_NOEXCEPT
: kind_ (symbol_kind::S_YYEMPTY) : kind_ (symbol_kind::S_YYEMPTY)
{} {}
#if 201103L <= YY_CPLUSPLUS #if 201103L <= YY_CPLUSPLUS
inline inline
EvalParser::by_kind::by_kind (by_kind&& that) EvalParser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{ {
that.clear (); that.clear ();
@@ -2585,15 +2607,17 @@ switch (yykind)
#endif #endif
inline inline
EvalParser::by_kind::by_kind (const by_kind& that) EvalParser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
: kind_ (that.kind_) : kind_ (that.kind_)
{} {}
inline inline
EvalParser::by_kind::by_kind (token_kind_type t) EvalParser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
: kind_ (yytranslate_ (t)) : kind_ (yytranslate_ (t))
{} {}
inline inline
void void
EvalParser::by_kind::clear () YY_NOEXCEPT EvalParser::by_kind::clear () YY_NOEXCEPT
@@ -2616,6 +2640,7 @@ switch (yykind)
return kind_; return kind_;
} }
inline inline
EvalParser::symbol_kind_type EvalParser::symbol_kind_type
EvalParser::by_kind::type_get () const YY_NOEXCEPT EvalParser::by_kind::type_get () const YY_NOEXCEPT
@@ -2623,9 +2648,10 @@ switch (yykind)
return this->kind (); return this->kind ();
} }
#line 14 "parser.yy" #line 14 "parser.yy"
} } // isc::eval } } // isc::eval
#line 2629 "parser.h" #line 2655 "parser.h"

View File

@@ -104,7 +104,7 @@ BasicHttpAuthConfig::parse(const ConstElementPtr& config) {
<< config->getPosition() << ")"); << config->getPosition() << ")");
} }
if (type->getType() != Element::string) { if (type->getType() != Element::string) {
isc_throw(DhcpConfigError, "type is must be a string (" isc_throw(DhcpConfigError, "type must be a string ("
<< type->getPosition() << ")"); << type->getPosition() << ")");
} }
if (type->stringValue() != "basic") { if (type->stringValue() != "basic") {
@@ -117,7 +117,7 @@ BasicHttpAuthConfig::parse(const ConstElementPtr& config) {
ConstElementPtr realm = config->get("realm"); ConstElementPtr realm = config->get("realm");
if (realm) { if (realm) {
if (realm->getType() != Element::string) { if (realm->getType() != Element::string) {
isc_throw(DhcpConfigError, "realm is must be a string (" isc_throw(DhcpConfigError, "realm must be a string ("
<< realm->getPosition() << ")"); << realm->getPosition() << ")");
} }
setRealm(realm->stringValue()); setRealm(realm->stringValue());

View File

@@ -149,7 +149,7 @@ TEST(BasicHttpAuthConfigTest, parse) {
// The type must be a string. // The type must be a string.
cfg->set("type", Element::create(true)); cfg->set("type", Element::create(true));
EXPECT_THROW_MSG(config.parse(cfg), DhcpConfigError, EXPECT_THROW_MSG(config.parse(cfg), DhcpConfigError,
"type is must be a string (:0:0)"); "type must be a string (:0:0)");
// The type must be basic. // The type must be basic.
cfg->set("type", Element::create(string("foobar"))); cfg->set("type", Element::create(string("foobar")));
@@ -162,7 +162,7 @@ TEST(BasicHttpAuthConfigTest, parse) {
// The realm must be a string. // The realm must be a string.
cfg->set("realm", Element::createList()); cfg->set("realm", Element::createList());
EXPECT_THROW_MSG(config.parse(cfg), DhcpConfigError, EXPECT_THROW_MSG(config.parse(cfg), DhcpConfigError,
"realm is must be a string (:0:0)"); "realm must be a string (:0:0)");
cfg->set("realm", Element::create(string("my-realm"))); cfg->set("realm", Element::create(string("my-realm")));
EXPECT_NO_THROW(config.parse(cfg)); EXPECT_NO_THROW(config.parse(cfg));

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2011-2020 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2011-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2016-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2016-2020 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2016-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -804,7 +804,7 @@ TEST_F(PgSqlBasicsTest, get) {
EXPECT_THROW(bind_array.getInteger<uint32_t>(), OutOfRange); EXPECT_THROW(bind_array.getInteger<uint32_t>(), OutOfRange);
EXPECT_THROW(bind_array.getType(), OutOfRange); EXPECT_THROW(bind_array.getType(), OutOfRange);
// Now try again wi // Now try again with proper values.
bind_array.add(123); // This will be converted to "123" string. bind_array.add(123); // This will be converted to "123" string.
bind_array.addNull(); bind_array.addNull();
bind_array.add("sagittarius"); bind_array.add("sagittarius");

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2012-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2012-2019 Internet Systems Consortium, Inc. ("ISC") // Copyright (C) 2012-2021 Internet Systems Consortium, Inc. ("ISC")
// //
// This Source Code Form is subject to the terms of the Mozilla Public // This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this

View File

@@ -115,7 +115,7 @@ To run YANG/NETCONF/Sysrepo tests you need to compile Kea with Sysrepo support:
@endverbatim @endverbatim
For details, see Section "YANG/NETCONF support" in the Kea Administrator For details, see Section "YANG/NETCONF support" in the Kea Administrator
Reference Manual: https://kea.readthedocs.io/en/latest/arm/netconf.html. Reference Manual: https://kea.readthedocs.io/en/latest/arm/integrations.html#yang-netconf.
You also need to install YANG modules, so the unit tests are able to You also need to install YANG modules, so the unit tests are able to
retrieve, add, update and generally interact with the sysrepo information. retrieve, add, update and generally interact with the sysrepo information.

View File

@@ -31,7 +31,7 @@ else
. "@abs_top_builddir@/src/bin/admin/admin-utils.sh" . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
fi fi
# First argument is must be the expected schema version <major>.<minor> # First argument must be the expected schema version <major>.<minor>
# Check if it's passed at all. # Check if it's passed at all.
if [ "$#" -lt "1" ]; then if [ "$#" -lt "1" ]; then
printf "Required at least one parameter: schema version number, e.g. 7.0\n" printf "Required at least one parameter: schema version number, e.g. 7.0\n"

View File

@@ -1894,7 +1894,7 @@ BEGIN
INSERT INTO dhcp4_audit_revision (modification_ts, server_id, log_message) INSERT INTO dhcp4_audit_revision (modification_ts, server_id, log_message)
VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id; VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id;
-- Update pertienent session variables. -- Update pertinent session variables.
PERFORM set_session_value('kea.audit_revision_id', audit_revision_id); PERFORM set_session_value('kea.audit_revision_id', audit_revision_id);
PERFORM set_session_value('kea.cascade_transaction', cascade_transaction); PERFORM set_session_value('kea.cascade_transaction', cascade_transaction);
END IF; END IF;
@@ -2504,7 +2504,7 @@ BEGIN
INSERT INTO dhcp6_audit_revision (modification_ts, server_id, log_message) INSERT INTO dhcp6_audit_revision (modification_ts, server_id, log_message)
VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id; VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id;
-- Update pertienent session variables. -- Update pertinent session variables.
PERFORM set_session_value('kea.audit_revision_id', audit_revision_id); PERFORM set_session_value('kea.audit_revision_id', audit_revision_id);
PERFORM set_session_value('kea.cascade_transaction', cascade_transaction); PERFORM set_session_value('kea.cascade_transaction', cascade_transaction);
END IF; END IF;
@@ -3254,7 +3254,7 @@ CREATE TRIGGER dhcp4_option_def_ADEL
-- - p_modification_ts: modification timestamp of the -- - p_modification_ts: modification timestamp of the
-- option. -- option.
-- Some arguments are prefixed with "p_" to avoid ambiguity -- Some arguments are prefixed with "p_" to avoid ambiguity
-- with column names in SQL statments. PostgreSQL does not -- with column names in SQL statements. PostgreSQL does not
-- allow table aliases to be used with column names in update -- allow table aliases to be used with column names in update
-- set expressions. -- set expressions.
-- ----------------------------------------------------- -- -----------------------------------------------------

View File

@@ -901,7 +901,7 @@ BEGIN
INSERT INTO dhcp4_audit_revision (modification_ts, server_id, log_message) INSERT INTO dhcp4_audit_revision (modification_ts, server_id, log_message)
VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id; VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id;
-- Update pertienent session variables. -- Update pertinent session variables.
PERFORM set_session_value('kea.audit_revision_id', audit_revision_id); PERFORM set_session_value('kea.audit_revision_id', audit_revision_id);
PERFORM set_session_value('kea.cascade_transaction', cascade_transaction); PERFORM set_session_value('kea.cascade_transaction', cascade_transaction);
END IF; END IF;
@@ -1511,7 +1511,7 @@ BEGIN
INSERT INTO dhcp6_audit_revision (modification_ts, server_id, log_message) INSERT INTO dhcp6_audit_revision (modification_ts, server_id, log_message)
VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id; VALUES (audit_ts, srv_id, audit_log_message) returning id INTO audit_revision_id;
-- Update pertienent session variables. -- Update pertinent session variables.
PERFORM set_session_value('kea.audit_revision_id', audit_revision_id); PERFORM set_session_value('kea.audit_revision_id', audit_revision_id);
PERFORM set_session_value('kea.cascade_transaction', cascade_transaction); PERFORM set_session_value('kea.cascade_transaction', cascade_transaction);
END IF; END IF;
@@ -2261,7 +2261,7 @@ CREATE TRIGGER dhcp4_option_def_ADEL
-- - p_modification_ts: modification timestamp of the -- - p_modification_ts: modification timestamp of the
-- option. -- option.
-- Some arguments are prefixed with "p_" to avoid ambiguity -- Some arguments are prefixed with "p_" to avoid ambiguity
-- with column names in SQL statments. PostgreSQL does not -- with column names in SQL statements. PostgreSQL does not
-- allow table aliases to be used with column names in update -- allow table aliases to be used with column names in update
-- set expressions. -- set expressions.
-- ----------------------------------------------------- -- -----------------------------------------------------

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# Copyright (C) 2019-2020 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2019-2021 Internet Systems Consortium, Inc. ("ISC")
# #
# This Source Code Form is subject to the terms of the Mozilla Public # This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this # License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -31,7 +31,7 @@ else
. "@abs_top_builddir@/src/bin/admin/admin-utils.sh" . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
fi fi
# First argument is must be the expected schema version <major>.<minor> # First argument must be the expected schema version <major>.<minor>
# Check if it's passed at all. # Check if it's passed at all.
if [ "$#" -lt "1" ]; then if [ "$#" -lt "1" ]; then
printf "Required at least one parameter: schema version number, e.g. 7.0\n" printf "Required at least one parameter: schema version number, e.g. 7.0\n"

View File

@@ -31,9 +31,8 @@ fi
# Get the output file # Get the output file
base=$1 base=$1
output= output=
now=$(date +"%Y-%m-%-d %H:%m")
header="Grammar generated on $now. See Chapter $md_name for an explanation." header="Grammar generated from $(basename "${base}").yy. See Chapter ${md_name} for an explanation."
if [ -f "${base}.yy" ]; then if [ -f "${base}.yy" ]; then
# We want to explicitly set the language to English. Otherwise # We want to explicitly set the language to English. Otherwise