From 83d21bc2b10a3ae24dad43289eafdf9b43b7cf3b Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 30 Oct 2008 22:26:57 +0000 Subject: [PATCH] support instancing syntax --- panda/src/egg/eggGroup.cxx | 74 ++ panda/src/egg/eggGroup.h | 9 + panda/src/egg/parser.cxx.prebuilt | 1833 +++++++++++++++-------------- panda/src/egg/parser.yxx | 48 +- panda/src/egg2pg/eggLoader.cxx | 14 + panda/src/egg2pg/eggLoader.h | 3 + 6 files changed, 1083 insertions(+), 898 deletions(-) diff --git a/panda/src/egg/eggGroup.cxx b/panda/src/egg/eggGroup.cxx index 4e2daf5a8b..7cafcc6dc7 100644 --- a/panda/src/egg/eggGroup.cxx +++ b/panda/src/egg/eggGroup.cxx @@ -121,6 +121,14 @@ EggGroup:: void EggGroup:: set_group_type(GroupType type) { if (type != get_group_type()) { +#ifndef NDEBUG + if (type != GT_instance) { + // Only valid to change to a non-instance type if we have no + // group refs. + nassertv(_group_refs.empty()); + } +#endif + // Make sure the user didn't give us any stray bits. nassertv((type & ~F_group_type)==0); _flags = (_flags & ~F_group_type) | type; @@ -259,6 +267,13 @@ write(ostream &out, int indent_level) const { << " blenda { " << c[3] << " }\n"; } + GroupRefs::const_iterator gri; + for (gri = _group_refs.begin(); gri != _group_refs.end(); ++gri) { + EggGroup *group_ref = (*gri); + indent(out, indent_level + 2) + << " { " << group_ref->get_name() << " }\n"; + } + // We have to write the children nodes before we write the vertex // references, since we might be referencing a vertex that's defined // in one of those children nodes! @@ -767,6 +782,65 @@ test_vref_integrity() const { #endif // NDEBUG +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::add_group_ref +// Access: Published +// Description: Adds a new entry to the group. This declares +// an internal reference to another node, and is used to +// implement scene-graph instancing; it is only valid if +// the group_type is GT_instance. +//////////////////////////////////////////////////////////////////// +void EggGroup:: +add_group_ref(EggGroup *group) { + nassertv(get_group_type() == GT_instance); + _group_refs.push_back(group); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::get_num_group_refs +// Access: Published +// Description: Returns the number of entries within this +// group. See add_group_ref(). +//////////////////////////////////////////////////////////////////// +int EggGroup:: +get_num_group_refs() const { + return _group_refs.size(); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::get_group_ref +// Access: Published +// Description: Returns the nth entry within this group. See +// add_group_ref(). +//////////////////////////////////////////////////////////////////// +EggGroup *EggGroup:: +get_group_ref(int n) const { + nassertr(n >= 0 && n < (int)_group_refs.size(), NULL); + return _group_refs[n]; +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::remove_group_ref +// Access: Published +// Description: Removes the nth entry within this group. See +// add_group_ref(). +//////////////////////////////////////////////////////////////////// +void EggGroup:: +remove_group_ref(int n) { + nassertv(n >= 0 && n < (int)_group_refs.size()); + _group_refs.erase(_group_refs.begin() + n); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::clear_group_refs +// Access: Published +// Description: Removes all of the entries within this group. +// See add_group_ref(). +//////////////////////////////////////////////////////////////////// +void EggGroup:: +clear_group_refs() { + _group_refs.clear(); +} diff --git a/panda/src/egg/eggGroup.h b/panda/src/egg/eggGroup.h index b2cc0caa81..f8276e7bc9 100644 --- a/panda/src/egg/eggGroup.h +++ b/panda/src/egg/eggGroup.h @@ -285,6 +285,12 @@ PUBLISHED: void test_vref_integrity() const { } #endif // NDEBUG + void add_group_ref(EggGroup *group); + int get_num_group_refs() const; + EggGroup *get_group_ref(int n) const; + void remove_group_ref(int n); + void clear_group_refs(); + static GroupType string_group_type(const string &strval); static DartType string_dart_type(const string &strval); static DCSType string_dcs_type(const string &strval); @@ -353,6 +359,9 @@ private: TagData _tag_data; VertexRef _vref; + typedef pvector< PT(EggGroup) > GroupRefs; + GroupRefs _group_refs; + public: diff --git a/panda/src/egg/parser.cxx.prebuilt b/panda/src/egg/parser.cxx.prebuilt index 30be7945db..147bc74e93 100644 --- a/panda/src/egg/parser.cxx.prebuilt +++ b/panda/src/egg/parser.cxx.prebuilt @@ -178,6 +178,10 @@ static Textures textures; typedef pmap Materials; static Materials materials; +// Group names to groups. +typedef pmap Groups; +static Groups groups; + // We need to be able to save the index number requested for a vertex // temporarily. static int vertex_index; @@ -200,6 +204,7 @@ egg_init_parser(istream &in, const string &filename, vertex_pools.clear(); textures.clear(); materials.clear(); + groups.clear(); egg_stack.push_back(tos); egg_top_node = top_node; @@ -239,6 +244,7 @@ egg_cleanup_parser() { vertex_pools.clear(); textures.clear(); materials.clear(); + groups.clear(); } #include @@ -251,11 +257,11 @@ egg_cleanup_parser() { -#define YYFINAL 735 +#define YYFINAL 740 #define YYFLAG -32768 #define YYNTBASE 94 -#define YYTRANSLATE(x) ((unsigned)(x) <= 345 ? yytranslate[x] : 213) +#define YYTRANSLATE(x) ((unsigned)(x) <= 345 ? yytranslate[x] : 214) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -306,175 +312,176 @@ static const short yyprhs[] = { 0, 227, 236, 244, 253, 257, 266, 275, 280, 290, 300, 301, 308, 309, 316, 317, 324, 326, 333, 339, 347, 355, 361, 367, 373, 379, 385, 391, 397, 404, 410, - 413, 416, 419, 422, 424, 426, 429, 430, 436, 438, - 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, - 471, 474, 480, 487, 492, 497, 502, 507, 515, 521, - 528, 533, 538, 540, 550, 555, 557, 574, 584, 586, - 593, 598, 610, 623, 624, 631, 632, 639, 640, 647, - 648, 655, 656, 663, 664, 671, 672, 679, 681, 687, - 693, 695, 696, 704, 710, 716, 722, 725, 731, 737, - 743, 750, 752, 758, 764, 770, 773, 779, 785, 791, - 797, 803, 809, 812, 818, 825, 827, 833, 839, 845, - 848, 854, 860, 866, 872, 878, 885, 887, 889, 891, - 895, 904, 913, 918, 928, 938, 940, 949, 952, 954, - 956, 958, 964, 966, 969, 971, 973, 974, 981, 982, - 989, 991, 994, 997, 1000, 1003, 1006, 1007, 1014, 1016, - 1023, 1029, 1030, 1037, 1039, 1046, 1052, 1053, 1060, 1062, - 1069, 1072, 1073, 1080, 1082, 1089, 1091, 1094, 1096, 1099, - 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, - 1121, 1123, 1125, 1127, 1129, 1131, 1134, 1136, 1138, 1140, - 1142, 1144, 1146, 1148 + 413, 416, 419, 425, 428, 430, 432, 435, 436, 442, + 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, + 474, 477, 480, 486, 493, 498, 503, 508, 513, 521, + 527, 534, 539, 544, 546, 556, 561, 563, 580, 590, + 592, 599, 604, 616, 629, 630, 637, 638, 645, 646, + 653, 654, 661, 662, 669, 670, 677, 678, 685, 687, + 693, 699, 701, 702, 710, 716, 722, 728, 731, 737, + 743, 749, 756, 758, 764, 770, 776, 779, 785, 791, + 797, 803, 809, 815, 818, 824, 831, 833, 839, 845, + 851, 854, 860, 866, 872, 878, 884, 891, 893, 895, + 897, 901, 910, 919, 924, 934, 944, 946, 955, 958, + 960, 962, 964, 970, 972, 975, 977, 979, 980, 987, + 988, 995, 997, 1000, 1003, 1006, 1009, 1012, 1013, 1020, + 1022, 1029, 1035, 1036, 1043, 1045, 1052, 1058, 1059, 1066, + 1068, 1075, 1078, 1079, 1086, 1088, 1095, 1097, 1100, 1102, + 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, + 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1142, 1144, + 1146, 1148, 1150, 1152, 1154, 1156 }; static const short yyrhs[] = { 88, 95, 0, 89, 123, 0, 90, 101, 0, 91, 162, - 0, 212, 0, 95, 96, 0, 97, 0, 98, 0, + 0, 213, 0, 95, 96, 0, 97, 0, 98, 0, 99, 0, 102, 0, 105, 0, 106, 0, 117, 0, 119, 0, 121, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 180, 0, - 194, 0, 17, 92, 204, 93, 0, 15, 203, 92, - 207, 93, 0, 0, 70, 202, 92, 204, 100, 101, - 93, 0, 212, 0, 101, 59, 202, 92, 210, 93, - 0, 101, 126, 0, 0, 39, 202, 92, 103, 104, - 93, 0, 212, 0, 104, 59, 202, 92, 210, 93, - 0, 28, 203, 92, 204, 93, 0, 206, 28, 203, - 92, 204, 93, 0, 0, 84, 202, 107, 92, 108, - 93, 0, 212, 0, 108, 109, 0, 0, 82, 110, - 92, 112, 93, 0, 0, 82, 211, 111, 92, 112, - 93, 0, 209, 0, 209, 209, 0, 209, 209, 209, - 0, 209, 209, 209, 209, 0, 0, 112, 80, 203, + 194, 0, 17, 92, 205, 93, 0, 15, 204, 92, + 208, 93, 0, 0, 70, 203, 92, 205, 100, 101, + 93, 0, 213, 0, 101, 59, 203, 92, 211, 93, + 0, 101, 126, 0, 0, 39, 203, 92, 103, 104, + 93, 0, 213, 0, 104, 59, 203, 92, 211, 93, + 0, 28, 204, 92, 205, 93, 0, 207, 28, 204, + 92, 205, 93, 0, 0, 84, 203, 107, 92, 108, + 93, 0, 213, 0, 108, 109, 0, 0, 82, 110, + 92, 112, 93, 0, 0, 82, 212, 111, 92, 112, + 93, 0, 210, 0, 210, 210, 0, 210, 210, 210, + 0, 210, 210, 210, 210, 0, 0, 112, 80, 204, 92, 113, 114, 93, 0, 112, 44, 92, 115, 93, - 0, 112, 53, 92, 116, 93, 0, 112, 23, 206, - 92, 209, 209, 209, 93, 0, 112, 23, 92, 206, - 209, 209, 209, 93, 0, 209, 209, 0, 209, 209, - 209, 0, 114, 68, 92, 209, 209, 209, 93, 0, - 114, 11, 92, 209, 209, 209, 93, 0, 114, 22, - 206, 92, 209, 209, 93, 0, 114, 22, 206, 92, - 209, 209, 209, 93, 0, 114, 22, 92, 206, 209, - 209, 93, 0, 114, 22, 92, 206, 209, 209, 209, - 93, 0, 209, 209, 209, 0, 115, 20, 206, 92, - 209, 209, 209, 93, 0, 115, 20, 92, 206, 209, - 209, 209, 93, 0, 209, 209, 209, 209, 0, 116, - 21, 206, 92, 209, 209, 209, 209, 93, 0, 116, - 21, 92, 206, 209, 209, 209, 209, 93, 0, 0, - 30, 203, 118, 92, 123, 93, 0, 0, 33, 203, - 120, 92, 123, 93, 0, 0, 36, 203, 122, 92, - 123, 93, 0, 212, 0, 123, 59, 202, 92, 210, - 93, 0, 123, 9, 92, 206, 93, 0, 123, 10, - 92, 209, 209, 209, 93, 0, 123, 14, 203, 92, - 124, 125, 93, 0, 123, 24, 92, 211, 93, 0, - 123, 24, 92, 5, 93, 0, 123, 19, 92, 211, + 0, 112, 53, 92, 116, 93, 0, 112, 23, 207, + 92, 210, 210, 210, 93, 0, 112, 23, 92, 207, + 210, 210, 210, 93, 0, 210, 210, 0, 210, 210, + 210, 0, 114, 68, 92, 210, 210, 210, 93, 0, + 114, 11, 92, 210, 210, 210, 93, 0, 114, 22, + 207, 92, 210, 210, 93, 0, 114, 22, 207, 92, + 210, 210, 210, 93, 0, 114, 22, 92, 207, 210, + 210, 93, 0, 114, 22, 92, 207, 210, 210, 210, + 93, 0, 210, 210, 210, 0, 115, 20, 207, 92, + 210, 210, 210, 93, 0, 115, 20, 92, 207, 210, + 210, 210, 93, 0, 210, 210, 210, 210, 0, 116, + 21, 207, 92, 210, 210, 210, 210, 93, 0, 116, + 21, 92, 207, 210, 210, 210, 210, 93, 0, 0, + 30, 204, 118, 92, 123, 93, 0, 0, 33, 204, + 120, 92, 123, 93, 0, 0, 36, 204, 122, 92, + 123, 93, 0, 213, 0, 123, 59, 203, 92, 211, + 93, 0, 123, 9, 92, 207, 93, 0, 123, 10, + 92, 210, 210, 210, 93, 0, 123, 14, 204, 92, + 124, 125, 93, 0, 123, 24, 92, 212, 93, 0, + 123, 24, 92, 5, 93, 0, 123, 19, 92, 212, 93, 0, 123, 19, 92, 5, 93, 0, 123, 63, - 92, 211, 93, 0, 123, 47, 92, 204, 93, 0, - 123, 42, 92, 211, 93, 0, 123, 67, 203, 92, - 207, 93, 0, 123, 69, 92, 211, 93, 0, 123, - 126, 0, 123, 143, 0, 123, 145, 0, 123, 96, - 0, 206, 0, 212, 0, 125, 206, 0, 0, 72, - 127, 92, 128, 93, 0, 212, 0, 128, 129, 0, - 128, 130, 0, 128, 131, 0, 128, 132, 0, 128, - 133, 0, 128, 134, 0, 128, 135, 0, 128, 136, - 0, 128, 137, 0, 128, 138, 0, 128, 139, 0, - 128, 141, 0, 73, 92, 209, 209, 93, 0, 73, - 92, 209, 209, 209, 93, 0, 54, 92, 209, 93, - 0, 55, 92, 209, 93, 0, 56, 92, 209, 93, - 0, 57, 92, 209, 93, 0, 54, 92, 209, 209, - 209, 209, 93, 0, 60, 92, 209, 209, 93, 0, - 60, 92, 209, 209, 209, 93, 0, 60, 92, 209, - 93, 0, 40, 92, 140, 93, 0, 212, 0, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 0, 41, - 92, 142, 93, 0, 212, 0, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 0, 85, 92, 197, 144, 52, 92, 201, - 93, 93, 0, 212, 0, 144, 59, 202, 92, 210, - 93, 0, 64, 92, 146, 93, 0, 25, 92, 209, - 209, 82, 92, 209, 209, 209, 93, 93, 0, 25, - 92, 209, 209, 209, 82, 92, 209, 209, 209, 93, - 93, 0, 0, 51, 203, 148, 92, 162, 93, 0, - 0, 75, 203, 150, 92, 162, 93, 0, 0, 76, - 203, 152, 92, 162, 93, 0, 0, 50, 203, 154, - 92, 162, 93, 0, 0, 37, 203, 156, 92, 162, - 93, 0, 0, 46, 203, 158, 92, 164, 93, 0, - 0, 45, 203, 160, 92, 165, 93, 0, 212, 0, - 161, 44, 92, 169, 93, 0, 161, 53, 92, 170, - 93, 0, 212, 0, 0, 162, 16, 211, 92, 163, - 161, 93, 0, 162, 74, 92, 166, 93, 0, 162, - 70, 92, 167, 93, 0, 162, 43, 92, 168, 93, - 0, 162, 172, 0, 162, 44, 92, 169, 93, 0, - 162, 53, 92, 170, 93, 0, 162, 8, 92, 171, - 93, 0, 162, 59, 202, 92, 210, 93, 0, 212, - 0, 164, 74, 92, 166, 93, 0, 164, 70, 92, - 167, 93, 0, 164, 43, 92, 168, 93, 0, 164, - 172, 0, 164, 44, 92, 169, 93, 0, 164, 53, - 92, 170, 93, 0, 164, 8, 92, 171, 93, 0, - 164, 48, 92, 173, 93, 0, 164, 79, 92, 174, - 93, 0, 164, 81, 92, 175, 93, 0, 164, 159, - 0, 164, 77, 92, 176, 93, 0, 164, 59, 202, - 92, 210, 93, 0, 212, 0, 165, 74, 92, 166, - 93, 0, 165, 70, 92, 167, 93, 0, 165, 43, - 92, 168, 93, 0, 165, 172, 0, 165, 44, 92, - 169, 93, 0, 165, 53, 92, 170, 93, 0, 165, - 8, 92, 171, 93, 0, 165, 48, 92, 178, 93, - 0, 165, 34, 92, 179, 93, 0, 165, 59, 202, - 92, 210, 93, 0, 199, 0, 202, 0, 200, 0, - 209, 209, 209, 0, 169, 20, 206, 92, 209, 209, - 209, 93, 0, 169, 20, 92, 206, 209, 209, 209, - 93, 0, 209, 209, 209, 209, 0, 170, 21, 206, - 92, 209, 209, 209, 209, 93, 0, 170, 21, 92, - 206, 209, 209, 209, 209, 93, 0, 211, 0, 85, - 92, 197, 52, 92, 201, 93, 93, 0, 211, 211, - 0, 198, 0, 198, 0, 212, 0, 176, 38, 92, - 177, 93, 0, 212, 0, 177, 159, 0, 211, 0, - 198, 0, 0, 65, 203, 181, 92, 184, 93, 0, - 0, 12, 203, 183, 92, 184, 93, 0, 212, 0, - 184, 180, 0, 184, 182, 0, 184, 185, 0, 184, - 188, 0, 184, 191, 0, 0, 58, 203, 186, 92, - 187, 93, 0, 212, 0, 187, 59, 202, 92, 210, - 93, 0, 187, 66, 92, 198, 93, 0, 0, 86, - 203, 189, 92, 190, 93, 0, 212, 0, 190, 59, - 202, 92, 210, 93, 0, 190, 66, 92, 198, 93, - 0, 0, 87, 203, 192, 92, 193, 93, 0, 212, - 0, 193, 59, 202, 92, 210, 93, 0, 193, 185, - 0, 0, 6, 203, 195, 92, 196, 93, 0, 212, - 0, 196, 59, 202, 92, 210, 93, 0, 212, 0, - 197, 211, 0, 212, 0, 198, 209, 0, 202, 0, - 202, 0, 202, 0, 212, 0, 206, 0, 205, 0, - 212, 0, 206, 0, 212, 0, 206, 0, 3, 0, - 4, 0, 5, 0, 212, 0, 208, 0, 206, 0, - 208, 206, 0, 3, 0, 4, 0, 3, 0, 4, - 0, 5, 0, 3, 0, 4, 0, 0 + 92, 212, 93, 0, 123, 47, 92, 205, 93, 0, + 123, 42, 92, 212, 93, 0, 123, 67, 204, 92, + 208, 93, 0, 123, 69, 92, 212, 93, 0, 123, + 126, 0, 123, 143, 0, 123, 145, 0, 123, 52, + 92, 202, 93, 0, 123, 96, 0, 207, 0, 213, + 0, 125, 207, 0, 0, 72, 127, 92, 128, 93, + 0, 213, 0, 128, 129, 0, 128, 130, 0, 128, + 131, 0, 128, 132, 0, 128, 133, 0, 128, 134, + 0, 128, 135, 0, 128, 136, 0, 128, 137, 0, + 128, 138, 0, 128, 139, 0, 128, 141, 0, 73, + 92, 210, 210, 93, 0, 73, 92, 210, 210, 210, + 93, 0, 54, 92, 210, 93, 0, 55, 92, 210, + 93, 0, 56, 92, 210, 93, 0, 57, 92, 210, + 93, 0, 54, 92, 210, 210, 210, 210, 93, 0, + 60, 92, 210, 210, 93, 0, 60, 92, 210, 210, + 210, 93, 0, 60, 92, 210, 93, 0, 40, 92, + 140, 93, 0, 213, 0, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 0, 41, 92, 142, 93, 0, + 213, 0, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 0, 85, + 92, 197, 144, 52, 92, 201, 93, 93, 0, 213, + 0, 144, 59, 203, 92, 211, 93, 0, 64, 92, + 146, 93, 0, 25, 92, 210, 210, 82, 92, 210, + 210, 210, 93, 93, 0, 25, 92, 210, 210, 210, + 82, 92, 210, 210, 210, 93, 93, 0, 0, 51, + 204, 148, 92, 162, 93, 0, 0, 75, 204, 150, + 92, 162, 93, 0, 0, 76, 204, 152, 92, 162, + 93, 0, 0, 50, 204, 154, 92, 162, 93, 0, + 0, 37, 204, 156, 92, 162, 93, 0, 0, 46, + 204, 158, 92, 164, 93, 0, 0, 45, 204, 160, + 92, 165, 93, 0, 213, 0, 161, 44, 92, 169, + 93, 0, 161, 53, 92, 170, 93, 0, 213, 0, + 0, 162, 16, 212, 92, 163, 161, 93, 0, 162, + 74, 92, 166, 93, 0, 162, 70, 92, 167, 93, + 0, 162, 43, 92, 168, 93, 0, 162, 172, 0, + 162, 44, 92, 169, 93, 0, 162, 53, 92, 170, + 93, 0, 162, 8, 92, 171, 93, 0, 162, 59, + 203, 92, 211, 93, 0, 213, 0, 164, 74, 92, + 166, 93, 0, 164, 70, 92, 167, 93, 0, 164, + 43, 92, 168, 93, 0, 164, 172, 0, 164, 44, + 92, 169, 93, 0, 164, 53, 92, 170, 93, 0, + 164, 8, 92, 171, 93, 0, 164, 48, 92, 173, + 93, 0, 164, 79, 92, 174, 93, 0, 164, 81, + 92, 175, 93, 0, 164, 159, 0, 164, 77, 92, + 176, 93, 0, 164, 59, 203, 92, 211, 93, 0, + 213, 0, 165, 74, 92, 166, 93, 0, 165, 70, + 92, 167, 93, 0, 165, 43, 92, 168, 93, 0, + 165, 172, 0, 165, 44, 92, 169, 93, 0, 165, + 53, 92, 170, 93, 0, 165, 8, 92, 171, 93, + 0, 165, 48, 92, 178, 93, 0, 165, 34, 92, + 179, 93, 0, 165, 59, 203, 92, 211, 93, 0, + 199, 0, 203, 0, 200, 0, 210, 210, 210, 0, + 169, 20, 207, 92, 210, 210, 210, 93, 0, 169, + 20, 92, 207, 210, 210, 210, 93, 0, 210, 210, + 210, 210, 0, 170, 21, 207, 92, 210, 210, 210, + 210, 93, 0, 170, 21, 92, 207, 210, 210, 210, + 210, 93, 0, 212, 0, 85, 92, 197, 52, 92, + 201, 93, 93, 0, 212, 212, 0, 198, 0, 198, + 0, 213, 0, 176, 38, 92, 177, 93, 0, 213, + 0, 177, 159, 0, 212, 0, 198, 0, 0, 65, + 204, 181, 92, 184, 93, 0, 0, 12, 204, 183, + 92, 184, 93, 0, 213, 0, 184, 180, 0, 184, + 182, 0, 184, 185, 0, 184, 188, 0, 184, 191, + 0, 0, 58, 204, 186, 92, 187, 93, 0, 213, + 0, 187, 59, 203, 92, 211, 93, 0, 187, 66, + 92, 198, 93, 0, 0, 86, 204, 189, 92, 190, + 93, 0, 213, 0, 190, 59, 203, 92, 211, 93, + 0, 190, 66, 92, 198, 93, 0, 0, 87, 204, + 192, 92, 193, 93, 0, 213, 0, 193, 59, 203, + 92, 211, 93, 0, 193, 185, 0, 0, 6, 204, + 195, 92, 196, 93, 0, 213, 0, 196, 59, 203, + 92, 211, 93, 0, 213, 0, 197, 212, 0, 213, + 0, 198, 210, 0, 203, 0, 203, 0, 203, 0, + 203, 0, 213, 0, 207, 0, 206, 0, 213, 0, + 207, 0, 213, 0, 207, 0, 3, 0, 4, 0, + 5, 0, 213, 0, 209, 0, 207, 0, 209, 207, + 0, 3, 0, 4, 0, 3, 0, 4, 0, 5, + 0, 3, 0, 4, 0, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 219, 221, 222, 223, 233, 235, 250, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 278, 301, 315, 329, 343, 345, - 677, 687, 700, 714, 716, 810, 818, 837, 862, 877, - 879, 889, 894, 901, 926, 946, 951, 955, 959, 963, - 974, 978, 979, 980, 988, 1006, 1011, 1015, 1023, 1031, - 1039, 1047, 1055, 1072, 1077, 1085, 1102, 1107, 1115, 1132, - 1138, 1153, 1160, 1174, 1181, 1195, 1197, 1327, 1339, 1344, - 1351, 1357, 1370, 1377, 1390, 1396, 1402, 1408, 1413, 1419, - 1420, 1421, 1422, 1435, 1465, 1467, 1488, 1493, 1504, 1506, - 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, - 1517, 1520, 1527, 1534, 1541, 1548, 1555, 1562, 1569, 1576, - 1583, 1590, 1594, 1596, 1607, 1611, 1613, 1634, 1667, 1672, - 1696, 1708, 1714, 1730, 1735, 1749, 1754, 1768, 1773, 1787, - 1792, 1806, 1811, 1825, 1830, 1844, 1849, 1864, 1866, 1867, - 1877, 1879, 1893, 1900, 1901, 1902, 1903, 1904, 1905, 1906, - 1907, 1979, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, - 1989, 1990, 1991, 1997, 1998, 2061, 2063, 2064, 2065, 2066, - 2067, 2068, 2069, 2070, 2071, 2072, 2140, 2157, 2197, 2214, - 2219, 2227, 2244, 2249, 2257, 2274, 2290, 2321, 2339, 2359, - 2379, 2385, 2395, 2402, 2420, 2436, 2457, 2464, 2480, 2487, - 2501, 2503, 2507, 2511, 2515, 2519, 2533, 2539, 2554, 2556, - 2568, 2581, 2587, 2602, 2604, 2621, 2634, 2640, 2655, 2657, - 2672, 2686, 2692, 2707, 2709, 2732, 2737, 2750, 2755, 2768, - 2789, 2810, 2836, 2842, 2853, 2865, 2871, 2881, 2886, 2899, - 2904, 2908, 2920, 2925, 2940, 2945, 2958, 2960, 2974, 2981, - 2987, 3003, 3012, 3018 + 226, 228, 229, 230, 240, 242, 257, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 285, 308, 322, 336, 350, 352, + 684, 694, 707, 721, 723, 817, 825, 844, 869, 884, + 886, 896, 901, 908, 933, 953, 958, 962, 966, 970, + 981, 985, 986, 987, 995, 1013, 1018, 1022, 1030, 1038, + 1046, 1054, 1062, 1079, 1084, 1092, 1109, 1114, 1122, 1139, + 1145, 1164, 1171, 1185, 1192, 1210, 1212, 1342, 1354, 1359, + 1366, 1372, 1385, 1392, 1405, 1411, 1417, 1423, 1428, 1434, + 1435, 1436, 1437, 1446, 1459, 1489, 1491, 1512, 1517, 1528, + 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, + 1540, 1541, 1544, 1551, 1558, 1565, 1572, 1579, 1586, 1593, + 1600, 1607, 1614, 1618, 1620, 1631, 1635, 1637, 1658, 1691, + 1696, 1720, 1732, 1738, 1754, 1759, 1773, 1778, 1792, 1797, + 1811, 1816, 1830, 1835, 1849, 1854, 1868, 1873, 1888, 1890, + 1891, 1901, 1903, 1917, 1924, 1925, 1926, 1927, 1928, 1929, + 1930, 1931, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011, + 2012, 2013, 2014, 2015, 2021, 2022, 2085, 2087, 2088, 2089, + 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2164, 2181, 2221, + 2238, 2243, 2251, 2268, 2273, 2281, 2298, 2314, 2345, 2363, + 2383, 2403, 2409, 2419, 2426, 2444, 2460, 2481, 2488, 2504, + 2511, 2525, 2527, 2531, 2535, 2539, 2543, 2557, 2563, 2578, + 2580, 2592, 2605, 2611, 2626, 2628, 2645, 2658, 2664, 2679, + 2681, 2696, 2710, 2716, 2731, 2733, 2756, 2761, 2774, 2779, + 2792, 2813, 2834, 2859, 2880, 2886, 2897, 2909, 2915, 2925, + 2930, 2943, 2948, 2952, 2964, 2969, 2984, 2989, 3002, 3004, + 3018, 3025, 3031, 3047, 3056, 3062 }; #endif @@ -510,9 +517,9 @@ static const char * const yytname[] = { "$","error","$undefined.","EGG_NUMBER" "nurbs_curve_knots_body","table","@19","bundle","@20","table_body","sanim","@21", "sanim_body","xfmanim","@22","xfmanim_body","xfm_s_anim","@23","xfm_s_anim_body", "anim_preload","@24","anim_preload_body","integer_list","real_list","texture_name", -"material_name","vertex_pool_name","required_name","optional_name","required_string", -"optional_string","string","repeated_string","repeated_string_body","real","real_or_string", -"integer","empty", NULL +"material_name","vertex_pool_name","group_name","required_name","optional_name", +"required_string","optional_string","string","repeated_string","repeated_string_body", +"real","real_or_string","integer","empty", NULL }; #endif @@ -526,24 +533,24 @@ static const short yyr1[] = { 0, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 117, 120, 119, 122, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 124, 125, 125, 127, 126, 128, 128, + 123, 123, 123, 123, 124, 125, 125, 127, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 140, 141, 142, 142, 143, 144, 144, - 145, 146, 146, 148, 147, 150, 149, 152, 151, 154, - 153, 156, 155, 158, 157, 160, 159, 161, 161, 161, - 162, 163, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 166, 167, 168, 169, - 169, 169, 170, 170, 170, 171, 172, 173, 174, 175, - 176, 176, 177, 177, 178, 179, 181, 180, 183, 182, - 184, 184, 184, 184, 184, 184, 186, 185, 187, 187, - 187, 189, 188, 190, 190, 190, 192, 191, 193, 193, - 193, 195, 194, 196, 196, 197, 197, 198, 198, 199, - 200, 201, 202, 202, 203, 204, 204, 205, 205, 206, - 206, 206, 207, 207, 208, 208, 209, 209, 210, 210, - 210, 211, 211, 212 + 128, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 140, 141, 142, 142, 143, 144, + 144, 145, 146, 146, 148, 147, 150, 149, 152, 151, + 154, 153, 156, 155, 158, 157, 160, 159, 161, 161, + 161, 162, 163, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 166, 167, 168, + 169, 169, 169, 170, 170, 170, 171, 172, 173, 174, + 175, 176, 176, 177, 177, 178, 179, 181, 180, 183, + 182, 184, 184, 184, 184, 184, 184, 186, 185, 187, + 187, 187, 189, 188, 190, 190, 190, 192, 191, 193, + 193, 193, 195, 194, 196, 196, 197, 197, 198, 198, + 199, 200, 201, 202, 203, 203, 204, 205, 205, 206, + 206, 207, 207, 207, 208, 208, 209, 209, 210, 210, + 211, 211, 211, 212, 212, 213 }; static const short yyr2[] = { 0, @@ -556,494 +563,496 @@ static const short yyr2[] = { 0, 8, 7, 8, 3, 8, 8, 4, 9, 9, 0, 6, 0, 6, 0, 6, 1, 6, 5, 7, 7, 5, 5, 5, 5, 5, 5, 5, 6, 5, 2, - 2, 2, 2, 1, 1, 2, 0, 5, 1, 2, + 2, 2, 5, 2, 1, 1, 2, 0, 5, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 5, 6, 4, 4, 4, 4, 7, 5, 6, - 4, 4, 1, 9, 4, 1, 16, 9, 1, 6, - 4, 11, 12, 0, 6, 0, 6, 0, 6, 0, - 6, 0, 6, 0, 6, 0, 6, 1, 5, 5, - 1, 0, 7, 5, 5, 5, 2, 5, 5, 5, - 6, 1, 5, 5, 5, 2, 5, 5, 5, 5, - 5, 5, 2, 5, 6, 1, 5, 5, 5, 2, - 5, 5, 5, 5, 5, 6, 1, 1, 1, 3, - 8, 8, 4, 9, 9, 1, 8, 2, 1, 1, - 1, 5, 1, 2, 1, 1, 0, 6, 0, 6, - 1, 2, 2, 2, 2, 2, 0, 6, 1, 6, - 5, 0, 6, 1, 6, 5, 0, 6, 1, 6, - 2, 0, 6, 1, 6, 1, 2, 1, 2, 1, + 2, 2, 5, 6, 4, 4, 4, 4, 7, 5, + 6, 4, 4, 1, 9, 4, 1, 16, 9, 1, + 6, 4, 11, 12, 0, 6, 0, 6, 0, 6, + 0, 6, 0, 6, 0, 6, 0, 6, 1, 5, + 5, 1, 0, 7, 5, 5, 5, 2, 5, 5, + 5, 6, 1, 5, 5, 5, 2, 5, 5, 5, + 5, 5, 5, 2, 5, 6, 1, 5, 5, 5, + 2, 5, 5, 5, 5, 5, 6, 1, 1, 1, + 3, 8, 8, 4, 9, 9, 1, 8, 2, 1, + 1, 1, 5, 1, 2, 1, 1, 0, 6, 0, + 6, 1, 2, 2, 2, 2, 2, 0, 6, 1, + 6, 5, 0, 6, 1, 6, 5, 0, 6, 1, + 6, 2, 0, 6, 1, 6, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 0 + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 0 }; static const short yydefact[] = { 0, - 264, 264, 264, 264, 1, 5, 2, 76, 3, 29, - 4, 151, 250, 251, 252, 264, 264, 0, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 6, 7, 8, 9, 10, 11, 12, + 266, 266, 266, 266, 1, 5, 2, 76, 3, 29, + 4, 152, 252, 253, 254, 266, 266, 0, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 0, 0, 0, 264, 0, 0, 0, 0, - 264, 0, 0, 264, 0, 97, 0, 93, 90, 91, - 92, 264, 31, 0, 0, 0, 0, 0, 264, 0, - 0, 0, 157, 232, 245, 249, 248, 0, 264, 0, - 70, 72, 74, 142, 0, 244, 243, 146, 144, 140, - 134, 207, 0, 136, 138, 38, 264, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, - 264, 0, 0, 262, 263, 0, 264, 0, 0, 0, - 264, 264, 264, 0, 264, 0, 247, 246, 264, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 0, 264, - 0, 0, 0, 0, 0, 257, 258, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, - 0, 264, 264, 236, 0, 0, 196, 152, 0, 189, - 241, 0, 0, 0, 0, 0, 0, 188, 0, 187, - 240, 0, 264, 255, 0, 254, 253, 25, 0, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 27, - 264, 264, 264, 264, 78, 0, 264, 94, 84, 83, - 82, 81, 87, 86, 259, 260, 261, 0, 85, 0, - 131, 0, 89, 0, 99, 0, 237, 129, 0, 160, - 264, 156, 0, 158, 0, 0, 159, 0, 0, 155, - 154, 0, 0, 234, 26, 256, 36, 0, 0, 0, - 0, 0, 34, 0, 176, 0, 162, 0, 0, 0, - 211, 264, 0, 0, 0, 40, 0, 0, 0, 95, - 77, 0, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 98, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 0, 264, 30, 0, 148, 0, - 0, 190, 0, 0, 0, 161, 264, 264, 233, 71, - 73, 75, 143, 264, 33, 0, 0, 0, 0, 0, - 0, 264, 0, 0, 147, 180, 0, 0, 0, 0, - 0, 264, 0, 0, 0, 0, 0, 145, 173, 166, - 141, 135, 264, 264, 264, 264, 208, 212, 213, 214, - 215, 216, 0, 137, 139, 42, 39, 41, 37, 79, - 80, 96, 0, 264, 264, 0, 0, 0, 0, 0, - 0, 264, 0, 0, 0, 153, 0, 0, 0, 0, - 193, 0, 242, 0, 0, 0, 264, 264, 0, 0, - 0, 0, 264, 264, 0, 264, 0, 0, 0, 0, - 264, 264, 264, 264, 264, 209, 217, 222, 227, 28, - 0, 44, 0, 0, 0, 0, 123, 0, 0, 126, + 23, 24, 0, 0, 0, 266, 0, 0, 0, 0, + 0, 266, 0, 0, 266, 0, 98, 0, 94, 90, + 91, 92, 266, 31, 0, 0, 0, 0, 0, 266, + 0, 0, 0, 158, 233, 247, 251, 250, 0, 266, + 0, 70, 72, 74, 143, 0, 246, 245, 147, 145, + 141, 135, 208, 0, 137, 139, 38, 266, 0, 0, + 0, 0, 0, 0, 266, 266, 0, 0, 0, 0, + 0, 0, 266, 0, 0, 264, 265, 0, 266, 0, + 0, 0, 266, 266, 266, 0, 266, 0, 249, 248, + 266, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 0, 266, 0, 0, 0, 0, 0, 259, 260, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, + 0, 0, 0, 266, 0, 266, 266, 237, 0, 0, + 197, 153, 0, 190, 242, 0, 0, 0, 0, 0, + 0, 189, 0, 188, 241, 0, 266, 257, 0, 256, + 255, 25, 0, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 27, 266, 266, 266, 266, 78, 0, + 266, 95, 84, 83, 82, 81, 87, 86, 93, 261, + 262, 263, 0, 85, 0, 132, 0, 89, 0, 100, + 0, 238, 130, 0, 161, 266, 157, 0, 159, 0, + 0, 160, 0, 0, 156, 155, 0, 0, 235, 26, + 258, 36, 0, 0, 0, 0, 0, 34, 0, 177, + 0, 163, 0, 0, 0, 212, 266, 0, 0, 0, + 40, 0, 0, 0, 96, 77, 0, 88, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 0, + 266, 30, 0, 149, 0, 0, 191, 0, 0, 0, + 162, 266, 266, 234, 71, 73, 75, 144, 266, 33, + 0, 0, 0, 0, 0, 0, 266, 0, 0, 148, + 181, 0, 0, 0, 0, 0, 266, 0, 0, 0, + 0, 0, 146, 174, 167, 142, 136, 266, 266, 266, + 266, 209, 213, 214, 215, 216, 217, 0, 138, 140, + 42, 39, 41, 37, 79, 80, 97, 0, 266, 266, + 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, + 154, 0, 0, 0, 0, 194, 0, 243, 0, 0, + 0, 266, 266, 0, 0, 0, 0, 266, 266, 0, + 266, 0, 0, 0, 0, 266, 266, 266, 266, 266, + 210, 218, 223, 228, 28, 0, 44, 0, 0, 0, + 0, 124, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, - 238, 0, 0, 0, 205, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 125, 0, 114, 0, 115, 116, - 117, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 0, 0, 183, 185, 239, 179, 181, - 184, 182, 0, 178, 177, 169, 165, 167, 170, 198, - 168, 0, 164, 163, 0, 174, 171, 172, 264, 264, - 264, 264, 0, 46, 0, 0, 0, 0, 0, 0, - 119, 0, 112, 0, 128, 130, 149, 150, 0, 0, - 0, 0, 235, 35, 186, 175, 264, 0, 0, 219, - 0, 224, 0, 229, 0, 0, 0, 264, 43, 47, - 0, 0, 0, 0, 0, 0, 120, 113, 192, 191, - 0, 0, 0, 203, 210, 264, 0, 218, 264, 0, - 223, 264, 228, 231, 0, 0, 0, 0, 0, 48, - 45, 0, 0, 0, 0, 118, 195, 194, 202, 204, - 0, 264, 0, 264, 0, 0, 0, 0, 0, 0, - 0, 50, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 53, 0, - 0, 132, 0, 0, 0, 0, 221, 0, 226, 0, - 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, - 133, 0, 0, 220, 225, 230, 0, 0, 0, 0, - 0, 0, 67, 0, 0, 0, 51, 56, 124, 0, - 55, 54, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 207, 239, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 65, 0, 0, 0, 0, 0, 0, 0, 69, - 68, 59, 62, 0, 60, 0, 58, 0, 63, 61, - 0, 127, 0, 0, 0 + 0, 0, 0, 0, 202, 0, 200, 0, 201, 0, + 0, 0, 0, 0, 0, 0, 0, 123, 0, 126, + 0, 115, 0, 116, 117, 118, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, + 184, 186, 240, 180, 182, 185, 183, 0, 179, 178, + 170, 166, 168, 171, 199, 169, 0, 165, 164, 0, + 175, 172, 173, 266, 266, 266, 266, 0, 46, 0, + 0, 0, 0, 0, 0, 120, 0, 113, 0, 129, + 131, 150, 151, 0, 0, 0, 0, 236, 35, 187, + 176, 266, 0, 0, 220, 0, 225, 0, 230, 0, + 0, 0, 266, 43, 47, 0, 0, 0, 0, 0, + 0, 121, 114, 193, 192, 0, 0, 0, 204, 211, + 266, 0, 219, 266, 0, 224, 266, 229, 232, 0, + 0, 0, 0, 0, 48, 45, 0, 0, 0, 0, + 119, 196, 195, 203, 205, 0, 266, 0, 266, 0, + 0, 0, 0, 0, 0, 0, 50, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52, 0, 0, 53, 0, 0, 133, 0, 0, 0, + 0, 222, 0, 227, 0, 0, 0, 0, 0, 64, + 0, 0, 0, 0, 0, 134, 0, 0, 221, 226, + 231, 0, 0, 0, 0, 0, 0, 67, 0, 0, + 0, 51, 56, 125, 0, 55, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 66, 65, 0, 0, 0, + 0, 0, 0, 0, 69, 68, 59, 62, 0, 60, + 0, 58, 0, 63, 61, 0, 128, 0, 0, 0 }; -static const short yydefgoto[] = { 733, - 5, 68, 35, 36, 37, 272, 9, 38, 204, 262, - 39, 40, 153, 275, 368, 421, 480, 533, 641, 659, - 618, 620, 41, 140, 42, 141, 43, 142, 7, 217, - 279, 69, 120, 234, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 425, 304, 428, 70, 236, - 71, 169, 44, 148, 45, 151, 46, 152, 47, 147, - 48, 143, 49, 146, 50, 145, 308, 11, 241, 266, - 264, 189, 187, 179, 182, 184, 176, 83, 463, 471, - 473, 469, 583, 454, 449, 51, 149, 359, 475, 270, - 360, 476, 559, 361, 477, 561, 362, 478, 563, 52, - 134, 253, 173, 450, 190, 180, 392, 181, 84, 136, - 85, 96, 195, 196, 508, 228, 177, 97 +static const short yydefgoto[] = { 738, + 5, 69, 35, 36, 37, 277, 9, 38, 208, 267, + 39, 40, 155, 280, 373, 426, 485, 538, 646, 664, + 623, 625, 41, 142, 42, 143, 43, 144, 7, 221, + 284, 70, 122, 239, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 430, 309, 433, 71, 241, + 72, 173, 44, 150, 45, 153, 46, 154, 47, 149, + 48, 145, 49, 148, 50, 147, 313, 11, 246, 271, + 269, 193, 191, 183, 186, 188, 180, 84, 468, 476, + 478, 474, 588, 459, 454, 51, 151, 364, 480, 275, + 365, 481, 564, 366, 482, 566, 367, 483, 568, 52, + 136, 258, 177, 455, 194, 184, 397, 168, 185, 85, + 138, 86, 97, 199, 200, 513, 233, 181, 98 }; -static const short yypact[] = { 211, --32768,-32768,-32768,-32768, 1247,-32768, 1172,-32768, 105,-32768, - 337,-32768,-32768,-32768,-32768, 247, 247, -79, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +static const short yypact[] = { 199, +-32768,-32768,-32768,-32768, 1246,-32768, 1172,-32768, 162,-32768, + 556,-32768,-32768,-32768,-32768, 311, 311, -89, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 93, -60, -30, 247, 61, 70, 88, 92, - 247, 130, 147, 247, 150,-32768, 173,-32768,-32768,-32768, --32768, 247,-32768, 175, 241, 177, 179, 181, 247, 183, - 189, 204,-32768,-32768,-32768,-32768,-32768, 205, 247, 214, --32768,-32768,-32768,-32768, 215,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 219,-32768,-32768,-32768, 247, 247, 283, 224, - 286, 333, 241, 247, 225, 241, 149, 227, 241, 235, --32768, 236, 241,-32768,-32768, 239, 247, 283, 283, 242, - 247, 247,-32768, 254, 247, 166,-32768,-32768, 247, 255, - 262, 269, 270,-32768, 271, 272, 273, 274, 277, 247, - 284, 285, 287, 291, 221,-32768,-32768, 283, 247, 240, - 249, 282, 292, 293, 294, 336, 295, 297, 298, 247, - 300,-32768, 241,-32768, 336, 301,-32768,-32768, 302,-32768, --32768, 34, 283, -11, 283, 336, 304,-32768, 305,-32768, --32768, 136,-32768,-32768, 306, 247,-32768,-32768, 307,-32768, +-32768,-32768, -20, -38, -37, 311, -28, 2, 8, 20, + 58, 311, 82, 87, 311, 96,-32768, 101,-32768,-32768, +-32768,-32768, 311,-32768, 115, 131, 135, 148, 174, 311, + 180, 191, 192,-32768,-32768,-32768,-32768,-32768, 200, 311, + 207,-32768,-32768,-32768,-32768, 208,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 213,-32768,-32768,-32768, 311, 311, 250, + 217, 320, 360, 131, 311, 311, 225, 131, 104, 234, + 131, 235,-32768, 242, 131,-32768,-32768, 243, 311, 250, + 250, 245, 311, 311,-32768, 255, 311, 64,-32768,-32768, + 311, 257, 258, 267, 274,-32768, 275, 277, 287, 289, + 297, 311, 303, 304, 305, 307, 69,-32768,-32768, 250, + 311, 204, 215, 308, 309, 310, 312, 313,-32768, 381, + 316, 318, 319, 311, 321,-32768, 131,-32768, 381, 323, +-32768,-32768, 325,-32768,-32768, -7, 250, 4, 250, 381, + 335,-32768, 337,-32768,-32768, 145,-32768,-32768, 338, 311, +-32768,-32768, 339,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 311,-32768, 250, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 247,-32768, 283,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 309,-32768, 283, --32768, 310,-32768, 222,-32768, 145,-32768,-32768, 311,-32768, --32768,-32768, 84,-32768, 283, 87,-32768, 283, 312,-32768, --32768, 314, 67,-32768,-32768,-32768,-32768, 792, 974, 1060, - 393, 99,-32768, 250,-32768, 187,-32768, 415, 479, 120, --32768,-32768, 863, 1078, 144,-32768, 317, 319, 4,-32768, --32768, 283,-32768, 332, 334, 341, 342, 343, 346, 348, - 350,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 351, 247,-32768, 190,-32768, 247, - 352,-32768, 247, 353, 283,-32768, 247, 247,-32768,-32768, --32768,-32768,-32768, 247,-32768, 356, 358, 359, 363, 364, - 365, 247, 368, 372,-32768,-32768, 373, 378, 380, 381, - 385, 247, 396, 398, 399, 400, 401,-32768,-32768,-32768, --32768,-32768, 247, 247, 247, 247,-32768,-32768,-32768,-32768, --32768,-32768, 74,-32768,-32768, 241,-32768,-32768,-32768,-32768, --32768,-32768, 104, 283, 283, 283, 283, 283, 283, 283, - 283, 247, 405, 407, 409,-32768, 283, 283, 283, 283, --32768, 410,-32768, 412, 413, 241,-32768, 247, 283, 241, - 283, 414, 247, 247, 241, 247, 283, 241, 283, 417, - 247, 247,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 418,-32768, 419, 296, 420, 283,-32768, 421, 283,-32768, - 25, 422, 423, 424, 27, 283, 425, 336, 283, 283, - 283, 283, 283, 283, 427, 336, 336, 432, 434, 283, --32768, 436, 38, 437,-32768, 26, 336, 438, 442, 443, - 444, 55, 450, 241, 80, 336, 451, 452, 77,-32768, - 453, 283, 454, 283, 456, 458, 459, 460, 283, 462, - 283, 463,-32768, 283,-32768, 283,-32768, 283,-32768,-32768, --32768,-32768, 62, 64, 464, 465, 58, 107, 283, 283, - 283, 283,-32768, 466, 468,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 469,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 472,-32768,-32768, 474,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 119, 283, 283, 283, 283, 283, 283, 283, --32768, 475,-32768, 476,-32768,-32768,-32768,-32768, 477, 478, - 283, 283,-32768,-32768,-32768,-32768,-32768, 131, 57,-32768, - 78,-32768, 156,-32768, 91, 481, 489, 247,-32768, 283, - 167, 283, 283, 283, 283, 490,-32768,-32768,-32768,-32768, - 491, 493, 48,-32768,-32768, 247, 495,-32768, 247, 496, --32768, 247,-32768,-32768, 247, 497, 283, 283, 501, 283, --32768, 502, 283, 283, 283,-32768,-32768,-32768,-32768,-32768, - 504,-32768, 505,-32768, 506, 283, 283, 59, 283, 117, - 283,-32768,-32768, 507, 508, 283, 283, 336, 66, 336, - 68, 336, 283, 283, 95,-32768, 283, 101,-32768, 283, - 283,-32768, 509, 283, 283, 510,-32768, 511,-32768, 512, - 283, 283, 247, 514,-32768, 247, 515, 283, 42, 283, --32768, 283, 283,-32768,-32768,-32768, 516, 518, 283, 283, - 283, 283,-32768, 524, 109, 525,-32768, 283,-32768, 283, --32768,-32768, 283, 283, 283, 283, 283, 247, 526, 283, --32768, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 527, 528, 283, 283, 283, 283, 283, 283, 283, --32768,-32768, 529, 530, 531, 73, 82, 532, 283,-32768, --32768,-32768,-32768, 533,-32768, 534,-32768, 283,-32768,-32768, - 283,-32768, 384, 556,-32768 +-32768,-32768, 346,-32768, 250,-32768, 347,-32768, 496,-32768, + 216,-32768,-32768, 348,-32768,-32768,-32768, 102,-32768, 250, + 111,-32768, 250, 355,-32768,-32768, 357, 29,-32768,-32768, +-32768,-32768, 172, 799, 984, 399, 157,-32768, 298,-32768, + 259,-32768, 421, 851, 187,-32768,-32768, 1002, 1057, 156, +-32768, 358, 363, 28,-32768,-32768, 250,-32768, 369, 370, + 371, 374, 378, 379, 384, 386,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 387, + 311,-32768, 117,-32768, 311, 391,-32768, 311, 401, 250, +-32768, 311, 311,-32768,-32768,-32768,-32768,-32768, 311,-32768, + 402, 404, 405, 406, 407, 410, 311, 412, 416,-32768, +-32768, 417, 418, 419, 420, 423, 311, 424, 425, 426, + 427, 428,-32768,-32768,-32768,-32768,-32768, 311, 311, 311, + 311,-32768,-32768,-32768,-32768,-32768,-32768, 0,-32768,-32768, + 131,-32768,-32768,-32768,-32768,-32768,-32768, 98, 250, 250, + 250, 250, 250, 250, 250, 250, 311, 429, 430, 431, +-32768, 250, 250, 250, 250,-32768, 433,-32768, 432, 439, + 131,-32768, 311, 250, 131, 250, 441, 311, 311, 131, + 311, 250, 131, 250, 446, 311, 311,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 449,-32768, 450, 288, 451, + 250,-32768, 456, 250,-32768, 6, 461, 462, 464, 25, + 250, 465, 381, 250, 250, 250, 250, 250, 250, 466, + 381, 381, 467, 468, 250,-32768, 469, -1, 470,-32768, + 53, 381, 473, 474, 477, 478, 30, 480, 131, 66, + 381, 481, 482, 3,-32768, 483, 250, 484, 250, 486, + 487, 495, 499, 250, 500, 250, 501,-32768, 250,-32768, + 250,-32768, 250,-32768,-32768,-32768,-32768, 59, 62, 503, + 508, 37, 90, 250, 250, 250, 250,-32768, 509, 510, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 511,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 512,-32768,-32768, 502, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 278, 250, 250, + 250, 250, 250, 250, 250,-32768, 513,-32768, 514,-32768, +-32768,-32768,-32768, 515, 517, 250, 250,-32768,-32768,-32768, +-32768,-32768, 442, 203,-32768, 205,-32768, 105,-32768, 123, + 519, 520, 311,-32768, 250, 364, 250, 250, 250, 250, + 521,-32768,-32768,-32768,-32768, 524, 529, -10,-32768,-32768, + 311, 531,-32768, 311, 532,-32768, 311,-32768,-32768, 311, + 533, 250, 250, 535, 250,-32768, 536, 250, 250, 250, +-32768,-32768,-32768,-32768,-32768, 539,-32768, 540,-32768, 541, + 250, 250, 60, 250, 99, 250,-32768,-32768, 543, 544, + 250, 250, 381, 65, 381, 67, 381, 250, 250, 134, +-32768, 250, 137,-32768, 250, 250,-32768, 546, 250, 250, + 547,-32768, 554,-32768, 559, 250, 250, 311, 542,-32768, + 311, 562, 250, 97, 250,-32768, 250, 250,-32768,-32768, +-32768, 564, 565, 250, 250, 250, 250,-32768, 563, 140, + 567,-32768, 250,-32768, 250,-32768,-32768, 250, 250, 250, + 250, 250, 311, 568, 250,-32768, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 571, 573, 250, 250, + 250, 250, 250, 250, 250,-32768,-32768, 575, 576, 577, + 73, 75, 578, 250,-32768,-32768,-32768,-32768, 581,-32768, + 583,-32768, 250,-32768,-32768, 250,-32768, 400, 411,-32768 }; static const short yypgoto[] = {-32768, --32768, 562,-32768,-32768,-32768,-32768, 153,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, -33,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 158,-32768, --32768, -6,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 408,-32768,-32768,-32768,-32768, 127,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, -90,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 188,-32768, +-32768, -8,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, -265,-32768,-32768, 118,-32768,-32768, --32768, -185, -182, -170, -191, -207, -249, -231,-32768,-32768, --32768,-32768,-32768,-32768,-32768, -266,-32768,-32768,-32768, -22, - -51,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 449, -409,-32768,-32768, 212, 50, 17, -89, --32768, -5, 429,-32768, 40, -134, -56, 759 +-32768,-32768,-32768,-32768, -267,-32768,-32768, 70,-32768,-32768, +-32768, -300, -183, -133, -149, -194, -349, 74,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, -270,-32768,-32768,-32768, -21, + -25,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 453, -413,-32768,-32768, 226,-32768, 51, 17, + -85,-32768, -5, 454,-32768, 41, -132, -23, 765 }; -#define YYLAST 1373 +#define YYLAST 1384 static const short yytable[] = { 53, - 349, 53, 73, 358, 472, 474, 13, 14, 15, 246, - 86, 86, 89, 86, 86, 86, 86, 86, 126, 86, - 86, 86, 86, 86, 165, 86, 86, 156, 157, 156, - 157, 108, 336, 88, 350, 90, 91, 92, 93, 94, - 239, 98, 99, 100, 101, 102, 246, 104, 105, 199, - 86, 249, 674, 243, 161, 163, 164, 243, 86, 167, - 210, 109, 171, 675, 156, 157, 156, 157, 156, 157, - 156, 157, 110, 95, 243, 156, 157, 243, 635, 103, - 118, 247, 106, 137, 156, 157, 13, 14, 15, 13, - 14, 15, 25, 13, 14, 15, 371, 13, 14, 15, - 246, 86, 155, 13, 14, 15, 156, 157, 137, 676, - 115, 13, 14, 15, 525, 586, 237, 487, 512, 492, - 107, 122, 587, 154, 277, 318, 244, 246, 130, 194, - 510, 353, 72, 137, 677, 237, 589, 638, 124, 125, - 609, 565, 353, 590, 137, 66, 448, 518, 158, 588, - 547, 636, 111, 218, 541, 460, 543, 324, 647, 319, - 649, 112, 566, 72, 194, 723, 420, 183, 185, 526, - 591, 567, 521, 168, 725, 310, 66, 354, 313, 113, - 188, 191, 595, 114, 29, 423, 653, 252, 354, 565, - 256, 325, 656, 456, 337, 29, 305, 216, 568, 548, - 688, 465, 629, 306, 631, 355, 356, 453, 137, 639, - 566, 569, 357, 354, 592, 462, 355, 356, 459, 567, - 458, 116, 245, 585, 248, 366, 468, 452, 467, 338, - 339, 25, 498, 384, 340, 461, 367, 311, 117, 341, - 314, 119, 385, 124, 125, 342, 568, 497, 593, 13, - 14, 15, 53, 53, 53, 278, 343, 326, 198, 601, - 344, 284, 285, 345, 121, 346, 123, 347, 127, 282, - 128, 82, 129, 372, 131, 286, 287, 288, 289, 348, - 132, 290, 386, 327, 312, 156, 157, 315, 124, 125, - 160, 358, 328, 329, 291, 133, 135, 330, 1, 2, - 3, 4, 331, 496, 387, 139, 144, 389, 332, 422, - 150, 504, 505, 215, 292, 159, 166, 610, 170, 333, - 261, 373, 513, 334, 268, 269, 172, 175, 273, 274, - 178, 522, 219, 186, 82, 124, 125, 162, 225, 226, - 227, 220, 335, 455, 74, 193, 200, 86, 86, 86, - 86, 464, 75, 201, 391, 383, 73, 258, 259, 260, - 202, 203, 205, 206, 207, 208, 393, 394, 209, 416, - 417, 418, 419, 395, 221, 211, 212, 482, 213, 76, - 77, 402, 214, 734, 222, 223, 224, 229, 230, 78, - 231, 410, 233, 240, 242, 79, 250, 251, 255, 257, - 74, 281, 283, 307, 316, 317, 80, 520, 75, 369, - 81, 370, 424, 426, 429, 431, 432, 433, 434, 435, - 436, 82, 74, 374, 363, 375, 441, 442, 443, 444, - 75, 393, 376, 377, 378, 76, 77, 379, 183, 380, - 185, 381, 382, 388, 390, 78, 183, 396, 185, 397, - 398, 79, 188, 191, 399, 400, 401, 76, 77, 403, - 188, 191, 80, 404, 405, 484, 81, 78, 486, 406, - 488, 407, 408, 79, 493, 494, 409, 82, 183, 185, - 499, 500, 501, 502, 80, 323, 74, 411, 81, 412, - 413, 414, 415, 646, 75, 648, 438, 650, 439, 82, - 440, 571, 445, 446, 447, 457, 558, 351, 466, 479, - 481, 594, 483, 485, 489, 490, 491, 495, 534, 503, - 536, 76, 77, 538, 506, 539, 507, 540, 509, 511, - 514, 78, 542, 544, 515, 516, 517, 79, 549, 550, - 551, 552, 519, 523, 524, 527, 528, 529, 80, 530, - 531, 532, 81, 535, 537, 735, 545, 546, 553, 596, - 554, 555, 86, 82, 556, 557, 34, 577, 578, 579, - 580, 352, 597, 570, 534, 572, 573, 574, 575, 576, - 598, 192, 606, 607, 599, 608, 612, 614, 617, 616, - 581, 582, 622, 437, 624, 628, 630, 632, 232, 642, - 643, 661, 664, 665, 666, 670, 672, 0, 681, 600, - 682, 602, 603, 604, 605, 687, 690, 699, 0, 711, - 712, 720, 721, 722, 727, 729, 730, 0, 0, 654, - 0, 0, 657, 0, 0, 611, 619, 621, 613, 623, - 0, 615, 625, 626, 627, 0, 0, 669, 0, 0, - 671, 0, 0, 0, 0, 633, 634, 0, 637, 0, - 640, 0, 0, 0, 0, 644, 645, 0, 0, 689, - 0, 0, 651, 652, 0, 0, 655, 0, 0, 658, - 660, 0, 698, 662, 663, 0, 0, 0, 0, 0, - 667, 668, 0, 0, 0, 0, 0, 673, 0, 678, - 0, 679, 680, 0, 0, 0, 0, 0, 683, 684, - 685, 686, 0, 0, 0, 0, 0, 691, 0, 692, - 0, 0, 693, 694, 695, 696, 697, 0, 0, 700, - 0, 701, 702, 703, 704, 705, 706, 707, 708, 709, - 710, 0, 0, 713, 714, 715, 716, 717, 718, 719, - 0, 0, 0, 0, 0, 724, 726, 0, 728, 6, - 8, 10, 12, 0, 0, 0, 0, 731, 0, 0, - 732, 0, 0, 0, 87, 87, 0, 87, 87, 87, - 87, 87, 0, 87, 87, 87, 87, 87, 0, 87, - 87, 0, 0, 0, 13, 14, 15, 16, 0, 0, - 54, 55, 0, 0, 0, 56, 17, 0, 18, 0, - 57, 0, 0, 0, 87, 58, 0, 0, 0, 19, - 0, 20, 87, 0, 21, 0, 0, 22, 23, 0, - 24, 0, 0, 59, 0, 0, 25, 26, 60, 0, - 0, 27, 28, 0, 0, 0, 0, 138, 0, 0, - 61, 0, 0, 0, 62, 63, 29, 0, 64, 0, - 65, 30, 0, 66, 0, 87, 31, 32, 0, 0, - 74, 0, 138, 0, 0, 33, 67, 0, 75, 174, - 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, - 0, 174, 0, 197, 0, 0, 0, 138, 0, 0, - 0, 0, 0, 0, 0, 76, 77, 0, 138, 0, - 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, - 0, 79, 0, 0, 0, 0, 0, 0, 197, 0, - 235, 238, 80, 0, 0, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, - 0, 254, 0, 0, 0, 364, 0, 0, 8, 8, - 8, 12, 263, 265, 267, 12, 12, 271, 0, 12, - 12, 276, 138, 0, 0, 280, 13, 14, 15, 16, + 74, 53, 90, 354, 363, 477, 479, 108, 158, 159, + 87, 87, 248, 87, 87, 87, 87, 87, 248, 87, + 87, 87, 87, 87, 251, 87, 87, 158, 159, 167, + 13, 14, 15, 89, 25, 91, 92, 93, 94, 95, + 530, 99, 100, 101, 102, 103, 244, 105, 106, 248, + 87, 453, 128, 109, 110, 203, 248, 254, 73, 87, + 465, 158, 159, 112, 158, 159, 214, 158, 159, 158, + 159, 67, 111, 251, 96, 158, 159, 158, 159, 640, + 104, 120, 614, 107, 139, 249, 251, 323, 163, 165, + 166, 515, 425, 113, 171, 531, 252, 175, 492, 114, + 158, 159, 87, 157, 13, 14, 15, 679, 464, 139, + 251, 115, 117, 13, 14, 15, 473, 497, 680, 643, + 376, 324, 523, 124, 156, 13, 14, 15, 172, 552, + 132, 198, 282, 126, 127, 139, 13, 14, 15, 13, + 14, 15, 13, 14, 15, 517, 139, 126, 127, 116, + 160, 546, 641, 242, 548, 222, 202, 652, 526, 654, + 389, 219, 359, 597, 681, 728, 169, 730, 198, 390, + 187, 189, 242, 118, 13, 14, 15, 16, 119, 428, + 54, 55, 553, 192, 195, 56, 17, 121, 18, 682, + 57, 644, 123, 315, 261, 58, 257, 598, 358, 19, + 220, 20, 318, 634, 21, 636, 125, 22, 23, 391, + 24, 461, 139, 59, 600, 329, 25, 26, 60, 470, + 73, 27, 28, 61, 463, 658, 129, 250, 661, 253, + 62, 693, 472, 67, 63, 64, 29, 371, 65, 130, + 66, 30, 316, 67, 359, 319, 31, 32, 372, 330, + 503, 29, 158, 159, 458, 33, 68, 53, 53, 53, + 283, 591, 467, 594, 325, 131, 342, 310, 592, 457, + 595, 133, 360, 361, 311, 287, 266, 466, 377, 362, + 273, 274, 134, 135, 278, 279, 1, 2, 3, 4, + 317, 137, 363, 320, 502, 593, 223, 596, 141, 146, + 570, 343, 344, 25, 152, 331, 345, 224, 161, 392, + 501, 346, 394, 13, 14, 15, 170, 347, 509, 510, + 615, 571, 126, 127, 162, 174, 176, 378, 348, 518, + 572, 332, 349, 179, 182, 350, 190, 351, 527, 352, + 333, 334, 341, 83, 355, 335, 197, 427, 204, 205, + 336, 353, 87, 87, 87, 87, 337, 573, 206, 74, + 396, 388, 126, 127, 164, 207, 209, 338, 210, 487, + 574, 339, 398, 399, 421, 422, 423, 424, 211, 400, + 212, 460, 83, 230, 231, 232, 570, 407, 213, 469, + 340, 263, 264, 265, 215, 216, 217, 415, 218, 739, + 225, 226, 227, 368, 228, 229, 75, 571, 234, 235, + 740, 236, 34, 238, 76, 245, 572, 247, 429, 431, + 434, 436, 437, 438, 439, 440, 441, 255, 75, 256, + 260, 262, 446, 447, 448, 449, 76, 398, 286, 288, + 312, 77, 78, 573, 187, 525, 189, 321, 322, 576, + 374, 79, 187, 358, 189, 375, 606, 80, 192, 195, + 379, 380, 381, 77, 78, 382, 192, 195, 81, 383, + 384, 489, 82, 79, 491, 385, 493, 386, 387, 80, + 498, 499, 393, 83, 187, 189, 504, 505, 506, 507, + 81, 328, 395, 401, 82, 402, 403, 404, 405, 359, + 651, 406, 653, 408, 655, 83, 29, 409, 410, 411, + 412, 413, 563, 356, 414, 416, 417, 418, 419, 420, + 443, 444, 445, 451, 539, 450, 541, 360, 361, 543, + 452, 544, 462, 545, 590, 289, 290, 471, 547, 549, + 484, 486, 599, 488, 554, 555, 556, 557, 490, 291, + 292, 293, 294, 494, 495, 295, 496, 500, 508, 511, + 512, 514, 516, 75, 601, 519, 520, 87, 296, 521, + 522, 76, 524, 528, 529, 532, 533, 534, 535, 575, + 539, 577, 578, 579, 580, 581, 536, 196, 297, 604, + 537, 540, 542, 562, 621, 550, 586, 587, 77, 78, + 551, 558, 559, 560, 561, 582, 583, 584, 79, 585, + 602, 603, 442, 611, 80, 605, 612, 607, 608, 609, + 610, 613, 617, 619, 622, 81, 627, 237, 629, 82, + 633, 635, 637, 675, 659, 647, 648, 662, 666, 669, + 83, 616, 624, 626, 618, 628, 670, 620, 630, 631, + 632, 671, 674, 677, 692, 676, 686, 687, 695, 704, + 0, 638, 639, 716, 642, 717, 645, 725, 726, 727, + 732, 649, 650, 734, 694, 735, 0, 0, 656, 657, + 0, 0, 660, 0, 0, 663, 665, 703, 0, 667, + 668, 0, 0, 0, 0, 0, 672, 673, 0, 0, + 0, 0, 0, 678, 0, 683, 0, 684, 685, 0, + 0, 0, 0, 0, 688, 689, 690, 691, 0, 0, + 0, 0, 0, 696, 0, 697, 0, 0, 698, 699, + 700, 701, 702, 0, 0, 705, 0, 706, 707, 708, + 709, 710, 711, 712, 713, 714, 715, 0, 0, 718, + 719, 720, 721, 722, 723, 724, 0, 0, 0, 0, + 0, 729, 731, 0, 733, 6, 8, 10, 12, 0, + 0, 0, 0, 736, 0, 0, 737, 0, 0, 0, + 88, 88, 0, 88, 88, 88, 88, 88, 0, 88, + 88, 88, 88, 88, 0, 88, 88, 0, 0, 0, + 0, 13, 14, 15, 16, 0, 0, 54, 55, 0, + 0, 0, 56, 17, 0, 18, 0, 57, 0, 0, + 88, 0, 58, 0, 0, 0, 19, 0, 20, 88, + 0, 21, 0, 0, 22, 23, 0, 24, 0, 0, + 59, 0, 0, 25, 26, 60, 0, 0, 27, 28, + 61, 0, 0, 0, 140, 0, 0, 62, 75, 0, + 0, 63, 64, 29, 0, 65, 76, 66, 30, 0, + 67, 0, 88, 31, 32, 0, 0, 0, 0, 140, + 0, 0, 33, 68, 0, 0, 0, 178, 0, 0, + 0, 326, 0, 77, 78, 0, 0, 0, 0, 178, + 0, 201, 0, 79, 0, 140, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, + 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 0, 0, 201, 0, + 240, 243, 0, 357, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 259, 0, 0, 0, 0, 0, 0, 8, 8, + 8, 12, 268, 270, 272, 12, 12, 276, 0, 12, + 12, 281, 140, 0, 0, 285, 13, 14, 15, 16, 0, 0, 54, 55, 0, 0, 0, 56, 17, 0, - 18, 0, 57, 0, 0, 0, 0, 58, 0, 309, - 0, 19, 0, 20, 0, 0, 21, 0, 0, 22, + 18, 0, 57, 0, 0, 0, 0, 58, 0, 75, + 314, 19, 0, 20, 0, 0, 21, 76, 0, 22, 23, 0, 24, 0, 0, 59, 0, 0, 25, 26, - 60, 0, 0, 27, 28, 0, 0, 0, 0, 0, - 10, 0, 61, 0, 0, 0, 62, 63, 29, 0, - 64, 0, 65, 30, 0, 66, 0, 0, 31, 32, - 0, 0, 0, 0, 0, 0, 0, 33, 67, 0, - 0, 0, 13, 14, 15, 16, 321, 0, 54, 55, - 0, 0, 0, 56, 17, 0, 18, 0, 57, 0, - 0, 0, 0, 58, 0, 74, 0, 19, 0, 20, - 0, 0, 21, 75, 0, 22, 23, 0, 24, 0, - 0, 59, 0, 0, 25, 26, 60, 0, 0, 27, - 28, 87, 87, 87, 87, 0, 0, 0, 61, 0, - 76, 77, 62, 63, 29, 0, 64, 0, 65, 30, - 78, 66, 427, 430, 31, 32, 79, 0, 0, 0, - 0, 0, 0, 33, 67, 0, 0, 80, 0, 0, - 0, 81, 322, 0, 0, 451, 0, 0, 0, 0, - 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, - 365, 470, 451, 451, 13, 14, 15, 16, 0, 0, - 54, 55, 0, 0, 0, 56, 17, 0, 18, 0, + 60, 0, 0, 27, 28, 61, 0, 0, 0, 0, + 0, 10, 62, 0, 77, 78, 63, 64, 29, 0, + 65, 0, 66, 30, 79, 67, 0, 0, 31, 32, + 80, 0, 0, 0, 75, 0, 0, 33, 68, 0, + 0, 81, 76, 0, 0, 82, 327, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 0, 0, 369, 0, 0, 0, 0, 77, + 78, 0, 0, 0, 0, 0, 0, 0, 0, 79, + 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 88, 88, 88, 88, 81, 0, 0, 0, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 83, 0, 432, 435, 0, 0, 0, 0, 370, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, + 0, 0, 0, 0, 13, 14, 15, 16, 0, 0, + 54, 55, 475, 456, 456, 56, 17, 0, 18, 0, 57, 0, 0, 0, 0, 58, 0, 0, 0, 19, 0, 20, 0, 0, 21, 0, 0, 22, 23, 0, 24, 0, 0, 59, 0, 0, 25, 26, 60, 0, - 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, - 61, 0, 0, 0, 62, 63, 29, 0, 64, 0, - 65, 30, 0, 66, 0, 0, 31, 32, 0, 13, - 14, 15, 16, 0, 0, 33, 67, 0, 0, 0, - 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 20, 0, 0, 21, - 0, 0, 22, 23, 0, 24, 0, 271, 560, 562, - 564, 25, 26, 0, 0, 0, 27, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29, 0, 0, 0, 584, 30, 0, 0, 0, - 0, 31, 32, 0, 0, 0, 87, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 28, 61, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 0, 63, 64, 29, 0, 65, 0, + 66, 30, 0, 67, 0, 0, 31, 32, 13, 14, + 15, 16, 0, 0, 0, 33, 68, 0, 0, 0, + 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 20, 0, 0, 21, 0, + 0, 22, 23, 0, 24, 0, 0, 0, 0, 0, + 25, 26, 0, 0, 0, 27, 28, 0, 276, 565, + 567, 569, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, + 31, 32, 0, 0, 0, 0, 589, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 0, 88, 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, - 451, 0, 451 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 456, 0, 456 }; static const short yycheck[] = { 5, - 266, 7, 9, 270, 414, 415, 3, 4, 5, 21, - 16, 17, 92, 19, 20, 21, 22, 23, 75, 25, - 26, 27, 28, 29, 114, 31, 32, 3, 4, 3, - 4, 92, 264, 17, 266, 19, 20, 21, 22, 23, - 175, 25, 26, 27, 28, 29, 21, 31, 32, 139, - 56, 186, 11, 20, 111, 112, 113, 20, 64, 116, - 150, 92, 119, 22, 3, 4, 3, 4, 3, 4, - 3, 4, 56, 24, 20, 3, 4, 20, 20, 30, - 64, 93, 33, 89, 3, 4, 3, 4, 5, 3, - 4, 5, 45, 3, 4, 5, 93, 3, 4, 5, - 21, 107, 108, 3, 4, 5, 3, 4, 114, 68, - 61, 3, 4, 5, 38, 59, 173, 93, 93, 93, - 28, 72, 66, 107, 214, 59, 93, 21, 79, 135, - 93, 12, 59, 139, 93, 192, 59, 21, 3, 4, - 93, 23, 12, 66, 150, 72, 396, 93, 109, 93, - 93, 93, 92, 159, 93, 405, 93, 59, 93, 93, - 93, 92, 44, 59, 170, 93, 93, 128, 129, 93, - 93, 53, 93, 25, 93, 92, 72, 58, 92, 92, - 131, 132, 92, 92, 65, 82, 92, 52, 58, 23, - 196, 93, 92, 401, 8, 65, 52, 158, 80, 93, - 92, 409, 612, 59, 614, 86, 87, 399, 214, 93, - 44, 93, 93, 58, 59, 407, 86, 87, 404, 53, - 403, 92, 183, 93, 185, 82, 412, 398, 411, 43, - 44, 45, 440, 44, 48, 406, 93, 243, 92, 53, - 246, 92, 53, 3, 4, 59, 80, 439, 93, 3, - 4, 5, 258, 259, 260, 216, 70, 8, 93, 93, - 74, 40, 41, 77, 92, 79, 92, 81, 92, 230, - 92, 85, 92, 279, 92, 54, 55, 56, 57, 93, - 92, 60, 93, 34, 245, 3, 4, 248, 3, 4, - 5, 558, 43, 44, 73, 92, 92, 48, 88, 89, - 90, 91, 53, 438, 310, 92, 92, 313, 59, 366, - 92, 446, 447, 93, 93, 92, 92, 583, 92, 70, - 203, 282, 457, 74, 207, 208, 92, 92, 211, 212, - 92, 466, 93, 92, 85, 3, 4, 5, 3, 4, - 5, 93, 93, 400, 8, 92, 92, 353, 354, 355, - 356, 408, 16, 92, 315, 306, 363, 200, 201, 202, - 92, 92, 92, 92, 92, 92, 317, 318, 92, 353, - 354, 355, 356, 324, 93, 92, 92, 82, 92, 43, - 44, 332, 92, 0, 93, 93, 93, 93, 92, 53, - 93, 342, 93, 93, 93, 59, 93, 93, 93, 93, - 8, 93, 93, 93, 93, 92, 70, 464, 16, 93, - 74, 93, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 85, 8, 92, 272, 92, 387, 388, 389, 390, - 16, 382, 92, 92, 92, 43, 44, 92, 399, 92, - 401, 92, 92, 92, 92, 53, 407, 92, 409, 92, - 92, 59, 403, 404, 92, 92, 92, 43, 44, 92, - 411, 412, 70, 92, 92, 426, 74, 53, 429, 92, - 431, 92, 92, 59, 435, 436, 92, 85, 439, 440, - 441, 442, 443, 444, 70, 93, 8, 92, 74, 92, - 92, 92, 92, 628, 16, 630, 92, 632, 92, 85, - 92, 535, 93, 92, 92, 92, 529, 93, 92, 92, - 92, 563, 93, 93, 93, 93, 93, 93, 479, 93, - 481, 43, 44, 484, 93, 486, 93, 488, 93, 93, - 93, 53, 493, 494, 93, 93, 93, 59, 499, 500, - 501, 502, 93, 93, 93, 93, 93, 92, 70, 92, - 92, 92, 74, 92, 92, 0, 93, 93, 93, 565, - 93, 93, 568, 85, 93, 92, 5, 93, 93, 93, - 93, 93, 92, 534, 535, 536, 537, 538, 539, 540, - 92, 133, 93, 93, 568, 93, 92, 92, 92, 595, - 551, 552, 92, 382, 93, 92, 92, 92, 170, 93, - 93, 93, 93, 93, 93, 92, 92, -1, 93, 570, - 93, 572, 573, 574, 575, 92, 92, 92, -1, 93, - 93, 93, 93, 93, 93, 93, 93, -1, -1, 635, - -1, -1, 638, -1, -1, 586, 597, 598, 589, 600, - -1, 592, 603, 604, 605, -1, -1, 653, -1, -1, - 656, -1, -1, -1, -1, 616, 617, -1, 619, -1, - 621, -1, -1, -1, -1, 626, 627, -1, -1, 675, - -1, -1, 633, 634, -1, -1, 637, -1, -1, 640, - 641, -1, 688, 644, 645, -1, -1, -1, -1, -1, - 651, 652, -1, -1, -1, -1, -1, 658, -1, 660, - -1, 662, 663, -1, -1, -1, -1, -1, 669, 670, - 671, 672, -1, -1, -1, -1, -1, 678, -1, 680, - -1, -1, 683, 684, 685, 686, 687, -1, -1, 690, - -1, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, -1, -1, 704, 705, 706, 707, 708, 709, 710, - -1, -1, -1, -1, -1, 716, 717, -1, 719, 1, - 2, 3, 4, -1, -1, -1, -1, 728, -1, -1, - 731, -1, -1, -1, 16, 17, -1, 19, 20, 21, - 22, 23, -1, 25, 26, 27, 28, 29, -1, 31, - 32, -1, -1, -1, 3, 4, 5, 6, -1, -1, - 9, 10, -1, -1, -1, 14, 15, -1, 17, -1, - 19, -1, -1, -1, 56, 24, -1, -1, -1, 28, - -1, 30, 64, -1, 33, -1, -1, 36, 37, -1, - 39, -1, -1, 42, -1, -1, 45, 46, 47, -1, - -1, 50, 51, -1, -1, -1, -1, 89, -1, -1, - 59, -1, -1, -1, 63, 64, 65, -1, 67, -1, - 69, 70, -1, 72, -1, 107, 75, 76, -1, -1, - 8, -1, 114, -1, -1, 84, 85, -1, 16, 121, - -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, - -1, 133, -1, 135, -1, -1, -1, 139, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 150, -1, - -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, - -1, 59, -1, -1, -1, -1, -1, -1, 170, -1, - 172, 173, 70, -1, -1, -1, 74, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, - -1, 193, -1, -1, -1, 93, -1, -1, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, -1, 211, - 212, 213, 214, -1, -1, 217, 3, 4, 5, 6, + 9, 7, 92, 271, 275, 419, 420, 28, 3, 4, + 16, 17, 20, 19, 20, 21, 22, 23, 20, 25, + 26, 27, 28, 29, 21, 31, 32, 3, 4, 115, + 3, 4, 5, 17, 45, 19, 20, 21, 22, 23, + 38, 25, 26, 27, 28, 29, 179, 31, 32, 20, + 56, 401, 76, 92, 92, 141, 20, 190, 59, 65, + 410, 3, 4, 92, 3, 4, 152, 3, 4, 3, + 4, 72, 56, 21, 24, 3, 4, 3, 4, 20, + 30, 65, 93, 33, 90, 93, 21, 59, 112, 113, + 114, 93, 93, 92, 118, 93, 93, 121, 93, 92, + 3, 4, 108, 109, 3, 4, 5, 11, 409, 115, + 21, 92, 62, 3, 4, 5, 417, 93, 22, 21, + 93, 93, 93, 73, 108, 3, 4, 5, 25, 93, + 80, 137, 218, 3, 4, 141, 3, 4, 5, 3, + 4, 5, 3, 4, 5, 93, 152, 3, 4, 92, + 110, 93, 93, 177, 93, 161, 93, 93, 93, 93, + 44, 93, 58, 59, 68, 93, 116, 93, 174, 53, + 130, 131, 196, 92, 3, 4, 5, 6, 92, 82, + 9, 10, 93, 133, 134, 14, 15, 92, 17, 93, + 19, 93, 92, 92, 200, 24, 52, 93, 12, 28, + 160, 30, 92, 617, 33, 619, 92, 36, 37, 93, + 39, 406, 218, 42, 92, 59, 45, 46, 47, 414, + 59, 50, 51, 52, 408, 92, 92, 187, 92, 189, + 59, 92, 416, 72, 63, 64, 65, 82, 67, 92, + 69, 70, 248, 72, 58, 251, 75, 76, 93, 93, + 445, 65, 3, 4, 404, 84, 85, 263, 264, 265, + 220, 59, 412, 59, 93, 92, 8, 52, 66, 403, + 66, 92, 86, 87, 59, 235, 207, 411, 284, 93, + 211, 212, 92, 92, 215, 216, 88, 89, 90, 91, + 250, 92, 563, 253, 444, 93, 93, 93, 92, 92, + 23, 43, 44, 45, 92, 8, 48, 93, 92, 315, + 443, 53, 318, 3, 4, 5, 92, 59, 451, 452, + 588, 44, 3, 4, 5, 92, 92, 287, 70, 462, + 53, 34, 74, 92, 92, 77, 92, 79, 471, 81, + 43, 44, 269, 85, 271, 48, 92, 371, 92, 92, + 53, 93, 358, 359, 360, 361, 59, 80, 92, 368, + 320, 311, 3, 4, 5, 92, 92, 70, 92, 82, + 93, 74, 322, 323, 358, 359, 360, 361, 92, 329, + 92, 405, 85, 3, 4, 5, 23, 337, 92, 413, + 93, 204, 205, 206, 92, 92, 92, 347, 92, 0, + 93, 93, 93, 277, 93, 93, 8, 44, 93, 92, + 0, 93, 5, 93, 16, 93, 53, 93, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 93, 8, 93, + 93, 93, 392, 393, 394, 395, 16, 387, 93, 93, + 93, 43, 44, 80, 404, 469, 406, 93, 92, 540, + 93, 53, 412, 12, 414, 93, 93, 59, 408, 409, + 92, 92, 92, 43, 44, 92, 416, 417, 70, 92, + 92, 431, 74, 53, 434, 92, 436, 92, 92, 59, + 440, 441, 92, 85, 444, 445, 446, 447, 448, 449, + 70, 93, 92, 92, 74, 92, 92, 92, 92, 58, + 633, 92, 635, 92, 637, 85, 65, 92, 92, 92, + 92, 92, 534, 93, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 484, 93, 486, 86, 87, 489, + 92, 491, 92, 493, 93, 40, 41, 92, 498, 499, + 92, 92, 568, 93, 504, 505, 506, 507, 93, 54, + 55, 56, 57, 93, 93, 60, 93, 93, 93, 93, + 93, 93, 93, 8, 570, 93, 93, 573, 73, 93, + 93, 16, 93, 93, 93, 93, 93, 92, 92, 539, + 540, 541, 542, 543, 544, 545, 92, 135, 93, 573, + 92, 92, 92, 92, 600, 93, 556, 557, 43, 44, + 93, 93, 93, 93, 93, 93, 93, 93, 53, 93, + 92, 92, 387, 93, 59, 575, 93, 577, 578, 579, + 580, 93, 92, 92, 92, 70, 92, 174, 93, 74, + 92, 92, 92, 92, 640, 93, 93, 643, 93, 93, + 85, 591, 602, 603, 594, 605, 93, 597, 608, 609, + 610, 93, 658, 92, 92, 661, 93, 93, 92, 92, + -1, 621, 622, 93, 624, 93, 626, 93, 93, 93, + 93, 631, 632, 93, 680, 93, -1, -1, 638, 639, + -1, -1, 642, -1, -1, 645, 646, 693, -1, 649, + 650, -1, -1, -1, -1, -1, 656, 657, -1, -1, + -1, -1, -1, 663, -1, 665, -1, 667, 668, -1, + -1, -1, -1, -1, 674, 675, 676, 677, -1, -1, + -1, -1, -1, 683, -1, 685, -1, -1, 688, 689, + 690, 691, 692, -1, -1, 695, -1, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, -1, -1, 709, + 710, 711, 712, 713, 714, 715, -1, -1, -1, -1, + -1, 721, 722, -1, 724, 1, 2, 3, 4, -1, + -1, -1, -1, 733, -1, -1, 736, -1, -1, -1, + 16, 17, -1, 19, 20, 21, 22, 23, -1, 25, + 26, 27, 28, 29, -1, 31, 32, -1, -1, -1, + -1, 3, 4, 5, 6, -1, -1, 9, 10, -1, + -1, -1, 14, 15, -1, 17, -1, 19, -1, -1, + 56, -1, 24, -1, -1, -1, 28, -1, 30, 65, + -1, 33, -1, -1, 36, 37, -1, 39, -1, -1, + 42, -1, -1, 45, 46, 47, -1, -1, 50, 51, + 52, -1, -1, -1, 90, -1, -1, 59, 8, -1, + -1, 63, 64, 65, -1, 67, 16, 69, 70, -1, + 72, -1, 108, 75, 76, -1, -1, -1, -1, 115, + -1, -1, 84, 85, -1, -1, -1, 123, -1, -1, + -1, 93, -1, 43, 44, -1, -1, -1, -1, 135, + -1, 137, -1, 53, -1, 141, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, 152, -1, -1, -1, + 70, -1, -1, -1, 74, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 85, -1, -1, 174, -1, + 176, 177, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 197, -1, -1, -1, -1, -1, -1, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, -1, 215, + 216, 217, 218, -1, -1, 221, 3, 4, 5, 6, -1, -1, 9, 10, -1, -1, -1, 14, 15, -1, - 17, -1, 19, -1, -1, -1, -1, 24, -1, 241, - -1, 28, -1, 30, -1, -1, 33, -1, -1, 36, + 17, -1, 19, -1, -1, -1, -1, 24, -1, 8, + 246, 28, -1, 30, -1, -1, 33, 16, -1, 36, 37, -1, 39, -1, -1, 42, -1, -1, 45, 46, - 47, -1, -1, 50, 51, -1, -1, -1, -1, -1, - 272, -1, 59, -1, -1, -1, 63, 64, 65, -1, - 67, -1, 69, 70, -1, 72, -1, -1, 75, 76, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, 3, 4, 5, 6, 93, -1, 9, 10, - -1, -1, -1, 14, 15, -1, 17, -1, 19, -1, - -1, -1, -1, 24, -1, 8, -1, 28, -1, 30, - -1, -1, 33, 16, -1, 36, 37, -1, 39, -1, - -1, 42, -1, -1, 45, 46, 47, -1, -1, 50, - 51, 353, 354, 355, 356, -1, -1, -1, 59, -1, - 43, 44, 63, 64, 65, -1, 67, -1, 69, 70, - 53, 72, 374, 375, 75, 76, 59, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, 70, -1, -1, - -1, 74, 93, -1, -1, 397, -1, -1, -1, -1, - -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, - 93, 413, 414, 415, 3, 4, 5, 6, -1, -1, - 9, 10, -1, -1, -1, 14, 15, -1, 17, -1, + 47, -1, -1, 50, 51, 52, -1, -1, -1, -1, + -1, 277, 59, -1, 43, 44, 63, 64, 65, -1, + 67, -1, 69, 70, 53, 72, -1, -1, 75, 76, + 59, -1, -1, -1, 8, -1, -1, 84, 85, -1, + -1, 70, 16, -1, -1, 74, 93, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, 53, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, 358, 359, 360, 361, 70, -1, -1, -1, + 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, -1, 379, 380, -1, -1, -1, -1, 93, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 402, -1, -1, -1, + -1, -1, -1, -1, 3, 4, 5, 6, -1, -1, + 9, 10, 418, 419, 420, 14, 15, -1, 17, -1, 19, -1, -1, -1, -1, 24, -1, -1, -1, 28, -1, 30, -1, -1, 33, -1, -1, 36, 37, -1, 39, -1, -1, 42, -1, -1, 45, 46, 47, -1, - -1, 50, 51, -1, -1, -1, -1, -1, -1, -1, + -1, 50, 51, 52, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 63, 64, 65, -1, 67, -1, - 69, 70, -1, 72, -1, -1, 75, 76, -1, 3, - 4, 5, 6, -1, -1, 84, 85, -1, -1, -1, - -1, 15, -1, 17, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 28, -1, 30, -1, -1, 33, - -1, -1, 36, 37, -1, 39, -1, 529, 530, 531, - 532, 45, 46, -1, -1, -1, 50, 51, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 65, -1, -1, -1, 557, 70, -1, -1, -1, - -1, 75, 76, -1, -1, -1, 568, -1, -1, -1, - 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 69, 70, -1, 72, -1, -1, 75, 76, 3, 4, + 5, 6, -1, -1, -1, 84, 85, -1, -1, -1, + 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 28, -1, 30, -1, -1, 33, -1, + -1, 36, 37, -1, 39, -1, -1, -1, -1, -1, + 45, 46, -1, -1, -1, 50, 51, -1, 534, 535, + 536, 537, -1, -1, -1, -1, -1, -1, -1, -1, + 65, -1, -1, -1, -1, 70, -1, -1, -1, -1, + 75, 76, -1, -1, -1, -1, 562, -1, -1, 84, + -1, -1, -1, -1, -1, -1, -1, 573, -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, - 612, -1, 614 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 617, -1, 619 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison.simple" @@ -1589,14 +1598,14 @@ yyreduce: switch (yyn) { case 6: -#line 236 "parser.yxx" +#line 243 "parser.yxx" { assert(!egg_stack.empty()); DCAST(EggData, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 25: -#line 280 "parser.yxx" +#line 287 "parser.yxx" { string strval = yyvsp[-1]._string; EggCoordinateSystem *cs = new EggCoordinateSystem; @@ -1611,13 +1620,13 @@ case 25: ; break;} case 26: -#line 303 "parser.yxx" +#line 310 "parser.yxx" { yyval._egg = new EggComment(yyvsp[-3]._string, yyvsp[-1]._string); ; break;} case 27: -#line 317 "parser.yxx" +#line 324 "parser.yxx" { string tref_name = yyvsp[-2]._string; Filename filename = yyvsp[0]._string; @@ -1632,14 +1641,14 @@ case 27: ; break;} case 28: -#line 330 "parser.yxx" +#line 337 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 30: -#line 346 "parser.yxx" +#line 353 "parser.yxx" { EggTexture *texture = DCAST(EggTexture, egg_stack.back()); string name = yyvsp[-3]._string; @@ -1973,7 +1982,7 @@ case 30: ; break;} case 32: -#line 689 "parser.yxx" +#line 696 "parser.yxx" { string mref_name = yyvsp[-1]._string; EggMaterial *material = new EggMaterial(mref_name); @@ -1987,14 +1996,14 @@ case 32: ; break;} case 33: -#line 701 "parser.yxx" +#line 708 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 35: -#line 717 "parser.yxx" +#line 724 "parser.yxx" { EggMaterial *material = DCAST(EggMaterial, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2080,7 +2089,7 @@ case 35: ; break;} case 36: -#line 812 "parser.yxx" +#line 819 "parser.yxx" { string node_name = yyvsp[-3]._string; Filename filename = yyvsp[-1]._string; @@ -2089,7 +2098,7 @@ case 36: ; break;} case 37: -#line 819 "parser.yxx" +#line 826 "parser.yxx" { if (cmp_nocase_uh(yyvsp[-5]._string, "group") != 0) { eggyyerror("keyword 'group' expected"); @@ -2101,7 +2110,7 @@ case 37: ; break;} case 38: -#line 839 "parser.yxx" +#line 846 "parser.yxx" { string name = yyvsp[0]._string; EggVertexPool *pool = NULL; @@ -2127,20 +2136,20 @@ case 38: ; break;} case 39: -#line 863 "parser.yxx" +#line 870 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 42: -#line 891 "parser.yxx" +#line 898 "parser.yxx" { egg_stack.push_back(new EggVertex); ; break;} case 43: -#line 895 "parser.yxx" +#line 902 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -2149,7 +2158,7 @@ case 43: ; break;} case 44: -#line 902 "parser.yxx" +#line 909 "parser.yxx" { vertex_index = (int)yyvsp[0]._number; EggVertexPool *pool = DCAST(EggVertexPool, egg_stack.back()); @@ -2176,7 +2185,7 @@ case 44: ; break;} case 45: -#line 927 "parser.yxx" +#line 934 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -2188,31 +2197,31 @@ case 45: ; break;} case 46: -#line 948 "parser.yxx" +#line 955 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(yyvsp[0]._number); ; break;} case 47: -#line 952 "parser.yxx" +#line 959 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint2d(yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 48: -#line 956 "parser.yxx" +#line 963 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint3d(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 49: -#line 960 "parser.yxx" +#line 967 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint4d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 50: -#line 964 "parser.yxx" +#line 971 "parser.yxx" { EggVertex *vertex = DCAST(EggVertex, egg_stack.back()); EggVertexUV *uv = new EggVertexUV(yyvsp[-1]._string, TexCoordd::zero()); @@ -2225,13 +2234,13 @@ case 50: ; break;} case 51: -#line 975 "parser.yxx" +#line 982 "parser.yxx" { egg_stack.pop_back(); ; break;} case 54: -#line 981 "parser.yxx" +#line 988 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2241,7 +2250,7 @@ case 54: ; break;} case 55: -#line 989 "parser.yxx" +#line 996 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2251,19 +2260,19 @@ case 55: ; break;} case 56: -#line 1008 "parser.yxx" +#line 1015 "parser.yxx" { DCAST(EggVertexUV, egg_stack.back())->set_uv(TexCoordd(yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 57: -#line 1012 "parser.yxx" +#line 1019 "parser.yxx" { DCAST(EggVertexUV, egg_stack.back())->set_uvw(LVecBase3d(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 58: -#line 1016 "parser.yxx" +#line 1023 "parser.yxx" { if (DCAST(EggVertexUV, egg_stack.back())->has_tangent()) { eggyywarning("Ignoring repeated tangent"); @@ -2273,7 +2282,7 @@ case 58: ; break;} case 59: -#line 1024 "parser.yxx" +#line 1031 "parser.yxx" { if (DCAST(EggVertexUV, egg_stack.back())->has_binormal()) { eggyywarning("Ignoring repeated binormal"); @@ -2283,7 +2292,7 @@ case 59: ; break;} case 60: -#line 1032 "parser.yxx" +#line 1039 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-4]._string, LVector3d(yyvsp[-2]._number, yyvsp[-1]._number, 0.0))).second; @@ -2293,7 +2302,7 @@ case 60: ; break;} case 61: -#line 1040 "parser.yxx" +#line 1047 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2303,7 +2312,7 @@ case 61: ; break;} case 62: -#line 1048 "parser.yxx" +#line 1055 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-3]._string, LVector3d(yyvsp[-2]._number, yyvsp[-1]._number, 0.0))).second; @@ -2313,7 +2322,7 @@ case 62: ; break;} case 63: -#line 1056 "parser.yxx" +#line 1063 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2323,13 +2332,13 @@ case 63: ; break;} case 64: -#line 1074 "parser.yxx" +#line 1081 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_normal(Normald(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 65: -#line 1078 "parser.yxx" +#line 1085 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2339,7 +2348,7 @@ case 65: ; break;} case 66: -#line 1086 "parser.yxx" +#line 1093 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2349,13 +2358,13 @@ case 66: ; break;} case 67: -#line 1104 "parser.yxx" +#line 1111 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_color(Colorf(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 68: -#line 1108 "parser.yxx" +#line 1115 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-6]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2365,7 +2374,7 @@ case 68: ; break;} case 69: -#line 1116 "parser.yxx" +#line 1123 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-5]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2375,22 +2384,26 @@ case 69: ; break;} case 70: -#line 1134 "parser.yxx" +#line 1141 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); egg_stack.push_back(group); ; break;} case 71: -#line 1139 "parser.yxx" +#line 1146 "parser.yxx" { - yyval._egg = egg_stack.back(); + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + yyval._egg = group; egg_stack.pop_back(); + if (group->has_name()) { + groups[group->get_name()] = group; + } Thread::consider_yield(); ; break;} case 72: -#line 1155 "parser.yxx" +#line 1166 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); group->set_group_type(EggGroup::GT_joint); @@ -2398,14 +2411,14 @@ case 72: ; break;} case 73: -#line 1161 "parser.yxx" +#line 1172 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 74: -#line 1176 "parser.yxx" +#line 1187 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); group->set_group_type(EggGroup::GT_instance); @@ -2413,14 +2426,18 @@ case 74: ; break;} case 75: -#line 1182 "parser.yxx" +#line 1193 "parser.yxx" { - yyval._egg = egg_stack.back(); + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + yyval._egg = group; egg_stack.pop_back(); + if (group->has_name()) { + groups[group->get_name()] = group; + } ; break;} case 77: -#line 1198 "parser.yxx" +#line 1213 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2552,7 +2569,7 @@ case 77: ; break;} case 78: -#line 1328 "parser.yxx" +#line 1343 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[-1]._string; @@ -2566,14 +2583,14 @@ case 78: ; break;} case 79: -#line 1340 "parser.yxx" +#line 1355 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_billboard_center(LPoint3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} case 80: -#line 1345 "parser.yxx" +#line 1360 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = yyvsp[-4]._string; @@ -2582,7 +2599,7 @@ case 80: ; break;} case 81: -#line 1352 "parser.yxx" +#line 1367 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2590,7 +2607,7 @@ case 81: ; break;} case 82: -#line 1358 "parser.yxx" +#line 1373 "parser.yxx" { // The special flavor of DCS, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2605,7 +2622,7 @@ case 82: ; break;} case 83: -#line 1371 "parser.yxx" +#line 1386 "parser.yxx" { // The traditional flavor of DART, with { 0 } or { 1 }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2614,7 +2631,7 @@ case 83: ; break;} case 84: -#line 1378 "parser.yxx" +#line 1393 "parser.yxx" { // The special flavor of DART, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2629,7 +2646,7 @@ case 84: ; break;} case 85: -#line 1391 "parser.yxx" +#line 1406 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2637,7 +2654,7 @@ case 85: ; break;} case 86: -#line 1397 "parser.yxx" +#line 1412 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string type = yyvsp[-1]._string; @@ -2645,7 +2662,7 @@ case 86: ; break;} case 87: -#line 1403 "parser.yxx" +#line 1418 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2653,14 +2670,14 @@ case 87: ; break;} case 88: -#line 1409 "parser.yxx" +#line 1424 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_tag(yyvsp[-3]._string, yyvsp[-1]._string); ; break;} case 89: -#line 1414 "parser.yxx" +#line 1429 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2668,13 +2685,24 @@ case 89: ; break;} case 93: -#line 1423 "parser.yxx" +#line 1438 "parser.yxx" +{ + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + if (group->get_group_type() != EggGroup::GT_instance) { + eggyyerror(" valid only within "); + } else if (yyvsp[-1]._egg != (EggObject *)NULL) { + group->add_group_ref(DCAST(EggGroup, yyvsp[-1]._egg)); + } +; + break;} +case 94: +#line 1447 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} -case 94: -#line 1437 "parser.yxx" +case 95: +#line 1461 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[0]._string; @@ -2695,8 +2723,8 @@ case 94: } ; break;} -case 96: -#line 1468 "parser.yxx" +case 97: +#line 1492 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[0]._string; @@ -2709,74 +2737,74 @@ case 96: } ; break;} -case 97: -#line 1490 "parser.yxx" +case 98: +#line 1514 "parser.yxx" { egg_stack.back()->as_transform()->clear_transform(); ; break;} -case 112: -#line 1522 "parser.yxx" +case 113: +#line 1546 "parser.yxx" { egg_stack.back()->as_transform()->add_translate2d(LVector2d(yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} -case 113: -#line 1529 "parser.yxx" +case 114: +#line 1553 "parser.yxx" { egg_stack.back()->as_transform()->add_translate3d(LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} -case 114: -#line 1536 "parser.yxx" +case 115: +#line 1560 "parser.yxx" { egg_stack.back()->as_transform()->add_rotate2d(yyvsp[-1]._number); ; break;} -case 115: -#line 1543 "parser.yxx" +case 116: +#line 1567 "parser.yxx" { egg_stack.back()->as_transform()->add_rotx(yyvsp[-1]._number); ; break;} -case 116: -#line 1550 "parser.yxx" +case 117: +#line 1574 "parser.yxx" { egg_stack.back()->as_transform()->add_roty(yyvsp[-1]._number); ; break;} -case 117: -#line 1557 "parser.yxx" +case 118: +#line 1581 "parser.yxx" { egg_stack.back()->as_transform()->add_rotz(yyvsp[-1]._number); ; break;} -case 118: -#line 1564 "parser.yxx" +case 119: +#line 1588 "parser.yxx" { egg_stack.back()->as_transform()->add_rotate3d(yyvsp[-4]._number, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} -case 119: -#line 1571 "parser.yxx" +case 120: +#line 1595 "parser.yxx" { egg_stack.back()->as_transform()->add_scale2d(LVecBase2d(yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} -case 120: -#line 1578 "parser.yxx" +case 121: +#line 1602 "parser.yxx" { egg_stack.back()->as_transform()->add_scale3d(LVecBase3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} -case 121: -#line 1585 "parser.yxx" +case 122: +#line 1609 "parser.yxx" { egg_stack.back()->as_transform()->add_uniform_scale(yyvsp[-1]._number); ; break;} -case 124: -#line 1599 "parser.yxx" +case 125: +#line 1623 "parser.yxx" { egg_stack.back()->as_transform()->add_matrix3 (LMatrix3d(yyvsp[-8]._number, yyvsp[-7]._number, yyvsp[-6]._number, @@ -2784,8 +2812,8 @@ case 124: yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 127: -#line 1617 "parser.yxx" +case 128: +#line 1641 "parser.yxx" { egg_stack.back()->as_transform()->add_matrix4 (LMatrix4d(yyvsp[-15]._number, yyvsp[-14]._number, yyvsp[-13]._number, yyvsp[-12]._number, @@ -2794,8 +2822,8 @@ case 127: yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 128: -#line 1636 "parser.yxx" +case 129: +#line 1660 "parser.yxx" { if (yyvsp[-2]._egg != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, yyvsp[-2]._egg); @@ -2818,14 +2846,14 @@ case 128: } ; break;} -case 129: -#line 1669 "parser.yxx" +case 130: +#line 1693 "parser.yxx" { yyval._number = 1.0; ; break;} -case 130: -#line 1673 "parser.yxx" +case 131: +#line 1697 "parser.yxx" { string name = yyvsp[-3]._string; double value = yyvsp[-1]._number; @@ -2840,113 +2868,113 @@ case 130: yyval._number = result; ; break;} -case 132: -#line 1710 "parser.yxx" +case 133: +#line 1734 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance(yyvsp[-8]._number, yyvsp[-7]._number, LPoint3d(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number))); ; break;} -case 133: -#line 1715 "parser.yxx" +case 134: +#line 1739 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance(yyvsp[-9]._number, yyvsp[-8]._number, LPoint3d(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number), yyvsp[-7]._number)); ; break;} -case 134: -#line 1732 "parser.yxx" +case 135: +#line 1756 "parser.yxx" { egg_stack.push_back(new EggPolygon(yyvsp[0]._string)); ; break;} -case 135: -#line 1736 "parser.yxx" +case 136: +#line 1760 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 136: -#line 1751 "parser.yxx" +case 137: +#line 1775 "parser.yxx" { egg_stack.push_back(new EggTriangleFan(yyvsp[0]._string)); ; break;} -case 137: -#line 1755 "parser.yxx" +case 138: +#line 1779 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 138: -#line 1770 "parser.yxx" +case 139: +#line 1794 "parser.yxx" { egg_stack.push_back(new EggTriangleStrip(yyvsp[0]._string)); ; break;} -case 139: -#line 1774 "parser.yxx" +case 140: +#line 1798 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 140: -#line 1789 "parser.yxx" +case 141: +#line 1813 "parser.yxx" { egg_stack.push_back(new EggPoint(yyvsp[0]._string)); ; break;} -case 141: -#line 1793 "parser.yxx" +case 142: +#line 1817 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 142: -#line 1808 "parser.yxx" +case 143: +#line 1832 "parser.yxx" { egg_stack.push_back(new EggLine(yyvsp[0]._string)); ; break;} -case 143: -#line 1812 "parser.yxx" +case 144: +#line 1836 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 144: -#line 1827 "parser.yxx" +case 145: +#line 1851 "parser.yxx" { egg_stack.push_back(new EggNurbsSurface(yyvsp[0]._string)); ; break;} -case 145: -#line 1831 "parser.yxx" +case 146: +#line 1855 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 146: -#line 1846 "parser.yxx" +case 147: +#line 1870 "parser.yxx" { egg_stack.push_back(new EggNurbsCurve(yyvsp[0]._string)); ; break;} -case 147: -#line 1850 "parser.yxx" +case 148: +#line 1874 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 152: -#line 1880 "parser.yxx" +case 153: +#line 1904 "parser.yxx" { if (!egg_stack.back()->is_of_type(EggCompositePrimitive::get_class_type())) { eggyyerror("Not a composite primitive; components are not allowed here."); @@ -2961,8 +2989,8 @@ case 152: egg_stack.push_back(new EggPolygon); ; break;} -case 153: -#line 1894 "parser.yxx" +case 154: +#line 1918 "parser.yxx" { PT(EggPrimitive) prim = DCAST(EggPrimitive, egg_stack.back()); egg_stack.pop_back(); @@ -2970,8 +2998,8 @@ case 153: comp->set_component((int)yyvsp[-4]._number, prim); ; break;} -case 161: -#line 1908 "parser.yxx" +case 162: +#line 1932 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3035,16 +3063,16 @@ case 161: } ; break;} -case 173: -#line 1992 "parser.yxx" +case 174: +#line 2016 "parser.yxx" { EggNurbsCurve *curve = DCAST(EggNurbsCurve, yyvsp[0]._egg); EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_curves_on_surface.push_back(curve); ; break;} -case 175: -#line 1999 "parser.yxx" +case 176: +#line 2023 "parser.yxx" { EggNurbsSurface *primitive = DCAST(EggNurbsSurface, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3098,8 +3126,8 @@ case 175: } ; break;} -case 186: -#line 2073 "parser.yxx" +case 187: +#line 2097 "parser.yxx" { EggNurbsCurve *primitive = DCAST(EggNurbsCurve, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3159,8 +3187,8 @@ case 186: } ; break;} -case 187: -#line 2142 "parser.yxx" +case 188: +#line 2166 "parser.yxx" { if (yyvsp[0]._egg != (EggTexture *)NULL) { EggTexture *texture = DCAST(EggTexture, yyvsp[0]._egg); @@ -3168,8 +3196,8 @@ case 187: } ; break;} -case 188: -#line 2159 "parser.yxx" +case 189: +#line 2183 "parser.yxx" { EggTexture *texture = NULL; @@ -3200,8 +3228,8 @@ case 188: DCAST(EggPrimitive, egg_stack.back())->add_texture(texture); ; break;} -case 189: -#line 2199 "parser.yxx" +case 190: +#line 2223 "parser.yxx" { if (yyvsp[0]._egg != (EggMaterial *)NULL) { EggMaterial *material = DCAST(EggMaterial, yyvsp[0]._egg); @@ -3209,14 +3237,14 @@ case 189: } ; break;} -case 190: -#line 2216 "parser.yxx" +case 191: +#line 2240 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_normal(Normald(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 191: -#line 2220 "parser.yxx" +case 192: +#line 2244 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3225,8 +3253,8 @@ case 191: } ; break;} -case 192: -#line 2228 "parser.yxx" +case 193: +#line 2252 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3235,14 +3263,14 @@ case 192: } ; break;} -case 193: -#line 2246 "parser.yxx" +case 194: +#line 2270 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_color(Colorf(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 194: -#line 2250 "parser.yxx" +case 195: +#line 2274 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-6]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3251,8 +3279,8 @@ case 194: } ; break;} -case 195: -#line 2258 "parser.yxx" +case 196: +#line 2282 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-5]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3261,16 +3289,16 @@ case 195: } ; break;} -case 196: -#line 2276 "parser.yxx" +case 197: +#line 2300 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); int value = (int)yyvsp[0]._number; primitive->set_bface_flag(value!=0); ; break;} -case 197: -#line 2292 "parser.yxx" +case 198: +#line 2316 "parser.yxx" { if (yyvsp[-2]._egg != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, yyvsp[-2]._egg); @@ -3292,8 +3320,8 @@ case 197: } ; break;} -case 198: -#line 2323 "parser.yxx" +case 199: +#line 2347 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); int u_order = (int)yyvsp[-1]._number; @@ -3302,8 +3330,8 @@ case 198: nurbs->set_v_order(v_order); ; break;} -case 199: -#line 2341 "parser.yxx" +case 200: +#line 2365 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -3314,8 +3342,8 @@ case 199: } ; break;} -case 200: -#line 2361 "parser.yxx" +case 201: +#line 2385 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -3326,23 +3354,23 @@ case 200: } ; break;} -case 201: -#line 2381 "parser.yxx" +case 202: +#line 2405 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_trims.push_back(EggNurbsSurface::Trim()); ; break;} -case 203: -#line 2397 "parser.yxx" +case 204: +#line 2421 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); nurbs->_trims.back().push_back(EggNurbsSurface::Loop()); ; break;} -case 204: -#line 2403 "parser.yxx" +case 205: +#line 2427 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); @@ -3351,16 +3379,16 @@ case 204: nurbs->_trims.back().back().push_back(curve); ; break;} -case 205: -#line 2422 "parser.yxx" +case 206: +#line 2446 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); int order = (int)yyvsp[0]._number; nurbs->set_order(order); ; break;} -case 206: -#line 2438 "parser.yxx" +case 207: +#line 2462 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -3371,83 +3399,83 @@ case 206: } ; break;} -case 207: -#line 2459 "parser.yxx" +case 208: +#line 2483 "parser.yxx" { EggTable *table = new EggTable(yyvsp[0]._string); table->set_table_type(EggTable::TT_table); egg_stack.push_back(table); ; break;} -case 208: -#line 2465 "parser.yxx" +case 209: +#line 2489 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); Thread::consider_yield(); ; break;} -case 209: -#line 2482 "parser.yxx" +case 210: +#line 2506 "parser.yxx" { EggTable *table = new EggTable(yyvsp[0]._string); table->set_table_type(EggTable::TT_bundle); egg_stack.push_back(table); ; break;} -case 210: -#line 2488 "parser.yxx" +case 211: +#line 2512 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 212: -#line 2504 "parser.yxx" -{ - DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); -; - break;} case 213: -#line 2508 "parser.yxx" +#line 2528 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 214: -#line 2512 "parser.yxx" +#line 2532 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 215: -#line 2516 "parser.yxx" +#line 2536 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 216: -#line 2520 "parser.yxx" +#line 2540 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 217: -#line 2535 "parser.yxx" +#line 2544 "parser.yxx" +{ + DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); +; + break;} +case 218: +#line 2559 "parser.yxx" { EggSAnimData *anim_data = new EggSAnimData(yyvsp[0]._string); egg_stack.push_back(anim_data); ; break;} -case 218: -#line 2540 "parser.yxx" +case 219: +#line 2564 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 220: -#line 2557 "parser.yxx" +case 221: +#line 2581 "parser.yxx" { EggSAnimData *anim_data = DCAST(EggSAnimData, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3460,28 +3488,28 @@ case 220: } ; break;} -case 221: -#line 2569 "parser.yxx" +case 222: +#line 2593 "parser.yxx" { DCAST(EggSAnimData, egg_stack.back())->set_data(yyvsp[-1]._number_list); ; break;} -case 222: -#line 2583 "parser.yxx" +case 223: +#line 2607 "parser.yxx" { EggXfmAnimData *anim_data = new EggXfmAnimData(yyvsp[0]._string); egg_stack.push_back(anim_data); ; break;} -case 223: -#line 2588 "parser.yxx" +case 224: +#line 2612 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 225: -#line 2605 "parser.yxx" +case 226: +#line 2629 "parser.yxx" { EggXfmAnimData *anim_data = DCAST(EggXfmAnimData, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3499,28 +3527,28 @@ case 225: } ; break;} -case 226: -#line 2622 "parser.yxx" +case 227: +#line 2646 "parser.yxx" { DCAST(EggXfmAnimData, egg_stack.back())->set_data(yyvsp[-1]._number_list); ; break;} -case 227: -#line 2636 "parser.yxx" +case 228: +#line 2660 "parser.yxx" { EggXfmSAnim *anim_group = new EggXfmSAnim(yyvsp[0]._string); egg_stack.push_back(anim_group); ; break;} -case 228: -#line 2641 "parser.yxx" +case 229: +#line 2665 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 230: -#line 2658 "parser.yxx" +case 231: +#line 2682 "parser.yxx" { EggXfmSAnim *anim_group = DCAST(EggXfmSAnim, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3536,28 +3564,28 @@ case 230: } ; break;} -case 231: -#line 2673 "parser.yxx" +case 232: +#line 2697 "parser.yxx" { DCAST(EggXfmSAnim, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} -case 232: -#line 2688 "parser.yxx" +case 233: +#line 2712 "parser.yxx" { EggAnimPreload *anim_preload = new EggAnimPreload(yyvsp[0]._string); egg_stack.push_back(anim_preload); ; break;} -case 233: -#line 2693 "parser.yxx" +case 234: +#line 2717 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 235: -#line 2710 "parser.yxx" +case 236: +#line 2734 "parser.yxx" { EggAnimPreload *anim_preload = DCAST(EggAnimPreload, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3572,32 +3600,32 @@ case 235: } ; break;} -case 236: -#line 2734 "parser.yxx" +case 237: +#line 2758 "parser.yxx" { yyval._number_list = PTA_double::empty_array(0); ; break;} -case 237: -#line 2738 "parser.yxx" +case 238: +#line 2762 "parser.yxx" { yyval._number_list.push_back((double)yyvsp[0]._number); ; break;} -case 238: -#line 2752 "parser.yxx" +case 239: +#line 2776 "parser.yxx" { yyval._number_list = PTA_double::empty_array(0); ; break;} -case 239: -#line 2756 "parser.yxx" +case 240: +#line 2780 "parser.yxx" { yyval._number_list.push_back(yyvsp[0]._number); ; break;} -case 240: -#line 2770 "parser.yxx" +case 241: +#line 2794 "parser.yxx" { string name = yyvsp[0]._string; Textures::iterator vpi = textures.find(name); @@ -3609,8 +3637,8 @@ case 240: } ; break;} -case 241: -#line 2791 "parser.yxx" +case 242: +#line 2815 "parser.yxx" { string name = yyvsp[0]._string; Materials::iterator vpi = materials.find(name); @@ -3622,8 +3650,8 @@ case 241: } ; break;} -case 242: -#line 2812 "parser.yxx" +case 243: +#line 2836 "parser.yxx" { string name = yyvsp[0]._string; VertexPools::iterator vpi = vertex_pools.find(name); @@ -3639,94 +3667,107 @@ case 242: } ; break;} -case 243: -#line 2838 "parser.yxx" +case 244: +#line 2861 "parser.yxx" +{ + string name = yyvsp[0]._string; + Groups::iterator vpi = groups.find(name); + if (vpi == groups.end()) { + eggyyerror("Unknown group " + name); + yyval._egg = PT(EggObject)(); + } else { + yyval._egg = (*vpi).second; + } +; + break;} +case 245: +#line 2882 "parser.yxx" { eggyyerror("Name required."); yyval._string = ""; ; break;} -case 246: -#line 2867 "parser.yxx" +case 248: +#line 2911 "parser.yxx" { eggyyerror("String required."); yyval._string = ""; ; break;} -case 248: -#line 2883 "parser.yxx" +case 250: +#line 2927 "parser.yxx" { yyval._string = ""; ; break;} -case 250: -#line 2901 "parser.yxx" -{ - yyval._string = yyvsp[0]._string; -; - break;} -case 251: -#line 2905 "parser.yxx" +case 252: +#line 2945 "parser.yxx" { yyval._string = yyvsp[0]._string; ; break;} case 253: -#line 2922 "parser.yxx" -{ - yyval._string = ""; -; - break;} -case 254: -#line 2926 "parser.yxx" +#line 2949 "parser.yxx" { yyval._string = yyvsp[0]._string; ; break;} case 255: -#line 2942 "parser.yxx" +#line 2966 "parser.yxx" +{ + yyval._string = ""; +; + break;} +case 256: +#line 2970 "parser.yxx" { yyval._string = yyvsp[0]._string; ; break;} -case 256: -#line 2946 "parser.yxx" +case 257: +#line 2986 "parser.yxx" +{ + yyval._string = yyvsp[0]._string; +; + break;} +case 258: +#line 2990 "parser.yxx" { yyval._string = yyvsp[-1]._string + "\n" + yyvsp[0]._string; ; break;} -case 258: -#line 2961 "parser.yxx" +case 260: +#line 3005 "parser.yxx" { yyval._number = yyvsp[0]._ulong; ; break;} -case 259: -#line 2976 "parser.yxx" +case 261: +#line 3020 "parser.yxx" { yyval._number = yyvsp[0]._number; yyval._ulong = (unsigned long)yyvsp[0]._number; yyval._string = yyvsp[0]._string; ; break;} -case 260: -#line 2982 "parser.yxx" +case 262: +#line 3026 "parser.yxx" { yyval._number = yyvsp[0]._ulong; yyval._ulong = yyvsp[0]._ulong; yyval._string = yyvsp[0]._string; ; break;} -case 261: -#line 2988 "parser.yxx" +case 263: +#line 3032 "parser.yxx" { yyval._number = 0.0; yyval._ulong = 0; yyval._string = yyvsp[0]._string; ; break;} -case 262: -#line 3005 "parser.yxx" +case 264: +#line 3049 "parser.yxx" { int i = (int)yyvsp[0]._number; if ((double)i != yyvsp[0]._number) { @@ -3735,8 +3776,8 @@ case 262: } ; break;} -case 263: -#line 3013 "parser.yxx" +case 265: +#line 3057 "parser.yxx" { yyval._number = yyvsp[0]._ulong; ; @@ -3963,4 +4004,4 @@ yyerrhandle: } return 1; } -#line 3020 "parser.yxx" +#line 3064 "parser.yxx" diff --git a/panda/src/egg/parser.yxx b/panda/src/egg/parser.yxx index ea0939ca80..ef8fee5999 100644 --- a/panda/src/egg/parser.yxx +++ b/panda/src/egg/parser.yxx @@ -79,6 +79,10 @@ static Textures textures; typedef pmap Materials; static Materials materials; +// Group names to groups. +typedef pmap Groups; +static Groups groups; + // We need to be able to save the index number requested for a vertex // temporarily. static int vertex_index; @@ -101,6 +105,7 @@ egg_init_parser(istream &in, const string &filename, vertex_pools.clear(); textures.clear(); materials.clear(); + groups.clear(); egg_stack.push_back(tos); egg_top_node = top_node; @@ -140,6 +145,7 @@ egg_cleanup_parser() { vertex_pools.clear(); textures.clear(); materials.clear(); + groups.clear(); } %} @@ -208,6 +214,7 @@ egg_cleanup_parser() { %type <_egg> texture_name %type <_egg> material_name %type <_egg> vertex_pool_name +%type <_egg> group_name %type <_number> real %type <_number> integer @@ -1137,8 +1144,12 @@ group: } '{' group_body '}' { - $$ = egg_stack.back(); + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + $$ = group; egg_stack.pop_back(); + if (group->has_name()) { + groups[group->get_name()] = group; + } Thread::consider_yield(); } ; @@ -1180,8 +1191,12 @@ instance: } '{' group_body '}' { - $$ = egg_stack.back(); + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + $$ = group; egg_stack.pop_back(); + if (group->has_name()) { + groups[group->get_name()] = group; + } } ; @@ -1419,6 +1434,15 @@ group_body: | group_body transform | group_body group_vertex_ref | group_body switchcondition + | group_body REF '{' group_name '}' +{ + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + if (group->get_group_type() != EggGroup::GT_instance) { + eggyyerror(" valid only within "); + } else if ($4 != (EggObject *)NULL) { + group->add_group_ref(DCAST(EggGroup, $4)); + } +} | group_body node { DCAST(EggGroup, egg_stack.back())->add_child(DCAST(EggNode, $2)); @@ -2825,6 +2849,26 @@ vertex_pool_name: } ; +/* + * group_name + * + * enter: + * exit: Returns an EggGroup pointer, or NULL. + * + */ +group_name: + required_name +{ + string name = $1; + Groups::iterator vpi = groups.find(name); + if (vpi == groups.end()) { + eggyyerror("Unknown group " + name); + $$ = PT(EggObject)(); + } else { + $$ = (*vpi).second; + } +} + ; /* * required_name diff --git a/panda/src/egg2pg/eggLoader.cxx b/panda/src/egg2pg/eggLoader.cxx index 37501aa714..501f54ceb7 100644 --- a/panda/src/egg2pg/eggLoader.cxx +++ b/panda/src/egg2pg/eggLoader.cxx @@ -1758,6 +1758,7 @@ make_lod(EggBin *egg_bin, PandaNode *parent) { lod_node->add_switch(instance._d->_switch_in, instance._d->_switch_out); } + _groups[egg_bin] = lod_node; return create_group_arc(egg_bin, parent, lod_node); } @@ -1897,6 +1898,19 @@ make_node(EggGroup *egg_group, PandaNode *parent) { if (node == (PandaNode *)NULL) { return NULL; } + + // Associate any instances with this node. + int num_group_refs = egg_group->get_num_group_refs(); + for (int gri = 0; gri < num_group_refs; ++gri) { + EggGroup *group_ref = egg_group->get_group_ref(gri); + Groups::const_iterator gi = _groups.find(group_ref); + if (gi != _groups.end()) { + PandaNode *node_ref = (*gi).second; + node->add_child(node_ref); + } + } + + _groups[egg_group] = node; return create_group_arc(egg_group, parent, node); } diff --git a/panda/src/egg2pg/eggLoader.h b/panda/src/egg2pg/eggLoader.h index 320df223f8..cf400c45d6 100644 --- a/panda/src/egg2pg/eggLoader.h +++ b/panda/src/egg2pg/eggLoader.h @@ -224,6 +224,9 @@ private: Materials _materials; Materials _materials_bface; + typedef pmap Groups; + Groups _groups; + typedef pset ExtraNodes; ExtraNodes _decals; ExtraNodes _sequences;