From d5e5e47944736585195b66aab7e997b0e7c9a666 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Thu, 19 Jun 2008 01:39:51 +1200 Subject: [PATCH] Fix bug in javascript automatic semicolon insertion rule --- extra/peg/javascript/parser/parser-tests.factor | 11 +++++++++++ extra/peg/javascript/parser/parser.factor | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extra/peg/javascript/parser/parser-tests.factor b/extra/peg/javascript/parser/parser-tests.factor index 6741e059f9..ec7a30845f 100644 --- a/extra/peg/javascript/parser/parser-tests.factor +++ b/extra/peg/javascript/parser/parser-tests.factor @@ -35,3 +35,14 @@ function foldl(f, initial, seq) { } "> tokenizer ast>> javascript remaining>> length zero? ] unit-test + +{ t } [ +<" +ParseState.prototype.from = function(index) { + var r = new ParseState(this.input, this.index + index); + r.cache = this.cache; + r.length = this.length - index; + return r; +} +"> tokenizer ast>> javascript remaining>> length zero? +] unit-test diff --git a/extra/peg/javascript/parser/parser.factor b/extra/peg/javascript/parser/parser.factor index a38cf4aea8..45aa0f022c 100644 --- a/extra/peg/javascript/parser/parser.factor +++ b/extra/peg/javascript/parser/parser.factor @@ -7,6 +7,7 @@ IN: peg.javascript.parser #! http://jarrett.cs.ucla.edu/ometa-js/#JavaScript_Compiler EBNF: javascript +End = !(.) Space = " " | "\t" | "\n" Spaces = Space* => [[ ignore ]] Name = . ?[ ast-name? ]? => [[ value>> ]] @@ -78,7 +79,7 @@ JsonPropName = Name | Number | String Formal = Spaces Name Formals = (Formal ("," Formal => [[ second ]])* => [[ first2 swap prefix ]])? FuncRest = "(" Formals:fs ")" "{" SrcElems:body "}" => [[ fs body ast-func boa ]] -Sc = SpacesNoNl ("\n" | &("}"))| ";" +Sc = SpacesNoNl ("\n" | &("}") | End)| ";" Binding = Name:n "=" Expr:v => [[ n v ast-var boa ]] | Name:n => [[ n "undefined" ast-get boa ast-var boa ]] Block = "{" SrcElems:ss "}" => [[ ss ]]