prism 0.17.1 → 0.18.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 +30 -1
- data/Makefile +5 -5
- data/README.md +2 -2
- data/config.yml +26 -13
- data/docs/build_system.md +6 -6
- data/docs/building.md +1 -1
- data/docs/configuration.md +1 -0
- data/docs/encoding.md +68 -32
- data/docs/heredocs.md +1 -1
- data/docs/javascript.md +29 -1
- data/docs/ruby_api.md +14 -0
- data/ext/prism/api_node.c +74 -45
- data/ext/prism/extconf.rb +91 -127
- data/ext/prism/extension.c +1 -1
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +148 -133
- data/include/prism/diagnostic.h +27 -1
- data/include/prism/enc/pm_encoding.h +42 -1
- data/include/prism/parser.h +6 -0
- data/include/prism/version.h +3 -3
- data/lib/prism/compiler.rb +3 -3
- data/lib/prism/debug.rb +4 -0
- data/lib/prism/desugar_compiler.rb +1 -0
- data/lib/prism/dispatcher.rb +14 -14
- data/lib/prism/dot_visitor.rb +4334 -0
- data/lib/prism/dsl.rb +11 -11
- data/lib/prism/ffi.rb +3 -3
- data/lib/prism/mutation_compiler.rb +6 -6
- data/lib/prism/node.rb +182 -113
- data/lib/prism/node_ext.rb +61 -3
- data/lib/prism/parse_result.rb +46 -12
- data/lib/prism/serialize.rb +125 -131
- data/lib/prism/visitor.rb +3 -3
- data/lib/prism.rb +1 -0
- data/prism.gemspec +5 -1
- data/rbi/prism.rbi +83 -54
- data/sig/prism.rbs +47 -32
- data/src/diagnostic.c +61 -3
- data/src/enc/pm_big5.c +63 -0
- data/src/enc/pm_cp51932.c +57 -0
- data/src/enc/pm_euc_jp.c +10 -0
- data/src/enc/pm_gbk.c +5 -2
- data/src/enc/pm_tables.c +1478 -148
- data/src/node.c +33 -21
- data/src/prettyprint.c +1027 -925
- data/src/prism.c +925 -374
- data/src/regexp.c +12 -12
- data/src/serialize.c +36 -9
- metadata +6 -2
data/src/node.c
CHANGED
@@ -244,6 +244,18 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
244
244
|
pm_node_destroy(parser, (pm_node_t *)cast->target);
|
245
245
|
break;
|
246
246
|
}
|
247
|
+
#line 58 "node.c.erb"
|
248
|
+
case PM_CASE_MATCH_NODE: {
|
249
|
+
pm_case_match_node_t *cast = (pm_case_match_node_t *) node;
|
250
|
+
if (cast->predicate != NULL) {
|
251
|
+
pm_node_destroy(parser, (pm_node_t *)cast->predicate);
|
252
|
+
}
|
253
|
+
pm_node_list_free(parser, &cast->conditions);
|
254
|
+
if (cast->consequent != NULL) {
|
255
|
+
pm_node_destroy(parser, (pm_node_t *)cast->consequent);
|
256
|
+
}
|
257
|
+
break;
|
258
|
+
}
|
247
259
|
#line 58 "node.c.erb"
|
248
260
|
case PM_CASE_NODE: {
|
249
261
|
pm_case_node_t *cast = (pm_case_node_t *) node;
|
@@ -758,7 +770,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
758
770
|
case PM_MATCH_WRITE_NODE: {
|
759
771
|
pm_match_write_node_t *cast = (pm_match_write_node_t *) node;
|
760
772
|
pm_node_destroy(parser, (pm_node_t *)cast->call);
|
761
|
-
|
773
|
+
pm_node_list_free(parser, &cast->targets);
|
762
774
|
break;
|
763
775
|
}
|
764
776
|
#line 58 "node.c.erb"
|
@@ -1011,13 +1023,6 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
|
|
1011
1023
|
pm_node_list_free(parser, &cast->body);
|
1012
1024
|
break;
|
1013
1025
|
}
|
1014
|
-
#line 58 "node.c.erb"
|
1015
|
-
case PM_STRING_CONCAT_NODE: {
|
1016
|
-
pm_string_concat_node_t *cast = (pm_string_concat_node_t *) node;
|
1017
|
-
pm_node_destroy(parser, (pm_node_t *)cast->left);
|
1018
|
-
pm_node_destroy(parser, (pm_node_t *)cast->right);
|
1019
|
-
break;
|
1020
|
-
}
|
1021
1026
|
#line 58 "node.c.erb"
|
1022
1027
|
case PM_STRING_NODE: {
|
1023
1028
|
pm_string_node_t *cast = (pm_string_node_t *) node;
|
@@ -1340,6 +1345,21 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1340
1345
|
pm_node_memsize_node((pm_node_t *)cast->target, memsize);
|
1341
1346
|
break;
|
1342
1347
|
}
|
1348
|
+
#line 103 "node.c.erb"
|
1349
|
+
case PM_CASE_MATCH_NODE: {
|
1350
|
+
pm_case_match_node_t *cast = (pm_case_match_node_t *) node;
|
1351
|
+
memsize->memsize += sizeof(*cast);
|
1352
|
+
// Node lists will add in their own sizes below.
|
1353
|
+
memsize->memsize -= sizeof(pm_node_list_t) * 1;
|
1354
|
+
if (cast->predicate != NULL) {
|
1355
|
+
pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
|
1356
|
+
}
|
1357
|
+
memsize->memsize += pm_node_list_memsize(&cast->conditions, memsize);
|
1358
|
+
if (cast->consequent != NULL) {
|
1359
|
+
pm_node_memsize_node((pm_node_t *)cast->consequent, memsize);
|
1360
|
+
}
|
1361
|
+
break;
|
1362
|
+
}
|
1343
1363
|
#line 103 "node.c.erb"
|
1344
1364
|
case PM_CASE_NODE: {
|
1345
1365
|
pm_case_node_t *cast = (pm_case_node_t *) node;
|
@@ -1969,10 +1989,10 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
1969
1989
|
case PM_MATCH_WRITE_NODE: {
|
1970
1990
|
pm_match_write_node_t *cast = (pm_match_write_node_t *) node;
|
1971
1991
|
memsize->memsize += sizeof(*cast);
|
1972
|
-
//
|
1973
|
-
memsize->memsize -= sizeof(
|
1992
|
+
// Node lists will add in their own sizes below.
|
1993
|
+
memsize->memsize -= sizeof(pm_node_list_t) * 1;
|
1974
1994
|
pm_node_memsize_node((pm_node_t *)cast->call, memsize);
|
1975
|
-
memsize->memsize +=
|
1995
|
+
memsize->memsize += pm_node_list_memsize(&cast->targets, memsize);
|
1976
1996
|
break;
|
1977
1997
|
}
|
1978
1998
|
#line 103 "node.c.erb"
|
@@ -2289,14 +2309,6 @@ pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
|
|
2289
2309
|
memsize->memsize += pm_node_list_memsize(&cast->body, memsize);
|
2290
2310
|
break;
|
2291
2311
|
}
|
2292
|
-
#line 103 "node.c.erb"
|
2293
|
-
case PM_STRING_CONCAT_NODE: {
|
2294
|
-
pm_string_concat_node_t *cast = (pm_string_concat_node_t *) node;
|
2295
|
-
memsize->memsize += sizeof(*cast);
|
2296
|
-
pm_node_memsize_node((pm_node_t *)cast->left, memsize);
|
2297
|
-
pm_node_memsize_node((pm_node_t *)cast->right, memsize);
|
2298
|
-
break;
|
2299
|
-
}
|
2300
2312
|
#line 103 "node.c.erb"
|
2301
2313
|
case PM_STRING_NODE: {
|
2302
2314
|
pm_string_node_t *cast = (pm_string_node_t *) node;
|
@@ -2463,6 +2475,8 @@ pm_node_type_to_str(pm_node_type_t node_type)
|
|
2463
2475
|
return "PM_CALL_OR_WRITE_NODE";
|
2464
2476
|
case PM_CAPTURE_PATTERN_NODE:
|
2465
2477
|
return "PM_CAPTURE_PATTERN_NODE";
|
2478
|
+
case PM_CASE_MATCH_NODE:
|
2479
|
+
return "PM_CASE_MATCH_NODE";
|
2466
2480
|
case PM_CASE_NODE:
|
2467
2481
|
return "PM_CASE_NODE";
|
2468
2482
|
case PM_CLASS_NODE:
|
@@ -2683,8 +2697,6 @@ pm_node_type_to_str(pm_node_type_t node_type)
|
|
2683
2697
|
return "PM_SPLAT_NODE";
|
2684
2698
|
case PM_STATEMENTS_NODE:
|
2685
2699
|
return "PM_STATEMENTS_NODE";
|
2686
|
-
case PM_STRING_CONCAT_NODE:
|
2687
|
-
return "PM_STRING_CONCAT_NODE";
|
2688
2700
|
case PM_STRING_NODE:
|
2689
2701
|
return "PM_STRING_NODE";
|
2690
2702
|
case PM_SUPER_NODE:
|