From 842dd7bf2639f5dc0ee1d8203be48aa51b824cfd Mon Sep 17 00:00:00 2001 From: David Rose Date: Fri, 2 Jul 2004 00:54:54 +0000 Subject: [PATCH] allow defaults everywhere --- direct/src/dcparser/dcClass.cxx | 14 + direct/src/dcparser/dcParser.cxx.prebuilt | 1057 +++++++++++---------- direct/src/dcparser/dcParser.yxx | 96 +- 3 files changed, 626 insertions(+), 541 deletions(-) diff --git a/direct/src/dcparser/dcClass.cxx b/direct/src/dcparser/dcClass.cxx index 9736edb0ac..34b13c8322 100644 --- a/direct/src/dcparser/dcClass.cxx +++ b/direct/src/dcparser/dcClass.cxx @@ -753,6 +753,20 @@ write(ostream &out, bool brief, int indent_level) const { Fields::const_iterator fi; for (fi = _fields.begin(); fi != _fields.end(); ++fi) { (*fi)->write(out, brief, indent_level + 2); + + /* + if (true || (*fi)->has_default_value()) { + indent(out, indent_level + 2) << "// = "; + DCPacker packer; + packer.set_unpack_data((*fi)->get_default_value()); + packer.begin_unpack(*fi); + packer.unpack_and_format(out); + if (!packer.end_unpack()) { + out << ""; + } + out << "\n"; + } + */ } indent(out, indent_level) << "};\n"; diff --git a/direct/src/dcparser/dcParser.cxx.prebuilt b/direct/src/dcparser/dcParser.cxx.prebuilt index 1aaee45fff..ff56881da4 100644 --- a/direct/src/dcparser/dcParser.cxx.prebuilt +++ b/direct/src/dcparser/dcParser.cxx.prebuilt @@ -121,12 +121,12 @@ dc_cleanup_parser() { -#define YYFINAL 245 +#define YYFINAL 252 #define YYFLAG -32768 #define YYNTBASE 61 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 300 ? yytranslate[x] : 127) +#define YYTRANSLATE(x) ((unsigned)(x) <= 300 ? yytranslate[x] : 131) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = @@ -173,68 +173,70 @@ static const short yyprhs[] = 84, 86, 89, 92, 95, 97, 101, 104, 105, 113, 115, 117, 120, 122, 126, 128, 131, 134, 136, 138, 141, 143, 144, 150, 152, 154, 156, 160, 162, 163, - 168, 169, 173, 175, 177, 179, 181, 186, 190, 197, - 204, 206, 208, 210, 212, 214, 218, 221, 225, 231, - 236, 238, 240, 244, 248, 254, 256, 261, 263, 267, - 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, - 292, 294, 296, 298, 300, 302, 303, 308, 309, 314, - 315, 320, 324, 328, 332, 336, 338, 341, 343, 345, - 347, 351, 353, 355, 357, 359, 361, 363, 365, 367, - 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, - 389, 391, 393, 396, 399, 402, 405, 408, 411, 414, - 417, 420, 421, 426, 428, 430, 434, 436, 438, 439, - 449, 451, 454, 457, 460, 461, 466, 469, 471 + 167, 169, 171, 172, 177, 179, 180, 185, 187, 189, + 191, 193, 195, 200, 204, 211, 218, 220, 222, 224, + 226, 228, 232, 235, 239, 245, 250, 252, 254, 258, + 262, 268, 270, 275, 277, 281, 286, 288, 290, 292, + 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, + 314, 316, 317, 322, 323, 328, 329, 334, 338, 342, + 346, 350, 352, 355, 357, 359, 361, 365, 367, 369, + 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, + 391, 393, 395, 397, 399, 401, 403, 405, 407, 410, + 413, 416, 419, 422, 425, 428, 431, 434, 435, 440, + 442, 444, 448, 450, 452, 453, 463, 465, 468, 471, + 474, 475, 480, 483, 485 }; static const short yyrhs[] = { - 45, 62, 0, 46, 106, 0, 126, 0, 62, 47, - 0, 62, 70, 0, 62, 120, 0, 62, 65, 0, + 45, 62, 0, 46, 110, 0, 130, 0, 62, 47, + 0, 62, 70, 0, 62, 124, 0, 62, 65, 0, 62, 69, 0, 8, 0, 63, 48, 8, 0, 63, 0, 64, 49, 63, 0, 12, 64, 0, 0, 11, 64, 12, 66, 67, 0, 68, 0, 50, 0, 63, - 0, 68, 51, 63, 0, 13, 94, 0, 71, 0, - 78, 0, 0, 9, 119, 72, 74, 52, 76, 53, - 0, 8, 0, 126, 0, 54, 75, 0, 73, 0, - 75, 51, 73, 0, 126, 0, 76, 47, 0, 76, - 77, 0, 85, 114, 0, 115, 0, 93, 114, 47, - 0, 91, 114, 0, 0, 10, 119, 79, 81, 52, - 83, 53, 0, 8, 0, 126, 0, 54, 82, 0, - 80, 0, 82, 51, 80, 0, 126, 0, 83, 47, - 0, 83, 84, 0, 85, 0, 115, 0, 93, 47, - 0, 91, 0, 0, 8, 55, 86, 87, 56, 0, - 126, 0, 88, 0, 89, 0, 88, 51, 89, 0, - 94, 0, 0, 94, 57, 90, 106, 0, 0, 98, - 92, 99, 0, 98, 0, 91, 0, 93, 0, 113, - 0, 113, 55, 96, 56, 0, 113, 48, 101, 0, - 113, 48, 101, 55, 96, 56, 0, 113, 55, 96, - 56, 48, 101, 0, 8, 0, 78, 0, 120, 0, - 126, 0, 105, 0, 105, 58, 105, 0, 105, 104, - 0, 96, 51, 105, 0, 96, 51, 105, 58, 105, - 0, 96, 51, 105, 104, 0, 126, 0, 100, 0, - 100, 58, 100, 0, 97, 51, 100, 0, 97, 51, - 100, 58, 100, 0, 95, 0, 98, 59, 97, 60, - 0, 8, 0, 99, 48, 101, 0, 99, 59, 97, - 60, 0, 6, 0, 101, 0, 3, 0, 4, 0, - 3, 0, 103, 0, 102, 0, 5, 0, 6, 0, - 104, 0, 102, 0, 103, 0, 5, 0, 6, 0, - 7, 0, 0, 52, 107, 110, 53, 0, 0, 59, - 108, 110, 60, 0, 0, 55, 109, 110, 56, 0, - 102, 50, 101, 0, 103, 50, 101, 0, 5, 50, - 101, 0, 7, 50, 101, 0, 111, 0, 112, 111, - 0, 126, 0, 51, 0, 106, 0, 112, 51, 106, - 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, - 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, - 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, - 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, - 0, 126, 0, 114, 36, 0, 114, 37, 0, 114, - 38, 0, 114, 39, 0, 114, 40, 0, 114, 41, - 0, 114, 42, 0, 114, 43, 0, 114, 44, 0, - 0, 8, 54, 116, 118, 0, 8, 0, 117, 0, - 118, 51, 117, 0, 126, 0, 8, 0, 0, 14, - 119, 55, 94, 56, 52, 121, 122, 53, 0, 126, - 0, 122, 47, 0, 122, 123, 0, 122, 125, 0, - 0, 15, 124, 106, 54, 0, 93, 47, 0, 91, - 0, 0 + 0, 68, 51, 63, 0, 13, 98, 0, 71, 0, + 78, 0, 0, 9, 123, 72, 74, 52, 76, 53, + 0, 8, 0, 130, 0, 54, 75, 0, 73, 0, + 75, 51, 73, 0, 130, 0, 76, 47, 0, 76, + 77, 0, 85, 118, 0, 119, 0, 95, 118, 47, + 0, 93, 118, 0, 0, 10, 123, 79, 81, 52, + 83, 53, 0, 8, 0, 130, 0, 54, 82, 0, + 80, 0, 82, 51, 80, 0, 130, 0, 83, 47, + 0, 83, 84, 0, 85, 0, 119, 0, 95, 47, + 0, 93, 0, 0, 8, 55, 86, 87, 56, 0, + 130, 0, 88, 0, 89, 0, 88, 51, 89, 0, + 98, 0, 0, 102, 91, 103, 0, 102, 0, 90, + 0, 0, 90, 57, 94, 110, 0, 92, 0, 0, + 92, 57, 96, 110, 0, 90, 0, 92, 0, 93, + 0, 95, 0, 117, 0, 117, 55, 100, 56, 0, + 117, 48, 105, 0, 117, 48, 105, 55, 100, 56, + 0, 117, 55, 100, 56, 48, 105, 0, 8, 0, + 78, 0, 124, 0, 130, 0, 109, 0, 109, 58, + 109, 0, 109, 108, 0, 100, 51, 109, 0, 100, + 51, 109, 58, 109, 0, 100, 51, 109, 108, 0, + 130, 0, 104, 0, 104, 58, 104, 0, 101, 51, + 104, 0, 101, 51, 104, 58, 104, 0, 99, 0, + 102, 59, 101, 60, 0, 8, 0, 103, 48, 105, + 0, 103, 59, 101, 60, 0, 6, 0, 105, 0, + 3, 0, 4, 0, 3, 0, 107, 0, 106, 0, + 5, 0, 6, 0, 108, 0, 106, 0, 107, 0, + 5, 0, 6, 0, 7, 0, 0, 52, 111, 114, + 53, 0, 0, 59, 112, 114, 60, 0, 0, 55, + 113, 114, 56, 0, 106, 50, 105, 0, 107, 50, + 105, 0, 5, 50, 105, 0, 7, 50, 105, 0, + 115, 0, 116, 115, 0, 130, 0, 51, 0, 110, + 0, 116, 51, 110, 0, 16, 0, 17, 0, 18, + 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, + 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, + 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, + 0, 34, 0, 35, 0, 130, 0, 118, 36, 0, + 118, 37, 0, 118, 38, 0, 118, 39, 0, 118, + 40, 0, 118, 41, 0, 118, 42, 0, 118, 43, + 0, 118, 44, 0, 0, 8, 54, 120, 122, 0, + 8, 0, 121, 0, 122, 51, 121, 0, 130, 0, + 8, 0, 0, 14, 123, 55, 97, 56, 52, 125, + 126, 53, 0, 130, 0, 126, 47, 0, 126, 127, + 0, 126, 129, 0, 0, 15, 128, 110, 54, 0, + 95, 47, 0, 93, 0, 0 }; #endif @@ -243,23 +245,24 @@ static const short yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { - 0, 149, 151, 154, 156, 157, 168, 174, 175, 178, - 180, 186, 188, 194, 199, 199, 206, 208, 214, 219, - 225, 241, 243, 246, 246, 259, 276, 278, 281, 288, - 296, 298, 299, 307, 313, 314, 319, 326, 326, 339, - 356, 358, 361, 368, 376, 378, 379, 387, 389, 390, - 394, 400, 400, 413, 415, 418, 420, 423, 428, 428, - 452, 452, 463, 467, 469, 472, 477, 485, 496, 510, - 524, 553, 559, 567, 572, 579, 586, 595, 601, 607, - 617, 622, 629, 636, 642, 650, 652, 658, 664, 678, - 684, 694, 697, 708, 712, 716, 721, 725, 728, 738, - 742, 747, 751, 755, 759, 763, 763, 771, 771, 779, - 779, 787, 793, 799, 805, 813, 815, 818, 820, 823, - 825, 828, 833, 837, 841, 845, 849, 853, 857, 861, - 865, 869, 873, 877, 881, 885, 889, 893, 897, 901, - 905, 911, 916, 920, 924, 928, 932, 936, 940, 944, - 948, 954, 954, 965, 981, 988, 1001, 1006, 1009, 1009, - 1023, 1025, 1026, 1027, 1037, 1037, 1054, 1059, 1065 + 0, 152, 154, 157, 159, 160, 171, 177, 178, 181, + 183, 189, 191, 197, 202, 202, 209, 211, 217, 222, + 228, 244, 246, 249, 249, 262, 279, 281, 284, 291, + 299, 301, 302, 310, 316, 317, 322, 329, 329, 342, + 359, 361, 364, 371, 379, 381, 382, 390, 392, 393, + 397, 403, 403, 416, 418, 421, 423, 426, 433, 433, + 444, 448, 450, 450, 473, 475, 475, 498, 500, 503, + 505, 508, 513, 521, 532, 546, 560, 589, 595, 603, + 608, 615, 622, 631, 637, 643, 653, 658, 665, 672, + 678, 686, 688, 694, 700, 714, 720, 730, 733, 744, + 748, 752, 757, 761, 764, 774, 778, 783, 787, 791, + 795, 799, 799, 807, 807, 815, 815, 823, 829, 835, + 841, 849, 851, 854, 856, 859, 861, 864, 869, 873, + 877, 881, 885, 889, 893, 897, 901, 905, 909, 913, + 917, 921, 925, 929, 933, 937, 941, 947, 952, 956, + 960, 964, 968, 972, 976, 980, 984, 990, 990, 1001, + 1017, 1024, 1037, 1042, 1045, 1045, 1059, 1061, 1062, 1063, + 1073, 1073, 1090, 1095, 1101 }; #endif @@ -287,14 +290,16 @@ static const char *const yytname[] = "dclass_field", "struct", "@3", "struct_name", "struct_derivation", "struct_base_list", "struct_fields", "struct_field", "atomic_field", "@4", "parameter_list", "nonempty_parameter_list", "atomic_element", - "@5", "named_parameter", "@6", "unnamed_parameter", "parameter", - "type_name", "double_range", "uint_range", "type_definition", - "parameter_definition", "char_or_uint", "small_unsigned_integer", - "signed_integer", "unsigned_integer", "number", "char_or_number", - "parameter_value", "@7", "@8", "@9", "array", "maybe_comma", - "array_def", "type_token", "server_flags", "molecular_field", "@10", - "atomic_name", "molecular_atom_list", "optional_name", "switch", "@11", - "switch_fields", "switch_case", "@12", "switch_field", "empty", 0 + "named_parameter", "@5", "unnamed_parameter", + "named_parameter_with_default", "@6", "unnamed_parameter_with_default", + "@7", "parameter", "parameter_with_default", "type_name", + "double_range", "uint_range", "type_definition", "parameter_definition", + "char_or_uint", "small_unsigned_integer", "signed_integer", + "unsigned_integer", "number", "char_or_number", "parameter_value", "@8", + "@9", "@10", "array", "maybe_comma", "array_def", "type_token", + "server_flags", "molecular_field", "@11", "atomic_name", + "molecular_atom_list", "optional_name", "switch", "@12", + "switch_fields", "switch_case", "@13", "switch_field", "empty", 0 }; #endif @@ -306,18 +311,19 @@ static const short yyr1[] = 69, 70, 70, 72, 71, 73, 74, 74, 75, 75, 76, 76, 76, 77, 77, 77, 77, 79, 78, 80, 81, 81, 82, 82, 83, 83, 83, 84, 84, 84, - 84, 86, 85, 87, 87, 88, 88, 89, 90, 89, - 92, 91, 93, 94, 94, 95, 95, 95, 95, 95, - 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, - 97, 97, 97, 97, 97, 98, 98, 99, 99, 99, - 100, 100, 101, 102, 103, 104, 104, 104, 105, 105, - 106, 106, 106, 106, 106, 107, 106, 108, 106, 109, - 106, 106, 106, 106, 106, 110, 110, 111, 111, 112, - 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 116, 115, 117, 118, 118, 119, 119, 121, 120, - 122, 122, 122, 122, 124, 123, 125, 125, 126 + 84, 86, 85, 87, 87, 88, 88, 89, 91, 90, + 92, 93, 94, 93, 95, 96, 95, 97, 97, 98, + 98, 99, 99, 99, 99, 99, 99, 99, 99, 100, + 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, + 101, 102, 102, 103, 103, 103, 104, 104, 105, 106, + 107, 108, 108, 108, 109, 109, 110, 110, 110, 110, + 110, 111, 110, 112, 110, 113, 110, 110, 110, 110, + 110, 114, 114, 115, 115, 116, 116, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 120, 119, 121, + 122, 122, 123, 123, 125, 124, 126, 126, 126, 126, + 128, 127, 129, 129, 130 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -328,18 +334,19 @@ static const short yyr2[] = 2, 1, 1, 0, 7, 1, 1, 2, 1, 3, 1, 2, 2, 2, 1, 3, 2, 0, 7, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, - 1, 0, 5, 1, 1, 1, 3, 1, 0, 4, - 0, 3, 1, 1, 1, 1, 4, 3, 6, 6, - 1, 1, 1, 1, 1, 3, 2, 3, 5, 4, - 1, 1, 3, 3, 5, 1, 4, 1, 3, 4, + 1, 0, 5, 1, 1, 1, 3, 1, 0, 3, + 1, 1, 0, 4, 1, 0, 4, 1, 1, 1, + 1, 1, 4, 3, 6, 6, 1, 1, 1, 1, + 1, 3, 2, 3, 5, 4, 1, 1, 3, 3, + 5, 1, 4, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 3, 3, 3, 3, 1, 2, 1, 1, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 4, 3, 3, 3, + 3, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 4, 1, 1, 3, 1, 1, 0, 9, - 1, 2, 2, 2, 0, 4, 2, 1, 0 + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 4, 1, + 1, 3, 1, 1, 0, 9, 1, 2, 2, 2, + 0, 4, 2, 1, 0 }; /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE @@ -347,156 +354,160 @@ static const short yyr2[] = error. */ static const short yydefact[] = { - 0, 168, 0, 1, 3, 94, 93, 102, 103, 104, - 105, 109, 107, 100, 101, 2, 168, 168, 0, 0, - 0, 168, 4, 7, 8, 5, 21, 22, 6, 0, - 0, 168, 168, 168, 0, 0, 157, 23, 156, 37, - 9, 11, 0, 13, 70, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 71, 63, 64, 20, 85, - 62, 65, 72, 0, 92, 113, 114, 118, 119, 0, - 115, 168, 117, 0, 0, 111, 112, 168, 168, 0, - 14, 0, 168, 0, 0, 168, 0, 106, 118, 116, - 110, 108, 0, 0, 26, 0, 0, 40, 10, 0, - 12, 90, 0, 81, 91, 80, 87, 61, 67, 97, - 98, 0, 96, 95, 99, 74, 73, 0, 120, 25, - 28, 27, 168, 39, 42, 41, 168, 17, 18, 15, - 16, 0, 86, 0, 0, 168, 168, 0, 66, 0, - 76, 0, 0, 0, 30, 0, 0, 44, 0, 83, - 82, 88, 0, 0, 77, 0, 75, 158, 29, 70, - 31, 24, 32, 168, 168, 168, 34, 43, 45, 38, - 46, 47, 50, 0, 48, 19, 0, 89, 68, 0, - 79, 69, 168, 151, 51, 33, 141, 36, 0, 49, - 84, 78, 0, 160, 0, 168, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 35, 164, 161, 159, 167, - 0, 162, 163, 153, 154, 152, 0, 54, 55, 57, - 53, 0, 166, 0, 52, 0, 58, 0, 155, 56, - 0, 165, 59, 0, 0, 0 + 0, 174, 0, 1, 3, 100, 99, 108, 109, 110, + 111, 115, 113, 106, 107, 2, 174, 174, 0, 0, + 0, 174, 4, 7, 8, 5, 21, 22, 6, 0, + 0, 174, 174, 174, 0, 0, 163, 23, 162, 37, + 9, 11, 0, 13, 76, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 77, 61, 64, 69, 70, + 20, 91, 60, 71, 78, 0, 98, 119, 120, 124, + 125, 0, 121, 174, 123, 0, 0, 117, 118, 174, + 174, 0, 14, 0, 62, 65, 174, 0, 0, 174, + 0, 112, 124, 122, 116, 114, 0, 0, 26, 0, + 0, 40, 10, 0, 12, 0, 0, 96, 0, 87, + 97, 86, 93, 59, 73, 103, 104, 0, 102, 101, + 105, 80, 79, 67, 68, 0, 126, 25, 28, 27, + 174, 39, 42, 41, 174, 17, 18, 15, 16, 63, + 66, 0, 92, 0, 0, 174, 174, 0, 72, 0, + 82, 0, 0, 0, 30, 0, 0, 44, 0, 89, + 88, 94, 0, 0, 83, 0, 81, 164, 29, 76, + 31, 24, 32, 174, 174, 174, 34, 43, 45, 38, + 46, 47, 50, 0, 48, 19, 0, 95, 74, 0, + 85, 75, 174, 157, 51, 33, 147, 36, 0, 49, + 90, 84, 0, 166, 0, 174, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 35, 170, 167, 165, 173, + 0, 168, 169, 159, 160, 158, 0, 54, 55, 57, + 53, 0, 172, 0, 52, 0, 0, 161, 56, 171, + 0, 0, 0 }; static const short yydefgoto[] = { - 243, 3, 41, 42, 23, 109, 139, 140, 24, 25, - 26, 87, 130, 103, 131, 153, 172, 65, 88, 134, - 106, 135, 156, 180, 173, 205, 226, 227, 228, 240, - 66, 93, 67, 229, 69, 121, 112, 70, 117, 113, - 114, 13, 14, 124, 125, 78, 31, 33, 32, 79, - 80, 81, 71, 195, 176, 204, 224, 225, 37, 72, - 192, 202, 221, 231, 222, 82 + 250, 3, 41, 42, 23, 113, 147, 148, 24, 25, + 26, 89, 138, 107, 139, 163, 182, 65, 90, 142, + 110, 143, 166, 190, 183, 215, 236, 237, 238, 66, + 97, 67, 68, 115, 69, 116, 135, 239, 71, 127, + 118, 72, 123, 119, 120, 13, 14, 130, 131, 80, + 31, 33, 32, 81, 82, 83, 73, 205, 186, 214, + 234, 235, 37, 74, 202, 212, 231, 241, 232, 84 }; static const short yypact[] = { - 7,-32768, 38, 95,-32768,-32768,-32768, -44,-32768, -12, - -32768,-32768,-32768, 4, 32,-32768, 86, 86, 106, 106, - 269, 86,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 127, - 127, 20, 20, 20, 127, 127,-32768,-32768,-32768,-32768, - -32768, 85, 21, 88,-32768,-32768,-32768,-32768,-32768,-32768, + -23,-32768, 39, 46,-32768,-32768,-32768, -26,-32768, 2, + -32768,-32768,-32768, 4, 22,-32768, 77, 77, 89, 89, + 276, 77,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 84, + 84, 23, 23, 23, 84, 84,-32768,-32768,-32768,-32768, + -32768, 60, 27, 63,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768, 82, 85,-32768,-32768, + -32768,-32768, 11, 40,-32768, 88,-32768,-32768,-32768,-32768, + -32768, 93,-32768, 90,-32768, 91, 94,-32768,-32768, 95, + 96, 137,-32768, 89,-32768,-32768, 99, 144, 84, 176, + 276,-32768, 39,-32768,-32768,-32768, 178, 135,-32768, 180, + 139,-32768,-32768, 42, 60, 39, 39,-32768, -13, 131, + -32768,-32768,-32768, -8, 138,-32768,-32768, -3,-32768,-32768, + -32768, 7,-32768,-32768,-32768, 136,-32768,-32768,-32768, 146, + -32768,-32768,-32768, 147,-32768,-32768, 60,-32768, 148,-32768, + -32768, 99,-32768, 99, 84, 99, 176, 176, 152, 176, + -32768, 142, 178, 200,-32768, 180, 238,-32768, 89, 145, + -32768,-32768, 26, 50, 10, 84,-32768,-32768,-32768, 56, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 6, 28,-32768, 76,-32768,-32768,-32768,-32768,-32768, 81, - -32768, 84,-32768, 113, 79,-32768,-32768, 90, 116, 132, - -32768, 106, 107, 163, 127, 96, 269,-32768, 38,-32768, - -32768,-32768, 164, 124,-32768, 169, 126,-32768,-32768, 12, - 85,-32768, -3, 121,-32768,-32768,-32768, -8, 128,-32768, - -32768, 18,-32768,-32768,-32768, 8,-32768, 125,-32768,-32768, - -32768, 131,-32768,-32768,-32768, 134,-32768,-32768, 85,-32768, - 136, 107,-32768, 107, 127, 107, 96, 96, 140, 96, - -32768, 137, 164, 190,-32768, 169, 231,-32768, 106, 135, - -32768,-32768, -1, 35, 26, 127,-32768,-32768,-32768, 57, + -32768,-32768,-32768, 154,-32768, 60, 99,-32768,-32768, 176, + -32768,-32768,-32768,-32768,-32768, 92,-32768, 92, 79,-32768, + -32768,-32768, 143,-32768, 187, 276,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, 143,-32768, 85, 107,-32768,-32768, 96, - -32768,-32768,-32768,-32768,-32768, 232,-32768, 232, 82,-32768, - -32768,-32768, 133,-32768, 176, 269,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 144,-32768,-32768,-32768,-32768, 145, 138, 146,-32768, 142, - -32768, 38,-32768, 176,-32768, 269,-32768, 141,-32768,-32768, - 38,-32768,-32768, 201, 202,-32768 + 157,-32768,-32768,-32768,-32768, 155, 149, 156,-32768,-32768, + -32768, 39,-32768, 187,-32768, 276, 158,-32768,-32768,-32768, + 209, 211,-32768 }; static const short yypgoto[] = { - -32768,-32768, -81, 184,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768, 74,-32768,-32768,-32768,-32768, 224,-32768, 73, - -32768,-32768,-32768,-32768, 75,-32768,-32768,-32768, -5,-32768, - -138,-32768, -134, -15,-32768, 87, 89,-32768,-32768, -106, - -27, -91, -86, -79, -100, -2,-32768,-32768,-32768, 83, - 151,-32768,-32768, -47, 80,-32768, 2,-32768, 15, 237, - -32768,-32768,-32768,-32768,-32768, 0 + -32768,-32768, -88, 194,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768, 74,-32768,-32768,-32768,-32768, 234,-32768, 73, + -32768,-32768,-32768,-32768, 75,-32768,-32768,-32768, -5, 150, + -32768, 151, -131,-32768, -129,-32768,-32768, 222,-32768, 87, + 119,-32768,-32768, -133, -27, -95, -90, -125, -126, -2, + -32768,-32768,-32768, 105, 161,-32768,-32768, -60, 83,-32768, + 32,-32768, 86, 242,-32768,-32768,-32768,-32768,-32768, 0 }; -#define YYLAST 304 +#define YYLAST 311 static const short yytable[] = { - 15, 4, 75, 76, 122, 68, 29, 85, 86, 123, - 110, 5, 6, 119, -60, 174, 38, 38, 182, 175, - 40, 38, 183, 5, 6, 7, 8, 9, 138, 5, - 6, 119, 39, 90, 122, 159, 73, 160, 30, 123, - 144, 5, 6, 7, 8, 9, 150, 164, 141, 166, - 141, 145, 1, 2, 34, 122, 122, 142, 122, 187, - 123, 123, 137, 123, 219, 92, 149, 118, 220, 147, - 91, 77, 10, 122, 148, 11, 94, 185, 123, 12, - 200, 127, 35, 95, 189, 190, 147, 104, 107, 201, - 10, 188, 115, 11, 36, 126, 128, 12, 122, 5, - 6, 119, 120, 123, 16, 17, 18, 19, 20, 21, - 74, 193, 194, 111, 40, 83, 84, 161, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 197, 198, 215, - 74, 96, 154, 89, 97, 98, 157, 91, 191, 101, - 108, 44, 22, 17, 102, 115, 126, 21, 216, 45, + 15, 4, 77, 78, 128, 114, 160, 87, 88, 129, + 5, 6, 125, 5, 6, 125, 38, 38, 169, -58, + 170, 38, 1, 2, 29, 146, 5, 6, 7, 8, + 9, 174, 184, 176, 185, 192, 128, 193, 151, 92, + 154, 129, 5, 6, 7, 8, 9, 152, 157, 200, + 40, 155, 30, 158, 34, 16, 17, 18, 19, 20, + 21, 128, 128, 210, 128, 159, 129, 129, 199, 129, + 96, 124, 35, 211, 79, 10, 93, 151, 11, 128, + 195, 229, 12, 230, 129, 36, 197, 76, 98, 108, + 111, 10, 145, 22, 11, 99, 121, 40, 12, 132, + 136, 157, 76, 39, 128, 117, 198, 75, 91, 129, + 203, 204, 93, 149, 150, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 207, 208, 225, 171, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 85, 86, 94, + 164, 102, 95, 100, 167, 112, 101, 104, 201, 106, + 109, 44, 122, 17, 105, 121, 132, 21, 226, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 100, - 105, 116, 129, 196, 196, 196, 132, 133, 136, 143, - 217, 151, 152, 146, 223, 155, 218, 158, 165, 167, - 199, 232, 203, 186, 234, 241, 233, 235, 169, 236, - 17, 244, 245, 43, 21, 230, 45, 46, 47, 48, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 5, + 6, 125, 126, 206, 206, 206, 137, 140, 141, 153, + 227, 144, 161, 156, 177, 233, 228, 162, 165, 168, + 175, 209, 213, 196, 242, 244, 243, 245, 179, 251, + 17, 252, 249, 43, 21, 240, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 168, 27, 177, 237, - 239, 181, 99, 163, 162, 238, 184, 170, 242, 169, - 28, 17, 0, 171, 0, 21, 0, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 0, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 44, 178, 17, - 0, 0, 0, 21, 179, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64 + 59, 60, 61, 62, 63, 64, 178, 27, 187, 246, + 248, 191, 70, 173, 103, 28, 179, 180, 17, 194, + 133, 134, 21, 181, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 172, 247, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 188, 17, 0, 0, 0, + 21, 189, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64 }; static const short yycheck[] = { - 2, 1, 29, 30, 95, 20, 50, 34, 35, 95, - 91, 3, 4, 5, 8, 153, 16, 17, 156, 153, - 8, 21, 156, 3, 4, 5, 6, 7, 109, 3, - 4, 5, 17, 12, 125, 141, 21, 143, 50, 125, - 48, 3, 4, 5, 6, 7, 125, 147, 51, 149, - 51, 59, 45, 46, 50, 146, 147, 60, 149, 60, - 146, 147, 50, 149, 202, 59, 58, 94, 202, 51, - 49, 51, 52, 164, 56, 55, 48, 158, 164, 59, - 186, 96, 50, 55, 58, 164, 51, 87, 88, 189, - 52, 56, 92, 55, 8, 95, 98, 59, 189, 3, - 4, 5, 6, 189, 9, 10, 11, 12, 13, 14, - 3, 54, 55, 6, 8, 32, 33, 144, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 174, 175, 47, - 3, 55, 132, 48, 53, 51, 136, 49, 165, 60, - 8, 8, 47, 10, 54, 145, 146, 14, 15, 16, + 2, 1, 29, 30, 99, 93, 131, 34, 35, 99, + 3, 4, 5, 3, 4, 5, 16, 17, 151, 8, + 153, 21, 45, 46, 50, 113, 3, 4, 5, 6, + 7, 157, 163, 159, 163, 166, 131, 166, 51, 12, + 48, 131, 3, 4, 5, 6, 7, 60, 51, 174, + 8, 59, 50, 56, 50, 9, 10, 11, 12, 13, + 14, 156, 157, 196, 159, 58, 156, 157, 58, 159, + 59, 98, 50, 199, 51, 52, 49, 51, 55, 174, + 168, 212, 59, 212, 174, 8, 60, 3, 48, 89, + 90, 52, 50, 47, 55, 55, 96, 8, 59, 99, + 102, 51, 3, 17, 199, 6, 56, 21, 48, 199, + 54, 55, 49, 115, 116, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 184, 185, 47, 154, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 32, 33, 57, + 140, 51, 57, 55, 144, 8, 53, 56, 175, 54, + 54, 8, 8, 10, 60, 155, 156, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 56, - 54, 8, 8, 173, 174, 175, 52, 8, 52, 58, - 47, 56, 51, 55, 8, 51, 53, 51, 48, 52, - 47, 47, 192, 58, 56, 54, 51, 51, 8, 57, - 10, 0, 0, 19, 14, 205, 16, 17, 18, 19, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 3, + 4, 5, 6, 183, 184, 185, 8, 52, 8, 58, + 47, 52, 56, 55, 52, 8, 53, 51, 51, 51, + 48, 47, 202, 58, 47, 56, 51, 51, 8, 0, + 10, 0, 54, 19, 14, 215, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 152, 3, 155, 231, - 235, 156, 81, 146, 145, 233, 156, 47, 240, 8, - 3, 10, -1, 53, -1, 14, -1, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, -1, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 8, 47, 10, - -1, -1, -1, 14, 53, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35 + 30, 31, 32, 33, 34, 35, 162, 3, 165, 241, + 245, 166, 20, 156, 83, 3, 8, 47, 10, 166, + 100, 100, 14, 53, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 155, 243, -1, -1, -1, -1, + -1, -1, -1, -1, 8, 47, 10, -1, -1, -1, + 14, 53, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison/bison.simple" @@ -1206,7 +1217,7 @@ yyreduce: switch (yyn) { case 5: -#line 158 "dcParser.yxx" +#line 161 "dcParser.yxx" { if (!dc_file->add_class(yyvsp[0].u.dclass)) { DCClass *old_class = dc_file->get_class_by_name(yyvsp[0].u.dclass->get_name()); @@ -1219,7 +1230,7 @@ case 5: } break; case 6: -#line 169 "dcParser.yxx" +#line 172 "dcParser.yxx" { if (!dc_file->add_switch(yyvsp[0].u.dswitch)) { yyerror("Duplicate class name: " + yyvsp[0].u.dswitch->get_name()); @@ -1227,49 +1238,49 @@ case 6: } break; case 10: -#line 181 "dcParser.yxx" +#line 184 "dcParser.yxx" { yyval.str = yyvsp[-2].str + string("/") + yyvsp[0].str; } break; case 12: -#line 189 "dcParser.yxx" +#line 192 "dcParser.yxx" { yyval.str = yyvsp[-2].str + string(".") + yyvsp[0].str; } break; case 13: -#line 196 "dcParser.yxx" +#line 199 "dcParser.yxx" { dc_file->add_import_module(yyvsp[0].str); } break; case 14: -#line 200 "dcParser.yxx" +#line 203 "dcParser.yxx" { dc_file->add_import_module(yyvsp[-1].str); } break; case 17: -#line 209 "dcParser.yxx" +#line 212 "dcParser.yxx" { dc_file->add_import_symbol("*"); } break; case 18: -#line 216 "dcParser.yxx" +#line 219 "dcParser.yxx" { dc_file->add_import_symbol(yyvsp[0].str); } break; case 19: -#line 220 "dcParser.yxx" +#line 223 "dcParser.yxx" { dc_file->add_import_symbol(yyvsp[0].str); } break; case 20: -#line 227 "dcParser.yxx" +#line 230 "dcParser.yxx" { DCTypedef *dtypedef = new DCTypedef(yyvsp[0].u.parameter); @@ -1284,21 +1295,21 @@ case 20: } break; case 23: -#line 248 "dcParser.yxx" +#line 251 "dcParser.yxx" { yyval.u.dclass = current_class; current_class = new DCClass(yyvsp[0].str, false, false); } break; case 24: -#line 253 "dcParser.yxx" +#line 256 "dcParser.yxx" { yyval.u.dclass = current_class; current_class = yyvsp[-4].u.dclass; } break; case 25: -#line 261 "dcParser.yxx" +#line 264 "dcParser.yxx" { DCClass *dclass = dc_file->get_class_by_name(yyvsp[0].str); if (dclass == (DCClass *)NULL) { @@ -1314,7 +1325,7 @@ case 25: } break; case 28: -#line 283 "dcParser.yxx" +#line 286 "dcParser.yxx" { if (yyvsp[0].u.dclass != (DCClass *)NULL) { current_class->add_parent(yyvsp[0].u.dclass); @@ -1322,7 +1333,7 @@ case 28: } break; case 29: -#line 289 "dcParser.yxx" +#line 292 "dcParser.yxx" { if (yyvsp[0].u.dclass != (DCClass *)NULL) { current_class->add_parent(yyvsp[0].u.dclass); @@ -1330,7 +1341,7 @@ case 29: } break; case 32: -#line 300 "dcParser.yxx" +#line 303 "dcParser.yxx" { if (!current_class->add_field(yyvsp[0].u.field)) { yyerror("Duplicate field name: " + yyvsp[0].u.field->get_name()); @@ -1338,42 +1349,42 @@ case 32: } break; case 33: -#line 309 "dcParser.yxx" +#line 312 "dcParser.yxx" { yyval.u.field = yyvsp[-1].u.field; yyval.u.field->set_flags(yyvsp[0].u.s_int); } break; case 35: -#line 315 "dcParser.yxx" +#line 318 "dcParser.yxx" { yyval.u.field = yyvsp[-2].u.parameter; yyval.u.field->set_flags(yyvsp[-1].u.s_int); } break; case 36: -#line 320 "dcParser.yxx" +#line 323 "dcParser.yxx" { yyval.u.field = yyvsp[-1].u.parameter; yyval.u.field->set_flags(yyvsp[0].u.s_int); } break; case 37: -#line 328 "dcParser.yxx" +#line 331 "dcParser.yxx" { yyval.u.dclass = current_class; current_class = new DCClass(yyvsp[0].str, true, false); } break; case 38: -#line 333 "dcParser.yxx" +#line 336 "dcParser.yxx" { yyval.u.dclass = current_class; current_class = yyvsp[-4].u.dclass; } break; case 39: -#line 341 "dcParser.yxx" +#line 344 "dcParser.yxx" { DCClass *dstruct = dc_file->get_class_by_name(yyvsp[0].str); if (dstruct == (DCClass *)NULL) { @@ -1389,7 +1400,7 @@ case 39: } break; case 42: -#line 363 "dcParser.yxx" +#line 366 "dcParser.yxx" { if (yyvsp[0].u.dclass != (DCClass *)NULL) { current_class->add_parent(yyvsp[0].u.dclass); @@ -1397,7 +1408,7 @@ case 42: } break; case 43: -#line 369 "dcParser.yxx" +#line 372 "dcParser.yxx" { if (yyvsp[0].u.dclass != (DCClass *)NULL) { current_class->add_parent(yyvsp[0].u.dclass); @@ -1405,7 +1416,7 @@ case 43: } break; case 46: -#line 380 "dcParser.yxx" +#line 383 "dcParser.yxx" { if (!current_class->add_field(yyvsp[0].u.field)) { yyerror("Duplicate field name: " + yyvsp[0].u.field->get_name()); @@ -1413,47 +1424,59 @@ case 46: } break; case 49: -#line 391 "dcParser.yxx" +#line 394 "dcParser.yxx" { yyval.u.field = yyvsp[-1].u.parameter; } break; case 50: -#line 395 "dcParser.yxx" +#line 398 "dcParser.yxx" { yyval.u.field = yyvsp[0].u.parameter; } break; case 51: -#line 402 "dcParser.yxx" +#line 405 "dcParser.yxx" { yyval.u.field = current_atomic; current_atomic = new DCAtomicField(yyvsp[-1].str); } break; case 52: -#line 407 "dcParser.yxx" +#line 410 "dcParser.yxx" { yyval.u.field = current_atomic; current_atomic = yyvsp[-2].u.atomic; } break; case 57: -#line 425 "dcParser.yxx" +#line 428 "dcParser.yxx" { current_atomic->add_element(yyvsp[0].u.parameter); } break; case 58: -#line 429 "dcParser.yxx" +#line 435 "dcParser.yxx" +{ + current_parameter = yyvsp[0].u.parameter; +} + break; +case 59: +#line 439 "dcParser.yxx" +{ + yyval.u.parameter = yyvsp[0].u.parameter; +} + break; +case 62: +#line 451 "dcParser.yxx" { current_packer = &default_packer; current_packer->clear_data(); current_packer->begin_pack(yyvsp[-1].u.parameter); } break; -case 59: -#line 435 "dcParser.yxx" +case 63: +#line 457 "dcParser.yxx" { bool is_valid = yyvsp[-3].u.parameter->is_valid(); if (current_packer->end_pack()) { @@ -1467,29 +1490,41 @@ case 59: // error (there's no way for us to validate the syntax). So we'll // just ignore the default value in this case. } - current_atomic->add_element(yyvsp[-3].u.parameter); -} - break; -case 60: -#line 454 "dcParser.yxx" -{ - current_parameter = yyvsp[0].u.parameter; -} - break; -case 61: -#line 458 "dcParser.yxx" -{ - yyval.u.parameter = yyvsp[0].u.parameter; } break; case 65: -#line 474 "dcParser.yxx" +#line 476 "dcParser.yxx" +{ + current_packer = &default_packer; + current_packer->clear_data(); + current_packer->begin_pack(yyvsp[-1].u.parameter); +} + break; +case 66: +#line 482 "dcParser.yxx" +{ + bool is_valid = yyvsp[-3].u.parameter->is_valid(); + if (current_packer->end_pack()) { + yyvsp[-3].u.parameter->set_default_value(current_packer->get_string()); + + } else { + if (is_valid) { + yyerror("Invalid default value for type"); + } + // If the current parameter isn't valid, we don't mind a pack + // error (there's no way for us to validate the syntax). So we'll + // just ignore the default value in this case. + } +} + break; +case 71: +#line 510 "dcParser.yxx" { yyval.u.parameter = new DCSimpleParameter(yyvsp[0].u.subatomic); } break; -case 66: -#line 478 "dcParser.yxx" +case 72: +#line 514 "dcParser.yxx" { DCSimpleParameter *simple_param = new DCSimpleParameter(yyvsp[-3].u.subatomic); if (!simple_param->set_range(double_range)) { @@ -1498,8 +1533,8 @@ case 66: yyval.u.parameter = simple_param; } break; -case 67: -#line 486 "dcParser.yxx" +case 73: +#line 522 "dcParser.yxx" { DCSimpleParameter *simple_param = new DCSimpleParameter(yyvsp[-2].u.subatomic); if (yyvsp[0].u.s_uint == 0) { @@ -1511,8 +1546,8 @@ case 67: yyval.u.parameter = simple_param; } break; -case 68: -#line 497 "dcParser.yxx" +case 74: +#line 533 "dcParser.yxx" { DCSimpleParameter *simple_param = new DCSimpleParameter(yyvsp[-5].u.subatomic); if (yyvsp[-3].u.s_uint == 0) { @@ -1527,8 +1562,8 @@ case 68: yyval.u.parameter = simple_param; } break; -case 69: -#line 511 "dcParser.yxx" +case 75: +#line 547 "dcParser.yxx" { DCSimpleParameter *simple_param = new DCSimpleParameter(yyvsp[-5].u.subatomic); if (yyvsp[0].u.s_uint == 0) { @@ -1543,8 +1578,8 @@ case 69: yyval.u.parameter = simple_param; } break; -case 70: -#line 525 "dcParser.yxx" +case 76: +#line 561 "dcParser.yxx" { DCTypedef *dtypedef = dc_file->get_typedef_by_name(yyvsp[0].str); if (dtypedef == (DCTypedef *)NULL) { @@ -1574,100 +1609,100 @@ case 70: yyval.u.parameter = dtypedef->make_new_parameter(); } break; -case 71: -#line 554 "dcParser.yxx" +case 77: +#line 590 "dcParser.yxx" { // This is an inline struct definition. dc_file->add_thing_to_delete(yyvsp[0].u.dclass); yyval.u.parameter = new DCClassParameter(yyvsp[0].u.dclass); } break; -case 72: -#line 560 "dcParser.yxx" +case 78: +#line 596 "dcParser.yxx" { // This is an inline switch definition. dc_file->add_thing_to_delete(yyvsp[0].u.dswitch); yyval.u.parameter = new DCSwitchParameter(yyvsp[0].u.dswitch); } break; -case 73: -#line 569 "dcParser.yxx" -{ - double_range.clear(); -} - break; -case 74: -#line 573 "dcParser.yxx" -{ - double_range.clear(); - if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) { - yyerror("Overlapping range"); - } -} - break; -case 75: -#line 580 "dcParser.yxx" -{ - double_range.clear(); - if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) { - yyerror("Overlapping range"); - } -} - break; -case 76: -#line 587 "dcParser.yxx" -{ - double_range.clear(); - if (yyvsp[0].u.real >= 0) { - yyerror("Syntax error"); - } else if (!double_range.add_range(yyvsp[-1].u.real, -yyvsp[0].u.real)) { - yyerror("Overlapping range"); - } -} - break; -case 77: -#line 596 "dcParser.yxx" -{ - if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) { - yyerror("Overlapping range"); - } -} - break; -case 78: -#line 602 "dcParser.yxx" -{ - if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) { - yyerror("Overlapping range"); - } -} - break; case 79: -#line 608 "dcParser.yxx" +#line 605 "dcParser.yxx" { - if (yyvsp[0].u.real >= 0) { - yyerror("Syntax error"); - } else if (!double_range.add_range(yyvsp[-1].u.real, -yyvsp[0].u.real)) { - yyerror("Overlapping range"); - } + double_range.clear(); } break; case 80: -#line 619 "dcParser.yxx" +#line 609 "dcParser.yxx" { - uint_range.clear(); + double_range.clear(); + if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) { + yyerror("Overlapping range"); + } } break; case 81: -#line 623 "dcParser.yxx" +#line 616 "dcParser.yxx" { - uint_range.clear(); - if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) { + double_range.clear(); + if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) { yyerror("Overlapping range"); } } break; case 82: -#line 630 "dcParser.yxx" +#line 623 "dcParser.yxx" +{ + double_range.clear(); + if (yyvsp[0].u.real >= 0) { + yyerror("Syntax error"); + } else if (!double_range.add_range(yyvsp[-1].u.real, -yyvsp[0].u.real)) { + yyerror("Overlapping range"); + } +} + break; +case 83: +#line 632 "dcParser.yxx" +{ + if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) { + yyerror("Overlapping range"); + } +} + break; +case 84: +#line 638 "dcParser.yxx" +{ + if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) { + yyerror("Overlapping range"); + } +} + break; +case 85: +#line 644 "dcParser.yxx" +{ + if (yyvsp[0].u.real >= 0) { + yyerror("Syntax error"); + } else if (!double_range.add_range(yyvsp[-1].u.real, -yyvsp[0].u.real)) { + yyerror("Overlapping range"); + } +} + break; +case 86: +#line 655 "dcParser.yxx" +{ + uint_range.clear(); +} + break; +case 87: +#line 659 "dcParser.yxx" +{ + uint_range.clear(); + if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) { + yyerror("Overlapping range"); + } +} + break; +case 88: +#line 666 "dcParser.yxx" { uint_range.clear(); if (!uint_range.add_range(yyvsp[-2].u.s_uint, yyvsp[0].u.s_uint)) { @@ -1675,37 +1710,37 @@ case 82: } } break; -case 83: -#line 637 "dcParser.yxx" +case 89: +#line 673 "dcParser.yxx" { if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) { yyerror("Overlapping range"); } } break; -case 84: -#line 643 "dcParser.yxx" +case 90: +#line 679 "dcParser.yxx" { if (!uint_range.add_range(yyvsp[-2].u.s_uint, yyvsp[0].u.s_uint)) { yyerror("Overlapping range"); } } break; -case 86: -#line 653 "dcParser.yxx" +case 92: +#line 689 "dcParser.yxx" { yyval.u.parameter = new DCArrayParameter(yyvsp[-3].u.parameter, uint_range); } break; -case 87: -#line 660 "dcParser.yxx" +case 93: +#line 696 "dcParser.yxx" { current_parameter->set_name(yyvsp[0].str); yyval.u.parameter = current_parameter; } break; -case 88: -#line 665 "dcParser.yxx" +case 94: +#line 701 "dcParser.yxx" { if (yyvsp[0].u.s_uint == 0) { yyerror("Invalid divisor."); @@ -1720,14 +1755,14 @@ case 88: } } break; -case 89: -#line 679 "dcParser.yxx" +case 95: +#line 715 "dcParser.yxx" { yyval.u.parameter = new DCArrayParameter(yyvsp[-3].u.parameter, uint_range); } break; -case 90: -#line 686 "dcParser.yxx" +case 96: +#line 722 "dcParser.yxx" { if (yyvsp[0].str.length() != 1) { yyerror("Single character required."); @@ -1737,8 +1772,8 @@ case 90: } } break; -case 92: -#line 699 "dcParser.yxx" +case 98: +#line 735 "dcParser.yxx" { yyval.u.s_uint = (unsigned int)yyvsp[0].u.uint64; if (yyval.u.s_uint != yyvsp[0].u.uint64) { @@ -1747,20 +1782,20 @@ case 92: } } break; -case 95: -#line 718 "dcParser.yxx" +case 101: +#line 754 "dcParser.yxx" { yyval.u.real = (double)yyvsp[0].u.uint64; } break; -case 96: -#line 722 "dcParser.yxx" +case 102: +#line 758 "dcParser.yxx" { yyval.u.real = (double)yyvsp[0].u.int64; } break; -case 98: -#line 730 "dcParser.yxx" +case 104: +#line 766 "dcParser.yxx" { if (yyvsp[0].str.length() != 1) { yyerror("Single character required."); @@ -1770,298 +1805,298 @@ case 98: } } break; -case 100: -#line 744 "dcParser.yxx" +case 106: +#line 780 "dcParser.yxx" { current_packer->pack_int64(yyvsp[0].u.int64); } break; -case 101: -#line 748 "dcParser.yxx" +case 107: +#line 784 "dcParser.yxx" { current_packer->pack_uint64(yyvsp[0].u.uint64); } break; -case 102: -#line 752 "dcParser.yxx" +case 108: +#line 788 "dcParser.yxx" { current_packer->pack_double(yyvsp[0].u.real); } break; -case 103: -#line 756 "dcParser.yxx" +case 109: +#line 792 "dcParser.yxx" { current_packer->pack_string(yyvsp[0].str); } break; -case 104: -#line 760 "dcParser.yxx" +case 110: +#line 796 "dcParser.yxx" { current_packer->pack_literal_value(yyvsp[0].str); } break; -case 105: -#line 764 "dcParser.yxx" -{ - current_packer->push(); -} - break; -case 106: -#line 768 "dcParser.yxx" -{ - current_packer->pop(); -} - break; -case 107: -#line 772 "dcParser.yxx" -{ - current_packer->push(); -} - break; -case 108: -#line 776 "dcParser.yxx" -{ - current_packer->pop(); -} - break; -case 109: -#line 780 "dcParser.yxx" -{ - current_packer->push(); -} - break; -case 110: -#line 784 "dcParser.yxx" -{ - current_packer->pop(); -} - break; case 111: -#line 788 "dcParser.yxx" +#line 800 "dcParser.yxx" +{ + current_packer->push(); +} + break; +case 112: +#line 804 "dcParser.yxx" +{ + current_packer->pop(); +} + break; +case 113: +#line 808 "dcParser.yxx" +{ + current_packer->push(); +} + break; +case 114: +#line 812 "dcParser.yxx" +{ + current_packer->pop(); +} + break; +case 115: +#line 816 "dcParser.yxx" +{ + current_packer->push(); +} + break; +case 116: +#line 820 "dcParser.yxx" +{ + current_packer->pop(); +} + break; +case 117: +#line 824 "dcParser.yxx" { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { current_packer->pack_int64(yyvsp[-2].u.int64); } } break; -case 112: -#line 794 "dcParser.yxx" +case 118: +#line 830 "dcParser.yxx" { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { current_packer->pack_uint64(yyvsp[-2].u.uint64); } } break; -case 113: -#line 800 "dcParser.yxx" +case 119: +#line 836 "dcParser.yxx" { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { current_packer->pack_double(yyvsp[-2].u.real); } } break; -case 114: -#line 806 "dcParser.yxx" +case 120: +#line 842 "dcParser.yxx" { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { current_packer->pack_literal_value(yyvsp[-2].str); } } break; -case 121: -#line 830 "dcParser.yxx" +case 127: +#line 866 "dcParser.yxx" { yyval.u.subatomic = ST_int8; } break; -case 122: -#line 834 "dcParser.yxx" +case 128: +#line 870 "dcParser.yxx" { yyval.u.subatomic = ST_int16; } break; -case 123: -#line 838 "dcParser.yxx" +case 129: +#line 874 "dcParser.yxx" { yyval.u.subatomic = ST_int32; } break; -case 124: -#line 842 "dcParser.yxx" +case 130: +#line 878 "dcParser.yxx" { yyval.u.subatomic = ST_int64; } break; -case 125: -#line 846 "dcParser.yxx" +case 131: +#line 882 "dcParser.yxx" { yyval.u.subatomic = ST_uint8; } break; -case 126: -#line 850 "dcParser.yxx" +case 132: +#line 886 "dcParser.yxx" { yyval.u.subatomic = ST_uint16; } break; -case 127: -#line 854 "dcParser.yxx" +case 133: +#line 890 "dcParser.yxx" { yyval.u.subatomic = ST_uint32; } break; -case 128: -#line 858 "dcParser.yxx" +case 134: +#line 894 "dcParser.yxx" { yyval.u.subatomic = ST_uint64; } break; -case 129: -#line 862 "dcParser.yxx" +case 135: +#line 898 "dcParser.yxx" { yyval.u.subatomic = ST_float64; } break; -case 130: -#line 866 "dcParser.yxx" +case 136: +#line 902 "dcParser.yxx" { yyval.u.subatomic = ST_string; } break; -case 131: -#line 870 "dcParser.yxx" +case 137: +#line 906 "dcParser.yxx" { yyval.u.subatomic = ST_blob; } break; -case 132: -#line 874 "dcParser.yxx" +case 138: +#line 910 "dcParser.yxx" { yyval.u.subatomic = ST_blob32; } break; -case 133: -#line 878 "dcParser.yxx" +case 139: +#line 914 "dcParser.yxx" { yyval.u.subatomic = ST_int8array; } break; -case 134: -#line 882 "dcParser.yxx" +case 140: +#line 918 "dcParser.yxx" { yyval.u.subatomic = ST_int16array; } break; -case 135: -#line 886 "dcParser.yxx" +case 141: +#line 922 "dcParser.yxx" { yyval.u.subatomic = ST_int32array; } break; -case 136: -#line 890 "dcParser.yxx" +case 142: +#line 926 "dcParser.yxx" { yyval.u.subatomic = ST_uint8array; } break; -case 137: -#line 894 "dcParser.yxx" +case 143: +#line 930 "dcParser.yxx" { yyval.u.subatomic = ST_uint16array; } break; -case 138: -#line 898 "dcParser.yxx" +case 144: +#line 934 "dcParser.yxx" { yyval.u.subatomic = ST_uint32array; } break; -case 139: -#line 902 "dcParser.yxx" +case 145: +#line 938 "dcParser.yxx" { yyval.u.subatomic = ST_uint32uint8array; } break; -case 140: -#line 906 "dcParser.yxx" +case 146: +#line 942 "dcParser.yxx" { yyval.u.subatomic = ST_char; } break; -case 141: -#line 913 "dcParser.yxx" +case 147: +#line 949 "dcParser.yxx" { yyval.u.s_int = 0; } break; -case 142: -#line 917 "dcParser.yxx" +case 148: +#line 953 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_required; } break; -case 143: -#line 921 "dcParser.yxx" +case 149: +#line 957 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_broadcast; } break; -case 144: -#line 925 "dcParser.yxx" +case 150: +#line 961 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_p2p; } break; -case 145: -#line 929 "dcParser.yxx" +case 151: +#line 965 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_ram; } break; -case 146: -#line 933 "dcParser.yxx" +case 152: +#line 969 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_db; } break; -case 147: -#line 937 "dcParser.yxx" +case 153: +#line 973 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_clsend; } break; -case 148: -#line 941 "dcParser.yxx" +case 154: +#line 977 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_clrecv; } break; -case 149: -#line 945 "dcParser.yxx" +case 155: +#line 981 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_ownsend; } break; -case 150: -#line 949 "dcParser.yxx" +case 156: +#line 985 "dcParser.yxx" { yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_airecv; } break; -case 151: -#line 956 "dcParser.yxx" +case 157: +#line 992 "dcParser.yxx" { current_molecular = new DCMolecularField(yyvsp[-1].str); } break; -case 152: -#line 960 "dcParser.yxx" +case 158: +#line 996 "dcParser.yxx" { yyval.u.field = current_molecular; } break; -case 153: -#line 967 "dcParser.yxx" +case 159: +#line 1003 "dcParser.yxx" { DCField *field = current_class->get_field_by_name(yyvsp[0].str); yyval.u.atomic = (DCAtomicField *)NULL; @@ -2075,16 +2110,16 @@ case 153: } } break; -case 154: -#line 983 "dcParser.yxx" +case 160: +#line 1019 "dcParser.yxx" { if (yyvsp[0].u.atomic != (DCAtomicField *)NULL) { current_molecular->add_atomic(yyvsp[0].u.atomic); } } break; -case 155: -#line 989 "dcParser.yxx" +case 161: +#line 1025 "dcParser.yxx" { if (yyvsp[0].u.atomic != (DCAtomicField *)NULL) { current_molecular->add_atomic(yyvsp[0].u.atomic); @@ -2096,28 +2131,28 @@ case 155: } } break; -case 156: -#line 1003 "dcParser.yxx" +case 162: +#line 1039 "dcParser.yxx" { yyval.str = ""; } break; -case 158: -#line 1011 "dcParser.yxx" +case 164: +#line 1047 "dcParser.yxx" { yyval.u.dswitch = current_switch; current_switch = new DCSwitch(yyvsp[-4].str, yyvsp[-2].u.parameter); } break; -case 159: -#line 1016 "dcParser.yxx" +case 165: +#line 1052 "dcParser.yxx" { yyval.u.dswitch = current_switch; current_switch = (DCSwitch *)yyvsp[-2].u.parameter; } break; -case 163: -#line 1028 "dcParser.yxx" +case 169: +#line 1064 "dcParser.yxx" { if (current_switch->get_num_cases() == 0) { yyerror("case declaration required before first element"); @@ -2126,16 +2161,16 @@ case 163: } } break; -case 164: -#line 1039 "dcParser.yxx" +case 170: +#line 1075 "dcParser.yxx" { current_packer = &default_packer; current_packer->clear_data(); current_packer->begin_pack(current_switch->get_key_parameter()); } break; -case 165: -#line 1045 "dcParser.yxx" +case 171: +#line 1081 "dcParser.yxx" { if (!current_packer->end_pack()) { yyerror("Invalid value for switch parameter"); @@ -2144,14 +2179,14 @@ case 165: } } break; -case 166: -#line 1056 "dcParser.yxx" +case 172: +#line 1092 "dcParser.yxx" { yyval.u.field = yyvsp[-1].u.parameter; } break; -case 167: -#line 1060 "dcParser.yxx" +case 173: +#line 1096 "dcParser.yxx" { yyval.u.field = yyvsp[0].u.parameter; } @@ -2389,4 +2424,4 @@ yyreturn: #endif return yyresult; } -#line 1068 "dcParser.yxx" +#line 1104 "dcParser.yxx" diff --git a/direct/src/dcparser/dcParser.yxx b/direct/src/dcparser/dcParser.yxx index 67d8ef516f..e94443b189 100644 --- a/direct/src/dcparser/dcParser.yxx +++ b/direct/src/dcparser/dcParser.yxx @@ -132,7 +132,10 @@ dc_cleanup_parser() { %type type_definition %type named_parameter %type unnamed_parameter +%type named_parameter_with_default +%type unnamed_parameter_with_default %type parameter +%type parameter_with_default %type parameter_definition %type import_identifier %type slash_identifier @@ -223,7 +226,7 @@ import_symbol_list: ; typedef_decl: - KW_TYPEDEF parameter + KW_TYPEDEF parameter_with_default { DCTypedef *dtypedef = new DCTypedef($2); @@ -311,12 +314,12 @@ dclass_field: $$->set_flags($2); } | molecular_field - | unnamed_parameter server_flags ';' + | unnamed_parameter_with_default server_flags ';' { $$ = $1; $$->set_flags($2); } - | named_parameter server_flags + | named_parameter_with_default server_flags { $$ = $1; $$->set_flags($2); @@ -387,11 +390,11 @@ struct_fields: struct_field: atomic_field | molecular_field - | unnamed_parameter ';' + | unnamed_parameter_with_default ';' { $$ = $1; } - | named_parameter + | named_parameter_with_default { $$ = $1; } @@ -421,31 +424,9 @@ nonempty_parameter_list: ; atomic_element: - parameter + parameter_with_default { current_atomic->add_element($1); -} - | parameter '=' -{ - current_packer = &default_packer; - current_packer->clear_data(); - current_packer->begin_pack($1); -} - parameter_value -{ - bool is_valid = $1->is_valid(); - if (current_packer->end_pack()) { - $1->set_default_value(current_packer->get_string()); - - } else { - if (is_valid) { - yyerror("Invalid default value for type"); - } - // If the current parameter isn't valid, we don't mind a pack - // error (there's no way for us to validate the syntax). So we'll - // just ignore the default value in this case. - } - current_atomic->add_element($1); } ; @@ -464,11 +445,66 @@ unnamed_parameter: type_definition ; +named_parameter_with_default: + named_parameter + | named_parameter '=' +{ + current_packer = &default_packer; + current_packer->clear_data(); + current_packer->begin_pack($1); +} + parameter_value +{ + bool is_valid = $1->is_valid(); + if (current_packer->end_pack()) { + $1->set_default_value(current_packer->get_string()); + + } else { + if (is_valid) { + yyerror("Invalid default value for type"); + } + // If the current parameter isn't valid, we don't mind a pack + // error (there's no way for us to validate the syntax). So we'll + // just ignore the default value in this case. + } +} + ; + +unnamed_parameter_with_default: + unnamed_parameter + | unnamed_parameter '=' +{ + current_packer = &default_packer; + current_packer->clear_data(); + current_packer->begin_pack($1); +} + parameter_value +{ + bool is_valid = $1->is_valid(); + if (current_packer->end_pack()) { + $1->set_default_value(current_packer->get_string()); + + } else { + if (is_valid) { + yyerror("Invalid default value for type"); + } + // If the current parameter isn't valid, we don't mind a pack + // error (there's no way for us to validate the syntax). So we'll + // just ignore the default value in this case. + } +} + ; + parameter: named_parameter | unnamed_parameter ; +parameter_with_default: + named_parameter_with_default + | unnamed_parameter_with_default + ; + type_name: type_token { @@ -1052,11 +1088,11 @@ switch_case: ; switch_field: - unnamed_parameter ';' + unnamed_parameter_with_default ';' { $$ = $1; } - | named_parameter + | named_parameter_with_default { $$ = $1; }