Jacek Caban : jscript: Throw an exception when evaluating invalid identifier instead of on lookup failure .

Alexandre Julliard julliard at winehq.org
Thu Aug 27 10:31:23 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Aug 27 01:21:38 2009 +0200

jscript: Throw an exception when evaluating invalid identifier instead of on lookup failure.

---

 dlls/jscript/engine.c |   20 ++++++++++++++++----
 dlls/jscript/engine.h |    4 +++-
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index 2f884b2..d314de6 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -57,6 +57,9 @@ static void exprval_release(exprval_t *val)
         if(val->u.nameref.disp)
             IDispatch_Release(val->u.nameref.disp);
         SysFreeString(val->u.nameref.name);
+        return;
+    case EXPRVAL_INVALID:
+        SysFreeString(val->u.identifier);
     }
 }
 
@@ -75,10 +78,14 @@ static HRESULT exprval_value(script_ctx_t *ctx, exprval_t *val, jsexcept_t *ei,
         }
 
         return disp_propget(val->u.idref.disp, val->u.idref.id, ctx->lcid, ret, ei, NULL/*FIXME*/);
-    default:
-        ERR("type %d\n", val->type);
-        return E_FAIL;
+    case EXPRVAL_NAMEREF:
+        break;
+    case EXPRVAL_INVALID:
+        return throw_type_error(ctx, ei, IDS_UNDEFINED, val->u.identifier);
     }
+
+    ERR("type %d\n", val->type);
+    return E_FAIL;
 }
 
 static HRESULT exprval_to_value(script_ctx_t *ctx, exprval_t *val, jsexcept_t *ei, VARIANT *ret)
@@ -538,7 +545,12 @@ static HRESULT identifier_eval(exec_ctx_t *ctx, BSTR identifier, DWORD flags, js
         return S_OK;
     }
 
-    return throw_type_error(ctx->var_disp->ctx, ei, IDS_UNDEFINED, identifier);
+    ret->type = EXPRVAL_INVALID;
+    ret->u.identifier = SysAllocString(identifier);
+    if(!ret->u.identifier)
+        return E_OUTOFMEMORY;
+
+    return S_OK;
 }
 
 /* ECMA-262 3rd Edition    12.1 */
diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h
index 8d53f00..09394ce 100644
--- a/dlls/jscript/engine.h
+++ b/dlls/jscript/engine.h
@@ -272,7 +272,8 @@ typedef struct {
     enum {
         EXPRVAL_VARIANT,
         EXPRVAL_IDREF,
-        EXPRVAL_NAMEREF
+        EXPRVAL_NAMEREF,
+        EXPRVAL_INVALID
     } type;
     union {
         VARIANT var;
@@ -284,6 +285,7 @@ typedef struct {
             IDispatch *disp;
             BSTR name;
         } nameref;
+        BSTR identifier;
     } u;
 } exprval_t;
 




More information about the wine-cvs mailing list