From a0467ef11c0d31d06203c9a7a24f62819d128570 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 21 Dec 2009 00:24:11 +0100 Subject: [PATCH] jscript: Make undefined a property of global object. --- dlls/jscript/engine.c | 3 --- dlls/jscript/engine.h | 1 - dlls/jscript/global.c | 5 +++++ dlls/jscript/lex.c | 1 - dlls/jscript/parser.y | 13 +------------ dlls/jscript/tests/lang.js | 6 ++++++ 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 9a89431ac01..b9c40ae23c1 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -350,9 +350,6 @@ static HRESULT equal2_values(VARIANT *lval, VARIANT *rval, BOOL *ret) static HRESULT literal_to_var(script_ctx_t *ctx, literal_t *literal, VARIANT *v) { switch(literal->type) { - case LT_UNDEFINED: - V_VT(v) = VT_EMPTY; - break; case LT_NULL: V_VT(v) = VT_NULL; break; diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h index 83096db6ab4..0bcabf614d2 100644 --- a/dlls/jscript/engine.h +++ b/dlls/jscript/engine.h @@ -131,7 +131,6 @@ typedef enum { LT_DOUBLE, LT_STRING, LT_BOOL, - LT_UNDEFINED, LT_NULL, LT_REGEXP }literal_type_t; diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 501da79e71b..af142ed4db3 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -1176,6 +1176,11 @@ HRESULT init_global(script_ctx_t *ctx) if(FAILED(hres)) return hres; + V_VT(&var) = VT_EMPTY; + hres = jsdisp_propput_name(ctx->global, undefinedW, &var, NULL/*FIXME*/, NULL/*FIXME*/); + if(FAILED(hres)) + return hres; + V_VT(&var) = VT_DISPATCH; V_DISPATCH(&var) = (IDispatch*)_IDispatchEx_(math); hres = jsdisp_propput_name(ctx->global, MathW, &var, NULL/*FIXME*/, NULL/*FIXME*/); diff --git a/dlls/jscript/lex.c b/dlls/jscript/lex.c index 4e04dea0416..2e79db9878a 100644 --- a/dlls/jscript/lex.c +++ b/dlls/jscript/lex.c @@ -91,7 +91,6 @@ static const struct { {trueW, kTRUE}, {tryW, kTRY}, {typeofW, kTYPEOF}, - {undefinedW, kUNDEFINED}, {varW, kVAR}, {voidW, kVOID}, {whileW, kWHILE}, diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y index 0683ab68f3b..cc9097dd54f 100644 --- a/dlls/jscript/parser.y +++ b/dlls/jscript/parser.y @@ -38,7 +38,6 @@ typedef struct _statement_list_t { static literal_t *new_string_literal(parser_ctx_t*,const WCHAR*); static literal_t *new_null_literal(parser_ctx_t*); -static literal_t *new_undefined_literal(parser_ctx_t*); static literal_t *new_boolean_literal(parser_ctx_t*,VARIANT_BOOL); typedef struct _property_list_t { @@ -171,7 +170,7 @@ static source_elements_t *source_elements_add_statement(source_elements_t*,state /* keywords */ %token kBREAK kCASE kCATCH kCONTINUE kDEFAULT kDELETE kDO kELSE kIF kFINALLY kFOR kIN -%token kINSTANCEOF kNEW kNULL kUNDEFINED kRETURN kSWITCH kTHIS kTHROW kTRUE kFALSE kTRY kTYPEOF kVAR kVOID kWHILE kWITH +%token kINSTANCEOF kNEW kNULL kRETURN kSWITCH kTHIS kTHROW kTRUE kFALSE kTRY kTYPEOF kVAR kVOID kWHILE kWITH %token tANDAND tOROR tINC tDEC tHTMLCOMMENT kDIVEQ %token kFUNCTION '}' @@ -800,7 +799,6 @@ Identifier_opt /* ECMA-262 3rd Edition 7.8 */ Literal : kNULL { $$ = new_null_literal(ctx); } - | kUNDEFINED { $$ = new_undefined_literal(ctx); } | BooleanLiteral { $$ = $1; } | tNumericLiteral { $$ = $1; } | tStringLiteral { $$ = new_string_literal(ctx, $1); } @@ -856,15 +854,6 @@ static literal_t *new_null_literal(parser_ctx_t *ctx) return ret; } -static literal_t *new_undefined_literal(parser_ctx_t *ctx) -{ - literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); - - ret->type = LT_UNDEFINED; - - return ret; -} - static literal_t *new_boolean_literal(parser_ctx_t *ctx, VARIANT_BOOL bval) { literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index b13091fa476..d91b1f25ba3 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -1013,4 +1013,10 @@ ok(typeof(doesnotexist) === "undefined", "typeof(doesnotexist) = " + typeof(does (function() { newValue = 1; })(); ok(newValue === 1, "newValue = " + newValue); +obj = {undefined: 3}; + +/* Keep this test in the end of file */ +undefined = 6; +ok(undefined === 6, "undefined = " + undefined); + reportSuccess(); -- 2.11.4.GIT