From 749b23a190d7159641440f918b0f6e2f82de8e65 Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 25 Nov 2017 23:12:47 +0100 Subject: [PATCH 1/5] Fix support for pickling NodePaths (broken in 1b1d80c) Fixes: #199 --- panda/src/pgraph/nodePath_ext.cxx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/panda/src/pgraph/nodePath_ext.cxx b/panda/src/pgraph/nodePath_ext.cxx index e9a9406223..5b63c896ff 100644 --- a/panda/src/pgraph/nodePath_ext.cxx +++ b/panda/src/pgraph/nodePath_ext.cxx @@ -130,7 +130,7 @@ __reduce_persist__(PyObject *self, PyObject *pickler) const { } // Start by getting this class object. - PyObject *this_class = PyObject_Type(self); + PyObject *this_class = (PyObject *)Py_TYPE(self); if (this_class == NULL) { return NULL; } @@ -143,7 +143,6 @@ __reduce_persist__(PyObject *self, PyObject *pickler) const { func = Extension::find_global_decode(this_class, "py_decode_NodePath_from_bam_stream_persist"); if (func == NULL) { PyErr_SetString(PyExc_TypeError, "Couldn't find py_decode_NodePath_from_bam_stream_persist()"); - Py_DECREF(this_class); return NULL; } @@ -153,15 +152,13 @@ __reduce_persist__(PyObject *self, PyObject *pickler) const { func = Extension::find_global_decode(this_class, "py_decode_NodePath_from_bam_stream"); if (func == NULL) { PyErr_SetString(PyExc_TypeError, "Couldn't find py_decode_NodePath_from_bam_stream()"); - Py_DECREF(this_class); return NULL; } } // PyTuple_SET_ITEM conveniently borrows the reference it is passed. - PyObject *args = PyTuple_New(2); - PyTuple_SET_ITEM(args, 0, this_class); - PyTuple_SET_ITEM(args, 1, Dtool_WrapValue(bam_stream)); + PyObject *args = PyTuple_New(1); + PyTuple_SET_ITEM(args, 0, Dtool_WrapValue(bam_stream)); PyObject *tuple = PyTuple_New(2); PyTuple_SET_ITEM(tuple, 0, func); From 3be22679a4aca1479982829ad4b00bd131e53350 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 26 Nov 2017 00:05:01 +0100 Subject: [PATCH 2/5] display: also avoid getting more than 24 color bits if 0 were requested See issue #197 --- panda/src/display/frameBufferProperties.cxx | 3 +- tests/display/test_fbprops.py | 43 ++++++++++++++------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/panda/src/display/frameBufferProperties.cxx b/panda/src/display/frameBufferProperties.cxx index 7ff16baed4..ea37cc4381 100644 --- a/panda/src/display/frameBufferProperties.cxx +++ b/panda/src/display/frameBufferProperties.cxx @@ -584,8 +584,7 @@ get_quality(const FrameBufferProperties &reqs) const { // However, deduct for color bits above 24, if we are requesting only 1. // This is to prevent choosing a 64-bit color mode in NVIDIA cards that // is linear and therefore causes the gamma to be off in non-sRGB pipelines. - if ((reqs._property[FBP_color_bits] == 1 || reqs._property[FBP_color_bits] == 3) && - _property[FBP_color_bits] > 24) { + if (reqs._property[FBP_color_bits] <= 3 && _property[FBP_color_bits] > 24) { quality -= 100; } diff --git a/tests/display/test_fbprops.py b/tests/display/test_fbprops.py index 372f4f099f..a4620efdfc 100644 --- a/tests/display/test_fbprops.py +++ b/tests/display/test_fbprops.py @@ -53,18 +53,31 @@ def test_fbquality_rgba64(): # This issue occurs if we are requesting 1 bit, not if we are requesting # a specific amount. There are several ways to do that, so we want to # assert that none of them will yield a 64-bit color buffer. - req_color = FrameBufferProperties() - req_color.color_bits = 1 + req_color0 = FrameBufferProperties() + req_color0.color_bits = 0 - req_color_alpha = FrameBufferProperties() - req_color_alpha.color_bits = 1 - req_color_alpha.alpha_bits = 1 + req_color1 = FrameBufferProperties() + req_color1.color_bits = 1 - req_rgb = FrameBufferProperties() - req_rgb.set_rgba_bits(1, 1, 1, 0) + req_color0_alpha0 = FrameBufferProperties() + req_color0_alpha0.color_bits = 0 + req_color0_alpha0.alpha_bits = 0 - req_rgb_alpha = FrameBufferProperties() - req_rgb_alpha.set_rgba_bits(1, 1, 1, 1) + req_color1_alpha1 = FrameBufferProperties() + req_color1_alpha1.color_bits = 1 + req_color1_alpha1.alpha_bits = 1 + + req_rgb0 = FrameBufferProperties() + req_rgb0.set_rgba_bits(0, 0, 0, 0) + + req_rgb1 = FrameBufferProperties() + req_rgb1.set_rgba_bits(1, 1, 1, 0) + + req_rgb0_alpha0 = FrameBufferProperties() + req_rgb0_alpha0.set_rgba_bits(0, 0, 0, 0) + + req_rgb1_alpha1 = FrameBufferProperties() + req_rgb1_alpha1.set_rgba_bits(1, 1, 1, 1) fb_rgba8 = FrameBufferProperties() fb_rgba8.rgb_color = True @@ -74,7 +87,11 @@ def test_fbquality_rgba64(): fb_rgba16.rgb_color = True fb_rgba16.set_rgba_bits(16, 16, 16, 16) - assert fb_rgba8.get_quality(req_color) > fb_rgba16.get_quality(req_color) - assert fb_rgba8.get_quality(req_color_alpha) > fb_rgba16.get_quality(req_color_alpha) - assert fb_rgba8.get_quality(req_rgb) > fb_rgba16.get_quality(req_rgb) - assert fb_rgba8.get_quality(req_rgb_alpha) > fb_rgba16.get_quality(req_rgb_alpha) + assert fb_rgba8.get_quality(req_color0) > fb_rgba16.get_quality(req_color0) + assert fb_rgba8.get_quality(req_color1) > fb_rgba16.get_quality(req_color1) + assert fb_rgba8.get_quality(req_color0_alpha0) > fb_rgba16.get_quality(req_color0_alpha0) + assert fb_rgba8.get_quality(req_color1_alpha1) > fb_rgba16.get_quality(req_color1_alpha1) + assert fb_rgba8.get_quality(req_rgb0) > fb_rgba16.get_quality(req_rgb0) + assert fb_rgba8.get_quality(req_rgb1) > fb_rgba16.get_quality(req_rgb1) + assert fb_rgba8.get_quality(req_rgb0_alpha0) > fb_rgba16.get_quality(req_rgb0_alpha0) + assert fb_rgba8.get_quality(req_rgb1_alpha1) > fb_rgba16.get_quality(req_rgb1_alpha1) From 567463eab38a0f9eeb3eccdc8665dab07af732f6 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 26 Nov 2017 23:36:50 +0100 Subject: [PATCH 3/5] makepanda: look for vorbis library without _static suffix Fixes: #202 --- makepanda/makepanda.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index 1f3c93ad3c..75e4ecfe45 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -705,9 +705,11 @@ if (COMPILER == "MSVC"): DefSymbol("WX", "_UNICODE", "") DefSymbol("WX", "UNICODE", "") if (PkgSkip("VORBIS")==0): - LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libogg_static.lib") - LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libvorbis_static.lib") - LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libvorbisfile_static.lib") + for lib in ('ogg', 'vorbis', 'vorbisfile'): + path = GetThirdpartyDir() + "vorbis/lib/lib{0}_static.lib".format(lib) + if not os.path.isfile(path): + path = GetThirdpartyDir() + "vorbis/lib/{0}.lib".format(lib) + LibName("VORBIS", path) if (PkgSkip("OPUS")==0): LibName("OPUS", GetThirdpartyDir() + "opus/lib/libogg_static.lib") LibName("OPUS", GetThirdpartyDir() + "opus/lib/libopus_static.lib") From 69b3468b2c40111def34e4b609a0aa36267c5582 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 27 Nov 2017 01:39:58 +0100 Subject: [PATCH 4/5] interrogate: more improvements to seq/map wrappers Gets rid of properties defined as both MAKE_SEQ_PROPERTY/MAKE_MAP_PROPERTY, which are just a bad idea. Instead, adds a way for map properties to define a separate "keys" interface. Fixes: #203 --- dtool/src/cppparser/cppBison.cxx.prebuilt | 8878 +++++++++-------- dtool/src/cppparser/cppBison.h.prebuilt | 182 +- dtool/src/cppparser/cppBison.yxx | 78 + dtool/src/cppparser/cppMakeProperty.cxx | 8 +- dtool/src/cppparser/cppMakeProperty.h | 2 + dtool/src/cppparser/cppPreprocessor.cxx | 1 + dtool/src/dtoolbase/dtoolbase.h | 2 + dtool/src/interrogate/interfaceMaker.cxx | 2 + dtool/src/interrogate/interfaceMaker.h | 2 + .../interfaceMakerPythonNative.cxx | 218 +- dtool/src/interrogate/interrogateBuilder.cxx | 95 +- .../src/interrogatedb/interrogateDatabase.cxx | 2 +- dtool/src/interrogatedb/interrogateElement.I | 36 + .../src/interrogatedb/interrogateElement.cxx | 9 +- dtool/src/interrogatedb/interrogateElement.h | 8 + .../p3interrogatedb_composite2.cxx | 5 +- dtool/src/interrogatedb/py_panda.cxx | 973 +- dtool/src/interrogatedb/py_panda.h | 45 +- dtool/src/interrogatedb/py_wrappers.cxx | 1671 ++++ dtool/src/interrogatedb/py_wrappers.h | 74 + dtool/src/pystub/pystub.cxx | 10 + panda/src/chan/animGroup.h | 1 - panda/src/chan/partGroup.h | 1 - panda/src/collide/collisionNode.I | 32 +- panda/src/collide/collisionNode.h | 15 +- panda/src/egg/eggCompositePrimitive.I | 14 +- panda/src/egg/eggCompositePrimitive.h | 8 +- panda/src/egg/eggPrimitive.I | 12 +- panda/src/egg/eggPrimitive.h | 5 +- panda/src/gobj/geom.I | 23 +- panda/src/gobj/geom.cxx | 20 +- panda/src/gobj/geom.h | 15 +- panda/src/gobj/geomVertexData.I | 20 +- panda/src/gobj/geomVertexData.cxx | 8 +- panda/src/gobj/geomVertexData.h | 18 +- panda/src/gobj/geomVertexFormat.cxx | 20 +- panda/src/gobj/geomVertexFormat.h | 5 +- panda/src/gobj/transformBlend.h | 2 +- panda/src/gobj/transformTable.cxx | 17 + panda/src/gobj/transformTable.h | 4 +- .../parametrics/parametricCurveCollection.I | 9 + .../parametrics/parametricCurveCollection.cxx | 12 +- .../parametrics/parametricCurveCollection.h | 5 +- panda/src/pgraph/nodePath.h | 3 +- panda/src/pgraph/nodePath_ext.I | 1 + panda/src/pgraph/nodePath_ext.cxx | 25 + panda/src/pgraph/nodePath_ext.h | 1 + panda/src/pgraph/pandaNode.I | 48 +- panda/src/pgraph/pandaNode.cxx | 75 +- panda/src/pgraph/pandaNode.h | 11 +- panda/src/pgraph/renderEffects.I | 32 +- panda/src/pgraph/renderEffects.h | 8 +- panda/src/pgraph/textureAttrib.h | 8 +- panda/src/pgraphnodes/computeNode.I | 15 + panda/src/pgraphnodes/computeNode.h | 3 +- panda/src/physics/forceNode.cxx | 18 +- panda/src/physics/forceNode.h | 3 +- panda/src/physics/physicalNode.cxx | 17 +- panda/src/physics/physicalNode.h | 4 +- panda/src/putil/simpleHashMap.I | 64 + panda/src/putil/simpleHashMap.h | 4 + tests/interrogate/test_property.py | 157 + 62 files changed, 7323 insertions(+), 5741 deletions(-) create mode 100755 dtool/src/interrogatedb/py_wrappers.cxx create mode 100755 dtool/src/interrogatedb/py_wrappers.h diff --git a/dtool/src/cppparser/cppBison.cxx.prebuilt b/dtool/src/cppparser/cppBison.cxx.prebuilt index f93ae67fdd..2167d06578 100644 --- a/dtool/src/cppparser/cppBison.cxx.prebuilt +++ b/dtool/src/cppparser/cppBison.cxx.prebuilt @@ -397,51 +397,52 @@ extern int cppyydebug; KW_IS_TRIVIAL = 353, KW_IS_UNION = 354, KW_LONG = 355, - KW_MAKE_MAP_PROPERTY = 356, - KW_MAKE_PROPERTY = 357, - KW_MAKE_PROPERTY2 = 358, - KW_MAKE_SEQ = 359, - KW_MAKE_SEQ_PROPERTY = 360, - KW_MUTABLE = 361, - KW_NAMESPACE = 362, - KW_NEW = 363, - KW_NOEXCEPT = 364, - KW_NULLPTR = 365, - KW_OPERATOR = 366, - KW_OVERRIDE = 367, - KW_PRIVATE = 368, - KW_PROTECTED = 369, - KW_PUBLIC = 370, - KW_REGISTER = 371, - KW_REINTERPRET_CAST = 372, - KW_RETURN = 373, - KW_SHORT = 374, - KW_SIGNED = 375, - KW_SIZEOF = 376, - KW_STATIC = 377, - KW_STATIC_ASSERT = 378, - KW_STATIC_CAST = 379, - KW_STRUCT = 380, - KW_TEMPLATE = 381, - KW_THREAD_LOCAL = 382, - KW_THROW = 383, - KW_TRUE = 384, - KW_TRY = 385, - KW_TYPEDEF = 386, - KW_TYPEID = 387, - KW_TYPENAME = 388, - KW_UNDERLYING_TYPE = 389, - KW_UNION = 390, - KW_UNSIGNED = 391, - KW_USING = 392, - KW_VIRTUAL = 393, - KW_VOID = 394, - KW_VOLATILE = 395, - KW_WCHAR_T = 396, - KW_WHILE = 397, - START_CPP = 398, - START_CONST_EXPR = 399, - START_TYPE = 400 + KW_MAKE_MAP_KEYS_SEQ = 356, + KW_MAKE_MAP_PROPERTY = 357, + KW_MAKE_PROPERTY = 358, + KW_MAKE_PROPERTY2 = 359, + KW_MAKE_SEQ = 360, + KW_MAKE_SEQ_PROPERTY = 361, + KW_MUTABLE = 362, + KW_NAMESPACE = 363, + KW_NEW = 364, + KW_NOEXCEPT = 365, + KW_NULLPTR = 366, + KW_OPERATOR = 367, + KW_OVERRIDE = 368, + KW_PRIVATE = 369, + KW_PROTECTED = 370, + KW_PUBLIC = 371, + KW_REGISTER = 372, + KW_REINTERPRET_CAST = 373, + KW_RETURN = 374, + KW_SHORT = 375, + KW_SIGNED = 376, + KW_SIZEOF = 377, + KW_STATIC = 378, + KW_STATIC_ASSERT = 379, + KW_STATIC_CAST = 380, + KW_STRUCT = 381, + KW_TEMPLATE = 382, + KW_THREAD_LOCAL = 383, + KW_THROW = 384, + KW_TRUE = 385, + KW_TRY = 386, + KW_TYPEDEF = 387, + KW_TYPEID = 388, + KW_TYPENAME = 389, + KW_UNDERLYING_TYPE = 390, + KW_UNION = 391, + KW_UNSIGNED = 392, + KW_USING = 393, + KW_VIRTUAL = 394, + KW_VOID = 395, + KW_VOLATILE = 396, + KW_WCHAR_T = 397, + KW_WHILE = 398, + START_CPP = 399, + START_CONST_EXPR = 400, + START_TYPE = 401 }; #endif /* Tokens. */ @@ -543,51 +544,52 @@ extern int cppyydebug; #define KW_IS_TRIVIAL 353 #define KW_IS_UNION 354 #define KW_LONG 355 -#define KW_MAKE_MAP_PROPERTY 356 -#define KW_MAKE_PROPERTY 357 -#define KW_MAKE_PROPERTY2 358 -#define KW_MAKE_SEQ 359 -#define KW_MAKE_SEQ_PROPERTY 360 -#define KW_MUTABLE 361 -#define KW_NAMESPACE 362 -#define KW_NEW 363 -#define KW_NOEXCEPT 364 -#define KW_NULLPTR 365 -#define KW_OPERATOR 366 -#define KW_OVERRIDE 367 -#define KW_PRIVATE 368 -#define KW_PROTECTED 369 -#define KW_PUBLIC 370 -#define KW_REGISTER 371 -#define KW_REINTERPRET_CAST 372 -#define KW_RETURN 373 -#define KW_SHORT 374 -#define KW_SIGNED 375 -#define KW_SIZEOF 376 -#define KW_STATIC 377 -#define KW_STATIC_ASSERT 378 -#define KW_STATIC_CAST 379 -#define KW_STRUCT 380 -#define KW_TEMPLATE 381 -#define KW_THREAD_LOCAL 382 -#define KW_THROW 383 -#define KW_TRUE 384 -#define KW_TRY 385 -#define KW_TYPEDEF 386 -#define KW_TYPEID 387 -#define KW_TYPENAME 388 -#define KW_UNDERLYING_TYPE 389 -#define KW_UNION 390 -#define KW_UNSIGNED 391 -#define KW_USING 392 -#define KW_VIRTUAL 393 -#define KW_VOID 394 -#define KW_VOLATILE 395 -#define KW_WCHAR_T 396 -#define KW_WHILE 397 -#define START_CPP 398 -#define START_CONST_EXPR 399 -#define START_TYPE 400 +#define KW_MAKE_MAP_KEYS_SEQ 356 +#define KW_MAKE_MAP_PROPERTY 357 +#define KW_MAKE_PROPERTY 358 +#define KW_MAKE_PROPERTY2 359 +#define KW_MAKE_SEQ 360 +#define KW_MAKE_SEQ_PROPERTY 361 +#define KW_MUTABLE 362 +#define KW_NAMESPACE 363 +#define KW_NEW 364 +#define KW_NOEXCEPT 365 +#define KW_NULLPTR 366 +#define KW_OPERATOR 367 +#define KW_OVERRIDE 368 +#define KW_PRIVATE 369 +#define KW_PROTECTED 370 +#define KW_PUBLIC 371 +#define KW_REGISTER 372 +#define KW_REINTERPRET_CAST 373 +#define KW_RETURN 374 +#define KW_SHORT 375 +#define KW_SIGNED 376 +#define KW_SIZEOF 377 +#define KW_STATIC 378 +#define KW_STATIC_ASSERT 379 +#define KW_STATIC_CAST 380 +#define KW_STRUCT 381 +#define KW_TEMPLATE 382 +#define KW_THREAD_LOCAL 383 +#define KW_THROW 384 +#define KW_TRUE 385 +#define KW_TRY 386 +#define KW_TYPEDEF 387 +#define KW_TYPEID 388 +#define KW_TYPENAME 389 +#define KW_UNDERLYING_TYPE 390 +#define KW_UNION 391 +#define KW_UNSIGNED 392 +#define KW_USING 393 +#define KW_VIRTUAL 394 +#define KW_VOID 395 +#define KW_VOLATILE 396 +#define KW_WCHAR_T 397 +#define KW_WHILE 398 +#define START_CPP 399 +#define START_CONST_EXPR 400 +#define START_TYPE 401 /* Value type. */ @@ -613,7 +615,7 @@ int cppyyparse (void); /* Copy the second part of user declarations. */ -#line 617 "built/tmp/cppBison.yxx.c" /* yacc.c:358 */ +#line 619 "built/tmp/cppBison.yxx.c" /* yacc.c:358 */ #ifdef short # undef short @@ -857,21 +859,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 104 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 7153 +#define YYLAST 7127 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 170 +#define YYNTOKENS 171 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 110 /* YYNRULES -- Number of rules. */ -#define YYNRULES 761 +#define YYNRULES 763 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1557 +#define YYNSTATES 1570 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 400 +#define YYMAXUTOK 401 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -883,16 +885,16 @@ 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, 2, 168, 2, 2, 2, 161, 154, 2, - 164, 166, 159, 157, 147, 158, 163, 160, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 149, 148, - 155, 150, 156, 151, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 169, 2, 2, 2, 162, 155, 2, + 165, 167, 160, 158, 148, 159, 164, 161, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 150, 149, + 156, 151, 157, 152, 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, 165, 2, 169, 153, 2, 2, 2, 2, 2, + 2, 166, 2, 170, 154, 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, 146, 152, 167, 162, 2, 2, 2, + 2, 2, 2, 147, 153, 168, 163, 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, @@ -920,90 +922,90 @@ static const yytype_uint8 yytranslate[] = 115, 116, 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, - 145 + 145, 146 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 449, 449, 450, 454, 461, 462, 463, 467, 468, - 472, 476, 480, 493, 492, 504, 505, 506, 507, 508, - 509, 510, 523, 532, 536, 544, 548, 552, 573, 600, - 621, 650, 686, 698, 719, 755, 777, 813, 835, 846, - 860, 859, 874, 878, 883, 887, 898, 902, 906, 910, - 914, 918, 922, 926, 930, 934, 938, 942, 947, 951, - 958, 959, 963, 964, 965, 970, 969, 985, 995, 994, - 1011, 1019, 1027, 1038, 1054, 1053, 1068, 1083, 1092, 1107, - 1106, 1131, 1130, 1158, 1157, 1188, 1187, 1206, 1205, 1226, - 1225, 1257, 1256, 1282, 1295, 1299, 1303, 1307, 1320, 1324, - 1328, 1332, 1336, 1341, 1346, 1350, 1354, 1358, 1365, 1369, - 1373, 1377, 1381, 1385, 1389, 1393, 1397, 1401, 1405, 1409, - 1413, 1417, 1421, 1425, 1429, 1433, 1437, 1441, 1445, 1449, - 1453, 1457, 1461, 1465, 1469, 1473, 1477, 1481, 1485, 1489, - 1493, 1497, 1501, 1505, 1509, 1513, 1517, 1524, 1525, 1526, - 1530, 1532, 1531, 1539, 1540, 1544, 1545, 1549, 1555, 1564, - 1565, 1569, 1573, 1577, 1581, 1587, 1593, 1599, 1606, 1611, - 1620, 1624, 1629, 1637, 1649, 1653, 1667, 1682, 1687, 1692, - 1697, 1702, 1707, 1712, 1717, 1723, 1722, 1753, 1763, 1773, - 1777, 1781, 1790, 1794, 1802, 1806, 1811, 1815, 1820, 1828, - 1833, 1841, 1845, 1850, 1854, 1859, 1867, 1872, 1880, 1884, - 1891, 1895, 1902, 1906, 1910, 1914, 1918, 1925, 1929, 1933, - 1937, 1941, 1945, 1952, 1953, 1954, 1958, 1961, 1962, 1963, - 1967, 1972, 1978, 1984, 1989, 1995, 2001, 2005, 2016, 2020, - 2030, 2034, 2038, 2043, 2048, 2053, 2058, 2063, 2068, 2076, - 2080, 2084, 2089, 2094, 2099, 2104, 2109, 2114, 2119, 2125, - 2133, 2138, 2143, 2148, 2153, 2158, 2163, 2168, 2173, 2178, - 2184, 2192, 2196, 2201, 2206, 2211, 2216, 2221, 2226, 2231, - 2236, 2244, 2248, 2253, 2258, 2263, 2268, 2273, 2278, 2283, - 2288, 2293, 2299, 2306, 2313, 2323, 2327, 2335, 2339, 2343, - 2347, 2351, 2367, 2383, 2392, 2396, 2406, 2413, 2424, 2428, - 2436, 2440, 2444, 2448, 2452, 2468, 2484, 2502, 2511, 2515, - 2525, 2532, 2536, 2544, 2548, 2564, 2580, 2589, 2599, 2606, - 2610, 2618, 2622, 2627, 2631, 2639, 2640, 2641, 2642, 2647, - 2646, 2671, 2670, 2700, 2701, 2708, 2709, 2713, 2714, 2718, - 2722, 2726, 2730, 2734, 2738, 2742, 2746, 2750, 2754, 2761, - 2769, 2773, 2777, 2782, 2790, 2794, 2801, 2802, 2807, 2814, - 2815, 2820, 2828, 2832, 2836, 2843, 2847, 2851, 2859, 2858, - 2881, 2880, 2903, 2904, 2908, 2914, 2921, 2930, 2931, 2932, - 2936, 2940, 2944, 2948, 2952, 2956, 2961, 2966, 2971, 2976, - 2980, 2985, 2994, 2999, 3007, 3011, 3015, 3023, 3033, 3033, - 3043, 3044, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, - 3056, 3057, 3058, 3059, 3059, 3059, 3060, 3060, 3060, 3060, - 3061, 3061, 3061, 3061, 3061, 3062, 3062, 3062, 3063, 3063, - 3063, 3063, 3063, 3064, 3064, 3064, 3064, 3064, 3065, 3065, - 3066, 3066, 3066, 3066, 3066, 3067, 3067, 3067, 3067, 3067, - 3068, 3068, 3068, 3068, 3069, 3069, 3069, 3069, 3069, 3070, - 3070, 3070, 3070, 3070, 3071, 3071, 3071, 3071, 3071, 3071, - 3072, 3072, 3072, 3072, 3072, 3073, 3073, 3073, 3073, 3074, - 3074, 3074, 3074, 3075, 3075, 3075, 3075, 3075, 3076, 3076, - 3076, 3076, 3077, 3077, 3077, 3077, 3077, 3078, 3078, 3078, - 3078, 3079, 3079, 3079, 3079, 3079, 3080, 3080, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3084, - 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3085, - 3085, 3089, 3093, 3100, 3104, 3111, 3115, 3122, 3126, 3130, - 3134, 3138, 3142, 3146, 3150, 3162, 3166, 3170, 3174, 3178, - 3182, 3186, 3190, 3194, 3198, 3202, 3206, 3210, 3214, 3218, - 3222, 3226, 3230, 3234, 3238, 3242, 3246, 3250, 3254, 3258, - 3262, 3266, 3270, 3274, 3278, 3282, 3290, 3294, 3298, 3302, - 3306, 3310, 3314, 3324, 3334, 3340, 3346, 3352, 3358, 3364, - 3370, 3377, 3384, 3391, 3398, 3404, 3410, 3414, 3426, 3430, - 3434, 3438, 3442, 3453, 3464, 3468, 3472, 3476, 3480, 3484, - 3488, 3492, 3496, 3500, 3504, 3508, 3512, 3516, 3520, 3524, - 3528, 3532, 3536, 3540, 3544, 3548, 3552, 3556, 3560, 3564, - 3568, 3572, 3576, 3580, 3584, 3591, 3595, 3599, 3603, 3607, - 3611, 3615, 3619, 3623, 3629, 3635, 3639, 3645, 3652, 3656, - 3660, 3664, 3668, 3672, 3676, 3680, 3684, 3688, 3692, 3696, - 3700, 3704, 3708, 3712, 3716, 3730, 3734, 3738, 3742, 3746, - 3750, 3754, 3758, 3770, 3774, 3778, 3782, 3786, 3797, 3808, - 3812, 3816, 3820, 3824, 3828, 3832, 3836, 3840, 3844, 3848, - 3852, 3856, 3860, 3864, 3868, 3872, 3876, 3880, 3884, 3888, - 3892, 3896, 3900, 3904, 3908, 3912, 3916, 3920, 3924, 3931, - 3935, 3939, 3943, 3947, 3951, 3955, 3959, 3963, 3969, 3975, - 3983, 3987, 3991, 3995, 4002, 4012, 4018, 4024, 4034, 4046, - 4054, 4058, 4088, 4092, 4096, 4100, 4104, 4108, 4114, 4118, - 4122, 4126, 4130, 4141, 4145, 4149, 4153, 4161, 4165, 4169, - 4175, 4186 + 0, 450, 450, 451, 455, 462, 463, 464, 468, 469, + 473, 477, 481, 494, 493, 505, 506, 507, 508, 509, + 510, 511, 524, 533, 537, 545, 549, 553, 574, 601, + 622, 651, 687, 730, 742, 763, 799, 833, 855, 891, + 913, 924, 938, 937, 952, 956, 961, 965, 976, 980, + 984, 988, 992, 996, 1000, 1004, 1008, 1012, 1016, 1020, + 1025, 1029, 1036, 1037, 1041, 1042, 1043, 1048, 1047, 1063, + 1073, 1072, 1089, 1097, 1105, 1116, 1132, 1131, 1146, 1161, + 1170, 1185, 1184, 1209, 1208, 1236, 1235, 1266, 1265, 1284, + 1283, 1304, 1303, 1335, 1334, 1360, 1373, 1377, 1381, 1385, + 1398, 1402, 1406, 1410, 1414, 1419, 1424, 1428, 1432, 1436, + 1443, 1447, 1451, 1455, 1459, 1463, 1467, 1471, 1475, 1479, + 1483, 1487, 1491, 1495, 1499, 1503, 1507, 1511, 1515, 1519, + 1523, 1527, 1531, 1535, 1539, 1543, 1547, 1551, 1555, 1559, + 1563, 1567, 1571, 1575, 1579, 1583, 1587, 1591, 1595, 1602, + 1603, 1604, 1608, 1610, 1609, 1617, 1618, 1622, 1623, 1627, + 1633, 1642, 1643, 1647, 1651, 1655, 1659, 1665, 1671, 1677, + 1684, 1689, 1698, 1702, 1707, 1715, 1727, 1731, 1745, 1760, + 1765, 1770, 1775, 1780, 1785, 1790, 1795, 1801, 1800, 1831, + 1841, 1851, 1855, 1859, 1868, 1872, 1880, 1884, 1889, 1893, + 1898, 1906, 1911, 1919, 1923, 1928, 1932, 1937, 1945, 1950, + 1958, 1962, 1969, 1973, 1980, 1984, 1988, 1992, 1996, 2003, + 2007, 2011, 2015, 2019, 2023, 2030, 2031, 2032, 2036, 2039, + 2040, 2041, 2045, 2050, 2056, 2062, 2067, 2073, 2079, 2083, + 2094, 2098, 2108, 2112, 2116, 2121, 2126, 2131, 2136, 2141, + 2146, 2154, 2158, 2162, 2167, 2172, 2177, 2182, 2187, 2192, + 2197, 2203, 2211, 2216, 2221, 2226, 2231, 2236, 2241, 2246, + 2251, 2256, 2262, 2270, 2274, 2279, 2284, 2289, 2294, 2299, + 2304, 2309, 2314, 2322, 2326, 2331, 2336, 2341, 2346, 2351, + 2356, 2361, 2366, 2371, 2377, 2384, 2391, 2401, 2405, 2413, + 2417, 2421, 2425, 2429, 2445, 2461, 2470, 2474, 2484, 2491, + 2502, 2506, 2514, 2518, 2522, 2526, 2530, 2546, 2562, 2580, + 2589, 2593, 2603, 2610, 2614, 2622, 2626, 2642, 2658, 2667, + 2677, 2684, 2688, 2696, 2700, 2705, 2709, 2717, 2718, 2719, + 2720, 2725, 2724, 2749, 2748, 2778, 2779, 2786, 2787, 2791, + 2792, 2796, 2800, 2804, 2808, 2812, 2816, 2820, 2824, 2828, + 2832, 2839, 2847, 2851, 2855, 2860, 2868, 2872, 2879, 2880, + 2885, 2892, 2893, 2898, 2906, 2910, 2914, 2921, 2925, 2929, + 2937, 2936, 2959, 2958, 2981, 2982, 2986, 2992, 2999, 3008, + 3009, 3010, 3014, 3018, 3022, 3026, 3030, 3034, 3039, 3044, + 3049, 3054, 3058, 3063, 3072, 3077, 3085, 3089, 3093, 3101, + 3111, 3111, 3121, 3122, 3126, 3127, 3128, 3129, 3130, 3131, + 3132, 3133, 3134, 3135, 3136, 3137, 3137, 3137, 3138, 3138, + 3138, 3138, 3139, 3139, 3139, 3139, 3139, 3140, 3140, 3140, + 3141, 3141, 3141, 3141, 3141, 3142, 3142, 3142, 3142, 3142, + 3143, 3143, 3144, 3144, 3144, 3144, 3144, 3145, 3145, 3145, + 3145, 3145, 3146, 3146, 3146, 3146, 3147, 3147, 3147, 3147, + 3147, 3148, 3148, 3148, 3148, 3148, 3149, 3149, 3149, 3149, + 3149, 3149, 3150, 3150, 3150, 3150, 3150, 3151, 3151, 3151, + 3151, 3152, 3152, 3152, 3152, 3153, 3153, 3153, 3153, 3153, + 3154, 3154, 3154, 3154, 3155, 3155, 3155, 3155, 3155, 3156, + 3156, 3156, 3156, 3157, 3157, 3157, 3157, 3157, 3158, 3158, + 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, + 3162, 3163, 3163, 3167, 3171, 3178, 3182, 3189, 3193, 3200, + 3204, 3208, 3212, 3216, 3220, 3224, 3228, 3240, 3244, 3248, + 3252, 3256, 3260, 3264, 3268, 3272, 3276, 3280, 3284, 3288, + 3292, 3296, 3300, 3304, 3308, 3312, 3316, 3320, 3324, 3328, + 3332, 3336, 3340, 3344, 3348, 3352, 3356, 3360, 3368, 3372, + 3376, 3380, 3384, 3388, 3392, 3402, 3412, 3418, 3424, 3430, + 3436, 3442, 3448, 3455, 3462, 3469, 3476, 3482, 3488, 3492, + 3504, 3508, 3512, 3516, 3520, 3531, 3542, 3546, 3550, 3554, + 3558, 3562, 3566, 3570, 3574, 3578, 3582, 3586, 3590, 3594, + 3598, 3602, 3606, 3610, 3614, 3618, 3622, 3626, 3630, 3634, + 3638, 3642, 3646, 3650, 3654, 3658, 3662, 3669, 3673, 3677, + 3681, 3685, 3689, 3693, 3697, 3701, 3707, 3713, 3717, 3723, + 3730, 3734, 3738, 3742, 3746, 3750, 3754, 3758, 3762, 3766, + 3770, 3774, 3778, 3782, 3786, 3790, 3794, 3808, 3812, 3816, + 3820, 3824, 3828, 3832, 3836, 3848, 3852, 3856, 3860, 3864, + 3875, 3886, 3890, 3894, 3898, 3902, 3906, 3910, 3914, 3918, + 3922, 3926, 3930, 3934, 3938, 3942, 3946, 3950, 3954, 3958, + 3962, 3966, 3970, 3974, 3978, 3982, 3986, 3990, 3994, 3998, + 4002, 4009, 4013, 4017, 4021, 4025, 4029, 4033, 4037, 4041, + 4047, 4053, 4061, 4065, 4069, 4073, 4080, 4090, 4096, 4102, + 4112, 4124, 4132, 4136, 4166, 4170, 4174, 4178, 4182, 4186, + 4192, 4196, 4200, 4204, 4208, 4219, 4223, 4227, 4231, 4239, + 4243, 4247, 4253, 4264 }; #endif @@ -1033,19 +1035,20 @@ static const char *const yytname[] = "KW_IS_CONVERTIBLE_TO", "KW_IS_DESTRUCTIBLE", "KW_IS_EMPTY", "KW_IS_ENUM", "KW_IS_FINAL", "KW_IS_FUNDAMENTAL", "KW_IS_POD", "KW_IS_POLYMORPHIC", "KW_IS_STANDARD_LAYOUT", "KW_IS_TRIVIAL", - "KW_IS_UNION", "KW_LONG", "KW_MAKE_MAP_PROPERTY", "KW_MAKE_PROPERTY", - "KW_MAKE_PROPERTY2", "KW_MAKE_SEQ", "KW_MAKE_SEQ_PROPERTY", "KW_MUTABLE", - "KW_NAMESPACE", "KW_NEW", "KW_NOEXCEPT", "KW_NULLPTR", "KW_OPERATOR", - "KW_OVERRIDE", "KW_PRIVATE", "KW_PROTECTED", "KW_PUBLIC", "KW_REGISTER", - "KW_REINTERPRET_CAST", "KW_RETURN", "KW_SHORT", "KW_SIGNED", "KW_SIZEOF", - "KW_STATIC", "KW_STATIC_ASSERT", "KW_STATIC_CAST", "KW_STRUCT", - "KW_TEMPLATE", "KW_THREAD_LOCAL", "KW_THROW", "KW_TRUE", "KW_TRY", - "KW_TYPEDEF", "KW_TYPEID", "KW_TYPENAME", "KW_UNDERLYING_TYPE", - "KW_UNION", "KW_UNSIGNED", "KW_USING", "KW_VIRTUAL", "KW_VOID", - "KW_VOLATILE", "KW_WCHAR_T", "KW_WHILE", "START_CPP", "START_CONST_EXPR", - "START_TYPE", "'{'", "','", "';'", "':'", "'='", "'?'", "'|'", "'^'", - "'&'", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'.'", - "'('", "'['", "')'", "'}'", "'!'", "']'", "$accept", "grammar", "cpp", + "KW_IS_UNION", "KW_LONG", "KW_MAKE_MAP_KEYS_SEQ", "KW_MAKE_MAP_PROPERTY", + "KW_MAKE_PROPERTY", "KW_MAKE_PROPERTY2", "KW_MAKE_SEQ", + "KW_MAKE_SEQ_PROPERTY", "KW_MUTABLE", "KW_NAMESPACE", "KW_NEW", + "KW_NOEXCEPT", "KW_NULLPTR", "KW_OPERATOR", "KW_OVERRIDE", "KW_PRIVATE", + "KW_PROTECTED", "KW_PUBLIC", "KW_REGISTER", "KW_REINTERPRET_CAST", + "KW_RETURN", "KW_SHORT", "KW_SIGNED", "KW_SIZEOF", "KW_STATIC", + "KW_STATIC_ASSERT", "KW_STATIC_CAST", "KW_STRUCT", "KW_TEMPLATE", + "KW_THREAD_LOCAL", "KW_THROW", "KW_TRUE", "KW_TRY", "KW_TYPEDEF", + "KW_TYPEID", "KW_TYPENAME", "KW_UNDERLYING_TYPE", "KW_UNION", + "KW_UNSIGNED", "KW_USING", "KW_VIRTUAL", "KW_VOID", "KW_VOLATILE", + "KW_WCHAR_T", "KW_WHILE", "START_CPP", "START_CONST_EXPR", "START_TYPE", + "'{'", "','", "';'", "':'", "'='", "'?'", "'|'", "'^'", "'&'", "'<'", + "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'.'", "'('", "'['", + "')'", "'}'", "'!'", "']'", "$accept", "grammar", "cpp", "constructor_inits", "constructor_init", "extern_c", "$@1", "declaration", "friend_declaration", "$@2", "storage_class", "attribute_specifiers", "attribute_specifier", "type_like_declaration", @@ -1102,18 +1105,19 @@ static const yytype_uint16 yytoknum[] = 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 123, 44, 59, 58, - 61, 63, 124, 94, 38, 60, 62, 43, 45, 42, - 47, 37, 126, 46, 40, 91, 41, 125, 33, 93 + 395, 396, 397, 398, 399, 400, 401, 123, 44, 59, + 58, 61, 63, 124, 94, 38, 60, 62, 43, 45, + 42, 47, 37, 126, 46, 40, 91, 41, 125, 33, + 93 }; # endif -#define YYPACT_NINF -923 +#define YYPACT_NINF -926 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-923))) + (!!((Yystate) == (-926))) -#define YYTABLE_NINF -757 +#define YYTABLE_NINF -759 #define yytable_value_is_error(Yytable_value) \ 0 @@ -1122,162 +1126,163 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 136, -923, 3707, 5786, 58, 4877, -923, -923, -923, -923, - -923, -923, -923, -923, -63, -85, -54, 20, 66, 72, - -79, 78, -12, -923, -923, 81, 129, 142, 146, 164, - 177, 187, 196, 203, 210, 227, 230, 232, 240, 242, - 244, 250, 266, 268, 6097, -923, -923, 100, 281, 287, - 23, 300, -923, 295, 304, 307, 3707, 3707, 3707, 3707, - 3707, 1818, 2827, 3707, 3915, -923, 326, -923, -923, -923, - -923, -923, -923, -923, -923, 5896, 310, -923, -3, -923, - -923, 4202, 7012, 7012, -923, 5440, 311, -923, 7012, -923, - -923, 337, 337, -923, -923, -923, -923, 15, 61, -923, - -923, -923, -923, -923, -923, 809, 314, -923, 6988, 6988, - 6988, -923, 6988, 5317, 6988, 170, -923, 6979, 319, 322, - 324, 335, 338, 6988, 5237, 312, 321, 341, 6988, 6988, - 340, 6815, 6988, 6988, 5905, 6988, 6988, -923, -923, -923, - -923, 4341, -923, -923, -923, -923, -923, 3707, 3707, 5786, - 3707, 3707, 3707, 3707, 5786, 3707, 5786, 3707, 5786, 3707, - 5786, 5786, 5786, 5786, 5786, 5786, 5786, 5786, 5786, 5786, - 5786, 5786, 5786, 5786, 5786, 3707, -923, -923, 342, 5440, - 343, 346, 5440, -923, -923, 5786, 3707, 3707, 347, 5405, - 5786, 1818, 3707, 3707, 76, 76, 76, 76, 76, -63, - -54, 20, 66, 72, 78, 81, 142, 4482, 5509, 5883, - 6759, 307, 339, -88, 3915, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, 5440, 5440, -104, - 362, -923, -923, 76, 3707, 3707, 3707, 3707, 3707, 3707, - 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, - 3707, 3707, 3707, 3707, 3707, 2769, 3707, -923, -923, 337, - 337, 2903, -923, -923, -923, 7012, -923, -923, -923, -923, - 5786, -923, 357, 417, 236, 337, 337, 236, 236, 4990, - 353, -923, 358, -923, -923, -923, -923, -923, -923, 4576, - 371, 5178, -923, 5440, 474, 379, 361, 2496, 5320, 6988, - -923, -923, -923, -923, 6988, -923, -923, -923, -923, 6907, - 5284, -923, 5440, 5440, 5440, 5440, 5440, -923, -923, 382, - -923, -923, -923, -923, -923, 3707, -923, 4434, -923, 376, - -923, 4520, -923, 5440, 223, -923, -923, 104, 370, -923, - 374, 5982, 5440, 397, -923, 5440, -923, 198, 387, -923, - -923, -923, -923, 4617, -923, -923, 396, 418, -923, 400, - 402, 403, 404, 405, 407, 419, 408, 420, 411, 412, - 415, 422, 436, 426, -73, 437, 433, 434, 435, 439, - 440, 443, 448, 449, 450, 460, 462, 3707, -923, 5786, - 3707, -923, 6793, 446, 463, 464, 5440, 466, 467, 479, - 471, 4205, 472, 473, 3707, 3707, -923, 581, -923, 947, - 476, 3707, -923, -923, 4171, 5000, 5113, 5113, 1867, 1867, - 276, 276, -923, 2653, 5043, 2049, 1570, 1867, 1867, 293, - 293, 76, 76, 76, -923, -923, -72, 1648, -923, -923, - 475, 4589, 480, 236, 477, 486, 5440, 236, 236, 236, - 236, 236, 482, -923, 353, -923, 353, -923, 482, 482, - -923, 236, 809, 5872, 5757, 236, 236, 483, 33, -923, - 1286, 355, -923, 3707, 5440, 481, -923, -923, -923, -923, - 4576, -26, -22, -16, 809, 487, 86, -923, -923, -923, - 501, 6988, 809, 3841, -63, 489, 4646, -923, -923, -923, - 506, 509, 510, 511, 512, 515, 6291, -923, 3860, 5608, - 199, 500, 198, -923, -923, 517, -923, 5786, -923, 29, - 3037, 6121, 1306, -923, 5786, -923, 502, 190, -923, -923, - 2635, -923, -923, 1069, -923, 518, 5178, -923, -923, -923, - -923, -923, -923, -923, 504, -923, 505, -923, -923, -923, - -923, 5786, -923, 5786, -923, 5786, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, 4667, 513, 514, - -923, 507, -923, -923, 519, -923, -923, 508, -923, -923, - -923, -923, 76, 3915, -923, 5440, 362, 5637, 5228, -923, - 3915, 3707, -923, -923, -923, -923, -923, 482, 236, -923, - 482, 482, 482, 482, 482, 3707, -99, 622, 5896, 1286, - 355, -923, -69, -29, -923, -923, 5666, 522, 1286, 1286, - 1286, 1286, 1286, 1286, -61, -923, -923, 524, 5440, 355, - 355, 355, 355, 355, 355, -6, 520, 3915, -923, -15, - -923, 540, 639, 2496, -923, 612, 809, -923, -923, -923, - -923, -923, -923, -923, -923, 528, 544, 545, -923, -923, - 6097, -923, -923, 546, 32, 547, -923, 539, 3707, 3707, - 3707, 3707, 1818, 3707, 542, 80, -923, -923, 4758, -923, - 326, -923, 6988, 6988, 6363, -923, 696, 704, 709, 715, - 716, -923, -923, 378, 561, -923, -923, -923, -923, 1185, - -923, 571, 582, 1562, -923, 1175, -923, -923, 29, -923, - 1069, -923, 583, 5637, 574, 1069, 5637, 564, 4685, 1306, - 575, 1306, 1306, 1306, 1306, 1306, 49, -923, -923, 570, - 6435, -923, -923, -923, 5440, 105, -923, 577, -923, 593, - 594, 3171, 3059, 586, 1069, 1069, 4274, 1069, 1069, 1069, - 1069, -923, 11, 209, -923, 4576, -923, 3707, 3707, 580, - 584, 587, -923, -923, -923, 3707, -923, 3707, -923, 588, - -923, 6011, 809, -923, -923, -923, -923, -923, -923, 591, - -923, -923, 601, -923, 3915, 482, 579, 596, 5757, 1286, - 355, -61, -6, 597, 598, 5228, -923, -923, 1286, 604, - 604, 604, 604, 604, 157, 3707, -923, 355, -923, 605, - 605, 605, 605, 605, 233, 3707, -923, 608, -923, 3707, - -923, 600, 4703, 6507, -923, 614, -923, -923, 5786, 5786, - 5786, 611, 5786, 613, 5491, 5786, 1818, 76, 76, 76, - 76, 610, -67, 76, -923, -923, 3981, 3707, 3707, 3707, - 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, - 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3305, 3707, - -923, -923, -923, -923, -59, 633, 635, 636, 638, 6579, - 13, -923, 1175, 6867, 5608, 5440, 637, 630, 1175, 1175, - 1175, 1175, 1175, 1175, -2, 605, -923, 209, -923, 626, - 1069, 216, 627, -923, -923, 253, 1306, 634, 634, 634, - 634, 634, -923, 3707, -923, -923, 5637, 631, 277, -923, - -43, 652, 653, -923, 2318, -923, -923, -923, 3171, 640, - 656, 3915, -923, -923, 1069, 302, 302, 796, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, 643, 642, -923, -923, 302, 302, - 302, 237, 808, -923, 3707, -923, 2635, 668, -923, 540, - -55, -47, -923, -923, -923, -41, -21, -923, 6097, 337, - 768, 367, -923, -923, 5637, -923, -61, -6, -923, -923, - 5637, 5637, -923, 604, 654, 648, 605, 658, 659, 3327, - -923, -923, -923, 5299, 677, 680, -923, 663, 675, 676, - 3707, 682, 5440, 667, 673, 684, 679, 4740, 3707, -923, - -923, -923, 4171, 5000, 5113, 5113, 1867, 1867, 276, 276, - -923, 3595, 5043, 2049, 1570, 1867, 1867, 293, 293, 76, - 76, 76, -923, -923, 6, 1837, 6651, 831, 694, 836, - 681, -923, 839, 840, 842, -923, 706, -2, 605, -923, - -923, -923, -923, -923, -923, 5786, 1175, 4120, -923, -923, - 714, -923, -923, 256, 707, -923, -923, 634, 5637, 701, - 710, -923, -923, 5440, 3707, 3707, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, - -923, -923, -923, -923, -923, -923, -923, -923, 708, -923, - 3439, 302, -923, -923, -923, -923, -923, 3841, 711, 3059, - 1069, -923, -923, -923, -923, 5228, 337, -923, -923, -923, - 5, 712, 717, -923, -923, 718, 728, 5637, -923, 5637, - -923, -923, 6130, 6189, 6203, 5440, 297, -923, -923, 862, - -923, 5299, -923, 731, 735, 734, 737, 736, -923, -923, - 740, -923, -923, 76, 3707, -923, -923, -923, 17, -923, - 760, 730, 42, 742, 53, -923, -923, -923, 745, 727, - 759, 761, 40, 763, 4120, 4120, 4120, 4120, 4120, 1818, - 4120, 1494, -923, 1069, 965, 756, -923, 965, 5637, 757, - -923, -923, 758, -923, 771, 762, 2118, -923, 3171, 3915, - 764, -923, -923, 793, -923, 775, -923, -923, -923, -923, - -923, 776, 777, 6217, -923, 6217, -923, 6217, -923, -923, - 6217, 6217, 6217, -923, 6723, -923, 3707, 3707, -923, 3707, - -923, 3707, 3915, 934, 797, 940, -923, 942, 805, 806, - 946, 813, 5786, 5786, 5786, 5786, 799, 5522, 5786, 124, - 124, 124, 124, 124, 807, 62, 124, 4120, 4120, 4120, - 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, - 4120, 4120, 4120, 4120, 4120, 4120, 3573, 3707, -923, -923, - 5637, 812, -923, 965, -923, -923, 969, -923, 819, -923, - -923, -923, 5228, 5228, 5228, -923, -923, -923, -923, -923, - -923, -923, -923, -923, 91, 96, 99, 135, 841, -923, - 821, 850, -923, -923, 137, -923, 833, 844, 845, 846, - 5440, 838, 847, 851, 4120, -923, 4356, 5059, 1194, 1194, - 1898, 1898, 699, 699, -923, 1391, 5075, 5099, 1449, 430, - 430, 124, 124, 124, -923, -923, 138, 1945, 5637, 848, - -923, 965, -923, -923, 965, 849, -923, -923, -923, 965, - 965, -923, -923, -923, -923, 998, 852, 867, 1007, 1009, - 872, -923, 857, 858, 863, 864, -923, -923, 868, 124, - 4120, -923, -923, 865, -923, 965, -923, -923, 880, -923, - 870, 871, -923, 3707, 3707, 3707, -923, 3707, 1494, -923, - 5228, -923, 885, 886, 139, 150, 155, 171, 5228, -923, - -923, -923, -923, -923, -923, -923, -923 + 162, -926, 3677, 5743, 39, 4864, -926, -926, -926, -926, + -926, -926, -926, -926, -36, -99, -70, -37, -33, -11, + -69, -5, 24, -926, -926, 19, 33, 44, 57, 64, + 67, 78, 92, 96, 102, 144, 171, 174, 179, 185, + 191, 197, 211, 216, 6057, -926, -926, 108, 220, 222, + 20, 246, -926, 243, 245, 256, 3677, 3677, 3677, 3677, + 3677, 1793, 1173, 3677, 3886, -926, 158, -926, -926, -926, + -926, -926, -926, -926, -926, 5854, 264, -926, -23, -926, + -926, 2240, 2171, 2171, -926, 4505, 272, -926, 2171, -926, + -926, 305, 305, -926, -926, -926, -926, 152, 95, -926, + -926, -926, -926, -926, -926, 6164, 280, -926, 6986, 6986, + 6986, -926, 6986, 5233, 6986, 297, -926, 6971, 296, 298, + 307, 314, 319, 324, 6986, 1206, 336, 342, 345, 6986, + 6986, 331, 6778, 6986, 6986, 5065, 6986, 6986, -926, -926, + -926, -926, 2195, -926, -926, -926, -926, -926, 3677, 3677, + 5743, 3677, 3677, 3677, 3677, 5743, 3677, 5743, 3677, 5743, + 3677, 5743, 5743, 5743, 5743, 5743, 5743, 5743, 5743, 5743, + 5743, 5743, 5743, 5743, 5743, 5743, 3677, -926, -926, 332, + 4505, 337, 338, 4505, -926, -926, 5743, 3677, 3677, 339, + 5336, 5743, 1793, 3677, 3677, 88, 88, 88, 88, 88, + -36, -70, -37, -33, -11, -5, 19, 44, 6195, 5244, + 5695, 6068, 256, 334, -78, 3886, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, 4505, 4505, + -85, 358, -926, -926, 88, 3677, 3677, 3677, 3677, 3677, + 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, + 3677, 3677, 3677, 3677, 3677, 3677, 2732, 3677, -926, -926, + 305, 305, 2867, -926, -926, -926, 2171, -926, -926, -926, + -926, 5743, -926, 353, 261, 150, 305, 305, 150, 150, + 4978, 349, -926, 350, -926, -926, -926, -926, -926, -926, + 1338, 368, 5160, -926, 4505, 472, 371, 356, 1936, 5250, + 6986, -926, -926, -926, -926, 6986, -926, -926, -926, -926, + 6871, 1355, -926, 4505, 4505, 4505, 4505, 4505, 4505, -926, + -926, 375, -926, -926, -926, -926, -926, 3677, -926, 4316, + -926, 367, -926, 4408, -926, 4505, 74, -926, -926, -63, + 364, -926, 365, 5941, 4505, 366, -926, 4505, -926, 239, + 383, -926, -926, -926, -926, 792, -926, -926, 372, 386, + -926, 369, 374, 382, 384, 390, 391, 393, 395, 396, + 407, 408, 410, 412, 415, 414, -75, 424, 416, 419, + 428, 429, 431, 432, 435, 436, 437, 438, 439, 3677, + -926, 5743, 3677, -926, 6759, 425, 443, 446, 4505, 450, + 451, 434, 452, 4177, 462, 463, 3677, 3677, -926, 524, + -926, 1294, 467, 3677, -926, -926, 1444, 4862, 1629, 1629, + 908, 908, 1658, 1658, -926, 2750, 1066, 4908, 5061, 908, + 908, 166, 166, 88, 88, 88, -926, -926, -74, 1595, + -926, -926, 468, 4477, 473, 150, 476, 479, 4505, 150, + 150, 150, 150, 150, 477, -926, 349, -926, 349, -926, + 477, 477, -926, 150, 6164, 5830, 5714, 150, 150, 481, + 53, -926, 672, 720, -926, 3677, 4505, 484, -926, -926, + -926, -926, 1338, -16, -14, -4, 6164, 489, 143, -926, + -926, -926, 494, 6986, 6164, 3812, -36, 482, 4535, -926, + -926, -926, 509, 511, 513, 515, 522, 525, 526, 6239, + -926, 3831, 5486, 249, 492, 239, -926, -926, 523, -926, + 5743, -926, 46, 3002, 6081, 916, -926, 5743, -926, 510, + 202, -926, -926, 2079, -926, -926, 413, -926, 531, 5160, + -926, -926, -926, -926, -926, -926, -926, 521, -926, 533, + -926, -926, -926, -926, 5743, -926, 5743, -926, 5743, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + 4556, 529, 536, -926, 535, -926, -926, 537, -926, -926, + 540, -926, -926, -926, -926, 88, 3886, -926, 4505, 358, + 5593, 2226, -926, 3886, 3677, -926, -926, -926, -926, -926, + 477, 150, -926, 477, 477, 477, 477, 477, 3677, -121, + 658, 5854, 672, 720, -926, -29, 10, -926, -926, 5622, + 555, 672, 672, 672, 672, 672, 672, -57, -926, -926, + 558, 4505, 720, 720, 720, 720, 720, 720, 99, 551, + 3886, -926, -52, -926, 582, 683, 1936, -926, 660, 6164, + -926, -926, -926, -926, -926, -926, -926, -926, 569, 584, + 589, -926, -926, 6057, -926, -926, 590, 35, 594, -926, + 573, 3677, 3677, 3677, 3677, 1793, 3677, 585, 54, -926, + -926, 4647, -926, 158, -926, 6986, 6986, 6312, -926, 741, + 743, 744, 748, 754, 755, -926, -926, 290, 617, -926, + -926, -926, -926, 5518, -926, 610, 620, 6753, -926, 495, + -926, -926, 46, -926, 413, -926, 621, 5593, 609, 413, + 5593, 612, 4574, 916, 616, 916, 916, 916, 916, 916, + 266, -926, -926, 614, 6385, -926, -926, -926, 4505, 248, + -926, 615, -926, 637, 638, 3137, 3024, 628, 413, 413, + 4248, 413, 413, 413, 413, -926, 8, 250, -926, 1338, + -926, 3677, 3677, 624, 626, 629, -926, -926, -926, 3677, + -926, 3677, -926, 630, -926, 5970, 6164, -926, -926, -926, + -926, -926, -926, 634, -926, -926, 653, -926, 3886, 477, + 635, 641, 5714, 672, 720, -57, 99, 642, 644, 2226, + -926, -926, 672, 645, 645, 645, 645, 645, 212, 3677, + -926, 720, -926, 649, 649, 649, 649, 649, 275, 3677, + -926, 650, -926, 3677, -926, 643, 4592, 6458, -926, 669, + -926, -926, 5743, 5743, 5743, 655, 5743, 659, 5365, 5743, + 1793, 88, 88, 88, 88, 656, -66, 88, -926, -926, + 3953, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, + 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, + 3677, 3677, 3272, 3677, -926, -926, -926, -926, 678, -48, + 685, 686, 690, 691, 6531, 23, -926, 495, 6944, 5486, + 4505, 680, 681, 495, 495, 495, 495, 495, 495, 134, + 649, -926, 250, -926, 675, 413, 240, 676, -926, -926, + 288, 916, 679, 679, 679, 679, 679, -926, 3677, -926, + -926, 5593, 687, 321, -926, -25, 697, 698, -926, 2564, + -926, -926, -926, 3137, 692, 700, 3886, -926, -926, 413, + 311, 311, 839, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, 684, + 688, -926, -926, 311, 311, 311, 247, 849, -926, 3677, + -926, 2079, 706, -926, 582, -44, -40, -926, -926, -926, + -28, -22, -926, 6057, 305, 811, 471, -926, -926, 5593, + -926, -57, 99, -926, -926, 5593, 5593, -926, 645, 699, + 693, 649, 701, 695, 3294, -926, -926, -926, 5324, 723, + 714, -926, 704, 710, 716, 3677, 724, 4505, 717, 721, + 725, 722, 4629, 3677, -926, -926, -926, 1444, 4862, 1629, + 1629, 908, 908, 1658, 1658, -926, 3564, 1066, 4908, 5061, + 908, 908, 166, 166, 88, 88, 88, -926, -926, -6, + 1958, 6604, 867, 873, 738, 880, 733, -926, 892, 893, + 894, -926, 760, 134, 649, -926, -926, -926, -926, -926, + -926, 5743, 495, 4093, -926, -926, 764, -926, -926, 269, + 749, -926, -926, 679, 5593, 746, 751, -926, -926, 4505, + 3677, 3677, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, 771, -926, 3407, 311, -926, -926, + -926, -926, -926, 3812, 753, 3024, 413, -926, -926, -926, + -926, 2226, 305, -926, -926, -926, 15, 776, 752, -926, + -926, 778, 779, 5593, -926, 5593, -926, -926, 5705, 6090, + 6150, 4505, 343, -926, -926, 932, -926, 5324, -926, 783, + 784, 812, 813, 814, -926, -926, 815, -926, -926, 88, + 3677, -926, -926, -926, 816, 1, -926, 834, 835, 14, + 819, 59, -926, -926, -926, 822, 833, 837, 838, 38, + 840, 4093, 4093, 4093, 4093, 4093, 1793, 4093, 4798, -926, + 413, 4016, 825, -926, 4016, 5593, 828, -926, -926, 829, + -926, 830, 842, 2396, -926, 3137, 3886, 845, -926, -926, + 853, -926, 850, -926, -926, -926, -926, -926, 851, 852, + 5929, -926, 5929, -926, 5929, -926, -926, 5929, 5929, 5929, + -926, 6677, -926, 3677, 3677, -926, 3677, -926, 3677, 3886, + 855, 992, 858, 1006, -926, 1010, 874, 875, 1012, 876, + 5743, 5743, 5743, 5743, 861, 5457, 5743, 123, 123, 123, + 123, 123, 860, 101, 123, 4093, 4093, 4093, 4093, 4093, + 4093, 4093, 4093, 4093, 4093, 4093, 4093, 4093, 4093, 4093, + 4093, 4093, 4093, 4093, 3542, 3677, -926, -926, 5593, 863, + -926, 4016, -926, -926, 1013, -926, 864, -926, -926, -926, + 2226, 2226, 2226, -926, -926, -926, -926, -926, -926, -926, + -926, -926, 114, 147, 168, 175, -926, 885, -926, 868, + 888, -926, -926, 176, -926, 872, 883, 884, 886, 4505, + 877, 887, 895, 4093, -926, 4144, 5038, 1181, 1181, 1608, + 1608, 2116, 2116, -926, 4744, 5088, 5104, 1648, 405, 405, + 123, 123, 123, -926, -926, 181, 2329, 5593, 889, -926, + 4016, -926, -926, 4016, 882, -926, -926, -926, 4016, 4016, + -926, -926, -926, -926, 1043, 891, 906, 1049, 1050, 912, + -926, 897, 899, 900, 910, -926, -926, 913, 123, 4093, + -926, -926, 914, -926, 4016, -926, -926, 926, -926, 923, + 192, -926, 3677, 3677, 3677, -926, 3677, 4798, -926, 2226, + -926, 930, 1070, 934, 193, 199, 206, 213, 2226, -926, + -926, 925, -926, -926, -926, -926, -926, -926, 944, -926 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1285,194 +1290,195 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 0, 761, 0, 0, 0, 761, 5, 649, 645, 648, - 757, 758, 651, 652, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 647, 653, 0, 0, 0, 0, 0, + 0, 763, 0, 0, 0, 763, 5, 651, 647, 650, + 759, 760, 653, 654, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 649, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 655, 654, 0, 0, 0, - 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 761, 0, 3, 586, 650, 296, 307, 306, - 390, 391, 393, 394, 375, 0, 0, 405, 372, 404, - 399, 396, 395, 398, 376, 0, 0, 377, 397, 407, - 392, 761, 761, 4, 298, 299, 300, 0, 361, 761, - 295, 387, 388, 389, 1, 0, 0, 21, 761, 761, - 761, 22, 761, 761, 761, 0, 40, 761, 0, 0, - 0, 0, 0, 761, 0, 0, 0, 0, 761, 761, - 0, 761, 761, 761, 0, 761, 761, 6, 17, 7, - 19, 0, 15, 16, 18, 71, 42, 761, 761, 0, - 761, 761, 761, 761, 0, 761, 0, 761, 0, 761, + 0, 0, 0, 0, 0, 657, 656, 0, 0, 0, + 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 763, 0, 3, 588, 652, 298, 309, 308, + 392, 393, 395, 396, 377, 0, 0, 407, 374, 406, + 401, 398, 397, 400, 378, 0, 0, 379, 399, 409, + 394, 763, 763, 4, 300, 301, 302, 0, 363, 763, + 297, 389, 390, 391, 1, 0, 0, 21, 763, 763, + 763, 22, 763, 763, 763, 0, 42, 763, 0, 0, + 0, 0, 0, 0, 763, 0, 0, 0, 0, 763, + 763, 0, 763, 763, 763, 0, 763, 763, 6, 17, + 7, 19, 0, 15, 16, 18, 73, 44, 763, 763, + 0, 763, 763, 763, 763, 0, 763, 0, 763, 0, + 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 763, 324, 330, 0, + 0, 0, 612, 0, 763, 323, 0, 763, 763, 0, + 0, 0, 0, 763, 763, 621, 619, 618, 620, 617, + 298, 392, 393, 395, 396, 407, 406, 401, 398, 397, + 400, 399, 394, 0, 0, 547, 744, 745, 746, 754, + 747, 750, 748, 752, 751, 749, 753, 733, 734, 0, + 0, 763, 739, 732, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 761, 322, 328, 0, 0, - 0, 610, 0, 761, 321, 0, 761, 761, 0, 0, - 0, 0, 761, 761, 619, 617, 616, 618, 615, 296, - 390, 391, 393, 394, 405, 404, 399, 396, 395, 398, - 397, 392, 0, 0, 545, 742, 743, 744, 752, 745, - 748, 746, 750, 749, 747, 751, 731, 732, 0, 0, - 761, 737, 730, 614, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 759, 760, 761, - 761, 0, 373, 374, 406, 396, 401, 400, 403, 297, - 0, 402, 0, 282, 761, 761, 761, 761, 761, 761, - 0, 331, 281, 333, 761, 753, 754, 755, 756, 0, - 363, 0, 335, 0, 0, 60, 62, 0, 761, 761, - 54, 43, 53, 55, 761, 44, 150, 49, 23, 761, - 0, 47, 0, 0, 0, 0, 0, 52, 761, 0, - 26, 25, 24, 50, 46, 0, 154, 0, 153, 0, - 56, 0, 20, 0, 0, 48, 51, 330, 309, 320, - 0, 0, 0, 0, 13, 0, 68, 0, 329, 65, - 311, 312, 313, 361, 761, 308, 0, 544, 543, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 761, 762, + 763, 763, 0, 375, 376, 408, 398, 403, 402, 405, + 299, 0, 404, 0, 284, 763, 763, 763, 763, 763, + 763, 0, 333, 283, 335, 763, 755, 756, 757, 758, + 0, 365, 0, 337, 0, 0, 62, 64, 0, 763, + 763, 56, 45, 55, 57, 763, 46, 152, 51, 23, + 763, 0, 49, 0, 0, 0, 0, 0, 0, 54, + 763, 0, 26, 25, 24, 52, 48, 0, 156, 0, + 155, 0, 58, 0, 20, 0, 0, 50, 53, 332, + 311, 322, 0, 0, 0, 0, 13, 0, 70, 0, + 331, 67, 313, 314, 315, 363, 763, 310, 0, 546, + 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, - 761, 325, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 644, 735, 738, 0, - 761, 0, 733, 210, 628, 629, 630, 631, 632, 633, - 636, 637, 643, 0, 625, 626, 627, 634, 635, 623, - 624, 620, 621, 622, 642, 641, 0, 0, 332, 334, - 0, 0, 0, 761, 283, 0, 272, 761, 761, 761, - 761, 761, 288, 271, 0, 284, 0, 285, 287, 286, - 195, 761, 0, 0, 0, 761, 761, 0, 196, 199, - 761, 0, 194, 761, 369, 0, 366, 365, 360, 364, - 0, 742, 743, 744, 0, 0, 746, 339, 301, 341, - 0, 761, 0, 761, 309, 0, 0, 45, 41, 761, - 0, 0, 0, 0, 0, 0, 761, 378, 0, 761, - 330, 309, 0, 329, 74, 0, 384, 0, 79, 81, - 0, 0, 761, 310, 0, 761, 0, 0, 408, 217, - 0, 70, 67, 0, 316, 363, 0, 593, 592, 609, - 599, 595, 597, 598, 0, 605, 0, 604, 658, 594, - 659, 0, 661, 0, 662, 0, 665, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 601, 0, 0, 0, - 324, 0, 600, 603, 0, 607, 606, 0, 612, 613, - 602, 596, 587, 546, 736, 0, 761, 761, 761, 94, - 211, 0, 640, 639, 304, 303, 305, 289, 761, 273, - 278, 274, 275, 277, 276, 761, 0, 0, 0, 761, - 0, 236, 0, 0, 761, 198, 0, 0, 761, 761, - 761, 761, 761, 761, 761, 250, 249, 0, 260, 0, - 0, 0, 0, 0, 0, 761, 0, 542, 541, 370, - 359, 302, 0, 0, 761, 761, 0, 57, 61, 723, - 719, 722, 725, 726, 202, 0, 0, 0, 721, 727, - 0, 729, 728, 0, 0, 0, 720, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 238, 206, 239, 675, - 724, 201, 761, 761, 761, 380, 0, 0, 0, 0, - 0, 382, 761, 0, 0, 171, 172, 173, 159, 0, - 160, 0, 156, 161, 157, 761, 170, 155, 0, 76, - 0, 386, 0, 761, 0, 0, 761, 0, 0, 761, - 0, 761, 761, 761, 761, 761, 0, 241, 240, 0, - 761, 83, 408, 212, 0, 0, 69, 0, 761, 0, - 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 66, 761, 761, 174, 0, 314, 0, 0, 0, - 0, 0, 326, 327, 611, 0, 608, 0, 734, 0, - 101, 0, 0, 95, 103, 98, 102, 97, 99, 0, - 96, 100, 0, 189, 638, 279, 0, 0, 0, 761, - 0, 761, 761, 0, 0, 761, 197, 200, 761, 255, - 251, 252, 254, 253, 0, 761, 230, 0, 261, 266, - 262, 263, 265, 264, 0, 761, 233, 290, 367, 0, - 336, 0, 0, 761, 344, 761, 343, 64, 0, 0, - 0, 685, 0, 0, 0, 0, 0, 693, 692, 691, - 690, 0, 0, 689, 63, 205, 0, 0, 0, 0, + 325, 0, 763, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 646, 737, + 740, 0, 763, 0, 735, 212, 630, 631, 632, 633, + 634, 635, 638, 639, 645, 0, 627, 628, 629, 636, + 637, 625, 626, 622, 623, 624, 644, 643, 0, 0, + 334, 336, 0, 0, 0, 763, 285, 0, 274, 763, + 763, 763, 763, 763, 290, 273, 0, 286, 0, 287, + 289, 288, 197, 763, 0, 0, 0, 763, 763, 0, + 198, 201, 763, 0, 196, 763, 371, 0, 368, 367, + 362, 366, 0, 744, 745, 746, 0, 0, 748, 341, + 303, 343, 0, 763, 0, 763, 311, 0, 0, 47, + 43, 763, 0, 0, 0, 0, 0, 0, 0, 763, + 380, 0, 763, 332, 311, 0, 331, 76, 0, 386, + 0, 81, 83, 0, 0, 763, 312, 0, 763, 0, + 0, 410, 219, 0, 72, 69, 0, 318, 365, 0, + 595, 594, 611, 601, 597, 599, 600, 0, 607, 0, + 606, 660, 596, 661, 0, 663, 0, 664, 0, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 603, + 0, 0, 0, 326, 0, 602, 605, 0, 609, 608, + 0, 614, 615, 604, 598, 589, 548, 738, 0, 763, + 763, 763, 96, 213, 0, 642, 641, 306, 305, 307, + 291, 763, 275, 280, 276, 277, 279, 278, 763, 0, + 0, 0, 763, 0, 238, 0, 0, 763, 200, 0, + 0, 763, 763, 763, 763, 763, 763, 763, 252, 251, + 0, 262, 0, 0, 0, 0, 0, 0, 763, 0, + 544, 543, 372, 361, 304, 0, 0, 763, 763, 0, + 59, 63, 725, 721, 724, 727, 728, 204, 0, 0, + 0, 723, 729, 0, 731, 730, 0, 0, 0, 722, + 0, 0, 0, 0, 0, 0, 0, 0, 205, 240, + 208, 241, 677, 726, 203, 763, 763, 763, 382, 0, + 0, 0, 0, 0, 0, 384, 763, 0, 0, 173, + 174, 175, 161, 0, 162, 0, 158, 163, 159, 763, + 172, 157, 0, 78, 0, 388, 0, 763, 0, 0, + 763, 0, 0, 763, 0, 763, 763, 763, 763, 763, + 0, 243, 242, 0, 763, 85, 410, 214, 0, 0, + 71, 0, 763, 0, 0, 763, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 68, 763, 763, 176, 0, + 316, 0, 0, 0, 0, 0, 328, 329, 613, 0, + 610, 0, 736, 0, 103, 0, 0, 97, 105, 100, + 104, 99, 101, 0, 98, 102, 0, 191, 640, 281, + 0, 0, 0, 763, 0, 763, 763, 0, 0, 763, + 199, 202, 763, 257, 253, 254, 256, 255, 0, 763, + 232, 0, 263, 268, 264, 265, 267, 266, 0, 763, + 235, 292, 369, 0, 338, 0, 0, 763, 346, 763, + 345, 66, 0, 0, 0, 687, 0, 0, 0, 0, + 0, 695, 694, 693, 692, 0, 0, 691, 65, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 59, 58, 383, 761, 0, 761, 0, 0, 0, 761, - 0, 39, 761, 761, 0, 164, 162, 0, 761, 761, - 761, 761, 761, 761, 761, 168, 75, 761, 385, 0, - 0, 0, 0, 318, 317, 0, 761, 246, 242, 243, - 245, 244, 89, 761, 319, 14, 761, 0, 0, 8, - 0, 0, 0, 218, 409, 410, 220, 221, 761, 0, - 224, 226, 223, 219, 0, 181, 177, 0, 118, 119, - 120, 121, 122, 123, 126, 127, 142, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 146, - 145, 129, 128, 115, 117, 116, 124, 125, 113, 114, - 110, 111, 112, 109, 0, 0, 108, 175, 178, 180, - 179, 0, 0, 185, 761, 187, 0, 0, 72, 315, - 0, 0, 660, 663, 664, 0, 0, 761, 0, 761, - 0, 0, 408, 280, 761, 237, 761, 761, 231, 234, - 761, 761, 291, 256, 259, 0, 267, 270, 0, 371, - 338, 337, 340, 0, 0, 346, 345, 0, 0, 0, - 761, 0, 0, 0, 0, 0, 0, 0, 0, 718, - 204, 207, 702, 703, 704, 705, 706, 707, 710, 711, - 717, 0, 699, 700, 701, 708, 709, 697, 698, 694, - 695, 696, 716, 715, 0, 0, 761, 0, 0, 0, - 0, 192, 0, 0, 0, 379, 0, 761, 169, 149, - 147, 152, 148, 158, 165, 0, 761, 0, 166, 208, - 0, 77, 761, 0, 0, 761, 91, 247, 761, 0, - 0, 213, 408, 0, 761, 761, 215, 216, 412, 413, - 417, 414, 422, 415, 416, 418, 419, 420, 421, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 490, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 491, 492, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 761, 534, 535, 536, 527, 539, - 523, 524, 522, 529, 530, 518, 519, 520, 521, 528, - 526, 533, 531, 537, 532, 525, 538, 411, 0, 222, - 225, 182, 176, 144, 143, 184, 188, 761, 0, 211, - 0, 590, 589, 591, 588, 761, 761, 190, 107, 104, - 0, 0, 0, 232, 235, 0, 0, 761, 257, 761, - 268, 368, 750, 0, 749, 0, 0, 347, 349, 739, - 761, 0, 684, 0, 0, 0, 0, 0, 682, 681, - 0, 687, 688, 676, 0, 714, 713, 381, 0, 32, - 193, 0, 0, 0, 0, 38, 167, 163, 0, 0, + 0, 0, 0, 0, 61, 60, 385, 763, 0, 0, + 763, 0, 0, 0, 763, 0, 41, 763, 763, 0, + 166, 164, 0, 763, 763, 763, 763, 763, 763, 763, + 170, 77, 763, 387, 0, 0, 0, 0, 320, 319, + 0, 763, 248, 244, 245, 247, 246, 91, 763, 321, + 14, 763, 0, 0, 8, 0, 0, 0, 220, 411, + 412, 222, 223, 763, 0, 226, 228, 225, 221, 0, + 183, 179, 0, 120, 121, 122, 123, 124, 125, 128, + 129, 144, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 148, 147, 131, 130, 117, 119, + 118, 126, 127, 115, 116, 112, 113, 114, 111, 0, + 0, 110, 177, 180, 182, 181, 0, 0, 187, 763, + 189, 0, 0, 74, 317, 0, 0, 662, 665, 666, + 0, 0, 763, 0, 763, 0, 0, 410, 282, 763, + 239, 763, 763, 233, 236, 763, 763, 293, 258, 261, + 0, 269, 272, 0, 373, 340, 339, 342, 0, 0, + 348, 347, 0, 0, 0, 763, 0, 0, 0, 0, + 0, 0, 0, 0, 720, 206, 209, 704, 705, 706, + 707, 708, 709, 712, 713, 719, 0, 701, 702, 703, + 710, 711, 699, 700, 696, 697, 698, 718, 717, 0, + 0, 763, 0, 0, 0, 0, 0, 194, 0, 0, + 0, 381, 0, 763, 171, 151, 149, 154, 150, 160, + 167, 0, 763, 0, 168, 210, 0, 79, 763, 0, + 0, 763, 93, 249, 763, 0, 0, 215, 410, 0, + 763, 763, 217, 218, 414, 415, 419, 416, 424, 417, + 418, 420, 421, 422, 423, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 492, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 763, 536, 537, 538, 529, 541, 525, 526, 524, 531, + 532, 520, 521, 522, 523, 530, 528, 535, 533, 539, + 534, 527, 540, 413, 0, 224, 227, 184, 178, 146, + 145, 186, 190, 763, 0, 213, 0, 592, 591, 593, + 590, 763, 763, 192, 109, 106, 0, 0, 0, 234, + 237, 0, 0, 763, 259, 763, 270, 370, 752, 0, + 751, 0, 0, 349, 351, 741, 763, 0, 686, 0, + 0, 0, 0, 0, 684, 683, 0, 689, 690, 678, + 0, 716, 715, 383, 0, 0, 33, 195, 0, 0, + 0, 0, 40, 169, 165, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 211, 549, + 0, 82, 0, 87, 84, 763, 0, 250, 763, 0, + 9, 0, 0, 0, 229, 763, 230, 0, 185, 75, + 0, 193, 0, 107, 658, 763, 763, 763, 0, 0, + 0, 354, 0, 353, 0, 352, 742, 0, 0, 0, + 743, 763, 350, 0, 0, 688, 0, 685, 0, 714, + 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 564, 562, 561, + 563, 560, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 209, 547, 0, 80, 0, 85, 82, 761, 0, - 248, 761, 0, 9, 0, 0, 0, 227, 761, 228, - 0, 183, 73, 0, 191, 0, 105, 656, 761, 761, - 761, 0, 0, 0, 352, 0, 351, 0, 350, 740, - 0, 0, 0, 741, 761, 348, 0, 0, 686, 0, - 683, 0, 712, 0, 0, 0, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, - 560, 559, 561, 558, 0, 0, 557, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 87, - 761, 0, 761, 84, 214, 12, 10, 540, 0, 761, - 408, 106, 761, 761, 761, 761, 761, 358, 357, 356, - 355, 354, 353, 342, 0, 0, 0, 0, 761, 33, - 0, 0, 35, 37, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 585, 571, 572, 573, 574, - 575, 576, 577, 578, 584, 0, 568, 569, 570, 566, - 567, 563, 564, 565, 583, 582, 0, 0, 761, 0, - 761, 90, 11, 229, 186, 0, 294, 293, 292, 258, - 269, 679, 678, 680, 677, 0, 0, 0, 0, 0, - 0, 556, 0, 0, 0, 0, 554, 553, 0, 548, - 0, 581, 580, 0, 761, 92, 657, 193, 0, 28, - 0, 0, 30, 0, 0, 0, 555, 0, 579, 761, - 761, 34, 0, 0, 0, 0, 0, 0, 761, 86, - 36, 31, 551, 550, 552, 549, 88 + 0, 0, 0, 0, 0, 0, 80, 89, 763, 0, + 763, 86, 216, 12, 10, 542, 0, 763, 410, 108, + 763, 763, 763, 763, 763, 360, 359, 358, 357, 356, + 355, 344, 0, 0, 0, 0, 36, 763, 34, 0, + 0, 37, 39, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 587, 573, 574, 575, 576, 577, + 578, 579, 580, 586, 0, 570, 571, 572, 568, 569, + 565, 566, 567, 585, 584, 0, 0, 763, 0, 763, + 92, 11, 231, 188, 0, 296, 295, 294, 260, 271, + 681, 680, 682, 679, 0, 0, 0, 0, 0, 0, + 558, 0, 0, 0, 0, 556, 555, 0, 550, 0, + 583, 582, 0, 763, 94, 659, 195, 0, 28, 0, + 0, 30, 0, 0, 0, 557, 0, 581, 763, 763, + 35, 0, 0, 0, 0, 0, 0, 0, 763, 88, + 38, 0, 31, 553, 552, 554, 551, 90, 0, 32 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -923, -923, -309, -923, -65, -923, -923, 733, -118, -923, - 89, -439, 393, -115, -923, -923, -210, -923, -923, -277, - -923, -923, -923, 719, -923, -923, -923, -923, -923, -592, - -923, -923, -109, -923, -923, -923, -923, 165, 352, -663, - -923, -698, -738, -396, -585, -923, -194, -923, -23, -522, - -923, -505, -922, -923, -461, 211, -607, 246, 44, -136, - -82, 332, 197, -282, -642, 724, 1215, -147, -116, -923, - -71, -923, -923, -923, -923, -225, -64, -923, -463, -923, - -923, -33, -7, -923, -923, -923, -923, -36, -42, -923, - -923, -702, -923, -156, -923, -571, -124, -60, 377, 306, - 305, -923, -923, -923, 655, -90, 1188, 245, -488, -1 + -926, -926, -313, -926, -13, -926, -926, 785, -128, -926, + 104, -430, 449, -126, -926, -926, -155, -926, -926, -228, + -926, -926, -926, 773, -926, -926, -926, -926, -926, -608, + -926, -926, -111, -926, -926, -926, -926, 218, 409, -636, + -926, -703, -728, -349, -576, -926, -142, -926, 30, -513, + -926, -510, -925, -926, -428, 265, -648, 312, -218, 93, + -82, -10, 22, -279, -640, 786, 1002, -159, -109, -926, + -94, -926, -926, -926, -926, -171, -87, -926, -455, -926, + -926, -18, -12, -926, -926, -926, -926, -32, -39, -926, + -926, -715, -926, -103, -926, -561, -136, -60, 302, 715, + -276, -926, -926, -926, 707, 13, 1196, -61, -492, -1 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 4, 5, 918, 919, 138, 525, 139, 140, 309, - 141, 294, 295, 142, 533, 527, 751, 332, 710, 896, - 346, 713, 716, 347, 916, 1420, 1488, 1098, 1328, 588, - 977, 1081, 143, 329, 701, 702, 703, 704, 705, 752, - 1247, 753, 782, 1070, 467, 468, 674, 675, 1088, 412, - 736, 531, 929, 930, 469, 677, 726, 799, 809, 280, - 281, 91, 92, 348, 181, 349, 93, 291, 94, 644, - 95, 645, 825, 1024, 1025, 1277, 96, 97, 478, 474, - 475, 98, 99, 144, 692, 873, 145, 100, 101, 102, - 103, 737, 738, 924, 1237, 636, 356, 357, 1321, 214, - 65, 678, 679, 229, 230, 1278, 1279, 625, 66, 146 + -1, 4, 5, 923, 924, 139, 528, 140, 141, 310, + 142, 295, 296, 143, 536, 530, 755, 334, 714, 901, + 348, 717, 720, 349, 921, 1428, 1497, 1104, 1335, 591, + 982, 1087, 144, 331, 705, 706, 707, 708, 709, 756, + 1253, 757, 786, 1076, 469, 470, 677, 678, 1094, 414, + 740, 534, 934, 935, 471, 680, 730, 803, 813, 281, + 282, 91, 92, 350, 182, 351, 93, 292, 94, 647, + 95, 648, 829, 1029, 1030, 1283, 96, 97, 480, 476, + 477, 98, 99, 145, 696, 877, 146, 100, 101, 102, + 103, 741, 742, 929, 1243, 639, 358, 359, 1328, 215, + 65, 681, 682, 230, 231, 1284, 1285, 628, 66, 147 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1480,1686 +1486,1681 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 6, 213, 769, 611, 306, 680, 1238, 709, 184, 506, - 283, 182, 897, 326, 985, 495, 328, 641, 831, 257, - 1345, 258, 795, 607, 359, 350, 361, 362, 363, 364, - 917, 366, 676, 368, 786, 370, 392, 183, 188, 266, - 267, 268, 714, 409, 771, 642, 271, 833, 615, 513, - -753, 386, 901, 648, -754, 1386, 262, 1012, 104, 405, - -755, 232, 394, 395, 768, 410, 605, 787, 402, 403, - 351, 285, 286, 287, 553, 405, 154, 352, 406, 149, - 405, 935, 936, 147, 978, 979, 980, 981, 1067, 411, - 282, 282, 405, 554, 592, 845, 605, 793, 292, 1039, - 405, 148, 806, 1104, 805, 355, 405, 1068, 353, 242, - 150, 1251, 905, 816, 907, 908, 909, 910, 911, 1252, - -753, 1105, 263, -753, -754, 1253, 405, -754, 899, 999, - -755, 902, 818, -755, 354, 819, 605, 794, 452, 454, - 456, 458, 459, 156, 411, 1254, 358, 358, 1087, 358, - 358, 358, 358, 405, 358, 797, 358, 1405, 358, 815, - 982, 284, -756, 805, 1373, 266, 267, 268, 271, 921, - 922, 1346, 1295, 288, 358, 983, 984, 438, 439, 1076, - 616, 350, 292, 1374, 151, 358, 358, 189, 715, 1377, - 684, 358, 358, 455, 457, 436, 834, 300, 301, 302, - 1380, 303, 305, 307, 1387, 880, 311, 536, 1378, 405, - 289, 350, 317, 912, 913, 350, 730, 323, 324, 1381, - 327, 330, 331, 266, 335, 336, 351, 846, 1465, 413, - 152, 987, -756, 352, 1015, -756, 153, 1093, 405, 254, - 255, 256, 155, 405, 1018, 157, 405, 479, 988, 445, - -93, 446, -93, 447, -93, 185, 351, 1501, 282, 282, - 351, 355, 1502, 352, 353, 1503, 569, 352, 518, 1008, - 1009, 1241, 260, 453, 282, 282, 453, 453, 472, 1, - 2, 3, 405, 476, 1509, 405, 405, 1415, 1416, 1417, - 354, 355, 989, 158, 353, 355, 448, 405, 353, 1097, - 1261, 1504, 405, 1510, 1521, 1552, 159, 597, 64, 242, - 160, 600, 601, 602, 603, 604, 1553, 6, 405, 308, - 354, 1554, 805, 1014, 354, 606, 242, 1005, 161, 612, - 613, 1100, 257, 1000, 258, 823, 732, 1555, 733, 734, - 735, 162, 1099, 290, 528, -93, 529, -93, 530, -93, - 272, 163, 273, 292, 274, 528, 1256, 529, 680, 986, - 164, 821, 194, 195, 196, 197, 198, 165, 627, 233, - 628, 516, 629, 517, 166, 1090, 449, 215, 216, 217, - 983, 984, 1094, 879, 10, 676, 11, 305, 311, 358, - 450, 167, 1091, 497, 168, 451, 169, 275, 815, 1017, - 1332, 983, 984, 1245, 170, 1255, 171, 259, 172, 589, - 1360, 1361, 1362, 1248, 173, 630, 1428, 1096, 913, 1262, - 983, 984, 1325, 1102, 1103, 1265, 1266, 215, 216, 217, - 174, 218, 175, 249, 250, 251, 252, 253, 479, 254, - 255, 256, 453, 219, 220, 186, 453, 453, 453, 453, - 453, 187, 251, 252, 253, 190, 254, 255, 256, 191, - 453, 320, 785, 1405, 453, 453, 983, 984, 192, 626, - 321, 193, 638, 706, 261, 270, 471, 276, 297, 221, - 222, 218, 223, 312, 1263, 1264, 313, 224, 314, 225, - 322, 277, 681, 219, 220, 631, 278, 401, 6, 315, - 1324, 279, 316, 1327, 325, 404, 387, 389, 707, 632, - 390, 396, 411, 1329, 633, 635, 443, 1343, 473, 634, - 480, 728, 491, -271, 6, 493, 492, 350, 507, 221, - 222, 509, 223, 1259, 519, 532, 489, 224, 520, 225, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 524, 437, 537, 1066, 405, 538, 441, 539, 540, - 541, 542, 351, 543, 545, 544, 546, 547, 548, 352, - 647, 549, -272, 551, 555, 413, 472, 783, 550, 1412, - 1413, 1414, 552, 1415, 1416, 1417, 584, 453, 535, 556, - 557, 558, 571, 496, 638, 559, 560, 355, 626, 561, - 353, 470, 842, 589, 562, 563, 564, 626, 626, 626, - 626, 626, 626, 413, 184, 897, 565, 182, 566, 572, - 573, 508, 575, 576, 413, 577, 354, 578, 580, 581, - 587, 594, -273, 6, 826, 598, 596, 605, 640, 614, - 646, 643, 685, 183, 792, 682, 686, 687, 688, 689, - 610, 471, 690, 706, 708, 711, 731, 755, 757, 758, - 788, 765, 767, 522, 810, 811, 812, 813, 814, 763, - 764, 798, 1351, 807, 1352, 766, -362, 820, 824, 817, - 471, 6, 828, 567, 1496, 1497, 1498, 990, 991, 829, - 830, 832, 835, 836, 626, 995, 874, 996, 844, 881, - 582, 583, 472, 479, 875, 472, 624, 590, 728, 876, - 728, 728, 728, 728, 728, 877, 878, 883, 1495, 884, - 903, 898, 1405, 900, 906, 184, 914, 925, 182, 1423, - 932, 926, 927, 1421, 923, 934, 992, 1002, 1003, 895, - 993, 783, 413, 994, 997, 1001, 1432, 1433, 1434, 680, - 1004, 1010, 1011, 1023, 183, 1079, 1020, 727, 1080, 805, - 815, 870, 871, -280, 1082, 1030, 1038, 1032, 754, 637, - 1069, 489, 1072, 1073, 471, 1074, 676, 1085, 626, 1086, - 413, 413, 1092, 1095, 783, 609, 470, 626, 1101, 913, - 1106, 1107, 1549, 1240, 638, 790, 1242, 1239, 1064, 1243, - 1556, 1244, 1246, 471, 638, 1250, 1258, 1268, 1267, 215, - 216, 217, 1269, 1280, 1026, 470, 718, 1281, 1270, 1282, - 1491, 1283, 1284, 1288, 1007, 1489, 742, 1494, 1286, 1289, - 1290, 1298, 1299, 1499, 1500, 1291, 1300, 1301, 706, 1302, - 1303, 1016, 1304, 719, 1305, 791, 1410, 1411, 1412, 1413, - 1414, 1323, 1415, 1416, 1417, 800, 801, 802, 803, 804, - 1330, 1326, 6, 218, 1071, 1337, 1331, 1363, 1376, 1347, - 1341, 626, 1383, 1348, 1349, 219, 220, 626, 626, 626, - 626, 626, 626, 1089, 1350, 1366, 413, 784, 1525, 1367, - 1368, 1369, 1370, 1523, 1371, 728, 1285, 1375, 1379, 1382, - 471, 637, 638, 471, 1384, 472, 1385, 1257, 1388, 470, - 1419, 221, 222, 1422, 223, 1424, 1078, 932, 1426, 224, - 1429, 225, 1540, 810, 811, 812, 813, 814, 1425, 1430, - 789, 1431, 1435, 1436, 1448, 1449, 293, 1548, 470, 822, - 1450, 894, 1451, 1452, 1453, 754, 1454, 215, 216, 217, - 754, 1455, 184, 1460, 727, 182, 727, 727, 727, 727, - 727, 1364, 327, 1464, 837, 838, 839, 840, 1490, 843, - 1334, 1335, 770, 638, 1492, 471, 1493, 1507, 1505, 754, - 754, 183, 754, 754, 754, 754, 589, 1508, 282, 1511, - 1512, 1513, 1514, 472, 1516, 413, 413, 1518, 1527, 472, - 472, 218, 772, 1517, 1524, 1529, 1526, 1530, 1528, 1531, - 1532, 1533, 1534, 219, 220, 773, 774, 1535, 1541, 358, - 1536, 1539, 1537, 1550, 1551, 1006, 1542, 1543, 1333, 827, - 1342, 775, 498, 471, 1013, 470, 1418, 931, 470, 1083, - 512, 882, 1506, 1340, 1306, 514, 1365, 1041, 1336, 221, - 222, 0, 223, 0, 586, 0, 0, 224, 0, 225, - 0, 776, 0, 0, 777, 0, 1089, 778, 0, 285, - 286, 287, 743, 0, 0, 626, 744, 0, 0, 0, - 0, 589, 0, 779, 589, 0, 0, 472, 0, 0, - 0, 585, 0, 358, 358, 780, 228, 0, 0, 0, - 0, 637, 0, 471, 0, 0, 0, 0, 0, 781, - 470, 637, 0, 0, 0, 1019, 0, 0, 1077, 745, - 1016, 0, 0, 0, 0, 800, 801, 802, 803, 804, - 0, 0, 1037, 0, 0, 754, 0, 0, 0, 0, - 0, 727, 0, 1042, 1043, 1044, 1045, 1046, 1047, 1048, - 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, - 1059, 1060, 1061, 1062, 1344, 1065, 0, 0, 470, 754, - 746, 288, 1354, 1356, 1358, 285, 286, 287, 887, 0, - 628, 0, 888, 0, 0, 695, 696, 697, 0, 0, - 0, 471, 0, 0, 0, 0, 0, 471, 471, 747, - 0, 0, 0, 925, 1401, 1402, 1403, 1404, 0, 637, - 0, 0, 0, 748, 0, 0, 0, 1405, 749, 0, - 0, 0, 0, 750, 931, 889, 0, 0, 0, 70, - 0, 71, 72, 73, 0, 0, 681, 0, 470, 0, - 231, 77, 0, 0, 783, 282, 0, 0, 0, 1395, - 0, 0, 79, 1437, 0, 1438, 472, 1439, 472, 80, - 1440, 1441, 1442, 269, 0, 0, 212, 0, 0, 6, - 0, 0, 0, 0, 0, 81, 0, 288, 0, 0, - 637, 0, 1249, 296, 0, 471, 285, 286, 287, 617, - 0, 0, 0, 618, 82, 83, 1444, 1445, 0, 1446, - 0, 1447, 319, 0, 0, 890, 285, 286, 287, 720, - 0, 88, 334, 721, 89, 0, 90, 472, 0, 891, - 589, 0, 1013, 0, 892, 0, 470, 932, 0, 893, - 0, 0, 470, 470, 1293, 0, 619, 589, 589, 589, - 0, 1410, 1411, 1412, 1413, 1414, 1486, 1415, 1416, 1417, - 0, 0, 0, 0, 360, 0, 722, 388, 0, 365, - 391, 367, 0, 369, 0, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 0, 0, 1322, 0, 0, 0, 0, 0, 288, 0, - 393, 0, 0, 0, 398, 399, 400, 1397, 1398, 1399, - 1400, 1401, 1402, 1403, 1404, 407, 408, 0, 288, 472, - 0, 589, 0, 0, 1405, 0, 620, 0, 589, 0, - 470, 783, 783, 783, 589, 589, 0, 0, 0, 0, - 621, 0, 0, 0, 471, 622, 723, 1071, 0, 0, - 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 724, 444, 0, 0, 471, 725, 471, 1399, 1400, 1401, - 1402, 1403, 1404, 1544, 1545, 1546, 0, 1547, 0, 488, - 0, 490, 1405, 0, 0, 442, 0, 472, 0, 589, - 0, 0, 0, 0, 0, 754, 0, 0, 500, 0, - 501, 502, 503, 504, 505, 0, 0, 0, 0, 0, - 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 0, 0, - 0, 515, 0, 589, 0, 471, 0, 1405, 0, 0, - 523, 0, 0, 526, 0, 0, 0, 0, 589, 783, - 1520, 534, 1406, 1407, 1408, 1409, 1339, 783, 1410, 1411, - 1412, 1413, 1414, 0, 1415, 1416, 1417, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, - 0, 0, 215, 216, 217, 0, 0, 885, 0, 470, - 570, 0, 0, 0, 574, 0, 0, 0, 236, 237, - 238, 239, 240, 241, 0, 0, 0, 231, 0, 470, - 1372, 470, 0, 242, 568, 0, 1410, 1411, 1412, 1413, - 1414, 0, 1415, 1416, 1417, 0, 0, 471, 0, 1322, - 1322, 1322, 1322, 1322, 0, 1322, 218, 0, 0, 0, - 0, 0, 0, 0, 599, 0, 0, 0, 219, 220, - 0, 0, 0, 0, 931, 1406, 1407, 1408, 1409, 0, - 296, 1410, 1411, 1412, 1413, 1414, 0, 1415, 1416, 1417, - 470, 0, 639, 0, 234, 235, 236, 237, 238, 239, - 240, 241, 296, 0, 221, 222, 0, 223, 0, 0, - 296, 242, 224, 0, 225, 471, 0, 0, 0, 0, - 0, 1389, 1390, 1391, 1392, 1393, 0, 1396, 0, 0, - 0, 0, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 0, 0, 1487, 756, 247, 248, 249, 250, 251, - 252, 253, 712, 254, 255, 256, 0, 0, 0, 729, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 759, 0, 760, 1322, - 761, 0, 0, 407, 1466, 1467, 1468, 1469, 1470, 1471, - 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, - 1482, 1483, 1484, 0, 0, 0, 0, 0, 0, 243, + 6, 214, 307, 683, 328, 713, 330, 509, 1244, 799, + 284, 902, 185, 361, 773, 363, 364, 365, 366, 497, + 368, 922, 370, 835, 372, 394, 183, 644, 990, 258, + 1352, 259, 184, 352, 610, 189, 263, 291, 614, 104, + 388, 775, 267, 268, 269, 608, 791, 790, 353, 272, + 837, 396, 397, 1394, 516, 354, 645, 404, 405, 718, + -755, 233, -756, 411, 651, 260, 150, 679, 618, 849, + 407, 1017, -757, 556, 407, 910, 772, 912, 913, 914, + 915, 916, 407, 906, -95, 412, -95, 155, -95, 408, + 283, 283, 557, 595, 413, 151, 822, 261, 293, 823, + 1073, 1044, 521, 264, 407, 286, 287, 288, 407, 809, + 357, 148, 940, 941, 810, 983, 984, 985, 986, 1074, + 407, 243, 1110, 1257, 355, 820, 407, 1258, 152, 149, + 356, -755, 153, -756, -755, 1004, -756, 608, 797, 1259, + 1111, 904, 407, -757, 907, 1260, -757, 360, 360, 1381, + 360, 360, 360, 360, 154, 360, 1413, 360, 987, 360, + 156, 1301, 1385, 447, 258, 448, 259, 449, 1382, 267, + 268, 269, 272, 988, 989, 360, 608, 798, 440, 441, + 157, 1386, 1353, 293, 158, 190, 360, 360, 687, 352, + 1082, 801, 360, 360, 457, 459, 438, 539, 159, 243, + 838, 619, 850, 1395, 353, 885, 719, 1388, 289, 160, + 450, 354, 301, 302, 303, 734, 304, 306, 308, -758, + 352, 312, 161, 519, 352, 520, 1389, 267, 319, 162, + 415, 491, 163, 325, 326, 353, 329, 332, 333, 353, + 337, 338, 354, 164, 992, 290, 354, 993, 1020, 407, + 413, 481, 255, 256, 257, 638, 572, 165, 1023, 283, + 283, 166, 407, 1103, 186, 819, 357, 167, 1474, 1099, + 472, 216, 217, 218, 455, 283, 283, 455, 455, 474, + 355, 1510, 1013, 1014, 478, 1093, 356, 1423, 1424, 1425, + -758, 451, 1267, -758, 538, 407, 10, 357, 11, 285, + 809, 357, 473, 1247, 994, 452, 1, 2, 3, 168, + 453, 355, 926, 927, 1511, 355, 407, 356, 273, 6, + 274, 356, 275, 407, 1518, 219, 252, 253, 254, 407, + 255, 256, 257, 525, 827, 1512, 169, 220, 221, 170, + 1552, 407, 1513, 1519, 171, 1106, 1005, 407, 1530, 736, + 172, 737, 738, 739, 407, 293, 173, 1105, 683, 1553, + 1563, 407, 174, 1262, 1010, 276, 1564, 825, 454, 456, + 458, 460, 461, 1565, 222, 223, 175, 224, 809, 1019, + 1566, 176, 225, 884, 226, 187, 531, 188, 532, 1096, + 533, 360, 1097, 1339, 1261, 796, -95, 531, -95, 532, + -95, 991, 191, 306, 312, 988, 989, 1100, 192, 499, + 193, 592, 988, 989, 1251, 814, 815, 816, 817, 818, + 1436, 194, 679, 286, 287, 288, 747, -274, 1254, 262, + 748, 917, 918, 1268, 988, 989, 1332, 271, 1413, 1271, + 1272, 819, 1022, 481, 455, 298, 277, 309, 455, 455, + 455, 455, 455, 1102, 918, 612, 472, 1367, 1368, 1369, + 278, 313, 455, 314, 731, 279, 455, 455, 1108, 1109, + 280, 629, 315, 749, 641, 758, 988, 989, 491, 316, + 710, 216, 217, 218, 317, 472, 322, 613, 473, 318, + 1331, 900, 323, 1334, 684, 324, 327, 389, 1269, 1270, + 6, 406, 391, 392, 398, 286, 287, 288, 892, 413, + 631, 711, 893, 445, 723, 475, -273, 473, 482, 494, + 493, 495, 510, 512, 732, 750, 289, 6, 1336, 522, + 523, 527, 535, 1350, 407, 219, 541, 352, 600, 587, + 540, 542, 603, 604, 605, 606, 607, 220, 221, 543, + 547, 544, 353, 549, 751, 894, 609, 545, 546, 354, + 615, 616, 548, 554, 1071, 1420, 1421, 1422, 752, 1423, + 1424, 1425, 558, 753, 550, 551, 1012, 552, 754, 553, + 472, 555, 574, 559, 222, 223, 560, 224, 415, 474, + 787, 580, 225, 1021, 226, 561, 562, 650, 563, 564, + 455, 793, 565, 566, 567, 568, 569, 641, 289, 472, + 575, 629, 473, 576, 357, 846, 592, 578, 579, 581, + 629, 629, 629, 629, 629, 629, 415, 902, 355, 583, + 584, 185, 590, 794, 356, 597, 895, 415, 1265, 601, + 599, 473, -275, 608, 649, 183, 6, 830, 617, 685, + 896, 184, 643, 758, 646, 897, 688, 712, 758, 689, + 898, 690, 731, 691, 731, 731, 731, 731, 731, 1084, + 692, 710, 715, 693, 694, 735, 814, 815, 816, 817, + 818, 759, 286, 287, 288, 620, 761, 758, 758, 621, + 758, 758, 758, 758, 789, 6, 767, 1358, 762, 1359, + 769, 995, 996, 768, 770, 771, 792, 472, 629, 1000, + 472, 1001, 1505, 1506, 1507, 802, 474, 64, 811, 474, + 481, 821, 732, 1504, 732, 732, 732, 732, 732, -364, + 1431, 824, 622, 630, 832, 631, 828, 632, 840, 473, + 833, 930, 473, 185, 937, 834, 836, 1440, 1441, 1442, + 839, 878, 848, 879, 880, 787, 415, 183, 881, 1429, + 1085, 683, 1086, 184, 882, 883, 886, 888, 889, 905, + 903, 195, 196, 197, 198, 199, 911, 1088, 234, 908, + 633, 919, 472, 928, 627, 289, 931, 932, 939, 874, + 875, 997, 629, 998, 415, 415, 999, 1002, 787, 1006, + 1007, 629, 483, 484, 485, 1008, 1009, 1015, 641, 1016, + 1025, 809, 1069, 623, 473, 819, -282, 1329, 641, 1028, + 1035, 1559, 1500, 1043, 1037, 679, 1072, 624, 1031, 1503, + 1567, 1091, 625, 1075, 1078, 1508, 1509, 626, 1079, 1080, + 472, 1092, 1098, 1101, 758, 918, 1112, 1113, 1246, 1248, + 731, 1249, 1498, 1252, 1256, 1107, 219, 710, 1250, 1264, + 1245, 634, 1287, 1274, 1273, 1276, 1275, 1289, 220, 221, + 1286, 1288, 473, 1290, 1021, 635, 6, 1304, 758, 1077, + 636, 1292, 1296, 1305, 1294, 637, 629, 1306, 1295, 1297, + 1307, 1534, 629, 629, 629, 629, 629, 629, 1095, 1291, + 1308, 415, 1309, 1310, 1311, 488, 223, 403, 224, 1312, + 732, 472, 1330, 225, 1333, 226, 1337, 641, 1338, 1355, + 474, 1532, 1263, 1348, 795, 1549, 286, 287, 288, 724, + 241, 242, 937, 725, 804, 805, 806, 807, 808, 1344, + 1558, 243, 290, 473, 1354, 1356, 1357, 1370, 1373, 1374, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 185, 439, 1371, 1341, 1342, 726, 443, 1376, 1375, + 1378, 1377, 1383, 1380, 1384, 183, 1387, 1390, 641, 1391, + 1427, 184, 329, 1392, 1393, 1430, 1396, 1432, 1433, 472, + 1438, 592, 1457, 283, 1456, 472, 472, 1458, 474, 1434, + 415, 415, 1437, 498, 474, 474, 1459, 1439, 1443, 1444, + 1460, 899, 1463, 1461, 1462, 1464, 1469, 1473, 1501, 289, + 1499, 473, 1502, 1514, 360, 1516, 1517, 473, 473, 1520, + 1521, 1522, 511, 1523, 1525, 1329, 1329, 1329, 1329, 1329, + 1535, 1329, 1527, 1536, 1526, 1538, 1533, 727, 1537, 1539, + 1540, 1541, 1542, 213, 1543, 1544, 250, 251, 252, 253, + 254, 728, 255, 256, 257, 1550, 729, 1545, 1546, 1560, + 1561, 1548, 1095, 1562, 237, 238, 239, 240, 241, 242, + 1551, 629, 1568, 1569, 472, 500, 1340, 592, 831, 243, + 592, 1349, 1426, 474, 570, 1011, 515, 1089, 1515, 360, + 360, 1347, 887, 1313, 1018, 1046, 1372, 1343, 589, 517, + 0, 585, 586, 0, 0, 0, 473, 0, 593, 1329, + 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, + 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 0, 0, + 0, 0, 362, 0, 0, 0, 0, 367, 0, 369, + 0, 371, 0, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 0, 0, + 1351, 0, 0, 216, 217, 218, 0, 0, 395, 0, + 640, 0, 400, 401, 402, 758, 0, 1329, 0, 1083, + 0, 1409, 1410, 1411, 1412, 0, 804, 805, 806, 807, + 808, 0, 0, 0, 1413, 0, 216, 217, 218, 930, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 0, + 255, 256, 257, 0, 0, 0, 0, 219, 722, 0, + 0, 0, 0, 472, 0, 0, 0, 0, 746, 220, + 221, 0, 684, 1329, 0, 0, 0, 0, 232, 0, + 787, 283, 0, 472, 0, 472, 1403, 0, 0, 758, + 219, 0, 474, 444, 474, 473, 0, 0, 0, 0, + 0, 270, 220, 221, 0, 6, 222, 223, 0, 224, + 0, 1361, 1363, 1365, 225, 473, 226, 473, 0, 0, + 0, 297, 0, 0, 216, 217, 218, 0, 0, 788, + 0, 0, 0, 1452, 1453, 0, 1454, 0, 1455, 222, + 223, 321, 224, 640, 227, 472, 0, 225, 228, 226, + 0, 336, 0, 229, 474, 0, 0, 592, 0, 1418, + 1419, 1420, 1421, 1422, 937, 1423, 1424, 1425, 0, 479, + 0, 0, 0, 320, 592, 592, 592, 473, 219, 0, + 0, 826, 0, 0, 1495, 216, 217, 218, 0, 0, + 220, 221, 0, 1445, 0, 1446, 390, 1447, 0, 393, + 1448, 1449, 1450, 0, 0, 0, 841, 842, 843, 844, + 0, 847, 70, 571, 71, 72, 73, 0, 0, 0, + 0, 0, 0, 0, 1018, 0, 0, 222, 223, 0, + 224, 0, 0, 0, 0, 225, 0, 226, 472, 219, + 0, 0, 80, 0, 409, 410, 0, 474, 0, 592, + 0, 220, 221, 0, 0, 0, 592, 0, 266, 787, + 787, 787, 592, 592, 0, 0, 0, 0, 0, 588, + 473, 0, 0, 0, 229, 0, 1077, 0, 82, 83, + 936, 236, 237, 238, 239, 240, 241, 242, 222, 223, + 446, 224, 0, 0, 0, 88, 225, 243, 226, 0, + 90, 0, 1554, 1555, 1556, 0, 1557, 472, 490, 0, + 492, 0, 0, 0, 0, 0, 474, 0, 592, 0, + 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, + 504, 505, 506, 507, 508, 0, 0, 0, 0, 473, + 0, 0, 716, 0, 640, 0, 0, 0, 0, 733, + 0, 518, 592, 0, 640, 0, 0, 0, 1024, 0, + 526, 0, 0, 529, 0, 0, 0, 592, 787, 0, + 0, 537, 0, 0, 0, 1042, 763, 787, 764, 0, + 765, 0, 0, 0, 0, 0, 1047, 1048, 1049, 1050, + 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, + 1061, 1062, 1063, 1064, 1065, 1066, 1067, 0, 1070, 0, + 573, 0, 0, 0, 577, 0, 0, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 232, 255, 256, + 257, 235, 236, 237, 238, 239, 240, 241, 242, 0, + 0, 0, 0, 1397, 1398, 1399, 1400, 1401, 243, 1404, + 1411, 1412, 0, 640, 0, 0, 0, 0, 0, 0, + 0, 1413, 0, 0, 602, 0, 0, 0, 936, 239, + 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, + 297, 0, 243, 0, 0, 0, 1407, 1408, 1409, 1410, + 1411, 1412, 642, 0, 0, 0, 0, 845, 0, 0, + 0, 1413, 297, 0, 0, 0, 0, 0, 0, 0, + 297, 243, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 640, 0, 1255, 1475, 1476, 1477, + 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, + 1488, 1489, 1490, 1491, 1492, 1493, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 1299, 255, + 256, 257, 0, 0, 0, 596, 1418, 1419, 1420, 1421, + 1422, 0, 1423, 1424, 1425, 1528, 0, 0, 0, 0, + 0, 0, 0, 0, 409, 248, 249, 250, 251, 252, + 253, 254, 0, 255, 256, 257, 7, 8, 9, 10, + 0, 11, 12, 13, 200, 68, 1418, 1419, 1420, 1421, + 1422, 0, 1423, 1424, 1425, 0, 250, 251, 252, 253, + 254, 0, 255, 256, 257, 0, 0, 812, 0, 0, + 0, 1547, 0, 0, 1032, 1033, 1034, 0, 1036, 0, + 1039, 1040, 1041, 15, 69, 297, 0, 201, 0, 202, + 203, 204, 74, 75, 0, 20, 76, 0, 0, 205, + 22, 0, 0, 78, 0, 0, 0, 0, 23, 24, + 206, 0, 0, 0, 26, 0, 0, 207, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 208, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 891, 45, 0, 46, 0, 0, 0, + 0, 47, 0, 209, 210, 50, 0, 0, 51, 84, + 0, 0, 0, 52, 0, 0, 53, 85, 86, 87, + 211, 0, 0, 89, 925, 212, 0, 0, 0, 7, + 8, 9, 10, 0, 11, 12, 13, 496, 56, 0, + 0, 57, 58, 59, 0, 0, 60, 0, 61, 62, + 0, 1346, 63, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 297, 0, 235, 236, 237, 238, 239, 240, + 241, 242, 0, 0, 0, 0, 15, 341, 0, 0, + 201, 243, 202, 203, 204, 74, 0, 0, 20, 342, + 0, 0, 205, 22, 0, 0, 78, 0, 0, 0, + 0, 23, 24, 206, 0, 1379, 0, 26, 0, 0, + 207, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 208, 0, 0, 0, + 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, + 0, 0, 0, 0, 47, 0, 209, 210, 50, 0, + 936, 51, 84, 0, 0, 0, 52, 0, 0, 53, + 344, 345, 87, 211, 0, 0, 89, 0, 212, 0, + 0, 0, 7, 8, 9, 10, 1090, 11, 12, 13, + 14, 56, 0, 1314, 57, 58, 59, 0, 0, 60, + 0, 61, 62, 0, 0, 63, 0, 0, 0, 0, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 0, 254, 255, 256, 0, 0, 808, 593, 0, 0, - 470, 7, 8, 9, 10, 1322, 11, 12, 13, 199, - 68, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 1519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, - 241, 0, 0, 0, 0, 0, 0, 0, 15, 69, - 242, 0, 200, 0, 201, 202, 203, 74, 75, 0, - 20, 76, 0, 0, 204, 22, 0, 841, 78, 240, - 241, 886, 0, 23, 24, 205, 0, 1538, 0, 26, - 242, 0, 206, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 207, 0, - 1403, 1404, 920, 0, 0, 0, 44, 0, 45, 0, - 46, 1405, 0, 0, 0, 47, 0, 208, 209, 50, - 0, 0, 51, 84, 0, 0, 0, 52, 0, 0, - 53, 85, 86, 87, 210, 0, 0, 89, 0, 211, - 296, 234, 235, 236, 237, 238, 239, 240, 241, 0, - 0, 0, 56, 0, 0, 57, 58, 59, 242, 0, - 60, 0, 61, 62, 0, 0, 63, 0, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 0, - 254, 255, 256, 0, 0, 0, 1296, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 250, 251, 252, 253, 0, - 254, 255, 256, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1027, 1028, 1029, 0, 1031, 0, 1034, - 1035, 1036, 0, 0, 0, 1410, 1411, 1412, 1413, 1414, - 0, 1415, 1416, 1417, 0, 0, 0, 236, 237, 238, - 239, 240, 241, 1084, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 0, 254, 255, - 256, 0, 0, 0, 1522, 0, 0, 0, 0, 0, - 0, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, - 1117, 1118, 0, 1119, 1120, 1121, 1122, 1123, 1124, 1125, - 1126, 1127, 1128, 1129, 0, 0, 0, 0, 0, 0, - 0, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, - 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, - 0, 0, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, - 1157, 1158, 1159, 1160, 1161, 1162, 1163, 0, 1164, 1260, - 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 0, - 1174, 1175, 1176, 246, 247, 248, 249, 250, 251, 252, - 253, 0, 254, 255, 256, 0, 0, 0, 1177, 0, - 1287, 0, 0, 0, 1178, 1179, 1180, 0, 1181, 1182, - 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, - 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, - 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 0, 0, 0, 1214, 1215, 1216, 1217, 1218, 1219, - 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, - 1230, 1231, 1232, 1233, 1234, 1427, 1235, 1236, 0, 0, - 0, 920, 0, 0, 0, 0, 0, 0, 0, 0, - 1307, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, - 1117, 1118, 0, 1119, 1120, 1121, 1122, 1123, 1124, 1125, - 1126, 1127, 1128, 1129, 0, 0, 0, 0, 0, 0, - 0, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, - 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, - 0, 0, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, - 1157, 1158, 1159, 1160, 1161, 1162, 1163, 0, 1164, 0, - 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 0, - 1174, 1175, 1176, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1177, 0, - 0, 0, 0, 0, 1178, 1179, 1180, 0, 1181, 1182, - 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, - 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, - 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 0, 0, 1359, 1214, 1215, 1216, 1217, 1218, 1219, - 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, - 1230, 1231, 1232, 1233, 1234, 0, 1235, 1236, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 8, 9, 10, 0, 11, 12, 13, 494, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 339, 0, 0, - 200, 0, 201, 202, 203, 74, 0, 0, 20, 340, - 0, 0, 204, 22, 0, 0, 78, 0, 0, 0, - 0, 23, 24, 205, 0, 0, 0, 26, 0, 0, - 206, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 207, 1456, 1457, 1458, - 1459, 0, 1462, 1463, 44, 0, 45, 0, 46, 0, - 0, 0, 0, 47, 0, 208, 209, 50, 0, 0, - 51, 84, 0, 0, 0, 52, 0, 0, 53, 342, - 343, 87, 210, 0, 0, 89, 0, 211, 7, 8, - 9, 10, 0, 11, 12, 13, 14, 0, 1515, 0, - 56, 0, 0, 57, 58, 59, 0, 0, 60, 0, - 61, 62, 0, 0, 63, 0, 0, 0, 0, 234, - 235, 236, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 242, 0, 0, 16, - 0, 17, 18, 19, 0, 0, 0, 20, 0, 739, - 740, 21, 22, 0, 0, 0, 0, 0, 0, 0, - 23, 24, 25, 0, 0, 0, 26, 0, 0, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, - 0, 0, 47, 0, 48, 49, 50, 0, 0, 51, - 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, - 0, 54, 7, 8, 9, 10, 55, 11, 12, 13, - 14, 741, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 57, 58, 59, 0, 0, 60, 0, 61, - 62, 0, 591, 63, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 0, 254, 255, 256, 15, + 254, 0, 255, 256, 257, 0, 0, 0, 1302, 15, 0, 0, 0, 16, 0, 17, 18, 19, 0, 0, - 0, 20, 0, 0, 0, 21, 22, 215, 216, 217, + 1496, 20, 0, 743, 744, 21, 22, 0, 0, 1413, 0, 0, 0, 0, 23, 24, 25, 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, - 0, 46, 0, 0, 0, 0, 47, 0, 48, 49, - 50, 218, 0, 51, 0, 0, 0, 0, 52, 0, - 0, 53, 0, 219, 220, 54, 7, 8, 9, 10, - 55, 11, 12, 13, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 56, 0, 0, 57, 58, 59, 0, - 0, 60, 0, 61, 62, 435, 0, 63, 0, 221, - 222, 0, 223, 0, 0, 0, 0, 224, 0, 225, - 0, 0, 0, 15, 440, 0, 0, 16, 0, 17, - 18, 19, 0, 0, 0, 20, 0, 0, 0, 21, - 22, 0, 0, 0, 0, 0, 0, 226, 23, 24, - 25, 227, 0, 0, 26, 0, 228, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, + 45, 0, 46, 0, 0, 0, 0, 47, 0, 48, + 49, 50, 1266, 0, 51, 339, 340, 0, 0, 52, + 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, + 0, 55, 0, 0, 0, 70, 745, 71, 72, 73, + 0, 0, 0, 1293, 56, 0, 0, 57, 58, 59, + 0, 0, 60, 774, 61, 62, 341, 0, 63, 70, + 0, 71, 72, 73, 74, 80, 0, 0, 342, 775, + 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, + 0, 266, 79, 776, 1418, 1419, 1420, 1421, 1422, 80, + 1423, 1424, 1425, 0, 0, 0, 777, 778, 0, 0, + 0, 82, 83, 0, 70, 81, 71, 72, 73, 0, + 0, 0, 779, 0, 0, 925, 265, 343, 88, 0, + 0, 0, 0, 90, 0, 82, 83, 0, 0, 0, + 0, 84, 0, 0, 80, 0, 0, 0, 1402, 344, + 345, 87, 88, 780, 0, 89, 781, 90, 0, 782, + 266, 0, 346, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 0, 0, 783, 0, 0, 347, 0, + 82, 83, 243, 0, 0, 0, 0, 784, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 785, 90, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1465, 1466, 1467, 1468, 0, 1471, 1472, 1114, + 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, + 0, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, + 1134, 1135, 0, 0, 0, 0, 0, 0, 0, 1136, + 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, + 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 0, 0, + 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, + 1165, 1166, 1167, 1168, 1169, 0, 1170, 0, 1171, 1172, + 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1366, 1180, 1181, + 1182, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 0, 255, 256, 257, 1183, 0, 0, 1531, + 0, 0, 0, 1184, 1185, 1186, 0, 1187, 1188, 1189, + 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, + 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, + 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, + 0, 0, 0, 1220, 1221, 1222, 1223, 1224, 1225, 1226, + 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, + 1237, 1238, 1239, 1240, 1435, 1241, 1242, 1114, 1115, 1116, + 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 0, 1125, + 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, + 0, 0, 0, 0, 0, 0, 0, 1136, 1137, 1138, + 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, + 1149, 1150, 1151, 1152, 1153, 1154, 0, 0, 1155, 1156, + 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, + 1167, 1168, 1169, 0, 1170, 0, 1171, 1172, 1173, 1174, + 1175, 1176, 1177, 1178, 1179, 0, 1180, 1181, 1182, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1183, 1524, 0, 0, 0, 0, + 0, 1184, 1185, 1186, 0, 1187, 1188, 1189, 1190, 1191, + 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, + 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, + 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 0, 0, + 0, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, + 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, + 1239, 1240, 0, 1241, 1242, 7, 8, 9, 10, 0, + 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 243, 0, 0, 16, 0, 17, 18, + 19, 0, 0, 0, 20, 0, 0, 0, 21, 22, + 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, + 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, + 47, 0, 48, 49, 50, 0, 0, 51, 0, 0, + 0, 0, 52, 0, 0, 53, 0, 0, 0, 54, + 7, 8, 9, 10, 55, 11, 12, 13, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, + 57, 58, 59, 0, 0, 60, 0, 61, 62, 437, + 594, 63, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 0, 255, 256, 257, 15, 442, 0, + 0, 16, 0, 17, 18, 19, 0, 0, 0, 20, + 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, + 0, 0, 23, 24, 25, 0, 0, 0, 26, 0, + 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, + 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, + 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, + 53, 0, 0, 0, 54, 7, 8, 9, 10, 55, + 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 57, 58, 59, 0, 0, + 60, 0, 61, 62, 0, 0, 63, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 0, 0, + 0, 0, 15, 721, 0, 0, 16, 243, 17, 18, + 19, 0, 0, 0, 20, 0, 0, 0, 21, 22, + 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, + 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 54, 7, 8, 9, 10, 55, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 57, 58, 59, 0, 0, 60, 0, 61, 62, 0, - 0, 63, 0, 0, 0, 234, 235, 236, 237, 238, - 239, 240, 241, 0, 0, 0, 0, 15, 717, 0, - 0, 16, 242, 17, 18, 19, 0, 0, 0, 20, + 0, 63, 0, 938, 0, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 15, 255, 256, + 257, 16, 0, 17, 18, 19, 0, 0, 0, 20, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, - 0, 0, 0, 0, 47, 0, 48, 49, 50, 0, - 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, - 0, 0, 0, 54, 7, 8, 9, 10, 55, 11, - 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 56, 0, 0, 57, 58, 59, 0, 0, 60, - 0, 61, 62, 0, 0, 63, 0, 933, 0, 0, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 15, 254, 255, 256, 16, 0, 17, 18, 19, - 0, 0, 0, 20, 0, 0, 0, 21, 22, 0, - 0, 0, 0, 0, 0, 0, 23, 24, 25, 0, - 0, 0, 26, 0, 0, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 0, 0, 0, 44, - 0, 45, 0, 46, 0, 0, 0, 0, 47, 0, - 48, 49, 50, 0, 0, 51, 0, 0, 0, 0, - 52, 0, 0, 53, 0, 0, 0, 54, 7, 8, - 9, 10, 55, 11, 12, 13, 14, 928, 0, 0, - 0, 0, 0, 0, 0, 56, 0, 0, 57, 58, - 59, 0, 0, 60, 0, 61, 62, 0, 0, 63, - 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, - 241, 0, 0, 0, 0, 15, 0, 0, 0, 16, - 242, 17, 18, 19, 0, 0, 0, 20, 0, 0, - 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, - 23, 24, 25, 0, 0, 0, 26, 0, 0, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, - 0, 0, 47, 0, 48, 49, 50, 0, 0, 51, - 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, - 0, 54, 7, 8, 9, 10, 55, 11, 12, 13, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 57, 58, 59, 0, 0, 60, 0, 61, - 62, 1063, 0, 63, 1271, 0, 0, 0, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 15, - 254, 255, 256, 16, 0, 17, 18, 19, 0, 0, - 0, 20, 0, 0, 0, 21, 22, 0, 0, 0, - 0, 0, 0, 0, 23, 24, 25, 0, 0, 0, - 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, - 0, 46, 0, 0, 0, 0, 47, 0, 48, 49, - 50, 0, 0, 51, 0, 0, 0, 0, 52, 0, - 0, 53, 0, 0, 0, 54, 7, 8, 9, 10, - 55, 11, 12, 13, 14, 1338, 0, 0, 0, 0, - 0, 0, 0, 56, 0, 0, 57, 58, 59, 0, - 0, 60, 0, 61, 62, 0, 0, 63, 0, 0, - 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, - 0, 0, 0, 15, 0, 0, 0, 16, 242, 17, - 18, 19, 0, 0, 0, 20, 0, 0, 0, 21, - 22, 0, 0, 0, 0, 0, 0, 0, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, + 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, + 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, + 53, 0, 0, 0, 54, 7, 8, 9, 10, 55, + 11, 12, 13, 14, 933, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 57, 58, 59, 0, 0, + 60, 0, 61, 62, 0, 0, 63, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 0, 0, + 0, 0, 15, 0, 0, 0, 16, 243, 17, 18, + 19, 0, 0, 0, 20, 0, 0, 0, 21, 22, + 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, + 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 54, 7, 8, 9, 10, 55, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, - 57, 58, 59, 0, 0, 60, 0, 61, 62, 1485, - 0, 63, 0, 0, 1294, 0, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 15, 254, 255, - 256, 16, 0, 17, 18, 19, 0, 0, 0, 20, + 57, 58, 59, 0, 0, 60, 0, 61, 62, 1068, + 0, 63, 1277, 0, 0, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 15, 255, 256, + 257, 16, 0, 17, 18, 19, 0, 0, 0, 20, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, - 0, 0, 0, 0, 47, 0, 48, 49, 50, 0, - 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, - 0, 0, 0, 54, 649, 650, 651, 10, 55, 11, - 652, 653, 67, 68, 0, 0, 654, 0, 0, 0, - 0, 56, 0, 0, 57, 58, 59, 0, 0, 60, - 0, 61, 62, 0, 0, 63, 234, 235, 236, 237, - 238, 239, 240, 241, 0, 0, 0, 0, 462, 0, - 0, 655, 69, 242, 0, 70, 0, 71, 72, 73, - 74, 463, 0, 656, 76, 0, 0, 77, 657, 0, - 0, 78, 0, 0, 0, 0, 658, 659, 79, 0, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, - 0, 81, 0, 0, 0, 0, 0, 0, 242, 660, - 0, 661, 0, 662, 0, 0, 0, 464, 663, 0, - 82, 83, 664, 0, 0, 665, 84, 0, 0, 0, - 666, 0, 0, 667, 85, 86, 87, 88, 0, 0, - 89, 0, 90, 0, 649, 650, 651, 10, 0, 11, - 652, 653, 67, 68, 0, 668, 1040, 0, 669, 670, - 0, 0, 0, 671, 0, 672, 0, 693, 0, 673, - 0, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 0, 254, 255, 256, 694, 0, 462, 0, - 0, 655, 69, 0, 0, 70, 0, 71, 72, 73, - 74, 463, 0, 656, 76, 0, 0, 77, 657, 0, - 0, 78, 0, 0, 0, 0, 658, 659, 79, 0, - 0, 0, 0, 0, 0, 80, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 0, 254, 255, - 256, 81, 0, 0, 0, 0, 0, 0, 0, 660, - 0, 661, 0, 662, 0, 0, 0, 464, 663, 0, - 82, 83, 664, 0, 0, 665, 84, 0, 0, 0, - 666, 0, 0, 667, 85, 86, 87, 88, 0, 0, - 89, 0, 90, 7, 8, 9, 10, 0, 11, 12, - 13, 0, 0, 0, 0, 668, 0, 0, 669, 670, - 0, 0, 0, 671, 0, 672, 0, 0, 0, 673, + 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, + 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, + 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, + 53, 0, 0, 0, 54, 7, 8, 9, 10, 55, + 11, 12, 13, 14, 1345, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 57, 58, 59, 0, 0, + 60, 0, 61, 62, 0, 0, 63, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 0, 0, + 0, 0, 15, 0, 0, 0, 16, 243, 17, 18, + 19, 0, 0, 0, 20, 0, 0, 0, 21, 22, + 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, + 0, 0, 0, 26, 0, 0, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, + 47, 0, 48, 49, 50, 0, 0, 51, 0, 0, + 0, 0, 52, 0, 0, 53, 0, 0, 0, 54, + 7, 8, 9, 10, 55, 11, 12, 13, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, + 57, 58, 59, 0, 0, 60, 0, 61, 62, 1494, + 0, 63, 0, 0, 1300, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 15, 255, 256, + 257, 16, 0, 17, 18, 19, 0, 0, 0, 20, + 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, + 0, 0, 23, 24, 25, 0, 0, 0, 26, 0, + 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, + 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, + 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, + 53, 0, 0, 0, 54, 652, 653, 654, 10, 55, + 11, 655, 656, 67, 68, 0, 0, 657, 0, 0, + 0, 0, 56, 0, 0, 57, 58, 59, 0, 0, + 60, 0, 61, 62, 0, 0, 63, 235, 236, 237, + 238, 239, 240, 241, 242, 0, 0, 0, 0, 464, + 0, 0, 658, 69, 243, 0, 70, 0, 71, 72, + 73, 74, 465, 0, 659, 76, 0, 0, 77, 660, + 0, 0, 78, 0, 0, 0, 0, 661, 662, 79, + 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 0, 0, 81, 0, 0, 0, 0, 0, 0, 243, + 0, 663, 0, 664, 0, 665, 0, 0, 0, 466, + 666, 0, 82, 83, 667, 0, 0, 668, 84, 0, + 0, 0, 669, 0, 0, 670, 85, 86, 87, 88, + 0, 0, 89, 0, 90, 0, 652, 653, 654, 10, + 0, 11, 655, 656, 67, 68, 0, 671, 1045, 0, + 672, 673, 0, 0, 0, 674, 0, 675, 0, 697, + 0, 676, 0, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 0, 255, 256, 257, 698, 0, + 464, 0, 0, 658, 69, 0, 0, 70, 0, 71, + 72, 73, 74, 465, 0, 659, 76, 0, 0, 77, + 660, 0, 0, 78, 0, 0, 0, 0, 661, 662, + 79, 0, 0, 774, 0, 0, 0, 80, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 0, + 255, 256, 257, 81, 0, 0, 0, 0, 0, 0, + 0, 0, 663, 776, 664, 0, 665, 0, 0, 0, + 466, 666, 0, 82, 83, 667, 777, 778, 668, 84, + 0, 0, 0, 669, 0, 0, 670, 85, 86, 87, + 88, 0, 779, 89, 0, 90, 7, 8, 9, 10, + 0, 11, 12, 13, 0, 0, 0, 0, 671, 0, + 0, 672, 673, 0, 0, 0, 674, 0, 675, 0, + 0, 0, 676, 780, 0, 0, 781, 0, 0, 782, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1315, 0, 783, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1316, 0, 784, 0, 0, + 1317, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 23, 24, + 0, 785, 0, 0, 26, 0, 0, 1413, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 235, 236, 237, 238, 239, 240, 241, + 242, 0, 0, 0, 45, 0, 46, 0, 0, 0, + 243, 1318, 0, 0, 0, 1319, 0, 0, 1320, 0, + 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1321, 0, + 0, 1322, 1323, 1324, 942, 0, 1325, 0, 1326, 62, + 0, 0, 1327, 0, 943, 944, 945, 946, 947, 948, + 949, 950, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 951, 0, 952, 953, 954, 955, 956, 957, 958, + 959, 960, 961, 962, 963, 0, 0, 1415, 1416, 1417, + 0, 0, 1418, 1419, 1420, 1421, 1422, 0, 1423, 1424, + 1425, 0, 0, 964, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 339, 340, 0, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 0, 255, 256, 257, 582, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 965, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 70, 0, 71, 72, 73, 74, 0, 0, 0, 342, + 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, + 0, 0, 0, 79, 0, 0, 966, 0, 0, 967, + 80, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 0, 979, 980, 0, 81, 981, 513, 514, + 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, + 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, + 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, + 344, 345, 87, 88, 0, 0, 89, 0, 90, 341, + 0, 0, 70, 0, 71, 72, 73, 74, 0, 0, + 0, 342, 0, 0, 77, 0, 0, 0, 78, 347, + 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, + 0, 0, 80, 235, 236, 237, 238, 239, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 81, 0, + 243, 0, 0, 0, 0, 216, 217, 218, 0, 0, + 343, 0, 0, 0, 0, 0, 0, 0, 82, 83, + 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, + 0, 0, 344, 345, 87, 88, 0, 0, 89, 0, + 90, 235, 236, 237, 238, 239, 240, 241, 242, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 219, + 0, 347, 235, 236, 237, 238, 239, 240, 241, 242, + 0, 220, 221, 0, 0, 0, 0, 0, 0, 243, + 235, 236, 237, 238, 239, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 243, 235, 236, + 237, 238, 239, 240, 241, 242, 0, 0, 222, 223, + 0, 224, 0, 0, 0, 243, 225, 0, 226, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 0, 255, 256, 257, 598, 235, 236, 237, 238, 239, + 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 243, 851, 852, 853, 854, 855, 856, 857, + 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 859, 0, 0, 0, 0, 0, 0, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 0, 255, + 256, 257, 686, 0, 0, 0, 0, 0, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 0, + 255, 256, 257, 766, 0, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 0, 255, 256, + 257, 909, 0, 0, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 0, 255, 256, 257, 1026, + 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1413, 0, 0, + 0, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 0, 255, 256, 257, 1298, 0, 0, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 0, 871, 872, 873, 1405, 1406, 1407, 1408, 1409, 1410, + 1411, 1412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1308, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1309, 0, 0, 0, 0, 1310, 235, 236, - 237, 238, 239, 240, 241, 23, 24, 0, 0, 0, - 0, 26, 0, 0, 242, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, - 45, 0, 46, 0, 0, 0, 0, 1311, 242, 0, - 0, 1312, 0, 0, 1313, 0, 0, 0, 0, 52, - 0, 0, 0, 0, 0, 0, 70, 0, 71, 72, - 73, 0, 0, 0, 0, 0, 0, 0, 264, 0, - 0, 0, 0, 0, 1314, 0, 0, 1315, 1316, 1317, - 937, 0, 1318, 0, 1319, 62, 80, 0, 1320, 0, - 938, 939, 940, 941, 942, 943, 944, 945, 0, 0, - 0, 0, 265, 0, 0, 0, 0, 946, 0, 947, - 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, - 958, 82, 83, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 0, 254, 255, 256, 0, 88, 959, - 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, - 0, 337, 338, 0, 0, 0, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 0, 254, 255, - 256, 579, 0, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - 0, 0, 960, 0, 0, 0, 0, 0, 0, 1405, - 0, 0, 339, 0, 0, 70, 0, 71, 72, 73, - 74, 0, 0, 0, 340, 0, 0, 77, 0, 0, - 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, - 0, 961, 0, 0, 962, 80, 963, 964, 965, 966, - 967, 968, 969, 970, 971, 972, 973, 0, 974, 975, - 0, 81, 976, 0, 337, 338, 0, 0, 0, 0, - 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, - 82, 83, 0, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 342, 343, 87, 88, 0, 0, - 89, 0, 90, 0, 0, 339, 0, 344, 70, 0, - 71, 72, 73, 74, 0, 0, 0, 340, 0, 0, - 77, 0, 0, 345, 78, 0, 0, 0, 1407, 1408, - 1409, 79, 0, 1410, 1411, 1412, 1413, 1414, 80, 1415, - 1416, 1417, 0, 0, 0, 0, 0, 0, 0, 0, - 510, 511, 0, 0, 81, 0, 70, 0, 71, 72, - 73, 0, 0, 0, 0, 341, 0, 0, 264, 0, - 0, 0, 0, 82, 83, 0, 0, 0, 0, 84, - 0, 0, 0, 0, 0, 0, 80, 342, 343, 87, - 88, 339, 0, 89, 70, 90, 71, 72, 73, 74, - 0, 0, 265, 340, 0, 0, 77, 477, 0, 0, - 78, 0, 0, 0, 0, 0, 345, 79, 0, 0, - 0, 82, 83, 0, 80, 234, 235, 236, 237, 238, - 239, 240, 241, 0, 0, 0, 0, 0, 88, 0, - 81, 0, 242, 90, 0, 0, 0, 481, 482, 483, - 70, 341, 71, 72, 73, 0, 0, 0, 0, 82, - 83, 0, 0, 0, 0, 84, 175, 0, 0, 0, - 0, 0, 0, 342, 343, 87, 88, 0, 0, 89, - 80, 90, 234, 235, 236, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 265, 0, 0, 242, - 0, 218, 345, 234, 235, 236, 237, 238, 239, 240, - 241, 0, 0, 219, 220, 82, 83, 0, 0, 0, - 242, 234, 235, 236, 237, 238, 239, 240, 241, 0, - 0, 0, 88, 0, 0, 0, 0, 90, 242, 234, - 235, 236, 237, 238, 239, 240, 241, 0, 0, 486, - 222, 0, 223, 0, 0, 0, 242, 224, 0, 225, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 0, 254, 255, 256, 595, 234, 235, 236, 237, - 238, 239, 240, 241, 0, 0, 289, 0, 0, 0, - 0, 0, 0, 242, 847, 848, 849, 850, 851, 852, - 853, 854, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 855, 0, 0, 0, 0, 0, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 0, 254, - 255, 256, 683, 0, 0, 0, 0, 0, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 0, - 254, 255, 256, 762, 0, 0, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 0, 254, 255, - 256, 904, 0, 0, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 0, 254, 255, 256, 1021, - 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, + 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 0, 254, 255, 256, 1292, 0, 0, 856, - 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, - 0, 867, 868, 869, 105, 0, 106, 0, 0, 107, - 108, 0, 0, 0, 0, 0, 0, 109, 110, 0, - 0, 0, 0, 0, 0, 0, 111, 0, 112, 113, - 114, 115, 0, 0, 0, 116, 0, 0, 0, 0, - 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 0, 0, 0, - 125, 126, 127, 128, 0, 0, 0, 0, 0, 129, - 130, 67, 68, 131, 132, 460, 0, 461, 133, 0, - 0, 0, 0, 0, 134, 135, 0, 136, 236, 237, - 238, 239, 240, 241, 0, 137, 0, 0, 0, 0, - 0, 0, 0, 242, 0, 0, 0, 462, 0, 0, - 0, 69, 0, 0, 70, 0, 71, 72, 73, 74, - 463, 0, 0, 76, 0, 0, 77, 0, 0, 0, - 78, 236, 237, 238, 239, 240, 241, 79, 0, 0, - 0, 0, 0, 0, 80, 0, 242, 1399, 1400, 1401, - 1402, 1403, 1404, 0, 0, 0, 0, 0, 0, 0, - 81, 0, 1405, 1399, 1400, 1401, 1402, 1403, 1404, 0, - 0, 0, 0, 0, 0, 0, 464, 0, 1405, 82, - 83, 0, 0, 0, 0, 84, 0, 1399, 1400, 1401, - 1402, 1403, 1404, 85, 86, 87, 88, 0, 0, 89, - 0, 90, 1405, 238, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 242, 0, 0, 466, - 0, 0, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 0, 254, 255, 256, 0, 0, 0, 0, + 237, 238, 239, 240, 241, 242, 0, 0, 0, 0, + 0, 0, 0, 0, 1529, 243, 1414, 1415, 1416, 1417, + 0, 0, 1418, 1419, 1420, 1421, 1422, 0, 1423, 1424, + 1425, 105, 0, 106, 0, 0, 107, 108, 0, 0, + 0, 0, 0, 0, 109, 110, 237, 238, 239, 240, + 241, 242, 0, 111, 0, 112, 113, 114, 115, 0, + 0, 243, 116, 0, 0, 0, 0, 117, 0, 0, + 1414, 1415, 1416, 1417, 0, 0, 1418, 1419, 1420, 1421, + 1422, 0, 1423, 1424, 1425, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 0, 0, 0, 0, 0, 130, 131, 67, + 68, 132, 133, 462, 0, 463, 134, 0, 0, 0, + 0, 0, 135, 136, 0, 137, 0, 0, 0, 0, + 0, 0, 0, 138, 0, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 464, 255, 256, 257, 69, + 0, 0, 70, 0, 71, 72, 73, 74, 465, 0, + 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, + 0, 0, 0, 0, 0, 79, 1407, 1408, 1409, 1410, + 1411, 1412, 80, 247, 248, 249, 250, 251, 252, 253, + 254, 1413, 255, 256, 257, 216, 217, 218, 81, 237, + 238, 239, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 466, 0, 0, 82, 83, + 0, 0, 0, 0, 84, 0, 1407, 1408, 1409, 1410, + 1411, 1412, 85, 86, 87, 88, 0, 0, 89, 0, + 90, 1413, 1407, 1408, 1409, 1410, 1411, 1412, 0, 219, + 0, 0, 0, 467, 0, 0, 0, 1413, 468, 0, + 0, 220, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 481, 482, - 483, 0, 0, 0, 0, 0, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 0, 254, 255, 256, 0, - 0, 1407, 1408, 1409, 0, 0, 1410, 1411, 1412, 1413, - 1414, 0, 1415, 1416, 1417, 484, 0, 485, 1408, 1409, - 0, 0, 1410, 1411, 1412, 1413, 1414, 0, 1415, 1416, - 1417, 0, 218, 0, 0, 770, 0, 215, 216, 217, - 0, 0, 0, 1409, 219, 220, 1410, 1411, 1412, 1413, - 1414, 771, 1415, 1416, 1417, 0, 0, 0, 247, 248, - 249, 250, 251, 252, 253, 772, 254, 255, 256, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 773, 774, - 486, 222, 0, 223, 215, 216, 217, 0, 224, 0, - 225, 218, 0, 0, 775, 0, 0, 0, 0, 215, - 216, 217, 0, 219, 220, 0, 0, 0, 0, 0, - 0, 0, 0, 304, 487, 0, 304, 0, 0, 0, - 0, 0, 0, 0, 776, 0, 0, 777, 0, 0, - 778, 0, 0, 0, 0, 0, 0, 0, 218, 221, - 222, 0, 223, 0, 0, 0, 779, 224, 0, 225, - 219, 220, 0, 218, 105, 0, 106, 105, 780, 106, - 108, 0, 0, 108, 0, 219, 220, 109, 110, 0, - 109, 110, 781, 318, 0, 0, 0, 0, 112, 113, - 114, 112, 298, 114, 0, 0, 221, 222, 0, 223, - 299, 0, 0, 299, 224, 0, 225, 0, 0, 0, - 0, 221, 1272, 1273, 1274, 397, 67, 68, 0, 224, - 0, 225, 0, 123, 0, 0, 123, 0, 0, 0, - 499, 0, 1275, 128, 0, 0, 128, 1276, 0, 129, - 0, 0, 129, 131, 132, 0, 0, 132, 0, 0, - 215, 216, 217, 0, 0, 135, 69, 136, 135, 70, - 136, 71, 72, 73, 74, 75, 0, 0, 76, 0, - 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, - 0, 0, 79, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1033, 67, 68, 218, 81, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 0, 0, - 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, - 84, 0, 1461, 67, 68, 0, 0, 0, 85, 86, - 87, 88, 69, 0, 89, 70, 90, 71, 72, 73, - 74, 75, 221, 222, 76, 223, 0, 77, 0, 0, - 224, 78, 225, 70, 0, 71, 72, 73, 79, 0, - 0, 0, 0, 69, 0, 80, 70, 0, 71, 72, - 73, 74, 75, 0, 0, 76, 0, 0, 77, 0, - 0, 81, 78, 80, 0, 0, 0, 0, 0, 79, - 0, 0, 0, 0, 0, 0, 80, 0, 0, 265, - 82, 83, 0, 0, 0, 0, 84, 0, 695, 696, - 697, 0, 81, 0, 85, 86, 87, 88, 82, 83, - 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 82, 83, 0, 0, 88, 0, 84, 67, 68, - 90, 0, 460, 0, 0, 85, 86, 87, 88, 0, - 0, 89, 70, 90, 71, 72, 73, 698, 699, 0, - 0, 0, 0, 186, 77, 0, 0, 67, 68, 0, - 0, 796, 0, 0, 462, 79, 0, 0, 69, 0, - 0, 70, 80, 71, 72, 73, 74, 463, 0, 0, - 76, 0, 0, 77, 0, 0, 0, 78, 81, 0, - 0, 0, 0, 462, 79, 0, 0, 69, 0, 0, - 70, 80, 71, 72, 73, 74, 463, 82, 83, 76, - 0, 0, 77, 0, 0, 0, 78, 81, 0, 0, - 0, 700, 0, 79, 88, 0, 0, 89, 0, 90, - 80, 0, 0, 464, 0, 0, 82, 83, 0, 0, - 0, 0, 84, 0, 0, 0, 81, 0, 67, 68, + 483, 484, 485, 335, 0, 0, 0, 0, 222, 223, + 0, 224, 0, 0, 0, 0, 225, 0, 226, 0, + 0, 1415, 1416, 1417, 0, 0, 1418, 1419, 1420, 1421, + 1422, 0, 1423, 1424, 1425, 0, 0, 486, 0, 487, + 0, 0, 0, 0, 0, 0, 0, 248, 249, 250, + 251, 252, 253, 254, 219, 255, 256, 257, 0, 0, + 0, 0, 0, 0, 0, 0, 220, 221, 0, 305, + 0, 0, 1416, 1417, 0, 0, 1418, 1419, 1420, 1421, + 1422, 0, 1423, 1424, 1425, 0, 305, 0, 0, 1417, + 0, 0, 1418, 1419, 1420, 1421, 1422, 0, 1423, 1424, + 1425, 0, 0, 488, 223, 0, 224, 0, 0, 0, + 105, 225, 106, 226, 0, 0, 108, 0, 0, 0, + 0, 0, 0, 109, 110, 0, 0, 105, 70, 106, + 71, 72, 73, 108, 112, 113, 114, 489, 0, 0, + 109, 110, 0, 0, 0, 0, 300, 0, 0, 0, + 0, 112, 299, 114, 0, 0, 0, 0, 80, 0, + 0, 0, 0, 300, 216, 217, 218, 0, 0, 0, + 124, 0, 0, 0, 266, 0, 399, 67, 68, 0, + 129, 0, 0, 0, 0, 0, 130, 124, 0, 0, + 132, 133, 0, 0, 82, 83, 0, 129, 0, 0, + 0, 0, 136, 130, 137, 1038, 67, 68, 133, 0, + 0, 88, 0, 0, 0, 0, 90, 69, 219, 136, + 70, 137, 71, 72, 73, 74, 75, 0, 0, 76, + 220, 221, 77, 0, 0, 0, 78, 0, 0, 187, + 0, 0, 0, 79, 0, 0, 69, 0, 0, 70, + 80, 71, 72, 73, 74, 75, 0, 0, 76, 0, + 0, 77, 0, 0, 0, 78, 81, 222, 1278, 1279, + 1280, 0, 79, 0, 0, 225, 0, 226, 0, 80, + 0, 0, 0, 0, 0, 0, 82, 83, 1281, 0, + 0, 0, 84, 1282, 0, 81, 0, 1470, 67, 68, 85, 86, 87, 88, 0, 0, 89, 0, 90, 0, - 0, 0, 464, 0, 0, 82, 83, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 67, 68, 85, - 86, 87, 88, 0, 462, 89, 0, 90, 69, 0, - 0, 70, 0, 71, 72, 73, 74, 463, 0, 0, - 76, 0, 0, 77, 0, 0, 0, 78, 0, 0, - 0, 0, 0, 0, 79, 0, 0, 69, 0, 0, - 70, 80, 71, 72, 73, 74, 75, 0, 0, 76, - 0, 0, 77, 0, 0, 0, 78, 81, 0, 0, + 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, + 0, 84, 0, 0, 0, 0, 699, 700, 701, 85, + 86, 87, 88, 0, 0, 89, 0, 90, 69, 0, + 0, 70, 0, 71, 72, 73, 74, 75, 0, 0, + 76, 0, 0, 77, 0, 0, 0, 78, 699, 700, + 701, 0, 0, 0, 79, 0, 0, 0, 0, 0, + 70, 80, 71, 72, 73, 702, 703, 0, 0, 0, + 0, 0, 77, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, - 80, 0, 0, 464, 0, 0, 82, 83, 0, 0, - 0, 0, 84, 67, 68, 0, 81, 0, 0, 0, - 85, 86, 87, 88, 0, 0, 89, 0, 90, 0, - 0, 0, 0, 0, 0, 82, 83, 67, 68, 0, - 0, 84, 0, 0, 0, 215, 216, 217, 0, 85, - 86, 87, 88, 69, 0, 89, 70, 90, 71, 72, - 73, 74, 0, 0, 0, 76, 0, 70, 77, 71, - 72, 73, 78, 0, 0, 0, 0, 69, 0, 79, - 70, 0, 71, 72, 73, 74, 80, 0, 0, 76, - 0, 0, 77, 0, 0, 0, 78, 80, 0, 218, - 0, 0, 81, 79, 0, 0, 0, 0, 0, 0, - 80, 219, 220, 265, 0, 0, 0, 0, 608, 0, - 0, 82, 83, 67, 0, 0, 81, 84, 0, 0, - 0, 0, 82, 83, 0, 85, 86, 87, 88, 0, - 0, 89, 333, 90, 0, 82, 83, 221, 222, 88, - 223, 84, 176, 0, 90, 224, 0, 225, 0, 85, - 86, 87, 88, 69, 0, 89, 70, 90, 71, 72, - 73, 74, 521, 0, 0, 76, 0, 187, 77, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, - 0, 0, 177, 0, 0, 70, 80, 71, 72, 73, - 74, 998, 0, 0, 178, 0, 0, 77, 0, 0, - 0, 78, 81, 0, 0, 0, 0, 0, 79, 0, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 82, 83, 0, 0, 0, 0, 84, 176, 0, - 0, 81, 0, 0, 0, 85, 86, 87, 88, 0, + 80, 0, 70, 0, 71, 72, 73, 82, 83, 0, + 0, 0, 0, 84, 77, 0, 81, 0, 0, 0, + 0, 85, 86, 87, 88, 79, 0, 89, 0, 90, + 0, 0, 80, 0, 67, 68, 82, 83, 462, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, + 704, 0, 0, 88, 0, 0, 89, 0, 90, 0, + 0, 0, 0, 67, 68, 0, 0, 800, 82, 83, + 464, 0, 0, 0, 69, 0, 0, 70, 0, 71, + 72, 73, 74, 465, 0, 88, 76, 0, 89, 77, + 90, 0, 0, 78, 0, 0, 0, 0, 0, 464, + 79, 0, 0, 69, 0, 0, 70, 80, 71, 72, + 73, 74, 465, 0, 0, 76, 0, 0, 77, 0, + 0, 0, 78, 81, 0, 0, 0, 0, 0, 79, + 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, + 466, 0, 0, 82, 83, 216, 217, 218, 0, 84, + 0, 0, 81, 0, 0, 67, 68, 85, 86, 87, + 88, 0, 0, 89, 0, 90, 0, 0, 0, 466, + 0, 0, 82, 83, 0, 0, 0, 0, 84, 70, + 0, 71, 72, 73, 67, 68, 85, 86, 87, 88, + 0, 464, 89, 0, 90, 69, 0, 0, 70, 219, + 71, 72, 73, 74, 465, 0, 0, 76, 0, 80, + 77, 220, 221, 0, 78, 0, 0, 0, 0, 0, + 0, 79, 0, 0, 69, 266, 0, 70, 80, 71, + 72, 73, 74, 75, 0, 0, 76, 0, 0, 77, + 0, 0, 0, 78, 81, 82, 83, 0, 222, 223, + 79, 224, 0, 0, 0, 0, 225, 80, 226, 0, + 0, 466, 88, 0, 82, 83, 0, 90, 0, 1281, + 84, 67, 68, 81, 1360, 0, 0, 0, 85, 86, + 87, 88, 0, 0, 89, 0, 90, 0, 0, 0, + 188, 0, 0, 82, 83, 67, 68, 0, 0, 84, + 0, 0, 0, 0, 0, 0, 0, 85, 86, 87, + 88, 69, 0, 89, 70, 90, 71, 72, 73, 74, + 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, + 78, 0, 0, 0, 0, 69, 0, 79, 70, 0, + 71, 72, 73, 74, 80, 0, 0, 76, 0, 0, + 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, + 81, 79, 0, 0, 0, 0, 0, 0, 80, 216, + 217, 218, 0, 0, 0, 0, 0, 611, 0, 0, + 82, 83, 67, 0, 81, 0, 84, 0, 0, 0, + 0, 0, 0, 0, 85, 86, 87, 88, 0, 0, + 89, 0, 90, 0, 82, 83, 0, 0, 0, 0, + 84, 177, 0, 0, 0, 0, 0, 0, 85, 86, + 87, 88, 69, 219, 89, 70, 90, 71, 72, 73, + 74, 524, 0, 0, 76, 220, 221, 77, 0, 0, + 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, + 0, 178, 0, 0, 70, 80, 71, 72, 73, 74, + 1003, 0, 0, 179, 0, 0, 77, 0, 0, 0, + 78, 81, 222, 223, 0, 224, 0, 79, 0, 0, + 225, 0, 226, 0, 80, 0, 0, 0, 0, 0, + 0, 82, 83, 1281, 0, 0, 0, 84, 177, 0, + 81, 0, 0, 0, 0, 85, 86, 87, 88, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 82, 83, 67, 0, 0, 0, 84, 0, 0, 0, - 215, 216, 217, 0, 179, 180, 87, 88, 177, 0, + 216, 217, 218, 0, 180, 181, 87, 88, 178, 0, 89, 70, 90, 71, 72, 73, 74, 0, 0, 0, - 178, 0, 0, 77, 0, 0, 0, 78, 0, 0, + 179, 0, 70, 77, 71, 72, 73, 78, 0, 0, 0, 0, 69, 0, 79, 70, 0, 71, 72, 73, 74, 80, 0, 0, 76, 0, 0, 77, 0, 0, - 0, 78, 0, 0, 218, 0, 0, 81, 79, 215, - 216, 217, 0, 0, 0, 80, 219, 220, 0, 0, - 0, 0, 0, 215, 216, 217, 82, 83, 0, 0, - 0, 81, 84, 0, 0, 0, 0, 215, 216, 217, - 179, 180, 87, 88, 0, 0, 89, 0, 90, 0, - 82, 83, 221, 222, 0, 223, 84, 0, 0, 0, - 224, 0, 225, 218, 85, 86, 87, 88, 0, 0, - 89, 0, 90, 1275, 0, 219, 220, 218, 1353, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, - 220, 218, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 219, 220, 0, 0, 0, 0, 0, - 0, 221, 222, 0, 223, 0, 0, 0, 0, 224, - 0, 225, 0, 0, 0, 221, 222, 0, 223, 0, - 0, 0, 1275, 224, 0, 225, 0, 1355, 0, 221, - 222, 0, 223, 0, 0, 0, 1275, 224, 105, 225, - 106, 1357, 0, 107, 108, 0, 0, 0, 0, 0, - 1275, 109, 110, 0, 0, 0, 0, 0, 0, 0, + 0, 78, 80, 0, 219, 0, 0, 81, 79, 0, + 216, 217, 218, 0, 0, 80, 220, 221, 266, 0, + 0, 0, 0, 0, 216, 217, 218, 82, 83, 0, + 0, 81, 0, 84, 0, 0, 0, 0, 82, 83, + 0, 180, 181, 87, 88, 0, 0, 89, 0, 90, + 0, 82, 83, 222, 223, 88, 224, 84, 0, 0, + 90, 225, 0, 226, 219, 85, 86, 87, 88, 0, + 0, 89, 0, 90, 1281, 0, 220, 221, 219, 1362, + 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, + 220, 221, 0, 0, 0, 0, 0, 0, 0, 70, + 0, 71, 72, 73, 0, 0, 0, 0, 0, 0, + 0, 265, 0, 222, 223, 0, 224, 0, 0, 0, + 0, 225, 0, 226, 0, 0, 0, 222, 223, 80, + 224, 0, 0, 0, 1281, 225, 105, 226, 106, 1364, + 0, 107, 108, 0, 0, 266, 0, 0, 0, 109, + 110, 0, 294, 0, 0, 0, 0, 0, 111, 0, + 112, 113, 114, 115, 0, 82, 83, 116, 0, 0, + 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 0, 90, 0, 0, + 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, + 0, 0, 0, 126, 127, 128, 129, 0, 0, 105, + 176, 106, 130, 131, 107, 108, 132, 133, 0, 0, + 0, 134, 109, 110, 0, 0, 0, 135, 136, 0, + 137, 111, 0, 112, 113, 114, 115, 0, 138, 0, + 116, 0, 0, 0, 0, 117, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, + 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 126, 127, 128, 129, + 0, 0, 105, 0, 106, 130, 131, 107, 108, 132, + 133, 0, 0, 0, 134, 109, 110, 0, 0, 0, + 135, 136, 0, 137, 111, 0, 112, 113, 114, 115, + 0, 138, 0, 116, 0, 0, 0, 0, 117, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 876, 0, 0, 0, 0, 0, 118, 119, 120, 121, + 122, 123, 124, 125, 0, 0, 0, 0, 0, 126, + 127, 128, 129, 0, 0, 105, 0, 106, 130, 131, + 107, 108, 132, 133, 0, 0, 0, 134, 109, 110, + 0, 0, 0, 135, 136, 0, 137, 111, 0, 112, + 113, 114, 115, 0, 138, 0, 116, 0, 0, 0, + 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 920, 0, 0, 0, 0, 0, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 126, 127, 128, 129, 0, 0, 105, 0, + 106, 130, 131, 107, 108, 132, 133, 0, 0, 0, + 134, 109, 110, 0, 0, 0, 135, 136, 0, 137, + 111, 0, 112, 113, 114, 115, 0, 138, 0, 116, + 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1027, 0, 0, 0, + 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, + 0, 0, 0, 0, 0, 126, 127, 128, 129, 0, + 0, 105, 0, 106, 130, 131, 107, 108, 132, 133, + 0, 0, 0, 134, 109, 110, 0, 0, 0, 135, + 136, 0, 137, 111, 0, 112, 113, 114, 115, 0, + 138, 0, 116, 0, 0, 0, 0, 117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1081, + 0, 0, 0, 0, 0, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 0, 0, 105, 0, 106, 130, 131, 107, + 108, 132, 133, 0, 0, 0, 134, 109, 110, 0, + 0, 0, 135, 136, 0, 137, 111, 0, 112, 113, + 114, 115, 0, 138, 0, 116, 0, 0, 0, 0, + 117, 0, 0, 216, 217, 218, 0, 0, 890, 216, + 217, 218, 1303, 0, 0, 0, 0, 0, 118, 119, + 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, + 0, 126, 127, 128, 129, 0, 0, 0, 0, 0, + 130, 131, 0, 0, 132, 133, 486, 0, 487, 134, + 0, 0, 0, 0, 0, 135, 136, 219, 137, 0, + 0, 0, 0, 219, 0, 105, 138, 106, 0, 220, + 221, 108, 0, 0, 0, 220, 221, 0, 109, 110, + 0, 0, 0, 0, 0, 1451, 0, 0, 0, 112, + 299, 114, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 300, 0, 0, 0, 0, 222, 223, 0, 224, + 0, 0, 222, 223, 225, 224, 226, 0, 0, 0, + 225, 0, 226, 0, 0, 124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, + 0, 130, 0, 0, 0, 0, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 136, 105, 137, + 106, 0, 0, 107, 108, 0, 0, 0, 0, 0, + 0, 109, 110, 0, -153, 0, 0, 0, 0, 0, 111, 0, 112, 113, 114, 115, 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 0, 0, 0, 125, 126, 127, 128, 0, 0, - 105, 0, 106, 129, 130, 107, 108, 131, 132, 0, - 0, 0, 133, 109, 110, 0, 0, 0, 134, 135, - 0, 136, 111, 0, 112, 113, 114, 115, 0, 137, - 0, 116, 0, 0, 0, 0, 117, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, - 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 0, 0, 0, 125, 126, 127, 128, - 0, 0, 105, 0, 106, 129, 130, 107, 108, 131, - 132, 0, 0, 0, 133, 109, 110, 0, 0, 0, - 134, 135, 0, 136, 111, 0, 112, 113, 114, 115, - 0, 137, 0, 116, 0, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 872, 0, 0, 0, 0, 0, 118, 119, 120, 121, - 122, 123, 124, 0, 0, 0, 0, 0, 125, 126, - 127, 128, 0, 0, 105, 0, 106, 129, 130, 107, - 108, 131, 132, 0, 0, 0, 133, 109, 110, 0, - 0, 0, 134, 135, 0, 136, 111, 0, 112, 113, - 114, 115, 0, 137, 0, 116, 0, 0, 0, 0, - 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 915, 0, 0, 0, 0, 0, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 0, 0, 0, - 125, 126, 127, 128, 0, 0, 105, 0, 106, 129, - 130, 107, 108, 131, 132, 0, 0, 0, 133, 109, - 110, 0, 0, 0, 134, 135, 0, 136, 111, 0, - 112, 113, 114, 115, 0, 137, 0, 116, 0, 0, - 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1022, 0, 0, 0, 0, 0, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 0, - 0, 0, 125, 126, 127, 128, 0, 0, 105, 0, - 106, 129, 130, 107, 108, 131, 132, 0, 0, 0, - 133, 109, 110, 0, 0, 0, 134, 135, 0, 136, - 111, 0, 112, 113, 114, 115, 0, 137, 0, 116, - 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1075, 0, 0, 0, - 0, 0, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 0, 0, 0, 125, 126, 127, 128, 0, 0, - 105, 0, 106, 129, 130, 107, 108, 131, 132, 0, - 0, 0, 133, 109, 110, 0, 0, 0, 134, 135, - 0, 136, 111, 0, 112, 113, 114, 115, 0, 137, - 0, 116, 0, 215, 216, 217, 117, 0, 0, 0, - 0, 0, 0, 70, 0, 71, 72, 73, 1297, 0, - 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 0, 0, 0, 125, 126, 127, 128, - 484, 0, 485, 80, 0, 129, 130, 0, 0, 131, - 132, 0, 0, 0, 133, 0, 0, 218, 0, 265, - 134, 135, 105, 136, 106, 0, 0, 0, 108, 219, - 220, 137, 0, 0, 0, 109, 110, 0, 82, 83, - 0, 0, 0, 0, 0, 0, 112, 298, 114, 0, - 1443, 0, 0, 116, 0, 88, 0, 0, 299, 0, - 90, 0, 0, 0, 0, 221, 222, 0, 223, 0, - 0, 0, 0, 224, 105, 225, 106, 0, 0, 0, - 108, 123, 0, 192, 0, 0, 0, 109, 110, 0, - 0, 128, 0, 0, 0, 0, 0, 129, 112, 113, - 114, 0, 132, 0, 0, 116, 0, 0, 0, 0, - 299, 0, 134, 135, 105, 136, 106, 0, 0, 107, - 108, 0, 0, 0, 0, 0, 0, 109, 110, 0, - -151, 0, 0, 123, 0, 0, 111, 0, 112, 113, - 114, 115, 0, 128, 0, 116, 0, 0, 0, 129, - 117, 0, 0, 131, 132, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 134, 135, 0, 136, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 0, 0, 0, - 125, 126, 127, 128, 0, 0, 105, 0, 106, 129, - 130, 0, 108, 131, 132, 105, 0, 106, 133, 109, - 110, 108, 0, 0, 134, 135, 0, 136, 109, 110, - 112, 298, 114, 0, 0, 0, 0, 0, 0, 112, - 298, 114, 299, 0, 0, 0, 70, 0, 71, 72, - 73, 299, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 310, 0, 0, 0, - 0, 0, 0, 0, 123, 128, 80, 0, 0, 0, - 0, 129, 0, 0, 128, 0, 132, 0, 0, 0, - 129, 0, 265, 0, 0, 132, 0, 135, 0, 136, - 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, - 0, 82, 83, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, - 0, 0, 0, 90 + 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, + 0, 0, 0, 0, 0, 126, 127, 128, 129, 0, + 0, 105, 0, 106, 130, 131, 0, 108, 132, 133, + 0, 0, 0, 134, 109, 110, 0, 0, 0, 135, + 136, 0, 137, 0, 0, 112, 113, 114, 105, 0, + 106, 0, 116, 0, 108, 0, 0, 300, 0, 0, + 0, 109, 110, 105, 0, 106, 0, 0, 0, 108, + 0, 0, 112, 299, 114, 0, 109, 110, 0, 0, + 0, 124, 0, 0, 300, 0, 0, 112, 299, 114, + 0, 129, 0, 0, 0, 0, 0, 130, 0, 300, + 0, 132, 133, 0, 0, 0, 0, 0, 124, 311, + 0, 0, 135, 136, 0, 137, 0, 0, 129, 0, + 0, 0, 0, 124, 130, 0, 0, 0, 0, 133, + 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, + 136, 0, 137, 0, 133, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 0, 137 }; static const yytype_int16 yycheck[] = { - 1, 61, 587, 464, 113, 493, 928, 512, 44, 318, - 92, 44, 710, 131, 752, 297, 131, 480, 660, 6, - 15, 8, 614, 462, 148, 141, 150, 151, 152, 153, - 732, 155, 493, 157, 605, 159, 183, 44, 15, 81, - 82, 83, 13, 147, 33, 484, 88, 15, 15, 331, - 76, 175, 715, 492, 76, 15, 59, 795, 0, 147, - 76, 62, 186, 187, 586, 169, 165, 166, 192, 193, - 141, 10, 11, 12, 147, 147, 155, 141, 166, 164, - 147, 744, 745, 146, 747, 748, 749, 750, 147, 150, - 91, 92, 147, 166, 166, 15, 165, 166, 99, 166, - 147, 164, 624, 146, 165, 141, 147, 166, 141, 33, - 164, 166, 719, 635, 721, 722, 723, 724, 725, 166, - 146, 164, 125, 149, 146, 166, 147, 149, 713, 771, - 146, 716, 147, 149, 141, 150, 165, 166, 274, 275, - 276, 277, 278, 155, 150, 166, 147, 148, 150, 150, - 151, 152, 153, 147, 155, 616, 157, 33, 159, 165, - 149, 146, 76, 165, 147, 207, 208, 209, 210, 64, - 65, 166, 166, 112, 175, 164, 165, 259, 260, 166, - 147, 297, 183, 166, 164, 186, 187, 164, 159, 147, - 499, 192, 193, 275, 276, 255, 164, 108, 109, 110, - 147, 112, 113, 114, 164, 693, 117, 354, 166, 147, - 149, 327, 123, 164, 165, 331, 525, 128, 129, 166, - 131, 132, 133, 265, 135, 136, 297, 147, 166, 230, - 164, 753, 146, 297, 805, 149, 164, 900, 147, 163, - 164, 165, 164, 147, 815, 164, 147, 289, 753, 13, - 146, 15, 148, 17, 150, 155, 327, 166, 259, 260, - 331, 297, 166, 327, 297, 166, 390, 331, 164, 791, - 792, 934, 75, 274, 275, 276, 277, 278, 279, 143, - 144, 145, 147, 284, 147, 147, 147, 163, 164, 165, - 297, 327, 755, 164, 327, 331, 60, 147, 331, 906, - 1002, 166, 147, 166, 166, 166, 164, 443, 2, 33, - 164, 447, 448, 449, 450, 451, 166, 318, 147, 149, - 327, 166, 165, 166, 331, 461, 33, 788, 164, 465, - 466, 916, 6, 772, 8, 644, 146, 166, 148, 149, - 150, 164, 913, 98, 146, 146, 148, 148, 150, 150, - 13, 164, 15, 354, 17, 146, 998, 148, 846, 150, - 164, 643, 56, 57, 58, 59, 60, 164, 13, 63, - 15, 148, 17, 150, 164, 897, 140, 10, 11, 12, - 164, 165, 166, 692, 6, 846, 8, 298, 299, 390, - 154, 164, 897, 304, 164, 159, 164, 60, 165, 166, - 1102, 164, 165, 166, 164, 997, 164, 75, 164, 410, - 113, 114, 115, 984, 164, 60, 1338, 164, 165, 1004, - 164, 165, 166, 146, 147, 1010, 1011, 10, 11, 12, - 164, 64, 164, 157, 158, 159, 160, 161, 480, 163, - 164, 165, 443, 76, 77, 164, 447, 448, 449, 450, - 451, 164, 159, 160, 161, 155, 163, 164, 165, 164, - 461, 149, 598, 33, 465, 466, 164, 165, 164, 470, - 149, 164, 473, 509, 164, 164, 279, 140, 164, 112, - 113, 64, 115, 164, 1006, 1007, 164, 120, 164, 122, - 149, 154, 493, 76, 77, 140, 159, 191, 499, 164, - 1092, 164, 164, 1095, 164, 166, 164, 164, 509, 154, - 164, 164, 150, 1098, 159, 471, 159, 1255, 165, 164, - 149, 522, 48, 165, 525, 164, 147, 643, 146, 112, - 113, 155, 115, 166, 164, 148, 291, 120, 164, 122, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 164, 256, 167, 873, 147, 166, 261, 166, 166, - 166, 166, 643, 166, 166, 156, 156, 166, 166, 643, - 491, 166, 165, 147, 147, 586, 587, 588, 166, 159, - 160, 161, 166, 163, 164, 165, 15, 598, 353, 166, - 166, 166, 156, 297, 605, 166, 166, 643, 609, 166, - 643, 279, 672, 614, 166, 166, 166, 618, 619, 620, - 621, 622, 623, 624, 660, 1323, 166, 660, 166, 166, - 166, 325, 166, 166, 635, 156, 643, 166, 166, 166, - 164, 166, 165, 644, 645, 159, 166, 165, 167, 166, - 149, 164, 146, 660, 610, 166, 147, 147, 147, 147, - 463, 464, 147, 699, 164, 148, 164, 149, 164, 164, - 48, 164, 164, 341, 630, 631, 632, 633, 634, 166, - 166, 159, 1267, 159, 1269, 166, 146, 48, 76, 169, - 493, 692, 164, 387, 1432, 1433, 1434, 757, 758, 155, - 155, 155, 155, 164, 705, 765, 10, 767, 166, 148, - 404, 405, 713, 755, 10, 716, 470, 411, 719, 10, - 721, 722, 723, 724, 725, 10, 10, 156, 1430, 147, - 166, 148, 33, 159, 159, 771, 166, 738, 771, 1331, - 741, 148, 148, 1328, 167, 159, 166, 146, 169, 705, - 166, 752, 753, 166, 166, 164, 1348, 1349, 1350, 1247, - 164, 164, 164, 149, 771, 883, 166, 522, 883, 165, - 165, 682, 683, 165, 883, 164, 166, 164, 533, 473, - 147, 536, 147, 147, 587, 147, 1247, 150, 789, 159, - 791, 792, 166, 166, 795, 463, 464, 798, 167, 165, - 148, 148, 1540, 147, 805, 608, 10, 167, 868, 166, - 1548, 169, 4, 616, 815, 147, 48, 169, 164, 10, - 11, 12, 164, 146, 825, 493, 520, 147, 169, 166, - 1422, 156, 156, 166, 790, 1420, 530, 1429, 156, 166, - 156, 10, 148, 1435, 1436, 166, 10, 166, 884, 10, - 10, 807, 10, 521, 148, 609, 157, 158, 159, 160, - 161, 147, 163, 164, 165, 619, 620, 621, 622, 623, - 169, 164, 873, 64, 875, 167, 166, 15, 148, 167, - 169, 882, 155, 166, 166, 76, 77, 888, 889, 890, - 891, 892, 893, 894, 166, 164, 897, 591, 1490, 164, - 166, 164, 166, 1488, 164, 906, 1030, 147, 166, 164, - 713, 605, 913, 716, 155, 916, 155, 999, 155, 587, - 164, 112, 113, 166, 115, 167, 882, 928, 166, 120, - 166, 122, 1524, 889, 890, 891, 892, 893, 167, 146, - 608, 166, 166, 166, 10, 148, 137, 1539, 616, 643, - 10, 705, 10, 148, 148, 710, 10, 10, 11, 12, - 715, 148, 998, 164, 719, 998, 721, 722, 723, 724, - 725, 1280, 883, 166, 668, 669, 670, 671, 166, 673, - 1104, 1105, 17, 984, 15, 788, 167, 166, 147, 744, - 745, 998, 747, 748, 749, 750, 997, 147, 999, 166, - 156, 156, 156, 1004, 166, 1006, 1007, 156, 10, 1010, - 1011, 64, 47, 166, 166, 148, 167, 10, 166, 10, - 148, 164, 164, 76, 77, 60, 61, 164, 148, 1030, - 166, 166, 164, 148, 148, 789, 166, 166, 1103, 646, - 1250, 76, 309, 846, 798, 713, 1323, 741, 716, 884, - 331, 699, 1448, 1247, 1077, 331, 1281, 846, 1214, 112, - 113, -1, 115, -1, 409, -1, -1, 120, -1, 122, - -1, 106, -1, -1, 109, -1, 1077, 112, -1, 10, - 11, 12, 13, -1, -1, 1086, 17, -1, -1, -1, - -1, 1092, -1, 128, 1095, -1, -1, 1098, -1, -1, - -1, 154, -1, 1104, 1105, 140, 159, -1, -1, -1, - -1, 805, -1, 916, -1, -1, -1, -1, -1, 154, - 788, 815, -1, -1, -1, 819, -1, -1, 882, 60, - 1086, -1, -1, -1, -1, 889, 890, 891, 892, 893, - -1, -1, 836, -1, -1, 900, -1, -1, -1, -1, - -1, 906, -1, 847, 848, 849, 850, 851, 852, 853, - 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, - 864, 865, 866, 867, 1256, 869, -1, -1, 846, 934, - 111, 112, 1272, 1273, 1274, 10, 11, 12, 13, -1, - 15, -1, 17, -1, -1, 10, 11, 12, -1, -1, - -1, 1004, -1, -1, -1, -1, -1, 1010, 1011, 140, - -1, -1, -1, 1214, 20, 21, 22, 23, -1, 913, - -1, -1, -1, 154, -1, -1, -1, 33, 159, -1, - -1, -1, -1, 164, 928, 60, -1, -1, -1, 54, - -1, 56, 57, 58, -1, -1, 1247, -1, 916, -1, - 62, 66, -1, -1, 1255, 1256, -1, -1, -1, 1319, - -1, -1, 77, 1353, -1, 1355, 1267, 1357, 1269, 84, - 1360, 1361, 1362, 85, -1, -1, 61, -1, -1, 1280, - -1, -1, -1, -1, -1, 100, -1, 112, -1, -1, - 984, -1, 986, 105, -1, 1098, 10, 11, 12, 13, - -1, -1, -1, 17, 119, 120, 1366, 1367, -1, 1369, - -1, 1371, 124, -1, -1, 140, 10, 11, 12, 13, - -1, 136, 134, 17, 139, -1, 141, 1328, -1, 154, - 1331, -1, 1086, -1, 159, -1, 1004, 1338, -1, 164, - -1, -1, 1010, 1011, 1038, -1, 60, 1348, 1349, 1350, - -1, 157, 158, 159, 160, 161, 1416, 163, 164, 165, - -1, -1, -1, -1, 149, -1, 60, 179, -1, 154, - 182, 156, -1, 158, -1, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - -1, -1, 1087, -1, -1, -1, -1, -1, 112, -1, - 185, -1, -1, -1, 189, 190, 191, 16, 17, 18, - 19, 20, 21, 22, 23, 227, 228, -1, 112, 1420, - -1, 1422, -1, -1, 33, -1, 140, -1, 1429, -1, - 1098, 1432, 1433, 1434, 1435, 1436, -1, -1, -1, -1, - 154, -1, -1, -1, 1247, 159, 140, 1448, -1, -1, - 164, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 154, 273, -1, -1, 1267, 159, 1269, 18, 19, 20, - 21, 22, 23, 1533, 1534, 1535, -1, 1537, -1, 291, - -1, 293, 33, -1, -1, 270, -1, 1488, -1, 1490, - -1, -1, -1, -1, -1, 1250, -1, -1, 310, -1, - 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, - 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, - -1, 333, -1, 1524, -1, 1328, -1, 33, -1, -1, - 342, -1, -1, 345, -1, -1, -1, -1, 1539, 1540, - 149, 353, 151, 152, 153, 154, 1240, 1548, 157, 158, - 159, 160, 161, -1, 163, 164, 165, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1323, -1, - -1, -1, 10, 11, 12, -1, -1, 15, -1, 1247, - 392, -1, -1, -1, 396, -1, -1, -1, 18, 19, - 20, 21, 22, 23, -1, -1, -1, 409, -1, 1267, - 1294, 1269, -1, 33, 389, -1, 157, 158, 159, 160, - 161, -1, 163, 164, 165, -1, -1, 1420, -1, 1314, - 1315, 1316, 1317, 1318, -1, 1320, 64, -1, -1, -1, - -1, -1, -1, -1, 446, -1, -1, -1, 76, 77, - -1, -1, -1, -1, 1338, 151, 152, 153, 154, -1, - 462, 157, 158, 159, 160, 161, -1, 163, 164, 165, - 1328, -1, 474, -1, 16, 17, 18, 19, 20, 21, - 22, 23, 484, -1, 112, 113, -1, 115, -1, -1, - 492, 33, 120, -1, 122, 1488, -1, -1, -1, -1, - -1, 1314, 1315, 1316, 1317, 1318, -1, 1320, -1, -1, - -1, -1, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, - 1415, -1, -1, 1417, 536, 155, 156, 157, 158, 159, - 160, 161, 517, 163, 164, 165, -1, -1, -1, 524, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1420, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 551, -1, 553, 1464, - 555, -1, -1, 585, 1397, 1398, 1399, 1400, 1401, 1402, - 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, - 1413, 1414, 1415, -1, -1, -1, -1, -1, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - -1, 163, 164, 165, -1, -1, 628, 169, -1, -1, - 1488, 3, 4, 5, 6, 1520, 8, 9, 10, 11, - 12, -1, -1, -1, 646, -1, -1, -1, -1, -1, - -1, 1464, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, - 23, -1, -1, -1, -1, -1, -1, -1, 50, 51, - 33, -1, 54, -1, 56, 57, 58, 59, 60, -1, - 62, 63, -1, -1, 66, 67, -1, 672, 70, 22, - 23, 703, -1, 75, 76, 77, -1, 1520, -1, 81, - 33, -1, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, -1, - 22, 23, 734, -1, -1, -1, 108, -1, 110, -1, - 112, 33, -1, -1, -1, 117, -1, 119, 120, 121, - -1, -1, 124, 125, -1, -1, -1, 129, -1, -1, - 132, 133, 134, 135, 136, -1, -1, 139, -1, 141, - 772, 16, 17, 18, 19, 20, 21, 22, 23, -1, - -1, -1, 154, -1, -1, 157, 158, 159, 33, -1, - 162, -1, 164, 165, -1, -1, 168, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, -1, - 163, 164, 165, -1, -1, -1, 169, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 157, 158, 159, 160, 161, -1, - 163, 164, 165, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 828, 829, 830, -1, 832, -1, 834, - 835, 836, -1, -1, -1, 157, 158, 159, 160, 161, - -1, 163, 164, 165, -1, -1, -1, 18, 19, 20, - 21, 22, 23, 885, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, -1, 163, 164, - 165, -1, -1, -1, 169, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, - -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, -1, 70, 1001, - 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, - 82, 83, 84, 154, 155, 156, 157, 158, 159, 160, - 161, -1, 163, 164, 165, -1, -1, -1, 100, -1, - 1032, -1, -1, -1, 106, 107, 108, -1, 110, 111, - 112, 113, 114, 115, 116, 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, -1, -1, -1, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, -1, -1, - -1, 1103, -1, -1, -1, -1, -1, -1, -1, -1, - 1085, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, - -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, -1, 70, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, - 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 100, -1, - -1, -1, -1, -1, 106, 107, 108, -1, 110, 111, - 112, 113, 114, 115, 116, 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, -1, -1, 1275, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, -1, 168, 169, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, -1, 8, 9, 10, 11, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1319, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 50, 51, -1, -1, - 54, -1, 56, 57, 58, 59, -1, -1, 62, 63, - -1, -1, 66, 67, -1, -1, 70, -1, -1, -1, - -1, 75, 76, 77, -1, -1, -1, 81, -1, -1, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 1382, 1383, 1384, - 1385, -1, 1387, 1388, 108, -1, 110, -1, 112, -1, - -1, -1, -1, 117, -1, 119, 120, 121, -1, -1, - 124, 125, -1, -1, -1, 129, -1, -1, 132, 133, - 134, 135, 136, -1, -1, 139, -1, 141, 3, 4, - 5, 6, -1, 8, 9, 10, 11, -1, 1460, -1, - 154, -1, -1, 157, 158, 159, -1, -1, 162, -1, - 164, 165, -1, -1, 168, -1, -1, -1, -1, 16, - 17, 18, 19, 20, 21, 22, 23, -1, -1, -1, - -1, -1, -1, -1, -1, 50, 33, -1, -1, 54, - -1, 56, 57, 58, -1, -1, -1, 62, -1, 64, - 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, - 75, 76, 77, -1, -1, -1, 81, -1, -1, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, -1, -1, -1, -1, - -1, -1, -1, 108, -1, 110, -1, 112, -1, -1, - -1, -1, 117, -1, 119, 120, 121, -1, -1, 124, - -1, -1, -1, -1, 129, -1, -1, 132, -1, -1, - -1, 136, 3, 4, 5, 6, 141, 8, 9, 10, - 11, 146, -1, -1, -1, -1, -1, -1, -1, 154, - -1, -1, 157, 158, 159, -1, -1, 162, -1, 164, - 165, -1, 149, 168, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, -1, 163, 164, 165, 50, - -1, -1, -1, 54, -1, 56, 57, 58, -1, -1, - -1, 62, -1, -1, -1, 66, 67, 10, 11, 12, - -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, - 81, -1, -1, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - -1, -1, -1, -1, -1, -1, -1, 108, -1, 110, - -1, 112, -1, -1, -1, -1, 117, -1, 119, 120, - 121, 64, -1, 124, -1, -1, -1, -1, 129, -1, - -1, 132, -1, 76, 77, 136, 3, 4, 5, 6, - 141, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, -1, 154, -1, -1, 157, 158, 159, -1, - -1, 162, -1, 164, 165, 166, -1, 168, -1, 112, - 113, -1, 115, -1, -1, -1, -1, 120, -1, 122, - -1, -1, -1, 50, 51, -1, -1, 54, -1, 56, - 57, 58, -1, -1, -1, 62, -1, -1, -1, 66, - 67, -1, -1, -1, -1, -1, -1, 150, 75, 76, - 77, 154, -1, -1, 81, -1, 159, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, -1, -1, -1, -1, -1, -1, - -1, 108, -1, 110, -1, 112, -1, -1, -1, -1, - 117, -1, 119, 120, 121, -1, -1, 124, -1, -1, - -1, -1, 129, -1, -1, 132, -1, -1, -1, 136, - 3, 4, 5, 6, 141, 8, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, -1, 154, -1, -1, - 157, 158, 159, -1, -1, 162, -1, 164, 165, -1, - -1, 168, -1, -1, -1, 16, 17, 18, 19, 20, - 21, 22, 23, -1, -1, -1, -1, 50, 51, -1, - -1, 54, 33, 56, 57, 58, -1, -1, -1, 62, - -1, -1, -1, 66, 67, -1, -1, -1, -1, -1, - -1, -1, 75, 76, 77, -1, -1, -1, 81, -1, - -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, -1, -1, - -1, -1, -1, -1, -1, 108, -1, 110, -1, 112, - -1, -1, -1, -1, 117, -1, 119, 120, 121, -1, - -1, 124, -1, -1, -1, -1, 129, -1, -1, 132, - -1, -1, -1, 136, 3, 4, 5, 6, 141, 8, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - -1, 154, -1, -1, 157, 158, 159, -1, -1, 162, - -1, 164, 165, -1, -1, 168, -1, 148, -1, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 50, 163, 164, 165, 54, -1, 56, 57, 58, - -1, -1, -1, 62, -1, -1, -1, 66, 67, -1, - -1, -1, -1, -1, -1, -1, 75, 76, 77, -1, - -1, -1, 81, -1, -1, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, -1, -1, -1, -1, -1, -1, -1, 108, - -1, 110, -1, 112, -1, -1, -1, -1, 117, -1, - 119, 120, 121, -1, -1, 124, -1, -1, -1, -1, - 129, -1, -1, 132, -1, -1, -1, 136, 3, 4, - 5, 6, 141, 8, 9, 10, 11, 146, -1, -1, - -1, -1, -1, -1, -1, 154, -1, -1, 157, 158, - 159, -1, -1, 162, -1, 164, 165, -1, -1, 168, - -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, - 23, -1, -1, -1, -1, 50, -1, -1, -1, 54, - 33, 56, 57, 58, -1, -1, -1, 62, -1, -1, - -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, - 75, 76, 77, -1, -1, -1, 81, -1, -1, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, -1, -1, -1, -1, - -1, -1, -1, 108, -1, 110, -1, 112, -1, -1, - -1, -1, 117, -1, 119, 120, 121, -1, -1, 124, - -1, -1, -1, -1, 129, -1, -1, 132, -1, -1, - -1, 136, 3, 4, 5, 6, 141, 8, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, -1, 154, - -1, -1, 157, 158, 159, -1, -1, 162, -1, 164, - 165, 166, -1, 168, 147, -1, -1, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 50, - 163, 164, 165, 54, -1, 56, 57, 58, -1, -1, - -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, - 81, -1, -1, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - -1, -1, -1, -1, -1, -1, -1, 108, -1, 110, - -1, 112, -1, -1, -1, -1, 117, -1, 119, 120, - 121, -1, -1, 124, -1, -1, -1, -1, 129, -1, - -1, 132, -1, -1, -1, 136, 3, 4, 5, 6, - 141, 8, 9, 10, 11, 146, -1, -1, -1, -1, - -1, -1, -1, 154, -1, -1, 157, 158, 159, -1, - -1, 162, -1, 164, 165, -1, -1, 168, -1, -1, - -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, - -1, -1, -1, 50, -1, -1, -1, 54, 33, 56, - 57, 58, -1, -1, -1, 62, -1, -1, -1, 66, - 67, -1, -1, -1, -1, -1, -1, -1, 75, 76, + 1, 61, 113, 495, 132, 515, 132, 320, 933, 617, + 92, 714, 44, 149, 590, 151, 152, 153, 154, 298, + 156, 736, 158, 663, 160, 184, 44, 482, 756, 6, + 15, 8, 44, 142, 464, 15, 59, 98, 466, 0, + 176, 33, 81, 82, 83, 166, 167, 608, 142, 88, + 15, 187, 188, 15, 333, 142, 486, 193, 194, 13, + 76, 62, 76, 148, 494, 75, 165, 495, 15, 15, + 148, 799, 76, 148, 148, 723, 589, 725, 726, 727, + 728, 729, 148, 719, 147, 170, 149, 156, 151, 167, + 91, 92, 167, 167, 151, 165, 148, 75, 99, 151, + 148, 167, 165, 126, 148, 10, 11, 12, 148, 166, + 142, 147, 748, 749, 627, 751, 752, 753, 754, 167, + 148, 33, 147, 167, 142, 638, 148, 167, 165, 165, + 142, 147, 165, 147, 150, 775, 150, 166, 167, 167, + 165, 717, 148, 147, 720, 167, 150, 148, 149, 148, + 151, 152, 153, 154, 165, 156, 33, 158, 150, 160, + 165, 167, 148, 13, 6, 15, 8, 17, 167, 208, + 209, 210, 211, 165, 166, 176, 166, 167, 260, 261, + 156, 167, 167, 184, 165, 165, 187, 188, 501, 298, + 167, 619, 193, 194, 276, 277, 256, 356, 165, 33, + 165, 148, 148, 165, 298, 697, 160, 148, 113, 165, + 60, 298, 108, 109, 110, 528, 112, 113, 114, 76, + 329, 117, 165, 149, 333, 151, 167, 266, 124, 165, + 231, 292, 165, 129, 130, 329, 132, 133, 134, 333, + 136, 137, 329, 165, 757, 150, 333, 757, 809, 148, + 151, 290, 164, 165, 166, 473, 392, 165, 819, 260, + 261, 165, 148, 911, 156, 166, 298, 165, 167, 905, + 280, 10, 11, 12, 275, 276, 277, 278, 279, 280, + 298, 167, 795, 796, 285, 151, 298, 164, 165, 166, + 147, 141, 1007, 150, 355, 148, 6, 329, 8, 147, + 166, 333, 280, 939, 759, 155, 144, 145, 146, 165, + 160, 329, 64, 65, 167, 333, 148, 329, 13, 320, + 15, 333, 17, 148, 148, 64, 160, 161, 162, 148, + 164, 165, 166, 343, 647, 167, 165, 76, 77, 165, + 148, 148, 167, 167, 165, 921, 776, 148, 167, 147, + 165, 149, 150, 151, 148, 356, 165, 918, 850, 167, + 167, 148, 165, 1003, 792, 60, 167, 646, 275, 276, + 277, 278, 279, 167, 113, 114, 165, 116, 166, 167, + 167, 165, 121, 696, 123, 165, 147, 165, 149, 902, + 151, 392, 902, 1108, 1002, 613, 147, 147, 149, 149, + 151, 151, 156, 299, 300, 165, 166, 167, 165, 305, + 165, 412, 165, 166, 167, 633, 634, 635, 636, 637, + 1345, 165, 850, 10, 11, 12, 13, 166, 989, 165, + 17, 165, 166, 1009, 165, 166, 167, 165, 33, 1015, + 1016, 166, 167, 482, 445, 165, 141, 150, 449, 450, + 451, 452, 453, 165, 166, 465, 466, 114, 115, 116, + 155, 165, 463, 165, 525, 160, 467, 468, 147, 148, + 165, 472, 165, 60, 475, 536, 165, 166, 539, 165, + 512, 10, 11, 12, 165, 495, 150, 465, 466, 165, + 1098, 709, 150, 1101, 495, 150, 165, 165, 1011, 1012, + 501, 167, 165, 165, 165, 10, 11, 12, 13, 151, + 15, 512, 17, 160, 524, 166, 166, 495, 150, 148, + 48, 165, 147, 156, 525, 112, 113, 528, 1104, 165, + 165, 165, 149, 1261, 148, 64, 167, 646, 445, 15, + 168, 167, 449, 450, 451, 452, 453, 76, 77, 167, + 157, 167, 646, 157, 141, 60, 463, 167, 167, 646, + 467, 468, 167, 148, 877, 160, 161, 162, 155, 164, + 165, 166, 148, 160, 167, 167, 794, 167, 165, 167, + 590, 167, 157, 167, 113, 114, 167, 116, 589, 590, + 591, 157, 121, 811, 123, 167, 167, 493, 167, 167, + 601, 611, 167, 167, 167, 167, 167, 608, 113, 619, + 167, 612, 590, 167, 646, 675, 617, 167, 167, 167, + 621, 622, 623, 624, 625, 626, 627, 1330, 646, 167, + 167, 663, 165, 611, 646, 167, 141, 638, 167, 160, + 167, 619, 166, 166, 150, 663, 647, 648, 167, 167, + 155, 663, 168, 714, 165, 160, 147, 165, 719, 148, + 165, 148, 723, 148, 725, 726, 727, 728, 729, 887, + 148, 703, 149, 148, 148, 165, 894, 895, 896, 897, + 898, 150, 10, 11, 12, 13, 165, 748, 749, 17, + 751, 752, 753, 754, 601, 696, 167, 1273, 165, 1275, + 165, 761, 762, 167, 167, 165, 48, 717, 709, 769, + 720, 771, 1440, 1441, 1442, 160, 717, 2, 160, 720, + 759, 170, 723, 1438, 725, 726, 727, 728, 729, 147, + 1338, 48, 60, 13, 165, 15, 76, 17, 165, 717, + 156, 742, 720, 775, 745, 156, 156, 1355, 1356, 1357, + 156, 10, 167, 10, 10, 756, 757, 775, 10, 1335, + 888, 1253, 888, 775, 10, 10, 149, 157, 148, 160, + 149, 56, 57, 58, 59, 60, 160, 888, 63, 167, + 60, 167, 792, 168, 472, 113, 149, 149, 160, 685, + 686, 167, 793, 167, 795, 796, 167, 167, 799, 165, + 147, 802, 10, 11, 12, 170, 165, 165, 809, 165, + 167, 166, 872, 141, 792, 166, 166, 1093, 819, 150, + 165, 1549, 1430, 167, 165, 1253, 148, 155, 829, 1437, + 1558, 151, 160, 148, 148, 1443, 1444, 165, 148, 148, + 850, 160, 167, 167, 905, 166, 149, 149, 148, 10, + 911, 167, 1428, 4, 148, 168, 64, 889, 170, 48, + 168, 141, 148, 170, 165, 170, 165, 157, 76, 77, + 147, 167, 850, 157, 1092, 155, 877, 10, 939, 880, + 160, 157, 157, 10, 167, 165, 887, 149, 167, 167, + 10, 1499, 893, 894, 895, 896, 897, 898, 899, 1035, + 167, 902, 10, 10, 10, 113, 114, 192, 116, 149, + 911, 921, 148, 121, 165, 123, 170, 918, 167, 167, + 921, 1497, 1004, 170, 612, 1533, 10, 11, 12, 13, + 22, 23, 933, 17, 622, 623, 624, 625, 626, 168, + 1548, 33, 150, 921, 168, 167, 167, 15, 165, 165, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 1003, 257, 1286, 1110, 1111, 60, 262, 165, 167, + 165, 167, 148, 167, 149, 1003, 167, 165, 989, 156, + 165, 1003, 888, 156, 156, 167, 156, 168, 168, 1009, + 147, 1002, 10, 1004, 149, 1015, 1016, 149, 1009, 167, + 1011, 1012, 167, 298, 1015, 1016, 10, 167, 167, 167, + 10, 709, 10, 149, 149, 149, 165, 167, 15, 113, + 167, 1009, 168, 148, 1035, 167, 148, 1015, 1016, 167, + 157, 157, 327, 157, 167, 1321, 1322, 1323, 1324, 1325, + 168, 1327, 157, 10, 167, 149, 167, 141, 167, 10, + 10, 149, 165, 61, 165, 165, 158, 159, 160, 161, + 162, 155, 164, 165, 166, 149, 160, 167, 165, 149, + 10, 167, 1083, 149, 18, 19, 20, 21, 22, 23, + 167, 1092, 167, 149, 1104, 310, 1109, 1098, 649, 33, + 1101, 1256, 1330, 1104, 389, 793, 333, 889, 1457, 1110, + 1111, 1253, 703, 1083, 802, 850, 1287, 1220, 411, 333, + -1, 406, 407, -1, -1, -1, 1104, -1, 413, 1405, + 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, + 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, -1, -1, + -1, -1, 150, -1, -1, -1, -1, 155, -1, 157, + -1, 159, -1, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, + 1262, -1, -1, 10, 11, 12, -1, -1, 186, -1, + 475, -1, 190, 191, 192, 1256, -1, 1473, -1, 887, + -1, 20, 21, 22, 23, -1, 894, 895, 896, 897, + 898, -1, -1, -1, 33, -1, 10, 11, 12, 1220, + 154, 155, 156, 157, 158, 159, 160, 161, 162, -1, + 164, 165, 166, -1, -1, -1, -1, 64, 523, -1, + -1, -1, -1, 1253, -1, -1, -1, -1, 533, 76, + 77, -1, 1253, 1529, -1, -1, -1, -1, 62, -1, + 1261, 1262, -1, 1273, -1, 1275, 1326, -1, -1, 1330, + 64, -1, 1273, 271, 1275, 1253, -1, -1, -1, -1, + -1, 85, 76, 77, -1, 1286, 113, 114, -1, 116, + -1, 1278, 1279, 1280, 121, 1273, 123, 1275, -1, -1, + -1, 105, -1, -1, 10, 11, 12, -1, -1, 594, + -1, -1, -1, 1373, 1374, -1, 1376, -1, 1378, 113, + 114, 125, 116, 608, 151, 1335, -1, 121, 155, 123, + -1, 135, -1, 160, 1335, -1, -1, 1338, -1, 158, + 159, 160, 161, 162, 1345, 164, 165, 166, -1, 11, + -1, -1, -1, 147, 1355, 1356, 1357, 1335, 64, -1, + -1, 646, -1, -1, 1424, 10, 11, 12, -1, -1, + 76, 77, -1, 1360, -1, 1362, 180, 1364, -1, 183, + 1367, 1368, 1369, -1, -1, -1, 671, 672, 673, 674, + -1, 676, 54, 391, 56, 57, 58, -1, -1, -1, + -1, -1, -1, -1, 1092, -1, -1, 113, 114, -1, + 116, -1, -1, -1, -1, 121, -1, 123, 1428, 64, + -1, -1, 84, -1, 228, 229, -1, 1428, -1, 1430, + -1, 76, 77, -1, -1, -1, 1437, -1, 100, 1440, + 1441, 1442, 1443, 1444, -1, -1, -1, -1, -1, 155, + 1428, -1, -1, -1, 160, -1, 1457, -1, 120, 121, + 745, 17, 18, 19, 20, 21, 22, 23, 113, 114, + 274, 116, -1, -1, -1, 137, 121, 33, 123, -1, + 142, -1, 1542, 1543, 1544, -1, 1546, 1497, 292, -1, + 294, -1, -1, -1, -1, -1, 1497, -1, 1499, -1, + -1, -1, 147, -1, -1, -1, -1, 311, -1, 313, + 314, 315, 316, 317, 318, -1, -1, -1, -1, 1497, + -1, -1, 520, -1, 809, -1, -1, -1, -1, 527, + -1, 335, 1533, -1, 819, -1, -1, -1, 823, -1, + 344, -1, -1, 347, -1, -1, -1, 1548, 1549, -1, + -1, 355, -1, -1, -1, 840, 554, 1558, 556, -1, + 558, -1, -1, -1, -1, -1, 851, 852, 853, 854, + 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, + 865, 866, 867, 868, 869, 870, 871, -1, 873, -1, + 394, -1, -1, -1, 398, -1, -1, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 411, 164, 165, + 166, 16, 17, 18, 19, 20, 21, 22, 23, -1, + -1, -1, -1, 1321, 1322, 1323, 1324, 1325, 33, 1327, + 22, 23, -1, 918, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, 448, -1, -1, -1, 933, 20, + 21, 22, 23, -1, -1, -1, -1, -1, -1, -1, + 464, -1, 33, -1, -1, -1, 18, 19, 20, 21, + 22, 23, 476, -1, -1, -1, -1, 675, -1, -1, + -1, 33, 486, -1, -1, -1, -1, -1, -1, -1, + 494, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 989, -1, 991, 1405, 1406, 1407, + 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, + 1418, 1419, 1420, 1421, 1422, 1423, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 539, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 1043, 164, + 165, 166, -1, -1, -1, 170, 158, 159, 160, 161, + 162, -1, 164, 165, 166, 1473, -1, -1, -1, -1, + -1, -1, -1, -1, 588, 156, 157, 158, 159, 160, + 161, 162, -1, 164, 165, 166, 3, 4, 5, 6, + -1, 8, 9, 10, 11, 12, 158, 159, 160, 161, + 162, -1, 164, 165, 166, -1, 158, 159, 160, 161, + 162, -1, 164, 165, 166, -1, -1, 631, -1, -1, + -1, 1529, -1, -1, 832, 833, 834, -1, 836, -1, + 838, 839, 840, 50, 51, 649, -1, 54, -1, 56, + 57, 58, 59, 60, -1, 62, 63, -1, -1, 66, + 67, -1, -1, 70, -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, 81, -1, -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, -1, -1, -1, -1, -1, -1, - -1, 108, -1, 110, -1, 112, -1, -1, -1, -1, - 117, -1, 119, 120, 121, -1, -1, 124, -1, -1, - -1, -1, 129, -1, -1, 132, -1, -1, -1, 136, - 3, 4, 5, 6, 141, 8, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, -1, 154, -1, -1, - 157, 158, 159, -1, -1, 162, -1, 164, 165, 166, - -1, 168, -1, -1, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 50, 163, 164, - 165, 54, -1, 56, 57, 58, -1, -1, -1, 62, + -1, -1, 109, 707, 111, -1, 113, -1, -1, -1, + -1, 118, -1, 120, 121, 122, -1, -1, 125, 126, + -1, -1, -1, 130, -1, -1, 133, 134, 135, 136, + 137, -1, -1, 140, 738, 142, -1, -1, -1, 3, + 4, 5, 6, -1, 8, 9, 10, 11, 155, -1, + -1, 158, 159, 160, -1, -1, 163, -1, 165, 166, + -1, 1246, 169, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 776, -1, 16, 17, 18, 19, 20, 21, + 22, 23, -1, -1, -1, -1, 50, 51, -1, -1, + 54, 33, 56, 57, 58, 59, -1, -1, 62, 63, + -1, -1, 66, 67, -1, -1, 70, -1, -1, -1, + -1, 75, 76, 77, -1, 1300, -1, 81, -1, -1, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, -1, -1, -1, + -1, -1, -1, -1, -1, 109, -1, 111, -1, 113, + -1, -1, -1, -1, 118, -1, 120, 121, 122, -1, + 1345, 125, 126, -1, -1, -1, 130, -1, -1, 133, + 134, 135, 136, 137, -1, -1, 140, -1, 142, -1, + -1, -1, 3, 4, 5, 6, 890, 8, 9, 10, + 11, 155, -1, 1091, 158, 159, 160, -1, -1, 163, + -1, 165, 166, -1, -1, 169, -1, -1, -1, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, -1, 164, 165, 166, -1, -1, -1, 170, 50, + -1, -1, -1, 54, -1, 56, 57, 58, -1, -1, + 1425, 62, -1, 64, 65, 66, 67, -1, -1, 33, + -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, + 81, -1, -1, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, + 111, -1, 113, -1, -1, -1, -1, 118, -1, 120, + 121, 122, 1006, -1, 125, 10, 11, -1, -1, 130, + -1, -1, 133, -1, -1, -1, 137, -1, -1, -1, + -1, 142, -1, -1, -1, 54, 147, 56, 57, 58, + -1, -1, -1, 1037, 155, -1, -1, 158, 159, 160, + -1, -1, 163, 17, 165, 166, 51, -1, 169, 54, + -1, 56, 57, 58, 59, 84, -1, -1, 63, 33, + -1, 66, -1, -1, -1, 70, -1, -1, -1, -1, + -1, 100, 77, 47, 158, 159, 160, 161, 162, 84, + 164, 165, 166, -1, -1, -1, 60, 61, -1, -1, + -1, 120, 121, -1, 54, 100, 56, 57, 58, -1, + -1, -1, 76, -1, -1, 1109, 66, 112, 137, -1, + -1, -1, -1, 142, -1, 120, 121, -1, -1, -1, + -1, 126, -1, -1, 84, -1, -1, -1, 1326, 134, + 135, 136, 137, 107, -1, 140, 110, 142, -1, 113, + 100, -1, 147, -1, -1, 16, 17, 18, 19, 20, + 21, 22, 23, -1, -1, 129, -1, -1, 163, -1, + 120, 121, 33, -1, -1, -1, -1, 141, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 137, -1, -1, + -1, 155, 142, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1390, 1391, 1392, 1393, -1, 1395, 1396, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, -1, -1, -1, -1, -1, -1, -1, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, -1, 70, -1, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 1281, 82, 83, + 84, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, -1, 164, 165, 166, 100, -1, -1, 170, + -1, -1, -1, 107, 108, 109, -1, 111, 112, 113, + 114, 115, 116, 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, + -1, -1, -1, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, -1, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + -1, -1, -1, -1, -1, -1, -1, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, -1, 70, -1, 72, 73, 74, 75, + 76, 77, 78, 79, 80, -1, 82, 83, 84, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 1469, -1, -1, -1, -1, + -1, 107, 108, 109, -1, 111, 112, 113, 114, 115, + 116, 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, -1, -1, + -1, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, -1, 169, 170, 3, 4, 5, 6, -1, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 16, 17, 18, 19, + 20, 21, 22, 23, -1, -1, -1, -1, -1, -1, + -1, -1, 50, 33, -1, -1, 54, -1, 56, 57, + 58, -1, -1, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, + -1, -1, -1, 81, -1, -1, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, -1, -1, -1, -1, -1, -1, -1, + -1, 109, -1, 111, -1, 113, -1, -1, -1, -1, + 118, -1, 120, 121, 122, -1, -1, 125, -1, -1, + -1, -1, 130, -1, -1, 133, -1, -1, -1, 137, + 3, 4, 5, 6, 142, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, 155, -1, -1, + 158, 159, 160, -1, -1, 163, -1, 165, 166, 167, + 150, 169, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, -1, 164, 165, 166, 50, 51, -1, + -1, 54, -1, 56, 57, 58, -1, -1, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, 81, -1, -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, -1, -1, - -1, -1, -1, -1, -1, 108, -1, 110, -1, 112, - -1, -1, -1, -1, 117, -1, 119, 120, 121, -1, - -1, 124, -1, -1, -1, -1, 129, -1, -1, 132, - -1, -1, -1, 136, 3, 4, 5, 6, 141, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - -1, 154, -1, -1, 157, 158, 159, -1, -1, 162, - -1, 164, 165, -1, -1, 168, 16, 17, 18, 19, - 20, 21, 22, 23, -1, -1, -1, -1, 47, -1, - -1, 50, 51, 33, -1, 54, -1, 56, 57, 58, - 59, 60, -1, 62, 63, -1, -1, 66, 67, -1, - -1, 70, -1, -1, -1, -1, 75, 76, 77, -1, - -1, -1, -1, -1, -1, 84, -1, -1, -1, -1, - -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, - -1, 100, -1, -1, -1, -1, -1, -1, 33, 108, - -1, 110, -1, 112, -1, -1, -1, 116, 117, -1, - 119, 120, 121, -1, -1, 124, 125, -1, -1, -1, - 129, -1, -1, 132, 133, 134, 135, 136, -1, -1, - 139, -1, 141, -1, 3, 4, 5, 6, -1, 8, - 9, 10, 11, 12, -1, 154, 15, -1, 157, 158, - -1, -1, -1, 162, -1, 164, -1, 147, -1, 168, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, -1, 163, 164, 165, 166, -1, 47, -1, - -1, 50, 51, -1, -1, 54, -1, 56, 57, 58, - 59, 60, -1, 62, 63, -1, -1, 66, 67, -1, - -1, 70, -1, -1, -1, -1, 75, 76, 77, -1, - -1, -1, -1, -1, -1, 84, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, -1, 163, 164, - 165, 100, -1, -1, -1, -1, -1, -1, -1, 108, - -1, 110, -1, 112, -1, -1, -1, 116, 117, -1, - 119, 120, 121, -1, -1, 124, 125, -1, -1, -1, - 129, -1, -1, 132, 133, 134, 135, 136, -1, -1, - 139, -1, 141, 3, 4, 5, 6, -1, 8, 9, - 10, -1, -1, -1, -1, 154, -1, -1, 157, 158, - -1, -1, -1, 162, -1, 164, -1, -1, -1, 168, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 50, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 62, -1, -1, -1, -1, 67, 17, 18, - 19, 20, 21, 22, 23, 75, 76, -1, -1, -1, - -1, 81, -1, -1, 33, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, - 110, -1, 112, -1, -1, -1, -1, 117, 33, -1, - -1, 121, -1, -1, 124, -1, -1, -1, -1, 129, - -1, -1, -1, -1, -1, -1, 54, -1, 56, 57, - 58, -1, -1, -1, -1, -1, -1, -1, 66, -1, - -1, -1, -1, -1, 154, -1, -1, 157, 158, 159, - 6, -1, 162, -1, 164, 165, 84, -1, 168, -1, + -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, + 113, -1, -1, -1, -1, 118, -1, 120, 121, 122, + -1, -1, 125, -1, -1, -1, -1, 130, -1, -1, + 133, -1, -1, -1, 137, 3, 4, 5, 6, 142, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, -1, 155, -1, -1, 158, 159, 160, -1, -1, + 163, -1, 165, 166, -1, -1, 169, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, - -1, -1, 100, -1, -1, -1, -1, 33, -1, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 119, 120, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, -1, 163, 164, 165, -1, 136, 65, - -1, -1, -1, 141, -1, -1, -1, -1, -1, -1, - -1, 10, 11, -1, -1, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, -1, 163, 164, - 165, 166, -1, 17, 18, 19, 20, 21, 22, 23, - -1, -1, 108, -1, -1, -1, -1, -1, -1, 33, - -1, -1, 51, -1, -1, 54, -1, 56, 57, 58, - 59, -1, -1, -1, 63, -1, -1, 66, -1, -1, - -1, 70, -1, -1, -1, -1, -1, -1, 77, -1, - -1, 147, -1, -1, 150, 84, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, -1, 164, 165, - -1, 100, 168, -1, 10, 11, -1, -1, -1, -1, - -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, - 119, 120, -1, -1, -1, -1, 125, -1, -1, -1, - -1, -1, -1, -1, 133, 134, 135, 136, -1, -1, - 139, -1, 141, -1, -1, 51, -1, 146, 54, -1, - 56, 57, 58, 59, -1, -1, -1, 63, -1, -1, - 66, -1, -1, 162, 70, -1, -1, -1, 152, 153, - 154, 77, -1, 157, 158, 159, 160, 161, 84, 163, - 164, 165, -1, -1, -1, -1, -1, -1, -1, -1, - 10, 11, -1, -1, 100, -1, 54, -1, 56, 57, - 58, -1, -1, -1, -1, 111, -1, -1, 66, -1, - -1, -1, -1, 119, 120, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, 84, 133, 134, 135, - 136, 51, -1, 139, 54, 141, 56, 57, 58, 59, - -1, -1, 100, 63, -1, -1, 66, 11, -1, -1, - 70, -1, -1, -1, -1, -1, 162, 77, -1, -1, - -1, 119, 120, -1, 84, 16, 17, 18, 19, 20, - 21, 22, 23, -1, -1, -1, -1, -1, 136, -1, - 100, -1, 33, 141, -1, -1, -1, 10, 11, 12, - 54, 111, 56, 57, 58, -1, -1, -1, -1, 119, - 120, -1, -1, -1, -1, 125, 164, -1, -1, -1, - -1, -1, -1, 133, 134, 135, 136, -1, -1, 139, - 84, 141, 16, 17, 18, 19, 20, 21, 22, 23, - -1, -1, -1, -1, -1, -1, 100, -1, -1, 33, - -1, 64, 162, 16, 17, 18, 19, 20, 21, 22, - 23, -1, -1, 76, 77, 119, 120, -1, -1, -1, - 33, 16, 17, 18, 19, 20, 21, 22, 23, -1, - -1, -1, 136, -1, -1, -1, -1, 141, 33, 16, - 17, 18, 19, 20, 21, 22, 23, -1, -1, 112, - 113, -1, 115, -1, -1, -1, 33, 120, -1, 122, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, -1, 163, 164, 165, 166, 16, 17, 18, 19, - 20, 21, 22, 23, -1, -1, 149, -1, -1, -1, - -1, -1, -1, 33, 16, 17, 18, 19, 20, 21, + -1, -1, 50, 51, -1, -1, 54, 33, 56, 57, + 58, -1, -1, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, + -1, -1, -1, 81, -1, -1, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, -1, -1, -1, -1, -1, -1, -1, + -1, 109, -1, 111, -1, 113, -1, -1, -1, -1, + 118, -1, 120, 121, 122, -1, -1, 125, -1, -1, + -1, -1, 130, -1, -1, 133, -1, -1, -1, 137, + 3, 4, 5, 6, 142, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, 155, -1, -1, + 158, 159, 160, -1, -1, 163, -1, 165, 166, -1, + -1, 169, -1, 149, -1, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 50, 164, 165, + 166, 54, -1, 56, 57, 58, -1, -1, -1, 62, + -1, -1, -1, 66, 67, -1, -1, -1, -1, -1, + -1, -1, 75, 76, 77, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, -1, -1, + -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, + 113, -1, -1, -1, -1, 118, -1, 120, 121, 122, + -1, -1, 125, -1, -1, -1, -1, 130, -1, -1, + 133, -1, -1, -1, 137, 3, 4, 5, 6, 142, + 8, 9, 10, 11, 147, -1, -1, -1, -1, -1, + -1, -1, 155, -1, -1, 158, 159, 160, -1, -1, + 163, -1, 165, 166, -1, -1, 169, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, + -1, -1, 50, -1, -1, -1, 54, 33, 56, 57, + 58, -1, -1, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, + -1, -1, -1, 81, -1, -1, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, -1, -1, -1, -1, -1, -1, -1, + -1, 109, -1, 111, -1, 113, -1, -1, -1, -1, + 118, -1, 120, 121, 122, -1, -1, 125, -1, -1, + -1, -1, 130, -1, -1, 133, -1, -1, -1, 137, + 3, 4, 5, 6, 142, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, 155, -1, -1, + 158, 159, 160, -1, -1, 163, -1, 165, 166, 167, + -1, 169, 148, -1, -1, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 50, 164, 165, + 166, 54, -1, 56, 57, 58, -1, -1, -1, 62, + -1, -1, -1, 66, 67, -1, -1, -1, -1, -1, + -1, -1, 75, 76, 77, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, -1, -1, + -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, + 113, -1, -1, -1, -1, 118, -1, 120, 121, 122, + -1, -1, 125, -1, -1, -1, -1, 130, -1, -1, + 133, -1, -1, -1, 137, 3, 4, 5, 6, 142, + 8, 9, 10, 11, 147, -1, -1, -1, -1, -1, + -1, -1, 155, -1, -1, 158, 159, 160, -1, -1, + 163, -1, 165, 166, -1, -1, 169, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, + -1, -1, 50, -1, -1, -1, 54, 33, 56, 57, + 58, -1, -1, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, + -1, -1, -1, 81, -1, -1, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, -1, -1, -1, -1, -1, -1, -1, + -1, 109, -1, 111, -1, 113, -1, -1, -1, -1, + 118, -1, 120, 121, 122, -1, -1, 125, -1, -1, + -1, -1, 130, -1, -1, 133, -1, -1, -1, 137, + 3, 4, 5, 6, 142, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, 155, -1, -1, + 158, 159, 160, -1, -1, 163, -1, 165, 166, 167, + -1, 169, -1, -1, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 50, 164, 165, + 166, 54, -1, 56, 57, 58, -1, -1, -1, 62, + -1, -1, -1, 66, 67, -1, -1, -1, -1, -1, + -1, -1, 75, 76, 77, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, -1, -1, + -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, + 113, -1, -1, -1, -1, 118, -1, 120, 121, 122, + -1, -1, 125, -1, -1, -1, -1, 130, -1, -1, + 133, -1, -1, -1, 137, 3, 4, 5, 6, 142, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, -1, 155, -1, -1, 158, 159, 160, -1, -1, + 163, -1, 165, 166, -1, -1, 169, 16, 17, 18, + 19, 20, 21, 22, 23, -1, -1, -1, -1, 47, + -1, -1, 50, 51, 33, -1, 54, -1, 56, 57, + 58, 59, 60, -1, 62, 63, -1, -1, 66, 67, + -1, -1, 70, -1, -1, -1, -1, 75, 76, 77, + -1, -1, -1, -1, -1, -1, 84, -1, -1, -1, + -1, -1, 16, 17, 18, 19, 20, 21, 22, 23, + -1, -1, 100, -1, -1, -1, -1, -1, -1, 33, + -1, 109, -1, 111, -1, 113, -1, -1, -1, 117, + 118, -1, 120, 121, 122, -1, -1, 125, 126, -1, + -1, -1, 130, -1, -1, 133, 134, 135, 136, 137, + -1, -1, 140, -1, 142, -1, 3, 4, 5, 6, + -1, 8, 9, 10, 11, 12, -1, 155, 15, -1, + 158, 159, -1, -1, -1, 163, -1, 165, -1, 148, + -1, 169, -1, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, -1, 164, 165, 166, 167, -1, + 47, -1, -1, 50, 51, -1, -1, 54, -1, 56, + 57, 58, 59, 60, -1, 62, 63, -1, -1, 66, + 67, -1, -1, 70, -1, -1, -1, -1, 75, 76, + 77, -1, -1, 17, -1, -1, -1, 84, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, -1, + 164, 165, 166, 100, -1, -1, -1, -1, -1, -1, + -1, -1, 109, 47, 111, -1, 113, -1, -1, -1, + 117, 118, -1, 120, 121, 122, 60, 61, 125, 126, + -1, -1, -1, 130, -1, -1, 133, 134, 135, 136, + 137, -1, 76, 140, -1, 142, 3, 4, 5, 6, + -1, 8, 9, 10, -1, -1, -1, -1, 155, -1, + -1, 158, 159, -1, -1, -1, 163, -1, 165, -1, + -1, -1, 169, 107, -1, -1, 110, -1, -1, 113, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 50, -1, 129, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 62, -1, 141, -1, -1, + 67, 17, 18, 19, 20, 21, 22, 23, 75, 76, + -1, 155, -1, -1, 81, -1, -1, 33, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 16, 17, 18, 19, 20, 21, 22, + 23, -1, -1, -1, 111, -1, 113, -1, -1, -1, + 33, 118, -1, -1, -1, 122, -1, -1, 125, -1, + -1, -1, -1, 130, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 155, -1, + -1, 158, 159, 160, 6, -1, 163, -1, 165, 166, + -1, -1, 169, -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 33, -1, -1, -1, -1, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, -1, 163, - 164, 165, 166, -1, -1, -1, -1, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, -1, - 163, 164, 165, 166, -1, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, -1, 163, 164, - 165, 166, -1, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, -1, 163, 164, 165, 166, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, -1, 163, 164, 165, 166, -1, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - -1, 163, 164, 165, 47, -1, 49, -1, -1, 52, - 53, -1, -1, -1, -1, -1, -1, 60, 61, -1, - -1, -1, -1, -1, -1, -1, 69, -1, 71, 72, - 73, 74, -1, -1, -1, 78, -1, -1, -1, -1, - 83, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 101, 102, - 103, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, 122, - 123, 11, 12, 126, 127, 15, -1, 17, 131, -1, - -1, -1, -1, -1, 137, 138, -1, 140, 18, 19, - 20, 21, 22, 23, -1, 148, -1, -1, -1, -1, - -1, -1, -1, 33, -1, -1, -1, 47, -1, -1, - -1, 51, -1, -1, 54, -1, 56, 57, 58, 59, - 60, -1, -1, 63, -1, -1, 66, -1, -1, -1, - 70, 18, 19, 20, 21, 22, 23, 77, -1, -1, - -1, -1, -1, -1, 84, -1, 33, 18, 19, 20, + -1, 33, -1, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, -1, -1, 153, 154, 155, + -1, -1, 158, 159, 160, 161, 162, -1, 164, 165, + 166, -1, -1, 65, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 10, 11, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + -1, 164, 165, 166, 167, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 109, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 51, -1, -1, + 54, -1, 56, 57, 58, 59, -1, -1, -1, 63, + -1, -1, 66, -1, -1, -1, 70, -1, -1, -1, + -1, -1, -1, 77, -1, -1, 148, -1, -1, 151, + 84, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, -1, 100, 169, 10, 11, + -1, -1, -1, -1, -1, -1, -1, -1, 112, -1, + -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, + -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, + 134, 135, 136, 137, -1, -1, 140, -1, 142, 51, + -1, -1, 54, -1, 56, 57, 58, 59, -1, -1, + -1, 63, -1, -1, 66, -1, -1, -1, 70, 163, + -1, -1, -1, -1, -1, 77, -1, -1, -1, -1, + -1, -1, 84, 16, 17, 18, 19, 20, 21, 22, + 23, -1, -1, -1, -1, -1, -1, -1, 100, -1, + 33, -1, -1, -1, -1, 10, 11, 12, -1, -1, + 112, -1, -1, -1, -1, -1, -1, -1, 120, 121, + -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, + -1, -1, 134, 135, 136, 137, -1, -1, 140, -1, + 142, 16, 17, 18, 19, 20, 21, 22, 23, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, 64, + -1, 163, 16, 17, 18, 19, 20, 21, 22, 23, + -1, 76, 77, -1, -1, -1, -1, -1, -1, 33, + 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, 16, 17, + 18, 19, 20, 21, 22, 23, -1, -1, 113, 114, + -1, 116, -1, -1, -1, 33, 121, -1, 123, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + -1, 164, 165, 166, 167, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, -1, -1, -1, -1, -1, - 100, -1, 33, 18, 19, 20, 21, 22, 23, -1, - -1, -1, -1, -1, -1, -1, 116, -1, 33, 119, - 120, -1, -1, -1, -1, 125, -1, 18, 19, 20, - 21, 22, 23, 133, 134, 135, 136, -1, -1, 139, - -1, 141, 33, 20, 21, 22, 23, -1, -1, -1, - -1, -1, -1, -1, 154, -1, 33, -1, -1, 159, - -1, -1, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, -1, 163, 164, 165, -1, -1, -1, -1, + -1, -1, 33, 16, 17, 18, 19, 20, 21, 22, + 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, -1, 164, + 165, 166, 167, -1, -1, -1, -1, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, -1, + 164, 165, 166, 167, -1, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, -1, 164, 165, + 166, 167, -1, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, + 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, -1, 164, 165, 166, 167, -1, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + -1, 164, 165, 166, 16, 17, 18, 19, 20, 21, + 22, 23, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 10, 11, - 12, -1, -1, -1, -1, -1, 153, 154, 155, 156, - 157, 158, 159, 160, 161, -1, 163, 164, 165, -1, - -1, 152, 153, 154, -1, -1, 157, 158, 159, 160, - 161, -1, 163, 164, 165, 47, -1, 49, 153, 154, - -1, -1, 157, 158, 159, 160, 161, -1, 163, 164, - 165, -1, 64, -1, -1, 17, -1, 10, 11, 12, - -1, -1, -1, 154, 76, 77, 157, 158, 159, 160, - 161, 33, 163, 164, 165, -1, -1, -1, 155, 156, - 157, 158, 159, 160, 161, 47, 163, 164, 165, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, - 112, 113, -1, 115, 10, 11, 12, -1, 120, -1, - 122, 64, -1, -1, 76, -1, -1, -1, -1, 10, - 11, 12, -1, 76, 77, -1, -1, -1, -1, -1, - -1, -1, -1, 6, 146, -1, 6, -1, -1, -1, - -1, -1, -1, -1, 106, -1, -1, 109, -1, -1, - 112, -1, -1, -1, -1, -1, -1, -1, 64, 112, - 113, -1, 115, -1, -1, -1, 128, 120, -1, 122, - 76, 77, -1, 64, 47, -1, 49, 47, 140, 49, - 53, -1, -1, 53, -1, 76, 77, 60, 61, -1, - 60, 61, 154, 146, -1, -1, -1, -1, 71, 72, - 73, 71, 72, 73, -1, -1, 112, 113, -1, 115, - 83, -1, -1, 83, 120, -1, 122, -1, -1, -1, - -1, 112, 113, 114, 115, 10, 11, 12, -1, 120, - -1, 122, -1, 106, -1, -1, 106, -1, -1, -1, - 146, -1, 133, 116, -1, -1, 116, 138, -1, 122, - -1, -1, 122, 126, 127, -1, -1, 127, -1, -1, - 10, 11, 12, -1, -1, 138, 51, 140, 138, 54, - 140, 56, 57, 58, 59, 60, -1, -1, 63, -1, - -1, 66, -1, -1, -1, 70, -1, -1, -1, -1, - -1, -1, 77, -1, -1, -1, -1, -1, -1, 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 64, 100, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 76, 77, -1, -1, - -1, -1, -1, -1, 119, 120, -1, -1, -1, -1, - 125, -1, 10, 11, 12, -1, -1, -1, 133, 134, - 135, 136, 51, -1, 139, 54, 141, 56, 57, 58, - 59, 60, 112, 113, 63, 115, -1, 66, -1, -1, - 120, 70, 122, 54, -1, 56, 57, 58, 77, -1, - -1, -1, -1, 51, -1, 84, 54, -1, 56, 57, - 58, 59, 60, -1, -1, 63, -1, -1, 66, -1, - -1, 100, 70, 84, -1, -1, -1, -1, -1, 77, - -1, -1, -1, -1, -1, -1, 84, -1, -1, 100, - 119, 120, -1, -1, -1, -1, 125, -1, 10, 11, - 12, -1, 100, -1, 133, 134, 135, 136, 119, 120, - 139, -1, 141, -1, -1, -1, -1, -1, -1, -1, - -1, 119, 120, -1, -1, 136, -1, 125, 11, 12, - 141, -1, 15, -1, -1, 133, 134, 135, 136, -1, - -1, 139, 54, 141, 56, 57, 58, 59, 60, -1, - -1, -1, -1, 164, 66, -1, -1, 11, 12, -1, - -1, 15, -1, -1, 47, 77, -1, -1, 51, -1, - -1, 54, 84, 56, 57, 58, 59, 60, -1, -1, - 63, -1, -1, 66, -1, -1, -1, 70, 100, -1, - -1, -1, -1, 47, 77, -1, -1, 51, -1, -1, - 54, 84, 56, 57, 58, 59, 60, 119, 120, 63, - -1, -1, 66, -1, -1, -1, 70, 100, -1, -1, - -1, 133, -1, 77, 136, -1, -1, 139, -1, 141, - 84, -1, -1, 116, -1, -1, 119, 120, -1, -1, - -1, -1, 125, -1, -1, -1, 100, -1, 11, 12, - 133, 134, 135, 136, -1, -1, 139, -1, 141, -1, - -1, -1, 116, -1, -1, 119, 120, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, 11, 12, 133, - 134, 135, 136, -1, 47, 139, -1, 141, 51, -1, + -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 18, 19, 20, 21, 22, 23, -1, -1, -1, -1, + -1, -1, -1, -1, 150, 33, 152, 153, 154, 155, + -1, -1, 158, 159, 160, 161, 162, -1, 164, 165, + 166, 47, -1, 49, -1, -1, 52, 53, -1, -1, + -1, -1, -1, -1, 60, 61, 18, 19, 20, 21, + 22, 23, -1, 69, -1, 71, 72, 73, 74, -1, + -1, 33, 78, -1, -1, -1, -1, 83, -1, -1, + 152, 153, 154, 155, -1, -1, 158, 159, 160, 161, + 162, -1, 164, 165, 166, 101, 102, 103, 104, 105, + 106, 107, 108, -1, -1, -1, -1, -1, 114, 115, + 116, 117, -1, -1, -1, -1, -1, 123, 124, 11, + 12, 127, 128, 15, -1, 17, 132, -1, -1, -1, + -1, -1, 138, 139, -1, 141, -1, -1, -1, -1, + -1, -1, -1, 149, -1, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 47, 164, 165, 166, 51, + -1, -1, 54, -1, 56, 57, 58, 59, 60, -1, + -1, 63, -1, -1, 66, -1, -1, -1, 70, -1, + -1, -1, -1, -1, -1, 77, 18, 19, 20, 21, + 22, 23, 84, 155, 156, 157, 158, 159, 160, 161, + 162, 33, 164, 165, 166, 10, 11, 12, 100, 18, + 19, 20, 21, 22, 23, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, 117, -1, -1, 120, 121, + -1, -1, -1, -1, 126, -1, 18, 19, 20, 21, + 22, 23, 134, 135, 136, 137, -1, -1, 140, -1, + 142, 33, 18, 19, 20, 21, 22, 23, -1, 64, + -1, -1, -1, 155, -1, -1, -1, 33, 160, -1, + -1, 76, 77, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 10, 11, 12, 108, -1, -1, -1, -1, 113, 114, + -1, 116, -1, -1, -1, -1, 121, -1, 123, -1, + -1, 153, 154, 155, -1, -1, 158, 159, 160, 161, + 162, -1, 164, 165, 166, -1, -1, 47, -1, 49, + -1, -1, -1, -1, -1, -1, -1, 156, 157, 158, + 159, 160, 161, 162, 64, 164, 165, 166, -1, -1, + -1, -1, -1, -1, -1, -1, 76, 77, -1, 6, + -1, -1, 154, 155, -1, -1, 158, 159, 160, 161, + 162, -1, 164, 165, 166, -1, 6, -1, -1, 155, + -1, -1, 158, 159, 160, 161, 162, -1, 164, 165, + 166, -1, -1, 113, 114, -1, 116, -1, -1, -1, + 47, 121, 49, 123, -1, -1, 53, -1, -1, -1, + -1, -1, -1, 60, 61, -1, -1, 47, 54, 49, + 56, 57, 58, 53, 71, 72, 73, 147, -1, -1, + 60, 61, -1, -1, -1, -1, 83, -1, -1, -1, + -1, 71, 72, 73, -1, -1, -1, -1, 84, -1, + -1, -1, -1, 83, 10, 11, 12, -1, -1, -1, + 107, -1, -1, -1, 100, -1, 10, 11, 12, -1, + 117, -1, -1, -1, -1, -1, 123, 107, -1, -1, + 127, 128, -1, -1, 120, 121, -1, 117, -1, -1, + -1, -1, 139, 123, 141, 10, 11, 12, 128, -1, + -1, 137, -1, -1, -1, -1, 142, 51, 64, 139, + 54, 141, 56, 57, 58, 59, 60, -1, -1, 63, + 76, 77, 66, -1, -1, -1, 70, -1, -1, 165, + -1, -1, -1, 77, -1, -1, 51, -1, -1, 54, + 84, 56, 57, 58, 59, 60, -1, -1, 63, -1, + -1, 66, -1, -1, -1, 70, 100, 113, 114, 115, + 116, -1, 77, -1, -1, 121, -1, 123, -1, 84, + -1, -1, -1, -1, -1, -1, 120, 121, 134, -1, + -1, -1, 126, 139, -1, 100, -1, 10, 11, 12, + 134, 135, 136, 137, -1, -1, 140, -1, 142, -1, + -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, + -1, 126, -1, -1, -1, -1, 10, 11, 12, 134, + 135, 136, 137, -1, -1, 140, -1, 142, 51, -1, -1, 54, -1, 56, 57, 58, 59, 60, -1, -1, - 63, -1, -1, 66, -1, -1, -1, 70, -1, -1, - -1, -1, -1, -1, 77, -1, -1, 51, -1, -1, - 54, 84, 56, 57, 58, 59, 60, -1, -1, 63, - -1, -1, 66, -1, -1, -1, 70, 100, -1, -1, + 63, -1, -1, 66, -1, -1, -1, 70, 10, 11, + 12, -1, -1, -1, 77, -1, -1, -1, -1, -1, + 54, 84, 56, 57, 58, 59, 60, -1, -1, -1, + -1, -1, 66, -1, -1, -1, -1, 100, -1, -1, -1, -1, -1, 77, -1, -1, -1, -1, -1, -1, - 84, -1, -1, 116, -1, -1, 119, 120, -1, -1, - -1, -1, 125, 11, 12, -1, 100, -1, -1, -1, - 133, 134, 135, 136, -1, -1, 139, -1, 141, -1, - -1, -1, -1, -1, -1, 119, 120, 11, 12, -1, - -1, 125, -1, -1, -1, 10, 11, 12, -1, 133, - 134, 135, 136, 51, -1, 139, 54, 141, 56, 57, - 58, 59, -1, -1, -1, 63, -1, 54, 66, 56, - 57, 58, 70, -1, -1, -1, -1, 51, -1, 77, - 54, -1, 56, 57, 58, 59, 84, -1, -1, 63, - -1, -1, 66, -1, -1, -1, 70, 84, -1, 64, - -1, -1, 100, 77, -1, -1, -1, -1, -1, -1, - 84, 76, 77, 100, -1, -1, -1, -1, 116, -1, - -1, 119, 120, 11, -1, -1, 100, 125, -1, -1, - -1, -1, 119, 120, -1, 133, 134, 135, 136, -1, - -1, 139, 107, 141, -1, 119, 120, 112, 113, 136, - 115, 125, 11, -1, 141, 120, -1, 122, -1, 133, - 134, 135, 136, 51, -1, 139, 54, 141, 56, 57, - 58, 59, 60, -1, -1, 63, -1, 164, 66, -1, - -1, -1, 70, -1, -1, -1, -1, -1, -1, 77, - -1, -1, 51, -1, -1, 54, 84, 56, 57, 58, - 59, 60, -1, -1, 63, -1, -1, 66, -1, -1, - -1, 70, 100, -1, -1, -1, -1, -1, 77, -1, - -1, -1, -1, -1, -1, 84, -1, -1, -1, -1, - -1, 119, 120, -1, -1, -1, -1, 125, 11, -1, - -1, 100, -1, -1, -1, 133, 134, 135, 136, -1, - -1, 139, -1, 141, -1, -1, -1, -1, -1, -1, - 119, 120, 11, -1, -1, -1, 125, -1, -1, -1, - 10, 11, 12, -1, 133, 134, 135, 136, 51, -1, - 139, 54, 141, 56, 57, 58, 59, -1, -1, -1, - 63, -1, -1, 66, -1, -1, -1, 70, -1, -1, + 84, -1, 54, -1, 56, 57, 58, 120, 121, -1, + -1, -1, -1, 126, 66, -1, 100, -1, -1, -1, + -1, 134, 135, 136, 137, 77, -1, 140, -1, 142, + -1, -1, 84, -1, 11, 12, 120, 121, 15, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, -1, + 134, -1, -1, 137, -1, -1, 140, -1, 142, -1, + -1, -1, -1, 11, 12, -1, -1, 15, 120, 121, + 47, -1, -1, -1, 51, -1, -1, 54, -1, 56, + 57, 58, 59, 60, -1, 137, 63, -1, 140, 66, + 142, -1, -1, 70, -1, -1, -1, -1, -1, 47, + 77, -1, -1, 51, -1, -1, 54, 84, 56, 57, + 58, 59, 60, -1, -1, 63, -1, -1, 66, -1, + -1, -1, 70, 100, -1, -1, -1, -1, -1, 77, + -1, -1, -1, -1, -1, -1, 84, -1, -1, -1, + 117, -1, -1, 120, 121, 10, 11, 12, -1, 126, + -1, -1, 100, -1, -1, 11, 12, 134, 135, 136, + 137, -1, -1, 140, -1, 142, -1, -1, -1, 117, + -1, -1, 120, 121, -1, -1, -1, -1, 126, 54, + -1, 56, 57, 58, 11, 12, 134, 135, 136, 137, + -1, 47, 140, -1, 142, 51, -1, -1, 54, 64, + 56, 57, 58, 59, 60, -1, -1, 63, -1, 84, + 66, 76, 77, -1, 70, -1, -1, -1, -1, -1, + -1, 77, -1, -1, 51, 100, -1, 54, 84, 56, + 57, 58, 59, 60, -1, -1, 63, -1, -1, 66, + -1, -1, -1, 70, 100, 120, 121, -1, 113, 114, + 77, 116, -1, -1, -1, -1, 121, 84, 123, -1, + -1, 117, 137, -1, 120, 121, -1, 142, -1, 134, + 126, 11, 12, 100, 139, -1, -1, -1, 134, 135, + 136, 137, -1, -1, 140, -1, 142, -1, -1, -1, + 165, -1, -1, 120, 121, 11, 12, -1, -1, 126, + -1, -1, -1, -1, -1, -1, -1, 134, 135, 136, + 137, 51, -1, 140, 54, 142, 56, 57, 58, 59, + -1, -1, -1, 63, -1, -1, 66, -1, -1, -1, + 70, -1, -1, -1, -1, 51, -1, 77, 54, -1, + 56, 57, 58, 59, 84, -1, -1, 63, -1, -1, + 66, -1, -1, -1, 70, -1, -1, -1, -1, -1, + 100, 77, -1, -1, -1, -1, -1, -1, 84, 10, + 11, 12, -1, -1, -1, -1, -1, 117, -1, -1, + 120, 121, 11, -1, 100, -1, 126, -1, -1, -1, + -1, -1, -1, -1, 134, 135, 136, 137, -1, -1, + 140, -1, 142, -1, 120, 121, -1, -1, -1, -1, + 126, 11, -1, -1, -1, -1, -1, -1, 134, 135, + 136, 137, 51, 64, 140, 54, 142, 56, 57, 58, + 59, 60, -1, -1, 63, 76, 77, 66, -1, -1, + -1, 70, -1, -1, -1, -1, -1, -1, 77, -1, + -1, 51, -1, -1, 54, 84, 56, 57, 58, 59, + 60, -1, -1, 63, -1, -1, 66, -1, -1, -1, + 70, 100, 113, 114, -1, 116, -1, 77, -1, -1, + 121, -1, 123, -1, 84, -1, -1, -1, -1, -1, + -1, 120, 121, 134, -1, -1, -1, 126, 11, -1, + 100, -1, -1, -1, -1, 134, 135, 136, 137, -1, + -1, 140, -1, 142, -1, -1, -1, -1, -1, -1, + 120, 121, 11, -1, -1, -1, 126, -1, -1, -1, + 10, 11, 12, -1, 134, 135, 136, 137, 51, -1, + 140, 54, 142, 56, 57, 58, 59, -1, -1, -1, + 63, -1, 54, 66, 56, 57, 58, 70, -1, -1, -1, -1, 51, -1, 77, 54, -1, 56, 57, 58, 59, 84, -1, -1, 63, -1, -1, 66, -1, -1, - -1, 70, -1, -1, 64, -1, -1, 100, 77, 10, - 11, 12, -1, -1, -1, 84, 76, 77, -1, -1, - -1, -1, -1, 10, 11, 12, 119, 120, -1, -1, - -1, 100, 125, -1, -1, -1, -1, 10, 11, 12, - 133, 134, 135, 136, -1, -1, 139, -1, 141, -1, - 119, 120, 112, 113, -1, 115, 125, -1, -1, -1, - 120, -1, 122, 64, 133, 134, 135, 136, -1, -1, - 139, -1, 141, 133, -1, 76, 77, 64, 138, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, - 77, 64, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 76, 77, -1, -1, -1, -1, -1, - -1, 112, 113, -1, 115, -1, -1, -1, -1, 120, - -1, 122, -1, -1, -1, 112, 113, -1, 115, -1, - -1, -1, 133, 120, -1, 122, -1, 138, -1, 112, - 113, -1, 115, -1, -1, -1, 133, 120, 47, 122, - 49, 138, -1, 52, 53, -1, -1, -1, -1, -1, - 133, 60, 61, -1, -1, -1, -1, -1, -1, -1, + -1, 70, 84, -1, 64, -1, -1, 100, 77, -1, + 10, 11, 12, -1, -1, 84, 76, 77, 100, -1, + -1, -1, -1, -1, 10, 11, 12, 120, 121, -1, + -1, 100, -1, 126, -1, -1, -1, -1, 120, 121, + -1, 134, 135, 136, 137, -1, -1, 140, -1, 142, + -1, 120, 121, 113, 114, 137, 116, 126, -1, -1, + 142, 121, -1, 123, 64, 134, 135, 136, 137, -1, + -1, 140, -1, 142, 134, -1, 76, 77, 64, 139, + -1, -1, -1, 165, -1, -1, -1, -1, -1, -1, + 76, 77, -1, -1, -1, -1, -1, -1, -1, 54, + -1, 56, 57, 58, -1, -1, -1, -1, -1, -1, + -1, 66, -1, 113, 114, -1, 116, -1, -1, -1, + -1, 121, -1, 123, -1, -1, -1, 113, 114, 84, + 116, -1, -1, -1, 134, 121, 47, 123, 49, 139, + -1, 52, 53, -1, -1, 100, -1, -1, -1, 60, + 61, -1, 138, -1, -1, -1, -1, -1, 69, -1, + 71, 72, 73, 74, -1, 120, 121, 78, -1, -1, + -1, -1, 83, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 137, -1, -1, -1, -1, 142, -1, -1, + 101, 102, 103, 104, 105, 106, 107, 108, -1, -1, + -1, -1, -1, 114, 115, 116, 117, -1, -1, 47, + 165, 49, 123, 124, 52, 53, 127, 128, -1, -1, + -1, 132, 60, 61, -1, -1, -1, 138, 139, -1, + 141, 69, -1, 71, 72, 73, 74, -1, 149, -1, + 78, -1, -1, -1, -1, 83, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 168, -1, -1, + -1, -1, -1, 101, 102, 103, 104, 105, 106, 107, + 108, -1, -1, -1, -1, -1, 114, 115, 116, 117, + -1, -1, 47, -1, 49, 123, 124, 52, 53, 127, + 128, -1, -1, -1, 132, 60, 61, -1, -1, -1, + 138, 139, -1, 141, 69, -1, 71, 72, 73, 74, + -1, 149, -1, 78, -1, -1, -1, -1, 83, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 168, -1, -1, -1, -1, -1, 101, 102, 103, 104, + 105, 106, 107, 108, -1, -1, -1, -1, -1, 114, + 115, 116, 117, -1, -1, 47, -1, 49, 123, 124, + 52, 53, 127, 128, -1, -1, -1, 132, 60, 61, + -1, -1, -1, 138, 139, -1, 141, 69, -1, 71, + 72, 73, 74, -1, 149, -1, 78, -1, -1, -1, + -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 168, -1, -1, -1, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, 115, 116, 117, -1, -1, 47, -1, + 49, 123, 124, 52, 53, 127, 128, -1, -1, -1, + 132, 60, 61, -1, -1, -1, 138, 139, -1, 141, + 69, -1, 71, 72, 73, 74, -1, 149, -1, 78, + -1, -1, -1, -1, 83, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 168, -1, -1, -1, + -1, -1, 101, 102, 103, 104, 105, 106, 107, 108, + -1, -1, -1, -1, -1, 114, 115, 116, 117, -1, + -1, 47, -1, 49, 123, 124, 52, 53, 127, 128, + -1, -1, -1, 132, 60, 61, -1, -1, -1, 138, + 139, -1, 141, 69, -1, 71, 72, 73, 74, -1, + 149, -1, 78, -1, -1, -1, -1, 83, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 168, + -1, -1, -1, -1, -1, 101, 102, 103, 104, 105, + 106, 107, 108, -1, -1, -1, -1, -1, 114, 115, + 116, 117, -1, -1, 47, -1, 49, 123, 124, 52, + 53, 127, 128, -1, -1, -1, 132, 60, 61, -1, + -1, -1, 138, 139, -1, 141, 69, -1, 71, 72, + 73, 74, -1, 149, -1, 78, -1, -1, -1, -1, + 83, -1, -1, 10, 11, 12, -1, -1, 15, 10, + 11, 12, 168, -1, -1, -1, -1, -1, 101, 102, + 103, 104, 105, 106, 107, 108, -1, -1, -1, -1, + -1, 114, 115, 116, 117, -1, -1, -1, -1, -1, + 123, 124, -1, -1, 127, 128, 47, -1, 49, 132, + -1, -1, -1, -1, -1, 138, 139, 64, 141, -1, + -1, -1, -1, 64, -1, 47, 149, 49, -1, 76, + 77, 53, -1, -1, -1, 76, 77, -1, 60, 61, + -1, -1, -1, -1, -1, 168, -1, -1, -1, 71, + 72, 73, -1, -1, -1, -1, 78, -1, -1, -1, + -1, 83, -1, -1, -1, -1, 113, 114, -1, 116, + -1, -1, 113, 114, 121, 116, 123, -1, -1, -1, + 121, -1, 123, -1, -1, 107, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 117, -1, -1, -1, -1, + -1, 123, -1, -1, -1, -1, 128, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 138, 139, 47, 141, + 49, -1, -1, 52, 53, -1, -1, -1, -1, -1, + -1, 60, 61, -1, 156, -1, -1, -1, -1, -1, 69, -1, 71, 72, 73, 74, -1, -1, -1, 78, -1, -1, -1, -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 101, 102, 103, 104, 105, 106, 107, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - 47, -1, 49, 122, 123, 52, 53, 126, 127, -1, - -1, -1, 131, 60, 61, -1, -1, -1, 137, 138, - -1, 140, 69, -1, 71, 72, 73, 74, -1, 148, - -1, 78, -1, -1, -1, -1, 83, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, - -1, -1, -1, -1, 101, 102, 103, 104, 105, 106, - 107, -1, -1, -1, -1, -1, 113, 114, 115, 116, - -1, -1, 47, -1, 49, 122, 123, 52, 53, 126, - 127, -1, -1, -1, 131, 60, 61, -1, -1, -1, - 137, 138, -1, 140, 69, -1, 71, 72, 73, 74, - -1, 148, -1, 78, -1, -1, -1, -1, 83, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 167, -1, -1, -1, -1, -1, 101, 102, 103, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, 47, -1, 49, 122, 123, 52, - 53, 126, 127, -1, -1, -1, 131, 60, 61, -1, - -1, -1, 137, 138, -1, 140, 69, -1, 71, 72, - 73, 74, -1, 148, -1, 78, -1, -1, -1, -1, - 83, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 167, -1, -1, -1, -1, -1, 101, 102, - 103, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, 47, -1, 49, 122, - 123, 52, 53, 126, 127, -1, -1, -1, 131, 60, - 61, -1, -1, -1, 137, 138, -1, 140, 69, -1, - 71, 72, 73, 74, -1, 148, -1, 78, -1, -1, - -1, -1, 83, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 167, -1, -1, -1, -1, -1, - 101, 102, 103, 104, 105, 106, 107, -1, -1, -1, - -1, -1, 113, 114, 115, 116, -1, -1, 47, -1, - 49, 122, 123, 52, 53, 126, 127, -1, -1, -1, - 131, 60, 61, -1, -1, -1, 137, 138, -1, 140, - 69, -1, 71, 72, 73, 74, -1, 148, -1, 78, - -1, -1, -1, -1, 83, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 167, -1, -1, -1, - -1, -1, 101, 102, 103, 104, 105, 106, 107, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - 47, -1, 49, 122, 123, 52, 53, 126, 127, -1, - -1, -1, 131, 60, 61, -1, -1, -1, 137, 138, - -1, 140, 69, -1, 71, 72, 73, 74, -1, 148, - -1, 78, -1, 10, 11, 12, 83, -1, -1, -1, - -1, -1, -1, 54, -1, 56, 57, 58, 167, -1, - -1, -1, -1, -1, 101, 102, 103, 104, 105, 106, - 107, -1, -1, -1, -1, -1, 113, 114, 115, 116, - 47, -1, 49, 84, -1, 122, 123, -1, -1, 126, - 127, -1, -1, -1, 131, -1, -1, 64, -1, 100, - 137, 138, 47, 140, 49, -1, -1, -1, 53, 76, - 77, 148, -1, -1, -1, 60, 61, -1, 119, 120, - -1, -1, -1, -1, -1, -1, 71, 72, 73, -1, - 167, -1, -1, 78, -1, 136, -1, -1, 83, -1, - 141, -1, -1, -1, -1, 112, 113, -1, 115, -1, - -1, -1, -1, 120, 47, 122, 49, -1, -1, -1, - 53, 106, -1, 164, -1, -1, -1, 60, 61, -1, - -1, 116, -1, -1, -1, -1, -1, 122, 71, 72, - 73, -1, 127, -1, -1, 78, -1, -1, -1, -1, - 83, -1, 137, 138, 47, 140, 49, -1, -1, 52, - 53, -1, -1, -1, -1, -1, -1, 60, 61, -1, - 155, -1, -1, 106, -1, -1, 69, -1, 71, 72, - 73, 74, -1, 116, -1, 78, -1, -1, -1, 122, - 83, -1, -1, 126, 127, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 137, 138, -1, 140, 101, 102, - 103, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, 47, -1, 49, 122, - 123, -1, 53, 126, 127, 47, -1, 49, 131, 60, - 61, 53, -1, -1, 137, 138, -1, 140, 60, 61, - 71, 72, 73, -1, -1, -1, -1, -1, -1, 71, - 72, 73, 83, -1, -1, -1, 54, -1, 56, 57, - 58, 83, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 106, 107, -1, -1, -1, - -1, -1, -1, -1, 106, 116, 84, -1, -1, -1, - -1, 122, -1, -1, 116, -1, 127, -1, -1, -1, - 122, -1, 100, -1, -1, 127, -1, 138, -1, 140, - -1, -1, -1, -1, -1, -1, 138, -1, 140, -1, - -1, 119, 120, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 136, -1, - -1, -1, -1, 141 + -1, -1, 101, 102, 103, 104, 105, 106, 107, 108, + -1, -1, -1, -1, -1, 114, 115, 116, 117, -1, + -1, 47, -1, 49, 123, 124, -1, 53, 127, 128, + -1, -1, -1, 132, 60, 61, -1, -1, -1, 138, + 139, -1, 141, -1, -1, 71, 72, 73, 47, -1, + 49, -1, 78, -1, 53, -1, -1, 83, -1, -1, + -1, 60, 61, 47, -1, 49, -1, -1, -1, 53, + -1, -1, 71, 72, 73, -1, 60, 61, -1, -1, + -1, 107, -1, -1, 83, -1, -1, 71, 72, 73, + -1, 117, -1, -1, -1, -1, -1, 123, -1, 83, + -1, 127, 128, -1, -1, -1, -1, -1, 107, 108, + -1, -1, 138, 139, -1, 141, -1, -1, 117, -1, + -1, -1, -1, 107, 123, -1, -1, -1, -1, 128, + -1, -1, -1, 117, -1, -1, -1, -1, -1, 123, + 139, -1, 141, -1, 128, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 139, -1, 141 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 143, 144, 145, 171, 172, 279, 3, 4, 5, + 0, 144, 145, 146, 172, 173, 280, 3, 4, 5, 6, 8, 9, 10, 11, 50, 54, 56, 57, 58, 62, 66, 67, 75, 76, 77, 81, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 108, 110, 112, 117, 119, 120, - 121, 124, 129, 132, 136, 141, 154, 157, 158, 159, - 162, 164, 165, 168, 269, 270, 278, 11, 12, 51, + 97, 98, 99, 100, 109, 111, 113, 118, 120, 121, + 122, 125, 130, 133, 137, 142, 155, 158, 159, 160, + 163, 165, 166, 169, 270, 271, 279, 11, 12, 51, 54, 56, 57, 58, 59, 60, 63, 66, 70, 77, - 84, 100, 119, 120, 125, 133, 134, 135, 136, 139, - 141, 231, 232, 236, 238, 240, 246, 247, 251, 252, - 257, 258, 259, 260, 0, 47, 49, 52, 53, 60, + 84, 100, 120, 121, 126, 134, 135, 136, 137, 140, + 142, 232, 233, 237, 239, 241, 247, 248, 252, 253, + 258, 259, 260, 261, 0, 47, 49, 52, 53, 60, 61, 69, 71, 72, 73, 74, 78, 83, 101, 102, - 103, 104, 105, 106, 107, 113, 114, 115, 116, 122, - 123, 126, 127, 131, 137, 138, 140, 148, 175, 177, - 178, 180, 183, 202, 253, 256, 279, 146, 164, 164, - 164, 164, 164, 164, 155, 164, 155, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 11, 51, 63, 133, - 134, 234, 251, 252, 257, 155, 164, 164, 15, 164, - 155, 164, 164, 164, 269, 269, 269, 269, 269, 11, - 54, 56, 57, 58, 66, 77, 84, 100, 119, 120, - 136, 141, 236, 267, 269, 10, 11, 12, 64, 76, - 77, 112, 113, 115, 120, 122, 150, 154, 159, 273, - 274, 276, 279, 269, 16, 17, 18, 19, 20, 21, - 22, 23, 33, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 163, 164, 165, 6, 8, 231, - 232, 164, 59, 125, 66, 100, 258, 258, 258, 276, - 164, 258, 13, 15, 17, 60, 140, 154, 159, 164, - 229, 230, 279, 230, 146, 10, 11, 12, 112, 149, - 277, 237, 279, 137, 181, 182, 276, 164, 72, 83, - 180, 180, 180, 180, 6, 180, 202, 180, 149, 179, - 107, 180, 164, 164, 164, 164, 164, 180, 146, 276, - 149, 149, 149, 180, 180, 164, 178, 180, 183, 203, - 180, 180, 187, 107, 276, 180, 180, 10, 11, 51, - 63, 111, 133, 134, 146, 162, 190, 193, 233, 235, - 238, 240, 246, 251, 252, 257, 266, 267, 279, 266, - 236, 266, 266, 266, 266, 236, 266, 236, 266, 236, - 266, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 266, 164, 276, 164, - 164, 276, 237, 236, 266, 266, 164, 10, 236, 236, - 236, 269, 266, 266, 166, 147, 166, 276, 276, 147, - 169, 150, 219, 279, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 166, 267, 269, 230, 230, - 51, 269, 236, 159, 276, 13, 15, 17, 60, 140, - 154, 159, 229, 279, 229, 230, 229, 230, 229, 229, - 15, 17, 47, 60, 116, 154, 159, 214, 215, 224, - 231, 232, 279, 165, 249, 250, 279, 11, 248, 258, - 149, 10, 11, 12, 47, 49, 112, 146, 276, 277, - 276, 48, 147, 164, 11, 233, 269, 180, 177, 146, - 276, 276, 276, 276, 276, 276, 172, 146, 269, 155, - 10, 11, 193, 233, 235, 276, 148, 150, 164, 164, - 164, 60, 231, 276, 164, 176, 276, 185, 146, 148, - 150, 221, 148, 184, 276, 277, 237, 167, 166, 166, - 166, 166, 166, 166, 156, 166, 156, 166, 166, 166, - 166, 147, 166, 147, 166, 147, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 269, 236, 266, - 276, 156, 166, 166, 276, 166, 166, 156, 166, 166, - 166, 166, 269, 269, 15, 154, 274, 164, 199, 279, - 269, 149, 166, 169, 166, 166, 166, 229, 159, 276, - 229, 229, 229, 229, 229, 165, 229, 181, 116, 231, - 232, 224, 229, 229, 166, 15, 147, 13, 17, 60, - 140, 154, 159, 164, 227, 277, 279, 13, 15, 17, - 60, 140, 154, 159, 164, 228, 265, 269, 279, 276, - 167, 248, 181, 164, 239, 241, 149, 180, 181, 3, - 4, 5, 9, 10, 15, 50, 62, 67, 75, 76, - 108, 110, 112, 117, 121, 124, 129, 132, 154, 157, - 158, 162, 164, 168, 216, 217, 224, 225, 271, 272, - 278, 279, 166, 166, 172, 146, 147, 147, 147, 147, - 147, 167, 254, 147, 166, 10, 11, 12, 59, 60, - 133, 204, 205, 206, 207, 208, 257, 279, 164, 221, - 188, 148, 236, 191, 13, 159, 192, 51, 269, 231, - 13, 17, 60, 140, 154, 159, 226, 277, 279, 236, - 172, 164, 146, 148, 149, 150, 220, 261, 262, 64, - 65, 146, 269, 13, 17, 60, 111, 140, 154, 159, - 164, 186, 209, 211, 277, 149, 276, 164, 164, 236, - 236, 236, 166, 166, 166, 164, 166, 164, 219, 214, - 17, 33, 47, 60, 61, 76, 106, 109, 112, 128, - 140, 154, 212, 279, 269, 229, 265, 166, 48, 231, - 232, 227, 228, 166, 166, 199, 15, 224, 159, 227, - 227, 227, 227, 227, 227, 165, 219, 159, 276, 228, - 228, 228, 228, 228, 228, 165, 219, 169, 147, 150, - 48, 233, 269, 172, 76, 242, 279, 182, 164, 155, - 155, 234, 155, 15, 164, 155, 164, 269, 269, 269, - 269, 236, 267, 269, 166, 15, 147, 16, 17, 18, - 19, 20, 21, 22, 23, 33, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 163, 164, 165, - 180, 180, 167, 255, 10, 10, 10, 10, 10, 172, - 278, 148, 208, 156, 147, 15, 276, 13, 17, 60, - 140, 154, 159, 164, 227, 228, 189, 211, 148, 214, - 159, 209, 214, 166, 166, 226, 159, 226, 226, 226, - 226, 226, 164, 165, 166, 167, 194, 261, 173, 174, - 276, 64, 65, 167, 263, 279, 148, 148, 146, 222, - 223, 269, 279, 148, 159, 209, 209, 6, 16, 17, - 18, 19, 20, 21, 22, 23, 33, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 65, - 108, 147, 150, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 164, 165, 168, 200, 209, 209, - 209, 209, 149, 164, 165, 212, 150, 219, 221, 248, - 267, 267, 166, 166, 166, 267, 267, 166, 60, 234, - 181, 164, 146, 169, 164, 224, 227, 228, 219, 219, - 164, 164, 212, 227, 166, 265, 228, 166, 265, 269, - 166, 166, 167, 149, 243, 244, 279, 236, 236, 236, - 164, 236, 164, 10, 236, 236, 236, 269, 166, 166, - 15, 225, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 166, 267, 269, 172, 147, 166, 147, - 213, 279, 147, 147, 147, 167, 166, 227, 228, 178, - 183, 201, 202, 207, 276, 150, 159, 150, 218, 279, - 219, 221, 166, 209, 166, 166, 164, 226, 197, 265, - 214, 167, 146, 147, 146, 164, 148, 148, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 70, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 82, 83, 84, 100, 106, 107, - 108, 110, 111, 112, 113, 114, 115, 116, 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, 146, 147, 148, 149, 150, 151, + 103, 104, 105, 106, 107, 108, 114, 115, 116, 117, + 123, 124, 127, 128, 132, 138, 139, 141, 149, 176, + 178, 179, 181, 184, 203, 254, 257, 280, 147, 165, + 165, 165, 165, 165, 165, 156, 165, 156, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 11, 51, 63, + 134, 135, 235, 252, 253, 258, 156, 165, 165, 15, + 165, 156, 165, 165, 165, 270, 270, 270, 270, 270, + 11, 54, 56, 57, 58, 66, 77, 84, 100, 120, + 121, 137, 142, 237, 268, 270, 10, 11, 12, 64, + 76, 77, 113, 114, 116, 121, 123, 151, 155, 160, + 274, 275, 277, 280, 270, 16, 17, 18, 19, 20, + 21, 22, 23, 33, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 164, 165, 166, 6, 8, + 232, 233, 165, 59, 126, 66, 100, 259, 259, 259, + 277, 165, 259, 13, 15, 17, 60, 141, 155, 160, + 165, 230, 231, 280, 231, 147, 10, 11, 12, 113, + 150, 278, 238, 280, 138, 182, 183, 277, 165, 72, + 83, 181, 181, 181, 181, 6, 181, 203, 181, 150, + 180, 108, 181, 165, 165, 165, 165, 165, 165, 181, + 147, 277, 150, 150, 150, 181, 181, 165, 179, 181, + 184, 204, 181, 181, 188, 108, 277, 181, 181, 10, + 11, 51, 63, 112, 134, 135, 147, 163, 191, 194, + 234, 236, 239, 241, 247, 252, 253, 258, 267, 268, + 280, 267, 237, 267, 267, 267, 267, 237, 267, 237, + 267, 237, 267, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 267, 165, + 277, 165, 165, 277, 238, 237, 267, 267, 165, 10, + 237, 237, 237, 270, 267, 267, 167, 148, 167, 277, + 277, 148, 170, 151, 220, 280, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 167, 268, 270, + 231, 231, 51, 270, 237, 160, 277, 13, 15, 17, + 60, 141, 155, 160, 230, 280, 230, 231, 230, 231, + 230, 230, 15, 17, 47, 60, 117, 155, 160, 215, + 216, 225, 232, 233, 280, 166, 250, 251, 280, 11, + 249, 259, 150, 10, 11, 12, 47, 49, 113, 147, + 277, 278, 277, 48, 148, 165, 11, 234, 270, 181, + 178, 147, 277, 277, 277, 277, 277, 277, 277, 173, + 147, 270, 156, 10, 11, 194, 234, 236, 277, 149, + 151, 165, 165, 165, 60, 232, 277, 165, 177, 277, + 186, 147, 149, 151, 222, 149, 185, 277, 278, 238, + 168, 167, 167, 167, 167, 167, 167, 157, 167, 157, + 167, 167, 167, 167, 148, 167, 148, 167, 148, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 270, 237, 267, 277, 157, 167, 167, 277, 167, 167, + 157, 167, 167, 167, 167, 270, 270, 15, 155, 275, + 165, 200, 280, 270, 150, 167, 170, 167, 167, 167, + 230, 160, 277, 230, 230, 230, 230, 230, 166, 230, + 182, 117, 232, 233, 225, 230, 230, 167, 15, 148, + 13, 17, 60, 141, 155, 160, 165, 228, 278, 280, + 13, 15, 17, 60, 141, 155, 160, 165, 229, 266, + 270, 280, 277, 168, 249, 182, 165, 240, 242, 150, + 181, 182, 3, 4, 5, 9, 10, 15, 50, 62, + 67, 75, 76, 109, 111, 113, 118, 122, 125, 130, + 133, 155, 158, 159, 163, 165, 169, 217, 218, 225, + 226, 272, 273, 279, 280, 167, 167, 173, 147, 148, + 148, 148, 148, 148, 148, 168, 255, 148, 167, 10, + 11, 12, 59, 60, 134, 205, 206, 207, 208, 209, + 258, 280, 165, 222, 189, 149, 237, 192, 13, 160, + 193, 51, 270, 232, 13, 17, 60, 141, 155, 160, + 227, 278, 280, 237, 173, 165, 147, 149, 150, 151, + 221, 262, 263, 64, 65, 147, 270, 13, 17, 60, + 112, 141, 155, 160, 165, 187, 210, 212, 278, 150, + 277, 165, 165, 237, 237, 237, 167, 167, 167, 165, + 167, 165, 220, 215, 17, 33, 47, 60, 61, 76, + 107, 110, 113, 129, 141, 155, 213, 280, 270, 230, + 266, 167, 48, 232, 233, 228, 229, 167, 167, 200, + 15, 225, 160, 228, 228, 228, 228, 228, 228, 166, + 220, 160, 277, 229, 229, 229, 229, 229, 229, 166, + 220, 170, 148, 151, 48, 234, 270, 173, 76, 243, + 280, 183, 165, 156, 156, 235, 156, 15, 165, 156, + 165, 270, 270, 270, 270, 237, 268, 270, 167, 15, + 148, 16, 17, 18, 19, 20, 21, 22, 23, 33, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 168, 169, 264, 222, 167, - 147, 209, 10, 166, 169, 166, 4, 210, 265, 269, - 147, 166, 166, 166, 166, 199, 234, 230, 48, 166, - 276, 261, 214, 219, 219, 214, 214, 164, 169, 164, - 169, 147, 113, 114, 115, 133, 138, 245, 275, 276, - 146, 147, 166, 156, 156, 266, 156, 276, 166, 166, - 156, 166, 166, 269, 149, 166, 169, 167, 10, 148, - 10, 166, 10, 10, 10, 148, 218, 236, 50, 62, - 67, 117, 121, 124, 154, 157, 158, 159, 162, 164, - 168, 268, 270, 147, 199, 166, 164, 199, 198, 214, - 169, 166, 261, 174, 266, 266, 263, 167, 146, 269, - 216, 169, 186, 212, 230, 15, 166, 167, 166, 166, - 166, 214, 214, 138, 275, 138, 275, 138, 275, 276, - 113, 114, 115, 15, 172, 245, 164, 164, 166, 164, - 166, 164, 269, 147, 166, 147, 148, 147, 166, 166, - 147, 166, 164, 155, 155, 155, 15, 164, 155, 268, - 268, 268, 268, 268, 236, 267, 268, 16, 17, 18, - 19, 20, 21, 22, 23, 33, 151, 152, 153, 154, - 157, 158, 159, 160, 161, 163, 164, 165, 189, 164, - 195, 214, 166, 199, 167, 167, 166, 167, 222, 166, - 146, 166, 199, 199, 199, 166, 166, 275, 275, 275, - 275, 275, 275, 167, 267, 267, 267, 267, 10, 148, - 10, 10, 148, 148, 10, 148, 236, 236, 236, 236, - 164, 10, 236, 236, 166, 166, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 166, 267, 269, 196, 214, - 166, 199, 15, 167, 199, 261, 212, 212, 212, 199, - 199, 166, 166, 166, 166, 147, 213, 166, 147, 147, - 166, 166, 156, 156, 156, 276, 166, 166, 156, 268, - 149, 166, 169, 214, 166, 199, 167, 10, 166, 148, - 10, 10, 148, 164, 164, 164, 166, 164, 268, 166, - 199, 148, 166, 166, 267, 267, 267, 267, 199, 212, - 148, 148, 166, 166, 166, 166, 212 + 162, 164, 165, 166, 181, 181, 168, 256, 10, 10, + 10, 10, 10, 10, 173, 279, 149, 209, 157, 148, + 15, 277, 13, 17, 60, 141, 155, 160, 165, 228, + 229, 190, 212, 149, 215, 160, 210, 215, 167, 167, + 227, 160, 227, 227, 227, 227, 227, 165, 166, 167, + 168, 195, 262, 174, 175, 277, 64, 65, 168, 264, + 280, 149, 149, 147, 223, 224, 270, 280, 149, 160, + 210, 210, 6, 16, 17, 18, 19, 20, 21, 22, + 23, 33, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 65, 109, 148, 151, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 165, + 166, 169, 201, 210, 210, 210, 210, 150, 165, 166, + 213, 151, 220, 222, 249, 268, 268, 167, 167, 167, + 268, 268, 167, 60, 235, 182, 165, 147, 170, 165, + 225, 228, 229, 220, 220, 165, 165, 213, 228, 167, + 266, 229, 167, 266, 270, 167, 167, 168, 150, 244, + 245, 280, 237, 237, 237, 165, 237, 165, 10, 237, + 237, 237, 270, 167, 167, 15, 226, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 167, 268, + 270, 173, 148, 148, 167, 148, 214, 280, 148, 148, + 148, 168, 167, 228, 229, 179, 184, 202, 203, 208, + 277, 151, 160, 151, 219, 280, 220, 222, 167, 210, + 167, 167, 165, 227, 198, 266, 215, 168, 147, 148, + 147, 165, 149, 149, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 82, 83, 84, 100, 107, 108, 109, 111, 112, 113, + 114, 115, 116, 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, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 169, 170, 265, 223, 168, 148, 210, 10, 167, + 170, 167, 4, 211, 266, 270, 148, 167, 167, 167, + 167, 200, 235, 231, 48, 167, 277, 262, 215, 220, + 220, 215, 215, 165, 170, 165, 170, 148, 114, 115, + 116, 134, 139, 246, 276, 277, 147, 148, 167, 157, + 157, 267, 157, 277, 167, 167, 157, 167, 167, 270, + 150, 167, 170, 168, 10, 10, 149, 10, 167, 10, + 10, 10, 149, 219, 237, 50, 62, 67, 118, 122, + 125, 155, 158, 159, 160, 163, 165, 169, 269, 271, + 148, 200, 167, 165, 200, 199, 215, 170, 167, 262, + 175, 267, 267, 264, 168, 147, 270, 217, 170, 187, + 213, 231, 15, 167, 168, 167, 167, 167, 215, 215, + 139, 276, 139, 276, 139, 276, 277, 114, 115, 116, + 15, 173, 246, 165, 165, 167, 165, 167, 165, 270, + 167, 148, 167, 148, 149, 148, 167, 167, 148, 167, + 165, 156, 156, 156, 15, 165, 156, 269, 269, 269, + 269, 269, 237, 268, 269, 16, 17, 18, 19, 20, + 21, 22, 23, 33, 152, 153, 154, 155, 158, 159, + 160, 161, 162, 164, 165, 166, 190, 165, 196, 215, + 167, 200, 168, 168, 167, 168, 223, 167, 147, 167, + 200, 200, 200, 167, 167, 276, 276, 276, 276, 276, + 276, 168, 268, 268, 268, 268, 149, 10, 149, 10, + 10, 149, 149, 10, 149, 237, 237, 237, 237, 165, + 10, 237, 237, 167, 167, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 167, 268, 270, 197, 215, 167, + 200, 15, 168, 200, 262, 213, 213, 213, 200, 200, + 167, 167, 167, 167, 148, 214, 167, 148, 148, 167, + 167, 157, 157, 157, 277, 167, 167, 157, 269, 150, + 167, 170, 215, 167, 200, 168, 10, 167, 149, 10, + 10, 149, 165, 165, 165, 167, 165, 269, 167, 200, + 149, 167, 148, 167, 268, 268, 268, 268, 200, 213, + 149, 10, 149, 167, 167, 167, 167, 213, 167, 149 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 170, 171, 171, 171, 172, 172, 172, 173, 173, - 174, 174, 174, 176, 175, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 179, 178, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 181, 181, 182, 182, 182, 184, 183, 183, 185, 183, - 183, 183, 186, 186, 188, 187, 187, 189, 189, 191, - 190, 192, 190, 194, 193, 195, 193, 196, 193, 197, - 193, 198, 193, 193, 199, 199, 199, 199, 199, 199, - 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, + 0, 171, 172, 172, 172, 173, 173, 173, 174, 174, + 175, 175, 175, 177, 176, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 180, 179, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 182, 182, 183, 183, 183, 185, 184, 184, + 186, 184, 184, 184, 187, 187, 189, 188, 188, 190, + 190, 192, 191, 193, 191, 195, 194, 196, 194, 197, + 194, 198, 194, 199, 194, 194, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, - 202, 203, 202, 202, 202, 204, 204, 205, 205, 206, - 206, 207, 207, 207, 207, 207, 207, 207, 207, 207, - 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 210, 209, 211, 211, 212, - 212, 212, 213, 213, 214, 214, 214, 214, 214, 215, - 215, 216, 216, 216, 216, 216, 217, 217, 218, 218, - 219, 219, 220, 220, 220, 220, 220, 221, 221, 221, - 221, 221, 221, 222, 222, 222, 223, 223, 223, 223, - 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 232, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 234, 234, 234, 234, 234, 234, 234, 234, 235, - 235, 236, 236, 236, 236, 237, 237, 237, 237, 239, - 238, 241, 240, 242, 242, 243, 243, 244, 244, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 246, - 247, 247, 247, 247, 248, 248, 249, 249, 249, 250, - 250, 250, 251, 251, 251, 252, 252, 252, 254, 253, - 255, 253, 253, 253, 256, 256, 256, 257, 257, 257, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 259, 259, 259, 260, 262, 261, - 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 265, 265, 266, 266, 267, 267, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, + 202, 202, 203, 204, 203, 203, 203, 205, 205, 206, + 206, 207, 207, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 209, 209, 209, 209, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 211, 210, 212, + 212, 213, 213, 213, 214, 214, 215, 215, 215, 215, + 215, 216, 216, 217, 217, 217, 217, 217, 218, 218, + 219, 219, 220, 220, 221, 221, 221, 221, 221, 222, + 222, 222, 222, 222, 222, 223, 223, 223, 224, 224, + 224, 224, 225, 225, 225, 225, 225, 225, 225, 225, + 226, 226, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, + 235, 236, 236, 237, 237, 237, 237, 238, 238, 238, + 238, 240, 239, 242, 241, 243, 243, 244, 244, 245, + 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 247, 248, 248, 248, 248, 249, 249, 250, 250, + 250, 251, 251, 251, 252, 252, 252, 253, 253, 253, + 255, 254, 256, 254, 254, 254, 257, 257, 257, 258, + 258, 258, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 260, 260, 260, 261, + 263, 262, 264, 264, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 266, 266, 267, 267, 268, 268, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 270, 270, 270, 270, 270, + 269, 269, 269, 269, 269, 269, 269, 269, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 271, 271, 271, 271, 271, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, 271, 272, + 271, 271, 271, 271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 273, 273, 273, 273, 273, 274, 274, 274, 274, 275, - 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, - 276, 276, 276, 277, 277, 277, 277, 278, 278, 278, - 278, 279 + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 274, 274, 274, 274, 274, 275, 275, 275, + 275, 276, 276, 276, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 278, 278, 278, 278, 279, + 279, 279, 279, 280 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3168,45 +3169,45 @@ static const yytype_uint8 yyr2[] = 0, 2, 2, 2, 2, 1, 2, 2, 1, 3, 4, 5, 4, 0, 5, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 8, 11, 9, - 11, 13, 7, 9, 12, 9, 13, 9, 7, 5, - 0, 3, 1, 2, 2, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 4, 5, 5, - 1, 3, 1, 4, 4, 0, 4, 3, 0, 4, - 3, 1, 2, 4, 0, 4, 3, 2, 4, 0, - 6, 0, 6, 0, 7, 0, 11, 0, 12, 0, - 8, 0, 9, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 4, 5, 6, 4, 1, 1, + 11, 13, 15, 7, 9, 12, 9, 9, 13, 9, + 7, 5, 0, 3, 1, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, + 5, 5, 1, 3, 1, 4, 4, 0, 4, 3, + 0, 4, 3, 1, 2, 4, 0, 4, 3, 2, + 4, 0, 6, 0, 6, 0, 7, 0, 11, 0, + 12, 0, 8, 0, 9, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 4, 5, 6, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, - 2, 0, 6, 2, 2, 1, 1, 1, 3, 1, - 1, 1, 2, 4, 2, 3, 3, 4, 2, 3, - 1, 1, 1, 1, 1, 2, 3, 2, 2, 2, - 2, 2, 3, 4, 3, 0, 6, 2, 3, 1, - 3, 4, 1, 2, 1, 1, 1, 3, 2, 1, - 3, 1, 1, 1, 3, 2, 1, 3, 1, 2, - 1, 2, 1, 3, 5, 3, 3, 1, 3, 3, - 3, 3, 4, 1, 1, 2, 1, 3, 3, 5, - 3, 4, 5, 3, 4, 5, 2, 4, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 3, 4, 1, - 1, 2, 2, 2, 2, 2, 3, 4, 7, 3, - 1, 2, 2, 2, 2, 2, 2, 3, 4, 7, - 3, 1, 1, 2, 2, 2, 2, 2, 2, 3, - 4, 1, 1, 2, 2, 2, 2, 2, 2, 3, - 4, 5, 9, 9, 9, 1, 1, 2, 1, 1, - 1, 3, 4, 4, 4, 4, 1, 1, 1, 1, - 2, 1, 1, 1, 3, 4, 2, 4, 4, 4, - 1, 1, 1, 2, 3, 2, 4, 4, 1, 1, - 1, 2, 3, 2, 3, 1, 4, 5, 5, 0, - 6, 0, 9, 1, 1, 1, 1, 2, 3, 1, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, - 3, 1, 4, 2, 1, 1, 1, 3, 5, 1, - 2, 4, 1, 2, 2, 1, 1, 1, 0, 6, - 0, 7, 4, 5, 3, 5, 4, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 2, 0, 6, 2, 2, 1, 1, 1, + 3, 1, 1, 1, 2, 4, 2, 3, 3, 4, + 2, 3, 1, 1, 1, 1, 1, 2, 3, 2, + 2, 2, 2, 2, 3, 4, 3, 0, 6, 2, + 3, 1, 3, 4, 1, 2, 1, 1, 1, 3, + 2, 1, 3, 1, 1, 1, 3, 2, 1, 3, + 1, 2, 1, 2, 1, 3, 5, 3, 3, 1, + 3, 3, 3, 3, 4, 1, 1, 2, 1, 3, + 3, 5, 3, 4, 5, 3, 4, 5, 2, 4, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 4, 1, 1, 2, 2, 2, 2, 2, 3, 4, + 7, 3, 1, 2, 2, 2, 2, 2, 2, 3, + 4, 7, 3, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 4, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 4, 5, 9, 9, 9, 1, 1, 2, + 1, 1, 1, 3, 4, 4, 4, 4, 1, 1, + 1, 1, 2, 1, 1, 1, 3, 4, 2, 4, + 4, 4, 1, 1, 1, 2, 3, 2, 4, 4, + 1, 1, 1, 2, 3, 2, 3, 1, 4, 5, + 5, 0, 6, 0, 9, 1, 1, 1, 1, 2, + 3, 1, 2, 2, 2, 3, 3, 3, 3, 3, + 3, 4, 3, 1, 4, 2, 1, 1, 1, 3, + 5, 1, 2, 4, 1, 2, 2, 1, 1, 1, + 0, 6, 0, 7, 4, 5, 3, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 2, 1, 0, 2, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 1, 1, 2, 1, + 0, 2, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -3219,29 +3220,29 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 1, 1, 1, 1, 3, 1, 4, 7, - 7, 7, 7, 4, 4, 5, 4, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, - 4, 4, 3, 3, 3, 3, 1, 4, 7, 7, - 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, - 2, 5, 4, 4, 2, 2, 2, 2, 2, 2, + 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, + 4, 7, 7, 7, 7, 4, 4, 5, 4, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, - 4, 3, 3, 3, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 8, 11, 4, 4, - 6, 4, 4, 6, 6, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 1, 4, 7, 7, 7, - 7, 4, 4, 5, 4, 2, 5, 4, 4, 2, - 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 5, 4, 4, 3, 3, 3, 3, 1, 4, + 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 4, 2, 5, 4, 4, 2, 2, 2, 2, + 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 5, 4, 4, 3, 3, 3, 3, 1, + 5, 4, 4, 3, 3, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 8, 11, + 4, 4, 6, 4, 4, 6, 6, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 1, 4, 7, + 7, 7, 7, 4, 4, 5, 4, 2, 5, 4, + 4, 2, 2, 2, 2, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 5, 4, 4, 3, 3, 3, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 4, 2, 3, 1, + 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 4, 2, 3, 1, 2, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 0 + 1, 2, 2, 0 }; @@ -4017,64 +4018,64 @@ yyreduce: switch (yyn) { case 3: -#line 451 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 452 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_expr = (yyvsp[0].u.expr); } -#line 4025 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4026 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 4: -#line 455 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 456 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_type = (yyvsp[0].u.type); } -#line 4033 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4034 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 10: -#line 473 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 474 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { delete (yyvsp[-1].u.expr); } -#line 4041 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4042 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 11: -#line 477 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 478 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { delete (yyvsp[-2].u.expr); } -#line 4049 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4050 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 12: -#line 481 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 482 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { delete (yyvsp[-1].u.expr); } -#line 4057 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4058 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 13: -#line 493 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 494 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_storage_class((current_storage_class & ~CPPInstance::SC_c_binding) | ((yyvsp[-1].u.integer) & CPPInstance::SC_c_binding)); } -#line 4066 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4067 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 14: -#line 498 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 499 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_storage_class(); } -#line 4074 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4075 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 21: -#line 511 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 512 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (publish_nest_level != 0) { yyerror("Unclosed __begin_publish", publish_loc); @@ -4087,11 +4088,11 @@ yyreduce: publish_nest_level++; current_scope->set_current_vis(V_published); } -#line 4091 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4092 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 22: -#line 524 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 525 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (publish_nest_level != 1) { yyerror("Unmatched __end_publish", (yylsp[0])); @@ -4100,19 +4101,19 @@ yyreduce: } publish_nest_level = 0; } -#line 4104 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4105 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 23: -#line 533 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 534 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_scope->set_current_vis(V_published); } -#line 4112 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4113 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 24: -#line 537 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 538 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (publish_nest_level > 0) { current_scope->set_current_vis(V_published); @@ -4120,27 +4121,27 @@ yyreduce: current_scope->set_current_vis(V_public); } } -#line 4124 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4125 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 25: -#line 545 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 546 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_scope->set_current_vis(V_protected); } -#line 4132 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4133 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 26: -#line 549 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 550 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_scope->set_current_vis(V_private); } -#line 4140 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4141 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 27: -#line 553 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 554 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-3].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4161,11 +4162,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-7])); } } -#line 4165 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4166 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 28: -#line 574 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 575 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4192,11 +4193,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-10])); } } -#line 4196 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4197 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 29: -#line 601 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 602 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4217,11 +4218,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-8])); } } -#line 4221 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4222 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 30: -#line 622 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 623 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *length_getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4250,11 +4251,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-10])); } } -#line 4254 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4255 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 31: -#line 651 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 652 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *length_getter = (yyvsp[-8].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4290,11 +4291,58 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-12])); } } -#line 4294 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4295 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 32: -#line 687 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 688 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + CPPDeclaration *length_getter = (yyvsp[-10].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid length method: " + (yyvsp[-10].u.identifier)->get_fully_scoped_name(), (yylsp[-10])); + length_getter = NULL; + } + + CPPDeclaration *getter = (yyvsp[-8].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("Reference to non-existent or invalid getter: " + (yyvsp[-8].u.identifier)->get_fully_scoped_name(), (yylsp[-8])); + getter = nullptr; + } + + if (getter != nullptr && length_getter != nullptr) { + CPPMakeProperty *make_property = new CPPMakeProperty((yyvsp[-12].u.identifier), CPPMakeProperty::T_sequence, current_scope, (yylsp[-14]).file); + make_property->_get_function = getter->as_function_group(); + make_property->_length_function = length_getter->as_function_group(); + + CPPDeclaration *setter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (setter == nullptr || setter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("Reference to non-existent or invalid setter: " + (yyvsp[-6].u.identifier)->get_fully_scoped_name(), (yylsp[-6])); + } else { + make_property->_set_function = setter->as_function_group(); + } + + CPPDeclaration *deleter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (deleter == nullptr || deleter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid delete method: " + (yyvsp[-4].u.identifier)->get_fully_scoped_name(), (yylsp[-4])); + } else { + make_property->_del_function = deleter->as_function_group(); + } + + CPPDeclaration *inserter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (inserter == nullptr || inserter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid append method: " + (yyvsp[-2].u.identifier)->get_fully_scoped_name(), (yylsp[-2])); + } else { + make_property->_insert_function = inserter->as_function_group(); + } + + current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-14])); + } +} +#line 4342 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 33: +#line 731 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4306,11 +4354,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-6])); } } -#line 4310 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4358 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 33: -#line 699 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 34: +#line 743 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4331,11 +4379,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-8])); } } -#line 4335 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4383 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 34: -#line 720 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 35: +#line 764 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-5].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4371,11 +4419,49 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-11])); } } -#line 4375 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4423 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 35: -#line 756 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 36: +#line 800 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid length method: " + (yyvsp[-4].u.identifier)->get_fully_scoped_name(), (yylsp[-4])); + length_getter = nullptr; + } + + CPPDeclaration *getter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); + if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid getter: " + (yyvsp[-2].u.identifier)->get_fully_scoped_name(), (yylsp[-2])); + getter = nullptr; + } + + if (getter != nullptr && length_getter != nullptr) { + CPPMakeProperty *make_property = nullptr; + for (size_t i = 0; i < current_scope->_declarations.size(); ++i) { + make_property = current_scope->_declarations[i]->as_make_property(); + if (make_property != nullptr) { + if (make_property->get_fully_scoped_name() == (yyvsp[-6].u.identifier)->get_fully_scoped_name()) { + break; + } else { + make_property = nullptr; + } + } + } + if (make_property != nullptr) { + make_property->_get_key_function = getter->as_function_group(); + make_property->_length_function = length_getter->as_function_group(); + } else { + yyerror("reference to non-existent MAKE_MAP_PROPERTY: " + (yyvsp[-6].u.identifier)->get_fully_scoped_name(), (yylsp[-6])); + } + } +} +#line 4461 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 37: +#line 834 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4397,11 +4483,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-8])); } } -#line 4401 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4487 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 36: -#line 778 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 38: +#line 856 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4437,11 +4523,11 @@ yyreduce: current_scope->add_declaration(make_property, global_scope, current_lexer, (yylsp[-12])); } } -#line 4441 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4527 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 37: -#line 814 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 39: +#line 892 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { @@ -4463,11 +4549,11 @@ yyreduce: current_scope->add_declaration(make_seq, global_scope, current_lexer, (yylsp[-8])); } } -#line 4467 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4553 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 38: -#line 836 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 40: +#line 914 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPExpression::Result result = (yyvsp[-4].u.expr)->evaluate(); if (result._type == CPPExpression::RT_error) { @@ -4478,11 +4564,11 @@ yyreduce: yywarning("static_assert failed: " + str.str(), (yylsp[-4])); } } -#line 4482 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4568 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 39: -#line 847 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 41: +#line 925 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // This alternative version of static_assert was introduced in C++17. CPPExpression::Result result = (yyvsp[-2].u.expr)->evaluate(); @@ -4492,55 +4578,55 @@ yyreduce: yywarning("static_assert failed", (yylsp[-2])); } } -#line 4496 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4582 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 40: -#line 860 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 42: +#line 938 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPScope *new_scope = new CPPScope(current_scope, CPPNameComponent("temp"), V_public); push_scope(new_scope); } -#line 4506 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4592 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 41: -#line 866 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 43: +#line 944 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { delete current_scope; pop_scope(); } -#line 4515 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4601 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 42: -#line 875 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 44: +#line 953 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.integer) = 0; } -#line 4523 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4609 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 43: -#line 879 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 45: +#line 957 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // This isn't really a storage class, but it helps with parsing. (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_const; } -#line 4532 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4618 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 44: -#line 884 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 46: +#line 962 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extern; } -#line 4540 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4626 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 45: -#line 888 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 47: +#line 966 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extern; if ((yyvsp[-1].str) == "C") { @@ -4551,124 +4637,124 @@ yyreduce: yywarning("Ignoring unknown linkage type \"" + (yyvsp[-1].str) + "\"", (yylsp[-1])); } } -#line 4555 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 46: -#line 899 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_static; -} -#line 4563 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 47: -#line 903 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_inline; -} -#line 4571 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4641 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 48: -#line 907 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 977 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_virtual; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_static; } -#line 4579 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4649 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 49: -#line 911 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 981 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_explicit; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_inline; } -#line 4587 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4657 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 50: -#line 915 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 985 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_register; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_virtual; } -#line 4595 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4665 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 51: -#line 919 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 989 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_volatile; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_explicit; } -#line 4603 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4673 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 52: -#line 923 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 993 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_mutable; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_register; } -#line 4611 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4681 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 53: -#line 927 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 997 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_constexpr; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_volatile; } -#line 4619 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4689 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 54: -#line 931 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1001 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_blocking; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_mutable; } -#line 4627 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4697 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 55: -#line 935 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1005 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extension; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_constexpr; } -#line 4635 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4705 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 56: -#line 939 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1009 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_thread_local; + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_blocking; } -#line 4643 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4713 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 57: -#line 943 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1013 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extension; +} +#line 4721 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 58: +#line 1017 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_thread_local; +} +#line 4729 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 59: +#line 1021 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // Ignore attribute specifiers for now. (yyval.u.integer) = (yyvsp[0].u.integer); } -#line 4652 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4738 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 58: -#line 948 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 60: +#line 1026 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.integer) = (yyvsp[0].u.integer); } -#line 4660 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4746 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 59: -#line 952 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 61: +#line 1030 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.integer) = (yyvsp[0].u.integer); } -#line 4668 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4754 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 65: -#line 970 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 67: +#line 1048 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // We don't need to push/pop type, because we can't nest // type_like_declaration. @@ -4679,19 +4765,19 @@ yyreduce: } push_storage_class((yyvsp[-1].u.integer)); } -#line 4683 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4769 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 66: -#line 981 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 68: +#line 1059 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_storage_class(); } -#line 4691 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4777 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 67: -#line 986 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 69: +#line 1064 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // We don't really care about the storage class here. In fact, it's // not actually legal to define a class or struct using a particular @@ -4700,11 +4786,11 @@ yyreduce: current_scope->add_declaration((yyvsp[-1].u.decl), global_scope, current_lexer, (yylsp[-1])); } -#line 4704 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4790 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 68: -#line 995 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 70: +#line 1073 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[0].u.instance) != (CPPInstance *)NULL) { // Push the scope so that the initializers can make use of things defined @@ -4713,11 +4799,11 @@ yyreduce: (yyvsp[0].u.instance)->_storage_class |= (current_storage_class | (yyvsp[-1].u.integer)); } } -#line 4717 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4803 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 69: -#line 1004 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 71: +#line 1082 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-2].u.instance) != (CPPInstance *)NULL) { pop_scope(); @@ -4725,11 +4811,11 @@ yyreduce: (yyvsp[-2].u.instance)->set_initializer((yyvsp[0].u.expr)); } } -#line 4729 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4815 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 70: -#line 1012 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 72: +#line 1090 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-1].u.instance) != (CPPInstance *)NULL) { (yyvsp[-1].u.instance)->_storage_class |= (current_storage_class | (yyvsp[-2].u.integer)); @@ -4737,11 +4823,11 @@ yyreduce: (yyvsp[-1].u.instance)->set_initializer((yyvsp[0].u.expr)); } } -#line 4741 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4827 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 72: -#line 1028 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 74: +#line 1106 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (current_storage_class & CPPInstance::SC_const) { (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); @@ -4752,11 +4838,11 @@ yyreduce: inst->set_initializer((yyvsp[0].u.expr)); current_scope->add_declaration(inst, global_scope, current_lexer, (yylsp[-1])); } -#line 4756 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4842 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 73: -#line 1039 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 75: +#line 1117 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (current_storage_class & CPPInstance::SC_const) { (yyvsp[-3].u.inst_ident)->add_modifier(IIT_const); @@ -4767,11 +4853,11 @@ yyreduce: inst->set_initializer((yyvsp[-2].u.expr)); current_scope->add_declaration(inst, global_scope, current_lexer, (yylsp[-3])); } -#line 4771 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4857 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 74: -#line 1054 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 76: +#line 1132 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // We don't need to push/pop type, because we can't nest // multiple_var_declarations. @@ -4782,19 +4868,19 @@ yyreduce: } push_storage_class((yyvsp[-1].u.integer)); } -#line 4786 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4872 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 75: -#line 1065 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 77: +#line 1143 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_storage_class(); } -#line 4794 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4880 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 76: -#line 1069 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 78: +#line 1147 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-1].u.instance) != (CPPDeclaration *)NULL) { CPPInstance *inst = (yyvsp[-1].u.instance)->as_instance(); @@ -4806,11 +4892,11 @@ yyreduce: } } } -#line 4810 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4896 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 77: -#line 1084 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 79: +#line 1162 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (current_storage_class & CPPInstance::SC_const) { (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); @@ -4819,11 +4905,11 @@ yyreduce: CPPTypedefType *typedef_type = new CPPTypedefType(target_type, (yyvsp[-1].u.inst_ident), current_scope, (yylsp[-1]).file); current_scope->add_declaration(CPPType::new_type(typedef_type), global_scope, current_lexer, (yylsp[-1])); } -#line 4823 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4909 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 78: -#line 1093 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 80: +#line 1171 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if (current_storage_class & CPPInstance::SC_const) { (yyvsp[-3].u.inst_ident)->add_modifier(IIT_const); @@ -4832,19 +4918,19 @@ yyreduce: CPPTypedefType *typedef_type = new CPPTypedefType(target_type, (yyvsp[-3].u.inst_ident), current_scope, (yylsp[-3]).file); current_scope->add_declaration(CPPType::new_type(typedef_type), global_scope, current_lexer, (yylsp[-3])); } -#line 4836 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4922 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 79: -#line 1107 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 81: +#line 1185 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_scope((yyvsp[-1].u.identifier)->get_scope(current_scope, global_scope)); } -#line 4844 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4930 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 80: -#line 1111 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 82: +#line 1189 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type; if ((yyvsp[-5].u.identifier)->get_simple_name() == current_scope->get_simple_name() || @@ -4864,19 +4950,19 @@ yyreduce: (yyval.u.instance) = new CPPInstance(type, ii, 0, (yylsp[-5]).file); } -#line 4868 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4954 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 81: -#line 1131 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 83: +#line 1209 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_scope((yyvsp[-1].u.identifier)->get_scope(current_scope, global_scope)); } -#line 4876 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4962 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 82: -#line 1135 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 84: +#line 1213 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); CPPType *type; @@ -4894,19 +4980,19 @@ yyreduce: (yyval.u.instance) = new CPPInstance(type, ii, 0, (yylsp[-5]).file); } -#line 4898 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4984 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 83: -#line 1158 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 85: +#line 1236 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_scope((yyvsp[-1].u.identifier)->get_scope(current_scope, global_scope)); } -#line 4906 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 4992 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 84: -#line 1162 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 86: +#line 1240 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); if ((yyvsp[-5].u.identifier)->is_scoped()) { @@ -4925,19 +5011,19 @@ yyreduce: (yyval.u.instance) = new CPPInstance(type, ii, 0, (yylsp[-5]).file); } } -#line 4929 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5015 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 85: -#line 1188 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 87: +#line 1266 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_scope((yyvsp[-2].u.inst_ident)->get_scope(current_scope, global_scope)); } -#line 4937 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5023 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 86: -#line 1192 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 88: +#line 1270 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); CPPType *type = (yyvsp[-10].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); @@ -4951,19 +5037,19 @@ yyreduce: ii->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer)); (yyval.u.instance) = new CPPInstance(type, ii, 0, (yylsp[-10]).file); } -#line 4955 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5041 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 87: -#line 1206 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 89: +#line 1284 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_scope((yyvsp[-2].u.inst_ident)->get_scope(current_scope, global_scope)); } -#line 4963 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5049 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 88: -#line 1210 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 90: +#line 1288 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); CPPType *type = (yyvsp[-11].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); @@ -4977,21 +5063,21 @@ yyreduce: ii->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer)); (yyval.u.instance) = new CPPInstance(type, ii, 0, (yylsp[-11]).file); } -#line 4981 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5067 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 89: -#line 1226 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 91: +#line 1304 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-3].u.identifier) != NULL) { push_scope((yyvsp[-3].u.identifier)->get_scope(current_scope, global_scope)); } } -#line 4991 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5077 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 90: -#line 1232 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 92: +#line 1310 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-7].u.identifier) != NULL) { pop_scope(); @@ -5016,21 +5102,21 @@ yyreduce: (yyval.u.instance) = CPPInstance::make_typecast_function (new CPPInstance((yyvsp[-6].u.type), (yyvsp[-5].u.inst_ident), 0, (yylsp[-5]).file), ident, (yyvsp[-2].u.param_list), (yyvsp[0].u.integer)); } -#line 5020 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5106 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 91: -#line 1257 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 93: +#line 1335 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-4].u.identifier) != NULL) { push_scope((yyvsp[-4].u.identifier)->get_scope(current_scope, global_scope)); } } -#line 5030 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5116 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 92: -#line 1263 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 94: +#line 1341 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { if ((yyvsp[-8].u.identifier) != NULL) { pop_scope(); @@ -5046,11 +5132,11 @@ yyreduce: (yyval.u.instance) = CPPInstance::make_typecast_function (new CPPInstance((yyvsp[-6].u.type), (yyvsp[-5].u.inst_ident), 0, (yylsp[-5]).file), ident, (yyvsp[-2].u.param_list), (yyvsp[0].u.integer)); } -#line 5050 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5136 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 93: -#line 1283 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 95: +#line 1361 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *decl = (yyvsp[0].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); @@ -5060,606 +5146,606 @@ yyreduce: (yyval.u.instance) = (CPPInstance *)NULL; } } -#line 5064 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 94: -#line 1296 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = 0; -} -#line 5072 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 95: -#line 1300 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_const_method; -} -#line 5080 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5150 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 96: -#line 1304 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1374 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_volatile_method; + (yyval.u.integer) = 0; } -#line 5088 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5158 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 97: -#line 1308 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1378 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_noexcept; + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_const_method; } -#line 5096 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5166 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 98: -#line 1321 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1382 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_final; + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_volatile_method; } -#line 5104 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5174 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 99: -#line 1325 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1386 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_override; + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_noexcept; } -#line 5112 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5182 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 100: -#line 1329 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1399 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_lvalue_method; + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_final; } -#line 5120 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5190 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 101: -#line 1333 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1403 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_rvalue_method; + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_override; } -#line 5128 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5198 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 102: -#line 1337 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1407 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_lvalue_method; +} +#line 5206 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 103: +#line 1411 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.integer) = (yyvsp[-1].u.integer) | (int)CPPFunctionType::F_rvalue_method; +} +#line 5214 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 104: +#line 1415 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // Used for lambdas, currently ignored. (yyval.u.integer) = (yyvsp[-1].u.integer); } -#line 5137 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5223 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 103: -#line 1342 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 105: +#line 1420 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // Used for lambdas in C++17, currently ignored. (yyval.u.integer) = (yyvsp[-1].u.integer); } -#line 5146 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 104: -#line 1347 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = (yyvsp[-3].u.integer); -} -#line 5154 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 105: -#line 1351 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = (yyvsp[-4].u.integer); -} -#line 5162 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5232 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 106: -#line 1355 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.integer) = (yyvsp[-5].u.integer); -} -#line 5170 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 107: -#line 1359 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1425 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.integer) = (yyvsp[-3].u.integer); } -#line 5178 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5240 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 107: +#line 1429 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.integer) = (yyvsp[-4].u.integer); +} +#line 5248 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 108: -#line 1366 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1433 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "!"; + (yyval.u.integer) = (yyvsp[-5].u.integer); } -#line 5186 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5256 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 109: -#line 1370 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1437 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "~"; + (yyval.u.integer) = (yyvsp[-3].u.integer); } -#line 5194 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5264 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 110: -#line 1374 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1444 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "*"; + (yyval.str) = "!"; } -#line 5202 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5272 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 111: -#line 1378 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1448 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "/"; + (yyval.str) = "~"; } -#line 5210 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5280 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 112: -#line 1382 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1452 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "%"; + (yyval.str) = "*"; } -#line 5218 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5288 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 113: -#line 1386 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1456 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "+"; + (yyval.str) = "/"; } -#line 5226 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5296 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 114: -#line 1390 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1460 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "-"; + (yyval.str) = "%"; } -#line 5234 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5304 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 115: -#line 1394 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1464 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "|"; + (yyval.str) = "+"; } -#line 5242 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5312 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 116: -#line 1398 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1468 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "&"; + (yyval.str) = "-"; } -#line 5250 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5320 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 117: -#line 1402 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1472 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "^"; + (yyval.str) = "|"; } -#line 5258 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5328 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 118: -#line 1406 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1476 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "||"; + (yyval.str) = "&"; } -#line 5266 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5336 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 119: -#line 1410 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1480 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "&&"; + (yyval.str) = "^"; } -#line 5274 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5344 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 120: -#line 1414 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1484 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "=="; + (yyval.str) = "||"; } -#line 5282 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5352 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 121: -#line 1418 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1488 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "!="; + (yyval.str) = "&&"; } -#line 5290 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5360 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 122: -#line 1422 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1492 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "<="; + (yyval.str) = "=="; } -#line 5298 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5368 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 123: -#line 1426 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1496 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = ">="; + (yyval.str) = "!="; } -#line 5306 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5376 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 124: -#line 1430 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1500 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "<"; + (yyval.str) = "<="; } -#line 5314 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5384 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 125: -#line 1434 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1504 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = ">"; + (yyval.str) = ">="; } -#line 5322 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5392 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 126: -#line 1438 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1508 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "<<"; + (yyval.str) = "<"; } -#line 5330 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5400 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 127: -#line 1442 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1512 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = ">>"; + (yyval.str) = ">"; } -#line 5338 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5408 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 128: -#line 1446 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1516 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "="; + (yyval.str) = "<<"; } -#line 5346 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5416 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 129: -#line 1450 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1520 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = ","; + (yyval.str) = ">>"; } -#line 5354 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5424 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 130: -#line 1454 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1524 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "++"; + (yyval.str) = "="; } -#line 5362 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5432 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 131: -#line 1458 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1528 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "--"; + (yyval.str) = ","; } -#line 5370 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5440 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 132: -#line 1462 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1532 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "*="; + (yyval.str) = "++"; } -#line 5378 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5448 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 133: -#line 1466 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1536 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "/="; + (yyval.str) = "--"; } -#line 5386 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5456 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 134: -#line 1470 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1540 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "%="; + (yyval.str) = "*="; } -#line 5394 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5464 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 135: -#line 1474 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1544 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "+="; + (yyval.str) = "/="; } -#line 5402 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5472 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 136: -#line 1478 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1548 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "-="; + (yyval.str) = "%="; } -#line 5410 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5480 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 137: -#line 1482 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1552 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "|="; + (yyval.str) = "+="; } -#line 5418 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5488 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 138: -#line 1486 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1556 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "&="; + (yyval.str) = "-="; } -#line 5426 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5496 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 139: -#line 1490 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1560 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "^="; + (yyval.str) = "|="; } -#line 5434 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5504 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 140: -#line 1494 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1564 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "<<="; + (yyval.str) = "&="; } -#line 5442 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5512 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 141: -#line 1498 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1568 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = ">>="; + (yyval.str) = "^="; } -#line 5450 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5520 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 142: -#line 1502 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1572 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "->"; + (yyval.str) = "<<="; } -#line 5458 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5528 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 143: -#line 1506 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1576 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "[]"; + (yyval.str) = ">>="; } -#line 5466 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5536 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 144: -#line 1510 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1580 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "()"; + (yyval.str) = "->"; } -#line 5474 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5544 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 145: -#line 1514 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1584 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.str) = "new"; + (yyval.str) = "[]"; } -#line 5482 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5552 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 146: -#line 1518 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1588 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.str) = "()"; +} +#line 5560 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 147: +#line 1592 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.str) = "new"; +} +#line 5568 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 148: +#line 1596 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.str) = "delete"; } -#line 5490 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5576 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 151: -#line 1532 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 153: +#line 1610 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { push_scope(new CPPTemplateScope(current_scope)); } -#line 5498 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5584 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 152: -#line 1536 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 154: +#line 1614 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); } -#line 5506 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5592 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 157: -#line 1550 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 159: +#line 1628 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPTemplateScope *ts = current_scope->as_template_scope(); assert(ts != NULL); ts->add_template_parameter((yyvsp[0].u.decl)); } -#line 5516 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5602 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 158: -#line 1556 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 160: +#line 1634 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPTemplateScope *ts = current_scope->as_template_scope(); assert(ts != NULL); ts->add_template_parameter((yyvsp[0].u.decl)); } -#line 5526 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 161: -#line 1570 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.decl) = CPPType::new_type(new CPPClassTemplateParameter((CPPIdentifier *)NULL)); -} -#line 5534 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 162: -#line 1574 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.decl) = CPPType::new_type(new CPPClassTemplateParameter((yyvsp[0].u.identifier))); -} -#line 5542 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5612 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 163: -#line 1578 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1648 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.decl) = CPPType::new_type(new CPPClassTemplateParameter((yyvsp[-2].u.identifier), (yyvsp[0].u.type))); + (yyval.u.decl) = CPPType::new_type(new CPPClassTemplateParameter((CPPIdentifier *)NULL)); } -#line 5550 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5620 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 164: -#line 1582 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1652 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.decl) = CPPType::new_type(new CPPClassTemplateParameter((yyvsp[0].u.identifier))); +} +#line 5628 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 165: +#line 1656 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.decl) = CPPType::new_type(new CPPClassTemplateParameter((yyvsp[-2].u.identifier), (yyvsp[0].u.type))); +} +#line 5636 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 166: +#line 1660 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPClassTemplateParameter *ctp = new CPPClassTemplateParameter((CPPIdentifier *)NULL); ctp->_packed = true; (yyval.u.decl) = CPPType::new_type(ctp); } -#line 5560 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5646 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 165: -#line 1588 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 167: +#line 1666 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPClassTemplateParameter *ctp = new CPPClassTemplateParameter((yyvsp[0].u.identifier)); ctp->_packed = true; (yyval.u.decl) = CPPType::new_type(ctp); } -#line 5570 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5656 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 166: -#line 1594 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 168: +#line 1672 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPInstance *inst = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); inst->set_initializer((yyvsp[0].u.expr)); (yyval.u.decl) = inst; } -#line 5580 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5666 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 167: -#line 1600 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 169: +#line 1678 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); CPPInstance *inst = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); inst->set_initializer((yyvsp[0].u.expr)); (yyval.u.decl) = inst; } -#line 5591 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5677 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 168: -#line 1607 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 170: +#line 1685 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPInstance *inst = new CPPInstance((yyvsp[-1].u.type), (yyvsp[0].u.inst_ident), 0, (yylsp[0]).file); (yyval.u.decl) = inst; } -#line 5600 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5686 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 169: -#line 1612 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 171: +#line 1690 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[0].u.inst_ident)->add_modifier(IIT_const); CPPInstance *inst = new CPPInstance((yyvsp[-1].u.type), (yyvsp[0].u.inst_ident), 0, (yylsp[0]).file); (yyval.u.decl) = inst; } -#line 5610 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5696 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 170: -#line 1621 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 172: +#line 1699 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = CPPType::new_type((yyvsp[0].u.simple_type)); } -#line 5618 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5704 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 171: -#line 1625 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 173: +#line 1703 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { yywarning("Not a type: " + (yyvsp[0].u.identifier)->get_fully_scoped_name(), (yylsp[0])); (yyval.u.type) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_unknown)); } -#line 5627 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 172: -#line 1630 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); - if ((yyval.u.type) == NULL) { - yyerror(string("internal error resolving type ") + (yyvsp[0].u.identifier)->get_fully_scoped_name(), (yylsp[0])); - } - assert((yyval.u.type) != NULL); -} -#line 5639 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 173: -#line 1638 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); - if ((yyval.u.type) == NULL) { - yyerror(string("internal error resolving type ") + (yyvsp[0].u.identifier)->get_fully_scoped_name(), (yylsp[0])); - } - assert((yyval.u.type) != NULL); -} -#line 5651 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5713 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 174: -#line 1650 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1708 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); + (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); + if ((yyval.u.type) == NULL) { + yyerror(string("internal error resolving type ") + (yyvsp[0].u.identifier)->get_fully_scoped_name(), (yylsp[0])); + } + assert((yyval.u.type) != NULL); } -#line 5659 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5725 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 175: -#line 1654 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1716 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); + if ((yyval.u.type) == NULL) { + yyerror(string("internal error resolving type ") + (yyvsp[0].u.identifier)->get_fully_scoped_name(), (yylsp[0])); + } + assert((yyval.u.type) != NULL); +} +#line 5737 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 176: +#line 1728 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); +} +#line 5745 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 177: +#line 1732 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // For an operator function. We implement this simply by building a // ficticious name for the function; in other respects it's just @@ -5673,11 +5759,11 @@ yyreduce: (yyval.u.inst_ident) = new CPPInstanceIdentifier(ident); } -#line 5677 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5763 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 176: -#line 1668 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 178: +#line 1746 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // A C++11 literal operator. if (!(yyvsp[-1].str).empty()) { @@ -5692,83 +5778,83 @@ yyreduce: (yyval.u.inst_ident) = new CPPInstanceIdentifier(ident); } -#line 5696 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5782 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 177: -#line 1683 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 179: +#line 1761 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_const); } -#line 5705 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5791 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 178: -#line 1688 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 180: +#line 1766 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_volatile); } -#line 5714 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5800 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 179: -#line 1693 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 181: +#line 1771 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_pointer); } -#line 5723 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5809 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 180: -#line 1698 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 182: +#line 1776 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_reference); } -#line 5732 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5818 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 181: -#line 1703 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 183: +#line 1781 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); } -#line 5741 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5827 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 182: -#line 1708 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 184: +#line 1786 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); } -#line 5750 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5836 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 183: -#line 1713 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 185: +#line 1791 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); } -#line 5759 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5845 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 184: -#line 1718 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 186: +#line 1796 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-1].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_paren); } -#line 5768 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5854 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 185: -#line 1723 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 187: +#line 1801 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // Create a scope for this function (in case it is a function) CPPScope *scope = new CPPScope((yyvsp[-1].u.inst_ident)->get_scope(current_scope, global_scope), @@ -5781,11 +5867,11 @@ yyreduce: push_scope(scope); } -#line 5785 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5871 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 186: -#line 1736 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 188: +#line 1814 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); (yyval.u.inst_ident) = (yyvsp[-5].u.inst_ident); @@ -5799,11 +5885,11 @@ yyreduce: (yyval.u.inst_ident)->add_func_modifier((yyvsp[-2].u.param_list), (yyvsp[0].u.integer)); } } -#line 5803 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5889 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 187: -#line 1754 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 189: +#line 1832 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // This is handled a bit awkwardly right now. Ideally it'd be wrapped // up in the instance_identifier rule, but then more needs to happen in @@ -5813,910 +5899,910 @@ yyreduce: } (yyval.u.inst_ident) = (yyvsp[-1].u.inst_ident); } -#line 5817 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5903 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 188: -#line 1764 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 190: +#line 1842 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // Bitfield definition. (yyvsp[-2].u.inst_ident)->_bit_width = (yyvsp[0].u.integer); (yyval.u.inst_ident) = (yyvsp[-2].u.inst_ident); } -#line 5827 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 189: -#line 1774 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = NULL; -} -#line 5835 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 190: -#line 1778 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); -} -#line 5843 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5913 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 191: -#line 1782 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1852 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyvsp[0].u.inst_ident)->add_modifier(IIT_const); - (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); + (yyval.u.type) = NULL; } -#line 5852 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5921 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 192: -#line 1791 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1856 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = NULL; -} -#line 5860 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 193: -#line 1795 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.identifier) = (yyvsp[0].u.identifier); -} -#line 5868 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 194: -#line 1803 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = new CPPParameterList; -} -#line 5876 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 195: -#line 1807 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = new CPPParameterList; - (yyval.u.param_list)->_includes_ellipsis = true; -} -#line 5885 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 196: -#line 1812 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = (yyvsp[0].u.param_list); -} -#line 5893 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 197: -#line 1816 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = (yyvsp[-2].u.param_list); - (yyval.u.param_list)->_includes_ellipsis = true; -} -#line 5902 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 198: -#line 1821 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = (yyvsp[-1].u.param_list); - (yyval.u.param_list)->_includes_ellipsis = true; -} -#line 5911 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 199: -#line 1829 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = new CPPParameterList; - (yyval.u.param_list)->_parameters.push_back((yyvsp[0].u.instance)); -} -#line 5920 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 200: -#line 1834 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.param_list) = (yyvsp[-2].u.param_list); - (yyval.u.param_list)->_parameters.push_back((yyvsp[0].u.instance)); + (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); } #line 5929 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 201: -#line 1842 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 193: +#line 1860 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.param_list) = new CPPParameterList; + (yyvsp[0].u.inst_ident)->add_modifier(IIT_const); + (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); } -#line 5937 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5938 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 202: -#line 1846 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 194: +#line 1869 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.param_list) = new CPPParameterList; - (yyval.u.param_list)->_includes_ellipsis = true; + (yyval.u.identifier) = NULL; } #line 5946 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 203: -#line 1851 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 195: +#line 1873 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.param_list) = (yyvsp[0].u.param_list); + (yyval.u.identifier) = (yyvsp[0].u.identifier); } #line 5954 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 204: -#line 1855 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 196: +#line 1881 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = new CPPParameterList; +} +#line 5962 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 197: +#line 1885 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = new CPPParameterList; + (yyval.u.param_list)->_includes_ellipsis = true; +} +#line 5971 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 198: +#line 1890 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = (yyvsp[0].u.param_list); +} +#line 5979 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 199: +#line 1894 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.param_list) = (yyvsp[-2].u.param_list); (yyval.u.param_list)->_includes_ellipsis = true; } -#line 5963 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5988 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 205: -#line 1860 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 200: +#line 1899 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.param_list) = (yyvsp[-1].u.param_list); (yyval.u.param_list)->_includes_ellipsis = true; } -#line 5972 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 5997 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 206: -#line 1868 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 201: +#line 1907 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.param_list) = new CPPParameterList; (yyval.u.param_list)->_parameters.push_back((yyvsp[0].u.instance)); } -#line 5981 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6006 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 207: -#line 1873 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 202: +#line 1912 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.param_list) = (yyvsp[-2].u.param_list); (yyval.u.param_list)->_parameters.push_back((yyvsp[0].u.instance)); } -#line 5990 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6015 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 203: +#line 1920 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = new CPPParameterList; +} +#line 6023 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 204: +#line 1924 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = new CPPParameterList; + (yyval.u.param_list)->_includes_ellipsis = true; +} +#line 6032 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 205: +#line 1929 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = (yyvsp[0].u.param_list); +} +#line 6040 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 206: +#line 1933 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = (yyvsp[-2].u.param_list); + (yyval.u.param_list)->_includes_ellipsis = true; +} +#line 6049 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 207: +#line 1938 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.param_list) = (yyvsp[-1].u.param_list); + (yyval.u.param_list)->_includes_ellipsis = true; +} +#line 6058 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 208: -#line 1881 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1946 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (CPPExpression *)NULL; + (yyval.u.param_list) = new CPPParameterList; + (yyval.u.param_list)->_parameters.push_back((yyvsp[0].u.instance)); } -#line 5998 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6067 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 209: -#line 1885 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1951 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.param_list) = (yyvsp[-2].u.param_list); + (yyval.u.param_list)->_parameters.push_back((yyvsp[0].u.instance)); } -#line 6006 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6076 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 210: -#line 1892 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1959 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6014 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6084 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 211: -#line 1896 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1963 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 6022 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6092 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 212: -#line 1903 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1970 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6030 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6100 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 213: -#line 1907 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1974 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (CPPExpression *)NULL; + (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 6038 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6108 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 214: -#line 1911 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1981 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6046 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6116 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 215: -#line 1915 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1985 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::get_default()); + (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6054 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6124 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 216: -#line 1919 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1989 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::get_delete()); + (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6062 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6132 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 217: -#line 1926 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = (CPPExpression *)NULL; -} -#line 6070 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 218: -#line 1930 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = (CPPExpression *)NULL; -} -#line 6078 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 219: -#line 1934 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = (yyvsp[-1].u.expr); -} -#line 6086 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 220: -#line 1938 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 1993 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = new CPPExpression(CPPExpression::get_default()); } -#line 6094 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6140 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 221: -#line 1942 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 218: +#line 1997 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = new CPPExpression(CPPExpression::get_delete()); } -#line 6102 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6148 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 222: -#line 1946 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 219: +#line 2004 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6110 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6156 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 226: -#line 1959 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 220: +#line 2008 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { + (yyval.u.expr) = (CPPExpression *)NULL; } -#line 6117 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6164 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 230: -#line 1968 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 221: +#line 2012 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); - (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); + (yyval.u.expr) = (yyvsp[-1].u.expr); } -#line 6126 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6172 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 231: -#line 1973 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 222: +#line 2016 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); - (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); - (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(CPPExpression::get_default()); } -#line 6136 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6180 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 223: +#line 2020 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::get_delete()); +} +#line 6188 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 224: +#line 2024 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = (CPPExpression *)NULL; +} +#line 6196 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 228: +#line 2037 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { +} +#line 6203 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 232: -#line 1979 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2046 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); - (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-2]).file); + (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); } -#line 6146 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6212 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 233: -#line 1985 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); - (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); -} -#line 6155 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 234: -#line 1990 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2051 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); } -#line 6165 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6222 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 235: -#line 1996 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 234: +#line 2057 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-2]).file); (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); } -#line 6175 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6232 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 235: +#line 2063 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); + (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); +} +#line 6241 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 236: -#line 2002 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2068 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.instance) = (yyvsp[0].u.instance); + (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); + (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-1]).file); + (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); } -#line 6183 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6251 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 237: -#line 2006 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2074 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.instance) = (yyvsp[0].u.instance); + (yyvsp[-1].u.inst_ident)->add_modifier(IIT_const); + (yyval.u.instance) = new CPPInstance((yyvsp[-2].u.type), (yyvsp[-1].u.inst_ident), 0, (yylsp[-2]).file); + (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); } -#line 6191 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6261 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 238: -#line 2017 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2080 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.instance) = (yyvsp[0].u.instance); } -#line 6199 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6269 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 239: -#line 2021 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2084 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.instance) = (yyvsp[0].u.instance); +} +#line 6277 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 240: +#line 2095 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.instance) = (yyvsp[0].u.instance); +} +#line 6285 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 241: +#line 2099 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_parameter)); (yyval.u.instance) = new CPPInstance(type, "expr"); (yyval.u.instance)->set_initializer((yyvsp[0].u.expr)); } -#line 6210 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 240: -#line 2031 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); -} -#line 6218 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 241: -#line 2035 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); -} -#line 6226 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6296 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 242: -#line 2039 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2109 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_const); + (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); } -#line 6235 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6304 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 243: -#line 2044 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2113 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_volatile); + (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); } -#line 6244 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6312 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 244: -#line 2049 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2117 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_pointer); + (yyval.u.inst_ident)->add_modifier(IIT_const); } -#line 6253 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6321 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 245: -#line 2054 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2122 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_reference); + (yyval.u.inst_ident)->add_modifier(IIT_volatile); } -#line 6262 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6330 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 246: -#line 2059 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2127 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); + (yyval.u.inst_ident)->add_modifier(IIT_pointer); } -#line 6271 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6339 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 247: -#line 2064 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2132 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); + (yyval.u.inst_ident)->add_modifier(IIT_reference); } -#line 6280 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6348 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 248: -#line 2069 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2137 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); - (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); } -#line 6289 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6357 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 249: -#line 2077 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2142 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); } -#line 6297 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6366 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 250: -#line 2081 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2147 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); + (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); + (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); } -#line 6305 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6375 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 251: -#line 2085 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2155 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_const); + (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); } -#line 6314 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6383 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 252: -#line 2090 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2159 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_volatile); + (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); } -#line 6323 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6391 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 253: -#line 2095 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2163 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_pointer); + (yyval.u.inst_ident)->add_modifier(IIT_const); } -#line 6332 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6400 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 254: -#line 2100 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2168 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_reference); + (yyval.u.inst_ident)->add_modifier(IIT_volatile); } -#line 6341 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6409 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 255: -#line 2105 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2173 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); + (yyval.u.inst_ident)->add_modifier(IIT_pointer); } -#line 6350 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6418 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 256: -#line 2110 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2178 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); + (yyval.u.inst_ident)->add_modifier(IIT_reference); } -#line 6359 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6427 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 257: -#line 2115 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2183 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); - (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); } -#line 6368 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6436 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 258: -#line 2120 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2188 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[-5].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_paren); - (yyval.u.inst_ident)->add_func_modifier((yyvsp[-2].u.param_list), (yyvsp[0].u.integer)); + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); } -#line 6378 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6445 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 259: -#line 2126 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[-1].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_paren); -} -#line 6387 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 260: -#line 2134 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); - (yyval.u.inst_ident)->_packed = true; -} -#line 6396 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 261: -#line 2139 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); - (yyval.u.inst_ident)->_packed = true; -} -#line 6405 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 262: -#line 2144 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_const); -} -#line 6414 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 263: -#line 2149 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_volatile); -} -#line 6423 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 264: -#line 2154 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_pointer); -} -#line 6432 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 265: -#line 2159 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_reference); -} -#line 6441 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 266: -#line 2164 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); -} -#line 6450 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 267: -#line 2169 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); -} -#line 6459 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 268: -#line 2174 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2193 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); } -#line 6468 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6454 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 269: -#line 2179 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 260: +#line 2198 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-5].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_paren); (yyval.u.inst_ident)->add_func_modifier((yyvsp[-2].u.param_list), (yyvsp[0].u.integer)); } -#line 6478 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6464 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 270: -#line 2185 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 261: +#line 2204 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-1].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_paren); } -#line 6487 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6473 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 271: -#line 2193 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); -} -#line 6495 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 272: -#line 2197 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 262: +#line 2212 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); (yyval.u.inst_ident)->_packed = true; } -#line 6504 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6482 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 273: -#line 2202 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 263: +#line 2217 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); (yyval.u.inst_ident)->_packed = true; } -#line 6513 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6491 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 274: -#line 2207 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_const); -} -#line 6522 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 275: -#line 2212 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_volatile); -} -#line 6531 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 276: -#line 2217 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_pointer); -} -#line 6540 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 277: + case 264: #line 2222 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_reference); -} -#line 6549 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 278: -#line 2227 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); -} -#line 6558 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 279: -#line 2232 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); - (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); -} -#line 6567 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 280: -#line 2237 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); - (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); -} -#line 6576 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 281: -#line 2245 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); -} -#line 6584 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 282: -#line 2249 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); - (yyval.u.inst_ident)->_packed = true; -} -#line 6593 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 283: -#line 2254 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); - (yyval.u.inst_ident)->_packed = true; -} -#line 6602 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 284: -#line 2259 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_const); } -#line 6611 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6500 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 285: -#line 2264 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 265: +#line 2227 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_volatile); } -#line 6620 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6509 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 286: -#line 2269 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 266: +#line 2232 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_pointer); } -#line 6629 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6518 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 287: -#line 2274 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 267: +#line 2237 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_reference); } -#line 6638 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6527 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 288: -#line 2279 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 268: +#line 2242 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); } -#line 6647 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6536 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 289: -#line 2284 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 269: +#line 2247 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); } -#line 6656 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6545 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 290: -#line 2289 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 270: +#line 2252 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); } -#line 6665 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6554 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 291: -#line 2294 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 271: +#line 2257 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[-5].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_paren); + (yyval.u.inst_ident)->add_func_modifier((yyvsp[-2].u.param_list), (yyvsp[0].u.integer)); +} +#line 6564 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 272: +#line 2263 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[-1].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_paren); +} +#line 6573 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 273: +#line 2271 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); - (yyval.u.inst_ident)->add_modifier(IIT_paren); - (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); } -#line 6675 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6581 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 292: + case 274: +#line 2275 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); + (yyval.u.inst_ident)->_packed = true; +} +#line 6590 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 275: +#line 2280 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); + (yyval.u.inst_ident)->_packed = true; +} +#line 6599 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 276: +#line 2285 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_const); +} +#line 6608 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 277: +#line 2290 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_volatile); +} +#line 6617 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 278: +#line 2295 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_pointer); +} +#line 6626 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 279: #line 2300 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[-6].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_pointer); - (yyval.u.inst_ident)->add_modifier(IIT_paren); - (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_reference); } -#line 6686 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6635 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 293: -#line 2307 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 280: +#line 2305 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.inst_ident) = (yyvsp[-6].u.inst_ident); - (yyval.u.inst_ident)->add_modifier(IIT_reference); - (yyval.u.inst_ident)->add_modifier(IIT_paren); - (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); +} +#line 6644 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 281: +#line 2310 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); +} +#line 6653 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 282: +#line 2315 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); + (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); +} +#line 6662 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 283: +#line 2323 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); +} +#line 6670 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 284: +#line 2327 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); + (yyval.u.inst_ident)->_packed = true; +} +#line 6679 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 285: +#line 2332 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((yyvsp[0].u.identifier)); + (yyval.u.inst_ident)->_packed = true; +} +#line 6688 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 286: +#line 2337 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_const); } #line 6697 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; + case 287: +#line 2342 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_volatile); +} +#line 6706 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 288: +#line 2347 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_pointer); +} +#line 6715 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 289: +#line 2352 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_reference); +} +#line 6724 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 290: +#line 2357 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); +} +#line 6733 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 291: +#line 2362 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[0].u.inst_ident); + (yyval.u.inst_ident)->add_scoped_pointer_modifier((yyvsp[-2].u.identifier)); +} +#line 6742 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 292: +#line 2367 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[-3].u.inst_ident); + (yyval.u.inst_ident)->add_array_modifier((yyvsp[-1].u.expr)); +} +#line 6751 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 293: +#line 2372 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = new CPPInstanceIdentifier((CPPIdentifier *)NULL); + (yyval.u.inst_ident)->add_modifier(IIT_paren); + (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); +} +#line 6761 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + case 294: -#line 2314 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2378 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[-6].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_pointer); + (yyval.u.inst_ident)->add_modifier(IIT_paren); + (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); +} +#line 6772 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 295: +#line 2385 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.inst_ident) = (yyvsp[-6].u.inst_ident); + (yyval.u.inst_ident)->add_modifier(IIT_reference); + (yyval.u.inst_ident)->add_modifier(IIT_paren); + (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); +} +#line 6783 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 296: +#line 2392 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.inst_ident) = (yyvsp[-6].u.inst_ident); (yyval.u.inst_ident)->add_modifier(IIT_rvalue_reference); (yyval.u.inst_ident)->add_modifier(IIT_paren); (yyval.u.inst_ident)->add_func_modifier((yyvsp[-3].u.param_list), (yyvsp[-1].u.integer), (yyvsp[0].u.type)); } -#line 6708 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6794 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 295: -#line 2324 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 297: +#line 2402 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = CPPType::new_type((yyvsp[0].u.simple_type)); } -#line 6716 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6802 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 296: -#line 2328 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 298: +#line 2406 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if ((yyval.u.type) == NULL) { @@ -6724,43 +6810,43 @@ yyreduce: } assert((yyval.u.type) != NULL); } -#line 6728 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 297: -#line 2336 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = CPPType::new_type(new CPPTBDType((yyvsp[0].u.identifier))); -} -#line 6736 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 298: -#line 2340 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = CPPType::new_type((yyvsp[0].u.struct_type)); -} -#line 6744 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6814 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 299: -#line 2344 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2414 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.type) = CPPType::new_type((yyvsp[0].u.struct_type)); + (yyval.u.type) = CPPType::new_type(new CPPTBDType((yyvsp[0].u.identifier))); } -#line 6752 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6822 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 300: -#line 2348 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2418 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.type) = CPPType::new_type((yyvsp[0].u.enum_type)); + (yyval.u.type) = CPPType::new_type((yyvsp[0].u.struct_type)); } -#line 6760 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6830 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 301: -#line 2352 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2422 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = CPPType::new_type((yyvsp[0].u.struct_type)); +} +#line 6838 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 302: +#line 2426 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = CPPType::new_type((yyvsp[0].u.enum_type)); +} +#line 6846 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 303: +#line 2430 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if (type != NULL) { @@ -6776,11 +6862,11 @@ yyreduce: (yyval.u.type) = et; } } -#line 6780 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6866 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 302: -#line 2368 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 304: +#line 2446 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[-2].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if (type != NULL) { @@ -6796,11 +6882,11 @@ yyreduce: (yyval.u.type) = et; } } -#line 6800 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6886 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 303: -#line 2384 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 305: +#line 2462 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = (yyvsp[-1].u.expr)->determine_type(); if ((yyval.u.type) == (CPPType *)NULL) { @@ -6809,19 +6895,19 @@ yyreduce: yyerror("could not determine type of " + str.str(), (yylsp[-1])); } } -#line 6813 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6899 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 304: -#line 2393 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 306: +#line 2471 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); } -#line 6821 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6907 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 305: -#line 2397 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 307: +#line 2475 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPEnumType *enum_type = (yyvsp[-1].u.type)->as_enum_type(); if (enum_type == NULL) { @@ -6831,19 +6917,19 @@ yyreduce: (yyval.u.type) = enum_type->get_underlying_type(); } } -#line 6835 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6921 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 306: -#line 2407 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 308: +#line 2485 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); } -#line 6843 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6929 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 307: -#line 2414 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 309: +#line 2492 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if ((yyval.u.type) == NULL) { @@ -6851,19 +6937,19 @@ yyreduce: } assert((yyval.u.type) != NULL); } -#line 6855 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6941 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 308: -#line 2425 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 310: +#line 2503 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.decl) = CPPType::new_type((yyvsp[0].u.simple_type)); } -#line 6863 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6949 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 309: -#line 2429 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 311: +#line 2507 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.decl) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if ((yyval.u.decl) == NULL) { @@ -6871,43 +6957,43 @@ yyreduce: } assert((yyval.u.decl) != NULL); } -#line 6875 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 310: -#line 2437 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.decl) = CPPType::new_type(new CPPTBDType((yyvsp[0].u.identifier))); -} -#line 6883 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 311: -#line 2441 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.decl) = CPPType::new_type((yyvsp[0].u.struct_type)); -} -#line 6891 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6961 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 312: -#line 2445 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2515 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.decl) = new CPPTypeDeclaration(CPPType::new_type((yyvsp[0].u.struct_type))); + (yyval.u.decl) = CPPType::new_type(new CPPTBDType((yyvsp[0].u.identifier))); } -#line 6899 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6969 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 313: -#line 2449 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2519 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.decl) = new CPPTypeDeclaration(CPPType::new_type((yyvsp[0].u.enum_type))); + (yyval.u.decl) = CPPType::new_type((yyvsp[0].u.struct_type)); } -#line 6907 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 6977 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 314: -#line 2453 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2523 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.decl) = new CPPTypeDeclaration(CPPType::new_type((yyvsp[0].u.struct_type))); +} +#line 6985 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 315: +#line 2527 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.decl) = new CPPTypeDeclaration(CPPType::new_type((yyvsp[0].u.enum_type))); +} +#line 6993 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 316: +#line 2531 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if (type != NULL) { @@ -6923,11 +7009,11 @@ yyreduce: (yyval.u.decl) = et; } } -#line 6927 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7013 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 315: -#line 2469 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 317: +#line 2547 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[-2].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if (type != NULL) { @@ -6943,11 +7029,11 @@ yyreduce: (yyval.u.decl) = et; } } -#line 6947 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7033 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 316: -#line 2485 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 318: +#line 2563 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { yywarning(string("C++ does not permit forward declaration of untyped enum ") + (yyvsp[0].u.identifier)->get_fully_scoped_name(), (yylsp[-1])); @@ -6965,11 +7051,11 @@ yyreduce: (yyval.u.decl) = et; } } -#line 6969 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7055 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 317: -#line 2503 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 319: +#line 2581 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.decl) = (yyvsp[-1].u.expr)->determine_type(); if ((yyval.u.decl) == (CPPType *)NULL) { @@ -6978,19 +7064,19 @@ yyreduce: yyerror("could not determine type of " + str.str(), (yylsp[-1])); } } -#line 6982 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7068 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 318: -#line 2512 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 320: +#line 2590 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.decl) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); } -#line 6990 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7076 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 319: -#line 2516 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 321: +#line 2594 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPEnumType *enum_type = (yyvsp[-1].u.type)->as_enum_type(); if (enum_type == NULL) { @@ -7000,27 +7086,27 @@ yyreduce: (yyval.u.decl) = enum_type->get_underlying_type(); } } -#line 7004 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 320: -#line 2526 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.decl) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); -} -#line 7012 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 321: -#line 2533 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = CPPType::new_type((yyvsp[0].u.simple_type)); -} -#line 7020 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7090 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 322: -#line 2537 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2604 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.decl) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); +} +#line 7098 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 323: +#line 2611 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = CPPType::new_type((yyvsp[0].u.simple_type)); +} +#line 7106 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 324: +#line 2615 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if ((yyval.u.type) == NULL) { @@ -7028,19 +7114,19 @@ yyreduce: } assert((yyval.u.type) != NULL); } -#line 7032 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7118 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 323: -#line 2545 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 325: +#line 2623 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = CPPType::new_type(new CPPTBDType((yyvsp[0].u.identifier))); } -#line 7040 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7126 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 324: -#line 2549 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 326: +#line 2627 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if (type != NULL) { @@ -7056,11 +7142,11 @@ yyreduce: (yyval.u.type) = et; } } -#line 7060 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7146 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 325: -#line 2565 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 327: +#line 2643 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); if (type != NULL) { @@ -7076,11 +7162,11 @@ yyreduce: (yyval.u.type) = et; } } -#line 7080 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7166 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 326: -#line 2581 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 328: +#line 2659 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = (yyvsp[-1].u.expr)->determine_type(); if ((yyval.u.type) == (CPPType *)NULL) { @@ -7089,11 +7175,11 @@ yyreduce: yyerror("could not determine type of " + str.str(), (yylsp[-1])); } } -#line 7093 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7179 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 327: -#line 2590 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 329: +#line 2668 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPEnumType *enum_type = (yyvsp[-1].u.type)->as_enum_type(); if (enum_type == NULL) { @@ -7103,71 +7189,71 @@ yyreduce: (yyval.u.type) = enum_type->get_underlying_type(); } } -#line 7107 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 328: -#line 2600 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); -} -#line 7115 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 329: -#line 2607 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.decl) = (yyvsp[0].u.decl); -} -#line 7123 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7193 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 330: -#line 2611 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2678 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_auto)); +} +#line 7201 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 331: +#line 2685 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.decl) = (yyvsp[0].u.decl); +} +#line 7209 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 332: +#line 2689 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { yyerror(string("unknown type '") + (yyvsp[0].u.identifier)->get_fully_scoped_name() + "'", (yylsp[0])); (yyval.u.decl) = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_unknown)); } -#line 7133 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 331: -#line 2619 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); -} -#line 7141 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 332: -#line 2623 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyvsp[0].u.inst_ident)->add_modifier(IIT_const); - (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); -} -#line 7150 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7219 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 333: -#line 2628 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2697 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); } -#line 7158 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7227 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 334: -#line 2632 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2701 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[0].u.inst_ident)->add_modifier(IIT_const); (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); } -#line 7167 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7236 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 339: -#line 2647 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 335: +#line 2706 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); +} +#line 7244 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 336: +#line 2710 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyvsp[0].u.inst_ident)->add_modifier(IIT_const); + (yyval.u.type) = (yyvsp[0].u.inst_ident)->unroll_type((yyvsp[-1].u.type)); +} +#line 7253 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 341: +#line 2725 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPVisibility starting_vis = ((yyvsp[-2].u.extension_enum) == CPPExtensionType::T_class) ? V_private : V_public; @@ -7181,22 +7267,22 @@ yyreduce: push_scope(new_scope); push_struct(st); } -#line 7185 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7271 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 340: -#line 2661 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 342: +#line 2739 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.struct_type) = current_struct; current_struct->_incomplete = false; pop_struct(); pop_scope(); } -#line 7196 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7282 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 341: -#line 2671 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 343: +#line 2749 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPVisibility starting_vis = ((yyvsp[-2].u.extension_enum) == CPPExtensionType::T_class) ? V_private : V_public; @@ -7216,253 +7302,253 @@ yyreduce: push_scope(new_scope); push_struct(st); } -#line 7220 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7306 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 342: -#line 2691 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 344: +#line 2769 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.struct_type) = current_struct; current_struct->_incomplete = false; pop_struct(); pop_scope(); } -#line 7231 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7317 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 344: -#line 2702 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 346: +#line 2780 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_struct->_final = true; } -#line 7239 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 349: -#line 2719 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - current_struct->append_derivation((yyvsp[0].u.type), V_unknown, false); -} -#line 7247 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 350: -#line 2723 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - current_struct->append_derivation((yyvsp[0].u.type), V_public, false); -} -#line 7255 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7325 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 351: -#line 2727 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2797 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - current_struct->append_derivation((yyvsp[0].u.type), V_protected, false); + current_struct->append_derivation((yyvsp[0].u.type), V_unknown, false); } -#line 7263 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7333 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 352: -#line 2731 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2801 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - current_struct->append_derivation((yyvsp[0].u.type), V_private, false); + current_struct->append_derivation((yyvsp[0].u.type), V_public, false); } -#line 7271 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7341 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 353: -#line 2735 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2805 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - current_struct->append_derivation((yyvsp[0].u.type), V_public, true); + current_struct->append_derivation((yyvsp[0].u.type), V_protected, false); } -#line 7279 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7349 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 354: -#line 2739 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2809 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - current_struct->append_derivation((yyvsp[0].u.type), V_protected, true); + current_struct->append_derivation((yyvsp[0].u.type), V_private, false); } -#line 7287 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7357 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 355: -#line 2743 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - current_struct->append_derivation((yyvsp[0].u.type), V_private, true); -} -#line 7295 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 356: -#line 2747 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2813 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_struct->append_derivation((yyvsp[0].u.type), V_public, true); } -#line 7303 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7365 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 357: -#line 2751 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 356: +#line 2817 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_struct->append_derivation((yyvsp[0].u.type), V_protected, true); } -#line 7311 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7373 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 358: -#line 2755 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 357: +#line 2821 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_struct->append_derivation((yyvsp[0].u.type), V_private, true); } -#line 7319 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7381 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 358: +#line 2825 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + current_struct->append_derivation((yyvsp[0].u.type), V_public, true); +} +#line 7389 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 359: -#line 2762 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2829 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.enum_type) = current_enum; - current_enum = NULL; + current_struct->append_derivation((yyvsp[0].u.type), V_protected, true); } -#line 7328 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7397 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 360: -#line 2770 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2833 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - current_enum = new CPPEnumType((yyvsp[-2].u.extension_enum), NULL, (yyvsp[0].u.type), current_scope, NULL, (yylsp[-2]).file); -} -#line 7336 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 361: -#line 2774 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - current_enum = new CPPEnumType((yyvsp[0].u.extension_enum), NULL, current_scope, NULL, (yylsp[0]).file); -} -#line 7344 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 362: -#line 2778 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - CPPScope *new_scope = new CPPScope(current_scope, (yyvsp[-2].u.identifier)->_names.back(), V_public); - current_enum = new CPPEnumType((yyvsp[-3].u.extension_enum), (yyvsp[-2].u.identifier), (yyvsp[0].u.type), current_scope, new_scope, (yylsp[-3]).file); -} -#line 7353 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 363: -#line 2783 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - CPPScope *new_scope = new CPPScope(current_scope, (yyvsp[0].u.identifier)->_names.back(), V_public); - current_enum = new CPPEnumType((yyvsp[-1].u.extension_enum), (yyvsp[0].u.identifier), current_scope, new_scope, (yylsp[-1]).file); -} -#line 7362 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 364: -#line 2791 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = CPPType::new_type((yyvsp[0].u.simple_type)); -} -#line 7370 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 365: -#line 2795 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); -} -#line 7378 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 367: -#line 2803 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - assert(current_enum != NULL); - current_enum->add_element((yyvsp[-1].u.identifier)->get_simple_name(), NULL, current_lexer, (yylsp[-1])); -} -#line 7387 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 368: -#line 2808 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - assert(current_enum != NULL); - current_enum->add_element((yyvsp[-3].u.identifier)->get_simple_name(), (yyvsp[-1].u.expr), current_lexer, (yylsp[-3])); -} -#line 7396 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 370: -#line 2816 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - assert(current_enum != NULL); - current_enum->add_element((yyvsp[0].u.identifier)->get_simple_name(), NULL, current_lexer, (yylsp[0])); + current_struct->append_derivation((yyvsp[0].u.type), V_private, true); } #line 7405 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 371: -#line 2821 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 361: +#line 2840 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - assert(current_enum != NULL); - current_enum->add_element((yyvsp[-2].u.identifier)->get_simple_name(), (yyvsp[0].u.expr), current_lexer, (yylsp[-2])); + (yyval.u.enum_type) = current_enum; + current_enum = NULL; } #line 7414 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 372: -#line 2829 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 362: +#line 2848 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.extension_enum) = CPPExtensionType::T_enum; + current_enum = new CPPEnumType((yyvsp[-2].u.extension_enum), NULL, (yyvsp[0].u.type), current_scope, NULL, (yylsp[-2]).file); } #line 7422 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 373: -#line 2833 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 363: +#line 2852 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.extension_enum) = CPPExtensionType::T_enum_class; + current_enum = new CPPEnumType((yyvsp[0].u.extension_enum), NULL, current_scope, NULL, (yylsp[0]).file); } #line 7430 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 374: -#line 2837 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 364: +#line 2856 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.extension_enum) = CPPExtensionType::T_enum_struct; + CPPScope *new_scope = new CPPScope(current_scope, (yyvsp[-2].u.identifier)->_names.back(), V_public); + current_enum = new CPPEnumType((yyvsp[-3].u.extension_enum), (yyvsp[-2].u.identifier), (yyvsp[0].u.type), current_scope, new_scope, (yylsp[-3]).file); } -#line 7438 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7439 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 365: +#line 2861 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + CPPScope *new_scope = new CPPScope(current_scope, (yyvsp[0].u.identifier)->_names.back(), V_public); + current_enum = new CPPEnumType((yyvsp[-1].u.extension_enum), (yyvsp[0].u.identifier), current_scope, new_scope, (yylsp[-1]).file); +} +#line 7448 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 366: +#line 2869 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = CPPType::new_type((yyvsp[0].u.simple_type)); +} +#line 7456 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 367: +#line 2873 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.type) = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); +} +#line 7464 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 369: +#line 2881 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + assert(current_enum != NULL); + current_enum->add_element((yyvsp[-1].u.identifier)->get_simple_name(), NULL, current_lexer, (yylsp[-1])); +} +#line 7473 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 370: +#line 2886 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + assert(current_enum != NULL); + current_enum->add_element((yyvsp[-3].u.identifier)->get_simple_name(), (yyvsp[-1].u.expr), current_lexer, (yylsp[-3])); +} +#line 7482 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 372: +#line 2894 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + assert(current_enum != NULL); + current_enum->add_element((yyvsp[0].u.identifier)->get_simple_name(), NULL, current_lexer, (yylsp[0])); +} +#line 7491 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 373: +#line 2899 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + assert(current_enum != NULL); + current_enum->add_element((yyvsp[-2].u.identifier)->get_simple_name(), (yyvsp[0].u.expr), current_lexer, (yylsp[-2])); +} +#line 7500 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 374: +#line 2907 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.extension_enum) = CPPExtensionType::T_enum; +} +#line 7508 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 375: -#line 2844 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2911 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.extension_enum) = CPPExtensionType::T_class; + (yyval.u.extension_enum) = CPPExtensionType::T_enum_class; } -#line 7446 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7516 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 376: -#line 2848 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2915 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.extension_enum) = CPPExtensionType::T_struct; + (yyval.u.extension_enum) = CPPExtensionType::T_enum_struct; } -#line 7454 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7524 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 377: -#line 2852 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2922 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.extension_enum) = CPPExtensionType::T_union; + (yyval.u.extension_enum) = CPPExtensionType::T_class; } -#line 7462 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7532 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 378: -#line 2859 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 2926 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.extension_enum) = CPPExtensionType::T_struct; +} +#line 7540 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 379: +#line 2930 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.extension_enum) = CPPExtensionType::T_union; +} +#line 7548 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 380: +#line 2937 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPScope *scope = (yyvsp[-1].u.identifier)->find_scope(current_scope, global_scope, current_lexer); if (scope == NULL) { @@ -7480,19 +7566,19 @@ yyreduce: current_scope->define_namespace(nspace); push_scope(scope); } -#line 7484 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7570 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 379: -#line 2877 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 381: +#line 2955 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); } -#line 7492 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7578 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 380: -#line 2881 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 382: +#line 2959 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPScope *scope = (yyvsp[-1].u.identifier)->find_scope(current_scope, global_scope, current_lexer); if (scope == NULL) { @@ -7511,143 +7597,143 @@ yyreduce: current_scope->define_namespace(nspace); push_scope(scope); } -#line 7515 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7601 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 381: -#line 2900 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 383: +#line 2978 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { pop_scope(); } -#line 7523 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7609 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 384: -#line 2909 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 386: +#line 2987 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPUsing *using_decl = new CPPUsing((yyvsp[-1].u.identifier), false, (yylsp[-2]).file); current_scope->add_declaration(using_decl, global_scope, current_lexer, (yylsp[-2])); current_scope->add_using(using_decl, global_scope, current_lexer); } -#line 7533 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7619 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 385: -#line 2915 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 387: +#line 2993 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // This is really just an alternative way to declare a typedef. CPPTypedefType *typedef_type = new CPPTypedefType((yyvsp[-1].u.type), (yyvsp[-3].u.identifier), current_scope); typedef_type->_using = true; current_scope->add_declaration(CPPType::new_type(typedef_type), global_scope, current_lexer, (yylsp[-4])); } -#line 7544 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7630 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 386: -#line 2922 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 388: +#line 3000 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPUsing *using_decl = new CPPUsing((yyvsp[-1].u.identifier), true, (yylsp[-3]).file); current_scope->add_declaration(using_decl, global_scope, current_lexer, (yylsp[-3])); current_scope->add_using(using_decl, global_scope, current_lexer); } -#line 7554 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 390: -#line 2937 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_bool); -} -#line 7562 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 391: -#line 2941 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_char); -} -#line 7570 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7640 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 392: -#line 2945 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3015 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_wchar_t); + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_bool); } -#line 7578 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7648 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 393: -#line 2949 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3019 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_char16_t); + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_char); } -#line 7586 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7656 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 394: -#line 2953 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3023 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_char32_t); + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_wchar_t); } -#line 7594 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7664 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 395: -#line 2957 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3027 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_char16_t); +} +#line 7672 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 396: +#line 3031 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_char32_t); +} +#line 7680 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 397: +#line 3035 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_short); } -#line 7603 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7689 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 396: -#line 2962 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 398: +#line 3040 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_long); } -#line 7612 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7698 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 397: -#line 2967 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 399: +#line 3045 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_unsigned); } -#line 7621 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7707 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 398: -#line 2972 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 400: +#line 3050 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_signed); } -#line 7630 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7716 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 399: -#line 2977 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 401: +#line 3055 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_int); } -#line 7638 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7724 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 400: -#line 2981 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 402: +#line 3059 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = (yyvsp[0].u.simple_type); (yyval.u.simple_type)->_flags |= CPPSimpleType::F_short; } -#line 7647 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7733 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 401: -#line 2986 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 403: +#line 3064 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = (yyvsp[0].u.simple_type); if ((yyval.u.simple_type)->_flags & CPPSimpleType::F_long) { @@ -7656,189 +7742,189 @@ yyreduce: (yyval.u.simple_type)->_flags |= CPPSimpleType::F_long; } } -#line 7660 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7746 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 402: -#line 2995 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 404: +#line 3073 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = (yyvsp[0].u.simple_type); (yyval.u.simple_type)->_flags |= CPPSimpleType::F_unsigned; } -#line 7669 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7755 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 403: -#line 3000 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 405: +#line 3078 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = (yyvsp[0].u.simple_type); (yyval.u.simple_type)->_flags |= CPPSimpleType::F_signed; } -#line 7678 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 404: -#line 3008 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_float); -} -#line 7686 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 405: -#line 3012 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_double); -} -#line 7694 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7764 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 406: -#line 3016 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3086 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_float); +} +#line 7772 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 407: +#line 3090 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_double); +} +#line 7780 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 408: +#line 3094 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_double, CPPSimpleType::F_long); } -#line 7703 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 407: -#line 3024 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_void); -} -#line 7711 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 408: -#line 3033 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - current_lexer->_resolve_identifiers = false; -} -#line 7719 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7789 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 409: -#line 3037 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3102 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.simple_type) = new CPPSimpleType(CPPSimpleType::T_void); +} +#line 7797 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 410: +#line 3111 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + current_lexer->_resolve_identifiers = false; +} +#line 7805 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 411: +#line 3115 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { current_lexer->_resolve_identifiers = true; } -#line 7727 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7813 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 517: -#line 3081 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 519: +#line 3159 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { } -#line 7734 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 541: -#line 3090 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = (CPPExpression *)NULL; -} -#line 7742 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 542: -#line 3094 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = (yyvsp[0].u.expr); -} -#line 7750 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7820 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 543: -#line 3101 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3168 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (CPPExpression *)NULL; } -#line 7758 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7828 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 544: -#line 3105 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3172 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 7766 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7836 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 545: -#line 3112 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3179 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = (CPPExpression *)NULL; } -#line 7774 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7844 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 546: -#line 3116 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(',', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); -} -#line 7782 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 547: -#line 3123 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3183 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 7790 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7852 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 547: +#line 3190 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = (yyvsp[0].u.expr); +} +#line 7860 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 548: -#line 3127 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3194 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-2].u.type), (yyvsp[0].u.expr))); + (yyval.u.expr) = new CPPExpression(',', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7798 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7868 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 549: -#line 3131 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3201 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_static_cast)); + (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 7806 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7876 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 550: -#line 3135 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3205 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_dynamic_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-2].u.type), (yyvsp[0].u.expr))); } -#line 7814 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7884 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 551: -#line 3139 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3209 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_const_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_static_cast)); } -#line 7822 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7892 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 552: -#line 3143 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3213 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_reinterpret_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_dynamic_cast)); } -#line 7830 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7900 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 553: -#line 3147 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3217 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func((yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_const_cast)); } -#line 7838 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7908 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 554: -#line 3151 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3221 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_reinterpret_cast)); +} +#line 7916 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 555: +#line 3225 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func((yyvsp[-1].u.type))); +} +#line 7924 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 556: +#line 3229 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *arg = (yyvsp[-1].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (arg == (CPPDeclaration *)NULL) { @@ -7850,307 +7936,307 @@ yyreduce: (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func(arg->as_type())); } } -#line 7854 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 555: -#line 3163 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_ellipsis_func((yyvsp[-1].u.identifier))); -} -#line 7862 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 556: -#line 3167 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::alignof_func((yyvsp[-1].u.type))); -} -#line 7870 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7940 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 557: -#line 3171 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3241 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_NOT, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_ellipsis_func((yyvsp[-1].u.identifier))); } -#line 7878 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7948 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 558: -#line 3175 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3245 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_NEGATE, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(CPPExpression::alignof_func((yyvsp[-1].u.type))); } -#line 7886 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7956 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 559: -#line 3179 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3249 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_MINUS, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_NOT, (yyvsp[0].u.expr)); } -#line 7894 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7964 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 560: -#line 3183 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3253 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_PLUS, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_NEGATE, (yyvsp[0].u.expr)); } -#line 7902 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7972 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 561: -#line 3187 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3257 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_STAR, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_MINUS, (yyvsp[0].u.expr)); } -#line 7910 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7980 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 562: -#line 3191 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3261 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_REF, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_PLUS, (yyvsp[0].u.expr)); } -#line 7918 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7988 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 563: -#line 3195 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3265 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('*', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_STAR, (yyvsp[0].u.expr)); } -#line 7926 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 7996 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 564: -#line 3199 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3269 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('/', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_REF, (yyvsp[0].u.expr)); } -#line 7934 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8004 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 565: -#line 3203 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3273 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('%', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('*', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7942 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8012 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 566: -#line 3207 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3277 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('+', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('/', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7950 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8020 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 567: -#line 3211 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3281 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('-', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('%', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7958 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8028 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 568: -#line 3215 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3285 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('|', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('+', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7966 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8036 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 569: -#line 3219 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3289 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('^', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('-', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7974 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8044 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 570: -#line 3223 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3293 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('&', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('|', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7982 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8052 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 571: -#line 3227 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3297 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(OROR, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('^', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7990 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8060 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 572: -#line 3231 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3301 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(ANDAND, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('&', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 7998 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8068 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 573: -#line 3235 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3305 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(EQCOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(OROR, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8006 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8076 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 574: -#line 3239 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3309 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(NECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(ANDAND, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8014 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8084 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 575: -#line 3243 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3313 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(LECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(EQCOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8022 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8092 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 576: -#line 3247 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3317 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(GECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(NECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8030 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8100 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 577: -#line 3251 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3321 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(LSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(LECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8038 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8108 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 578: -#line 3255 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3325 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(RSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(GECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8046 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8116 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 579: -#line 3259 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3329 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('?', (yyvsp[-4].u.expr), (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(LSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8054 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8124 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 580: -#line 3263 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3333 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('[', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); + (yyval.u.expr) = new CPPExpression(RSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8062 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8132 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 581: -#line 3267 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3337 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('f', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); + (yyval.u.expr) = new CPPExpression('?', (yyvsp[-4].u.expr), (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8070 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8140 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 582: -#line 3271 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3341 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('f', (yyvsp[-2].u.expr)); + (yyval.u.expr) = new CPPExpression('[', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); } -#line 8078 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8148 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 583: -#line 3275 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3345 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('.', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('f', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); } -#line 8086 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8156 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 584: -#line 3279 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3349 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(POINTSAT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('f', (yyvsp[-2].u.expr)); } -#line 8094 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8164 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 585: -#line 3283 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3353 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[-1].u.expr); + (yyval.u.expr) = new CPPExpression('.', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8102 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8172 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 586: -#line 3291 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3357 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = new CPPExpression(POINTSAT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8110 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8180 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 587: -#line 3295 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3361 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-2].u.type), (yyvsp[0].u.expr))); + (yyval.u.expr) = (yyvsp[-1].u.expr); } -#line 8118 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8188 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 588: -#line 3299 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3369 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_static_cast)); + (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 8126 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8196 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 589: -#line 3303 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3373 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_dynamic_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-2].u.type), (yyvsp[0].u.expr))); } -#line 8134 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8204 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 590: -#line 3307 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3377 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_const_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_static_cast)); } -#line 8142 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8212 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 591: -#line 3311 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3381 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_reinterpret_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_dynamic_cast)); } -#line 8150 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8220 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 592: -#line 3315 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3385 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_const_cast)); +} +#line 8228 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 593: +#line 3389 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_reinterpret_cast)); +} +#line 8236 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 594: +#line 3393 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // A constructor call. CPPType *type = (yyvsp[-3].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); @@ -8160,11 +8246,11 @@ yyreduce: assert(type != NULL); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8164 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8250 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 593: -#line 3325 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 595: +#line 3403 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // Aggregate initialization. CPPType *type = (yyvsp[-3].u.identifier)->find_type(current_scope, global_scope, false, current_lexer); @@ -8174,143 +8260,143 @@ yyreduce: assert(type != NULL); (yyval.u.expr) = new CPPExpression(CPPExpression::aggregate_init_op(type, (yyvsp[-1].u.expr))); } -#line 8178 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8264 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 594: -#line 3335 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 596: +#line 3413 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8188 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8274 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 595: -#line 3341 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 597: +#line 3419 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_char)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8198 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8284 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 596: -#line 3347 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 598: +#line 3425 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_wchar_t)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8208 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8294 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 597: -#line 3353 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 599: +#line 3431 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_char16_t)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8218 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8304 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 598: -#line 3359 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 600: +#line 3437 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_char32_t)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8228 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8314 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 599: -#line 3365 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 601: +#line 3443 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_bool)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8238 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8324 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 600: -#line 3371 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 602: +#line 3449 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_short)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8249 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8335 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 601: -#line 3378 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 603: +#line 3456 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_long)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8260 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8346 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 602: -#line 3385 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 604: +#line 3463 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_unsigned)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8271 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8357 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 603: -#line 3392 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 605: +#line 3470 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int, CPPSimpleType::F_signed)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8282 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8368 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 604: -#line 3399 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 606: +#line 3477 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_float)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8292 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8378 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 605: -#line 3405 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 607: +#line 3483 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_double)); (yyval.u.expr) = new CPPExpression(CPPExpression::construct_op(type, (yyvsp[-1].u.expr))); } -#line 8302 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8388 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 606: -#line 3411 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 608: +#line 3489 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func((yyvsp[-1].u.type))); } -#line 8310 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8396 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 607: -#line 3415 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 609: +#line 3493 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *arg = (yyvsp[-1].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (arg == (CPPDeclaration *)NULL) { @@ -8322,43 +8408,43 @@ yyreduce: (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func(arg->as_type())); } } -#line 8326 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 608: -#line 3427 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_ellipsis_func((yyvsp[-1].u.identifier))); -} -#line 8334 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 609: -#line 3431 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::alignof_func((yyvsp[-1].u.type))); -} -#line 8342 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8412 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 610: -#line 3435 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3505 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[0].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_ellipsis_func((yyvsp[-1].u.identifier))); } -#line 8350 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8420 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 611: -#line 3439 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3509 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[-3].u.type), (yyvsp[-1].u.expr))); + (yyval.u.expr) = new CPPExpression(CPPExpression::alignof_func((yyvsp[-1].u.type))); } -#line 8358 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8428 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 612: -#line 3443 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3513 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[0].u.type))); +} +#line 8436 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 613: +#line 3517 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[-3].u.type), (yyvsp[-1].u.expr))); +} +#line 8444 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 614: +#line 3521 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPIdentifier ident(""); ident.add_name("std"); @@ -8369,11 +8455,11 @@ yyreduce: } (yyval.u.expr) = new CPPExpression(CPPExpression::typeid_op((yyvsp[-1].u.type), std_type_info)); } -#line 8373 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8459 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 613: -#line 3454 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 615: +#line 3532 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPIdentifier ident(""); ident.add_name("std"); @@ -8384,564 +8470,564 @@ yyreduce: } (yyval.u.expr) = new CPPExpression(CPPExpression::typeid_op((yyvsp[-1].u.expr), std_type_info)); } -#line 8388 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 614: -#line 3465 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(UNARY_NOT, (yyvsp[0].u.expr)); -} -#line 8396 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 615: -#line 3469 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(UNARY_NEGATE, (yyvsp[0].u.expr)); -} -#line 8404 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8474 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 616: -#line 3473 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3543 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_MINUS, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_NOT, (yyvsp[0].u.expr)); } -#line 8412 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8482 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 617: -#line 3477 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3547 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_PLUS, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_NEGATE, (yyvsp[0].u.expr)); } -#line 8420 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8490 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 618: -#line 3481 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3551 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_STAR, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_MINUS, (yyvsp[0].u.expr)); } -#line 8428 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8498 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 619: -#line 3485 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3555 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_REF, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_PLUS, (yyvsp[0].u.expr)); } -#line 8436 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8506 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 620: -#line 3489 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3559 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('*', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_STAR, (yyvsp[0].u.expr)); } -#line 8444 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8514 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 621: -#line 3493 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3563 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('/', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_REF, (yyvsp[0].u.expr)); } -#line 8452 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8522 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 622: -#line 3497 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3567 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('%', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('*', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8460 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8530 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 623: -#line 3501 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3571 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('+', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('/', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8468 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8538 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 624: -#line 3505 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3575 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('-', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('%', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8476 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8546 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 625: -#line 3509 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3579 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('|', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('+', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8484 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8554 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 626: -#line 3513 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3583 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('^', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('-', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8492 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8562 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 627: -#line 3517 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3587 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('&', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('|', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8500 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8570 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 628: -#line 3521 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3591 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(OROR, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('^', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8508 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8578 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 629: -#line 3525 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3595 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(ANDAND, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('&', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8516 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8586 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 630: -#line 3529 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3599 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(EQCOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(OROR, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8524 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8594 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 631: -#line 3533 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3603 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(NECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(ANDAND, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8532 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8602 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 632: -#line 3537 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3607 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(LECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(EQCOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8540 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8610 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 633: -#line 3541 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3611 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(GECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(NECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8548 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8618 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 634: -#line 3545 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3615 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('<', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(LECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8556 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8626 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 635: -#line 3549 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3619 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('>', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(GECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8564 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8634 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 636: -#line 3553 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3623 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(LSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('<', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8572 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8642 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 637: -#line 3557 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3627 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(RSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('>', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8580 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8650 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 638: -#line 3561 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3631 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('?', (yyvsp[-4].u.expr), (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(LSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8588 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8658 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 639: -#line 3565 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3635 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('[', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); + (yyval.u.expr) = new CPPExpression(RSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8596 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8666 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 640: -#line 3569 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3639 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('f', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); + (yyval.u.expr) = new CPPExpression('?', (yyvsp[-4].u.expr), (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8604 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8674 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 641: -#line 3573 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3643 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('f', (yyvsp[-2].u.expr)); + (yyval.u.expr) = new CPPExpression('[', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); } -#line 8612 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8682 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 642: -#line 3577 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3647 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('.', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('f', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); } -#line 8620 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8690 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 643: -#line 3581 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3651 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(POINTSAT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('f', (yyvsp[-2].u.expr)); } -#line 8628 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8698 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 644: -#line 3585 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3655 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[-1].u.expr); + (yyval.u.expr) = new CPPExpression('.', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8636 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8706 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 645: -#line 3592 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3659 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].u.integer)); + (yyval.u.expr) = new CPPExpression(POINTSAT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 8644 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8714 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 646: -#line 3596 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3663 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(true); + (yyval.u.expr) = (yyvsp[-1].u.expr); } -#line 8652 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8722 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 647: -#line 3600 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(false); -} -#line 8660 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 648: -#line 3604 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3670 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = new CPPExpression((yyvsp[0].u.integer)); } -#line 8668 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8730 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 648: +#line 3674 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(true); +} +#line 8738 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 649: -#line 3608 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3678 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].u.real)); + (yyval.u.expr) = new CPPExpression(false); } -#line 8676 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8746 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 650: -#line 3612 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3682 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = new CPPExpression((yyvsp[0].u.integer)); } -#line 8684 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8754 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 651: -#line 3616 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3686 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = new CPPExpression((yyvsp[0].u.real)); } -#line 8692 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8762 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 652: -#line 3620 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3690 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].u.identifier), current_scope, global_scope, current_lexer); + (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 8700 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8770 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 653: -#line 3624 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3694 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = (yyvsp[0].u.expr); +} +#line 8778 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 654: +#line 3698 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression((yyvsp[0].u.identifier), current_scope, global_scope, current_lexer); +} +#line 8786 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 655: +#line 3702 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // A variable named "final". C++11 explicitly permits this. CPPIdentifier *ident = new CPPIdentifier("final", (yylsp[0])); (yyval.u.expr) = new CPPExpression(ident, current_scope, global_scope, current_lexer); } -#line 8710 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8796 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 654: -#line 3630 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 656: +#line 3708 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // A variable named "override". C++11 explicitly permits this. CPPIdentifier *ident = new CPPIdentifier("override", (yylsp[0])); (yyval.u.expr) = new CPPExpression(ident, current_scope, global_scope, current_lexer); } -#line 8720 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8806 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 655: -#line 3636 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 657: +#line 3714 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = new CPPExpression(CPPExpression::get_nullptr()); } -#line 8728 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8814 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 656: -#line 3640 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 658: +#line 3718 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[-6].u.closure_type)->_flags = (yyvsp[-4].u.integer); (yyvsp[-6].u.closure_type)->_return_type = (yyvsp[-3].u.type); (yyval.u.expr) = new CPPExpression(CPPExpression::lambda((yyvsp[-6].u.closure_type))); } -#line 8738 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8824 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 657: -#line 3646 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 659: +#line 3724 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyvsp[-9].u.closure_type)->_parameters = (yyvsp[-6].u.param_list); (yyvsp[-9].u.closure_type)->_flags = (yyvsp[-4].u.integer); (yyvsp[-9].u.closure_type)->_return_type = (yyvsp[-3].u.type); (yyval.u.expr) = new CPPExpression(CPPExpression::lambda((yyvsp[-9].u.closure_type))); } -#line 8749 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 658: -#line 3653 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_HAS_VIRTUAL_DESTRUCTOR, (yyvsp[-1].u.type))); -} -#line 8757 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 659: -#line 3657 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_ABSTRACT, (yyvsp[-1].u.type))); -} -#line 8765 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8835 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 660: -#line 3661 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3731 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CLASS, (yyvsp[-3].u.type), (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_HAS_VIRTUAL_DESTRUCTOR, (yyvsp[-1].u.type))); } -#line 8773 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8843 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 661: -#line 3665 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3735 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CLASS, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_ABSTRACT, (yyvsp[-1].u.type))); } -#line 8781 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8851 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 662: -#line 3669 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3739 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CONSTRUCTIBLE, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CLASS, (yyvsp[-3].u.type), (yyvsp[-1].u.type))); } -#line 8789 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8859 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 663: -#line 3673 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3743 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CONSTRUCTIBLE, (yyvsp[-3].u.type), (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CLASS, (yyvsp[-1].u.type))); } -#line 8797 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8867 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 664: -#line 3677 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3747 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CONVERTIBLE_TO, (yyvsp[-3].u.type), (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CONSTRUCTIBLE, (yyvsp[-1].u.type))); } -#line 8805 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8875 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 665: -#line 3681 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3751 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_DESTRUCTIBLE, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CONSTRUCTIBLE, (yyvsp[-3].u.type), (yyvsp[-1].u.type))); } -#line 8813 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8883 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 666: -#line 3685 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3755 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_EMPTY, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_CONVERTIBLE_TO, (yyvsp[-3].u.type), (yyvsp[-1].u.type))); } -#line 8821 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8891 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 667: -#line 3689 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3759 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_ENUM, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_DESTRUCTIBLE, (yyvsp[-1].u.type))); } -#line 8829 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8899 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 668: -#line 3693 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3763 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_FINAL, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_EMPTY, (yyvsp[-1].u.type))); } -#line 8837 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8907 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 669: -#line 3697 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3767 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_FUNDAMENTAL, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_ENUM, (yyvsp[-1].u.type))); } -#line 8845 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8915 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 670: -#line 3701 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3771 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_POD, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_FINAL, (yyvsp[-1].u.type))); } -#line 8853 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8923 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 671: -#line 3705 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3775 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_POLYMORPHIC, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_FUNDAMENTAL, (yyvsp[-1].u.type))); } -#line 8861 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8931 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 672: -#line 3709 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3779 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_STANDARD_LAYOUT, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_POD, (yyvsp[-1].u.type))); } -#line 8869 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8939 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 673: -#line 3713 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3783 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_TRIVIAL, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_POLYMORPHIC, (yyvsp[-1].u.type))); } -#line 8877 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8947 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 674: -#line 3717 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3787 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_UNION, (yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_STANDARD_LAYOUT, (yyvsp[-1].u.type))); } -#line 8885 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8955 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 675: -#line 3731 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3791 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_TRIVIAL, (yyvsp[-1].u.type))); } -#line 8893 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8963 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 676: -#line 3735 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3795 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-2].u.type), (yyvsp[0].u.expr))); + (yyval.u.expr) = new CPPExpression(CPPExpression::type_trait(KW_IS_UNION, (yyvsp[-1].u.type))); } -#line 8901 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8971 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 677: -#line 3739 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3809 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_static_cast)); + (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 8909 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8979 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 678: -#line 3743 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3813 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_dynamic_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-2].u.type), (yyvsp[0].u.expr))); } -#line 8917 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8987 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 679: -#line 3747 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3817 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_const_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_static_cast)); } -#line 8925 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 8995 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 680: -#line 3751 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3821 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_reinterpret_cast)); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_dynamic_cast)); } -#line 8933 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9003 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 681: -#line 3755 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3825 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func((yyvsp[-1].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_const_cast)); } -#line 8941 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9011 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 682: -#line 3759 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3829 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::typecast_op((yyvsp[-4].u.type), (yyvsp[-1].u.expr), CPPExpression::T_reinterpret_cast)); +} +#line 9019 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 683: +#line 3833 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func((yyvsp[-1].u.type))); +} +#line 9027 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 684: +#line 3837 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPDeclaration *arg = (yyvsp[-1].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); if (arg == (CPPDeclaration *)NULL) { @@ -8953,43 +9039,43 @@ yyreduce: (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_func(arg->as_type())); } } -#line 8957 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 683: -#line 3771 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_ellipsis_func((yyvsp[-1].u.identifier))); -} -#line 8965 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 684: -#line 3775 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::alignof_func((yyvsp[-1].u.type))); -} -#line 8973 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9043 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 685: -#line 3779 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3849 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[0].u.type))); + (yyval.u.expr) = new CPPExpression(CPPExpression::sizeof_ellipsis_func((yyvsp[-1].u.identifier))); } -#line 8981 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9051 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 686: -#line 3783 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3853 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[-3].u.type), (yyvsp[-1].u.expr))); + (yyval.u.expr) = new CPPExpression(CPPExpression::alignof_func((yyvsp[-1].u.type))); } -#line 8989 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9059 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 687: -#line 3787 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3857 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[0].u.type))); +} +#line 9067 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 688: +#line 3861 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(CPPExpression::new_op((yyvsp[-3].u.type), (yyvsp[-1].u.expr))); +} +#line 9075 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 689: +#line 3865 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPIdentifier ident(""); ident.add_name("std"); @@ -9000,11 +9086,11 @@ yyreduce: } (yyval.u.expr) = new CPPExpression(CPPExpression::typeid_op((yyvsp[-1].u.type), std_type_info)); } -#line 9004 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9090 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 688: -#line 3798 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 690: +#line 3876 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPIdentifier ident(""); ident.add_name("std"); @@ -9015,409 +9101,409 @@ yyreduce: } (yyval.u.expr) = new CPPExpression(CPPExpression::typeid_op((yyvsp[-1].u.expr), std_type_info)); } -#line 9019 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 689: -#line 3809 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(UNARY_NOT, (yyvsp[0].u.expr)); -} -#line 9027 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 690: -#line 3813 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(UNARY_NEGATE, (yyvsp[0].u.expr)); -} -#line 9035 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9105 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 691: -#line 3817 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3887 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_MINUS, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_NOT, (yyvsp[0].u.expr)); } -#line 9043 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9113 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 692: -#line 3821 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3891 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_PLUS, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_NEGATE, (yyvsp[0].u.expr)); } -#line 9051 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9121 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 693: -#line 3825 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3895 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(UNARY_REF, (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_MINUS, (yyvsp[0].u.expr)); } -#line 9059 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9129 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 694: -#line 3829 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3899 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('*', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_PLUS, (yyvsp[0].u.expr)); } -#line 9067 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9137 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 695: -#line 3833 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3903 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('/', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(UNARY_REF, (yyvsp[0].u.expr)); } -#line 9075 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9145 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 696: -#line 3837 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3907 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('%', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('*', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9083 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9153 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 697: -#line 3841 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3911 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('+', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('/', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9091 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9161 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 698: -#line 3845 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3915 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('-', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('%', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9099 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9169 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 699: -#line 3849 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3919 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('|', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('+', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9107 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9177 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 700: -#line 3853 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3923 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('^', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('-', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9115 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9185 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 701: -#line 3857 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3927 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('&', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('|', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9123 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9193 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 702: -#line 3861 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3931 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(OROR, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('^', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9131 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9201 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 703: -#line 3865 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3935 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(ANDAND, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('&', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9139 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9209 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 704: -#line 3869 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3939 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(EQCOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(OROR, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9147 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9217 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 705: -#line 3873 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3943 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(NECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(ANDAND, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9155 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9225 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 706: -#line 3877 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3947 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(LECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(EQCOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9163 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9233 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 707: -#line 3881 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3951 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(GECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(NECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9171 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9241 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 708: -#line 3885 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3955 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('<', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(LECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9179 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9249 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 709: -#line 3889 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3959 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('>', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(GECOMPARE, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9187 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9257 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 710: -#line 3893 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3963 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(LSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('<', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9195 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9265 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 711: -#line 3897 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3967 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(RSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('>', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9203 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9273 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 712: -#line 3901 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3971 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('?', (yyvsp[-4].u.expr), (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression(LSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9211 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9281 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 713: -#line 3905 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3975 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('[', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); + (yyval.u.expr) = new CPPExpression(RSHIFT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9219 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9289 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 714: -#line 3909 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3979 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('f', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); + (yyval.u.expr) = new CPPExpression('?', (yyvsp[-4].u.expr), (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9227 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9297 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 715: -#line 3913 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3983 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('f', (yyvsp[-2].u.expr)); + (yyval.u.expr) = new CPPExpression('[', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); } -#line 9235 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9305 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 716: -#line 3917 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3987 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression('.', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('f', (yyvsp[-3].u.expr), (yyvsp[-1].u.expr)); } -#line 9243 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9313 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 717: -#line 3921 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3991 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(POINTSAT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); + (yyval.u.expr) = new CPPExpression('f', (yyvsp[-2].u.expr)); } -#line 9251 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9321 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 718: -#line 3925 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3995 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[-1].u.expr); + (yyval.u.expr) = new CPPExpression('.', (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9259 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9329 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 719: -#line 3932 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 3999 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].u.integer)); + (yyval.u.expr) = new CPPExpression(POINTSAT, (yyvsp[-2].u.expr), (yyvsp[0].u.expr)); } -#line 9267 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9337 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 720: -#line 3936 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4003 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression(true); + (yyval.u.expr) = (yyvsp[-1].u.expr); } -#line 9275 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9345 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 721: -#line 3940 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(false); -} -#line 9283 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 722: -#line 3944 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4010 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.expr) = new CPPExpression((yyvsp[0].u.integer)); } -#line 9291 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9353 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 722: +#line 4014 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression(true); +} +#line 9361 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 723: -#line 3948 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4018 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].u.real)); + (yyval.u.expr) = new CPPExpression(false); } -#line 9299 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9369 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 724: -#line 3952 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4022 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = new CPPExpression((yyvsp[0].u.integer)); } -#line 9307 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9377 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 725: -#line 3956 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4026 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.expr) = new CPPExpression((yyvsp[0].u.real)); } -#line 9315 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9385 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 726: -#line 3960 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4030 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].u.identifier), current_scope, global_scope, current_lexer); + (yyval.u.expr) = (yyvsp[0].u.expr); } -#line 9323 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9393 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 727: -#line 3964 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4034 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = (yyvsp[0].u.expr); +} +#line 9401 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 728: +#line 4038 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression((yyvsp[0].u.identifier), current_scope, global_scope, current_lexer); +} +#line 9409 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 729: +#line 4042 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // A variable named "final". C++11 explicitly permits this. CPPIdentifier *ident = new CPPIdentifier("final", (yylsp[0])); (yyval.u.expr) = new CPPExpression(ident, current_scope, global_scope, current_lexer); } -#line 9333 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9419 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 728: -#line 3970 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 730: +#line 4048 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // A variable named "override". C++11 explicitly permits this. CPPIdentifier *ident = new CPPIdentifier("override", (yylsp[0])); (yyval.u.expr) = new CPPExpression(ident, current_scope, global_scope, current_lexer); } -#line 9343 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 729: -#line 3976 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.expr) = new CPPExpression(CPPExpression::get_nullptr()); -} -#line 9351 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 730: -#line 3984 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.closure_type) = new CPPClosureType(); -} -#line 9359 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9429 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 731: -#line 3988 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4054 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.closure_type) = new CPPClosureType(CPPClosureType::CT_by_value); + (yyval.u.expr) = new CPPExpression(CPPExpression::get_nullptr()); } -#line 9367 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9437 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 732: -#line 3992 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4062 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.closure_type) = new CPPClosureType(CPPClosureType::CT_by_reference); + (yyval.u.closure_type) = new CPPClosureType(); } -#line 9375 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9445 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 733: -#line 3996 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4066 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.closure_type) = new CPPClosureType(CPPClosureType::CT_by_value); +} +#line 9453 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 734: +#line 4070 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.closure_type) = new CPPClosureType(CPPClosureType::CT_by_reference); +} +#line 9461 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 735: +#line 4074 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.closure_type) = new CPPClosureType(); (yyvsp[-1].u.capture)->_initializer = (yyvsp[0].u.expr); (yyval.u.closure_type)->_captures.push_back(*(yyvsp[-1].u.capture)); delete (yyvsp[-1].u.capture); } -#line 9386 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9472 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 734: -#line 4003 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 736: +#line 4081 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.closure_type) = (yyvsp[-3].u.closure_type); (yyvsp[-1].u.capture)->_initializer = (yyvsp[0].u.expr); (yyval.u.closure_type)->_captures.push_back(*(yyvsp[-1].u.capture)); delete (yyvsp[-1].u.capture); } -#line 9397 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9483 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 735: -#line 4013 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 737: +#line 4091 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.capture) = new CPPClosureType::Capture; (yyval.u.capture)->_name = (yyvsp[0].u.identifier)->get_simple_name(); (yyval.u.capture)->_type = CPPClosureType::CT_by_reference; } -#line 9407 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9493 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 736: -#line 4019 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 738: +#line 4097 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.capture) = new CPPClosureType::Capture; (yyval.u.capture)->_name = (yyvsp[-1].u.identifier)->get_simple_name(); (yyval.u.capture)->_type = CPPClosureType::CT_by_reference; } -#line 9417 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9503 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 737: -#line 4025 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 739: +#line 4103 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.capture) = new CPPClosureType::Capture; (yyval.u.capture)->_name = (yyvsp[0].u.identifier)->get_simple_name(); @@ -9427,11 +9513,11 @@ yyreduce: (yyval.u.capture)->_type = CPPClosureType::CT_by_value; } } -#line 9431 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9517 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 738: -#line 4035 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 740: +#line 4113 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.capture) = new CPPClosureType::Capture; (yyval.u.capture)->_name = (yyvsp[0].u.identifier)->get_simple_name(); @@ -9440,11 +9526,11 @@ yyreduce: yywarning("only capture name 'this' may be preceded by an asterisk", (yylsp[0])); } } -#line 9444 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9530 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 739: -#line 4047 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 741: +#line 4125 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPType *type = (yyvsp[0].u.identifier)->find_type(current_scope, global_scope, true); if (type == NULL) { @@ -9452,177 +9538,177 @@ yyreduce: } (yyval.u.type) = type; } -#line 9456 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9542 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 740: -#line 4055 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 742: +#line 4133 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.type) = CPPType::new_type(new CPPTBDType((yyvsp[0].u.identifier))); } -#line 9464 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9550 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 741: -#line 4059 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 743: +#line 4137 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { CPPClassTemplateParameter *ctp = new CPPClassTemplateParameter((yyvsp[-1].u.identifier)); ctp->_packed = true; (yyval.u.type) = CPPType::new_type(ctp); } -#line 9474 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 742: -#line 4089 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.identifier) = (yyvsp[0].u.identifier); -} -#line 9482 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 743: -#line 4093 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.identifier) = (yyvsp[0].u.identifier); -} -#line 9490 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9560 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 744: -#line 4097 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4167 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.identifier) = (yyvsp[0].u.identifier); } -#line 9498 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9568 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 745: -#line 4101 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4171 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = new CPPIdentifier("final", (yylsp[0])); + (yyval.u.identifier) = (yyvsp[0].u.identifier); } -#line 9506 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9576 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 746: -#line 4105 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4175 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = new CPPIdentifier("override", (yylsp[0])); + (yyval.u.identifier) = (yyvsp[0].u.identifier); } -#line 9514 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9584 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 747: -#line 4109 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4179 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.identifier) = new CPPIdentifier("final", (yylsp[0])); +} +#line 9592 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 748: +#line 4183 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.identifier) = new CPPIdentifier("override", (yylsp[0])); +} +#line 9600 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 749: +#line 4187 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // This is not a keyword in Python, so it is useful to be able to use this // in MAKE_PROPERTY definitions, etc. (yyval.u.identifier) = new CPPIdentifier("signed", (yylsp[0])); } -#line 9524 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 748: -#line 4115 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.identifier) = new CPPIdentifier("float", (yylsp[0])); -} -#line 9532 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ - break; - - case 749: -#line 4119 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ - { - (yyval.u.identifier) = new CPPIdentifier("public", (yylsp[0])); -} -#line 9540 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9610 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 750: -#line 4123 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4193 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = new CPPIdentifier("private", (yylsp[0])); + (yyval.u.identifier) = new CPPIdentifier("float", (yylsp[0])); } -#line 9548 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9618 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 751: -#line 4127 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4197 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = new CPPIdentifier("static", (yylsp[0])); + (yyval.u.identifier) = new CPPIdentifier("public", (yylsp[0])); } -#line 9556 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9626 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 752: -#line 4131 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4201 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = new CPPIdentifier("default", (yylsp[0])); + (yyval.u.identifier) = new CPPIdentifier("private", (yylsp[0])); } -#line 9564 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9634 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 753: -#line 4142 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4205 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = (yyvsp[0].u.identifier); + (yyval.u.identifier) = new CPPIdentifier("static", (yylsp[0])); } -#line 9572 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9642 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 754: -#line 4146 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4209 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = (yyvsp[0].u.identifier); + (yyval.u.identifier) = new CPPIdentifier("default", (yylsp[0])); } -#line 9580 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9650 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 755: -#line 4150 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4220 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { (yyval.u.identifier) = (yyvsp[0].u.identifier); } -#line 9588 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9658 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 756: -#line 4154 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4224 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.identifier) = new CPPIdentifier("override", (yylsp[0])); + (yyval.u.identifier) = (yyvsp[0].u.identifier); } -#line 9596 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9666 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 757: -#line 4162 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4228 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = new CPPExpression((yyvsp[0].str)); + (yyval.u.identifier) = (yyvsp[0].u.identifier); } -#line 9604 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9674 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 758: -#line 4166 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4232 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { - (yyval.u.expr) = (yyvsp[0].u.expr); + (yyval.u.identifier) = new CPPIdentifier("override", (yylsp[0])); } -#line 9612 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9682 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; case 759: -#line 4170 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ +#line 4240 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = new CPPExpression((yyvsp[0].str)); +} +#line 9690 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 760: +#line 4244 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + { + (yyval.u.expr) = (yyvsp[0].u.expr); +} +#line 9698 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ + break; + + case 761: +#line 4248 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // The right string takes on the literal type of the left. (yyval.u.expr) = (yyvsp[-1].u.expr); (yyval.u.expr)->_str += (yyvsp[0].str); } -#line 9622 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9708 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; - case 760: -#line 4176 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ + case 762: +#line 4254 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ { // We have to check that the two literal types match up. (yyval.u.expr) = (yyvsp[-1].u.expr); @@ -9631,11 +9717,11 @@ yyreduce: } (yyval.u.expr)->_str += (yyvsp[0].u.expr)->_str; } -#line 9635 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9721 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ break; -#line 9639 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ +#line 9725 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/dtool/src/cppparser/cppBison.h.prebuilt b/dtool/src/cppparser/cppBison.h.prebuilt index cc8062241a..a2ec1fca8c 100644 --- a/dtool/src/cppparser/cppBison.h.prebuilt +++ b/dtool/src/cppparser/cppBison.h.prebuilt @@ -143,51 +143,52 @@ extern int cppyydebug; KW_IS_TRIVIAL = 353, KW_IS_UNION = 354, KW_LONG = 355, - KW_MAKE_MAP_PROPERTY = 356, - KW_MAKE_PROPERTY = 357, - KW_MAKE_PROPERTY2 = 358, - KW_MAKE_SEQ = 359, - KW_MAKE_SEQ_PROPERTY = 360, - KW_MUTABLE = 361, - KW_NAMESPACE = 362, - KW_NEW = 363, - KW_NOEXCEPT = 364, - KW_NULLPTR = 365, - KW_OPERATOR = 366, - KW_OVERRIDE = 367, - KW_PRIVATE = 368, - KW_PROTECTED = 369, - KW_PUBLIC = 370, - KW_REGISTER = 371, - KW_REINTERPRET_CAST = 372, - KW_RETURN = 373, - KW_SHORT = 374, - KW_SIGNED = 375, - KW_SIZEOF = 376, - KW_STATIC = 377, - KW_STATIC_ASSERT = 378, - KW_STATIC_CAST = 379, - KW_STRUCT = 380, - KW_TEMPLATE = 381, - KW_THREAD_LOCAL = 382, - KW_THROW = 383, - KW_TRUE = 384, - KW_TRY = 385, - KW_TYPEDEF = 386, - KW_TYPEID = 387, - KW_TYPENAME = 388, - KW_UNDERLYING_TYPE = 389, - KW_UNION = 390, - KW_UNSIGNED = 391, - KW_USING = 392, - KW_VIRTUAL = 393, - KW_VOID = 394, - KW_VOLATILE = 395, - KW_WCHAR_T = 396, - KW_WHILE = 397, - START_CPP = 398, - START_CONST_EXPR = 399, - START_TYPE = 400 + KW_MAKE_MAP_KEYS_SEQ = 356, + KW_MAKE_MAP_PROPERTY = 357, + KW_MAKE_PROPERTY = 358, + KW_MAKE_PROPERTY2 = 359, + KW_MAKE_SEQ = 360, + KW_MAKE_SEQ_PROPERTY = 361, + KW_MUTABLE = 362, + KW_NAMESPACE = 363, + KW_NEW = 364, + KW_NOEXCEPT = 365, + KW_NULLPTR = 366, + KW_OPERATOR = 367, + KW_OVERRIDE = 368, + KW_PRIVATE = 369, + KW_PROTECTED = 370, + KW_PUBLIC = 371, + KW_REGISTER = 372, + KW_REINTERPRET_CAST = 373, + KW_RETURN = 374, + KW_SHORT = 375, + KW_SIGNED = 376, + KW_SIZEOF = 377, + KW_STATIC = 378, + KW_STATIC_ASSERT = 379, + KW_STATIC_CAST = 380, + KW_STRUCT = 381, + KW_TEMPLATE = 382, + KW_THREAD_LOCAL = 383, + KW_THROW = 384, + KW_TRUE = 385, + KW_TRY = 386, + KW_TYPEDEF = 387, + KW_TYPEID = 388, + KW_TYPENAME = 389, + KW_UNDERLYING_TYPE = 390, + KW_UNION = 391, + KW_UNSIGNED = 392, + KW_USING = 393, + KW_VIRTUAL = 394, + KW_VOID = 395, + KW_VOLATILE = 396, + KW_WCHAR_T = 397, + KW_WHILE = 398, + START_CPP = 399, + START_CONST_EXPR = 400, + START_TYPE = 401 }; #endif /* Tokens. */ @@ -289,51 +290,52 @@ extern int cppyydebug; #define KW_IS_TRIVIAL 353 #define KW_IS_UNION 354 #define KW_LONG 355 -#define KW_MAKE_MAP_PROPERTY 356 -#define KW_MAKE_PROPERTY 357 -#define KW_MAKE_PROPERTY2 358 -#define KW_MAKE_SEQ 359 -#define KW_MAKE_SEQ_PROPERTY 360 -#define KW_MUTABLE 361 -#define KW_NAMESPACE 362 -#define KW_NEW 363 -#define KW_NOEXCEPT 364 -#define KW_NULLPTR 365 -#define KW_OPERATOR 366 -#define KW_OVERRIDE 367 -#define KW_PRIVATE 368 -#define KW_PROTECTED 369 -#define KW_PUBLIC 370 -#define KW_REGISTER 371 -#define KW_REINTERPRET_CAST 372 -#define KW_RETURN 373 -#define KW_SHORT 374 -#define KW_SIGNED 375 -#define KW_SIZEOF 376 -#define KW_STATIC 377 -#define KW_STATIC_ASSERT 378 -#define KW_STATIC_CAST 379 -#define KW_STRUCT 380 -#define KW_TEMPLATE 381 -#define KW_THREAD_LOCAL 382 -#define KW_THROW 383 -#define KW_TRUE 384 -#define KW_TRY 385 -#define KW_TYPEDEF 386 -#define KW_TYPEID 387 -#define KW_TYPENAME 388 -#define KW_UNDERLYING_TYPE 389 -#define KW_UNION 390 -#define KW_UNSIGNED 391 -#define KW_USING 392 -#define KW_VIRTUAL 393 -#define KW_VOID 394 -#define KW_VOLATILE 395 -#define KW_WCHAR_T 396 -#define KW_WHILE 397 -#define START_CPP 398 -#define START_CONST_EXPR 399 -#define START_TYPE 400 +#define KW_MAKE_MAP_KEYS_SEQ 356 +#define KW_MAKE_MAP_PROPERTY 357 +#define KW_MAKE_PROPERTY 358 +#define KW_MAKE_PROPERTY2 359 +#define KW_MAKE_SEQ 360 +#define KW_MAKE_SEQ_PROPERTY 361 +#define KW_MUTABLE 362 +#define KW_NAMESPACE 363 +#define KW_NEW 364 +#define KW_NOEXCEPT 365 +#define KW_NULLPTR 366 +#define KW_OPERATOR 367 +#define KW_OVERRIDE 368 +#define KW_PRIVATE 369 +#define KW_PROTECTED 370 +#define KW_PUBLIC 371 +#define KW_REGISTER 372 +#define KW_REINTERPRET_CAST 373 +#define KW_RETURN 374 +#define KW_SHORT 375 +#define KW_SIGNED 376 +#define KW_SIZEOF 377 +#define KW_STATIC 378 +#define KW_STATIC_ASSERT 379 +#define KW_STATIC_CAST 380 +#define KW_STRUCT 381 +#define KW_TEMPLATE 382 +#define KW_THREAD_LOCAL 383 +#define KW_THROW 384 +#define KW_TRUE 385 +#define KW_TRY 386 +#define KW_TYPEDEF 387 +#define KW_TYPEID 388 +#define KW_TYPENAME 389 +#define KW_UNDERLYING_TYPE 390 +#define KW_UNION 391 +#define KW_UNSIGNED 392 +#define KW_USING 393 +#define KW_VIRTUAL 394 +#define KW_VOID 395 +#define KW_VOLATILE 396 +#define KW_WCHAR_T 397 +#define KW_WHILE 398 +#define START_CPP 399 +#define START_CONST_EXPR 400 +#define START_TYPE 401 /* Value type. */ diff --git a/dtool/src/cppparser/cppBison.yxx b/dtool/src/cppparser/cppBison.yxx index 1bf3f3860a..68f4f96706 100644 --- a/dtool/src/cppparser/cppBison.yxx +++ b/dtool/src/cppparser/cppBison.yxx @@ -304,6 +304,7 @@ pop_struct() { %token KW_IS_TRIVIAL %token KW_IS_UNION %token KW_LONG +%token KW_MAKE_MAP_KEYS_SEQ %token KW_MAKE_MAP_PROPERTY %token KW_MAKE_PROPERTY %token KW_MAKE_PROPERTY2 @@ -680,6 +681,49 @@ declaration: make_property->_del_function = deleter->as_function_group(); } + current_scope->add_declaration(make_property, global_scope, current_lexer, @1); + } +} + | KW_MAKE_SEQ_PROPERTY '(' name ',' IDENTIFIER ',' IDENTIFIER ',' IDENTIFIER ',' IDENTIFIER ',' IDENTIFIER ')' ';' +{ + CPPDeclaration *length_getter = $5->find_symbol(current_scope, global_scope, current_lexer); + if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid length method: " + $5->get_fully_scoped_name(), @5); + length_getter = NULL; + } + + CPPDeclaration *getter = $7->find_symbol(current_scope, global_scope, current_lexer); + if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("Reference to non-existent or invalid getter: " + $7->get_fully_scoped_name(), @7); + getter = nullptr; + } + + if (getter != nullptr && length_getter != nullptr) { + CPPMakeProperty *make_property = new CPPMakeProperty($3, CPPMakeProperty::T_sequence, current_scope, @1.file); + make_property->_get_function = getter->as_function_group(); + make_property->_length_function = length_getter->as_function_group(); + + CPPDeclaration *setter = $9->find_symbol(current_scope, global_scope, current_lexer); + if (setter == nullptr || setter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("Reference to non-existent or invalid setter: " + $9->get_fully_scoped_name(), @9); + } else { + make_property->_set_function = setter->as_function_group(); + } + + CPPDeclaration *deleter = $11->find_symbol(current_scope, global_scope, current_lexer); + if (deleter == nullptr || deleter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid delete method: " + $11->get_fully_scoped_name(), @11); + } else { + make_property->_del_function = deleter->as_function_group(); + } + + CPPDeclaration *inserter = $13->find_symbol(current_scope, global_scope, current_lexer); + if (inserter == nullptr || inserter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid append method: " + $13->get_fully_scoped_name(), @13); + } else { + make_property->_insert_function = inserter->as_function_group(); + } + current_scope->add_declaration(make_property, global_scope, current_lexer, @1); } } @@ -751,6 +795,40 @@ declaration: current_scope->add_declaration(make_property, global_scope, current_lexer, @1); } +} + | KW_MAKE_MAP_KEYS_SEQ '(' name ',' IDENTIFIER ',' IDENTIFIER ')' ';' +{ + CPPDeclaration *length_getter = $5->find_symbol(current_scope, global_scope, current_lexer); + if (length_getter == nullptr || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid length method: " + $5->get_fully_scoped_name(), @5); + length_getter = nullptr; + } + + CPPDeclaration *getter = $7->find_symbol(current_scope, global_scope, current_lexer); + if (getter == nullptr || getter->get_subtype() != CPPDeclaration::ST_function_group) { + yyerror("reference to non-existent or invalid getter: " + $7->get_fully_scoped_name(), @7); + getter = nullptr; + } + + if (getter != nullptr && length_getter != nullptr) { + CPPMakeProperty *make_property = nullptr; + for (size_t i = 0; i < current_scope->_declarations.size(); ++i) { + make_property = current_scope->_declarations[i]->as_make_property(); + if (make_property != nullptr) { + if (make_property->get_fully_scoped_name() == $3->get_fully_scoped_name()) { + break; + } else { + make_property = nullptr; + } + } + } + if (make_property != nullptr) { + make_property->_get_key_function = getter->as_function_group(); + make_property->_length_function = length_getter->as_function_group(); + } else { + yyerror("reference to non-existent MAKE_MAP_PROPERTY: " + $3->get_fully_scoped_name(), @3); + } + } } | KW_MAKE_PROPERTY2 '(' name ',' IDENTIFIER ',' IDENTIFIER ')' ';' { diff --git a/dtool/src/cppparser/cppMakeProperty.cxx b/dtool/src/cppparser/cppMakeProperty.cxx index 745ae8a745..02e4f21c60 100644 --- a/dtool/src/cppparser/cppMakeProperty.cxx +++ b/dtool/src/cppparser/cppMakeProperty.cxx @@ -28,7 +28,9 @@ CPPMakeProperty(CPPIdentifier *ident, Type type, _get_function(nullptr), _set_function(nullptr), _clear_function(nullptr), - _del_function(nullptr) + _del_function(nullptr), + _insert_function(nullptr), + _get_key_function(nullptr) { _ident->_native_scope = current_scope; } @@ -96,6 +98,10 @@ output(ostream &out, int indent_level, CPPScope *scope, bool complete) const { out << ", " << _del_function->_name; } + if (_insert_function != NULL) { + out << ", " << _insert_function->_name; + } + out << ");"; } diff --git a/dtool/src/cppparser/cppMakeProperty.h b/dtool/src/cppparser/cppMakeProperty.h index 52ba3641bf..cd364b30ec 100644 --- a/dtool/src/cppparser/cppMakeProperty.h +++ b/dtool/src/cppparser/cppMakeProperty.h @@ -109,6 +109,8 @@ public: CPPFunctionGroup *_set_function; CPPFunctionGroup *_clear_function; CPPFunctionGroup *_del_function; + CPPFunctionGroup *_insert_function; + CPPFunctionGroup *_get_key_function; }; #endif diff --git a/dtool/src/cppparser/cppPreprocessor.cxx b/dtool/src/cppparser/cppPreprocessor.cxx index 6a24d9eb69..ecaecb98b6 100644 --- a/dtool/src/cppparser/cppPreprocessor.cxx +++ b/dtool/src/cppparser/cppPreprocessor.cxx @@ -2641,6 +2641,7 @@ check_keyword(const string &name) { if (name == "__is_trivial") return KW_IS_TRIVIAL; if (name == "__is_union") return KW_IS_UNION; if (name == "long") return KW_LONG; + if (name == "__make_map_keys_seq") return KW_MAKE_MAP_KEYS_SEQ; if (name == "__make_map_property") return KW_MAKE_MAP_PROPERTY; if (name == "__make_property") return KW_MAKE_PROPERTY; if (name == "__make_property2") return KW_MAKE_PROPERTY2; diff --git a/dtool/src/dtoolbase/dtoolbase.h b/dtool/src/dtoolbase/dtoolbase.h index 2029555e3b..3f8e07f998 100644 --- a/dtool/src/dtoolbase/dtoolbase.h +++ b/dtool/src/dtoolbase/dtoolbase.h @@ -465,6 +465,7 @@ typedef struct _object PyObject; #define MAKE_SEQ(seq_name, num_name, element_name) __make_seq(seq_name, num_name, element_name) #define MAKE_SEQ_PROPERTY(property_name, ...) __make_seq_property(property_name, __VA_ARGS__) #define MAKE_MAP_PROPERTY(property_name, ...) __make_map_property(property_name, __VA_ARGS__) +#define MAKE_MAP_KEYS_SEQ(property_name, ...) __make_map_keys_seq(property_name, __VA_ARGS__) #define EXTENSION(x) __extension x #define EXTEND __extension #else @@ -476,6 +477,7 @@ typedef struct _object PyObject; #define MAKE_SEQ(seq_name, num_name, element_name) #define MAKE_SEQ_PROPERTY(property_name, ...) #define MAKE_MAP_PROPERTY(property_name, ...) +#define MAKE_MAP_KEYS_SEQ(property_name, ...) #define EXTENSION(x) #define EXTEND #endif diff --git a/dtool/src/interrogate/interfaceMaker.cxx b/dtool/src/interrogate/interfaceMaker.cxx index 9cc7b96973..218affd565 100644 --- a/dtool/src/interrogate/interfaceMaker.cxx +++ b/dtool/src/interrogate/interfaceMaker.cxx @@ -90,6 +90,8 @@ Property(const InterrogateElement &ielement) : _has_function(nullptr), _clear_function(nullptr), _deleter(nullptr), + _inserter(nullptr), + _getkey_function(nullptr), _has_this(false) { } diff --git a/dtool/src/interrogate/interfaceMaker.h b/dtool/src/interrogate/interfaceMaker.h index 2dbea5921e..f6b4730609 100644 --- a/dtool/src/interrogate/interfaceMaker.h +++ b/dtool/src/interrogate/interfaceMaker.h @@ -132,6 +132,8 @@ public: Function *_has_function; Function *_clear_function; Function *_deleter; + Function *_inserter; + Function *_getkey_function; bool _has_this; }; typedef vector Properties; diff --git a/dtool/src/interrogate/interfaceMakerPythonNative.cxx b/dtool/src/interrogate/interfaceMakerPythonNative.cxx index ee1bf62a38..904df4c153 100644 --- a/dtool/src/interrogate/interfaceMakerPythonNative.cxx +++ b/dtool/src/interrogate/interfaceMakerPythonNative.cxx @@ -6391,6 +6391,8 @@ write_getset(ostream &out, Object *obj, Property *property) { FunctionRemap *len_remap = nullptr; if (property->_length_function != nullptr) { + assert(!property->_length_function->_remaps.empty()); + // This is actually a sequence. Wrap this with a special class. len_remap = property->_length_function->_remaps.front(); @@ -6416,6 +6418,7 @@ write_getset(ostream &out, Object *obj, Property *property) { } if (ielem.is_sequence()) { + assert(len_remap != nullptr); out << "/**\n" " * sequence getter for property " << ielem.get_scoped_name() << "\n" @@ -6543,6 +6546,35 @@ write_getset(ostream &out, Object *obj, Property *property) { out << " return -1;\n"; out << "}\n\n"; } + + // Finally, add the inserter, if one exists. + if (property->_inserter != nullptr) { + out << "static PyObject *Dtool_" + ClassName + "_" + ielem.get_name() + "_Sequence_insert(PyObject *self, size_t index, PyObject *arg) {\n"; + if (property->_has_this) { + out << " " << cClassName << " *local_this = NULL;\n"; + out << " if (!Dtool_Call_ExtractThisPointer_NonConst(self, Dtool_" << ClassName << ", (void **)&local_this, \"" + << classNameFromCppName(cClassName, false) << "." << ielem.get_name() << "\")) {\n"; + out << " return NULL;\n"; + out << " }\n\n"; + } + + std::set remaps; + remaps.insert(property->_inserter->_remaps.begin(), + property->_inserter->_remaps.end()); + + string expected_params; + write_function_forset(out, remaps, 2, 2, + expected_params, 2, true, true, AT_single_arg, + RF_pyobject | RF_err_null, false, false, "index"); + + out << " if (!_PyErr_OCCURRED()) {\n"; + out << " Dtool_Raise_BadArgumentsError(\n"; + output_quoted(out, 6, expected_params); + out << ");\n"; + out << " }\n"; + out << " return NULL;\n"; + out << "}\n\n"; + } } @@ -6674,7 +6706,7 @@ write_getset(ostream &out, Object *obj, Property *property) { remaps.insert(property->_setter_remaps.begin(), property->_setter_remaps.end()); - // We have to create an args tuple only to unpack it alter, ugh. + // We have to create an args tuple only to unpack it later, ugh. out << " PyObject *args = PyTuple_New(2);\n" << " PyTuple_SET_ITEM(args, 0, key);\n" << " PyTuple_SET_ITEM(args, 1, value);\n" @@ -6695,86 +6727,117 @@ write_getset(ostream &out, Object *obj, Property *property) { out << " return -1;\n"; out << "}\n\n"; } + + if (property->_getkey_function != nullptr) { + out << + "/**\n" + " * mapping key-getter for property " << ielem.get_scoped_name() << "\n" + " */\n" + "static PyObject *Dtool_" + ClassName + "_" + ielem.get_name() + "_Mapping_Getkey(PyObject *self, Py_ssize_t index) {\n"; + + if (property->_has_this) { + out << + " " << cClassName << " *local_this = NULL;\n" + " if (!Dtool_Call_ExtractThisPointer(self, Dtool_" << ClassName << ", (void **)&local_this)) {\n" + " return NULL;\n" + " }\n"; + } + + // We need to raise IndexError if we're out of bounds. + if (len_remap != nullptr) { + out << " if (index < 0 || index >= (Py_ssize_t)" + << len_remap->get_call_str("local_this", pexprs) << ") {\n"; + out << " PyErr_SetString(PyExc_IndexError, \"" << ClassName << "." << ielem.get_name() << "[] index out of range\");\n"; + out << " return NULL;\n"; + out << " }\n"; + } + + std::set remaps; + + // Extract only the getters that take one integral argument. + Function::Remaps::iterator it; + for (it = property->_getkey_function->_remaps.begin(); + it != property->_getkey_function->_remaps.end(); + ++it) { + FunctionRemap *remap = *it; + int min_num_args = remap->get_min_num_args(); + int max_num_args = remap->get_max_num_args(); + if (min_num_args <= 1 && max_num_args >= 1 && + TypeManager::is_integer(remap->_parameters[(size_t)remap->_has_this]._remap->get_new_type())) { + remaps.insert(remap); + } + } + + string expected_params; + write_function_forset(out, remaps, 1, 1, expected_params, 2, true, true, + AT_no_args, RF_pyobject | RF_err_null, false, true, "index"); + + out << " if (!_PyErr_OCCURRED()) {\n"; + out << " return Dtool_Raise_BadArgumentsError(\n"; + output_quoted(out, 6, expected_params); + out << ");\n" + " }\n" + "}\n\n"; + } } // Now write the actual getter wrapper. It will be a different wrapper - // depending on whether it's a mapping, sequence, or both. - if (ielem.is_mapping() && ielem.is_sequence()) { + // depending on whether it's a mapping or a sequence. + if (ielem.is_mapping()) { out << "static PyObject *Dtool_" + ClassName + "_" + ielem.get_name() + "_Getter(PyObject *self, void *) {\n"; if (property->_has_this) { - out << " nassertr(self != NULL, NULL);\n" - " Py_INCREF(self);\n"; - } else { - out << " Py_XINCREF(self);\n"; + out << " nassertr(self != NULL, NULL);\n"; } - out << " Dtool_SeqMapWrapper *wrap = PyObject_New(Dtool_SeqMapWrapper, &Dtool_SeqMapWrapper_Type);\n" - " wrap->_map._base._self = self;\n" - " wrap->_map._base._name = \"" << ClassName << "." << ielem.get_name() << "\";\n" - " wrap->_len_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Len;\n" - " wrap->_seq_getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Getitem;\n" - " wrap->_map._getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Getitem;\n"; + if (property->_setter_remaps.empty()) { + out << " Dtool_MappingWrapper *wrap = Dtool_NewMappingWrapper(self, \"" << ClassName << "." << ielem.get_name() << "\");\n"; + } else { + out << " Dtool_MappingWrapper *wrap = Dtool_NewMutableMappingWrapper(self, \"" << ClassName << "." << ielem.get_name() << "\");\n"; + } + out << " if (wrap != NULL) {\n" + " wrap->_getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Getitem;\n"; if (!property->_setter_remaps.empty()) { - out << " if (!((Dtool_PyInstDef *)self)->_is_const) {\n" - " wrap->_seq_setitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Setitem;\n" - " wrap->_map._setitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Setitem;\n" - " } else {\n" - " wrap->_seq_setitem_func = NULL;\n" - " wrap->_map._setitem_func = NULL;\n" - " }\n"; - } else { - out << " wrap->_seq_setitem_func = NULL;\n"; - out << " wrap->_map._setitem_func = NULL;\n"; + out << " if (!((Dtool_PyInstDef *)self)->_is_const) {\n"; + out << " wrap->_setitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Setitem;\n"; + out << " }\n"; } - out << " return (PyObject *)wrap;\n" + if (property->_length_function != nullptr) { + out << " wrap->_keys._len_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Len;\n"; + if (property->_getkey_function != nullptr) { + out << " wrap->_keys._getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Getkey;\n"; + } + } + out << " }\n" + " return (PyObject *)wrap;\n" "}\n\n"; - } else if (ielem.is_mapping()) { - out << "static PyObject *Dtool_" + ClassName + "_" + ielem.get_name() + "_Getter(PyObject *self, void *) {\n"; - if (property->_has_this) { - out << " nassertr(self != NULL, NULL);\n" - " Py_INCREF(self);\n"; - } else { - out << " Py_XINCREF(self);\n"; - } - out << " Dtool_MappingWrapper *wrap = PyObject_New(Dtool_MappingWrapper, &Dtool_MappingWrapper_Type);\n" - " wrap->_base._self = self;\n" - " wrap->_base._name = \"" << ClassName << "." << ielem.get_name() << "\";\n" - " wrap->_getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Getitem;\n"; - if (!property->_setter_remaps.empty()) { - out << " if (!((Dtool_PyInstDef *)self)->_is_const) {\n"; - out << " wrap->_setitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Mapping_Setitem;\n"; - out << " } else {\n"; - out << " wrap->_setitem_func = NULL;\n"; - out << " }\n"; - } else { - out << " wrap->_setitem_func = NULL;\n"; - } - out << " return (PyObject *)wrap;\n" - "}\n\n"; - } else if (ielem.is_sequence()) { out << "static PyObject *Dtool_" + ClassName + "_" + ielem.get_name() + "_Getter(PyObject *self, void *) {\n"; if (property->_has_this) { - out << " nassertr(self != NULL, NULL);\n" - " Py_INCREF(self);\n"; - } else { - out << " Py_XINCREF(self);\n"; + out << " nassertr(self != NULL, NULL);\n"; } - out << " Dtool_SequenceWrapper *wrap = PyObject_New(Dtool_SequenceWrapper, &Dtool_SequenceWrapper_Type);\n" - " wrap->_base._self = self;\n" - " wrap->_base._name = \"" << ClassName << "." << ielem.get_name() << "\";\n" - " wrap->_len_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Len;\n" - " wrap->_getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Getitem;\n"; - if (!property->_setter_remaps.empty()) { - out << " if (!((Dtool_PyInstDef *)self)->_is_const) {\n"; - out << " wrap->_setitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Setitem;\n"; - out << " } else {\n"; - out << " wrap->_setitem_func = NULL;\n"; - out << " }\n"; + if (property->_setter_remaps.empty()) { + out << + " Dtool_SequenceWrapper *wrap = Dtool_NewSequenceWrapper(self, \"" << ClassName << "." << ielem.get_name() << "\");\n" + " if (wrap != NULL) {\n" + " wrap->_len_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Len;\n" + " wrap->_getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Getitem;\n"; } else { - out << " wrap->_setitem_func = NULL;\n"; + out << + " Dtool_MutableSequenceWrapper *wrap = Dtool_NewMutableSequenceWrapper(self, \"" << ClassName << "." << ielem.get_name() << "\");\n" + " if (wrap != NULL) {\n" + " wrap->_len_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Len;\n" + " wrap->_getitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Getitem;\n"; + if (!property->_setter_remaps.empty()) { + out << " if (!((Dtool_PyInstDef *)self)->_is_const) {\n"; + out << " wrap->_setitem_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_Setitem;\n"; + if (property->_inserter != nullptr) { + out << " wrap->_insert_func = &Dtool_" << ClassName << "_" << ielem.get_name() << "_Sequence_insert;\n"; + } + out << " }\n"; + } } - out << " return (PyObject *)wrap;\n" + out << " }\n" + " return (PyObject *)wrap;\n" "}\n\n"; } else { @@ -7083,9 +7146,30 @@ record_property(const InterrogateType &itype, ElementIndex element_index) { } } - if (ielement.is_sequence()) { + if (ielement.is_sequence() || ielement.is_mapping()) { FunctionIndex func_index = ielement.get_length_function(); - property->_length_function = record_function(itype, func_index); + if (func_index != 0) { + property->_length_function = record_function(itype, func_index); + } + } + + if (ielement.is_sequence() && ielement.has_insert_function()) { + FunctionIndex func_index = ielement.get_insert_function(); + Function *insert_function = record_function(itype, func_index); + if (is_function_legal(insert_function)) { + property->_inserter = insert_function; + property->_has_this |= insert_function->_has_this; + } + } + + if (ielement.is_mapping() && ielement.has_getkey_function()) { + FunctionIndex func_index = ielement.get_getkey_function(); + assert(func_index != 0); + Function *getkey_function = record_function(itype, func_index); + if (is_function_legal(getkey_function)) { + property->_getkey_function = getkey_function; + property->_has_this |= getkey_function->_has_this; + } } return property; diff --git a/dtool/src/interrogate/interrogateBuilder.cxx b/dtool/src/interrogate/interrogateBuilder.cxx index a8fd7e1e57..6cbf8f02c0 100644 --- a/dtool/src/interrogate/interrogateBuilder.cxx +++ b/dtool/src/interrogate/interrogateBuilder.cxx @@ -1824,20 +1824,17 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP // If we have a length function (ie. this is a sequence property), we should // find the function that will give us the length. FunctionIndex length_function = 0; - if (make_property->_type & CPPMakeProperty::T_sequence) { + CPPFunctionGroup *fgroup = make_property->_length_function; + if (fgroup != nullptr) { CPPFunctionGroup::Instances::const_iterator fi; - CPPFunctionGroup *fgroup = make_property->_length_function; - if (fgroup != NULL) { - for (fi = fgroup->_instances.begin(); fi != fgroup->_instances.end(); ++fi) { - CPPInstance *function = (*fi); - CPPFunctionType *ftype = - function->_type->as_function_type(); - if (ftype != NULL) { - length_function = get_function(function, "", struct_type, - struct_type->get_scope(), 0); - if (length_function != 0) { - break; - } + for (fi = fgroup->_instances.begin(); fi != fgroup->_instances.end(); ++fi) { + CPPInstance *function = (*fi); + CPPFunctionType *ftype = function->_type->as_function_type(); + if (ftype != nullptr) { + length_function = get_function(function, "", struct_type, + struct_type->get_scope(), 0); + if (length_function != 0) { + break; } } } @@ -1855,7 +1852,7 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP // How many arguments we expect the getter to have. size_t num_args = (size_t)(make_property->_type != CPPMakeProperty::T_normal); - CPPFunctionGroup *fgroup = make_property->_get_function; + fgroup = make_property->_get_function; if (fgroup != NULL) { CPPFunctionGroup::Instances::const_iterator fi; for (fi = fgroup->_instances.begin(); fi != fgroup->_instances.end(); ++fi) { @@ -1942,9 +1939,13 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP for (fi = fgroup->_instances.begin(); fi != fgroup->_instances.end(); ++fi) { CPPInstance *function = (*fi); CPPFunctionType *ftype = function->_type->as_function_type(); - if (ftype != NULL && ftype->_parameters->_parameters.size() == num_args) { - deleter = function; - break; + if (ftype != nullptr) { + const CPPParameterList::Parameters ¶ms = ftype->_parameters->_parameters; + if (params.size() == num_args || + (params.size() > num_args && params[num_args]->_initializer != nullptr)) { + deleter = function; + break; + } } } @@ -1955,6 +1956,50 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP } } + // And the "inserter". + CPPInstance *inserter = nullptr; + + fgroup = make_property->_insert_function; + if (fgroup != nullptr) { + CPPFunctionGroup::Instances::const_iterator fi; + for (fi = fgroup->_instances.begin(); fi != fgroup->_instances.end(); ++fi) { + CPPInstance *function = (*fi); + CPPFunctionType *ftype = function->_type->as_function_type(); + if (ftype != nullptr && ftype->_parameters->_parameters.size() == 2) { + inserter = function; + break; + } + } + + if (inserter == nullptr) { + cerr << "No instance of insert-function '" + << fgroup->_name << "' is suitable!\n"; + return 0; + } + } + + // And the function that returns a key by index. + CPPInstance *getkey_function = nullptr; + + fgroup = make_property->_get_key_function; + if (fgroup != nullptr) { + CPPFunctionGroup::Instances::const_iterator fi; + for (fi = fgroup->_instances.begin(); fi != fgroup->_instances.end(); ++fi) { + CPPInstance *function = (*fi); + CPPFunctionType *ftype = function->_type->as_function_type(); + if (ftype != nullptr) { + getkey_function = function; + break; + } + } + + if (getkey_function == nullptr) { + cerr << "No instance of get-key-function '" + << fgroup->_name << "' is suitable!\n"; + return 0; + } + } + if (index == 0) { // It isn't here, so we'll have to define it. index = idb->get_next_index(); @@ -1980,10 +2025,12 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP if (make_property->_type & CPPMakeProperty::T_sequence) { iproperty._flags |= InterrogateElement::F_sequence; iproperty._length_function = length_function; + assert(length_function != 0); } if (make_property->_type & CPPMakeProperty::T_mapping) { iproperty._flags |= InterrogateElement::F_mapping; + iproperty._length_function = length_function; } if (make_property->_type == CPPMakeProperty::T_normal) { @@ -2029,6 +2076,20 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP nassertr(iproperty._del_function, 0); } + if (inserter != NULL) { + iproperty._flags |= InterrogateElement::F_has_insert_function; + iproperty._insert_function = get_function(inserter, "", struct_type, + struct_type->get_scope(), 0); + nassertr(iproperty._insert_function, 0); + } + + if (getkey_function != NULL) { + iproperty._flags |= InterrogateElement::F_has_getkey_function; + iproperty._getkey_function = get_function(getkey_function, "", struct_type, + struct_type->get_scope(), 0); + nassertr(iproperty._getkey_function, 0); + } + // See if there happens to be a comment before the MAKE_PROPERTY macro. if (make_property->_leading_comment != (CPPCommentBlock *)NULL) { iproperty._comment = trim_blanks(make_property->_leading_comment->_comment); diff --git a/dtool/src/interrogatedb/interrogateDatabase.cxx b/dtool/src/interrogatedb/interrogateDatabase.cxx index 559f707ca5..c11675d352 100644 --- a/dtool/src/interrogatedb/interrogateDatabase.cxx +++ b/dtool/src/interrogatedb/interrogateDatabase.cxx @@ -20,7 +20,7 @@ InterrogateDatabase *InterrogateDatabase::_global_ptr = NULL; int InterrogateDatabase::_file_major_version = 0; int InterrogateDatabase::_file_minor_version = 0; int InterrogateDatabase::_current_major_version = 3; -int InterrogateDatabase::_current_minor_version = 2; +int InterrogateDatabase::_current_minor_version = 3; /** * diff --git a/dtool/src/interrogatedb/interrogateElement.I b/dtool/src/interrogatedb/interrogateElement.I index 9dc587efab..914aba2327 100644 --- a/dtool/src/interrogatedb/interrogateElement.I +++ b/dtool/src/interrogatedb/interrogateElement.I @@ -25,6 +25,8 @@ InterrogateElement(InterrogateModuleDef *def) : _has_function = 0; _clear_function = 0; _del_function = 0; + _insert_function = 0; + _getkey_function = 0; _length_function = 0; _make_property = nullptr; } @@ -52,6 +54,8 @@ operator = (const InterrogateElement ©) { _has_function = copy._has_function; _clear_function = copy._clear_function; _del_function = copy._del_function; + _insert_function = copy._insert_function; + _getkey_function = copy._getkey_function; _length_function = copy._length_function; _make_property = copy._make_property; } @@ -185,6 +189,38 @@ get_del_function() const { return _del_function; } +/** + * + */ +INLINE bool InterrogateElement:: +has_insert_function() const { + return (_flags & F_has_insert_function) != 0; +} + +/** + * + */ +INLINE FunctionIndex InterrogateElement:: +get_insert_function() const { + return _insert_function; +} + +/** + * + */ +INLINE bool InterrogateElement:: +has_getkey_function() const { + return (_flags & F_has_getkey_function) != 0; +} + +/** + * + */ +INLINE FunctionIndex InterrogateElement:: +get_getkey_function() const { + return _getkey_function; +} + /** * */ diff --git a/dtool/src/interrogatedb/interrogateElement.cxx b/dtool/src/interrogatedb/interrogateElement.cxx index a7469b9941..38c7c8f4ec 100644 --- a/dtool/src/interrogatedb/interrogateElement.cxx +++ b/dtool/src/interrogatedb/interrogateElement.cxx @@ -29,7 +29,9 @@ output(ostream &out) const { << _has_function << " " << _clear_function << " " << _del_function << " " - << _length_function << " "; + << _length_function << " " + << _insert_function << " " + << _getkey_function << " "; idf_output_string(out, _scoped_name); idf_output_string(out, _comment, '\n'); } @@ -45,6 +47,9 @@ input(istream &in) { in >> _has_function >> _clear_function; if (InterrogateDatabase::get_file_minor_version() >= 2) { in >> _del_function >> _length_function; + if (InterrogateDatabase::get_file_minor_version() >= 3) { + in >> _insert_function >> _getkey_function; + } } } idf_input_string(in, _scoped_name); @@ -63,5 +68,7 @@ remap_indices(const IndexRemapper &remap) { _has_function = remap.map_from(_has_function); _clear_function = remap.map_from(_clear_function); _del_function = remap.map_from(_del_function); + _insert_function = remap.map_from(_insert_function); + _getkey_function = remap.map_from(_getkey_function); _length_function = remap.map_from(_length_function); } diff --git a/dtool/src/interrogatedb/interrogateElement.h b/dtool/src/interrogatedb/interrogateElement.h index 5488cc4cfe..f824b760cf 100644 --- a/dtool/src/interrogatedb/interrogateElement.h +++ b/dtool/src/interrogatedb/interrogateElement.h @@ -50,6 +50,10 @@ public: INLINE FunctionIndex get_clear_function() const; INLINE bool has_del_function() const; INLINE FunctionIndex get_del_function() const; + INLINE bool has_insert_function() const; + INLINE FunctionIndex get_insert_function() const; + INLINE bool has_getkey_function() const; + INLINE FunctionIndex get_getkey_function() const; INLINE bool is_sequence() const; INLINE FunctionIndex get_length_function() const; INLINE bool is_mapping() const; @@ -69,6 +73,8 @@ private: F_has_del_function= 0x0020, F_sequence = 0x0040, F_mapping = 0x0080, + F_has_insert_function= 0x0100, + F_has_getkey_function= 0x0200, }; int _flags; @@ -81,6 +87,8 @@ private: FunctionIndex _has_function; FunctionIndex _clear_function; FunctionIndex _del_function; + FunctionIndex _insert_function; + FunctionIndex _getkey_function; CPPMakeProperty *_make_property; diff --git a/dtool/src/interrogatedb/p3interrogatedb_composite2.cxx b/dtool/src/interrogatedb/p3interrogatedb_composite2.cxx index c6b6c61362..a46ce81558 100644 --- a/dtool/src/interrogatedb/p3interrogatedb_composite2.cxx +++ b/dtool/src/interrogatedb/p3interrogatedb_composite2.cxx @@ -5,7 +5,4 @@ #include "interrogate_interface.cxx" #include "interrogate_request.cxx" #include "py_panda.cxx" - - - - +#include "py_wrappers.cxx" diff --git a/dtool/src/interrogatedb/py_panda.cxx b/dtool/src/interrogatedb/py_panda.cxx index 34e6610d18..5e453f207c 100644 --- a/dtool/src/interrogatedb/py_panda.cxx +++ b/dtool/src/interrogatedb/py_panda.cxx @@ -614,12 +614,28 @@ PyObject *Dtool_PyModuleInitHelper(LibraryDef *defs[], const char *modulename) { return Dtool_Raise_TypeError("PyType_Ready(Dtool_SequenceWrapper)"); } + if (PyType_Ready(&Dtool_MutableSequenceWrapper_Type) < 0) { + return Dtool_Raise_TypeError("PyType_Ready(Dtool_MutableSequenceWrapper)"); + } + if (PyType_Ready(&Dtool_MappingWrapper_Type) < 0) { return Dtool_Raise_TypeError("PyType_Ready(Dtool_MappingWrapper)"); } - if (PyType_Ready(&Dtool_SeqMapWrapper_Type) < 0) { - return Dtool_Raise_TypeError("PyType_Ready(Dtool_SeqMapWrapper)"); + if (PyType_Ready(&Dtool_MutableMappingWrapper_Type) < 0) { + return Dtool_Raise_TypeError("PyType_Ready(Dtool_MutableMappingWrapper)"); + } + + if (PyType_Ready(&Dtool_MappingWrapper_Keys_Type) < 0) { + return Dtool_Raise_TypeError("PyType_Ready(Dtool_MappingWrapper_Keys)"); + } + + if (PyType_Ready(&Dtool_MappingWrapper_Values_Type) < 0) { + return Dtool_Raise_TypeError("PyType_Ready(Dtool_MappingWrapper_Values)"); + } + + if (PyType_Ready(&Dtool_MappingWrapper_Items_Type) < 0) { + return Dtool_Raise_TypeError("PyType_Ready(Dtool_MappingWrapper_Items)"); } if (PyType_Ready(&Dtool_GeneratorWrapper_Type) < 0) { @@ -1039,957 +1055,4 @@ bool Dtool_ExtractOptionalArg(PyObject **result, PyObject *args, PyObject *kwds) return (PyTuple_GET_SIZE(args) == 0); } -/** - * These classes are returned from properties that require a subscript - * interface, ie. something.children[i] = 3. - */ -static void Dtool_WrapperBase_dealloc(PyObject *self) { - Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; - nassertv(wrap); - Py_XDECREF(wrap->_self); -} - -static PyObject *Dtool_WrapperBase_repr(PyObject *self) { - Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; - nassertr(wrap, nullptr); - - PyObject *repr = PyObject_Repr(wrap->_self); - PyObject *result; -#if PY_MAJOR_VERSION >= 3 - result = PyUnicode_FromFormat("<%s[] of %s>", wrap->_name, PyUnicode_AsUTF8(repr)); -#else - result = PyString_FromFormat("<%s[] of %s>", wrap->_name, PyString_AS_STRING(repr)); -#endif - Py_DECREF(repr); - return result; -} - -static PyObject *Dtool_SequenceWrapper_repr(PyObject *self) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - - Py_ssize_t len = -1; - if (wrap->_len_func != nullptr) { - len = wrap->_len_func(wrap->_base._self); - } - - if (len < 0) { - PyErr_Restore(nullptr, nullptr, nullptr); - return Dtool_WrapperBase_repr(self); - } - - PyObject *repr = PyObject_Repr(wrap->_base._self); - PyObject *result; -#if PY_MAJOR_VERSION >= 3 - result = PyUnicode_FromFormat("<%s[%zd] of %s>", wrap->_base._name, len, PyUnicode_AsUTF8(repr)); -#else - result = PyString_FromFormat("<%s[%zd] of %s>", wrap->_base._name, len, PyString_AS_STRING(repr)); -#endif - Py_DECREF(repr); - return result; -} - -static Py_ssize_t Dtool_SequenceWrapper_length(PyObject *self) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, -1); - if (wrap->_len_func != nullptr) { - return wrap->_len_func(wrap->_base._self); - } else { - Dtool_Raise_TypeError("property does not support len()"); - return -1; - } -} - -static PyObject *Dtool_SequenceWrapper_getitem(PyObject *self, Py_ssize_t index) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - nassertr(wrap->_getitem_func, nullptr); - return wrap->_getitem_func(wrap->_base._self, index); -} - -static int Dtool_SequenceWrapper_setitem(PyObject *self, Py_ssize_t index, PyObject *value) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, -1); - if (wrap->_setitem_func != nullptr) { - return wrap->_setitem_func(wrap->_base._self, index, value); - } else { - Dtool_Raise_TypeError("property does not support item assignment"); - return -1; - } -} - -/** - * Implementation of property.index(x) which returns the index of the first - * occurrence of x in the sequence, or raises a ValueError if it isn't found. - */ -static PyObject *Dtool_SequenceWrapper_index(PyObject *self, PyObject *value) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - Py_ssize_t length = 0; - if (wrap->_len_func != nullptr && wrap->_setitem_func != nullptr) { - length = wrap->_len_func(wrap->_base._self); - } else { - return Dtool_Raise_TypeError("property does not support remove()"); - } - - // Iterate through the items, invoking the equality function for each, until - // we have found the right one. - nassertr(wrap->_getitem_func, nullptr); - for (Py_ssize_t index = 0; index < length; ++index) { - PyObject *item = wrap->_getitem_func(wrap->_base._self, index); - if (item != nullptr) { - int cmp = PyObject_RichCompareBool(item, value, Py_EQ); - if (cmp > 0) { - return Dtool_WrapValue(index); - } - if (cmp < 0) { - return nullptr; - } - } else { - return nullptr; - } - } - // Not found, raise ValueError. - return PyErr_Format(PyExc_ValueError, "%s.index() did not find value", wrap->_base._name); -} - -/** - * Implementation of property.count(x) which returns the number of occurrences - * of x in the sequence. - */ -static PyObject *Dtool_SequenceWrapper_count(PyObject *self, PyObject *value) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - Py_ssize_t index = 0; - if (wrap->_len_func != nullptr) { - index = wrap->_len_func(wrap->_base._self); - } else { - return Dtool_Raise_TypeError("property does not support count()"); - } - // Iterate through the items, invoking the == operator for each. - long count = 0; - nassertr(wrap->_getitem_func, nullptr); - while (index > 0) { - --index; - PyObject *item = wrap->_getitem_func(wrap->_base._self, index); - if (item == nullptr) { - return nullptr; - } - int cmp = PyObject_RichCompareBool(item, value, Py_EQ); - if (cmp > 0) { - ++count; - } - if (cmp < 0) { - return nullptr; - } - } -#if PY_MAJOR_VERSION >= 3 - return PyLong_FromLong(count); -#else - return PyInt_FromLong(count); -#endif -} - -/** - * Implementation of property.clear() which removes all elements in the - * sequence, starting with the last. - */ -static PyObject *Dtool_SequenceWrapper_clear(PyObject *self, PyObject *) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - Py_ssize_t index = 0; - if (wrap->_len_func != nullptr && wrap->_setitem_func != nullptr) { - index = wrap->_len_func(wrap->_base._self); - } else { - return Dtool_Raise_TypeError("property does not support clear()"); - } - - // Iterate through the items, invoking the delete function for each. We do - // this in reverse order, which may be more efficient. - while (index > 0) { - --index; - if (wrap->_setitem_func(wrap->_base._self, index, nullptr) != 0) { - return nullptr; - } - } - Py_INCREF(Py_None); - return Py_None; -} - -/** - * Implementation of property.remove(x) which removes the first occurrence of - * x in the sequence, or raises a ValueError if it isn't found. - */ -static PyObject *Dtool_SequenceWrapper_remove(PyObject *self, PyObject *value) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - Py_ssize_t length = 0; - if (wrap->_len_func != nullptr && wrap->_setitem_func != nullptr) { - length = wrap->_len_func(wrap->_base._self); - } else { - return Dtool_Raise_TypeError("property does not support remove()"); - } - - // Iterate through the items, invoking the equality function for each, until - // we have found the right one. - nassertr(wrap->_getitem_func, nullptr); - for (Py_ssize_t index = 0; index < length; ++index) { - PyObject *item = wrap->_getitem_func(wrap->_base._self, index); - if (item != nullptr) { - int cmp = PyObject_RichCompareBool(item, value, Py_EQ); - if (cmp > 0) { - if (wrap->_setitem_func(wrap->_base._self, index, nullptr) == 0) { - Py_INCREF(Py_None); - return Py_None; - } else { - return nullptr; - } - } - if (cmp < 0) { - return nullptr; - } - } else { - return nullptr; - } - } - // Not found, raise ValueError. - return PyErr_Format(PyExc_ValueError, "%s.remove() did not find value", wrap->_base._name); -} - -/** - * Implementation of property.pop([i=-1]) which returns and removes the - * element at the indicated index in the sequence. If no index is provided, - * it removes from the end of the list. - */ -static PyObject *Dtool_SequenceWrapper_pop(PyObject *self, PyObject *args) { - Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; - nassertr(wrap, nullptr); - if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr || - wrap->_len_func == nullptr) { - return Dtool_Raise_TypeError("property does not support pop()"); - } - - Py_ssize_t length = wrap->_len_func(wrap->_base._self); - Py_ssize_t index; - switch (PyTuple_GET_SIZE(args)) { - case 0: - index = length - 1; - break; - case 1: - index = PyNumber_AsSsize_t(PyTuple_GET_ITEM(args, 0), PyExc_IndexError); - if (index == -1 && _PyErr_OCCURRED()) { - return nullptr; - } - if (index < 0) { - index += length; - } - break; - default: - return Dtool_Raise_TypeError("pop([i=-1]) takes 0 or 1 arguments"); - } - - if (length <= 0) { - return PyErr_Format(PyExc_IndexError, "%s.pop() from empty sequence", wrap->_base._name); - } - - // Index error will be caught by getitem_func. - PyObject *value = wrap->_getitem_func(wrap->_base._self, index); - if (value != nullptr) { - if (wrap->_setitem_func(wrap->_base._self, index, nullptr) != 0) { - return nullptr; - } - return value; - } - return nullptr; -} - -static int Dtool_MappingWrapper_contains(PyObject *self, PyObject *key) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, -1); - nassertr(wrap->_getitem_func, -1); - PyObject *value = wrap->_getitem_func(wrap->_base._self, key); - if (value != nullptr) { - Py_DECREF(value); - return 1; - } else if (_PyErr_OCCURRED() == PyExc_KeyError || - _PyErr_OCCURRED() == PyExc_TypeError) { - PyErr_Restore(nullptr, nullptr, nullptr); - return 0; - } else { - return -1; - } -} - -static PyObject *Dtool_MappingWrapper_getitem(PyObject *self, PyObject *key) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, nullptr); - nassertr(wrap->_getitem_func, nullptr); - return wrap->_getitem_func(wrap->_base._self, key); -} - -static int Dtool_MappingWrapper_setitem(PyObject *self, PyObject *key, PyObject *value) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, -1); - if (wrap->_setitem_func != nullptr) { - return wrap->_setitem_func(wrap->_base._self, key, value); - } else { - Dtool_Raise_TypeError("property does not support item assignment"); - return -1; - } -} - -/** - * Implementation of property.get(key[,def=None]) which returns the value with - * the given key in the mapping, or the given default value (which defaults to - * None) if the key isn't found in the mapping. - */ -static PyObject *Dtool_MappingWrapper_get(PyObject *self, PyObject *args) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, nullptr); - nassertr(wrap->_getitem_func, nullptr); - Py_ssize_t size = PyTuple_GET_SIZE(args); - if (size != 1 && size != 2) { - return PyErr_Format(PyExc_TypeError, "%s.get() takes 1 or 2 arguments", wrap->_base._name); - } - PyObject *defvalue = Py_None; - if (size >= 2) { - defvalue = PyTuple_GET_ITEM(args, 1); - } - PyObject *key = PyTuple_GET_ITEM(args, 0); - PyObject *value = wrap->_getitem_func(wrap->_base._self, key); - if (value != nullptr) { - return value; - } else if (_PyErr_OCCURRED() == PyExc_KeyError) { - PyErr_Restore(nullptr, nullptr, nullptr); - Py_INCREF(defvalue); - return defvalue; - } else { - return nullptr; - } -} - -/** - * Implementation of property.pop(key[,def=None]) which is the same as get() - * except that it also removes the element from the mapping. - */ -static PyObject *Dtool_MappingWrapper_pop(PyObject *self, PyObject *args) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, nullptr); - if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr) { - return Dtool_Raise_TypeError("property does not support pop()"); - } - - Py_ssize_t size = PyTuple_GET_SIZE(args); - if (size != 1 && size != 2) { - return PyErr_Format(PyExc_TypeError, "%s.pop() takes 1 or 2 arguments", wrap->_base._name); - } - PyObject *defvalue = Py_None; - if (size >= 2) { - defvalue = PyTuple_GET_ITEM(args, 1); - } - - PyObject *key = PyTuple_GET_ITEM(args, 0); - PyObject *value = wrap->_getitem_func(wrap->_base._self, key); - if (value != nullptr) { - // OK, now set unset this value. - if (wrap->_setitem_func(wrap->_base._self, key, nullptr) == 0) { - return value; - } else { - Py_DECREF(value); - return nullptr; - } - } else if (_PyErr_OCCURRED() == PyExc_KeyError) { - PyErr_Restore(nullptr, nullptr, nullptr); - Py_INCREF(defvalue); - return defvalue; - } else { - return nullptr; - } -} - -/** - * Implementation of property.setdefault(key[,def=None]) which is the same as - * get() except that it also writes the default value back to the mapping if - * the key was not found is missing. - */ -static PyObject *Dtool_MappingWrapper_setdefault(PyObject *self, PyObject *args) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, nullptr); - - if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr) { - return Dtool_Raise_TypeError("property does not support setdefault()"); - } - - Py_ssize_t size = PyTuple_GET_SIZE(args); - if (size != 1 && size != 2) { - return PyErr_Format(PyExc_TypeError, "%s.setdefault() takes 1 or 2 arguments", wrap->_base._name); - } - PyObject *defvalue = Py_None; - if (size >= 2) { - defvalue = PyTuple_GET_ITEM(args, 1); - } - PyObject *key = PyTuple_GET_ITEM(args, 0); - PyObject *value = wrap->_getitem_func(wrap->_base._self, key); - if (value != nullptr) { - return value; - } else if (_PyErr_OCCURRED() == PyExc_KeyError) { - PyErr_Restore(nullptr, nullptr, nullptr); - if (wrap->_setitem_func(wrap->_base._self, key, defvalue) == 0) { - Py_INCREF(defvalue); - return defvalue; - } - } - return nullptr; -} - -/** - * Implementation of property.update(...) which sets multiple values in one - * go. It accepts either a single dictionary or keyword arguments, not both. - */ -static PyObject *Dtool_MappingWrapper_update(PyObject *self, PyObject *args, PyObject *kwargs) { - Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; - nassertr(wrap, nullptr); - - if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr) { - return Dtool_Raise_TypeError("property does not support update()"); - } - - // We accept either a dict argument or keyword arguments, but not both. - PyObject *dict; - switch (PyTuple_GET_SIZE(args)) { - case 0: - if (kwargs == nullptr) { - // This is legal. - Py_INCREF(Py_None); - return Py_None; - } - dict = kwargs; - break; - case 1: - if (PyDict_Check(PyTuple_GET_ITEM(args, 0)) && (kwargs == nullptr || Py_SIZE(kwargs) == 0)) { - dict = PyTuple_GET_ITEM(args, 0); - break; - } - // Fall through - default: - return PyErr_Format(PyExc_TypeError, "%s.update() takes either a dict argument or keyword arguments", wrap->_base._name); - } - - PyObject *key, *value; - Py_ssize_t pos = 0; - while (PyDict_Next(dict, &pos, &key, &value)) { - if (wrap->_setitem_func(wrap->_base._self, key, value) != 0) { - return nullptr; - } - } - Py_INCREF(Py_None); - return Py_None; -} - -/** - * Implementation of len(property) for mapping types. - */ -static Py_ssize_t Dtool_SeqMapWrapper_length(PyObject *self) { - Dtool_SeqMapWrapper *wrap = (Dtool_SeqMapWrapper *)self; - nassertr(wrap, -1); - if (wrap->_len_func != nullptr) { - return wrap->_len_func(wrap->_map._base._self); - } else { - Dtool_Raise_TypeError("property does not support len()"); - return -1; - } -} - -/** - * Implementation of property.values() which returns a tuple containing the - * dictionary values. - */ -static PyObject *Dtool_SeqMapWrapper_values(PyObject *self, PyObject *) { - Dtool_SeqMapWrapper *wrap = (Dtool_SeqMapWrapper *)self; - nassertr(wrap, nullptr); - nassertr(wrap->_len_func, nullptr); - nassertr(wrap->_seq_getitem_func, nullptr); - - Py_ssize_t length = wrap->_len_func(wrap->_map._base._self); - PyObject *values = PyTuple_New(length); - if (UNLIKELY(values == nullptr)) { - return nullptr; - } - - for (Py_ssize_t i = 0; i < length; ++i) { - PyObject *value = wrap->_seq_getitem_func(wrap->_map._base._self, i); - if (value != nullptr) { - PyTuple_SET_ITEM(values, i, value); - } else { - Py_DECREF(values); - return nullptr; - } - } - - return values; -} - -/** - * This variant defines only a sequence interface. - */ -static PySequenceMethods Dtool_SequenceWrapper_SequenceMethods = { - Dtool_SequenceWrapper_length, - 0, // sq_concat - 0, // sq_repeat - Dtool_SequenceWrapper_getitem, - 0, // sq_slice - Dtool_SequenceWrapper_setitem, - 0, // sq_ass_slice - 0, // sq_contains - 0, // sq_inplace_concat - 0, // sq_inplace_repeat -}; - -static PyMethodDef Dtool_SequenceWrapper_Methods[] = { - {"index", &Dtool_SequenceWrapper_index, METH_O, nullptr}, - {"count", &Dtool_SequenceWrapper_count, METH_O, nullptr}, - {"clear", &Dtool_SequenceWrapper_clear, METH_NOARGS, nullptr}, - {"pop", &Dtool_SequenceWrapper_pop, METH_VARARGS, nullptr}, - {"remove", &Dtool_SequenceWrapper_remove, METH_O, nullptr}, - {nullptr, nullptr, 0, nullptr} -}; - -PyTypeObject Dtool_SequenceWrapper_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "sequence wrapper", - sizeof(Dtool_SequenceWrapper), - 0, // tp_itemsize - Dtool_WrapperBase_dealloc, - 0, // tp_print - 0, // tp_getattr - 0, // tp_setattr -#if PY_MAJOR_VERSION >= 3 - 0, // tp_reserved -#else - 0, // tp_compare -#endif - Dtool_SequenceWrapper_repr, - 0, // tp_as_number - &Dtool_SequenceWrapper_SequenceMethods, - 0, // tp_as_mapping - 0, // tp_hash - 0, // tp_call - 0, // tp_str - PyObject_GenericGetAttr, - PyObject_GenericSetAttr, - 0, // tp_as_buffer - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, - 0, // tp_doc - 0, // tp_traverse - 0, // tp_clear - 0, // tp_richcompare - 0, // tp_weaklistoffset - 0, // tp_iter - 0, // tp_iternext - Dtool_SequenceWrapper_Methods, - 0, // tp_members - 0, // tp_getset - 0, // tp_base - 0, // tp_dict - 0, // tp_descr_get - 0, // tp_descr_set - 0, // tp_dictoffset - 0, // tp_init - PyType_GenericAlloc, - 0, // tp_new - PyObject_Del, - 0, // tp_is_gc - 0, // tp_bases - 0, // tp_mro - 0, // tp_cache - 0, // tp_subclasses - 0, // tp_weaklist - 0, // tp_del -#if PY_VERSION_HEX >= 0x02060000 - 0, // tp_version_tag -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, // tp_finalize -#endif -}; - -/** - * This variant defines only a mapping interface. - */ -static PySequenceMethods Dtool_MappingWrapper_SequenceMethods = { - 0, // sq_length - 0, // sq_concat - 0, // sq_repeat - 0, // sq_item - 0, // sq_slice - 0, // sq_ass_item - 0, // sq_ass_slice - Dtool_MappingWrapper_contains, - 0, // sq_inplace_concat - 0, // sq_inplace_repeat -}; - -static PyMappingMethods Dtool_MappingWrapper_MappingMethods = { - 0, // mp_length - Dtool_MappingWrapper_getitem, - Dtool_MappingWrapper_setitem, -}; - -static PyMethodDef Dtool_MappingWrapper_Methods[] = { - {"get", &Dtool_MappingWrapper_get, METH_VARARGS, nullptr}, - {"pop", &Dtool_MappingWrapper_pop, METH_VARARGS, nullptr}, - {"setdefault", &Dtool_MappingWrapper_setdefault, METH_VARARGS, nullptr}, - {"update", (PyCFunction) &Dtool_MappingWrapper_update, METH_VARARGS | METH_KEYWORDS, nullptr}, - {nullptr, nullptr, 0, nullptr} -}; - -PyTypeObject Dtool_MappingWrapper_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "mapping wrapper", - sizeof(Dtool_MappingWrapper), - 0, // tp_itemsize - Dtool_WrapperBase_dealloc, - 0, // tp_print - 0, // tp_getattr - 0, // tp_setattr -#if PY_MAJOR_VERSION >= 3 - 0, // tp_reserved -#else - 0, // tp_compare -#endif - Dtool_WrapperBase_repr, - 0, // tp_as_number - &Dtool_MappingWrapper_SequenceMethods, - &Dtool_MappingWrapper_MappingMethods, - 0, // tp_hash - 0, // tp_call - 0, // tp_str - PyObject_GenericGetAttr, - PyObject_GenericSetAttr, - 0, // tp_as_buffer - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, - 0, // tp_doc - 0, // tp_traverse - 0, // tp_clear - 0, // tp_richcompare - 0, // tp_weaklistoffset - 0, // tp_iter - 0, // tp_iternext - Dtool_MappingWrapper_Methods, - 0, // tp_members - 0, // tp_getset - 0, // tp_base - 0, // tp_dict - 0, // tp_descr_get - 0, // tp_descr_set - 0, // tp_dictoffset - 0, // tp_init - PyType_GenericAlloc, - 0, // tp_new - PyObject_Del, - 0, // tp_is_gc - 0, // tp_bases - 0, // tp_mro - 0, // tp_cache - 0, // tp_subclasses - 0, // tp_weaklist - 0, // tp_del -#if PY_VERSION_HEX >= 0x02060000 - 0, // tp_version_tag -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, // tp_finalize -#endif -}; - -/** - * This variant defines both a sequence and mapping interface. - */ -static PyMappingMethods Dtool_SeqMapWrapper_MappingMethods = { - Dtool_SeqMapWrapper_length, - Dtool_MappingWrapper_getitem, - Dtool_MappingWrapper_setitem, -}; - -static PyMethodDef Dtool_SeqMapWrapper_Methods[] = { - {"get", &Dtool_MappingWrapper_get, METH_VARARGS, nullptr}, - {"pop", &Dtool_MappingWrapper_pop, METH_VARARGS, nullptr}, - {"setdefault", &Dtool_MappingWrapper_setdefault, METH_VARARGS, nullptr}, - {"update", (PyCFunction) &Dtool_MappingWrapper_update, METH_VARARGS | METH_KEYWORDS, nullptr}, - {"values", &Dtool_SeqMapWrapper_values, METH_NOARGS, nullptr}, - {nullptr, nullptr, 0, nullptr} -}; - -PyTypeObject Dtool_SeqMapWrapper_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "sequence/mapping wrapper", - sizeof(Dtool_SeqMapWrapper), - 0, // tp_itemsize - Dtool_WrapperBase_dealloc, - 0, // tp_print - 0, // tp_getattr - 0, // tp_setattr -#if PY_MAJOR_VERSION >= 3 - 0, // tp_reserved -#else - 0, // tp_compare -#endif - Dtool_WrapperBase_repr, - 0, // tp_as_number - 0, // tp_as_sequence - &Dtool_MappingWrapper_MappingMethods, - 0, // tp_hash - 0, // tp_call - 0, // tp_str - PyObject_GenericGetAttr, - PyObject_GenericSetAttr, - 0, // tp_as_buffer - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, - 0, // tp_doc - 0, // tp_traverse - 0, // tp_clear - 0, // tp_richcompare - 0, // tp_weaklistoffset - 0, // tp_iter - 0, // tp_iternext - Dtool_SeqMapWrapper_Methods, - 0, // tp_members - 0, // tp_getset - 0, // tp_base - 0, // tp_dict - 0, // tp_descr_get - 0, // tp_descr_set - 0, // tp_dictoffset - 0, // tp_init - PyType_GenericAlloc, - 0, // tp_new - PyObject_Del, - 0, // tp_is_gc - 0, // tp_bases - 0, // tp_mro - 0, // tp_cache - 0, // tp_subclasses - 0, // tp_weaklist - 0, // tp_del -#if PY_VERSION_HEX >= 0x02060000 - 0, // tp_version_tag -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, // tp_finalize -#endif -}; - -/** - * This variant defines only a generator interface. - */ -static PyObject *Dtool_GeneratorWrapper_iternext(PyObject *self) { - Dtool_GeneratorWrapper *wrap = (Dtool_GeneratorWrapper *)self; - nassertr(wrap, nullptr); - nassertr(wrap->_iternext_func, nullptr); - return wrap->_iternext_func(wrap->_base._self); -} - -PyTypeObject Dtool_GeneratorWrapper_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "generator wrapper", - sizeof(Dtool_GeneratorWrapper), - 0, // tp_itemsize - Dtool_WrapperBase_dealloc, - 0, // tp_print - 0, // tp_getattr - 0, // tp_setattr -#if PY_MAJOR_VERSION >= 3 - 0, // tp_reserved -#else - 0, // tp_compare -#endif - 0, // tp_repr - 0, // tp_as_number - 0, // tp_as_sequence - 0, // tp_as_mapping - 0, // tp_hash - 0, // tp_call - 0, // tp_str - PyObject_GenericGetAttr, - PyObject_GenericSetAttr, - 0, // tp_as_buffer - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, - 0, // tp_doc - 0, // tp_traverse - 0, // tp_clear - 0, // tp_richcompare - 0, // tp_weaklistoffset - PyObject_SelfIter, - Dtool_GeneratorWrapper_iternext, - 0, // tp_methods - 0, // tp_members - 0, // tp_getset - 0, // tp_base - 0, // tp_dict - 0, // tp_descr_get - 0, // tp_descr_set - 0, // tp_dictoffset - 0, // tp_init - PyType_GenericAlloc, - 0, // tp_new - PyObject_Del, - 0, // tp_is_gc - 0, // tp_bases - 0, // tp_mro - 0, // tp_cache - 0, // tp_subclasses - 0, // tp_weaklist - 0, // tp_del -#if PY_VERSION_HEX >= 0x02060000 - 0, // tp_version_tag -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, // tp_finalize -#endif -}; - -/** - * This is a variant of the Python getset mechanism that permits static - * properties. - */ -PyObject * -Dtool_NewStaticProperty(PyTypeObject *type, const PyGetSetDef *getset) { - PyGetSetDescrObject *descr; - descr = (PyGetSetDescrObject *)PyType_GenericAlloc(&Dtool_StaticProperty_Type, 0); - if (descr != nullptr) { - Py_XINCREF(type); - descr->d_getset = (PyGetSetDef *)getset; -#if PY_MAJOR_VERSION >= 3 - descr->d_common.d_type = type; - descr->d_common.d_name = PyUnicode_InternFromString(getset->name); -#if PY_VERSION_HEX >= 0x03030000 - descr->d_common.d_qualname = nullptr; -#endif -#else - descr->d_type = type; - descr->d_name = PyString_InternFromString(getset->name); -#endif - } - return (PyObject *)descr; -} - -static void -Dtool_StaticProperty_dealloc(PyDescrObject *descr) { - _PyObject_GC_UNTRACK(descr); - Py_XDECREF(descr->d_type); - Py_XDECREF(descr->d_name); -//#if PY_MAJOR_VERSION >= 3 -// Py_XDECREF(descr->d_qualname); -//#endif - PyObject_GC_Del(descr); -} - -static PyObject * -Dtool_StaticProperty_repr(PyDescrObject *descr, const char *format) { -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - PyUnicode_AsUTF8(descr->d_name), - descr->d_type->tp_name); -#else - return PyString_FromFormat("", - PyString_AS_STRING(descr->d_name), - descr->d_type->tp_name); -#endif -} - -static int -Dtool_StaticProperty_traverse(PyObject *self, visitproc visit, void *arg) { - PyDescrObject *descr = (PyDescrObject *)self; - Py_VISIT(descr->d_type); - return 0; -} - -static PyObject * -Dtool_StaticProperty_get(PyGetSetDescrObject *descr, PyObject *obj, PyObject *type) { - if (descr->d_getset->get != nullptr) { - return descr->d_getset->get(obj, descr->d_getset->closure); - } else { - return PyErr_Format(PyExc_AttributeError, - "attribute '%s' of type '%.100s' is not readable", -#if PY_MAJOR_VERSION >= 3 - PyUnicode_AsUTF8(((PyDescrObject *)descr)->d_name), -#else - PyString_AS_STRING(((PyDescrObject *)descr)->d_name), -#endif - ((PyDescrObject *)descr)->d_type->tp_name); - } -} - -static int -Dtool_StaticProperty_set(PyGetSetDescrObject *descr, PyObject *obj, PyObject *value) { - if (descr->d_getset->set != nullptr) { - return descr->d_getset->set(obj, value, descr->d_getset->closure); - } else { - PyErr_Format(PyExc_AttributeError, - "attribute '%s' of type '%.100s' is not writable", -#if PY_MAJOR_VERSION >= 3 - PyUnicode_AsUTF8(((PyDescrObject *)descr)->d_name), -#else - PyString_AS_STRING(((PyDescrObject *)descr)->d_name), -#endif - ((PyDescrObject *)descr)->d_type->tp_name); - return -1; - } -} - -PyTypeObject Dtool_StaticProperty_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) - "getset_descriptor", - sizeof(PyGetSetDescrObject), - 0, // tp_itemsize - (destructor)Dtool_StaticProperty_dealloc, - 0, // tp_print - 0, // tp_getattr - 0, // tp_setattr - 0, // tp_reserved - (reprfunc)Dtool_StaticProperty_repr, - 0, // tp_as_number - 0, // tp_as_sequence - 0, // tp_as_mapping - 0, // tp_hash - 0, // tp_call - 0, // tp_str - PyObject_GenericGetAttr, - 0, // tp_setattro - 0, // tp_as_buffer - Py_TPFLAGS_DEFAULT, - 0, // tp_doc - Dtool_StaticProperty_traverse, - 0, // tp_clear - 0, // tp_richcompare - 0, // tp_weaklistoffset - 0, // tp_iter - 0, // tp_iternext - 0, // tp_methods - 0, // tp_members - 0, // tp_getset - 0, // tp_base - 0, // tp_dict - (descrgetfunc)Dtool_StaticProperty_get, - (descrsetfunc)Dtool_StaticProperty_set, - 0, // tp_dictoffset - 0, // tp_init - 0, // tp_alloc - 0, // tp_new - 0, // tp_del - 0, // tp_is_gc - 0, // tp_bases - 0, // tp_mro - 0, // tp_cache - 0, // tp_subclasses - 0, // tp_weaklist - 0, // tp_del -#if PY_VERSION_HEX >= 0x02060000 - 0, // tp_version_tag -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, // tp_finalize -#endif -}; - #endif // HAVE_PYTHON diff --git a/dtool/src/interrogatedb/py_panda.h b/dtool/src/interrogatedb/py_panda.h index 4abd083146..adcce27b9c 100644 --- a/dtool/src/interrogatedb/py_panda.h +++ b/dtool/src/interrogatedb/py_panda.h @@ -468,49 +468,6 @@ copy_from_copy_constructor(PyObject *self, PyObject *noargs); EXPCL_INTERROGATEDB PyObject * map_deepcopy_to_copy(PyObject *self, PyObject *args); -/** - * These classes are returned from properties that require a subscript - * interface, ie. something.children[i] = 3. - */ -struct Dtool_WrapperBase { - PyObject_HEAD; - PyObject *_self; - const char *_name; -}; - -struct Dtool_SequenceWrapper { - Dtool_WrapperBase _base; - lenfunc _len_func; - ssizeargfunc _getitem_func; - ssizeobjargproc _setitem_func; -}; - -struct Dtool_MappingWrapper { - Dtool_WrapperBase _base; - binaryfunc _getitem_func; - objobjargproc _setitem_func; -}; - -struct Dtool_SeqMapWrapper { - Dtool_MappingWrapper _map; - lenfunc _len_func; - ssizeargfunc _seq_getitem_func; - ssizeobjargproc _seq_setitem_func; -}; - -struct Dtool_GeneratorWrapper { - Dtool_WrapperBase _base; - iternextfunc _iternext_func; -}; - -EXPCL_INTERROGATEDB extern PyTypeObject Dtool_SequenceWrapper_Type; -EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MappingWrapper_Type; -EXPCL_INTERROGATEDB extern PyTypeObject Dtool_SeqMapWrapper_Type; -EXPCL_INTERROGATEDB extern PyTypeObject Dtool_GeneratorWrapper_Type; -EXPCL_INTERROGATEDB extern PyTypeObject Dtool_StaticProperty_Type; - -EXPCL_INTERROGATEDB PyObject *Dtool_NewStaticProperty(PyTypeObject *obj, const PyGetSetDef *getset); - /** * These functions check whether the arguments passed to a function conform to * certain expectations. @@ -566,6 +523,8 @@ EXPCL_INTERROGATEDB extern void Dtool_PyModuleClassInit_DTOOL_SUPER_BASE(PyObjec #include "py_panda.I" +#include "py_wrappers.h" + #endif // HAVE_PYTHON && !CPPPARSER #endif // PY_PANDA_H_ diff --git a/dtool/src/interrogatedb/py_wrappers.cxx b/dtool/src/interrogatedb/py_wrappers.cxx new file mode 100755 index 0000000000..db4e229348 --- /dev/null +++ b/dtool/src/interrogatedb/py_wrappers.cxx @@ -0,0 +1,1671 @@ +/** + * PANDA 3D SOFTWARE + * Copyright (c) Carnegie Mellon University. All rights reserved. + * + * All use of this software is subject to the terms of the revised BSD + * license. You should have received a copy of this license along + * with this source code in a file named "LICENSE." + * + * @file py_wrappers.cxx + * @author rdb + * @date 2017-11-26 + */ + +#include "py_wrappers.h" + +#if PY_VERSION_HEX >= 0x03040000 +#define _COLLECTIONS_ABC "_collections_abc" +#elif PY_VERSION_HEX >= 0x03030000 +#define _COLLECTIONS_ABC "collections.abc" +#else +#define _COLLECTIONS_ABC "_abcoll" +#endif + +static void _register_collection(PyTypeObject *type, const char *abc) { + PyObject *sys_modules = PyImport_GetModuleDict(); + if (sys_modules != nullptr) { + PyObject *module = PyDict_GetItemString(sys_modules, _COLLECTIONS_ABC); + if (module != nullptr) { + PyObject *dict = PyModule_GetDict(module); + if (module != nullptr) { +#if PY_MAJOR_VERSION >= 3 + static PyObject *register_str = PyUnicode_InternFromString("register"); +#else + static PyObject *register_str = PyString_InternFromString("register"); +#endif + PyObject *sequence = PyDict_GetItemString(dict, abc); + if (sequence != nullptr) { + if (PyObject_CallMethodObjArgs(sequence, register_str, (PyObject *)type, nullptr) == nullptr) { + PyErr_Print(); + } + } + } + } + } +} + +/** + * These classes are returned from properties that require a subscript + * interface, ie. something.children[i] = 3. + */ +static void Dtool_WrapperBase_dealloc(PyObject *self) { + Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; + nassertv(wrap); + Py_XDECREF(wrap->_self); +} + +static PyObject *Dtool_WrapperBase_repr(PyObject *self) { + Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; + nassertr(wrap, nullptr); + + PyObject *repr = PyObject_Repr(wrap->_self); + PyObject *result; +#if PY_MAJOR_VERSION >= 3 + result = PyUnicode_FromFormat("<%s[] of %s>", wrap->_name, PyUnicode_AsUTF8(repr)); +#else + result = PyString_FromFormat("<%s[] of %s>", wrap->_name, PyString_AS_STRING(repr)); +#endif + Py_DECREF(repr); + return result; +} + +static PyObject *Dtool_SequenceWrapper_repr(PyObject *self) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; + nassertr(wrap, nullptr); + + Py_ssize_t len = -1; + if (wrap->_len_func != nullptr) { + len = wrap->_len_func(wrap->_base._self); + } + + if (len < 0) { + PyErr_Restore(nullptr, nullptr, nullptr); + return Dtool_WrapperBase_repr(self); + } + + PyObject *repr = PyObject_Repr(wrap->_base._self); + PyObject *result; +#if PY_MAJOR_VERSION >= 3 + result = PyUnicode_FromFormat("<%s[%zd] of %s>", wrap->_base._name, len, PyUnicode_AsUTF8(repr)); +#else + result = PyString_FromFormat("<%s[%zd] of %s>", wrap->_base._name, len, PyString_AS_STRING(repr)); +#endif + Py_DECREF(repr); + return result; +} + +static Py_ssize_t Dtool_SequenceWrapper_length(PyObject *self) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; + nassertr(wrap, -1); + if (wrap->_len_func != nullptr) { + return wrap->_len_func(wrap->_base._self); + } else { + Dtool_Raise_TypeError("property does not support len()"); + return -1; + } +} + +static PyObject *Dtool_SequenceWrapper_getitem(PyObject *self, Py_ssize_t index) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_getitem_func, nullptr); + return wrap->_getitem_func(wrap->_base._self, index); +} + +/** + * Implementation of (x in property) + */ +static int Dtool_SequenceWrapper_contains(PyObject *self, PyObject *value) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; + nassertr(wrap, -1); + nassertr(wrap->_len_func, -1); + nassertr(wrap->_getitem_func, -1); + + Py_ssize_t length = wrap->_len_func(wrap->_base._self); + + // Iterate through the items, invoking the equality function for each, until + // we have found the matching one. + for (Py_ssize_t index = 0; index < length; ++index) { + PyObject *item = wrap->_getitem_func(wrap->_base._self, index); + if (item != nullptr) { + int cmp = PyObject_RichCompareBool(item, value, Py_EQ); + if (cmp > 0) { + return 1; + } + if (cmp < 0) { + return -1; + } + } else { + return -1; + } + } + return 0; +} + +/** + * Implementation of property.index(x) which returns the index of the first + * occurrence of x in the sequence, or raises a ValueError if it isn't found. + */ +static PyObject *Dtool_SequenceWrapper_index(PyObject *self, PyObject *value) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_len_func, nullptr); + nassertr(wrap->_getitem_func, nullptr); + + Py_ssize_t length = wrap->_len_func(wrap->_base._self); + + // Iterate through the items, invoking the equality function for each, until + // we have found the right one. + for (Py_ssize_t index = 0; index < length; ++index) { + PyObject *item = wrap->_getitem_func(wrap->_base._self, index); + if (item != nullptr) { + int cmp = PyObject_RichCompareBool(item, value, Py_EQ); + if (cmp > 0) { + return Dtool_WrapValue(index); + } + if (cmp < 0) { + return nullptr; + } + } else { + return nullptr; + } + } + // Not found, raise ValueError. + return PyErr_Format(PyExc_ValueError, "%s.index() did not find value", wrap->_base._name); +} + +/** + * Implementation of property.count(x) which returns the number of occurrences + * of x in the sequence. + */ +static PyObject *Dtool_SequenceWrapper_count(PyObject *self, PyObject *value) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)self; + nassertr(wrap, nullptr); + Py_ssize_t index = 0; + if (wrap->_len_func != nullptr) { + index = wrap->_len_func(wrap->_base._self); + } else { + return Dtool_Raise_TypeError("property does not support count()"); + } + // Iterate through the items, invoking the == operator for each. + long count = 0; + nassertr(wrap->_getitem_func, nullptr); + while (index > 0) { + --index; + PyObject *item = wrap->_getitem_func(wrap->_base._self, index); + if (item == nullptr) { + return nullptr; + } + int cmp = PyObject_RichCompareBool(item, value, Py_EQ); + if (cmp > 0) { + ++count; + } + if (cmp < 0) { + return nullptr; + } + } +#if PY_MAJOR_VERSION >= 3 + return PyLong_FromLong(count); +#else + return PyInt_FromLong(count); +#endif +} + +/** + * Implementation of `property[i] = x` + */ +static int Dtool_MutableSequenceWrapper_setitem(PyObject *self, Py_ssize_t index, PyObject *value) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, -1); + if (wrap->_setitem_func != nullptr) { + return wrap->_setitem_func(wrap->_base._self, index, value); + } else { + Dtool_Raise_TypeError("property does not support item assignment"); + return -1; + } +} + +/** + * Implementation of property.clear() which removes all elements in the + * sequence, starting with the last. + */ +static PyObject *Dtool_MutableSequenceWrapper_clear(PyObject *self, PyObject *) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, nullptr); + Py_ssize_t index = 0; + if (wrap->_len_func != nullptr && wrap->_setitem_func != nullptr) { + index = wrap->_len_func(wrap->_base._self); + } else { + return Dtool_Raise_TypeError("property does not support clear()"); + } + + // Iterate through the items, invoking the delete function for each. We do + // this in reverse order, which may be more efficient. + while (index > 0) { + --index; + if (wrap->_setitem_func(wrap->_base._self, index, nullptr) != 0) { + return nullptr; + } + } + Py_INCREF(Py_None); + return Py_None; +} + +/** + * Implementation of property.remove(x) which removes the first occurrence of + * x in the sequence, or raises a ValueError if it isn't found. + */ +static PyObject *Dtool_MutableSequenceWrapper_remove(PyObject *self, PyObject *value) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, nullptr); + Py_ssize_t length = 0; + if (wrap->_len_func != nullptr && wrap->_setitem_func != nullptr) { + length = wrap->_len_func(wrap->_base._self); + } else { + return Dtool_Raise_TypeError("property does not support remove()"); + } + + // Iterate through the items, invoking the equality function for each, until + // we have found the right one. + nassertr(wrap->_getitem_func, nullptr); + for (Py_ssize_t index = 0; index < length; ++index) { + PyObject *item = wrap->_getitem_func(wrap->_base._self, index); + if (item != nullptr) { + int cmp = PyObject_RichCompareBool(item, value, Py_EQ); + if (cmp > 0) { + if (wrap->_setitem_func(wrap->_base._self, index, nullptr) == 0) { + Py_INCREF(Py_None); + return Py_None; + } else { + return nullptr; + } + } + if (cmp < 0) { + return nullptr; + } + } else { + return nullptr; + } + } + // Not found, raise ValueError. + return PyErr_Format(PyExc_ValueError, "%s.remove() did not find value", wrap->_base._name); +} + +/** + * Implementation of property.pop([i=-1]) which returns and removes the + * element at the indicated index in the sequence. If no index is provided, + * it removes from the end of the list. + */ +static PyObject *Dtool_MutableSequenceWrapper_pop(PyObject *self, PyObject *args) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, nullptr); + if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr || + wrap->_len_func == nullptr) { + return Dtool_Raise_TypeError("property does not support pop()"); + } + + Py_ssize_t length = wrap->_len_func(wrap->_base._self); + Py_ssize_t index; + switch (PyTuple_GET_SIZE(args)) { + case 0: + index = length - 1; + break; + case 1: + index = PyNumber_AsSsize_t(PyTuple_GET_ITEM(args, 0), PyExc_IndexError); + if (index == -1 && _PyErr_OCCURRED()) { + return nullptr; + } + if (index < 0) { + index += length; + } + break; + default: + return Dtool_Raise_TypeError("pop([i=-1]) takes 0 or 1 arguments"); + } + + if (length <= 0) { + return PyErr_Format(PyExc_IndexError, "%s.pop() from empty sequence", wrap->_base._name); + } + + // Index error will be caught by getitem_func. + PyObject *value = wrap->_getitem_func(wrap->_base._self, index); + if (value != nullptr) { + if (wrap->_setitem_func(wrap->_base._self, index, nullptr) != 0) { + return nullptr; + } + return value; + } + return nullptr; +} + +/** + * Implementation of property.append(x) which is an alias for + * property.insert(len(property), x). + */ +static PyObject *Dtool_MutableSequenceWrapper_append(PyObject *self, PyObject *arg) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, nullptr); + if (wrap->_insert_func == nullptr) { + return Dtool_Raise_TypeError("property does not support append()"); + } + return wrap->_insert_func(wrap->_base._self, (size_t)-1, arg); +} + +/** + * Implementation of property.insert(i, x) which inserts the given item at the + * given position. + */ +static PyObject *Dtool_MutableSequenceWrapper_insert(PyObject *self, PyObject *args) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, nullptr); + if (wrap->_insert_func == nullptr) { + return Dtool_Raise_TypeError("property does not support insert()"); + } + if (PyTuple_GET_SIZE(args) != 2) { + return Dtool_Raise_TypeError("insert() takes exactly 2 arguments"); + } + Py_ssize_t index = PyNumber_AsSsize_t(PyTuple_GET_ITEM(args, 0), PyExc_IndexError); + if (index == -1 && _PyErr_OCCURRED()) { + return nullptr; + } + if (index < 0) { + if (wrap->_len_func != nullptr) { + index += wrap->_len_func(wrap->_base._self); + } else { + return PyErr_Format(PyExc_TypeError, "%s.insert() does not support negative indices", wrap->_base._name); + } + } + return wrap->_insert_func(wrap->_base._self, (ssize_t)max(index, (Py_ssize_t)0), PyTuple_GET_ITEM(args, 1)); +} + +/** + * Implementation of property.extend(seq) which is equivalent to: + * @code + * for x in seq: + * property.append(seq) + * @endcode + */ +static PyObject *Dtool_MutableSequenceWrapper_extend(PyObject *self, PyObject *arg) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)self; + nassertr(wrap, nullptr); + if (wrap->_insert_func == nullptr) { + return Dtool_Raise_TypeError("property does not support extend()"); + } + PyObject *iter = PyObject_GetIter(arg); + if (iter == nullptr) { + return nullptr; + } + PyObject *next = PyIter_Next(iter); + PyObject *retval = nullptr; + while (next != nullptr) { + retval = wrap->_insert_func(wrap->_base._self, (size_t)-1, next); + Py_DECREF(next); + if (retval == nullptr) { + Py_DECREF(iter); + return nullptr; + } + Py_DECREF(retval); + next = PyIter_Next(iter); + } + + Py_DECREF(iter); + Py_INCREF(Py_None); + return Py_None; +} + +/** + * Implementation of `x in mapping`. + */ +static int Dtool_MappingWrapper_contains(PyObject *self, PyObject *key) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, -1); + nassertr(wrap->_getitem_func, -1); + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + if (value != nullptr) { + Py_DECREF(value); + return 1; + } else if (_PyErr_OCCURRED() == PyExc_KeyError || + _PyErr_OCCURRED() == PyExc_TypeError) { + PyErr_Restore(nullptr, nullptr, nullptr); + return 0; + } else { + return -1; + } +} + +static PyObject *Dtool_MappingWrapper_getitem(PyObject *self, PyObject *key) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_getitem_func, nullptr); + return wrap->_getitem_func(wrap->_base._self, key); +} + +/** + * Implementation of iter(property) that returns an iterable over all the + * keys. + */ +static PyObject *Dtool_MappingWrapper_iter(PyObject *self) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + + if (wrap->_keys._len_func == nullptr || wrap->_keys._getitem_func == nullptr) { + return PyErr_Format(PyExc_TypeError, "%s is not iterable", wrap->_base._name); + } + + Dtool_SequenceWrapper *keys = Dtool_NewSequenceWrapper(wrap->_base._self, wrap->_base._name); + if (keys != nullptr) { + keys->_len_func = wrap->_keys._len_func; + keys->_getitem_func = wrap->_keys._getitem_func; + return PySeqIter_New((PyObject *)keys); + } else { + return nullptr; + } +} + +/** + * Implementation of property.get(key[,def=None]) which returns the value with + * the given key in the mapping, or the given default value (which defaults to + * None) if the key isn't found in the mapping. + */ +static PyObject *Dtool_MappingWrapper_get(PyObject *self, PyObject *args) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_getitem_func, nullptr); + Py_ssize_t size = PyTuple_GET_SIZE(args); + if (size != 1 && size != 2) { + return PyErr_Format(PyExc_TypeError, "%s.get() takes 1 or 2 arguments", wrap->_base._name); + } + PyObject *defvalue = Py_None; + if (size >= 2) { + defvalue = PyTuple_GET_ITEM(args, 1); + } + PyObject *key = PyTuple_GET_ITEM(args, 0); + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + if (value != nullptr) { + return value; + } else if (_PyErr_OCCURRED() == PyExc_KeyError) { + PyErr_Restore(nullptr, nullptr, nullptr); + Py_INCREF(defvalue); + return defvalue; + } else { + return nullptr; + } +} + +/** + * Implementation of property.keys(...) that returns a view of all the keys. + */ +static PyObject *Dtool_MappingWrapper_keys(PyObject *self, PyObject *) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + + if (wrap->_keys._len_func == nullptr || wrap->_keys._getitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support keys()"); + } + + Dtool_MappingWrapper *keys = (Dtool_MappingWrapper *)PyObject_MALLOC(sizeof(Dtool_MappingWrapper)); + if (keys == nullptr) { + return PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MappingWrapper_Keys_Type, "MappingView"); + } + + PyObject_INIT(keys, &Dtool_MappingWrapper_Keys_Type); + Py_XINCREF(wrap->_base._self); + keys->_base._self = wrap->_base._self; + keys->_base._name = wrap->_base._name; + keys->_keys._len_func = wrap->_keys._len_func; + keys->_keys._getitem_func = wrap->_keys._getitem_func; + keys->_getitem_func = wrap->_getitem_func; + keys->_setitem_func = nullptr; + return (PyObject *)keys; +} + +/** + * Implementation of property.values(...) that returns a view of the values. + */ +static PyObject *Dtool_MappingWrapper_values(PyObject *self, PyObject *) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_getitem_func, nullptr); + + if (wrap->_keys._len_func == nullptr || wrap->_keys._getitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support values()"); + } + + Dtool_MappingWrapper *values = (Dtool_MappingWrapper *)PyObject_MALLOC(sizeof(Dtool_MappingWrapper)); + if (values == nullptr) { + return PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MappingWrapper_Values_Type, "ValuesView"); + } + + PyObject_INIT(values, &Dtool_MappingWrapper_Values_Type); + Py_XINCREF(wrap->_base._self); + values->_base._self = wrap->_base._self; + values->_base._name = wrap->_base._name; + values->_keys._len_func = wrap->_keys._len_func; + values->_keys._getitem_func = wrap->_keys._getitem_func; + values->_getitem_func = wrap->_getitem_func; + values->_setitem_func = nullptr; + return (PyObject *)values; +} + +/** + * Implementation of property.items(...) that returns an iterable yielding a + * `(key, value)` tuple for every item. + */ +static PyObject *Dtool_MappingWrapper_items(PyObject *self, PyObject *) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_getitem_func, nullptr); + + if (wrap->_keys._len_func == nullptr || wrap->_keys._getitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support items()"); + } + + Dtool_MappingWrapper *items = (Dtool_MappingWrapper *)PyObject_MALLOC(sizeof(Dtool_MappingWrapper)); + if (items == nullptr) { + return PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MappingWrapper_Items_Type, "MappingView"); + } + + PyObject_INIT(items, &Dtool_MappingWrapper_Items_Type); + Py_XINCREF(wrap->_base._self); + items->_base._self = wrap->_base._self; + items->_base._name = wrap->_base._name; + items->_keys._len_func = wrap->_keys._len_func; + items->_keys._getitem_func = wrap->_keys._getitem_func; + items->_getitem_func = wrap->_getitem_func; + items->_setitem_func = nullptr; + return (PyObject *)items; +} + +/** + * Implementation of `property[key] = value` + */ +static int Dtool_MutableMappingWrapper_setitem(PyObject *self, PyObject *key, PyObject *value) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap->_setitem_func != nullptr, -1); + return wrap->_setitem_func(wrap->_base._self, key, value); +} + +/** + * Implementation of property.pop(key[,def=None]) which is the same as get() + * except that it also removes the element from the mapping. + */ +static PyObject *Dtool_MutableMappingWrapper_pop(PyObject *self, PyObject *args) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support pop()"); + } + + Py_ssize_t size = PyTuple_GET_SIZE(args); + if (size != 1 && size != 2) { + return PyErr_Format(PyExc_TypeError, "%s.pop() takes 1 or 2 arguments", wrap->_base._name); + } + PyObject *defvalue = Py_None; + if (size >= 2) { + defvalue = PyTuple_GET_ITEM(args, 1); + } + + PyObject *key = PyTuple_GET_ITEM(args, 0); + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + if (value != nullptr) { + // OK, now set unset this value. + if (wrap->_setitem_func(wrap->_base._self, key, nullptr) == 0) { + return value; + } else { + Py_DECREF(value); + return nullptr; + } + } else if (_PyErr_OCCURRED() == PyExc_KeyError) { + PyErr_Restore(nullptr, nullptr, nullptr); + Py_INCREF(defvalue); + return defvalue; + } else { + return nullptr; + } +} + +/** + * Implementation of property.popitem() which returns and removes an arbitrary + * (key, value) pair from the mapping. Useful for destructive iteration. + */ +static PyObject *Dtool_MutableMappingWrapper_popitem(PyObject *self, PyObject *) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr || + wrap->_keys._len_func == nullptr || wrap->_keys._getitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support popitem()"); + } + + Py_ssize_t length = wrap->_keys._len_func(wrap->_base._self); + if (length < 1) { + return PyErr_Format(PyExc_KeyError, "%s is empty", wrap->_base._name); + } + + PyObject *key = wrap->_keys._getitem_func(wrap->_base._self, length - 1); + if (key != nullptr) { + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + if (value != nullptr) { + // OK, now set unset this value. + if (wrap->_setitem_func(wrap->_base._self, key, nullptr) == 0) { + PyObject *item = PyTuple_New(2); + PyTuple_SET_ITEM(item, 0, key); + PyTuple_SET_ITEM(item, 1, value); + return item; + } + Py_DECREF(value); + } + } + return nullptr; +} + +/* + * Implementation of property.clear() which removes all elements in the + * mapping. + */ +static PyObject *Dtool_MutableMappingWrapper_clear(PyObject *self, PyObject *) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + Py_ssize_t index = 0; + if (wrap->_keys._len_func != nullptr && wrap->_keys._getitem_func != nullptr && + wrap->_setitem_func != nullptr) { + index = wrap->_keys._len_func(wrap->_base._self); + } else { + return Dtool_Raise_TypeError("property does not support clear()"); + } + + // Iterate through the items, invoking the delete function for each. We do + // this in reverse order, which may be more efficient. + while (index > 0) { + --index; + PyObject *key = wrap->_keys._getitem_func(wrap->_base._self, index); + if (key != nullptr) { + int result = wrap->_setitem_func(wrap->_base._self, key, nullptr); + Py_DECREF(key); + if (result != 0) { + return nullptr; + } + } + } + Py_INCREF(Py_None); + return Py_None; +} + +/** + * Implementation of property.setdefault(key[,def=None]) which is the same as + * get() except that it also writes the default value back to the mapping if + * the key was not found is missing. + */ +static PyObject *Dtool_MutableMappingWrapper_setdefault(PyObject *self, PyObject *args) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + + if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support setdefault()"); + } + + Py_ssize_t size = PyTuple_GET_SIZE(args); + if (size != 1 && size != 2) { + return PyErr_Format(PyExc_TypeError, "%s.setdefault() takes 1 or 2 arguments", wrap->_base._name); + } + PyObject *defvalue = Py_None; + if (size >= 2) { + defvalue = PyTuple_GET_ITEM(args, 1); + } + PyObject *key = PyTuple_GET_ITEM(args, 0); + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + if (value != nullptr) { + return value; + } else if (_PyErr_OCCURRED() == PyExc_KeyError) { + PyErr_Restore(nullptr, nullptr, nullptr); + if (wrap->_setitem_func(wrap->_base._self, key, defvalue) == 0) { + Py_INCREF(defvalue); + return defvalue; + } + } + return nullptr; +} + +/** + * Implementation of property.update(...) which sets multiple values in one + * go. It accepts either a single dictionary or keyword arguments, not both. + */ +static PyObject *Dtool_MutableMappingWrapper_update(PyObject *self, PyObject *args, PyObject *kwargs) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + + if (wrap->_getitem_func == nullptr || wrap->_setitem_func == nullptr) { + return Dtool_Raise_TypeError("property does not support update()"); + } + + // We accept either a dict argument or keyword arguments, but not both. + PyObject *dict; + switch (PyTuple_GET_SIZE(args)) { + case 0: + if (kwargs == nullptr) { + // This is legal. + Py_INCREF(Py_None); + return Py_None; + } + dict = kwargs; + break; + case 1: + if (PyDict_Check(PyTuple_GET_ITEM(args, 0)) && (kwargs == nullptr || Py_SIZE(kwargs) == 0)) { + dict = PyTuple_GET_ITEM(args, 0); + break; + } + // Fall through + default: + return PyErr_Format(PyExc_TypeError, "%s.update() takes either a dict argument or keyword arguments", wrap->_base._name); + } + + PyObject *key, *value; + Py_ssize_t pos = 0; + while (PyDict_Next(dict, &pos, &key, &value)) { + if (wrap->_setitem_func(wrap->_base._self, key, value) != 0) { + return nullptr; + } + } + Py_INCREF(Py_None); + return Py_None; +} + +/** + * This variant defines only a sequence interface. + */ +static PySequenceMethods Dtool_SequenceWrapper_SequenceMethods = { + Dtool_SequenceWrapper_length, + 0, // sq_concat + 0, // sq_repeat + Dtool_SequenceWrapper_getitem, + 0, // sq_slice + 0, // sq_ass_item + 0, // sq_ass_slice + Dtool_SequenceWrapper_contains, + 0, // sq_inplace_concat + 0, // sq_inplace_repeat +}; + +static PyMethodDef Dtool_SequenceWrapper_Methods[] = { + {"index", &Dtool_SequenceWrapper_index, METH_O, nullptr}, + {"count", &Dtool_SequenceWrapper_count, METH_O, nullptr}, + {nullptr, nullptr, 0, nullptr} +}; + +PyTypeObject Dtool_SequenceWrapper_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "sequence wrapper", + sizeof(Dtool_SequenceWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_SequenceWrapper_repr, + 0, // tp_as_number + &Dtool_SequenceWrapper_SequenceMethods, + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + PySeqIter_New, + 0, // tp_iternext + Dtool_SequenceWrapper_Methods, + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This is a variant on SequenceWrapper that also has an insert() method. + */ +static PySequenceMethods Dtool_MutableSequenceWrapper_SequenceMethods = { + Dtool_SequenceWrapper_length, + 0, // sq_concat + 0, // sq_repeat + Dtool_SequenceWrapper_getitem, + 0, // sq_slice + Dtool_MutableSequenceWrapper_setitem, + 0, // sq_ass_slice + Dtool_SequenceWrapper_contains, + Dtool_MutableSequenceWrapper_extend, + 0, // sq_inplace_repeat +}; + +static PyMethodDef Dtool_MutableSequenceWrapper_Methods[] = { + {"index", &Dtool_SequenceWrapper_index, METH_O, nullptr}, + {"count", &Dtool_SequenceWrapper_count, METH_O, nullptr}, + {"clear", &Dtool_MutableSequenceWrapper_clear, METH_NOARGS, nullptr}, + {"pop", &Dtool_MutableSequenceWrapper_pop, METH_VARARGS, nullptr}, + {"remove", &Dtool_MutableSequenceWrapper_remove, METH_O, nullptr}, + {"append", &Dtool_MutableSequenceWrapper_append, METH_O, nullptr}, + {"insert", &Dtool_MutableSequenceWrapper_insert, METH_VARARGS, nullptr}, + {"extend", &Dtool_MutableSequenceWrapper_extend, METH_O, nullptr}, + {nullptr, nullptr, 0, nullptr} +}; + +PyTypeObject Dtool_MutableSequenceWrapper_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "sequence wrapper", + sizeof(Dtool_MutableSequenceWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_SequenceWrapper_repr, + 0, // tp_as_number + &Dtool_MutableSequenceWrapper_SequenceMethods, + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + PySeqIter_New, + 0, // tp_iternext + Dtool_MutableSequenceWrapper_Methods, + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This variant defines only a mapping interface. + */ +static PySequenceMethods Dtool_MappingWrapper_SequenceMethods = { + Dtool_SequenceWrapper_length, + 0, // sq_concat + 0, // sq_repeat + 0, // sq_item + 0, // sq_slice + 0, // sq_ass_item + 0, // sq_ass_slice + Dtool_MappingWrapper_contains, + 0, // sq_inplace_concat + 0, // sq_inplace_repeat +}; + +static PyMappingMethods Dtool_MappingWrapper_MappingMethods = { + Dtool_SequenceWrapper_length, + Dtool_MappingWrapper_getitem, + 0, // mp_ass_subscript +}; + +static PyMethodDef Dtool_MappingWrapper_Methods[] = { + {"get", &Dtool_MappingWrapper_get, METH_VARARGS, nullptr}, + {"keys", &Dtool_MappingWrapper_keys, METH_NOARGS, nullptr}, + {"values", &Dtool_MappingWrapper_values, METH_NOARGS, nullptr}, + {"items", &Dtool_MappingWrapper_items, METH_NOARGS, nullptr}, + {nullptr, nullptr, 0, nullptr} +}; + +PyTypeObject Dtool_MappingWrapper_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "mapping wrapper", + sizeof(Dtool_MappingWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_WrapperBase_repr, + 0, // tp_as_number + &Dtool_MappingWrapper_SequenceMethods, + &Dtool_MappingWrapper_MappingMethods, + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + Dtool_MappingWrapper_iter, + 0, // tp_iternext + Dtool_MappingWrapper_Methods, + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This variant defines only a mutable mapping interface. + */ +static PyMappingMethods Dtool_MutableMappingWrapper_MappingMethods = { + Dtool_SequenceWrapper_length, + Dtool_MappingWrapper_getitem, + Dtool_MutableMappingWrapper_setitem, +}; + +static PyMethodDef Dtool_MutableMappingWrapper_Methods[] = { + {"get", &Dtool_MappingWrapper_get, METH_VARARGS, nullptr}, + {"pop", &Dtool_MutableMappingWrapper_pop, METH_VARARGS, nullptr}, + {"popitem", &Dtool_MutableMappingWrapper_popitem, METH_NOARGS, nullptr}, + {"clear", &Dtool_MutableMappingWrapper_clear, METH_VARARGS, nullptr}, + {"setdefault", &Dtool_MutableMappingWrapper_setdefault, METH_VARARGS, nullptr}, + {"update", (PyCFunction) &Dtool_MutableMappingWrapper_update, METH_VARARGS | METH_KEYWORDS, nullptr}, + {"keys", &Dtool_MappingWrapper_keys, METH_NOARGS, nullptr}, + {"values", &Dtool_MappingWrapper_values, METH_NOARGS, nullptr}, + {"items", &Dtool_MappingWrapper_items, METH_NOARGS, nullptr}, + {nullptr, nullptr, 0, nullptr} +}; + +PyTypeObject Dtool_MutableMappingWrapper_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "mapping wrapper", + sizeof(Dtool_MappingWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_WrapperBase_repr, + 0, // tp_as_number + &Dtool_MappingWrapper_SequenceMethods, + &Dtool_MutableMappingWrapper_MappingMethods, + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + Dtool_MappingWrapper_iter, + 0, // tp_iternext + Dtool_MutableMappingWrapper_Methods, + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This is returned by mapping.items(). + */ +static PyObject *Dtool_MappingWrapper_Items_repr(PyObject *self) { + Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; + nassertr(wrap, nullptr); + + PyObject *repr = PyObject_Repr(wrap->_self); + PyObject *result; +#if PY_MAJOR_VERSION >= 3 + result = PyUnicode_FromFormat("<%s.items() of %s>", wrap->_name, PyUnicode_AsUTF8(repr)); +#else + result = PyString_FromFormat("<%s.items() of %s>", wrap->_name, PyString_AS_STRING(repr)); +#endif + Py_DECREF(repr); + return result; +} + +static PyObject *Dtool_MappingWrapper_Items_getitem(PyObject *self, Py_ssize_t index) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_keys._getitem_func, nullptr); + + PyObject *key = wrap->_keys._getitem_func(wrap->_base._self, index); + if (key != nullptr) { + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + if (value != nullptr) { + // PyTuple_SET_ITEM steals the reference. + PyObject *item = PyTuple_New(2); + PyTuple_SET_ITEM(item, 0, key); + PyTuple_SET_ITEM(item, 1, value); + return item; + } else { + Py_DECREF(key); + } + } + return nullptr; +} + +static PySequenceMethods Dtool_MappingWrapper_Items_SequenceMethods = { + Dtool_SequenceWrapper_length, + 0, // sq_concat + 0, // sq_repeat + Dtool_MappingWrapper_Items_getitem, + 0, // sq_slice + 0, // sq_ass_item + 0, // sq_ass_slice + Dtool_MappingWrapper_contains, + 0, // sq_inplace_concat + 0, // sq_inplace_repeat +}; + +PyTypeObject Dtool_MappingWrapper_Items_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "sequence wrapper", + sizeof(Dtool_MappingWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_MappingWrapper_Items_repr, + 0, // tp_as_number + &Dtool_MappingWrapper_Items_SequenceMethods, + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + PySeqIter_New, + 0, // tp_iternext + 0, // tp_methods + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This is returned by mapping.keys(). + */ +static PyObject *Dtool_MappingWrapper_Keys_repr(PyObject *self) { + Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; + nassertr(wrap, nullptr); + + PyObject *repr = PyObject_Repr(wrap->_self); + PyObject *result; +#if PY_MAJOR_VERSION >= 3 + result = PyUnicode_FromFormat("<%s.keys() of %s>", wrap->_name, PyUnicode_AsUTF8(repr)); +#else + result = PyString_FromFormat("<%s.keys() of %s>", wrap->_name, PyString_AS_STRING(repr)); +#endif + Py_DECREF(repr); + return result; +} + +static PySequenceMethods Dtool_MappingWrapper_Keys_SequenceMethods = { + Dtool_SequenceWrapper_length, + 0, // sq_concat + 0, // sq_repeat + Dtool_MappingWrapper_Items_getitem, + 0, // sq_slice + 0, // sq_ass_item + 0, // sq_ass_slice + Dtool_MappingWrapper_contains, + 0, // sq_inplace_concat + 0, // sq_inplace_repeat +}; + +PyTypeObject Dtool_MappingWrapper_Keys_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "sequence wrapper", + sizeof(Dtool_SequenceWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_MappingWrapper_Keys_repr, + 0, // tp_as_number + &Dtool_SequenceWrapper_SequenceMethods, + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + PySeqIter_New, + 0, // tp_iternext + 0, // tp_methods + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This is returned by mapping.values(). + */ +static PyObject *Dtool_MappingWrapper_Values_repr(PyObject *self) { + Dtool_WrapperBase *wrap = (Dtool_WrapperBase *)self; + nassertr(wrap, nullptr); + + PyObject *repr = PyObject_Repr(wrap->_self); + PyObject *result; +#if PY_MAJOR_VERSION >= 3 + result = PyUnicode_FromFormat("<%s.values() of %s>", wrap->_name, PyUnicode_AsUTF8(repr)); +#else + result = PyString_FromFormat("<%s.values() of %s>", wrap->_name, PyString_AS_STRING(repr)); +#endif + Py_DECREF(repr); + return result; +} + +static PyObject *Dtool_MappingWrapper_Values_getitem(PyObject *self, Py_ssize_t index) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_keys._getitem_func, nullptr); + + PyObject *key = wrap->_keys._getitem_func(wrap->_base._self, index); + if (key != nullptr) { + PyObject *value = wrap->_getitem_func(wrap->_base._self, key); + Py_DECREF(key); + return value; + } + return nullptr; +} + +static PySequenceMethods Dtool_MappingWrapper_Values_SequenceMethods = { + Dtool_SequenceWrapper_length, + 0, // sq_concat + 0, // sq_repeat + Dtool_MappingWrapper_Values_getitem, + 0, // sq_slice + 0, // sq_ass_item + 0, // sq_ass_slice + Dtool_MappingWrapper_contains, + 0, // sq_inplace_concat + 0, // sq_inplace_repeat +}; + +PyTypeObject Dtool_MappingWrapper_Values_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "sequence wrapper", + sizeof(Dtool_MappingWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + Dtool_MappingWrapper_Values_repr, + 0, // tp_as_number + &Dtool_MappingWrapper_Values_SequenceMethods, + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + PySeqIter_New, + 0, // tp_iternext + 0, // tp_methods + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This variant defines only a generator interface. + */ +static PyObject *Dtool_GeneratorWrapper_iternext(PyObject *self) { + Dtool_GeneratorWrapper *wrap = (Dtool_GeneratorWrapper *)self; + nassertr(wrap, nullptr); + nassertr(wrap->_iternext_func, nullptr); + return wrap->_iternext_func(wrap->_base._self); +} + +PyTypeObject Dtool_GeneratorWrapper_Type = { + PyVarObject_HEAD_INIT(nullptr, 0) + "generator wrapper", + sizeof(Dtool_GeneratorWrapper), + 0, // tp_itemsize + Dtool_WrapperBase_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + 0, // tp_repr + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + PyObject_GenericSetAttr, + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, + 0, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + PyObject_SelfIter, + Dtool_GeneratorWrapper_iternext, + 0, // tp_methods + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, + 0, // tp_new + PyObject_Del, + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This is a variant of the Python getset mechanism that permits static + * properties. + */ +static void +Dtool_StaticProperty_dealloc(PyDescrObject *descr) { + _PyObject_GC_UNTRACK(descr); + Py_XDECREF(descr->d_type); + Py_XDECREF(descr->d_name); +//#if PY_MAJOR_VERSION >= 3 +// Py_XDECREF(descr->d_qualname); +//#endif + PyObject_GC_Del(descr); +} + +static PyObject * +Dtool_StaticProperty_repr(PyDescrObject *descr, const char *format) { +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + PyUnicode_AsUTF8(descr->d_name), + descr->d_type->tp_name); +#else + return PyString_FromFormat("", + PyString_AS_STRING(descr->d_name), + descr->d_type->tp_name); +#endif +} + +static int +Dtool_StaticProperty_traverse(PyObject *self, visitproc visit, void *arg) { + PyDescrObject *descr = (PyDescrObject *)self; + Py_VISIT(descr->d_type); + return 0; +} + +static PyObject * +Dtool_StaticProperty_get(PyGetSetDescrObject *descr, PyObject *obj, PyObject *type) { + if (descr->d_getset->get != nullptr) { + return descr->d_getset->get(obj, descr->d_getset->closure); + } else { + return PyErr_Format(PyExc_AttributeError, + "attribute '%s' of type '%.100s' is not readable", +#if PY_MAJOR_VERSION >= 3 + PyUnicode_AsUTF8(((PyDescrObject *)descr)->d_name), +#else + PyString_AS_STRING(((PyDescrObject *)descr)->d_name), +#endif + ((PyDescrObject *)descr)->d_type->tp_name); + } +} + +static int +Dtool_StaticProperty_set(PyGetSetDescrObject *descr, PyObject *obj, PyObject *value) { + if (descr->d_getset->set != nullptr) { + return descr->d_getset->set(obj, value, descr->d_getset->closure); + } else { + PyErr_Format(PyExc_AttributeError, + "attribute '%s' of type '%.100s' is not writable", +#if PY_MAJOR_VERSION >= 3 + PyUnicode_AsUTF8(((PyDescrObject *)descr)->d_name), +#else + PyString_AS_STRING(((PyDescrObject *)descr)->d_name), +#endif + ((PyDescrObject *)descr)->d_type->tp_name); + return -1; + } +} + +PyTypeObject Dtool_StaticProperty_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "getset_descriptor", + sizeof(PyGetSetDescrObject), + 0, // tp_itemsize + (destructor)Dtool_StaticProperty_dealloc, + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_reserved + (reprfunc)Dtool_StaticProperty_repr, + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + PyObject_GenericGetAttr, + 0, // tp_setattro + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT, + 0, // tp_doc + Dtool_StaticProperty_traverse, + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + 0, // tp_iter + 0, // tp_iternext + 0, // tp_methods + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + (descrgetfunc)Dtool_StaticProperty_get, + (descrsetfunc)Dtool_StaticProperty_set, + 0, // tp_dictoffset + 0, // tp_init + 0, // tp_alloc + 0, // tp_new + 0, // tp_del + 0, // tp_is_gc + 0, // tp_bases + 0, // tp_mro + 0, // tp_cache + 0, // tp_subclasses + 0, // tp_weaklist + 0, // tp_del +}; + +/** + * This wraps around a property that exposes a sequence interface. + */ +Dtool_SequenceWrapper *Dtool_NewSequenceWrapper(PyObject *self, const char *name) { + Dtool_SequenceWrapper *wrap = (Dtool_SequenceWrapper *)PyObject_MALLOC(sizeof(Dtool_SequenceWrapper)); + if (wrap == nullptr) { + return (Dtool_SequenceWrapper *)PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MutableSequenceWrapper_Type, "Sequence"); + } + + PyObject_INIT(wrap, &Dtool_SequenceWrapper_Type); + Py_XINCREF(self); + wrap->_base._self = self; + wrap->_base._name = name; + wrap->_len_func = nullptr; + wrap->_getitem_func = nullptr; + return wrap; +} + +/** + * This wraps around a property that exposes a mutable sequence interface. + */ +Dtool_MutableSequenceWrapper *Dtool_NewMutableSequenceWrapper(PyObject *self, const char *name) { + Dtool_MutableSequenceWrapper *wrap = (Dtool_MutableSequenceWrapper *)PyObject_MALLOC(sizeof(Dtool_MutableSequenceWrapper)); + if (wrap == nullptr) { + return (Dtool_MutableSequenceWrapper *)PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MutableSequenceWrapper_Type, "MutableSequence"); + } + + PyObject_INIT(wrap, &Dtool_MutableSequenceWrapper_Type); + Py_XINCREF(self); + wrap->_base._self = self; + wrap->_base._name = name; + wrap->_len_func = nullptr; + wrap->_getitem_func = nullptr; + wrap->_setitem_func = nullptr; + wrap->_insert_func = nullptr; + return wrap; +} + +/** + * This wraps around a mapping interface, with getitem function. + */ +Dtool_MappingWrapper *Dtool_NewMappingWrapper(PyObject *self, const char *name) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)PyObject_MALLOC(sizeof(Dtool_MappingWrapper)); + if (wrap == nullptr) { + return (Dtool_MappingWrapper *)PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MappingWrapper_Type, "Mapping"); + } + + PyObject_INIT(wrap, &Dtool_MappingWrapper_Type); + Py_XINCREF(self); + wrap->_base._self = self; + wrap->_base._name = name; + wrap->_keys._len_func = nullptr; + wrap->_keys._getitem_func = nullptr; + wrap->_getitem_func = nullptr; + wrap->_setitem_func = nullptr; + return wrap; +} + +/** + * This wraps around a mapping interface, with getitem/setitem functions. + */ +Dtool_MappingWrapper *Dtool_NewMutableMappingWrapper(PyObject *self, const char *name) { + Dtool_MappingWrapper *wrap = (Dtool_MappingWrapper *)PyObject_MALLOC(sizeof(Dtool_MappingWrapper)); + if (wrap == nullptr) { + return (Dtool_MappingWrapper *)PyErr_NoMemory(); + } + + // If the collections.abc module is loaded, register this as a subclass. + static bool registered = false; + if (!registered) { + registered = true; + _register_collection((PyTypeObject *)&Dtool_MutableMappingWrapper_Type, "MutableMapping"); + } + + PyObject_INIT(wrap, &Dtool_MutableMappingWrapper_Type); + Py_XINCREF(self); + wrap->_base._self = self; + wrap->_base._name = name; + wrap->_keys._len_func = nullptr; + wrap->_keys._getitem_func = nullptr; + wrap->_getitem_func = nullptr; + wrap->_setitem_func = nullptr; + return wrap; +} + +/** + * This is a variant of the Python getset mechanism that permits static + * properties. + */ +PyObject * +Dtool_NewStaticProperty(PyTypeObject *type, const PyGetSetDef *getset) { + PyGetSetDescrObject *descr; + descr = (PyGetSetDescrObject *)PyType_GenericAlloc(&Dtool_StaticProperty_Type, 0); + if (descr != nullptr) { + Py_XINCREF(type); + descr->d_getset = (PyGetSetDef *)getset; +#if PY_MAJOR_VERSION >= 3 + descr->d_common.d_type = type; + descr->d_common.d_name = PyUnicode_InternFromString(getset->name); +#if PY_VERSION_HEX >= 0x03030000 + descr->d_common.d_qualname = nullptr; +#endif +#else + descr->d_type = type; + descr->d_name = PyString_InternFromString(getset->name); +#endif + } + return (PyObject *)descr; +} diff --git a/dtool/src/interrogatedb/py_wrappers.h b/dtool/src/interrogatedb/py_wrappers.h new file mode 100755 index 0000000000..66f2183299 --- /dev/null +++ b/dtool/src/interrogatedb/py_wrappers.h @@ -0,0 +1,74 @@ +/** + * PANDA 3D SOFTWARE + * Copyright (c) Carnegie Mellon University. All rights reserved. + * + * All use of this software is subject to the terms of the revised BSD + * license. You should have received a copy of this license along + * with this source code in a file named "LICENSE." + * + * @file py_wrappers.h + * @author rdb + * @date 2017-11-26 + */ + +#ifndef PY_WRAPPERS_H +#define PY_WRAPPERS_H + +#include "py_panda.h" + +/** + * These classes are returned from properties that require a subscript + * interface, ie. something.children[i] = 3. + */ +struct Dtool_WrapperBase { + PyObject_HEAD; + PyObject *_self; + const char *_name; +}; + +struct Dtool_SequenceWrapper { + Dtool_WrapperBase _base; + lenfunc _len_func; + ssizeargfunc _getitem_func; +}; + +struct Dtool_MutableSequenceWrapper { + Dtool_WrapperBase _base; + lenfunc _len_func; + ssizeargfunc _getitem_func; + ssizeobjargproc _setitem_func; + PyObject *(*_insert_func)(PyObject *, size_t, PyObject *); +}; + +struct Dtool_MappingWrapper { + union { + Dtool_WrapperBase _base; + Dtool_SequenceWrapper _keys; + }; + binaryfunc _getitem_func; + objobjargproc _setitem_func; +}; + +struct Dtool_GeneratorWrapper { + Dtool_WrapperBase _base; + iternextfunc _iternext_func; +}; + +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_SequenceWrapper_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MutableSequenceWrapper_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MappingWrapper_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MutableMappingWrapper_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MappingWrapper_Items_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MappingWrapper_Keys_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_MappingWrapper_Values_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_GeneratorWrapper_Type; +EXPCL_INTERROGATEDB extern PyTypeObject Dtool_StaticProperty_Type; + +EXPCL_INTERROGATEDB Dtool_SequenceWrapper *Dtool_NewSequenceWrapper(PyObject *self, const char *name); +EXPCL_INTERROGATEDB Dtool_MutableSequenceWrapper *Dtool_NewMutableSequenceWrapper(PyObject *self, const char *name); +EXPCL_INTERROGATEDB Dtool_MappingWrapper *Dtool_NewMappingWrapper(PyObject *self, const char *name); +EXPCL_INTERROGATEDB Dtool_MappingWrapper *Dtool_NewMutableMappingWrapper(PyObject *self, const char *name); +EXPCL_INTERROGATEDB PyObject *Dtool_NewGenerator(PyObject *self, const char *name, iternextfunc func); +EXPCL_INTERROGATEDB PyObject *Dtool_NewStaticProperty(PyTypeObject *obj, const PyGetSetDef *getset); + +#endif diff --git a/dtool/src/pystub/pystub.cxx b/dtool/src/pystub/pystub.cxx index ca7da889d1..f9a30e74bf 100644 --- a/dtool/src/pystub/pystub.cxx +++ b/dtool/src/pystub/pystub.cxx @@ -66,6 +66,7 @@ extern "C" { EXPCL_PYSTUB int PyInt_FromLong(...); EXPCL_PYSTUB int PyInt_FromSize_t(...); EXPCL_PYSTUB int PyInt_Type(...); + EXPCL_PYSTUB int PyIter_Next(...); EXPCL_PYSTUB int PyList_Append(...); EXPCL_PYSTUB int PyList_AsTuple(...); EXPCL_PYSTUB int PyList_GetItem(...); @@ -91,6 +92,7 @@ extern "C" { EXPCL_PYSTUB int PyModule_AddStringConstant(...); EXPCL_PYSTUB int PyModule_Create2(...); EXPCL_PYSTUB int PyModule_Create2TraceRefs(...); + EXPCL_PYSTUB int PyModule_GetDict(...); EXPCL_PYSTUB int PyNumber_AsSsize_t(...); EXPCL_PYSTUB int PyNumber_Check(...); EXPCL_PYSTUB int PyNumber_Float(...); @@ -111,15 +113,18 @@ extern "C" { EXPCL_PYSTUB int PyObject_GenericSetAttr(...); EXPCL_PYSTUB int PyObject_GetAttrString(...); EXPCL_PYSTUB int PyObject_GetBuffer(...); + EXPCL_PYSTUB int PyObject_GetIter(...); EXPCL_PYSTUB int PyObject_HasAttrString(...); EXPCL_PYSTUB int PyObject_IsInstance(...); EXPCL_PYSTUB int PyObject_IsTrue(...); + EXPCL_PYSTUB int PyObject_Malloc(...); EXPCL_PYSTUB int PyObject_Repr(...); EXPCL_PYSTUB int PyObject_RichCompareBool(...); EXPCL_PYSTUB int PyObject_SelfIter(...); EXPCL_PYSTUB int PyObject_SetAttrString(...); EXPCL_PYSTUB int PyObject_Str(...); EXPCL_PYSTUB int PyObject_Type(...); + EXPCL_PYSTUB int PySeqIter_New(...); EXPCL_PYSTUB int PySequence_Check(...); EXPCL_PYSTUB int PySequence_Fast(...); EXPCL_PYSTUB int PySequence_GetItem(...); @@ -290,6 +295,7 @@ int PyInt_AsSsize_t(...) { return 0; } int PyInt_FromLong(...) { return 0; } int PyInt_FromSize_t(...) { return 0; } int PyInt_Type(...) { return 0; } +int PyIter_Next(...) { return 0; } int PyList_Append(...) { return 0; } int PyList_AsTuple(...) { return 0; } int PyList_GetItem(...) { return 0; } @@ -315,6 +321,7 @@ int PyModule_AddObject(...) { return 0; }; int PyModule_AddStringConstant(...) { return 0; }; int PyModule_Create2(...) { return 0; }; int PyModule_Create2TraceRefs(...) { return 0; }; +int PyModule_GetDict(...) { return 0; }; int PyNumber_AsSsize_t(...) { return 0; } int PyNumber_Check(...) { return 0; } int PyNumber_Float(...) { return 0; } @@ -335,15 +342,18 @@ int PyObject_GenericGetAttr(...) { return 0; }; int PyObject_GenericSetAttr(...) { return 0; }; int PyObject_GetAttrString(...) { return 0; } int PyObject_GetBuffer(...) { return 0; } +int PyObject_GetIter(...) { return 0; } int PyObject_HasAttrString(...) { return 0; } int PyObject_IsInstance(...) { return 0; } int PyObject_IsTrue(...) { return 0; } +int PyObject_Malloc(...) { return 0; } int PyObject_Repr(...) { return 0; } int PyObject_RichCompareBool(...) { return 0; } int PyObject_SelfIter(...) { return 0; } int PyObject_SetAttrString(...) { return 0; } int PyObject_Str(...) { return 0; } int PyObject_Type(...) { return 0; } +int PySeqIter_New(...) { return 0; } int PySequence_Check(...) { return 0; } int PySequence_Fast(...) { return 0; } int PySequence_GetItem(...) { return 0; } diff --git a/panda/src/chan/animGroup.h b/panda/src/chan/animGroup.h index a58c1aff5d..50067213d8 100644 --- a/panda/src/chan/animGroup.h +++ b/panda/src/chan/animGroup.h @@ -49,7 +49,6 @@ PUBLISHED: void sort_descendants(); MAKE_SEQ_PROPERTY(children, get_num_children, get_child); - MAKE_MAP_PROPERTY(children, get_child_named, get_child_named); public: virtual TypeHandle get_value_type() const; diff --git a/panda/src/chan/partGroup.h b/panda/src/chan/partGroup.h index 50025a9eb9..ae5f919b7c 100644 --- a/panda/src/chan/partGroup.h +++ b/panda/src/chan/partGroup.h @@ -76,7 +76,6 @@ PUBLISHED: void sort_descendants(); MAKE_SEQ_PROPERTY(children, get_num_children, get_child); - MAKE_MAP_PROPERTY(children, get_child_named, get_child_named); bool apply_freeze(const TransformState *transform); virtual bool apply_freeze_matrix(const LVecBase3 &pos, const LVecBase3 &hpr, const LVecBase3 &scale); diff --git a/panda/src/collide/collisionNode.I b/panda/src/collide/collisionNode.I index 01f6e95311..51fe8002fb 100644 --- a/panda/src/collide/collisionNode.I +++ b/panda/src/collide/collisionNode.I @@ -65,7 +65,7 @@ clear_solids() { /** * */ -INLINE int CollisionNode:: +INLINE size_t CollisionNode:: get_num_solids() const { return _solids.size(); } @@ -74,8 +74,8 @@ get_num_solids() const { * */ INLINE CPT(CollisionSolid) CollisionNode:: -get_solid(int n) const { - nassertr(n >= 0 && n < get_num_solids(), NULL); +get_solid(size_t n) const { + nassertr(n < get_num_solids(), nullptr); return _solids[n].get_read_pointer(); } @@ -83,8 +83,8 @@ get_solid(int n) const { * */ INLINE PT(CollisionSolid) CollisionNode:: -modify_solid(int n) { - nassertr(n >= 0 && n < get_num_solids(), NULL); +modify_solid(size_t n) { + nassertr(n < get_num_solids(), nullptr); mark_internal_bounds_stale(); return _solids[n].get_write_pointer(); } @@ -93,19 +93,31 @@ modify_solid(int n) { * Replaces the solid with the indicated index. */ INLINE void CollisionNode:: -set_solid(int n, CollisionSolid *solid) { - nassertv(n >= 0 && n < get_num_solids()); +set_solid(size_t n, CollisionSolid *solid) { + nassertv(n < get_num_solids()); _solids[n] = solid; mark_internal_bounds_stale(); } +/** + * Inserts the indicated solid to the node at the indicated position. + */ +INLINE void CollisionNode:: +insert_solid(size_t n, const CollisionSolid *solid) { + if (n > _solids.size()) { + n = _solids.size(); + } + _solids.insert(_solids.begin() + n, (CollisionSolid *)solid); + mark_internal_bounds_stale(); +} + /** * Removes the solid with the indicated index. This will shift all subsequent * indices down by one. */ INLINE void CollisionNode:: -remove_solid(int n) { - nassertv(n >= 0 && n < get_num_solids()); +remove_solid(size_t n) { + nassertv(n < get_num_solids()); _solids.erase(_solids.begin() + n); mark_internal_bounds_stale(); } @@ -114,7 +126,7 @@ remove_solid(int n) { * Adds the indicated solid to the node. Returns the index of the new solid * within the node's list of solids. */ -INLINE int CollisionNode:: +INLINE size_t CollisionNode:: add_solid(const CollisionSolid *solid) { _solids.push_back((CollisionSolid *)solid); mark_internal_bounds_stale(); diff --git a/panda/src/collide/collisionNode.h b/panda/src/collide/collisionNode.h index c350888acd..e9a61b404d 100644 --- a/panda/src/collide/collisionNode.h +++ b/panda/src/collide/collisionNode.h @@ -61,14 +61,15 @@ PUBLISHED: set_into_collide_mask); INLINE void clear_solids(); - INLINE int get_num_solids() const; - INLINE CPT(CollisionSolid) get_solid(int n) const; + INLINE size_t get_num_solids() const; + INLINE CPT(CollisionSolid) get_solid(size_t n) const; MAKE_SEQ(get_solids, get_num_solids, get_solid); - INLINE PT(CollisionSolid) modify_solid(int n); - INLINE void set_solid(int n, CollisionSolid *solid); - INLINE void remove_solid(int n); - INLINE int add_solid(const CollisionSolid *solid); - MAKE_SEQ_PROPERTY(solids, get_num_solids, get_solid, set_solid, remove_solid); + INLINE PT(CollisionSolid) modify_solid(size_t n); + INLINE void set_solid(size_t n, CollisionSolid *solid); + INLINE void insert_solid(size_t n, const CollisionSolid *solid); + INLINE void remove_solid(size_t n); + INLINE size_t add_solid(const CollisionSolid *solid); + MAKE_SEQ_PROPERTY(solids, get_num_solids, get_solid, set_solid, remove_solid, insert_solid); INLINE int get_collider_sort() const; INLINE void set_collider_sort(int sort); diff --git a/panda/src/egg/eggCompositePrimitive.I b/panda/src/egg/eggCompositePrimitive.I index a3c805f4a0..9a0d054100 100644 --- a/panda/src/egg/eggCompositePrimitive.I +++ b/panda/src/egg/eggCompositePrimitive.I @@ -38,7 +38,7 @@ operator = (const EggCompositePrimitive ©) { * Returns the number of individual component triangles within the composite. * Each one of these might have a different set of attributes. */ -INLINE int EggCompositePrimitive:: +INLINE size_t EggCompositePrimitive:: get_num_components() const { return _components.size(); } @@ -47,8 +47,8 @@ get_num_components() const { * Returns the attributes for the nth component triangle. */ INLINE const EggAttributes *EggCompositePrimitive:: -get_component(int i) const { - nassertr(i >= 0 && i < (int)_components.size(), NULL); +get_component(size_t i) const { + nassertr(i < _components.size(), nullptr); return _components[i]; } @@ -56,8 +56,8 @@ get_component(int i) const { * Returns the attributes for the nth component triangle. */ INLINE EggAttributes *EggCompositePrimitive:: -get_component(int i) { - nassertr(i >= 0 && i < (int)_components.size(), NULL); +get_component(size_t i) { + nassertr(i < _components.size(), nullptr); return _components[i]; } @@ -65,8 +65,8 @@ get_component(int i) { * Changes the attributes for the nth component triangle. */ INLINE void EggCompositePrimitive:: -set_component(int i, const EggAttributes *attrib) { - nassertv(i >= 0 && i < (int)_components.size()); +set_component(size_t i, const EggAttributes *attrib) { + nassertv(i < _components.size()); _components[i] = new EggAttributes(*attrib); } diff --git a/panda/src/egg/eggCompositePrimitive.h b/panda/src/egg/eggCompositePrimitive.h index e6911ea3bc..9b5e0fa58d 100644 --- a/panda/src/egg/eggCompositePrimitive.h +++ b/panda/src/egg/eggCompositePrimitive.h @@ -32,11 +32,11 @@ PUBLISHED: virtual Shading get_shading() const; - INLINE int get_num_components() const; - INLINE const EggAttributes *get_component(int i) const; - INLINE EggAttributes *get_component(int i); + INLINE size_t get_num_components() const; + INLINE const EggAttributes *get_component(size_t i) const; + INLINE EggAttributes *get_component(size_t i); MAKE_SEQ(get_components, get_num_components, get_component); - INLINE void set_component(int i, const EggAttributes *attrib); + INLINE void set_component(size_t i, const EggAttributes *attrib); MAKE_SEQ_PROPERTY(components, get_num_components, get_component, set_component); diff --git a/panda/src/egg/eggPrimitive.I b/panda/src/egg/eggPrimitive.I index d849d23882..8ae8a1eecf 100644 --- a/panda/src/egg/eggPrimitive.I +++ b/panda/src/egg/eggPrimitive.I @@ -372,6 +372,17 @@ set_vertex(size_t index, EggVertex *vertex) { replace(begin() + index, vertex); } +/** + * Inserts a vertex at the given position. + */ +INLINE void EggPrimitive:: +insert_vertex(size_t index, EggVertex *vertex) { + if (index > _vertices.size()) { + index = _vertices.size(); + } + _vertices.insert(_vertices.begin() + index, vertex); +} + /** * Returns a particular index based on its index number. */ @@ -381,7 +392,6 @@ get_vertex(size_t index) const { return *(begin() + index); } - /** * Returns the vertex pool associated with the vertices of the primitive, or * NULL if the primitive has no vertices. diff --git a/panda/src/egg/eggPrimitive.h b/panda/src/egg/eggPrimitive.h index 4644387632..9ec9d9cf79 100644 --- a/panda/src/egg/eggPrimitive.h +++ b/panda/src/egg/eggPrimitive.h @@ -181,13 +181,14 @@ PUBLISHED: // These are shorthands if you don't want to use the iterators. INLINE size_t get_num_vertices() const; - INLINE void set_vertex(size_t index, EggVertex *vertex); INLINE EggVertex *get_vertex(size_t index) const; + INLINE void set_vertex(size_t index, EggVertex *vertex); + INLINE void insert_vertex(size_t index, EggVertex *vertex); MAKE_SEQ(get_vertices, get_num_vertices, get_vertex); INLINE EggVertexPool *get_pool() const; - MAKE_SEQ_PROPERTY(vertices, get_num_vertices, get_vertex, set_vertex, remove_vertex); + MAKE_SEQ_PROPERTY(vertices, get_num_vertices, get_vertex, set_vertex, remove_vertex, insert_vertex); MAKE_PROPERTY(pool, get_pool); virtual void write(ostream &out, int indent_level) const=0; diff --git a/panda/src/gobj/geom.I b/panda/src/gobj/geom.I index 3457a8b265..d553c12977 100644 --- a/panda/src/gobj/geom.I +++ b/panda/src/gobj/geom.I @@ -68,7 +68,7 @@ is_empty() const { * Returns the number of GeomPrimitive objects stored within the Geom, each of * which represents a number of primitives of a particular type. */ -INLINE int Geom:: +INLINE size_t Geom:: get_num_primitives() const { CDReader cdata(_cycler); return cdata->_primitives.size(); @@ -80,9 +80,9 @@ get_num_primitives() const { * or set_primitive() if you want to modify it. */ INLINE CPT(GeomPrimitive) Geom:: -get_primitive(int i) const { +get_primitive(size_t i) const { CDReader cdata(_cycler); - nassertr(i >= 0 && i < (int)cdata->_primitives.size(), NULL); + nassertr(i < cdata->_primitives.size(), nullptr); return cdata->_primitives[i].get_read_pointer(); } @@ -95,15 +95,28 @@ get_primitive(int i) const { * away other changes you might have recently made in an upstream thread. */ INLINE PT(GeomPrimitive) Geom:: -modify_primitive(int i) { +modify_primitive(size_t i) { Thread *current_thread = Thread::get_current_thread(); CDWriter cdata(_cycler, true, current_thread); - nassertr(i >= 0 && i < (int)cdata->_primitives.size(), NULL); + nassertr(i < cdata->_primitives.size(), NULL); cdata->_modified = Geom::get_next_modified(); clear_cache_stage(current_thread); return cdata->_primitives[i].get_write_pointer(); } +/** + * Inserts a new GeomPrimitive structure to the Geom object. This specifies a + * particular subset of vertices that are used to define geometric primitives + * of the indicated type. + * + * Don't call this in a downstream thread unless you don't mind it blowing + * away other changes you might have recently made in an upstream thread. + */ +INLINE void Geom:: +add_primitive(const GeomPrimitive *primitive) { + insert_primitive((size_t)-1, primitive); +} + /** * Decomposes all of the primitives within this Geom, returning the result. * See GeomPrimitive::decompose(). diff --git a/panda/src/gobj/geom.cxx b/panda/src/gobj/geom.cxx index 6019a4c577..8590342010 100644 --- a/panda/src/gobj/geom.cxx +++ b/panda/src/gobj/geom.cxx @@ -294,10 +294,10 @@ make_nonindexed(bool composite_only) { * away other changes you might have recently made in an upstream thread. */ void Geom:: -set_primitive(int i, const GeomPrimitive *primitive) { +set_primitive(size_t i, const GeomPrimitive *primitive) { Thread *current_thread = Thread::get_current_thread(); CDWriter cdata(_cycler, true, current_thread); - nassertv(i >= 0 && i < (int)cdata->_primitives.size()); + nassertv(i < cdata->_primitives.size()); nassertv(primitive->check_valid(cdata->_data.get_read_pointer(current_thread))); // All primitives within a particular Geom must have the same fundamental @@ -327,7 +327,7 @@ set_primitive(int i, const GeomPrimitive *primitive) { } /** - * Adds a new GeomPrimitive structure to the Geom object. This specifies a + * Inserts a new GeomPrimitive structure to the Geom object. This specifies a * particular subset of vertices that are used to define geometric primitives * of the indicated type. * @@ -335,7 +335,7 @@ set_primitive(int i, const GeomPrimitive *primitive) { * away other changes you might have recently made in an upstream thread. */ void Geom:: -add_primitive(const GeomPrimitive *primitive) { +insert_primitive(size_t i, const GeomPrimitive *primitive) { Thread *current_thread = Thread::get_current_thread(); CDWriter cdata(_cycler, true, current_thread); @@ -348,9 +348,13 @@ add_primitive(const GeomPrimitive *primitive) { // They also should have a compatible shade model. CPT(GeomPrimitive) compat = primitive->match_shade_model(cdata->_shade_model); - nassertv_always(compat != (GeomPrimitive *)NULL); + nassertv_always(compat != nullptr); - cdata->_primitives.push_back((GeomPrimitive *)compat.p()); + if (i >= cdata->_primitives.size()) { + cdata->_primitives.push_back((GeomPrimitive *)compat.p()); + } else { + cdata->_primitives.insert(cdata->_primitives.begin() + i, (GeomPrimitive *)compat.p()); + } PrimitiveType new_primitive_type = compat->get_primitive_type(); if (new_primitive_type != cdata->_primitive_type) { cdata->_primitive_type = new_primitive_type; @@ -374,10 +378,10 @@ add_primitive(const GeomPrimitive *primitive) { * away other changes you might have recently made in an upstream thread. */ void Geom:: -remove_primitive(int i) { +remove_primitive(size_t i) { Thread *current_thread = Thread::get_current_thread(); CDWriter cdata(_cycler, true, current_thread); - nassertv(i >= 0 && i < (int)cdata->_primitives.size()); + nassertv(i < cdata->_primitives.size()); cdata->_primitives.erase(cdata->_primitives.begin() + i); if (cdata->_primitives.empty()) { cdata->_primitive_type = PT_none; diff --git a/panda/src/gobj/geom.h b/panda/src/gobj/geom.h index 0c61e5ef84..8b220a5a4a 100644 --- a/panda/src/gobj/geom.h +++ b/panda/src/gobj/geom.h @@ -87,15 +87,16 @@ PUBLISHED: INLINE bool is_empty() const; - INLINE int get_num_primitives() const; - INLINE CPT(GeomPrimitive) get_primitive(int i) const; + INLINE size_t get_num_primitives() const; + INLINE CPT(GeomPrimitive) get_primitive(size_t i) const; MAKE_SEQ(get_primitives, get_num_primitives, get_primitive); - INLINE PT(GeomPrimitive) modify_primitive(int i); - void set_primitive(int i, const GeomPrimitive *primitive); - void add_primitive(const GeomPrimitive *primitive); - void remove_primitive(int i); + INLINE PT(GeomPrimitive) modify_primitive(size_t i); + void set_primitive(size_t i, const GeomPrimitive *primitive); + void insert_primitive(size_t i, const GeomPrimitive *primitive); + INLINE void add_primitive(const GeomPrimitive *primitive); + void remove_primitive(size_t i); void clear_primitives(); - MAKE_SEQ_PROPERTY(primitives, get_num_primitives, get_primitive, set_primitive, remove_primitive); + MAKE_SEQ_PROPERTY(primitives, get_num_primitives, get_primitive, set_primitive, remove_primitive, insert_primitive); INLINE PT(Geom) decompose() const; INLINE PT(Geom) doubleside() const; diff --git a/panda/src/gobj/geomVertexData.I b/panda/src/gobj/geomVertexData.I index 47fe0ef41b..53c1c76367 100644 --- a/panda/src/gobj/geomVertexData.I +++ b/panda/src/gobj/geomVertexData.I @@ -129,7 +129,7 @@ reserve_num_rows(int n) { * Returns the number of individual arrays stored within the data. This must * match get_format()->get_num_arrays(). */ -INLINE int GeomVertexData:: +INLINE size_t GeomVertexData:: get_num_arrays() const { CDReader cdata(_cycler); return cdata->_arrays.size(); @@ -141,9 +141,9 @@ get_num_arrays() const { * data. */ INLINE CPT(GeomVertexArrayData) GeomVertexData:: -get_array(int i) const { +get_array(size_t i) const { CDReader cdata(_cycler); - nassertr(i >= 0 && i < (int)cdata->_arrays.size(), NULL); + nassertr(i < cdata->_arrays.size(), nullptr); return cdata->_arrays[i].get_read_pointer(); } @@ -151,10 +151,10 @@ get_array(int i) const { * Equivalent to get_array(i).get_handle(). */ INLINE CPT(GeomVertexArrayDataHandle) GeomVertexData:: -get_array_handle(int i) const { +get_array_handle(size_t i) const { Thread *current_thread = Thread::get_current_thread(); CDReader cdata(_cycler, current_thread); - nassertr(i >= 0 && i < (int)cdata->_arrays.size(), NULL); + nassertr(i < cdata->_arrays.size(), nullptr); return new GeomVertexArrayDataHandle(cdata->_arrays[i].get_read_pointer(), current_thread); } @@ -168,7 +168,7 @@ get_array_handle(int i) const { * away other changes you might have recently made in an upstream thread. */ INLINE PT(GeomVertexArrayData) GeomVertexData:: -modify_array(int i) { +modify_array(size_t i) { GeomVertexDataPipelineWriter writer(this, true, Thread::get_current_thread()); return writer.modify_array(i); } @@ -177,7 +177,7 @@ modify_array(int i) { * Equivalent to modify_array(i).modify_handle(). */ INLINE PT(GeomVertexArrayDataHandle) GeomVertexData:: -modify_array_handle(int i) { +modify_array_handle(size_t i) { Thread *current_thread = Thread::get_current_thread(); GeomVertexDataPipelineWriter writer(this, true, current_thread); return new GeomVertexArrayDataHandle(writer.modify_array(i), current_thread); @@ -192,7 +192,7 @@ modify_array_handle(int i) { * away other changes you might have recently made in an upstream thread. */ INLINE void GeomVertexData:: -set_array(int i, const GeomVertexArrayData *array) { +set_array(size_t i, const GeomVertexArrayData *array) { GeomVertexDataPipelineWriter writer(this, true, Thread::get_current_thread()); writer.set_array(i, array); } @@ -888,9 +888,9 @@ check_array_writers() const { * */ INLINE GeomVertexArrayDataHandle *GeomVertexDataPipelineWriter:: -get_array_writer(int i) const { +get_array_writer(size_t i) const { nassertr(_got_array_writers, NULL); - nassertr(i >= 0 && i < (int)_array_writers.size(), NULL); + nassertr(i < _array_writers.size(), nullptr); return _array_writers[i]; } diff --git a/panda/src/gobj/geomVertexData.cxx b/panda/src/gobj/geomVertexData.cxx index cfa47d9949..339f38114e 100644 --- a/panda/src/gobj/geomVertexData.cxx +++ b/panda/src/gobj/geomVertexData.cxx @@ -2565,8 +2565,8 @@ reserve_num_rows(int n) { * */ PT(GeomVertexArrayData) GeomVertexDataPipelineWriter:: -modify_array(int i) { - nassertr(i >= 0 && i < (int)_cdata->_arrays.size(), NULL); +modify_array(size_t i) { + nassertr(i < _cdata->_arrays.size(), nullptr); PT(GeomVertexArrayData) new_data; if (_got_array_writers) { @@ -2586,8 +2586,8 @@ modify_array(int i) { * */ void GeomVertexDataPipelineWriter:: -set_array(int i, const GeomVertexArrayData *array) { - nassertv(i >= 0 && i < (int)_cdata->_arrays.size()); +set_array(size_t i, const GeomVertexArrayData *array) { + nassertv(i < _cdata->_arrays.size()); _cdata->_arrays[i] = (GeomVertexArrayData *)array; _object->clear_cache_stage(); _cdata->_modified = Geom::get_next_modified(); diff --git a/panda/src/gobj/geomVertexData.h b/panda/src/gobj/geomVertexData.h index 37839d98b8..f2858d5a16 100644 --- a/panda/src/gobj/geomVertexData.h +++ b/panda/src/gobj/geomVertexData.h @@ -105,13 +105,13 @@ PUBLISHED: INLINE bool reserve_num_rows(int n); void clear_rows(); - INLINE int get_num_arrays() const; - INLINE CPT(GeomVertexArrayData) get_array(int i) const; - INLINE CPT(GeomVertexArrayDataHandle) get_array_handle(int i) const; + INLINE size_t get_num_arrays() const; + INLINE CPT(GeomVertexArrayData) get_array(size_t i) const; + INLINE CPT(GeomVertexArrayDataHandle) get_array_handle(size_t i) const; MAKE_SEQ(get_arrays, get_num_arrays, get_array); - INLINE PT(GeomVertexArrayData) modify_array(int i); - INLINE PT(GeomVertexArrayDataHandle) modify_array_handle(int i); - INLINE void set_array(int i, const GeomVertexArrayData *array); + INLINE PT(GeomVertexArrayData) modify_array(size_t i); + INLINE PT(GeomVertexArrayDataHandle) modify_array_handle(size_t i); + INLINE void set_array(size_t i, const GeomVertexArrayData *array); MAKE_SEQ_PROPERTY(arrays, get_num_arrays, get_array, set_array); INLINE const TransformTable *get_transform_table() const; @@ -520,10 +520,10 @@ public: INLINE GeomVertexData *get_object() const; INLINE void check_array_writers() const; - INLINE GeomVertexArrayDataHandle *get_array_writer(int i) const; + INLINE GeomVertexArrayDataHandle *get_array_writer(size_t i) const; - PT(GeomVertexArrayData) modify_array(int i); - void set_array(int i, const GeomVertexArrayData *array); + PT(GeomVertexArrayData) modify_array(size_t i); + void set_array(size_t i, const GeomVertexArrayData *array); int get_num_rows() const; bool set_num_rows(int n); diff --git a/panda/src/gobj/geomVertexFormat.cxx b/panda/src/gobj/geomVertexFormat.cxx index 0b1795c093..f3652e8321 100644 --- a/panda/src/gobj/geomVertexFormat.cxx +++ b/panda/src/gobj/geomVertexFormat.cxx @@ -310,7 +310,9 @@ add_array(const GeomVertexArrayFormat *array_format) { void GeomVertexFormat:: insert_array(size_t array, const GeomVertexArrayFormat *array_format) { nassertv(!is_registered()); - nassertv(array <= _arrays.size()); + if (array > _arrays.size()) { + array = _arrays.size(); + } _arrays.insert(_arrays.begin() + array, (GeomVertexArrayFormat *)array_format); } @@ -377,6 +379,22 @@ get_column(size_t i) const { return NULL; } +/** + * Returns the name of the ith column, across all arrays. + */ +const InternalName *GeomVertexFormat:: +get_column_name(size_t i) const { + Arrays::const_iterator ai; + for (ai = _arrays.begin(); ai != _arrays.end(); ++ai) { + if (i < (size_t)(*ai)->get_num_columns()) { + return (*ai)->get_column(i)->get_name(); + } + i -= (*ai)->get_num_columns(); + } + + return nullptr; +} + /** * Returns the index number of the array with the ith column. * diff --git a/panda/src/gobj/geomVertexFormat.h b/panda/src/gobj/geomVertexFormat.h index 23d1ab5a7b..aa2ef4606a 100644 --- a/panda/src/gobj/geomVertexFormat.h +++ b/panda/src/gobj/geomVertexFormat.h @@ -92,6 +92,7 @@ PUBLISHED: int get_array_with(const InternalName *name) const; const GeomVertexColumn *get_column(const InternalName *name) const; INLINE bool has_column(const InternalName *name) const; + const InternalName *get_column_name(size_t i) const; MAKE_SEQ(get_columns, get_num_columns, get_column); @@ -120,13 +121,13 @@ PUBLISHED: MAKE_SEQ(get_morph_bases, get_num_morphs, get_morph_base); MAKE_SEQ(get_morph_deltas, get_num_morphs, get_morph_delta); - MAKE_SEQ_PROPERTY(arrays, get_num_arrays, get_array, set_array, remove_array); - MAKE_SEQ_PROPERTY(columns, get_num_columns, get_column); + MAKE_SEQ_PROPERTY(arrays, get_num_arrays, get_array, set_array, remove_array, insert_array); MAKE_SEQ_PROPERTY(points, get_num_points, get_point); MAKE_SEQ_PROPERTY(vectors, get_num_vectors, get_vector); // We also define this as a mapping interface, for lookups by name. MAKE_MAP_PROPERTY(columns, has_column, get_column); + MAKE_MAP_KEYS_SEQ(columns, get_num_columns, get_column_name); void output(ostream &out) const; void write(ostream &out, int indent_level = 0) const; diff --git a/panda/src/gobj/transformBlend.h b/panda/src/gobj/transformBlend.h index 9ca49ab9c4..45b5793294 100644 --- a/panda/src/gobj/transformBlend.h +++ b/panda/src/gobj/transformBlend.h @@ -68,8 +68,8 @@ PUBLISHED: MAKE_SEQ_PROPERTY(transforms, get_num_transforms, get_transform, set_transform, remove_transform); - MAKE_SEQ_PROPERTY(weights, get_num_transforms, get_weight, set_weight); MAKE_MAP_PROPERTY(weights, has_transform, get_weight); + MAKE_MAP_KEYS_SEQ(weights, get_num_transforms, get_transform); INLINE void update_blend(Thread *current_thread) const; diff --git a/panda/src/gobj/transformTable.cxx b/panda/src/gobj/transformTable.cxx index 258299fafc..73d0665079 100644 --- a/panda/src/gobj/transformTable.cxx +++ b/panda/src/gobj/transformTable.cxx @@ -65,6 +65,23 @@ set_transform(size_t n, const VertexTransform *transform) { _transforms[n] = transform; } +/** + * Inserts a new transform to the table at the given index position. If the + * index is beyond the end of the table, appends it to the end. Only valid + * for unregistered tables. + * + * This does not automatically uniquify the pointer; if the transform is + * already present in the table, it will be added twice. + */ +void TransformTable:: +insert_transform(size_t n, const VertexTransform *transform) { + nassertv(!_is_registered); + if (n > _transforms.size()) { + n = _transforms.size(); + } + _transforms.insert(_transforms.begin() + n, transform); +} + /** * Removes the nth transform. Only valid for unregistered tables. */ diff --git a/panda/src/gobj/transformTable.h b/panda/src/gobj/transformTable.h index 0483fced99..b55e4106df 100644 --- a/panda/src/gobj/transformTable.h +++ b/panda/src/gobj/transformTable.h @@ -51,6 +51,7 @@ PUBLISHED: INLINE UpdateSeq get_modified(Thread *current_thread = Thread::get_current_thread()) const; void set_transform(size_t n, const VertexTransform *transform); + void insert_transform(size_t n, const VertexTransform *transform); void remove_transform(size_t n); size_t add_transform(const VertexTransform *transform); @@ -58,7 +59,8 @@ PUBLISHED: MAKE_PROPERTY(registered, is_registered); MAKE_PROPERTY(modified, get_modified); - MAKE_SEQ_PROPERTY(transforms, get_num_transforms, get_transform, set_transform, remove_transform); + MAKE_SEQ_PROPERTY(transforms, get_num_transforms, get_transform, set_transform, + remove_transform, insert_transform); private: void do_register(); diff --git a/panda/src/parametrics/parametricCurveCollection.I b/panda/src/parametrics/parametricCurveCollection.I index c8549fa0b8..07fd5e9f26 100644 --- a/panda/src/parametrics/parametricCurveCollection.I +++ b/panda/src/parametrics/parametricCurveCollection.I @@ -36,6 +36,15 @@ get_curve(int index) const { return _curves[index]; } +/** + * Adds a new ParametricCurve to the collection at the indicated index. + * @deprecated Use insert_curve(index, curve) instead. + */ +INLINE void ParametricCurveCollection:: +add_curve(ParametricCurve *curve, int index) { + insert_curve(max(index, 0), curve); +} + /** * Returns the maximum T value associated with the *last* curve in the * collection. Normally, this will be either the XYZ or HPR curve, or a diff --git a/panda/src/parametrics/parametricCurveCollection.cxx b/panda/src/parametrics/parametricCurveCollection.cxx index 2778161e34..45d61ccfe8 100644 --- a/panda/src/parametrics/parametricCurveCollection.cxx +++ b/panda/src/parametrics/parametricCurveCollection.cxx @@ -42,9 +42,9 @@ add_curve(ParametricCurve *curve) { * Adds a new ParametricCurve to the collection at the indicated index. */ void ParametricCurveCollection:: -add_curve(ParametricCurve *curve, int index) { +insert_curve(size_t index, ParametricCurve *curve) { prepare_add_curve(curve); - index = max(min(index, (int)_curves.size()), 0); + index = min(index, _curves.size()); _curves.insert(_curves.begin() + index, curve); redraw(); } @@ -93,8 +93,8 @@ remove_curve(ParametricCurve *curve) { * number. */ void ParametricCurveCollection:: -remove_curve(int index) { - nassertv(index >= 0 && index < (int)_curves.size()); +remove_curve(size_t index) { + nassertv(index < _curves.size()); PT(ParametricCurve) curve = _curves[index]; prepare_remove_curve(curve); _curves.erase(_curves.begin() + index); @@ -107,8 +107,8 @@ remove_curve(int index) { * number. */ void ParametricCurveCollection:: -set_curve(int index, ParametricCurve *curve) { - nassertv(index >= 0 && index < (int)_curves.size()); +set_curve(size_t index, ParametricCurve *curve) { + nassertv(index < _curves.size()); prepare_remove_curve(_curves[index]); prepare_add_curve(curve); _curves[index] = curve; diff --git a/panda/src/parametrics/parametricCurveCollection.h b/panda/src/parametrics/parametricCurveCollection.h index 1f4ab5c2cb..44e588dd89 100644 --- a/panda/src/parametrics/parametricCurveCollection.h +++ b/panda/src/parametrics/parametricCurveCollection.h @@ -41,10 +41,11 @@ PUBLISHED: void add_curve(ParametricCurve *curve); void add_curve(ParametricCurve *curve, int index); + void insert_curve(size_t index, ParametricCurve *curve); int add_curves(PandaNode *node); bool remove_curve(ParametricCurve *curve); - void remove_curve(int index); - void set_curve(int index, ParametricCurve *curve); + void remove_curve(size_t index); + void set_curve(size_t index, ParametricCurve *curve); bool has_curve(ParametricCurve *curve) const; void clear(); void clear_timewarps(); diff --git a/panda/src/pgraph/nodePath.h b/panda/src/pgraph/nodePath.h index 961d68c644..617aac46a5 100644 --- a/panda/src/pgraph/nodePath.h +++ b/panda/src/pgraph/nodePath.h @@ -913,10 +913,11 @@ PUBLISHED: INLINE bool has_net_tag(const string &key) const; NodePath find_net_tag(const string &key) const; - MAKE_MAP_PROPERTY(tags, has_tag, get_tag, set_tag, clear_tag); MAKE_MAP_PROPERTY(net_tags, has_net_tag, get_net_tag); + EXTENSION(INLINE PyObject *get_tags() const); EXTENSION(INLINE PyObject *get_tag_keys() const); + MAKE_PROPERTY(tags, get_tags); EXTENSION(PyObject *get_python_tags()); EXTENSION(INLINE void set_python_tag(PyObject *keys, PyObject *value)); diff --git a/panda/src/pgraph/nodePath_ext.I b/panda/src/pgraph/nodePath_ext.I index 5bc6c78c5a..01554fb08d 100644 --- a/panda/src/pgraph/nodePath_ext.I +++ b/panda/src/pgraph/nodePath_ext.I @@ -32,6 +32,7 @@ get_python_tags() { /** * This variant on get_tag_keys returns a Python list of strings. Returns * None if the NodePath is empty. + * @deprecated use `np.tags.keys()` instead. */ INLINE PyObject *Extension:: get_tag_keys() const { diff --git a/panda/src/pgraph/nodePath_ext.cxx b/panda/src/pgraph/nodePath_ext.cxx index 5b63c896ff..db517c8453 100644 --- a/panda/src/pgraph/nodePath_ext.cxx +++ b/panda/src/pgraph/nodePath_ext.cxx @@ -27,6 +27,7 @@ extern struct Dtool_PyTypedObject Dtool_LPoint3d; extern struct Dtool_PyTypedObject Dtool_LPoint3f; #endif extern struct Dtool_PyTypedObject Dtool_NodePath; +extern struct Dtool_PyTypedObject Dtool_PandaNode; #endif // CPPPARSER /** @@ -166,6 +167,30 @@ __reduce_persist__(PyObject *self, PyObject *pickler) const { return tuple; } +/** + * Returns the associated node's tags. + */ +PyObject *Extension:: +get_tags() const { + // An empty NodePath returns None + if (_this->is_empty()) { + Py_INCREF(Py_None); + return Py_None; + } + + // Just call PandaNode.tags rather than defining a whole new interface. + PT(PandaNode) node = _this->node(); + PyObject *py_node = DTool_CreatePyInstanceTyped + ((void *)node.p(), Dtool_PandaNode, true, false, node->get_type_index()); + + // DTool_CreatePyInstanceTyped() steals a C++ reference. + node.cheat() = nullptr; + + PyObject *result = PyObject_GetAttrString(py_node, "tags"); + Py_DECREF(py_node); + return result; +} + /** * Returns the lowest ancestor of this node that contains a tag definition * with the indicated key, if any, or an empty NodePath if no ancestor of this diff --git a/panda/src/pgraph/nodePath_ext.h b/panda/src/pgraph/nodePath_ext.h index 6d29f49a67..e736b4ed1b 100644 --- a/panda/src/pgraph/nodePath_ext.h +++ b/panda/src/pgraph/nodePath_ext.h @@ -34,6 +34,7 @@ public: PyObject *__reduce__(PyObject *self) const; PyObject *__reduce_persist__(PyObject *self, PyObject *pickler) const; + PyObject *get_tags() const; INLINE PyObject *get_tag_keys() const; INLINE PyObject *get_python_tags(); diff --git a/panda/src/pgraph/pandaNode.I b/panda/src/pgraph/pandaNode.I index ecff479445..de6682e911 100644 --- a/panda/src/pgraph/pandaNode.I +++ b/panda/src/pgraph/pandaNode.I @@ -348,12 +348,12 @@ has_dirty_prev_transform() const { INLINE string PandaNode:: get_tag(const string &key, Thread *current_thread) const { CDReader cdata(_cycler, current_thread); - TagData::const_iterator ti; - ti = cdata->_tag_data.find(key); - if (ti != cdata->_tag_data.end()) { - return (*ti).second; + int index = cdata->_tag_data.find(key); + if (index >= 0) { + return cdata->_tag_data.get_data((size_t)index); + } else { + return string(); } - return string(); } /** @@ -364,9 +364,25 @@ get_tag(const string &key, Thread *current_thread) const { INLINE bool PandaNode:: has_tag(const string &key, Thread *current_thread) const { CDReader cdata(_cycler, current_thread); - TagData::const_iterator ti; - ti = cdata->_tag_data.find(key); - return (ti != cdata->_tag_data.end()); + return cdata->_tag_data.find(key) >= 0; +} + +/** + * Returns the number of tags applied to this node. + */ +INLINE size_t PandaNode:: +get_num_tags() const { + CDReader cdata(_cycler); + return cdata->_tag_data.size(); +} + +/** + * Returns the key of the nth tag applied to this node. + */ +INLINE string PandaNode:: +get_tag_key(size_t i) const { + CDReader cdata(_cycler); + return cdata->_tag_data.get_key(i); } /** @@ -376,7 +392,7 @@ has_tag(const string &key, Thread *current_thread) const { INLINE bool PandaNode:: has_tags() const { CDReader cdata(_cycler); - if (!cdata->_tag_data.empty()) { + if (!cdata->_tag_data.is_empty()) { return true; } #ifdef HAVE_PYTHON @@ -1448,12 +1464,12 @@ get_prev_transform() const { */ INLINE string PandaNodePipelineReader:: get_tag(const string &key) const { - PandaNode::TagData::const_iterator ti; - ti = _cdata->_tag_data.find(key); - if (ti != _cdata->_tag_data.end()) { - return (*ti).second; + int index = _cdata->_tag_data.find(key); + if (index >= 0) { + return _cdata->_tag_data.get_data((size_t)index); + } else { + return string(); } - return string(); } /** @@ -1463,9 +1479,7 @@ get_tag(const string &key) const { */ INLINE bool PandaNodePipelineReader:: has_tag(const string &key) const { - PandaNode::TagData::const_iterator ti; - ti = _cdata->_tag_data.find(key); - return (ti != _cdata->_tag_data.end()); + return _cdata->_tag_data.find(key) >= 0; } /** diff --git a/panda/src/pgraph/pandaNode.cxx b/panda/src/pgraph/pandaNode.cxx index fc86c46403..0d64cb0828 100644 --- a/panda/src/pgraph/pandaNode.cxx +++ b/panda/src/pgraph/pandaNode.cxx @@ -1216,7 +1216,7 @@ set_tag(const string &key, const string &value, Thread *current_thread) { // stages. OPEN_ITERATE_CURRENT_AND_UPSTREAM(_cycler, current_thread) { CDStageWriter cdata(_cycler, pipeline_stage, current_thread); - cdata->_tag_data[key] = value; + cdata->_tag_data.store(key, value); cdata->set_fancy_bit(FB_tag, true); } CLOSE_ITERATE_CURRENT_AND_UPSTREAM(_cycler); @@ -1231,8 +1231,8 @@ void PandaNode:: clear_tag(const string &key, Thread *current_thread) { OPEN_ITERATE_CURRENT_AND_UPSTREAM(_cycler, current_thread) { CDStageWriter cdata(_cycler, pipeline_stage, current_thread); - cdata->_tag_data.erase(key); - cdata->set_fancy_bit(FB_tag, !cdata->_tag_data.empty()); + cdata->_tag_data.remove(key); + cdata->set_fancy_bit(FB_tag, !cdata->_tag_data.is_empty()); } CLOSE_ITERATE_CURRENT_AND_UPSTREAM(_cycler); mark_bam_modified(); @@ -1257,13 +1257,10 @@ copy_tags(PandaNode *other) { CDStageWriter cdataw(_cycler, pipeline_stage, current_thread); CDStageReader cdatar(other->_cycler, pipeline_stage, current_thread); - TagData::const_iterator ti; - for (ti = cdatar->_tag_data.begin(); - ti != cdatar->_tag_data.end(); - ++ti) { - cdataw->_tag_data[(*ti).first] = (*ti).second; + for (size_t n = 0; n < cdatar->_tag_data.size(); ++n) { + cdataw->_tag_data.store(cdatar->_tag_data.get_key(n), cdatar->_tag_data.get_data(n)); } - cdataw->set_fancy_bit(FB_tag, !cdataw->_tag_data.empty()); + cdataw->set_fancy_bit(FB_tag, !cdataw->_tag_data.is_empty()); } CLOSE_ITERATE_CURRENT_AND_UPSTREAM(_cycler); @@ -1286,14 +1283,11 @@ copy_tags(PandaNode *other) { void PandaNode:: list_tags(ostream &out, const string &separator) const { CDReader cdata(_cycler); - if (!cdata->_tag_data.empty()) { - TagData::const_iterator ti = cdata->_tag_data.begin(); - out << (*ti).first; - ++ti; - while (ti != cdata->_tag_data.end()) { - out << separator << (*ti).first; - ++ti; + for (size_t n = 0; n < cdata->_tag_data.size(); ++n) { + if (n > 0) { + out << separator; } + out << cdata->_tag_data.get_key(n); } // We used to list the Python tags here. That's a bit awkward, though, @@ -1310,12 +1304,8 @@ list_tags(ostream &out, const string &separator) const { void PandaNode:: get_tag_keys(vector_string &keys) const { CDReader cdata(_cycler); - if (!cdata->_tag_data.empty()) { - TagData::const_iterator ti = cdata->_tag_data.begin(); - while (ti != cdata->_tag_data.end()) { - keys.push_back((*ti).first); - ++ti; - } + for (size_t n = 0; n < cdata->_tag_data.size(); ++n) { + keys.push_back(cdata->_tag_data.get_key(n)); } } @@ -1331,28 +1321,30 @@ compare_tags(const PandaNode *other) const { CDReader cdata(_cycler); CDReader cdata_other(other->_cycler); - TagData::const_iterator ati = cdata->_tag_data.begin(); - TagData::const_iterator bti = cdata_other->_tag_data.begin(); - while (ati != cdata->_tag_data.end() && - bti != cdata_other->_tag_data.end()) { - int cmp = strcmp((*ati).first.c_str(), (*bti).first.c_str()); + const TagData &a_data = cdata->_tag_data; + const TagData &b_data = cdata_other->_tag_data; + + size_t ai = 0; + size_t bi = 0; + while (ai < a_data.size() && bi < b_data.size()) { + int cmp = strcmp(a_data.get_key(ai).c_str(), b_data.get_key(bi).c_str()); if (cmp != 0) { return cmp; } - cmp = strcmp((*ati).second.c_str(), (*bti).second.c_str()); + cmp = strcmp(a_data.get_key(ai).c_str(), b_data.get_key(bi).c_str()); if (cmp != 0) { return cmp; } - ++ati; - ++bti; + ++ai; + ++bi; } - if (ati != cdata->_tag_data.end()) { + if (ai < a_data.size()) { // list A is longer. return 1; } - if (bti != cdata_other->_tag_data.end()) { + if (bi < b_data.size()) { // list B is longer. return -1; } @@ -1412,11 +1404,8 @@ copy_all_properties(PandaNode *other) { // to preserve properties such as the default GeomNode bitmask. cdataw->_into_collide_mask |= cdatar->_into_collide_mask; - TagData::const_iterator ti; - for (ti = cdatar->_tag_data.begin(); - ti != cdatar->_tag_data.end(); - ++ti) { - cdataw->_tag_data[(*ti).first] = (*ti).second; + for (size_t n = 0; n < cdatar->_tag_data.size(); ++n) { + cdataw->_tag_data.store(cdatar->_tag_data.get_key(n), cdatar->_tag_data.get_data(n)); } static const int change_bits = (FB_transform | FB_state | FB_effects | @@ -3775,13 +3764,11 @@ write_datagram(BamWriter *manager, Datagram &dg) const { dg.add_uint8(_bounds_type); dg.add_uint32(_tag_data.size()); - TagData::const_iterator ti; - for (ti = _tag_data.begin(); ti != _tag_data.end(); ++ti) { - dg.add_string((*ti).first); - dg.add_string((*ti).second); + for (size_t n = 0; n < _tag_data.size(); ++n) { + dg.add_string(_tag_data.get_key(n)); + dg.add_string(_tag_data.get_data(n)); } - write_up_list(*get_up(), manager, dg); write_down_list(*get_down(), manager, dg); write_down_list(*get_stashed(), manager, dg); @@ -3855,7 +3842,7 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) { set_fancy_bit(FB_transform, !_transform->is_identity()); set_fancy_bit(FB_state, !_state->is_empty()); set_fancy_bit(FB_effects, !_effects->is_empty()); - set_fancy_bit(FB_tag, !_tag_data.empty()); + set_fancy_bit(FB_tag, !_tag_data.is_empty()); // Mark the bounds stale. ++_next_update; @@ -3914,7 +3901,7 @@ fillin(DatagramIterator &scan, BamReader *manager) { for (int i = 0; i < num_tags; i++) { string key = scan.get_string(); string value = scan.get_string(); - _tag_data[key] = value; + _tag_data.store(key, value); } diff --git a/panda/src/pgraph/pandaNode.h b/panda/src/pgraph/pandaNode.h index 44c98a2486..1b42e5ed2d 100644 --- a/panda/src/pgraph/pandaNode.h +++ b/panda/src/pgraph/pandaNode.h @@ -45,6 +45,7 @@ #include "copyOnWritePointer.h" #include "lightReMutex.h" #include "extension.h" +#include "simpleHashMap.h" class NodePathComponent; class CullTraverser; @@ -196,7 +197,15 @@ PUBLISHED: Thread *current_thread = Thread::get_current_thread()) const; void clear_tag(const string &key, Thread *current_thread = Thread::get_current_thread()); + +public: void get_tag_keys(vector_string &keys) const; + INLINE size_t get_num_tags() const; + INLINE string get_tag_key(size_t i) const; + +PUBLISHED: + MAKE_MAP_PROPERTY(tags, has_tag, get_tag, set_tag, clear_tag); + MAKE_MAP_KEYS_SEQ(tags, get_num_tags, get_tag_key); EXTENSION(PyObject *get_tag_keys() const); @@ -511,7 +520,7 @@ private: // This is used to maintain a table of keyed data on each node, for the // user's purposes. - typedef phash_map TagData; + typedef SimpleHashMap TagData; // This is actually implemented in pandaNode_ext.h, but defined here so // that we can destruct it from the C++ side. Note that it isn't cycled, diff --git a/panda/src/pgraph/renderEffects.I b/panda/src/pgraph/renderEffects.I index ff42b4ff49..23c00f9a3b 100644 --- a/panda/src/pgraph/renderEffects.I +++ b/panda/src/pgraph/renderEffects.I @@ -97,8 +97,9 @@ is_empty() const { /** * Returns the number of separate effects indicated in the state. + * @deprecated in Python, use len(effects) instead, or effects.size() in C++. */ -INLINE int RenderEffects:: +INLINE size_t RenderEffects:: get_num_effects() const { return _effects.size(); } @@ -107,11 +108,36 @@ get_num_effects() const { * Returns the nth effect in the state. */ INLINE const RenderEffect *RenderEffects:: -get_effect(int n) const { - nassertr(n >= 0 && n < (int)_effects.size(), NULL); +get_effect(size_t n) const { + nassertr(n < _effects.size(), nullptr); return _effects[n]._effect; } +/** + * Returns the number of separate effects indicated in the state. + */ +INLINE size_t RenderEffects:: +size() const { + return _effects.size(); +} + +/** + * Returns the nth effect in the state. + */ +INLINE const RenderEffect *RenderEffects:: +operator [](size_t n) const { + nassertr(n < _effects.size(), nullptr); + return _effects[n]._effect; +} + +/** + * Returns the effect in the state with the given type. + */ +INLINE const RenderEffect *RenderEffects:: +operator [](TypeHandle type) const { + return get_effect(type); +} + /** * This function is provided as an optimization, to speed up the render-time * checking for the existance of a DecalEffect on this state. It returns true diff --git a/panda/src/pgraph/renderEffects.h b/panda/src/pgraph/renderEffects.h index 6ccf7eb05f..1e54c30533 100644 --- a/panda/src/pgraph/renderEffects.h +++ b/panda/src/pgraph/renderEffects.h @@ -58,8 +58,12 @@ PUBLISHED: bool operator < (const RenderEffects &other) const; INLINE bool is_empty() const; - INLINE int get_num_effects() const; - INLINE const RenderEffect *get_effect(int n) const; + INLINE size_t get_num_effects() const; + INLINE const RenderEffect *get_effect(size_t n) const; + + INLINE size_t size() const; + INLINE const RenderEffect *operator [] (size_t n) const; + INLINE const RenderEffect *operator [] (TypeHandle type) const; int find_effect(TypeHandle type) const; diff --git a/panda/src/pgraph/textureAttrib.h b/panda/src/pgraph/textureAttrib.h index 040cde7ef2..0938df8d96 100644 --- a/panda/src/pgraph/textureAttrib.h +++ b/panda/src/pgraph/textureAttrib.h @@ -65,7 +65,12 @@ PUBLISHED: int find_on_stage(const TextureStage *stage) const; MAKE_SEQ_PROPERTY(on_stages, get_num_on_stages, get_on_stage); - MAKE_MAP_PROPERTY(on_stages, find_on_stage, get_on_stage); + + MAKE_MAP_PROPERTY(textures, has_on_stage, get_on_texture); + MAKE_MAP_KEYS_SEQ(textures, get_num_on_stages, get_on_stage); + + MAKE_MAP_PROPERTY(samplers, has_on_stage, get_on_sampler); + MAKE_MAP_KEYS_SEQ(samplers, get_num_on_stages, get_on_stage); INLINE int get_num_off_stages() const; INLINE TextureStage *get_off_stage(int n) const; @@ -74,7 +79,6 @@ PUBLISHED: INLINE bool has_all_off() const; MAKE_SEQ_PROPERTY(off_stages, get_num_off_stages, get_off_stage); - MAKE_MAP_PROPERTY(off_stages, has_off_stage, get_off_stage); INLINE bool is_identity() const; diff --git a/panda/src/pgraphnodes/computeNode.I b/panda/src/pgraphnodes/computeNode.I index 06e022515e..677a0f406f 100644 --- a/panda/src/pgraphnodes/computeNode.I +++ b/panda/src/pgraphnodes/computeNode.I @@ -71,6 +71,21 @@ set_dispatch(size_t n, const LVecBase3i &dispatch) { cdata->_dispatches[n] = dispatch; } +/** + * Inserts a dispatch command with the given number of work groups in the X, + * Y, and Z dimensions at the given position in the list of dispatch commands. + * Any of these values may be set to 1 if the respective dimension should not + * be used. + */ +INLINE void ComputeNode:: +insert_dispatch(size_t n, const LVecBase3i &dispatch) { + Dispatcher::CDWriter cdata(_dispatcher->_cycler); + if (n > cdata->_dispatches.size()) { + n = cdata->_dispatches.size(); + } + cdata->_dispatches.insert(cdata->_dispatches.begin(), dispatch); +} + /** * Erases the given dispatch index from the list. */ diff --git a/panda/src/pgraphnodes/computeNode.h b/panda/src/pgraphnodes/computeNode.h index ba649fb43f..83f7297216 100644 --- a/panda/src/pgraphnodes/computeNode.h +++ b/panda/src/pgraphnodes/computeNode.h @@ -34,11 +34,12 @@ PUBLISHED: INLINE size_t get_num_dispatches() const; INLINE const LVecBase3i &get_dispatch(size_t i) const; INLINE void set_dispatch(size_t i, const LVecBase3i &num_groups); + INLINE void insert_dispatch(size_t i, const LVecBase3i &num_groups); INLINE void remove_dispatch(size_t i); INLINE void clear_dispatches(); MAKE_SEQ(get_dispatches, get_num_dispatches, get_dispatch); - MAKE_SEQ_PROPERTY(dispatches, get_num_dispatches, get_dispatch, set_dispatch, remove_dispatch); + MAKE_SEQ_PROPERTY(dispatches, get_num_dispatches, get_dispatch, set_dispatch, remove_dispatch, insert_dispatch); public: ComputeNode(const ComputeNode ©); diff --git a/panda/src/physics/forceNode.cxx b/panda/src/physics/forceNode.cxx index c5a998a47e..0e186a98b3 100644 --- a/panda/src/physics/forceNode.cxx +++ b/panda/src/physics/forceNode.cxx @@ -69,15 +69,29 @@ add_forces_from(const ForceNode &other) { */ void ForceNode:: set_force(size_t index, BaseForce *force) { - nassertv(index <= _forces.size()); + nassertv(index < _forces.size()); - _forces[index]->_force_node = (ForceNode *)NULL; + _forces[index]->_force_node = nullptr; _forces[index]->_force_node_path.clear(); _forces[index] = force; force->_force_node = this; force->_force_node_path = NodePath(this); } +/** + * insert operation + */ +void ForceNode:: +insert_force(size_t index, BaseForce *force) { + if (index > _forces.size()) { + index = _forces.size(); + } + + _forces.insert(_forces.begin() + index, force); + force->_force_node = this; + force->_force_node_path = NodePath(this); +} + /** * remove operation */ diff --git a/panda/src/physics/forceNode.h b/panda/src/physics/forceNode.h index 0c800ab16f..8fab631322 100644 --- a/panda/src/physics/forceNode.h +++ b/panda/src/physics/forceNode.h @@ -35,10 +35,11 @@ PUBLISHED: void add_forces_from(const ForceNode &other); void set_force(size_t index, BaseForce *force); + void insert_force(size_t index, BaseForce *force); void remove_force(BaseForce *force); void remove_force(size_t index); - MAKE_SEQ_PROPERTY(forces, get_num_forces, get_force, set_force, remove_force); + MAKE_SEQ_PROPERTY(forces, get_num_forces, get_force, set_force, remove_force, insert_force); virtual void output(ostream &out) const; virtual void write_forces(ostream &out, unsigned int indent=0) const; diff --git a/panda/src/physics/physicalNode.cxx b/panda/src/physics/physicalNode.cxx index 6e81e65285..0fdf995720 100644 --- a/panda/src/physics/physicalNode.cxx +++ b/panda/src/physics/physicalNode.cxx @@ -77,13 +77,26 @@ add_physicals_from(const PhysicalNode &other) { */ void PhysicalNode:: set_physical(size_t index, Physical *physical) { - nassertv(index <= _physicals.size()); + nassertv(index < _physicals.size()); - _physicals[index]->_physical_node = (PhysicalNode *) NULL; + _physicals[index]->_physical_node = nullptr; _physicals[index] = physical; physical->_physical_node = this; } +/** + * insert operation + */ +void PhysicalNode:: +insert_physical(size_t index, Physical *physical) { + if (index > _physicals.size()) { + index = _physicals.size(); + } + + _physicals.insert(_physicals.begin() + index, physical); + physical->_physical_node = this; +} + /** * remove operation */ diff --git a/panda/src/physics/physicalNode.h b/panda/src/physics/physicalNode.h index cb9e5e54b9..24bd272fdc 100644 --- a/panda/src/physics/physicalNode.h +++ b/panda/src/physics/physicalNode.h @@ -36,10 +36,12 @@ PUBLISHED: void add_physicals_from(const PhysicalNode &other); void set_physical(size_t index, Physical *physical); + void insert_physical(size_t index, Physical *physical); void remove_physical(Physical *physical); void remove_physical(size_t index); - MAKE_SEQ_PROPERTY(physicals, get_num_physicals, get_physical, set_physical, remove_physical); + MAKE_SEQ_PROPERTY(physicals, get_num_physicals, get_physical, set_physical, + remove_physical, insert_physical); virtual void write(ostream &out, unsigned int indent=0) const; diff --git a/panda/src/putil/simpleHashMap.I b/panda/src/putil/simpleHashMap.I index dc954bac97..78d4bdf2bd 100644 --- a/panda/src/putil/simpleHashMap.I +++ b/panda/src/putil/simpleHashMap.I @@ -25,6 +25,25 @@ SimpleHashMap(const Compare &comp) : { } +/** + * + */ +template +INLINE SimpleHashMap:: +SimpleHashMap(const SimpleHashMap ©) : + _table_size(copy._table_size), + _num_entries(copy._num_entries), + _comp(copy._comp) { + + // We allocate enough bytes for _table_size elements of TableEntry, plus + // _table_size * 4 more ints at the end (for the index array). + size_t alloc_size = _table_size * (sizeof(TableEntry) + sizeof(int) * sparsity); + + _deleted_chain = memory_hook->get_deleted_chain(alloc_size); + _table = (TableEntry *)_deleted_chain->allocate(alloc_size, TypeHandle::none()); + memcpy(_table, copy._table, alloc_size); +} + /** * */ @@ -37,7 +56,10 @@ SimpleHashMap(SimpleHashMap &&from) NOEXCEPT : _num_entries(from._num_entries), _comp(move(from._comp)) { + from._table = nullptr; + from._deleted_chain = nullptr; from._table_size = 0; + from._num_entries = 0; } /** @@ -49,6 +71,48 @@ INLINE SimpleHashMap:: clear(); } +/** + * + */ +template +INLINE SimpleHashMap &SimpleHashMap:: +operator = (const SimpleHashMap ©) { + if (this != ©) { + _table_size = copy._table_size; + _num_entries = copy._num_entries; + _comp = copy._comp; + + // We allocate enough bytes for _table_size elements of TableEntry, plus + // _table_size * 4 more ints at the end (for the index array). + size_t alloc_size = _table_size * (sizeof(TableEntry) + sizeof(int) * sparsity); + + _deleted_chain = memory_hook->get_deleted_chain(alloc_size); + _table = (TableEntry *)_deleted_chain->allocate(alloc_size, TypeHandle::none()); + memcpy(_table, copy._table, alloc_size); + } + return *this; +} + +/** + * + */ +template +INLINE SimpleHashMap &SimpleHashMap:: +operator = (SimpleHashMap &&from) NOEXCEPT { + if (this != &from) { + _table = from._table; + _deleted_chain = from._deleted_chain; + _table_size = from._table_size; + _num_entries = from._num_entries; + _comp = move(from._comp); + + from._table = nullptr; + from._deleted_chain = nullptr; + from._table_size = 0; + from._num_entries = 0; + } +} + /** * Quickly exchanges the contents of this map and the other map. */ diff --git a/panda/src/putil/simpleHashMap.h b/panda/src/putil/simpleHashMap.h index c7914e4206..50a7e3af12 100644 --- a/panda/src/putil/simpleHashMap.h +++ b/panda/src/putil/simpleHashMap.h @@ -86,9 +86,13 @@ class SimpleHashMap { public: #ifndef CPPPARSER CONSTEXPR SimpleHashMap(const Compare &comp = Compare()); + INLINE SimpleHashMap(const SimpleHashMap ©); INLINE SimpleHashMap(SimpleHashMap &&from) NOEXCEPT; INLINE ~SimpleHashMap(); + INLINE SimpleHashMap &operator = (const SimpleHashMap ©); + INLINE SimpleHashMap &operator = (SimpleHashMap &&from) NOEXCEPT; + INLINE void swap(SimpleHashMap &other); int find(const Key &key) const; diff --git a/tests/interrogate/test_property.py b/tests/interrogate/test_property.py index 8a56ec6563..e39f45f9dc 100755 --- a/tests/interrogate/test_property.py +++ b/tests/interrogate/test_property.py @@ -2,6 +2,7 @@ import sys import pytest from panda3d import core from contextlib import contextmanager +import collections @contextmanager @@ -70,6 +71,15 @@ item_b = core.CollisionSphere((0, 0, 0), 2) item_c = core.CollisionSphere((0, 0, 0), 3) +def test_seq_property_abc(): + prop = seq_property() + assert isinstance(prop, collections.Container) + assert isinstance(prop, collections.Sized) + assert isinstance(prop, collections.Iterable) + assert isinstance(prop, collections.MutableSequence) + assert isinstance(prop, collections.Sequence) + + def test_seq_property_empty(): prop = seq_property() assert not prop @@ -92,6 +102,11 @@ def test_seq_property_iter(): assert None not in prop +def test_seq_property_reversed(): + prop = seq_property(item_a, item_b, item_b) + assert tuple(reversed(prop)) == tuple(reversed(tuple(prop))) + + def test_seq_property_getitem(): prop = seq_property(item_a, item_b, item_b) @@ -313,6 +328,88 @@ def test_seq_property_remove(): prop.remove("nonsense") +def test_seq_property_append(): + prop = seq_property(item_a, item_b) + + with constant_refcount(item_c): + prop.append(item_c) + + assert tuple(prop) == (item_a, item_b, item_c) + + with pytest.raises(TypeError): + prop.append(None) + with pytest.raises(TypeError): + prop.append("nonsense") + + +def test_seq_property_insert(): + # Adding at the beginning + prop = seq_property(item_a, item_a, item_a) + with constant_refcount(item_b): + prop.insert(0, item_b) + + assert tuple(prop) == (item_b, item_a, item_a, item_a) + + # Adding in the middle + prop = seq_property(item_a, item_a, item_a) + with constant_refcount(item_b): + prop.insert(2, item_b) + + assert tuple(prop) == (item_a, item_a, item_b, item_a) + + # Adding at the end + prop = seq_property(item_a, item_a, item_a) + with constant_refcount(item_b): + prop.insert(len(prop), item_b) + + assert tuple(prop) == (item_a, item_a, item_a, item_b) + + # Adding with negative index + prop = seq_property(item_a, item_a, item_a) + with constant_refcount(item_b): + prop.insert(-2, item_b) + + assert tuple(prop) == (item_a, item_b, item_a, item_a) + + # Adding at the end with overflowing index + prop = seq_property(item_a, item_a, item_a) + with constant_refcount(item_b): + prop.insert(2345, item_b) + + assert tuple(prop) == (item_a, item_a, item_a, item_b) + + # Adding at the beginning with negative overflowing index + prop = seq_property(item_a, item_a, item_a) + with constant_refcount(item_b): + prop.insert(-2345, item_b) + + assert tuple(prop) == (item_b, item_a, item_a, item_a) + + +def test_seq_property_extend(): + prop = seq_property(item_a) + + with constant_refcount(item_b): + prop.extend((item_b, item_c)) + + assert tuple(prop) == (item_a, item_b, item_c) + + with pytest.raises(TypeError): + prop.extend(None) + with pytest.raises(TypeError): + prop.extend("nonsense") + with pytest.raises(TypeError): + prop.extend(item_a) + with pytest.raises(TypeError): + prop.extend(item_a, item_b) + with pytest.raises(TypeError): + prop.extend() + with pytest.raises(TypeError): + prop.extend((item_a, None)) + with pytest.raises(TypeError): + prop.extend(["nonsense"]) + + # The next tests are for MAKE_MAP_PROPERTY. @pytest.fixture def map_property(**items): @@ -326,6 +423,27 @@ def map_property(**items): return np.tags +def test_map_property_abc(): + prop = map_property() + assert isinstance(prop, collections.Container) + assert isinstance(prop, collections.Sized) + assert isinstance(prop, collections.Iterable) + assert isinstance(prop, collections.MutableMapping) + assert isinstance(prop, collections.Mapping) + + +def test_map_property_empty(): + prop = map_property() + assert not prop + assert len(prop) == 0 + + with pytest.raises(KeyError): + prop.popitem() + + with pytest.raises(KeyError): + prop['nonsense'] + + def test_map_property_getitem(): key = 'key' value = 'value' @@ -430,6 +548,24 @@ def test_map_property_pop(): assert 'key' not in prop +def test_map_property_popitem(): + key = 'key' + value = 'value' + prop = map_property(**{key: value}) + + assert prop.popitem() == (key, value) + + with pytest.raises(KeyError): + assert prop.popitem() + + +def test_map_property_clear(): + prop = map_property(key='value', key2='value2') + + prop.clear() + assert len(prop) == 0 + + def test_map_property_setdefault(): prop = map_property(key='value') @@ -466,3 +602,24 @@ def test_map_property_update(): assert prop['key'] == 'value' assert prop['key2'] == 'value2' + + +def test_map_property_keys(): + prop = map_property(key='value', key2='value2') + + assert isinstance(prop.keys(), collections.MappingView) + assert frozenset(prop.keys()) == frozenset(('key', 'key2')) + + +def test_map_property_values(): + prop = map_property(key='value', key2='value2') + + assert isinstance(prop.values(), collections.ValuesView) + assert frozenset(prop.values()) == frozenset(('value', 'value2')) + + +def test_map_property_items(): + prop = map_property(key='value', key2='value2') + + assert isinstance(prop.items(), collections.MappingView) + assert frozenset(prop.items()) == frozenset((('key', 'value'), ('key2', 'value2'))) From 27f20c80fd5e2109929c7810d13a9b19bbfb9e05 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 27 Nov 2017 18:49:28 +0100 Subject: [PATCH 5/5] Don't include dlmalloc_src.cxx in interrogate Fixes: #200 --- dtool/src/dtoolbase/memoryHook.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dtool/src/dtoolbase/memoryHook.cxx b/dtool/src/dtoolbase/memoryHook.cxx index efc2fc4392..510b5b2688 100644 --- a/dtool/src/dtoolbase/memoryHook.cxx +++ b/dtool/src/dtoolbase/memoryHook.cxx @@ -47,7 +47,9 @@ static_assert(MEMORY_HOOK_ALIGNMENT * 8 >= NATIVE_WORDSIZE, static_assert((MEMORY_HOOK_ALIGNMENT & (MEMORY_HOOK_ALIGNMENT - 1)) == 0, "MEMORY_HOOK_ALIGNMENT should be a power of two"); -#if defined(USE_MEMORY_DLMALLOC) +#if defined(CPPPARSER) + +#elif defined(USE_MEMORY_DLMALLOC) // Memory manager: DLMALLOC This is Doug Lea's memory manager. It is very // fast, but it is not thread-safe. However, we provide thread locking within