parser 2.4.0.0 → 2.4.0.1

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: 255b58022cc99fb078d57e0fcc881d5892401872
4
- data.tar.gz: e00f38a300cc9c62b6bab48a155e6dc3639e51ac
3
+ metadata.gz: 0d6d941bf457d9da60c736d24713d5aa983a961f
4
+ data.tar.gz: fdd23f47888aff4b9845ef491a1cda609c3df29d
5
5
  SHA512:
6
- metadata.gz: ad1ae6b22370cd26b56a39791984aae59e440bd58ce2f738522b71224b07cf3d0db45abf4bf8b2765c659d81dfa4117f57c03da7e7696f63da9ee25389a40a88
7
- data.tar.gz: c3e9d34d73795b90501ce47cae91886198358dd3d5bb62de1e44485b3280537463e79da30ae652c4fc21da017a9d5be0fa57a86acdcdca4439414e5049de6607
6
+ metadata.gz: 34386bd586b1ea4bc287f36141794c8c69ede511cb7a922c9807dae21375a551dcabdd5fb1aa377c16e3ec7d11abaecfed325850497110f29c9eb49cb8742e0c
7
+ data.tar.gz: 17af7b4e7a0a8c6d69d51078a5e0173104af739b73c90061721b8f39603e44aed783ff600998818218b57bfd09af1bd1f2817fd8fce7488f550ac29d697e99df
data/.gitignore CHANGED
@@ -26,5 +26,6 @@ lib/parser/ruby21.rb
26
26
  lib/parser/ruby22.rb
27
27
  lib/parser/ruby23.rb
28
28
  lib/parser/ruby24.rb
29
+ lib/parser/ruby25.rb
29
30
  lib/parser/macruby.rb
30
31
  lib/parser/rubymotion.rb
@@ -1,3 +1,4 @@
1
+ dist: trusty
1
2
  language: ruby
2
3
  rvm:
3
4
  - 1.9.2
@@ -5,18 +6,17 @@ rvm:
5
6
  - 2.0.0
6
7
  - 2.2.5
7
8
  - 2.3.1
9
+ - 2.4.0
8
10
  - ruby-head
9
- - jruby-18mode
10
- - jruby-19mode
11
+ - jruby-9.1.14.0
11
12
  - rbx-2
12
13
  matrix:
13
14
  allow_failures:
14
15
  - rvm: ruby-head
15
16
  - rvm: rbx-2
16
17
  before_install:
17
- - gem update bundler
18
+ - gem install bundler
18
19
  - bundle --version
19
- - gem update --system 2.6.6
20
20
  - gem --version
21
21
  script:
22
22
  - bundle exec rake test_cov
