diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-04-03 16:00:34 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-04-03 16:00:34 +0300 |
| commit | 2ca159fb5c2a52f33c499eef1fa50a98a863b0f0 (patch) | |
| tree | c9497ad8372a047bcff366c189c8969ed84f0406 | |
| parent | 4642bedb436981e92e3312f06bfcb2eb34074596 (diff) | |
| download | ek-2ca159fb5c2a52f33c499eef1fa50a98a863b0f0.tar.gz ek-2ca159fb5c2a52f33c499eef1fa50a98a863b0f0.zip | |
initial union testing
| -rw-r--r-- | gen/gen_parser.c | 1622 | ||||
| -rw-r--r-- | include/cu/ast.h | 7 | ||||
| -rw-r--r-- | include/cu/scope.h | 1 | ||||
| -rw-r--r-- | src/actualize.c | 212 | ||||
| -rw-r--r-- | src/ast.c | 96 | ||||
| -rw-r--r-- | src/debug.c | 22 | ||||
| -rw-r--r-- | src/parser.y | 4 | ||||
| -rw-r--r-- | src/scope.c | 43 | ||||
| -rw-r--r-- | tests/unions.cu | 23 |
9 files changed, 1172 insertions, 858 deletions
diff --git a/gen/gen_parser.c b/gen/gen_parser.c index 744d3bc..96cc7ec 100644 --- a/gen/gen_parser.c +++ b/gen/gen_parser.c @@ -582,18 +582,18 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 57 +#define YYFINAL 61 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2050 +#define YYLAST 2064 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 82 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 63 /* YYNRULES -- Number of rules. */ -#define YYNRULES 217 +#define YYNRULES 219 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 436 +#define YYNSTATES 438 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 336 @@ -671,7 +671,7 @@ static const yytype_int16 yyrline[] = 545, 546, 549, 554, 557, 563, 564, 567, 568, 569, 572, 573, 579, 583, 587, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 628, 629, 632, 633 + 610, 611, 612, 613, 614, 615, 630, 631, 634, 635 }; #endif @@ -720,12 +720,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-230) +#define YYPACT_NINF (-225) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-218) +#define YYTABLE_NINF (-220) #define yytable_value_is_error(Yyn) \ 0 @@ -734,50 +734,50 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 278, -230, -230, -230, 507, 42, 42, 47, -38, 42, - 42, 42, 608, 50, 54, -230, 59, -230, -230, -230, - 63, -230, -230, 206, -230, 95, 110, 124, -230, -230, - -230, 129, -230, -230, -19, 69, -230, 1157, -230, 70, - 22, 78, 43, 1157, 64, 141, 25, 1047, -33, -230, - 67, -230, -230, -230, 969, -230, -230, -230, -230, -230, - -230, 42, 42, 30, -230, -230, -230, -230, 1157, 42, - 1157, 1157, 1157, 1157, 1157, -230, 81, 83, 1157, 42, - 153, -21, -230, -230, -230, -230, -230, -230, 1266, -230, - 25, -230, 153, 42, 15, -230, -230, 82, 969, -230, - 969, -230, -230, 153, 101, 98, 16, -230, 114, 153, - 1330, 153, 153, 739, -230, 1203, 582, 1971, 86, -230, - -230, 153, 120, 97, 295, -230, 164, 100, 42, -230, - 556, 166, -230, 23, 103, 82, -230, 82, 82, 431, - 1491, 82, 1157, 174, 412, 1394, 59, 107, 134, 112, - -230, 891, 153, 1079, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1157, 502, 153, 42, 18, 113, 182, 152, - 128, 67, 56, -230, -230, 135, 153, 153, 153, 42, - -230, 150, 153, -230, 153, 161, 140, -230, -230, -230, - 42, 1203, 204, 208, 1157, 1001, 1157, 67, 923, 74, - -230, 403, 209, 210, 1458, -230, -230, 212, 663, 149, - -230, -230, -230, -230, -230, -230, -230, 217, -230, -230, - 1125, 1971, 67, 42, 185, 155, -230, 153, -230, 42, - 160, 42, -230, 11, -230, 226, -230, -230, -230, 1522, - 162, -230, -230, 42, 70, 1157, -230, 449, 191, 171, - -230, -230, -230, 1971, -230, 8, 8, 8, 431, 431, - 1299, 1235, 1491, 677, 1427, 1363, 829, 829, 829, 829, - 753, 753, 175, 175, 1971, 1971, 1971, 1971, 1971, 1971, - 1971, 1971, 1971, 1971, 170, -230, -230, 42, 1157, 42, - -230, -230, 42, 67, -230, -230, 165, -230, 177, -230, - -230, 153, -230, -230, 67, -230, -230, 1586, 238, 1650, - 193, -230, 250, 1157, 42, -230, -230, -230, -230, -230, - -230, -230, -230, -230, -230, 188, 211, 256, 582, -230, - -230, -230, 42, -230, 42, 42, -230, -230, -230, -230, - 67, -230, 1001, -230, 213, 195, 1971, -230, 200, -230, - 153, -230, -230, 222, 220, 1157, -230, 1157, -230, 1650, - 255, -230, -31, 969, -230, 214, 218, 215, -230, -230, - -20, -230, 67, 219, -17, 1157, 220, 229, 1715, 1779, - 227, 1157, -230, -230, -230, -230, 231, -230, 502, -230, - -230, -230, -230, -230, 1843, -230, -230, 1157, -230, -16, - 1907, 67, 42, 235, 815, 1650, -230, -230, 1157, -230, - 236, -230, -230, -230, -230, -230 + 653, -225, -225, -225, 429, 27, 27, 27, 42, 3, + 27, 27, 27, 246, 60, 64, -225, 100, -225, -225, + -225, -225, 79, -225, -225, 214, -225, 113, 124, 134, + -225, -225, -225, -225, 144, -225, -225, 99, 112, 149, + -225, 1187, -225, 107, 71, 126, 49, 1187, 46, 65, + 30, 524, -38, -225, 122, -225, -225, -225, 1053, -225, + -225, -225, -225, -225, -225, 27, 27, 27, 27, 51, + -225, -225, -225, -225, 1187, 27, 1187, 1187, 1187, 1187, + 1187, -225, 127, 130, 1187, 27, 38, 92, -225, -225, + -225, -225, -225, -225, 1280, -225, 30, -225, 38, 27, + 22, -225, -225, 137, 1053, -225, 1053, -225, -225, 38, + 25, 165, 31, -225, 173, 38, 1344, 38, 38, 823, + -225, 1217, 604, 1985, 140, -225, -225, 38, 181, 157, + 194, -225, 221, 159, 164, 182, -225, 170, 233, -225, + 29, 186, 137, -225, 137, 137, 314, 1449, 137, 1187, + 263, 81, 1408, 100, 196, 224, 197, -225, 975, 38, + 1131, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 334, 38, 27, 97, 202, 269, 230, 204, 122, 55, + -225, -225, 207, 38, 38, 38, 27, -225, 168, 38, + -225, 38, 239, 208, -225, -225, -225, 27, 1217, 280, + 283, 1187, 1085, 1187, 122, 1007, 103, -225, 70, 284, + 288, 1472, -225, -225, 289, 747, 226, -225, -225, -225, + -225, -225, -225, -225, 293, -225, -225, 1161, 1985, 122, + 27, 256, 231, -225, 38, -225, 27, 234, 27, -225, + 235, -225, -225, 295, -225, -225, -225, 1536, 237, -225, + -225, 27, 107, 1187, -225, 220, 268, 238, -225, -225, + -225, 1985, -225, 110, 110, 110, 314, 314, 712, 556, + 1449, 1441, 1377, 1313, 913, 913, 913, 913, 837, 837, + 332, 332, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, + 1985, 1985, 244, -225, -225, 27, 1187, 27, -225, -225, + 27, 122, -225, -225, 240, -225, 250, -225, -225, 38, + -225, -225, 122, -225, -225, 1600, 315, 1664, 260, -225, + 316, 1187, 27, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, 254, 275, 328, 604, -225, -225, -225, + 27, -225, 27, -225, -225, -225, -225, 122, -225, 1085, + -225, 281, 266, 1985, -225, 270, -225, 38, -225, -225, + 296, 291, 1187, -225, 1187, -225, 1664, 335, -225, -16, + 1053, -225, 282, 297, -225, -225, 33, -225, 122, 272, + 74, 1187, 291, 298, 1729, 1793, 300, 1187, -225, -225, + -225, -225, -225, 334, -225, -225, -225, -225, -225, 1857, + -225, -225, 1187, -225, 95, 1921, 122, 299, 899, 1664, + -225, -225, 1187, -225, -225, -225, -225, -225 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -785,74 +785,74 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 213, 2, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 199, 3, 4, 197, 198, - 0, 203, 196, 0, 216, 0, 0, 0, 207, 206, - 205, 0, 210, 204, 0, 0, 6, 0, 200, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 147, 145, - 0, 157, 211, 201, 0, 202, 215, 1, 212, 208, - 209, 0, 0, 0, 182, 60, 61, 62, 0, 0, - 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 56, 74, 64, 67, 68, 65, 66, 0, 75, - 0, 162, 0, 0, 0, 148, 150, 153, 0, 155, - 0, 156, 144, 0, 147, 52, 0, 48, 51, 0, - 0, 0, 0, 0, 161, 0, 0, 118, 120, 158, - 119, 0, 171, 0, 0, 164, 0, 0, 0, 184, - 0, 0, 177, 179, 0, 41, 58, 39, 70, 38, - 40, 42, 0, 0, 56, 0, 0, 0, 107, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 215, 2, 195, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 3, 4, 197, + 199, 198, 0, 204, 196, 0, 218, 0, 0, 0, + 209, 208, 207, 206, 0, 212, 205, 0, 0, 0, + 6, 0, 201, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 147, 145, 0, 157, 213, 202, 0, 203, + 217, 1, 214, 210, 211, 0, 0, 0, 0, 0, + 182, 60, 61, 62, 0, 0, 0, 0, 0, 0, + 0, 59, 0, 0, 0, 0, 0, 56, 74, 64, + 67, 68, 65, 66, 0, 75, 0, 162, 0, 0, + 0, 148, 150, 153, 0, 155, 0, 156, 144, 0, + 147, 52, 0, 48, 51, 0, 0, 0, 0, 0, + 161, 0, 0, 118, 120, 158, 119, 0, 171, 0, + 0, 164, 0, 0, 0, 0, 184, 0, 0, 177, + 179, 0, 41, 58, 39, 70, 38, 40, 42, 0, + 0, 56, 0, 0, 0, 107, 0, 73, 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, 185, 189, - 0, 0, 0, 159, 160, 0, 0, 0, 0, 0, - 141, 0, 0, 151, 0, 181, 0, 154, 101, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 56, 0, 0, 0, 91, 92, 0, 0, 0, - 99, 94, 86, 89, 93, 90, 95, 0, 97, 98, - 0, 122, 0, 0, 116, 0, 113, 0, 169, 0, - 0, 166, 172, 0, 174, 0, 176, 178, 183, 0, - 0, 63, 69, 0, 0, 0, 54, 56, 47, 0, - 45, 44, 72, 7, 8, 11, 12, 13, 10, 9, - 15, 14, 16, 18, 17, 19, 32, 33, 34, 35, - 36, 37, 20, 21, 22, 23, 24, 25, 26, 29, - 27, 28, 30, 31, 0, 71, 57, 0, 0, 188, - 191, 110, 0, 0, 143, 50, 0, 142, 0, 49, - 152, 0, 149, 78, 0, 82, 83, 0, 0, 0, - 0, 81, 0, 0, 0, 139, 138, 88, 85, 84, - 79, 87, 102, 104, 96, 0, 0, 0, 0, 117, - 121, 170, 0, 165, 0, 0, 175, 55, 5, 106, - 0, 43, 0, 53, 192, 0, 186, 187, 0, 108, - 0, 140, 180, 126, 0, 0, 76, 0, 80, 0, - 0, 123, 0, 0, 115, 0, 0, 0, 163, 46, - 0, 190, 0, 0, 0, 0, 132, 0, 0, 0, - 135, 0, 124, 125, 114, 173, 0, 167, 0, 194, - 109, 146, 127, 128, 0, 131, 133, 0, 77, 0, - 112, 0, 0, 0, 0, 0, 136, 137, 0, 134, - 0, 193, 130, 129, 111, 168 + 0, 0, 0, 0, 0, 185, 189, 0, 0, 0, + 159, 160, 0, 0, 0, 0, 0, 141, 0, 0, + 151, 0, 181, 0, 154, 101, 100, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 105, 56, 0, + 0, 0, 91, 92, 0, 0, 0, 99, 94, 86, + 89, 93, 90, 95, 0, 97, 98, 0, 122, 0, + 0, 116, 0, 113, 0, 169, 0, 0, 166, 172, + 0, 167, 174, 0, 176, 178, 183, 0, 0, 63, + 69, 0, 0, 0, 54, 56, 47, 0, 45, 44, + 72, 7, 8, 11, 12, 13, 10, 9, 15, 14, + 16, 18, 17, 19, 32, 33, 34, 35, 36, 37, + 20, 21, 22, 23, 24, 25, 26, 29, 27, 28, + 30, 31, 0, 71, 57, 0, 0, 188, 191, 110, + 0, 0, 143, 50, 0, 142, 0, 49, 152, 0, + 149, 78, 0, 82, 83, 0, 0, 0, 0, 81, + 0, 0, 0, 139, 138, 88, 85, 84, 79, 87, + 102, 104, 96, 0, 0, 0, 0, 117, 121, 170, + 0, 165, 0, 175, 55, 5, 106, 0, 43, 0, + 53, 192, 0, 186, 187, 0, 108, 0, 140, 180, + 126, 0, 0, 76, 0, 80, 0, 0, 123, 0, + 0, 115, 0, 0, 163, 46, 0, 190, 0, 0, + 0, 0, 132, 0, 0, 0, 135, 0, 124, 125, + 114, 173, 168, 0, 194, 109, 146, 127, 128, 0, + 131, 133, 0, 77, 0, 112, 0, 0, 0, 0, + 136, 137, 0, 134, 193, 130, 129, 111 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -230, 0, -3, -230, 3, -230, -230, -230, 68, -76, - -230, -66, -230, -230, 225, -230, -230, -230, -230, -213, - 122, -92, 4, -141, -230, -54, 147, -32, 104, -224, - -88, -230, -230, -82, -230, -230, -102, -230, -12, -230, - 415, 279, -75, 314, -230, -230, -217, -230, -230, -229, - 9, -230, 186, -1, 10, 13, -230, -207, 14, -68, - -230, 5, -230 + -225, 0, -3, -225, 4, -225, -225, -225, 133, 6, + -225, -66, -225, -225, 287, -225, -225, -225, -225, -216, + -30, -84, 5, -56, -225, 24, 218, -43, 161, -224, + -19, -225, -225, -20, -225, -225, -36, -225, -17, -225, + 439, 427, -62, 385, -225, -225, -65, 23, -225, -46, + 10, -225, 251, 66, 13, 14, -225, -120, 16, 1, + -225, -23, -225 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 81, 13, 82, 14, 83, 84, 85, 268, 269, - 105, 106, 86, 87, 117, 225, 226, 227, 228, 229, - 230, 149, 15, 421, 244, 245, 118, 270, 242, 120, - 232, 233, 396, 397, 234, 335, 336, 235, 49, 50, - 51, 16, 17, 18, 89, 126, 127, 132, 122, 123, - 19, 133, 134, 206, 20, 21, 189, 190, 22, 38, - 23, 24, 25 + 0, 87, 14, 88, 15, 89, 90, 91, 276, 277, + 111, 112, 92, 93, 123, 232, 233, 234, 235, 236, + 237, 156, 16, 426, 251, 252, 124, 278, 249, 126, + 239, 240, 402, 403, 241, 343, 344, 242, 53, 54, + 55, 17, 18, 19, 95, 132, 133, 20, 128, 129, + 21, 140, 141, 213, 22, 23, 196, 197, 24, 42, + 25, 26, 27 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -860,472 +860,474 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 12, 26, 192, 147, 12, 34, 35, 27, 28, 39, - 40, 41, 48, 30, 31, 342, 345, 32, 33, 37, - 351, 2, 119, 12, 186, 199, 115, 91, 56, 2, - 95, 2, 42, 92, 353, 48, 2, 37, 43, 111, - 211, 333, 48, 113, 48, 48, 104, 112, 2, 2, - 42, 151, 36, 61, 408, 62, 43, 113, 113, 152, - 52, 121, 124, 130, 53, 312, 193, 54, 194, 136, - 2, 42, 98, 55, 128, 2, 42, 43, 144, 148, - 48, 128, 43, 354, 246, 355, 184, 185, 191, 200, - 104, 200, 48, 188, 148, 57, 93, 201, 102, 201, - 365, 47, 367, 48, 48, 129, 103, 2, 42, 48, - 222, 48, 48, 221, 43, 90, 223, 231, 255, 47, - 58, 48, 236, 237, 48, 386, 238, 239, 253, 313, - 48, 333, 315, 130, 59, 385, 319, 334, 387, 60, - 47, 113, 90, 63, 48, 47, 198, 2, 42, 100, - 94, 267, 48, 142, 43, 143, 2, 42, 403, 2, - 42, 185, 202, 43, 247, 147, 43, 196, 249, 197, - 250, 359, 114, 111, 251, 252, 256, 47, 258, 260, - 262, 112, 263, 12, 48, 306, 332, 307, 304, 264, - 308, 154, 155, 156, 157, 158, 48, 48, 104, 316, - 309, 48, 104, 310, 48, 430, -214, 1, 314, 321, - 323, 432, 2, 322, 325, 267, 3, 47, 326, 338, - 339, 48, 341, 317, 343, 222, 47, 344, 221, 47, - 349, 223, 231, 348, 352, 358, 356, 236, 237, 362, - 144, 238, 239, 347, 363, 364, 370, 48, 375, 121, - 371, 124, 360, 184, 185, 4, 5, 377, 6, 7, - 378, 381, 88, 148, 383, 267, 401, 48, 97, 382, - 391, 390, 110, 392, 8, 9, 10, 11, -217, 1, - 394, -214, 395, 328, 2, 419, 389, 434, 3, 405, - 407, 406, 411, 135, 384, 137, 138, 139, 140, 141, - 274, 2, 42, 145, 416, 422, 413, 188, 43, 188, - 431, 435, 368, 311, 415, 324, 246, 427, 29, 257, - 372, 48, 409, 0, 0, 108, 0, 4, 5, 0, - 6, 7, 0, 0, 380, 0, 0, 0, 224, 330, - 241, 125, 131, 0, 0, 0, 8, 9, 10, 11, - 0, 404, 124, 0, 121, 124, 0, 146, 0, 0, - 0, 196, 267, 197, 346, 0, 0, 259, 0, 108, - 48, 47, 0, 0, 0, 0, 0, 0, 273, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 12, 2, - 42, 0, 131, 423, 337, 0, 43, 0, 2, 42, - 0, 222, 124, 0, 221, 43, 0, 223, 231, 0, - 271, 0, 0, 236, 237, 369, 241, 238, 239, 327, - 0, 329, 0, 0, 0, 0, 373, 154, 155, 156, - 64, 376, 0, 224, 0, 2, 42, 96, 0, 99, - 101, 107, 43, 0, 0, 145, 0, 0, 0, 44, - 0, 45, 0, 0, 0, 151, 0, 108, 44, 47, - 45, 108, 388, 152, 151, 0, 0, 0, 47, 0, - 140, 0, 152, 0, 271, 150, 0, 0, 0, 0, - 0, 400, 0, 1, 402, 107, 0, 187, 2, 184, - 185, 0, 3, 2, 410, 196, 412, 197, 195, 146, - 0, 151, 0, 0, 203, 47, 205, 207, 0, 152, - 125, 0, 0, 366, 0, 0, 248, 0, 0, 0, - 0, 426, 0, 429, 361, 0, 0, 433, 0, 0, - 0, 4, 5, 0, 6, 7, 0, 5, 379, 6, - 7, 0, 2, 42, 0, 0, 254, 272, 0, 43, - 8, 9, 10, 11, 0, 0, 9, 10, 11, 0, - 0, 0, 0, 0, 0, 65, 66, 67, 2, 68, - 0, 69, 0, 0, 70, 0, 71, 0, 0, 305, - 398, 72, 399, 0, 0, 73, 0, 0, 0, 74, - 0, 99, 101, 107, 2, 42, 318, 107, 0, 320, - 414, 43, 196, 0, 197, 0, 420, 0, 90, 75, - 0, 125, 47, 0, 125, 0, 76, 0, 77, 115, - 0, 271, 425, 0, 0, 0, 0, 0, 0, 224, - 0, 0, 0, 420, 78, 0, 116, 0, 79, 0, - 80, 243, 350, 0, 208, 0, 65, 66, 67, 2, - 68, 0, 69, 209, 44, 70, 45, 71, 0, 0, - 46, 0, 72, 0, 47, 0, 73, 0, 0, 0, - 74, 0, 0, 154, 155, 156, 157, 158, 0, 160, - 161, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 171, 172, 5, 0, 6, 7, 76, 210, 77, - 211, 0, 212, 213, 214, -103, 215, 216, 217, 0, - 218, 219, 0, 10, 11, 78, 205, 113, -103, 79, - 208, 80, 65, 66, 67, 2, 68, 0, 69, 209, - 0, 70, 0, 71, 0, 184, 185, 0, 72, 0, - 0, 0, 73, 0, 0, 0, 74, 0, 0, 154, - 155, 156, 157, 158, 0, 160, 161, 162, 0, 0, - 0, 165, 166, 167, 168, 393, 75, 171, 172, 5, - 0, 6, 7, 76, 210, 77, 211, 0, 212, 213, - 214, 0, 215, 216, 217, 0, 218, 219, 0, 10, - 11, 78, 0, 113, 220, 79, 208, 80, 65, 66, - 67, 2, 68, 0, 69, 209, 0, 70, 0, 71, - 0, 184, 185, 0, 72, 0, 0, 0, 73, 0, - 0, 0, 74, 0, 0, 154, 155, 156, 157, 158, - 0, 160, 161, 162, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 171, 172, 5, 0, 6, 7, 76, - 210, 77, 211, 0, 212, 213, 214, 0, 215, 216, - 217, 0, 218, 219, 0, 10, 11, 78, 0, 113, - 0, 79, 0, 80, 65, 66, 67, 2, 68, 0, - 69, 0, 0, 70, 0, 71, 0, 184, 185, 0, - 72, 0, 0, 0, 265, 0, 0, 0, 74, 0, - 0, 0, 0, 0, 0, 0, 65, 66, 67, 2, - 68, 0, 69, 331, 0, 70, 0, 71, 75, 0, - 0, 0, 72, 0, 0, 76, 73, 77, 115, 0, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 78, 266, 116, 0, 79, 0, 80, - 75, 0, 65, 66, 67, 2, 68, 76, 69, 77, - 115, 70, 0, 71, 0, 0, 0, 0, 72, 0, - 0, 0, 73, 0, 0, 78, 74, 116, 0, 79, - 0, 80, 0, 0, 65, 66, 67, 2, 68, 0, - 69, 0, 0, 70, 0, 71, 75, 0, 0, 0, - 72, 0, 0, 76, 265, 77, 115, 0, 74, 0, + 13, 28, 60, 135, 13, 37, 38, 39, 29, 30, + 43, 44, 45, 52, 33, 125, 199, 34, 35, 350, + 36, 134, 154, 353, 120, 13, 97, 32, 2, 101, + 193, 2, 46, 2, 117, 2, 2, 46, 47, 52, + 206, 121, 118, 47, 2, 46, 52, 40, 52, 52, + 110, 47, 2, 46, 104, 2, 46, 2, 119, 47, + 41, 200, 47, 201, 320, 127, 130, 127, 130, 137, + 56, 2, 46, 106, 57, 143, 2, 46, 47, 253, + 6, 345, 98, 47, 151, 155, 52, 2, 46, 59, + 41, 203, 139, 204, 47, 198, 110, 117, 52, 195, + 155, 51, 6, 108, 207, 118, 51, 413, 58, 52, + 52, 109, 208, 61, 51, 52, 229, 52, 52, 228, + 263, 96, 51, 230, 238, 51, 136, 52, 321, 243, + 52, 218, 244, 245, 62, 246, 48, 52, 49, 323, + 137, 51, 158, 327, 63, 99, 51, 48, 119, 49, + 159, 52, 341, 158, 64, 2, 46, 51, 275, 52, + 341, 159, 47, 139, 158, 409, 342, 312, 319, 119, + 207, 65, 159, 66, 2, 46, 2, 46, 208, 96, + 262, 47, 340, 47, 67, 154, 68, 366, 191, 192, + 13, 52, 314, 361, 338, 372, 119, 374, 100, 149, + 2, 46, 150, 52, 52, 110, 324, 47, 52, 110, + 359, 52, 435, 205, -216, 1, 192, 331, 254, 354, + 2, 209, 275, 69, 3, 51, 2, 46, 52, 256, + 257, 258, 229, 47, 259, 228, 203, 260, 204, 230, + 238, 325, 96, 264, 51, 243, 51, 151, 244, 245, + 355, 246, 2, 46, 52, 367, 127, 261, 130, 47, + 203, 266, 204, 4, 5, 6, 7, 8, 268, 270, + 51, 155, 271, 275, 272, 52, 315, 316, 317, 318, + 322, 330, 9, 10, 11, 12, 203, 329, 204, -216, + 333, 376, 158, 334, 346, 392, 51, 393, 347, 349, + 159, 351, 380, 352, 356, 363, 357, 383, 360, 362, + 365, 370, 48, 253, 49, 195, 369, 195, 50, 371, + 375, 377, 51, 378, 384, 382, 385, 388, 94, 52, + 161, 162, 163, 389, 103, 1, 390, 394, 116, 396, + 2, 397, 387, 398, 3, 416, 407, 410, 161, 162, + 163, 164, 165, 401, 400, 336, 406, 411, 424, 408, + 130, 142, 130, 144, 145, 146, 147, 148, 415, 275, + 417, 152, 412, 421, 434, 395, 437, 52, 282, 332, + 391, 418, 420, 4, 5, 6, 7, 8, 431, 31, + 427, 265, 191, 192, 430, 379, 433, 414, 0, 436, + 0, 0, 9, 10, 11, 12, 231, 0, 248, 0, + 191, 192, 0, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 228, 0, + 0, 0, 230, 238, 0, 2, 267, 0, 243, 0, + 0, 244, 245, 0, 246, 0, 0, 281, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 114, 70, 5, + 6, 7, 8, 0, 0, 102, 0, 105, 107, 113, + 0, 0, 0, 131, 0, 131, 138, 0, 10, 11, + 12, 0, 0, 0, 0, 248, 0, 0, 335, 0, + 337, 153, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 231, 114, 0, 157, 0, 71, 72, 73, + 2, 74, 0, 75, 152, 113, 76, 194, 77, 0, + 0, 0, 0, 78, 0, 0, 0, 79, 202, 0, + 0, 80, 0, 0, 210, 0, 212, 214, 0, 0, + 147, 0, 0, 0, 0, 0, 255, 138, 0, 0, + 0, 81, 161, 162, 163, 164, 165, 0, 82, 168, + 83, 0, 0, 0, 0, 279, 0, 0, 0, 0, + 178, 179, 0, 0, 0, 0, 84, 0, 280, 0, + 85, 115, 86, 373, 0, 0, 0, 71, 72, 73, + 2, 74, 0, 75, 0, 0, 76, 0, 77, 0, + 0, 0, 0, 78, 0, 0, 0, 79, 386, 0, + 313, 80, 114, 0, 191, 192, 114, 0, 0, 0, + 0, 0, 105, 107, 113, 0, 0, 326, 113, 279, + 328, 81, 0, -219, 1, 0, 0, 0, 82, 2, + 83, 121, 0, 3, 0, 0, 0, 0, 0, 404, + 0, 405, 0, 0, 153, 0, 84, 0, 122, 0, + 85, 0, 86, 250, 0, 131, 0, 0, 419, 0, + 0, 0, 0, 358, 425, 0, 0, 0, 0, 0, + 368, 0, 4, 5, 6, 7, 8, 0, 0, 429, + 0, 0, 0, 0, 0, 231, 0, 0, 0, 425, + 0, 9, 10, 11, 12, 0, 0, 0, 161, 162, + 163, 164, 165, 0, 167, 168, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 178, 179, 215, 0, + 71, 72, 73, 2, 74, 0, 75, 216, 0, 76, + 0, 77, 0, 0, 0, 0, 78, 0, 212, 0, + 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 131, 0, 131, + 191, 192, 0, 0, 81, 0, 279, 5, 0, 7, + 8, 82, 217, 83, 218, 0, 219, 220, 221, -103, + 222, 223, 224, 0, 225, 226, 399, 11, 12, 84, + 0, 119, -103, 85, 215, 86, 71, 72, 73, 2, + 74, 0, 75, 216, 0, 76, 0, 77, 0, 0, + 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, + 80, 0, 0, 161, 162, 163, 164, 165, 0, 167, + 168, 169, 0, 0, 0, 172, 173, 174, 175, 0, + 81, 178, 179, 5, 0, 7, 8, 82, 217, 83, + 218, 0, 219, 220, 221, 0, 222, 223, 224, 0, + 225, 226, 0, 11, 12, 84, 0, 119, 227, 85, + 215, 86, 71, 72, 73, 2, 74, 0, 75, 216, + 0, 76, 0, 77, 0, 191, 192, 0, 78, 0, + 0, 0, 79, 0, 0, 0, 80, 0, 0, 161, + 162, 163, 164, 165, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 81, 178, 179, 5, + 0, 7, 8, 82, 217, 83, 218, 0, 219, 220, + 221, 0, 222, 223, 224, 0, 225, 226, 0, 11, + 12, 84, 0, 119, 0, 85, 0, 86, 71, 72, + 73, 2, 74, 0, 75, 0, 0, 76, 0, 77, + 0, 191, 192, 0, 78, 0, 0, 0, 273, 0, + 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 71, 72, 73, 2, 74, 0, 75, 339, 0, 76, + 0, 77, 81, 0, 0, 0, 78, 0, 0, 82, + 79, 83, 121, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 84, 274, 122, + 0, 85, 0, 86, 81, 0, 71, 72, 73, 2, + 74, 82, 75, 83, 121, 76, 0, 77, 0, 0, + 0, 0, 78, 0, 0, 0, 79, 0, 0, 84, + 80, 122, 0, 85, 0, 86, 0, 0, 71, 72, + 73, 2, 74, 0, 75, 0, 0, 76, 0, 77, + 81, 0, 0, 0, 78, 0, 0, 82, 273, 83, + 121, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 122, 0, 85, + 0, 86, 81, 0, 71, 72, 73, 2, 74, 82, + 75, 83, 121, 76, 0, 77, 0, 0, 0, 0, + 78, 0, 0, 0, 79, 0, 0, 84, 80, 122, + 0, 85, 0, 86, 71, 72, 73, 2, 74, 0, + 75, 0, 0, 76, 0, 77, 0, 0, 81, 0, + 78, 0, 0, 0, 79, 82, 0, 83, 80, 0, + 71, 72, 73, 2, 74, 0, 75, 0, 0, 76, + 0, 77, 0, 84, 0, 122, 78, 85, 81, 86, + 79, 0, 0, 0, 80, 82, 0, 83, 121, 0, + 71, 72, 73, 2, 74, 0, 75, 0, 0, 76, + 0, 77, 0, 84, 81, 0, 78, 85, 0, 86, + 79, 82, 0, 83, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, + 0, 0, 0, 85, 81, 86, 0, 0, 0, 0, + 0, 82, 0, 83, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 160, 247, + 0, 0, 0, 85, 0, 86, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 0, 186, 187, 188, 189, 0, 0, 161, + 162, 163, 164, 165, 0, 167, 168, 169, 170, 0, + 0, 172, 173, 174, 175, 176, 177, 178, 179, 0, + 0, 0, 160, 0, 190, 0, 0, 0, 191, 192, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 0, 186, 187, 188, + 189, 191, 192, 161, 162, 163, 164, 165, 0, 167, + 168, 169, 0, 0, 0, 172, 173, 174, 175, 176, + 177, 178, 179, 0, 0, 0, 160, 0, 0, 0, + 0, 211, 191, 192, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 0, 186, 187, 188, 189, 191, 192, 161, 162, 163, + 164, 165, 0, 167, 168, 161, 162, 163, 164, 165, + 0, 0, 0, 0, 0, 178, 179, 0, 0, 0, + 160, 269, 348, 178, 179, 0, 191, 192, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 0, 186, 187, 188, 189, 191, + 192, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 78, 0, 116, 0, 79, 0, 80, 75, 0, - 65, 66, 67, 2, 68, 76, 69, 77, 115, 70, - 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, - 73, 0, 0, 78, 74, 116, 0, 79, 0, 80, - 0, 0, 65, 66, 67, 2, 68, 0, 69, 0, - 0, 70, 0, 71, 75, 0, 0, 0, 72, 0, - 0, 76, 73, 77, 0, 0, 74, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, - 0, 0, 0, 79, 109, 80, 75, 0, 65, 66, - 67, 2, 68, 76, 69, 77, 0, 70, 0, 71, - 0, 0, 0, 0, 72, 0, 0, 0, 73, 0, - 0, 78, 74, 116, 0, 79, 0, 80, 0, 0, - 65, 66, 67, 2, 68, 0, 69, 0, 0, 70, - 0, 71, 75, 0, 0, 0, 72, 0, 0, 76, - 73, 77, 115, 0, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, - 0, 79, 0, 80, 75, 0, 65, 66, 67, 2, - 68, 76, 69, 77, 0, 70, 0, 71, 0, 0, - 0, 0, 72, 0, 0, 0, 73, 0, 0, 78, - 74, 0, 0, 79, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, + 191, 192, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 0, 186, + 187, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 154, 155, 156, 157, 158, 0, 76, 161, 77, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, - 172, 0, 0, 0, 153, 240, 0, 0, 0, 79, - 0, 80, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 0, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 0, 179, - 180, 181, 182, 184, 185, 154, 155, 156, 157, 158, - 0, 160, 161, 162, 163, 164, 0, 165, 166, 167, - 168, 169, 170, 171, 172, 0, 0, 0, 153, 0, - 183, 0, 0, 0, 184, 185, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 0, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 0, 179, 180, 181, 182, 184, 185, 154, - 155, 156, 157, 158, 0, 160, 161, 162, 163, 0, - 0, 165, 166, 167, 168, 169, 170, 171, 172, 0, - 0, 0, 153, 0, 0, 0, 0, 204, 184, 185, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 0, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 0, 179, 180, 181, - 182, 184, 185, 154, 155, 156, 157, 158, 0, 160, - 161, 162, 0, 0, 0, 165, 166, 167, 168, 169, - 170, 171, 172, 0, 0, 0, 153, 261, 340, 0, - 0, 0, 184, 185, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 0, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 0, 179, 180, 181, 182, 184, 185, 154, 155, 156, - 157, 158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 172, 0, 0, 0, - 153, 0, 0, 0, 0, 0, 184, 185, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 0, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 0, 179, 180, 181, 182, 184, - 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 160, 364, + 0, 0, 0, 0, 191, 192, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 0, 186, 187, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 153, 357, 0, 0, 0, 0, - 184, 185, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 0, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 0, 179, - 180, 181, 182, 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, 153, 0, - 374, 0, 0, 0, 184, 185, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 0, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 0, 179, 180, 181, 182, 0, 0, 0, + 0, 0, 160, 0, 381, 0, 0, 0, 191, 192, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 0, 186, 187, 188, + 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, 160, 119, 422, + 0, 0, 191, 192, 0, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 0, 186, 187, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 153, 113, 417, 0, 0, 184, 185, - 0, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 0, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 0, 179, 180, - 181, 182, 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, 153, 0, 418, - 0, 0, 0, 184, 185, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 0, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 0, 179, 180, 181, 182, 0, 0, 0, 0, + 0, 160, 0, 423, 0, 0, 0, 191, 192, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 0, 186, 187, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 153, 0, 0, 424, 0, 0, 184, 185, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 0, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 0, 179, 180, 181, 182, + 0, 0, 0, 0, 0, 160, 0, 0, 428, 0, + 0, 191, 192, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 0, + 186, 187, 188, 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, 160, + 0, 0, 0, 0, 0, 191, 192, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 0, 186, 187, 188, 189, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, - 0, 184, 185, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 0, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, - 179, 180, 181, 182, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, - 0, 0, 0, 0, 0, 184, 185, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 0, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 179, 180, 181, 182, 0, 0, + 0, 0, 0, 160, 0, 0, 0, 0, 0, 191, + 192, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 0, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 0, 186, 187, + 188, 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, 0, 0, 0, 184, - 185 + 0, 0, 0, 191, 192 }; static const yytype_int16 yycheck[] = { - 0, 4, 94, 78, 4, 5, 6, 4, 4, 9, - 10, 11, 12, 4, 4, 228, 240, 4, 4, 57, - 249, 6, 54, 23, 90, 9, 57, 39, 23, 6, - 42, 6, 7, 11, 251, 35, 6, 57, 13, 72, - 57, 57, 42, 74, 44, 45, 46, 80, 6, 6, - 7, 72, 5, 72, 74, 74, 13, 74, 74, 80, - 10, 61, 62, 63, 10, 9, 98, 8, 100, 69, - 6, 7, 8, 10, 51, 6, 7, 13, 78, 79, - 80, 51, 13, 72, 116, 74, 78, 79, 73, 73, - 90, 73, 92, 93, 94, 0, 74, 81, 73, 81, - 307, 76, 309, 103, 104, 75, 81, 6, 7, 109, - 113, 111, 112, 113, 13, 72, 113, 113, 130, 76, - 10, 121, 113, 113, 124, 354, 113, 113, 128, 73, - 130, 57, 198, 133, 10, 352, 202, 63, 355, 10, - 76, 74, 72, 74, 144, 76, 48, 6, 7, 8, - 72, 151, 152, 72, 13, 72, 6, 7, 382, 6, - 7, 79, 48, 13, 78, 240, 13, 66, 48, 68, - 73, 263, 50, 72, 10, 75, 10, 76, 75, 5, - 73, 80, 48, 183, 184, 185, 218, 74, 183, 77, - 8, 16, 17, 18, 19, 20, 196, 197, 198, 199, - 48, 201, 202, 75, 204, 422, 0, 1, 73, 48, - 210, 424, 6, 73, 10, 215, 10, 76, 10, 10, - 10, 221, 10, 73, 75, 228, 76, 10, 228, 76, - 75, 228, 228, 48, 74, 73, 10, 228, 228, 48, - 240, 228, 228, 243, 73, 75, 81, 247, 10, 249, - 73, 251, 264, 78, 79, 49, 50, 64, 52, 53, - 10, 73, 37, 263, 8, 265, 11, 267, 43, 58, - 75, 58, 47, 73, 68, 69, 70, 71, 0, 1, - 58, 75, 62, 215, 6, 58, 362, 428, 10, 75, - 75, 73, 73, 68, 348, 70, 71, 72, 73, 74, - 153, 6, 7, 78, 75, 74, 394, 307, 13, 309, - 75, 75, 312, 191, 396, 211, 348, 419, 4, 133, - 321, 321, 390, -1, -1, 46, -1, 49, 50, -1, - 52, 53, -1, -1, 334, -1, -1, -1, 113, 217, - 115, 62, 63, -1, -1, -1, 68, 69, 70, 71, - -1, 383, 352, -1, 354, 355, -1, 78, -1, -1, - -1, 66, 362, 68, 242, -1, -1, 142, -1, 90, - 370, 76, -1, -1, -1, -1, -1, -1, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 408, 6, - 7, -1, 133, 408, 11, -1, 13, -1, 6, 7, - -1, 424, 422, -1, 424, 13, -1, 424, 424, -1, - 151, -1, -1, 424, 424, 313, 211, 424, 424, 214, - -1, 216, -1, -1, -1, -1, 324, 16, 17, 18, - 35, 329, -1, 228, -1, 6, 7, 42, -1, 44, - 45, 46, 13, -1, -1, 240, -1, -1, -1, 66, - -1, 68, -1, -1, -1, 72, -1, 198, 66, 76, - 68, 202, 360, 80, 72, -1, -1, -1, 76, -1, - 265, -1, 80, -1, 215, 80, -1, -1, -1, -1, - -1, 379, -1, 1, 382, 90, -1, 92, 6, 78, - 79, -1, 10, 6, 392, 66, 394, 68, 103, 240, - -1, 72, -1, -1, 109, 76, 111, 112, -1, 80, - 251, -1, -1, 308, -1, -1, 121, -1, -1, -1, - -1, 419, -1, 421, 265, -1, -1, 425, -1, -1, - -1, 49, 50, -1, 52, 53, -1, 50, 333, 52, - 53, -1, 6, 7, -1, -1, 10, 152, -1, 13, - 68, 69, 70, 71, -1, -1, 69, 70, 71, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, - -1, 9, -1, -1, 12, -1, 14, -1, -1, 184, - 375, 19, 377, -1, -1, 23, -1, -1, -1, 27, - -1, 196, 197, 198, 6, 7, 201, 202, -1, 204, - 395, 13, 66, -1, 68, -1, 401, -1, 72, 47, - -1, 352, 76, -1, 355, -1, 54, -1, 56, 57, - -1, 362, 417, -1, -1, -1, -1, -1, -1, 424, - -1, -1, -1, 428, 72, -1, 74, -1, 76, -1, - 78, 79, 247, -1, 1, -1, 3, 4, 5, 6, - 7, -1, 9, 10, 66, 12, 68, 14, -1, -1, - 72, -1, 19, -1, 76, -1, 23, -1, -1, -1, + 0, 4, 25, 68, 4, 5, 6, 7, 4, 4, + 10, 11, 12, 13, 4, 58, 100, 4, 4, 235, + 4, 67, 84, 247, 54, 25, 43, 4, 6, 46, + 96, 6, 7, 6, 72, 6, 6, 7, 13, 39, + 9, 57, 80, 13, 6, 7, 46, 5, 48, 49, + 50, 13, 6, 7, 8, 6, 7, 6, 74, 13, + 57, 104, 13, 106, 9, 65, 66, 67, 68, 69, + 10, 6, 7, 8, 10, 75, 6, 7, 13, 122, + 51, 11, 11, 13, 84, 85, 86, 6, 7, 10, + 57, 66, 69, 68, 13, 73, 96, 72, 98, 99, + 100, 76, 51, 73, 73, 80, 76, 74, 8, 109, + 110, 81, 81, 0, 76, 115, 119, 117, 118, 119, + 137, 72, 76, 119, 119, 76, 75, 127, 73, 119, + 130, 57, 119, 119, 10, 119, 66, 137, 68, 205, + 140, 76, 72, 209, 10, 74, 76, 66, 74, 68, + 80, 151, 57, 72, 10, 6, 7, 76, 158, 159, + 57, 80, 13, 140, 72, 389, 63, 190, 198, 74, + 73, 72, 80, 74, 6, 7, 6, 7, 81, 72, + 10, 13, 225, 13, 72, 247, 74, 271, 78, 79, + 190, 191, 192, 258, 224, 315, 74, 317, 72, 72, + 6, 7, 72, 203, 204, 205, 206, 13, 208, 209, + 256, 211, 428, 48, 0, 1, 79, 217, 78, 249, + 6, 48, 222, 74, 10, 76, 6, 7, 228, 48, + 73, 10, 235, 13, 75, 235, 66, 73, 68, 235, + 235, 73, 72, 10, 76, 235, 76, 247, 235, 235, + 250, 235, 6, 7, 254, 272, 256, 75, 258, 13, + 66, 75, 68, 49, 50, 51, 52, 53, 5, 73, + 76, 271, 48, 273, 77, 275, 74, 8, 48, 75, + 73, 73, 68, 69, 70, 71, 66, 48, 68, 75, + 10, 321, 72, 10, 10, 360, 76, 362, 10, 10, + 80, 75, 332, 10, 48, 10, 75, 337, 74, 74, + 73, 73, 66, 356, 68, 315, 48, 317, 72, 75, + 320, 81, 76, 73, 64, 10, 10, 73, 41, 329, + 16, 17, 18, 58, 47, 1, 8, 367, 51, 58, + 6, 75, 342, 73, 10, 73, 11, 390, 16, 17, + 18, 19, 20, 62, 58, 222, 386, 75, 58, 389, + 360, 74, 362, 76, 77, 78, 79, 80, 398, 369, + 400, 84, 75, 75, 75, 369, 432, 377, 160, 218, + 356, 400, 402, 49, 50, 51, 52, 53, 424, 4, + 413, 140, 78, 79, 424, 329, 426, 396, -1, 429, + -1, -1, 68, 69, 70, 71, 119, -1, 121, -1, + 78, 79, -1, 413, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 428, -1, -1, 428, -1, + -1, -1, 428, 428, -1, 6, 149, -1, 428, -1, + -1, 428, 428, -1, 428, -1, -1, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 50, 39, 50, + 51, 52, 53, -1, -1, 46, -1, 48, 49, 50, + -1, -1, -1, 66, -1, 68, 69, -1, 69, 70, + 71, -1, -1, -1, -1, 218, -1, -1, 221, -1, + 223, 84, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 235, 96, -1, 86, -1, 3, 4, 5, + 6, 7, -1, 9, 247, 96, 12, 98, 14, -1, + -1, -1, -1, 19, -1, -1, -1, 23, 109, -1, + -1, 27, -1, -1, 115, -1, 117, 118, -1, -1, + 273, -1, -1, -1, -1, -1, 127, 140, -1, -1, + -1, 47, 16, 17, 18, 19, 20, -1, 54, 23, + 56, -1, -1, -1, -1, 158, -1, -1, -1, -1, + 34, 35, -1, -1, -1, -1, 72, -1, 159, -1, + 76, 77, 78, 316, -1, -1, -1, 3, 4, 5, + 6, 7, -1, 9, -1, -1, 12, -1, 14, -1, + -1, -1, -1, 19, -1, -1, -1, 23, 341, -1, + 191, 27, 205, -1, 78, 79, 209, -1, -1, -1, + -1, -1, 203, 204, 205, -1, -1, 208, 209, 222, + 211, 47, -1, 0, 1, -1, -1, -1, 54, 6, + 56, 57, -1, 10, -1, -1, -1, -1, -1, 382, + -1, 384, -1, -1, 247, -1, 72, -1, 74, -1, + 76, -1, 78, 79, -1, 258, -1, -1, 401, -1, + -1, -1, -1, 254, 407, -1, -1, -1, -1, -1, + 273, -1, 49, 50, 51, 52, 53, -1, -1, 422, + -1, -1, -1, -1, -1, 428, -1, -1, -1, 432, + -1, 68, 69, 70, 71, -1, -1, -1, 16, 17, + 18, 19, 20, -1, 22, 23, 24, 25, 26, -1, + 28, 29, 30, 31, 32, 33, 34, 35, 1, -1, + 3, 4, 5, 6, 7, -1, 9, 10, -1, 12, + -1, 14, -1, -1, -1, -1, 19, -1, 329, -1, + 23, -1, -1, -1, 27, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 360, -1, 362, + 78, 79, -1, -1, 47, -1, 369, 50, -1, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, -1, 67, 68, 377, 70, 71, 72, + -1, 74, 75, 76, 1, 78, 3, 4, 5, 6, + 7, -1, 9, 10, -1, 12, -1, 14, -1, -1, + -1, -1, 19, -1, -1, -1, 23, -1, -1, -1, 27, -1, -1, 16, 17, 18, 19, 20, -1, 22, - 23, 422, -1, -1, -1, -1, -1, -1, -1, -1, + 23, 24, -1, -1, -1, 28, 29, 30, 31, -1, 47, 34, 35, 50, -1, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - 67, 68, -1, 70, 71, 72, 321, 74, 75, 76, + 57, -1, 59, 60, 61, -1, 63, 64, 65, -1, + 67, 68, -1, 70, 71, 72, -1, 74, 75, 76, 1, 78, 3, 4, 5, 6, 7, -1, 9, 10, -1, 12, -1, 14, -1, 78, 79, -1, 19, -1, -1, -1, 23, -1, -1, -1, 27, -1, -1, 16, 17, 18, 19, 20, -1, 22, 23, 24, -1, -1, - -1, 28, 29, 30, 31, 370, 47, 34, 35, 50, + -1, -1, -1, -1, -1, -1, 47, 34, 35, 50, -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, -1, 63, 64, 65, -1, 67, 68, -1, 70, - 71, 72, -1, 74, 75, 76, 1, 78, 3, 4, - 5, 6, 7, -1, 9, 10, -1, 12, -1, 14, + 71, 72, -1, 74, -1, 76, -1, 78, 3, 4, + 5, 6, 7, -1, 9, -1, -1, 12, -1, 14, -1, 78, 79, -1, 19, -1, -1, -1, 23, -1, - -1, -1, 27, -1, -1, 16, 17, 18, 19, 20, - -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, - -1, -1, 47, 34, 35, 50, -1, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, -1, 63, 64, - 65, -1, 67, 68, -1, 70, 71, 72, -1, 74, - -1, 76, -1, 78, 3, 4, 5, 6, 7, -1, - 9, -1, -1, 12, -1, 14, -1, 78, 79, -1, - 19, -1, -1, -1, 23, -1, -1, -1, 27, -1, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, -1, 9, 10, -1, 12, -1, 14, 47, -1, - -1, -1, 19, -1, -1, 54, 23, 56, 57, -1, - 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, - 47, -1, 3, 4, 5, 6, 7, 54, 9, 56, - 57, 12, -1, 14, -1, -1, -1, -1, 19, -1, - -1, -1, 23, -1, -1, 72, 27, 74, -1, 76, - -1, 78, -1, -1, 3, 4, 5, 6, 7, -1, - 9, -1, -1, 12, -1, 14, 47, -1, -1, -1, - 19, -1, -1, 54, 23, 56, 57, -1, 27, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 72, -1, 74, -1, 76, -1, 78, 47, -1, - 3, 4, 5, 6, 7, 54, 9, 56, 57, 12, - -1, 14, -1, -1, -1, -1, 19, -1, -1, -1, - 23, -1, -1, 72, 27, 74, -1, 76, -1, 78, - -1, -1, 3, 4, 5, 6, 7, -1, 9, -1, - -1, 12, -1, 14, 47, -1, -1, -1, 19, -1, - -1, 54, 23, 56, -1, -1, 27, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, - -1, -1, -1, 76, 77, 78, 47, -1, 3, 4, - 5, 6, 7, 54, 9, 56, -1, 12, -1, 14, - -1, -1, -1, -1, 19, -1, -1, -1, 23, -1, - -1, 72, 27, 74, -1, 76, -1, 78, -1, -1, - 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, + -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, + 3, 4, 5, 6, 7, -1, 9, 10, -1, 12, -1, 14, 47, -1, -1, -1, 19, -1, -1, 54, 23, 56, 57, -1, 27, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 72, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 47, -1, 3, 4, 5, 6, - 7, 54, 9, 56, -1, 12, -1, 14, -1, -1, + 7, 54, 9, 56, 57, 12, -1, 14, -1, -1, -1, -1, 19, -1, -1, -1, 23, -1, -1, 72, - 27, -1, -1, 76, -1, 78, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 47, 16, 17, 18, 19, 20, -1, 54, 23, 56, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, - 35, -1, -1, -1, 8, 72, -1, -1, -1, 76, - -1, 78, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, - 44, 45, 46, 78, 79, 16, 17, 18, 19, 20, - -1, 22, 23, 24, 25, 26, -1, 28, 29, 30, - 31, 32, 33, 34, 35, -1, -1, -1, 8, -1, - 74, -1, -1, -1, 78, 79, 16, 17, 18, 19, + 27, 74, -1, 76, -1, 78, -1, -1, 3, 4, + 5, 6, 7, -1, 9, -1, -1, 12, -1, 14, + 47, -1, -1, -1, 19, -1, -1, 54, 23, 56, + 57, -1, 27, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 72, -1, 74, -1, 76, + -1, 78, 47, -1, 3, 4, 5, 6, 7, 54, + 9, 56, 57, 12, -1, 14, -1, -1, -1, -1, + 19, -1, -1, -1, 23, -1, -1, 72, 27, 74, + -1, 76, -1, 78, 3, 4, 5, 6, 7, -1, + 9, -1, -1, 12, -1, 14, -1, -1, 47, -1, + 19, -1, -1, -1, 23, 54, -1, 56, 27, -1, + 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, + -1, 14, -1, 72, -1, 74, 19, 76, 47, 78, + 23, -1, -1, -1, 27, 54, -1, 56, 57, -1, + 3, 4, 5, 6, 7, -1, 9, -1, -1, 12, + -1, 14, -1, 72, 47, -1, 19, 76, -1, 78, + 23, 54, -1, 56, 27, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, + -1, -1, -1, 76, 47, 78, -1, -1, -1, -1, + -1, 54, -1, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 72, + -1, -1, -1, 76, -1, 78, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, -1, 43, 44, 45, 46, 78, 79, 16, + 40, 41, -1, 43, 44, 45, 46, -1, -1, 16, 17, 18, 19, 20, -1, 22, 23, 24, 25, -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, -1, - -1, -1, 8, -1, -1, -1, -1, 77, 78, 79, + -1, -1, 8, -1, 74, -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, 78, 79, 16, 17, 18, 19, 20, -1, 22, 23, 24, -1, -1, -1, 28, 29, 30, 31, 32, - 33, 34, 35, -1, -1, -1, 8, 73, 10, -1, - -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, + 33, 34, 35, -1, -1, -1, 8, -1, -1, -1, + -1, 77, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, 78, 79, 16, 17, 18, - 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, + 19, 20, -1, 22, 23, 16, 17, 18, 19, 20, -1, -1, -1, -1, -1, 34, 35, -1, -1, -1, - 8, -1, -1, -1, -1, -1, 78, 79, 16, 17, + 8, 73, 10, 34, 35, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, 78, - 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 79, -1, -1, -1, -1, -1, -1, 78, 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 8, 73, -1, -1, -1, -1, + -1, -1, -1, -1, 8, -1, -1, -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, -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, 8, -1, - 74, -1, -1, -1, 78, 79, 16, 17, 18, 19, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 73, + -1, -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, -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, 8, 74, 10, -1, -1, 78, 79, - -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, - 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 8, -1, 74, -1, -1, -1, 78, 79, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, + 46, -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, 8, -1, 10, - -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, + -1, -1, -1, -1, -1, -1, -1, 8, 74, 10, + -1, -1, 78, 79, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, -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, 8, -1, -1, 11, -1, -1, 78, 79, 16, + -1, 8, -1, 10, -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, 45, 46, -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, 8, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 8, -1, -1, 11, -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -1, - 43, 44, 45, 46, -1, 48, -1, -1, -1, -1, + 43, 44, 45, 46, -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, 8, -1, -1, -1, -1, -1, 78, 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, -1, 43, 44, 45, 46, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, -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, 78, - 79 + -1, -1, -1, 8, -1, -1, -1, -1, -1, 78, + 79, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, -1, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, -1, 43, 44, + 45, 46, -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, 78, 79 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 1, 6, 10, 49, 50, 52, 53, 68, 69, - 70, 71, 83, 84, 86, 104, 123, 124, 125, 132, - 136, 137, 140, 142, 143, 144, 84, 86, 104, 125, - 132, 136, 137, 140, 83, 83, 5, 57, 141, 83, - 83, 83, 7, 13, 66, 68, 72, 76, 83, 120, - 121, 122, 10, 10, 8, 10, 143, 0, 10, 10, - 10, 72, 74, 74, 122, 3, 4, 5, 7, 9, - 12, 14, 19, 23, 27, 47, 54, 56, 72, 76, - 78, 83, 85, 87, 88, 89, 94, 95, 96, 126, - 72, 120, 11, 74, 72, 120, 122, 96, 8, 122, - 8, 122, 73, 81, 83, 92, 93, 122, 123, 77, - 96, 72, 80, 74, 102, 57, 74, 96, 108, 109, - 111, 83, 130, 131, 83, 123, 127, 128, 51, 75, - 83, 123, 129, 133, 134, 96, 83, 96, 96, 96, - 96, 96, 72, 72, 83, 96, 123, 124, 83, 103, - 122, 72, 80, 8, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, - 44, 45, 46, 74, 78, 79, 93, 122, 83, 138, - 139, 73, 103, 109, 109, 122, 66, 68, 48, 9, - 73, 81, 48, 122, 77, 122, 135, 122, 1, 10, - 55, 57, 59, 60, 61, 63, 64, 65, 67, 68, - 75, 83, 84, 86, 96, 97, 98, 99, 100, 101, - 102, 104, 112, 113, 116, 119, 132, 136, 137, 140, - 72, 96, 110, 79, 106, 107, 109, 78, 122, 48, - 73, 10, 75, 83, 10, 120, 10, 134, 75, 96, - 5, 73, 73, 48, 77, 23, 73, 83, 90, 91, - 109, 123, 122, 96, 108, 96, 96, 96, 96, 96, + 0, 1, 6, 10, 49, 50, 51, 52, 53, 68, + 69, 70, 71, 83, 84, 86, 104, 123, 124, 125, + 129, 132, 136, 137, 140, 142, 143, 144, 84, 86, + 104, 125, 129, 132, 136, 137, 140, 83, 83, 83, + 5, 57, 141, 83, 83, 83, 7, 13, 66, 68, + 72, 76, 83, 120, 121, 122, 10, 10, 8, 10, + 143, 0, 10, 10, 10, 72, 74, 72, 74, 74, + 122, 3, 4, 5, 7, 9, 12, 14, 19, 23, + 27, 47, 54, 56, 72, 76, 78, 83, 85, 87, + 88, 89, 94, 95, 96, 126, 72, 120, 11, 74, + 72, 120, 122, 96, 8, 122, 8, 122, 73, 81, + 83, 92, 93, 122, 123, 77, 96, 72, 80, 74, + 102, 57, 74, 96, 108, 109, 111, 83, 130, 131, + 83, 123, 127, 128, 131, 128, 75, 83, 123, 129, + 133, 134, 96, 83, 96, 96, 96, 96, 96, 72, + 72, 83, 96, 123, 124, 83, 103, 122, 72, 80, + 8, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, + 74, 78, 79, 93, 122, 83, 138, 139, 73, 103, + 109, 109, 122, 66, 68, 48, 9, 73, 81, 48, + 122, 77, 122, 135, 122, 1, 10, 55, 57, 59, + 60, 61, 63, 64, 65, 67, 68, 75, 83, 84, + 86, 96, 97, 98, 99, 100, 101, 102, 104, 112, + 113, 116, 119, 132, 136, 137, 140, 72, 96, 110, + 79, 106, 107, 109, 78, 122, 48, 73, 10, 75, + 73, 75, 10, 120, 10, 134, 75, 96, 5, 73, + 73, 48, 77, 23, 73, 83, 90, 91, 109, 123, + 122, 96, 108, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 143, 122, 83, 74, 8, 48, - 75, 102, 9, 73, 73, 93, 83, 73, 122, 93, - 122, 48, 73, 83, 110, 10, 10, 96, 90, 96, - 102, 10, 109, 57, 63, 117, 118, 11, 10, 10, - 10, 10, 101, 75, 10, 111, 102, 83, 48, 75, - 122, 131, 74, 128, 72, 74, 10, 73, 73, 103, - 120, 123, 48, 73, 75, 139, 96, 139, 83, 102, - 81, 73, 135, 102, 74, 10, 102, 64, 10, 96, - 83, 73, 58, 8, 107, 128, 131, 128, 102, 91, - 58, 75, 73, 122, 58, 62, 114, 115, 96, 96, - 102, 11, 102, 111, 109, 75, 73, 75, 74, 141, - 102, 73, 102, 112, 96, 115, 75, 10, 10, 58, - 96, 105, 74, 143, 11, 96, 102, 118, 48, 102, - 128, 75, 101, 102, 105, 75 + 96, 96, 143, 122, 83, 74, 8, 48, 75, 102, + 9, 73, 73, 93, 83, 73, 122, 93, 122, 48, + 73, 83, 110, 10, 10, 96, 90, 96, 102, 10, + 109, 57, 63, 117, 118, 11, 10, 10, 10, 10, + 101, 75, 10, 111, 102, 83, 48, 75, 122, 131, + 74, 128, 74, 10, 73, 73, 103, 120, 123, 48, + 73, 75, 139, 96, 139, 83, 102, 81, 73, 135, + 102, 74, 10, 102, 64, 10, 96, 83, 73, 58, + 8, 107, 128, 128, 102, 91, 58, 75, 73, 122, + 58, 62, 114, 115, 96, 96, 102, 11, 102, 111, + 109, 75, 75, 74, 141, 102, 73, 102, 112, 96, + 115, 75, 10, 10, 58, 96, 105, 143, 11, 96, + 102, 118, 48, 102, 75, 101, 102, 105 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -1352,7 +1354,7 @@ static const yytype_uint8 yyr1[] = 135, 135, 136, 137, 137, 138, 138, 139, 139, 139, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 143, 143, 144, 144 + 142, 142, 142, 142, 142, 142, 143, 143, 144, 144 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1378,8 +1380,8 @@ static const yytype_int8 yyr2[] = 3, 1, 5, 8, 2, 3, 2, 1, 2, 1, 3, 1, 3, 5, 4, 1, 3, 3, 2, 1, 7, 5, 5, 9, 7, 1, 1, 1, 1, 1, - 2, 2, 2, 1, 2, 2, 2, 2, 3, 3, - 2, 2, 3, 1, 1, 2, 1, 0 + 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, + 3, 3, 2, 2, 3, 1, 1, 2, 1, 0 }; @@ -1945,391 +1947,391 @@ yydestruct (const char *yymsg, case YYSYMBOL_INT: /* INT */ #line 146 "src/parser.y" {} -#line 1949 "gen/gen_parser.c" +#line 1951 "gen/gen_parser.c" break; case YYSYMBOL_FLOAT: /* FLOAT */ #line 146 "src/parser.y" {} -#line 1955 "gen/gen_parser.c" +#line 1957 "gen/gen_parser.c" break; case YYSYMBOL_STRING: /* STRING */ #line 146 "src/parser.y" {} -#line 1961 "gen/gen_parser.c" +#line 1963 "gen/gen_parser.c" break; case YYSYMBOL_ID: /* ID */ #line 146 "src/parser.y" {} -#line 1967 "gen/gen_parser.c" +#line 1969 "gen/gen_parser.c" break; case YYSYMBOL_id: /* id */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1973 "gen/gen_parser.c" +#line 1975 "gen/gen_parser.c" break; case YYSYMBOL_var: /* var */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1979 "gen/gen_parser.c" +#line 1981 "gen/gen_parser.c" break; case YYSYMBOL_embed: /* embed */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1985 "gen/gen_parser.c" +#line 1987 "gen/gen_parser.c" break; case YYSYMBOL_import: /* import */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1991 "gen/gen_parser.c" +#line 1993 "gen/gen_parser.c" break; case YYSYMBOL_assign: /* assign */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 1997 "gen/gen_parser.c" +#line 1999 "gen/gen_parser.c" break; case YYSYMBOL_binary_op: /* binary_op */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2003 "gen/gen_parser.c" +#line 2005 "gen/gen_parser.c" break; case YYSYMBOL_unary_op: /* unary_op */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2009 "gen/gen_parser.c" +#line 2011 "gen/gen_parser.c" break; case YYSYMBOL_arg: /* arg */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2015 "gen/gen_parser.c" +#line 2017 "gen/gen_parser.c" break; case YYSYMBOL_arg_list: /* arg_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2021 "gen/gen_parser.c" +#line 2023 "gen/gen_parser.c" break; case YYSYMBOL_param_decl: /* param_decl */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2027 "gen/gen_parser.c" +#line 2029 "gen/gen_parser.c" break; case YYSYMBOL_decl_list: /* decl_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2033 "gen/gen_parser.c" +#line 2035 "gen/gen_parser.c" break; case YYSYMBOL_call: /* call */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2039 "gen/gen_parser.c" +#line 2041 "gen/gen_parser.c" break; case YYSYMBOL_defer: /* defer */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2045 "gen/gen_parser.c" +#line 2047 "gen/gen_parser.c" break; case YYSYMBOL_expr: /* expr */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2051 "gen/gen_parser.c" +#line 2053 "gen/gen_parser.c" break; case YYSYMBOL_while: /* while */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2057 "gen/gen_parser.c" +#line 2059 "gen/gen_parser.c" break; case YYSYMBOL_do_while: /* do_while */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2063 "gen/gen_parser.c" +#line 2065 "gen/gen_parser.c" break; case YYSYMBOL_goto: /* goto */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2069 "gen/gen_parser.c" +#line 2071 "gen/gen_parser.c" break; case YYSYMBOL_statement: /* statement */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2075 "gen/gen_parser.c" +#line 2077 "gen/gen_parser.c" break; case YYSYMBOL_statement_list: /* statement_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2081 "gen/gen_parser.c" +#line 2083 "gen/gen_parser.c" break; case YYSYMBOL_body: /* body */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2087 "gen/gen_parser.c" +#line 2089 "gen/gen_parser.c" break; case YYSYMBOL_macro_list: /* macro_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2093 "gen/gen_parser.c" +#line 2095 "gen/gen_parser.c" break; case YYSYMBOL_macro: /* macro */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2099 "gen/gen_parser.c" +#line 2101 "gen/gen_parser.c" break; case YYSYMBOL_expr_list: /* expr_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2105 "gen/gen_parser.c" +#line 2107 "gen/gen_parser.c" break; case YYSYMBOL_struct_init: /* struct_init */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2111 "gen/gen_parser.c" +#line 2113 "gen/gen_parser.c" break; case YYSYMBOL_struct_inits: /* struct_inits */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2117 "gen/gen_parser.c" +#line 2119 "gen/gen_parser.c" break; case YYSYMBOL_struct_construct: /* struct_construct */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2123 "gen/gen_parser.c" +#line 2125 "gen/gen_parser.c" break; case YYSYMBOL_init_expr: /* init_expr */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2129 "gen/gen_parser.c" +#line 2131 "gen/gen_parser.c" break; case YYSYMBOL_cond: /* cond */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2135 "gen/gen_parser.c" +#line 2137 "gen/gen_parser.c" break; case YYSYMBOL_expr_if: /* expr_if */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2141 "gen/gen_parser.c" +#line 2143 "gen/gen_parser.c" break; case YYSYMBOL_if: /* if */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2147 "gen/gen_parser.c" +#line 2149 "gen/gen_parser.c" break; case YYSYMBOL_for: /* for */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2153 "gen/gen_parser.c" +#line 2155 "gen/gen_parser.c" break; case YYSYMBOL_case: /* case */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2159 "gen/gen_parser.c" +#line 2161 "gen/gen_parser.c" break; case YYSYMBOL_case_list: /* case_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2165 "gen/gen_parser.c" +#line 2167 "gen/gen_parser.c" break; case YYSYMBOL_switch: /* switch */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2171 "gen/gen_parser.c" +#line 2173 "gen/gen_parser.c" break; case YYSYMBOL_const_for: /* const_for */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2177 "gen/gen_parser.c" +#line 2179 "gen/gen_parser.c" break; case YYSYMBOL_const_if: /* const_if */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2183 "gen/gen_parser.c" +#line 2185 "gen/gen_parser.c" break; case YYSYMBOL_const: /* const */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2189 "gen/gen_parser.c" +#line 2191 "gen/gen_parser.c" break; case YYSYMBOL_func_sign: /* func_sign */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2195 "gen/gen_parser.c" +#line 2197 "gen/gen_parser.c" break; case YYSYMBOL_variadic_sign: /* variadic_sign */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2201 "gen/gen_parser.c" +#line 2203 "gen/gen_parser.c" break; case YYSYMBOL_type: /* type */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2207 "gen/gen_parser.c" +#line 2209 "gen/gen_parser.c" break; case YYSYMBOL_var_decl: /* var_decl */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2213 "gen/gen_parser.c" +#line 2215 "gen/gen_parser.c" break; case YYSYMBOL_var_init: /* var_init */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2219 "gen/gen_parser.c" +#line 2221 "gen/gen_parser.c" break; case YYSYMBOL_proc: /* proc */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2225 "gen/gen_parser.c" +#line 2227 "gen/gen_parser.c" break; case YYSYMBOL_lambda: /* lambda */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2231 "gen/gen_parser.c" +#line 2233 "gen/gen_parser.c" break; case YYSYMBOL_struct_elem: /* struct_elem */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2237 "gen/gen_parser.c" +#line 2239 "gen/gen_parser.c" break; case YYSYMBOL_struct_list: /* struct_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2243 "gen/gen_parser.c" +#line 2245 "gen/gen_parser.c" break; case YYSYMBOL_union: /* union */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2249 "gen/gen_parser.c" +#line 2251 "gen/gen_parser.c" break; case YYSYMBOL_generic: /* generic */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2255 "gen/gen_parser.c" +#line 2257 "gen/gen_parser.c" break; case YYSYMBOL_generic_list: /* generic_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2261 "gen/gen_parser.c" +#line 2263 "gen/gen_parser.c" break; case YYSYMBOL_struct: /* struct */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2267 "gen/gen_parser.c" +#line 2269 "gen/gen_parser.c" break; case YYSYMBOL_template_elem: /* template_elem */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2273 "gen/gen_parser.c" +#line 2275 "gen/gen_parser.c" break; case YYSYMBOL_template_list: /* template_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2279 "gen/gen_parser.c" +#line 2281 "gen/gen_parser.c" break; case YYSYMBOL_type_list: /* type_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2285 "gen/gen_parser.c" +#line 2287 "gen/gen_parser.c" break; case YYSYMBOL_type_alias: /* type_alias */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2291 "gen/gen_parser.c" +#line 2293 "gen/gen_parser.c" break; case YYSYMBOL_type_template: /* type_template */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2297 "gen/gen_parser.c" +#line 2299 "gen/gen_parser.c" break; case YYSYMBOL_enum_val: /* enum_val */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2303 "gen/gen_parser.c" +#line 2305 "gen/gen_parser.c" break; case YYSYMBOL_enum_list: /* enum_list */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2309 "gen/gen_parser.c" +#line 2311 "gen/gen_parser.c" break; case YYSYMBOL_enum: /* enum */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2315 "gen/gen_parser.c" +#line 2317 "gen/gen_parser.c" break; case YYSYMBOL_top_if: /* top_if */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2321 "gen/gen_parser.c" +#line 2323 "gen/gen_parser.c" break; case YYSYMBOL_top: /* top */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2327 "gen/gen_parser.c" +#line 2329 "gen/gen_parser.c" break; case YYSYMBOL_unit: /* unit */ #line 147 "src/parser.y" { destroy_ast_tree(((*yyvaluep).node)); } -#line 2333 "gen/gen_parser.c" +#line 2335 "gen/gen_parser.c" break; default: @@ -2638,169 +2640,169 @@ yyreduce: (yyval.node) = gen_id(strdup((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2642 "gen/gen_parser.c" +#line 2644 "gen/gen_parser.c" break; case 3: /* var: var_decl */ #line 157 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2648 "gen/gen_parser.c" +#line 2650 "gen/gen_parser.c" break; case 4: /* var: var_init */ #line 158 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2654 "gen/gen_parser.c" +#line 2656 "gen/gen_parser.c" break; case 5: /* embed: "embed" "(" STRING ")" */ #line 161 "src/parser.y" { (yyval.node) = gen_embed(clone_string((yyvsp[-1].str))); } -#line 2660 "gen/gen_parser.c" +#line 2662 "gen/gen_parser.c" break; case 6: /* import: "import" STRING */ #line 164 "src/parser.y" { (yyval.node) = gen_import(clone_string((yyvsp[0].str))); } -#line 2666 "gen/gen_parser.c" +#line 2668 "gen/gen_parser.c" break; case 7: /* assign: expr "=" expr */ #line 167 "src/parser.y" { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2672 "gen/gen_parser.c" +#line 2674 "gen/gen_parser.c" break; case 8: /* assign: expr "=" struct_construct */ #line 168 "src/parser.y" { (yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2678 "gen/gen_parser.c" +#line 2680 "gen/gen_parser.c" break; case 9: /* binary_op: expr "+" expr */ #line 171 "src/parser.y" { (yyval.node) = gen_binop(AST_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2684 "gen/gen_parser.c" +#line 2686 "gen/gen_parser.c" break; case 10: /* binary_op: expr "-" expr */ #line 172 "src/parser.y" { (yyval.node) = gen_binop(AST_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2690 "gen/gen_parser.c" +#line 2692 "gen/gen_parser.c" break; case 11: /* binary_op: expr "*" expr */ #line 173 "src/parser.y" { (yyval.node) = gen_binop(AST_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2696 "gen/gen_parser.c" +#line 2698 "gen/gen_parser.c" break; case 12: /* binary_op: expr "/" expr */ #line 174 "src/parser.y" { (yyval.node) = gen_binop(AST_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2702 "gen/gen_parser.c" +#line 2704 "gen/gen_parser.c" break; case 13: /* binary_op: expr "%" expr */ #line 175 "src/parser.y" { (yyval.node) = gen_binop(AST_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2708 "gen/gen_parser.c" +#line 2710 "gen/gen_parser.c" break; case 14: /* binary_op: expr "^" expr */ #line 176 "src/parser.y" { (yyval.node) = gen_binop(AST_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2714 "gen/gen_parser.c" +#line 2716 "gen/gen_parser.c" break; case 15: /* binary_op: expr "^^" expr */ #line 177 "src/parser.y" { (yyval.node) = gen_binop(AST_POW, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2720 "gen/gen_parser.c" +#line 2722 "gen/gen_parser.c" break; case 16: /* binary_op: expr "&" expr */ #line 178 "src/parser.y" { (yyval.node) = gen_binop(AST_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2726 "gen/gen_parser.c" +#line 2728 "gen/gen_parser.c" break; case 17: /* binary_op: expr "&&" expr */ #line 179 "src/parser.y" { (yyval.node) = gen_binop(AST_LAND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2732 "gen/gen_parser.c" +#line 2734 "gen/gen_parser.c" break; case 18: /* binary_op: expr "|" expr */ #line 180 "src/parser.y" { (yyval.node) = gen_binop(AST_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2738 "gen/gen_parser.c" +#line 2740 "gen/gen_parser.c" break; case 19: /* binary_op: expr "||" expr */ #line 181 "src/parser.y" { (yyval.node) = gen_binop(AST_LOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2744 "gen/gen_parser.c" +#line 2746 "gen/gen_parser.c" break; case 20: /* binary_op: expr "<<" expr */ #line 182 "src/parser.y" { (yyval.node) = gen_binop(AST_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2750 "gen/gen_parser.c" +#line 2752 "gen/gen_parser.c" break; case 21: /* binary_op: expr ">>" expr */ #line 183 "src/parser.y" { (yyval.node) = gen_binop(AST_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2756 "gen/gen_parser.c" +#line 2758 "gen/gen_parser.c" break; case 22: /* binary_op: expr "+=" expr */ #line 184 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_ADD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2762 "gen/gen_parser.c" +#line 2764 "gen/gen_parser.c" break; case 23: /* binary_op: expr "-=" expr */ #line 185 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_SUB, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2768 "gen/gen_parser.c" +#line 2770 "gen/gen_parser.c" break; case 24: /* binary_op: expr "*=" expr */ #line 186 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_MUL, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2774 "gen/gen_parser.c" +#line 2776 "gen/gen_parser.c" break; case 25: /* binary_op: expr "/=" expr */ #line 187 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2780 "gen/gen_parser.c" +#line 2782 "gen/gen_parser.c" break; case 26: /* binary_op: expr "%=" expr */ #line 188 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_REM, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2786 "gen/gen_parser.c" +#line 2788 "gen/gen_parser.c" break; case 27: /* binary_op: expr "&=" expr */ #line 189 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2792 "gen/gen_parser.c" +#line 2794 "gen/gen_parser.c" break; case 28: /* binary_op: expr "|=" expr */ #line 190 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2798 "gen/gen_parser.c" +#line 2800 "gen/gen_parser.c" break; case 29: /* binary_op: expr "^=" expr */ #line 191 "src/parser.y" { (yyval.node) = gen_binop(AST_ASSIGN_XOR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2804 "gen/gen_parser.c" +#line 2806 "gen/gen_parser.c" break; case 30: /* binary_op: expr "<<=" expr */ @@ -2808,7 +2810,7 @@ yyreduce: { (yyval.node) = gen_binop(AST_ASSIGN_LSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2812 "gen/gen_parser.c" +#line 2814 "gen/gen_parser.c" break; case 31: /* binary_op: expr ">>=" expr */ @@ -2816,187 +2818,187 @@ yyreduce: { (yyval.node) = gen_binop(AST_ASSIGN_RSHIFT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2820 "gen/gen_parser.c" +#line 2822 "gen/gen_parser.c" break; case 32: /* binary_op: expr "<" expr */ #line 198 "src/parser.y" { (yyval.node) = gen_binop(AST_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2826 "gen/gen_parser.c" +#line 2828 "gen/gen_parser.c" break; case 33: /* binary_op: expr ">" expr */ #line 199 "src/parser.y" { (yyval.node) = gen_binop(AST_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2832 "gen/gen_parser.c" +#line 2834 "gen/gen_parser.c" break; case 34: /* binary_op: expr "<=" expr */ #line 200 "src/parser.y" { (yyval.node) = gen_binop(AST_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2838 "gen/gen_parser.c" +#line 2840 "gen/gen_parser.c" break; case 35: /* binary_op: expr ">=" expr */ #line 201 "src/parser.y" { (yyval.node) = gen_binop(AST_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2844 "gen/gen_parser.c" +#line 2846 "gen/gen_parser.c" break; case 36: /* binary_op: expr "!=" expr */ #line 202 "src/parser.y" { (yyval.node) = gen_binop(AST_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2850 "gen/gen_parser.c" +#line 2852 "gen/gen_parser.c" break; case 37: /* binary_op: expr "==" expr */ #line 203 "src/parser.y" { (yyval.node) = gen_binop(AST_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2856 "gen/gen_parser.c" +#line 2858 "gen/gen_parser.c" break; case 38: /* unary_op: "-" expr */ #line 206 "src/parser.y" { (yyval.node) = gen_unop(AST_NEG, (yyvsp[0].node)); } -#line 2862 "gen/gen_parser.c" +#line 2864 "gen/gen_parser.c" break; case 39: /* unary_op: "!" expr */ #line 207 "src/parser.y" { (yyval.node) = gen_unop(AST_LNOT, (yyvsp[0].node)); } -#line 2868 "gen/gen_parser.c" +#line 2870 "gen/gen_parser.c" break; case 40: /* unary_op: "&" expr */ #line 208 "src/parser.y" { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2874 "gen/gen_parser.c" +#line 2876 "gen/gen_parser.c" break; case 41: /* unary_op: "'" expr */ #line 209 "src/parser.y" { (yyval.node) = gen_unop(AST_DEREF, (yyvsp[0].node)); } -#line 2880 "gen/gen_parser.c" +#line 2882 "gen/gen_parser.c" break; case 42: /* unary_op: "~" expr */ #line 210 "src/parser.y" { (yyval.node) = gen_unop(AST_NOT, (yyvsp[0].node)); } -#line 2886 "gen/gen_parser.c" +#line 2888 "gen/gen_parser.c" break; case 43: /* arg: "&" var_decl */ #line 213 "src/parser.y" { (yyval.node) = gen_unop(AST_REF, (yyvsp[0].node)); } -#line 2892 "gen/gen_parser.c" +#line 2894 "gen/gen_parser.c" break; case 44: /* arg: var_decl */ #line 214 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2898 "gen/gen_parser.c" +#line 2900 "gen/gen_parser.c" break; case 45: /* arg: init_expr */ #line 215 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2904 "gen/gen_parser.c" +#line 2906 "gen/gen_parser.c" break; case 46: /* arg_list: arg "," arg_list */ #line 218 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2910 "gen/gen_parser.c" +#line 2912 "gen/gen_parser.c" break; case 47: /* arg_list: arg */ #line 219 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2916 "gen/gen_parser.c" +#line 2918 "gen/gen_parser.c" break; case 48: /* param_decl: type */ #line 222 "src/parser.y" { (yyval.node) = gen_var(NULL, (yyvsp[0].node), NULL); } -#line 2922 "gen/gen_parser.c" +#line 2924 "gen/gen_parser.c" break; case 49: /* decl_list: var_decl "," decl_list */ #line 224 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2928 "gen/gen_parser.c" +#line 2930 "gen/gen_parser.c" break; case 50: /* decl_list: param_decl "," decl_list */ #line 225 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 2934 "gen/gen_parser.c" +#line 2936 "gen/gen_parser.c" break; case 51: /* decl_list: var_decl */ #line 226 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2940 "gen/gen_parser.c" +#line 2942 "gen/gen_parser.c" break; case 52: /* decl_list: param_decl */ #line 227 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2946 "gen/gen_parser.c" +#line 2948 "gen/gen_parser.c" break; case 53: /* call: id "(" arg_list ")" */ #line 231 "src/parser.y" { (yyval.node) = gen_call((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 2952 "gen/gen_parser.c" +#line 2954 "gen/gen_parser.c" break; case 54: /* call: id "(" ")" */ #line 232 "src/parser.y" { (yyval.node) = gen_call((yyvsp[-2].node), NULL); } -#line 2958 "gen/gen_parser.c" +#line 2960 "gen/gen_parser.c" break; case 55: /* defer: "defer" "(" expr ")" */ #line 235 "src/parser.y" { (yyval.node) = gen_defer((yyvsp[-1].node)); } -#line 2964 "gen/gen_parser.c" +#line 2966 "gen/gen_parser.c" break; case 56: /* expr: id */ #line 239 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2970 "gen/gen_parser.c" +#line 2972 "gen/gen_parser.c" break; case 57: /* expr: expr "." id */ #line 240 "src/parser.y" { (yyval.node) = gen_dot((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2976 "gen/gen_parser.c" +#line 2978 "gen/gen_parser.c" break; case 58: /* expr: "..." id */ #line 241 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 2982 "gen/gen_parser.c" +#line 2984 "gen/gen_parser.c" break; case 59: /* expr: "@" */ #line 242 "src/parser.y" { (yyval.node) = gen_last(); } -#line 2988 "gen/gen_parser.c" +#line 2990 "gen/gen_parser.c" break; case 60: /* expr: INT */ #line 243 "src/parser.y" { (yyval.node) = gen_int((yyvsp[0].integer)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 2994 "gen/gen_parser.c" +#line 2996 "gen/gen_parser.c" break; case 61: /* expr: FLOAT */ #line 244 "src/parser.y" { (yyval.node) = gen_float((yyvsp[0].dbl)); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 3000 "gen/gen_parser.c" +#line 3002 "gen/gen_parser.c" break; case 62: /* expr: STRING */ @@ -3005,91 +3007,91 @@ yyreduce: (yyval.node) = gen_string(clone_string((yyvsp[0].str))); (yyval.node)->loc = to_src_loc(&yylloc); } -#line 3009 "gen/gen_parser.c" +#line 3011 "gen/gen_parser.c" break; case 63: /* expr: "(" expr ")" */ #line 249 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3015 "gen/gen_parser.c" +#line 3017 "gen/gen_parser.c" break; case 64: /* expr: assign */ #line 250 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3021 "gen/gen_parser.c" +#line 3023 "gen/gen_parser.c" break; case 65: /* expr: call */ #line 251 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3027 "gen/gen_parser.c" +#line 3029 "gen/gen_parser.c" break; case 66: /* expr: defer */ #line 252 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3033 "gen/gen_parser.c" +#line 3035 "gen/gen_parser.c" break; case 67: /* expr: binary_op */ #line 253 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3039 "gen/gen_parser.c" +#line 3041 "gen/gen_parser.c" break; case 68: /* expr: unary_op */ #line 254 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3045 "gen/gen_parser.c" +#line 3047 "gen/gen_parser.c" break; case 69: /* expr: "(" var_init ")" */ #line 255 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3051 "gen/gen_parser.c" +#line 3053 "gen/gen_parser.c" break; case 70: /* expr: "sizeof" expr */ #line 256 "src/parser.y" { (yyval.node) = gen_sizeof((yyvsp[0].node)); } -#line 3057 "gen/gen_parser.c" +#line 3059 "gen/gen_parser.c" break; case 71: /* expr: expr "as" type */ #line 257 "src/parser.y" { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3063 "gen/gen_parser.c" +#line 3065 "gen/gen_parser.c" break; case 72: /* expr: id "::" type */ #line 258 "src/parser.y" { (yyval.node) = gen_fetch((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3069 "gen/gen_parser.c" +#line 3071 "gen/gen_parser.c" break; case 73: /* expr: "as" type */ #line 259 "src/parser.y" { (yyval.node) = gen_as((yyvsp[0].node)); } -#line 3075 "gen/gen_parser.c" +#line 3077 "gen/gen_parser.c" break; case 74: /* expr: embed */ #line 260 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3081 "gen/gen_parser.c" +#line 3083 "gen/gen_parser.c" break; case 75: /* expr: lambda */ #line 261 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3087 "gen/gen_parser.c" +#line 3089 "gen/gen_parser.c" break; case 76: /* while: "while" expr body */ #line 264 "src/parser.y" { (yyval.node) = gen_while((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3093 "gen/gen_parser.c" +#line 3095 "gen/gen_parser.c" break; case 77: /* do_while: "do" body "while" expr ";" */ @@ -3098,146 +3100,146 @@ yyreduce: (yyval.node) = gen_while((yyvsp[-3].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_DELAYED); } -#line 3102 "gen/gen_parser.c" +#line 3104 "gen/gen_parser.c" break; case 78: /* goto: "goto" id */ #line 273 "src/parser.y" { (yyval.node) = gen_goto(gen_label((yyvsp[0].node))); } -#line 3108 "gen/gen_parser.c" +#line 3110 "gen/gen_parser.c" break; case 79: /* statement: expr ";" */ #line 275 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3114 "gen/gen_parser.c" +#line 3116 "gen/gen_parser.c" break; case 80: /* statement: "return" init_expr ";" */ #line 276 "src/parser.y" { (yyval.node) = gen_return((yyvsp[-1].node)); } -#line 3120 "gen/gen_parser.c" +#line 3122 "gen/gen_parser.c" break; case 81: /* statement: "return" ";" */ #line 277 "src/parser.y" { (yyval.node) = gen_return(NULL); } -#line 3126 "gen/gen_parser.c" +#line 3128 "gen/gen_parser.c" break; case 82: /* statement: "break" ";" */ #line 278 "src/parser.y" { (yyval.node) = gen_ctrl(AST_CTRL_BREAK, to_src_loc(&yylloc)); } -#line 3132 "gen/gen_parser.c" +#line 3134 "gen/gen_parser.c" break; case 83: /* statement: "continue" ";" */ #line 279 "src/parser.y" { (yyval.node) = gen_ctrl(AST_CTRL_CONTINUE, to_src_loc(&yylloc)); } -#line 3139 "gen/gen_parser.c" +#line 3141 "gen/gen_parser.c" break; case 84: /* statement: import ";" */ #line 281 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3145 "gen/gen_parser.c" +#line 3147 "gen/gen_parser.c" break; case 85: /* statement: var ";" */ #line 282 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3151 "gen/gen_parser.c" +#line 3153 "gen/gen_parser.c" break; case 86: /* statement: if */ #line 283 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3157 "gen/gen_parser.c" +#line 3159 "gen/gen_parser.c" break; case 87: /* statement: goto ";" */ #line 284 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3163 "gen/gen_parser.c" +#line 3165 "gen/gen_parser.c" break; case 88: /* statement: id ":" */ #line 285 "src/parser.y" { (yyval.node) = gen_label((yyvsp[-1].node)); } -#line 3169 "gen/gen_parser.c" +#line 3171 "gen/gen_parser.c" break; case 89: /* statement: for */ #line 286 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3175 "gen/gen_parser.c" +#line 3177 "gen/gen_parser.c" break; case 90: /* statement: const */ #line 287 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3181 "gen/gen_parser.c" +#line 3183 "gen/gen_parser.c" break; case 91: /* statement: while */ #line 288 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3187 "gen/gen_parser.c" +#line 3189 "gen/gen_parser.c" break; case 92: /* statement: do_while */ #line 289 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3193 "gen/gen_parser.c" +#line 3195 "gen/gen_parser.c" break; case 93: /* statement: switch */ #line 290 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3199 "gen/gen_parser.c" +#line 3201 "gen/gen_parser.c" break; case 94: /* statement: macro */ #line 291 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3205 "gen/gen_parser.c" +#line 3207 "gen/gen_parser.c" break; case 95: /* statement: struct */ #line 292 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3211 "gen/gen_parser.c" +#line 3213 "gen/gen_parser.c" break; case 96: /* statement: type_alias ";" */ #line 293 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3217 "gen/gen_parser.c" +#line 3219 "gen/gen_parser.c" break; case 97: /* statement: type_template */ #line 294 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3223 "gen/gen_parser.c" +#line 3225 "gen/gen_parser.c" break; case 98: /* statement: enum */ #line 295 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3229 "gen/gen_parser.c" +#line 3231 "gen/gen_parser.c" break; case 99: /* statement: body */ #line 296 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3235 "gen/gen_parser.c" +#line 3237 "gen/gen_parser.c" break; case 100: /* statement: ";" */ #line 297 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3241 "gen/gen_parser.c" +#line 3243 "gen/gen_parser.c" break; case 101: /* statement: error */ @@ -3256,43 +3258,43 @@ yyreduce: yyclearin; yyerrok; } -#line 3260 "gen/gen_parser.c" +#line 3262 "gen/gen_parser.c" break; case 102: /* statement_list: statement statement_list */ #line 314 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3266 "gen/gen_parser.c" +#line 3268 "gen/gen_parser.c" break; case 103: /* statement_list: statement */ #line 315 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3272 "gen/gen_parser.c" +#line 3274 "gen/gen_parser.c" break; case 104: /* body: "{" statement_list "}" */ #line 318 "src/parser.y" { (yyval.node) = gen_block((yyvsp[-1].node)); } -#line 3278 "gen/gen_parser.c" +#line 3280 "gen/gen_parser.c" break; case 105: /* body: "{" "}" */ #line 319 "src/parser.y" { (yyval.node) = gen_block(gen_empty()); } -#line 3284 "gen/gen_parser.c" +#line 3286 "gen/gen_parser.c" break; case 106: /* macro_list: id "," macro_list */ #line 322 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } -#line 3290 "gen/gen_parser.c" +#line 3292 "gen/gen_parser.c" break; case 107: /* macro_list: id */ #line 323 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3296 "gen/gen_parser.c" +#line 3298 "gen/gen_parser.c" break; case 108: /* macro: "define" id "(" macro_list ")" body */ @@ -3301,7 +3303,7 @@ yyreduce: (yyval.node) = gen_macro((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3305 "gen/gen_parser.c" +#line 3307 "gen/gen_parser.c" break; case 109: /* macro: "define" id "(" macro_list "..." id ")" body */ @@ -3313,7 +3315,7 @@ yyreduce: ast_set_flags((yyval.node), AST_FLAG_VARIADIC); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3317 "gen/gen_parser.c" +#line 3319 "gen/gen_parser.c" break; case 110: /* macro: "define" id "(" ")" body */ @@ -3322,25 +3324,25 @@ yyreduce: (yyval.node) = gen_macro((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3326 "gen/gen_parser.c" +#line 3328 "gen/gen_parser.c" break; case 111: /* expr_list: expr "," expr_list */ #line 343 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3332 "gen/gen_parser.c" +#line 3334 "gen/gen_parser.c" break; case 112: /* expr_list: expr */ #line 344 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3338 "gen/gen_parser.c" +#line 3340 "gen/gen_parser.c" break; case 113: /* struct_init: init_expr */ #line 347 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3344 "gen/gen_parser.c" +#line 3346 "gen/gen_parser.c" break; case 114: /* struct_init: "." id "=" init_expr */ @@ -3349,121 +3351,121 @@ yyreduce: (yyval.node) = gen_var((yyvsp[-2].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_MEMBER); } -#line 3353 "gen/gen_parser.c" +#line 3355 "gen/gen_parser.c" break; case 115: /* struct_inits: struct_init "," struct_inits */ #line 354 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3359 "gen/gen_parser.c" +#line 3361 "gen/gen_parser.c" break; case 116: /* struct_inits: struct_init */ #line 355 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3365 "gen/gen_parser.c" +#line 3367 "gen/gen_parser.c" break; case 117: /* struct_construct: "{" struct_inits "}" */ #line 358 "src/parser.y" { (yyval.node) = gen_init((yyvsp[-1].node)); } -#line 3371 "gen/gen_parser.c" +#line 3373 "gen/gen_parser.c" break; case 118: /* init_expr: expr */ #line 361 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3377 "gen/gen_parser.c" +#line 3379 "gen/gen_parser.c" break; case 119: /* init_expr: expr_if */ #line 362 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3383 "gen/gen_parser.c" +#line 3385 "gen/gen_parser.c" break; case 120: /* init_expr: struct_construct */ #line 363 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3389 "gen/gen_parser.c" +#line 3391 "gen/gen_parser.c" break; case 121: /* init_expr: struct_construct "as" type */ #line 364 "src/parser.y" { (yyval.node) = gen_cast((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3395 "gen/gen_parser.c" +#line 3397 "gen/gen_parser.c" break; case 122: /* cond: expr */ #line 367 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3401 "gen/gen_parser.c" +#line 3403 "gen/gen_parser.c" break; case 123: /* cond: "(" expr_if ")" */ #line 368 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3407 "gen/gen_parser.c" +#line 3409 "gen/gen_parser.c" break; case 124: /* expr_if: "if" cond body "else" body */ #line 372 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3413 "gen/gen_parser.c" +#line 3415 "gen/gen_parser.c" break; case 125: /* expr_if: "if" cond body "else" expr_if */ #line 373 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3419 "gen/gen_parser.c" +#line 3421 "gen/gen_parser.c" break; case 126: /* if: "if" cond body */ #line 376 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3425 "gen/gen_parser.c" +#line 3427 "gen/gen_parser.c" break; case 127: /* if: "if" cond body "else" body */ #line 377 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3431 "gen/gen_parser.c" +#line 3433 "gen/gen_parser.c" break; case 128: /* if: "if" cond body "else" if */ #line 378 "src/parser.y" { (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3437 "gen/gen_parser.c" +#line 3439 "gen/gen_parser.c" break; case 129: /* for: "for" arg ";" expr ";" expr body */ #line 381 "src/parser.y" { (yyval.node) = gen_for((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } -#line 3443 "gen/gen_parser.c" +#line 3445 "gen/gen_parser.c" break; case 130: /* case: "case" expr ":" statement_list */ #line 384 "src/parser.y" { (yyval.node) = gen_case((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3449 "gen/gen_parser.c" +#line 3451 "gen/gen_parser.c" break; case 131: /* case_list: case case_list */ #line 387 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3455 "gen/gen_parser.c" +#line 3457 "gen/gen_parser.c" break; case 132: /* case_list: case */ #line 388 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3461 "gen/gen_parser.c" +#line 3463 "gen/gen_parser.c" break; case 133: /* switch: "switch" expr "{" case_list "}" */ #line 391 "src/parser.y" { (yyval.node) = gen_switch((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3467 "gen/gen_parser.c" +#line 3469 "gen/gen_parser.c" break; case 134: /* const_for: "for" id ":" expr_list body */ @@ -3473,7 +3475,7 @@ yyreduce: (yyval.node) = gen_for((yyvsp[-3].node), NULL, (yyvsp[-1].node), (yyvsp[0].node)); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3477 "gen/gen_parser.c" +#line 3479 "gen/gen_parser.c" break; case 135: /* const_if: "if" expr body */ @@ -3482,7 +3484,7 @@ yyreduce: (yyval.node) = gen_if((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3486 "gen/gen_parser.c" +#line 3488 "gen/gen_parser.c" break; case 136: /* const_if: "if" expr body "else" body */ @@ -3492,7 +3494,7 @@ yyreduce: ast_set_flags((yyvsp[-2].node), AST_FLAG_UNHYGIENIC); ast_set_flags((yyvsp[0].node), AST_FLAG_UNHYGIENIC); } -#line 3496 "gen/gen_parser.c" +#line 3498 "gen/gen_parser.c" break; case 137: /* const_if: "if" expr body "else" const_if */ @@ -3501,21 +3503,21 @@ yyreduce: (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[0].node)); ast_set_flags((yyvsp[-2].node), AST_FLAG_UNHYGIENIC); } -#line 3505 "gen/gen_parser.c" +#line 3507 "gen/gen_parser.c" break; case 138: /* const: "const" const_if */ #line 418 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3512 "gen/gen_parser.c" +#line 3514 "gen/gen_parser.c" break; case 139: /* const: "const" const_for */ #line 420 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3519 "gen/gen_parser.c" +#line 3521 "gen/gen_parser.c" break; case 140: /* func_sign: "(" decl_list "=>" type ")" */ @@ -3523,41 +3525,41 @@ yyreduce: { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3527 "gen/gen_parser.c" +#line 3529 "gen/gen_parser.c" break; case 141: /* func_sign: "(" decl_list ")" */ #line 427 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-1].node), NULL); } -#line 3534 "gen/gen_parser.c" +#line 3536 "gen/gen_parser.c" break; case 142: /* func_sign: "(" decl_list "=>" ")" */ #line 429 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-2].node), NULL); } -#line 3541 "gen/gen_parser.c" +#line 3543 "gen/gen_parser.c" break; case 143: /* func_sign: "(" "=>" type ")" */ #line 431 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, (yyvsp[-1].node)); } -#line 3548 "gen/gen_parser.c" +#line 3550 "gen/gen_parser.c" break; case 144: /* func_sign: "(" ")" */ #line 433 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, NULL, NULL); } -#line 3555 "gen/gen_parser.c" +#line 3557 "gen/gen_parser.c" break; case 145: /* variadic_sign: func_sign */ #line 437 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3561 "gen/gen_parser.c" +#line 3563 "gen/gen_parser.c" break; case 146: /* variadic_sign: "(" decl_list "..." id "=>" type ")" */ @@ -3567,13 +3569,13 @@ yyreduce: (yyval.node) = gen_type(AST_TYPE_SIGN, NULL, (yyvsp[-5].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_VARIADIC); } -#line 3571 "gen/gen_parser.c" +#line 3573 "gen/gen_parser.c" break; case 147: /* type: id */ #line 445 "src/parser.y" { (yyval.node) = gen_type(AST_TYPE_ID, (yyvsp[0].node), NULL, NULL); } -#line 3577 "gen/gen_parser.c" +#line 3579 "gen/gen_parser.c" break; case 148: /* type: "'" func_sign */ @@ -3582,15 +3584,15 @@ yyreduce: (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3586 "gen/gen_parser.c" +#line 3588 "gen/gen_parser.c" break; case 149: /* type: id "(" type_list ")" */ #line 450 "src/parser.y" { - (yyval.node) = gen_type(AST_TYPE_STRUCT, (yyvsp[-3].node), (yyvsp[-1].node), NULL); + (yyval.node) = gen_type(AST_TYPE_GENERIC, (yyvsp[-3].node), (yyvsp[-1].node), NULL); } -#line 3594 "gen/gen_parser.c" +#line 3596 "gen/gen_parser.c" break; case 150: /* type: "'" type */ @@ -3599,7 +3601,7 @@ yyreduce: (yyval.node) = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3603 "gen/gen_parser.c" +#line 3605 "gen/gen_parser.c" break; case 151: /* type: "[" "]" type */ @@ -3608,7 +3610,7 @@ yyreduce: (yyval.node) = gen_type(AST_TYPE_ARR, NULL, NULL, NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3612 "gen/gen_parser.c" +#line 3614 "gen/gen_parser.c" break; case 152: /* type: "[" expr "]" type */ @@ -3617,7 +3619,7 @@ yyreduce: (yyval.node) = gen_type(AST_TYPE_ARR, NULL, (yyvsp[-2].node), NULL); (yyval.node)->_type.next = (yyvsp[0].node); } -#line 3621 "gen/gen_parser.c" +#line 3623 "gen/gen_parser.c" break; case 153: /* type: "typeof" expr */ @@ -3625,7 +3627,7 @@ yyreduce: { (yyval.node) = gen_type(AST_TYPE_TYPEOF, NULL, (yyvsp[0].node), NULL); } -#line 3629 "gen/gen_parser.c" +#line 3631 "gen/gen_parser.c" break; case 154: /* type: id "::" type */ @@ -3633,7 +3635,7 @@ yyreduce: { (yyval.node) = gen_type(AST_TYPE_MEMBER, (yyvsp[-2].node), (yyvsp[0].node), NULL); } -#line 3637 "gen/gen_parser.c" +#line 3639 "gen/gen_parser.c" break; case 155: /* var_decl: id "mut" type */ @@ -3642,25 +3644,25 @@ yyreduce: (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_MUTABLE); } -#line 3646 "gen/gen_parser.c" +#line 3648 "gen/gen_parser.c" break; case 156: /* var_decl: id "const" type */ #line 477 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-2].node), (yyvsp[0].node), NULL); } -#line 3652 "gen/gen_parser.c" +#line 3654 "gen/gen_parser.c" break; case 157: /* var_decl: id type */ #line 478 "src/parser.y" { (yyval.node) = gen_var((yyvsp[-1].node), (yyvsp[0].node), NULL); } -#line 3658 "gen/gen_parser.c" +#line 3660 "gen/gen_parser.c" break; case 158: /* var_init: var_decl "=" init_expr */ #line 481 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->_var.init = (yyvsp[0].node); } -#line 3664 "gen/gen_parser.c" +#line 3666 "gen/gen_parser.c" break; case 159: /* var_init: id "mut" "=" init_expr */ @@ -3669,7 +3671,7 @@ yyreduce: (yyval.node) = gen_var((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED | AST_FLAG_MUTABLE); } -#line 3673 "gen/gen_parser.c" +#line 3675 "gen/gen_parser.c" break; case 160: /* var_init: id "const" "=" init_expr */ @@ -3678,7 +3680,7 @@ yyreduce: (yyval.node) = gen_var((yyvsp[-3].node), NULL, (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3682 "gen/gen_parser.c" +#line 3684 "gen/gen_parser.c" break; case 161: /* proc: id variadic_sign body */ @@ -3687,7 +3689,7 @@ yyreduce: (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ast_set_flags((yyval.node), (yyvsp[-1].node)->flags); } -#line 3691 "gen/gen_parser.c" +#line 3693 "gen/gen_parser.c" break; case 162: /* proc: "extern" id func_sign */ @@ -3696,31 +3698,31 @@ yyreduce: (yyval.node) = gen_proc((yyvsp[-1].node), (yyvsp[0].node), NULL); ast_set_flags((yyval.node), AST_FLAG_EXTERN); } -#line 3700 "gen/gen_parser.c" +#line 3702 "gen/gen_parser.c" break; case 163: /* lambda: "[" macro_list "]" func_sign body */ #line 502 "src/parser.y" { (yyval.node) = gen_lambda((yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[0].node)); } -#line 3706 "gen/gen_parser.c" +#line 3708 "gen/gen_parser.c" break; case 164: /* struct_elem: var_decl */ #line 505 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3712 "gen/gen_parser.c" +#line 3714 "gen/gen_parser.c" break; case 165: /* struct_list: struct_elem ";" struct_list */ #line 508 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3718 "gen/gen_parser.c" +#line 3720 "gen/gen_parser.c" break; case 166: /* struct_list: struct_elem ";" */ #line 509 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3724 "gen/gen_parser.c" +#line 3726 "gen/gen_parser.c" break; case 167: /* union: "union" id "{" struct_list "}" */ @@ -3728,7 +3730,7 @@ yyreduce: { (yyval.node) = gen_union((yyvsp[-3].node), NULL, (yyvsp[-1].node)); } -#line 3732 "gen/gen_parser.c" +#line 3734 "gen/gen_parser.c" break; case 168: /* union: "union" id "(" generic_list ")" "{" struct_list "}" */ @@ -3736,25 +3738,25 @@ yyreduce: { (yyval.node) = gen_union((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-1].node)); } -#line 3740 "gen/gen_parser.c" +#line 3742 "gen/gen_parser.c" break; case 169: /* generic: id type */ #line 520 "src/parser.y" { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3746 "gen/gen_parser.c" +#line 3748 "gen/gen_parser.c" break; case 170: /* generic_list: generic "," generic_list */ #line 521 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyval.node)->next = (yyvsp[0].node); } -#line 3752 "gen/gen_parser.c" +#line 3754 "gen/gen_parser.c" break; case 171: /* generic_list: generic */ #line 522 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3758 "gen/gen_parser.c" +#line 3760 "gen/gen_parser.c" break; case 172: /* struct: "struct" id "{" struct_list "}" */ @@ -3762,7 +3764,7 @@ yyreduce: { (yyval.node) = gen_struct((yyvsp[-3].node), NULL, (yyvsp[-1].node)); } -#line 3766 "gen/gen_parser.c" +#line 3768 "gen/gen_parser.c" break; case 173: /* struct: "struct" id "(" generic_list ")" "{" struct_list "}" */ @@ -3770,61 +3772,61 @@ yyreduce: { (yyval.node) = gen_struct((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-1].node)); } -#line 3774 "gen/gen_parser.c" +#line 3776 "gen/gen_parser.c" break; case 174: /* template_elem: id ";" */ #line 535 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3780 "gen/gen_parser.c" +#line 3782 "gen/gen_parser.c" break; case 175: /* template_elem: id func_sign ";" */ #line 536 "src/parser.y" { (yyval.node) = gen_proc((yyvsp[-2].node), (yyvsp[-1].node), NULL); } -#line 3786 "gen/gen_parser.c" +#line 3788 "gen/gen_parser.c" break; case 176: /* template_elem: var_decl ";" */ #line 537 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3792 "gen/gen_parser.c" +#line 3794 "gen/gen_parser.c" break; case 177: /* template_elem: union */ #line 538 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3798 "gen/gen_parser.c" +#line 3800 "gen/gen_parser.c" break; case 178: /* template_list: template_elem template_list */ #line 541 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 3804 "gen/gen_parser.c" +#line 3806 "gen/gen_parser.c" break; case 179: /* template_list: template_elem */ #line 542 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3810 "gen/gen_parser.c" +#line 3812 "gen/gen_parser.c" break; case 180: /* type_list: type "," type_list */ #line 545 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3816 "gen/gen_parser.c" +#line 3818 "gen/gen_parser.c" break; case 181: /* type_list: type */ #line 546 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3822 "gen/gen_parser.c" +#line 3824 "gen/gen_parser.c" break; case 182: /* type_alias: "typedef" id type */ #line 549 "src/parser.y" { (yyval.node) = gen_alias((yyvsp[-1].node), (yyvsp[0].node)); } -#line 3828 "gen/gen_parser.c" +#line 3830 "gen/gen_parser.c" break; case 183: /* type_template: "typedef" id "{" template_list "}" */ @@ -3832,7 +3834,7 @@ yyreduce: { (yyval.node) = gen_template((yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3836 "gen/gen_parser.c" +#line 3838 "gen/gen_parser.c" break; case 184: /* type_template: "typedef" id "{" "}" */ @@ -3841,43 +3843,43 @@ yyreduce: /* should match anything, but doesn't implement anything */ (yyval.node) = gen_template((yyvsp[-2].node), NULL); } -#line 3845 "gen/gen_parser.c" +#line 3847 "gen/gen_parser.c" break; case 185: /* enum_val: id */ #line 563 "src/parser.y" { (yyval.node) = gen_val((yyvsp[0].node), NULL); } -#line 3851 "gen/gen_parser.c" +#line 3853 "gen/gen_parser.c" break; case 186: /* enum_val: id "=" expr */ #line 564 "src/parser.y" { (yyval.node) = gen_val((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3857 "gen/gen_parser.c" +#line 3859 "gen/gen_parser.c" break; case 187: /* enum_list: enum_val "," enum_list */ #line 567 "src/parser.y" { (yyval.node) = (yyvsp[-2].node); (yyvsp[-2].node)->next = (yyvsp[0].node); } -#line 3863 "gen/gen_parser.c" +#line 3865 "gen/gen_parser.c" break; case 188: /* enum_list: enum_val "," */ #line 568 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); } -#line 3869 "gen/gen_parser.c" +#line 3871 "gen/gen_parser.c" break; case 189: /* enum_list: enum_val */ #line 569 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3875 "gen/gen_parser.c" +#line 3877 "gen/gen_parser.c" break; case 190: /* enum: "enum" id ":" type "{" enum_list "}" */ #line 572 "src/parser.y" { (yyval.node) = gen_enum((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node)); } -#line 3881 "gen/gen_parser.c" +#line 3883 "gen/gen_parser.c" break; case 191: /* enum: "enum" id "{" enum_list "}" */ @@ -3886,7 +3888,7 @@ yyreduce: (yyval.node) = gen_enum((yyvsp[-3].node), NULL, (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_UNTYPED); } -#line 3890 "gen/gen_parser.c" +#line 3892 "gen/gen_parser.c" break; case 192: /* top_if: "if" expr "{" unit "}" */ @@ -3895,7 +3897,7 @@ yyreduce: (yyval.node) = gen_if((yyvsp[-3].node), (yyvsp[-1].node), NULL); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3899 "gen/gen_parser.c" +#line 3901 "gen/gen_parser.c" break; case 193: /* top_if: "if" expr "{" unit "}" "else" "{" unit "}" */ @@ -3904,7 +3906,7 @@ yyreduce: (yyval.node) = gen_if((yyvsp[-7].node), (yyvsp[-5].node), (yyvsp[-1].node)); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3908 "gen/gen_parser.c" +#line 3910 "gen/gen_parser.c" break; case 194: /* top_if: "if" expr "{" unit "}" "else" top_if */ @@ -3913,119 +3915,131 @@ yyreduce: (yyval.node) = gen_if((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[0].node)); ast_set_flags((yyval.node), AST_FLAG_UNHYGIENIC); } -#line 3917 "gen/gen_parser.c" +#line 3919 "gen/gen_parser.c" break; case 195: /* top: ";" */ #line 595 "src/parser.y" { (yyval.node) = gen_empty(); } -#line 3923 "gen/gen_parser.c" +#line 3925 "gen/gen_parser.c" break; case 196: /* top: enum */ #line 596 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3929 "gen/gen_parser.c" +#line 3931 "gen/gen_parser.c" break; case 197: /* top: proc */ #line 597 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3935 "gen/gen_parser.c" +#line 3937 "gen/gen_parser.c" break; case 198: /* top: struct */ #line 598 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3941 "gen/gen_parser.c" +#line 3943 "gen/gen_parser.c" break; - case 199: /* top: macro */ + case 199: /* top: union */ #line 599 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 3947 "gen/gen_parser.c" +#line 3949 "gen/gen_parser.c" break; - case 200: /* top: "const" top_if */ + case 200: /* top: macro */ #line 600 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } -#line 3953 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3955 "gen/gen_parser.c" break; - case 201: /* top: import ";" */ + case 201: /* top: "const" top_if */ #line 601 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3959 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyval.node), AST_FLAG_CONST); } +#line 3961 "gen/gen_parser.c" break; - case 202: /* top: type_alias ";" */ + case 202: /* top: import ";" */ #line 602 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 3965 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[-1].node); } +#line 3967 "gen/gen_parser.c" break; - case 203: /* top: type_template */ + case 203: /* top: type_alias ";" */ #line 603 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); } -#line 3971 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[-1].node); } +#line 3973 "gen/gen_parser.c" break; - case 204: /* top: "pub" enum */ + case 204: /* top: type_template */ #line 604 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3977 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); } +#line 3979 "gen/gen_parser.c" break; - case 205: /* top: "pub" struct */ + case 205: /* top: "pub" enum */ #line 605 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3983 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 3985 "gen/gen_parser.c" break; - case 206: /* top: "pub" proc */ + case 206: /* top: "pub" struct */ #line 606 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3989 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 3991 "gen/gen_parser.c" break; - case 207: /* top: "pub" macro */ + case 207: /* top: "pub" union */ #line 607 "src/parser.y" { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 3995 "gen/gen_parser.c" +#line 3997 "gen/gen_parser.c" break; - case 208: /* top: "pub" import ";" */ + case 208: /* top: "pub" proc */ #line 608 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 4001 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 4003 "gen/gen_parser.c" break; - case 209: /* top: "pub" type_alias ";" */ + case 209: /* top: "pub" macro */ #line 609 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 4007 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 4009 "gen/gen_parser.c" break; - case 210: /* top: "pub" type_template */ + case 210: /* top: "pub" import ";" */ #line 610 "src/parser.y" - { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } -#line 4013 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } +#line 4015 "gen/gen_parser.c" break; - case 211: /* top: var ";" */ + case 211: /* top: "pub" type_alias ";" */ #line 611 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 4019 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } +#line 4021 "gen/gen_parser.c" break; - case 212: /* top: "pub" var ";" */ + case 212: /* top: "pub" type_template */ #line 612 "src/parser.y" - { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } -#line 4025 "gen/gen_parser.c" + { (yyval.node) = (yyvsp[0].node); ast_set_flags((yyvsp[0].node), AST_FLAG_PUBLIC); } +#line 4027 "gen/gen_parser.c" break; - case 213: /* top: error */ + case 213: /* top: var ";" */ #line 613 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 4033 "gen/gen_parser.c" + break; + + case 214: /* top: "pub" var ";" */ +#line 614 "src/parser.y" + { (yyval.node) = (yyvsp[-1].node); ast_set_flags((yyvsp[-1].node), AST_FLAG_PUBLIC); } +#line 4039 "gen/gen_parser.c" + break; + + case 215: /* top: error */ +#line 615 "src/parser.y" { (yyval.node) = gen_empty(); parser->failed = true; @@ -4039,29 +4053,29 @@ yyreduce: yyclearin; yyerrok; } -#line 4043 "gen/gen_parser.c" +#line 4057 "gen/gen_parser.c" break; - case 214: /* unit: top */ -#line 628 "src/parser.y" + case 216: /* unit: top */ +#line 630 "src/parser.y" { (yyval.node) = (yyvsp[0].node); } -#line 4049 "gen/gen_parser.c" +#line 4063 "gen/gen_parser.c" break; - case 215: /* unit: top unit */ -#line 629 "src/parser.y" + case 217: /* unit: top unit */ +#line 631 "src/parser.y" { (yyval.node) = (yyvsp[-1].node); (yyvsp[-1].node)->next = (yyvsp[0].node); } -#line 4055 "gen/gen_parser.c" +#line 4069 "gen/gen_parser.c" break; - case 216: /* input: unit */ -#line 632 "src/parser.y" + case 218: /* input: unit */ +#line 634 "src/parser.y" { parser->tree = (yyvsp[0].node); } -#line 4061 "gen/gen_parser.c" +#line 4075 "gen/gen_parser.c" break; -#line 4065 "gen/gen_parser.c" +#line 4079 "gen/gen_parser.c" default: break; } @@ -4290,5 +4304,5 @@ yyreturnlab: return yyresult; } -#line 635 "src/parser.y" +#line 637 "src/parser.y" diff --git a/include/cu/ast.h b/include/cu/ast.h index f9e8492..44850b6 100644 --- a/include/cu/ast.h +++ b/include/cu/ast.h @@ -115,6 +115,7 @@ enum ast_type_kind { AST_TYPE_LAMBDA, AST_TYPE_PROC, AST_TYPE_STRUCT, + AST_TYPE_GENERIC, AST_TYPE_ENUM, AST_TYPE_SIGN, }; @@ -140,6 +141,7 @@ enum ast_flag { AST_FLAG_INIT = (1 << 10), AST_FLAG_MEMBER = (1 << 11), AST_FLAG_SHARED = (1 << 12), + AST_FLAG_GENERIC = (1 << 13), }; struct ast_node; @@ -310,6 +312,11 @@ struct ast_type { struct { struct ast_node *id; + struct ast_node *args; + } generic; + + struct { + struct ast_node *id; struct ast_node *impls; } struc; diff --git a/include/cu/scope.h b/include/cu/scope.h index d8fd2c4..a325fcb 100644 --- a/include/cu/scope.h +++ b/include/cu/scope.h @@ -72,6 +72,7 @@ struct scope { /* types */ /* TODO: add actualized types maybe? */ struct visible *enums; + struct visible *unions; struct visible *structs; struct visible *aliases; struct visible *builtins; diff --git a/src/actualize.c b/src/actualize.c index 4d1d449..b25968f 100644 --- a/src/actualize.c +++ b/src/actualize.c @@ -337,6 +337,11 @@ static int analyze_file_visibility(struct scope *scope, struct ast_node *node) break; } + case AST_UNION: { + ret |= scope_add_type(scope, node); + break; + } + case AST_ENUM: { ret |= scope_add_type(scope, node); break; @@ -1251,6 +1256,11 @@ static int actualize_type(struct act_state *state, EXIT_ACT(-1); } + /* this could be more clear, maybe add into the parser some kind + * of meta class for templated types? */ + if (exists->node_type == AST_UNION) + type->_type.kind = AST_TYPE_UNION; + /* nothing to do, except maybe check that types are actually * identical? */ if (exists->node_type == AST_TYPE) @@ -1300,6 +1310,9 @@ static int actualize_type(struct act_state *state, type->_type.unio.impls = NULL; } + if (ast_flags(exists, AST_FLAG_GENERIC)) + ast_set_flags(type, AST_FLAG_GENERIC); + break; } @@ -1344,11 +1357,24 @@ static int actualize_type(struct act_state *state, break; } + case AST_TYPE_UNION: case AST_TYPE_STRUCT: { - struct ast_node *id = type->_type.struc.id; + assert(ast_flags(type, AST_FLAG_ACTUAL)); + break; + } + + case AST_TYPE_GENERIC: { + struct ast_node *id = type->_type.generic.id; struct ast_node *exists = file_scope_resolve_type(scope, id); - if (!exists || exists->node_type != AST_STRUCT) { - semantic_error(scope->fctx, type, "no such struct"); + if (!exists) { + semantic_error(scope->fctx, type, "no such type"); + EXIT_ACT(-1); + } + + if (exists->node_type != AST_UNION && + exists->node_type != AST_STRUCT) { + semantic_error(scope->fctx, type, + "type not struct or union"); EXIT_ACT(-1); } @@ -1356,7 +1382,7 @@ static int actualize_type(struct act_state *state, if (actualize(state, exists->scope, exists)) EXIT_ACT(-1); - struct ast_node *types = type->_type.struc.impls; + struct ast_node *types = type->_type.generic.args; if (actualize(state, scope, types)) EXIT_ACT(-1); @@ -1377,14 +1403,17 @@ static int actualize_type(struct act_state *state, types = types->next; } - break; - } + if (exists->node_type == AST_UNION) + type->_type.kind = AST_TYPE_UNION; + else + type->_type.kind = AST_TYPE_STRUCT; - case AST_TYPE_MEMBER: { - /* TODO */ break; } + default: + semantic_error(scope->fctx, type, "unimplemented type"); + EXIT_ACT(-1); } ast_set_flags(type, AST_FLAG_ACTUAL); @@ -1494,16 +1523,16 @@ static size_t member_count(struct ast_node *exists) return ast_list_len(body); } -static struct ast_node *lookup_struct_member_idx(struct ast_node *struc, - struct ast_node *find, - size_t *idx) +static struct ast_node *lookup_member_idx(struct ast_node *body, + struct ast_node *find, + size_t *idx) { /* micro-optimisation, likely way premature but speeds up selection * between lookup_struct_member_idx and *_name by a tiny amount */ (void)(find); - + assert(idx); size_t i = *idx; - struct ast_node *m = struc->_struct.body; + struct ast_node *m = body; while (i != 0 && m) { m = m->next; i--; @@ -1512,12 +1541,13 @@ static struct ast_node *lookup_struct_member_idx(struct ast_node *struc, return m; } -static struct ast_node *lookup_struct_member_name(struct ast_node *struc, - struct ast_node *find, - size_t *idx) +static struct ast_node *lookup_member_name(struct ast_node *body, + struct ast_node *find, + size_t *idx) { + assert(find->node_type == AST_ID); size_t i = 0; - struct ast_node *m = struc->_struct.body; + struct ast_node *m = body; while (m) { assert(m->node_type == AST_VAR); if (identical_ast_nodes(0, find, m->_var.id)) @@ -1526,7 +1556,9 @@ static struct ast_node *lookup_struct_member_name(struct ast_node *struc, i++; } - *idx = i; + if (idx) + *idx = i; + return m; } @@ -1534,9 +1566,19 @@ static struct ast_node *lookup_struct_member(struct ast_node *struc, struct ast_node *find, size_t *idx) { if (find) - return lookup_struct_member_name(struc, find, idx); + return lookup_member_name(struc->_struct.body, find, idx); + + return lookup_member_idx(struc->_struct.body, find, idx); +} + +static struct ast_node *lookup_union_member(struct ast_node *unio, + struct ast_node *find) +{ + if (find) + return lookup_member_name(unio->_union.body, find, NULL); - return lookup_struct_member_idx(struc, find, idx); + size_t idx = 0; + return lookup_member_idx(unio->_union.body, find, &idx); } static struct ast_node *lookup_enum_member(struct ast_node *enu, @@ -1555,11 +1597,53 @@ static struct ast_node *lookup_enum_member(struct ast_node *enu, return m; } +static int init_union(struct act_state *state, struct scope *scope, + struct ast_node *exists, struct ast_node *init) +{ + struct ast_node *arg = init->_init.body; + if (arg->next) { + semantic_error(scope->fctx, arg->next, + "multiple arguments in union initialization not allowed"); + return -1; + } + + if (actualize(state, scope, arg)) + return -1; + + struct ast_node *member = NULL; + if (ast_flags(arg, AST_FLAG_MEMBER)) { + member = lookup_union_member(exists, arg->_var.id); + } + else { + /* pick first element in body */ + member = exists->_union.body; + } + + if (!member) { + char *sstr = type_str(exists->type); + semantic_error(scope->fctx, arg, + "no such member in %s", + sstr); + free(sstr); + return -1; + } + + if (!implements(0, scope, arg->type, member->type)) { + char *mstr = type_str(member->type); + char *astr = type_str(arg->type); + semantic_error(scope->fctx, arg, "%s does not implement %s", + astr, mstr); + free(mstr); + free(astr); + return -1; + } + + return 0; +} + static int init_struct(struct act_state *state, struct scope *scope, struct ast_node *exists, struct ast_node *init) { - assert(ast_flags(exists, AST_FLAG_ACTUAL)); - size_t i = 0; size_t mcount = member_count(exists); @@ -1653,24 +1737,48 @@ struct ast_node *actual_type(struct ast_node *type) return type; } -static int actualize_struct_init(struct act_state *state, - struct scope *scope, struct ast_node *init, - struct ast_node *struct_type) +static int actualize_struct_init_cast(struct act_state *state, + struct scope *scope, + struct ast_node *init, + struct ast_node *actual) { - struct ast_node *actual = actual_type(struct_type); - if (actual->_type.kind != AST_TYPE_STRUCT) { - semantic_error(scope->fctx, struct_type, - "type is not a structure"); - return -1; - } - struct ast_node *id = actual->_type.struc.id; struct ast_node *exists = file_scope_resolve_type(scope, id); assert(exists); + assert(ast_flags(exists, AST_FLAG_ACTUAL)); return init_struct(state, scope, exists, init); } +static int actualize_union_init_cast(struct act_state *state, + struct scope *scope, + struct ast_node *init, + struct ast_node *actual) +{ + struct ast_node *id = actual->_type.unio.id; + struct ast_node *exists = file_scope_resolve_type(scope, id); + assert(exists); + assert(ast_flags(exists, AST_FLAG_ACTUAL)); + + return init_union(state, scope, exists, init); +} + +static int actualize_init_cast(struct act_state *state, + struct scope *scope, struct ast_node *init, + struct ast_node *type) +{ + struct ast_node *actual = actual_type(type); + if (actual->_type.kind == AST_TYPE_STRUCT) + return actualize_struct_init_cast(state, scope, init, actual); + if (actual->_type.kind == AST_TYPE_UNION) + return actualize_union_init_cast(state, scope, init, actual); + + semantic_error(scope->fctx, type, + "type is not a struct or union"); + return -1; + +} + static int proc_pointer(struct ast_node *type) { if (type->_type.kind != AST_TYPE_POINTER) @@ -1698,6 +1806,7 @@ static int proc_choice(struct ast_node *expr, struct ast_node *type) static int match_proc(struct act_state *state, struct scope *scope, struct ast_node *cast) { + (void)(state); semantic_error(scope->fctx, cast, "procedure signature casts not yet implemented"); return -1; @@ -1723,7 +1832,7 @@ static int actualize_cast(struct act_state *state, if (expr->node_type == AST_INIT) { cast->type = type; - return actualize_struct_init(state, scope, expr, type); + return actualize_init_cast(state, scope, expr, type); } if (types_match(expr->type, type)) { @@ -2068,6 +2177,8 @@ static int actualize_struct(struct act_state *state, return -1; scope_add_scope(node->scope, struct_scope); + if (generics) + ast_set_flags(node, AST_FLAG_GENERIC); /* TODO: some IDs should be handles as just placeholders, I think? */ if (actualize(state, struct_scope, generics)) @@ -2086,6 +2197,36 @@ static int actualize_struct(struct act_state *state, return 0; } +static int actualize_union(struct act_state *state, + struct scope *scope, struct ast_node *node) +{ + assert(node->node_type == AST_UNION); + ast_set_flags(node, AST_FLAG_INIT); + struct ast_node *generics = node->_union.generics; + struct scope *union_scope = create_scope(); + if (!union_scope) + return -1; + + scope_add_scope(node->scope, union_scope); + if (generics) + ast_set_flags(node, AST_FLAG_GENERIC); + + if (actualize(state, union_scope, generics)) + return -1; + + struct ast_node *body = node->_union.body; + if (actualize(state, union_scope, body)) + return -1; + + /* cloning slightly odd, but I guess it's fine? */ + struct ast_node *clone_id = clone_ast_node(node->_union.id); + node->type = gen_type(AST_TYPE_UNION, clone_id, NULL, NULL); + scope_add_scratch(scope, node->type); + + ast_set_flags(node, AST_FLAG_ACTUAL); + return 0; +} + /* could maybe be renamed, but essentially dot in copper works as either * -> or . in C, so allow structures or templates and single level pointers to * structures or templates. */ @@ -2165,7 +2306,7 @@ static int actualize_assign(struct act_state *state, struct scope *scope, if (from->node_type == AST_INIT) { node->type = to->type; - return actualize_struct_init(state, scope, from, to->type); + return actualize_init_cast(state, scope, from, to->type); } if (!types_match(to->type, from->type)) { @@ -2298,6 +2439,7 @@ static int actualize(struct act_state *state, struct scope *scope, case AST_UNOP: ret |= actualize_unop(state, scope, node); break; case AST_AS: ret |= actualize_as(state, scope, node); break; case AST_STRUCT: ret |= actualize_struct(state, scope, node); break; + case AST_UNION: ret |= actualize_union(state, scope, node); break; case AST_DOT: ret |= actualize_dot(state, scope, node); break; case AST_INIT: ret |= actualize_init(state, scope, node); break; case AST_ASSIGN: ret |= actualize_assign(state, scope, node); break; @@ -2378,6 +2520,8 @@ void replace_type(struct ast_node *type, struct ast_node *from, case AST_TYPE_TYPEOF: destroy_ast_node(type->_type.typeo.expr); break; + + default: } *type = *clone; free(clone); @@ -423,6 +423,12 @@ struct ast_node *gen_type(enum ast_type_kind kind, struct ast_node *id, n->node_type = AST_TYPE; n->_type.kind = kind; switch (kind) { + case AST_TYPE_GENERIC: + n->_type.generic.id = id; + n->_type.generic.args = expr; + n->loc = id->loc; + break; + case AST_TYPE_MEMBER: n->_type.member.id = id; n->_type.member.expr = expr; @@ -504,6 +510,16 @@ void destroy_type(struct ast_node *type) { assert(type->node_type == AST_TYPE); switch (type->_type.kind) { + case AST_TYPE_GENERIC: + destroy_ast_node(type->_type.generic.id); + DESTROY_LIST(type->_type.generic.args); + break; + + case AST_TYPE_MEMBER: + destroy_ast_node(type->_type.member.id); + destroy_ast_node(type->_type.member.expr); + break; + case AST_TYPE_ALIAS: break; @@ -1289,6 +1305,12 @@ static void __dump_ast(int depth, struct ast_node *node) dump_flags(node); switch (node->_type.kind) { + case AST_TYPE_GENERIC: + printf(" GENERIC\n"); + dump_ast(depth + 1, node->_type.generic.id); + dump_ast(depth + 1, node->_type.generic.args); + break; + case AST_TYPE_MEMBER: printf(" MEMBER\n"); dump_ast(depth + 1, node->_type.member.id); @@ -1677,14 +1699,24 @@ struct ast_node *clone_ast_node(struct ast_node *node) /* oh, if a node has a ->type it probably isn't cloned * correctly... */ switch (node->_type.kind) { + case AST_TYPE_GENERIC: + new = gen_type(AST_TYPE_GENERIC, + clone_ast_node(node->_type.generic.id), + clone_ast_node(node->_type.generic.args), + NULL); + break; + case AST_TYPE_MEMBER: - new = gen_type(AST_TYPE_MEMBER, node->_type.member.id, - node->_type.member.expr, + new = gen_type(AST_TYPE_MEMBER, + clone_ast_node(node->_type.member.id), + clone_ast_node(node->_type.member.expr), NULL); break; case AST_TYPE_ALIAS: new = gen_type(AST_TYPE_ALIAS, NULL, + /* should make it more obvious what is a + * reference and what isn't */ node->_type.alias.alias, node->_type.alias.actual); break; @@ -1692,7 +1724,7 @@ struct ast_node *clone_ast_node(struct ast_node *node) case AST_TYPE_TEMPLATE: new = gen_type(AST_TYPE_TEMPLATE, NULL, node->_type.template.template, - /* should actual be cloned? */ + /* ditto, should actual be cloned? */ node->_type.template.actual); break; case AST_TYPE_ID: @@ -1758,6 +1790,8 @@ struct ast_node *clone_ast_node(struct ast_node *node) break; } + + assert(new); new->_type.next = clone_ast_node(node->_type.next); break; @@ -2180,7 +2214,7 @@ static int identical_type_struct(int exact, struct ast_node *a, if (!identical_ast_nodes(exact, a->_type.struc.id, b->_type.struc.id)) return 0; - if (!identical_ast_nodes(exact, a->_type.struc.impls, + if (!identical_ast_nodes(1, a->_type.struc.impls, b->_type.struc.impls)) return 0; @@ -2193,7 +2227,7 @@ static int identical_type_union(int exact, struct ast_node *a, if (!identical_ast_nodes(exact, a->_type.unio.id, b->_type.unio.id)) return 0; - if (!identical_ast_nodes(exact, a->_type.unio.impls, + if (!identical_ast_nodes(1, a->_type.unio.impls, b->_type.unio.impls)) return 0; @@ -2212,6 +2246,34 @@ static int identical_type_enum(int exact, struct ast_node *a, return 1; } +static int identical_type_member(int exact, struct ast_node *a, + struct ast_node *b) +{ + if (!identical_ast_nodes(exact, a->_type.member.id, b->_type.member.id)) + return 0; + + if (!identical_ast_nodes(exact, a->_type.member.expr, + b->_type.member.expr)) + return 0; + + return 1; +} + +static int identical_type_generic(int exact, struct ast_node *a, + struct ast_node *b) +{ + if (!identical_ast_nodes(exact, a->_type.generic.id, + b->_type.generic.id)) + return 0; + + /* array should always be checked, so do an exact match */ + if (!identical_ast_nodes(1, a->_type.generic.args, + b->_type.generic.args)) + return 0; + + return 1; +} + static int identical_type(int exact, struct ast_node *a, struct ast_node *b) { if (a->_type.kind != b->_type.kind) @@ -2219,6 +2281,8 @@ static int identical_type(int exact, struct ast_node *a, struct ast_node *b) int ret = 0; switch (a->_type.kind) { + case AST_TYPE_GENERIC: ret = identical_type_generic(exact, a, b); break; + case AST_TYPE_MEMBER: ret = identical_type_member(exact, a, b); break; case AST_TYPE_ENUM: ret = identical_type_enum(exact, a, b); break; case AST_TYPE_ALIAS: ret = identical_type_alias(exact, a, b); break; case AST_TYPE_TEMPLATE: ret = identical_type_template(exact, a, b); @@ -2767,11 +2831,33 @@ static int call_on_type_enum(int (*call)(struct ast_node *, return ret; } +static int call_on_type_member(int (*call)(struct ast_node *, + void *), struct ast_node *node, void *data) +{ + int ret = 0; + ret |= call(node->_type.member.id, data); + ret |= call(node->_type.member.expr, data); + return ret; +} + +static int call_on_type_generic(int (*call)(struct ast_node *, + void *), struct ast_node *node, void *data) +{ + int ret = 0; + ret |= call(node->_type.generic.id, data); + ret |= call(node->_type.generic.args, data); + return ret; +} + static int call_on_type(int (*call)(struct ast_node *, void *), struct ast_node *node, void *data) { int ret = 0; switch (node->_type.kind) { + case AST_TYPE_GENERIC: ret = call_on_type_generic(call, node, data); + break; + case AST_TYPE_MEMBER: ret = call_on_type_member(call, node, data); + break; case AST_TYPE_ENUM: ret = call_on_type_enum(call, node, data); break; case AST_TYPE_ALIAS: ret = call_on_type_alias(call, node, data); break; case AST_TYPE_TEMPLATE: ret = call_on_type_template(call, node, data); diff --git a/src/debug.c b/src/debug.c index b929876..f850973 100644 --- a/src/debug.c +++ b/src/debug.c @@ -210,10 +210,32 @@ static void _type_str(FILE *fp, struct ast_node *type) break; } + case AST_TYPE_UNION: { + struct ast_node *unio_id = type->_type.unio.id; + fprintf(fp, "%s", unio_id->_id.id); + + struct ast_node *impls = type->_type.unio.impls; + if (impls) { + fprintf(fp, "("); + while (impls) { + _type_str(fp, impls); + impls = impls->next; + if (impls) + fprintf(fp, ", "); + } + fprintf(fp, ")"); + } + break; + } + case AST_TYPE_TYPEOF: { _type_str(fp, type->_type.typeo.actual); fprintf(fp, " (typeof)"); + break; } + + default: + fprintf(fp, "NOT YET IMPLEMENTED"); } _type_str(fp, type->_type.next); diff --git a/src/parser.y b/src/parser.y index 329e072..64f9ef1 100644 --- a/src/parser.y +++ b/src/parser.y @@ -448,7 +448,7 @@ type: id { $$ = gen_type(AST_TYPE_ID, $1, NULL, NULL); } $$->_type.next = $2; } | id "(" type_list ")" { - $$ = gen_type(AST_TYPE_STRUCT, $1, $3, NULL); + $$ = gen_type(AST_TYPE_GENERIC, $1, $3, NULL); } | "'" type { $$ = gen_type(AST_TYPE_POINTER, NULL, NULL, NULL); @@ -596,6 +596,7 @@ top: ";" { $$ = gen_empty(); } | enum { $$ = $1; } | proc { $$ = $1; } | struct { $$ = $1; } + | union { $$ = $1; } | macro { $$ = $1; } | "const" top_if { $$ = $2; ast_set_flags($$, AST_FLAG_CONST); } | import ";" { $$ = $1; } @@ -603,6 +604,7 @@ top: ";" { $$ = gen_empty(); } | type_template { $$ = $1; } | "pub" enum { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" struct { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } + | "pub" union { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" proc { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" macro { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } | "pub" import ";" { $$ = $2; ast_set_flags($2, AST_FLAG_PUBLIC); } diff --git a/src/scope.c b/src/scope.c index c2b8aab..b5f7960 100644 --- a/src/scope.c +++ b/src/scope.c @@ -75,6 +75,9 @@ int fully_qualified(struct ast_node *type) assert(type->_type.kind != AST_TYPE_TEMPLATE); if (type->_type.kind == AST_TYPE_STRUCT) { + if (!ast_flags(type, AST_FLAG_GENERIC)) + return 1; + if (type->_type.struc.impls) return fully_qualified(type->_type.struc.impls); @@ -82,6 +85,9 @@ int fully_qualified(struct ast_node *type) } if (type->_type.kind == AST_TYPE_UNION) { + if (!ast_flags(type, AST_FLAG_GENERIC)) + return 1; + if (type->_type.unio.impls) return fully_qualified(type->_type.unio.impls); @@ -91,8 +97,7 @@ int fully_qualified(struct ast_node *type) return fully_qualified(type->_type.next); } -static struct param_node *find_primitive(struct scope *scope, - struct proc_node *node, +static struct param_node *find_primitive(struct proc_node *node, struct ast_node *type) { struct param_node *param = node->primitives; @@ -123,8 +128,7 @@ static int compare_primitives(struct ast_node *a, struct ast_node *b); * otherwise use find_primitive() to get which primitive matches. * (are these names inverted from their intention? I'm not sure) */ -static struct param_node *match_primitive(struct scope *scope, - struct proc_node *node, +static struct param_node *match_primitive(struct proc_node *node, struct ast_node *type) { struct param_node *param = node->primitives; @@ -265,8 +269,7 @@ static int add_next_resolve(struct scope *scope, struct ast_node *proc, assert(params->node_type == AST_VAR); if (primitive_type(params->type)) { - struct param_node *match = match_primitive(scope, node, - params->type); + struct param_node *match = match_primitive(node, params->type); if (match) return add_next_resolve(scope, proc, match->proc, params->next); @@ -361,7 +364,7 @@ static struct ast_node *proc_resolve(struct scope *scope, } /* first check if we match a primitive type */ - struct param_node *found = find_primitive(scope, node, args->type); + struct param_node *found = find_primitive(node, args->type); if (found) return proc_resolve(scope, found->proc, args->next); @@ -508,6 +511,7 @@ void destroy_scope(struct scope *scope) destroy_visible(scope, scope->builtins); destroy_visible(scope, scope->enums); + destroy_visible(scope, scope->unions); destroy_visible(scope, scope->structs); destroy_visible(scope, scope->aliases); destroy_visible(scope, scope->templates); @@ -568,6 +572,7 @@ CREATE_VISIBLE(create_proc, procs, AST_PROC); CREATE_VISIBLE(create_enum, enums, AST_ENUM); CREATE_VISIBLE(create_alias, aliases, AST_ALIAS); CREATE_VISIBLE(create_struct, structs, AST_STRUCT); +CREATE_VISIBLE(create_union, unions, AST_UNION); CREATE_VISIBLE(create_builtin, builtins, AST_TYPE); CREATE_VISIBLE(create_template, templates, AST_TEMPLATE); @@ -592,6 +597,7 @@ REFERENCE_VISIBLE(reference_proc, procs, AST_PROC); REFERENCE_VISIBLE(reference_enum, enums, AST_ENUM); REFERENCE_VISIBLE(reference_alias, aliases, AST_ALIAS); +REFERENCE_VISIBLE(reference_union, unions, AST_UNION); REFERENCE_VISIBLE(reference_struct, structs, AST_STRUCT); REFERENCE_VISIBLE(reference_builtin, builtins, AST_TYPE); REFERENCE_VISIBLE(reference_template, templates, AST_TEMPLATE); @@ -620,6 +626,7 @@ FIND_VISIBLE(scope_find_enum, enums, AST_ENUM, _enum); FIND_VISIBLE(scope_find_alias, aliases, AST_ALIAS, _alias); FIND_VISIBLE(scope_find_builtin, builtins, AST_TYPE, _type); FIND_VISIBLE(scope_find_struct, structs, AST_STRUCT, _struct); +FIND_VISIBLE(scope_find_union, unions, AST_UNION, _union); FIND_VISIBLE(scope_find_template, templates, AST_TEMPLATE, _template); /* note that these return the first match for the ID, and as such might not be * what should be called. */ @@ -685,6 +692,7 @@ struct visible *create_type(struct scope *scope, struct ast_node *type) case AST_TEMPLATE: return create_template(scope, type); case AST_ENUM: return create_enum(scope, type); case AST_STRUCT: return create_struct(scope, type); + case AST_UNION: return create_union(scope, type); default: semantic_error(scope->fctx, type, "unknown type"); return NULL; @@ -699,6 +707,7 @@ int reference_type(int public, struct scope *scope, struct visible *visible) case AST_TEMPLATE: return reference_template(public, scope, visible); case AST_ENUM: return reference_enum(public, scope, visible); case AST_STRUCT: return reference_struct(public, scope, visible); + case AST_UNION: return reference_union(public, scope, visible); default: semantic_error(scope->fctx, visible->node, "unknown type"); return 1; @@ -743,6 +752,10 @@ struct ast_node *scope_find_type(struct scope *scope, struct ast_node *id) if (found) return found; + found = scope_find_union(scope, id); + if (found) + return found; + found = scope_find_alias(scope, id); if (found) return found; @@ -914,6 +927,10 @@ static int implements_var(enum match_flags flags, struct scope *scope, struct ast_node *arg_type, struct ast_node *param_type, struct ast_node *var) { + (void)(flags); + (void)(scope); + (void)(arg_type); + (void)(param_type); assert(var->node_type == AST_VAR); /* temp */ return 0; @@ -1017,13 +1034,6 @@ static int implements_typeof(enum match_flags flags, struct scope *scope, return implements(flags, scope, arg_type, param_type); } -static int implements_pointer(enum match_flags flags, struct scope *scope, - struct ast_node *arg_type, - struct ast_node *param_type) -{ - return implements(flags, scope, arg_type, param_type); -} - int implements(enum match_flags flags, struct scope *scope, struct ast_node *arg_type, struct ast_node *param_type) { @@ -1169,6 +1179,7 @@ static int match_params(enum match_flags flags, struct scope *scope, static struct ast_node *match_proc(enum match_flags flags, struct scope *scope, struct ast_node *id, struct ast_node *args) { + (void)(flags); struct callable *cb = scope->callable; while (cb) { if (identical_ast_nodes(0, cb->id, id)) @@ -1548,6 +1559,10 @@ struct ast_node *scope_resolve_type(struct scope *scope, struct ast_node *type) id = type->_struct.id; break; + case AST_UNION: + id = type->_union.id; + break; + case AST_ENUM: id = type->_enum.id; break; diff --git a/tests/unions.cu b/tests/unions.cu new file mode 100644 index 0000000..6c3edc5 --- /dev/null +++ b/tests/unions.cu @@ -0,0 +1,23 @@ +typedef any {} + +union basic_union { + a u32; + b i64; + c f32; +} + +union complex_union(A any, B any, C any) { + a A; + b B; + c C; +} + +main() +{ + simple_named const = {.b = 1} as basic_union; + simple_ordinal const = {1 as u32} as basic_union; + + // TODO: unions should be fully actualized + complex_named const = {.b = 1} as complex_union(u32, i64, f32); + complex_ordinal const = {1 as u32} as complex_union(u32, i64, f32); +} |
