parser 2.3.2.0 → 2.3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/lib/parser/current.rb +1 -1
- data/lib/parser/lexer.rl +9 -2
- data/lib/parser/ruby24.y +35 -17
- data/lib/parser/version.rb +1 -1
- data/test/test_parser.rb +105 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd2d228218210c32b6e5257ffd3c910a84fe19a9
|
4
|
+
data.tar.gz: 761ee5efcfcc19a1b849c375e14dff4dfaff4290
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d37084ea8b0ed43ade75af6e1a320f50eafa88373ebfcf4fd630e599d918866f12e0bd00457048a2651d8d775cc1c215c846cb6bd50f85df31665781596d7881
|
7
|
+
data.tar.gz: 562737dae75b78b7672b77adf556614a27f1679ce9283e125171358ae393b48b841f208baf6a726698838c73e8e332e872e0b95748b67817ff1c7d271e4eda0e
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
v2.3.3.0 (2016-11-28)
|
5
|
+
---------------------
|
6
|
+
|
7
|
+
API modifications:
|
8
|
+
* parser/current: update 2.3 branch to 2.3.3. (Philip Arndt)
|
9
|
+
|
10
|
+
Bugs fixed:
|
11
|
+
* ruby24.y: "a += b += raise :x": fix errors with chained op-assignments. (whitequark)
|
12
|
+
* ruby24.y: "p p{p(p);p p}, tap do end": preserve cmdarg stack. (whitequark)
|
13
|
+
* ruby24.y: "a b{c d}, :e do end": go to EXPR_ENDARG after literal. (whitequark)
|
14
|
+
|
4
15
|
v2.3.2.0 (2016-11-20)
|
5
16
|
---------------------
|
6
17
|
|
@@ -105,7 +116,7 @@ Bugs fixed:
|
|
105
116
|
* Add :csend to Parser::Meta::NODE_TYPES (Markus Schirp)
|
106
117
|
* lexer/dedenter: "\<\<x\n y\\n z\nx": don't dedent after escaped newline. (whitequark)
|
107
118
|
|
108
|
-
v2.3.
|
119
|
+
v2.3.3.0 (2016-01-16)
|
109
120
|
---------------------
|
110
121
|
|
111
122
|
v2.3.0.1 (2016-01-14)
|
data/lib/parser/current.rb
CHANGED
data/lib/parser/lexer.rl
CHANGED
@@ -1565,8 +1565,15 @@ class Parser::Lexer
|
|
1565
1565
|
# `do` (as `kDO_BLOCK` in `expr_beg`).
|
1566
1566
|
expr_endarg := |*
|
1567
1567
|
e_lbrace
|
1568
|
-
=> {
|
1569
|
-
|
1568
|
+
=> {
|
1569
|
+
if @lambda_stack.last == @paren_nest
|
1570
|
+
@lambda_stack.pop
|
1571
|
+
emit(:tLAMBEG, '{'.freeze)
|
1572
|
+
else
|
1573
|
+
emit(:tLBRACE_ARG, '{'.freeze)
|
1574
|
+
end
|
1575
|
+
fnext expr_value;
|
1576
|
+
};
|
1570
1577
|
|
1571
1578
|
'do'
|
1572
1579
|
=> { emit_do(true)
|
data/lib/parser/ruby24.y
CHANGED
@@ -183,6 +183,21 @@ rule
|
|
183
183
|
{
|
184
184
|
result = @builder.multi_assign(val[0], val[1], val[2])
|
185
185
|
}
|
186
|
+
| lhs tEQL mrhs
|
187
|
+
{
|
188
|
+
result = @builder.assign(val[0], val[1],
|
189
|
+
@builder.array(nil, val[2], nil))
|
190
|
+
}
|
191
|
+
| mlhs tEQL mrhs_arg
|
192
|
+
{
|
193
|
+
result = @builder.multi_assign(val[0], val[1], val[2])
|
194
|
+
}
|
195
|
+
| expr
|
196
|
+
|
197
|
+
command_asgn: lhs tEQL command_rhs
|
198
|
+
{
|
199
|
+
result = @builder.assign(val[0], val[1], val[2])
|
200
|
+
}
|
186
201
|
| var_lhs tOP_ASGN command_rhs
|
187
202
|
{
|
188
203
|
result = @builder.op_assign(val[0], val[1], val[2])
|
@@ -225,21 +240,6 @@ rule
|
|
225
240
|
{
|
226
241
|
@builder.op_assign(val[0], val[1], val[2])
|
227
242
|
}
|
228
|
-
| lhs tEQL mrhs
|
229
|
-
{
|
230
|
-
result = @builder.assign(val[0], val[1],
|
231
|
-
@builder.array(nil, val[2], nil))
|
232
|
-
}
|
233
|
-
| mlhs tEQL mrhs_arg
|
234
|
-
{
|
235
|
-
result = @builder.multi_assign(val[0], val[1], val[2])
|
236
|
-
}
|
237
|
-
| expr
|
238
|
-
|
239
|
-
command_asgn: lhs tEQL command_rhs
|
240
|
-
{
|
241
|
-
result = @builder.assign(val[0], val[1], val[2])
|
242
|
-
}
|
243
243
|
|
244
244
|
command_rhs: command_call =tOP_ASGN
|
245
245
|
| command_call kRESCUE_MOD stmt
|
@@ -1587,21 +1587,33 @@ opt_block_args_tail:
|
|
1587
1587
|
brace_body: {
|
1588
1588
|
@static_env.extend_dynamic
|
1589
1589
|
}
|
1590
|
+
{
|
1591
|
+
result = @lexer.cmdarg.dup
|
1592
|
+
@lexer.cmdarg.clear
|
1593
|
+
}
|
1590
1594
|
opt_block_param compstmt
|
1591
1595
|
{
|
1592
|
-
result = [ val[
|
1596
|
+
result = [ val[2], val[3] ]
|
1593
1597
|
|
1594
1598
|
@static_env.unextend
|
1599
|
+
@lexer.cmdarg = val[1]
|
1600
|
+
@lexer.cmdarg.pop
|
1595
1601
|
}
|
1596
1602
|
|
1597
1603
|
do_body: {
|
1598
1604
|
@static_env.extend_dynamic
|
1599
1605
|
}
|
1606
|
+
{
|
1607
|
+
result = @lexer.cmdarg.dup
|
1608
|
+
@lexer.cmdarg.clear
|
1609
|
+
}
|
1600
1610
|
opt_block_param compstmt
|
1601
1611
|
{
|
1602
|
-
result = [ val[
|
1612
|
+
result = [ val[2], val[3] ]
|
1603
1613
|
|
1604
1614
|
@static_env.unextend
|
1615
|
+
@lexer.cmdarg = val[1]
|
1616
|
+
@lexer.cmdarg.pop
|
1605
1617
|
}
|
1606
1618
|
|
1607
1619
|
case_body: kWHEN args then compstmt cases
|
@@ -1828,11 +1840,13 @@ regexp_contents: # nothing
|
|
1828
1840
|
|
1829
1841
|
symbol: tSYMBOL
|
1830
1842
|
{
|
1843
|
+
@lexer.state = :expr_endarg
|
1831
1844
|
result = @builder.symbol(val[0])
|
1832
1845
|
}
|
1833
1846
|
|
1834
1847
|
dsym: tSYMBEG xstring_contents tSTRING_END
|
1835
1848
|
{
|
1849
|
+
@lexer.state = :expr_endarg
|
1836
1850
|
result = @builder.symbol_compose(val[0], val[1], val[2])
|
1837
1851
|
}
|
1838
1852
|
|
@@ -1847,18 +1861,22 @@ regexp_contents: # nothing
|
|
1847
1861
|
|
1848
1862
|
simple_numeric: tINTEGER
|
1849
1863
|
{
|
1864
|
+
@lexer.state = :expr_endarg
|
1850
1865
|
result = @builder.integer(val[0])
|
1851
1866
|
}
|
1852
1867
|
| tFLOAT
|
1853
1868
|
{
|
1869
|
+
@lexer.state = :expr_endarg
|
1854
1870
|
result = @builder.float(val[0])
|
1855
1871
|
}
|
1856
1872
|
| tRATIONAL
|
1857
1873
|
{
|
1874
|
+
@lexer.state = :expr_endarg
|
1858
1875
|
result = @builder.rational(val[0])
|
1859
1876
|
}
|
1860
1877
|
| tIMAGINARY
|
1861
1878
|
{
|
1879
|
+
@lexer.state = :expr_endarg
|
1862
1880
|
result = @builder.complex(val[0])
|
1863
1881
|
}
|
1864
1882
|
|
data/lib/parser/version.rb
CHANGED
data/test/test_parser.rb
CHANGED
@@ -5489,6 +5489,73 @@ class TestParser < Minitest::Test
|
|
5489
5489
|
SINCE_2_1) # no 1.9 backport
|
5490
5490
|
end
|
5491
5491
|
|
5492
|
+
def test_ruby_bug_11873_a
|
5493
|
+
[[":e", s(:sym, :e)],
|
5494
|
+
["1", s(:int, 1)],
|
5495
|
+
["1.0", s(:float, 1.0)],
|
5496
|
+
["1.0r", s(:rational, Rational(1, 1))],
|
5497
|
+
["1.0i", s(:complex, Complex(0.0, 1.0))]].each do |code, node|
|
5498
|
+
expect_a = \
|
5499
|
+
s(:block,
|
5500
|
+
s(:send, nil, :a,
|
5501
|
+
s(:block,
|
5502
|
+
s(:send, nil, :b),
|
5503
|
+
s(:args),
|
5504
|
+
s(:send, nil, :c,
|
5505
|
+
s(:send, nil, :d))),
|
5506
|
+
node),
|
5507
|
+
s(:args), nil)
|
5508
|
+
assert_parses(
|
5509
|
+
expect_a,
|
5510
|
+
%Q{a b{c d}, #{code} do end},
|
5511
|
+
%q{},
|
5512
|
+
SINCE_2_4)
|
5513
|
+
assert_parses(
|
5514
|
+
expect_a,
|
5515
|
+
%Q{a b{c(d)}, #{code} do end},
|
5516
|
+
%q{},
|
5517
|
+
SINCE_2_4)
|
5518
|
+
|
5519
|
+
expect_b = \
|
5520
|
+
s(:block,
|
5521
|
+
s(:send, nil, :a,
|
5522
|
+
s(:send, nil, :b,
|
5523
|
+
s(:send, nil, :c,
|
5524
|
+
s(:send, nil, :d))),
|
5525
|
+
node),
|
5526
|
+
s(:args), nil)
|
5527
|
+
assert_parses(
|
5528
|
+
expect_b,
|
5529
|
+
%Q{a b(c d), #{code} do end},
|
5530
|
+
%q{},
|
5531
|
+
SINCE_2_4)
|
5532
|
+
assert_parses(
|
5533
|
+
expect_b,
|
5534
|
+
%Q{a b(c(d)), #{code} do end},
|
5535
|
+
%q{},
|
5536
|
+
SINCE_2_4)
|
5537
|
+
end
|
5538
|
+
end
|
5539
|
+
|
5540
|
+
def test_ruby_bug_11873_b
|
5541
|
+
assert_parses(
|
5542
|
+
s(:block,
|
5543
|
+
s(:send, nil, :p,
|
5544
|
+
s(:block,
|
5545
|
+
s(:send, nil, :p),
|
5546
|
+
s(:args),
|
5547
|
+
s(:begin,
|
5548
|
+
s(:send, nil, :p,
|
5549
|
+
s(:send, nil, :p)),
|
5550
|
+
s(:send, nil, :p,
|
5551
|
+
s(:send, nil, :p)))),
|
5552
|
+
s(:send, nil, :tap)),
|
5553
|
+
s(:args), nil),
|
5554
|
+
%q{p p{p(p);p p}, tap do end},
|
5555
|
+
%q{},
|
5556
|
+
SINCE_2_4)
|
5557
|
+
end
|
5558
|
+
|
5492
5559
|
def test_ruby_bug_11989
|
5493
5560
|
assert_parses(
|
5494
5561
|
s(:send, nil, :p,
|
@@ -5716,6 +5783,44 @@ class TestParser < Minitest::Test
|
|
5716
5783
|
SINCE_2_4)
|
5717
5784
|
end
|
5718
5785
|
|
5786
|
+
def test_ruby_bug_12669
|
5787
|
+
assert_parses(
|
5788
|
+
s(:lvasgn, :a,
|
5789
|
+
s(:lvasgn, :b,
|
5790
|
+
s(:send, nil, :raise,
|
5791
|
+
s(:sym, :x)))),
|
5792
|
+
%q{a = b = raise :x},
|
5793
|
+
%q{},
|
5794
|
+
SINCE_2_0)
|
5795
|
+
|
5796
|
+
assert_parses(
|
5797
|
+
s(:op_asgn, s(:lvasgn, :a), :+,
|
5798
|
+
s(:lvasgn, :b,
|
5799
|
+
s(:send, nil, :raise,
|
5800
|
+
s(:sym, :x)))),
|
5801
|
+
%q{a += b = raise :x},
|
5802
|
+
%q{},
|
5803
|
+
SINCE_2_4)
|
5804
|
+
|
5805
|
+
assert_parses(
|
5806
|
+
s(:lvasgn, :a,
|
5807
|
+
s(:op_asgn, s(:lvasgn, :b), :+,
|
5808
|
+
s(:send, nil, :raise,
|
5809
|
+
s(:sym, :x)))),
|
5810
|
+
%q{a = b += raise :x},
|
5811
|
+
%q{},
|
5812
|
+
SINCE_2_4)
|
5813
|
+
|
5814
|
+
assert_parses(
|
5815
|
+
s(:op_asgn, s(:lvasgn, :a), :+,
|
5816
|
+
s(:op_asgn, s(:lvasgn, :b), :+,
|
5817
|
+
s(:send, nil, :raise,
|
5818
|
+
s(:sym, :x)))),
|
5819
|
+
%q{a += b += raise :x},
|
5820
|
+
%q{},
|
5821
|
+
SINCE_2_4)
|
5822
|
+
end
|
5823
|
+
|
5719
5824
|
def test_ruby_bug_12686
|
5720
5825
|
assert_parses(
|
5721
5826
|
s(:send, nil, :f,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- whitequark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ast
|