Support template "using" definitions in interrogate

This commit is contained in:
rdb 2016-05-31 18:48:32 +02:00
parent b486de2700
commit 242cc5f57d
10 changed files with 252 additions and 181 deletions

View File

@ -885,11 +885,11 @@ static const yytype_uint16 yyrline[] =
{ {
0, 424, 424, 425, 429, 436, 437, 438, 442, 443, 0, 424, 424, 425, 429, 436, 437, 438, 442, 443,
447, 451, 464, 463, 475, 476, 477, 478, 479, 480, 447, 451, 464, 463, 475, 476, 477, 478, 479, 480,
481, 482, 495, 504, 508, 516, 520, 524, 535, 556, 481, 494, 503, 507, 515, 519, 523, 534, 555, 585,
586, 603, 631, 668, 690, 723, 745, 756, 770, 769, 602, 630, 667, 689, 722, 744, 755, 769, 768, 783,
784, 788, 792, 803, 807, 811, 815, 819, 823, 827, 787, 791, 802, 806, 810, 814, 818, 822, 826, 830,
831, 835, 839, 843, 847, 855, 856, 860, 861, 865, 834, 838, 842, 846, 854, 855, 859, 860, 864, 868,
869, 878, 886, 898, 897, 913, 912, 934, 942, 953, 877, 885, 893, 898, 897, 913, 912, 934, 942, 953,
962, 976, 975, 991, 990, 1005, 1020, 1026, 1035, 1042, 962, 976, 975, 991, 990, 1005, 1020, 1026, 1035, 1042,
1055, 1054, 1079, 1078, 1106, 1105, 1136, 1135, 1154, 1153, 1055, 1054, 1079, 1078, 1106, 1105, 1136, 1135, 1154, 1153,
1174, 1173, 1205, 1204, 1230, 1243, 1247, 1251, 1255, 1259, 1174, 1173, 1205, 1204, 1230, 1243, 1247, 1251, 1255, 1259,
@ -1071,8 +1071,8 @@ static const yytype_int16 yypact[] =
-703, -20, -703, -703, 1983, 2722, 2722, -703, 1244, -703, -703, -20, -703, -703, 1983, 2722, 2722, -703, 1244, -703,
2722, -703, -703, 62, -703, -703, -703, -703, 66, 48, 2722, -703, -703, 62, -703, -703, -703, -703, 66, 48,
959, -703, -703, -703, -703, -703, -703, 5378, 5378, -703, 959, -703, -703, -703, -703, -703, -703, 5378, 5378, -703,
5378, 892, 5378, 160, -703, 5286, 225, 227, 233, 251, 5378, 892, 5378, 160, -703, 5335, 225, 227, 233, 251,
5378, 2255, 191, 269, 272, 5378, 5378, 263, 5300, 5378, 5378, 2255, 191, 269, 272, 5378, 5378, 263, 5263, 5378,
5378, 2691, 5378, 5378, -703, 63, -703, -703, -703, 3269, 5378, 2691, 5378, 5378, -703, 63, -703, -703, -703, 3269,
-703, -703, -703, -703, -703, -703, 2822, 4474, 2822, 2822, -703, -703, -703, -703, -703, -703, 2822, 4474, 2822, 2822,
2822, 2822, 4474, 2822, 4474, 2822, 2822, 2822, -703, -703, 2822, 2822, 4474, 2822, 4474, 2822, 2822, 2822, -703, -703,
@ -1126,7 +1126,7 @@ static const yytype_int16 yypact[] =
552, 623, -21, 555, 556, 932, -703, -703, 623, 557, 552, 623, -21, 555, 556, 932, -703, -703, 623, 557,
557, 557, 557, 557, 265, 2822, 2822, -703, -703, 558, 557, 557, 557, 557, 265, 2822, 2822, -703, -703, 558,
-703, 2822, -703, 4125, 568, 574, -703, -703, -703, -23, -703, 2822, -703, 4125, 568, 574, -703, -703, -703, -23,
577, 579, 584, 5063, 41, -703, 582, 623, 587, 5322, 577, 579, 584, 5063, 41, -703, 582, 623, 587, 5309,
4236, 44, 529, -703, 308, -703, 5378, -703, -703, -703, 4236, 44, 529, -703, 308, -703, 5378, -703, -703, -703,
-703, -703, -703, -703, 601, 586, 611, -703, -703, 4682, -703, -703, -703, -703, 601, 586, 611, -703, -703, 4682,
-703, -703, 612, 605, 615, -703, 609, 2822, 2822, 2822, -703, -703, 612, 605, 615, -703, 609, 2822, 2822, 2822,
@ -1211,11 +1211,11 @@ static const yytype_uint16 yydefact[] =
593, 261, 269, 343, 344, 346, 347, 328, 0, 0, 593, 261, 269, 343, 344, 346, 347, 328, 0, 0,
358, 325, 357, 352, 349, 348, 351, 329, 0, 330, 358, 325, 357, 352, 349, 348, 351, 329, 0, 330,
350, 360, 345, 680, 4, 263, 264, 265, 0, 314, 350, 360, 345, 680, 4, 263, 264, 265, 0, 314,
0, 260, 340, 341, 342, 1, 21, 680, 680, 22, 0, 260, 340, 341, 342, 1, 20, 680, 680, 21,
680, 680, 680, 0, 38, 680, 0, 0, 0, 0, 680, 680, 680, 0, 37, 680, 0, 0, 0, 0,
680, 0, 0, 0, 0, 680, 680, 0, 680, 680, 680, 0, 0, 0, 0, 680, 680, 0, 680, 680,
680, 0, 680, 680, 6, 0, 16, 7, 19, 0, 680, 0, 680, 680, 6, 0, 16, 7, 18, 0,
14, 59, 15, 17, 18, 40, 680, 0, 680, 680, 14, 58, 15, 17, 62, 39, 680, 0, 680, 680,
680, 680, 0, 680, 0, 680, 680, 680, 282, 287, 680, 680, 0, 680, 0, 680, 680, 680, 282, 287,
0, 0, 553, 0, 0, 281, 0, 680, 680, 0, 0, 0, 553, 0, 0, 281, 0, 680, 680, 0,
0, 0, 680, 680, 562, 560, 559, 561, 558, 261, 0, 0, 680, 680, 562, 560, 559, 561, 558, 261,
@ -1228,10 +1228,10 @@ static const yytype_uint16 yydefact[] =
359, 349, 354, 353, 356, 262, 355, 0, 680, 680, 359, 349, 354, 353, 356, 262, 355, 0, 680, 680,
680, 680, 680, 680, 0, 290, 248, 680, 673, 674, 680, 680, 680, 680, 0, 290, 248, 680, 673, 674,
675, 0, 316, 664, 665, 667, 292, 266, 294, 680, 675, 0, 316, 664, 665, 667, 292, 266, 294, 680,
51, 50, 52, 680, 41, 46, 23, 680, 0, 44, 50, 49, 51, 680, 40, 45, 22, 680, 0, 43,
0, 0, 0, 0, 49, 680, 0, 26, 25, 24, 0, 0, 0, 0, 48, 680, 0, 25, 24, 23,
47, 43, 0, 0, 146, 0, 53, 0, 20, 0, 46, 42, 0, 0, 146, 0, 52, 0, 19, 0,
0, 45, 48, 0, 289, 271, 280, 0, 0, 0, 0, 44, 47, 0, 289, 271, 280, 0, 0, 0,
0, 12, 0, 0, 0, 288, 63, 273, 274, 275, 0, 12, 0, 0, 0, 288, 63, 273, 274, 275,
314, 0, 270, 0, 492, 491, 0, 0, 0, 0, 314, 0, 270, 0, 492, 491, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 283, 680, 0, 0, 0, 0, 0, 0, 0, 0, 283, 680,
@ -1242,12 +1242,12 @@ static const yytype_uint16 yydefact[] =
0, 291, 0, 680, 0, 680, 680, 680, 680, 680, 0, 291, 0, 680, 0, 680, 680, 680, 680, 680,
253, 240, 0, 249, 0, 250, 252, 251, 179, 680, 253, 240, 0, 249, 0, 250, 252, 251, 179, 680,
0, 0, 680, 680, 0, 180, 183, 680, 178, 680, 0, 0, 680, 680, 0, 180, 183, 680, 178, 680,
322, 0, 319, 318, 313, 317, 0, 680, 680, 42, 322, 0, 319, 318, 313, 317, 0, 680, 680, 41,
39, 680, 0, 0, 0, 0, 0, 680, 331, 0, 38, 680, 0, 0, 0, 0, 0, 680, 331, 0,
680, 289, 271, 0, 0, 288, 71, 0, 337, 0, 680, 289, 271, 0, 0, 288, 71, 0, 337, 0,
0, 55, 57, 80, 82, 289, 271, 65, 0, 0, 0, 54, 56, 80, 82, 289, 271, 65, 0, 0,
680, 272, 680, 0, 361, 196, 0, 0, 61, 361, 680, 272, 680, 0, 361, 196, 0, 0, 60, 361,
201, 0, 62, 60, 0, 278, 316, 276, 538, 552, 201, 0, 61, 59, 0, 278, 316, 276, 538, 552,
544, 540, 542, 543, 0, 550, 0, 549, 539, 546, 544, 540, 542, 543, 0, 550, 0, 549, 539, 546,
0, 0, 0, 545, 548, 551, 0, 555, 556, 547, 0, 0, 0, 545, 548, 551, 0, 555, 556, 547,
541, 533, 494, 96, 680, 680, 95, 656, 0, 583, 541, 533, 494, 96, 680, 680, 95, 656, 0, 583,
@ -1267,8 +1267,8 @@ static const yytype_uint16 yydefact[] =
0, 680, 680, 0, 0, 680, 181, 184, 680, 235, 0, 680, 680, 0, 0, 680, 181, 184, 680, 235,
231, 232, 234, 233, 0, 0, 680, 214, 194, 255, 231, 232, 234, 233, 0, 0, 680, 214, 194, 255,
320, 0, 293, 0, 0, 299, 298, 336, 680, 0, 320, 0, 293, 0, 0, 299, 298, 336, 680, 0,
0, 0, 0, 680, 0, 37, 151, 680, 153, 680, 0, 0, 0, 680, 0, 36, 151, 680, 153, 680,
0, 680, 0, 72, 680, 338, 680, 56, 647, 643, 0, 680, 0, 72, 680, 338, 680, 55, 647, 643,
646, 649, 650, 186, 0, 0, 0, 645, 651, 0, 646, 649, 650, 186, 0, 0, 0, 645, 651, 0,
653, 652, 0, 0, 0, 644, 0, 0, 0, 0, 653, 652, 0, 0, 0, 644, 0, 0, 0, 0,
0, 0, 0, 0, 187, 218, 190, 219, 601, 648, 0, 0, 0, 0, 187, 218, 190, 219, 601, 648,
@ -1286,9 +1286,9 @@ static const yytype_uint16 yydefact[] =
239, 195, 0, 324, 671, 0, 670, 0, 0, 300, 239, 195, 0, 324, 671, 0, 670, 0, 0, 300,
0, 302, 661, 680, 0, 680, 0, 0, 0, 0, 0, 302, 661, 680, 0, 680, 0, 0, 0, 0,
0, 332, 0, 0, 680, 0, 142, 145, 143, 150, 0, 332, 0, 0, 680, 0, 142, 145, 143, 150,
0, 155, 192, 74, 680, 0, 76, 54, 0, 0, 0, 155, 192, 74, 680, 0, 76, 53, 0, 0,
0, 609, 0, 0, 0, 0, 617, 616, 615, 614, 0, 609, 0, 0, 0, 0, 617, 616, 615, 614,
0, 0, 613, 58, 189, 0, 0, 0, 0, 0, 0, 0, 613, 57, 189, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680,
0, 0, 680, 0, 69, 92, 227, 680, 0, 0, 0, 0, 680, 0, 69, 92, 227, 680, 0, 0,
@ -1309,7 +1309,7 @@ static const yytype_uint16 yydefact[] =
195, 0, 536, 535, 537, 534, 680, 680, 176, 101, 195, 0, 536, 535, 537, 534, 680, 680, 176, 101,
0, 0, 0, 216, 0, 0, 680, 237, 321, 0, 0, 0, 0, 216, 0, 0, 680, 237, 321, 0,
305, 0, 304, 0, 303, 663, 0, 0, 0, 662, 305, 0, 304, 0, 303, 663, 0, 0, 0, 662,
680, 301, 334, 0, 27, 0, 0, 0, 36, 152, 680, 301, 334, 0, 26, 0, 0, 0, 35, 152,
156, 154, 0, 0, 0, 0, 0, 0, 0, 0, 156, 154, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 193, 495, 0, 78, 0, 0, 0, 0, 0, 0, 193, 495, 0, 78, 0,
0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0,
@ -1326,17 +1326,17 @@ static const yytype_uint16 yydefact[] =
0, 0, 0, 0, 77, 608, 0, 0, 0, 0, 0, 0, 0, 0, 77, 608, 0, 0, 0, 0,
607, 0, 611, 612, 602, 0, 638, 637, 88, 680, 607, 0, 611, 612, 602, 0, 638, 637, 88, 680,
70, 0, 680, 85, 488, 0, 680, 361, 680, 680, 70, 0, 680, 85, 488, 0, 680, 361, 680, 680,
680, 680, 0, 28, 0, 33, 35, 0, 30, 0, 680, 680, 0, 27, 0, 32, 34, 0, 29, 0,
0, 0, 0, 0, 0, 0, 531, 517, 518, 519, 0, 0, 0, 0, 0, 0, 531, 517, 518, 519,
520, 521, 522, 523, 524, 530, 0, 514, 515, 516, 520, 521, 522, 523, 524, 530, 0, 514, 515, 516,
512, 513, 509, 510, 511, 529, 528, 0, 0, 79, 512, 513, 509, 510, 511, 529, 528, 0, 0, 79,
0, 0, 610, 0, 0, 636, 680, 0, 680, 91, 0, 0, 610, 0, 0, 636, 680, 0, 680, 91,
213, 172, 0, 259, 258, 257, 238, 0, 0, 0, 213, 172, 0, 259, 258, 257, 238, 0, 0, 0,
0, 502, 0, 0, 0, 501, 0, 496, 0, 527, 0, 502, 0, 0, 0, 501, 0, 496, 0, 527,
526, 0, 0, 0, 0, 0, 680, 93, 600, 29, 526, 0, 0, 0, 0, 0, 680, 93, 600, 28,
0, 0, 31, 0, 0, 0, 0, 525, 605, 604, 0, 0, 30, 0, 0, 0, 0, 525, 605, 604,
606, 603, 680, 680, 0, 0, 0, 0, 0, 0, 606, 603, 680, 680, 0, 0, 0, 0, 0, 0,
680, 87, 34, 32, 499, 498, 500, 497, 89 680, 87, 33, 31, 499, 498, 500, 497, 89
}; };
/* YYPGOTO[NTERM-NUM]. */ /* YYPGOTO[NTERM-NUM]. */
@ -1907,24 +1907,24 @@ static const yytype_int16 yytable[] =
86, 87, 108, 109, 0, 0, 0, 110, 0, 88, 86, 87, 108, 109, 0, 0, 0, 110, 0, 88,
0, 0, 111, 112, 0, 113, 0, 89, 0, 90, 0, 0, 111, 112, 0, 113, 0, 89, 0, 90,
91, 92, 93, 114, 0, 0, 94, 0, 0, 0, 91, 92, 93, 114, 0, 0, 94, 0, 0, 0,
95, 0, 0, 0, 96, 97, 98, 99, 100, 101, 95, 0, 0, 87, 96, 97, 98, 99, 100, 101,
115, 0, 1160, 0, 0, 102, 103, 104, 105, 0, 115, 88, 1160, 0, 0, 102, 103, 104, 105, 0,
0, 0, 0, 0, 106, 107, 87, 0, 108, 109, 0, 90, 91, 92, 106, 107, 0, 0, 108, 109,
0, 0, 0, 110, 88, 0, 0, 0, 111, 112, 0, 0, 249, 110, 0, 0, 0, 0, 111, 112,
87, 113, 0, 0, 90, 91, 92, 0, 88, 0, 100, 113, 0, 0, 0, 0, 0, 0, 0, 87,
0, 0, 0, 0, 0, 249, 0, 0, 90, 91, 105, 0, 0, 0, 0, 0, 106, 88, 0, 0,
92, 0, 87, 100, 258, 0, 115, 0, 0, 249, 0, 109, 0, 0, 0, 0, 115, 90, 91, 92,
88, 0, 0, 105, 0, 0, 0, 100, 0, 106, 111, 112, 0, 113, 0, 87, 0, 0, 249, 0,
90, 91, 92, 0, 109, 0, 0, 105, 0, 0, 0, 0, 0, 88, 0, 0, 100, 0, -144, 0,
0, 249, 0, 106, 112, 0, 113, 0, 109, 100, 0, 0, 0, 90, 91, 92, 105, 0, 115, 0,
0, 0, 0, 0, 0, 0, 0, 0, 112, 105, 0, 0, 106, 0, 249, 0, 108, 109, 0, 0,
113, 0, 0, 0, 0, 106, 0, 0, 87, 108, 0, 0, 100, 258, 0, 0, 111, 112, 87, 113,
109, 115, 0, 0, 0, -144, 88, 0, 0, 0, 0, 0, 105, 0, 0, 0, 88, 0, 106, 0,
112, 0, 113, 0, 0, 115, 90, 91, 92, 0, 0, 0, 0, 109, 0, 0, 90, 91, 92, 0,
0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 112, 115, 113, 0, 249, 0, 0,
0, 0, 0, 0, 0, 100, 0, 115, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0,
0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0,
0, 106, 0, 0, 0, 0, 109, 0, 0, 0, 115, 106, 0, 0, 0, 0, 109, 0, 0, 0,
0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 0, 112, 0, 113, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -2464,24 +2464,24 @@ static const yytype_int16 yycheck[] =
49, 50, 107, 108, -1, -1, -1, 112, -1, 58, 49, 50, 107, 108, -1, -1, -1, 112, -1, 58,
-1, -1, 117, 118, -1, 120, -1, 66, -1, 68, -1, -1, 117, 118, -1, 120, -1, 66, -1, 68,
69, 70, 71, 128, -1, -1, 75, -1, -1, -1, 69, 70, 71, 128, -1, -1, 75, -1, -1, -1,
79, -1, -1, -1, 83, 84, 85, 86, 87, 88, 79, -1, -1, 50, 83, 84, 85, 86, 87, 88,
145, -1, 147, -1, -1, 94, 95, 96, 97, -1, 145, 58, 147, -1, -1, 94, 95, 96, 97, -1,
-1, -1, -1, -1, 103, 104, 50, -1, 107, 108, -1, 68, 69, 70, 103, 104, -1, -1, 107, 108,
-1, -1, -1, 112, 58, -1, -1, -1, 117, 118, -1, -1, 79, 112, -1, -1, -1, -1, 117, 118,
50, 120, -1, -1, 68, 69, 70, -1, 58, -1, 87, 120, -1, -1, -1, -1, -1, -1, -1, 50,
-1, -1, -1, -1, -1, 79, -1, -1, 68, 69, 97, -1, -1, -1, -1, -1, 103, 58, -1, -1,
70, -1, 50, 87, 88, -1, 145, -1, -1, 79, -1, 108, -1, -1, -1, -1, 145, 68, 69, 70,
58, -1, -1, 97, -1, -1, -1, 87, -1, 103, 117, 118, -1, 120, -1, 50, -1, -1, 79, -1,
68, 69, 70, -1, 108, -1, -1, 97, -1, -1, -1, -1, -1, 58, -1, -1, 87, -1, 135, -1,
-1, 79, -1, 103, 118, -1, 120, -1, 108, 87, -1, -1, -1, 68, 69, 70, 97, -1, 145, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 118, 97, -1, -1, 103, -1, 79, -1, 107, 108, -1, -1,
120, -1, -1, -1, -1, 103, -1, -1, 50, 107, -1, -1, 87, 88, -1, -1, 117, 118, 50, 120,
108, 145, -1, -1, -1, 135, 58, -1, -1, -1, -1, -1, 97, -1, -1, -1, 58, -1, 103, -1,
118, -1, 120, -1, -1, 145, 68, 69, 70, -1, -1, -1, -1, 108, -1, -1, 68, 69, 70, -1,
-1, -1, -1, -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, 118, 145, 120, -1, 79, -1, -1,
-1, -1, -1, -1, -1, 87, -1, 145, -1, -1, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, -1, -1, -1, -1,
-1, 103, -1, -1, -1, -1, 108, -1, -1, -1, 145, 103, -1, -1, -1, -1, 108, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 118, -1, 120, -1, -1, -1, -1, -1, -1, -1, 118, -1, 120, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@ -2634,9 +2634,9 @@ static const yytype_uint16 yyr1[] =
0, 150, 151, 151, 151, 152, 152, 152, 153, 153, 0, 150, 151, 151, 151, 152, 152, 152, 153, 153,
154, 154, 156, 155, 157, 157, 157, 157, 157, 157, 154, 154, 156, 155, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 159, 158, 157, 157, 157, 157, 157, 157, 157, 159, 158, 160,
160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
160, 160, 160, 160, 160, 161, 161, 162, 162, 163, 160, 160, 160, 160, 161, 161, 162, 162, 163, 163,
163, 163, 163, 165, 164, 166, 164, 167, 167, 168, 163, 163, 163, 165, 164, 166, 164, 167, 167, 168,
168, 170, 169, 171, 169, 169, 172, 172, 173, 173, 168, 170, 169, 171, 169, 169, 172, 172, 173, 173,
175, 174, 176, 174, 178, 177, 179, 177, 180, 177, 175, 174, 176, 174, 178, 177, 179, 177, 180, 177,
@ -2706,12 +2706,12 @@ static const yytype_uint16 yyr1[] =
static const yytype_uint8 yyr2[] = static const yytype_uint8 yyr2[] =
{ {
0, 2, 2, 2, 2, 1, 2, 2, 1, 3, 0, 2, 2, 2, 2, 1, 2, 2, 1, 3,
4, 4, 0, 5, 1, 1, 1, 1, 1, 1, 4, 4, 0, 5, 1, 1, 1, 1, 1, 2,
2, 1, 1, 2, 2, 2, 2, 7, 9, 11, 1, 1, 2, 2, 2, 2, 7, 9, 11, 9,
9, 11, 13, 9, 13, 9, 7, 5, 0, 3, 11, 13, 9, 13, 9, 7, 5, 0, 3, 1,
1, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 6, 1, 3, 1, 4, 1, 2, 2, 2, 6, 1, 3, 1, 4, 1, 3,
3, 3, 3, 0, 4, 0, 5, 2, 4, 2, 3, 3, 1, 0, 4, 0, 5, 2, 4, 2,
4, 0, 4, 0, 5, 3, 2, 4, 2, 4, 4, 0, 4, 0, 5, 3, 2, 4, 2, 4,
0, 6, 0, 6, 0, 7, 0, 11, 0, 12, 0, 6, 0, 6, 0, 7, 0, 11, 0, 12,
0, 8, 0, 9, 1, 1, 1, 2, 2, 2, 0, 8, 0, 9, 1, 1, 1, 2, 2, 2,
@ -3597,8 +3597,8 @@ yyreduce:
#line 3598 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3598 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 21: case 20:
#line 483 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 482 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
if (publish_nest_level != 0) { if (publish_nest_level != 0) {
yyerror("Unclosed __begin_publish", publish_loc); yyerror("Unclosed __begin_publish", publish_loc);
@ -3614,8 +3614,8 @@ yyreduce:
#line 3615 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3615 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 22: case 21:
#line 496 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 495 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
if (publish_nest_level != 1) { if (publish_nest_level != 1) {
yyerror("Unmatched __end_publish", (yylsp[0])); yyerror("Unmatched __end_publish", (yylsp[0]));
@ -3627,16 +3627,16 @@ yyreduce:
#line 3628 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3628 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 23: case 22:
#line 505 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 504 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
current_scope->set_current_vis(V_published); current_scope->set_current_vis(V_published);
} }
#line 3636 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3636 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 24: case 23:
#line 509 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 508 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
if (publish_nest_level > 0) { if (publish_nest_level > 0) {
current_scope->set_current_vis(V_published); current_scope->set_current_vis(V_published);
@ -3647,24 +3647,24 @@ yyreduce:
#line 3648 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3648 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 25: case 24:
#line 517 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 516 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
current_scope->set_current_vis(V_protected); current_scope->set_current_vis(V_protected);
} }
#line 3656 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3656 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 26: case 25:
#line 521 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 520 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
current_scope->set_current_vis(V_private); current_scope->set_current_vis(V_private);
} }
#line 3664 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3664 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 27: case 26:
#line 525 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 524 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *getter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *getter = (yyvsp[-2].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
@ -3678,8 +3678,8 @@ yyreduce:
#line 3679 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3679 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 28: case 27:
#line 536 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 535 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (getter == (CPPDeclaration *)NULL || getter->get_subtype() != CPPDeclaration::ST_function_group) { if (getter == (CPPDeclaration *)NULL || getter->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3703,8 +3703,8 @@ yyreduce:
#line 3704 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3704 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 29: case 28:
#line 557 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 556 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (getter == (CPPDeclaration *)NULL || getter->get_subtype() != CPPDeclaration::ST_function_group) { if (getter == (CPPDeclaration *)NULL || getter->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3737,8 +3737,8 @@ yyreduce:
#line 3738 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3738 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 30: case 29:
#line 587 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 586 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3758,8 +3758,8 @@ yyreduce:
#line 3759 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3759 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 31: case 30:
#line 604 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 603 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *length_getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *length_getter = (yyvsp[-6].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3790,8 +3790,8 @@ yyreduce:
#line 3791 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3791 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 32: case 31:
#line 632 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 631 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *length_getter = (yyvsp[-8].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *length_getter = (yyvsp[-8].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3831,8 +3831,8 @@ yyreduce:
#line 3832 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3832 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 33: case 32:
#line 669 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 668 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *hasser = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *hasser = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (hasser == (CPPDeclaration *)NULL || hasser->get_subtype() != CPPDeclaration::ST_function_group) { if (hasser == (CPPDeclaration *)NULL || hasser->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3857,8 +3857,8 @@ yyreduce:
#line 3858 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3858 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 34: case 33:
#line 691 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 690 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *hasser = (yyvsp[-8].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *hasser = (yyvsp[-8].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (hasser == (CPPDeclaration *)NULL || hasser->get_subtype() != CPPDeclaration::ST_function_group) { if (hasser == (CPPDeclaration *)NULL || hasser->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3894,8 +3894,8 @@ yyreduce:
#line 3895 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3895 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 35: case 34:
#line 724 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 723 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer); CPPDeclaration *length_getter = (yyvsp[-4].u.identifier)->find_symbol(current_scope, global_scope, current_lexer);
if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) { if (length_getter == (CPPDeclaration *)NULL || length_getter->get_subtype() != CPPDeclaration::ST_function_group) {
@ -3920,8 +3920,8 @@ yyreduce:
#line 3921 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3921 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 36: case 35:
#line 746 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 745 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPExpression::Result result = (yyvsp[-4].u.expr)->evaluate(); CPPExpression::Result result = (yyvsp[-4].u.expr)->evaluate();
if (result._type == CPPExpression::RT_error) { if (result._type == CPPExpression::RT_error) {
@ -3935,8 +3935,8 @@ yyreduce:
#line 3936 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3936 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 37: case 36:
#line 757 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 756 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
// This alternative version of static_assert was introduced in C++17. // This alternative version of static_assert was introduced in C++17.
CPPExpression::Result result = (yyvsp[-2].u.expr)->evaluate(); CPPExpression::Result result = (yyvsp[-2].u.expr)->evaluate();
@ -3949,8 +3949,8 @@ yyreduce:
#line 3950 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3950 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 38: case 37:
#line 770 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 769 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
CPPScope *new_scope = new CPPScope(current_scope, CPPNameComponent("temp"), CPPScope *new_scope = new CPPScope(current_scope, CPPNameComponent("temp"),
V_public); V_public);
@ -3959,8 +3959,8 @@ yyreduce:
#line 3960 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3960 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 39: case 38:
#line 776 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 775 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
delete current_scope; delete current_scope;
pop_scope(); pop_scope();
@ -3968,24 +3968,24 @@ yyreduce:
#line 3969 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3969 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 40: case 39:
#line 785 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 784 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = 0; (yyval.u.integer) = 0;
} }
#line 3977 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3977 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 41: case 40:
#line 789 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 788 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extern; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extern;
} }
#line 3985 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 3985 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 42: case 41:
#line 793 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 792 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extern; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extern;
if ((yyvsp[-1].str) == "C") { if ((yyvsp[-1].str) == "C") {
@ -3999,96 +3999,96 @@ yyreduce:
#line 4000 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4000 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 43: case 42:
#line 804 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 803 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_static; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_static;
} }
#line 4008 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4008 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 44: case 43:
#line 808 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 807 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_inline; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_inline;
} }
#line 4016 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4016 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 45: case 44:
#line 812 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 811 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_virtual; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_virtual;
} }
#line 4024 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4024 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 46: case 45:
#line 816 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 815 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_explicit; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_explicit;
} }
#line 4032 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4032 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 47: case 46:
#line 820 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 819 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_register; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_register;
} }
#line 4040 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4040 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 48: case 47:
#line 824 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 823 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_volatile; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_volatile;
} }
#line 4048 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4048 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 49: case 48:
#line 828 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 827 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_mutable; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_mutable;
} }
#line 4056 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4056 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 50: case 49:
#line 832 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 831 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_constexpr; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_constexpr;
} }
#line 4064 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4064 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 51: case 50:
#line 836 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 835 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_blocking; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_blocking;
} }
#line 4072 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4072 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 52: case 51:
#line 840 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 839 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extension; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_extension;
} }
#line 4080 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4080 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 53: case 52:
#line 844 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 843 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
(yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_thread_local; (yyval.u.integer) = (yyvsp[0].u.integer) | (int)CPPInstance::SC_thread_local;
} }
#line 4088 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4088 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 54: case 53:
#line 848 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 847 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
// Ignore attribute specifiers for now. // Ignore attribute specifiers for now.
(yyval.u.integer) = (yyvsp[0].u.integer); (yyval.u.integer) = (yyvsp[0].u.integer);
@ -4096,16 +4096,16 @@ yyreduce:
#line 4097 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4097 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 59: case 58:
#line 866 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 865 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
/* multiple_var_declaration adds itself to the scope. */ /* multiple_var_declaration adds itself to the scope. */
} }
#line 4105 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4105 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 60: case 59:
#line 870 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 869 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
// We don't really care about the storage class here. In fact, it's // We don't really care about the storage class here. In fact, it's
// not actually legal to define a class or struct using a particular // not actually legal to define a class or struct using a particular
@ -4117,8 +4117,8 @@ yyreduce:
#line 4118 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4118 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 61: case 60:
#line 879 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 878 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
if ((yyvsp[-1].u.instance) != (CPPInstance *)NULL) { if ((yyvsp[-1].u.instance) != (CPPInstance *)NULL) {
(yyvsp[-1].u.instance)->_storage_class |= (current_storage_class | (yyvsp[-2].u.integer)); (yyvsp[-1].u.instance)->_storage_class |= (current_storage_class | (yyvsp[-2].u.integer));
@ -4129,8 +4129,8 @@ yyreduce:
#line 4130 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */ #line 4130 "built/tmp/cppBison.yxx.c" /* yacc.c:1646 */
break; break;
case 62: case 61:
#line 887 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */ #line 886 "dtool/src/cppparser/cppBison.yxx" /* yacc.c:1646 */
{ {
if ((yyvsp[-1].u.instance) != (CPPInstance *)NULL) { if ((yyvsp[-1].u.instance) != (CPPInstance *)NULL) {
(yyvsp[-1].u.instance)->_storage_class |= (current_storage_class | (yyvsp[-2].u.integer)); (yyvsp[-1].u.instance)->_storage_class |= (current_storage_class | (yyvsp[-2].u.integer));

View File

@ -476,7 +476,6 @@ declaration:
| template_declaration | template_declaration
| extern_c | extern_c
| namespace_declaration | namespace_declaration
| using_declaration
| friend_declaration | friend_declaration
| KW_TYPEDEF typedef_declaration | KW_TYPEDEF typedef_declaration
| KW_BEGIN_PUBLISH | KW_BEGIN_PUBLISH
@ -891,6 +890,7 @@ type_like_declaration:
$2->set_initializer($3); $2->set_initializer($3);
} }
} }
| using_declaration
; ;
multiple_var_declaration: multiple_var_declaration:

View File

@ -133,6 +133,66 @@ add_enum_value(CPPInstance *inst) {
} }
} }
/**
*
*/
void CPPScope::
define_typedef_type(CPPTypedefType *type, CPPPreprocessor *error_sink) {
string name = type->get_simple_name();
pair<Types::iterator, bool> result =
_types.insert(Types::value_type(name, type));
if (!result.second) {
CPPType *other_type = result.first->second;
CPPTypedefType *other_td = other_type->as_typedef_type();
// We don't do redefinitions of typedefs. But we don't complain as long
// as this is actually a typedef to the previous definition.
if (other_type != type->_type &&
(other_td == NULL || !other_td->_type->is_equivalent(*type->_type))) {
if (error_sink != NULL) {
ostringstream errstr;
type->output(errstr, 0, NULL, false);
errstr << " has conflicting declaration as ";
other_type->output(errstr, 0, NULL, true);
error_sink->error(errstr.str(), type->_ident->_loc);
error_sink->error("previous definition is here",
other_td->_ident->_loc);
}
}
} else {
_types[name] = type;
}
// This might be a templated "using" definition.
if (type->is_template()) {
CPPTemplateScope *scope = type->get_template_scope();
if (scope->_parameters._parameters.size() == 0) {
return;
}
string simple_name = type->get_simple_name();
pair<Templates::iterator, bool> result =
_templates.insert(Templates::value_type(simple_name, type));
if (!result.second) {
// The template was not inserted because we already had a template
// definition with the given name. If the previous definition was
// incomplete, replace it.
CPPDeclaration *old_templ = (*result.first).second;
CPPType *old_templ_type = old_templ->as_type();
if (old_templ_type == NULL || old_templ_type->is_incomplete()) {
// The previous template definition was incomplete, maybe a forward
// reference; replace it with the good one.
(*result.first).second = type;
}
}
}
}
/** /**
* *
*/ */
@ -1035,39 +1095,12 @@ handle_declaration(CPPDeclaration *decl, CPPScope *global_scope,
CPPPreprocessor *error_sink) { CPPPreprocessor *error_sink) {
CPPTypedefType *def = decl->as_typedef_type(); CPPTypedefType *def = decl->as_typedef_type();
if (def != NULL) { if (def != NULL) {
string name = def->get_simple_name(); define_typedef_type(def, error_sink);
pair<Types::iterator, bool> result =
_types.insert(Types::value_type(name, def));
if (!result.second) {
CPPType *other_type = result.first->second;
CPPTypedefType *other_td = other_type->as_typedef_type();
// We don't do redefinitions of typedefs. But we don't complain as long
// as this is actually a typedef to the previous definition.
if (other_type != def->_type &&
(other_td == NULL || !other_td->_type->is_equivalent(*def->_type))) {
if (error_sink != NULL) {
ostringstream errstr;
def->output(errstr, 0, NULL, false);
errstr << " has conflicting declaration as ";
other_type->output(errstr, 0, NULL, true);
error_sink->error(errstr.str(), def->_ident->_loc);
error_sink->error("previous definition is here",
other_td->_ident->_loc);
}
}
} else {
_types[name] = def;
}
CPPExtensionType *et = def->_type->as_extension_type(); CPPExtensionType *et = def->_type->as_extension_type();
if (et != NULL) { if (et != NULL) {
define_extension_type(et, error_sink); define_extension_type(et, error_sink);
} }
return; return;
} }

View File

@ -62,6 +62,8 @@ public:
CPPPreprocessor *preprocessor, CPPPreprocessor *preprocessor,
const cppyyltype &pos); const cppyyltype &pos);
virtual void add_enum_value(CPPInstance *inst); virtual void add_enum_value(CPPInstance *inst);
virtual void define_typedef_type(CPPTypedefType *type,
CPPPreprocessor *error_sink = NULL);
virtual void define_extension_type(CPPExtensionType *type, virtual void define_extension_type(CPPExtensionType *type,
CPPPreprocessor *error_sink = NULL); CPPPreprocessor *error_sink = NULL);
virtual void define_namespace(CPPNamespace *scope); virtual void define_namespace(CPPNamespace *scope);

