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/lib/prism/parse_result.rb
CHANGED
@@ -25,40 +25,50 @@ module Prism
|
|
25
25
|
|
26
26
|
# Perform a byteslice on the source code using the given byte offset and
|
27
27
|
# byte length.
|
28
|
-
def slice(
|
29
|
-
source.byteslice(
|
28
|
+
def slice(byte_offset, length)
|
29
|
+
source.byteslice(byte_offset, length)
|
30
30
|
end
|
31
31
|
|
32
32
|
# Binary search through the offsets to find the line number for the given
|
33
33
|
# byte offset.
|
34
|
-
def line(
|
35
|
-
start_line + find_line(
|
34
|
+
def line(byte_offset)
|
35
|
+
start_line + find_line(byte_offset)
|
36
36
|
end
|
37
37
|
|
38
38
|
# Return the byte offset of the start of the line corresponding to the given
|
39
39
|
# byte offset.
|
40
|
-
def
|
41
|
-
offsets[find_line(
|
40
|
+
def line_start(byte_offset)
|
41
|
+
offsets[find_line(byte_offset)]
|
42
42
|
end
|
43
43
|
|
44
44
|
# Return the column number for the given byte offset.
|
45
|
-
def column(
|
46
|
-
|
45
|
+
def column(byte_offset)
|
46
|
+
byte_offset - line_start(byte_offset)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Return the character offset for the given byte offset.
|
50
|
+
def character_offset(byte_offset)
|
51
|
+
source.byteslice(0, byte_offset).length
|
52
|
+
end
|
53
|
+
|
54
|
+
# Return the column number in characters for the given byte offset.
|
55
|
+
def character_column(byte_offset)
|
56
|
+
character_offset(byte_offset) - character_offset(line_start(byte_offset))
|
47
57
|
end
|
48
58
|
|
49
59
|
private
|
50
60
|
|
51
61
|
# Binary search through the offsets to find the line number for the given
|
52
62
|
# byte offset.
|
53
|
-
def find_line(
|
63
|
+
def find_line(byte_offset)
|
54
64
|
left = 0
|
55
65
|
right = offsets.length - 1
|
56
66
|
|
57
67
|
while left <= right
|
58
68
|
mid = left + (right - left) / 2
|
59
|
-
return mid if offsets[mid] ==
|
69
|
+
return mid if offsets[mid] == byte_offset
|
60
70
|
|
61
|
-
if offsets[mid] <
|
71
|
+
if offsets[mid] < byte_offset
|
62
72
|
left = mid + 1
|
63
73
|
else
|
64
74
|
right = mid - 1
|
@@ -121,11 +131,23 @@ module Prism
|
|
121
131
|
source.slice(start_offset, length)
|
122
132
|
end
|
123
133
|
|
134
|
+
# The character offset from the beginning of the source where this location
|
135
|
+
# starts.
|
136
|
+
def start_character_offset
|
137
|
+
source.character_offset(start_offset)
|
138
|
+
end
|
139
|
+
|
124
140
|
# The byte offset from the beginning of the source where this location ends.
|
125
141
|
def end_offset
|
126
142
|
start_offset + length
|
127
143
|
end
|
128
144
|
|
145
|
+
# The character offset from the beginning of the source where this location
|
146
|
+
# ends.
|
147
|
+
def end_character_offset
|
148
|
+
source.character_offset(end_offset)
|
149
|
+
end
|
150
|
+
|
129
151
|
# The line number where this location starts.
|
130
152
|
def start_line
|
131
153
|
source.line(start_offset)
|
@@ -133,7 +155,7 @@ module Prism
|
|
133
155
|
|
134
156
|
# The content of the line where this location starts before this location.
|
135
157
|
def start_line_slice
|
136
|
-
offset = source.
|
158
|
+
offset = source.line_start(start_offset)
|
137
159
|
source.slice(offset, start_offset - offset)
|
138
160
|
end
|
139
161
|
|
@@ -148,12 +170,24 @@ module Prism
|
|
148
170
|
source.column(start_offset)
|
149
171
|
end
|
150
172
|
|
173
|
+
# The column number in characters where this location ends from the start of
|
174
|
+
# the line.
|
175
|
+
def start_character_column
|
176
|
+
source.character_column(start_offset)
|
177
|
+
end
|
178
|
+
|
151
179
|
# The column number in bytes where this location ends from the start of the
|
152
180
|
# line.
|
153
181
|
def end_column
|
154
182
|
source.column(end_offset)
|
155
183
|
end
|
156
184
|
|
185
|
+
# The column number in characters where this location ends from the start of
|
186
|
+
# the line.
|
187
|
+
def end_character_column
|
188
|
+
source.character_column(end_offset)
|
189
|
+
end
|
190
|
+
|
157
191
|
# Implement the hash pattern matching interface for Location.
|
158
192
|
def deconstruct_keys(keys)
|
159
193
|
{ start_offset: start_offset, end_offset: end_offset }
|
data/lib/prism/serialize.rb
CHANGED
@@ -27,7 +27,7 @@ module Prism
|
|
27
27
|
|
28
28
|
# The minor version of prism that we are expecting to find in the serialized
|
29
29
|
# strings.
|
30
|
-
MINOR_VERSION =
|
30
|
+
MINOR_VERSION = 18
|
31
31
|
|
32
32
|
# The patch version of prism that we are expecting to find in the serialized
|
33
33
|
# strings.
|
@@ -80,12 +80,9 @@ module Prism
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def load_encoding
|
83
|
-
Encoding.find(io.read(load_varint))
|
84
|
-
end
|
85
|
-
|
86
|
-
def load_force_encoding
|
87
|
-
@encoding = load_encoding
|
83
|
+
@encoding = Encoding.find(io.read(load_varint))
|
88
84
|
@input = input.force_encoding(@encoding).freeze
|
85
|
+
@encoding
|
89
86
|
end
|
90
87
|
|
91
88
|
def load_start_line
|
@@ -128,10 +125,7 @@ module Prism
|
|
128
125
|
encoding = load_encoding
|
129
126
|
load_start_line
|
130
127
|
comments, magic_comments, errors, warnings = load_metadata
|
131
|
-
|
132
|
-
if encoding != @encoding
|
133
|
-
tokens.each { |token,| token.value.force_encoding(encoding) }
|
134
|
-
end
|
128
|
+
tokens.each { |token,| token.value.force_encoding(encoding) }
|
135
129
|
|
136
130
|
raise "Expected to consume all bytes while deserializing" unless @io.eof?
|
137
131
|
Prism::ParseResult.new(tokens, comments, magic_comments, errors, warnings, @source)
|
@@ -139,7 +133,7 @@ module Prism
|
|
139
133
|
|
140
134
|
def load_nodes
|
141
135
|
load_header
|
142
|
-
|
136
|
+
load_encoding
|
143
137
|
load_start_line
|
144
138
|
|
145
139
|
comments, magic_comments, errors, warnings = load_metadata
|
@@ -289,228 +283,228 @@ module Prism
|
|
289
283
|
when 22 then
|
290
284
|
CapturePatternNode.new(load_node, load_node, load_location, location)
|
291
285
|
when 23 then
|
292
|
-
|
286
|
+
CaseMatchNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
|
293
287
|
when 24 then
|
294
|
-
|
288
|
+
CaseNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
|
295
289
|
when 25 then
|
296
|
-
|
290
|
+
ClassNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, load_required_constant, location)
|
297
291
|
when 26 then
|
298
|
-
|
292
|
+
ClassVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
299
293
|
when 27 then
|
300
|
-
|
294
|
+
ClassVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
301
295
|
when 28 then
|
302
|
-
|
296
|
+
ClassVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
303
297
|
when 29 then
|
304
|
-
|
298
|
+
ClassVariableReadNode.new(load_required_constant, location)
|
305
299
|
when 30 then
|
306
|
-
|
300
|
+
ClassVariableTargetNode.new(load_required_constant, location)
|
307
301
|
when 31 then
|
308
|
-
|
302
|
+
ClassVariableWriteNode.new(load_required_constant, load_location, load_node, load_optional_location, location)
|
309
303
|
when 32 then
|
310
|
-
|
304
|
+
ConstantAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
311
305
|
when 33 then
|
312
|
-
|
306
|
+
ConstantOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
313
307
|
when 34 then
|
314
|
-
|
308
|
+
ConstantOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
315
309
|
when 35 then
|
316
|
-
|
310
|
+
ConstantPathAndWriteNode.new(load_node, load_location, load_node, location)
|
317
311
|
when 36 then
|
318
|
-
|
312
|
+
ConstantPathNode.new(load_optional_node, load_node, load_location, location)
|
319
313
|
when 37 then
|
320
|
-
|
314
|
+
ConstantPathOperatorWriteNode.new(load_node, load_location, load_node, load_required_constant, location)
|
321
315
|
when 38 then
|
322
|
-
|
316
|
+
ConstantPathOrWriteNode.new(load_node, load_location, load_node, location)
|
323
317
|
when 39 then
|
324
|
-
|
318
|
+
ConstantPathTargetNode.new(load_optional_node, load_node, load_location, location)
|
325
319
|
when 40 then
|
326
|
-
|
320
|
+
ConstantPathWriteNode.new(load_node, load_location, load_node, location)
|
327
321
|
when 41 then
|
328
|
-
|
322
|
+
ConstantReadNode.new(load_required_constant, location)
|
329
323
|
when 42 then
|
330
|
-
|
324
|
+
ConstantTargetNode.new(load_required_constant, location)
|
331
325
|
when 43 then
|
326
|
+
ConstantWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
|
327
|
+
when 44 then
|
332
328
|
load_serialized_length
|
333
329
|
DefNode.new(load_required_constant, load_location, load_optional_node, load_optional_node, load_optional_node, Array.new(load_varint) { load_required_constant }, load_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, location)
|
334
|
-
when 44 then
|
335
|
-
DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
|
336
330
|
when 45 then
|
337
|
-
|
331
|
+
DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
|
338
332
|
when 46 then
|
339
|
-
|
333
|
+
ElseNode.new(load_location, load_optional_node, load_optional_location, location)
|
340
334
|
when 47 then
|
341
|
-
|
335
|
+
EmbeddedStatementsNode.new(load_location, load_optional_node, load_location, location)
|
342
336
|
when 48 then
|
343
|
-
|
337
|
+
EmbeddedVariableNode.new(load_location, load_node, location)
|
344
338
|
when 49 then
|
345
|
-
|
339
|
+
EnsureNode.new(load_location, load_optional_node, load_location, location)
|
346
340
|
when 50 then
|
347
|
-
|
341
|
+
FalseNode.new(location)
|
348
342
|
when 51 then
|
349
|
-
|
343
|
+
FindPatternNode.new(load_optional_node, load_node, Array.new(load_varint) { load_node }, load_node, load_optional_location, load_optional_location, location)
|
350
344
|
when 52 then
|
351
|
-
|
345
|
+
FlipFlopNode.new(load_optional_node, load_optional_node, load_location, load_varint, location)
|
352
346
|
when 53 then
|
353
|
-
|
347
|
+
FloatNode.new(location)
|
354
348
|
when 54 then
|
355
|
-
|
349
|
+
ForNode.new(load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location, location)
|
356
350
|
when 55 then
|
357
|
-
|
351
|
+
ForwardingArgumentsNode.new(location)
|
358
352
|
when 56 then
|
359
|
-
|
353
|
+
ForwardingParameterNode.new(location)
|
360
354
|
when 57 then
|
361
|
-
|
355
|
+
ForwardingSuperNode.new(load_optional_node, location)
|
362
356
|
when 58 then
|
363
|
-
|
357
|
+
GlobalVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
364
358
|
when 59 then
|
365
|
-
|
359
|
+
GlobalVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
366
360
|
when 60 then
|
367
|
-
|
361
|
+
GlobalVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
368
362
|
when 61 then
|
369
|
-
|
363
|
+
GlobalVariableReadNode.new(load_required_constant, location)
|
370
364
|
when 62 then
|
371
|
-
|
365
|
+
GlobalVariableTargetNode.new(load_required_constant, location)
|
372
366
|
when 63 then
|
373
|
-
|
367
|
+
GlobalVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
|
374
368
|
when 64 then
|
375
|
-
|
369
|
+
HashNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
|
376
370
|
when 65 then
|
377
|
-
|
371
|
+
HashPatternNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_optional_location, load_optional_location, location)
|
378
372
|
when 66 then
|
379
|
-
|
373
|
+
IfNode.new(load_optional_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
|
380
374
|
when 67 then
|
381
|
-
|
375
|
+
ImaginaryNode.new(load_node, location)
|
382
376
|
when 68 then
|
383
|
-
|
377
|
+
ImplicitNode.new(load_node, location)
|
384
378
|
when 69 then
|
385
|
-
|
379
|
+
InNode.new(load_node, load_optional_node, load_location, load_optional_location, location)
|
386
380
|
when 70 then
|
387
|
-
|
381
|
+
IndexAndWriteNode.new(load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_varint, load_location, load_node, location)
|
388
382
|
when 71 then
|
389
|
-
|
383
|
+
IndexOperatorWriteNode.new(load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_varint, load_required_constant, load_location, load_node, location)
|
390
384
|
when 72 then
|
391
|
-
|
385
|
+
IndexOrWriteNode.new(load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_varint, load_location, load_node, location)
|
392
386
|
when 73 then
|
393
|
-
|
387
|
+
InstanceVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
394
388
|
when 74 then
|
395
|
-
|
389
|
+
InstanceVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
396
390
|
when 75 then
|
397
|
-
|
391
|
+
InstanceVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
398
392
|
when 76 then
|
399
|
-
|
393
|
+
InstanceVariableReadNode.new(load_required_constant, location)
|
400
394
|
when 77 then
|
401
|
-
|
395
|
+
InstanceVariableTargetNode.new(load_required_constant, location)
|
402
396
|
when 78 then
|
403
|
-
|
397
|
+
InstanceVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
|
404
398
|
when 79 then
|
405
|
-
|
399
|
+
IntegerNode.new(load_varint, location)
|
406
400
|
when 80 then
|
407
|
-
|
401
|
+
InterpolatedMatchLastLineNode.new(load_location, Array.new(load_varint) { load_node }, load_location, load_varint, location)
|
408
402
|
when 81 then
|
409
|
-
|
403
|
+
InterpolatedRegularExpressionNode.new(load_location, Array.new(load_varint) { load_node }, load_location, load_varint, location)
|
410
404
|
when 82 then
|
411
|
-
|
405
|
+
InterpolatedStringNode.new(load_optional_location, Array.new(load_varint) { load_node }, load_optional_location, location)
|
412
406
|
when 83 then
|
413
|
-
|
407
|
+
InterpolatedSymbolNode.new(load_optional_location, Array.new(load_varint) { load_node }, load_optional_location, location)
|
414
408
|
when 84 then
|
415
|
-
|
409
|
+
InterpolatedXStringNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
|
416
410
|
when 85 then
|
417
|
-
|
411
|
+
KeywordHashNode.new(Array.new(load_varint) { load_node }, location)
|
418
412
|
when 86 then
|
419
|
-
|
413
|
+
KeywordRestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
|
420
414
|
when 87 then
|
421
|
-
|
415
|
+
LambdaNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_location, load_location, load_optional_node, load_optional_node, location)
|
422
416
|
when 88 then
|
423
|
-
|
417
|
+
LocalVariableAndWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varint, location)
|
424
418
|
when 89 then
|
425
|
-
|
419
|
+
LocalVariableOperatorWriteNode.new(load_location, load_location, load_node, load_required_constant, load_required_constant, load_varint, location)
|
426
420
|
when 90 then
|
427
|
-
|
421
|
+
LocalVariableOrWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varint, location)
|
428
422
|
when 91 then
|
429
|
-
|
423
|
+
LocalVariableReadNode.new(load_required_constant, load_varint, location)
|
430
424
|
when 92 then
|
431
|
-
|
425
|
+
LocalVariableTargetNode.new(load_required_constant, load_varint, location)
|
432
426
|
when 93 then
|
433
|
-
|
427
|
+
LocalVariableWriteNode.new(load_required_constant, load_varint, load_location, load_node, load_location, location)
|
434
428
|
when 94 then
|
435
|
-
|
429
|
+
MatchLastLineNode.new(load_location, load_location, load_location, load_string, load_varint, location)
|
436
430
|
when 95 then
|
437
|
-
|
431
|
+
MatchPredicateNode.new(load_node, load_node, load_location, location)
|
438
432
|
when 96 then
|
439
|
-
|
433
|
+
MatchRequiredNode.new(load_node, load_node, load_location, location)
|
440
434
|
when 97 then
|
441
|
-
|
435
|
+
MatchWriteNode.new(load_node, Array.new(load_varint) { load_node }, location)
|
442
436
|
when 98 then
|
443
|
-
|
437
|
+
MissingNode.new(location)
|
444
438
|
when 99 then
|
445
|
-
|
439
|
+
ModuleNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant, location)
|
446
440
|
when 100 then
|
447
|
-
|
441
|
+
MultiTargetNode.new(Array.new(load_varint) { load_node }, load_optional_node, Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
|
448
442
|
when 101 then
|
449
|
-
|
443
|
+
MultiWriteNode.new(Array.new(load_varint) { load_node }, load_optional_node, Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, load_location, load_node, location)
|
450
444
|
when 102 then
|
451
|
-
|
445
|
+
NextNode.new(load_optional_node, load_location, location)
|
452
446
|
when 103 then
|
453
|
-
|
447
|
+
NilNode.new(location)
|
454
448
|
when 104 then
|
455
|
-
|
449
|
+
NoKeywordsParameterNode.new(load_location, load_location, location)
|
456
450
|
when 105 then
|
457
|
-
|
451
|
+
NumberedReferenceReadNode.new(load_varint, location)
|
458
452
|
when 106 then
|
459
|
-
|
453
|
+
OptionalKeywordParameterNode.new(load_required_constant, load_location, load_node, location)
|
460
454
|
when 107 then
|
461
|
-
|
455
|
+
OptionalParameterNode.new(load_required_constant, load_location, load_location, load_node, location)
|
462
456
|
when 108 then
|
463
|
-
|
457
|
+
OrNode.new(load_node, load_node, load_location, location)
|
464
458
|
when 109 then
|
465
|
-
|
459
|
+
ParametersNode.new(Array.new(load_varint) { load_node }, Array.new(load_varint) { load_node }, load_optional_node, Array.new(load_varint) { load_node }, Array.new(load_varint) { load_node }, load_optional_node, load_optional_node, location)
|
466
460
|
when 110 then
|
467
|
-
|
461
|
+
ParenthesesNode.new(load_optional_node, load_location, load_location, location)
|
468
462
|
when 111 then
|
469
|
-
|
463
|
+
PinnedExpressionNode.new(load_node, load_location, load_location, load_location, location)
|
470
464
|
when 112 then
|
471
|
-
|
465
|
+
PinnedVariableNode.new(load_node, load_location, location)
|
472
466
|
when 113 then
|
473
|
-
|
467
|
+
PostExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
|
474
468
|
when 114 then
|
475
|
-
|
469
|
+
PreExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
|
476
470
|
when 115 then
|
477
|
-
|
471
|
+
ProgramNode.new(Array.new(load_varint) { load_required_constant }, load_node, location)
|
478
472
|
when 116 then
|
479
|
-
|
473
|
+
RangeNode.new(load_optional_node, load_optional_node, load_location, load_varint, location)
|
480
474
|
when 117 then
|
481
|
-
|
475
|
+
RationalNode.new(load_node, location)
|
482
476
|
when 118 then
|
483
|
-
|
477
|
+
RedoNode.new(location)
|
484
478
|
when 119 then
|
485
|
-
|
479
|
+
RegularExpressionNode.new(load_location, load_location, load_location, load_string, load_varint, location)
|
486
480
|
when 120 then
|
487
|
-
|
481
|
+
RequiredKeywordParameterNode.new(load_required_constant, load_location, location)
|
488
482
|
when 121 then
|
489
|
-
|
483
|
+
RequiredParameterNode.new(load_required_constant, location)
|
490
484
|
when 122 then
|
491
|
-
|
485
|
+
RescueModifierNode.new(load_node, load_location, load_node, location)
|
492
486
|
when 123 then
|
493
|
-
|
487
|
+
RescueNode.new(load_location, Array.new(load_varint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node, location)
|
494
488
|
when 124 then
|
495
|
-
|
489
|
+
RestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
|
496
490
|
when 125 then
|
497
|
-
|
491
|
+
RetryNode.new(location)
|
498
492
|
when 126 then
|
499
|
-
|
493
|
+
ReturnNode.new(load_location, load_optional_node, location)
|
500
494
|
when 127 then
|
501
|
-
|
495
|
+
SelfNode.new(location)
|
502
496
|
when 128 then
|
503
|
-
|
497
|
+
SingletonClassNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location, location)
|
504
498
|
when 129 then
|
505
|
-
|
499
|
+
SourceEncodingNode.new(location)
|
506
500
|
when 130 then
|
507
|
-
|
501
|
+
SourceFileNode.new(load_string, location)
|
508
502
|
when 131 then
|
509
|
-
|
503
|
+
SourceLineNode.new(location)
|
510
504
|
when 132 then
|
511
|
-
|
505
|
+
SplatNode.new(load_location, load_optional_node, location)
|
512
506
|
when 133 then
|
513
|
-
|
507
|
+
StatementsNode.new(Array.new(load_varint) { load_node }, location)
|
514
508
|
when 134 then
|
515
509
|
StringNode.new(load_varint, load_optional_location, load_location, load_optional_location, load_string, location)
|
516
510
|
when 135 then
|
@@ -522,7 +516,7 @@ module Prism
|
|
522
516
|
when 138 then
|
523
517
|
UndefNode.new(Array.new(load_varint) { load_node }, load_location, location)
|
524
518
|
when 139 then
|
525
|
-
UnlessNode.new(load_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
|
519
|
+
UnlessNode.new(load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
|
526
520
|
when 140 then
|
527
521
|
UntilNode.new(load_location, load_optional_location, load_node, load_optional_node, load_varint, location)
|
528
522
|
when 141 then
|
@@ -632,6 +626,10 @@ module Prism
|
|
632
626
|
location = load_location
|
633
627
|
CapturePatternNode.new(load_node, load_node, load_location, location)
|
634
628
|
},
|
629
|
+
-> {
|
630
|
+
location = load_location
|
631
|
+
CaseMatchNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
|
632
|
+
},
|
635
633
|
-> {
|
636
634
|
location = load_location
|
637
635
|
CaseNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
|
@@ -803,7 +801,7 @@ module Prism
|
|
803
801
|
},
|
804
802
|
-> {
|
805
803
|
location = load_location
|
806
|
-
IfNode.new(load_optional_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
|
804
|
+
IfNode.new(load_optional_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
|
807
805
|
},
|
808
806
|
-> {
|
809
807
|
location = load_location
|
@@ -927,7 +925,7 @@ module Prism
|
|
927
925
|
},
|
928
926
|
-> {
|
929
927
|
location = load_location
|
930
|
-
MatchWriteNode.new(load_node, Array.new(load_varint) {
|
928
|
+
MatchWriteNode.new(load_node, Array.new(load_varint) { load_node }, location)
|
931
929
|
},
|
932
930
|
-> {
|
933
931
|
location = load_location
|
@@ -1073,10 +1071,6 @@ module Prism
|
|
1073
1071
|
location = load_location
|
1074
1072
|
StatementsNode.new(Array.new(load_varint) { load_node }, location)
|
1075
1073
|
},
|
1076
|
-
-> {
|
1077
|
-
location = load_location
|
1078
|
-
StringConcatNode.new(load_node, load_node, location)
|
1079
|
-
},
|
1080
1074
|
-> {
|
1081
1075
|
location = load_location
|
1082
1076
|
StringNode.new(load_varint, load_optional_location, load_location, load_optional_location, load_string, location)
|
@@ -1099,7 +1093,7 @@ module Prism
|
|
1099
1093
|
},
|
1100
1094
|
-> {
|
1101
1095
|
location = load_location
|
1102
|
-
UnlessNode.new(load_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
|
1096
|
+
UnlessNode.new(load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
|
1103
1097
|
},
|
1104
1098
|
-> {
|
1105
1099
|
location = load_location
|
data/lib/prism/visitor.rb
CHANGED
@@ -114,6 +114,9 @@ module Prism
|
|
114
114
|
# Visit a CapturePatternNode node
|
115
115
|
alias visit_capture_pattern_node visit_child_nodes
|
116
116
|
|
117
|
+
# Visit a CaseMatchNode node
|
118
|
+
alias visit_case_match_node visit_child_nodes
|
119
|
+
|
117
120
|
# Visit a CaseNode node
|
118
121
|
alias visit_case_node visit_child_nodes
|
119
122
|
|
@@ -444,9 +447,6 @@ module Prism
|
|
444
447
|
# Visit a StatementsNode node
|
445
448
|
alias visit_statements_node visit_child_nodes
|
446
449
|
|
447
|
-
# Visit a StringConcatNode node
|
448
|
-
alias visit_string_concat_node visit_child_nodes
|
449
|
-
|
450
450
|
# Visit a StringNode node
|
451
451
|
alias visit_string_node visit_child_nodes
|
452
452
|
|
data/lib/prism.rb
CHANGED
@@ -16,6 +16,7 @@ module Prism
|
|
16
16
|
autoload :Debug, "prism/debug"
|
17
17
|
autoload :DesugarCompiler, "prism/desugar_compiler"
|
18
18
|
autoload :Dispatcher, "prism/dispatcher"
|
19
|
+
autoload :DotVisitor, "prism/dot_visitor"
|
19
20
|
autoload :DSL, "prism/dsl"
|
20
21
|
autoload :LexCompat, "prism/lex_compat"
|
21
22
|
autoload :LexRipper, "prism/lex_compat"
|
data/prism.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "prism"
|
5
|
-
spec.version = "0.
|
5
|
+
spec.version = "0.18.0"
|
6
6
|
spec.authors = ["Shopify"]
|
7
7
|
spec.email = ["ruby@shopify.com"]
|
8
8
|
|
@@ -67,6 +67,7 @@ Gem::Specification.new do |spec|
|
|
67
67
|
"lib/prism/debug.rb",
|
68
68
|
"lib/prism/desugar_compiler.rb",
|
69
69
|
"lib/prism/dispatcher.rb",
|
70
|
+
"lib/prism/dot_visitor.rb",
|
70
71
|
"lib/prism/dsl.rb",
|
71
72
|
"lib/prism/ffi.rb",
|
72
73
|
"lib/prism/lex_compat.rb",
|
@@ -84,6 +85,7 @@ Gem::Specification.new do |spec|
|
|
84
85
|
"lib/prism/visitor.rb",
|
85
86
|
"src/diagnostic.c",
|
86
87
|
"src/enc/pm_big5.c",
|
88
|
+
"src/enc/pm_cp51932.c",
|
87
89
|
"src/enc/pm_euc_jp.c",
|
88
90
|
"src/enc/pm_gbk.c",
|
89
91
|
"src/enc/pm_shift_jis.c",
|
@@ -118,4 +120,6 @@ Gem::Specification.new do |spec|
|
|
118
120
|
|
119
121
|
spec.extensions = ["ext/prism/extconf.rb"]
|
120
122
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
123
|
+
spec.metadata["source_code_uri"] = "https://github.com/ruby/prism"
|
124
|
+
spec.metadata["changelog_uri"] = "https://github.com/ruby/prism/blob/main/CHANGELOG.md"
|
121
125
|
end
|