From 047eafe80c300a46a059f3a50a8fcef0d540859c Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 14 May 2020 14:49:20 -0700 Subject: [PATCH] :arrow_up: tree-sitter-cli --- package.json | 2 +- src/parser.c | 244 +++++++++++++++++++-------------------- src/tree_sitter/parser.h | 50 +++++--- 3 files changed, 154 insertions(+), 142 deletions(-) diff --git a/package.json b/package.json index d1d345e..d24a6a6 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "nan": "^2.14.0" }, "devDependencies": { - "tree-sitter-cli": "^0.16.5" + "tree-sitter-cli": "^0.16.7" }, "scripts": { "test": "tree-sitter test && tree-sitter parse examples/*.html --quiet --time", diff --git a/src/parser.c b/src/parser.c index af05ed7..911aef5 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1743,128 +1743,128 @@ static uint32_t ts_small_parse_table_map[] = { }; static TSParseActionEntry ts_parse_actions[] = { - [0] = {.count = 0, .reusable = false}, - [1] = {.count = 1, .reusable = false}, RECOVER(), - [3] = {.count = 1, .reusable = true}, SHIFT_EXTRA(), - [5] = {.count = 1, .reusable = true}, REDUCE(sym_fragment, 0), - [7] = {.count = 1, .reusable = false}, SHIFT(75), - [9] = {.count = 1, .reusable = false}, SHIFT(52), - [11] = {.count = 1, .reusable = false}, SHIFT(81), - [13] = {.count = 1, .reusable = true}, SHIFT(8), - [15] = {.count = 1, .reusable = false}, SHIFT(93), - [17] = {.count = 1, .reusable = false}, SHIFT(51), - [19] = {.count = 1, .reusable = false}, SHIFT(66), - [21] = {.count = 1, .reusable = true}, SHIFT(6), - [23] = {.count = 1, .reusable = true}, SHIFT(36), - [25] = {.count = 1, .reusable = false}, SHIFT(62), - [27] = {.count = 1, .reusable = true}, SHIFT(22), - [29] = {.count = 1, .reusable = true}, SHIFT(2), - [31] = {.count = 1, .reusable = true}, SHIFT(17), - [33] = {.count = 1, .reusable = true}, SHIFT(3), - [35] = {.count = 1, .reusable = true}, SHIFT(12), - [37] = {.count = 2, .reusable = false}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(93), - [40] = {.count = 2, .reusable = false}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(51), - [43] = {.count = 2, .reusable = false}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(89), - [46] = {.count = 2, .reusable = true}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(6), - [49] = {.count = 1, .reusable = true}, REDUCE(aux_sym_fragment_repeat1, 2), - [51] = {.count = 2, .reusable = false}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(75), - [54] = {.count = 2, .reusable = false}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(52), - [57] = {.count = 2, .reusable = false}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(81), - [60] = {.count = 2, .reusable = true}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(7), - [63] = {.count = 1, .reusable = true}, REDUCE(sym_fragment, 1), - [65] = {.count = 1, .reusable = true}, SHIFT(7), - [67] = {.count = 1, .reusable = true}, SHIFT(26), - [69] = {.count = 1, .reusable = true}, SHIFT(27), - [71] = {.count = 1, .reusable = true}, SHIFT(43), - [73] = {.count = 1, .reusable = true}, REDUCE(sym_script_element, 3), - [75] = {.count = 1, .reusable = false}, REDUCE(sym_script_element, 3), - [77] = {.count = 1, .reusable = true}, REDUCE(sym_element, 1), - [79] = {.count = 1, .reusable = false}, REDUCE(sym_element, 1), - [81] = {.count = 1, .reusable = false}, REDUCE(sym_element, 2), - [83] = {.count = 1, .reusable = true}, REDUCE(sym_element, 2), - [85] = {.count = 1, .reusable = false}, REDUCE(sym_script_element, 2), - [87] = {.count = 1, .reusable = true}, REDUCE(sym_script_element, 2), - [89] = {.count = 1, .reusable = true}, SHIFT(33), - [91] = {.count = 1, .reusable = true}, SHIFT(16), - [93] = {.count = 1, .reusable = false}, REDUCE(sym_self_closing_tag, 4), - [95] = {.count = 1, .reusable = true}, REDUCE(sym_self_closing_tag, 4), - [97] = {.count = 1, .reusable = false}, REDUCE(sym_doctype, 4), - [99] = {.count = 1, .reusable = true}, REDUCE(sym_doctype, 4), - [101] = {.count = 1, .reusable = false}, REDUCE(sym_style_element, 3), - [103] = {.count = 1, .reusable = true}, REDUCE(sym_style_element, 3), - [105] = {.count = 1, .reusable = false}, REDUCE(sym_element, 3), - [107] = {.count = 1, .reusable = true}, REDUCE(sym_element, 3), - [109] = {.count = 1, .reusable = true}, REDUCE(sym_style_element, 2), - [111] = {.count = 1, .reusable = false}, REDUCE(sym_style_element, 2), - [113] = {.count = 1, .reusable = true}, REDUCE(sym_end_tag, 3), - [115] = {.count = 1, .reusable = false}, REDUCE(sym_end_tag, 3), - [117] = {.count = 1, .reusable = false}, REDUCE(sym_erroneous_end_tag, 3), - [119] = {.count = 1, .reusable = true}, REDUCE(sym_erroneous_end_tag, 3), - [121] = {.count = 1, .reusable = false}, REDUCE(sym_start_tag, 3), - [123] = {.count = 1, .reusable = true}, REDUCE(sym_start_tag, 3), - [125] = {.count = 1, .reusable = true}, REDUCE(sym_self_closing_tag, 3), - [127] = {.count = 1, .reusable = false}, REDUCE(sym_self_closing_tag, 3), - [129] = {.count = 1, .reusable = true}, REDUCE(aux_sym_start_tag_repeat1, 2), - [131] = {.count = 2, .reusable = true}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(43), - [134] = {.count = 1, .reusable = true}, SHIFT(31), - [136] = {.count = 1, .reusable = true}, SHIFT(30), - [138] = {.count = 1, .reusable = false}, REDUCE(sym_start_tag, 4), - [140] = {.count = 1, .reusable = true}, REDUCE(sym_start_tag, 4), - [142] = {.count = 1, .reusable = true}, SHIFT(48), - [144] = {.count = 1, .reusable = true}, SHIFT(74), - [146] = {.count = 1, .reusable = true}, SHIFT(71), - [148] = {.count = 1, .reusable = true}, SHIFT(73), - [150] = {.count = 1, .reusable = true}, SHIFT(49), - [152] = {.count = 1, .reusable = true}, SHIFT(59), - [154] = {.count = 1, .reusable = true}, REDUCE(sym_attribute, 1), - [156] = {.count = 1, .reusable = true}, SHIFT(40), - [158] = {.count = 1, .reusable = true}, SHIFT(69), - [160] = {.count = 1, .reusable = true}, SHIFT(67), - [162] = {.count = 1, .reusable = true}, SHIFT(64), - [164] = {.count = 1, .reusable = true}, SHIFT(60), - [166] = {.count = 1, .reusable = true}, SHIFT(61), - [168] = {.count = 2, .reusable = true}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(49), - [171] = {.count = 1, .reusable = true}, REDUCE(sym_attribute, 3), - [173] = {.count = 1, .reusable = true}, SHIFT(44), - [175] = {.count = 1, .reusable = true}, REDUCE(sym_quoted_attribute_value, 2), - [177] = {.count = 1, .reusable = true}, SHIFT(32), - [179] = {.count = 1, .reusable = true}, SHIFT(46), - [181] = {.count = 1, .reusable = true}, SHIFT(45), - [183] = {.count = 1, .reusable = true}, SHIFT(9), - [185] = {.count = 1, .reusable = true}, REDUCE(sym_quoted_attribute_value, 3), - [187] = {.count = 1, .reusable = true}, SHIFT(85), - [189] = {.count = 1, .reusable = true}, SHIFT(65), - [191] = {.count = 1, .reusable = true}, SHIFT(92), - [193] = {.count = 1, .reusable = true}, SHIFT(68), - [195] = {.count = 1, .reusable = true}, SHIFT(72), - [197] = {.count = 1, .reusable = true}, SHIFT(63), - [199] = {.count = 1, .reusable = true}, REDUCE(sym_script_start_tag, 4), - [201] = {.count = 1, .reusable = true}, REDUCE(sym_style_start_tag, 3), - [203] = {.count = 1, .reusable = true}, REDUCE(sym_script_start_tag, 3), - [205] = {.count = 1, .reusable = true}, SHIFT(82), - [207] = {.count = 1, .reusable = true}, SHIFT(76), - [209] = {.count = 1, .reusable = false}, SHIFT(70), - [211] = {.count = 1, .reusable = true}, SHIFT(87), - [213] = {.count = 1, .reusable = true}, SHIFT(83), - [215] = {.count = 1, .reusable = true}, SHIFT(86), - [217] = {.count = 1, .reusable = false}, SHIFT(50), - [219] = {.count = 1, .reusable = true}, SHIFT(88), - [221] = {.count = 1, .reusable = true}, REDUCE(sym_style_start_tag, 4), - [223] = {.count = 1, .reusable = true}, SHIFT(78), - [225] = {.count = 1, .reusable = true}, SHIFT(79), - [227] = {.count = 1, .reusable = true}, SHIFT(25), - [229] = {.count = 1, .reusable = true}, ACCEPT_INPUT(), - [231] = {.count = 1, .reusable = true}, SHIFT(53), - [233] = {.count = 1, .reusable = true}, SHIFT(91), - [235] = {.count = 1, .reusable = true}, SHIFT(18), - [237] = {.count = 1, .reusable = true}, SHIFT(84), - [239] = {.count = 1, .reusable = true}, SHIFT(37), - [241] = {.count = 1, .reusable = true}, SHIFT(24), - [243] = {.count = 1, .reusable = true}, SHIFT(34), - [245] = {.count = 1, .reusable = true}, SHIFT(58), - [247] = {.count = 1, .reusable = true}, SHIFT(80), - [249] = {.count = 1, .reusable = true}, SHIFT(39), - [251] = {.count = 1, .reusable = true}, SHIFT(90), + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(93), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(62), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [37] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(93), + [40] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(51), + [43] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(89), + [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(6), + [49] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_fragment_repeat1, 2), + [51] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(75), + [54] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(52), + [57] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(81), + [60] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_fragment_repeat1, 2), SHIFT_REPEAT(7), + [63] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment, 1), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [73] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_element, 3), + [75] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_script_element, 3), + [77] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 1), + [79] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 1), + [81] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 2), + [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 2), + [85] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_script_element, 2), + [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_element, 2), + [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_closing_tag, 4), + [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_closing_tag, 4), + [97] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_doctype, 4), + [99] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_doctype, 4), + [101] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 3), + [103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 3), + [105] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 3), + [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 3), + [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 2), + [111] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 2), + [113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_end_tag, 3), + [115] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_end_tag, 3), + [117] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_erroneous_end_tag, 3), + [119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_erroneous_end_tag, 3), + [121] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_start_tag, 3), + [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_start_tag, 3), + [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_closing_tag, 3), + [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_closing_tag, 3), + [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), + [131] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(43), + [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_start_tag, 4), + [140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_start_tag, 4), + [142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 1), + [156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [168] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(49), + [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3), + [173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_attribute_value, 2), + [177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_attribute_value, 3), + [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_start_tag, 4), + [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_start_tag, 3), + [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_start_tag, 3), + [205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [217] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), + [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_start_tag, 4), + [223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [229] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), }; #ifdef __cplusplus diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h index 9df91f8..11bf4fc 100644 --- a/src/tree_sitter/parser.h +++ b/src/tree_sitter/parser.h @@ -62,13 +62,13 @@ typedef struct { TSStateId state; bool extra : 1; bool repetition : 1; - }; + } shift; struct { TSSymbol symbol; int16_t dynamic_precedence; uint8_t child_count; uint8_t production_id; - }; + } reduce; } params; TSParseActionType type : 4; } TSParseAction; @@ -83,7 +83,7 @@ typedef union { struct { uint8_t count; bool reusable : 1; - }; + } entry; } TSParseActionEntry; struct TSLanguage { @@ -167,22 +167,28 @@ struct TSLanguage { #define ACTIONS(id) id -#define SHIFT(state_value) \ - { \ - { \ - .type = TSParseActionTypeShift, \ - .params = {.state = state_value}, \ - } \ +#define SHIFT(state_value) \ + { \ + { \ + .params = { \ + .shift = { \ + .state = state_value \ + } \ + }, \ + .type = TSParseActionTypeShift \ + } \ } #define SHIFT_REPEAT(state_value) \ { \ { \ - .type = TSParseActionTypeShift, \ .params = { \ - .state = state_value, \ - .repetition = true \ + .shift = { \ + .state = state_value, \ + .repetition = true \ + } \ }, \ + .type = TSParseActionTypeShift \ } \ } @@ -194,20 +200,26 @@ struct TSLanguage { #define SHIFT_EXTRA() \ { \ { \ - .type = TSParseActionTypeShift, \ - .params = {.extra = true} \ + .params = { \ + .shift = { \ + .extra = true \ + } \ + }, \ + .type = TSParseActionTypeShift \ } \ } #define REDUCE(symbol_val, child_count_val, ...) \ { \ { \ - .type = TSParseActionTypeReduce, \ .params = { \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - } \ + .reduce = { \ + .symbol = symbol_val, \ + .child_count = child_count_val, \ + __VA_ARGS__ \ + }, \ + }, \ + .type = TSParseActionTypeReduce \ } \ }