ruby_parser 3.9.0 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +17 -0
- data/Rakefile +2 -2
- data/lib/rp_extensions.rb +5 -1
- data/lib/ruby18_parser.rb +15 -9
- data/lib/ruby18_parser.y +15 -9
- data/lib/ruby19_parser.rb +19 -15
- data/lib/ruby19_parser.y +19 -15
- data/lib/ruby20_parser.rb +2229 -2223
- data/lib/ruby20_parser.y +34 -23
- data/lib/ruby21_parser.rb +2546 -2530
- data/lib/ruby21_parser.y +34 -23
- data/lib/ruby22_parser.rb +2567 -2552
- data/lib/ruby22_parser.y +35 -24
- data/lib/ruby23_parser.rb +2505 -2483
- data/lib/ruby23_parser.y +35 -24
- data/lib/ruby24_parser.rb +2505 -2483
- data/lib/ruby24_parser.y +35 -24
- data/lib/ruby_lexer.rb +84 -11
- data/lib/ruby_parser.yy +35 -24
- data/lib/ruby_parser_extras.rb +112 -89
- data/test/test_ruby_lexer.rb +67 -0
- data/test/test_ruby_parser.rb +32 -1
- metadata +6 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f40dfeee0e474212f0bfb56c32bfa6ac2c15345
|
4
|
+
data.tar.gz: 3b138c15fc4ccea9cdaeb78a29d735b4ce044075
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eab6b5f51918c84302a104d5f9f6957c4848478a2a52c63a013e50dde8e447d88f384721c699a5fdb2e104fa260c3cfc8ab4af135fccc0a320a09ebc2e876917
|
7
|
+
data.tar.gz: 9dd361bb654390734c54292fe533291c583a202ffde25b417e133abc03cc96b143a0df5669aa4158c4b0938a3aa782d727452778648681eb6b3a2e2495b8358a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
=== 3.10.0 / 2017-07-17
|
2
|
+
|
3
|
+
* 4 minor enhancements:
|
4
|
+
|
5
|
+
* Added support for 'squiggly heredocs' (indented content). (jjoos)
|
6
|
+
* Bumped oedipus_lex to ~> 2.5.
|
7
|
+
* Bumped sexp_processor to ~> 4.9.
|
8
|
+
* Made STRICT_SEXP=1 safe: converted indexed sexps to semantic calls where needed.
|
9
|
+
|
10
|
+
* 5 bug fixes:
|
11
|
+
|
12
|
+
* Clear and restore cmdarg stack around defs args and body. (presidentbeef)
|
13
|
+
* Conditionalize use of sexp_body= to make it compatible w/ sexp_processor 4.9.0
|
14
|
+
* Fix up line numbers in strings with newlines and `#`. (presidentbeef)
|
15
|
+
* Fixed line numbers of resbodies.
|
16
|
+
* Fixed some tracking of lexical state. Fixes bug #249.
|
17
|
+
|
1
18
|
=== 3.9.0 / 2017-04-13
|
2
19
|
|
3
20
|
* 1 major enhancement:
|
data/Rakefile
CHANGED
@@ -23,9 +23,9 @@ Hoe.spec "ruby_parser" do
|
|
23
23
|
|
24
24
|
license "MIT"
|
25
25
|
|
26
|
-
dependency "sexp_processor", "~> 4.
|
26
|
+
dependency "sexp_processor", "~> 4.9"
|
27
27
|
dependency "rake", "< 11", :developer
|
28
|
-
dependency "oedipus_lex", "~> 2.
|
28
|
+
dependency "oedipus_lex", "~> 2.5", :developer
|
29
29
|
|
30
30
|
if plugin? :perforce then # generated files
|
31
31
|
V1_2.each do |n|
|
data/lib/rp_extensions.rb
CHANGED
@@ -38,6 +38,10 @@ class String
|
|
38
38
|
# reduces tIDENTIFIER.
|
39
39
|
|
40
40
|
attr_accessor :lineno
|
41
|
+
|
42
|
+
def clean_caller
|
43
|
+
self.sub(File.dirname(__FILE__), ".").sub(/:in.*/, "")
|
44
|
+
end if $DEBUG
|
41
45
|
end
|
42
46
|
|
43
47
|
require "sexp"
|
@@ -66,7 +70,7 @@ class Sexp
|
|
66
70
|
end
|
67
71
|
|
68
72
|
def block_pass?
|
69
|
-
any? { |s| Sexp === s && s
|
73
|
+
any? { |s| Sexp === s && s.sexp_type == :block_pass }
|
70
74
|
end
|
71
75
|
|
72
76
|
alias :node_type :sexp_type
|
data/lib/ruby18_parser.rb
CHANGED
@@ -3825,7 +3825,7 @@ end
|
|
3825
3825
|
|
3826
3826
|
def _reduce_177(val, _values, result)
|
3827
3827
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
3828
|
-
val[2]
|
3828
|
+
val[2].sexp_type = :arglist if val[2]
|
3829
3829
|
|
3830
3830
|
result
|
3831
3831
|
end
|
@@ -3937,7 +3937,7 @@ def _reduce_193(val, _values, result)
|
|
3937
3937
|
end
|
3938
3938
|
|
3939
3939
|
def _reduce_194(val, _values, result)
|
3940
|
-
if val[1]
|
3940
|
+
if val[1].sexp_type == :lit then
|
3941
3941
|
result = val[1]
|
3942
3942
|
else
|
3943
3943
|
result = new_call val[1], :"+@"
|
@@ -4723,13 +4723,18 @@ def _reduce_322(val, _values, result)
|
|
4723
4723
|
self.in_single += 1
|
4724
4724
|
self.env.extend
|
4725
4725
|
lexer.lex_state = :expr_end # force for args
|
4726
|
+
result = [lexer.lineno, self.lexer.cmdarg.stack.dup]
|
4727
|
+
lexer.cmdarg.stack.replace [false]
|
4726
4728
|
|
4727
4729
|
result
|
4728
4730
|
end
|
4729
4731
|
|
4730
4732
|
def _reduce_323(val, _values, result)
|
4733
|
+
line, cmdarg = val[5]
|
4731
4734
|
result = new_defs val
|
4735
|
+
result[3].line line
|
4732
4736
|
|
4737
|
+
lexer.cmdarg.stack.replace cmdarg
|
4733
4738
|
self.env.unextend
|
4734
4739
|
self.in_single -= 1
|
4735
4740
|
self.lexer.comments # we don't care about comments in the body
|
@@ -5082,10 +5087,11 @@ end
|
|
5082
5087
|
# reduce 385 omitted
|
5083
5088
|
|
5084
5089
|
def _reduce_386(val, _values, result)
|
5085
|
-
klasses, var, body, rest = val
|
5090
|
+
(_, line), klasses, var, _, body, rest = val
|
5086
5091
|
|
5087
5092
|
klasses ||= s(:array)
|
5088
5093
|
klasses << new_assign(var, s(:gvar, :"$!")) if var
|
5094
|
+
klasses.line line
|
5089
5095
|
|
5090
5096
|
result = new_resbody(klasses, body)
|
5091
5097
|
result << rest if rest # UGH, rewritten above
|
@@ -5142,7 +5148,7 @@ end
|
|
5142
5148
|
# reduce 397 omitted
|
5143
5149
|
|
5144
5150
|
def _reduce_398(val, _values, result)
|
5145
|
-
val[0] = s(:dstr, val[0].value) if val[0]
|
5151
|
+
val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr
|
5146
5152
|
result = val[0]
|
5147
5153
|
|
5148
5154
|
result
|
@@ -5312,7 +5318,7 @@ def _reduce_423(val, _values, result)
|
|
5312
5318
|
|
5313
5319
|
case stmt
|
5314
5320
|
when Sexp then
|
5315
|
-
case stmt
|
5321
|
+
case stmt.sexp_type
|
5316
5322
|
when :str, :dstr, :evstr then
|
5317
5323
|
result = stmt
|
5318
5324
|
else
|
@@ -5372,9 +5378,9 @@ def _reduce_434(val, _values, result)
|
|
5372
5378
|
yyerror "empty symbol literal" if
|
5373
5379
|
result.nil? or result.empty?
|
5374
5380
|
|
5375
|
-
case result
|
5381
|
+
case result.sexp_type
|
5376
5382
|
when :dstr then
|
5377
|
-
result
|
5383
|
+
result.sexp_type = :dsym
|
5378
5384
|
when :str then
|
5379
5385
|
result = s(:lit, result.last.to_sym)
|
5380
5386
|
else
|
@@ -5679,7 +5685,7 @@ end
|
|
5679
5685
|
def _reduce_490(val, _values, result)
|
5680
5686
|
result = val[2]
|
5681
5687
|
yyerror "Can't define single method for literals." if
|
5682
|
-
result
|
5688
|
+
result.sexp_type == :lit
|
5683
5689
|
|
5684
5690
|
result
|
5685
5691
|
end
|
@@ -5710,7 +5716,7 @@ end
|
|
5710
5716
|
|
5711
5717
|
def _reduce_495(val, _values, result)
|
5712
5718
|
list = val[0].dup
|
5713
|
-
more = val[2]
|
5719
|
+
more = val[2].sexp_body
|
5714
5720
|
list.push(*more) unless more.empty?
|
5715
5721
|
result = list
|
5716
5722
|
|
data/lib/ruby18_parser.y
CHANGED
@@ -521,7 +521,7 @@ rule
|
|
521
521
|
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg
|
522
522
|
{
|
523
523
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
524
|
-
val[2]
|
524
|
+
val[2].sexp_type = :arglist if val[2]
|
525
525
|
}
|
526
526
|
| primary_value tDOT tIDENTIFIER tOP_ASGN arg
|
527
527
|
{
|
@@ -599,7 +599,7 @@ rule
|
|
599
599
|
}
|
600
600
|
| tUPLUS arg
|
601
601
|
{
|
602
|
-
if val[1]
|
602
|
+
if val[1].sexp_type == :lit then
|
603
603
|
result = val[1]
|
604
604
|
else
|
605
605
|
result = new_call val[1], :"+@"
|
@@ -1158,11 +1158,16 @@ rule
|
|
1158
1158
|
self.in_single += 1
|
1159
1159
|
self.env.extend
|
1160
1160
|
lexer.lex_state = :expr_end # force for args
|
1161
|
+
result = [lexer.lineno, self.lexer.cmdarg.stack.dup]
|
1162
|
+
lexer.cmdarg.stack.replace [false]
|
1161
1163
|
}
|
1162
1164
|
f_arglist bodystmt kEND
|
1163
1165
|
{
|
1166
|
+
line, cmdarg = val[5]
|
1164
1167
|
result = new_defs val
|
1168
|
+
result[3].line line
|
1165
1169
|
|
1170
|
+
lexer.cmdarg.stack.replace cmdarg
|
1166
1171
|
self.env.unextend
|
1167
1172
|
self.in_single -= 1
|
1168
1173
|
self.lexer.comments # we don't care about comments in the body
|
@@ -1417,10 +1422,11 @@ rule
|
|
1417
1422
|
|
1418
1423
|
opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
|
1419
1424
|
{
|
1420
|
-
klasses, var, body, rest = val
|
1425
|
+
(_, line), klasses, var, _, body, rest = val
|
1421
1426
|
|
1422
1427
|
klasses ||= s(:array)
|
1423
1428
|
klasses << new_assign(var, s(:gvar, :"$!")) if var
|
1429
|
+
klasses.line line
|
1424
1430
|
|
1425
1431
|
result = new_resbody(klasses, body)
|
1426
1432
|
result << rest if rest # UGH, rewritten above
|
@@ -1459,7 +1465,7 @@ rule
|
|
1459
1465
|
|
1460
1466
|
strings: string
|
1461
1467
|
{
|
1462
|
-
val[0] = s(:dstr, val[0].value) if val[0]
|
1468
|
+
val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr
|
1463
1469
|
result = val[0]
|
1464
1470
|
}
|
1465
1471
|
|
@@ -1593,7 +1599,7 @@ xstring_contents: none
|
|
1593
1599
|
|
1594
1600
|
case stmt
|
1595
1601
|
when Sexp then
|
1596
|
-
case stmt
|
1602
|
+
case stmt.sexp_type
|
1597
1603
|
when :str, :dstr, :evstr then
|
1598
1604
|
result = stmt
|
1599
1605
|
else
|
@@ -1631,9 +1637,9 @@ xstring_contents: none
|
|
1631
1637
|
yyerror "empty symbol literal" if
|
1632
1638
|
result.nil? or result.empty?
|
1633
1639
|
|
1634
|
-
case result
|
1640
|
+
case result.sexp_type
|
1635
1641
|
when :dstr then
|
1636
|
-
result
|
1642
|
+
result.sexp_type = :dsym
|
1637
1643
|
when :str then
|
1638
1644
|
result = s(:lit, result.last.to_sym)
|
1639
1645
|
else
|
@@ -1838,7 +1844,7 @@ xstring_contents: none
|
|
1838
1844
|
{
|
1839
1845
|
result = val[2]
|
1840
1846
|
yyerror "Can't define single method for literals." if
|
1841
|
-
result
|
1847
|
+
result.sexp_type == :lit
|
1842
1848
|
}
|
1843
1849
|
|
1844
1850
|
assoc_list: none # [!nil]
|
@@ -1862,7 +1868,7 @@ xstring_contents: none
|
|
1862
1868
|
| assocs tCOMMA assoc
|
1863
1869
|
{
|
1864
1870
|
list = val[0].dup
|
1865
|
-
more = val[2]
|
1871
|
+
more = val[2].sexp_body
|
1866
1872
|
list.push(*more) unless more.empty?
|
1867
1873
|
result = list
|
1868
1874
|
}
|
data/lib/ruby19_parser.rb
CHANGED
@@ -3580,7 +3580,7 @@ end
|
|
3580
3580
|
|
3581
3581
|
def _reduce_77(val, _values, result)
|
3582
3582
|
ary = list_append val[0], s(:splat, val[2])
|
3583
|
-
ary.concat val[4]
|
3583
|
+
ary.concat val[4].sexp_body
|
3584
3584
|
result = s(:masgn, ary)
|
3585
3585
|
|
3586
3586
|
result
|
@@ -3594,7 +3594,7 @@ end
|
|
3594
3594
|
|
3595
3595
|
def _reduce_79(val, _values, result)
|
3596
3596
|
ary = list_append val[0], s(:splat)
|
3597
|
-
ary.concat val[3]
|
3597
|
+
ary.concat val[3].sexp_body
|
3598
3598
|
result = s(:masgn, ary)
|
3599
3599
|
|
3600
3600
|
result
|
@@ -3608,7 +3608,7 @@ end
|
|
3608
3608
|
|
3609
3609
|
def _reduce_81(val, _values, result)
|
3610
3610
|
ary = s(:array, s(:splat, val[1]))
|
3611
|
-
ary.concat val[3]
|
3611
|
+
ary.concat val[3].sexp_body
|
3612
3612
|
result = s(:masgn, ary)
|
3613
3613
|
|
3614
3614
|
result
|
@@ -3622,7 +3622,7 @@ end
|
|
3622
3622
|
|
3623
3623
|
def _reduce_83(val, _values, result)
|
3624
3624
|
ary = s(:array, s(:splat))
|
3625
|
-
ary.concat val[2]
|
3625
|
+
ary.concat val[2].sexp_body
|
3626
3626
|
result = s(:masgn, ary)
|
3627
3627
|
|
3628
3628
|
result
|
@@ -4025,7 +4025,7 @@ def _reduce_198(val, _values, result)
|
|
4025
4025
|
end
|
4026
4026
|
|
4027
4027
|
def _reduce_199(val, _values, result)
|
4028
|
-
val[2]
|
4028
|
+
val[2].sexp_type = :arglist if val[2]
|
4029
4029
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
4030
4030
|
|
4031
4031
|
result
|
@@ -4337,7 +4337,7 @@ def _reduce_250(val, _values, result)
|
|
4337
4337
|
end
|
4338
4338
|
|
4339
4339
|
def _reduce_251(val, _values, result)
|
4340
|
-
result = val[0] << s(:hash, *val[2]
|
4340
|
+
result = val[0] << s(:hash, *val[2].sexp_body) # TODO: self.args
|
4341
4341
|
|
4342
4342
|
result
|
4343
4343
|
end
|
@@ -4798,15 +4798,18 @@ def _reduce_326(val, _values, result)
|
|
4798
4798
|
self.in_single += 1
|
4799
4799
|
self.env.extend
|
4800
4800
|
lexer.lex_state = :expr_end # force for args
|
4801
|
-
result = lexer.lineno
|
4801
|
+
result = [lexer.lineno, self.lexer.cmdarg.stack.dup]
|
4802
|
+
lexer.cmdarg.stack.replace [false]
|
4802
4803
|
|
4803
4804
|
result
|
4804
4805
|
end
|
4805
4806
|
|
4806
4807
|
def _reduce_327(val, _values, result)
|
4808
|
+
line, cmdarg = val[5]
|
4807
4809
|
result = new_defs val
|
4808
|
-
result[3].line
|
4810
|
+
result[3].line line
|
4809
4811
|
|
4812
|
+
lexer.cmdarg.stack.replace cmdarg
|
4810
4813
|
self.env.unextend
|
4811
4814
|
self.in_single -= 1
|
4812
4815
|
self.lexer.comments # we don't care about comments in the body
|
@@ -5357,10 +5360,11 @@ end
|
|
5357
5360
|
# reduce 425 omitted
|
5358
5361
|
|
5359
5362
|
def _reduce_426(val, _values, result)
|
5360
|
-
_, klasses, var, _, body, rest = val
|
5363
|
+
(_, line), klasses, var, _, body, rest = val
|
5361
5364
|
|
5362
5365
|
klasses ||= s(:array)
|
5363
5366
|
klasses << new_assign(var, s(:gvar, :"$!")) if var
|
5367
|
+
klasses.line line
|
5364
5368
|
|
5365
5369
|
result = new_resbody(klasses, body)
|
5366
5370
|
result << rest if rest # UGH, rewritten above
|
@@ -5415,7 +5419,7 @@ end
|
|
5415
5419
|
# reduce 437 omitted
|
5416
5420
|
|
5417
5421
|
def _reduce_438(val, _values, result)
|
5418
|
-
val[0] = s(:dstr, val[0].value) if val[0]
|
5422
|
+
val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr
|
5419
5423
|
result = val[0]
|
5420
5424
|
|
5421
5425
|
result
|
@@ -5597,7 +5601,7 @@ def _reduce_465(val, _values, result)
|
|
5597
5601
|
|
5598
5602
|
case stmt
|
5599
5603
|
when Sexp then
|
5600
|
-
case stmt
|
5604
|
+
case stmt.sexp_type
|
5601
5605
|
when :str, :dstr, :evstr then
|
5602
5606
|
result = stmt
|
5603
5607
|
else
|
@@ -5656,9 +5660,9 @@ def _reduce_476(val, _values, result)
|
|
5656
5660
|
|
5657
5661
|
result ||= s(:str, "")
|
5658
5662
|
|
5659
|
-
case result
|
5663
|
+
case result.sexp_type
|
5660
5664
|
when :dstr then
|
5661
|
-
result
|
5665
|
+
result.sexp_type = :dsym
|
5662
5666
|
when :str then
|
5663
5667
|
result = s(:lit, result.last.intern)
|
5664
5668
|
else
|
@@ -6066,7 +6070,7 @@ end
|
|
6066
6070
|
def _reduce_547(val, _values, result)
|
6067
6071
|
result = val[2]
|
6068
6072
|
yyerror "Can't define single method for literals." if
|
6069
|
-
result
|
6073
|
+
result.sexp_type == :lit
|
6070
6074
|
|
6071
6075
|
result
|
6072
6076
|
end
|
@@ -6087,7 +6091,7 @@ end
|
|
6087
6091
|
|
6088
6092
|
def _reduce_551(val, _values, result)
|
6089
6093
|
list = val[0].dup
|
6090
|
-
more = val[2]
|
6094
|
+
more = val[2].sexp_body
|
6091
6095
|
list.push(*more) unless more.empty?
|
6092
6096
|
result = list
|
6093
6097
|
|
data/lib/ruby19_parser.y
CHANGED
@@ -357,7 +357,7 @@ rule
|
|
357
357
|
| mlhs_head tSTAR mlhs_node tCOMMA mlhs_post
|
358
358
|
{
|
359
359
|
ary = list_append val[0], s(:splat, val[2])
|
360
|
-
ary.concat val[4]
|
360
|
+
ary.concat val[4].sexp_body
|
361
361
|
result = s(:masgn, ary)
|
362
362
|
}
|
363
363
|
| mlhs_head tSTAR
|
@@ -367,7 +367,7 @@ rule
|
|
367
367
|
| mlhs_head tSTAR tCOMMA mlhs_post
|
368
368
|
{
|
369
369
|
ary = list_append val[0], s(:splat)
|
370
|
-
ary.concat val[3]
|
370
|
+
ary.concat val[3].sexp_body
|
371
371
|
result = s(:masgn, ary)
|
372
372
|
}
|
373
373
|
| tSTAR mlhs_node
|
@@ -377,7 +377,7 @@ rule
|
|
377
377
|
| tSTAR mlhs_node tCOMMA mlhs_post
|
378
378
|
{
|
379
379
|
ary = s(:array, s(:splat, val[1]))
|
380
|
-
ary.concat val[3]
|
380
|
+
ary.concat val[3].sexp_body
|
381
381
|
result = s(:masgn, ary)
|
382
382
|
}
|
383
383
|
| tSTAR
|
@@ -387,7 +387,7 @@ rule
|
|
387
387
|
| tSTAR tCOMMA mlhs_post
|
388
388
|
{
|
389
389
|
ary = s(:array, s(:splat))
|
390
|
-
ary.concat val[2]
|
390
|
+
ary.concat val[2].sexp_body
|
391
391
|
result = s(:masgn, ary)
|
392
392
|
}
|
393
393
|
|
@@ -591,7 +591,7 @@ rule
|
|
591
591
|
}
|
592
592
|
| primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg
|
593
593
|
{
|
594
|
-
val[2]
|
594
|
+
val[2].sexp_type = :arglist if val[2]
|
595
595
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
596
596
|
}
|
597
597
|
| primary_value tDOT tIDENTIFIER tOP_ASGN arg
|
@@ -808,7 +808,7 @@ rule
|
|
808
808
|
}
|
809
809
|
| args tCOMMA assocs tCOMMA
|
810
810
|
{
|
811
|
-
result = val[0] << s(:hash, *val[2]
|
811
|
+
result = val[0] << s(:hash, *val[2].sexp_body) # TODO: self.args
|
812
812
|
}
|
813
813
|
| assocs tCOMMA
|
814
814
|
{
|
@@ -1136,13 +1136,16 @@ rule
|
|
1136
1136
|
self.in_single += 1
|
1137
1137
|
self.env.extend
|
1138
1138
|
lexer.lex_state = :expr_end # force for args
|
1139
|
-
result = lexer.lineno
|
1139
|
+
result = [lexer.lineno, self.lexer.cmdarg.stack.dup]
|
1140
|
+
lexer.cmdarg.stack.replace [false]
|
1140
1141
|
}
|
1141
1142
|
f_arglist bodystmt kEND
|
1142
1143
|
{
|
1144
|
+
line, cmdarg = val[5]
|
1143
1145
|
result = new_defs val
|
1144
|
-
result[3].line
|
1146
|
+
result[3].line line
|
1145
1147
|
|
1148
|
+
lexer.cmdarg.stack.replace cmdarg
|
1146
1149
|
self.env.unextend
|
1147
1150
|
self.in_single -= 1
|
1148
1151
|
self.lexer.comments # we don't care about comments in the body
|
@@ -1543,10 +1546,11 @@ rule
|
|
1543
1546
|
|
1544
1547
|
opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
|
1545
1548
|
{
|
1546
|
-
_, klasses, var, _, body, rest = val
|
1549
|
+
(_, line), klasses, var, _, body, rest = val
|
1547
1550
|
|
1548
1551
|
klasses ||= s(:array)
|
1549
1552
|
klasses << new_assign(var, s(:gvar, :"$!")) if var
|
1553
|
+
klasses.line line
|
1550
1554
|
|
1551
1555
|
result = new_resbody(klasses, body)
|
1552
1556
|
result << rest if rest # UGH, rewritten above
|
@@ -1583,7 +1587,7 @@ rule
|
|
1583
1587
|
|
1584
1588
|
strings: string
|
1585
1589
|
{
|
1586
|
-
val[0] = s(:dstr, val[0].value) if val[0]
|
1590
|
+
val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr
|
1587
1591
|
result = val[0]
|
1588
1592
|
}
|
1589
1593
|
|
@@ -1726,7 +1730,7 @@ regexp_contents: none
|
|
1726
1730
|
|
1727
1731
|
case stmt
|
1728
1732
|
when Sexp then
|
1729
|
-
case stmt
|
1733
|
+
case stmt.sexp_type
|
1730
1734
|
when :str, :dstr, :evstr then
|
1731
1735
|
result = stmt
|
1732
1736
|
else
|
@@ -1763,9 +1767,9 @@ regexp_contents: none
|
|
1763
1767
|
|
1764
1768
|
result ||= s(:str, "")
|
1765
1769
|
|
1766
|
-
case result
|
1770
|
+
case result.sexp_type
|
1767
1771
|
when :dstr then
|
1768
|
-
result
|
1772
|
+
result.sexp_type = :dsym
|
1769
1773
|
when :str then
|
1770
1774
|
result = s(:lit, result.last.intern)
|
1771
1775
|
else
|
@@ -2050,7 +2054,7 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2050
2054
|
{
|
2051
2055
|
result = val[2]
|
2052
2056
|
yyerror "Can't define single method for literals." if
|
2053
|
-
result
|
2057
|
+
result.sexp_type == :lit
|
2054
2058
|
}
|
2055
2059
|
|
2056
2060
|
assoc_list: none # [!nil]
|
@@ -2066,7 +2070,7 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2066
2070
|
| assocs tCOMMA assoc
|
2067
2071
|
{
|
2068
2072
|
list = val[0].dup
|
2069
|
-
more = val[2]
|
2073
|
+
more = val[2].sexp_body
|
2070
2074
|
list.push(*more) unless more.empty?
|
2071
2075
|
result = list
|
2072
2076
|
}
|