parser 2.0.0.beta3 → 2.0.0.beta4
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 +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
|