Jacek Caban : jscript: Ensure that the whole script is parsed.

Alexandre Julliard julliard at winehq.org
Tue Dec 28 10:48:21 CST 2010


Module: wine
Branch: master
Commit: 0f36ef09b12e7c39c05b7def4d7c7fc87987dec2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0f36ef09b12e7c39c05b7def4d7c7fc87987dec2

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Dec 28 15:05:25 2010 +0100

jscript: Ensure that the whole script is parsed.

---

 dlls/jscript/lex.c        |    2 +-
 dlls/jscript/parser.y     |    3 ++-
 dlls/jscript/tests/api.js |    1 +
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/dlls/jscript/lex.c b/dlls/jscript/lex.c
index bfa3568..88fed07 100644
--- a/dlls/jscript/lex.c
+++ b/dlls/jscript/lex.c
@@ -526,7 +526,7 @@ int parser_lex(void *lval, parser_ctx_t *ctx)
     do {
         skip_spaces(ctx);
         if(ctx->ptr == ctx->end)
-            return 0;
+            return tEOF;
     }while(skip_comment(ctx) || skip_html_comment(ctx));
 
     if(isalphaW(*ctx->ptr)) {
diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y
index 47fcc34..df7a070 100644
--- a/dlls/jscript/parser.y
+++ b/dlls/jscript/parser.y
@@ -180,6 +180,7 @@ static source_elements_t *source_elements_add_statement(source_elements_t*,state
 %token <ival> tAssignOper tEqOper tShiftOper tRelOper
 %token <literal> tNumericLiteral
 %token <wstr> tStringLiteral
+%token tEOF
 
 %type <source_elements> SourceElements
 %type <source_elements> FunctionBody
@@ -253,7 +254,7 @@ static source_elements_t *source_elements_add_statement(source_elements_t*,state
 
 /* ECMA-262 3rd Edition    14 */
 Program
-       : SourceElements HtmlComment
+       : SourceElements HtmlComment tEOF
                                 { program_parsed(ctx, $1); }
 
 HtmlComment
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 4b9f160..6c62276 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1985,6 +1985,7 @@ testSyntaxError("for(i=0;i<10", "E_SEMICOLON");
 testSyntaxError("while(", "E_SYNTAX_ERROR");
 testSyntaxError("if(", "E_SYNTAX_ERROR");
 testSyntaxError("'unterminated", "E_UNTERMINATED_STR");
+testSyntaxError("*", "E_SYNTAX_ERROR");
 
 // ReferenceError tests
 testException(function() {test = function() {}}, "E_ILLEGAL_ASSIGN");




More information about the wine-cvs mailing list