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 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