@@ -1,6 +1,24 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Not released (2017-11-13)
5
+ -------------------------
6
+
7
+ API modifications:
8
+ * parser/current: update for 2.3.4 release. (whitequark)
9
+ * parser/current: update for Ruby 2.1.10 and 2.2.7. (Koichi ITO)
10
+
11
+ Features implemented:
12
+ * Allow rescue/else/ensure inside do/end blocks. [Feature #12906] (Ilya Bylich)
13
+ * ruby25.y: branch parser. (Ilya Bylich)
14
+
15
+ Bugs fixed:
16
+ * Source::Comment::Associator: skip -*- magic comments -*-. (Denis Defreyne)
17
+ * lexer.rl: "- 5": allow whitespace after tUNARY_NUM. (whitequark)
18
+ * *ruby*.y, Builders::Default: "+5": don't lose location of the "+". (whitequark)
19
+ * ruby-rewrite: allow passing paths to --load. (whitequark)
20
+ * builders/default: "def x; else; end": don't crash. (whitequark)
21
+
4
22
  v2.4.0.0 (2017-02-07)
5
23
  ---------------------
6
24
 
@@ -41,9 +59,6 @@ Bugs fixed:
41
59
  * ruby24.y: "x = raise y rescue nil": bind rescue tighter than =. (whitequark)
42
60
  * Builders::Default: "begin; else; 1; end": fix a crash. (whitequark)
43
61
 
44
- v2.3.1.4 (2016-09-19)
45
- ---------------------
46
-
47
62
  v2.3.1.3 (2016-09-17)
48
63
  ---------------------
49
64
 
@@ -116,9 +131,6 @@ v2.3.0.5 (2016-02-12)
116
131
  Bugs fixed:
117
132
  * lexer.rl: "%Q{\あ}": fix encoding of UTF-8 noop escapes. (whitequark)
118
133
 
119
- v2.3.0.4 (2016-02-09)
120
- ---------------------
121
-
122
134
  v2.3.0.3 (2016-02-06)
123
135
  ---------------------
124
136
 
@@ -132,9 +144,6 @@ Bugs fixed:
132
144
  * Add :csend to Parser::Meta::NODE_TYPES (Markus Schirp)
133
145
  * lexer/dedenter: "\<\<x\n y\\n z\nx": don't dedent after escaped newline. (whitequark)
134
146
 
135
- v2.4.0.0 (2016-01-16)
136
- ---------------------
137
-
138
147
  v2.3.0.1 (2016-01-14)
139
148
  ---------------------
140
149
 
@@ -264,9 +273,6 @@ v2.2.2.1 (2015-04-18)
264
273
  Bugs fixed:
265
274
  * builders/default: don't falsely diagnose multiline regexps (fixes #190). (whitequark)
266
275
 
267
- v2.2.2.0 (2015-04-15)
268
- ---------------------
269
-
270
276
  v2.2.0.4 (2015-04-15)
271
277
  ---------------------
272
278
 
@@ -274,12 +280,6 @@ Features implemented:
274
280
  * Add Parser::Source::Map#node. (whitequark)
275
281
  * Add Parser::Source::Comment.associate_locations. (kubicle)
276
282
 
277
- v2.2.0.3 (2015-02-13)
278
- ---------------------
279
-
280
- v2.2.0.2 (2015-01-09)
281
- ---------------------
282
-
283
283
  v2.2.0.1 (2014-12-27)
284
284
  ---------------------
285
285
 
@@ -471,9 +471,6 @@ Bugs fixed:
471
471
  * lexer.rl: "->*{}": tLAMBEG at expr_beg (fixes #103). (Peter Zotov)
472
472
  * Source::Rewriter: apply actions in the insertion order. (Josh Cheek)
473
473
 
474
- v2.0.0.pre6 (2013-08-02)
475
- ------------------------
476
-
477
474
  v2.0.0.pre5 (2013-07-31)
478
475
  ------------------------
479
476
 
@@ -559,9 +556,6 @@ Features implemented:
559
556
  Bugs fixed:
560
557
  * Don't treat byte order mark as an identifier (closes #91). (Peter Zotov)
561
558
 
562
- v2.0.0.pre1 (2013-07-04)
563
- ------------------------
564
-
565
559
  v2.0.0.beta10 (2013-07-02)
566
560
  --------------------------
567
561
 
@@ -767,9 +761,6 @@ Bugs fixed:
767
761
  * ruby18.y, ruby19.y: BEGIN{} does not introduce a scope. (Peter Zotov)
768
762
  * lexer.rl: improve whitespace handling. (Peter Zotov)
769
763
 
770
- v0.9.1 (2013-04-15)
771
- -------------------
772
-
773
764
  v0.9.0 (2013-04-15)
774
765
  -------------------
775
766
 
data/Rakefile CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rake/testtask'
5
5
  require 'rake/clean'
6
+ require 'date'
6
7
 
7
8
  task :default => [:test]
8
9
 
@@ -27,17 +28,20 @@ GENERATED_FILES = %w(lib/parser/lexer.rb
27
28
  lib/parser/ruby22.rb
28
29
  lib/parser/ruby23.rb
29
30
  lib/parser/ruby24.rb
31
+ lib/parser/ruby25.rb
30
32
  lib/parser/macruby.rb
31
33
  lib/parser/rubymotion.rb)
32
34
 
33
35
  CLEAN.include(GENERATED_FILES)
34
36
 
37
+ ENCODING_COMMENT = "# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*-\n"
38
+
35
39
  desc 'Generate the Ragel lexer and Racc parser.'
36
40
  task :generate => GENERATED_FILES do
37
41
  Rake::Task[:ragel_check].invoke
38
42
  GENERATED_FILES.each do |filename|
39
43
  content = File.read(filename)
40
- content = "# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*-\n" + content
44
+ content = ENCODING_COMMENT + content unless content.start_with?(ENCODING_COMMENT)
41
45
 
42
46
  File.open(filename, 'w') do |io|
43
47
  io.write content
@@ -98,7 +102,7 @@ task :changelog do
98
102
  date = Date.parse(date)
99
103
 
100
104
  current_version = "#{$1} (#{date})" if version =~ /(v[\d\w.]+)/
101
- current_version = "v#{Parser::VERSION} (#{date})" \
105
+ current_version = "Not released (#{date})" \
102
106
  if version =~ /(^| |\/)#{Regexp.escape branch}$/
103
107
 
104
108
  next if current_version.nil?
@@ -121,6 +125,7 @@ task :changelog do
121
125
  io.puts
122
126
 
123
127
  changelog.each do |version, commits|
128
+ next if commits.empty?
124
129
  io.puts version
125
130
  io.puts '-' * version.length
126
131
  io.puts
@@ -626,15 +626,6 @@ Format:
626
626
  "@a += 1"
627
627
  ~~~
628
628
 
629
- Ruby_parser output for reference:
630
- ~~~
631
- "a += 1"
632
- s(:lasgn, :a, s(:call, s(:lvar, :a), :+, s(:int, 1)))
633
-
634
- "@a += 1"
635
- s(:iasgn, :@a, s(:call, s(:ivar, :@a), :+, s(:int, 1)))
636
- ~~~
637
-
638
629
  #### Method binary operator-assignment
639
630
 
640
631
  Format:
@@ -655,15 +646,6 @@ Format:
655
646
  ~~~~~~~~~~~~~ expression (op-asgn)
656
647
  ~~~
657
648
 
658
- Ruby_parser output for reference:
659
- ~~~
660
- "@a.b += 1"
661
- s(:op_asgn2, s(:ivar, :@a), :b=, :+, s(:int, 1))
662
-
663
- "@a[0, 1] += 1"
664
- s(:op_asgn1, s(:ivar, :@a), s(:arglist, s(:int, 0), s(:int, 1)), :+, s(:int, 1))
665
- ~~~
666
-
667
649
  ### Logical operator-assignment
668
650
 
669
651
  Logical operator-assignment features the same "incomplete assignments" and "incomplete calls" as [multiple assignment](#assignment-1).
@@ -684,15 +666,6 @@ Format:
684
666
  ~~~~~~~ expression
685
667
  ~~~
686
668
 
687
- Ruby_parser output for reference:
688
- ~~~
689
- "@a ||= 1"
690
- s(:op_asgn_or, s(:ivar, :@a), s(:ivasgn, :@a, s(:int, 1)))
691
-
692
- "a &&= 1"
693
- s(:op_asgn_and, s(:lvar, :a), s(:lvasgn, :a, s(:int, 1)))
694
- ~~~
695
-
696
669
  #### Method logical operator-assignment
697
670
 
698
671
  Format:
@@ -721,16 +694,6 @@ Format:
721
694
 
722
695
  ~~~
723
696
 
724
- Ruby_parser output for reference:
725
- ~~~
726
- "@foo.bar &&= 1"
727
- s(:op_asgn2, s(:ivar, :@foo), :bar=, :"&&", s(:int, 1))
728
-
729
- "@foo[0] ||= 1"
730
- s(:op_asgn1, s(:ivar, :@foo), s(:arglist, s(:int, 0)), :"||", s(:int, 1))
731
-
732
- ~~~
733
-
734
697
  ## Class and module definition
735
698
 
736
699
  ### Module
@@ -1135,6 +1098,7 @@ Format:
1135
1098
  ### To superclass
1136
1099
 
1137
1100
  Format of super with arguments:
1101
+
1138
1102
  ~~~
1139
1103
  (super (lvar :a))
1140
1104
  "super a"
@@ -1150,6 +1114,7 @@ Format of super with arguments:
1150
1114
  ~~~
1151
1115
 
1152
1116
  Format of super without arguments (**z**ero-arity):
1117
+
1153
1118
  ~~~
1154
1119
  (zsuper)
1155
1120
  "super"
@@ -5,3 +5,4 @@ require 'parser/ruby21'
5
5
  require 'parser/ruby22'
6
6
  require 'parser/ruby23'
7
7
  require 'parser/ruby24'
8
+ require 'parser/ruby25'
@@ -120,11 +120,18 @@ module Parser
120
120
  end
121
121
  private :numeric
122
122
 
123
- def negate(uminus_t, numeric)
123
+ def unary_num(unary_t, numeric)
124
124
  value, = *numeric
125
- operator_loc = loc(uminus_t)
125
+ operator_loc = loc(unary_t)
126
126
 
127
- numeric.updated(nil, [ -value ],
127
+ case value(unary_t)
128
+ when '+'
129
+ value = +value
130
+ when '-'
131
+ value = -value
132
+ end
133
+
134
+ numeric.updated(nil, [ value ],
128
135
  :location =>
129
136
  Source::Map::Operator.new(
130
137
  operator_loc,
@@ -878,7 +885,7 @@ module Parser
878
885
 
879
886
  def not_op(not_t, begin_t=nil, receiver=nil, end_t=nil)
880
887
  if @parser.version == 18
881
- n(:not, [ receiver ],
888
+ n(:not, [ check_condition(receiver) ],
882
889
  unary_op_map(not_t, receiver))
883
890
  else
884
891
  if receiver.nil?
@@ -888,7 +895,7 @@ module Parser
888
895
  nil_node, :'!'
889
896
  ], send_unary_op_map(not_t, nil_node))
890
897
  else
891
- n(:send, [ receiver, :'!' ],
898
+ n(:send, [ check_condition(receiver), :'!' ],
892
899
  send_map(nil, nil, not_t, begin_t, [receiver], end_t))
893
900
  end
894
901
  end
@@ -1097,6 +1104,8 @@ module Parser
1097
1104
  when :masgn
1098
1105
  if @parser.version <= 23
1099
1106
  diagnostic :error, :masgn_as_condition, nil, cond.loc.expression
1107
+ else
1108
+ cond
1100
1109
  end
1101
1110
 
1102
1111
  when :begin
@@ -1271,6 +1280,10 @@ module Parser
1271
1280
  if begin_t.nil? || end_t.nil?
1272
1281
  if parts.any?
1273
1282
  expr_l = join_exprs(parts.first, parts.last)
1283
+ elsif !begin_t.nil?
1284
+ expr_l = loc(begin_t)
1285
+ elsif !end_t.nil?
1286
+ expr_l = loc(end_t)
1274
1287
  end
1275
1288
  else
1276
1289
  expr_l = loc(begin_t).join(loc(end_t))
@@ -37,7 +37,7 @@ module Parser
37
37
  CurrentRuby = Ruby20
38
38
 
39
39
  when /^2\.1\./
40
- current_version = '2.1.8'
40
+ current_version = '2.1.10'
41
41
  if RUBY_VERSION != current_version
42
42
  warn_syntax_deviation 'parser/ruby21', current_version
43
43
  end
@@ -46,7 +46,7 @@ module Parser
46
46
  CurrentRuby = Ruby21
47
47
 
48
48
  when /^2\.2\./
49
- current_version = '2.2.6'
49
+ current_version = '2.2.8'
50
50
  if RUBY_VERSION != current_version
51
51
  warn_syntax_deviation 'parser/ruby22', current_version
52
52
  end
@@ -55,7 +55,7 @@ module Parser
55
55
  CurrentRuby = Ruby22
56
56
 
57
57
  when /^2\.3\./
58
- current_version = '2.3.3'
58
+ current_version = '2.3.4'
59
59
  if RUBY_VERSION != current_version
60
60
  warn_syntax_deviation 'parser/ruby23', current_version
61
61
  end
@@ -72,6 +72,15 @@ module Parser
72
72
  require 'parser/ruby24'
73
73
  CurrentRuby = Ruby24
74
74
 
75
+ when /^2\.5\./
76
+ current_version = '2.5.0'
77
+ if RUBY_VERSION != current_version
78
+ warn_syntax_deviation 'parser/ruby25', current_version
79
+ end
80
+
81
+ require 'parser/ruby25'
82
+ CurrentRuby = Ruby25
83
+
75
84
  else # :nocov:
76
85
  # Keep this in sync with released Ruby.
77
86
  warn_syntax_deviation 'parser/ruby24', '2.4.x'
@@ -1621,16 +1621,11 @@ class Parser::Lexer
1621
1621
  # explodes.
1622
1622
  #
1623
1623
  expr_beg := |*
1624
- # Numeric processing. Converts:
1625
- # +5 to [tINTEGER, 5]
1626
- # -5 to [tUMINUS_NUM] [tINTEGER, 5]
1627
- [+\-][0-9]
1624
+ # +5, -5, - 5
1625
+ [+\-] w_any* [0-9]
1628
1626
  => {
1629
- fhold;
1630
- if tok.start_with? '-'.freeze
1631
- emit(:tUMINUS_NUM, '-'.freeze, @ts, @ts + 1)
1632
- fnext expr_end; fbreak;
1633
- end
1627
+ emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1)
1628
+ fhold; fnext expr_end; fbreak;
1634
1629
  };
1635
1630
 
1636
1631
  # splat *a
@@ -187,7 +187,7 @@ module Parser
187
187
  @buffer_s ||= ts
188
188
  @buffer_e = te
189
189
 
190
- @buffer += string
190
+ @buffer << string
191
191
  end
192
192
 
193
193
  def flush_string
@@ -7,7 +7,7 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
7
7
  kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
8
8
  k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
9
9
  tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
10
- tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ
10
+ tUPLUS tUMINUS tUNARY_NUM tPOW tCMP tEQ tEQQ tNEQ
11
11
  tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF
12
12
  tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN
13
13
  tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE
@@ -21,7 +21,7 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
21
21
  prechigh
22
22
  right tBANG tTILDE tUPLUS
23
23
  right tPOW
24
- right tUMINUS_NUM tUMINUS
24
+ right tUNARY_NUM tUMINUS
25
25
  left tSTAR2 tDIVIDE tPERCENT
26
26
  left tPLUS tMINUS
27
27
  left tLSHFT tRSHFT
@@ -670,14 +670,14 @@ rule
670
670
  {
671
671
  result = @builder.binary_op(val[0], val[1], val[2])
672
672
  }
673
- | tUMINUS_NUM tINTEGER tPOW arg
673
+ | tUNARY_NUM tINTEGER tPOW arg
674
674
  {
675
675
  result = @builder.unary_op(val[0],
676
676
  @builder.binary_op(
677
677
  @builder.integer(val[1]),
678
678
  val[2], val[3]))
679
679
  }
680
- | tUMINUS_NUM tFLOAT tPOW arg
680
+ | tUNARY_NUM tFLOAT tPOW arg
681
681
  {
682
682
  result = @builder.unary_op(val[0],
683
683
  @builder.binary_op(
@@ -1786,15 +1786,25 @@ regexp_contents: # nothing
1786
1786
  {
1787
1787
  result = @builder.float(val[0])
1788
1788
  }
1789
- | tUMINUS_NUM tINTEGER =tLOWEST
1789
+ | tUNARY_NUM tINTEGER =tLOWEST
1790
1790
  {
1791
- result = @builder.negate(val[0],
1792
- @builder.integer(val[1]))
1791
+ num = @builder.integer(val[1])
1792
+ if @builder.respond_to? :negate
1793
+ # AST builder interface compatibility
1794
+ result = @builder.negate(val[0], num)
1795
+ else
1796
+ result = @builder.unary_num(val[0], num)
1797
+ end
1793
1798
  }
1794
- | tUMINUS_NUM tFLOAT =tLOWEST
1799
+ | tUNARY_NUM tFLOAT =tLOWEST
1795
1800
  {
1796
- result = @builder.negate(val[0],
1797
- @builder.float(val[1]))
1801
+ num = @builder.float(val[1])
1802
+ if @builder.respond_to? :negate
1803
+ # AST builder interface compatibility
1804
+ result = @builder.negate(val[0], num)
1805
+ else
1806
+ result = @builder.unary_num(val[0], num)
1807
+ end
1798
1808
  }
1799
1809
 
1800
1810
  variable: tIDENTIFIER