yarp 0.11.0 → 0.12.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 +26 -1
- data/config.yml +105 -6
- data/ext/yarp/api_node.c +200 -34
- data/ext/yarp/extension.c +8 -1
- data/ext/yarp/extension.h +1 -1
- data/include/yarp/ast.h +246 -293
- data/include/yarp/diagnostic.h +7 -2
- data/include/yarp/enc/yp_encoding.h +1 -1
- data/include/yarp/parser.h +44 -16
- data/include/yarp/util/yp_char.h +21 -5
- data/include/yarp/version.h +2 -2
- data/lib/yarp/mutation_visitor.rb +28 -3
- data/lib/yarp/node.rb +3507 -85
- data/lib/yarp/serialize.rb +146 -136
- data/lib/yarp.rb +57 -42
- data/src/diagnostic.c +6 -1
- data/src/enc/yp_unicode.c +5 -5
- data/src/node.c +87 -8
- data/src/prettyprint.c +85 -21
- data/src/serialize.c +59 -19
- data/src/util/yp_char.c +57 -9
- data/src/util/yp_constant_pool.c +69 -18
- data/src/yarp.c +1528 -1018
- data/yarp.gemspec +1 -1
- metadata +3 -3
data/lib/yarp/serialize.rb
CHANGED
@@ -21,7 +21,7 @@ end
|
|
21
21
|
module YARP
|
22
22
|
module Serialize
|
23
23
|
MAJOR_VERSION = 0
|
24
|
-
MINOR_VERSION =
|
24
|
+
MINOR_VERSION = 12
|
25
25
|
PATCH_VERSION = 0
|
26
26
|
|
27
27
|
def self.load(input, serialized)
|
@@ -201,277 +201,287 @@ module YARP
|
|
201
201
|
|
202
202
|
case type
|
203
203
|
when 1 then
|
204
|
-
|
204
|
+
AliasGlobalVariableNode.new(load_node, load_node, load_location, location)
|
205
205
|
when 2 then
|
206
|
-
|
206
|
+
AliasMethodNode.new(load_node, load_node, load_location, location)
|
207
207
|
when 3 then
|
208
|
-
|
208
|
+
AlternationPatternNode.new(load_node, load_node, load_location, location)
|
209
209
|
when 4 then
|
210
|
-
|
210
|
+
AndNode.new(load_node, load_node, load_location, location)
|
211
211
|
when 5 then
|
212
|
-
|
212
|
+
ArgumentsNode.new(Array.new(load_varint) { load_node }, location)
|
213
213
|
when 6 then
|
214
|
-
|
214
|
+
ArrayNode.new(Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
|
215
215
|
when 7 then
|
216
|
-
|
216
|
+
ArrayPatternNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
|
217
217
|
when 8 then
|
218
|
-
|
218
|
+
AssocNode.new(load_node, load_optional_node, load_optional_location, location)
|
219
219
|
when 9 then
|
220
|
-
|
220
|
+
AssocSplatNode.new(load_optional_node, load_location, location)
|
221
221
|
when 10 then
|
222
|
-
|
222
|
+
BackReferenceReadNode.new(location)
|
223
223
|
when 11 then
|
224
|
-
|
224
|
+
BeginNode.new(load_optional_location, load_optional_node, load_optional_node, load_optional_node, load_optional_node, load_optional_location, location)
|
225
225
|
when 12 then
|
226
|
-
|
226
|
+
BlockArgumentNode.new(load_optional_node, load_location, location)
|
227
227
|
when 13 then
|
228
|
-
|
228
|
+
BlockLocalVariableNode.new(load_required_constant, location)
|
229
229
|
when 14 then
|
230
|
-
|
230
|
+
BlockNode.new(Array.new(load_varint) { load_required_constant }, load_optional_node, load_optional_node, load_location, load_location, location)
|
231
231
|
when 15 then
|
232
|
-
|
232
|
+
BlockParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
|
233
233
|
when 16 then
|
234
|
-
|
234
|
+
BlockParametersNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
|
235
235
|
when 17 then
|
236
|
-
|
236
|
+
BreakNode.new(load_optional_node, load_location, location)
|
237
237
|
when 18 then
|
238
|
-
|
238
|
+
CallAndWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_string, load_string, load_location, load_node, location)
|
239
239
|
when 19 then
|
240
|
-
|
240
|
+
CallNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, load_varint, load_string, location)
|
241
241
|
when 20 then
|
242
|
-
|
242
|
+
CallOperatorWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_string, load_string, load_required_constant, load_location, load_node, location)
|
243
243
|
when 21 then
|
244
|
-
|
244
|
+
CallOrWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_string, load_string, load_location, load_node, location)
|
245
245
|
when 22 then
|
246
|
-
|
246
|
+
CapturePatternNode.new(load_node, load_node, load_location, location)
|
247
247
|
when 23 then
|
248
|
-
|
248
|
+
CaseNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
|
249
249
|
when 24 then
|
250
|
-
|
250
|
+
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)
|
251
251
|
when 25 then
|
252
|
-
|
252
|
+
ClassVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
253
253
|
when 26 then
|
254
|
-
|
254
|
+
ClassVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
255
255
|
when 27 then
|
256
|
-
|
256
|
+
ClassVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
257
257
|
when 28 then
|
258
|
-
|
258
|
+
ClassVariableReadNode.new(load_required_constant, location)
|
259
259
|
when 29 then
|
260
|
-
|
260
|
+
ClassVariableTargetNode.new(load_required_constant, location)
|
261
261
|
when 30 then
|
262
|
-
|
262
|
+
ClassVariableWriteNode.new(load_required_constant, load_location, load_node, load_optional_location, location)
|
263
263
|
when 31 then
|
264
|
-
|
264
|
+
ConstantAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
265
265
|
when 32 then
|
266
|
-
|
266
|
+
ConstantOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
267
267
|
when 33 then
|
268
|
-
|
268
|
+
ConstantOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
269
269
|
when 34 then
|
270
|
-
|
270
|
+
ConstantPathAndWriteNode.new(load_node, load_location, load_node, location)
|
271
271
|
when 35 then
|
272
|
-
|
272
|
+
ConstantPathNode.new(load_optional_node, load_node, load_location, location)
|
273
273
|
when 36 then
|
274
|
-
|
274
|
+
ConstantPathOperatorWriteNode.new(load_node, load_location, load_node, load_required_constant, location)
|
275
275
|
when 37 then
|
276
|
-
|
276
|
+
ConstantPathOrWriteNode.new(load_node, load_location, load_node, location)
|
277
277
|
when 38 then
|
278
|
-
|
278
|
+
ConstantPathTargetNode.new(load_optional_node, load_node, load_location, location)
|
279
279
|
when 39 then
|
280
|
-
|
280
|
+
ConstantPathWriteNode.new(load_node, load_location, load_node, location)
|
281
281
|
when 40 then
|
282
|
-
|
282
|
+
ConstantReadNode.new(load_required_constant, location)
|
283
283
|
when 41 then
|
284
|
-
|
284
|
+
ConstantTargetNode.new(load_required_constant, location)
|
285
285
|
when 42 then
|
286
|
+
ConstantWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
|
287
|
+
when 43 then
|
286
288
|
load_serialized_length
|
287
289
|
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)
|
288
|
-
when 43 then
|
289
|
-
DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
|
290
290
|
when 44 then
|
291
|
-
|
291
|
+
DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
|
292
292
|
when 45 then
|
293
|
-
|
293
|
+
ElseNode.new(load_location, load_optional_node, load_optional_location, location)
|
294
294
|
when 46 then
|
295
|
-
|
295
|
+
EmbeddedStatementsNode.new(load_location, load_optional_node, load_location, location)
|
296
296
|
when 47 then
|
297
|
-
|
297
|
+
EmbeddedVariableNode.new(load_location, load_node, location)
|
298
298
|
when 48 then
|
299
|
-
|
299
|
+
EnsureNode.new(load_location, load_optional_node, load_location, location)
|
300
300
|
when 49 then
|
301
|
-
|
301
|
+
FalseNode.new(location)
|
302
302
|
when 50 then
|
303
|
-
|
303
|
+
FindPatternNode.new(load_optional_node, load_node, Array.new(load_varint) { load_node }, load_node, load_optional_location, load_optional_location, location)
|
304
304
|
when 51 then
|
305
|
-
|
305
|
+
FlipFlopNode.new(load_optional_node, load_optional_node, load_location, load_varint, location)
|
306
306
|
when 52 then
|
307
|
-
|
307
|
+
FloatNode.new(location)
|
308
308
|
when 53 then
|
309
|
-
|
309
|
+
ForNode.new(load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location, location)
|
310
310
|
when 54 then
|
311
|
-
|
311
|
+
ForwardingArgumentsNode.new(location)
|
312
312
|
when 55 then
|
313
|
-
|
313
|
+
ForwardingParameterNode.new(location)
|
314
314
|
when 56 then
|
315
|
-
|
315
|
+
ForwardingSuperNode.new(load_optional_node, location)
|
316
316
|
when 57 then
|
317
|
-
|
317
|
+
GlobalVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
318
318
|
when 58 then
|
319
|
-
|
319
|
+
GlobalVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
320
320
|
when 59 then
|
321
|
-
|
321
|
+
GlobalVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
322
322
|
when 60 then
|
323
|
-
|
323
|
+
GlobalVariableReadNode.new(load_required_constant, location)
|
324
324
|
when 61 then
|
325
|
-
|
325
|
+
GlobalVariableTargetNode.new(load_required_constant, location)
|
326
326
|
when 62 then
|
327
|
-
|
327
|
+
GlobalVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
|
328
328
|
when 63 then
|
329
|
-
|
329
|
+
HashNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
|
330
330
|
when 64 then
|
331
|
-
|
331
|
+
HashPatternNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_optional_location, load_optional_location, location)
|
332
332
|
when 65 then
|
333
|
-
|
333
|
+
IfNode.new(load_optional_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
|
334
334
|
when 66 then
|
335
|
-
|
335
|
+
ImaginaryNode.new(load_node, location)
|
336
336
|
when 67 then
|
337
|
-
|
337
|
+
ImplicitNode.new(load_node, location)
|
338
338
|
when 68 then
|
339
|
-
|
339
|
+
InNode.new(load_node, load_optional_node, load_location, load_optional_location, location)
|
340
340
|
when 69 then
|
341
|
-
|
341
|
+
InstanceVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
342
342
|
when 70 then
|
343
|
-
|
343
|
+
InstanceVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
|
344
344
|
when 71 then
|
345
|
-
|
345
|
+
InstanceVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
|
346
346
|
when 72 then
|
347
|
-
|
347
|
+
InstanceVariableReadNode.new(load_required_constant, location)
|
348
348
|
when 73 then
|
349
|
-
|
349
|
+
InstanceVariableTargetNode.new(load_required_constant, location)
|
350
350
|
when 74 then
|
351
|
-
|
351
|
+
InstanceVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
|
352
352
|
when 75 then
|
353
|
-
|
353
|
+
IntegerNode.new(load_varint, location)
|
354
354
|
when 76 then
|
355
|
-
|
355
|
+
InterpolatedMatchLastLineNode.new(load_location, Array.new(load_varint) { load_node }, load_location, load_varint, location)
|
356
356
|
when 77 then
|
357
|
-
|
357
|
+
InterpolatedRegularExpressionNode.new(load_location, Array.new(load_varint) { load_node }, load_location, load_varint, location)
|
358
358
|
when 78 then
|
359
|
-
|
359
|
+
InterpolatedStringNode.new(load_optional_location, Array.new(load_varint) { load_node }, load_optional_location, location)
|
360
360
|
when 79 then
|
361
|
-
|
361
|
+
InterpolatedSymbolNode.new(load_optional_location, Array.new(load_varint) { load_node }, load_optional_location, location)
|
362
362
|
when 80 then
|
363
|
-
|
363
|
+
InterpolatedXStringNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
|
364
364
|
when 81 then
|
365
|
-
|
365
|
+
KeywordHashNode.new(Array.new(load_varint) { load_node }, location)
|
366
366
|
when 82 then
|
367
|
-
|
367
|
+
KeywordParameterNode.new(load_required_constant, load_location, load_optional_node, location)
|
368
368
|
when 83 then
|
369
|
-
|
369
|
+
KeywordRestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
|
370
370
|
when 84 then
|
371
|
-
|
371
|
+
LambdaNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_location, load_location, load_optional_node, load_optional_node, location)
|
372
372
|
when 85 then
|
373
|
-
|
373
|
+
LocalVariableAndWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varint, location)
|
374
374
|
when 86 then
|
375
|
-
|
375
|
+
LocalVariableOperatorWriteNode.new(load_location, load_location, load_node, load_required_constant, load_required_constant, load_varint, location)
|
376
376
|
when 87 then
|
377
|
-
|
377
|
+
LocalVariableOrWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varint, location)
|
378
378
|
when 88 then
|
379
|
-
|
379
|
+
LocalVariableReadNode.new(load_required_constant, load_varint, location)
|
380
380
|
when 89 then
|
381
|
-
|
381
|
+
LocalVariableTargetNode.new(load_required_constant, load_varint, location)
|
382
382
|
when 90 then
|
383
|
-
|
383
|
+
LocalVariableWriteNode.new(load_required_constant, load_varint, load_location, load_node, load_location, location)
|
384
384
|
when 91 then
|
385
|
-
|
385
|
+
MatchLastLineNode.new(load_location, load_location, load_location, load_string, load_varint, location)
|
386
386
|
when 92 then
|
387
|
-
|
387
|
+
MatchPredicateNode.new(load_node, load_node, load_location, location)
|
388
388
|
when 93 then
|
389
|
-
|
389
|
+
MatchRequiredNode.new(load_node, load_node, load_location, location)
|
390
390
|
when 94 then
|
391
|
-
|
391
|
+
MatchWriteNode.new(load_node, Array.new(load_varint) { load_required_constant }, location)
|
392
392
|
when 95 then
|
393
|
-
|
393
|
+
MissingNode.new(location)
|
394
394
|
when 96 then
|
395
|
-
|
395
|
+
ModuleNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant, location)
|
396
396
|
when 97 then
|
397
|
-
|
397
|
+
MultiTargetNode.new(Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
|
398
398
|
when 98 then
|
399
|
-
|
399
|
+
MultiWriteNode.new(Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, load_location, load_node, location)
|
400
400
|
when 99 then
|
401
|
-
|
401
|
+
NextNode.new(load_optional_node, load_location, location)
|
402
402
|
when 100 then
|
403
|
-
|
403
|
+
NilNode.new(location)
|
404
404
|
when 101 then
|
405
|
-
|
405
|
+
NoKeywordsParameterNode.new(load_location, load_location, location)
|
406
406
|
when 102 then
|
407
|
-
|
407
|
+
NumberedReferenceReadNode.new(load_varint, location)
|
408
408
|
when 103 then
|
409
|
-
|
409
|
+
OptionalParameterNode.new(load_required_constant, load_location, load_location, load_node, location)
|
410
410
|
when 104 then
|
411
|
-
|
411
|
+
OrNode.new(load_node, load_node, load_location, location)
|
412
412
|
when 105 then
|
413
|
-
|
413
|
+
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)
|
414
414
|
when 106 then
|
415
|
-
|
415
|
+
ParenthesesNode.new(load_optional_node, load_location, load_location, location)
|
416
416
|
when 107 then
|
417
|
-
|
417
|
+
PinnedExpressionNode.new(load_node, load_location, load_location, load_location, location)
|
418
418
|
when 108 then
|
419
|
-
|
419
|
+
PinnedVariableNode.new(load_node, load_location, location)
|
420
420
|
when 109 then
|
421
|
-
|
421
|
+
PostExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
|
422
422
|
when 110 then
|
423
|
-
|
423
|
+
PreExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
|
424
424
|
when 111 then
|
425
|
-
|
425
|
+
ProgramNode.new(Array.new(load_varint) { load_required_constant }, load_node, location)
|
426
426
|
when 112 then
|
427
|
-
|
427
|
+
RangeNode.new(load_optional_node, load_optional_node, load_location, load_varint, location)
|
428
428
|
when 113 then
|
429
|
-
|
429
|
+
RationalNode.new(load_node, location)
|
430
430
|
when 114 then
|
431
|
-
|
431
|
+
RedoNode.new(location)
|
432
432
|
when 115 then
|
433
|
-
|
433
|
+
RegularExpressionNode.new(load_location, load_location, load_location, load_string, load_varint, location)
|
434
434
|
when 116 then
|
435
|
-
|
435
|
+
RequiredDestructuredParameterNode.new(Array.new(load_varint) { load_node }, load_location, load_location, location)
|
436
436
|
when 117 then
|
437
|
-
|
437
|
+
RequiredParameterNode.new(load_required_constant, location)
|
438
438
|
when 118 then
|
439
|
-
|
439
|
+
RescueModifierNode.new(load_node, load_location, load_node, location)
|
440
440
|
when 119 then
|
441
|
-
|
441
|
+
RescueNode.new(load_location, Array.new(load_varint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node, location)
|
442
442
|
when 120 then
|
443
|
-
|
443
|
+
RestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
|
444
444
|
when 121 then
|
445
|
-
|
445
|
+
RetryNode.new(location)
|
446
446
|
when 122 then
|
447
|
-
|
447
|
+
ReturnNode.new(load_location, load_optional_node, location)
|
448
448
|
when 123 then
|
449
|
-
|
449
|
+
SelfNode.new(location)
|
450
450
|
when 124 then
|
451
|
-
|
451
|
+
SingletonClassNode.new(Array.new(load_varint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location, location)
|
452
452
|
when 125 then
|
453
|
-
|
453
|
+
SourceEncodingNode.new(location)
|
454
454
|
when 126 then
|
455
|
-
|
455
|
+
SourceFileNode.new(load_string, location)
|
456
456
|
when 127 then
|
457
|
-
|
457
|
+
SourceLineNode.new(location)
|
458
458
|
when 128 then
|
459
|
-
|
459
|
+
SplatNode.new(load_location, load_optional_node, location)
|
460
460
|
when 129 then
|
461
|
-
|
461
|
+
StatementsNode.new(Array.new(load_varint) { load_node }, location)
|
462
462
|
when 130 then
|
463
|
-
|
463
|
+
StringConcatNode.new(load_node, load_node, location)
|
464
464
|
when 131 then
|
465
|
-
|
465
|
+
StringNode.new(load_varint, load_optional_location, load_location, load_optional_location, load_string, location)
|
466
466
|
when 132 then
|
467
|
-
|
467
|
+
SuperNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
|
468
468
|
when 133 then
|
469
|
-
|
469
|
+
SymbolNode.new(load_optional_location, load_optional_location, load_optional_location, load_string, location)
|
470
470
|
when 134 then
|
471
|
-
|
471
|
+
TrueNode.new(location)
|
472
472
|
when 135 then
|
473
|
-
|
473
|
+
UndefNode.new(Array.new(load_varint) { load_node }, load_location, location)
|
474
474
|
when 136 then
|
475
|
+
UnlessNode.new(load_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
|
476
|
+
when 137 then
|
477
|
+
UntilNode.new(load_location, load_optional_location, load_node, load_optional_node, load_varint, location)
|
478
|
+
when 138 then
|
479
|
+
WhenNode.new(load_location, Array.new(load_varint) { load_node }, load_optional_node, location)
|
480
|
+
when 139 then
|
481
|
+
WhileNode.new(load_location, load_optional_location, load_node, load_optional_node, load_varint, location)
|
482
|
+
when 140 then
|
483
|
+
XStringNode.new(load_location, load_location, load_location, load_string, location)
|
484
|
+
when 141 then
|
475
485
|
YieldNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, location)
|
476
486
|
end
|
477
487
|
end
|
data/lib/yarp.rb
CHANGED
@@ -307,20 +307,7 @@ module YARP
|
|
307
307
|
end
|
308
308
|
|
309
309
|
def pretty_print(q)
|
310
|
-
q.
|
311
|
-
q.text(self.class.name.split("::").last)
|
312
|
-
location.pretty_print(q)
|
313
|
-
q.text("[Li:#{location.start_line}]") if newline?
|
314
|
-
q.text("(")
|
315
|
-
q.nest(2) do
|
316
|
-
deconstructed = deconstruct_keys([])
|
317
|
-
deconstructed.delete(:location)
|
318
|
-
q.breakable("")
|
319
|
-
q.seplist(deconstructed, lambda { q.comma_breakable }, :each_value) { |value| q.pp(value) }
|
320
|
-
end
|
321
|
-
q.breakable("")
|
322
|
-
q.text(")")
|
323
|
-
end
|
310
|
+
q.text(inspect.chomp)
|
324
311
|
end
|
325
312
|
end
|
326
313
|
|
@@ -389,30 +376,6 @@ module YARP
|
|
389
376
|
end
|
390
377
|
end
|
391
378
|
|
392
|
-
class FloatNode < Node
|
393
|
-
def value
|
394
|
-
Float(slice)
|
395
|
-
end
|
396
|
-
end
|
397
|
-
|
398
|
-
class ImaginaryNode < Node
|
399
|
-
def value
|
400
|
-
Complex(0, numeric.value)
|
401
|
-
end
|
402
|
-
end
|
403
|
-
|
404
|
-
class IntegerNode < Node
|
405
|
-
def value
|
406
|
-
Integer(slice)
|
407
|
-
end
|
408
|
-
end
|
409
|
-
|
410
|
-
class RationalNode < Node
|
411
|
-
def value
|
412
|
-
Rational(slice.chomp("r"))
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
379
|
# Load the serialized AST using the source as a reference into a tree.
|
417
380
|
def self.load(source, serialized)
|
418
381
|
Serialize.load(source, serialized)
|
@@ -477,10 +440,6 @@ module YARP
|
|
477
440
|
# arguments. We get rid of that here.
|
478
441
|
names = names.grep_v(Integer)
|
479
442
|
|
480
|
-
# TODO: We don't support numbered local variables yet, so we get rid
|
481
|
-
# of those here.
|
482
|
-
names = names.grep_v(/^_\d$/)
|
483
|
-
|
484
443
|
# For some reason, CRuby occasionally pushes this special local
|
485
444
|
# variable when there are splat arguments. We get rid of that here.
|
486
445
|
names = names.grep_v(:"#arg_rest")
|
@@ -599,3 +558,59 @@ if RUBY_ENGINE == "ruby" and !ENV["YARP_FFI_BACKEND"]
|
|
599
558
|
else
|
600
559
|
require_relative "yarp/ffi"
|
601
560
|
end
|
561
|
+
|
562
|
+
# Reopening the YARP module after yarp/node is required so that constant
|
563
|
+
# reflection APIs will find the constants defined in the node file before these.
|
564
|
+
# This block is meant to contain extra APIs we define on YARP nodes that aren't
|
565
|
+
# templated and are meant as convenience methods.
|
566
|
+
module YARP
|
567
|
+
class FloatNode < Node
|
568
|
+
# Returns the value of the node as a Ruby Float.
|
569
|
+
def value
|
570
|
+
Float(slice)
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
class ImaginaryNode < Node
|
575
|
+
# Returns the value of the node as a Ruby Complex.
|
576
|
+
def value
|
577
|
+
Complex(0, numeric.value)
|
578
|
+
end
|
579
|
+
end
|
580
|
+
|
581
|
+
class IntegerNode < Node
|
582
|
+
# Returns the value of the node as a Ruby Integer.
|
583
|
+
def value
|
584
|
+
Integer(slice)
|
585
|
+
end
|
586
|
+
end
|
587
|
+
|
588
|
+
class InterpolatedRegularExpressionNode < Node
|
589
|
+
# Returns a numeric value that represents the flags that were used to create
|
590
|
+
# the regular expression.
|
591
|
+
def options
|
592
|
+
o = flags & 0b111
|
593
|
+
o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8)
|
594
|
+
o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
|
595
|
+
o
|
596
|
+
end
|
597
|
+
end
|
598
|
+
|
599
|
+
class RationalNode < Node
|
600
|
+
# Returns the value of the node as a Ruby Rational.
|
601
|
+
def value
|
602
|
+
Rational(slice.chomp("r"))
|
603
|
+
end
|
604
|
+
end
|
605
|
+
|
606
|
+
class RegularExpressionNode < Node
|
607
|
+
# Returns a numeric value that represents the flags that were used to create
|
608
|
+
# the regular expression.
|
609
|
+
def options
|
610
|
+
o = flags & 0b111
|
611
|
+
o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8)
|
612
|
+
o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
|
613
|
+
o
|
614
|
+
end
|
615
|
+
end
|
616
|
+
end
|
data/src/diagnostic.c
CHANGED
@@ -67,6 +67,7 @@ static const char* const diagnostic_messages[YP_DIAGNOSTIC_ID_LEN] = {
|
|
67
67
|
[YP_ERR_ARGUMENT_SPLAT_AFTER_ASSOC_SPLAT] = "Unexpected `*` splat argument after a `**` keyword splat argument",
|
68
68
|
[YP_ERR_ARGUMENT_SPLAT_AFTER_SPLAT] = "Unexpected `*` splat argument after a `*` splat argument",
|
69
69
|
[YP_ERR_ARGUMENT_TERM_PAREN] = "Expected a `)` to close the arguments",
|
70
|
+
[YP_ERR_ARGUMENT_UNEXPECTED_BLOCK] = "Unexpected `{` after a method call without parenthesis",
|
70
71
|
[YP_ERR_ARRAY_ELEMENT] = "Expected an element for the array",
|
71
72
|
[YP_ERR_ARRAY_EXPRESSION] = "Expected an expression for the array element",
|
72
73
|
[YP_ERR_ARRAY_EXPRESSION_AFTER_STAR] = "Expected an expression after `*` in the array",
|
@@ -84,7 +85,7 @@ static const char* const diagnostic_messages[YP_DIAGNOSTIC_ID_LEN] = {
|
|
84
85
|
[YP_ERR_CANNOT_PARSE_STRING_PART] = "Cannot parse the string part",
|
85
86
|
[YP_ERR_CASE_EXPRESSION_AFTER_CASE] = "Expected an expression after `case`",
|
86
87
|
[YP_ERR_CASE_EXPRESSION_AFTER_WHEN] = "Expected an expression after `when`",
|
87
|
-
[
|
88
|
+
[YP_ERR_CASE_MISSING_CONDITIONS] = "Expected a `when` or `in` clause after `case`",
|
88
89
|
[YP_ERR_CASE_TERM] = "Expected an `end` to close the `case` statement",
|
89
90
|
[YP_ERR_CLASS_IN_METHOD] = "Unexpected class definition in a method body",
|
90
91
|
[YP_ERR_CLASS_NAME] = "Expected a constant name after `class`",
|
@@ -163,6 +164,7 @@ static const char* const diagnostic_messages[YP_DIAGNOSTIC_ID_LEN] = {
|
|
163
164
|
[YP_ERR_INVALID_NUMBER_DECIMAL] = "Invalid decimal number",
|
164
165
|
[YP_ERR_INVALID_NUMBER_HEXADECIMAL] = "Invalid hexadecimal number",
|
165
166
|
[YP_ERR_INVALID_NUMBER_OCTAL] = "Invalid octal number",
|
167
|
+
[YP_ERR_INVALID_NUMBER_UNDERSCORE] = "Invalid underscore placement in number",
|
166
168
|
[YP_ERR_INVALID_PERCENT] = "Invalid `%` token", // TODO WHAT?
|
167
169
|
[YP_ERR_INVALID_TOKEN] = "Invalid token", // TODO WHAT?
|
168
170
|
[YP_ERR_INVALID_VARIABLE_GLOBAL] = "Invalid global variable",
|
@@ -184,7 +186,10 @@ static const char* const diagnostic_messages[YP_DIAGNOSTIC_ID_LEN] = {
|
|
184
186
|
[YP_ERR_MULTI_ASSIGN_MULTI_SPLATS] = "Multiple splats in multiple assignment",
|
185
187
|
[YP_ERR_NOT_EXPRESSION] = "Expected an expression after `not`",
|
186
188
|
[YP_ERR_NUMBER_LITERAL_UNDERSCORE] = "Number literal ending with a `_`",
|
189
|
+
[YP_ERR_NUMBERED_PARAMETER_NOT_ALLOWED] = "Numbered parameters are not allowed alongside explicit parameters",
|
190
|
+
[YP_ERR_NUMBERED_PARAMETER_OUTER_SCOPE] = "Numbered parameter is already used in outer scope",
|
187
191
|
[YP_ERR_OPERATOR_MULTI_ASSIGN] = "Unexpected operator for a multiple assignment",
|
192
|
+
[YP_ERR_OPERATOR_WRITE_BLOCK] = "Unexpected operator after a call with a block",
|
188
193
|
[YP_ERR_PARAMETER_ASSOC_SPLAT_MULTI] = "Unexpected multiple `**` splat parameters",
|
189
194
|
[YP_ERR_PARAMETER_BLOCK_MULTI] = "Multiple block parameters; only one block is allowed",
|
190
195
|
[YP_ERR_PARAMETER_NAME_REPEAT] = "Repeated parameter name",
|