parser 2.3.2.0 → 2.3.3.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
- 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
|