prism 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -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/releasing.md +4 -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 +4 -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 +2 -2
- 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 +124 -130
- data/lib/prism/visitor.rb +3 -3
- data/lib/prism.rb +1 -0
- data/prism.gemspec +5 -1
- data/rbi/prism.rbi +5565 -5540
- data/rbi/prism_static.rbi +138 -142
- 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/regexp.c
CHANGED
@@ -116,18 +116,18 @@ pm_regexp_char_find(pm_regexp_parser_t *parser, uint8_t value) {
|
|
116
116
|
* The properly track everything, we're going to build a little state machine.
|
117
117
|
* It looks something like the following:
|
118
118
|
*
|
119
|
-
*
|
120
|
-
*
|
121
|
-
*
|
122
|
-
*
|
123
|
-
*
|
124
|
-
*
|
125
|
-
*
|
126
|
-
*
|
127
|
-
*
|
128
|
-
*
|
129
|
-
*
|
130
|
-
*
|
119
|
+
* +-------+ +---------+ ------------+
|
120
|
+
* ---- lbrace ---> | start | ---- digit ---> | minimum | |
|
121
|
+
* +-------+ +---------+ <--- digit -+
|
122
|
+
* | | |
|
123
|
+
* +-------+ | | rbrace
|
124
|
+
* | comma | <----- comma +---- comma -------+ |
|
125
|
+
* +-------+ V V
|
126
|
+
* | +---------+ +---------+
|
127
|
+
* +-- digit --> | maximum | -- rbrace --> || final ||
|
128
|
+
* +---------+ +---------+
|
129
|
+
* | ^
|
130
|
+
* +- digit -+
|
131
131
|
*
|
132
132
|
* Note that by the time we've hit this function, the lbrace has already been
|
133
133
|
* consumed so we're in the start state.
|
data/src/serialize.c
CHANGED
@@ -422,6 +422,26 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
422
422
|
pm_serialize_location(parser, &((pm_capture_pattern_node_t *)node)->operator_loc, buffer);
|
423
423
|
break;
|
424
424
|
}
|
425
|
+
case PM_CASE_MATCH_NODE: {
|
426
|
+
if (((pm_case_match_node_t *)node)->predicate == NULL) {
|
427
|
+
pm_buffer_append_byte(buffer, 0);
|
428
|
+
} else {
|
429
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_case_match_node_t *)node)->predicate, buffer);
|
430
|
+
}
|
431
|
+
uint32_t conditions_size = pm_sizet_to_u32(((pm_case_match_node_t *)node)->conditions.size);
|
432
|
+
pm_buffer_append_varint(buffer, conditions_size);
|
433
|
+
for (uint32_t index = 0; index < conditions_size; index++) {
|
434
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_case_match_node_t *)node)->conditions.nodes[index], buffer);
|
435
|
+
}
|
436
|
+
if (((pm_case_match_node_t *)node)->consequent == NULL) {
|
437
|
+
pm_buffer_append_byte(buffer, 0);
|
438
|
+
} else {
|
439
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_case_match_node_t *)node)->consequent, buffer);
|
440
|
+
}
|
441
|
+
pm_serialize_location(parser, &((pm_case_match_node_t *)node)->case_keyword_loc, buffer);
|
442
|
+
pm_serialize_location(parser, &((pm_case_match_node_t *)node)->end_keyword_loc, buffer);
|
443
|
+
break;
|
444
|
+
}
|
425
445
|
case PM_CASE_NODE: {
|
426
446
|
if (((pm_case_node_t *)node)->predicate == NULL) {
|
427
447
|
pm_buffer_append_byte(buffer, 0);
|
@@ -880,6 +900,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
880
900
|
pm_serialize_location(parser, &((pm_if_node_t *)node)->if_keyword_loc, buffer);
|
881
901
|
}
|
882
902
|
pm_serialize_node(parser, (pm_node_t *)((pm_if_node_t *)node)->predicate, buffer);
|
903
|
+
if (((pm_if_node_t *)node)->then_keyword_loc.start == NULL) {
|
904
|
+
pm_buffer_append_byte(buffer, 0);
|
905
|
+
} else {
|
906
|
+
pm_buffer_append_byte(buffer, 1);
|
907
|
+
pm_serialize_location(parser, &((pm_if_node_t *)node)->then_keyword_loc, buffer);
|
908
|
+
}
|
883
909
|
if (((pm_if_node_t *)node)->statements == NULL) {
|
884
910
|
pm_buffer_append_byte(buffer, 0);
|
885
911
|
} else {
|
@@ -1228,10 +1254,10 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1228
1254
|
}
|
1229
1255
|
case PM_MATCH_WRITE_NODE: {
|
1230
1256
|
pm_serialize_node(parser, (pm_node_t *)((pm_match_write_node_t *)node)->call, buffer);
|
1231
|
-
uint32_t
|
1232
|
-
pm_buffer_append_varint(buffer,
|
1233
|
-
for (uint32_t index = 0; index <
|
1234
|
-
|
1257
|
+
uint32_t targets_size = pm_sizet_to_u32(((pm_match_write_node_t *)node)->targets.size);
|
1258
|
+
pm_buffer_append_varint(buffer, targets_size);
|
1259
|
+
for (uint32_t index = 0; index < targets_size; index++) {
|
1260
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_match_write_node_t *)node)->targets.nodes[index], buffer);
|
1235
1261
|
}
|
1236
1262
|
break;
|
1237
1263
|
}
|
@@ -1593,11 +1619,6 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1593
1619
|
}
|
1594
1620
|
break;
|
1595
1621
|
}
|
1596
|
-
case PM_STRING_CONCAT_NODE: {
|
1597
|
-
pm_serialize_node(parser, (pm_node_t *)((pm_string_concat_node_t *)node)->left, buffer);
|
1598
|
-
pm_serialize_node(parser, (pm_node_t *)((pm_string_concat_node_t *)node)->right, buffer);
|
1599
|
-
break;
|
1600
|
-
}
|
1601
1622
|
case PM_STRING_NODE: {
|
1602
1623
|
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1603
1624
|
if (((pm_string_node_t *)node)->opening_loc.start == NULL) {
|
@@ -1679,6 +1700,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1679
1700
|
case PM_UNLESS_NODE: {
|
1680
1701
|
pm_serialize_location(parser, &((pm_unless_node_t *)node)->keyword_loc, buffer);
|
1681
1702
|
pm_serialize_node(parser, (pm_node_t *)((pm_unless_node_t *)node)->predicate, buffer);
|
1703
|
+
if (((pm_unless_node_t *)node)->then_keyword_loc.start == NULL) {
|
1704
|
+
pm_buffer_append_byte(buffer, 0);
|
1705
|
+
} else {
|
1706
|
+
pm_buffer_append_byte(buffer, 1);
|
1707
|
+
pm_serialize_location(parser, &((pm_unless_node_t *)node)->then_keyword_loc, buffer);
|
1708
|
+
}
|
1682
1709
|
if (((pm_unless_node_t *)node)->statements == NULL) {
|
1683
1710
|
pm_buffer_append_byte(buffer, 0);
|
1684
1711
|
} else {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- lib/prism/debug.rb
|
73
73
|
- lib/prism/desugar_compiler.rb
|
74
74
|
- lib/prism/dispatcher.rb
|
75
|
+
- lib/prism/dot_visitor.rb
|
75
76
|
- lib/prism/dsl.rb
|
76
77
|
- lib/prism/ffi.rb
|
77
78
|
- lib/prism/lex_compat.rb
|
@@ -94,6 +95,7 @@ files:
|
|
94
95
|
- sig/prism_static.rbs
|
95
96
|
- src/diagnostic.c
|
96
97
|
- src/enc/pm_big5.c
|
98
|
+
- src/enc/pm_cp51932.c
|
97
99
|
- src/enc/pm_euc_jp.c
|
98
100
|
- src/enc/pm_gbk.c
|
99
101
|
- src/enc/pm_shift_jis.c
|
@@ -124,6 +126,8 @@ licenses:
|
|
124
126
|
- MIT
|
125
127
|
metadata:
|
126
128
|
allowed_push_host: https://rubygems.org
|
129
|
+
source_code_uri: https://github.com/ruby/prism
|
130
|
+
changelog_uri: https://github.com/ruby/prism/blob/main/CHANGELOG.md
|
127
131
|
post_install_message:
|
128
132
|
rdoc_options: []
|
129
133
|
require_paths:
|