View File

@ -674,7 +674,7 @@ substitute_decl(CPPDeclaration::SubstDecl &subst,
// If the struct name didn't have an explicit template reference // If the struct name didn't have an explicit template reference
// before, now it does. // before, now it does.
if (!_ident->_names.empty() && !_ident->_names.back().has_templ()) { if (_ident != NULL && !_ident->_names.empty() && !_ident->_names.back().has_templ()) {
if (rep->is_template()) { if (rep->is_template()) {
rep->_template_scope = (CPPTemplateScope *)NULL; rep->_template_scope = (CPPTemplateScope *)NULL;
CPPNameComponent nc(get_simple_name()); CPPNameComponent nc(get_simple_name());

View File

@ -49,6 +49,16 @@ add_enum_value(CPPInstance *inst) {
_parent_scope->add_enum_value(inst); _parent_scope->add_enum_value(inst);
} }
/**
*
*/
void CPPTemplateScope::
define_typedef_type(CPPTypedefType *type, CPPPreprocessor *error_sink) {
type->_template_scope = this;
assert(_parent_scope != NULL);
_parent_scope->define_typedef_type(type, error_sink);
}
/** /**
* *
*/ */

View File

@ -34,6 +34,8 @@ public:
CPPPreprocessor *preprocessor, CPPPreprocessor *preprocessor,
const cppyyltype &pos); const cppyyltype &pos);
virtual void add_enum_value(CPPInstance *inst); virtual void add_enum_value(CPPInstance *inst);
virtual void define_typedef_type(CPPTypedefType *type,
CPPPreprocessor *error_sink = NULL);
virtual void define_extension_type(CPPExtensionType *type, virtual void define_extension_type(CPPExtensionType *type,
CPPPreprocessor *error_sink = NULL); CPPPreprocessor *error_sink = NULL);
virtual void define_namespace(CPPNamespace *scope); virtual void define_namespace(CPPNamespace *scope);

View File

@ -193,6 +193,17 @@ is_fully_specified() const {
_type->is_fully_specified(); _type->is_fully_specified();
} }
/**
*
*/
CPPDeclaration *CPPTypedefType::
instantiate(const CPPTemplateParameterList *actual_params,
CPPScope *current_scope, CPPScope *global_scope,
CPPPreprocessor *error_sink) const {
return _type->instantiate(actual_params, current_scope, global_scope, error_sink);
}
/** /**
* *
*/ */
@ -320,6 +331,10 @@ output(ostream &out, int indent_level, CPPScope *scope, bool complete) const {
if (complete) { if (complete) {
if (_using) { if (_using) {
// It was declared using the "using" keyword. // It was declared using the "using" keyword.
if (is_template()) {
get_template_scope()->_parameters.write_formal(out, scope);
indent(out, indent_level);
}
out << "using " << name << " = "; out << "using " << name << " = ";
_type->output(out, 0, scope, false); _type->output(out, 0, scope, false);
} else { } else {

View File

@ -21,7 +21,9 @@ class CPPIdentifier;
class CPPInstanceIdentifier; class CPPInstanceIdentifier;
/** /**
* * A type alias created by a C++ typedef or using declaration. These aren't
* officially supposed to be types in themselves, but we represent them as
* such so that we can preserve typedef names in the generated code.
*/ */
class CPPTypedefType : public CPPType { class CPPTypedefType : public CPPType {
public: public:
@ -46,6 +48,11 @@ public:
virtual bool is_fully_specified() const; virtual bool is_fully_specified() const;
virtual CPPDeclaration *
instantiate(const CPPTemplateParameterList *actual_params,
CPPScope *current_scope, CPPScope *global_scope,
CPPPreprocessor *error_sink = NULL) const;
virtual CPPDeclaration *substitute_decl(SubstDecl &subst, virtual CPPDeclaration *substitute_decl(SubstDecl &subst,
CPPScope *current_scope, CPPScope *current_scope,
CPPScope *global_scope); CPPScope *global_scope);

View File

@ -1167,8 +1167,10 @@ scan_typedef_type(CPPTypedefType *type) {
return; return;
} }
// A typedef cannot be a template declaration. if (type->is_template()) {
assert(!type->is_template()); // The type is a template declaration, not a true type.
return;
}
if (type->_file.is_c_file()) { if (type->_file.is_c_file()) {
// This type declaration appears in a .C file. We can only export types // This type declaration appears in a .C file. We can only export types