Jacek Caban : jscript: Make undefined a property of global object.

Alexandre Julliard julliard at winehq.org
Mon Dec 21 09:39:50 CST 2009


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

Author: Jacek Caban <jacek at 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();




More information about the wine-cvs mailing list