prism 0.28.0 → 0.29.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 +20 -1
- data/config.yml +29 -17
- data/ext/prism/api_node.c +40 -40
- data/ext/prism/extconf.rb +27 -23
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +32 -32
- data/include/prism/diagnostic.h +11 -1
- data/include/prism/version.h +2 -2
- data/lib/prism/desugar_compiler.rb +4 -4
- data/lib/prism/dot_visitor.rb +32 -32
- data/lib/prism/dsl.rb +16 -16
- data/lib/prism/ffi.rb +1 -1
- data/lib/prism/inspect_visitor.rb +16 -16
- data/lib/prism/node.rb +148 -148
- data/lib/prism/node_ext.rb +156 -14
- data/lib/prism/parse_result/comments.rb +1 -1
- data/lib/prism/parse_result/newlines.rb +1 -1
- data/lib/prism/reflection.rb +8 -8
- data/lib/prism/serialize.rb +12 -2
- data/lib/prism/translation/parser/compiler.rb +154 -24
- data/lib/prism/translation/parser.rb +1 -1
- data/lib/prism/translation/ripper.rb +16 -16
- data/lib/prism/translation/ruby_parser.rb +9 -9
- data/prism.gemspec +2 -1
- data/rbi/prism/node.rbi +51 -51
- data/rbi/prism/node_ext.rbi +5 -0
- data/rbi/prism/parse_result.rbi +1 -1
- data/sig/prism/dsl.rbs +9 -9
- data/sig/prism/lex_compat.rbs +10 -0
- data/sig/prism/node.rbs +44 -44
- data/sig/prism/node_ext.rbs +4 -0
- data/src/diagnostic.c +30 -11
- data/src/node.c +48 -48
- data/src/prettyprint.c +48 -48
- data/src/prism.c +256 -133
- data/src/serialize.c +16 -16
- data/src/token_type.c +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ac8167684c0f975fdba449e77206d97756f6c39f22ce871f79a79a61260503f
|
4
|
+
data.tar.gz: 6a2dd5c0a47df7c8c575ad2e5b344c789d548e93cfe82e5fa29974d46a52bb3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfa7fe63285b85cb45aa0be681916d6891ee5e5adf2162ab5c18423417f7938afc99f00eca8fd6187fbd0b7168af088d932fbda3c1361d1c73953f39329bed70
|
7
|
+
data.tar.gz: 79bc51db60600d74a6bfbeae5eba3a8ec505e9809d0f7ff0b05563f1f7a8cd284cc293233397323a443217a4a5271f90b4c40516168ae3a8be0ddc2d7376cef9
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,24 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.29.0] - 2024-05-10
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Added `Prism::CallNode#full_message_loc`, which gives the location including the `=` if there is one.
|
14
|
+
- A warning for when `# shareable_constant_value` is not used on its own line.
|
15
|
+
- An error for invalid implicit local variable writes.
|
16
|
+
- Implicit hash patterns in array patterns are disallowed.
|
17
|
+
- We now validate that Unicode escape sequences are not surrogates.
|
18
|
+
|
19
|
+
### Changed
|
20
|
+
|
21
|
+
- All fields named `operator` have been renamed to `binary_operator` for `*OperatorWriteNode` nodes. This is to make it easier to provide C++ support. In the Ruby API, the old fields are aliased to the new fields with a deprecation warning.
|
22
|
+
- Many updated error messages to more closely match CRuby.
|
23
|
+
- We ensure keyword parameters do not end in `!` or `?`.
|
24
|
+
- Fixed some escaping in string literals with control sequences and hex escapes.
|
25
|
+
- Fix a bug with RBS types when used outside the `ruby/prism` codebase.
|
26
|
+
|
9
27
|
## [0.28.0] - 2024-05-03
|
10
28
|
|
11
29
|
### Added
|
@@ -500,7 +518,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
500
518
|
|
501
519
|
- 🎉 Initial release! 🎉
|
502
520
|
|
503
|
-
[unreleased]: https://github.com/ruby/prism/compare/v0.
|
521
|
+
[unreleased]: https://github.com/ruby/prism/compare/v0.29.0...HEAD
|
522
|
+
[0.29.0]: https://github.com/ruby/prism/compare/v0.28.0...v0.29.0
|
504
523
|
[0.28.0]: https://github.com/ruby/prism/compare/v0.27.0...v0.28.0
|
505
524
|
[0.27.0]: https://github.com/ruby/prism/compare/v0.26.0...v0.27.0
|
506
525
|
[0.26.0]: https://github.com/ruby/prism/compare/v0.25.0...v0.26.0
|
data/config.yml
CHANGED
@@ -7,13 +7,16 @@ errors:
|
|
7
7
|
- ARGUMENT_BARE_HASH
|
8
8
|
- ARGUMENT_BLOCK_FORWARDING
|
9
9
|
- ARGUMENT_BLOCK_MULTI
|
10
|
+
- ARGUMENT_CONFLICT_AMPERSAND
|
11
|
+
- ARGUMENT_CONFLICT_STAR
|
12
|
+
- ARGUMENT_CONFLICT_STAR_STAR
|
10
13
|
- ARGUMENT_FORMAL_CLASS
|
11
14
|
- ARGUMENT_FORMAL_CONSTANT
|
12
15
|
- ARGUMENT_FORMAL_GLOBAL
|
13
16
|
- ARGUMENT_FORMAL_IVAR
|
14
17
|
- ARGUMENT_FORWARDING_UNBOUND
|
15
18
|
- ARGUMENT_IN
|
16
|
-
-
|
19
|
+
- ARGUMENT_NO_FORWARDING_AMPERSAND
|
17
20
|
- ARGUMENT_NO_FORWARDING_ELLIPSES
|
18
21
|
- ARGUMENT_NO_FORWARDING_STAR
|
19
22
|
- ARGUMENT_NO_FORWARDING_STAR_STAR
|
@@ -95,6 +98,7 @@ errors:
|
|
95
98
|
- EXPECT_EXPRESSION_AFTER_SPLAT_HASH
|
96
99
|
- EXPECT_EXPRESSION_AFTER_STAR
|
97
100
|
- EXPECT_IDENT_REQ_PARAMETER
|
101
|
+
- EXPECT_IN_DELIMITER
|
98
102
|
- EXPECT_LPAREN_REQ_PARAMETER
|
99
103
|
- EXPECT_MESSAGE
|
100
104
|
- EXPECT_RBRACKET
|
@@ -134,6 +138,7 @@ errors:
|
|
134
138
|
- INVALID_BLOCK_EXIT
|
135
139
|
- INVALID_CHARACTER
|
136
140
|
- INVALID_ENCODING_MAGIC_COMMENT
|
141
|
+
- INVALID_ESCAPE_CHARACTER
|
137
142
|
- INVALID_FLOAT_EXPONENT
|
138
143
|
- INVALID_LOCAL_VARIABLE_READ
|
139
144
|
- INVALID_LOCAL_VARIABLE_WRITE
|
@@ -142,6 +147,7 @@ errors:
|
|
142
147
|
- INVALID_MULTIBYTE_ESCAPE
|
143
148
|
- INVALID_NUMBER_BINARY
|
144
149
|
- INVALID_NUMBER_DECIMAL
|
150
|
+
- INVALID_NUMBER_FRACTION
|
145
151
|
- INVALID_NUMBER_HEXADECIMAL
|
146
152
|
- INVALID_NUMBER_OCTAL
|
147
153
|
- INVALID_NUMBER_UNDERSCORE_INNER
|
@@ -187,6 +193,7 @@ errors:
|
|
187
193
|
- PARAMETER_ASSOC_SPLAT_MULTI
|
188
194
|
- PARAMETER_BLOCK_MULTI
|
189
195
|
- PARAMETER_CIRCULAR
|
196
|
+
- PARAMETER_FORWARDING_AFTER_REST
|
190
197
|
- PARAMETER_METHOD_NAME
|
191
198
|
- PARAMETER_NAME_DUPLICATED
|
192
199
|
- PARAMETER_NO_DEFAULT
|
@@ -209,8 +216,10 @@ errors:
|
|
209
216
|
- PATTERN_EXPRESSION_AFTER_PIPE
|
210
217
|
- PATTERN_EXPRESSION_AFTER_RANGE
|
211
218
|
- PATTERN_EXPRESSION_AFTER_REST
|
219
|
+
- PATTERN_HASH_IMPLICIT
|
212
220
|
- PATTERN_HASH_KEY
|
213
221
|
- PATTERN_HASH_KEY_DUPLICATE
|
222
|
+
- PATTERN_HASH_KEY_INTERPOLATED
|
214
223
|
- PATTERN_HASH_KEY_LABEL
|
215
224
|
- PATTERN_HASH_KEY_LOCALS
|
216
225
|
- PATTERN_IDENT_AFTER_HROCKET
|
@@ -286,6 +295,7 @@ warnings:
|
|
286
295
|
- KEYWORD_EOL
|
287
296
|
- LITERAL_IN_CONDITION_DEFAULT
|
288
297
|
- LITERAL_IN_CONDITION_VERBOSE
|
298
|
+
- SHAREABLE_CONSTANT_VALUE_LINE
|
289
299
|
- SHEBANG_CARRIAGE_RETURN
|
290
300
|
- UNEXPECTED_CARRIAGE_RETURN
|
291
301
|
- UNREACHABLE_STATEMENT
|
@@ -1203,9 +1213,9 @@ nodes:
|
|
1203
1213
|
type: constant
|
1204
1214
|
- name: write_name
|
1205
1215
|
type: constant
|
1206
|
-
- name:
|
1216
|
+
- name: binary_operator
|
1207
1217
|
type: constant
|
1208
|
-
- name:
|
1218
|
+
- name: binary_operator_loc
|
1209
1219
|
type: location
|
1210
1220
|
- name: value
|
1211
1221
|
type: node
|
@@ -1361,11 +1371,11 @@ nodes:
|
|
1361
1371
|
type: constant
|
1362
1372
|
- name: name_loc
|
1363
1373
|
type: location
|
1364
|
-
- name:
|
1374
|
+
- name: binary_operator_loc
|
1365
1375
|
type: location
|
1366
1376
|
- name: value
|
1367
1377
|
type: node
|
1368
|
-
- name:
|
1378
|
+
- name: binary_operator
|
1369
1379
|
type: constant
|
1370
1380
|
comment: |
|
1371
1381
|
Represents assigning to a class variable using an operator that isn't `=`.
|
@@ -1471,11 +1481,11 @@ nodes:
|
|
1471
1481
|
type: constant
|
1472
1482
|
- name: name_loc
|
1473
1483
|
type: location
|
1474
|
-
- name:
|
1484
|
+
- name: binary_operator_loc
|
1475
1485
|
type: location
|
1476
1486
|
- name: value
|
1477
1487
|
type: node
|
1478
|
-
- name:
|
1488
|
+
- name: binary_operator
|
1479
1489
|
type: constant
|
1480
1490
|
comment: |
|
1481
1491
|
Represents assigning to a constant using an operator that isn't `=`.
|
@@ -1559,11 +1569,11 @@ nodes:
|
|
1559
1569
|
- name: target
|
1560
1570
|
type: node
|
1561
1571
|
kind: ConstantPathNode
|
1562
|
-
- name:
|
1572
|
+
- name: binary_operator_loc
|
1563
1573
|
type: location
|
1564
1574
|
- name: value
|
1565
1575
|
type: node
|
1566
|
-
- name:
|
1576
|
+
- name: binary_operator
|
1567
1577
|
type: constant
|
1568
1578
|
comment: |
|
1569
1579
|
Represents assigning to a constant path using an operator that isn't `=`.
|
@@ -1930,11 +1940,11 @@ nodes:
|
|
1930
1940
|
type: constant
|
1931
1941
|
- name: name_loc
|
1932
1942
|
type: location
|
1933
|
-
- name:
|
1943
|
+
- name: binary_operator_loc
|
1934
1944
|
type: location
|
1935
1945
|
- name: value
|
1936
1946
|
type: node
|
1937
|
-
- name:
|
1947
|
+
- name: binary_operator
|
1938
1948
|
type: constant
|
1939
1949
|
comment: |
|
1940
1950
|
Represents assigning to a global variable using an operator that isn't `=`.
|
@@ -2266,9 +2276,9 @@ nodes:
|
|
2266
2276
|
type: location
|
2267
2277
|
- name: block
|
2268
2278
|
type: node?
|
2269
|
-
- name:
|
2279
|
+
- name: binary_operator
|
2270
2280
|
type: constant
|
2271
|
-
- name:
|
2281
|
+
- name: binary_operator_loc
|
2272
2282
|
type: location
|
2273
2283
|
- name: value
|
2274
2284
|
type: node
|
@@ -2354,11 +2364,11 @@ nodes:
|
|
2354
2364
|
type: constant
|
2355
2365
|
- name: name_loc
|
2356
2366
|
type: location
|
2357
|
-
- name:
|
2367
|
+
- name: binary_operator_loc
|
2358
2368
|
type: location
|
2359
2369
|
- name: value
|
2360
2370
|
type: node
|
2361
|
-
- name:
|
2371
|
+
- name: binary_operator
|
2362
2372
|
type: constant
|
2363
2373
|
comment: |
|
2364
2374
|
Represents assigning to an instance variable using an operator that isn't `=`.
|
@@ -2634,13 +2644,13 @@ nodes:
|
|
2634
2644
|
fields:
|
2635
2645
|
- name: name_loc
|
2636
2646
|
type: location
|
2637
|
-
- name:
|
2647
|
+
- name: binary_operator_loc
|
2638
2648
|
type: location
|
2639
2649
|
- name: value
|
2640
2650
|
type: node
|
2641
2651
|
- name: name
|
2642
2652
|
type: constant
|
2643
|
-
- name:
|
2653
|
+
- name: binary_operator
|
2644
2654
|
type: constant
|
2645
2655
|
- name: depth
|
2646
2656
|
type: uint32
|
@@ -3075,6 +3085,8 @@ nodes:
|
|
3075
3085
|
# On parsing error of `f(**kwargs, ...)` or `f(**nil, ...)`, the keyword_rest value is moved here:
|
3076
3086
|
- KeywordRestParameterNode
|
3077
3087
|
- NoKeywordsParameterNode
|
3088
|
+
# On parsing error of `f(..., ...)`, the first forwarding parameter is moved here:
|
3089
|
+
- ForwardingParameterNode
|
3078
3090
|
- name: keywords
|
3079
3091
|
type: node[]
|
3080
3092
|
kind:
|
data/ext/prism/api_node.c
CHANGED
@@ -1708,14 +1708,14 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
1708
1708
|
assert(cast->write_name != 0);
|
1709
1709
|
argv[6] = RARRAY_AREF(constants, cast->write_name - 1);
|
1710
1710
|
|
1711
|
-
//
|
1711
|
+
// binary_operator
|
1712
1712
|
#line 198 "api_node.c.erb"
|
1713
|
-
assert(cast->
|
1714
|
-
argv[7] = RARRAY_AREF(constants, cast->
|
1713
|
+
assert(cast->binary_operator != 0);
|
1714
|
+
argv[7] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
1715
1715
|
|
1716
|
-
//
|
1716
|
+
// binary_operator_loc
|
1717
1717
|
#line 211 "api_node.c.erb"
|
1718
|
-
argv[8] = pm_location_new(parser, cast->
|
1718
|
+
argv[8] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
1719
1719
|
|
1720
1720
|
// value
|
1721
1721
|
#line 186 "api_node.c.erb"
|
@@ -2009,18 +2009,18 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
2009
2009
|
#line 211 "api_node.c.erb"
|
2010
2010
|
argv[2] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
|
2011
2011
|
|
2012
|
-
//
|
2012
|
+
// binary_operator_loc
|
2013
2013
|
#line 211 "api_node.c.erb"
|
2014
|
-
argv[3] = pm_location_new(parser, cast->
|
2014
|
+
argv[3] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
2015
2015
|
|
2016
2016
|
// value
|
2017
2017
|
#line 186 "api_node.c.erb"
|
2018
2018
|
argv[4] = rb_ary_pop(value_stack);
|
2019
2019
|
|
2020
|
-
//
|
2020
|
+
// binary_operator
|
2021
2021
|
#line 198 "api_node.c.erb"
|
2022
|
-
assert(cast->
|
2023
|
-
argv[5] = RARRAY_AREF(constants, cast->
|
2022
|
+
assert(cast->binary_operator != 0);
|
2023
|
+
argv[5] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
2024
2024
|
|
2025
2025
|
// location
|
2026
2026
|
argv[6] = pm_location_new(parser, node->location.start, node->location.end);
|
@@ -2176,18 +2176,18 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
2176
2176
|
#line 211 "api_node.c.erb"
|
2177
2177
|
argv[2] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
|
2178
2178
|
|
2179
|
-
//
|
2179
|
+
// binary_operator_loc
|
2180
2180
|
#line 211 "api_node.c.erb"
|
2181
|
-
argv[3] = pm_location_new(parser, cast->
|
2181
|
+
argv[3] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
2182
2182
|
|
2183
2183
|
// value
|
2184
2184
|
#line 186 "api_node.c.erb"
|
2185
2185
|
argv[4] = rb_ary_pop(value_stack);
|
2186
2186
|
|
2187
|
-
//
|
2187
|
+
// binary_operator
|
2188
2188
|
#line 198 "api_node.c.erb"
|
2189
|
-
assert(cast->
|
2190
|
-
argv[5] = RARRAY_AREF(constants, cast->
|
2189
|
+
assert(cast->binary_operator != 0);
|
2190
|
+
argv[5] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
2191
2191
|
|
2192
2192
|
// location
|
2193
2193
|
argv[6] = pm_location_new(parser, node->location.start, node->location.end);
|
@@ -2293,18 +2293,18 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
2293
2293
|
#line 186 "api_node.c.erb"
|
2294
2294
|
argv[1] = rb_ary_pop(value_stack);
|
2295
2295
|
|
2296
|
-
//
|
2296
|
+
// binary_operator_loc
|
2297
2297
|
#line 211 "api_node.c.erb"
|
2298
|
-
argv[2] = pm_location_new(parser, cast->
|
2298
|
+
argv[2] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
2299
2299
|
|
2300
2300
|
// value
|
2301
2301
|
#line 186 "api_node.c.erb"
|
2302
2302
|
argv[3] = rb_ary_pop(value_stack);
|
2303
2303
|
|
2304
|
-
//
|
2304
|
+
// binary_operator
|
2305
2305
|
#line 198 "api_node.c.erb"
|
2306
|
-
assert(cast->
|
2307
|
-
argv[4] = RARRAY_AREF(constants, cast->
|
2306
|
+
assert(cast->binary_operator != 0);
|
2307
|
+
argv[4] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
2308
2308
|
|
2309
2309
|
// location
|
2310
2310
|
argv[5] = pm_location_new(parser, node->location.start, node->location.end);
|
@@ -2894,18 +2894,18 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
2894
2894
|
#line 211 "api_node.c.erb"
|
2895
2895
|
argv[2] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
|
2896
2896
|
|
2897
|
-
//
|
2897
|
+
// binary_operator_loc
|
2898
2898
|
#line 211 "api_node.c.erb"
|
2899
|
-
argv[3] = pm_location_new(parser, cast->
|
2899
|
+
argv[3] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
2900
2900
|
|
2901
2901
|
// value
|
2902
2902
|
#line 186 "api_node.c.erb"
|
2903
2903
|
argv[4] = rb_ary_pop(value_stack);
|
2904
2904
|
|
2905
|
-
//
|
2905
|
+
// binary_operator
|
2906
2906
|
#line 198 "api_node.c.erb"
|
2907
|
-
assert(cast->
|
2908
|
-
argv[5] = RARRAY_AREF(constants, cast->
|
2907
|
+
assert(cast->binary_operator != 0);
|
2908
|
+
argv[5] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
2909
2909
|
|
2910
2910
|
// location
|
2911
2911
|
argv[6] = pm_location_new(parser, node->location.start, node->location.end);
|
@@ -3280,14 +3280,14 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
3280
3280
|
#line 186 "api_node.c.erb"
|
3281
3281
|
argv[7] = rb_ary_pop(value_stack);
|
3282
3282
|
|
3283
|
-
//
|
3283
|
+
// binary_operator
|
3284
3284
|
#line 198 "api_node.c.erb"
|
3285
|
-
assert(cast->
|
3286
|
-
argv[8] = RARRAY_AREF(constants, cast->
|
3285
|
+
assert(cast->binary_operator != 0);
|
3286
|
+
argv[8] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
3287
3287
|
|
3288
|
-
//
|
3288
|
+
// binary_operator_loc
|
3289
3289
|
#line 211 "api_node.c.erb"
|
3290
|
-
argv[9] = pm_location_new(parser, cast->
|
3290
|
+
argv[9] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
3291
3291
|
|
3292
3292
|
// value
|
3293
3293
|
#line 186 "api_node.c.erb"
|
@@ -3435,18 +3435,18 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
3435
3435
|
#line 211 "api_node.c.erb"
|
3436
3436
|
argv[2] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
|
3437
3437
|
|
3438
|
-
//
|
3438
|
+
// binary_operator_loc
|
3439
3439
|
#line 211 "api_node.c.erb"
|
3440
|
-
argv[3] = pm_location_new(parser, cast->
|
3440
|
+
argv[3] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
3441
3441
|
|
3442
3442
|
// value
|
3443
3443
|
#line 186 "api_node.c.erb"
|
3444
3444
|
argv[4] = rb_ary_pop(value_stack);
|
3445
3445
|
|
3446
|
-
//
|
3446
|
+
// binary_operator
|
3447
3447
|
#line 198 "api_node.c.erb"
|
3448
|
-
assert(cast->
|
3449
|
-
argv[5] = RARRAY_AREF(constants, cast->
|
3448
|
+
assert(cast->binary_operator != 0);
|
3449
|
+
argv[5] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
3450
3450
|
|
3451
3451
|
// location
|
3452
3452
|
argv[6] = pm_location_new(parser, node->location.start, node->location.end);
|
@@ -3889,9 +3889,9 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
3889
3889
|
#line 211 "api_node.c.erb"
|
3890
3890
|
argv[1] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
|
3891
3891
|
|
3892
|
-
//
|
3892
|
+
// binary_operator_loc
|
3893
3893
|
#line 211 "api_node.c.erb"
|
3894
|
-
argv[2] = pm_location_new(parser, cast->
|
3894
|
+
argv[2] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
|
3895
3895
|
|
3896
3896
|
// value
|
3897
3897
|
#line 186 "api_node.c.erb"
|
@@ -3902,10 +3902,10 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
|
|
3902
3902
|
assert(cast->name != 0);
|
3903
3903
|
argv[4] = RARRAY_AREF(constants, cast->name - 1);
|
3904
3904
|
|
3905
|
-
//
|
3905
|
+
// binary_operator
|
3906
3906
|
#line 198 "api_node.c.erb"
|
3907
|
-
assert(cast->
|
3908
|
-
argv[5] = RARRAY_AREF(constants, cast->
|
3907
|
+
assert(cast->binary_operator != 0);
|
3908
|
+
argv[5] = RARRAY_AREF(constants, cast->binary_operator - 1);
|
3909
3909
|
|
3910
3910
|
// depth
|
3911
3911
|
#line 220 "api_node.c.erb"
|
data/ext/prism/extconf.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rbconfig"
|
4
|
+
|
3
5
|
if ARGV.delete("--help")
|
4
6
|
print(<<~TEXT)
|
5
7
|
USAGE: ruby #{$PROGRAM_NAME} [options]
|
@@ -40,26 +42,6 @@ def generate_templates
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
|
-
# We're going to need to run `make` using prism's `Makefile`. We want to match
|
44
|
-
# up as much of the configuration to the configuration that built the current
|
45
|
-
# version of Ruby as possible.
|
46
|
-
require "rbconfig"
|
47
|
-
env = RbConfig::CONFIG.slice("SOEXT", "CPPFLAGS", "CFLAGS", "CC", "AR", "ARFLAGS", "MAKEDIRS", "RMALL")
|
48
|
-
|
49
|
-
# It's possible that the Ruby that is being run wasn't actually compiled on this
|
50
|
-
# machine, in which case the configuration might be incorrect. In this case
|
51
|
-
# we'll need to do some additional checks and potentially fall back to defaults.
|
52
|
-
if env.key?("CC") && !File.exist?(env["CC"])
|
53
|
-
env.delete("CC")
|
54
|
-
env.delete("CFLAGS")
|
55
|
-
env.delete("CPPFLAGS")
|
56
|
-
end
|
57
|
-
|
58
|
-
if env.key?("AR") && !File.exist?(env["AR"])
|
59
|
-
env.delete("AR")
|
60
|
-
env.delete("ARFLAGS")
|
61
|
-
end
|
62
|
-
|
63
45
|
# Runs `make` in the root directory of the project. Note that this is the
|
64
46
|
# `Makefile` for the overall project, not the `Makefile` that is being generated
|
65
47
|
# by this script.`
|
@@ -77,15 +59,37 @@ end
|
|
77
59
|
|
78
60
|
# On non-CRuby we only need the shared library since we'll interface with it
|
79
61
|
# through FFI, so we'll build only that and not the C extension. We also avoid
|
80
|
-
# `require "mkmf"` as that prepends the LLVM toolchain to PATH on TruffleRuby,
|
81
|
-
# but we want to use the
|
62
|
+
# `require "mkmf"` as that prepends the GraalVM LLVM toolchain to PATH on TruffleRuby < 24.0,
|
63
|
+
# but we want to use the system toolchain here since libprism is run natively.
|
82
64
|
if RUBY_ENGINE != "ruby"
|
83
65
|
generate_templates
|
84
|
-
|
66
|
+
soext = RbConfig::CONFIG["SOEXT"]
|
67
|
+
# Pass SOEXT to avoid an extra subprocess just to query that
|
68
|
+
make({ "SOEXT" => soext }, "build/libprism.#{soext}")
|
85
69
|
File.write("Makefile", "all install clean:\n\t@#{RbConfig::CONFIG["NULLCMD"]}\n")
|
86
70
|
return
|
87
71
|
end
|
88
72
|
|
73
|
+
# We're going to need to run `make` using prism's `Makefile`.
|
74
|
+
# We want to use the same toolchain (compiler, flags, etc) to compile libprism.a and
|
75
|
+
# the C extension since they will be linked together.
|
76
|
+
# The C extension uses RbConfig, which contains values from the toolchain that built the running Ruby.
|
77
|
+
env = RbConfig::CONFIG.slice("SOEXT", "CPPFLAGS", "CFLAGS", "CC", "AR", "ARFLAGS", "MAKEDIRS", "RMALL")
|
78
|
+
|
79
|
+
# It's possible that the Ruby that is being run wasn't actually compiled on this
|
80
|
+
# machine, in which case parts of RbConfig might be incorrect. In this case
|
81
|
+
# we'll need to do some additional checks and potentially fall back to defaults.
|
82
|
+
if env.key?("CC") && !File.exist?(env["CC"])
|
83
|
+
env.delete("CC")
|
84
|
+
env.delete("CFLAGS")
|
85
|
+
env.delete("CPPFLAGS")
|
86
|
+
end
|
87
|
+
|
88
|
+
if env.key?("AR") && !File.exist?(env["AR"])
|
89
|
+
env.delete("AR")
|
90
|
+
env.delete("ARFLAGS")
|
91
|
+
end
|
92
|
+
|
89
93
|
require "mkmf"
|
90
94
|
|
91
95
|
# First, ensure that we can find the header for the prism library.
|
data/ext/prism/extension.h
CHANGED
data/include/prism/ast.h
CHANGED
@@ -1818,14 +1818,14 @@ typedef struct pm_call_operator_write_node {
|
|
1818
1818
|
pm_constant_id_t write_name;
|
1819
1819
|
|
1820
1820
|
/**
|
1821
|
-
* CallOperatorWriteNode#
|
1821
|
+
* CallOperatorWriteNode#binary_operator
|
1822
1822
|
*/
|
1823
|
-
pm_constant_id_t
|
1823
|
+
pm_constant_id_t binary_operator;
|
1824
1824
|
|
1825
1825
|
/**
|
1826
|
-
* CallOperatorWriteNode#
|
1826
|
+
* CallOperatorWriteNode#binary_operator_loc
|
1827
1827
|
*/
|
1828
|
-
pm_location_t
|
1828
|
+
pm_location_t binary_operator_loc;
|
1829
1829
|
|
1830
1830
|
/**
|
1831
1831
|
* CallOperatorWriteNode#value
|
@@ -2129,9 +2129,9 @@ typedef struct pm_class_variable_operator_write_node {
|
|
2129
2129
|
pm_location_t name_loc;
|
2130
2130
|
|
2131
2131
|
/**
|
2132
|
-
* ClassVariableOperatorWriteNode#
|
2132
|
+
* ClassVariableOperatorWriteNode#binary_operator_loc
|
2133
2133
|
*/
|
2134
|
-
pm_location_t
|
2134
|
+
pm_location_t binary_operator_loc;
|
2135
2135
|
|
2136
2136
|
/**
|
2137
2137
|
* ClassVariableOperatorWriteNode#value
|
@@ -2139,9 +2139,9 @@ typedef struct pm_class_variable_operator_write_node {
|
|
2139
2139
|
struct pm_node *value;
|
2140
2140
|
|
2141
2141
|
/**
|
2142
|
-
* ClassVariableOperatorWriteNode#
|
2142
|
+
* ClassVariableOperatorWriteNode#binary_operator
|
2143
2143
|
*/
|
2144
|
-
pm_constant_id_t
|
2144
|
+
pm_constant_id_t binary_operator;
|
2145
2145
|
} pm_class_variable_operator_write_node_t;
|
2146
2146
|
|
2147
2147
|
/**
|
@@ -2326,9 +2326,9 @@ typedef struct pm_constant_operator_write_node {
|
|
2326
2326
|
pm_location_t name_loc;
|
2327
2327
|
|
2328
2328
|
/**
|
2329
|
-
* ConstantOperatorWriteNode#
|
2329
|
+
* ConstantOperatorWriteNode#binary_operator_loc
|
2330
2330
|
*/
|
2331
|
-
pm_location_t
|
2331
|
+
pm_location_t binary_operator_loc;
|
2332
2332
|
|
2333
2333
|
/**
|
2334
2334
|
* ConstantOperatorWriteNode#value
|
@@ -2336,9 +2336,9 @@ typedef struct pm_constant_operator_write_node {
|
|
2336
2336
|
struct pm_node *value;
|
2337
2337
|
|
2338
2338
|
/**
|
2339
|
-
* ConstantOperatorWriteNode#
|
2339
|
+
* ConstantOperatorWriteNode#binary_operator
|
2340
2340
|
*/
|
2341
|
-
pm_constant_id_t
|
2341
|
+
pm_constant_id_t binary_operator;
|
2342
2342
|
} pm_constant_operator_write_node_t;
|
2343
2343
|
|
2344
2344
|
/**
|
@@ -2478,9 +2478,9 @@ typedef struct pm_constant_path_operator_write_node {
|
|
2478
2478
|
struct pm_constant_path_node *target;
|
2479
2479
|
|
2480
2480
|
/**
|
2481
|
-
* ConstantPathOperatorWriteNode#
|
2481
|
+
* ConstantPathOperatorWriteNode#binary_operator_loc
|
2482
2482
|
*/
|
2483
|
-
pm_location_t
|
2483
|
+
pm_location_t binary_operator_loc;
|
2484
2484
|
|
2485
2485
|
/**
|
2486
2486
|
* ConstantPathOperatorWriteNode#value
|
@@ -2488,9 +2488,9 @@ typedef struct pm_constant_path_operator_write_node {
|
|
2488
2488
|
struct pm_node *value;
|
2489
2489
|
|
2490
2490
|
/**
|
2491
|
-
* ConstantPathOperatorWriteNode#
|
2491
|
+
* ConstantPathOperatorWriteNode#binary_operator
|
2492
2492
|
*/
|
2493
|
-
pm_constant_id_t
|
2493
|
+
pm_constant_id_t binary_operator;
|
2494
2494
|
} pm_constant_path_operator_write_node_t;
|
2495
2495
|
|
2496
2496
|
/**
|
@@ -3144,9 +3144,9 @@ typedef struct pm_global_variable_operator_write_node {
|
|
3144
3144
|
pm_location_t name_loc;
|
3145
3145
|
|
3146
3146
|
/**
|
3147
|
-
* GlobalVariableOperatorWriteNode#
|
3147
|
+
* GlobalVariableOperatorWriteNode#binary_operator_loc
|
3148
3148
|
*/
|
3149
|
-
pm_location_t
|
3149
|
+
pm_location_t binary_operator_loc;
|
3150
3150
|
|
3151
3151
|
/**
|
3152
3152
|
* GlobalVariableOperatorWriteNode#value
|
@@ -3154,9 +3154,9 @@ typedef struct pm_global_variable_operator_write_node {
|
|
3154
3154
|
struct pm_node *value;
|
3155
3155
|
|
3156
3156
|
/**
|
3157
|
-
* GlobalVariableOperatorWriteNode#
|
3157
|
+
* GlobalVariableOperatorWriteNode#binary_operator
|
3158
3158
|
*/
|
3159
|
-
pm_constant_id_t
|
3159
|
+
pm_constant_id_t binary_operator;
|
3160
3160
|
} pm_global_variable_operator_write_node_t;
|
3161
3161
|
|
3162
3162
|
/**
|
@@ -3651,14 +3651,14 @@ typedef struct pm_index_operator_write_node {
|
|
3651
3651
|
struct pm_node *block;
|
3652
3652
|
|
3653
3653
|
/**
|
3654
|
-
* IndexOperatorWriteNode#
|
3654
|
+
* IndexOperatorWriteNode#binary_operator
|
3655
3655
|
*/
|
3656
|
-
pm_constant_id_t
|
3656
|
+
pm_constant_id_t binary_operator;
|
3657
3657
|
|
3658
3658
|
/**
|
3659
|
-
* IndexOperatorWriteNode#
|
3659
|
+
* IndexOperatorWriteNode#binary_operator_loc
|
3660
3660
|
*/
|
3661
|
-
pm_location_t
|
3661
|
+
pm_location_t binary_operator_loc;
|
3662
3662
|
|
3663
3663
|
/**
|
3664
3664
|
* IndexOperatorWriteNode#value
|
@@ -3819,9 +3819,9 @@ typedef struct pm_instance_variable_operator_write_node {
|
|
3819
3819
|
pm_location_t name_loc;
|
3820
3820
|
|
3821
3821
|
/**
|
3822
|
-
* InstanceVariableOperatorWriteNode#
|
3822
|
+
* InstanceVariableOperatorWriteNode#binary_operator_loc
|
3823
3823
|
*/
|
3824
|
-
pm_location_t
|
3824
|
+
pm_location_t binary_operator_loc;
|
3825
3825
|
|
3826
3826
|
/**
|
3827
3827
|
* InstanceVariableOperatorWriteNode#value
|
@@ -3829,9 +3829,9 @@ typedef struct pm_instance_variable_operator_write_node {
|
|
3829
3829
|
struct pm_node *value;
|
3830
3830
|
|
3831
3831
|
/**
|
3832
|
-
* InstanceVariableOperatorWriteNode#
|
3832
|
+
* InstanceVariableOperatorWriteNode#binary_operator
|
3833
3833
|
*/
|
3834
|
-
pm_constant_id_t
|
3834
|
+
pm_constant_id_t binary_operator;
|
3835
3835
|
} pm_instance_variable_operator_write_node_t;
|
3836
3836
|
|
3837
3837
|
/**
|
@@ -4304,9 +4304,9 @@ typedef struct pm_local_variable_operator_write_node {
|
|
4304
4304
|
pm_location_t name_loc;
|
4305
4305
|
|
4306
4306
|
/**
|
4307
|
-
* LocalVariableOperatorWriteNode#
|
4307
|
+
* LocalVariableOperatorWriteNode#binary_operator_loc
|
4308
4308
|
*/
|
4309
|
-
pm_location_t
|
4309
|
+
pm_location_t binary_operator_loc;
|
4310
4310
|
|
4311
4311
|
/**
|
4312
4312
|
* LocalVariableOperatorWriteNode#value
|
@@ -4319,9 +4319,9 @@ typedef struct pm_local_variable_operator_write_node {
|
|
4319
4319
|
pm_constant_id_t name;
|
4320
4320
|
|
4321
4321
|
/**
|
4322
|
-
* LocalVariableOperatorWriteNode#
|
4322
|
+
* LocalVariableOperatorWriteNode#binary_operator
|
4323
4323
|
*/
|
4324
|
-
pm_constant_id_t
|
4324
|
+
pm_constant_id_t binary_operator;
|
4325
4325
|
|
4326
4326
|
/**
|
4327
4327
|
* LocalVariableOperatorWriteNode#depth
|