From cc47230b8dfe0bcd31d4f45ca84d2dd35ae360f0 Mon Sep 17 00:00:00 2001 From: Brian Aker Date: Mon, 9 Jul 2012 02:20:53 -0700 Subject: [PATCH] Add ability to have version "just requested" when you initially connect. --- libmemcached-1.0/struct/memcached.h | 3 + libmemcached/common.h | 2 + libmemcached/connect.cc | 2 + libmemcached/csl/parser.cc | 472 ++++----- libmemcached/csl/parser.h | 53 +- libmemcached/csl/parser.yy | 5 + libmemcached/csl/scanner.cc | 1322 +++++++++++++------------ libmemcached/csl/scanner.h | 27 +- libmemcached/csl/scanner.l | 3 + libmemcached/flag.cc | 156 +++ libmemcached/flag.hpp | 59 ++ libmemcached/include.am | 3 + libmemcached/is.h | 32 +- libmemcached/memcached.cc | 2 + libmemcached/version.cc | 80 +- libmemcached/version.hpp | 44 + libtest/port.cc | 14 +- tests/libmemcached-1.0/parser.cc | 1 + tests/libmemcached-1.0/replication.cc | 13 +- 19 files changed, 1363 insertions(+), 930 deletions(-) create mode 100644 libmemcached/flag.cc create mode 100644 libmemcached/flag.hpp create mode 100644 libmemcached/version.hpp diff --git a/libmemcached-1.0/struct/memcached.h b/libmemcached-1.0/struct/memcached.h index 3de83a07..0b4f8976 100644 --- a/libmemcached-1.0/struct/memcached.h +++ b/libmemcached-1.0/struct/memcached.h @@ -45,6 +45,7 @@ struct memcached_st { bool is_purging:1; bool is_processing_input:1; bool is_time_for_rebuild:1; + bool not_used:1; } state; struct { @@ -63,6 +64,8 @@ struct memcached_st { bool verify_key:1; bool tcp_keepalive:1; bool is_aes:1; + bool is_fetching_version:1; + bool not_used:1; } flags; memcached_server_distribution_t distribution; diff --git a/libmemcached/common.h b/libmemcached/common.h index dad5bf21..a3e4ea90 100644 --- a/libmemcached/common.h +++ b/libmemcached/common.h @@ -117,6 +117,7 @@ memcached_return_t memcached_server_execute(memcached_st *ptr, #include #include #include +#include #include #include #include @@ -139,6 +140,7 @@ memcached_return_t memcached_server_execute(memcached_st *ptr, #include #include #include +#include #endif #include diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc index 03295df2..5a5d899d 100644 --- a/libmemcached/connect.cc +++ b/libmemcached/connect.cc @@ -641,6 +641,7 @@ static memcached_return_t backoff_handling(org::libmemcached::Instance* server, static memcached_return_t _memcached_connect(org::libmemcached::Instance* server, const bool set_last_disconnected) { + assert(server); if (server->fd != INVALID_SOCKET) { return MEMCACHED_SUCCESS; @@ -696,6 +697,7 @@ static memcached_return_t _memcached_connect(org::libmemcached::Instance* server if (memcached_success(rc)) { server->mark_server_as_clean(); + memcached_version_instance(server); return rc; } else if (set_last_disconnected) diff --git a/libmemcached/csl/parser.cc b/libmemcached/csl/parser.cc index 62f7eaa7..92662144 100644 --- a/libmemcached/csl/parser.cc +++ b/libmemcached/csl/parser.cc @@ -185,32 +185,33 @@ inline void __config_error(Context *context, yyscan_t *scanner, const char *erro _TCP_KEEPALIVE = 298, _TCP_KEEPIDLE = 299, _TCP_NODELAY = 300, - NAMESPACE = 301, - POOL_MIN = 302, - POOL_MAX = 303, - MD5 = 304, - CRC = 305, - FNV1_64 = 306, - FNV1A_64 = 307, - FNV1_32 = 308, - FNV1A_32 = 309, - HSIEH = 310, - MURMUR = 311, - JENKINS = 312, - CONSISTENT = 313, - MODULA = 314, - RANDOM = 315, - TRUE = 316, - FALSE = 317, - FLOAT = 318, - NUMBER = 319, - PORT = 320, - WEIGHT_START = 321, - IPADDRESS = 322, - HOSTNAME = 323, - STRING = 324, - QUOTED_STRING = 325, - FILE_PATH = 326 + FETCH_VERSION = 301, + NAMESPACE = 302, + POOL_MIN = 303, + POOL_MAX = 304, + MD5 = 305, + CRC = 306, + FNV1_64 = 307, + FNV1A_64 = 308, + FNV1_32 = 309, + FNV1A_32 = 310, + HSIEH = 311, + MURMUR = 312, + JENKINS = 313, + CONSISTENT = 314, + MODULA = 315, + RANDOM = 316, + TRUE = 317, + FALSE = 318, + FLOAT = 319, + NUMBER = 320, + PORT = 321, + WEIGHT_START = 322, + IPADDRESS = 323, + HOSTNAME = 324, + STRING = 325, + QUOTED_STRING = 326, + FILE_PATH = 327 }; #endif @@ -227,7 +228,7 @@ inline void __config_error(Context *context, yyscan_t *scanner, const char *erro /* Line 343 of yacc.c */ -#line 231 "libmemcached/csl/parser.cc" +#line 232 "libmemcached/csl/parser.cc" #ifdef short # undef short @@ -444,22 +445,22 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 71 +#define YYFINAL 72 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 74 +#define YYLAST 75 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 75 +#define YYNTOKENS 76 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 12 /* YYNRULES -- Number of rules. */ -#define YYNRULES 67 +#define YYNRULES 68 /* YYNRULES -- Number of states. */ -#define YYNSTATES 85 +#define YYNSTATES 86 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 326 +#define YYMAXUTOK 327 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -470,10 +471,10 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 74, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 63, 2, 2, 2, 2, 2, + 2, 2, 75, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 64, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 64, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 65, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -498,8 +499,8 @@ static const yytype_uint8 yytranslate[] = 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, - 67, 68, 69, 70, 71, 72, 73 + 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, + 67, 68, 69, 70, 71, 72, 73, 74 }; #if YYDEBUG @@ -509,44 +510,44 @@ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 9, 11, 13, 15, 17, 19, 21, 23, 27, 32, 37, 41, 44, 47, 50, 52, - 55, 58, 63, 66, 69, 71, 73, 75, 77, 79, + 55, 57, 60, 65, 68, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, - 121, 122, 124, 125, 127, 129, 131, 133, 135, 137, - 139, 141, 143, 145, 147, 149, 151, 153 + 121, 123, 124, 126, 127, 129, 131, 133, 135, 137, + 139, 141, 143, 145, 147, 149, 151, 153, 155 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 76, 0, -1, 77, -1, 76, 74, 77, -1, 78, + 77, 0, -1, 78, -1, 77, 75, 78, -1, 79, -1, 3, -1, 10, -1, 4, -1, 5, -1, 6, - -1, 7, -1, 8, 74, 85, -1, 11, 70, 82, - 83, -1, 11, 69, 82, 83, -1, 12, 85, 83, - -1, 9, 85, -1, 47, 66, -1, 48, 66, -1, - 79, -1, 46, 85, -1, 20, 86, -1, 20, 86, - 63, 84, -1, 21, 84, -1, 80, 66, -1, 81, - -1, 40, -1, 33, -1, 19, -1, 25, -1, 23, - -1, 24, -1, 29, -1, 30, -1, 32, -1, 34, - -1, 35, -1, 36, -1, 37, -1, 17, -1, 18, - -1, 22, -1, 28, -1, 31, -1, 38, -1, 39, - -1, 45, -1, 43, -1, 44, -1, 41, -1, 42, - -1, -1, 67, -1, -1, 68, -1, 49, -1, 50, + -1, 7, -1, 8, 75, 86, -1, 11, 71, 83, + 84, -1, 11, 70, 83, 84, -1, 12, 86, 84, + -1, 9, 86, -1, 48, 67, -1, 49, 67, -1, + 80, -1, 47, 86, -1, 46, -1, 20, 87, -1, + 20, 87, 64, 85, -1, 21, 85, -1, 81, 67, + -1, 82, -1, 40, -1, 33, -1, 19, -1, 25, + -1, 23, -1, 24, -1, 29, -1, 30, -1, 32, + -1, 34, -1, 35, -1, 36, -1, 37, -1, 17, + -1, 18, -1, 22, -1, 28, -1, 31, -1, 38, + -1, 39, -1, 45, -1, 43, -1, 44, -1, 41, + -1, 42, -1, -1, 68, -1, -1, 69, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, - -1, 56, -1, 57, -1, 71, -1, 72, -1, 58, - -1, 59, -1, 60, -1 + -1, 56, -1, 57, -1, 58, -1, 72, -1, 73, + -1, 59, -1, 60, -1, 61, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 188, 188, 189, 193, 195, 197, 199, 204, 209, - 213, 217, 228, 238, 248, 257, 261, 265, 269, 273, - 285, 298, 311, 318, 325, 334, 340, 344, 348, 352, - 356, 360, 364, 368, 372, 376, 380, 384, 391, 395, - 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, - 442, 443, 448, 449, 454, 458, 462, 466, 470, 474, - 478, 482, 486, 493, 497, 504, 508, 512 + 0, 189, 189, 190, 194, 196, 198, 200, 205, 210, + 214, 218, 229, 239, 249, 258, 262, 266, 270, 274, + 286, 290, 303, 316, 323, 330, 339, 345, 349, 353, + 357, 361, 365, 369, 373, 377, 381, 385, 389, 396, + 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, + 440, 447, 448, 453, 454, 459, 463, 467, 471, 475, + 479, 483, 487, 491, 498, 502, 509, 513, 517 }; #endif @@ -565,10 +566,10 @@ static const char *const yytname[] = "RCV_TIMEOUT", "REMOVE_FAILED_SERVERS", "RETRY_TIMEOUT", "SND_TIMEOUT", "SOCKET_RECV_SIZE", "SOCKET_SEND_SIZE", "SORT_HOSTS", "SUPPORT_CAS", "USER_DATA", "USE_UDP", "VERIFY_KEY", "_TCP_KEEPALIVE", "_TCP_KEEPIDLE", - "_TCP_NODELAY", "NAMESPACE", "POOL_MIN", "POOL_MAX", "MD5", "CRC", - "FNV1_64", "FNV1A_64", "FNV1_32", "FNV1A_32", "HSIEH", "MURMUR", - "JENKINS", "CONSISTENT", "MODULA", "RANDOM", "TRUE", "FALSE", "','", - "'='", "FLOAT", "NUMBER", "PORT", "WEIGHT_START", "IPADDRESS", + "_TCP_NODELAY", "FETCH_VERSION", "NAMESPACE", "POOL_MIN", "POOL_MAX", + "MD5", "CRC", "FNV1_64", "FNV1A_64", "FNV1_32", "FNV1A_32", "HSIEH", + "MURMUR", "JENKINS", "CONSISTENT", "MODULA", "RANDOM", "TRUE", "FALSE", + "','", "'='", "FLOAT", "NUMBER", "PORT", "WEIGHT_START", "IPADDRESS", "HOSTNAME", "STRING", "QUOTED_STRING", "FILE_PATH", "' '", "$accept", "begin", "statement", "expression", "behaviors", "behavior_number", "behavior_boolean", "optional_port", "optional_weight", "hash", "string", @@ -587,21 +588,21 @@ static const yytype_uint16 yytoknum[] = 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 44, 61, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 32 + 315, 316, 317, 318, 44, 61, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 32 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 75, 76, 76, 77, 77, 77, 77, 77, 77, - 77, 77, 78, 78, 78, 78, 78, 78, 78, 79, - 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 82, 82, 83, 83, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 85, 85, 86, 86, 86 + 0, 76, 77, 77, 78, 78, 78, 78, 78, 78, + 78, 78, 79, 79, 79, 79, 79, 79, 79, 80, + 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, + 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 83, 83, 84, 84, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 86, 86, 87, 87, 87 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -609,11 +610,11 @@ static const yytype_uint8 yyr2[] = { 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 4, 4, 3, 2, 2, 2, 1, 2, - 2, 4, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1 + 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -622,44 +623,44 @@ static const yytype_uint8 yyr2[] = static const yytype_uint8 yydefact[] = { 0, 5, 7, 8, 9, 10, 0, 0, 6, 0, - 0, 38, 39, 27, 0, 0, 40, 29, 30, 28, - 41, 31, 32, 42, 33, 26, 34, 35, 36, 37, - 43, 44, 25, 48, 49, 46, 47, 45, 0, 0, - 0, 0, 2, 4, 18, 0, 24, 0, 63, 64, - 15, 50, 50, 52, 65, 66, 67, 20, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 22, 19, 16, - 17, 1, 0, 23, 11, 51, 52, 52, 53, 14, - 0, 3, 13, 12, 21 + 0, 39, 40, 28, 0, 0, 41, 30, 31, 29, + 42, 32, 33, 43, 34, 27, 35, 36, 37, 38, + 44, 45, 26, 49, 50, 47, 48, 46, 20, 0, + 0, 0, 0, 2, 4, 18, 0, 25, 0, 64, + 65, 15, 51, 51, 53, 66, 67, 68, 21, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 23, 19, + 16, 17, 1, 0, 24, 11, 52, 53, 53, 54, + 14, 0, 3, 13, 12, 22 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 41, 42, 43, 44, 45, 46, 76, 79, 67, - 50, 57 + -1, 42, 43, 44, 45, 46, 47, 77, 80, 68, + 51, 58 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -61 +#define YYPACT_NINF -62 static const yytype_int8 yypact[] = { - -2, -61, -61, -61, -61, -61, -60, -24, -61, -20, - -24, -61, -61, -61, -47, 13, -61, -61, -61, -61, - -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, - -61, -61, -61, -61, -61, -61, -61, -61, -24, -41, - -15, 0, -61, -61, -61, -11, -61, -24, -61, -61, - -61, -10, -10, -12, -61, -61, -61, -5, -61, -61, - -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, - -61, -61, -2, -61, -61, -61, -12, -12, -61, -61, - 13, -61, -61, -61, -61 + -2, -62, -62, -62, -62, -62, -61, -24, -62, -20, + -24, -62, -62, -62, -48, 13, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -24, + -42, -15, 0, -62, -62, -62, -11, -62, -24, -62, + -62, -62, -10, -10, -12, -62, -62, -62, -5, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -2, -62, -62, -62, -12, -12, -62, + -62, 13, -62, -62, -62, -62 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -61, -61, -13, -61, -61, -61, -61, 8, -23, -9, - 14, -61 + -62, -62, -13, -62, -62, -62, -62, 8, -23, -9, + 14, -62 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -668,18 +669,18 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 71, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 54, 55, 56, 47, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 53, 69, 20, 21, 22, 23, + 72, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 55, 56, 57, 48, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 54, 70, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 48, 49, 51, - 52, 70, 68, 82, 83, 73, 78, 75, 80, 81, - 77, 74, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 84, 0, 0, 72 + 34, 35, 36, 37, 38, 39, 40, 41, 49, 50, + 52, 53, 71, 69, 83, 84, 74, 79, 76, 81, + 82, 78, 75, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 85, 0, 0, 73 }; #define yypact_value_is_default(yystate) \ - ((yystate) == (-61)) + ((yystate) == (-62)) #define yytable_value_is_error(yytable_value) \ YYID (0) @@ -687,13 +688,13 @@ static const yytype_uint8 yytable[] = static const yytype_int8 yycheck[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 58, 59, 60, 74, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 10, 66, 28, 29, 30, 31, + 12, 59, 60, 61, 75, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 10, 67, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 71, 72, 69, - 70, 66, 38, 76, 77, 66, 68, 67, 63, 72, - 52, 47, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 80, -1, -1, 74 + 42, 43, 44, 45, 46, 47, 48, 49, 72, 73, + 70, 71, 67, 39, 77, 78, 67, 69, 68, 64, + 73, 53, 48, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 81, -1, -1, 75 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -704,11 +705,11 @@ static const yytype_uint8 yystos[] = 12, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 76, 77, 78, 79, 80, 81, 74, 71, 72, - 85, 69, 70, 85, 58, 59, 60, 86, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 84, 85, 66, - 66, 0, 74, 66, 85, 67, 82, 82, 68, 83, - 63, 77, 83, 83, 84 + 48, 49, 77, 78, 79, 80, 81, 82, 75, 72, + 73, 86, 70, 71, 86, 59, 60, 61, 87, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 85, 86, + 67, 67, 0, 75, 67, 86, 68, 83, 83, 69, + 84, 64, 78, 84, 84, 85 }; #define yyerrok (yyerrstatus = 0) @@ -1557,28 +1558,28 @@ yyreduce: case 4: /* Line 1806 of yacc.c */ -#line 194 "libmemcached/csl/parser.yy" +#line 195 "libmemcached/csl/parser.yy" { } break; case 5: /* Line 1806 of yacc.c */ -#line 196 "libmemcached/csl/parser.yy" +#line 197 "libmemcached/csl/parser.yy" { } break; case 6: /* Line 1806 of yacc.c */ -#line 198 "libmemcached/csl/parser.yy" +#line 199 "libmemcached/csl/parser.yy" { } break; case 7: /* Line 1806 of yacc.c */ -#line 200 "libmemcached/csl/parser.yy" +#line 201 "libmemcached/csl/parser.yy" { context->set_end(); YYACCEPT; @@ -1588,7 +1589,7 @@ yyreduce: case 8: /* Line 1806 of yacc.c */ -#line 205 "libmemcached/csl/parser.yy" +#line 206 "libmemcached/csl/parser.yy" { context->rc= MEMCACHED_PARSE_USER_ERROR; parser_abort(context, "ERROR called directly"); @@ -1598,7 +1599,7 @@ yyreduce: case 9: /* Line 1806 of yacc.c */ -#line 210 "libmemcached/csl/parser.yy" +#line 211 "libmemcached/csl/parser.yy" { memcached_reset(context->memc); } @@ -1607,7 +1608,7 @@ yyreduce: case 10: /* Line 1806 of yacc.c */ -#line 214 "libmemcached/csl/parser.yy" +#line 215 "libmemcached/csl/parser.yy" { yydebug= 1; } @@ -1616,7 +1617,7 @@ yyreduce: case 11: /* Line 1806 of yacc.c */ -#line 218 "libmemcached/csl/parser.yy" +#line 219 "libmemcached/csl/parser.yy" { if ((context->rc= memcached_parse_configure_file(*context->memc, (yyvsp[(3) - (3)].string).c_str, (yyvsp[(3) - (3)].string).size)) != MEMCACHED_SUCCESS) { @@ -1628,7 +1629,7 @@ yyreduce: case 12: /* Line 1806 of yacc.c */ -#line 229 "libmemcached/csl/parser.yy" +#line 230 "libmemcached/csl/parser.yy" { if (memcached_failed(context->rc= memcached_server_add_with_weight(context->memc, (yyvsp[(2) - (4)].server).c_str, (yyvsp[(3) - (4)].number), (yyvsp[(4) - (4)].number)))) { @@ -1643,7 +1644,7 @@ yyreduce: case 13: /* Line 1806 of yacc.c */ -#line 239 "libmemcached/csl/parser.yy" +#line 240 "libmemcached/csl/parser.yy" { if (memcached_failed(context->rc= memcached_server_add_with_weight(context->memc, (yyvsp[(2) - (4)].server).c_str, (yyvsp[(3) - (4)].number), (yyvsp[(4) - (4)].number)))) { @@ -1658,7 +1659,7 @@ yyreduce: case 14: /* Line 1806 of yacc.c */ -#line 249 "libmemcached/csl/parser.yy" +#line 250 "libmemcached/csl/parser.yy" { if (memcached_failed(context->rc= memcached_server_add_unix_socket_with_weight(context->memc, (yyvsp[(2) - (3)].string).c_str, (yyvsp[(3) - (3)].number)))) { @@ -1672,7 +1673,7 @@ yyreduce: case 15: /* Line 1806 of yacc.c */ -#line 258 "libmemcached/csl/parser.yy" +#line 259 "libmemcached/csl/parser.yy" { memcached_set_configuration_file(context->memc, (yyvsp[(2) - (2)].string).c_str, (yyvsp[(2) - (2)].string).size); } @@ -1681,7 +1682,7 @@ yyreduce: case 16: /* Line 1806 of yacc.c */ -#line 262 "libmemcached/csl/parser.yy" +#line 263 "libmemcached/csl/parser.yy" { context->memc->configure.initial_pool_size= (yyvsp[(2) - (2)].number); } @@ -1690,7 +1691,7 @@ yyreduce: case 17: /* Line 1806 of yacc.c */ -#line 266 "libmemcached/csl/parser.yy" +#line 267 "libmemcached/csl/parser.yy" { context->memc->configure.max_pool_size= (yyvsp[(2) - (2)].number); } @@ -1699,7 +1700,7 @@ yyreduce: case 19: /* Line 1806 of yacc.c */ -#line 274 "libmemcached/csl/parser.yy" +#line 275 "libmemcached/csl/parser.yy" { if (memcached_callback_get(context->memc, MEMCACHED_CALLBACK_PREFIX_KEY, NULL)) { @@ -1716,7 +1717,16 @@ yyreduce: case 20: /* Line 1806 of yacc.c */ -#line 286 "libmemcached/csl/parser.yy" +#line 287 "libmemcached/csl/parser.yy" + { + memcached_flag(*context->memc, MEMCACHED_FLAG_IS_FETCHING_VERSION, true); + } + break; + + case 21: + +/* Line 1806 of yacc.c */ +#line 291 "libmemcached/csl/parser.yy" { // Check to see if DISTRIBUTION has already been set if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, (yyvsp[(2) - (2)].distribution))) != MEMCACHED_SUCCESS) @@ -1731,10 +1741,10 @@ yyreduce: } break; - case 21: + case 22: /* Line 1806 of yacc.c */ -#line 299 "libmemcached/csl/parser.yy" +#line 304 "libmemcached/csl/parser.yy" { // Check to see if DISTRIBUTION has already been set if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, (yyvsp[(2) - (4)].distribution))) != MEMCACHED_SUCCESS) @@ -1749,10 +1759,10 @@ yyreduce: } break; - case 22: + case 23: /* Line 1806 of yacc.c */ -#line 312 "libmemcached/csl/parser.yy" +#line 317 "libmemcached/csl/parser.yy" { if (context->set_hash((yyvsp[(2) - (2)].hash)) == false) { @@ -1761,10 +1771,10 @@ yyreduce: } break; - case 23: + case 24: /* Line 1806 of yacc.c */ -#line 319 "libmemcached/csl/parser.yy" +#line 324 "libmemcached/csl/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, (yyvsp[(1) - (2)].behavior), (yyvsp[(2) - (2)].number))) != MEMCACHED_SUCCESS) { @@ -1773,10 +1783,10 @@ yyreduce: } break; - case 24: + case 25: /* Line 1806 of yacc.c */ -#line 326 "libmemcached/csl/parser.yy" +#line 331 "libmemcached/csl/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, (yyvsp[(1) - (1)].behavior), true)) != MEMCACHED_SUCCESS) { @@ -1787,379 +1797,379 @@ yyreduce: } break; - case 25: + case 26: /* Line 1806 of yacc.c */ -#line 335 "libmemcached/csl/parser.yy" +#line 340 "libmemcached/csl/parser.yy" { } break; - case 26: + case 27: /* Line 1806 of yacc.c */ -#line 341 "libmemcached/csl/parser.yy" +#line 346 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS; } break; - case 27: + case 28: /* Line 1806 of yacc.c */ -#line 345 "libmemcached/csl/parser.yy" +#line 350 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT; } break; - case 28: + case 29: /* Line 1806 of yacc.c */ -#line 349 "libmemcached/csl/parser.yy" +#line 354 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK; } break; - case 29: + case 30: /* Line 1806 of yacc.c */ -#line 353 "libmemcached/csl/parser.yy" +#line 358 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK; } break; - case 30: + case 31: /* Line 1806 of yacc.c */ -#line 357 "libmemcached/csl/parser.yy" +#line 362 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH; } break; - case 31: + case 32: /* Line 1806 of yacc.c */ -#line 361 "libmemcached/csl/parser.yy" +#line 366 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS; } break; - case 32: + case 33: /* Line 1806 of yacc.c */ -#line 365 "libmemcached/csl/parser.yy" +#line 370 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_POLL_TIMEOUT; } break; - case 33: + case 34: /* Line 1806 of yacc.c */ -#line 369 "libmemcached/csl/parser.yy" +#line 374 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_RCV_TIMEOUT; } break; - case 34: + case 35: /* Line 1806 of yacc.c */ -#line 373 "libmemcached/csl/parser.yy" +#line 378 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_RETRY_TIMEOUT; } break; - case 35: + case 36: /* Line 1806 of yacc.c */ -#line 377 "libmemcached/csl/parser.yy" +#line 382 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SND_TIMEOUT; } break; - case 36: + case 37: /* Line 1806 of yacc.c */ -#line 381 "libmemcached/csl/parser.yy" +#line 386 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE; } break; - case 37: + case 38: /* Line 1806 of yacc.c */ -#line 385 "libmemcached/csl/parser.yy" +#line 390 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE; } break; - case 38: + case 39: /* Line 1806 of yacc.c */ -#line 392 "libmemcached/csl/parser.yy" +#line 397 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_BINARY_PROTOCOL; } break; - case 39: + case 40: /* Line 1806 of yacc.c */ -#line 396 "libmemcached/csl/parser.yy" +#line 401 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_BUFFER_REQUESTS; } break; - case 40: + case 41: /* Line 1806 of yacc.c */ -#line 400 "libmemcached/csl/parser.yy" +#line 405 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY; } break; - case 41: + case 42: /* Line 1806 of yacc.c */ -#line 404 "libmemcached/csl/parser.yy" +#line 409 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_NOREPLY; } break; - case 42: + case 43: /* Line 1806 of yacc.c */ -#line 408 "libmemcached/csl/parser.yy" +#line 413 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ; } break; - case 43: + case 44: /* Line 1806 of yacc.c */ -#line 412 "libmemcached/csl/parser.yy" +#line 417 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SORT_HOSTS; } break; - case 44: + case 45: /* Line 1806 of yacc.c */ -#line 416 "libmemcached/csl/parser.yy" +#line 421 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SUPPORT_CAS; } break; - case 45: + case 46: /* Line 1806 of yacc.c */ -#line 420 "libmemcached/csl/parser.yy" +#line 425 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_NODELAY; } break; - case 46: + case 47: /* Line 1806 of yacc.c */ -#line 424 "libmemcached/csl/parser.yy" +#line 429 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_KEEPALIVE; } break; - case 47: + case 48: /* Line 1806 of yacc.c */ -#line 428 "libmemcached/csl/parser.yy" +#line 433 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_KEEPIDLE; } break; - case 48: + case 49: /* Line 1806 of yacc.c */ -#line 432 "libmemcached/csl/parser.yy" +#line 437 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_USE_UDP; } break; - case 49: + case 50: /* Line 1806 of yacc.c */ -#line 436 "libmemcached/csl/parser.yy" +#line 441 "libmemcached/csl/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_VERIFY_KEY; } break; - case 50: + case 51: /* Line 1806 of yacc.c */ -#line 442 "libmemcached/csl/parser.yy" +#line 447 "libmemcached/csl/parser.yy" { (yyval.number)= MEMCACHED_DEFAULT_PORT;} break; - case 51: + case 52: /* Line 1806 of yacc.c */ -#line 444 "libmemcached/csl/parser.yy" +#line 449 "libmemcached/csl/parser.yy" { } break; - case 52: + case 53: /* Line 1806 of yacc.c */ -#line 448 "libmemcached/csl/parser.yy" +#line 453 "libmemcached/csl/parser.yy" { (yyval.number)= 1; } break; - case 53: + case 54: /* Line 1806 of yacc.c */ -#line 450 "libmemcached/csl/parser.yy" +#line 455 "libmemcached/csl/parser.yy" { } break; - case 54: + case 55: /* Line 1806 of yacc.c */ -#line 455 "libmemcached/csl/parser.yy" +#line 460 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_MD5; } break; - case 55: + case 56: /* Line 1806 of yacc.c */ -#line 459 "libmemcached/csl/parser.yy" +#line 464 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_CRC; } break; - case 56: + case 57: /* Line 1806 of yacc.c */ -#line 463 "libmemcached/csl/parser.yy" +#line 468 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1_64; } break; - case 57: + case 58: /* Line 1806 of yacc.c */ -#line 467 "libmemcached/csl/parser.yy" +#line 472 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1A_64; } break; - case 58: + case 59: /* Line 1806 of yacc.c */ -#line 471 "libmemcached/csl/parser.yy" +#line 476 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1_32; } break; - case 59: + case 60: /* Line 1806 of yacc.c */ -#line 475 "libmemcached/csl/parser.yy" +#line 480 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1A_32; } break; - case 60: + case 61: /* Line 1806 of yacc.c */ -#line 479 "libmemcached/csl/parser.yy" +#line 484 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_HSIEH; } break; - case 61: + case 62: /* Line 1806 of yacc.c */ -#line 483 "libmemcached/csl/parser.yy" +#line 488 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_MURMUR; } break; - case 62: + case 63: /* Line 1806 of yacc.c */ -#line 487 "libmemcached/csl/parser.yy" +#line 492 "libmemcached/csl/parser.yy" { (yyval.hash)= MEMCACHED_HASH_JENKINS; } break; - case 63: + case 64: /* Line 1806 of yacc.c */ -#line 494 "libmemcached/csl/parser.yy" +#line 499 "libmemcached/csl/parser.yy" { (yyval.string)= (yyvsp[(1) - (1)].string); } break; - case 64: + case 65: /* Line 1806 of yacc.c */ -#line 498 "libmemcached/csl/parser.yy" +#line 503 "libmemcached/csl/parser.yy" { (yyval.string)= (yyvsp[(1) - (1)].string); } break; - case 65: + case 66: /* Line 1806 of yacc.c */ -#line 505 "libmemcached/csl/parser.yy" +#line 510 "libmemcached/csl/parser.yy" { (yyval.distribution)= MEMCACHED_DISTRIBUTION_CONSISTENT; } break; - case 66: + case 67: /* Line 1806 of yacc.c */ -#line 509 "libmemcached/csl/parser.yy" +#line 514 "libmemcached/csl/parser.yy" { (yyval.distribution)= MEMCACHED_DISTRIBUTION_MODULA; } break; - case 67: + case 68: /* Line 1806 of yacc.c */ -#line 513 "libmemcached/csl/parser.yy" +#line 518 "libmemcached/csl/parser.yy" { (yyval.distribution)= MEMCACHED_DISTRIBUTION_RANDOM; } @@ -2168,7 +2178,7 @@ yyreduce: /* Line 1806 of yacc.c */ -#line 2172 "libmemcached/csl/parser.cc" +#line 2182 "libmemcached/csl/parser.cc" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2399,7 +2409,7 @@ yyreturn: /* Line 2067 of yacc.c */ -#line 518 "libmemcached/csl/parser.yy" +#line 523 "libmemcached/csl/parser.yy" void Context::start() diff --git a/libmemcached/csl/parser.h b/libmemcached/csl/parser.h index 4112d748..7feab595 100644 --- a/libmemcached/csl/parser.h +++ b/libmemcached/csl/parser.h @@ -80,32 +80,33 @@ _TCP_KEEPALIVE = 298, _TCP_KEEPIDLE = 299, _TCP_NODELAY = 300, - NAMESPACE = 301, - POOL_MIN = 302, - POOL_MAX = 303, - MD5 = 304, - CRC = 305, - FNV1_64 = 306, - FNV1A_64 = 307, - FNV1_32 = 308, - FNV1A_32 = 309, - HSIEH = 310, - MURMUR = 311, - JENKINS = 312, - CONSISTENT = 313, - MODULA = 314, - RANDOM = 315, - TRUE = 316, - FALSE = 317, - FLOAT = 318, - NUMBER = 319, - PORT = 320, - WEIGHT_START = 321, - IPADDRESS = 322, - HOSTNAME = 323, - STRING = 324, - QUOTED_STRING = 325, - FILE_PATH = 326 + FETCH_VERSION = 301, + NAMESPACE = 302, + POOL_MIN = 303, + POOL_MAX = 304, + MD5 = 305, + CRC = 306, + FNV1_64 = 307, + FNV1A_64 = 308, + FNV1_32 = 309, + FNV1A_32 = 310, + HSIEH = 311, + MURMUR = 312, + JENKINS = 313, + CONSISTENT = 314, + MODULA = 315, + RANDOM = 316, + TRUE = 317, + FALSE = 318, + FLOAT = 319, + NUMBER = 320, + PORT = 321, + WEIGHT_START = 322, + IPADDRESS = 323, + HOSTNAME = 324, + STRING = 325, + QUOTED_STRING = 326, + FILE_PATH = 327 }; #endif diff --git a/libmemcached/csl/parser.yy b/libmemcached/csl/parser.yy index 21a03526..e70bba97 100644 --- a/libmemcached/csl/parser.yy +++ b/libmemcached/csl/parser.yy @@ -133,6 +133,7 @@ inline void __config_error(Context *context, yyscan_t *scanner, const char *erro %token _TCP_KEEPALIVE %token _TCP_KEEPIDLE %token _TCP_NODELAY +%token FETCH_VERSION /* Callbacks */ %token NAMESPACE @@ -282,6 +283,10 @@ behaviors: parser_abort(context, memcached_last_error_message(context->memc)); } } + | FETCH_VERSION + { + memcached_flag(*context->memc, MEMCACHED_FLAG_IS_FETCHING_VERSION, true); + } | DISTRIBUTION distribution { // Check to see if DISTRIBUTION has already been set diff --git a/libmemcached/csl/scanner.cc b/libmemcached/csl/scanner.cc index 757d9071..76242dfb 100644 --- a/libmemcached/csl/scanner.cc +++ b/libmemcached/csl/scanner.cc @@ -10,6 +10,7 @@ #pragma GCC diagnostic ignored "-Wold-style-cast" #pragma GCC diagnostic ignored "-Wsign-compare" #pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wmissing-declarations" #endif #define YY_NO_INPUT @@ -19,7 +20,7 @@ -#line 23 "libmemcached/csl/scanner.cc" +#line 24 "libmemcached/csl/scanner.cc" #define YY_INT_ALIGNED short int @@ -97,7 +98,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -128,6 +128,8 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ /* %endif */ @@ -219,7 +221,15 @@ typedef void* yyscan_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else #define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -453,8 +463,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); yyg->yy_c_buf_p = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 65 -#define YY_END_OF_BUFFER 66 +#define YY_NUM_RULES 66 +#define YY_END_OF_BUFFER 67 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -462,65 +472,67 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[521] = +static yyconst flex_int16_t yy_accept[534] = { 0, - 0, 0, 66, 64, 5, 5, 1, 64, 64, 64, - 2, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 0, 63, 0, 48, + 0, 0, 67, 65, 5, 5, 1, 65, 65, 65, + 2, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 0, 64, 0, 49, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 4, 62, - 62, 2, 3, 62, 53, 62, 44, 62, 62, 62, - 62, 62, 62, 63, 0, 62, 52, 62, 62, 62, - 62, 62, 62, 48, 48, 48, 48, 48, 48, 48, - - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 4, 0, 62, 2, 3, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 46, 48, 48, 48, 48, 48, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 4, 62, 62, 3, 62, - 42, 45, 47, 62, 0, 58, 62, 62, 62, 62, - 62, 41, 62, 48, 48, 48, 48, 48, 48, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 0, 48, 48, 48, 0, 0, 48, 48, - - 4, 0, 62, 3, 62, 0, 62, 62, 62, 62, - 50, 59, 51, 62, 48, 48, 48, 48, 48, 0, - 15, 0, 0, 0, 48, 48, 48, 0, 0, 48, - 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, - 0, 0, 48, 4, 61, 62, 62, 62, 62, 56, - 54, 40, 60, 43, 48, 48, 48, 48, 48, 0, - 0, 0, 0, 48, 48, 48, 0, 0, 48, 0, - 48, 0, 48, 0, 48, 0, 48, 0, 0, 0, - 0, 48, 61, 62, 57, 55, 0, 0, 48, 48, - 48, 0, 0, 0, 0, 48, 19, 0, 0, 0, - - 0, 48, 0, 0, 0, 7, 0, 0, 8, 0, - 48, 0, 0, 34, 0, 0, 61, 62, 0, 0, - 48, 0, 48, 0, 0, 0, 0, 48, 0, 0, - 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 0, 0, 48, 0, - 48, 0, 0, 0, 0, 48, 0, 0, 38, 37, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 0, 0, 0, 0, 48, 0, + 0, 0, 0, 0, 6, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 4, + 63, 63, 2, 3, 63, 54, 63, 45, 63, 63, + 63, 63, 63, 63, 64, 0, 63, 53, 63, 63, + 63, 63, 63, 63, 49, 49, 49, 49, 49, 49, + + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 4, 0, 63, 2, 3, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 47, 49, 49, 49, 49, 49, 49, + 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 4, 63, + 63, 3, 63, 43, 46, 48, 63, 0, 59, 63, + 63, 63, 63, 63, 42, 63, 49, 49, 49, 49, + 49, 49, 49, 0, 0, 0, 49, 49, 49, 49, + 49, 49, 0, 49, 49, 49, 0, 49, 49, 49, + + 0, 0, 49, 49, 4, 0, 63, 3, 63, 0, + 63, 63, 63, 63, 51, 60, 52, 63, 49, 49, + 49, 49, 49, 49, 0, 15, 0, 0, 0, 49, + 49, 49, 0, 0, 49, 0, 49, 49, 49, 0, + 49, 0, 49, 0, 0, 0, 0, 49, 4, 62, + 63, 63, 63, 63, 57, 55, 41, 61, 44, 49, + 49, 49, 49, 49, 0, 0, 0, 0, 0, 49, + 49, 49, 0, 0, 49, 0, 49, 0, 49, 0, + 49, 0, 49, 0, 0, 0, 0, 49, 62, 63, + 58, 56, 0, 0, 49, 49, 49, 0, 0, 0, + + 0, 0, 49, 19, 0, 0, 0, 0, 49, 0, + 0, 0, 7, 0, 0, 8, 0, 49, 0, 0, + 34, 0, 0, 62, 63, 0, 0, 49, 0, 49, + 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 50, 0, 0, 49, 0, 49, 0, + 0, 0, 0, 0, 49, 0, 0, 38, 37, 49, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 29, 0, 0, 0, 0, 36, 0, - 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, - 33, 0, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 0, 26, 0, 0, 0, - 32, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 9, 10, 11, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - - 0, 27, 28, 0, 0, 0, 0, 0, 14, 16, - 20, 0, 0, 0, 0, 0, 0, 22, 24, 0 + 0, 0, 0, 29, 0, 0, 0, 0, 36, 0, + 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 33, 0, 0, 0, 0, 49, 0, 0, 0, + 0, 0, 0, 0, 0, 23, 0, 0, 26, 0, + 0, 0, 32, 0, 0, 0, 0, 13, 40, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 9, 10, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, + + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 27, 28, 0, 0, 0, 0, + 0, 14, 16, 20, 0, 0, 0, 0, 0, 0, + 22, 24, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -567,131 +579,133 @@ static yyconst flex_int32_t yy_meta[75] = 2, 2, 2, 2 } ; -static yyconst flex_int16_t yy_base[526] = +static yyconst flex_int16_t yy_base[539] = { 0, - 0, 622, 626, 1711, 1711, 1711, 1711, 70, 617, 597, + 0, 628, 628, 1740, 1740, 1740, 1740, 70, 618, 605, 67, 74, 0, 57, 52, 59, 73, 57, 64, 74, - 610, 77, 79, 77, 65, 609, 101, 1711, 606, 138, + 612, 77, 79, 77, 65, 612, 101, 1740, 609, 138, 202, 215, 217, 230, 237, 250, 252, 259, 265, 277, 282, 287, 297, 271, 315, 377, 323, 342, 350, 359, - 364, 396, 401, 591, 1711, 449, 242, 73, 80, 89, - 76, 378, 78, 397, 398, 91, 76, 91, 441, 328, - 515, 528, 481, 499, 421, 541, 543, 548, 553, 559, - 565, 576, 590, 595, 649, 0, 597, 622, 614, 624, - 656, 632, 674, 85, 131, 124, 230, 249, 572, 260, - - 272, 285, 403, 300, 319, 375, 336, 376, 650, 381, - 401, 415, 436, 717, 730, 743, 756, 768, 781, 787, - 789, 797, 803, 808, 825, 810, 838, 852, 854, 863, - 870, 702, 454, 455, 651, 442, 456, 656, 461, 534, - 538, 533, 537, 562, 571, 581, 628, 642, 570, 655, - 650, 656, 569, 687, 664, 893, 921, 872, 928, 907, - 879, 942, 944, 949, 951, 958, 967, 973, 975, 980, - 993, 995, 1000, 660, 683, 720, 750, 755, 126, 755, - 795, 786, 787, 805, 860, 567, 564, 856, 856, 855, - 941, 969, 971, 987, 547, 981, 996, 976, 546, 999, - - 1048, 1062, 1075, 1711, 1088, 1090, 1024, 1097, 1106, 1112, - 1117, 1124, 1132, 1134, 1012, 1043, 1089, 1095, 1090, 1081, - 1711, 1087, 1085, 1107, 1099, 1116, 1111, 1110, 1120, 1124, - 1132, 1139, 527, 1128, 1138, 1128, 1141, 1132, 1146, 1139, - 1151, 1159, 1139, 1711, 1205, 1182, 1199, 1218, 1220, 1228, - 1233, 1235, 1240, 1246, 526, 517, 1165, 1192, 1217, 1217, - 1225, 514, 513, 1235, 1212, 472, 1229, 1240, 1230, 1229, - 471, 1223, 457, 1231, 258, 1230, 1230, 1246, 1248, 1237, - 1254, 456, 1297, 1310, 1312, 1317, 1243, 1257, 1258, 451, - 1263, 1287, 1289, 1293, 1288, 1310, 0, 1299, 1302, 1292, - - 1304, 1293, 1315, 1315, 1313, 1711, 1318, 1308, 1711, 1309, - 406, 1313, 1325, 1711, 1311, 1321, 1376, 1378, 1316, 1348, - 1363, 1349, 1351, 1364, 403, 1355, 1373, 1370, 1371, 1374, - 373, 372, 1375, 1367, 1382, 1371, 1370, 1381, 1382, 1368, - 1386, 1418, 1378, 1391, 1388, 1406, 1394, 1405, 367, 1414, - 1415, 362, 1402, 1423, 1409, 346, 352, 1415, 1711, 1711, - 348, 1410, 1423, 1428, 1414, 1433, 1424, 1420, 1439, 1429, - 1438, 1442, 1711, 1419, 1425, 1425, 1442, 1436, 1439, 1448, - 1464, 1469, 1473, 1711, 1461, 1459, 1463, 1463, 1472, 1470, - 1466, 1465, 1484, 1711, 1470, 1482, 1480, 1469, 1711, 1480, - - 1491, 1488, 1493, 1485, 1499, 1481, 1497, 1486, 1500, 1490, - 1513, 334, 1516, 1510, 333, 340, 336, 1711, 1512, 1530, - 1711, 1533, 1518, 1527, 1525, 322, 1528, 1537, 1523, 1531, - 1529, 321, 1531, 1711, 1544, 1530, 1711, 1532, 1533, 1548, - 1711, 1539, 1535, 1551, 1536, 1711, 1553, 1542, 1558, 1565, - 1562, 1711, 1565, 319, 289, 1578, 1581, 1711, 1579, 1573, - 285, 1573, 1576, 1583, 1589, 1580, 1590, 1591, 1582, 1711, - 1577, 1578, 1711, 1711, 1711, 282, 1590, 1606, 253, 1597, - 1606, 1607, 1606, 1607, 1608, 1711, 1613, 1598, 1711, 243, - 1616, 1621, 1612, 237, 221, 1630, 1632, 1711, 1627, 229, - - 1625, 1711, 1711, 1643, 217, 208, 1631, 1646, 1711, 1711, - 1711, 1647, 1635, 1653, 1636, 1652, 202, 1711, 1711, 1711, - 1704, 154, 1706, 131, 1708 + 364, 396, 401, 606, 1740, 449, 242, 73, 80, 85, + 90, 78, 378, 79, 397, 398, 92, 77, 94, 441, + 328, 515, 528, 481, 499, 421, 541, 543, 548, 553, + 559, 565, 576, 590, 595, 649, 0, 597, 622, 614, + 624, 656, 632, 674, 123, 132, 235, 249, 253, 271, + + 586, 285, 296, 328, 403, 340, 358, 375, 379, 413, + 650, 404, 438, 456, 444, 717, 730, 743, 756, 768, + 781, 787, 789, 797, 803, 808, 825, 810, 838, 852, + 854, 863, 870, 702, 463, 460, 651, 519, 537, 537, + 656, 544, 561, 594, 634, 652, 662, 572, 655, 654, + 651, 571, 664, 658, 672, 570, 711, 696, 893, 921, + 872, 928, 907, 879, 942, 944, 949, 951, 958, 967, + 973, 975, 980, 993, 995, 1000, 737, 768, 771, 795, + 787, 798, 126, 796, 860, 852, 857, 861, 961, 569, + 567, 959, 971, 970, 971, 992, 985, 1002, 564, 994, + + 999, 990, 547, 1006, 1056, 1069, 1082, 1740, 1095, 1097, + 1107, 1113, 1124, 1118, 1131, 1133, 1139, 1145, 989, 998, + 1010, 1024, 1022, 546, 1066, 1740, 1084, 1086, 1107, 1110, + 1126, 1122, 1124, 1134, 1135, 1140, 1145, 527, 1133, 1144, + 1135, 1148, 1140, 1155, 1147, 1159, 1165, 1145, 1740, 1211, + 1224, 1226, 1232, 1234, 1239, 1245, 1247, 1252, 1257, 526, + 517, 1161, 1196, 1236, 1221, 1239, 1244, 514, 513, 1249, + 1226, 472, 1244, 1254, 1247, 1245, 471, 1241, 457, 1251, + 258, 1250, 1248, 1264, 1266, 1256, 1273, 456, 1316, 1329, + 1331, 1336, 1271, 1276, 1277, 451, 1278, 1298, 1286, 1307, + + 1312, 1307, 1329, 0, 1318, 1322, 1313, 1324, 1313, 1335, + 1335, 1333, 1740, 1340, 1328, 1740, 1329, 406, 1333, 1345, + 1740, 1331, 1341, 1396, 1398, 1344, 1367, 1377, 1368, 1369, + 1373, 1384, 403, 1375, 1393, 1390, 1391, 1394, 373, 372, + 1396, 1387, 1402, 1391, 1390, 1401, 1402, 1388, 1406, 1438, + 1400, 1412, 1409, 1460, 1400, 1411, 367, 1429, 1435, 1431, + 362, 1428, 1447, 1433, 346, 352, 1439, 1740, 1740, 348, + 1434, 1448, 1453, 1438, 1458, 1448, 1444, 1463, 1453, 1464, + 1468, 1740, 1445, 1451, 1452, 1468, 1463, 1462, 1475, 1480, + 1494, 1494, 1498, 1740, 1488, 1486, 1490, 1489, 1498, 1496, + + 1493, 1492, 1511, 1740, 1497, 1508, 1506, 1494, 1740, 1505, + 1516, 1515, 1520, 1512, 1512, 1528, 1510, 1527, 1515, 1535, + 1530, 1546, 334, 1551, 1538, 333, 340, 336, 1740, 1540, + 1558, 1740, 1561, 1546, 1554, 1552, 322, 1555, 1557, 1566, + 1552, 1560, 1558, 321, 1559, 1740, 1572, 1557, 1740, 1561, + 1562, 1577, 1740, 1568, 1565, 1581, 1567, 1740, 1740, 1584, + 1578, 1603, 1606, 1600, 1740, 1603, 319, 289, 1609, 1610, + 1740, 1608, 1602, 285, 1602, 1604, 1612, 1618, 1609, 1619, + 1620, 1611, 1740, 1605, 1606, 1740, 1740, 1740, 282, 1617, + 1635, 253, 1626, 1635, 1636, 1636, 1637, 1639, 1740, 1644, + + 1634, 1740, 243, 1661, 1662, 1650, 237, 221, 1668, 1663, + 1740, 1656, 229, 1654, 1740, 1740, 1672, 217, 208, 1660, + 1674, 1740, 1740, 1740, 1676, 1664, 1682, 1665, 1681, 202, + 1740, 1740, 1740, 1733, 154, 1735, 131, 1737 } ; -static yyconst flex_int16_t yy_def[526] = +static yyconst flex_int16_t yy_def[539] = { 0, - 520, 1, 520, 520, 520, 520, 520, 521, 520, 520, - 522, 520, 522, 522, 522, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 523, 521, 520, 521, 520, - 520, 524, 524, 524, 520, 524, 524, 524, 524, 524, - 524, 524, 524, 524, 524, 525, 524, 524, 524, 524, - 524, 524, 524, 523, 520, 30, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 520, 524, - 524, 524, 520, 524, 524, 524, 524, 524, 524, 524, - 524, 524, 524, 524, 525, 85, 524, 524, 524, 524, - 524, 524, 524, 56, 56, 56, 56, 56, 56, 56, + 533, 1, 533, 533, 533, 533, 533, 534, 533, 533, + 535, 533, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 536, 534, 533, 534, 533, + 533, 537, 537, 537, 533, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 538, 537, 537, 537, 537, + 537, 537, 537, 536, 533, 30, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 533, + 537, 537, 537, 533, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 538, 86, 537, 537, 537, + 537, 537, 537, 537, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 520, 524, 524, 524, 520, 524, 524, - 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, - 524, 524, 56, 56, 56, 56, 56, 520, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 520, 524, 524, 520, 524, - 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, - 524, 524, 524, 56, 56, 56, 56, 56, 56, 520, - 520, 520, 56, 56, 56, 56, 56, 56, 520, 56, - 56, 56, 520, 56, 56, 56, 520, 520, 56, 56, - - 520, 524, 524, 520, 524, 524, 524, 524, 524, 524, - 524, 524, 524, 524, 56, 56, 56, 56, 56, 520, - 520, 520, 520, 520, 56, 56, 56, 520, 520, 56, - 520, 56, 56, 56, 520, 56, 520, 56, 520, 520, - 520, 520, 56, 520, 524, 524, 524, 524, 524, 524, - 524, 524, 524, 524, 56, 56, 56, 56, 56, 520, - 520, 520, 520, 56, 56, 56, 520, 520, 56, 520, - 56, 520, 56, 520, 56, 520, 56, 520, 520, 520, - 520, 56, 524, 524, 524, 524, 520, 520, 56, 56, - 56, 520, 520, 520, 520, 56, 56, 520, 520, 520, - - 520, 56, 520, 520, 520, 520, 520, 520, 520, 520, - 56, 520, 520, 520, 520, 520, 524, 524, 520, 520, - 56, 520, 56, 520, 520, 520, 520, 56, 520, 520, - 520, 520, 56, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 524, 520, 520, 56, 520, - 56, 520, 520, 520, 520, 56, 520, 520, 520, 520, - 56, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 56, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - - 520, 520, 520, 56, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 56, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 0, - 520, 520, 520, 520, 520 + 56, 56, 56, 56, 56, 533, 537, 537, 537, 533, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 56, 56, 56, 56, 56, 56, + 533, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 533, 537, + 537, 533, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 56, 56, 56, 56, + 56, 56, 56, 533, 533, 533, 56, 56, 56, 56, + 56, 56, 533, 56, 56, 56, 533, 56, 56, 56, + + 533, 533, 56, 56, 533, 537, 537, 533, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 56, 56, + 56, 56, 56, 56, 533, 533, 533, 533, 533, 56, + 56, 56, 533, 533, 56, 533, 56, 56, 56, 533, + 56, 533, 56, 533, 533, 533, 533, 56, 533, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 56, + 56, 56, 56, 56, 533, 533, 533, 533, 533, 56, + 56, 56, 533, 533, 56, 533, 56, 533, 56, 533, + 56, 533, 56, 533, 533, 533, 533, 56, 537, 537, + 537, 537, 533, 533, 56, 56, 56, 533, 533, 533, + + 533, 533, 56, 56, 533, 533, 533, 533, 56, 533, + 533, 533, 533, 533, 533, 533, 533, 56, 533, 533, + 533, 533, 533, 537, 537, 533, 533, 56, 533, 56, + 533, 533, 533, 533, 533, 56, 533, 533, 533, 533, + 56, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 537, 533, 533, 56, 533, 56, 533, + 533, 533, 533, 533, 56, 533, 533, 533, 533, 56, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 56, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 56, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 56, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 0, 533, 533, 533, 533, 533 } ; -static yyconst flex_int16_t yy_nxt[1786] = +static yyconst flex_int16_t yy_nxt[1815] = { 0, 4, 5, 6, 7, 8, 4, 7, 9, 4, 10, 11, 11, 11, 11, 11, 11, 11, 12, 7, 4, @@ -704,194 +718,198 @@ static yyconst flex_int16_t yy_nxt[1786] = 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 36, 39, 41, 37, 43, 40, 44, 45, 50, - 47, 52, 53, 51, 38, 28, 42, 96, 97, 98, - 99, 48, 103, 111, 112, 113, 29, 49, 133, 36, + 47, 52, 53, 51, 38, 28, 42, 97, 98, 99, + 100, 48, 101, 105, 113, 114, 29, 49, 115, 36, 39, 41, 37, 43, 40, 44, 45, 50, 47, 52, - 53, 51, 70, 220, 42, 96, 97, 98, 99, 48, - 103, 111, 112, 113, 221, 49, 133, 29, 56, 56, - 56, 56, 56, 56, 56, 32, 134, 135, 56, 57, - 58, 59, 56, 56, 56, 60, 61, 56, 56, 56, - 56, 62, 56, 63, 56, 64, 65, 66, 67, 68, - 56, 56, 56, 56, 134, 135, 56, 57, 58, 59, - 56, 56, 56, 60, 61, 56, 56, 56, 56, 62, - - 56, 63, 56, 64, 65, 66, 67, 68, 56, 56, - 56, 56, 69, 69, 69, 69, 69, 69, 69, 32, - 519, 32, 32, 32, 32, 32, 511, 71, 71, 71, - 71, 71, 71, 71, 32, 510, 507, 32, 33, 503, - 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, - 73, 73, 73, 73, 32, 502, 32, 32, 32, 32, - 32, 498, 32, 32, 32, 308, 32, 32, 136, 32, - 94, 489, 32, 32, 75, 32, 309, 32, 32, 32, - 76, 32, 95, 74, 32, 32, 32, 137, 77, 32, - 32, 32, 139, 82, 32, 32, 136, 32, 94, 32, - - 486, 32, 75, 475, 32, 32, 32, 470, 76, 140, - 95, 74, 32, 79, 78, 137, 77, 141, 32, 32, - 139, 82, 32, 32, 32, 81, 469, 32, 80, 32, - 32, 32, 32, 144, 32, 32, 32, 140, 87, 452, - 446, 79, 78, 439, 32, 141, 32, 438, 83, 32, - 32, 437, 434, 81, 32, 387, 80, 32, 32, 385, - 145, 144, 32, 32, 384, 88, 32, 32, 32, 380, - 32, 32, 32, 148, 377, 32, 83, 27, 27, 27, - 27, 84, 27, 27, 85, 85, 27, 89, 145, 32, - 360, 359, 90, 88, 27, 27, 27, 32, 100, 149, - - 32, 148, 91, 32, 32, 32, 32, 146, 32, 32, - 353, 32, 101, 341, 147, 89, 152, 104, 102, 105, - 90, 106, 107, 29, 85, 32, 100, 149, 32, 32, - 91, 108, 109, 92, 142, 146, 153, 143, 110, 154, - 101, 93, 147, 32, 152, 104, 102, 105, 32, 106, - 107, 114, 114, 114, 114, 114, 114, 114, 322, 108, - 109, 92, 142, 316, 153, 143, 110, 154, 32, 93, - 56, 56, 56, 155, 174, 306, 56, 56, 304, 298, - 175, 178, 56, 179, 56, 183, 56, 56, 56, 56, - 56, 118, 118, 118, 118, 118, 118, 118, 56, 56, - - 56, 155, 174, 32, 56, 56, 32, 32, 175, 178, - 56, 179, 56, 183, 56, 56, 56, 56, 56, 32, - 295, 294, 32, 115, 288, 116, 116, 116, 116, 116, - 116, 116, 32, 287, 272, 32, 33, 119, 117, 117, - 117, 117, 117, 117, 117, 32, 32, 32, 32, 32, - 32, 32, 32, 242, 237, 32, 32, 32, 184, 185, - 32, 32, 32, 32, 186, 119, 32, 32, 187, 32, - 123, 229, 32, 32, 228, 32, 197, 193, 189, 138, - 32, 120, 121, 32, 32, 188, 184, 185, 32, 124, - 32, 122, 186, 55, 32, 32, 187, 32, 32, 32, - - 32, 32, 32, 32, 32, 32, 32, 125, 520, 120, - 121, 55, 32, 188, 46, 190, 31, 124, 32, 122, - 126, 32, 32, 32, 30, 520, 32, 26, 32, 32, - 32, 32, 32, 520, 520, 125, 32, 32, 520, 32, - 32, 520, 32, 190, 32, 520, 128, 129, 126, 27, - 27, 27, 27, 84, 27, 27, 85, 85, 27, 520, - 32, 32, 127, 32, 32, 191, 27, 27, 27, 32, - 520, 32, 150, 131, 128, 129, 176, 180, 32, 32, - 130, 32, 32, 192, 177, 194, 181, 151, 182, 195, - 127, 196, 200, 191, 198, 29, 85, 215, 132, 520, - - 150, 131, 520, 32, 176, 180, 32, 216, 130, 32, - 32, 192, 177, 194, 181, 151, 182, 195, 520, 196, - 200, 32, 520, 520, 199, 215, 132, 156, 156, 156, - 156, 156, 156, 156, 32, 216, 520, 32, 32, 520, - 157, 157, 157, 157, 157, 157, 157, 32, 217, 32, - 32, 115, 199, 158, 158, 158, 158, 158, 158, 158, - 32, 520, 520, 32, 32, 520, 117, 117, 117, 117, - 117, 117, 117, 520, 218, 520, 217, 32, 159, 159, - 159, 159, 159, 159, 159, 32, 520, 520, 32, 32, - 32, 32, 219, 32, 32, 32, 32, 32, 520, 222, - - 520, 32, 218, 32, 32, 32, 520, 32, 520, 160, - 32, 32, 32, 161, 32, 32, 32, 32, 32, 223, - 219, 163, 520, 164, 224, 225, 162, 222, 32, 32, - 520, 520, 32, 32, 32, 166, 32, 160, 168, 520, - 226, 161, 32, 520, 32, 32, 32, 223, 520, 163, - 165, 164, 224, 225, 162, 32, 32, 32, 32, 32, - 32, 32, 32, 166, 520, 167, 168, 32, 226, 169, - 32, 32, 32, 520, 32, 520, 32, 32, 32, 32, - 115, 520, 520, 32, 227, 32, 32, 32, 171, 520, - 230, 520, 170, 167, 173, 231, 232, 169, 520, 32, - - 520, 32, 172, 201, 201, 201, 201, 201, 201, 201, - 32, 32, 227, 520, 32, 32, 171, 32, 230, 32, - 170, 520, 173, 231, 232, 32, 32, 520, 32, 202, - 172, 203, 203, 203, 203, 203, 203, 203, 204, 204, - 204, 204, 204, 204, 204, 205, 32, 520, 32, 32, + 53, 51, 71, 225, 42, 97, 98, 99, 100, 48, + 101, 105, 113, 114, 226, 49, 115, 29, 56, 56, + 56, 56, 56, 56, 56, 32, 135, 136, 56, 57, + 58, 59, 56, 60, 56, 61, 62, 56, 56, 56, + 56, 63, 56, 64, 56, 65, 66, 67, 68, 69, + 56, 56, 56, 56, 135, 136, 56, 57, 58, 59, + 56, 60, 56, 61, 62, 56, 56, 56, 56, 63, + + 56, 64, 56, 65, 66, 67, 68, 69, 56, 56, + 56, 56, 70, 70, 70, 70, 70, 70, 70, 32, + 532, 32, 32, 32, 32, 32, 524, 72, 72, 72, + 72, 72, 72, 72, 32, 523, 520, 32, 33, 516, + 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, + 74, 74, 74, 74, 32, 515, 32, 32, 32, 32, + 32, 511, 32, 32, 32, 315, 32, 32, 137, 32, + 95, 502, 32, 32, 76, 32, 316, 32, 32, 32, + 77, 32, 96, 75, 32, 32, 32, 138, 78, 32, + 32, 32, 139, 83, 32, 32, 137, 32, 95, 32, + + 499, 32, 76, 488, 32, 32, 32, 483, 77, 140, + 96, 75, 32, 80, 79, 138, 78, 142, 32, 32, + 139, 83, 32, 32, 32, 82, 482, 32, 81, 32, + 32, 32, 32, 143, 32, 32, 32, 140, 88, 465, + 458, 80, 79, 451, 32, 142, 32, 450, 84, 32, + 32, 449, 446, 82, 32, 397, 81, 32, 32, 395, + 144, 143, 32, 32, 394, 89, 32, 32, 32, 390, + 32, 32, 32, 147, 386, 32, 84, 27, 27, 27, + 27, 85, 27, 27, 86, 86, 27, 90, 144, 32, + 369, 368, 91, 89, 27, 27, 27, 32, 102, 148, + + 32, 147, 92, 32, 32, 32, 32, 149, 32, 32, + 362, 32, 103, 349, 150, 90, 151, 106, 104, 107, + 91, 108, 109, 29, 86, 32, 102, 148, 32, 32, + 92, 110, 111, 93, 145, 149, 152, 146, 112, 155, + 103, 94, 150, 32, 151, 106, 104, 107, 32, 108, + 109, 116, 116, 116, 116, 116, 116, 116, 329, 110, + 111, 93, 145, 323, 152, 146, 112, 155, 32, 94, + 56, 56, 56, 156, 56, 313, 56, 56, 311, 305, + 157, 158, 56, 177, 56, 178, 56, 56, 56, 56, + 56, 120, 120, 120, 120, 120, 120, 120, 56, 56, + + 56, 156, 56, 32, 56, 56, 32, 32, 157, 158, + 56, 177, 56, 178, 56, 56, 56, 56, 56, 32, + 302, 301, 32, 117, 294, 118, 118, 118, 118, 118, + 118, 118, 32, 293, 278, 32, 33, 121, 119, 119, + 119, 119, 119, 119, 119, 32, 32, 32, 32, 32, + 32, 32, 32, 265, 247, 32, 32, 32, 181, 182, + 32, 32, 32, 32, 183, 121, 32, 32, 187, 32, + 125, 242, 32, 32, 234, 32, 233, 201, 197, 193, + 32, 122, 123, 32, 32, 188, 181, 182, 32, 126, + 32, 124, 183, 141, 32, 32, 187, 32, 32, 32, + + 32, 32, 32, 32, 32, 32, 32, 127, 55, 122, + 123, 533, 32, 188, 55, 189, 46, 126, 32, 124, + 128, 32, 32, 32, 31, 30, 32, 533, 32, 32, + 32, 32, 32, 26, 533, 127, 32, 32, 533, 32, + 32, 533, 32, 189, 32, 533, 130, 131, 128, 27, + 27, 27, 27, 85, 27, 27, 86, 86, 27, 533, + 32, 32, 129, 32, 32, 190, 27, 27, 27, 32, + 533, 32, 153, 133, 130, 131, 179, 184, 32, 32, + 132, 32, 32, 191, 180, 192, 185, 154, 186, 194, + 129, 195, 196, 190, 198, 29, 86, 199, 134, 533, + + 153, 133, 533, 32, 179, 184, 32, 200, 132, 32, + 32, 191, 180, 192, 185, 154, 186, 194, 202, 195, + 196, 32, 198, 533, 204, 199, 134, 159, 159, 159, + 159, 159, 159, 159, 32, 200, 533, 32, 32, 533, + 160, 160, 160, 160, 160, 160, 160, 32, 203, 32, + 32, 117, 204, 161, 161, 161, 161, 161, 161, 161, + 32, 533, 533, 32, 32, 533, 119, 119, 119, 119, + 119, 119, 119, 533, 219, 533, 203, 32, 162, 162, + 162, 162, 162, 162, 162, 32, 533, 533, 32, 32, + 32, 32, 220, 32, 32, 32, 32, 32, 533, 221, + + 533, 32, 219, 32, 32, 32, 533, 32, 533, 163, + 32, 32, 32, 164, 32, 32, 32, 32, 32, 222, + 220, 166, 533, 167, 223, 224, 165, 221, 32, 32, + 533, 533, 32, 32, 32, 169, 32, 163, 171, 533, + 227, 164, 32, 533, 32, 32, 32, 222, 533, 166, + 168, 167, 223, 224, 165, 32, 32, 32, 32, 32, + 32, 32, 32, 169, 533, 170, 171, 32, 227, 172, + 32, 32, 32, 533, 32, 533, 32, 32, 32, 32, + 117, 533, 533, 32, 228, 32, 32, 32, 174, 533, + 229, 533, 173, 170, 176, 230, 231, 172, 533, 32, + + 533, 32, 175, 205, 205, 205, 205, 205, 205, 205, + 32, 32, 228, 533, 32, 32, 174, 32, 229, 32, + 173, 533, 176, 230, 231, 32, 32, 533, 32, 206, + 175, 207, 207, 207, 207, 207, 207, 207, 208, 208, + 208, 208, 208, 208, 208, 209, 32, 533, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 520, 520, 32, 520, 207, 32, 32, 208, 32, 520, - 520, 32, 520, 205, 32, 32, 520, 32, 520, 32, - 32, 32, 32, 32, 32, 233, 520, 32, 32, 32, - 209, 32, 520, 234, 520, 211, 206, 32, 32, 32, - - 32, 32, 32, 32, 32, 32, 210, 32, 32, 520, - 235, 236, 520, 233, 32, 238, 241, 212, 209, 520, - 32, 234, 32, 211, 243, 213, 239, 32, 32, 240, - 520, 32, 32, 520, 210, 520, 250, 214, 235, 236, - 32, 520, 32, 238, 241, 212, 520, 32, 520, 520, - 520, 520, 243, 213, 239, 520, 255, 240, 244, 244, - 244, 244, 244, 244, 244, 214, 32, 520, 520, 32, - 32, 32, 245, 245, 245, 245, 245, 245, 245, 32, - 256, 520, 32, 202, 255, 246, 246, 246, 246, 246, - 246, 246, 32, 520, 32, 32, 32, 32, 32, 520, - - 520, 32, 520, 248, 32, 32, 249, 520, 256, 32, - 32, 251, 520, 32, 32, 257, 32, 258, 259, 32, - 32, 32, 32, 260, 32, 32, 261, 247, 32, 262, - 252, 32, 32, 263, 264, 32, 32, 32, 32, 32, - 32, 32, 32, 257, 32, 258, 259, 265, 266, 267, - 253, 260, 268, 32, 261, 247, 269, 262, 252, 32, - 270, 263, 264, 271, 32, 273, 274, 275, 276, 277, - 278, 32, 254, 279, 280, 265, 266, 267, 253, 32, - 268, 32, 281, 282, 269, 520, 32, 520, 270, 32, - 202, 271, 520, 273, 274, 275, 276, 277, 278, 520, - - 254, 279, 280, 32, 520, 289, 32, 32, 520, 32, - 281, 282, 32, 32, 520, 283, 283, 283, 283, 283, - 283, 283, 32, 284, 32, 32, 32, 32, 32, 32, - 285, 290, 32, 289, 286, 32, 32, 32, 291, 32, - 32, 32, 32, 32, 32, 292, 32, 32, 32, 293, - 32, 284, 32, 32, 32, 296, 297, 299, 302, 290, - 300, 303, 305, 307, 310, 32, 291, 32, 301, 311, - 312, 313, 314, 292, 315, 32, 520, 293, 319, 520, - 32, 520, 32, 296, 297, 299, 302, 32, 300, 303, - 305, 307, 310, 32, 320, 321, 301, 311, 312, 313, - - 314, 32, 315, 323, 32, 32, 319, 317, 317, 317, - 317, 317, 317, 317, 32, 520, 32, 32, 32, 32, - 32, 32, 320, 321, 32, 32, 324, 325, 326, 520, - 327, 323, 328, 329, 330, 331, 520, 332, 333, 334, - 335, 336, 337, 318, 32, 338, 339, 340, 342, 343, - 344, 345, 520, 347, 324, 325, 326, 32, 327, 32, - 328, 329, 330, 331, 32, 332, 333, 334, 335, 336, - 337, 318, 348, 338, 339, 340, 342, 343, 344, 345, - 32, 347, 32, 32, 32, 32, 32, 349, 350, 520, - 351, 352, 354, 355, 356, 520, 357, 520, 358, 361, - - 348, 362, 363, 364, 365, 366, 367, 368, 369, 372, - 32, 373, 374, 32, 32, 349, 350, 346, 351, 352, - 354, 355, 356, 32, 357, 32, 358, 361, 375, 362, - 363, 364, 365, 366, 367, 368, 369, 372, 370, 373, - 374, 376, 378, 379, 381, 346, 371, 382, 383, 386, - 388, 389, 390, 32, 391, 392, 375, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 370, 402, 403, 376, - 378, 379, 381, 404, 371, 382, 383, 386, 388, 389, - 390, 405, 391, 392, 406, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 407, 402, 403, 408, 409, 410, - - 411, 404, 412, 413, 414, 415, 416, 417, 418, 405, - 419, 420, 406, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 407, 430, 431, 408, 409, 410, 411, 432, - 412, 413, 414, 415, 416, 417, 418, 433, 419, 420, - 435, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 436, 430, 431, 440, 441, 442, 443, 432, 444, 445, - 447, 448, 449, 450, 451, 433, 453, 454, 435, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 436, 464, - 465, 440, 441, 442, 443, 466, 444, 445, 447, 448, - 449, 450, 451, 467, 453, 454, 468, 455, 456, 457, - - 458, 459, 460, 461, 462, 463, 471, 464, 465, 472, - 473, 474, 476, 466, 477, 478, 479, 480, 481, 482, - 483, 467, 484, 485, 468, 487, 488, 490, 491, 492, - 493, 494, 495, 496, 471, 497, 499, 472, 473, 474, - 476, 500, 477, 478, 479, 480, 481, 482, 483, 501, - 484, 485, 504, 487, 488, 490, 491, 492, 493, 494, - 495, 496, 505, 497, 499, 506, 508, 509, 512, 500, - 513, 514, 515, 516, 517, 518, 520, 501, 520, 520, - 504, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 505, 520, 520, 506, 508, 509, 512, 520, 513, 514, - - 515, 516, 517, 518, 27, 27, 54, 54, 86, 86, - 3, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520 + 533, 533, 32, 533, 211, 32, 32, 212, 32, 533, + 533, 32, 533, 209, 32, 32, 533, 32, 533, 32, + 32, 32, 32, 32, 32, 232, 533, 32, 32, 32, + 213, 32, 533, 235, 533, 215, 210, 32, 32, 32, + + 32, 32, 32, 32, 32, 32, 214, 32, 32, 533, + 236, 237, 533, 232, 32, 238, 239, 216, 213, 533, + 32, 235, 32, 215, 240, 217, 241, 32, 243, 244, + 246, 248, 245, 260, 214, 261, 262, 218, 236, 237, + 32, 533, 32, 238, 239, 216, 263, 32, 533, 533, + 264, 533, 240, 217, 241, 533, 243, 244, 246, 248, + 245, 260, 533, 261, 262, 218, 249, 249, 249, 249, + 249, 249, 249, 32, 263, 533, 32, 32, 264, 250, + 250, 250, 250, 250, 250, 250, 32, 533, 533, 32, + 206, 533, 251, 251, 251, 251, 251, 251, 251, 32, + + 533, 32, 32, 32, 32, 32, 533, 533, 266, 533, + 253, 32, 533, 254, 32, 32, 32, 32, 533, 255, + 32, 32, 32, 267, 533, 32, 32, 256, 32, 32, + 268, 32, 32, 269, 252, 32, 266, 32, 32, 32, + 32, 32, 32, 32, 32, 270, 32, 32, 257, 32, + 533, 267, 32, 32, 32, 533, 258, 271, 268, 272, + 32, 269, 252, 273, 533, 32, 274, 275, 276, 277, + 279, 32, 280, 270, 281, 282, 257, 283, 32, 284, + 32, 285, 286, 259, 258, 271, 32, 272, 287, 288, + 533, 273, 32, 533, 274, 275, 276, 277, 279, 533, + + 280, 295, 281, 282, 533, 283, 533, 284, 533, 285, + 286, 259, 533, 533, 533, 32, 287, 288, 32, 32, + 533, 289, 289, 289, 289, 289, 289, 289, 32, 295, + 32, 32, 206, 32, 32, 296, 32, 533, 32, 32, + 32, 32, 32, 32, 291, 533, 32, 32, 292, 32, + 290, 32, 32, 32, 32, 32, 32, 297, 32, 32, + 32, 32, 298, 296, 32, 32, 533, 299, 300, 303, + 304, 32, 306, 32, 307, 309, 533, 310, 290, 32, + 312, 32, 308, 314, 317, 297, 32, 318, 319, 320, + 298, 321, 32, 322, 32, 299, 300, 303, 304, 32, + + 306, 533, 307, 309, 32, 310, 326, 533, 312, 533, + 308, 314, 317, 327, 328, 318, 319, 320, 330, 321, + 32, 322, 331, 32, 32, 332, 324, 324, 324, 324, + 324, 324, 324, 32, 326, 32, 32, 32, 32, 32, + 32, 327, 328, 32, 32, 333, 330, 334, 533, 335, + 331, 336, 337, 332, 338, 533, 339, 340, 341, 342, + 343, 344, 325, 32, 345, 346, 347, 348, 350, 351, + 352, 353, 533, 333, 533, 334, 32, 335, 32, 336, + 337, 355, 338, 32, 339, 340, 341, 342, 343, 344, + 325, 356, 345, 346, 347, 348, 350, 351, 352, 353, + + 32, 357, 32, 32, 32, 32, 32, 358, 359, 355, + 360, 361, 363, 364, 365, 533, 366, 533, 367, 356, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 357, + 533, 381, 382, 383, 384, 358, 359, 354, 360, 361, + 363, 364, 365, 32, 366, 32, 367, 385, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 387, 379, 381, + 382, 383, 384, 388, 32, 354, 380, 32, 32, 389, + 391, 392, 393, 396, 398, 385, 399, 400, 401, 533, + 402, 403, 404, 405, 406, 387, 379, 407, 408, 409, + 410, 388, 411, 412, 380, 413, 414, 389, 391, 392, + + 393, 396, 398, 415, 399, 400, 401, 32, 402, 403, + 404, 405, 406, 416, 417, 407, 408, 409, 410, 418, + 411, 412, 419, 413, 414, 420, 421, 422, 423, 424, + 425, 415, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 416, 417, 435, 436, 437, 438, 418, 439, 440, + 419, 441, 442, 420, 421, 422, 423, 424, 425, 443, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 444, + 445, 435, 436, 437, 438, 447, 439, 440, 448, 441, + 442, 452, 453, 454, 455, 456, 457, 443, 459, 460, + 461, 462, 463, 464, 466, 467, 468, 444, 445, 469, + + 470, 471, 472, 447, 473, 474, 448, 475, 476, 452, + 453, 454, 455, 456, 457, 477, 459, 460, 461, 462, + 463, 464, 466, 467, 468, 478, 479, 469, 470, 471, + 472, 480, 473, 474, 481, 475, 476, 484, 485, 486, + 487, 489, 490, 477, 491, 492, 493, 494, 495, 496, + 497, 498, 500, 478, 479, 501, 503, 504, 505, 480, + 506, 507, 481, 508, 509, 484, 485, 486, 487, 489, + 490, 510, 491, 492, 493, 494, 495, 496, 497, 498, + 500, 512, 513, 501, 503, 504, 505, 514, 506, 507, + 517, 508, 509, 518, 519, 521, 522, 525, 526, 510, + + 527, 528, 529, 530, 531, 533, 533, 533, 533, 512, + 513, 533, 533, 533, 533, 514, 533, 533, 517, 533, + 533, 518, 519, 521, 522, 525, 526, 533, 527, 528, + 529, 530, 531, 27, 27, 54, 54, 87, 87, 3, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533 } ; -static yyconst flex_int16_t yy_chk[1786] = +static yyconst flex_int16_t yy_chk[1815] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -905,11 +923,11 @@ static yyconst flex_int16_t yy_chk[1786] = 12, 14, 16, 17, 14, 18, 16, 19, 20, 23, 22, 24, 25, 23, 15, 27, 17, 58, 59, 60, - 61, 22, 63, 66, 67, 68, 8, 22, 94, 14, + 61, 22, 62, 64, 67, 68, 8, 22, 69, 14, 16, 17, 14, 18, 16, 19, 20, 23, 22, 24, - 25, 23, 524, 179, 17, 58, 59, 60, 61, 22, - 63, 66, 67, 68, 179, 22, 94, 27, 30, 30, - 30, 30, 30, 30, 30, 522, 95, 96, 30, 30, + 25, 23, 537, 183, 17, 58, 59, 60, 61, 22, + 62, 64, 67, 68, 183, 22, 69, 27, 30, 30, + 30, 30, 30, 30, 30, 535, 95, 96, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 95, 96, 30, 30, 30, 30, @@ -917,189 +935,193 @@ static yyconst flex_int16_t yy_chk[1786] = 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 32, - 517, 33, 32, 32, 33, 33, 506, 33, 33, 33, - 33, 33, 33, 33, 34, 505, 500, 34, 34, 495, + 530, 33, 32, 32, 33, 33, 519, 33, 33, 33, + 33, 33, 33, 33, 34, 518, 513, 34, 34, 508, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, - 35, 35, 35, 35, 36, 494, 37, 36, 36, 37, - 37, 490, 32, 38, 33, 275, 38, 38, 97, 39, - 57, 479, 39, 39, 37, 44, 275, 34, 44, 44, + 35, 35, 35, 35, 36, 507, 37, 36, 36, 37, + 37, 503, 32, 38, 33, 281, 38, 38, 97, 39, + 57, 492, 39, 39, 37, 44, 281, 34, 44, 44, 38, 40, 57, 36, 40, 40, 41, 98, 39, 41, - 41, 42, 100, 44, 42, 42, 97, 36, 57, 37, + 41, 42, 99, 44, 42, 42, 97, 36, 57, 37, - 476, 43, 37, 461, 43, 43, 38, 455, 38, 101, + 489, 43, 37, 474, 43, 43, 38, 468, 38, 100, 57, 36, 39, 41, 40, 98, 39, 102, 44, 45, - 100, 44, 45, 45, 40, 43, 454, 47, 42, 41, - 47, 47, 70, 104, 42, 70, 70, 101, 47, 432, - 426, 41, 40, 417, 43, 102, 48, 416, 45, 48, - 48, 415, 412, 43, 49, 361, 42, 49, 49, 357, - 105, 104, 45, 50, 356, 48, 50, 50, 51, 352, - 47, 51, 51, 107, 349, 70, 45, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 49, 105, 48, - 332, 331, 50, 48, 46, 46, 46, 49, 62, 108, - - 52, 107, 51, 52, 52, 53, 50, 106, 53, 53, - 325, 51, 62, 311, 106, 49, 110, 64, 62, 64, - 50, 64, 65, 46, 46, 75, 62, 108, 75, 75, - 51, 65, 65, 52, 103, 106, 111, 103, 65, 112, - 62, 53, 106, 52, 110, 64, 62, 64, 53, 64, - 65, 69, 69, 69, 69, 69, 69, 69, 290, 65, - 65, 52, 103, 282, 111, 103, 65, 112, 75, 53, - 56, 56, 56, 113, 133, 273, 56, 56, 271, 266, - 134, 136, 56, 137, 56, 139, 56, 56, 56, 56, - 56, 73, 73, 73, 73, 73, 73, 73, 56, 56, - - 56, 113, 133, 74, 56, 56, 74, 74, 134, 136, - 56, 137, 56, 139, 56, 56, 56, 56, 56, 71, - 263, 262, 71, 71, 256, 71, 71, 71, 71, 71, - 71, 71, 72, 255, 233, 72, 72, 74, 72, 72, - 72, 72, 72, 72, 72, 76, 74, 77, 76, 76, - 77, 77, 78, 199, 195, 78, 78, 79, 140, 141, - 79, 79, 71, 80, 142, 74, 80, 80, 143, 81, - 80, 187, 81, 81, 186, 72, 153, 149, 145, 99, - 82, 76, 78, 82, 82, 144, 140, 141, 76, 81, - 77, 79, 142, 54, 83, 78, 143, 83, 83, 84, - - 79, 87, 84, 84, 87, 87, 80, 82, 29, 76, - 78, 26, 81, 144, 21, 146, 10, 81, 89, 79, - 83, 89, 89, 82, 9, 3, 88, 2, 90, 88, - 88, 90, 90, 0, 0, 82, 92, 83, 0, 92, - 92, 0, 84, 146, 87, 0, 89, 90, 83, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, - 91, 89, 88, 91, 91, 147, 85, 85, 85, 88, - 0, 90, 109, 92, 89, 90, 135, 138, 93, 92, - 91, 93, 93, 148, 135, 150, 138, 109, 138, 151, - 88, 152, 155, 147, 154, 85, 85, 174, 93, 0, - - 109, 92, 0, 91, 135, 138, 132, 175, 91, 132, - 132, 148, 135, 150, 138, 109, 138, 151, 0, 152, - 155, 93, 0, 0, 154, 174, 93, 114, 114, 114, - 114, 114, 114, 114, 115, 175, 0, 115, 115, 0, - 115, 115, 115, 115, 115, 115, 115, 116, 176, 132, - 116, 116, 154, 116, 116, 116, 116, 116, 116, 116, - 117, 0, 0, 117, 117, 0, 117, 117, 117, 117, - 117, 117, 117, 0, 177, 0, 176, 115, 118, 118, - 118, 118, 118, 118, 118, 119, 0, 0, 119, 119, - 116, 120, 178, 121, 120, 120, 121, 121, 0, 180, - - 0, 122, 177, 117, 122, 122, 0, 123, 0, 119, - 123, 123, 124, 120, 126, 124, 124, 126, 126, 181, - 178, 122, 0, 123, 182, 183, 121, 180, 119, 125, - 0, 0, 125, 125, 120, 124, 121, 119, 126, 0, - 184, 120, 127, 0, 122, 127, 127, 181, 0, 122, - 123, 123, 182, 183, 121, 124, 128, 126, 129, 128, - 128, 129, 129, 124, 0, 125, 126, 130, 184, 127, - 130, 130, 125, 0, 131, 0, 158, 131, 131, 158, - 158, 0, 0, 161, 185, 127, 161, 161, 129, 0, - 188, 0, 128, 125, 131, 189, 190, 127, 0, 128, - - 0, 129, 130, 156, 156, 156, 156, 156, 156, 156, - 130, 160, 185, 0, 160, 160, 129, 131, 188, 158, - 128, 0, 131, 189, 190, 157, 161, 0, 157, 157, - 130, 157, 157, 157, 157, 157, 157, 157, 159, 159, - 159, 159, 159, 159, 159, 160, 162, 0, 163, 162, - 162, 163, 163, 164, 160, 165, 164, 164, 165, 165, - 0, 0, 166, 0, 165, 166, 166, 165, 157, 0, - 0, 167, 0, 160, 167, 167, 0, 168, 0, 169, - 168, 168, 169, 169, 170, 191, 0, 170, 170, 162, - 167, 163, 0, 192, 0, 169, 164, 171, 165, 172, - - 171, 171, 172, 172, 173, 166, 168, 173, 173, 0, - 193, 194, 0, 191, 167, 196, 198, 170, 167, 0, - 168, 192, 169, 169, 200, 171, 197, 170, 207, 197, - 0, 207, 207, 0, 168, 0, 207, 173, 193, 194, - 171, 0, 172, 196, 198, 170, 0, 173, 0, 0, - 0, 0, 200, 171, 197, 0, 215, 197, 201, 201, - 201, 201, 201, 201, 201, 173, 202, 0, 0, 202, - 202, 207, 202, 202, 202, 202, 202, 202, 202, 203, - 216, 0, 203, 203, 215, 203, 203, 203, 203, 203, - 203, 203, 205, 0, 206, 205, 205, 206, 206, 0, - - 0, 208, 0, 206, 208, 208, 206, 0, 216, 202, - 209, 208, 0, 209, 209, 217, 210, 218, 219, 210, - 210, 211, 203, 220, 211, 211, 222, 205, 212, 223, - 209, 212, 212, 224, 225, 205, 213, 206, 214, 213, - 213, 214, 214, 217, 208, 218, 219, 226, 227, 228, - 210, 220, 229, 209, 222, 205, 230, 223, 209, 210, - 231, 224, 225, 232, 211, 234, 235, 236, 237, 238, - 239, 212, 214, 240, 241, 226, 227, 228, 210, 213, - 229, 214, 242, 243, 230, 0, 246, 0, 231, 246, - 246, 232, 0, 234, 235, 236, 237, 238, 239, 0, - - 214, 240, 241, 247, 0, 257, 247, 247, 0, 245, - 242, 243, 245, 245, 0, 245, 245, 245, 245, 245, - 245, 245, 248, 247, 249, 248, 248, 249, 249, 246, - 248, 258, 250, 257, 249, 250, 250, 251, 259, 252, - 251, 251, 252, 252, 253, 260, 247, 253, 253, 261, - 254, 247, 245, 254, 254, 264, 265, 267, 269, 258, - 268, 270, 272, 274, 276, 248, 259, 249, 268, 277, - 278, 279, 280, 260, 281, 250, 0, 261, 287, 0, - 251, 0, 252, 264, 265, 267, 269, 253, 268, 270, - 272, 274, 276, 254, 288, 289, 268, 277, 278, 279, - - 280, 283, 281, 291, 283, 283, 287, 283, 283, 283, - 283, 283, 283, 283, 284, 0, 285, 284, 284, 285, - 285, 286, 288, 289, 286, 286, 292, 293, 294, 0, - 295, 291, 296, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 307, 284, 283, 308, 308, 310, 312, 313, - 315, 316, 0, 319, 292, 293, 294, 284, 295, 285, - 296, 298, 299, 300, 286, 301, 302, 303, 304, 305, - 307, 284, 320, 308, 308, 310, 312, 313, 315, 316, - 317, 319, 318, 317, 317, 318, 318, 321, 322, 0, - 323, 324, 326, 327, 328, 0, 329, 0, 330, 333, - - 320, 334, 335, 336, 337, 338, 339, 340, 341, 343, - 346, 344, 345, 346, 346, 321, 322, 318, 323, 324, - 326, 327, 328, 317, 329, 318, 330, 333, 347, 334, - 335, 336, 337, 338, 339, 340, 341, 343, 342, 344, - 345, 348, 350, 351, 353, 318, 342, 354, 355, 358, - 362, 363, 364, 346, 365, 366, 347, 367, 368, 369, - 370, 371, 372, 374, 375, 376, 342, 377, 378, 348, - 350, 351, 353, 379, 342, 354, 355, 358, 362, 363, - 364, 380, 365, 366, 381, 367, 368, 369, 370, 371, - 372, 374, 375, 376, 382, 377, 378, 383, 385, 386, - - 387, 379, 388, 389, 390, 391, 392, 393, 395, 380, - 396, 397, 381, 398, 400, 401, 402, 403, 404, 405, - 406, 407, 382, 408, 409, 383, 385, 386, 387, 410, - 388, 389, 390, 391, 392, 393, 395, 411, 396, 397, - 413, 398, 400, 401, 402, 403, 404, 405, 406, 407, - 414, 408, 409, 419, 420, 422, 423, 410, 424, 425, - 427, 428, 429, 430, 431, 411, 433, 435, 413, 436, - 438, 439, 440, 442, 443, 444, 445, 447, 414, 448, - 449, 419, 420, 422, 423, 450, 424, 425, 427, 428, - 429, 430, 431, 451, 433, 435, 453, 436, 438, 439, - - 440, 442, 443, 444, 445, 447, 456, 448, 449, 457, - 459, 460, 462, 450, 463, 464, 465, 466, 467, 468, - 469, 451, 471, 472, 453, 477, 478, 480, 481, 482, - 483, 484, 485, 487, 456, 488, 491, 457, 459, 460, - 462, 492, 463, 464, 465, 466, 467, 468, 469, 493, - 471, 472, 496, 477, 478, 480, 481, 482, 483, 484, - 485, 487, 497, 488, 491, 499, 501, 504, 507, 492, - 508, 512, 513, 514, 515, 516, 0, 493, 0, 0, - 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 497, 0, 0, 499, 501, 504, 507, 0, 508, 512, - - 513, 514, 515, 516, 521, 521, 523, 523, 525, 525, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, 520, 520 + 99, 44, 45, 45, 40, 43, 467, 47, 42, 41, + 47, 47, 71, 103, 42, 71, 71, 100, 47, 444, + 437, 41, 40, 428, 43, 102, 48, 427, 45, 48, + 48, 426, 423, 43, 49, 370, 42, 49, 49, 366, + 104, 103, 45, 50, 365, 48, 50, 50, 51, 361, + 47, 51, 51, 106, 357, 71, 45, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 49, 104, 48, + 340, 339, 50, 48, 46, 46, 46, 49, 63, 107, + + 52, 106, 51, 52, 52, 53, 50, 108, 53, 53, + 333, 51, 63, 318, 108, 49, 109, 65, 63, 65, + 50, 65, 66, 46, 46, 76, 63, 107, 76, 76, + 51, 66, 66, 52, 105, 108, 110, 105, 66, 112, + 63, 53, 108, 52, 109, 65, 63, 65, 53, 65, + 66, 70, 70, 70, 70, 70, 70, 70, 296, 66, + 66, 52, 105, 288, 110, 105, 66, 112, 76, 53, + 56, 56, 56, 113, 56, 279, 56, 56, 277, 272, + 114, 115, 56, 135, 56, 136, 56, 56, 56, 56, + 56, 74, 74, 74, 74, 74, 74, 74, 56, 56, + + 56, 113, 56, 75, 56, 56, 75, 75, 114, 115, + 56, 135, 56, 136, 56, 56, 56, 56, 56, 72, + 269, 268, 72, 72, 261, 72, 72, 72, 72, 72, + 72, 72, 73, 260, 238, 73, 73, 75, 73, 73, + 73, 73, 73, 73, 73, 77, 75, 78, 77, 77, + 78, 78, 79, 224, 203, 79, 79, 80, 138, 139, + 80, 80, 72, 81, 140, 75, 81, 81, 142, 82, + 81, 199, 82, 82, 191, 73, 190, 156, 152, 148, + 83, 77, 79, 83, 83, 143, 138, 139, 77, 82, + 78, 80, 140, 101, 84, 79, 142, 84, 84, 85, + + 80, 88, 85, 85, 88, 88, 81, 83, 54, 77, + 79, 29, 82, 143, 26, 144, 21, 82, 90, 80, + 84, 90, 90, 83, 10, 9, 89, 3, 91, 89, + 89, 91, 91, 2, 0, 83, 93, 84, 0, 93, + 93, 0, 85, 144, 88, 0, 90, 91, 84, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 0, + 92, 90, 89, 92, 92, 145, 86, 86, 86, 89, + 0, 91, 111, 93, 90, 91, 137, 141, 94, 93, + 92, 94, 94, 146, 137, 147, 141, 111, 141, 149, + 89, 150, 151, 145, 153, 86, 86, 154, 94, 0, + + 111, 93, 0, 92, 137, 141, 134, 155, 92, 134, + 134, 146, 137, 147, 141, 111, 141, 149, 157, 150, + 151, 94, 153, 0, 158, 154, 94, 116, 116, 116, + 116, 116, 116, 116, 117, 155, 0, 117, 117, 0, + 117, 117, 117, 117, 117, 117, 117, 118, 157, 134, + 118, 118, 158, 118, 118, 118, 118, 118, 118, 118, + 119, 0, 0, 119, 119, 0, 119, 119, 119, 119, + 119, 119, 119, 0, 177, 0, 157, 117, 120, 120, + 120, 120, 120, 120, 120, 121, 0, 0, 121, 121, + 118, 122, 178, 123, 122, 122, 123, 123, 0, 179, + + 0, 124, 177, 119, 124, 124, 0, 125, 0, 121, + 125, 125, 126, 122, 128, 126, 126, 128, 128, 180, + 178, 124, 0, 125, 181, 182, 123, 179, 121, 127, + 0, 0, 127, 127, 122, 126, 123, 121, 128, 0, + 184, 122, 129, 0, 124, 129, 129, 180, 0, 124, + 125, 125, 181, 182, 123, 126, 130, 128, 131, 130, + 130, 131, 131, 126, 0, 127, 128, 132, 184, 129, + 132, 132, 127, 0, 133, 0, 161, 133, 133, 161, + 161, 0, 0, 164, 185, 129, 164, 164, 131, 0, + 186, 0, 130, 127, 133, 187, 188, 129, 0, 130, + + 0, 131, 132, 159, 159, 159, 159, 159, 159, 159, + 132, 163, 185, 0, 163, 163, 131, 133, 186, 161, + 130, 0, 133, 187, 188, 160, 164, 0, 160, 160, + 132, 160, 160, 160, 160, 160, 160, 160, 162, 162, + 162, 162, 162, 162, 162, 163, 165, 0, 166, 165, + 165, 166, 166, 167, 163, 168, 167, 167, 168, 168, + 0, 0, 169, 0, 168, 169, 169, 168, 160, 0, + 0, 170, 0, 163, 170, 170, 0, 171, 0, 172, + 171, 171, 172, 172, 173, 189, 0, 173, 173, 165, + 170, 166, 0, 192, 0, 172, 167, 174, 168, 175, + + 174, 174, 175, 175, 176, 169, 171, 176, 176, 0, + 193, 194, 0, 189, 170, 195, 196, 173, 170, 0, + 171, 192, 172, 172, 197, 174, 198, 173, 200, 201, + 202, 204, 201, 219, 171, 220, 221, 176, 193, 194, + 174, 0, 175, 195, 196, 173, 222, 176, 0, 0, + 223, 0, 197, 174, 198, 0, 200, 201, 202, 204, + 201, 219, 0, 220, 221, 176, 205, 205, 205, 205, + 205, 205, 205, 206, 222, 0, 206, 206, 223, 206, + 206, 206, 206, 206, 206, 206, 207, 0, 0, 207, + 207, 0, 207, 207, 207, 207, 207, 207, 207, 209, + + 0, 210, 209, 209, 210, 210, 0, 0, 225, 0, + 210, 211, 0, 210, 211, 211, 206, 212, 0, 211, + 212, 212, 214, 227, 0, 214, 214, 212, 213, 207, + 228, 213, 213, 229, 209, 215, 225, 216, 215, 215, + 216, 216, 209, 217, 210, 230, 217, 217, 213, 218, + 0, 227, 218, 218, 211, 0, 214, 231, 228, 232, + 212, 229, 209, 233, 0, 214, 234, 235, 236, 237, + 239, 213, 240, 230, 241, 242, 213, 243, 215, 244, + 216, 245, 246, 218, 214, 231, 217, 232, 247, 248, + 0, 233, 218, 0, 234, 235, 236, 237, 239, 0, + + 240, 262, 241, 242, 0, 243, 0, 244, 0, 245, + 246, 218, 0, 0, 0, 250, 247, 248, 250, 250, + 0, 250, 250, 250, 250, 250, 250, 250, 251, 262, + 252, 251, 251, 252, 252, 263, 253, 0, 254, 253, + 253, 254, 254, 255, 253, 0, 255, 255, 254, 256, + 252, 257, 256, 256, 257, 257, 258, 264, 250, 258, + 258, 259, 265, 263, 259, 259, 0, 266, 267, 270, + 271, 251, 273, 252, 274, 275, 0, 276, 252, 253, + 278, 254, 274, 280, 282, 264, 255, 283, 284, 285, + 265, 286, 256, 287, 257, 266, 267, 270, 271, 258, + + 273, 0, 274, 275, 259, 276, 293, 0, 278, 0, + 274, 280, 282, 294, 295, 283, 284, 285, 297, 286, + 289, 287, 298, 289, 289, 299, 289, 289, 289, 289, + 289, 289, 289, 290, 293, 291, 290, 290, 291, 291, + 292, 294, 295, 292, 292, 300, 297, 301, 0, 302, + 298, 303, 305, 299, 306, 0, 307, 308, 309, 310, + 311, 312, 290, 289, 314, 315, 315, 317, 319, 320, + 322, 323, 0, 300, 0, 301, 290, 302, 291, 303, + 305, 326, 306, 292, 307, 308, 309, 310, 311, 312, + 290, 327, 314, 315, 315, 317, 319, 320, 322, 323, + + 324, 328, 325, 324, 324, 325, 325, 329, 330, 326, + 331, 332, 334, 335, 336, 0, 337, 0, 338, 327, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 328, + 0, 351, 352, 353, 355, 329, 330, 325, 331, 332, + 334, 335, 336, 324, 337, 325, 338, 356, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 358, 350, 351, + 352, 353, 355, 359, 354, 325, 350, 354, 354, 360, + 362, 363, 364, 367, 371, 356, 372, 373, 374, 0, + 375, 376, 377, 378, 379, 358, 350, 380, 381, 383, + 384, 359, 385, 386, 350, 387, 388, 360, 362, 363, + + 364, 367, 371, 389, 372, 373, 374, 354, 375, 376, + 377, 378, 379, 390, 391, 380, 381, 383, 384, 392, + 385, 386, 393, 387, 388, 395, 396, 397, 398, 399, + 400, 389, 401, 402, 403, 405, 406, 407, 408, 410, + 411, 390, 391, 412, 413, 414, 415, 392, 416, 417, + 393, 418, 419, 395, 396, 397, 398, 399, 400, 420, + 401, 402, 403, 405, 406, 407, 408, 410, 411, 421, + 422, 412, 413, 414, 415, 424, 416, 417, 425, 418, + 419, 430, 431, 433, 434, 435, 436, 420, 438, 439, + 440, 441, 442, 443, 445, 447, 448, 421, 422, 450, + + 451, 452, 454, 424, 455, 456, 425, 457, 460, 430, + 431, 433, 434, 435, 436, 461, 438, 439, 440, 441, + 442, 443, 445, 447, 448, 462, 463, 450, 451, 452, + 454, 464, 455, 456, 466, 457, 460, 469, 470, 472, + 473, 475, 476, 461, 477, 478, 479, 480, 481, 482, + 484, 485, 490, 462, 463, 491, 493, 494, 495, 464, + 496, 497, 466, 498, 500, 469, 470, 472, 473, 475, + 476, 501, 477, 478, 479, 480, 481, 482, 484, 485, + 490, 504, 505, 491, 493, 494, 495, 506, 496, 497, + 509, 498, 500, 510, 512, 514, 517, 520, 521, 501, + + 525, 526, 527, 528, 529, 0, 0, 0, 0, 504, + 505, 0, 0, 0, 0, 506, 0, 0, 509, 0, + 0, 510, 512, 514, 517, 520, 521, 0, 525, 526, + 527, 528, 529, 534, 534, 536, 536, 538, 538, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533 } ; -static yyconst flex_int16_t yy_rule_linenum[65] = +static yyconst flex_int16_t yy_rule_linenum[66] = { 0, - 98, 100, 102, 104, 106, 109, 113, 115, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, - 152, 153, 154, 155, 156, 158, 159, 162, 167, 168, - 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 181, 190, 208, 215 + 99, 101, 103, 105, 107, 110, 114, 116, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 147, 148, 150, 152, + 154, 155, 156, 157, 158, 159, 161, 162, 165, 170, + 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 184, 193, 211, 218 } ; /* The intent behind this definition is that it'll catch @@ -1146,7 +1168,7 @@ static yyconst flex_int16_t yy_rule_linenum[65] = * */ -#line 59 "libmemcached/csl/scanner.l" +#line 60 "libmemcached/csl/scanner.l" #include #include @@ -1170,7 +1192,7 @@ static yyconst flex_int16_t yy_rule_linenum[65] = #define YY_INPUT(buffer, result, max_size) get_lex_chars(buffer, result, max_size, PARAM) -#line 1174 "libmemcached/csl/scanner.cc" +#line 1196 "libmemcached/csl/scanner.cc" #define INITIAL 0 @@ -1278,10 +1300,6 @@ int config_get_lineno (yyscan_t yyscanner ); void config_set_lineno (int line_number ,yyscan_t yyscanner ); -int config_get_column (yyscan_t yyscanner ); - -void config_set_column (int column_no ,yyscan_t yyscanner ); - /* %if-bison-bridge */ YYSTYPE * config_get_lval (yyscan_t yyscanner ); @@ -1336,7 +1354,12 @@ static int input (yyscan_t yyscanner ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else #define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1360,7 +1383,7 @@ static int input (yyscan_t yyscanner ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - unsigned n; \ + size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -1473,11 +1496,11 @@ YY_DECL struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* %% [7.0] user's declarations go here */ -#line 95 "libmemcached/csl/scanner.l" +#line 96 "libmemcached/csl/scanner.l" -#line 1481 "libmemcached/csl/scanner.cc" +#line 1504 "libmemcached/csl/scanner.cc" yylval = yylval_param; @@ -1543,13 +1566,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 521 ) + if ( yy_current_state >= 534 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 1711 ); + while ( yy_base[yy_current_state] != 1740 ); yy_find_action: /* %% [10.0] code to find the action number goes here */ @@ -1572,13 +1595,13 @@ do_action: /* This label is used only to access EOF actions. */ { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 65 ) + else if ( yy_act < 66 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 65 ) + else if ( yy_act == 66 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 66 ) + else if ( yy_act == 67 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -1596,28 +1619,28 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 98 "libmemcached/csl/scanner.l" +#line 99 "libmemcached/csl/scanner.l" { return yytext[0];} YY_BREAK case 2: YY_RULE_SETUP -#line 100 "libmemcached/csl/scanner.l" +#line 101 "libmemcached/csl/scanner.l" { yylval->number= atoi(yytext); return (NUMBER); } YY_BREAK case 3: YY_RULE_SETUP -#line 102 "libmemcached/csl/scanner.l" +#line 103 "libmemcached/csl/scanner.l" { yylval->number= atoi(yytext +1); return PORT; } YY_BREAK case 4: YY_RULE_SETUP -#line 104 "libmemcached/csl/scanner.l" +#line 105 "libmemcached/csl/scanner.l" { yylval->number= atoi(yytext +2); return WEIGHT_START; } YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP -#line 106 "libmemcached/csl/scanner.l" +#line 107 "libmemcached/csl/scanner.l" ; /* skip whitespace */ YY_BREAK case 6: @@ -1625,287 +1648,292 @@ case 6: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 109 "libmemcached/csl/scanner.l" +#line 110 "libmemcached/csl/scanner.l" { return COMMENT; } YY_BREAK case 7: YY_RULE_SETUP -#line 113 "libmemcached/csl/scanner.l" +#line 114 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; yyextra->set_server(); return yyextra->previous_token= SERVER; } YY_BREAK case 8: YY_RULE_SETUP -#line 115 "libmemcached/csl/scanner.l" +#line 116 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= SOCKET; } YY_BREAK case 9: YY_RULE_SETUP -#line 117 "libmemcached/csl/scanner.l" +#line 118 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= BINARY_PROTOCOL; } YY_BREAK case 10: YY_RULE_SETUP -#line 118 "libmemcached/csl/scanner.l" +#line 119 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= BUFFER_REQUESTS; } YY_BREAK case 11: YY_RULE_SETUP -#line 119 "libmemcached/csl/scanner.l" +#line 120 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= CONFIGURE_FILE; } YY_BREAK case 12: YY_RULE_SETUP -#line 120 "libmemcached/csl/scanner.l" +#line 121 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= CONNECT_TIMEOUT; } YY_BREAK case 13: YY_RULE_SETUP -#line 121 "libmemcached/csl/scanner.l" +#line 122 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= DISTRIBUTION; } YY_BREAK case 14: YY_RULE_SETUP -#line 122 "libmemcached/csl/scanner.l" +#line 123 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= HASH_WITH_NAMESPACE; } YY_BREAK case 15: YY_RULE_SETUP -#line 123 "libmemcached/csl/scanner.l" +#line 124 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= HASH; } YY_BREAK case 16: YY_RULE_SETUP -#line 124 "libmemcached/csl/scanner.l" +#line 125 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= IO_BYTES_WATERMARK; } YY_BREAK case 17: YY_RULE_SETUP -#line 125 "libmemcached/csl/scanner.l" +#line 126 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= IO_KEY_PREFETCH; } YY_BREAK case 18: YY_RULE_SETUP -#line 126 "libmemcached/csl/scanner.l" +#line 127 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= IO_MSG_WATERMARK; } YY_BREAK case 19: YY_RULE_SETUP -#line 127 "libmemcached/csl/scanner.l" +#line 128 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= NOREPLY; } YY_BREAK case 20: YY_RULE_SETUP -#line 128 "libmemcached/csl/scanner.l" +#line 129 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= NUMBER_OF_REPLICAS; } YY_BREAK case 21: YY_RULE_SETUP -#line 129 "libmemcached/csl/scanner.l" +#line 130 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= POLL_TIMEOUT; } YY_BREAK case 22: YY_RULE_SETUP -#line 130 "libmemcached/csl/scanner.l" +#line 131 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= RANDOMIZE_REPLICA_READ; } YY_BREAK case 23: YY_RULE_SETUP -#line 131 "libmemcached/csl/scanner.l" +#line 132 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= RCV_TIMEOUT; } YY_BREAK case 24: YY_RULE_SETUP -#line 132 "libmemcached/csl/scanner.l" +#line 133 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= REMOVE_FAILED_SERVERS; } YY_BREAK case 25: YY_RULE_SETUP -#line 133 "libmemcached/csl/scanner.l" +#line 134 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= RETRY_TIMEOUT; } YY_BREAK case 26: YY_RULE_SETUP -#line 134 "libmemcached/csl/scanner.l" +#line 135 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= SND_TIMEOUT; } YY_BREAK case 27: YY_RULE_SETUP -#line 135 "libmemcached/csl/scanner.l" +#line 136 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= SOCKET_RECV_SIZE; } YY_BREAK case 28: YY_RULE_SETUP -#line 136 "libmemcached/csl/scanner.l" +#line 137 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= SOCKET_SEND_SIZE; } YY_BREAK case 29: YY_RULE_SETUP -#line 137 "libmemcached/csl/scanner.l" +#line 138 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= SORT_HOSTS; } YY_BREAK case 30: YY_RULE_SETUP -#line 138 "libmemcached/csl/scanner.l" +#line 139 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= SUPPORT_CAS; } YY_BREAK case 31: YY_RULE_SETUP -#line 139 "libmemcached/csl/scanner.l" +#line 140 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= _TCP_KEEPALIVE; } YY_BREAK case 32: YY_RULE_SETUP -#line 140 "libmemcached/csl/scanner.l" +#line 141 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= _TCP_KEEPIDLE; } YY_BREAK case 33: YY_RULE_SETUP -#line 141 "libmemcached/csl/scanner.l" +#line 142 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= _TCP_NODELAY; } YY_BREAK case 34: YY_RULE_SETUP -#line 142 "libmemcached/csl/scanner.l" +#line 143 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= USE_UDP; } YY_BREAK case 35: YY_RULE_SETUP -#line 143 "libmemcached/csl/scanner.l" +#line 144 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= USER_DATA; } YY_BREAK case 36: YY_RULE_SETUP -#line 144 "libmemcached/csl/scanner.l" +#line 145 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= VERIFY_KEY; } YY_BREAK case 37: YY_RULE_SETUP -#line 146 "libmemcached/csl/scanner.l" +#line 147 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= POOL_MIN; } YY_BREAK case 38: YY_RULE_SETUP -#line 147 "libmemcached/csl/scanner.l" +#line 148 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= POOL_MAX; } YY_BREAK case 39: YY_RULE_SETUP -#line 149 "libmemcached/csl/scanner.l" +#line 150 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return yyextra->previous_token= NAMESPACE; } YY_BREAK case 40: YY_RULE_SETUP -#line 151 "libmemcached/csl/scanner.l" -{ yyextra->begin= yytext; return yyextra->previous_token= INCLUDE; } +#line 152 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= FETCH_VERSION; } YY_BREAK case 41: YY_RULE_SETUP -#line 152 "libmemcached/csl/scanner.l" -{ yyextra->begin= yytext; return yyextra->previous_token= RESET; } +#line 154 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= INCLUDE; } YY_BREAK case 42: YY_RULE_SETUP -#line 153 "libmemcached/csl/scanner.l" -{ yyextra->begin= yytext; return yyextra->previous_token= PARSER_DEBUG; } +#line 155 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= RESET; } YY_BREAK case 43: YY_RULE_SETUP -#line 154 "libmemcached/csl/scanner.l" -{ yyextra->begin= yytext; return yyextra->previous_token= SERVERS; } +#line 156 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= PARSER_DEBUG; } YY_BREAK case 44: YY_RULE_SETUP -#line 155 "libmemcached/csl/scanner.l" -{ yyextra->begin= yytext; return yyextra->previous_token= END; } +#line 157 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= SERVERS; } YY_BREAK case 45: YY_RULE_SETUP -#line 156 "libmemcached/csl/scanner.l" -{ yyextra->begin= yytext; return yyextra->previous_token= ERROR; } +#line 158 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= END; } YY_BREAK case 46: YY_RULE_SETUP -#line 158 "libmemcached/csl/scanner.l" -{ return yyextra->previous_token= TRUE; } +#line 159 "libmemcached/csl/scanner.l" +{ yyextra->begin= yytext; return yyextra->previous_token= ERROR; } YY_BREAK case 47: YY_RULE_SETUP -#line 159 "libmemcached/csl/scanner.l" -{ return yyextra->previous_token= FALSE; } +#line 161 "libmemcached/csl/scanner.l" +{ return yyextra->previous_token= TRUE; } YY_BREAK case 48: YY_RULE_SETUP #line 162 "libmemcached/csl/scanner.l" +{ return yyextra->previous_token= FALSE; } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 165 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return UNKNOWN_OPTION; } YY_BREAK -case 49: +case 50: YY_RULE_SETUP -#line 167 "libmemcached/csl/scanner.l" +#line 170 "libmemcached/csl/scanner.l" { return CONSISTENT; } YY_BREAK -case 50: +case 51: YY_RULE_SETUP -#line 168 "libmemcached/csl/scanner.l" +#line 171 "libmemcached/csl/scanner.l" { return MODULA; } YY_BREAK -case 51: +case 52: YY_RULE_SETUP -#line 169 "libmemcached/csl/scanner.l" +#line 172 "libmemcached/csl/scanner.l" { return RANDOM; } YY_BREAK -case 52: +case 53: YY_RULE_SETUP -#line 171 "libmemcached/csl/scanner.l" +#line 174 "libmemcached/csl/scanner.l" { return MD5; } YY_BREAK -case 53: +case 54: YY_RULE_SETUP -#line 172 "libmemcached/csl/scanner.l" +#line 175 "libmemcached/csl/scanner.l" { return CRC; } YY_BREAK -case 54: +case 55: YY_RULE_SETUP -#line 173 "libmemcached/csl/scanner.l" +#line 176 "libmemcached/csl/scanner.l" { return FNV1_64; } YY_BREAK -case 55: +case 56: YY_RULE_SETUP -#line 174 "libmemcached/csl/scanner.l" +#line 177 "libmemcached/csl/scanner.l" { return FNV1A_64; } YY_BREAK -case 56: +case 57: YY_RULE_SETUP -#line 175 "libmemcached/csl/scanner.l" +#line 178 "libmemcached/csl/scanner.l" { return FNV1_32; } YY_BREAK -case 57: +case 58: YY_RULE_SETUP -#line 176 "libmemcached/csl/scanner.l" +#line 179 "libmemcached/csl/scanner.l" { return FNV1A_32; } YY_BREAK -case 58: +case 59: YY_RULE_SETUP -#line 177 "libmemcached/csl/scanner.l" +#line 180 "libmemcached/csl/scanner.l" { return HSIEH; } YY_BREAK -case 59: +case 60: YY_RULE_SETUP -#line 178 "libmemcached/csl/scanner.l" +#line 181 "libmemcached/csl/scanner.l" { return MURMUR; } YY_BREAK -case 60: +case 61: YY_RULE_SETUP -#line 179 "libmemcached/csl/scanner.l" +#line 182 "libmemcached/csl/scanner.l" { return JENKINS; } YY_BREAK -case 61: +case 62: YY_RULE_SETUP -#line 181 "libmemcached/csl/scanner.l" +#line 184 "libmemcached/csl/scanner.l" { yylval->server.port= MEMCACHED_DEFAULT_PORT; yylval->server.weight= 1; @@ -1915,9 +1943,9 @@ YY_RULE_SETUP return IPADDRESS; } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 190 "libmemcached/csl/scanner.l" +#line 193 "libmemcached/csl/scanner.l" { if (yyextra->is_server()) { @@ -1936,10 +1964,10 @@ YY_RULE_SETUP return STRING; } YY_BREAK -case 63: -/* rule 63 can match eol */ +case 64: +/* rule 64 can match eol */ YY_RULE_SETUP -#line 208 "libmemcached/csl/scanner.l" +#line 211 "libmemcached/csl/scanner.l" { config_get_text(yyscanner)[yyleng -1]= 0; yylval->string.c_str= yytext +1; @@ -1947,20 +1975,20 @@ YY_RULE_SETUP return QUOTED_STRING; } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 215 "libmemcached/csl/scanner.l" +#line 218 "libmemcached/csl/scanner.l" { yyextra->begin= yytext; return UNKNOWN; } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 220 "libmemcached/csl/scanner.l" +#line 223 "libmemcached/csl/scanner.l" ECHO; YY_BREAK -#line 1964 "libmemcached/csl/scanner.cc" +#line 1992 "libmemcached/csl/scanner.cc" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2276,7 +2304,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 521 ) + if ( yy_current_state >= 534 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2310,11 +2338,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 521 ) + if ( yy_current_state >= 534 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 520); + yy_is_jam = (yy_current_state == 533); return yy_is_jam ? 0 : yy_current_state; } @@ -2797,8 +2825,8 @@ YY_BUFFER_STATE config__scan_string (yyconst char * yystr , yyscan_t yyscanner) /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to config_lex() will * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ @@ -3226,7 +3254,7 @@ void config_free (void * ptr , yyscan_t yyscanner) /* %ok-for-header */ -#line 220 "libmemcached/csl/scanner.l" +#line 223 "libmemcached/csl/scanner.l" diff --git a/libmemcached/csl/scanner.h b/libmemcached/csl/scanner.h index 74fa65da..6aa08a64 100644 --- a/libmemcached/csl/scanner.h +++ b/libmemcached/csl/scanner.h @@ -14,6 +14,7 @@ #pragma GCC diagnostic ignored "-Wold-style-cast" #pragma GCC diagnostic ignored "-Wsign-compare" #pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wmissing-declarations" #endif #define YY_NO_INPUT @@ -23,7 +24,7 @@ -#line 27 "libmemcached/csl/scanner.h" +#line 28 "libmemcached/csl/scanner.h" #define YY_INT_ALIGNED short int @@ -95,7 +96,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -126,6 +126,8 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ /* %endif */ @@ -184,7 +186,15 @@ typedef void* yyscan_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else #define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE @@ -372,10 +382,6 @@ int config_get_lineno (yyscan_t yyscanner ); void config_set_lineno (int line_number ,yyscan_t yyscanner ); -int config_get_column (yyscan_t yyscanner ); - -void config_set_column (int column_no ,yyscan_t yyscanner ); - /* %if-bison-bridge */ YYSTYPE * config_get_lval (yyscan_t yyscanner ); @@ -421,7 +427,12 @@ static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else #define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ #endif /* Number of entries by which start-condition stack grows. */ @@ -475,9 +486,9 @@ extern int config_lex \ #undef YY_DECL #endif -#line 220 "libmemcached/csl/scanner.l" +#line 223 "libmemcached/csl/scanner.l" -#line 482 "libmemcached/csl/scanner.h" +#line 493 "libmemcached/csl/scanner.h" #undef config_IN_HEADER #endif /* config_HEADER_H */ diff --git a/libmemcached/csl/scanner.l b/libmemcached/csl/scanner.l index a139c75e..8e404b5f 100644 --- a/libmemcached/csl/scanner.l +++ b/libmemcached/csl/scanner.l @@ -46,6 +46,7 @@ #pragma GCC diagnostic ignored "-Wold-style-cast" #pragma GCC diagnostic ignored "-Wsign-compare" #pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wmissing-declarations" #endif #define YY_NO_INPUT @@ -148,6 +149,8 @@ "--NAMESPACE=" { yyextra->begin= yytext; return yyextra->previous_token= NAMESPACE; } +"--FETCH-VERSION" { yyextra->begin= yytext; return yyextra->previous_token= FETCH_VERSION; } + INCLUDE { yyextra->begin= yytext; return yyextra->previous_token= INCLUDE; } RESET { yyextra->begin= yytext; return yyextra->previous_token= RESET; } DEBUG { yyextra->begin= yytext; return yyextra->previous_token= PARSER_DEBUG; } diff --git a/libmemcached/flag.cc b/libmemcached/flag.cc new file mode 100644 index 00000000..09b401e6 --- /dev/null +++ b/libmemcached/flag.cc @@ -0,0 +1,156 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * Libmemcached library + * + * Copyright (C) 2012 Data Differential, http://datadifferential.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +bool memcached_flag(const memcached_st& memc, const memcached_flag_t flag) +{ + switch (flag) + { + case MEMCACHED_FLAG_AUTO_EJECT_HOSTS: + return memcached_is_auto_eject_hosts(&memc); + + case MEMCACHED_FLAG_BINARY_PROTOCOL: + return memcached_is_binary(&memc); + + case MEMCACHED_FLAG_BUFFER_REQUESTS: + return memcached_is_buffering(&memc); + + case MEMCACHED_FLAG_HASH_WITH_NAMESPACE: + return memcached_is_hash_with_namespace(&memc); + + case MEMCACHED_FLAG_NO_BLOCK: + return memcached_is_no_block(&memc); + + case MEMCACHED_FLAG_REPLY: + return memcached_is_replying(&memc); + + case MEMCACHED_FLAG_RANDOMIZE_REPLICA_READ: + return memcached_is_randomize_replica_read(&memc); + + case MEMCACHED_FLAG_SUPPORT_CAS: + return memcached_is_cas(&memc); + + case MEMCACHED_FLAG_TCP_NODELAY: + return memcached_is_tcp_nodelay(&memc); + + case MEMCACHED_FLAG_USE_SORT_HOSTS: + return memcached_is_use_sort_hosts(&memc); + + case MEMCACHED_FLAG_USE_UDP: + return memcached_is_udp(&memc); + + case MEMCACHED_FLAG_VERIFY_KEY: + return memcached_is_verify_key(&memc); + + case MEMCACHED_FLAG_TCP_KEEPALIVE: + return memcached_is_use_sort_hosts(&memc); + + case MEMCACHED_FLAG_IS_AES: + return memcached_is_aes(&memc); + + case MEMCACHED_FLAG_IS_FETCHING_VERSION: + return memcached_is_fetching_version(&memc); + } + + abort(); +} + +void memcached_flag(memcached_st& memc, const memcached_flag_t flag, const bool arg) +{ + switch (flag) + { + case MEMCACHED_FLAG_AUTO_EJECT_HOSTS: + memcached_set_auto_eject_hosts(memc, arg); + break; + + case MEMCACHED_FLAG_BINARY_PROTOCOL: + memcached_set_binary(memc, arg); + break; + + case MEMCACHED_FLAG_BUFFER_REQUESTS: + memcached_set_buffering(memc, arg); + break; + + case MEMCACHED_FLAG_HASH_WITH_NAMESPACE: + memcached_set_hash_with_namespace(memc, arg); + break; + + case MEMCACHED_FLAG_NO_BLOCK: + memcached_set_no_block(memc, arg); + break; + + case MEMCACHED_FLAG_REPLY: + memcached_set_replying(memc, arg); + break; + + case MEMCACHED_FLAG_RANDOMIZE_REPLICA_READ: + memcached_set_randomize_replica_read(memc, arg); + break; + + case MEMCACHED_FLAG_SUPPORT_CAS: + memcached_set_cas(memc, arg); + break; + + case MEMCACHED_FLAG_TCP_NODELAY: + memcached_set_tcp_nodelay(memc, arg); + break; + + case MEMCACHED_FLAG_USE_SORT_HOSTS: + memcached_set_use_sort_hosts(memc, arg); + break; + + case MEMCACHED_FLAG_USE_UDP: + memcached_set_udp(memc, arg); + break; + + case MEMCACHED_FLAG_VERIFY_KEY: + memcached_set_verify_key(memc, arg); + break; + + case MEMCACHED_FLAG_TCP_KEEPALIVE: + memcached_set_use_sort_hosts(memc, arg); + break; + + case MEMCACHED_FLAG_IS_AES: + memcached_set_aes(memc, arg); + break; + + case MEMCACHED_FLAG_IS_FETCHING_VERSION: + memcached_set_fetching_version(memc, arg); + break; + } +} diff --git a/libmemcached/flag.hpp b/libmemcached/flag.hpp new file mode 100644 index 00000000..6efe2ef1 --- /dev/null +++ b/libmemcached/flag.hpp @@ -0,0 +1,59 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * Libmemcached library + * + * Copyright (C) 2012 Data Differential, http://datadifferential.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#pragma once + +enum memcached_flag_t +{ + MEMCACHED_FLAG_AUTO_EJECT_HOSTS, + MEMCACHED_FLAG_BINARY_PROTOCOL, + MEMCACHED_FLAG_BUFFER_REQUESTS, + MEMCACHED_FLAG_HASH_WITH_NAMESPACE, + MEMCACHED_FLAG_NO_BLOCK, + MEMCACHED_FLAG_REPLY, + MEMCACHED_FLAG_RANDOMIZE_REPLICA_READ, + MEMCACHED_FLAG_SUPPORT_CAS, + MEMCACHED_FLAG_TCP_NODELAY, + MEMCACHED_FLAG_USE_SORT_HOSTS, + MEMCACHED_FLAG_USE_UDP, + MEMCACHED_FLAG_VERIFY_KEY, + MEMCACHED_FLAG_TCP_KEEPALIVE, + MEMCACHED_FLAG_IS_AES, + MEMCACHED_FLAG_IS_FETCHING_VERSION +}; + +bool memcached_flag(const memcached_st&, const memcached_flag_t); +void memcached_flag(memcached_st&, const memcached_flag_t, const bool); diff --git a/libmemcached/include.am b/libmemcached/include.am index be04712c..f3525df2 100644 --- a/libmemcached/include.am +++ b/libmemcached/include.am @@ -23,6 +23,7 @@ noinst_HEADERS+= libmemcached/continuum.hpp noinst_HEADERS+= libmemcached/do.hpp noinst_HEADERS+= libmemcached/encoding_key.h noinst_HEADERS+= libmemcached/error.hpp +noinst_HEADERS+= libmemcached/flag.hpp noinst_HEADERS+= libmemcached/initialize_query.h noinst_HEADERS+= libmemcached/instance.h noinst_HEADERS+= libmemcached/instance.hpp @@ -45,6 +46,7 @@ noinst_HEADERS+= libmemcached/server_instance.h noinst_HEADERS+= libmemcached/socket.hpp noinst_HEADERS+= libmemcached/string.hpp noinst_HEADERS+= libmemcached/udp.hpp +noinst_HEADERS+= libmemcached/version.hpp noinst_HEADERS+= libmemcached/virtual_bucket.h noinst_HEADERS+= libmemcached/watchpoint.h @@ -72,6 +74,7 @@ libmemcached_libmemcached_la_SOURCES+= libmemcached/dump.cc libmemcached_libmemcached_la_SOURCES+= libmemcached/error.cc libmemcached_libmemcached_la_SOURCES+= libmemcached/exist.cc libmemcached_libmemcached_la_SOURCES+= libmemcached/fetch.cc +libmemcached_libmemcached_la_SOURCES+= libmemcached/flag.cc libmemcached_libmemcached_la_SOURCES+= libmemcached/flush.cc libmemcached_libmemcached_la_SOURCES+= libmemcached/flush_buffers.cc libmemcached_libmemcached_la_SOURCES+= libmemcached/get.cc diff --git a/libmemcached/is.h b/libmemcached/is.h index 4c4d6f31..3815a0ad 100644 --- a/libmemcached/is.h +++ b/libmemcached/is.h @@ -40,15 +40,41 @@ /* These are private */ #define memcached_is_allocated(__object) ((__object)->options.is_allocated) #define memcached_is_encrypted(__object) ((__object)->hashkit._key) -#define memcached_is_udp(__object) ((__object)->flags.use_udp) -#define memcached_is_verify_key(__object) ((__object)->flags.verify_key) -#define memcached_is_binary(__object) ((__object)->flags.binary_protocol) #define memcached_is_initialized(__object) ((__object)->options.is_initialized) #define memcached_is_purging(__object) ((__object)->state.is_purging) #define memcached_is_processing_input(__object) ((__object)->state.is_processing_input) +#define memcached_is_aes(__object) ((__object)->flags.is_aes) +#define memcached_is_udp(__object) ((__object)->flags.use_udp) +#define memcached_is_verify_key(__object) ((__object)->flags.verify_key) +#define memcached_is_binary(__object) ((__object)->flags.binary_protocol) +#define memcached_is_fetching_version(__object) ((__object)->flags.is_fetching_version) #define memcached_is_buffering(__object) ((__object)->flags.buffer_requests) #define memcached_is_replying(__object) ((__object)->flags.reply) +#define memcached_is_cas(__object) ((__object)->flags.reply) +#define memcached_is_randomize_replica_read(__object) ((__object)->flags.randomize_replica_read) +#define memcached_is_no_block(__object) ((__object)->flags.no_block) +#define memcached_is_hash_with_namespace(__object) ((__object)->flags.hash_with_namespace) +#define memcached_is_tcp_nodelay(__object) ((__object)->flags.tcp_nodelay) +#define memcached_is_auto_eject_hosts(__object) ((__object)->flags.auto_eject_hosts) +#define memcached_is_use_sort_hosts(__object) ((__object)->flags.use_sort_hosts) + +#define memcached_set_aes(__object, __flag) ((__object).flags.is_aes= __flag) +#define memcached_set_udp(__object, __flag) ((__object).flags.use_udp= __flag) +#define memcached_set_verify_key(__object, __flag) ((__object).flags.verify_key= __flag) +#define memcached_set_binary(__object, __flag) ((__object).flags.binary_protocol= __flag) +#define memcached_set_fetching_version(__object, __flag) ((__object).flags.is_fetching_version= __flag) +#define memcached_set_buffering(__object, __flag) ((__object).flags.buffer_requests= __flag) +#define memcached_set_replying(__object, __flag) ((__object).flags.reply= __flag) +#define memcached_set_cas(__object, __flag) ((__object).flags.reply= __flag) +#define memcached_set_randomize_replica_read(__object, __flag) ((__object).flags.randomize_replica_read= __flag) +#define memcached_set_no_block(__object, __flag) ((__object).flags.no_block= __flag) +#define memcached_set_hash_with_namespace(__object, __flag) ((__object).flags.hash_with_namespace= __flag) +#define memcached_set_tcp_nodelay(__object, __flag) ((__object).flags.tcp_nodelay= __flag) +#define memcached_set_auto_eject_hosts(__object, __flag) ((__object).flags.auto_eject_hosts= __flag) +#define memcached_set_use_sort_hosts(__object, __flag) ((__object).flags.use_sort_hosts= __flag) + +#define memcached_has_root(__object) ((__object)->root) #define memcached_has_error(__object) ((__object)->error_messages) diff --git a/libmemcached/memcached.cc b/libmemcached/memcached.cc index 5f57c515..3504b23a 100644 --- a/libmemcached/memcached.cc +++ b/libmemcached/memcached.cc @@ -59,6 +59,8 @@ static inline bool _memcached_init(memcached_st *self) self->flags.use_udp= false; self->flags.verify_key= false; self->flags.tcp_keepalive= false; + self->flags.is_aes= false; + self->flags.is_fetching_version= false; self->virtual_bucket= NULL; diff --git a/libmemcached/version.cc b/libmemcached/version.cc index 5772ef2c..e9a54050 100644 --- a/libmemcached/version.cc +++ b/libmemcached/version.cc @@ -143,23 +143,85 @@ static inline memcached_return_t memcached_version_binary(memcached_st *ptr) return errors_happened ? MEMCACHED_SOME_ERRORS : MEMCACHED_SUCCESS; } -memcached_return_t memcached_version(memcached_st *ptr) +static inline void version_ascii_instance(org::libmemcached::Instance* instance) { - memcached_return_t rc; - if (memcached_failed(rc= initialize_query(ptr, true))) + if (instance->major_version != UINT8_MAX) { - return rc; + libmemcached_io_vector_st vector[]= + { + { memcached_literal_param("version\r\n") }, + }; + + (void)memcached_vdo(instance, vector, 1, false); } +} - if (memcached_is_udp(ptr)) +static inline void version_binary_instance(org::libmemcached::Instance* instance) +{ + if (instance->major_version != UINT8_MAX) { - return MEMCACHED_NOT_SUPPORTED; + protocol_binary_request_version request= {}; + + request.message.header.request.opcode= PROTOCOL_BINARY_CMD_VERSION; + request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES; + + libmemcached_io_vector_st vector[]= + { + { request.bytes, sizeof(request.bytes) } + }; + + initialize_binary_request(instance, request.message.header); + + (void)memcached_vdo(instance, vector, 1, false); + } +} + +void memcached_version_instance(org::libmemcached::Instance* instance) +{ + if (instance) + { + if (memcached_has_root(instance)) + { + if (memcached_is_fetching_version(instance->root)) + { + if (memcached_is_udp(instance->root) == false) + { + + if (memcached_is_binary(instance->root)) + { + version_binary_instance(instance); + return; + } + + version_ascii_instance(instance); + } + } + } } +} - if (memcached_is_binary(ptr)) +memcached_return_t memcached_version(memcached_st *ptr) +{ + if (ptr) { - return memcached_version_binary(ptr); + memcached_return_t rc; + if (memcached_failed(rc= initialize_query(ptr, true))) + { + return rc; + } + + if (memcached_is_udp(ptr)) + { + return MEMCACHED_NOT_SUPPORTED; + } + + if (memcached_is_binary(ptr)) + { + return memcached_version_binary(ptr); + } + + return memcached_version_textual(ptr); } - return memcached_version_textual(ptr); + return MEMCACHED_INVALID_ARGUMENTS; } diff --git a/libmemcached/version.hpp b/libmemcached/version.hpp new file mode 100644 index 00000000..b4a8234b --- /dev/null +++ b/libmemcached/version.hpp @@ -0,0 +1,44 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * LibMemcached + * + * Copyright (C) 2012 Data Differential, http://datadifferential.com/ All + * rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + Common include file for libmemached +*/ + +#pragma once + +void memcached_version_instance(org::libmemcached::Instance*); diff --git a/libtest/port.cc b/libtest/port.cc index 17e03e49..01e0e88b 100644 --- a/libtest/port.cc +++ b/libtest/port.cc @@ -120,7 +120,7 @@ in_port_t get_free_port() int retries= 1024; - while (retries--) + while (--retries) { int sd; if ((sd= socket(AF_INET, SOCK_STREAM, 0)) != -1) @@ -155,11 +155,21 @@ in_port_t get_free_port() } // We handle the case where if we max out retries, we still abort. - if (ret_port <= 1024) + if (retries == 0) + { + fatal_message("No port could be found, exhausted retry"); + } + + if (ret_port == 0) { fatal_message("No port could be found"); } + if (ret_port <= 1024) + { + fatal_message("No port could be found, though some where available below or at 1024"); + } + return ret_port; } diff --git a/tests/libmemcached-1.0/parser.cc b/tests/libmemcached-1.0/parser.cc index 3cacd26c..fc9d3375 100644 --- a/tests/libmemcached-1.0/parser.cc +++ b/tests/libmemcached-1.0/parser.cc @@ -188,6 +188,7 @@ scanner_variable_t test_number_options[]= { }; scanner_variable_t test_boolean_options[]= { + { ARRAY, make_scanner_string("--FETCH-VERSION"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--BINARY-PROTOCOL"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--BUFFER-REQUESTS"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--HASH-WITH-NAMESPACE"), scanner_string_null, NULL }, diff --git a/tests/libmemcached-1.0/replication.cc b/tests/libmemcached-1.0/replication.cc index 8f2423c3..198b83cc 100644 --- a/tests/libmemcached-1.0/replication.cc +++ b/tests/libmemcached-1.0/replication.cc @@ -293,10 +293,15 @@ test_return_t replication_delete_test(memcached_st *memc_just_cloned) /* Delete the items from all of the servers except 1, we use the non replicated memc so that we know we deleted the keys */ for (size_t x= 0; x < test_array_length(keys); ++x) { - test_compare(MEMCACHED_SUCCESS, - memcached_delete(memc_replicated, - test_string_make_from_cstr(keys[x]), // Keys - 0)); + memcached_return_t del_rc= memcached_delete(memc_replicated, + test_string_make_from_cstr(keys[x]), // Keys + 0); + if (del_rc == MEMCACHED_SUCCESS or del_rc == MEMCACHED_NOTFOUND) + { } + else + { + test_compare(MEMCACHED_SUCCESS, del_rc); + } } test_compare(TEST_SUCCESS, confirm_keys_dont_exist(memc_replicated, keys, test_array_length(keys))); -- 2.30.2