parser 2.1.7 → 2.1.8

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: ac4eb82e6fd15f277aa857c278d80684dc5b349b
4
- data.tar.gz: ed75c6f998c25d0f72e0f54cd8506cd0854e36d7
3
+ metadata.gz: a2c24a2a5b9b95120c9d67663187d277e1aaa2b6
4
+ data.tar.gz: efdea8029667fad77357e47e70384eb7f7758aba
5
5
  SHA512:
6
- metadata.gz: acddf27f3fee5d79b6716301afd5482d092679dfad471d86f7453558f9a13c4b3d4cb219926fe140767a0c744c10d153c540c9991bab0879adc829484ab9fe72
7
- data.tar.gz: 82f62af04e2d9e249863730c98f7ce55f1aecc4abacc7184cd4a5169d47e41da40a805fd6e3222352aba9683012b482837837844e8c1a4641181649a15bb8f18
6
+ metadata.gz: 8c0dae6f1a903e08aa47b105b96288e49fbc9fa80faf2a8aa34370c84c0ed2b6c83239f20d415b7a55796790c1cda12bae4c7d64f2b612f759a94a765b21a711
7
+ data.tar.gz: 96c119bbdc47f2b9d198e7e1eb7e5b07a376eb8b8c8ce9fd918a84a16b1133b8f1663b7e735428fed2e9d540ebcb87b9fb0b0873f26408a6caff767ce71d1308
@@ -1,450 +1,3 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- v2.1.7 (2014-03-05)
5
- -------------------
6
-
7
- Bugs fixed:
8
- * lexer.rl: make sure all invalid escapes lead to fatal errors (fixes #136). (Peter Zotov)
9
-
10
- v2.1.6 (2014-03-04)
11
- -------------------
12
-
13
- Features implemented:
14
- * Add the list of all node types within Parser::Meta. (Markus Schirp)
15
-
16
- v2.1.5 (2014-02-24)
17
- -------------------
18
-
19
- Bugs fixed:
20
- * Parser::Base, ruby18.y: don't try to lookup Encoding on 1.8 (fixes #133). (Peter Zotov)
21
-
22
- v2.1.4 (2014-01-11)
23
- -------------------
24
-
25
- Features implemented:
26
- * ruby22.y: "x def y; z do end end": save cmdarg stack to isolate command argument state from outer scope. (Peter Zotov)
27
- * Add Ruby 2.2 syntax. (Peter Zotov)
28
-
29
- Bugs fixed:
30
- * Builders::Default: "super do end": super and zsuper are like send (fixes #131). (Peter Zotov)
31
-
32
- v2.1.3 (2014-01-10)
33
- -------------------
34
-
35
- Bugs fixed:
36
- * lexer.rl: "/\//": don't include escaped delimiter in AST in its escaped form (fixes #125). (Peter Zotov)
37
- * Builders::Default: "return x y do end": correctly build AST for keywords followed by command (closes #129). (Peter Zotov)
38
- * Fix a bug where "ambiguous first argument" diagnostic was not emitted (Yuji Nakayama)
39
- * Source::Comment::Associator: don't die while associating with "__ENCODING__". (Peter Zotov)
40
- * ruby-parse: don't die when invoked with -L -e "__ENCODING__". (Peter Zotov)
41
- * Add missing source map for match-current-line (Yuji Nakayama)
42
-
43
- v2.1.2 (2014-01-05)
44
- -------------------
45
-
46
- Bugs fixed:
47
- * lexer.rl: in "foo!= x", foo is tIDENTIFIER, not tFID (closes #126). (Peter Zotov)
48
-
49
- v2.1.1 (2013-12-25)
50
- -------------------
51
-
52
- API modifications:
53
- * ruby21.y: Ruby 2.1 is released already. (Peter Zotov)
54
-
55
- v2.1.0 (2013-12-25)
56
- -------------------
57
-
58
- API modifications:
59
- * Parser::Diagnostic: expose reason symbolically (closes #115, #116). (Ian MacLeod)
60
- * lexer.rl: coerce literals to UTF-8 in ASCII-encoded files if they contain \uXXXX (Peter Zotov)
61
-
62
- Bugs fixed:
63
- * builders/default: represent heredocs with dedicated map (fixes #100). (Peter Zotov)
64
-
65
- v2.1.0.pre1 (2013-11-12)
66
- ------------------------
67
-
68
- API modifications:
69
- * lexer.rl: correctly handle __END__ with non-whitespace after it (Peter Zotov)
70
- * lexer.rl: handle \r in middle of a line as mere whitespace (Peter Zotov)
71
- * ruby{18,19,20,21}.y, builders/default: precisely point to tUMINUS_NUM. (Peter Zotov)
72
-
73
- Features implemented:
74
- * lexer.rl, ruby21.y, builders/default: rational/complex literals. (Peter Zotov)
75
-
76
- v2.0.0 (2013-10-06)
77
- -------------------
78
-
79
- API modifications:
80
- * Source::Rewriter: raise an exception if updates clobber each other. (Peter Zotov)
81
- * Source::Range#inspect: use full class name. (Peter Zotov)
82
- * lexer.rl: make EOF tokens actually pointing at EOF and zero-length. (Peter Zotov)
83
- * Source::Range#column_range: raise RangeError if range spans >1 line. (Peter Zotov)
84
- * Source::Comment::Associator: fix argument order. (Peter Zotov)
85
-
86
- Features implemented:
87
- * Source::Comment: implement #inspect. (Peter Zotov)
88
- * Backport Array#bsearch from Ruby 2.0. (Peter Zotov)
89
-
90
- v2.0.0.pre8 (2013-09-15)
91
- ------------------------
92
-
93
- API modifications:
94
- * lexer.rl: make lexing faster and improve parsing speed by ~60%. (Peter Zotov)
95
-
96
- v2.0.0.pre7 (2013-09-10)
97
- ------------------------
98
-
99
- Features implemented:
100
- * Parser::Base: add #parse_with_comments, #parse_file_with_comments. (Trent Ogren)
101
- * lexer.rl (Ruby 2.1): "1end": lex non-exponent `e' separate from number. (Peter Zotov)
102
-
103
- Bugs fixed:
104
- * lexer.rl: "->*{}": tLAMBEG at expr_beg (fixes #103). (Peter Zotov)
105
- * Source::Rewriter: apply actions in the insertion order. (Josh Cheek)
106
-
107
- v2.0.0.pre5 (2013-07-31)
108
- ------------------------
109
-
110
- Bugs fixed:
111
- * Remove a forgotten require. (Peter Zotov)
112
-
113
- v2.0.0.pre4 (2013-07-31)
114
- ------------------------
115
-
116
- API modifications:
117
- * source/comment: make #loc/#location return Source::Map for consistency (fixes #96). (Peter Zotov)
118
-
119
- Features implemented:
120
- * source/comment/associator: skip shebang and encoding line by default (fixes #95). (Peter Zotov)
121
-
122
- Bugs fixed:
123
- * ruby{19,20,21}.y, lexer.rl, builders/default: correct begin for ?a (fixes #92). (Peter Zotov)
124
- * ruby{18,19,20,21}.y, builders/default: don't add spurious begin/end for string parts (refs #92). (Peter Zotov)
125
- * Activate `diagnostics.all_errors_are_fatal` on non-MRI Rubies as a workaround (closes #93). (Peter Zotov)
126
-
127
- v2.0.0.pre3 (2013-07-26)
128
- ------------------------
129
-
130
- API modifications:
131
- * lexer.rl: add simple explicit output encoding for strings. (Peter Zotov)
132
-
133
- Features implemented:
134
- * Source::Buffer: support for -(dos|unix|mac) and utf8-mac encodings. (Peter Zotov)
135
- * Source::Range#resize. (Peter Zotov)
136
- * Significantly improve speed for large (>100k) and very large (>1M) files. (Peter Zotov)
137
-
138
- Bugs fixed:
139
- * ruby21.y: fix typos. (Peter Zotov)
140
- * builders/default: respect regexp encoding. (Peter Zotov)
141
- * lexer.rl: literal EOF (\0, \x04, \x1a) inside literals and comments. (Peter Zotov)
142
- * lexer.rl: "meth (lambda do end)" (1.8), "f x: -> do meth do end end": expr_cmdarg. (Peter Zotov)
143
- * lexer.rl: "\<\<E\nE\r\r\n": extraneous CRs are ignored after heredoc delimiter. (Peter Zotov)
144
- * lexer.rl: "%\nfoo\n": \n can be used as %-literal delimiter. (Peter Zotov)
145
- * source/buffer, lexer.rl: convert CRLF to LF prior to lexing. (Peter Zotov)
146
- * lexer.rl: "\<\<w; "\nfoo\nw\n"": interleaved heredoc and non-heredoc literals. (Peter Zotov)
147
- * builders/default: 1.8 did not descend into &&/|| in conditional context. (Peter Zotov)
148
- * lexer.rl: "1+a:a": respect context sensitivity in 1.8 label fallback. (Peter Zotov)
149
- * lexer.rl: ruby 1.8 is context-sensitive wrt/ locals as well. (Peter Zotov)
150
- * lexer.rl: "eof??a": expr_arg doesn't need space before character literal. (Peter Zotov)
151
- * lexer.rl: interleaved heredoc and interpolated double-quoted string. (Peter Zotov)
152
- * lexer.rl: "#{f:a}": interpolation starts expr_value, not expr_beg. (Peter Zotov)
153
- * lexer.rl: "\cM" is "\r", not an error. (Peter Zotov)
154
- * ruby{20,21}.y: constant op-assignment inside a def is not an error. (Peter Zotov)
155
- * lexer.rl: "when Date:" fix label fallback for 1.8 mode. (Peter Zotov)
156
- * ruby{19,20,21}.y: "->(scope){}; scope :foo": lambda identifier leakage. (Peter Zotov)
157
- * lexer.rl: "eh ?\r\n": don't eat tEH if followed by CRLF. (Peter Zotov)
158
- * lexer.rl: "f \<\<-TABLE\ndo |a,b|\nTABLE\nend": leave FSM after lexing heredoc. (Peter Zotov)
159
- * lexer.rl: "foo %\n bar": don't % at expr_arg as tSTRING_BEG. (Peter Zotov)
160
- * lexer.rl, lexer/literal: use lexer encoding for literal buffer. (Peter Zotov)
161
- * lexer.rl: "\u{9}": one-digit braced unicode escapes. (Peter Zotov)
162
- * Source::Buffer: don't chew \r from source lines. (Peter Zotov)
163
- * builders/default: don't die in eh_keyword_map if else branch is empty. (Peter Zotov)
164
- * lexer.rl: "0777_333": octal literals with internal underscores. (Peter Zotov)
165
- * lexer.rl: "let [] {}": goto tLBRACE_ARG after any closing braces. (Peter Zotov)
166
- * lexer.rl: "while not (1) do end": emit proper kDO* when in cond/cmdarg state. (Peter Zotov)
167
- * lexer.rl: "rescue=>": correctly handle rescue+assoc at expr_beg. (Peter Zotov)
168
- * lexer.rl: "puts 123do end": only trailing `_' and `e' in number are errors. (Peter Zotov)
169
- * lexer.rl: "begin; rescue rescue1; end": accept barewords at expr_mid. (Peter Zotov)
170
- * lexer.rl: "f.x!if 1": correct modifier handling in expr_arg. (Peter Zotov)
171
- * lexer.rl: "=begin\n#=end\n=end": only recognize =end at bol. (Peter Zotov)
172
- * builders/default: don't check for duplicate arguments in 1.8 mode. (Peter Zotov)
173
- * Don't attempt to parse magic encoding comment in 1.8 mode. (Peter Zotov)
174
- * lexer.rl: "\777": octal literals overflow. (Peter Zotov)
175
- * lexer.rl: "foo;\n__END__", "\na:b": whitespace in expr_value. (Peter Zotov)
176
- * lexer.rl: "\xE2\x80\x99": concatenation of byte escape sequences. (Peter Zotov)
177
- * lexer.rl: "E10", "E4U": don't conflate floats and identifiers. (Peter Zotov)
178
- * lexer.rl: "foo.bar= {1=>2}": return fid, = as separate tokens in expr_dot. (Peter Zotov)
179
- * lexer.rl: "def defined?": properly return defined? in expr_fname. (Peter Zotov)
180
- * lexer.rl: "Rainbows! do end", "foo.S?": allow bareword fid in expr_beg/dot. (Peter Zotov)
181
-
182
- v2.0.0.pre2 (2013-07-11)
183
- ------------------------
184
-
185
- Features implemented:
186
- * Allow to differentiate between __FILE__/__LINE__ and literals (closes #89). (Peter Zotov)
187
- * Add attribute `diagnostic' to Parser::SyntaxError (closes #88). (Peter Zotov)
188
-
189
- Bugs fixed:
190
- * Don't treat byte order mark as an identifier (closes #91). (Peter Zotov)
191
-
192
- v2.0.0.beta10 (2013-07-02)
193
- --------------------------
194
-
195
- Bugs fixed:
196
- * ruby-parse, ruby-rewrite: fix require of removed compatibility shim. (Peter Zotov)
197
- * lexer.rl: "def !@; end" unary bang. (Peter Zotov)
198
-
199
- v2.0.0.beta9 (2013-06-28)
200
- -------------------------
201
-
202
- API modifications:
203
- * ruby{18,19,20,21}.y: removed obsolete warnings and linting. (Peter Zotov)
204
-
205
- Features implemented:
206
- * builders/default: add keyword source range for BEGIN/END (fixes #85). (Peter Zotov)
207
-
208
- Bugs fixed:
209
- * lexer.rl: "t=1;(a)?t:T" context sensitivity in expr_value (fixes #87). (Peter Zotov)
210
- * lexer.rl: keywords as labels, e.g. "unless:" (fixes #83, #84). (Peter Zotov)
211
- * lexer.rl: rectify usage of c_space/c_space_nl (fixes #81). (Peter Zotov)
212
- * ruby{18,19,20,21}.y: fix warnings for class/module in method body. (Peter Zotov)
213
- * lexer.rl: fix warning for ?\s. (Peter Zotov)
214
- * lexer.rl: expr_fname emits expr_beg-like keywords (fixes #82). (Peter Zotov)
215
- * lexer.rl: get rid of harmful nondeterminism in w_space (fixes #80). (Peter Zotov)
216
- * lexer/explanation: 1.8, 1.9 compatibility (fixes #76). (Peter Zotov)
217
-
218
- v2.0.0.beta8 (2013-06-24)
219
- -------------------------
220
-
221
- Bugs fixed:
222
- * ast/processor: add missing node handlers (Yuji Nakayama)
223
- * ast/processor: rename some obsolete node handlers (Yuji Nakayama)
224
-
225
- v2.0.0.beta7 (2013-06-22)
226
- -------------------------
227
-
228
- API modifications:
229
- * Implement a much more sane encoding model (closes #60). (Peter Zotov)
230
-
231
- Features implemented:
232
- * builders/default: (while-post) and (until-post); (kwbegin) (fixes #70). (Peter Zotov)
233
-
234
- Bugs fixed:
235
- * builders/default: don't swallow (begin) in "if (foo); end" (fixes #75). (Peter Zotov)
236
-
237
- v2.0.0.beta6 (2013-06-17)
238
- -------------------------
239
-
240
- API modifications:
241
- * Get rid of "synthesized (nil)". If it's not in source, it's not in AST (fixes #71). (Peter Zotov)
242
- * lexer.rl, ruby{18,19,20,21}.y: source maps for interpolation (fixes #27). (Peter Zotov)
243
-
244
- Features implemented:
245
- * ruby{18,19,20,21}.y, builders/default: lvar-injecting match (closes #69). (Peter Zotov)
246
- * builders/default: implicit matches (refs #69). (Peter Zotov)
247
- * builders/default: flip-flops (refs #69). (Peter Zotov)
248
-
249
- Bugs fixed:
250
- * lexer.rl: fix an off-by-1 error in heredoc parsing. (Peter Zotov)
251
- * lexer.rl: don't fail on "alias $a $b\n# comment\nalias $c $d". (Peter Zotov)
252
- * builders/default: fix treatment of masgn in &&/|| (refs #69). (Peter Zotov)
253
- * ruby-parse: make -L command line option work again. (Peter Zotov)
254
- * ruby{18,19,20,21}.y: begin source map for "if foo\nthen bar end" (fixes #68). (Peter Zotov)
255
- * Source::Comment::Associator: gracefully terminate when out of comments (fixes #67). (Peter Zotov)
256
-
257
- v2.0.0.beta5 (2013-06-08)
258
- -------------------------
259
-
260
- Bugs fixed:
261
- * Source::Buffer: better magic encoding comment recognition (fixes #65). (Peter Zotov)
262
- * lexer.rl: "{success?: true}" (fixes #66). (Peter Zotov)
263
- * Source::Buffer: if in doubt, treat data as UTF-8 (closes #60). (Peter Zotov)
264
-
265
- v2.0.0.beta4 (2013-06-05)
266
- -------------------------
267
-
268
- Bugs fixed:
269
- * lexer.rl: fix heredoc parsing with CRLF line endings (closes #61). (Peter Zotov)
270
- * lexer.rl: fix premature ending of heredoc "\<\<D\nABCDEF\nD" (fixes #59). (Peter Zotov)
271
-
272
- v2.0.0.beta3 (2013-05-29)
273
- -------------------------
274
-
275
- Bugs fixed:
276
- * AST::Processor: traverse "A, B = foo" (fixes #55). (Peter Zotov)
277
- * lexer.rl: correctly handle CRLF line endings (fixes #56). (Peter Zotov)
278
- * Fix traversing of "case; when a?; when b?; end" by AST::Processor. (Peter Zotov)
279
- * Correctly lex "foo a, b # comment\nbar" (fixes #54). (Peter Zotov)
280
-
281
- v2.0.0.beta2 (2013-05-27)
282
- -------------------------
283
-
284
- Bugs fixed:
285
- * Actually return comments from Parser::Base#tokenize instead of nil. (Peter Zotov)
286
-
287
- v2.0.0.beta1 (2013-05-25)
288
- -------------------------
289
-
290
- API modifications:
291
- * Completely rewrite whitespace handling in lexer (fixes #36). (Peter Zotov)
292
- * Rename Parser::AST::Node#source_map to #location, #src to #loc (closes #40). (Peter Zotov)
293
- * Rename Parser::Source::Range#to_source to #source (refs #40). (Peter Zotov)
294
- * Rename (cdecl) node to (casgn), remove (cvdecl) nodes (fixes #26). (Peter Zotov)
295
-
296
- Features implemented:
297
- * Add Source::Comment.associate for mapping comments back to nodes (fixes #31). (Peter Zotov)
298
- * Return AST and comments from Parser::Base#parse_with_comments. (Peter Zotov)
299
- * Return comments from Parser::Base#tokenize (fixes #46). (Peter Zotov)
300
- * Add tokenizer, Parser::Base#tokenize (refs #46). (Peter Zotov)
301
- * lexer.rl: better location reporting for invalid unicode codepoints (fixes #38). (Peter Zotov)
302
- * lexer.rl: better location reporting for unterminated =begin (fixes #37). (Peter Zotov)
303
- * Better location reporting for hashes with labels. (Peter Zotov)
304
- * Add `dot' source map to (send) nodes (fixes #34). (Peter Zotov)
305
- * Significantly improve performance of Source::Buffer (fixes #28). (Peter Zotov)
306
-
307
- Bugs fixed:
308
- * lexer.rl: fix lexing label at line_begin "foo:bar" (fixes #48). (Peter Zotov)
309
- * lexer.rl: "Option /^I/" is a method call (fixes #32). (Peter Zotov)
310
- * Don't allow destructive mutation of line cache in Source::Buffer. (Peter Zotov)
311
- * Fix quantifier in magic encoding parser (refs #33). (Peter Zotov)
312
- * Better handling of magic encoding comment edge cases (fixes #33). (Peter Zotov)
313
-
314
- v1.3.2 (2013-05-13)
315
- -------------------
316
-
317
- Features implemented:
318
- * lexer.rl: disallow "$-" (dollar, dash, no character) special. (Peter Zotov)
319
-
320
- Bugs fixed:
321
- * Source::Range: fix #to_source for multiline ranges. (Peter Zotov)
322
- * builders/default: source map for class/module name (fixes #24). (Peter Zotov)
323
-
324
- v1.3.1 (2013-05-09)
325
- -------------------
326
-
327
- Bugs fixed:
328
- * ruby{19,20,21}.y: "def foo\n=begin\n=end\nend" (fixes #22). (Peter Zotov)
329
- * lexer.rl: "rescue::Exception" (fixes #23). (Peter Zotov)
330
-
331
- v1.3.0 (2013-04-26)
332
- -------------------
333
-
334
- Bugs fixed:
335
- * lexer.rl: "alias foo bar \n alias bar baz". (Peter Zotov)
336
-
337
- v1.2.0 (2013-04-25)
338
- -------------------
339
-
340
- Bugs fixed:
341
- * lexer.rl: lex "def String.foo; end" correctly (fixes #16). (Peter Zotov)
342
- * lexer.rl: reject "1end", "1.1end". (Peter Zotov)
343
-
344
- v1.1.0 (2013-04-18)
345
- -------------------
346
-
347
- API modifications:
348
- * ruby19.y, ruby20.y, ruby21.y: check for Encoding support (fixes #9). (Peter Zotov)
349
-
350
- Features implemented:
351
- * builders/default: ignore duplicate _ args (>=1.9), _.* args (>1.9) (fixes #5). (Peter Zotov)
352
- * builders/default: detect duplicate argument names (refs #5). (Peter Zotov)
353
- * lexer.rl: "def foo bar: 1; end" (for ruby 2.1) (fixes #15). (Peter Zotov)
354
- * ruby21.y: required keyword arguments. (Peter Zotov)
355
-
356
- Bugs fixed:
357
- * ruby20.y, ruby21.y: "foo::A += 1" and friends (scoped constant op-asgn). (Peter Zotov)
358
-
359
- v1.0.1 (2013-04-18)
360
- -------------------
361
-
362
- Bugs fixed:
363
- * builders/default: %Q{#{1}} and friends (fixes #14). (Peter Zotov)
364
-
365
- v1.0.0 (2013-04-17)
366
- -------------------
367
-
368
- Features implemented:
369
- * ruby20.y: "meth 1 do end.fun(bar) {}" and friends. (Peter Zotov)
370
- * ruby20.y: keyword arguments. (Peter Zotov)
371
- * ruby20.y: { **kwsplat }. (Peter Zotov)
372
-
373
- v0.9.2 (2013-04-16)
374
- -------------------
375
-
376
- Features implemented:
377
- * lexer.rl: "-> (a) {}". (Peter Zotov)
378
- * builders/default: treat &&/|| lhs/rhs as conditional context. (Peter Zotov)
379
- * ruby20.y: "class Foo \< a:b; end". (Peter Zotov)
380
- * lexer.rl: "class \<\< a:b". (Peter Zotov)
381
- * ruby19.y, ruby20.y: "f { || a:b }". (Peter Zotov)
382
- * ruby19.y, ruby20.y: "def foo() a:b end", "def foo\n a:b end". (Peter Zotov)
383
- * lexer.rl: %i/%I. (Peter Zotov)
384
- * lexer.rl: warn at "foo **bar". (Peter Zotov)
385
- * lexer.rl: ** at expr_beg is tDSTAR. (Peter Zotov)
386
- * ruby20.y: "f {|;\nvar\n|}". (Peter Zotov)
387
- * ruby20.y: "p () {}". (Peter Zotov)
388
- * ruby20.y: "p begin 1.times do 1 end end". (Peter Zotov)
389
- * ruby20.y: better error message for BEGIN{} in a method body. (Peter Zotov)
390
-
391
- Bugs fixed:
392
- * lexer.rl, ruby18.y, ruby19.y, ruby20.y: "%W[#{a}#@b foo #{c}]". (Peter Zotov)
393
- * lexer.rl: parse "foo=1; foo / bar #/" as method call on 1.8, division on 1.9. (Peter Zotov)
394
- * ruby18.y, ruby19.y: BEGIN{} does not introduce a scope. (Peter Zotov)
395
- * lexer.rl: improve whitespace handling. (Peter Zotov)
396
-
397
- v0.9.0 (2013-04-15)
398
- -------------------
399
-
400
- API modifications:
401
- * runtime compatibility with 1.8.7. (Peter Zotov)
402
-
403
- Features implemented:
404
- * builders/default: check for multiple assignment in conditions (fixes #4). (Peter Zotov)
405
- * builders/default: check if actual block and blockarg are passed (fixes #6). (Peter Zotov)
406
- * ruby19.y: "foo::A += m foo". (Peter Zotov)
407
- * ruby18.y, ruby19.y: "rescue without else is useless" warning. (Peter Zotov)
408
- * ruby19.y: 99.16% coverage, 100% sans error recovery. (Peter Zotov)
409
- * ruby19.y: mlhs arguments "def foo((a, *, p)) end". (Peter Zotov)
410
- * ruby19.y: "fun (1) {}" and friends. (Peter Zotov)
411
- * ruby19.y: mlhs post variables "a, *b, c = ...". (Peter Zotov)
412
- * builders/default: @@a |= 1; def f; @@a |= 1; end. (Peter Zotov)
413
- * ruby18.y: fun (&foo). (Peter Zotov)
414
- * ruby18.y: block formal arguments. 99.33% coverage. (Peter Zotov)
415
- * ruby18.y: fun(meth 1 do end); fun(1, meth 1 do end). (Peter Zotov)
416
- * ruby18.y: "meth 1 do end.fun(bar)" and friends. (Peter Zotov)
417
- * ruby18.y: foo () {}; a.foo () {}; a::foo () {}. (Peter Zotov)
418
- * ruby18.y: various call argument combinations. (Peter Zotov)
419
- * ruby18.y: foo (1, 2); foo (). (Peter Zotov)
420
- * ruby18.y: foo (1).to_i. (Peter Zotov)
421
- * ruby18.y: fun{}; fun(){}; fun(1){}; fun do end. (Peter Zotov)
422
- * ruby18.y: foo.fun bar. (Peter Zotov)
423
- * lexer.rl, ruby18.y: add support for cond/cmdarg stack states. (Peter Zotov)
424
- * ruby18.y: rescue. (Peter Zotov)
425
- * ruby18.y: begin end while|until (tests only). (Peter Zotov)
426
- * ruby18.y: case. (Peter Zotov)
427
- * ruby18.y: foo[m bar]. (Peter Zotov)
428
- * ruby18.y: for..in. (Peter Zotov)
429
-
430
- Bugs fixed:
431
- * lexer.rl: handle : at expr_beg as a symbol, at expr_end as tCOLON. (Peter Zotov)
432
- * lexer.rl: handle "rescue #foo\nbar". (Peter Zotov)
433
- * lexer.rl: handle "foo.#bar\nbaz". (Peter Zotov)
434
- * lexer.rl: fix location info for symbols. (Peter Zotov)
435
- * lexer.rl: handle \<backslash>\<nl> at expr_beg. (Peter Zotov)
436
- * lexer.rl: emit tCONSTANT/tIDENTIFIER/tFID in expr_dot. (Peter Zotov)
437
- * lexer.rl: correctly disambiguate "x ::Foo" as tIDENT, tCOLON3, ... (Peter Zotov)
438
- * lexer.rl: correctly disambiguate ident!= as tIDENTIFIER, tNEQ. (Peter Zotov)
439
- * lexer.rl: correctly report the %r%% tREGEXP_BEG value as %r%. (Peter Zotov)
440
- * ruby19.y: emit correct error on "nil = 1" and friends. (Peter Zotov)
441
- * ruby19.y: 1.9 permits empty symbol literals. (Peter Zotov)
442
- * ruby18.y: foo(&bar). (Peter Zotov)
443
- * lexer.rl: don't lookahead two tokens on "func %{str} do". (Peter Zotov)
444
- * lexer.rl: fix lexing of non-interp heredoc with trailing backslash. (Peter Zotov)
445
- * lexer.rl: fix erroneous number and =begin lookahead in expr_beg. (Peter Zotov)
446
- * lexer.rl: fix stack corruption. (Peter Zotov)
447
- * lexer.rl: /= at expr_beg. (Peter Zotov)
448
- * lexer.rl: class\<\<self. (Peter Zotov)
449
- * fix lexing comments at expr_beg "{#1\n}". (Peter Zotov)
450
-
@@ -33,6 +33,8 @@ module Parser
33
33
  CurrentRuby = Ruby21
34
34
 
35
35
  else # :nocov:
36
- raise NotImplementedError, "Parser does not support parsing Ruby #{RUBY_VERSION}"
36
+ # Keep this in sync with released Ruby.
37
+ warn_syntax_deviation 'parser/ruby21', '2.1'
38
+ CurrentRuby = Ruby21
37
39
  end
38
40
  end
@@ -92,6 +92,7 @@ class Parser::Lexer
92
92
 
93
93
  attr_accessor :diagnostics
94
94
  attr_accessor :static_env
95
+ attr_accessor :force_utf32
95
96
 
96
97
  attr_accessor :cond, :cmdarg
97
98
 
@@ -183,7 +184,8 @@ class Parser::Lexer
183
184
  @source_pts = @source.unpack('C*')
184
185
  end
185
186
 
186
- if @source_pts.size > 1_000_000 && @source.respond_to?(:encode)
187
+ if (@source_pts.size > 1_000_000 && @source.respond_to?(:encode)) ||
188
+ @force_utf32
187
189
  # A heuristic: if the buffer is larger than 1M, then
188
190
  # store it in UTF-32 and convert the tokens as they're
189
191
  # going out. If it's smaller, the conversion overhead
@@ -590,19 +592,19 @@ class Parser::Lexer
590
592
  flo_pow = [eE] [+\-]? ( digit+ '_' )* digit+;
591
593
 
592
594
  int_suffix =
593
- '' % { @num_xfrm = lambda { |value| emit(:tINTEGER, value) } }
594
- | 'r' % { @num_xfrm = lambda { |value| emit(:tRATIONAL, Rational(value)) } }
595
- | 'i' % { @num_xfrm = lambda { |value| emit(:tIMAGINARY, Complex(0, value)) } }
596
- | 'ri' % { @num_xfrm = lambda { |value| emit(:tIMAGINARY, Complex(0, Rational(value))) } };
595
+ '' % { @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } }
596
+ | 'r' % { @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } }
597
+ | 'i' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, chars)) } }
598
+ | 'ri' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } };
597
599
 
598
600
  flo_pow_suffix =
599
- '' % { @num_xfrm = lambda { |digits| emit(:tFLOAT, Float(digits)) } }
600
- | 'i' % { @num_xfrm = lambda { |digits| emit(:tIMAGINARY, Complex(0, Float(digits))) } };
601
+ '' % { @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } }
602
+ | 'i' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Float(chars))) } };
601
603
 
602
604
  flo_suffix =
603
605
  flo_pow_suffix
604
- | 'r' % { @num_xfrm = lambda { |digits| emit(:tRATIONAL, Rational(digits)) } }
605
- | 'ri' % { @num_xfrm = lambda { |digits| emit(:tIMAGINARY, Complex(0, Rational(digits))) } };
606
+ | 'r' % { @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } }
607
+ | 'ri' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } };
606
608
 
607
609
  #
608
610
  # === ESCAPE SEQUENCE PARSING ===
@@ -800,6 +802,7 @@ class Parser::Lexer
800
802
 
801
803
  action extend_string {
802
804
  string = @source[@ts...@te]
805
+ string = string.encode(@encoding) if string.respond_to?(:encode)
803
806
 
804
807
  if !literal.heredoc? && literal.nest_and_try_closing(string, @ts, @te)
805
808
  fnext *pop_literal; fbreak;
@@ -8,6 +8,7 @@ module Parser
8
8
  super
9
9
 
10
10
  @rewriters = []
11
+ @modify = false
11
12
  end
12
13
 
13
14
  private
@@ -22,6 +23,10 @@ module Parser
22
23
  @slop.on 'l=', 'load=', 'Load a rewriter' do |file|
23
24
  load_and_discover(file)
24
25
  end
26
+
27
+ @slop.on 'm', 'modify', 'Assume rewriters normally modify AST' do
28
+ @modify = true
29
+ end
25
30
  end
26
31
 
27
32
  def load_and_discover(file)
@@ -53,7 +58,7 @@ module Parser
53
58
  @parser.reset
54
59
  new_ast = @parser.parse(new_buffer)
55
60
 
56
- unless ast == new_ast
61
+ if !@modify && ast != new_ast
57
62
  $stderr.puts 'ASTs do not match:'
58
63
 
59
64
  old = Tempfile.new('old')
@@ -168,7 +168,7 @@ module Parser
168
168
  raise ArgumentError, 'Source::Buffer is immutable'
169
169
  end
170
170
 
171
- @source = input.gsub(/\r\n/, "\n").freeze
171
+ @source = input.gsub("\r\n", "\n").freeze
172
172
  end
173
173
 
174
174
  ##
@@ -193,7 +193,7 @@ module Parser
193
193
  def source_line(lineno)
194
194
  unless @lines
195
195
  @lines = @source.lines.to_a
196
- @lines.each { |line| line.gsub!(/\n$/, '') }
196
+ @lines.each { |line| line.chomp!("\n") }
197
197
 
198
198
  # If a file ends with a newline, the EOF token will appear
199
199
  # to be one line further than the end of file.
@@ -1,3 +1,3 @@
1
1
  module Parser
2
- VERSION = '2.1.7'
2
+ VERSION = '2.1.8'
3
3
  end
@@ -10,7 +10,7 @@ class TestCurrent < Minitest::Test
10
10
  assert_equal Parser::Ruby19, Parser::CurrentRuby
11
11
  when '2.0.0'
12
12
  assert_equal Parser::Ruby20, Parser::CurrentRuby
13
- when '2.1.0'
13
+ when '2.1.0', '2.1.1'
14
14
  assert_equal Parser::Ruby21, Parser::CurrentRuby
15
15
  else
16
16
  flunk "Update test_parser_current for #{RUBY_VERSION}"
@@ -3039,6 +3039,13 @@ class TestLexer < Minitest::Test
3039
3039
  assert_scanned('"\u00a4"',
3040
3040
  :tSTRING, "\u00a4")
3041
3041
  end
3042
+
3043
+ def test_bug_utf32le_leak
3044
+ setup_lexer(19)
3045
+ @lex.force_utf32 = true
3046
+ assert_scanned('"F0"',
3047
+ :tSTRING, "F0")
3048
+ end
3042
3049
  end
3043
3050
 
3044
3051
  def test_bug_ragel_stack
metadata CHANGED
@@ -1,75 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.7
4
+ version: 2.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Zotov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-05 00:00:00.000000000 Z
11
+ date: 2014-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: slop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.4'
34
- - - '>='
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
36
  version: 3.4.5
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ~>
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '3.4'
44
- - - '>='
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 3.4.5
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ~>
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '1.2'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ~>
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '1.2'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rake
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.9'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0.9'
75
75
  - !ruby/object:Gem::Dependency
@@ -90,140 +90,140 @@ dependencies:
90
90
  name: cliver
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ~>
93
+ - - "~>"
94
94
  - !ruby/object:Gem::Version
95
95
  version: 0.3.0
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ~>
100
+ - - "~>"
101
101
  - !ruby/object:Gem::Version
102
102
  version: 0.3.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: yard
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - '>='
107
+ - - ">="
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - '>='
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: kramdown
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - '>='
121
+ - - ">="
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - '>='
128
+ - - ">="
129
129
  - !ruby/object:Gem::Version
130
130
  version: '0'
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: minitest
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - ~>
135
+ - - "~>"
136
136
  - !ruby/object:Gem::Version
137
137
  version: '5.0'
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - ~>
142
+ - - "~>"
143
143
  - !ruby/object:Gem::Version
144
144
  version: '5.0'
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: simplecov
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - ~>
149
+ - - "~>"
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0.7'
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - ~>
156
+ - - "~>"
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0.7'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: coveralls
161
161
  requirement: !ruby/object:Gem::Requirement
162
162
  requirements:
163
- - - '>='
163
+ - - ">="
164
164
  - !ruby/object:Gem::Version
165
165
  version: '0'
166
166
  type: :development
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
- - - '>='
170
+ - - ">="
171
171
  - !ruby/object:Gem::Version
172
172
  version: '0'
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: json_pure
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - '>='
177
+ - - ">="
178
178
  - !ruby/object:Gem::Version
179
179
  version: '0'
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - '>='
184
+ - - ">="
185
185
  - !ruby/object:Gem::Version
186
186
  version: '0'
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: mime-types
189
189
  requirement: !ruby/object:Gem::Requirement
190
190
  requirements:
191
- - - ~>
191
+ - - "~>"
192
192
  - !ruby/object:Gem::Version
193
193
  version: '1.25'
194
194
  type: :development
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
- - - ~>
198
+ - - "~>"
199
199
  - !ruby/object:Gem::Version
200
200
  version: '1.25'
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: simplecov-sublime-ruby-coverage
203
203
  requirement: !ruby/object:Gem::Requirement
204
204
  requirements:
205
- - - '>='
205
+ - - ">="
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
- - - '>='
212
+ - - ">="
213
213
  - !ruby/object:Gem::Version
214
214
  version: '0'
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: gauntlet
217
217
  requirement: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - '>='
219
+ - - ">="
220
220
  - !ruby/object:Gem::Version
221
221
  version: '0'
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
- - - '>='
226
+ - - ">="
227
227
  - !ruby/object:Gem::Version
228
228
  version: '0'
229
229
  description: A Ruby parser written in pure Ruby.
@@ -235,10 +235,10 @@ executables:
235
235
  extensions: []
236
236
  extra_rdoc_files: []
237
237
  files:
238
- - .gitignore
239
- - .rubocop.yml
240
- - .travis.yml
241
- - .yardopts
238
+ - ".gitignore"
239
+ - ".rubocop.yml"
240
+ - ".travis.yml"
241
+ - ".yardopts"
242
242
  - CHANGELOG.md
243
243
  - CONTRIBUTING.md
244
244
  - Gemfile
@@ -264,6 +264,7 @@ files:
264
264
  - lib/parser/current.rb
265
265
  - lib/parser/diagnostic.rb
266
266
  - lib/parser/diagnostic/engine.rb
267
+ - lib/parser/lexer.rb
267
268
  - lib/parser/lexer.rl
268
269
  - lib/parser/lexer/explanation.rb
269
270
  - lib/parser/lexer/literal.rb
@@ -271,9 +272,13 @@ files:
271
272
  - lib/parser/messages.rb
272
273
  - lib/parser/meta.rb
273
274
  - lib/parser/rewriter.rb
275
+ - lib/parser/ruby18.rb
274
276
  - lib/parser/ruby18.y
277
+ - lib/parser/ruby19.rb
275
278
  - lib/parser/ruby19.y
279
+ - lib/parser/ruby20.rb
276
280
  - lib/parser/ruby20.y
281
+ - lib/parser/ruby21.rb
277
282
  - lib/parser/ruby21.y
278
283
  - lib/parser/runner.rb
279
284
  - lib/parser/runner/ruby_parse.rb
@@ -320,11 +325,6 @@ files:
320
325
  - test/test_source_rewriter.rb
321
326
  - test/test_source_rewriter_action.rb
322
327
  - test/test_static_environment.rb
323
- - lib/parser/lexer.rb
324
- - lib/parser/ruby18.rb
325
- - lib/parser/ruby19.rb
326
- - lib/parser/ruby20.rb
327
- - lib/parser/ruby21.rb
328
328
  homepage: http://github.com/whitequark/parser
329
329
  licenses:
330
330
  - MIT
@@ -335,17 +335,17 @@ require_paths:
335
335
  - lib
336
336
  required_ruby_version: !ruby/object:Gem::Requirement
337
337
  requirements:
338
- - - '>='
338
+ - - ">="
339
339
  - !ruby/object:Gem::Version
340
340
  version: '0'
341
341
  required_rubygems_version: !ruby/object:Gem::Requirement
342
342
  requirements:
343
- - - '>='
343
+ - - ">="
344
344
  - !ruby/object:Gem::Version
345
345
  version: '0'
346
346
  requirements: []
347
347
  rubyforge_project:
348
- rubygems_version: 2.0.14
348
+ rubygems_version: 2.2.2
349
349
  signing_key:
350
350
  specification_version: 4
351
351
  summary: A Ruby parser written in pure Ruby.