ruby_parser 3.0.0.a9 → 3.0.0.a10
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.
Potentially problematic release.
This version of ruby_parser might be problematic. Click here for more details.
- data.tar.gz.sig +0 -0
- data/History.txt +13 -0
- data/lib/ruby18_parser.rb +23 -23
- data/lib/ruby18_parser.y +23 -23
- data/lib/ruby19_parser.rb +98 -91
- data/lib/ruby19_parser.y +98 -91
- data/lib/ruby_parser_extras.rb +50 -120
- data/test/test_ruby_parser.rb +310 -106
- metadata +4 -4
- metadata.gz.sig +0 -0
data/lib/ruby19_parser.y
CHANGED
@@ -260,6 +260,8 @@ rule
|
|
260
260
|
compstmt tRCURLY
|
261
261
|
{
|
262
262
|
result = new_iter nil, val[2], val[4]
|
263
|
+
result.line = val[1]
|
264
|
+
|
263
265
|
self.env.unextend
|
264
266
|
}
|
265
267
|
|
@@ -994,7 +996,7 @@ rule
|
|
994
996
|
}
|
995
997
|
| tLAMBDA lambda
|
996
998
|
{
|
997
|
-
result = val[1]
|
999
|
+
result = val[1] # TODO: fix lineno
|
998
1000
|
}
|
999
1001
|
| kIF expr_value then compstmt if_tail kEND
|
1000
1002
|
{
|
@@ -1194,9 +1196,6 @@ rule
|
|
1194
1196
|
}
|
1195
1197
|
|
1196
1198
|
f_marg: f_norm_arg
|
1197
|
-
{
|
1198
|
-
result = assignable val[0]
|
1199
|
-
}
|
1200
1199
|
| tLPAREN f_margs rparen
|
1201
1200
|
{
|
1202
1201
|
result = val[1]
|
@@ -1213,114 +1212,116 @@ rule
|
|
1213
1212
|
|
1214
1213
|
f_margs: f_marg_list
|
1215
1214
|
{
|
1216
|
-
|
1215
|
+
args, = val
|
1216
|
+
|
1217
|
+
result = block_var args
|
1217
1218
|
}
|
1218
1219
|
| f_marg_list tCOMMA tSTAR f_norm_arg
|
1219
1220
|
{
|
1220
|
-
|
1221
|
+
args, _, _, splat = val
|
1222
|
+
|
1223
|
+
result = block_var args, "*#{splat}".to_sym
|
1221
1224
|
}
|
1222
1225
|
| f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
|
1223
1226
|
{
|
1224
|
-
|
1227
|
+
args, _, _, splat, _, args2 = val
|
1228
|
+
|
1229
|
+
result = block_var args, "*#{splat}".to_sym, args2
|
1225
1230
|
}
|
1226
1231
|
| f_marg_list tCOMMA tSTAR
|
1227
1232
|
{
|
1228
|
-
|
1233
|
+
args, _, _ = val
|
1234
|
+
|
1235
|
+
result = block_var args, :*
|
1229
1236
|
}
|
1230
1237
|
| f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
|
1231
1238
|
{
|
1232
|
-
|
1239
|
+
args, _, _, _, args2 = val
|
1240
|
+
|
1241
|
+
result = block_var args, :*, args2
|
1233
1242
|
}
|
1234
1243
|
| tSTAR f_norm_arg
|
1235
1244
|
{
|
1236
|
-
|
1245
|
+
_, splat = val
|
1246
|
+
|
1247
|
+
result = block_var :"*#{splat}"
|
1237
1248
|
}
|
1238
1249
|
| tSTAR f_norm_arg tCOMMA f_marg_list
|
1239
1250
|
{
|
1240
|
-
|
1251
|
+
_, splat, _, args = val
|
1252
|
+
|
1253
|
+
result = block_var :"*#{splat}", args
|
1241
1254
|
}
|
1242
1255
|
| tSTAR
|
1243
1256
|
{
|
1244
|
-
|
1257
|
+
result = block_var :*
|
1245
1258
|
}
|
1246
1259
|
| tSTAR tCOMMA f_marg_list
|
1247
1260
|
{
|
1248
|
-
|
1261
|
+
_, _, args = val
|
1262
|
+
|
1263
|
+
result = block_var :*, args
|
1249
1264
|
}
|
1250
1265
|
|
1251
1266
|
block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1252
1267
|
{
|
1253
|
-
result =
|
1268
|
+
result = args val
|
1254
1269
|
}
|
1255
1270
|
| f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1256
1271
|
{
|
1257
|
-
result =
|
1272
|
+
result = args val
|
1258
1273
|
}
|
1259
1274
|
| f_arg tCOMMA f_block_optarg opt_f_block_arg
|
1260
1275
|
{
|
1261
|
-
|
1262
|
-
|
1263
|
-
result = arg
|
1264
|
-
result.concat opt[1..-1].map { |s| s[1] }
|
1265
|
-
result << "&#{block.last}".to_sym if block
|
1266
|
-
result << opt
|
1276
|
+
result = args val
|
1267
1277
|
}
|
1268
1278
|
| f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg
|
1269
1279
|
{
|
1270
|
-
result =
|
1280
|
+
result = args val
|
1271
1281
|
}
|
1272
1282
|
| f_arg tCOMMA f_rest_arg opt_f_block_arg
|
1273
1283
|
{
|
1274
|
-
result =
|
1284
|
+
result = args val
|
1275
1285
|
}
|
1276
1286
|
| f_arg tCOMMA
|
1277
1287
|
{
|
1278
|
-
result =
|
1288
|
+
result = args val
|
1279
1289
|
}
|
1280
1290
|
| f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1281
1291
|
{
|
1282
|
-
result =
|
1292
|
+
result = args val
|
1283
1293
|
}
|
1284
1294
|
| f_arg opt_f_block_arg
|
1285
1295
|
{
|
1286
|
-
result =
|
1296
|
+
result = args val
|
1287
1297
|
}
|
1288
1298
|
| f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1289
1299
|
{
|
1290
|
-
result =
|
1300
|
+
result = args val
|
1291
1301
|
}
|
1292
1302
|
| f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1293
1303
|
{
|
1294
|
-
result =
|
1304
|
+
result = args val
|
1295
1305
|
}
|
1296
1306
|
| f_block_optarg opt_f_block_arg
|
1297
1307
|
{
|
1298
|
-
|
1299
|
-
|
1300
|
-
result = s(:args)
|
1301
|
-
result.concat opt[1..-1].map { |s| s[1] }
|
1302
|
-
result << "&#{block.last}".to_sym if block
|
1303
|
-
result << opt
|
1308
|
+
result = args val
|
1304
1309
|
}
|
1305
1310
|
| f_block_optarg tCOMMA f_arg opt_f_block_arg
|
1306
1311
|
{
|
1307
|
-
result =
|
1312
|
+
result = args val
|
1308
1313
|
}
|
1309
1314
|
| f_rest_arg opt_f_block_arg
|
1310
1315
|
{
|
1311
|
-
result =
|
1316
|
+
result = args val
|
1312
1317
|
}
|
1313
1318
|
| f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1314
1319
|
{
|
1315
|
-
|
1316
|
-
|
1317
|
-
result = args
|
1318
|
-
result[1,0] = rest
|
1319
|
-
result << "&#{block.last}".to_sym if block
|
1320
|
+
result = args val
|
1320
1321
|
}
|
1321
1322
|
| f_block_arg
|
1322
1323
|
{
|
1323
|
-
result =
|
1324
|
+
result = args val
|
1324
1325
|
}
|
1325
1326
|
|
1326
1327
|
opt_block_param: none
|
@@ -1362,23 +1363,18 @@ rule
|
|
1362
1363
|
|
1363
1364
|
lambda: f_larglist lambda_body
|
1364
1365
|
{
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
when 2
|
1369
|
-
args = s(:lasgn, val[0][1])
|
1370
|
-
else
|
1371
|
-
vars = val[0][1..-1].map { |name| s(:lasgn, name) }
|
1372
|
-
args = s(:masgn, s(:array, *vars))
|
1373
|
-
end
|
1366
|
+
args, body = val
|
1367
|
+
|
1368
|
+
args = 0 if args == s(:args)
|
1374
1369
|
|
1375
1370
|
call = new_call nil, :lambda
|
1376
|
-
result =
|
1371
|
+
result = new_iter call, args, body
|
1377
1372
|
}
|
1378
1373
|
|
1379
1374
|
f_larglist: tLPAREN2 f_args opt_bv_decl rparen
|
1380
1375
|
{
|
1381
1376
|
result = val[1]
|
1377
|
+
raise "not yet: #{val.inspect}" if val[2]
|
1382
1378
|
}
|
1383
1379
|
| f_args
|
1384
1380
|
{
|
@@ -1405,9 +1401,9 @@ rule
|
|
1405
1401
|
}
|
1406
1402
|
compstmt kEND
|
1407
1403
|
{
|
1408
|
-
|
1404
|
+
args = val[2]
|
1409
1405
|
body = val[4]
|
1410
|
-
result = new_iter nil,
|
1406
|
+
result = new_iter nil, args, body
|
1411
1407
|
result.line = val[1]
|
1412
1408
|
|
1413
1409
|
self.env.unextend
|
@@ -1486,12 +1482,12 @@ rule
|
|
1486
1482
|
}
|
1487
1483
|
compstmt tRCURLY
|
1488
1484
|
{
|
1489
|
-
|
1490
|
-
|
1491
|
-
body = val[4]
|
1485
|
+
_, line, args, _, body, _ = val
|
1486
|
+
|
1492
1487
|
result = new_iter nil, args, body
|
1488
|
+
result.line = line
|
1489
|
+
|
1493
1490
|
self.env.unextend
|
1494
|
-
result.line = val[1]
|
1495
1491
|
}
|
1496
1492
|
| kDO
|
1497
1493
|
{
|
@@ -1504,11 +1500,12 @@ rule
|
|
1504
1500
|
}
|
1505
1501
|
compstmt kEND
|
1506
1502
|
{
|
1507
|
-
args = val
|
1508
|
-
|
1503
|
+
_, line, args, _, body, _ = val
|
1504
|
+
|
1509
1505
|
result = new_iter nil, args, body
|
1506
|
+
result.line = line
|
1507
|
+
|
1510
1508
|
self.env.unextend
|
1511
|
-
result.line = val[1]
|
1512
1509
|
}
|
1513
1510
|
|
1514
1511
|
case_body: kWHEN
|
@@ -1526,7 +1523,7 @@ rule
|
|
1526
1523
|
|
1527
1524
|
opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
|
1528
1525
|
{
|
1529
|
-
klasses, var, body, rest = val
|
1526
|
+
_, klasses, var, _, body, rest = val
|
1530
1527
|
|
1531
1528
|
klasses ||= s(:array)
|
1532
1529
|
klasses << node_assign(var, s(:gvar, :"$!")) if var
|
@@ -1554,11 +1551,9 @@ rule
|
|
1554
1551
|
|
1555
1552
|
opt_ensure: kENSURE compstmt
|
1556
1553
|
{
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
result = s(:nil)
|
1561
|
-
end
|
1554
|
+
_, body = val
|
1555
|
+
|
1556
|
+
result = body || s(:nil)
|
1562
1557
|
}
|
1563
1558
|
| none
|
1564
1559
|
|
@@ -1707,7 +1702,7 @@ regexp_contents: none
|
|
1707
1702
|
when nil then
|
1708
1703
|
result = s(:evstr)
|
1709
1704
|
else
|
1710
|
-
raise "unknown
|
1705
|
+
raise "unknown string body: #{val[2].inspect}"
|
1711
1706
|
end
|
1712
1707
|
}
|
1713
1708
|
|
@@ -1770,7 +1765,15 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1770
1765
|
| kFALSE { result = s(:false) }
|
1771
1766
|
| k__FILE__ { result = s(:str, self.file) }
|
1772
1767
|
| k__LINE__ { result = s(:lit, lexer.src.current_line) }
|
1773
|
-
| k__ENCODING__
|
1768
|
+
| k__ENCODING__
|
1769
|
+
{
|
1770
|
+
result =
|
1771
|
+
if defined? Encoding then
|
1772
|
+
s(:const, Encoding::UTF_8)
|
1773
|
+
else
|
1774
|
+
s(:str, "Unsupported!")
|
1775
|
+
end
|
1776
|
+
}
|
1774
1777
|
|
1775
1778
|
var_ref: user_variable
|
1776
1779
|
{
|
@@ -1826,63 +1829,63 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1826
1829
|
|
1827
1830
|
f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1828
1831
|
{
|
1829
|
-
result =
|
1832
|
+
result = args val
|
1830
1833
|
}
|
1831
1834
|
| f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1832
1835
|
{
|
1833
|
-
result =
|
1836
|
+
result = args val
|
1834
1837
|
}
|
1835
1838
|
| f_arg tCOMMA f_optarg opt_f_block_arg
|
1836
1839
|
{
|
1837
|
-
result =
|
1840
|
+
result = args val
|
1838
1841
|
}
|
1839
1842
|
| f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg
|
1840
1843
|
{
|
1841
|
-
result =
|
1844
|
+
result = args val
|
1842
1845
|
}
|
1843
1846
|
| f_arg tCOMMA f_rest_arg opt_f_block_arg
|
1844
1847
|
{
|
1845
|
-
result =
|
1848
|
+
result = args val
|
1846
1849
|
}
|
1847
1850
|
| f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1848
1851
|
{
|
1849
|
-
result =
|
1852
|
+
result = args val
|
1850
1853
|
}
|
1851
1854
|
| f_arg opt_f_block_arg
|
1852
1855
|
{
|
1853
|
-
result =
|
1856
|
+
result = args val
|
1854
1857
|
}
|
1855
1858
|
| f_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1856
1859
|
{
|
1857
|
-
result =
|
1860
|
+
result = args val
|
1858
1861
|
}
|
1859
1862
|
| f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1860
1863
|
{
|
1861
|
-
result =
|
1864
|
+
result = args val
|
1862
1865
|
}
|
1863
1866
|
| f_optarg opt_f_block_arg
|
1864
1867
|
{
|
1865
|
-
result =
|
1868
|
+
result = args val
|
1866
1869
|
}
|
1867
1870
|
| f_optarg tCOMMA f_arg opt_f_block_arg
|
1868
1871
|
{
|
1869
|
-
result =
|
1872
|
+
result = args val
|
1870
1873
|
}
|
1871
1874
|
| f_rest_arg opt_f_block_arg
|
1872
1875
|
{
|
1873
|
-
result =
|
1876
|
+
result = args val
|
1874
1877
|
}
|
1875
1878
|
| f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1876
1879
|
{
|
1877
|
-
result =
|
1880
|
+
result = args val
|
1878
1881
|
}
|
1879
1882
|
| f_block_arg
|
1880
1883
|
{
|
1881
|
-
result =
|
1884
|
+
result = args val
|
1882
1885
|
}
|
1883
1886
|
|
|
1884
1887
|
{
|
1885
|
-
result =
|
1888
|
+
result = args val
|
1886
1889
|
}
|
1887
1890
|
|
1888
1891
|
f_bad_arg: tCONSTANT
|
@@ -1912,9 +1915,6 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1912
1915
|
}
|
1913
1916
|
|
1914
1917
|
f_arg_item: f_norm_arg
|
1915
|
-
# { # TODO
|
1916
|
-
# result = assignable val[0]
|
1917
|
-
# }
|
1918
1918
|
| tLPAREN f_margs rparen
|
1919
1919
|
{
|
1920
1920
|
result = val[1]
|
@@ -1925,7 +1925,7 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1925
1925
|
case val[0]
|
1926
1926
|
when Symbol then
|
1927
1927
|
result = s(:args)
|
1928
|
-
result << val[0]
|
1928
|
+
result << val[0]
|
1929
1929
|
when Sexp then
|
1930
1930
|
result = val[0]
|
1931
1931
|
else
|
@@ -1934,8 +1934,15 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1934
1934
|
}
|
1935
1935
|
| f_arg tCOMMA f_arg_item
|
1936
1936
|
{
|
1937
|
-
|
1938
|
-
|
1937
|
+
list, _, item = val
|
1938
|
+
|
1939
|
+
if list.sexp_type == :args then
|
1940
|
+
result = list
|
1941
|
+
else
|
1942
|
+
result = s(:args, list)
|
1943
|
+
end
|
1944
|
+
|
1945
|
+
result << item
|
1939
1946
|
}
|
1940
1947
|
|
1941
1948
|
f_opt: tIDENTIFIER tEQL arg_value
|
@@ -1991,7 +1998,7 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1991
1998
|
identifier = val[1].to_sym
|
1992
1999
|
|
1993
2000
|
self.env[identifier] = :lvar
|
1994
|
-
result =
|
2001
|
+
result = "&#{identifier}".to_sym
|
1995
2002
|
}
|
1996
2003
|
|
1997
2004
|
opt_f_block_arg: tCOMMA f_block_arg
|
data/lib/ruby_parser_extras.rb
CHANGED
@@ -85,7 +85,7 @@ class RPStringScanner < StringScanner
|
|
85
85
|
end
|
86
86
|
|
87
87
|
module RubyParserStuff
|
88
|
-
VERSION = '3.0.0.
|
88
|
+
VERSION = '3.0.0.a10' unless constants.include? "VERSION" # SIGH
|
89
89
|
|
90
90
|
attr_accessor :lexer, :in_def, :in_single, :file
|
91
91
|
attr_reader :env, :comments
|
@@ -115,154 +115,76 @@ module RubyParserStuff
|
|
115
115
|
node1
|
116
116
|
end
|
117
117
|
|
118
|
-
def
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
ary << splat
|
118
|
+
def clean_mlhs sexp
|
119
|
+
case sexp.sexp_type
|
120
|
+
when :masgn then
|
121
|
+
if sexp.size == 2 and sexp[1].sexp_type == :array then
|
122
|
+
s(:masgn, *sexp[1][1..-1].map { |sub| clean_mlhs sub })
|
124
123
|
else
|
125
|
-
|
124
|
+
sexp
|
126
125
|
end
|
126
|
+
when :gasgn, :iasgn, :lasgn, :cvasgn then
|
127
|
+
if sexp.size == 2 then
|
128
|
+
sexp.last
|
129
|
+
else
|
130
|
+
sexp # optional value
|
131
|
+
end
|
132
|
+
else
|
133
|
+
raise "unsupported type: #{sexp.inspect}"
|
127
134
|
end
|
135
|
+
end
|
128
136
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
result = if ary.length > 2 or ary.splat then
|
135
|
-
s(:masgn, ary)
|
136
|
-
else
|
137
|
-
ary.last
|
138
|
-
end
|
139
|
-
|
137
|
+
def block_var *args
|
138
|
+
result = self.args args
|
139
|
+
result[0] = :masgn
|
140
140
|
result
|
141
141
|
end
|
142
142
|
|
143
|
-
def
|
144
|
-
|
143
|
+
def block_var18 ary, splat, block
|
144
|
+
ary ||= s(:array)
|
145
145
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
raise "wtf? #{lasgn.inspect}" unless lasgn[0] == :lasgn
|
150
|
-
result << lasgn[1]
|
151
|
-
end
|
146
|
+
if splat then
|
147
|
+
splat = splat[1] unless Symbol === splat
|
148
|
+
ary << "*#{splat}".to_sym
|
152
149
|
end
|
153
150
|
|
154
|
-
|
151
|
+
ary << "&#{block[1]}".to_sym if block
|
155
152
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
153
|
+
if ary.length > 2 or ary.splat then # HACK
|
154
|
+
s(:masgn, *ary[1..-1])
|
155
|
+
else
|
156
|
+
ary.last
|
157
|
+
end
|
161
158
|
end
|
162
159
|
|
163
|
-
def
|
160
|
+
def args args
|
164
161
|
result = s(:args)
|
165
|
-
block = nil
|
166
162
|
|
167
|
-
|
168
|
-
case
|
163
|
+
args.each do |arg|
|
164
|
+
case arg
|
169
165
|
when Sexp then
|
170
|
-
case
|
171
|
-
when :args then
|
172
|
-
|
173
|
-
result << name
|
174
|
-
end
|
166
|
+
case arg.sexp_type
|
167
|
+
when :args, :block, :array then
|
168
|
+
result.concat arg[1..-1]
|
175
169
|
when :block_arg then
|
176
|
-
result << :"&#{
|
177
|
-
when :
|
178
|
-
|
179
|
-
val[1..-1].each do |lasgn| # FIX clean sexp iter
|
180
|
-
raise "wtf? #{val.inspect}" unless lasgn[0] == :lasgn
|
181
|
-
result << lasgn[1]
|
182
|
-
end
|
183
|
-
when :lasgn then
|
184
|
-
result << val
|
170
|
+
result << :"&#{arg.last}"
|
171
|
+
when :masgn then
|
172
|
+
result << arg
|
185
173
|
else
|
186
|
-
raise "unhandled
|
174
|
+
raise "unhandled: #{arg.inspect}"
|
187
175
|
end
|
188
176
|
when Symbol then
|
189
|
-
result <<
|
177
|
+
result << arg
|
190
178
|
when ",", nil then
|
191
179
|
# ignore
|
192
180
|
else
|
193
|
-
raise "unhandled
|
181
|
+
raise "unhandled: #{arg.inspect}"
|
194
182
|
end
|
195
183
|
end
|
196
184
|
|
197
|
-
result << block if block
|
198
|
-
|
199
185
|
result
|
200
186
|
end
|
201
187
|
|
202
|
-
def block_args19 val, id
|
203
|
-
# HACK OMG THIS CODE IS SOOO UGLY! CLEAN ME
|
204
|
-
untested = %w[1 2 3 4 7 9 10 12 14]
|
205
|
-
raise "no block_args19 #{id}\non: #{val.inspect}" if untested.include? id
|
206
|
-
|
207
|
-
r = s(:array)
|
208
|
-
|
209
|
-
val.compact.each do |v|
|
210
|
-
next if %w[,].include? v
|
211
|
-
case v
|
212
|
-
when Sexp then
|
213
|
-
case v.first
|
214
|
-
when :args then
|
215
|
-
r.concat v[1..-1].map { |s| # FIX: this is a smell
|
216
|
-
case s
|
217
|
-
when Symbol then
|
218
|
-
s(:lasgn, s)
|
219
|
-
when Sexp then
|
220
|
-
s
|
221
|
-
else
|
222
|
-
raise "unhandled type: #{s.inspect}"
|
223
|
-
end
|
224
|
-
}
|
225
|
-
when :block_arg then
|
226
|
-
r << s(:lasgn, :"&#{v.last}")
|
227
|
-
when :lasgn then
|
228
|
-
r << s(:masgn, s(:array, v))
|
229
|
-
when :masgn then
|
230
|
-
r << v
|
231
|
-
else
|
232
|
-
raise "block_args19 #{id} unhandled sexp type:: #{v.inspect}"
|
233
|
-
end
|
234
|
-
when Symbol
|
235
|
-
case v.to_s
|
236
|
-
when /^\*(.+)/ then
|
237
|
-
r << s(:splat, s(:lasgn, $1.to_sym))
|
238
|
-
when /^\*/ then
|
239
|
-
r << s(:splat)
|
240
|
-
else
|
241
|
-
raise "block_args19 #{id} unhandled symbol type:: #{v.inspect}"
|
242
|
-
end
|
243
|
-
else
|
244
|
-
raise "block_args19 #{id} unhandled type:: #{v.inspect}"
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
if r.size > 2 then
|
249
|
-
r = s(:masgn, r)
|
250
|
-
elsif r.size == 2 then
|
251
|
-
case r.last.first
|
252
|
-
when :splat then
|
253
|
-
r = s(:masgn, r)
|
254
|
-
when :lasgn, :masgn then
|
255
|
-
r = r.last
|
256
|
-
else
|
257
|
-
raise "oh noes!: #{r.inspect}"
|
258
|
-
end
|
259
|
-
else
|
260
|
-
raise "totally borked: #{r.inspect}"
|
261
|
-
end
|
262
|
-
|
263
|
-
r
|
264
|
-
end
|
265
|
-
|
266
188
|
def aryset receiver, index
|
267
189
|
s(:attrasgn, receiver, :"[]=", *index[1..-1])
|
268
190
|
end
|
@@ -683,10 +605,18 @@ module RubyParserStuff
|
|
683
605
|
end
|
684
606
|
|
685
607
|
def new_iter call, args, body
|
608
|
+
body ||= nil
|
609
|
+
|
610
|
+
args ||= s(:args)
|
611
|
+
args = s(:args, args) if Symbol === args
|
612
|
+
|
686
613
|
result = s(:iter)
|
687
614
|
result << call if call
|
688
615
|
result << args
|
689
616
|
result << body if body
|
617
|
+
|
618
|
+
args[0] = :args unless args == 0
|
619
|
+
|
690
620
|
result
|
691
621
|
end
|
692
622
|
|