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