prism 0.13.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -1
- data/README.md +4 -1
- data/config.yml +96 -35
- data/docs/fuzzing.md +5 -10
- data/docs/prism.png +0 -0
- data/docs/serialization.md +10 -0
- data/ext/prism/api_node.c +239 -86
- data/ext/prism/extension.c +35 -48
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +170 -118
- data/include/prism/diagnostic.h +1 -0
- data/include/prism/node.h +8 -0
- data/include/prism/parser.h +26 -0
- data/include/prism/util/pm_buffer.h +3 -0
- data/include/prism/util/pm_constant_pool.h +21 -2
- data/include/prism/util/pm_string.h +2 -1
- data/include/prism/version.h +2 -2
- data/include/prism.h +1 -2
- data/lib/prism/compiler.rb +150 -141
- data/lib/prism/debug.rb +30 -26
- data/lib/prism/dispatcher.rb +42 -0
- data/lib/prism/dsl.rb +23 -8
- data/lib/prism/ffi.rb +4 -4
- data/lib/prism/lex_compat.rb +42 -8
- data/lib/prism/mutation_compiler.rb +18 -3
- data/lib/prism/node.rb +2061 -191
- data/lib/prism/node_ext.rb +44 -0
- data/lib/prism/parse_result.rb +32 -5
- data/lib/prism/pattern.rb +1 -1
- data/lib/prism/serialize.rb +95 -87
- data/lib/prism/visitor.rb +9 -0
- data/prism.gemspec +2 -3
- data/src/diagnostic.c +2 -1
- data/src/node.c +99 -32
- data/src/prettyprint.c +137 -80
- data/src/prism.c +1960 -843
- data/src/serialize.c +140 -79
- data/src/util/pm_buffer.c +9 -7
- data/src/util/pm_constant_pool.c +25 -11
- metadata +3 -4
- data/include/prism/unescape.h +0 -48
- data/src/unescape.c +0 -637
data/src/node.c
CHANGED
@@ -201,11 +201,6 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
201
201
|
if (cast->receiver != NULL) {
|
202
202
|
pm_node_destroy(parser, (pm_node_t *)cast->receiver);
|
203
203
|
}
|
204
|
-
if (cast->arguments != NULL) {
|
205
|
-
pm_node_destroy(parser, (pm_node_t *)cast->arguments);
|
206
|
-
}
|
207
|
-
pm_string_free(&cast->read_name);
|
208
|
-
pm_string_free(&cast->write_name);
|
209
204
|
pm_node_destroy(parser, (pm_node_t *)cast->value);
|
210
205
|
break;
|
211
206
|
}
|
@@ -221,7 +216,6 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
221
216
|
if (cast->block != NULL) {
|
222
217
|
pm_node_destroy(parser, (pm_node_t *)cast->block);
|
223
218
|
}
|
224
|
-
pm_string_free(&cast->name);
|
225
219
|
break;
|
226
220
|
}
|
227
221
|
#line 57 "node.c.erb"
|
@@ -230,11 +224,6 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
230
224
|
if (cast->receiver != NULL) {
|
231
225
|
pm_node_destroy(parser, (pm_node_t *)cast->receiver);
|
232
226
|
}
|
233
|
-
if (cast->arguments != NULL) {
|
234
|
-
pm_node_destroy(parser, (pm_node_t *)cast->arguments);
|
235
|
-
}
|
236
|
-
pm_string_free(&cast->read_name);
|
237
|
-
pm_string_free(&cast->write_name);
|
238
227
|
pm_node_destroy(parser, (pm_node_t *)cast->value);
|
239
228
|
break;
|
240
229
|
}
|
@@ -244,11 +233,6 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
244
233
|
if (cast->receiver != NULL) {
|
245
234
|
pm_node_destroy(parser, (pm_node_t *)cast->receiver);
|
246
235
|
}
|
247
|
-
if (cast->arguments != NULL) {
|
248
|
-
pm_node_destroy(parser, (pm_node_t *)cast->arguments);
|
249
|
-
}
|
250
|
-
pm_string_free(&cast->read_name);
|
251
|
-
pm_string_free(&cast->write_name);
|
252
236
|
pm_node_destroy(parser, (pm_node_t *)cast->value);
|
253
237
|
break;
|
254
238
|
}
|
@@ -584,6 +568,51 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
584
568
|
}
|
585
569
|
break;
|
586
570
|
}
|
571
|
+
#line 57 "node.c.erb"
|
572
|
+
case PM_INDEX_AND_WRITE_NODE: {
|
573
|
+
pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
|
574
|
+
if (cast->receiver != NULL) {
|
575
|
+
pm_node_destroy(parser, (pm_node_t *)cast->receiver);
|
576
|
+
}
|
577
|
+
if (cast->arguments != NULL) {
|
578
|
+
pm_node_destroy(parser, (pm_node_t *)cast->arguments);
|
579
|
+
}
|
580
|
+
if (cast->block != NULL) {
|
581
|
+
pm_node_destroy(parser, (pm_node_t *)cast->block);
|
582
|
+
}
|
583
|
+
pm_node_destroy(parser, (pm_node_t *)cast->value);
|
584
|
+
break;
|
585
|
+
}
|
586
|
+
#line 57 "node.c.erb"
|
587
|
+
case PM_INDEX_OPERATOR_WRITE_NODE: {
|
588
|
+
pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
|
589
|
+
if (cast->receiver != NULL) {
|
590
|
+
pm_node_destroy(parser, (pm_node_t *)cast->receiver);
|
591
|
+
}
|
592
|
+
if (cast->arguments != NULL) {
|
593
|
+
pm_node_destroy(parser, (pm_node_t *)cast->arguments);
|
594
|
+
}
|
595
|
+
if (cast->block != NULL) {
|
596
|
+
pm_node_destroy(parser, (pm_node_t *)cast->block);
|
597
|
+
}
|
598
|
+
pm_node_destroy(parser, (pm_node_t *)cast->value);
|
599
|
+
break;
|
600
|
+
}
|
601
|
+
#line 57 "node.c.erb"
|
602
|
+
case PM_INDEX_OR_WRITE_NODE: {
|
603
|
+
pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
|
604
|
+
if (cast->receiver != NULL) {
|
605
|
+
pm_node_destroy(parser, (pm_node_t *)cast->receiver);
|
606
|
+
}
|
607
|
+
if (cast->arguments != NULL) {
|
608
|
+
pm_node_destroy(parser, (pm_node_t *)cast->arguments);
|
609
|
+
}
|
610
|
+
if (cast->block != NULL) {
|
611
|
+
pm_node_destroy(parser, (pm_node_t *)cast->block);
|
612
|
+
}
|
613
|
+
pm_node_destroy(parser, (pm_node_t *)cast->value);
|
614
|
+
break;
|
615
|
+
}
|
587
616
|
#line 57 "node.c.erb"
|
588
617
|
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
|
589
618
|
pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
|
@@ -1260,11 +1289,6 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1260
1289
|
if (cast->receiver != NULL) {
|
1261
1290
|
pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
|
1262
1291
|
}
|
1263
|
-
if (cast->arguments != NULL) {
|
1264
|
-
pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
|
1265
|
-
}
|
1266
|
-
memsize->memsize += pm_string_memsize(&cast->read_name);
|
1267
|
-
memsize->memsize += pm_string_memsize(&cast->write_name);
|
1268
1292
|
pm_node_memsize_node((pm_node_t *)cast->value, memsize);
|
1269
1293
|
break;
|
1270
1294
|
}
|
@@ -1281,7 +1305,6 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1281
1305
|
if (cast->block != NULL) {
|
1282
1306
|
pm_node_memsize_node((pm_node_t *)cast->block, memsize);
|
1283
1307
|
}
|
1284
|
-
memsize->memsize += pm_string_memsize(&cast->name);
|
1285
1308
|
break;
|
1286
1309
|
}
|
1287
1310
|
#line 102 "node.c.erb"
|
@@ -1291,11 +1314,6 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1291
1314
|
if (cast->receiver != NULL) {
|
1292
1315
|
pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
|
1293
1316
|
}
|
1294
|
-
if (cast->arguments != NULL) {
|
1295
|
-
pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
|
1296
|
-
}
|
1297
|
-
memsize->memsize += pm_string_memsize(&cast->read_name);
|
1298
|
-
memsize->memsize += pm_string_memsize(&cast->write_name);
|
1299
1317
|
pm_node_memsize_node((pm_node_t *)cast->value, memsize);
|
1300
1318
|
break;
|
1301
1319
|
}
|
@@ -1306,11 +1324,6 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1306
1324
|
if (cast->receiver != NULL) {
|
1307
1325
|
pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
|
1308
1326
|
}
|
1309
|
-
if (cast->arguments != NULL) {
|
1310
|
-
pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
|
1311
|
-
}
|
1312
|
-
memsize->memsize += pm_string_memsize(&cast->read_name);
|
1313
|
-
memsize->memsize += pm_string_memsize(&cast->write_name);
|
1314
1327
|
pm_node_memsize_node((pm_node_t *)cast->value, memsize);
|
1315
1328
|
break;
|
1316
1329
|
}
|
@@ -1715,6 +1728,54 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1715
1728
|
}
|
1716
1729
|
break;
|
1717
1730
|
}
|
1731
|
+
#line 102 "node.c.erb"
|
1732
|
+
case PM_INDEX_AND_WRITE_NODE: {
|
1733
|
+
pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
|
1734
|
+
memsize->memsize += sizeof(*cast);
|
1735
|
+
if (cast->receiver != NULL) {
|
1736
|
+
pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
|
1737
|
+
}
|
1738
|
+
if (cast->arguments != NULL) {
|
1739
|
+
pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
|
1740
|
+
}
|
1741
|
+
if (cast->block != NULL) {
|
1742
|
+
pm_node_memsize_node((pm_node_t *)cast->block, memsize);
|
1743
|
+
}
|
1744
|
+
pm_node_memsize_node((pm_node_t *)cast->value, memsize);
|
1745
|
+
break;
|
1746
|
+
}
|
1747
|
+
#line 102 "node.c.erb"
|
1748
|
+
case PM_INDEX_OPERATOR_WRITE_NODE: {
|
1749
|
+
pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
|
1750
|
+
memsize->memsize += sizeof(*cast);
|
1751
|
+
if (cast->receiver != NULL) {
|
1752
|
+
pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
|
1753
|
+
}
|
1754
|
+
if (cast->arguments != NULL) {
|
1755
|
+
pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
|
1756
|
+
}
|
1757
|
+
if (cast->block != NULL) {
|
1758
|
+
pm_node_memsize_node((pm_node_t *)cast->block, memsize);
|
1759
|
+
}
|
1760
|
+
pm_node_memsize_node((pm_node_t *)cast->value, memsize);
|
1761
|
+
break;
|
1762
|
+
}
|
1763
|
+
#line 102 "node.c.erb"
|
1764
|
+
case PM_INDEX_OR_WRITE_NODE: {
|
1765
|
+
pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
|
1766
|
+
memsize->memsize += sizeof(*cast);
|
1767
|
+
if (cast->receiver != NULL) {
|
1768
|
+
pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
|
1769
|
+
}
|
1770
|
+
if (cast->arguments != NULL) {
|
1771
|
+
pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
|
1772
|
+
}
|
1773
|
+
if (cast->block != NULL) {
|
1774
|
+
pm_node_memsize_node((pm_node_t *)cast->block, memsize);
|
1775
|
+
}
|
1776
|
+
pm_node_memsize_node((pm_node_t *)cast->value, memsize);
|
1777
|
+
break;
|
1778
|
+
}
|
1718
1779
|
#line 102 "node.c.erb"
|
1719
1780
|
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
|
1720
1781
|
pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
|
@@ -2482,6 +2543,12 @@ pm_node_type_to_str(pm_node_type_t node_type)
|
|
2482
2543
|
return "PM_IMPLICIT_NODE";
|
2483
2544
|
case PM_IN_NODE:
|
2484
2545
|
return "PM_IN_NODE";
|
2546
|
+
case PM_INDEX_AND_WRITE_NODE:
|
2547
|
+
return "PM_INDEX_AND_WRITE_NODE";
|
2548
|
+
case PM_INDEX_OPERATOR_WRITE_NODE:
|
2549
|
+
return "PM_INDEX_OPERATOR_WRITE_NODE";
|
2550
|
+
case PM_INDEX_OR_WRITE_NODE:
|
2551
|
+
return "PM_INDEX_OR_WRITE_NODE";
|
2485
2552
|
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE:
|
2486
2553
|
return "PM_INSTANCE_VARIABLE_AND_WRITE_NODE";
|
2487
2554
|
case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE:
|
data/src/prettyprint.c
CHANGED
@@ -157,6 +157,9 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
157
157
|
}
|
158
158
|
case PM_BACK_REFERENCE_READ_NODE: {
|
159
159
|
pm_buffer_append_str(buffer, "BackReferenceReadNode(", 22);
|
160
|
+
char name_buffer[12];
|
161
|
+
snprintf(name_buffer, sizeof(name_buffer), "%u", ((pm_back_reference_read_node_t *)node)->name);
|
162
|
+
pm_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
|
160
163
|
pm_buffer_append_str(buffer, ")", 1);
|
161
164
|
break;
|
162
165
|
}
|
@@ -311,30 +314,15 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
311
314
|
} else {
|
312
315
|
prettyprint_location(buffer, parser, &((pm_call_and_write_node_t *)node)->message_loc);
|
313
316
|
}
|
314
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_and_write_node_t *)node)->opening_loc.start == NULL) {
|
315
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
316
|
-
} else {
|
317
|
-
prettyprint_location(buffer, parser, &((pm_call_and_write_node_t *)node)->opening_loc);
|
318
|
-
}
|
319
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_and_write_node_t *)node)->arguments == NULL) {
|
320
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
321
|
-
} else {
|
322
|
-
prettyprint_node(buffer, parser, (pm_node_t *)((pm_call_and_write_node_t *)node)->arguments);
|
323
|
-
}
|
324
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_and_write_node_t *)node)->closing_loc.start == NULL) {
|
325
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
326
|
-
} else {
|
327
|
-
prettyprint_location(buffer, parser, &((pm_call_and_write_node_t *)node)->closing_loc);
|
328
|
-
}
|
329
317
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
330
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
318
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
331
319
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
332
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
333
|
-
|
334
|
-
pm_buffer_append_str(buffer,
|
335
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
336
|
-
|
337
|
-
pm_buffer_append_str(buffer,
|
320
|
+
pm_buffer_append_str(buffer, ", ", 2); char read_name_buffer[12];
|
321
|
+
snprintf(read_name_buffer, sizeof(read_name_buffer), "%u", ((pm_call_and_write_node_t *)node)->read_name);
|
322
|
+
pm_buffer_append_str(buffer, read_name_buffer, strlen(read_name_buffer));
|
323
|
+
pm_buffer_append_str(buffer, ", ", 2); char write_name_buffer[12];
|
324
|
+
snprintf(write_name_buffer, sizeof(write_name_buffer), "%u", ((pm_call_and_write_node_t *)node)->write_name);
|
325
|
+
pm_buffer_append_str(buffer, write_name_buffer, strlen(write_name_buffer));
|
338
326
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_call_and_write_node_t *)node)->operator_loc);
|
339
327
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (pm_node_t *)((pm_call_and_write_node_t *)node)->value);
|
340
328
|
pm_buffer_append_str(buffer, ")", 1);
|
@@ -378,11 +366,11 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
378
366
|
prettyprint_node(buffer, parser, (pm_node_t *)((pm_call_node_t *)node)->block);
|
379
367
|
}
|
380
368
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
381
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
369
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
382
370
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
383
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
384
|
-
|
385
|
-
pm_buffer_append_str(buffer,
|
371
|
+
pm_buffer_append_str(buffer, ", ", 2); char name_buffer[12];
|
372
|
+
snprintf(name_buffer, sizeof(name_buffer), "%u", ((pm_call_node_t *)node)->name);
|
373
|
+
pm_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
|
386
374
|
pm_buffer_append_str(buffer, ")", 1);
|
387
375
|
break;
|
388
376
|
}
|
@@ -403,30 +391,15 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
403
391
|
} else {
|
404
392
|
prettyprint_location(buffer, parser, &((pm_call_operator_write_node_t *)node)->message_loc);
|
405
393
|
}
|
406
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_operator_write_node_t *)node)->opening_loc.start == NULL) {
|
407
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
408
|
-
} else {
|
409
|
-
prettyprint_location(buffer, parser, &((pm_call_operator_write_node_t *)node)->opening_loc);
|
410
|
-
}
|
411
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_operator_write_node_t *)node)->arguments == NULL) {
|
412
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
413
|
-
} else {
|
414
|
-
prettyprint_node(buffer, parser, (pm_node_t *)((pm_call_operator_write_node_t *)node)->arguments);
|
415
|
-
}
|
416
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_operator_write_node_t *)node)->closing_loc.start == NULL) {
|
417
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
418
|
-
} else {
|
419
|
-
prettyprint_location(buffer, parser, &((pm_call_operator_write_node_t *)node)->closing_loc);
|
420
|
-
}
|
421
394
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
422
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
395
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
423
396
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
424
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
425
|
-
|
426
|
-
pm_buffer_append_str(buffer,
|
427
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
428
|
-
|
429
|
-
pm_buffer_append_str(buffer,
|
397
|
+
pm_buffer_append_str(buffer, ", ", 2); char read_name_buffer[12];
|
398
|
+
snprintf(read_name_buffer, sizeof(read_name_buffer), "%u", ((pm_call_operator_write_node_t *)node)->read_name);
|
399
|
+
pm_buffer_append_str(buffer, read_name_buffer, strlen(read_name_buffer));
|
400
|
+
pm_buffer_append_str(buffer, ", ", 2); char write_name_buffer[12];
|
401
|
+
snprintf(write_name_buffer, sizeof(write_name_buffer), "%u", ((pm_call_operator_write_node_t *)node)->write_name);
|
402
|
+
pm_buffer_append_str(buffer, write_name_buffer, strlen(write_name_buffer));
|
430
403
|
pm_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
|
431
404
|
snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((pm_call_operator_write_node_t *)node)->operator);
|
432
405
|
pm_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
|
@@ -452,30 +425,15 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
452
425
|
} else {
|
453
426
|
prettyprint_location(buffer, parser, &((pm_call_or_write_node_t *)node)->message_loc);
|
454
427
|
}
|
455
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_or_write_node_t *)node)->opening_loc.start == NULL) {
|
456
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
457
|
-
} else {
|
458
|
-
prettyprint_location(buffer, parser, &((pm_call_or_write_node_t *)node)->opening_loc);
|
459
|
-
}
|
460
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_or_write_node_t *)node)->arguments == NULL) {
|
461
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
462
|
-
} else {
|
463
|
-
prettyprint_node(buffer, parser, (pm_node_t *)((pm_call_or_write_node_t *)node)->arguments);
|
464
|
-
}
|
465
|
-
pm_buffer_append_str(buffer, ", ", 2); if (((pm_call_or_write_node_t *)node)->closing_loc.start == NULL) {
|
466
|
-
pm_buffer_append_str(buffer, "nil", 3);
|
467
|
-
} else {
|
468
|
-
prettyprint_location(buffer, parser, &((pm_call_or_write_node_t *)node)->closing_loc);
|
469
|
-
}
|
470
428
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
471
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
429
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
472
430
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
473
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
474
|
-
|
475
|
-
pm_buffer_append_str(buffer,
|
476
|
-
pm_buffer_append_str(buffer, ", ", 2);
|
477
|
-
|
478
|
-
pm_buffer_append_str(buffer,
|
431
|
+
pm_buffer_append_str(buffer, ", ", 2); char read_name_buffer[12];
|
432
|
+
snprintf(read_name_buffer, sizeof(read_name_buffer), "%u", ((pm_call_or_write_node_t *)node)->read_name);
|
433
|
+
pm_buffer_append_str(buffer, read_name_buffer, strlen(read_name_buffer));
|
434
|
+
pm_buffer_append_str(buffer, ", ", 2); char write_name_buffer[12];
|
435
|
+
snprintf(write_name_buffer, sizeof(write_name_buffer), "%u", ((pm_call_or_write_node_t *)node)->write_name);
|
436
|
+
pm_buffer_append_str(buffer, write_name_buffer, strlen(write_name_buffer));
|
479
437
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_call_or_write_node_t *)node)->operator_loc);
|
480
438
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (pm_node_t *)((pm_call_or_write_node_t *)node)->value);
|
481
439
|
pm_buffer_append_str(buffer, ")", 1);
|
@@ -904,7 +862,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
904
862
|
}
|
905
863
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_flip_flop_node_t *)node)->operator_loc);
|
906
864
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
907
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
865
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
908
866
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
909
867
|
pm_buffer_append_str(buffer, ")", 1);
|
910
868
|
break;
|
@@ -1116,6 +1074,105 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1116
1074
|
pm_buffer_append_str(buffer, ")", 1);
|
1117
1075
|
break;
|
1118
1076
|
}
|
1077
|
+
case PM_INDEX_AND_WRITE_NODE: {
|
1078
|
+
pm_buffer_append_str(buffer, "IndexAndWriteNode(", 18);
|
1079
|
+
if (((pm_index_and_write_node_t *)node)->receiver == NULL) {
|
1080
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1081
|
+
} else {
|
1082
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_and_write_node_t *)node)->receiver);
|
1083
|
+
}
|
1084
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_and_write_node_t *)node)->call_operator_loc.start == NULL) {
|
1085
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1086
|
+
} else {
|
1087
|
+
prettyprint_location(buffer, parser, &((pm_index_and_write_node_t *)node)->call_operator_loc);
|
1088
|
+
}
|
1089
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_and_write_node_t *)node)->opening_loc);
|
1090
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_and_write_node_t *)node)->arguments == NULL) {
|
1091
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1092
|
+
} else {
|
1093
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_and_write_node_t *)node)->arguments);
|
1094
|
+
}
|
1095
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_and_write_node_t *)node)->closing_loc);
|
1096
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_and_write_node_t *)node)->block == NULL) {
|
1097
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1098
|
+
} else {
|
1099
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_and_write_node_t *)node)->block);
|
1100
|
+
}
|
1101
|
+
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1102
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1103
|
+
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1104
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_and_write_node_t *)node)->operator_loc);
|
1105
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_and_write_node_t *)node)->value);
|
1106
|
+
pm_buffer_append_str(buffer, ")", 1);
|
1107
|
+
break;
|
1108
|
+
}
|
1109
|
+
case PM_INDEX_OPERATOR_WRITE_NODE: {
|
1110
|
+
pm_buffer_append_str(buffer, "IndexOperatorWriteNode(", 23);
|
1111
|
+
if (((pm_index_operator_write_node_t *)node)->receiver == NULL) {
|
1112
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1113
|
+
} else {
|
1114
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_operator_write_node_t *)node)->receiver);
|
1115
|
+
}
|
1116
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_operator_write_node_t *)node)->call_operator_loc.start == NULL) {
|
1117
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1118
|
+
} else {
|
1119
|
+
prettyprint_location(buffer, parser, &((pm_index_operator_write_node_t *)node)->call_operator_loc);
|
1120
|
+
}
|
1121
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_operator_write_node_t *)node)->opening_loc);
|
1122
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_operator_write_node_t *)node)->arguments == NULL) {
|
1123
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1124
|
+
} else {
|
1125
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_operator_write_node_t *)node)->arguments);
|
1126
|
+
}
|
1127
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_operator_write_node_t *)node)->closing_loc);
|
1128
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_operator_write_node_t *)node)->block == NULL) {
|
1129
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1130
|
+
} else {
|
1131
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_operator_write_node_t *)node)->block);
|
1132
|
+
}
|
1133
|
+
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1134
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1135
|
+
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1136
|
+
pm_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
|
1137
|
+
snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((pm_index_operator_write_node_t *)node)->operator);
|
1138
|
+
pm_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
|
1139
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_operator_write_node_t *)node)->operator_loc);
|
1140
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_operator_write_node_t *)node)->value);
|
1141
|
+
pm_buffer_append_str(buffer, ")", 1);
|
1142
|
+
break;
|
1143
|
+
}
|
1144
|
+
case PM_INDEX_OR_WRITE_NODE: {
|
1145
|
+
pm_buffer_append_str(buffer, "IndexOrWriteNode(", 17);
|
1146
|
+
if (((pm_index_or_write_node_t *)node)->receiver == NULL) {
|
1147
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1148
|
+
} else {
|
1149
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_or_write_node_t *)node)->receiver);
|
1150
|
+
}
|
1151
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_or_write_node_t *)node)->call_operator_loc.start == NULL) {
|
1152
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1153
|
+
} else {
|
1154
|
+
prettyprint_location(buffer, parser, &((pm_index_or_write_node_t *)node)->call_operator_loc);
|
1155
|
+
}
|
1156
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_or_write_node_t *)node)->opening_loc);
|
1157
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_or_write_node_t *)node)->arguments == NULL) {
|
1158
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1159
|
+
} else {
|
1160
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_or_write_node_t *)node)->arguments);
|
1161
|
+
}
|
1162
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_or_write_node_t *)node)->closing_loc);
|
1163
|
+
pm_buffer_append_str(buffer, ", ", 2); if (((pm_index_or_write_node_t *)node)->block == NULL) {
|
1164
|
+
pm_buffer_append_str(buffer, "nil", 3);
|
1165
|
+
} else {
|
1166
|
+
prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_or_write_node_t *)node)->block);
|
1167
|
+
}
|
1168
|
+
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1169
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1170
|
+
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1171
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_index_or_write_node_t *)node)->operator_loc);
|
1172
|
+
pm_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (pm_node_t *)((pm_index_or_write_node_t *)node)->value);
|
1173
|
+
pm_buffer_append_str(buffer, ")", 1);
|
1174
|
+
break;
|
1175
|
+
}
|
1119
1176
|
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
|
1120
1177
|
pm_buffer_append_str(buffer, "InstanceVariableAndWriteNode(", 29);
|
1121
1178
|
char name_buffer[12];
|
@@ -1182,7 +1239,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1182
1239
|
case PM_INTEGER_NODE: {
|
1183
1240
|
pm_buffer_append_str(buffer, "IntegerNode(", 12);
|
1184
1241
|
char flags_buffer[12];
|
1185
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1242
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1186
1243
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1187
1244
|
pm_buffer_append_str(buffer, ")", 1);
|
1188
1245
|
break;
|
@@ -1198,7 +1255,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1198
1255
|
pm_buffer_append_str(buffer, "]", 1);
|
1199
1256
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_interpolated_match_last_line_node_t *)node)->closing_loc);
|
1200
1257
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1201
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1258
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1202
1259
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1203
1260
|
pm_buffer_append_str(buffer, ")", 1);
|
1204
1261
|
break;
|
@@ -1214,7 +1271,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1214
1271
|
pm_buffer_append_str(buffer, "]", 1);
|
1215
1272
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_interpolated_regular_expression_node_t *)node)->closing_loc);
|
1216
1273
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1217
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1274
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1218
1275
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1219
1276
|
pm_buffer_append_str(buffer, ")", 1);
|
1220
1277
|
break;
|
@@ -1433,7 +1490,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1433
1490
|
pm_buffer_append_bytes(buffer, pm_string_source(&((pm_match_last_line_node_t *)node)->unescaped), pm_string_length(&((pm_match_last_line_node_t *)node)->unescaped));
|
1434
1491
|
pm_buffer_append_str(buffer, "\"", 1);
|
1435
1492
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1436
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1493
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1437
1494
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1438
1495
|
pm_buffer_append_str(buffer, ")", 1);
|
1439
1496
|
break;
|
@@ -1717,7 +1774,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1717
1774
|
}
|
1718
1775
|
pm_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((pm_range_node_t *)node)->operator_loc);
|
1719
1776
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1720
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1777
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1721
1778
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1722
1779
|
pm_buffer_append_str(buffer, ")", 1);
|
1723
1780
|
break;
|
@@ -1742,7 +1799,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1742
1799
|
pm_buffer_append_bytes(buffer, pm_string_source(&((pm_regular_expression_node_t *)node)->unescaped), pm_string_length(&((pm_regular_expression_node_t *)node)->unescaped));
|
1743
1800
|
pm_buffer_append_str(buffer, "\"", 1);
|
1744
1801
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
1745
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1802
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1746
1803
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1747
1804
|
pm_buffer_append_str(buffer, ")", 1);
|
1748
1805
|
break;
|
@@ -1919,7 +1976,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
1919
1976
|
case PM_STRING_NODE: {
|
1920
1977
|
pm_buffer_append_str(buffer, "StringNode(", 11);
|
1921
1978
|
char flags_buffer[12];
|
1922
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
1979
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1923
1980
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
1924
1981
|
pm_buffer_append_str(buffer, ", ", 2); if (((pm_string_node_t *)node)->opening_loc.start == NULL) {
|
1925
1982
|
pm_buffer_append_str(buffer, "nil", 3);
|
@@ -2041,7 +2098,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
2041
2098
|
prettyprint_node(buffer, parser, (pm_node_t *)((pm_until_node_t *)node)->statements);
|
2042
2099
|
}
|
2043
2100
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
2044
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
2101
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
2045
2102
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
2046
2103
|
pm_buffer_append_str(buffer, ")", 1);
|
2047
2104
|
break;
|
@@ -2078,7 +2135,7 @@ prettyprint_node(pm_buffer_t *buffer, pm_parser_t *parser, pm_node_t *node) {
|
|
2078
2135
|
prettyprint_node(buffer, parser, (pm_node_t *)((pm_while_node_t *)node)->statements);
|
2079
2136
|
}
|
2080
2137
|
pm_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
|
2081
|
-
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags
|
2138
|
+
snprintf(flags_buffer, sizeof(flags_buffer), "+%d", (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
2082
2139
|
pm_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
|
2083
2140
|
pm_buffer_append_str(buffer, ")", 1);
|
2084
2141
|
break;
|