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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73ca61e5ab86f82798f86bc14407c958d2b08a40
4
- data.tar.gz: 9d88b4bc43581891ee5612e9c1c1d2288aa6fcc7
3
+ metadata.gz: dd2d228218210c32b6e5257ffd3c910a84fe19a9
4
+ data.tar.gz: 761ee5efcfcc19a1b849c375e14dff4dfaff4290
5
5
  SHA512:
6
- metadata.gz: c5c8232ddd5b94e0aff2dddec620201e99ad7db4bc4d7362e2feb2d5d4fb7456f861d6905750325cc4429e4f9a2946d9ff475d6ae3f5914af78c45fbe3e3a21e
7
- data.tar.gz: 61255e34c1b006ec82b946aa173c6e2e4a48f7491db05392e0d667c3e834dfbb598e204eefd6e871a8d4bec2d254e71a1de5e65bf1db8917dfe06b76f26b34b1
6
+ metadata.gz: d37084ea8b0ed43ade75af6e1a320f50eafa88373ebfcf4fd630e599d918866f12e0bd00457048a2651d8d775cc1c215c846cb6bd50f85df31665781596d7881
7
+ data.tar.gz: 562737dae75b78b7672b77adf556614a27f1679ce9283e125171358ae393b48b841f208baf6a726698838c73e8e332e872e0b95748b67817ff1c7d271e4eda0e
@@ -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.2.0 (2016-01-16)
119
+ v2.3.3.0 (2016-01-16)
109
120
  ---------------------
110
121
 
111
122
  v2.3.0.1 (2016-01-14)
@@ -55,7 +55,7 @@ module Parser
55
55
  CurrentRuby = Ruby22
56
56
 
57
57
  when /^2\.3\./
58
- current_version = '2.3.2'
58
+ current_version = '2.3.3'
59
59
  if RUBY_VERSION != current_version
60
60
  warn_syntax_deviation 'parser/ruby23', current_version
61
61
  end
@@ -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
- => { emit(:tLBRACE_ARG, '{'.freeze)
1569
- fnext expr_value; };
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)
@@ -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[1], val[2] ]
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[1], val[2] ]
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
 
@@ -1,3 +1,3 @@
1
1
  module Parser
2
- VERSION = '2.3.2.0'
2
+ VERSION = '2.3.3.0'
3
3
  end
@@ -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.2.0
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-20 00:00:00.000000000 Z
11
+ date: 2016-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast