opal 0.5.2 → 0.5.4
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/README.md +2 -0
- data/lib/opal.rb +0 -5
- data/lib/opal/compiler.rb +24 -44
- data/lib/opal/nodes/base.rb +5 -8
- data/lib/opal/nodes/call.rb +4 -0
- data/lib/opal/nodes/class.rb +6 -7
- data/lib/opal/nodes/def.rb +4 -4
- data/lib/opal/nodes/definitions.rb +0 -14
- data/lib/opal/nodes/iter.rb +51 -38
- data/lib/opal/nodes/literal.rb +21 -24
- data/lib/opal/nodes/module.rb +4 -4
- data/lib/opal/nodes/runtime_helpers.rb +45 -0
- data/lib/opal/nodes/scope.rb +280 -0
- data/lib/opal/nodes/singleton_class.rb +4 -5
- data/lib/opal/nodes/super.rb +1 -1
- data/lib/opal/nodes/top.rb +9 -7
- data/lib/opal/nodes/yield.rb +14 -3
- data/lib/opal/parser.rb +4 -18
- data/lib/opal/parser/grammar.rb +3745 -3667
- data/lib/opal/parser/grammar.y +1692 -1778
- data/lib/opal/parser/keywords.rb +35 -35
- data/lib/opal/parser/lexer.rb +356 -325
- data/lib/opal/parser/sexp.rb +1 -1
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -0
- data/opal/core/array.rb +320 -81
- data/opal/core/enumerable.rb +46 -5
- data/opal/core/hash.rb +6 -64
- data/opal/core/helpers.rb +67 -0
- data/opal/core/method.rb +1 -1
- data/opal/core/module.rb +4 -4
- data/opal/core/range.rb +1 -12
- data/opal/core/regexp.rb +2 -8
- data/opal/core/runtime.js +74 -3
- data/opal/core/string.rb +99 -74
- data/opal/opal.rb +3 -72
- data/spec/filters/bugs/array.rb +2 -30
- data/spec/filters/bugs/basic_object.rb +0 -1
- data/spec/filters/bugs/string.rb +26 -21
- data/spec/filters/unsupported/enumerator.rb +3 -0
- data/spec/filters/unsupported/float.rb +1 -0
- data/spec/filters/unsupported/immutable_strings.rb +15 -0
- data/spec/filters/unsupported/tainted.rb +58 -30
- data/spec/filters/unsupported/trusted.rb +35 -15
- data/spec/opal/parser/class_spec.rb +4 -4
- data/spec/opal/parser/def_spec.rb +4 -4
- data/spec/opal/parser/lvar_spec.rb +6 -6
- data/spec/opal/parser/module_spec.rb +4 -4
- data/spec/opal/parser/sclass_spec.rb +2 -2
- data/spec/stdlib/native/exposure_spec.rb +33 -0
- data/stdlib/buffer.rb +1 -1
- data/stdlib/buffer/view.rb +1 -1
- data/stdlib/native.rb +193 -174
- data/stdlib/opal-parser.rb +0 -6
- data/stdlib/pp.rb +9 -0
- data/tasks/mspec.rake +3 -1
- metadata +9 -9
- data/lib/opal/nodes/base_scope.rb +0 -11
- data/lib/opal/target_scope.rb +0 -281
- data/spec/filters/20.rb +0 -4
- data/spec/filters/unsupported/array_subclasses.rb +0 -37
data/lib/opal/parser/grammar.y
CHANGED
@@ -1,1790 +1,1704 @@
|
|
1
1
|
class Opal::Parser
|
2
2
|
|
3
|
-
token
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
ARRAY_BEG
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
4
|
+
kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
|
5
|
+
kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER
|
6
|
+
kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD
|
7
|
+
kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
|
8
|
+
k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
|
9
|
+
tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
|
10
|
+
tREGEXP_END tUPLUS tUMINUS '-@NUM' tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
|
11
|
+
tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT
|
12
|
+
tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG
|
13
|
+
ARRAY_BEG tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
|
14
|
+
tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET
|
15
|
+
tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
|
16
|
+
tWORDS_BEG tAWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING
|
17
|
+
tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG
|
18
|
+
tLBRACK2 tLBRACK
|
18
19
|
|
19
20
|
prechigh
|
20
|
-
right
|
21
|
-
right
|
22
|
-
right '-@NUM'
|
23
|
-
left
|
24
|
-
left
|
25
|
-
left
|
26
|
-
left
|
27
|
-
left
|
28
|
-
left
|
29
|
-
nonassoc
|
30
|
-
left
|
31
|
-
left
|
32
|
-
nonassoc
|
33
|
-
right
|
34
|
-
left
|
35
|
-
right
|
36
|
-
nonassoc
|
37
|
-
right
|
38
|
-
left
|
39
|
-
nonassoc
|
21
|
+
right tBANG tTILDE tUPLUS
|
22
|
+
right tPOW
|
23
|
+
right '-@NUM' tUMINUS
|
24
|
+
left tSTAR2 tDIVIDE tPERCENT
|
25
|
+
left tPLUS tMINUS
|
26
|
+
left tLSHFT tRSHFT
|
27
|
+
left tAMPER2
|
28
|
+
left tPIPE tCARET
|
29
|
+
left tGT tGEQ tLT tLEQ
|
30
|
+
nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
|
31
|
+
left tANDOP
|
32
|
+
left tOROP
|
33
|
+
nonassoc tDOT2 tDOT3
|
34
|
+
right tEH tCOLON
|
35
|
+
left kRESCUE_MOD
|
36
|
+
right tEQL tOP_ASGN
|
37
|
+
nonassoc kDEFINED
|
38
|
+
right kNOT
|
39
|
+
left kOR kAND
|
40
|
+
nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD
|
40
41
|
nonassoc tLBRACE_ARG
|
41
|
-
nonassoc
|
42
|
+
nonassoc tLOWEST
|
42
43
|
preclow
|
43
44
|
|
44
45
|
rule
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
arg_value:
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
opt_block_args_tail
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
-
|
1301
|
-
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1328
|
-
|
1329
|
-
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1354
|
-
|
1355
|
-
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
1496
|
-
|
1497
|
-
|
1498
|
-
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
1556
|
-
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1638
|
-
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1670
|
-
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1702
|
-
singleton:
|
1703
|
-
var_ref
|
1704
|
-
{
|
1705
|
-
result = val[0]
|
1706
|
-
}
|
1707
|
-
| '(' expr opt_nl ')'
|
1708
|
-
{
|
1709
|
-
result = val[1]
|
1710
|
-
}
|
1711
|
-
|
1712
|
-
assoc_list:
|
1713
|
-
none
|
1714
|
-
{
|
1715
|
-
result = []
|
1716
|
-
}
|
1717
|
-
| assocs trailer
|
1718
|
-
{
|
1719
|
-
result = val[0]
|
1720
|
-
}
|
1721
|
-
| args trailer
|
1722
|
-
{
|
1723
|
-
raise "unsupported assoc list type (#@line_number)"
|
1724
|
-
}
|
1725
|
-
|
1726
|
-
assocs:
|
1727
|
-
assoc
|
1728
|
-
{
|
1729
|
-
result = val[0]
|
1730
|
-
}
|
1731
|
-
| assocs ',' assoc
|
1732
|
-
{
|
1733
|
-
result = val[0].push *val[2]
|
1734
|
-
}
|
1735
|
-
|
1736
|
-
assoc:
|
1737
|
-
arg_value '=>' arg_value
|
1738
|
-
{
|
1739
|
-
result = [val[0], val[2]]
|
1740
|
-
}
|
1741
|
-
| LABEL arg_value
|
1742
|
-
{
|
1743
|
-
result = [s(:sym, val[0].intern), val[1]]
|
1744
|
-
}
|
1745
|
-
|
1746
|
-
operation:
|
1747
|
-
IDENTIFIER
|
1748
|
-
| CONSTANT
|
1749
|
-
| FID
|
1750
|
-
|
1751
|
-
operation2:
|
1752
|
-
IDENTIFIER
|
1753
|
-
| CONSTANT
|
1754
|
-
| FID
|
1755
|
-
| op
|
1756
|
-
|
1757
|
-
operation3:
|
1758
|
-
IDENTIFIER
|
1759
|
-
| FID
|
1760
|
-
| op
|
1761
|
-
|
1762
|
-
dot_or_colon:
|
1763
|
-
'.'
|
1764
|
-
| '::'
|
1765
|
-
|
1766
|
-
opt_terms:
|
1767
|
-
| terms
|
1768
|
-
|
1769
|
-
opt_nl:
|
1770
|
-
| '\\n'
|
1771
|
-
|
1772
|
-
trailer:
|
1773
|
-
| '\\n'
|
1774
|
-
| ','
|
1775
|
-
|
1776
|
-
term:
|
1777
|
-
';'
|
1778
|
-
| '\\n'
|
1779
|
-
|
1780
|
-
terms:
|
1781
|
-
term
|
1782
|
-
| terms ';'
|
1783
|
-
|
1784
|
-
none:
|
1785
|
-
|
1786
|
-
none_block_pass:
|
1787
|
-
|
47
|
+
program: top_compstmt
|
48
|
+
{
|
49
|
+
result = val[0]
|
50
|
+
}
|
51
|
+
|
52
|
+
top_compstmt: top_stmts opt_terms
|
53
|
+
{
|
54
|
+
comp = new_compstmt val[0]
|
55
|
+
if comp and comp.type == :begin and comp.size == 2
|
56
|
+
result = comp[1]
|
57
|
+
result.line = comp.line
|
58
|
+
else
|
59
|
+
result = comp
|
60
|
+
end
|
61
|
+
}
|
62
|
+
|
63
|
+
top_stmts: # none
|
64
|
+
{
|
65
|
+
result = new_block
|
66
|
+
}
|
67
|
+
| top_stmt
|
68
|
+
{
|
69
|
+
result = new_block val[0]
|
70
|
+
}
|
71
|
+
| top_stmts terms top_stmt
|
72
|
+
{
|
73
|
+
val[0] << val[2]
|
74
|
+
result = val[0]
|
75
|
+
}
|
76
|
+
|
77
|
+
top_stmt: stmt
|
78
|
+
| klBEGIN tLCURLY top_compstmt tRCURLY
|
79
|
+
{
|
80
|
+
result = val[2]
|
81
|
+
}
|
82
|
+
|
83
|
+
bodystmt: compstmt opt_rescue opt_else opt_ensure
|
84
|
+
{
|
85
|
+
result = new_body val[0], val[1], val[2], val[3]
|
86
|
+
}
|
87
|
+
|
88
|
+
compstmt: stmts opt_terms
|
89
|
+
{
|
90
|
+
comp = new_compstmt val[0]
|
91
|
+
if comp and comp.type == :begin and comp.size == 2
|
92
|
+
result = comp[1]
|
93
|
+
result.line = comp.line
|
94
|
+
else
|
95
|
+
result = comp
|
96
|
+
end
|
97
|
+
}
|
98
|
+
|
99
|
+
stmts: # none
|
100
|
+
{
|
101
|
+
result = new_block
|
102
|
+
}
|
103
|
+
| stmt
|
104
|
+
{
|
105
|
+
result = new_block val[0]
|
106
|
+
}
|
107
|
+
| stmts terms stmt
|
108
|
+
{
|
109
|
+
val[0] << val[2]
|
110
|
+
result = val[0]
|
111
|
+
}
|
112
|
+
|
113
|
+
stmt: kALIAS fitem
|
114
|
+
{
|
115
|
+
lexer.lex_state = :expr_fname
|
116
|
+
}
|
117
|
+
fitem
|
118
|
+
{
|
119
|
+
result = s(:alias, val[1], val[3])
|
120
|
+
}
|
121
|
+
| kALIAS tGVAR tGVAR
|
122
|
+
{
|
123
|
+
result = s(:valias, val[1].intern, val[2].intern)
|
124
|
+
}
|
125
|
+
| kALIAS tGVAR tBACK_REF
|
126
|
+
| kALIAS tGVAR tNTH_REF
|
127
|
+
{
|
128
|
+
result = s(:valias, val[1].intern, val[2].intern)
|
129
|
+
}
|
130
|
+
| kUNDEF undef_list
|
131
|
+
{
|
132
|
+
result = val[1]
|
133
|
+
}
|
134
|
+
| stmt kIF_MOD expr_value
|
135
|
+
{
|
136
|
+
result = new_if val[2], val[0], nil
|
137
|
+
}
|
138
|
+
| stmt kUNLESS_MOD expr_value
|
139
|
+
{
|
140
|
+
result = new_if val[2], nil, val[0]
|
141
|
+
}
|
142
|
+
| stmt kWHILE_MOD expr_value
|
143
|
+
{
|
144
|
+
result = s(:while, val[2], val[0], true)
|
145
|
+
}
|
146
|
+
| stmt kUNTIL_MOD expr_value
|
147
|
+
{
|
148
|
+
result = s(:until, val[2], val[0], true)
|
149
|
+
}
|
150
|
+
| stmt kRESCUE_MOD stmt
|
151
|
+
{
|
152
|
+
result = s(:rescue_mod, val[0], val[2])
|
153
|
+
}
|
154
|
+
| klEND tLCURLY compstmt tRCURLY
|
155
|
+
| lhs tEQL command_call
|
156
|
+
{
|
157
|
+
result = new_assign val[0], val[2]
|
158
|
+
}
|
159
|
+
| mlhs tEQL command_call
|
160
|
+
{
|
161
|
+
result = s(:masgn, val[0], s(:to_ary, val[2]))
|
162
|
+
}
|
163
|
+
| var_lhs tOP_ASGN command_call
|
164
|
+
{
|
165
|
+
result = new_op_asgn val[1].intern, val[0], val[2]
|
166
|
+
}
|
167
|
+
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call
|
168
|
+
| primary_value tDOT tIDENTIFIER tOP_ASGN command_call
|
169
|
+
{
|
170
|
+
result = s(:op_asgn2, val[0], "#{val[2]}=".intern, val[3].intern, val[4])
|
171
|
+
}
|
172
|
+
| primary_value tDOT tCONSTANT tOP_ASGN command_call
|
173
|
+
| primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
|
174
|
+
| backref tOP_ASGN command_call
|
175
|
+
| lhs tEQL mrhs
|
176
|
+
{
|
177
|
+
result = new_assign val[0], s(:svalue, val[2])
|
178
|
+
}
|
179
|
+
| mlhs tEQL arg_value
|
180
|
+
{
|
181
|
+
result = s(:masgn, val[0], s(:to_ary, val[2]))
|
182
|
+
}
|
183
|
+
| mlhs tEQL mrhs
|
184
|
+
{
|
185
|
+
result = s(:masgn, val[0], val[2])
|
186
|
+
}
|
187
|
+
| expr
|
188
|
+
|
189
|
+
expr: command_call
|
190
|
+
| expr kAND expr
|
191
|
+
{
|
192
|
+
result = s(:and, val[0], val[2])
|
193
|
+
result.line = val[0].line
|
194
|
+
}
|
195
|
+
| expr kOR expr
|
196
|
+
{
|
197
|
+
result = s(:or, val[0], val[2])
|
198
|
+
result.line = val[0].line
|
199
|
+
}
|
200
|
+
| kNOT expr
|
201
|
+
{
|
202
|
+
result = s(:not, val[1])
|
203
|
+
result.line = val[1].line
|
204
|
+
}
|
205
|
+
| tBANG command_call
|
206
|
+
{
|
207
|
+
result = s(:not, val[1])
|
208
|
+
}
|
209
|
+
| arg
|
210
|
+
|
211
|
+
expr_value: expr
|
212
|
+
|
213
|
+
command_call: command
|
214
|
+
| block_command
|
215
|
+
| kRETURN call_args
|
216
|
+
{
|
217
|
+
args = val[1]
|
218
|
+
args = args[1] if args.size == 2
|
219
|
+
result = s(:return, args)
|
220
|
+
}
|
221
|
+
| kBREAK call_args
|
222
|
+
{
|
223
|
+
args = val[1]
|
224
|
+
args = args[1] if args.size == 2
|
225
|
+
result = s(:break, args)
|
226
|
+
}
|
227
|
+
| kNEXT call_args
|
228
|
+
{
|
229
|
+
args = val[1]
|
230
|
+
args = args[1] if args.size == 2
|
231
|
+
result = s(:next, args)
|
232
|
+
}
|
233
|
+
|
234
|
+
block_command: block_call
|
235
|
+
| block_call tDOT operation2 command_args
|
236
|
+
| block_call tCOLON2 operation2 command_args
|
237
|
+
|
238
|
+
cmd_brace_block: tLBRACE_ARG opt_block_var compstmt tRCURLY
|
239
|
+
|
240
|
+
command: operation command_args =tLOWEST
|
241
|
+
{
|
242
|
+
result = new_call nil, val[0].intern, val[1]
|
243
|
+
}
|
244
|
+
| operation command_args cmd_brace_block
|
245
|
+
| primary_value tDOT operation2 command_args =tLOWEST
|
246
|
+
{
|
247
|
+
result = new_call val[0], val[2].intern, val[3]
|
248
|
+
}
|
249
|
+
| primary_value tDOT operation2 command_args cmd_brace_block
|
250
|
+
| primary_value tCOLON2 operation2 command_args =tLOWEST
|
251
|
+
{
|
252
|
+
result = new_call val[0], val[2].intern, val[3]
|
253
|
+
}
|
254
|
+
| primary_value tCOLON2 operation2 command_args cmd_brace_block
|
255
|
+
| kSUPER command_args
|
256
|
+
{
|
257
|
+
result = new_super val[1]
|
258
|
+
}
|
259
|
+
| kYIELD command_args
|
260
|
+
{
|
261
|
+
result = new_yield val[1]
|
262
|
+
}
|
263
|
+
|
264
|
+
mlhs: mlhs_basic
|
265
|
+
{
|
266
|
+
result = val[0]
|
267
|
+
}
|
268
|
+
| tLPAREN mlhs_entry tRPAREN
|
269
|
+
{
|
270
|
+
result = val[1]
|
271
|
+
}
|
272
|
+
|
273
|
+
mlhs_entry: mlhs_basic
|
274
|
+
{
|
275
|
+
result = val[0]
|
276
|
+
}
|
277
|
+
| tLPAREN mlhs_entry tRPAREN
|
278
|
+
{
|
279
|
+
result = val[1]
|
280
|
+
}
|
281
|
+
|
282
|
+
mlhs_basic: mlhs_head
|
283
|
+
{
|
284
|
+
result = val[0]
|
285
|
+
}
|
286
|
+
| mlhs_head mlhs_item
|
287
|
+
{
|
288
|
+
result = val[0] << val[1]
|
289
|
+
}
|
290
|
+
| mlhs_head tSTAR mlhs_node
|
291
|
+
{
|
292
|
+
result = val[0] << s(:splat, val[2])
|
293
|
+
}
|
294
|
+
| mlhs_head tSTAR mlhs_node tCOMMA mlhs_post
|
295
|
+
| mlhs_head tSTAR
|
296
|
+
{
|
297
|
+
result = val[0] << s(:splat)
|
298
|
+
}
|
299
|
+
| mlhs_head tSTAR tCOMMA mlhs_post
|
300
|
+
| tSTAR mlhs_node
|
301
|
+
{
|
302
|
+
result = s(:array, s(:splat, val[1]))
|
303
|
+
}
|
304
|
+
| tSTAR
|
305
|
+
{
|
306
|
+
result = s(:array, s(:splat))
|
307
|
+
}
|
308
|
+
| tSTAR tCOMMA mlhs_post
|
309
|
+
|
310
|
+
mlhs_item: mlhs_node
|
311
|
+
{
|
312
|
+
result = val[0]
|
313
|
+
}
|
314
|
+
| tLPAREN mlhs_entry tRPAREN
|
315
|
+
{
|
316
|
+
result = val[1]
|
317
|
+
}
|
318
|
+
|
319
|
+
mlhs_head: mlhs_item tCOMMA
|
320
|
+
{
|
321
|
+
result = s(:array, val[0])
|
322
|
+
}
|
323
|
+
| mlhs_head mlhs_item tCOMMA
|
324
|
+
{
|
325
|
+
result = val[0] << val[1]
|
326
|
+
}
|
327
|
+
|
328
|
+
mlhs_post: mlhs_item
|
329
|
+
| mlhs_post tCOMMA mlhs_item
|
330
|
+
|
331
|
+
mlhs_node: variable
|
332
|
+
{
|
333
|
+
result = new_assignable val[0]
|
334
|
+
}
|
335
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
336
|
+
{
|
337
|
+
args = val[2]
|
338
|
+
args.type = :arglist if args.type == :array
|
339
|
+
result = s(:attrasgn, val[0], :[]=, args)
|
340
|
+
}
|
341
|
+
| primary_value tDOT tIDENTIFIER
|
342
|
+
{
|
343
|
+
result = new_call val[0], val[2].intern, s(:arglist)
|
344
|
+
}
|
345
|
+
| primary_value tCOLON2 tIDENTIFIER
|
346
|
+
| primary_value tDOT tCONSTANT
|
347
|
+
| primary_value tCOLON2 tCONSTANT
|
348
|
+
| tCOLON3 tCONSTANT
|
349
|
+
| backref
|
350
|
+
|
351
|
+
lhs: variable
|
352
|
+
{
|
353
|
+
result = new_assignable val[0]
|
354
|
+
}
|
355
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
356
|
+
{
|
357
|
+
args = val[2]
|
358
|
+
args.type = :arglist if args.type == :array
|
359
|
+
result = s(:attrasgn, val[0], :[]=, args)
|
360
|
+
}
|
361
|
+
| primary_value tDOT tIDENTIFIER
|
362
|
+
{
|
363
|
+
result = s(:attrasgn, val[0], "#{val[2]}=".intern, s(:arglist))
|
364
|
+
}
|
365
|
+
| primary_value tCOLON2 tIDENTIFIER
|
366
|
+
{
|
367
|
+
result = s(:attrasgn, val[0], "#{val[2]}=".intern, s(:arglist))
|
368
|
+
}
|
369
|
+
| primary_value tDOT tCONSTANT
|
370
|
+
{
|
371
|
+
result = s(:attrasgn, val[0], "#{val[2]}=".intern, s(:arglist))
|
372
|
+
}
|
373
|
+
| primary_value tCOLON2 tCONSTANT
|
374
|
+
{
|
375
|
+
result = s(:colon2, val[0], val[2].intern)
|
376
|
+
}
|
377
|
+
| tCOLON3 tCONSTANT
|
378
|
+
{
|
379
|
+
result = s(:colon3, val[1].intern)
|
380
|
+
}
|
381
|
+
| backref
|
382
|
+
|
383
|
+
cname: tCONSTANT
|
384
|
+
|
385
|
+
cpath: tCOLON3 cname
|
386
|
+
{
|
387
|
+
result = s(:colon3, val[1].intern)
|
388
|
+
}
|
389
|
+
| cname
|
390
|
+
{
|
391
|
+
result = val[0].intern
|
392
|
+
}
|
393
|
+
| primary_value tCOLON2 cname
|
394
|
+
{
|
395
|
+
result = s(:colon2, val[0], val[2].intern)
|
396
|
+
}
|
397
|
+
|
398
|
+
fname: tIDENTIFIER
|
399
|
+
| tCONSTANT
|
400
|
+
| tFID
|
401
|
+
| op
|
402
|
+
{
|
403
|
+
lexer.lex_state = :expr_end
|
404
|
+
result = val[0]
|
405
|
+
}
|
406
|
+
| reswords
|
407
|
+
{
|
408
|
+
lexer.lex_state = :expr_end
|
409
|
+
result = val[0]
|
410
|
+
}
|
411
|
+
|
412
|
+
fitem: fname
|
413
|
+
{
|
414
|
+
result = s(:sym, val[0].intern)
|
415
|
+
}
|
416
|
+
| symbol
|
417
|
+
|
418
|
+
undef_list: fitem
|
419
|
+
{
|
420
|
+
result = s(:undef, val[0])
|
421
|
+
}
|
422
|
+
| undef_list tCOMMA fitem
|
423
|
+
{
|
424
|
+
result = val[0] << val[2]
|
425
|
+
}
|
426
|
+
|
427
|
+
op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ
|
428
|
+
| tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ
|
429
|
+
| tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
|
430
|
+
| tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE
|
431
|
+
| tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2
|
432
|
+
|
433
|
+
reswords: k__LINE__ | k__FILE__ | klBEGIN | klEND | kALIAS | kAND
|
434
|
+
| kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED
|
435
|
+
| kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE
|
436
|
+
| kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT
|
437
|
+
| kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF
|
438
|
+
| kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD
|
439
|
+
| kIF_MOD | kUNLESS_MOD | kWHILE_MOD | kUNTIL_MOD | kRESCUE_MOD
|
440
|
+
| kIF | kWHILE | kUNTIL | kUNLESS
|
441
|
+
|
442
|
+
arg: lhs tEQL arg
|
443
|
+
{
|
444
|
+
result = new_assign val[0], val[2]
|
445
|
+
}
|
446
|
+
| lhs tEQL arg kRESCUE_MOD arg
|
447
|
+
{
|
448
|
+
result = new_assign val[0], s(:rescue_mod, val[2], val[4])
|
449
|
+
}
|
450
|
+
| var_lhs tOP_ASGN arg
|
451
|
+
{
|
452
|
+
result = new_op_asgn val[1].intern, val[0], val[2]
|
453
|
+
}
|
454
|
+
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg
|
455
|
+
{
|
456
|
+
args = val[2]
|
457
|
+
args.type = :arglist if args.type == :array
|
458
|
+
result = s(:op_asgn1, val[0], val[2], val[4].intern, val[5])
|
459
|
+
result.line = val[0].line
|
460
|
+
}
|
461
|
+
| primary_value tDOT tIDENTIFIER tOP_ASGN arg
|
462
|
+
{
|
463
|
+
result = s(:op_asgn2, val[0], "#{val[2]}=".intern, val[3].intern, val[4])
|
464
|
+
}
|
465
|
+
| primary_value tDOT tCONSTANT tOP_ASGN arg
|
466
|
+
| primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg
|
467
|
+
| primary_value tCOLON2 tCONSTANT tOP_ASGN arg
|
468
|
+
| tCOLON3 tCONSTANT tOP_ASGN arg
|
469
|
+
| backref tOP_ASGN arg
|
470
|
+
| arg tDOT2 arg
|
471
|
+
{
|
472
|
+
result = s(:irange, val[0], val[2])
|
473
|
+
result.line = val[0].line
|
474
|
+
}
|
475
|
+
| arg tDOT3 arg
|
476
|
+
{
|
477
|
+
result = s(:erange, val[0], val[2])
|
478
|
+
result.line = val[0].line
|
479
|
+
}
|
480
|
+
| arg tPLUS arg
|
481
|
+
{
|
482
|
+
result = new_call val[0], :"+", s(:arglist, val[2])
|
483
|
+
}
|
484
|
+
| arg tMINUS arg
|
485
|
+
{
|
486
|
+
result = new_call val[0], :"-", s(:arglist, val[2])
|
487
|
+
}
|
488
|
+
| arg tSTAR2 arg
|
489
|
+
{
|
490
|
+
result = new_call val[0], :"*", s(:arglist, val[2])
|
491
|
+
}
|
492
|
+
| arg tDIVIDE arg
|
493
|
+
{
|
494
|
+
result = new_call val[0], :"/", s(:arglist, val[2])
|
495
|
+
}
|
496
|
+
| arg tPERCENT arg
|
497
|
+
{
|
498
|
+
result = new_call val[0], :"%", s(:arglist, val[2])
|
499
|
+
}
|
500
|
+
| arg tPOW arg
|
501
|
+
{
|
502
|
+
result = new_call val[0], :"**", s(:arglist, val[2])
|
503
|
+
}
|
504
|
+
| '-@NUM' tINTEGER tPOW arg
|
505
|
+
| '-@NUM' tFLOAT tPOW arg
|
506
|
+
| tUPLUS arg
|
507
|
+
{
|
508
|
+
result = new_call val[1], :"+@", s(:arglist)
|
509
|
+
result = val[1] if [:int, :float].include? val[1].type
|
510
|
+
}
|
511
|
+
| tUMINUS arg
|
512
|
+
{
|
513
|
+
result = new_call val[1], :"-@", s(:arglist)
|
514
|
+
if val[1].type == :int
|
515
|
+
val[1][1] = -val[1][1]
|
516
|
+
result = val[1]
|
517
|
+
elsif val[1].type == :float
|
518
|
+
val[1][1] = -val[1][1].to_f
|
519
|
+
result = val[1]
|
520
|
+
end
|
521
|
+
}
|
522
|
+
| arg tPIPE arg
|
523
|
+
{
|
524
|
+
result = new_call val[0], :"|", s(:arglist, val[2])
|
525
|
+
}
|
526
|
+
| arg tCARET arg
|
527
|
+
{
|
528
|
+
result = new_call val[0], :"^", s(:arglist, val[2])
|
529
|
+
}
|
530
|
+
| arg tAMPER2 arg
|
531
|
+
{
|
532
|
+
result = new_call val[0], :"&", s(:arglist, val[2])
|
533
|
+
}
|
534
|
+
| arg tCMP arg
|
535
|
+
{
|
536
|
+
result = new_call val[0], :"<=>", s(:arglist, val[2])
|
537
|
+
}
|
538
|
+
| arg tGT arg
|
539
|
+
{
|
540
|
+
result = new_call val[0], :">", s(:arglist, val[2])
|
541
|
+
}
|
542
|
+
| arg tGEQ arg
|
543
|
+
{
|
544
|
+
result = new_call val[0], :">=", s(:arglist, val[2])
|
545
|
+
}
|
546
|
+
| arg tLT arg
|
547
|
+
{
|
548
|
+
result = new_call val[0], :"<", s(:arglist, val[2])
|
549
|
+
}
|
550
|
+
| arg tLEQ arg
|
551
|
+
{
|
552
|
+
result = new_call val[0], :"<=", s(:arglist, val[2])
|
553
|
+
}
|
554
|
+
| arg tEQ arg
|
555
|
+
{
|
556
|
+
result = new_call val[0], :"==", s(:arglist, val[2])
|
557
|
+
}
|
558
|
+
| arg tEQQ arg
|
559
|
+
{
|
560
|
+
result = new_call val[0], :"===", s(:arglist, val[2])
|
561
|
+
}
|
562
|
+
| arg tNEQ arg
|
563
|
+
{
|
564
|
+
result = s(:not, new_call(val[0], :"==", s(:arglist, val[2])))
|
565
|
+
}
|
566
|
+
| arg tMATCH arg
|
567
|
+
{
|
568
|
+
result = new_call val[0], :"=~", s(:arglist, val[2])
|
569
|
+
}
|
570
|
+
| arg tNMATCH arg
|
571
|
+
{
|
572
|
+
result = s(:not, new_call(val[0], :"=~", s(:arglist, val[2])))
|
573
|
+
}
|
574
|
+
| tBANG arg
|
575
|
+
{
|
576
|
+
result = s(:not, val[1])
|
577
|
+
}
|
578
|
+
| tTILDE arg
|
579
|
+
{
|
580
|
+
result = new_call val[1], :"~", s(:arglist)
|
581
|
+
}
|
582
|
+
| arg tLSHFT arg
|
583
|
+
{
|
584
|
+
result = new_call val[0], :"<<", s(:arglist, val[2])
|
585
|
+
}
|
586
|
+
| arg tRSHFT arg
|
587
|
+
{
|
588
|
+
result = new_call val[0], :">>", s(:arglist, val[2])
|
589
|
+
}
|
590
|
+
| arg tANDOP arg
|
591
|
+
{
|
592
|
+
result = s(:and, val[0], val[2])
|
593
|
+
result.line = val[0].line
|
594
|
+
}
|
595
|
+
| arg tOROP arg
|
596
|
+
{
|
597
|
+
result = s(:or, val[0], val[2])
|
598
|
+
result.line = val[0].line
|
599
|
+
}
|
600
|
+
| kDEFINED opt_nl arg
|
601
|
+
{
|
602
|
+
result = s(:defined, val[2])
|
603
|
+
}
|
604
|
+
| arg tEH arg tCOLON arg
|
605
|
+
{
|
606
|
+
result = s(:if, val[0], val[2], val[4])
|
607
|
+
result.line = val[0].line
|
608
|
+
}
|
609
|
+
| primary
|
610
|
+
|
611
|
+
arg_value: arg
|
612
|
+
|
613
|
+
aref_args: none
|
614
|
+
{
|
615
|
+
result = nil
|
616
|
+
}
|
617
|
+
| command opt_nl
|
618
|
+
{
|
619
|
+
result = s(:array, val[0])
|
620
|
+
}
|
621
|
+
| args trailer
|
622
|
+
{
|
623
|
+
result = val[0]
|
624
|
+
}
|
625
|
+
| args tCOMMA assocs trailer
|
626
|
+
{
|
627
|
+
val[0] << s(:hash, *val[2])
|
628
|
+
result = val[0]
|
629
|
+
}
|
630
|
+
| assocs trailer
|
631
|
+
{
|
632
|
+
result = s(:array, s(:hash, *val[0]))
|
633
|
+
}
|
634
|
+
|
635
|
+
paren_args: tLPAREN2 none tRPAREN
|
636
|
+
{
|
637
|
+
result = nil
|
638
|
+
}
|
639
|
+
| tLPAREN2 call_args opt_nl tRPAREN
|
640
|
+
{
|
641
|
+
result = val[1]
|
642
|
+
}
|
643
|
+
| tLPAREN2 block_call opt_nl tRPAREN
|
644
|
+
| tLPAREN2 args tCOMMA block_call opt_nl tRPAREN
|
645
|
+
|
646
|
+
opt_paren_args: none
|
647
|
+
| paren_args
|
648
|
+
|
649
|
+
call_args: command
|
650
|
+
{
|
651
|
+
result = s(:array, val[0])
|
652
|
+
}
|
653
|
+
| args opt_block_arg
|
654
|
+
{
|
655
|
+
result = val[0]
|
656
|
+
add_block_pass val[0], val[1]
|
657
|
+
}
|
658
|
+
| assocs opt_block_arg
|
659
|
+
{
|
660
|
+
result = s(:arglist, s(:hash, *val[0]))
|
661
|
+
add_block_pass result, val[1]
|
662
|
+
}
|
663
|
+
| args tCOMMA assocs opt_block_arg
|
664
|
+
{
|
665
|
+
result = val[0]
|
666
|
+
result << s(:hash, *val[2])
|
667
|
+
}
|
668
|
+
| block_arg
|
669
|
+
{
|
670
|
+
result = s(:arglist)
|
671
|
+
add_block_pass result, val[0]
|
672
|
+
}
|
673
|
+
|
674
|
+
call_args2: arg_value tCOMMA args opt_block_arg
|
675
|
+
| block_arg
|
676
|
+
|
677
|
+
command_args: {
|
678
|
+
lexer.cmdarg_push 1
|
679
|
+
}
|
680
|
+
open_args
|
681
|
+
{
|
682
|
+
lexer.cmdarg_pop
|
683
|
+
result = val[1]
|
684
|
+
}
|
685
|
+
|
686
|
+
open_args: call_args
|
687
|
+
| tLPAREN_ARG tRPAREN
|
688
|
+
{
|
689
|
+
result = nil
|
690
|
+
}
|
691
|
+
| tLPAREN_ARG call_args2 tRPAREN
|
692
|
+
{
|
693
|
+
result = val[1]
|
694
|
+
}
|
695
|
+
|
696
|
+
block_arg: tAMPER arg_value
|
697
|
+
{
|
698
|
+
result = s(:block_pass, val[1])
|
699
|
+
}
|
700
|
+
|
701
|
+
opt_block_arg: tCOMMA block_arg
|
702
|
+
{
|
703
|
+
result = val[1]
|
704
|
+
}
|
705
|
+
| # none
|
706
|
+
{
|
707
|
+
result = nil
|
708
|
+
}
|
709
|
+
|
710
|
+
args: arg_value
|
711
|
+
{
|
712
|
+
result = s(:array, val[0])
|
713
|
+
}
|
714
|
+
| tSTAR arg_value
|
715
|
+
{
|
716
|
+
result = s(:array, s(:splat, val[1]))
|
717
|
+
}
|
718
|
+
| args tCOMMA arg_value
|
719
|
+
{
|
720
|
+
result = val[0] << val[2]
|
721
|
+
}
|
722
|
+
| args tCOMMA tSTAR arg_value
|
723
|
+
{
|
724
|
+
result = val[0] << s(:splat, val[3])
|
725
|
+
}
|
726
|
+
|
727
|
+
mrhs: args tCOMMA arg_value
|
728
|
+
{
|
729
|
+
val[0] << val[2]
|
730
|
+
result = val[0]
|
731
|
+
}
|
732
|
+
| args tCOMMA tSTAR arg_value
|
733
|
+
| tSTAR arg_value
|
734
|
+
{
|
735
|
+
result = s(:splat, val[1])
|
736
|
+
}
|
737
|
+
|
738
|
+
primary: literal
|
739
|
+
| strings
|
740
|
+
| xstring
|
741
|
+
| regexp
|
742
|
+
| words
|
743
|
+
| awords
|
744
|
+
| var_ref
|
745
|
+
| backref
|
746
|
+
| tFID
|
747
|
+
| kBEGIN
|
748
|
+
{
|
749
|
+
result = lexer.line
|
750
|
+
}
|
751
|
+
bodystmt kEND
|
752
|
+
{
|
753
|
+
result = s(:begin, val[2])
|
754
|
+
result.line = val[1]
|
755
|
+
}
|
756
|
+
| tLPAREN_ARG expr opt_nl tRPAREN
|
757
|
+
{
|
758
|
+
result = val[1]
|
759
|
+
}
|
760
|
+
| tLPAREN compstmt tRPAREN
|
761
|
+
{
|
762
|
+
result = s(:paren, val[1] || s(:nil))
|
763
|
+
}
|
764
|
+
| primary_value tCOLON2 tCONSTANT
|
765
|
+
{
|
766
|
+
result = s(:colon2, val[0], val[2].intern)
|
767
|
+
}
|
768
|
+
| tCOLON3 tCONSTANT
|
769
|
+
{
|
770
|
+
result = s(:colon3, val[1])
|
771
|
+
}
|
772
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
773
|
+
{
|
774
|
+
result = new_call val[0], :[], val[2]
|
775
|
+
}
|
776
|
+
| tLBRACK aref_args tRBRACK
|
777
|
+
{
|
778
|
+
result = val[1] || s(:array)
|
779
|
+
}
|
780
|
+
| '{' assoc_list tRCURLY
|
781
|
+
{
|
782
|
+
result = s(:hash, *val[1])
|
783
|
+
}
|
784
|
+
| kRETURN
|
785
|
+
{
|
786
|
+
result = s(:return)
|
787
|
+
}
|
788
|
+
| kYIELD tLPAREN2 call_args tRPAREN
|
789
|
+
{
|
790
|
+
result = new_yield val[2]
|
791
|
+
}
|
792
|
+
| kYIELD tLPAREN2 tRPAREN
|
793
|
+
{
|
794
|
+
result = s(:yield)
|
795
|
+
}
|
796
|
+
| kYIELD
|
797
|
+
{
|
798
|
+
result = s(:yield)
|
799
|
+
}
|
800
|
+
| kDEFINED opt_nl tLPAREN2 expr tRPAREN
|
801
|
+
{
|
802
|
+
result = s(:defined, val[3])
|
803
|
+
}
|
804
|
+
| kNOT tLPAREN2 expr tRPAREN
|
805
|
+
{
|
806
|
+
result = s(:not, val[2])
|
807
|
+
result.line = val[2].line
|
808
|
+
}
|
809
|
+
| kNOT tLPAREN2 tRPAREN
|
810
|
+
{
|
811
|
+
result = s(:not, s(:nil))
|
812
|
+
}
|
813
|
+
| operation brace_block
|
814
|
+
{
|
815
|
+
result = new_call nil, val[0].intern, s(:arglist)
|
816
|
+
result << val[1]
|
817
|
+
}
|
818
|
+
| method_call
|
819
|
+
| method_call brace_block
|
820
|
+
{
|
821
|
+
val[0] << val[1]
|
822
|
+
result = val[0]
|
823
|
+
}
|
824
|
+
| tLAMBDA lambda
|
825
|
+
{
|
826
|
+
result = val[1]
|
827
|
+
}
|
828
|
+
| kIF expr_value then compstmt if_tail kEND
|
829
|
+
{
|
830
|
+
result = new_if val[1], val[3], val[4]
|
831
|
+
}
|
832
|
+
| kUNLESS expr_value then compstmt opt_else kEND
|
833
|
+
{
|
834
|
+
result = new_if val[1], val[4], val[3]
|
835
|
+
}
|
836
|
+
| kWHILE
|
837
|
+
{
|
838
|
+
lexer.cond_push 1
|
839
|
+
result = lexer.line
|
840
|
+
}
|
841
|
+
expr_value do
|
842
|
+
{
|
843
|
+
lexer.cond_pop
|
844
|
+
}
|
845
|
+
compstmt kEND
|
846
|
+
{
|
847
|
+
result = s(:while, val[2], val[5], true)
|
848
|
+
result.line = val[1]
|
849
|
+
}
|
850
|
+
| kUNTIL
|
851
|
+
{
|
852
|
+
lexer.cond_push 1
|
853
|
+
result = lexer.line
|
854
|
+
}
|
855
|
+
expr_value do
|
856
|
+
{
|
857
|
+
lexer.cond_pop
|
858
|
+
}
|
859
|
+
compstmt kEND
|
860
|
+
{
|
861
|
+
result = s(:until, val[2], val[5], true)
|
862
|
+
result.line = val[1]
|
863
|
+
}
|
864
|
+
| kCASE expr_value opt_terms case_body kEND
|
865
|
+
{
|
866
|
+
result = s(:case, val[1], *val[3])
|
867
|
+
result.line = val[1].line
|
868
|
+
}
|
869
|
+
| kCASE opt_terms case_body kEND
|
870
|
+
{
|
871
|
+
result = s(:case, nil, *val[2])
|
872
|
+
# result.line = val[2].line
|
873
|
+
}
|
874
|
+
| kCASE opt_terms kELSE compstmt kEND
|
875
|
+
{
|
876
|
+
result = s(:case, nil, val[3])
|
877
|
+
# result.line = val[3].line
|
878
|
+
}
|
879
|
+
| kFOR mlhs kIN
|
880
|
+
{
|
881
|
+
# ...
|
882
|
+
}
|
883
|
+
expr_value do
|
884
|
+
{
|
885
|
+
# ...
|
886
|
+
}
|
887
|
+
compstmt kEND
|
888
|
+
| kCLASS
|
889
|
+
{
|
890
|
+
result = lexer.line
|
891
|
+
}
|
892
|
+
cpath superclass
|
893
|
+
{
|
894
|
+
# ...
|
895
|
+
}
|
896
|
+
bodystmt kEND
|
897
|
+
{
|
898
|
+
result = new_class val[2], val[3], val[5]
|
899
|
+
result.line = val[1]
|
900
|
+
result.end_line = lexer.line
|
901
|
+
}
|
902
|
+
| kCLASS tLSHFT
|
903
|
+
{
|
904
|
+
result = lexer.line
|
905
|
+
}
|
906
|
+
expr term
|
907
|
+
{
|
908
|
+
# ...
|
909
|
+
}
|
910
|
+
bodystmt kEND
|
911
|
+
{
|
912
|
+
result = new_sclass val[3], val[6]
|
913
|
+
result.line = val[2]
|
914
|
+
}
|
915
|
+
| kMODULE
|
916
|
+
{
|
917
|
+
result = lexer.line
|
918
|
+
}
|
919
|
+
cpath
|
920
|
+
{
|
921
|
+
# ...
|
922
|
+
}
|
923
|
+
bodystmt kEND
|
924
|
+
{
|
925
|
+
result = new_module val[2], val[4]
|
926
|
+
result.line = val[1]
|
927
|
+
result.end_line = lexer.line
|
928
|
+
}
|
929
|
+
| kDEF fname
|
930
|
+
{
|
931
|
+
result = lexer.scope_line
|
932
|
+
push_scope
|
933
|
+
}
|
934
|
+
f_arglist bodystmt kEND
|
935
|
+
{
|
936
|
+
result = new_def val[2], nil, val[1], val[3], val[4]
|
937
|
+
pop_scope
|
938
|
+
}
|
939
|
+
| kDEF singleton dot_or_colon
|
940
|
+
{
|
941
|
+
lexer.lex_state = :expr_fname
|
942
|
+
}
|
943
|
+
fname
|
944
|
+
{
|
945
|
+
result = lexer.scope_line
|
946
|
+
push_scope
|
947
|
+
}
|
948
|
+
f_arglist bodystmt kEND
|
949
|
+
{
|
950
|
+
result = new_def val[5], val[1], val[4], val[6], val[7]
|
951
|
+
pop_scope
|
952
|
+
}
|
953
|
+
| kBREAK
|
954
|
+
{
|
955
|
+
result = s(:break)
|
956
|
+
}
|
957
|
+
| kNEXT
|
958
|
+
{
|
959
|
+
result = s(:next)
|
960
|
+
}
|
961
|
+
| kREDO
|
962
|
+
{
|
963
|
+
result = s(:redo)
|
964
|
+
}
|
965
|
+
| kRETRY
|
966
|
+
|
967
|
+
primary_value: primary
|
968
|
+
|
969
|
+
then: term
|
970
|
+
| tCOLON
|
971
|
+
| kTHEN
|
972
|
+
| term kTHEN
|
973
|
+
|
974
|
+
do: term
|
975
|
+
| tCOLON
|
976
|
+
| kDO_COND
|
977
|
+
|
978
|
+
lambda: f_larglist lambda_body
|
979
|
+
{
|
980
|
+
result = new_call nil, :lambda, s(:arglist)
|
981
|
+
result << new_iter(val[0], val[1])
|
982
|
+
}
|
983
|
+
|
984
|
+
f_larglist: tLPAREN2 block_param tRPAREN
|
985
|
+
{
|
986
|
+
result = val[1]
|
987
|
+
}
|
988
|
+
| tLPAREN2 tRPAREN
|
989
|
+
{
|
990
|
+
result = nil
|
991
|
+
}
|
992
|
+
| block_param
|
993
|
+
| none
|
994
|
+
|
995
|
+
lambda_body: tLAMBEG compstmt tRCURLY
|
996
|
+
{
|
997
|
+
result = val[1]
|
998
|
+
}
|
999
|
+
| kDO_LAMBDA compstmt kEND
|
1000
|
+
{
|
1001
|
+
result = val[1]
|
1002
|
+
}
|
1003
|
+
|
1004
|
+
if_tail: opt_else
|
1005
|
+
{
|
1006
|
+
result = val[0]
|
1007
|
+
}
|
1008
|
+
| kELSIF
|
1009
|
+
{
|
1010
|
+
result = lexer.line
|
1011
|
+
}
|
1012
|
+
expr_value then compstmt if_tail
|
1013
|
+
{
|
1014
|
+
result = s(:if, val[2], val[4], val[5])
|
1015
|
+
result.line = val[1]
|
1016
|
+
}
|
1017
|
+
|
1018
|
+
opt_else: none
|
1019
|
+
| kELSE compstmt
|
1020
|
+
{
|
1021
|
+
result = val[1]
|
1022
|
+
}
|
1023
|
+
|
1024
|
+
f_block_optarg: f_block_opt
|
1025
|
+
{
|
1026
|
+
result = s(:block, val[0])
|
1027
|
+
}
|
1028
|
+
| f_block_optarg tCOMMA f_block_opt
|
1029
|
+
{
|
1030
|
+
val[0] << val[2]
|
1031
|
+
result = val[0]
|
1032
|
+
}
|
1033
|
+
|
1034
|
+
f_block_opt: tIDENTIFIER tEQL primary_value
|
1035
|
+
{
|
1036
|
+
result = new_assign new_assignable(s(:identifier, val[0].intern)), val[2]
|
1037
|
+
}
|
1038
|
+
|
1039
|
+
opt_block_var: none
|
1040
|
+
| tPIPE tPIPE
|
1041
|
+
{
|
1042
|
+
result = 0
|
1043
|
+
}
|
1044
|
+
| tOROP
|
1045
|
+
{
|
1046
|
+
result = 0
|
1047
|
+
}
|
1048
|
+
| tPIPE block_param tPIPE
|
1049
|
+
{
|
1050
|
+
result = val[1]
|
1051
|
+
}
|
1052
|
+
|
1053
|
+
block_args_tail: f_block_arg
|
1054
|
+
{
|
1055
|
+
result = val[0]
|
1056
|
+
}
|
1057
|
+
|
1058
|
+
opt_block_args_tail: tCOMMA block_args_tail
|
1059
|
+
{
|
1060
|
+
result = val[1]
|
1061
|
+
}
|
1062
|
+
| none
|
1063
|
+
{
|
1064
|
+
nil
|
1065
|
+
}
|
1066
|
+
|
1067
|
+
block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
|
1068
|
+
{
|
1069
|
+
result = new_block_args val[0], val[2], val[4], val[5]
|
1070
|
+
}
|
1071
|
+
| f_arg tCOMMA f_block_optarg opt_block_args_tail
|
1072
|
+
{
|
1073
|
+
result = new_block_args val[0], val[2], nil, val[3]
|
1074
|
+
}
|
1075
|
+
| f_arg tCOMMA f_rest_arg opt_block_args_tail
|
1076
|
+
{
|
1077
|
+
result = new_block_args val[0], nil, val[2], val[3]
|
1078
|
+
}
|
1079
|
+
| f_arg tCOMMA
|
1080
|
+
{
|
1081
|
+
result = new_block_args val[0], nil, nil, nil
|
1082
|
+
}
|
1083
|
+
| f_arg opt_block_args_tail
|
1084
|
+
{
|
1085
|
+
result = new_block_args val[0], nil, nil, val[1]
|
1086
|
+
}
|
1087
|
+
| f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
|
1088
|
+
{
|
1089
|
+
result = new_block_args nil, val[0], val[2], val[3]
|
1090
|
+
}
|
1091
|
+
| f_block_optarg opt_block_args_tail
|
1092
|
+
{
|
1093
|
+
result = new_block_args nil, val[0], nil, val[1]
|
1094
|
+
}
|
1095
|
+
| f_rest_arg opt_block_args_tail
|
1096
|
+
{
|
1097
|
+
result = new_block_args nil, nil, val[0], val[1]
|
1098
|
+
}
|
1099
|
+
| block_args_tail
|
1100
|
+
{
|
1101
|
+
result = new_block_args nil, nil, nil, val[0]
|
1102
|
+
}
|
1103
|
+
|
1104
|
+
do_block: kDO_BLOCK
|
1105
|
+
{
|
1106
|
+
push_scope :block
|
1107
|
+
result = lexer.line
|
1108
|
+
}
|
1109
|
+
opt_block_var compstmt kEND
|
1110
|
+
{
|
1111
|
+
result = new_iter val[2], val[3]
|
1112
|
+
result.line = val[1]
|
1113
|
+
pop_scope
|
1114
|
+
}
|
1115
|
+
|
1116
|
+
block_call: command do_block
|
1117
|
+
{
|
1118
|
+
val[0] << val[1]
|
1119
|
+
result = val[0]
|
1120
|
+
}
|
1121
|
+
| block_call tDOT operation2 opt_paren_args
|
1122
|
+
| block_call tCOLON2 operation2 opt_paren_args
|
1123
|
+
|
1124
|
+
method_call: operation paren_args
|
1125
|
+
{
|
1126
|
+
result = new_call nil, val[0].intern, val[1]
|
1127
|
+
}
|
1128
|
+
| primary_value tDOT operation2 opt_paren_args
|
1129
|
+
{
|
1130
|
+
result = new_call val[0], val[2].intern, val[3]
|
1131
|
+
}
|
1132
|
+
| primary_value tDOT paren_args
|
1133
|
+
{
|
1134
|
+
result = new_call val[0], :call, val[2]
|
1135
|
+
}
|
1136
|
+
| primary_value tCOLON2 operation2 paren_args
|
1137
|
+
{
|
1138
|
+
result = new_call val[0], val[2].intern, val[3]
|
1139
|
+
}
|
1140
|
+
| primary_value tCOLON2 operation3
|
1141
|
+
{
|
1142
|
+
result = new_call val[0], val[2].intern, s(:arglist)
|
1143
|
+
}
|
1144
|
+
| kSUPER paren_args
|
1145
|
+
{
|
1146
|
+
result = new_super val[1]
|
1147
|
+
}
|
1148
|
+
| kSUPER
|
1149
|
+
{
|
1150
|
+
result = s(:super, nil)
|
1151
|
+
}
|
1152
|
+
|
1153
|
+
brace_block: tLCURLY
|
1154
|
+
{
|
1155
|
+
push_scope :block
|
1156
|
+
result = lexer.line
|
1157
|
+
}
|
1158
|
+
opt_block_var compstmt tRCURLY
|
1159
|
+
{
|
1160
|
+
result = new_iter val[2], val[3]
|
1161
|
+
result.line = val[1]
|
1162
|
+
pop_scope
|
1163
|
+
}
|
1164
|
+
| kDO
|
1165
|
+
{
|
1166
|
+
push_scope :block
|
1167
|
+
result = lexer.line
|
1168
|
+
}
|
1169
|
+
opt_block_var compstmt kEND
|
1170
|
+
{
|
1171
|
+
result = new_iter val[2], val[3]
|
1172
|
+
result.line = val[1]
|
1173
|
+
pop_scope
|
1174
|
+
}
|
1175
|
+
|
1176
|
+
case_body: kWHEN
|
1177
|
+
{
|
1178
|
+
result = lexer.line
|
1179
|
+
}
|
1180
|
+
args then compstmt cases
|
1181
|
+
{
|
1182
|
+
part = s(:when, val[2], val[4])
|
1183
|
+
part.line = val[2].line
|
1184
|
+
result = [part]
|
1185
|
+
result.push *val[5] if val[5]
|
1186
|
+
}
|
1187
|
+
|
1188
|
+
cases: opt_else
|
1189
|
+
{
|
1190
|
+
result = [val[0]]
|
1191
|
+
}
|
1192
|
+
| case_body
|
1193
|
+
|
1194
|
+
opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
|
1195
|
+
{
|
1196
|
+
exc = val[1] || s(:array)
|
1197
|
+
exc << new_assign(val[2], s(:gvar, '$!'.intern)) if val[2]
|
1198
|
+
result = [s(:resbody, exc, val[4])]
|
1199
|
+
result.push val[5].first if val[5]
|
1200
|
+
}
|
1201
|
+
| # none
|
1202
|
+
{
|
1203
|
+
result = nil
|
1204
|
+
}
|
1205
|
+
|
1206
|
+
exc_list: arg_value
|
1207
|
+
{
|
1208
|
+
result = s(:array, val[0])
|
1209
|
+
}
|
1210
|
+
| mrhs
|
1211
|
+
| none
|
1212
|
+
|
1213
|
+
exc_var: tASSOC lhs
|
1214
|
+
{
|
1215
|
+
result = val[1]
|
1216
|
+
}
|
1217
|
+
| none
|
1218
|
+
{
|
1219
|
+
result = nil
|
1220
|
+
}
|
1221
|
+
|
1222
|
+
opt_ensure: kENSURE compstmt
|
1223
|
+
{
|
1224
|
+
result = val[1].nil? ? s(:nil) : val[1]
|
1225
|
+
}
|
1226
|
+
| none
|
1227
|
+
|
1228
|
+
literal: numeric
|
1229
|
+
| symbol
|
1230
|
+
| dsym
|
1231
|
+
|
1232
|
+
strings: string
|
1233
|
+
{
|
1234
|
+
result = new_str val[0]
|
1235
|
+
}
|
1236
|
+
|
1237
|
+
string: string1
|
1238
|
+
| string string1
|
1239
|
+
|
1240
|
+
string1: tSTRING_BEG string_contents tSTRING_END
|
1241
|
+
{
|
1242
|
+
result = val[1]
|
1243
|
+
}
|
1244
|
+
| tSTRING
|
1245
|
+
{
|
1246
|
+
result = s(:str, val[0])
|
1247
|
+
}
|
1248
|
+
|
1249
|
+
xstring: tXSTRING_BEG xstring_contents tSTRING_END
|
1250
|
+
{
|
1251
|
+
result = new_xstr val[1]
|
1252
|
+
}
|
1253
|
+
|
1254
|
+
regexp: tREGEXP_BEG xstring_contents tREGEXP_END
|
1255
|
+
{
|
1256
|
+
result = new_regexp val[1], val[2]
|
1257
|
+
}
|
1258
|
+
|
1259
|
+
words: tWORDS_BEG tSPACE tSTRING_END
|
1260
|
+
{
|
1261
|
+
result = s(:array)
|
1262
|
+
}
|
1263
|
+
| tWORDS_BEG word_list tSTRING_END
|
1264
|
+
{
|
1265
|
+
result = val[1]
|
1266
|
+
}
|
1267
|
+
|
1268
|
+
word_list: none
|
1269
|
+
{
|
1270
|
+
result = s(:array)
|
1271
|
+
}
|
1272
|
+
| word_list word tSPACE
|
1273
|
+
{
|
1274
|
+
part = val[1]
|
1275
|
+
part = s(:dstr, "", val[1]) if part.type == :evstr
|
1276
|
+
result = val[0] << part
|
1277
|
+
}
|
1278
|
+
|
1279
|
+
word: string_content
|
1280
|
+
{
|
1281
|
+
result = val[0]
|
1282
|
+
}
|
1283
|
+
| word string_content
|
1284
|
+
{
|
1285
|
+
result = val[0].concat([val[1]])
|
1286
|
+
}
|
1287
|
+
|
1288
|
+
awords: tAWORDS_BEG tSPACE tSTRING_END
|
1289
|
+
{
|
1290
|
+
result = s(:array)
|
1291
|
+
}
|
1292
|
+
| tAWORDS_BEG qword_list tSTRING_END
|
1293
|
+
{
|
1294
|
+
result = val[1]
|
1295
|
+
}
|
1296
|
+
|
1297
|
+
qword_list: none
|
1298
|
+
{
|
1299
|
+
result = s(:array)
|
1300
|
+
}
|
1301
|
+
| qword_list tSTRING_CONTENT tSPACE
|
1302
|
+
{
|
1303
|
+
result = val[0] << s(:str, val[1])
|
1304
|
+
}
|
1305
|
+
|
1306
|
+
string_contents: none
|
1307
|
+
{
|
1308
|
+
result = nil
|
1309
|
+
}
|
1310
|
+
| string_contents string_content
|
1311
|
+
{
|
1312
|
+
result = str_append val[0], val[1]
|
1313
|
+
}
|
1314
|
+
|
1315
|
+
xstring_contents: none
|
1316
|
+
{
|
1317
|
+
result = nil
|
1318
|
+
}
|
1319
|
+
| xstring_contents string_content
|
1320
|
+
{
|
1321
|
+
result = str_append val[0], val[1]
|
1322
|
+
}
|
1323
|
+
|
1324
|
+
string_content: tSTRING_CONTENT
|
1325
|
+
{
|
1326
|
+
result = s(:str, val[0])
|
1327
|
+
}
|
1328
|
+
| tSTRING_DVAR
|
1329
|
+
{
|
1330
|
+
result = lexer.strterm
|
1331
|
+
lexer.strterm = nil
|
1332
|
+
}
|
1333
|
+
string_dvar
|
1334
|
+
{
|
1335
|
+
lexer.strterm = val[1]
|
1336
|
+
result = s(:evstr, val[2])
|
1337
|
+
}
|
1338
|
+
| tSTRING_DBEG
|
1339
|
+
{
|
1340
|
+
lexer.cond_push 0
|
1341
|
+
lexer.cmdarg_push 0
|
1342
|
+
result = lexer.strterm
|
1343
|
+
lexer.strterm = nil
|
1344
|
+
lexer.lex_state = :expr_beg
|
1345
|
+
}
|
1346
|
+
compstmt tRCURLY
|
1347
|
+
{
|
1348
|
+
lexer.strterm = val[1]
|
1349
|
+
lexer.cond_lexpop
|
1350
|
+
lexer.cmdarg_lexpop
|
1351
|
+
result = s(:evstr, val[2])
|
1352
|
+
}
|
1353
|
+
|
1354
|
+
string_dvar: tGVAR
|
1355
|
+
{
|
1356
|
+
result = s(:gvar, val[0].intern)
|
1357
|
+
}
|
1358
|
+
| tIVAR
|
1359
|
+
{
|
1360
|
+
result = s(:ivar, val[0].intern)
|
1361
|
+
}
|
1362
|
+
| tCVAR
|
1363
|
+
{
|
1364
|
+
result = s(:cvar, val[0].intern)
|
1365
|
+
}
|
1366
|
+
| backref
|
1367
|
+
|
1368
|
+
|
1369
|
+
symbol: tSYMBEG sym
|
1370
|
+
{
|
1371
|
+
result = s(:sym, val[1].intern)
|
1372
|
+
lexer.lex_state = :expr_end
|
1373
|
+
}
|
1374
|
+
| tSYMBOL
|
1375
|
+
{
|
1376
|
+
result = s(:sym, val[0].intern)
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
sym: fname
|
1380
|
+
| tIVAR
|
1381
|
+
| tGVAR
|
1382
|
+
| tCVAR
|
1383
|
+
|
1384
|
+
dsym: tSYMBEG xstring_contents tSTRING_END
|
1385
|
+
{
|
1386
|
+
result = new_dsym val[1]
|
1387
|
+
}
|
1388
|
+
|
1389
|
+
numeric: tINTEGER
|
1390
|
+
{
|
1391
|
+
result = s(:int, val[0])
|
1392
|
+
}
|
1393
|
+
| tFLOAT
|
1394
|
+
{
|
1395
|
+
result = s(:float, val[0])
|
1396
|
+
}
|
1397
|
+
| '-@NUM' tINTEGER =tLOWEST
|
1398
|
+
| '-@NUM' tFLOAT =tLOWEST
|
1399
|
+
|
1400
|
+
variable: tIDENTIFIER
|
1401
|
+
{
|
1402
|
+
result = s(:identifier, val[0].intern)
|
1403
|
+
}
|
1404
|
+
| tIVAR
|
1405
|
+
{
|
1406
|
+
result = s(:ivar, val[0].intern)
|
1407
|
+
}
|
1408
|
+
| tGVAR
|
1409
|
+
{
|
1410
|
+
result = s(:gvar, val[0].intern)
|
1411
|
+
}
|
1412
|
+
| tCONSTANT
|
1413
|
+
{
|
1414
|
+
result = s(:const, val[0].intern)
|
1415
|
+
}
|
1416
|
+
| tCVAR
|
1417
|
+
{
|
1418
|
+
result = s(:cvar, val[0].intern)
|
1419
|
+
}
|
1420
|
+
| kNIL
|
1421
|
+
{
|
1422
|
+
result = s(:nil)
|
1423
|
+
}
|
1424
|
+
| kSELF
|
1425
|
+
{
|
1426
|
+
result = s(:self)
|
1427
|
+
}
|
1428
|
+
| kTRUE
|
1429
|
+
{
|
1430
|
+
result = s(:true)
|
1431
|
+
}
|
1432
|
+
| kFALSE
|
1433
|
+
{
|
1434
|
+
result = s(:false)
|
1435
|
+
}
|
1436
|
+
| k__FILE__
|
1437
|
+
{
|
1438
|
+
result = s(:str, self.file)
|
1439
|
+
}
|
1440
|
+
| k__LINE__
|
1441
|
+
{
|
1442
|
+
result = s(:int, lexer.line)
|
1443
|
+
}
|
1444
|
+
|
1445
|
+
var_ref: variable
|
1446
|
+
{
|
1447
|
+
result = new_var_ref val[0]
|
1448
|
+
}
|
1449
|
+
|
1450
|
+
var_lhs: variable
|
1451
|
+
{
|
1452
|
+
result = new_assignable val[0]
|
1453
|
+
}
|
1454
|
+
|
1455
|
+
backref: tNTH_REF
|
1456
|
+
{
|
1457
|
+
result = s(:nth_ref, val[0])
|
1458
|
+
}
|
1459
|
+
| tBACK_REF
|
1460
|
+
|
1461
|
+
superclass: term
|
1462
|
+
{
|
1463
|
+
result = nil
|
1464
|
+
}
|
1465
|
+
| tLT expr_value term
|
1466
|
+
{
|
1467
|
+
result = val[1]
|
1468
|
+
}
|
1469
|
+
| error term
|
1470
|
+
{
|
1471
|
+
result = nil
|
1472
|
+
}
|
1473
|
+
|
1474
|
+
f_arglist: tLPAREN2 f_args opt_nl tRPAREN
|
1475
|
+
{
|
1476
|
+
result = val[1]
|
1477
|
+
lexer.lex_state = :expr_beg
|
1478
|
+
}
|
1479
|
+
| f_args term
|
1480
|
+
{
|
1481
|
+
result = val[0]
|
1482
|
+
}
|
1483
|
+
|
1484
|
+
f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1485
|
+
{
|
1486
|
+
result = new_args val[0], val[2], val[4], val[5]
|
1487
|
+
}
|
1488
|
+
| f_arg tCOMMA f_optarg opt_f_block_arg
|
1489
|
+
{
|
1490
|
+
result = new_args val[0], val[2], nil, val[3]
|
1491
|
+
}
|
1492
|
+
| f_arg tCOMMA f_rest_arg opt_f_block_arg
|
1493
|
+
{
|
1494
|
+
result = new_args val[0], nil, val[2], val[3]
|
1495
|
+
}
|
1496
|
+
| f_arg opt_f_block_arg
|
1497
|
+
{
|
1498
|
+
result = new_args val[0], nil, nil, val[1]
|
1499
|
+
}
|
1500
|
+
| f_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1501
|
+
{
|
1502
|
+
result = new_args nil, val[0], val[2], val[3]
|
1503
|
+
}
|
1504
|
+
| f_optarg opt_f_block_arg
|
1505
|
+
{
|
1506
|
+
result = new_args nil, val[0], nil, val[1]
|
1507
|
+
}
|
1508
|
+
| f_rest_arg opt_f_block_arg
|
1509
|
+
{
|
1510
|
+
result = new_args nil, nil, val[0], val[1]
|
1511
|
+
}
|
1512
|
+
| f_block_arg
|
1513
|
+
{
|
1514
|
+
result = new_args nil, nil, nil, val[0]
|
1515
|
+
}
|
1516
|
+
| # none
|
1517
|
+
{
|
1518
|
+
result = s(:args)
|
1519
|
+
}
|
1520
|
+
|
1521
|
+
f_norm_arg: f_bad_arg
|
1522
|
+
| tIDENTIFIER
|
1523
|
+
{
|
1524
|
+
result = val[0].intern
|
1525
|
+
scope.add_local result
|
1526
|
+
}
|
1527
|
+
|
1528
|
+
f_bad_arg: tCONSTANT
|
1529
|
+
{
|
1530
|
+
raise 'formal argument cannot be a constant'
|
1531
|
+
}
|
1532
|
+
| tIVAR
|
1533
|
+
{
|
1534
|
+
raise 'formal argument cannot be an instance variable'
|
1535
|
+
}
|
1536
|
+
| tCVAR
|
1537
|
+
{
|
1538
|
+
raise 'formal argument cannot be a class variable'
|
1539
|
+
}
|
1540
|
+
| tGVAR
|
1541
|
+
{
|
1542
|
+
raise 'formal argument cannot be a global variable'
|
1543
|
+
}
|
1544
|
+
|
1545
|
+
f_arg_item: f_norm_arg
|
1546
|
+
{
|
1547
|
+
result = val[0]
|
1548
|
+
}
|
1549
|
+
| tLPAREN f_margs tRPAREN
|
1550
|
+
{
|
1551
|
+
result = val[1]
|
1552
|
+
}
|
1553
|
+
|
1554
|
+
f_marg: f_norm_arg
|
1555
|
+
{
|
1556
|
+
result = s(:lasgn, val[0])
|
1557
|
+
}
|
1558
|
+
| tLPAREN f_margs tRPAREN
|
1559
|
+
|
1560
|
+
f_marg_list: f_marg
|
1561
|
+
{
|
1562
|
+
result = s(:array, val[0])
|
1563
|
+
}
|
1564
|
+
| f_marg_list tCOMMA f_marg
|
1565
|
+
{
|
1566
|
+
val[0] << val[2]
|
1567
|
+
result = val[0]
|
1568
|
+
}
|
1569
|
+
|
1570
|
+
f_margs: f_marg_list
|
1571
|
+
| f_marg_list tCOMMA tSTAR f_norm_arg
|
1572
|
+
| f_marg_list tCOMMA tSTAR
|
1573
|
+
| tSTAR f_norm_arg
|
1574
|
+
| tSTAR
|
1575
|
+
|
1576
|
+
f_arg: f_arg_item
|
1577
|
+
{
|
1578
|
+
result = [val[0]]
|
1579
|
+
}
|
1580
|
+
| f_arg tCOMMA f_arg_item
|
1581
|
+
{
|
1582
|
+
val[0] << val[2]
|
1583
|
+
result = val[0]
|
1584
|
+
}
|
1585
|
+
|
1586
|
+
f_opt: tIDENTIFIER tEQL arg_value
|
1587
|
+
{
|
1588
|
+
result = new_assign new_assignable(s(:identifier, val[0].intern)), val[2]
|
1589
|
+
}
|
1590
|
+
|
1591
|
+
f_optarg: f_opt
|
1592
|
+
{
|
1593
|
+
result = s(:block, val[0])
|
1594
|
+
}
|
1595
|
+
| f_optarg tCOMMA f_opt
|
1596
|
+
{
|
1597
|
+
result = val[0]
|
1598
|
+
val[0] << val[2]
|
1599
|
+
}
|
1600
|
+
|
1601
|
+
restarg_mark: tSTAR2
|
1602
|
+
| tSTAR
|
1603
|
+
|
1604
|
+
f_rest_arg: restarg_mark tIDENTIFIER
|
1605
|
+
{
|
1606
|
+
result = "*#{val[1]}".intern
|
1607
|
+
}
|
1608
|
+
| restarg_mark
|
1609
|
+
{
|
1610
|
+
result = :"*"
|
1611
|
+
}
|
1612
|
+
|
1613
|
+
blkarg_mark: tAMPER2
|
1614
|
+
| tAMPER
|
1615
|
+
|
1616
|
+
f_block_arg: blkarg_mark tIDENTIFIER
|
1617
|
+
{
|
1618
|
+
result = "&#{val[1]}".intern
|
1619
|
+
}
|
1620
|
+
|
1621
|
+
opt_f_block_arg: tCOMMA f_block_arg
|
1622
|
+
{
|
1623
|
+
result = val[1]
|
1624
|
+
}
|
1625
|
+
| # none
|
1626
|
+
{
|
1627
|
+
result = nil
|
1628
|
+
}
|
1629
|
+
|
1630
|
+
singleton: var_ref
|
1631
|
+
{
|
1632
|
+
result = val[0]
|
1633
|
+
}
|
1634
|
+
| tLPAREN2 expr opt_nl tRPAREN
|
1635
|
+
{
|
1636
|
+
result = val[1]
|
1637
|
+
}
|
1638
|
+
|
1639
|
+
assoc_list: # none
|
1640
|
+
{
|
1641
|
+
result = []
|
1642
|
+
}
|
1643
|
+
| assocs trailer
|
1644
|
+
{
|
1645
|
+
result = val[0]
|
1646
|
+
}
|
1647
|
+
|
1648
|
+
assocs: assoc
|
1649
|
+
{
|
1650
|
+
result = val[0]
|
1651
|
+
}
|
1652
|
+
| assocs tCOMMA assoc
|
1653
|
+
{
|
1654
|
+
result = val[0].push *val[2]
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
assoc: arg_value tASSOC arg_value
|
1658
|
+
{
|
1659
|
+
result = [val[0], val[2]]
|
1660
|
+
}
|
1661
|
+
| tLABEL arg_value
|
1662
|
+
{
|
1663
|
+
result = [s(:sym, val[0].intern), val[1]]
|
1664
|
+
}
|
1665
|
+
|
1666
|
+
operation: tIDENTIFIER
|
1667
|
+
| tCONSTANT
|
1668
|
+
| tFID
|
1669
|
+
|
1670
|
+
operation2: tIDENTIFIER
|
1671
|
+
| tCONSTANT
|
1672
|
+
| tFID
|
1673
|
+
| op
|
1674
|
+
|
1675
|
+
operation3: tIDENTIFIER
|
1676
|
+
| tFID
|
1677
|
+
| op
|
1678
|
+
|
1679
|
+
dot_or_colon: tDOT
|
1680
|
+
| tCOLON2
|
1681
|
+
|
1682
|
+
opt_terms: # none
|
1683
|
+
| terms
|
1684
|
+
|
1685
|
+
opt_nl: # none
|
1686
|
+
| tNL
|
1687
|
+
|
1688
|
+
trailer: # none
|
1689
|
+
| tNL
|
1690
|
+
| tCOMMA
|
1691
|
+
|
1692
|
+
term: tSEMI
|
1693
|
+
| tNL
|
1694
|
+
|
1695
|
+
terms: term
|
1696
|
+
| terms tSEMI
|
1697
|
+
|
1698
|
+
none: # none
|
1699
|
+
{
|
1700
|
+
result = nil
|
1701
|
+
}
|
1788
1702
|
end
|
1789
1703
|
|
1790
1704
|
---- inner
|