ruby_parser 2.0.5 → 3.0.0.a1
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.
- data/.autotest +4 -4
- data/.gemtest +0 -0
- data/History.txt +124 -0
- data/Manifest.txt +6 -1
- data/README.txt +7 -6
- data/Rakefile +74 -27
- data/bin/ruby_parse +9 -1
- data/bin/ruby_parse_extract_error +75 -0
- data/lib/ruby18_parser.rb +5737 -0
- data/lib/{ruby_parser.y → ruby18_parser.y} +197 -124
- data/lib/ruby19_parser.rb +6147 -0
- data/lib/ruby19_parser.y +2014 -0
- data/lib/ruby_lexer.rb +146 -47
- data/lib/ruby_parser.rb +3 -5544
- data/lib/ruby_parser_extras.rb +392 -244
- data/test/test_ruby_lexer.rb +99 -15
- data/test/test_ruby_parser.rb +395 -130
- data/test/test_ruby_parser_extras.rb +10 -6
- data.tar.gz.sig +0 -0
- metadata +45 -39
- metadata.gz.sig +3 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- racc -*-
|
|
2
2
|
|
|
3
|
-
class
|
|
3
|
+
class Ruby18Parser
|
|
4
4
|
|
|
5
5
|
token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
6
6
|
kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
|
|
@@ -12,10 +12,10 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
|
12
12
|
tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
|
|
13
13
|
tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT
|
|
14
14
|
tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG
|
|
15
|
-
tLBRACK tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
|
|
15
|
+
tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
|
|
16
16
|
tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET
|
|
17
17
|
tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
|
|
18
|
-
tWORDS_BEG
|
|
18
|
+
tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING
|
|
19
19
|
tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN
|
|
20
20
|
|
|
21
21
|
prechigh
|
|
@@ -67,7 +67,7 @@ rule
|
|
|
67
67
|
| stmt
|
|
68
68
|
| stmts terms stmt
|
|
69
69
|
{
|
|
70
|
-
result =
|
|
70
|
+
result = block_append val[0], val[2]
|
|
71
71
|
}
|
|
72
72
|
| error stmt
|
|
73
73
|
{
|
|
@@ -117,11 +117,11 @@ rule
|
|
|
117
117
|
}
|
|
118
118
|
| stmt kRESCUE_MOD stmt
|
|
119
119
|
{
|
|
120
|
-
result = s(:rescue, val[0],
|
|
120
|
+
result = s(:rescue, val[0], new_resbody(s(:array), val[2]))
|
|
121
121
|
}
|
|
122
122
|
| klBEGIN
|
|
123
123
|
{
|
|
124
|
-
if (
|
|
124
|
+
if (in_def || in_single > 0) then
|
|
125
125
|
yyerror "BEGIN in method"
|
|
126
126
|
end
|
|
127
127
|
self.env.extend
|
|
@@ -133,14 +133,14 @@ rule
|
|
|
133
133
|
}
|
|
134
134
|
| klEND tLCURLY compstmt tRCURLY
|
|
135
135
|
{
|
|
136
|
-
if (
|
|
136
|
+
if (in_def || in_single > 0) then
|
|
137
137
|
yyerror "END in method; use at_exit"
|
|
138
138
|
end
|
|
139
139
|
result = new_iter s(:postexe), nil, val[2]
|
|
140
140
|
}
|
|
141
141
|
| lhs tEQL command_call
|
|
142
142
|
{
|
|
143
|
-
result =
|
|
143
|
+
result = node_assign val[0], val[2]
|
|
144
144
|
}
|
|
145
145
|
| mlhs tEQL command_call
|
|
146
146
|
{
|
|
@@ -150,7 +150,7 @@ rule
|
|
|
150
150
|
{
|
|
151
151
|
result = new_op_asgn val
|
|
152
152
|
}
|
|
153
|
-
| primary_value
|
|
153
|
+
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call
|
|
154
154
|
{
|
|
155
155
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
|
156
156
|
}
|
|
@@ -168,11 +168,11 @@ rule
|
|
|
168
168
|
}
|
|
169
169
|
| backref tOP_ASGN command_call
|
|
170
170
|
{
|
|
171
|
-
|
|
171
|
+
backref_assign_error val[0]
|
|
172
172
|
}
|
|
173
173
|
| lhs tEQL mrhs
|
|
174
174
|
{
|
|
175
|
-
result =
|
|
175
|
+
result = node_assign val[0], s(:svalue, val[2])
|
|
176
176
|
}
|
|
177
177
|
| mlhs tEQL arg_value
|
|
178
178
|
{
|
|
@@ -212,15 +212,18 @@ rule
|
|
|
212
212
|
| block_command
|
|
213
213
|
| kRETURN call_args
|
|
214
214
|
{
|
|
215
|
-
|
|
215
|
+
line = val[0].last
|
|
216
|
+
result = s(:return, ret_args(val[1])).line(line)
|
|
216
217
|
}
|
|
217
218
|
| kBREAK call_args
|
|
218
219
|
{
|
|
219
|
-
|
|
220
|
+
line = val[0].last
|
|
221
|
+
result = s(:break, ret_args(val[1])).line(line)
|
|
220
222
|
}
|
|
221
223
|
| kNEXT call_args
|
|
222
224
|
{
|
|
223
|
-
|
|
225
|
+
line = val[0].last
|
|
226
|
+
result = s(:next, ret_args(val[1])).line(line)
|
|
224
227
|
}
|
|
225
228
|
|
|
226
229
|
block_command: block_call
|
|
@@ -349,27 +352,27 @@ rule
|
|
|
349
352
|
|
|
350
353
|
mlhs_node: variable
|
|
351
354
|
{
|
|
352
|
-
result =
|
|
355
|
+
result = assignable val[0]
|
|
353
356
|
}
|
|
354
|
-
| primary_value
|
|
357
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
|
355
358
|
{
|
|
356
|
-
result =
|
|
359
|
+
result = aryset val[0], val[2]
|
|
357
360
|
}
|
|
358
361
|
| primary_value tDOT tIDENTIFIER
|
|
359
362
|
{
|
|
360
|
-
result = s(:attrasgn, val[0], :"#{val[2]}="
|
|
363
|
+
result = s(:attrasgn, val[0], :"#{val[2]}=")
|
|
361
364
|
}
|
|
362
365
|
| primary_value tCOLON2 tIDENTIFIER
|
|
363
366
|
{
|
|
364
|
-
result = s(:attrasgn, val[0], :"#{val[2]}="
|
|
367
|
+
result = s(:attrasgn, val[0], :"#{val[2]}=")
|
|
365
368
|
}
|
|
366
369
|
| primary_value tDOT tCONSTANT
|
|
367
370
|
{
|
|
368
|
-
result = s(:attrasgn, val[0], :"#{val[2]}="
|
|
371
|
+
result = s(:attrasgn, val[0], :"#{val[2]}=")
|
|
369
372
|
}
|
|
370
373
|
| primary_value tCOLON2 tCONSTANT
|
|
371
374
|
{
|
|
372
|
-
if (
|
|
375
|
+
if (in_def || in_single > 0) then
|
|
373
376
|
yyerror "dynamic constant assignment"
|
|
374
377
|
end
|
|
375
378
|
|
|
@@ -377,7 +380,7 @@ rule
|
|
|
377
380
|
}
|
|
378
381
|
| tCOLON3 tCONSTANT
|
|
379
382
|
{
|
|
380
|
-
if (
|
|
383
|
+
if (in_def || in_single > 0) then
|
|
381
384
|
yyerror "dynamic constant assignment"
|
|
382
385
|
end
|
|
383
386
|
|
|
@@ -385,16 +388,16 @@ rule
|
|
|
385
388
|
}
|
|
386
389
|
| backref
|
|
387
390
|
{
|
|
388
|
-
|
|
391
|
+
backref_assign_error val[0]
|
|
389
392
|
}
|
|
390
393
|
|
|
391
394
|
lhs: variable
|
|
392
395
|
{
|
|
393
|
-
result =
|
|
396
|
+
result = assignable val[0]
|
|
394
397
|
}
|
|
395
|
-
| primary_value
|
|
398
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
|
396
399
|
{
|
|
397
|
-
result =
|
|
400
|
+
result = aryset val[0], val[2]
|
|
398
401
|
}
|
|
399
402
|
| primary_value tDOT tIDENTIFIER
|
|
400
403
|
{
|
|
@@ -410,7 +413,7 @@ rule
|
|
|
410
413
|
}
|
|
411
414
|
| primary_value tCOLON2 tCONSTANT
|
|
412
415
|
{
|
|
413
|
-
if (
|
|
416
|
+
if (in_def || in_single > 0) then
|
|
414
417
|
yyerror "dynamic constant assignment"
|
|
415
418
|
end
|
|
416
419
|
|
|
@@ -418,7 +421,7 @@ rule
|
|
|
418
421
|
}
|
|
419
422
|
| tCOLON3 tCONSTANT
|
|
420
423
|
{
|
|
421
|
-
if (
|
|
424
|
+
if (in_def || in_single > 0) then
|
|
422
425
|
yyerror "dynamic constant assignment"
|
|
423
426
|
end
|
|
424
427
|
|
|
@@ -426,7 +429,7 @@ rule
|
|
|
426
429
|
}
|
|
427
430
|
| backref
|
|
428
431
|
{
|
|
429
|
-
|
|
432
|
+
backref_assign_error val[0]
|
|
430
433
|
}
|
|
431
434
|
|
|
432
435
|
cname: tIDENTIFIER
|
|
@@ -461,9 +464,10 @@ rule
|
|
|
461
464
|
result = val[0]
|
|
462
465
|
}
|
|
463
466
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
+
fsym: fname | symbol
|
|
468
|
+
|
|
469
|
+
fitem: fsym { result = s(:lit, val[0].to_sym) }
|
|
470
|
+
| dsym
|
|
467
471
|
|
|
468
472
|
undef_list: fitem
|
|
469
473
|
{
|
|
@@ -491,22 +495,22 @@ rule
|
|
|
491
495
|
| kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT
|
|
492
496
|
| kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF
|
|
493
497
|
| kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD
|
|
494
|
-
|
|
|
498
|
+
| kIF | kUNLESS | kWHILE | kUNTIL
|
|
495
499
|
|
|
496
500
|
arg: lhs tEQL arg
|
|
497
501
|
{
|
|
498
|
-
result =
|
|
502
|
+
result = node_assign val[0], val[2]
|
|
499
503
|
}
|
|
500
504
|
| lhs tEQL arg kRESCUE_MOD arg
|
|
501
505
|
{
|
|
502
|
-
result =
|
|
506
|
+
result = node_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4]))
|
|
503
507
|
# result.line = val[0].line
|
|
504
508
|
}
|
|
505
509
|
| var_lhs tOP_ASGN arg
|
|
506
510
|
{
|
|
507
511
|
result = new_op_asgn val
|
|
508
512
|
}
|
|
509
|
-
| primary_value
|
|
513
|
+
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg
|
|
510
514
|
{
|
|
511
515
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
|
512
516
|
val[2][0] = :arglist
|
|
@@ -534,7 +538,7 @@ rule
|
|
|
534
538
|
}
|
|
535
539
|
| backref tOP_ASGN arg
|
|
536
540
|
{
|
|
537
|
-
|
|
541
|
+
backref_assign_error val[0]
|
|
538
542
|
}
|
|
539
543
|
| arg tDOT2 arg
|
|
540
544
|
{
|
|
@@ -556,101 +560,101 @@ rule
|
|
|
556
560
|
}
|
|
557
561
|
| arg tPLUS arg
|
|
558
562
|
{
|
|
559
|
-
result = new_call val[0], :+,
|
|
563
|
+
result = new_call val[0], :+, argl(val[2])
|
|
560
564
|
}
|
|
561
565
|
| arg tMINUS arg
|
|
562
566
|
{
|
|
563
|
-
result = new_call val[0], :-,
|
|
567
|
+
result = new_call val[0], :-, argl(val[2])
|
|
564
568
|
}
|
|
565
569
|
| arg tSTAR2 arg
|
|
566
570
|
{
|
|
567
|
-
result = new_call val[0], :*,
|
|
571
|
+
result = new_call val[0], :*, argl(val[2])
|
|
568
572
|
}
|
|
569
573
|
| arg tDIVIDE arg
|
|
570
574
|
{
|
|
571
|
-
result = new_call val[0], :"/",
|
|
575
|
+
result = new_call val[0], :"/", argl(val[2])
|
|
572
576
|
}
|
|
573
577
|
| arg tPERCENT arg
|
|
574
578
|
{
|
|
575
|
-
result = new_call val[0],
|
|
579
|
+
result = new_call val[0], :"%", argl(val[2])
|
|
576
580
|
}
|
|
577
581
|
| arg tPOW arg
|
|
578
582
|
{
|
|
579
|
-
result = new_call val[0], :**,
|
|
583
|
+
result = new_call val[0], :**, argl(val[2])
|
|
580
584
|
}
|
|
581
585
|
| tUMINUS_NUM tINTEGER tPOW arg
|
|
582
586
|
{
|
|
583
|
-
result = new_call(new_call(s(:lit, val[1]), :"**",
|
|
587
|
+
result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@")
|
|
584
588
|
}
|
|
585
589
|
| tUMINUS_NUM tFLOAT tPOW arg
|
|
586
590
|
{
|
|
587
|
-
result = new_call(new_call(s(:lit, val[1]), :"**",
|
|
591
|
+
result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@")
|
|
588
592
|
}
|
|
589
593
|
| tUPLUS arg
|
|
590
594
|
{
|
|
591
595
|
if val[1][0] == :lit then
|
|
592
596
|
result = val[1]
|
|
593
597
|
else
|
|
594
|
-
result = new_call val[1], :"+@"
|
|
598
|
+
result = new_call val[1], :"+@"
|
|
595
599
|
end
|
|
596
600
|
}
|
|
597
601
|
| tUMINUS arg
|
|
598
602
|
{
|
|
599
|
-
result = new_call val[1], :"-@"
|
|
603
|
+
result = new_call val[1], :"-@"
|
|
600
604
|
}
|
|
601
605
|
| arg tPIPE arg
|
|
602
606
|
{
|
|
603
|
-
result = new_call val[0], :"|",
|
|
607
|
+
result = new_call val[0], :"|", argl(val[2])
|
|
604
608
|
}
|
|
605
609
|
| arg tCARET arg
|
|
606
610
|
{
|
|
607
|
-
result = new_call val[0], :"^",
|
|
611
|
+
result = new_call val[0], :"^", argl(val[2])
|
|
608
612
|
}
|
|
609
613
|
| arg tAMPER2 arg
|
|
610
614
|
{
|
|
611
|
-
result = new_call val[0], :"&",
|
|
615
|
+
result = new_call val[0], :"&", argl(val[2])
|
|
612
616
|
}
|
|
613
617
|
| arg tCMP arg
|
|
614
618
|
{
|
|
615
|
-
result = new_call val[0], :"<=>",
|
|
619
|
+
result = new_call val[0], :"<=>", argl(val[2])
|
|
616
620
|
}
|
|
617
621
|
| arg tGT arg
|
|
618
622
|
{
|
|
619
|
-
result = new_call val[0], :">",
|
|
623
|
+
result = new_call val[0], :">", argl(val[2])
|
|
620
624
|
}
|
|
621
625
|
| arg tGEQ arg
|
|
622
626
|
{
|
|
623
|
-
result = new_call val[0], :">=",
|
|
627
|
+
result = new_call val[0], :">=", argl(val[2])
|
|
624
628
|
}
|
|
625
629
|
| arg tLT arg
|
|
626
630
|
{
|
|
627
|
-
result = new_call val[0], :"<",
|
|
631
|
+
result = new_call val[0], :"<", argl(val[2])
|
|
628
632
|
}
|
|
629
633
|
| arg tLEQ arg
|
|
630
634
|
{
|
|
631
|
-
result = new_call val[0], :"<=",
|
|
635
|
+
result = new_call val[0], :"<=", argl(val[2])
|
|
632
636
|
}
|
|
633
637
|
| arg tEQ arg
|
|
634
638
|
{
|
|
635
|
-
result = new_call val[0], :"==",
|
|
639
|
+
result = new_call val[0], :"==", argl(val[2])
|
|
636
640
|
}
|
|
637
641
|
| arg tEQQ arg
|
|
638
642
|
{
|
|
639
|
-
result = new_call val[0], :"===",
|
|
643
|
+
result = new_call val[0], :"===", argl(val[2])
|
|
640
644
|
}
|
|
641
645
|
| arg tNEQ arg
|
|
642
646
|
{
|
|
643
647
|
val[0] = value_expr val[0] # TODO: port call_op and clean these
|
|
644
648
|
val[2] = value_expr val[2]
|
|
645
|
-
result = s(:not, new_call(val[0], :"==",
|
|
649
|
+
result = s(:not, new_call(val[0], :"==", argl(val[2])))
|
|
646
650
|
}
|
|
647
651
|
| arg tMATCH arg
|
|
648
652
|
{
|
|
649
|
-
result =
|
|
653
|
+
result = get_match_node val[0], val[2]
|
|
650
654
|
}
|
|
651
655
|
| arg tNMATCH arg
|
|
652
656
|
{
|
|
653
|
-
result = s(:not,
|
|
657
|
+
result = s(:not, get_match_node(val[0], val[2]))
|
|
654
658
|
}
|
|
655
659
|
| tBANG arg
|
|
656
660
|
{
|
|
@@ -659,19 +663,19 @@ rule
|
|
|
659
663
|
| tTILDE arg
|
|
660
664
|
{
|
|
661
665
|
val[2] = value_expr val[2]
|
|
662
|
-
result = new_call val[1], :"~"
|
|
666
|
+
result = new_call val[1], :"~"
|
|
663
667
|
}
|
|
664
668
|
| arg tLSHFT arg
|
|
665
669
|
{
|
|
666
670
|
val[0] = value_expr val[0]
|
|
667
671
|
val[2] = value_expr val[2]
|
|
668
|
-
result = new_call val[0], :"\<\<",
|
|
672
|
+
result = new_call val[0], :"\<\<", argl(val[2])
|
|
669
673
|
}
|
|
670
674
|
| arg tRSHFT arg
|
|
671
675
|
{
|
|
672
676
|
val[0] = value_expr val[0]
|
|
673
677
|
val[2] = value_expr val[2]
|
|
674
|
-
result = new_call val[0], :">>",
|
|
678
|
+
result = new_call val[0], :">>", argl(val[2])
|
|
675
679
|
}
|
|
676
680
|
| arg tANDOP arg
|
|
677
681
|
{
|
|
@@ -687,6 +691,7 @@ rule
|
|
|
687
691
|
}
|
|
688
692
|
| arg tEH arg tCOLON arg
|
|
689
693
|
{
|
|
694
|
+
lexer.tern.pop
|
|
690
695
|
result = s(:if, val[0], val[2], val[4])
|
|
691
696
|
}
|
|
692
697
|
| primary
|
|
@@ -708,7 +713,7 @@ rule
|
|
|
708
713
|
}
|
|
709
714
|
| args tCOMMA tSTAR arg opt_nl
|
|
710
715
|
{
|
|
711
|
-
result =
|
|
716
|
+
result = arg_concat val[0], val[3]
|
|
712
717
|
}
|
|
713
718
|
| assocs trailer
|
|
714
719
|
{
|
|
@@ -748,92 +753,92 @@ rule
|
|
|
748
753
|
}
|
|
749
754
|
| args opt_block_arg
|
|
750
755
|
{
|
|
751
|
-
result =
|
|
756
|
+
result = arg_blk_pass val[0], val[1]
|
|
752
757
|
}
|
|
753
758
|
| args tCOMMA tSTAR arg_value opt_block_arg
|
|
754
759
|
{
|
|
755
|
-
result =
|
|
756
|
-
result =
|
|
760
|
+
result = arg_concat val[0], val[3]
|
|
761
|
+
result = arg_blk_pass result, val[4]
|
|
757
762
|
}
|
|
758
763
|
| assocs opt_block_arg
|
|
759
764
|
{
|
|
760
765
|
result = s(:array, s(:hash, *val[0].values))
|
|
761
|
-
result =
|
|
766
|
+
result = arg_blk_pass result, val[1]
|
|
762
767
|
}
|
|
763
768
|
| assocs tCOMMA tSTAR arg_value opt_block_arg
|
|
764
769
|
{
|
|
765
|
-
result =
|
|
766
|
-
result =
|
|
770
|
+
result = arg_concat s(:array, s(:hash, *val[0].values)), val[3]
|
|
771
|
+
result = arg_blk_pass result, val[4]
|
|
767
772
|
}
|
|
768
773
|
| args tCOMMA assocs opt_block_arg
|
|
769
774
|
{
|
|
770
775
|
result = val[0] << s(:hash, *val[2].values)
|
|
771
|
-
result =
|
|
776
|
+
result = arg_blk_pass result, val[3]
|
|
772
777
|
}
|
|
773
778
|
| args tCOMMA assocs tCOMMA tSTAR arg opt_block_arg
|
|
774
779
|
{
|
|
775
780
|
val[0] << s(:hash, *val[2].values)
|
|
776
|
-
result =
|
|
777
|
-
result =
|
|
781
|
+
result = arg_concat val[0], val[5]
|
|
782
|
+
result = arg_blk_pass result, val[6]
|
|
778
783
|
}
|
|
779
784
|
| tSTAR arg_value opt_block_arg
|
|
780
785
|
{
|
|
781
|
-
result =
|
|
786
|
+
result = arg_blk_pass s(:splat, val[1]), val[2]
|
|
782
787
|
}
|
|
783
788
|
| block_arg
|
|
784
789
|
|
|
785
790
|
call_args2: arg_value tCOMMA args opt_block_arg
|
|
786
791
|
{
|
|
787
|
-
args =
|
|
788
|
-
result =
|
|
792
|
+
args = list_prepend val[0], val[2]
|
|
793
|
+
result = arg_blk_pass args, val[3]
|
|
789
794
|
}
|
|
790
795
|
| arg_value tCOMMA block_arg
|
|
791
796
|
{
|
|
792
|
-
result =
|
|
797
|
+
result = arg_blk_pass val[0], val[2]
|
|
793
798
|
}
|
|
794
799
|
| arg_value tCOMMA tSTAR arg_value opt_block_arg
|
|
795
800
|
{
|
|
796
|
-
result =
|
|
797
|
-
result =
|
|
801
|
+
result = arg_concat s(:array, val[0]), val[3]
|
|
802
|
+
result = arg_blk_pass result, val[4]
|
|
798
803
|
}
|
|
799
804
|
| arg_value tCOMMA args tCOMMA tSTAR arg_value opt_block_arg
|
|
800
805
|
{
|
|
801
|
-
result =
|
|
802
|
-
result =
|
|
806
|
+
result = arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5]
|
|
807
|
+
result = arg_blk_pass result, val[6]
|
|
803
808
|
}
|
|
804
809
|
| assocs opt_block_arg
|
|
805
810
|
{
|
|
806
811
|
result = s(:array, s(:hash, *val[0].values))
|
|
807
|
-
result =
|
|
812
|
+
result = arg_blk_pass result, val[1]
|
|
808
813
|
}
|
|
809
814
|
| assocs tCOMMA tSTAR arg_value opt_block_arg
|
|
810
815
|
{
|
|
811
816
|
result = s(:array, s(:hash, *val[0].values), val[3])
|
|
812
|
-
result =
|
|
817
|
+
result = arg_blk_pass result, val[4]
|
|
813
818
|
}
|
|
814
819
|
| arg_value tCOMMA assocs opt_block_arg
|
|
815
820
|
{
|
|
816
821
|
result = s(:array, val[0], s(:hash, *val[2].values))
|
|
817
|
-
result =
|
|
822
|
+
result = arg_blk_pass result, val[3]
|
|
818
823
|
}
|
|
819
824
|
| arg_value tCOMMA args tCOMMA assocs opt_block_arg
|
|
820
825
|
{
|
|
821
826
|
result = s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values))
|
|
822
|
-
result =
|
|
827
|
+
result = arg_blk_pass result, val[5]
|
|
823
828
|
}
|
|
824
829
|
| arg_value tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg
|
|
825
830
|
{
|
|
826
|
-
result =
|
|
827
|
-
result =
|
|
831
|
+
result = arg_concat s(:array, val[0]).add(s(:hash, *val[2].values)), val[5]
|
|
832
|
+
result = arg_blk_pass result, val[6]
|
|
828
833
|
}
|
|
829
834
|
| arg_value tCOMMA args tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg
|
|
830
835
|
{
|
|
831
|
-
result =
|
|
832
|
-
result =
|
|
836
|
+
result = arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7]
|
|
837
|
+
result = arg_blk_pass result, val[8]
|
|
833
838
|
}
|
|
834
839
|
| tSTAR arg_value opt_block_arg
|
|
835
840
|
{
|
|
836
|
-
result =
|
|
841
|
+
result = arg_blk_pass s(:splat, val[1]), val[2]
|
|
837
842
|
}
|
|
838
843
|
| block_arg
|
|
839
844
|
|
|
@@ -876,7 +881,7 @@ rule
|
|
|
876
881
|
{
|
|
877
882
|
result = val[1]
|
|
878
883
|
}
|
|
879
|
-
|
|
|
884
|
+
| none
|
|
880
885
|
|
|
881
886
|
args: arg_value
|
|
882
887
|
{
|
|
@@ -884,7 +889,7 @@ rule
|
|
|
884
889
|
}
|
|
885
890
|
| args tCOMMA arg_value
|
|
886
891
|
{
|
|
887
|
-
result =
|
|
892
|
+
result = list_append val[0], val[2]
|
|
888
893
|
}
|
|
889
894
|
|
|
890
895
|
mrhs: args tCOMMA arg_value
|
|
@@ -893,7 +898,7 @@ rule
|
|
|
893
898
|
}
|
|
894
899
|
| args tCOMMA tSTAR arg_value
|
|
895
900
|
{
|
|
896
|
-
result =
|
|
901
|
+
result = arg_concat val[0], val[3]
|
|
897
902
|
}
|
|
898
903
|
| tSTAR arg_value
|
|
899
904
|
{
|
|
@@ -905,7 +910,7 @@ rule
|
|
|
905
910
|
| xstring
|
|
906
911
|
| regexp
|
|
907
912
|
| words
|
|
908
|
-
|
|
|
913
|
+
| qwords
|
|
909
914
|
| var_ref
|
|
910
915
|
| backref
|
|
911
916
|
| tFID
|
|
@@ -948,7 +953,7 @@ rule
|
|
|
948
953
|
{
|
|
949
954
|
result = s(:colon3, val[1].to_sym)
|
|
950
955
|
}
|
|
951
|
-
| primary_value
|
|
956
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
|
952
957
|
{
|
|
953
958
|
result = new_aref val
|
|
954
959
|
}
|
|
@@ -986,7 +991,7 @@ rule
|
|
|
986
991
|
call = new_call(nil, oper.to_sym)
|
|
987
992
|
iter.insert 1, call
|
|
988
993
|
result = iter
|
|
989
|
-
call.line
|
|
994
|
+
call.line = iter.line
|
|
990
995
|
}
|
|
991
996
|
| method_call
|
|
992
997
|
| method_call brace_block
|
|
@@ -1039,7 +1044,7 @@ rule
|
|
|
1039
1044
|
{
|
|
1040
1045
|
result = new_case nil, val[3]
|
|
1041
1046
|
}
|
|
1042
|
-
| kFOR
|
|
1047
|
+
| kFOR for_var kIN
|
|
1043
1048
|
{
|
|
1044
1049
|
lexer.cond.push true
|
|
1045
1050
|
}
|
|
@@ -1058,7 +1063,7 @@ rule
|
|
|
1058
1063
|
cpath superclass
|
|
1059
1064
|
{
|
|
1060
1065
|
self.comments.push self.lexer.comments
|
|
1061
|
-
if (
|
|
1066
|
+
if (in_def || in_single > 0) then
|
|
1062
1067
|
yyerror "class definition in method body"
|
|
1063
1068
|
end
|
|
1064
1069
|
self.env.extend
|
|
@@ -1074,12 +1079,12 @@ rule
|
|
|
1074
1079
|
}
|
|
1075
1080
|
expr
|
|
1076
1081
|
{
|
|
1077
|
-
result =
|
|
1082
|
+
result = in_def
|
|
1078
1083
|
self.in_def = false
|
|
1079
1084
|
}
|
|
1080
1085
|
term
|
|
1081
1086
|
{
|
|
1082
|
-
result =
|
|
1087
|
+
result = in_single
|
|
1083
1088
|
self.in_single = 0
|
|
1084
1089
|
self.env.extend
|
|
1085
1090
|
}
|
|
@@ -1096,7 +1101,7 @@ rule
|
|
|
1096
1101
|
{
|
|
1097
1102
|
self.comments.push self.lexer.comments
|
|
1098
1103
|
yyerror "module definition in method body" if
|
|
1099
|
-
|
|
1104
|
+
in_def or in_single > 0
|
|
1100
1105
|
|
|
1101
1106
|
self.env.extend
|
|
1102
1107
|
}
|
|
@@ -1179,29 +1184,92 @@ rule
|
|
|
1179
1184
|
result = val[1]
|
|
1180
1185
|
}
|
|
1181
1186
|
|
|
1182
|
-
|
|
1187
|
+
for_var: lhs
|
|
1183
1188
|
| mlhs
|
|
1184
1189
|
{
|
|
1185
1190
|
val[0].delete_at 1 if val[0][1].nil? # HACK
|
|
1186
1191
|
}
|
|
1187
1192
|
|
|
1193
|
+
block_par: mlhs_item
|
|
1194
|
+
{
|
|
1195
|
+
result = s(:array, val[0])
|
|
1196
|
+
}
|
|
1197
|
+
| block_par tCOMMA mlhs_item
|
|
1198
|
+
{
|
|
1199
|
+
result = list_append val[0], val[2]
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
block_var: block_par
|
|
1203
|
+
{
|
|
1204
|
+
result = block_var val[0], nil, nil
|
|
1205
|
+
}
|
|
1206
|
+
| block_par tCOMMA
|
|
1207
|
+
{
|
|
1208
|
+
result = block_var val[0], nil, nil
|
|
1209
|
+
}
|
|
1210
|
+
| block_par tCOMMA tAMPER lhs
|
|
1211
|
+
{
|
|
1212
|
+
result = block_var val[0], nil, val[3]
|
|
1213
|
+
}
|
|
1214
|
+
| block_par tCOMMA tSTAR lhs tCOMMA tAMPER lhs
|
|
1215
|
+
{
|
|
1216
|
+
result = block_var val[0], val[3], val[6]
|
|
1217
|
+
}
|
|
1218
|
+
| block_par tCOMMA tSTAR tCOMMA tAMPER lhs
|
|
1219
|
+
{
|
|
1220
|
+
result = block_var val[0], s(:splat), val[5]
|
|
1221
|
+
}
|
|
1222
|
+
| block_par tCOMMA tSTAR lhs
|
|
1223
|
+
{
|
|
1224
|
+
result = block_var val[0], val[3], nil
|
|
1225
|
+
}
|
|
1226
|
+
| block_par tCOMMA tSTAR
|
|
1227
|
+
{
|
|
1228
|
+
result = block_var val[0], s(:splat), nil
|
|
1229
|
+
}
|
|
1230
|
+
| tSTAR lhs tCOMMA tAMPER lhs
|
|
1231
|
+
{
|
|
1232
|
+
result = block_var nil, val[1], val[4]
|
|
1233
|
+
}
|
|
1234
|
+
| tSTAR tCOMMA tAMPER lhs
|
|
1235
|
+
{
|
|
1236
|
+
result = block_var nil, s(:splat), val[3]
|
|
1237
|
+
}
|
|
1238
|
+
| tSTAR lhs
|
|
1239
|
+
{
|
|
1240
|
+
result = block_var nil, val[1], nil
|
|
1241
|
+
}
|
|
1242
|
+
| tSTAR
|
|
1243
|
+
{
|
|
1244
|
+
result = block_var nil, s(:splat), nil
|
|
1245
|
+
}
|
|
1246
|
+
| tAMPER lhs
|
|
1247
|
+
{
|
|
1248
|
+
result = block_var nil, nil, val[1]
|
|
1249
|
+
}
|
|
1250
|
+
;
|
|
1251
|
+
|
|
1188
1252
|
opt_block_var: none
|
|
1189
1253
|
| tPIPE tPIPE
|
|
1190
1254
|
{
|
|
1191
1255
|
result = 0
|
|
1256
|
+
self.lexer.command_start = true
|
|
1192
1257
|
}
|
|
1193
1258
|
| tOROP
|
|
1194
1259
|
{
|
|
1195
1260
|
result = 0
|
|
1261
|
+
self.lexer.command_start = true
|
|
1196
1262
|
}
|
|
1197
1263
|
| tPIPE block_var tPIPE
|
|
1198
1264
|
{
|
|
1199
1265
|
result = val[1]
|
|
1266
|
+
self.lexer.command_start = true
|
|
1200
1267
|
}
|
|
1201
1268
|
|
|
1202
1269
|
do_block: kDO_BLOCK
|
|
1203
1270
|
{
|
|
1204
1271
|
self.env.extend :dynamic
|
|
1272
|
+
result = self.lexer.lineno
|
|
1205
1273
|
}
|
|
1206
1274
|
opt_block_var
|
|
1207
1275
|
{
|
|
@@ -1212,6 +1280,7 @@ rule
|
|
|
1212
1280
|
vars = val[2]
|
|
1213
1281
|
body = val[4]
|
|
1214
1282
|
result = new_iter nil, vars, body
|
|
1283
|
+
result.line = val[1]
|
|
1215
1284
|
|
|
1216
1285
|
self.env.unextend
|
|
1217
1286
|
}
|
|
@@ -1304,7 +1373,7 @@ rule
|
|
|
1304
1373
|
}
|
|
1305
1374
|
when_args then compstmt cases
|
|
1306
1375
|
{
|
|
1307
|
-
result =
|
|
1376
|
+
result = new_when(val[2], val[4])
|
|
1308
1377
|
result.line = val[1]
|
|
1309
1378
|
result << val[5] if val[5]
|
|
1310
1379
|
}
|
|
@@ -1312,11 +1381,11 @@ rule
|
|
|
1312
1381
|
when_args: args
|
|
1313
1382
|
| args tCOMMA tSTAR arg_value
|
|
1314
1383
|
{
|
|
1315
|
-
result =
|
|
1384
|
+
result = list_append val[0], new_when(val[3], nil)
|
|
1316
1385
|
}
|
|
1317
1386
|
| tSTAR arg_value
|
|
1318
1387
|
{
|
|
1319
|
-
result = s(:array,
|
|
1388
|
+
result = s(:array, new_when(val[1], nil))
|
|
1320
1389
|
}
|
|
1321
1390
|
|
|
1322
1391
|
cases: opt_else | case_body
|
|
@@ -1328,7 +1397,7 @@ rule
|
|
|
1328
1397
|
klasses ||= s(:array)
|
|
1329
1398
|
klasses << node_assign(var, s(:gvar, :"$!")) if var
|
|
1330
1399
|
|
|
1331
|
-
result =
|
|
1400
|
+
result = new_resbody(klasses, body)
|
|
1332
1401
|
result << rest if rest # UGH, rewritten above
|
|
1333
1402
|
}
|
|
1334
1403
|
|
|
|
@@ -1372,7 +1441,7 @@ rule
|
|
|
1372
1441
|
string: string1
|
|
1373
1442
|
| string string1
|
|
1374
1443
|
{
|
|
1375
|
-
result =
|
|
1444
|
+
result = literal_concat val[0], val[1]
|
|
1376
1445
|
}
|
|
1377
1446
|
|
|
1378
1447
|
string1: tSTRING_BEG string_contents tSTRING_END
|
|
@@ -1416,14 +1485,14 @@ rule
|
|
|
1416
1485
|
word: string_content
|
|
1417
1486
|
| word string_content
|
|
1418
1487
|
{
|
|
1419
|
-
result =
|
|
1488
|
+
result = literal_concat val[0], val[1]
|
|
1420
1489
|
}
|
|
1421
1490
|
|
|
1422
|
-
|
|
1491
|
+
qwords: tQWORDS_BEG tSPACE tSTRING_END
|
|
1423
1492
|
{
|
|
1424
1493
|
result = s(:array)
|
|
1425
1494
|
}
|
|
1426
|
-
|
|
|
1495
|
+
| tQWORDS_BEG qword_list tSTRING_END
|
|
1427
1496
|
{
|
|
1428
1497
|
result = val[1]
|
|
1429
1498
|
}
|
|
@@ -1551,21 +1620,22 @@ xstring_contents: none
|
|
|
1551
1620
|
| tGVAR
|
|
1552
1621
|
| tCONSTANT
|
|
1553
1622
|
| tCVAR
|
|
1554
|
-
| kNIL { result = :nil
|
|
1555
|
-
| kSELF { result = :self
|
|
1556
|
-
| kTRUE { result = :true
|
|
1557
|
-
| kFALSE { result = :false
|
|
1558
|
-
| k__FILE__ { result = :
|
|
1559
|
-
| k__LINE__ { result = :
|
|
1623
|
+
| kNIL { result = s(:nil) }
|
|
1624
|
+
| kSELF { result = s(:self) }
|
|
1625
|
+
| kTRUE { result = s(:true) }
|
|
1626
|
+
| kFALSE { result = s(:false) }
|
|
1627
|
+
| k__FILE__ { result = s(:str, self.file) }
|
|
1628
|
+
| k__LINE__ { result = s(:lit, lexer.src.current_line) }
|
|
1560
1629
|
|
|
1561
1630
|
var_ref: variable
|
|
1562
1631
|
{
|
|
1563
|
-
|
|
1632
|
+
var = val[0]
|
|
1633
|
+
result = Sexp === var ? var : self.gettable(var)
|
|
1564
1634
|
}
|
|
1565
1635
|
|
|
1566
1636
|
var_lhs: variable
|
|
1567
1637
|
{
|
|
1568
|
-
result =
|
|
1638
|
+
result = assignable val[0]
|
|
1569
1639
|
}
|
|
1570
1640
|
|
|
1571
1641
|
backref: tNTH_REF { result = s(:nth_ref, val[0]) }
|
|
@@ -1593,6 +1663,7 @@ xstring_contents: none
|
|
|
1593
1663
|
{
|
|
1594
1664
|
result = val[1]
|
|
1595
1665
|
lexer.lex_state = :expr_beg
|
|
1666
|
+
self.lexer.command_start = true
|
|
1596
1667
|
}
|
|
1597
1668
|
| f_args term
|
|
1598
1669
|
{
|
|
@@ -1638,12 +1709,16 @@ xstring_contents: none
|
|
|
1638
1709
|
|
|
1639
1710
|
f_norm_arg: tCONSTANT
|
|
1640
1711
|
{
|
|
1641
|
-
yyerror "formal argument cannot be a constant
|
|
1712
|
+
yyerror "formal argument cannot be a constant"
|
|
1642
1713
|
}
|
|
1643
1714
|
| tIVAR
|
|
1644
1715
|
{
|
|
1645
1716
|
yyerror "formal argument cannot be an instance variable"
|
|
1646
1717
|
}
|
|
1718
|
+
| tGVAR
|
|
1719
|
+
{
|
|
1720
|
+
yyerror "formal argument cannot be a global variable"
|
|
1721
|
+
}
|
|
1647
1722
|
| tCVAR
|
|
1648
1723
|
{
|
|
1649
1724
|
yyerror "formal argument cannot be a class variable"
|
|
@@ -1669,7 +1744,7 @@ xstring_contents: none
|
|
|
1669
1744
|
|
|
1670
1745
|
f_opt: tIDENTIFIER tEQL arg_value
|
|
1671
1746
|
{
|
|
1672
|
-
result =
|
|
1747
|
+
result = assignable val[0], val[2]
|
|
1673
1748
|
# TODO: detect duplicate names
|
|
1674
1749
|
}
|
|
1675
1750
|
|
|
@@ -1679,7 +1754,7 @@ xstring_contents: none
|
|
|
1679
1754
|
}
|
|
1680
1755
|
| f_optarg tCOMMA f_opt
|
|
1681
1756
|
{
|
|
1682
|
-
result =
|
|
1757
|
+
result = block_append val[0], val[2]
|
|
1683
1758
|
}
|
|
1684
1759
|
|
|
1685
1760
|
restarg_mark: tSTAR2 | tSTAR
|
|
@@ -1688,7 +1763,7 @@ xstring_contents: none
|
|
|
1688
1763
|
{
|
|
1689
1764
|
# TODO: differs from parse.y - needs tests
|
|
1690
1765
|
name = val[1].to_sym
|
|
1691
|
-
|
|
1766
|
+
assignable name
|
|
1692
1767
|
result = :"*#{name}"
|
|
1693
1768
|
}
|
|
1694
1769
|
| restarg_mark
|
|
@@ -1776,8 +1851,6 @@ xstring_contents: none
|
|
|
1776
1851
|
|
|
1777
1852
|
none: { result = nil }
|
|
1778
1853
|
|
|
1779
|
-
none_block_pass: { result = nil }
|
|
1780
|
-
|
|
1781
1854
|
end
|
|
1782
1855
|
|
|
1783
1856
|
---- inner
|