From af95acec1755263acf79de2aba4681a6ec2d1c34 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 28 Apr 2014 14:11:18 -0400 Subject: make peek_n append p->pb to list --- src/parse.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parse.y b/src/parse.y index 0d281feeb..426bd0e83 100644 --- a/src/parse.y +++ b/src/parse.y @@ -3429,7 +3429,7 @@ peek_n(parser_state *p, int c, int n) list = push(list, (node*)(intptr_t)c0); } while(n--); if (p->pb) { - p->pb = append(p->pb, (node*)list); + p->pb = append((node*)list, p->pb); } else { p->pb = list; -- cgit v1.2.3 From b2f3919bc2ac133d46566f930f6cf84b65c41441 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 28 Apr 2014 14:15:03 -0400 Subject: Accept =begin and =end with spaces after --- src/parse.y | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/parse.y b/src/parse.y index 426bd0e83..aab1aaa40 100644 --- a/src/parse.y +++ b/src/parse.y @@ -4189,8 +4189,13 @@ parser_yylex(parser_state *p) case '=': if (p->column == 1) { - if (peeks(p, "begin\n")) { - skips(p, "\n=end\n"); + if (peeks(p, "begin ") || peeks(p, "begin\n")) { + if (skips(p, "\n=end ")) { + goto retry; + } + if (skips(p, "\n=end\n")) { + goto retry; + } goto retry; } } -- cgit v1.2.3 From 9ac817ae7820d6cc6a7658997a63584daea1a296 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 28 Apr 2014 14:22:55 -0400 Subject: Add tests for multiline comment parsing --- test/t/syntax.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/t/syntax.rb b/test/t/syntax.rb index 159b36574..0bb3fa389 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -293,3 +293,19 @@ end assert('optional block argument in the rhs default expressions') do assert_nil(Proc.new {|foo = foo| foo}.call) end + +assert('multiline comments work correctly') do +=begin +this is a comment with nothing after begin and end +=end +=begin this is a comment +this is a comment with extra after =begin +=end +=begin +this is a comment that has =end with spaces after it +=end +=begin this is a comment +this is a comment that has extra after =begin and =end with spaces after it +=end + true +end -- cgit v1.2.3