Module: wine Branch: master Commit: a0467ef11c0d31d06203c9a7a24f62819d128570 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a0467ef11c0d31d06203c9a7a2...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Dec 21 00:24:11 2009 +0100
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 9a89431..b9c40ae 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 83096db..0bcabf6 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 501da79..af142ed 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 4e04dea..2e79db9 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 0683ab6..cc9097d 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 <srcptr> 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 b13091f..d91b1f2 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();