@@ -277,79 +277,81 @@ enum pm_node_type {
277
277
PM_IMAGINARY_NODE = 66 ,
278
278
PM_IMPLICIT_NODE = 67 ,
279
279
PM_IN_NODE = 68 ,
280
- PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 69 ,
281
- PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 70 ,
282
- PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 71 ,
283
- PM_INSTANCE_VARIABLE_READ_NODE = 72 ,
284
- PM_INSTANCE_VARIABLE_TARGET_NODE = 73 ,
285
- PM_INSTANCE_VARIABLE_WRITE_NODE = 74 ,
286
- PM_INTEGER_NODE = 75 ,
287
- PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 76 ,
288
- PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 77 ,
289
- PM_INTERPOLATED_STRING_NODE = 78 ,
290
- PM_INTERPOLATED_SYMBOL_NODE = 79 ,
291
- PM_INTERPOLATED_X_STRING_NODE = 80 ,
292
- PM_KEYWORD_HASH_NODE = 81 ,
293
- PM_KEYWORD_PARAMETER_NODE = 82 ,
294
- PM_KEYWORD_REST_PARAMETER_NODE = 83 ,
295
- PM_LAMBDA_NODE = 84 ,
296
- PM_LOCAL_VARIABLE_AND_WRITE_NODE = 85 ,
297
- PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 86 ,
298
- PM_LOCAL_VARIABLE_OR_WRITE_NODE = 87 ,
299
- PM_LOCAL_VARIABLE_READ_NODE = 88 ,
300
- PM_LOCAL_VARIABLE_TARGET_NODE = 89 ,
301
- PM_LOCAL_VARIABLE_WRITE_NODE = 90 ,
302
- PM_MATCH_LAST_LINE_NODE = 91 ,
303
- PM_MATCH_PREDICATE_NODE = 92 ,
304
- PM_MATCH_REQUIRED_NODE = 93 ,
305
- PM_MATCH_WRITE_NODE = 94 ,
306
- PM_MISSING_NODE = 95 ,
307
- PM_MODULE_NODE = 96 ,
308
- PM_MULTI_TARGET_NODE = 97 ,
309
- PM_MULTI_WRITE_NODE = 98 ,
310
- PM_NEXT_NODE = 99 ,
311
- PM_NIL_NODE = 100 ,
312
- PM_NO_KEYWORDS_PARAMETER_NODE = 101 ,
313
- PM_NUMBERED_REFERENCE_READ_NODE = 102 ,
314
- PM_OPTIONAL_PARAMETER_NODE = 103 ,
315
- PM_OR_NODE = 104 ,
316
- PM_PARAMETERS_NODE = 105 ,
317
- PM_PARENTHESES_NODE = 106 ,
318
- PM_PINNED_EXPRESSION_NODE = 107 ,
319
- PM_PINNED_VARIABLE_NODE = 108 ,
320
- PM_POST_EXECUTION_NODE = 109 ,
321
- PM_PRE_EXECUTION_NODE = 110 ,
322
- PM_PROGRAM_NODE = 111 ,
323
- PM_RANGE_NODE = 112 ,
324
- PM_RATIONAL_NODE = 113 ,
325
- PM_REDO_NODE = 114 ,
326
- PM_REGULAR_EXPRESSION_NODE = 115 ,
327
- PM_REQUIRED_DESTRUCTURED_PARAMETER_NODE = 116 ,
328
- PM_REQUIRED_PARAMETER_NODE = 117 ,
329
- PM_RESCUE_MODIFIER_NODE = 118 ,
330
- PM_RESCUE_NODE = 119 ,
331
- PM_REST_PARAMETER_NODE = 120 ,
332
- PM_RETRY_NODE = 121 ,
333
- PM_RETURN_NODE = 122 ,
334
- PM_SELF_NODE = 123 ,
335
- PM_SINGLETON_CLASS_NODE = 124 ,
336
- PM_SOURCE_ENCODING_NODE = 125 ,
337
- PM_SOURCE_FILE_NODE = 126 ,
338
- PM_SOURCE_LINE_NODE = 127 ,
339
- PM_SPLAT_NODE = 128 ,
340
- PM_STATEMENTS_NODE = 129 ,
341
- PM_STRING_CONCAT_NODE = 130 ,
342
- PM_STRING_NODE = 131 ,
343
- PM_SUPER_NODE = 132 ,
344
- PM_SYMBOL_NODE = 133 ,
345
- PM_TRUE_NODE = 134 ,
346
- PM_UNDEF_NODE = 135 ,
347
- PM_UNLESS_NODE = 136 ,
348
- PM_UNTIL_NODE = 137 ,
349
- PM_WHEN_NODE = 138 ,
350
- PM_WHILE_NODE = 139 ,
351
- PM_X_STRING_NODE = 140 ,
352
- PM_YIELD_NODE = 141 ,
280
+ PM_INDEX_AND_WRITE_NODE = 69 ,
281
+ PM_INDEX_OPERATOR_WRITE_NODE = 70 ,
282
+ PM_INDEX_OR_WRITE_NODE = 71 ,
283
+ PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 72 ,
284
+ PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 73 ,
285
+ PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 74 ,
286
+ PM_INSTANCE_VARIABLE_READ_NODE = 75 ,
287
+ PM_INSTANCE_VARIABLE_TARGET_NODE = 76 ,
288
+ PM_INSTANCE_VARIABLE_WRITE_NODE = 77 ,
289
+ PM_INTEGER_NODE = 78 ,
290
+ PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 79 ,
291
+ PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 80 ,
292
+ PM_INTERPOLATED_STRING_NODE = 81 ,
293
+ PM_INTERPOLATED_SYMBOL_NODE = 82 ,
294
+ PM_INTERPOLATED_X_STRING_NODE = 83 ,
295
+ PM_KEYWORD_HASH_NODE = 84 ,
296
+ PM_KEYWORD_PARAMETER_NODE = 85 ,
297
+ PM_KEYWORD_REST_PARAMETER_NODE = 86 ,
298
+ PM_LAMBDA_NODE = 87 ,
299
+ PM_LOCAL_VARIABLE_AND_WRITE_NODE = 88 ,
300
+ PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 89 ,
301
+ PM_LOCAL_VARIABLE_OR_WRITE_NODE = 90 ,
302
+ PM_LOCAL_VARIABLE_READ_NODE = 91 ,
303
+ PM_LOCAL_VARIABLE_TARGET_NODE = 92 ,
304
+ PM_LOCAL_VARIABLE_WRITE_NODE = 93 ,
305
+ PM_MATCH_LAST_LINE_NODE = 94 ,
306
+ PM_MATCH_PREDICATE_NODE = 95 ,
307
+ PM_MATCH_REQUIRED_NODE = 96 ,
308
+ PM_MATCH_WRITE_NODE = 97 ,
309
+ PM_MISSING_NODE = 98 ,
310
+ PM_MODULE_NODE = 99 ,
311
+ PM_MULTI_TARGET_NODE = 100 ,
312
+ PM_MULTI_WRITE_NODE = 101 ,
313
+ PM_NEXT_NODE = 102 ,
314
+ PM_NIL_NODE = 103 ,
315
+ PM_NO_KEYWORDS_PARAMETER_NODE = 104 ,
316
+ PM_NUMBERED_REFERENCE_READ_NODE = 105 ,
317
+ PM_OPTIONAL_PARAMETER_NODE = 106 ,
318
+ PM_OR_NODE = 107 ,
319
+ PM_PARAMETERS_NODE = 108 ,
320
+ PM_PARENTHESES_NODE = 109 ,
321
+ PM_PINNED_EXPRESSION_NODE = 110 ,
322
+ PM_PINNED_VARIABLE_NODE = 111 ,
323
+ PM_POST_EXECUTION_NODE = 112 ,
324
+ PM_PRE_EXECUTION_NODE = 113 ,
325
+ PM_PROGRAM_NODE = 114 ,
326
+ PM_RANGE_NODE = 115 ,
327
+ PM_RATIONAL_NODE = 116 ,
328
+ PM_REDO_NODE = 117 ,
329
+ PM_REGULAR_EXPRESSION_NODE = 118 ,
330
+ PM_REQUIRED_PARAMETER_NODE = 119 ,
331
+ PM_RESCUE_MODIFIER_NODE = 120 ,
332
+ PM_RESCUE_NODE = 121 ,
333
+ PM_REST_PARAMETER_NODE = 122 ,
334
+ PM_RETRY_NODE = 123 ,
335
+ PM_RETURN_NODE = 124 ,
336
+ PM_SELF_NODE = 125 ,
337
+ PM_SINGLETON_CLASS_NODE = 126 ,
338
+ PM_SOURCE_ENCODING_NODE = 127 ,
339
+ PM_SOURCE_FILE_NODE = 128 ,
340
+ PM_SOURCE_LINE_NODE = 129 ,
341
+ PM_SPLAT_NODE = 130 ,
342
+ PM_STATEMENTS_NODE = 131 ,
343
+ PM_STRING_CONCAT_NODE = 132 ,
344
+ PM_STRING_NODE = 133 ,
345
+ PM_SUPER_NODE = 134 ,
346
+ PM_SYMBOL_NODE = 135 ,
347
+ PM_TRUE_NODE = 136 ,
348
+ PM_UNDEF_NODE = 137 ,
349
+ PM_UNLESS_NODE = 138 ,
350
+ PM_UNTIL_NODE = 139 ,
351
+ PM_WHEN_NODE = 140 ,
352
+ PM_WHILE_NODE = 141 ,
353
+ PM_X_STRING_NODE = 142 ,
354
+ PM_YIELD_NODE = 143 ,
353
355
PM_SCOPE_NODE
354
356
};
355
357
@@ -424,6 +426,8 @@ typedef struct pm_and_node {
424
426
// ArgumentsNode
425
427
//
426
428
// Type: PM_ARGUMENTS_NODE
429
+ // Flags:
430
+ // PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT
427
431
typedef struct pm_arguments_node {
428
432
pm_node_t base ;
429
433
struct pm_node_list arguments ;
@@ -562,9 +566,6 @@ typedef struct pm_call_and_write_node {
562
566
struct pm_node * receiver ;
563
567
pm_location_t call_operator_loc ;
564
568
pm_location_t message_loc ;
565
- pm_location_t opening_loc ;
566
- struct pm_arguments_node * arguments ;
567
- pm_location_t closing_loc ;
568
569
pm_constant_id_t read_name ;
569
570
pm_constant_id_t write_name ;
570
571
pm_location_t operator_loc ;
@@ -600,9 +601,6 @@ typedef struct pm_call_operator_write_node {
600
601
struct pm_node * receiver ;
601
602
pm_location_t call_operator_loc ;
602
603
pm_location_t message_loc ;
603
- pm_location_t opening_loc ;
604
- struct pm_arguments_node * arguments ;
605
- pm_location_t closing_loc ;
606
604
pm_constant_id_t read_name ;
607
605
pm_constant_id_t write_name ;
608
606
pm_constant_id_t operator ;
@@ -621,9 +619,6 @@ typedef struct pm_call_or_write_node {
621
619
struct pm_node * receiver ;
622
620
pm_location_t call_operator_loc ;
623
621
pm_location_t message_loc ;
624
- pm_location_t opening_loc ;
625
- struct pm_arguments_node * arguments ;
626
- pm_location_t closing_loc ;
627
622
pm_constant_id_t read_name ;
628
623
pm_constant_id_t write_name ;
629
624
pm_location_t operator_loc ;
@@ -1071,8 +1066,8 @@ typedef struct pm_hash_node {
1071
1066
typedef struct pm_hash_pattern_node {
1072
1067
pm_node_t base ;
1073
1068
struct pm_node * constant ;
1074
- struct pm_node_list assocs ;
1075
- struct pm_node * kwrest ;
1069
+ struct pm_node_list elements ;
1070
+ struct pm_node * rest ;
1076
1071
pm_location_t opening_loc ;
1077
1072
pm_location_t closing_loc ;
1078
1073
} pm_hash_pattern_node_t ;
@@ -1116,6 +1111,61 @@ typedef struct pm_in_node {
1116
1111
pm_location_t then_loc ;
1117
1112
} pm_in_node_t ;
1118
1113
1114
+ // IndexAndWriteNode
1115
+ //
1116
+ // Type: PM_INDEX_AND_WRITE_NODE
1117
+ // Flags:
1118
+ // PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1119
+ // PM_CALL_NODE_FLAGS_VARIABLE_CALL
1120
+ typedef struct pm_index_and_write_node {
1121
+ pm_node_t base ;
1122
+ struct pm_node * receiver ;
1123
+ pm_location_t call_operator_loc ;
1124
+ pm_location_t opening_loc ;
1125
+ struct pm_arguments_node * arguments ;
1126
+ pm_location_t closing_loc ;
1127
+ struct pm_node * block ;
1128
+ pm_location_t operator_loc ;
1129
+ struct pm_node * value ;
1130
+ } pm_index_and_write_node_t ;
1131
+
1132
+ // IndexOperatorWriteNode
1133
+ //
1134
+ // Type: PM_INDEX_OPERATOR_WRITE_NODE
1135
+ // Flags:
1136
+ // PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1137
+ // PM_CALL_NODE_FLAGS_VARIABLE_CALL
1138
+ typedef struct pm_index_operator_write_node {
1139
+ pm_node_t base ;
1140
+ struct pm_node * receiver ;
1141
+ pm_location_t call_operator_loc ;
1142
+ pm_location_t opening_loc ;
1143
+ struct pm_arguments_node * arguments ;
1144
+ pm_location_t closing_loc ;
1145
+ struct pm_node * block ;
1146
+ pm_constant_id_t operator ;
1147
+ pm_location_t operator_loc ;
1148
+ struct pm_node * value ;
1149
+ } pm_index_operator_write_node_t ;
1150
+
1151
+ // IndexOrWriteNode
1152
+ //
1153
+ // Type: PM_INDEX_OR_WRITE_NODE
1154
+ // Flags:
1155
+ // PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1156
+ // PM_CALL_NODE_FLAGS_VARIABLE_CALL
1157
+ typedef struct pm_index_or_write_node {
1158
+ pm_node_t base ;
1159
+ struct pm_node * receiver ;
1160
+ pm_location_t call_operator_loc ;
1161
+ pm_location_t opening_loc ;
1162
+ struct pm_arguments_node * arguments ;
1163
+ pm_location_t closing_loc ;
1164
+ struct pm_node * block ;
1165
+ pm_location_t operator_loc ;
1166
+ struct pm_node * value ;
1167
+ } pm_index_or_write_node_t ;
1168
+
1119
1169
// InstanceVariableAndWriteNode
1120
1170
//
1121
1171
// Type: PM_INSTANCE_VARIABLE_AND_WRITE_NODE
@@ -1439,7 +1489,9 @@ typedef struct pm_module_node {
1439
1489
// Type: PM_MULTI_TARGET_NODE
1440
1490
typedef struct pm_multi_target_node {
1441
1491
pm_node_t base ;
1442
- struct pm_node_list targets ;
1492
+ struct pm_node_list lefts ;
1493
+ struct pm_node * rest ;
1494
+ struct pm_node_list rights ;
1443
1495
pm_location_t lparen_loc ;
1444
1496
pm_location_t rparen_loc ;
1445
1497
} pm_multi_target_node_t ;
@@ -1449,7 +1501,9 @@ typedef struct pm_multi_target_node {
1449
1501
// Type: PM_MULTI_WRITE_NODE
1450
1502
typedef struct pm_multi_write_node {
1451
1503
pm_node_t base ;
1452
- struct pm_node_list targets ;
1504
+ struct pm_node_list lefts ;
1505
+ struct pm_node * rest ;
1506
+ struct pm_node_list rights ;
1453
1507
pm_location_t lparen_loc ;
1454
1508
pm_location_t rparen_loc ;
1455
1509
pm_location_t operator_loc ;
@@ -1632,16 +1686,6 @@ typedef struct pm_regular_expression_node {
1632
1686
pm_string_t unescaped ;
1633
1687
} pm_regular_expression_node_t ;
1634
1688
1635
- // RequiredDestructuredParameterNode
1636
- //
1637
- // Type: PM_REQUIRED_DESTRUCTURED_PARAMETER_NODE
1638
- typedef struct pm_required_destructured_parameter_node {
1639
- pm_node_t base ;
1640
- struct pm_node_list parameters ;
1641
- pm_location_t opening_loc ;
1642
- pm_location_t closing_loc ;
1643
- } pm_required_destructured_parameter_node_t ;
1644
-
1645
1689
// RequiredParameterNode
1646
1690
//
1647
1691
// Type: PM_REQUIRED_PARAMETER_NODE
@@ -1889,6 +1933,11 @@ typedef struct pm_yield_node {
1889
1933
pm_location_t rparen_loc ;
1890
1934
} pm_yield_node_t ;
1891
1935
1936
+ // ArgumentsNodeFlags
1937
+ typedef enum pm_arguments_node_flags {
1938
+ PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT = 1 << 0 ,
1939
+ } pm_arguments_node_flags_t ;
1940
+
1892
1941
// CallNodeFlags
1893
1942
typedef enum pm_call_node_flags {
1894
1943
PM_CALL_NODE_FLAGS_SAFE_NAVIGATION = 1 << 0 ,
0 commit comments