parser 2.0.0.beta3 → 2.0.0.beta4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +4 -0
- data/lib/parser/lexer.rl +10 -10
- data/lib/parser/version.rb +1 -1
- data/test/test_lexer.rb +18 -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: b376a16dbd765d49118c18432b8134011d732f09
|
4
|
+
data.tar.gz: 12cad6ee3c5f47b267b4b93d442e3e5ae80be478
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5be76612d68a0692c0c3d2691bb83816b35aeda66d496cfebbb04c65a5dd0cacf8be7c6d739fbc0cbefff05f5f20b270fd3bd426c602f1ad32bcbf216102e6be
|
7
|
+
data.tar.gz: b1fa6025f4b3311870f5403a7fab57cd9da3e851f89ebff271a5853e783e7c4790a153440c753f681054edf0f94ca2821e5f793427cbc2ed7ed1bef0d4a2dbc9
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
v2.0.0.beta4 (2013-06-05)
|
5
|
+
-------------------------
|
6
|
+
|
7
|
+
Bugs fixed:
|
8
|
+
* lexer.rl: fix heredoc parsing with CRLF line endings (closes #61). (Peter Zotov)
|
9
|
+
* lexer.rl: fix premature ending of heredoc "\<\<D\nABCDEF\nD" (fixes #59). (Peter Zotov)
|
10
|
+
|
4
11
|
v2.0.0.beta3 (2013-05-29)
|
5
12
|
-------------------------
|
6
13
|
|
data/README.md
CHANGED
@@ -114,6 +114,10 @@ $ ruby-parse -E -e "2+2"
|
|
114
114
|
[slop]: http://rubygems.org/gems/slop
|
115
115
|
[insane-lexer]: http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/
|
116
116
|
|
117
|
+
## Documentation
|
118
|
+
|
119
|
+
Documentation for parser is available online on [rdoc.info](http://rdoc.info/github/whitequark/parser).
|
120
|
+
|
117
121
|
## Contributors
|
118
122
|
|
119
123
|
* Peter Zotov ([whitequark][])
|
data/lib/parser/lexer.rl
CHANGED
@@ -673,7 +673,7 @@ class Parser::Lexer
|
|
673
673
|
# @heredoc_s to literal.saved_herebody_s, and after an interpolation (possibly
|
674
674
|
# containing another heredocs) is closed, the previous value is restored.
|
675
675
|
|
676
|
-
e_heredoc_nl = c_nl
|
676
|
+
e_heredoc_nl = c_nl % {
|
677
677
|
# After every heredoc was parsed, @herebody_s contains the
|
678
678
|
# position of next token after all heredocs.
|
679
679
|
if @herebody_s
|
@@ -683,10 +683,10 @@ class Parser::Lexer
|
|
683
683
|
};
|
684
684
|
|
685
685
|
action extend_string {
|
686
|
-
if literal.nest_and_try_closing
|
686
|
+
if !literal.heredoc? && literal.nest_and_try_closing(tok, @ts, @te)
|
687
687
|
fnext *pop_literal; fbreak;
|
688
688
|
else
|
689
|
-
literal.extend_string
|
689
|
+
literal.extend_string(tok, @ts, @te)
|
690
690
|
end
|
691
691
|
}
|
692
692
|
|
@@ -744,8 +744,8 @@ class Parser::Lexer
|
|
744
744
|
if literal.heredoc?
|
745
745
|
# Try ending the heredoc with the complete most recently
|
746
746
|
# scanned line. @herebody_s always refers to the start of such line.
|
747
|
-
if literal.nest_and_try_closing(tok(@herebody_s, @
|
748
|
-
@herebody_s, @
|
747
|
+
if literal.nest_and_try_closing(tok(@herebody_s, @ts),
|
748
|
+
@herebody_s, @ts)
|
749
749
|
# Adjust @herebody_s to point to the next line.
|
750
750
|
@herebody_s = @te
|
751
751
|
|
@@ -1362,11 +1362,11 @@ class Parser::Lexer
|
|
1362
1362
|
# Heredoc start.
|
1363
1363
|
# <<EOF | <<-END | <<"FOOBAR" | <<-`SMTH`
|
1364
1364
|
'<<' '-'?
|
1365
|
-
( '"' (
|
1366
|
-
| "'" (
|
1367
|
-
| "`" (
|
1368
|
-
| bareword )
|
1369
|
-
|
1365
|
+
( '"' ( c_line - '"' )* '"'
|
1366
|
+
| "'" ( c_line - "'" )* "'"
|
1367
|
+
| "`" ( c_line - "`" )* "`"
|
1368
|
+
| bareword ) % { @heredoc_e = p }
|
1369
|
+
c_line* c_nl % { new_herebody_s = p }
|
1370
1370
|
=> {
|
1371
1371
|
tok(@ts, @heredoc_e) =~ /^<<(-?)(["'`]?)(.*)\2$/
|
1372
1372
|
|
data/lib/parser/version.rb
CHANGED
data/test/test_lexer.rb
CHANGED
@@ -811,6 +811,16 @@ class TestLexer < Minitest::Test
|
|
811
811
|
:tNL, nil)
|
812
812
|
end
|
813
813
|
|
814
|
+
def test_heredoc_one_character
|
815
|
+
util_lex_token("a = <<E\nABCDEF\nE\n",
|
816
|
+
:tIDENTIFIER, "a",
|
817
|
+
:tEQL, "=",
|
818
|
+
:tSTRING_BEG, "\"",
|
819
|
+
:tSTRING_CONTENT, "ABCDEF\n",
|
820
|
+
:tSTRING_END, "E",
|
821
|
+
:tNL, nil)
|
822
|
+
end
|
823
|
+
|
814
824
|
def test_identifier
|
815
825
|
util_lex_token("identifier", :tIDENTIFIER, "identifier")
|
816
826
|
end
|
@@ -2499,6 +2509,14 @@ class TestLexer < Minitest::Test
|
|
2499
2509
|
:kEND, "end")
|
2500
2510
|
end
|
2501
2511
|
|
2512
|
+
def test_bug_heredoc_cr_lf
|
2513
|
+
util_lex_token("<<FIN\r\nfoo\r\nFIN\r\n",
|
2514
|
+
:tSTRING_BEG, "\"",
|
2515
|
+
:tSTRING_CONTENT, "foo\r\n",
|
2516
|
+
:tSTRING_END, "EOS",
|
2517
|
+
:tNL, nil)
|
2518
|
+
end
|
2519
|
+
|
2502
2520
|
def test_bug_eh_symbol_no_newline
|
2503
2521
|
util_lex_token("?\"\nfoo",
|
2504
2522
|
:tINTEGER, 34,
|
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.0.0.
|
4
|
+
version: 2.0.0.beta4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Zotov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05
|
11
|
+
date: 2013-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ast
|