ruby_parser 3.8.2 → 3.8.3
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 +1 -2
- data/History.txt +12 -0
- data/lib/ruby18_parser.rb +7 -8
- data/lib/ruby18_parser.y +7 -8
- data/lib/ruby19_parser.rb +8 -9
- data/lib/ruby19_parser.y +10 -11
- data/lib/ruby20_parser.rb +2594 -2632
- data/lib/ruby20_parser.y +14 -50
- data/lib/ruby21_parser.rb +2591 -2619
- data/lib/ruby21_parser.y +14 -48
- data/lib/ruby22_parser.rb +263 -286
- data/lib/ruby22_parser.y +14 -45
- data/lib/ruby23_parser.rb +269 -292
- data/lib/ruby23_parser.y +14 -45
- data/lib/ruby_lexer.rb +41 -8
- data/lib/ruby_lexer.rex +6 -6
- data/lib/ruby_lexer.rex.rb +17 -11
- data/lib/ruby_parser.yy +20 -33
- data/lib/ruby_parser_extras.rb +65 -3
- data/test/test_ruby_lexer.rb +88 -14
- data/test/test_ruby_parser.rb +102 -9
- data/test/test_ruby_parser_extras.rb +1 -1
- metadata +29 -28
- metadata.gz.sig +0 -0
data/lib/ruby23_parser.y
CHANGED
@@ -19,12 +19,8 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
19
19
|
tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END
|
20
20
|
tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA
|
21
21
|
tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG
|
22
|
-
#if defined(RUBY21) || defined(RUBY22) || defined(RUBY23))
|
23
22
|
tRATIONAL tIMAGINARY
|
24
|
-
#endif
|
25
|
-
#if defined(RUBY22 || defined(RUBY23))
|
26
23
|
tLABEL_END
|
27
|
-
#endif
|
28
24
|
tLONELY
|
29
25
|
|
30
26
|
prechigh
|
@@ -695,9 +691,7 @@ rule
|
|
695
691
|
{
|
696
692
|
result = new_call val[0], :**, argl(val[2])
|
697
693
|
}
|
698
|
-
#if defined(RUBY21) || defined(RUBY22 || defined(RUBY23))
|
699
694
|
| tUMINUS_NUM simple_numeric tPOW arg
|
700
|
-
#endif
|
701
695
|
{
|
702
696
|
result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@")
|
703
697
|
}
|
@@ -1729,12 +1723,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1729
1723
|
|
1730
1724
|
word_list: none
|
1731
1725
|
{
|
1732
|
-
result =
|
1726
|
+
result = new_word_list
|
1733
1727
|
}
|
1734
1728
|
| word_list word tSPACE
|
1735
1729
|
{
|
1736
|
-
|
1737
|
-
result = val[0].dup << word
|
1730
|
+
result = val[0].dup << new_word_list_entry(val)
|
1738
1731
|
}
|
1739
1732
|
|
1740
1733
|
word: string_content
|
@@ -1754,23 +1747,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1754
1747
|
|
1755
1748
|
symbol_list: none
|
1756
1749
|
{
|
1757
|
-
result =
|
1750
|
+
result = new_symbol_list
|
1758
1751
|
}
|
1759
1752
|
| symbol_list word tSPACE
|
1760
1753
|
{
|
1761
|
-
|
1762
|
-
|
1763
|
-
case sym[0]
|
1764
|
-
when :dstr then
|
1765
|
-
sym[0] = :dsym
|
1766
|
-
when :str then
|
1767
|
-
sym = s(:lit, sym.last.to_sym)
|
1768
|
-
else
|
1769
|
-
debug20 24
|
1770
|
-
sym = s(:dsym, "", result)
|
1771
|
-
end
|
1772
|
-
|
1773
|
-
result = list.dup << sym
|
1754
|
+
result = val[0].dup << new_symbol_list_entry(val)
|
1774
1755
|
}
|
1775
1756
|
|
1776
1757
|
qwords: tQWORDS_BEG tSPACE tSTRING_END
|
@@ -1793,20 +1774,20 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1793
1774
|
|
1794
1775
|
qword_list: none
|
1795
1776
|
{
|
1796
|
-
result =
|
1777
|
+
result = new_qword_list
|
1797
1778
|
}
|
1798
1779
|
| qword_list tSTRING_CONTENT tSPACE
|
1799
1780
|
{
|
1800
|
-
result = val[0].dup <<
|
1781
|
+
result = val[0].dup << new_qword_list_entry(val)
|
1801
1782
|
}
|
1802
1783
|
|
1803
1784
|
qsym_list: none
|
1804
1785
|
{
|
1805
|
-
result =
|
1786
|
+
result = new_qsym_list
|
1806
1787
|
}
|
1807
1788
|
| qsym_list tSTRING_CONTENT tSPACE
|
1808
1789
|
{
|
1809
|
-
result = val[0].dup <<
|
1790
|
+
result = val[0].dup << new_qsym_list_entry(val)
|
1810
1791
|
}
|
1811
1792
|
|
1812
1793
|
string_contents: none
|
@@ -1854,10 +1835,10 @@ regexp_contents: none
|
|
1854
1835
|
}
|
1855
1836
|
| tSTRING_DBEG
|
1856
1837
|
{
|
1857
|
-
result = [lexer.lex_strterm,
|
1858
|
-
lexer.brace_nest,
|
1838
|
+
result = [lexer.lex_strterm,
|
1839
|
+
lexer.brace_nest,
|
1859
1840
|
lexer.string_nest, # TODO: remove
|
1860
|
-
lexer.cond.store,
|
1841
|
+
lexer.cond.store,
|
1861
1842
|
lexer.cmdarg.store,
|
1862
1843
|
lexer.lex_state,
|
1863
1844
|
]
|
@@ -1938,21 +1919,17 @@ regexp_contents: none
|
|
1938
1919
|
end
|
1939
1920
|
}
|
1940
1921
|
|
1941
|
-
#if defined(RUBY21) || defined(RUBY22 || defined(RUBY23))
|
1942
1922
|
numeric: simple_numeric
|
1943
1923
|
| tUMINUS_NUM simple_numeric
|
1944
|
-
#endif
|
1945
1924
|
{
|
1946
1925
|
result = -val[1] # TODO: pt_testcase
|
1947
1926
|
}
|
1948
1927
|
|
1949
|
-
#if defined(RUBY21) || defined(RUBY22) || defined(RUBY23))
|
1950
1928
|
simple_numeric: tINTEGER
|
1951
1929
|
| tFLOAT
|
1952
1930
|
| tRATIONAL
|
1953
1931
|
| tIMAGINARY
|
1954
1932
|
|
1955
|
-
#endif
|
1956
1933
|
user_variable: tIDENTIFIER
|
1957
1934
|
| tIVAR
|
1958
1935
|
| tGVAR
|
@@ -2039,15 +2016,15 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2039
2016
|
{
|
2040
2017
|
result = args val
|
2041
2018
|
}
|
2042
|
-
|
2019
|
+
| f_kwarg opt_f_block_arg
|
2043
2020
|
{
|
2044
2021
|
result = args val
|
2045
2022
|
}
|
2046
|
-
|
2023
|
+
| f_kwrest opt_f_block_arg
|
2047
2024
|
{
|
2048
2025
|
result = args val
|
2049
2026
|
}
|
2050
|
-
|
2027
|
+
| f_block_arg
|
2051
2028
|
|
2052
2029
|
opt_args_tail: tCOMMA args_tail
|
2053
2030
|
{
|
@@ -2145,7 +2122,6 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2145
2122
|
result = identifier
|
2146
2123
|
}
|
2147
2124
|
|
2148
|
-
#if defined(RUBY22) || defined(RUBY23))
|
2149
2125
|
f_arg_asgn: f_norm_arg
|
2150
2126
|
|
2151
2127
|
f_arg_item: f_arg_asgn
|
@@ -2153,13 +2129,6 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2153
2129
|
{
|
2154
2130
|
result = val[1]
|
2155
2131
|
}
|
2156
|
-
#else
|
2157
|
-
f_arg_item: f_norm_arg
|
2158
|
-
| tLPAREN f_margs rparen
|
2159
|
-
{
|
2160
|
-
result = val[1]
|
2161
|
-
}
|
2162
|
-
#endif
|
2163
2132
|
|
2164
2133
|
f_arg: f_arg_item
|
2165
2134
|
{
|
data/lib/ruby_lexer.rb
CHANGED
@@ -258,7 +258,18 @@ class RubyLexer
|
|
258
258
|
|
259
259
|
def int_with_base base
|
260
260
|
rb_compile_error "Invalid numeric format" if matched =~ /__/
|
261
|
-
|
261
|
+
|
262
|
+
text = matched
|
263
|
+
case
|
264
|
+
when text.end_with?('ri')
|
265
|
+
return result(:expr_end, :tIMAGINARY, Complex(0, Rational(text.chop.chop.to_i(base))))
|
266
|
+
when text.end_with?('r')
|
267
|
+
return result(:expr_end, :tRATIONAL, Rational(text.chop.to_i(base)))
|
268
|
+
when text.end_with?('i')
|
269
|
+
return result(:expr_end, :tIMAGINARY, Complex(0, text.chop.to_i(base)))
|
270
|
+
else
|
271
|
+
return result(:expr_end, :tINTEGER, text.to_i(base))
|
272
|
+
end
|
262
273
|
end
|
263
274
|
|
264
275
|
def is_arg?
|
@@ -406,7 +417,17 @@ class RubyLexer
|
|
406
417
|
|
407
418
|
def process_float text
|
408
419
|
rb_compile_error "Invalid numeric format" if text =~ /__/
|
409
|
-
|
420
|
+
|
421
|
+
case
|
422
|
+
when text.end_with?('ri')
|
423
|
+
return result(:expr_end, :tIMAGINARY, Complex(0, Rational(text.chop.chop)))
|
424
|
+
when text.end_with?('r')
|
425
|
+
return result(:expr_end, :tRATIONAL, Rational(text.chop))
|
426
|
+
when text.end_with?('i')
|
427
|
+
return result(:expr_end, :tIMAGINARY, Complex(0, text.chop.to_f))
|
428
|
+
else
|
429
|
+
return result(:expr_end, :tFLOAT, text.to_f)
|
430
|
+
end
|
410
431
|
end
|
411
432
|
|
412
433
|
def process_gvar text
|
@@ -903,6 +924,17 @@ class RubyLexer
|
|
903
924
|
ss.check re
|
904
925
|
end
|
905
926
|
|
927
|
+
def eat_whitespace
|
928
|
+
r = scan(/\s+/)
|
929
|
+
self.extra_lineno += r.count("\n") if r
|
930
|
+
r
|
931
|
+
end
|
932
|
+
|
933
|
+
def fixup_lineno extra = 0
|
934
|
+
self.lineno += self.extra_lineno + extra
|
935
|
+
self.extra_lineno = 0
|
936
|
+
end
|
937
|
+
|
906
938
|
def scanner_class # TODO: design this out of oedipus_lex. or something.
|
907
939
|
RPStringScanner
|
908
940
|
end
|
@@ -1043,7 +1075,8 @@ class RubyLexer
|
|
1043
1075
|
def unescape s
|
1044
1076
|
r = ESCAPES[s]
|
1045
1077
|
|
1046
|
-
self.extra_lineno
|
1078
|
+
self.extra_lineno += 1 if s == "\n" # eg backslash newline strings
|
1079
|
+
self.extra_lineno -= 1 if r && s == "n" # literal \n, not newline
|
1047
1080
|
|
1048
1081
|
return r if r
|
1049
1082
|
|
@@ -1131,10 +1164,10 @@ class RubyLexer
|
|
1131
1164
|
when 'q' then
|
1132
1165
|
[:tSTRING_BEG, STR_SQUOTE]
|
1133
1166
|
when 'W' then
|
1134
|
-
|
1167
|
+
eat_whitespace
|
1135
1168
|
[:tWORDS_BEG, STR_DQUOTE | STR_FUNC_QWORDS]
|
1136
1169
|
when 'w' then
|
1137
|
-
|
1170
|
+
eat_whitespace
|
1138
1171
|
[:tQWORDS_BEG, STR_SQUOTE | STR_FUNC_QWORDS]
|
1139
1172
|
when 'x' then
|
1140
1173
|
[:tXSTRING_BEG, STR_XQUOTE]
|
@@ -1144,10 +1177,10 @@ class RubyLexer
|
|
1144
1177
|
self.lex_state = :expr_fname
|
1145
1178
|
[:tSYMBEG, STR_SSYM]
|
1146
1179
|
when 'I' then
|
1147
|
-
|
1180
|
+
eat_whitespace
|
1148
1181
|
[:tSYMBOLS_BEG, STR_DQUOTE | STR_FUNC_QWORDS]
|
1149
1182
|
when 'i' then
|
1150
|
-
|
1183
|
+
eat_whitespace
|
1151
1184
|
[:tQSYMBOLS_BEG, STR_SQUOTE | STR_FUNC_QWORDS]
|
1152
1185
|
end
|
1153
1186
|
|
@@ -1177,7 +1210,7 @@ class RubyLexer
|
|
1177
1210
|
return :tSTRING_END, nil
|
1178
1211
|
end
|
1179
1212
|
|
1180
|
-
space = true if qwords and
|
1213
|
+
space = true if qwords and eat_whitespace
|
1181
1214
|
|
1182
1215
|
if self.string_nest == 0 && scan(/#{term_re}/) then
|
1183
1216
|
if qwords then
|
data/lib/ruby_lexer.rex
CHANGED
@@ -12,12 +12,12 @@ macro
|
|
12
12
|
SIMPLE_STRING /(#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*/o
|
13
13
|
SSTRING /(\\.|[^\'])*/
|
14
14
|
|
15
|
-
INT_DEC /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)
|
16
|
-
INT_HEX /[+]?0x[a-f0-9_]
|
17
|
-
INT_BIN /[+]?0b[01_]
|
18
|
-
INT_OCT /[+]?0o?[0-7_]
|
19
|
-
FLOAT /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)
|
20
|
-
INT_DEC2 /[+]?\d[0-9_]*(?![e])
|
15
|
+
INT_DEC /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)(ri|r|i)?\b|0d[0-9_]+)(ri|r|i)?/i
|
16
|
+
INT_HEX /[+]?0x[a-f0-9_]+(ri|r|i)?/i
|
17
|
+
INT_BIN /[+]?0b[01_]+(ri|r|i)?/i
|
18
|
+
INT_OCT /[+]?0o?[0-7_]+(ri|r|i)?|0o(ri|r|i)?/i
|
19
|
+
FLOAT /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)?(?:(ri|r|i)\b)?|[+]?[\d_]+e[+-]?[\d_]+(?:(ri|r|i)\b)?/i
|
20
|
+
INT_DEC2 /[+]?\d[0-9_]*(?![e])((ri|r|i)\b)?/i
|
21
21
|
|
22
22
|
NUM_BAD /[+]?0[xbd]\b/i
|
23
23
|
INT_OCT_BAD /[+]?0o?[0-7_]*[89]/i
|
data/lib/ruby_lexer.rex.rb
CHANGED
@@ -15,17 +15,18 @@ class RubyLexer
|
|
15
15
|
ESC = /\\((?>[0-7]{1,3}|x[0-9a-fA-F]{1,2}|M-[^\\]|(C-|c)[^\\]|u[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}|[^0-7xMCc]))/
|
16
16
|
SIMPLE_STRING = /(#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*/o
|
17
17
|
SSTRING = /(\\.|[^\'])*/
|
18
|
-
INT_DEC = /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)
|
19
|
-
INT_HEX = /[+]?0x[a-f0-9_]
|
20
|
-
INT_BIN = /[+]?0b[01_]
|
21
|
-
INT_OCT = /[+]?0o?[0-7_]
|
22
|
-
FLOAT = /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)
|
23
|
-
INT_DEC2 = /[+]?\d[0-9_]*(?![e])
|
18
|
+
INT_DEC = /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)(ri|r|i)?\b|0d[0-9_]+)(ri|r|i)?/i
|
19
|
+
INT_HEX = /[+]?0x[a-f0-9_]+(ri|r|i)?/i
|
20
|
+
INT_BIN = /[+]?0b[01_]+(ri|r|i)?/i
|
21
|
+
INT_OCT = /[+]?0o?[0-7_]+(ri|r|i)?|0o(ri|r|i)?/i
|
22
|
+
FLOAT = /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)?(?:(ri|r|i)\b)?|[+]?[\d_]+e[+-]?[\d_]+(?:(ri|r|i)\b)?/i
|
23
|
+
INT_DEC2 = /[+]?\d[0-9_]*(?![e])((ri|r|i)\b)?/i
|
24
24
|
NUM_BAD = /[+]?0[xbd]\b/i
|
25
25
|
INT_OCT_BAD = /[+]?0o?[0-7_]*[89]/i
|
26
26
|
FLOAT_BAD = /[+]?\d[\d_]*_(e|\.)/i
|
27
27
|
|
28
|
-
class
|
28
|
+
class LexerError < StandardError ; end
|
29
|
+
class ScanError < LexerError ; end
|
29
30
|
|
30
31
|
attr_accessor :filename
|
31
32
|
attr_accessor :ss
|
@@ -43,7 +44,6 @@ class RubyLexer
|
|
43
44
|
yield
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
47
|
def scanner_class
|
48
48
|
StringScanner
|
49
49
|
end unless instance_methods(false).map(&:to_s).include?("scanner_class")
|
@@ -62,6 +62,12 @@ class RubyLexer
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
def location
|
66
|
+
[
|
67
|
+
(filename || "<input>"),
|
68
|
+
].compact.join(":")
|
69
|
+
end
|
70
|
+
|
65
71
|
def next_token
|
66
72
|
return process_string if lex_strterm
|
67
73
|
self.command_state = self.command_start
|
@@ -297,16 +303,16 @@ class RubyLexer
|
|
297
303
|
action { rb_compile_error "Invalid char #{text.inspect} in expression" }
|
298
304
|
else
|
299
305
|
text = ss.string[ss.pos .. -1]
|
300
|
-
raise ScanError, "can not match (#{state.inspect}): '#{text}'"
|
306
|
+
raise ScanError, "can not match (#{state.inspect}) at #{location}: '#{text}'"
|
301
307
|
end
|
302
308
|
else
|
303
|
-
raise ScanError, "undefined state: '#{state}'"
|
309
|
+
raise ScanError, "undefined state at #{location}: '#{state}'"
|
304
310
|
end # token = case state
|
305
311
|
|
306
312
|
next unless token # allow functions to trigger redo w/ nil
|
307
313
|
end # while
|
308
314
|
|
309
|
-
raise "bad lexical result: #{token.inspect}" unless
|
315
|
+
raise LexerError, "bad lexical result at #{location}: #{token.inspect}" unless
|
310
316
|
token.nil? || (Array === token && token.size >= 2)
|
311
317
|
|
312
318
|
# auto-switch state
|
data/lib/ruby_parser.yy
CHANGED
@@ -27,10 +27,10 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
27
27
|
tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END
|
28
28
|
tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA
|
29
29
|
tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG
|
30
|
-
#if defined(RUBY21) || defined(RUBY22) || defined(RUBY23)
|
30
|
+
#if defined(RUBY21) || defined(RUBY22) || defined(RUBY23)
|
31
31
|
tRATIONAL tIMAGINARY
|
32
32
|
#endif
|
33
|
-
#if defined(RUBY22 || defined(RUBY23)
|
33
|
+
#if defined(RUBY22) || defined(RUBY23)
|
34
34
|
tLABEL_END
|
35
35
|
#endif
|
36
36
|
#if defined(RUBY23)
|
@@ -720,7 +720,7 @@ rule
|
|
720
720
|
result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@")
|
721
721
|
}
|
722
722
|
| tUMINUS_NUM tFLOAT tPOW arg
|
723
|
-
#elif defined(RUBY21) || defined(RUBY22 || defined(RUBY23)
|
723
|
+
#elif defined(RUBY21) || defined(RUBY22) || defined(RUBY23)
|
724
724
|
| tUMINUS_NUM simple_numeric tPOW arg
|
725
725
|
#endif
|
726
726
|
{
|
@@ -1758,12 +1758,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1758
1758
|
|
1759
1759
|
word_list: none
|
1760
1760
|
{
|
1761
|
-
result =
|
1761
|
+
result = new_word_list
|
1762
1762
|
}
|
1763
1763
|
| word_list word tSPACE
|
1764
1764
|
{
|
1765
|
-
|
1766
|
-
result = val[0].dup << word
|
1765
|
+
result = val[0].dup << new_word_list_entry(val)
|
1767
1766
|
}
|
1768
1767
|
|
1769
1768
|
word: string_content
|
@@ -1783,23 +1782,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1783
1782
|
|
1784
1783
|
symbol_list: none
|
1785
1784
|
{
|
1786
|
-
result =
|
1785
|
+
result = new_symbol_list
|
1787
1786
|
}
|
1788
1787
|
| symbol_list word tSPACE
|
1789
1788
|
{
|
1790
|
-
|
1791
|
-
|
1792
|
-
case sym[0]
|
1793
|
-
when :dstr then
|
1794
|
-
sym[0] = :dsym
|
1795
|
-
when :str then
|
1796
|
-
sym = s(:lit, sym.last.to_sym)
|
1797
|
-
else
|
1798
|
-
debug20 24
|
1799
|
-
sym = s(:dsym, "", result)
|
1800
|
-
end
|
1801
|
-
|
1802
|
-
result = list.dup << sym
|
1789
|
+
result = val[0].dup << new_symbol_list_entry(val)
|
1803
1790
|
}
|
1804
1791
|
|
1805
1792
|
qwords: tQWORDS_BEG tSPACE tSTRING_END
|
@@ -1822,20 +1809,20 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1822
1809
|
|
1823
1810
|
qword_list: none
|
1824
1811
|
{
|
1825
|
-
result =
|
1812
|
+
result = new_qword_list
|
1826
1813
|
}
|
1827
1814
|
| qword_list tSTRING_CONTENT tSPACE
|
1828
1815
|
{
|
1829
|
-
result = val[0].dup <<
|
1816
|
+
result = val[0].dup << new_qword_list_entry(val)
|
1830
1817
|
}
|
1831
1818
|
|
1832
1819
|
qsym_list: none
|
1833
1820
|
{
|
1834
|
-
result =
|
1821
|
+
result = new_qsym_list
|
1835
1822
|
}
|
1836
1823
|
| qsym_list tSTRING_CONTENT tSPACE
|
1837
1824
|
{
|
1838
|
-
result = val[0].dup <<
|
1825
|
+
result = val[0].dup << new_qsym_list_entry(val)
|
1839
1826
|
}
|
1840
1827
|
|
1841
1828
|
string_contents: none
|
@@ -1883,10 +1870,10 @@ regexp_contents: none
|
|
1883
1870
|
}
|
1884
1871
|
| tSTRING_DBEG
|
1885
1872
|
{
|
1886
|
-
result = [lexer.lex_strterm,
|
1887
|
-
lexer.brace_nest,
|
1873
|
+
result = [lexer.lex_strterm,
|
1874
|
+
lexer.brace_nest,
|
1888
1875
|
lexer.string_nest, # TODO: remove
|
1889
|
-
lexer.cond.store,
|
1876
|
+
lexer.cond.store,
|
1890
1877
|
lexer.cmdarg.store,
|
1891
1878
|
lexer.lex_state,
|
1892
1879
|
]
|
@@ -1973,7 +1960,7 @@ regexp_contents: none
|
|
1973
1960
|
numeric: tINTEGER
|
1974
1961
|
| tFLOAT
|
1975
1962
|
| tUMINUS_NUM tINTEGER =tLOWEST
|
1976
|
-
#elif defined(RUBY21) || defined(RUBY22 || defined(RUBY23)
|
1963
|
+
#elif defined(RUBY21) || defined(RUBY22) || defined(RUBY23)
|
1977
1964
|
numeric: simple_numeric
|
1978
1965
|
| tUMINUS_NUM simple_numeric
|
1979
1966
|
#endif
|
@@ -1987,7 +1974,7 @@ regexp_contents: none
|
|
1987
1974
|
#endif
|
1988
1975
|
}
|
1989
1976
|
|
1990
|
-
#if defined(RUBY21) || defined(RUBY22) || defined(RUBY23)
|
1977
|
+
#if defined(RUBY21) || defined(RUBY22) || defined(RUBY23)
|
1991
1978
|
simple_numeric: tINTEGER
|
1992
1979
|
| tFLOAT
|
1993
1980
|
| tRATIONAL
|
@@ -2080,15 +2067,15 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2080
2067
|
{
|
2081
2068
|
result = args val
|
2082
2069
|
}
|
2083
|
-
|
2070
|
+
| f_kwarg opt_f_block_arg
|
2084
2071
|
{
|
2085
2072
|
result = args val
|
2086
2073
|
}
|
2087
|
-
|
2074
|
+
| f_kwrest opt_f_block_arg
|
2088
2075
|
{
|
2089
2076
|
result = args val
|
2090
2077
|
}
|
2091
|
-
|
2078
|
+
| f_block_arg
|
2092
2079
|
|
2093
2080
|
opt_args_tail: tCOMMA args_tail
|
2094
2081
|
{
|
@@ -2186,7 +2173,7 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
2186
2173
|
result = identifier
|
2187
2174
|
}
|
2188
2175
|
|
2189
|
-
#if defined(RUBY22) || defined(RUBY23)
|
2176
|
+
#if defined(RUBY22) || defined(RUBY23)
|
2190
2177
|
f_arg_asgn: f_norm_arg
|
2191
2178
|
|
2192
2179
|
f_arg_item: f_arg_asgn
|