Jacek Caban : jscript: Always use jsval-based to_object implementation.
Alexandre Julliard
julliard at winehq.org
Mon Sep 17 14:06:35 CDT 2012
Module: wine
Branch: master
Commit: 228aab23be7bd3b23cb362dd186eebce87171532
URL: http://source.winehq.org/git/wine.git/?a=commit;h=228aab23be7bd3b23cb362dd186eebce87171532
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Sep 17 15:19:19 2012 +0200
jscript: Always use jsval-based to_object implementation.
---
dlls/jscript/engine.c | 8 +++---
dlls/jscript/function.c | 4 +-
dlls/jscript/jscript.h | 3 +-
dlls/jscript/jsutils.c | 64 +++++++++++++++++++----------------------------
dlls/jscript/object.c | 2 +-
5 files changed, 34 insertions(+), 47 deletions(-)
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index 9cdc2fb..1a06b19 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -148,7 +148,7 @@ static HRESULT stack_pop_object(exec_ctx_t *ctx, IDispatch **r)
return S_OK;
}
- hres = to_object_jsval(ctx->script, v, r);
+ hres = to_object(ctx->script, v, r);
jsval_release(v);
return hres;
}
@@ -627,7 +627,7 @@ static HRESULT interp_push_scope(exec_ctx_t *ctx)
TRACE("\n");
v = stack_pop(ctx);
- hres = to_object_jsval(ctx->script, v, &disp);
+ hres = to_object(ctx->script, v, &disp);
jsval_release(v);
if(FAILED(hres))
return hres;
@@ -878,7 +878,7 @@ static HRESULT interp_memberid(exec_ctx_t *ctx)
namev = stack_pop(ctx);
objv = stack_pop(ctx);
- hres = to_object_jsval(ctx->script, objv, &obj);
+ hres = to_object(ctx->script, objv, &obj);
jsval_release(objv);
if(SUCCEEDED(hres)) {
hres = to_string(ctx->script, namev, ctx->ei, &name);
@@ -1578,7 +1578,7 @@ static HRESULT interp_delete(exec_ctx_t *ctx)
namev = stack_pop(ctx);
objv = stack_pop(ctx);
- hres = to_object_jsval(ctx->script, objv, &obj);
+ hres = to_object(ctx->script, objv, &obj);
jsval_release(objv);
if(FAILED(hres)) {
jsval_release(namev);
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 401aae2..041f104 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -389,7 +389,7 @@ static HRESULT Function_apply(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, un
if(argc) {
if(!is_undefined(argv[0]) && !is_null(argv[0])) {
- hres = to_object_jsval(ctx, argv[0], &this_obj);
+ hres = to_object(ctx, argv[0], &this_obj);
if(FAILED(hres))
return hres;
}
@@ -442,7 +442,7 @@ static HRESULT Function_call(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
if(argc) {
if(!is_undefined(argv[0]) && !is_null(argv[0])) {
- hres = to_object_jsval(ctx, argv[0], &this_obj);
+ hres = to_object(ctx, argv[0], &this_obj);
if(FAILED(hres))
return hres;
}
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 4a40bc6..bbac902 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -261,8 +261,7 @@ HRESULT to_integer(script_ctx_t*,jsval_t,jsexcept_t*,double*) DECLSPEC_HIDDEN;
HRESULT to_int32(script_ctx_t*,jsval_t,jsexcept_t*,INT*) DECLSPEC_HIDDEN;
HRESULT to_uint32(script_ctx_t*,jsval_t,jsexcept_t*,DWORD*) DECLSPEC_HIDDEN;
HRESULT to_string(script_ctx_t*,jsval_t,jsexcept_t*,BSTR*) DECLSPEC_HIDDEN;
-HRESULT to_object(script_ctx_t*,VARIANT*,IDispatch**) DECLSPEC_HIDDEN;
-HRESULT to_object_jsval(script_ctx_t*,jsval_t,IDispatch**) DECLSPEC_HIDDEN;
+HRESULT to_object(script_ctx_t*,jsval_t,IDispatch**) DECLSPEC_HIDDEN;
HRESULT variant_change_type(script_ctx_t*,VARIANT*,VARIANT*,VARTYPE) DECLSPEC_HIDDEN;
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index e89b8ae..1801f86 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -760,31 +760,30 @@ HRESULT to_string(script_ctx_t *ctx, jsval_t val, jsexcept_t *ei, BSTR *str)
}
/* ECMA-262 3rd Edition 9.9 */
-HRESULT to_object(script_ctx_t *ctx, VARIANT *v, IDispatch **disp)
+HRESULT to_object(script_ctx_t *ctx, jsval_t val, IDispatch **disp)
{
jsdisp_t *dispex;
HRESULT hres;
- switch(V_VT(v)) {
- case VT_BSTR:
- hres = create_string(ctx, V_BSTR(v), SysStringLen(V_BSTR(v)), &dispex);
+ switch(val.type) {
+ case JSV_STRING:
+ hres = create_string(ctx, get_string(val), SysStringLen(get_string(val)), &dispex);
if(FAILED(hres))
return hres;
*disp = to_disp(dispex);
break;
- case VT_I4:
- case VT_R8:
- hres = create_number(ctx, num_val(v), &dispex);
+ case JSV_NUMBER:
+ hres = create_number(ctx, get_number(val), &dispex);
if(FAILED(hres))
return hres;
*disp = to_disp(dispex);
break;
- case VT_DISPATCH:
- if(V_DISPATCH(v)) {
- IDispatch_AddRef(V_DISPATCH(v));
- *disp = V_DISPATCH(v);
+ case JSV_OBJECT:
+ if(get_object(val)) {
+ *disp = get_object(val);
+ IDispatch_AddRef(*disp);
}else {
jsdisp_t *obj;
@@ -795,47 +794,36 @@ HRESULT to_object(script_ctx_t *ctx, VARIANT *v, IDispatch **disp)
*disp = to_disp(obj);
}
break;
- case VT_BOOL:
- hres = create_bool(ctx, V_BOOL(v), &dispex);
+ case JSV_BOOL:
+ hres = create_bool(ctx, get_bool(val), &dispex);
if(FAILED(hres))
return hres;
*disp = to_disp(dispex);
break;
- case VT_ARRAY|VT_VARIANT:
- hres = create_vbarray(ctx, V_ARRAY(v), &dispex);
- if(FAILED(hres))
- return hres;
+ case JSV_VARIANT:
+ switch(V_VT(get_variant(val))) {
+ case VT_ARRAY|VT_VARIANT:
+ hres = create_vbarray(ctx, V_ARRAY(get_variant(val)), &dispex);
+ if(FAILED(hres))
+ return hres;
- *disp = to_disp(dispex);
+ *disp = to_disp(dispex);
+ break;
+
+ default:
+ FIXME("Unsupported %s\n", debugstr_variant(get_variant(val)));
+ return E_NOTIMPL;
+ }
break;
default:
- FIXME("unsupported vt %d\n", V_VT(v));
+ FIXME("unsupported %s\n", debugstr_jsval(val));
return E_NOTIMPL;
}
return S_OK;
}
-/* ECMA-262 3rd Edition 9.9 */
-HRESULT to_object_jsval(script_ctx_t *ctx, jsval_t v, IDispatch **disp)
-{
- VARIANT var;
- HRESULT hres;
-
- if(is_object_instance(v)) {
- *disp = get_object(v);
- IDispatch_AddRef(*disp);
- return S_OK;
- }
-
- hres = jsval_to_variant(v, &var);
- if(FAILED(hres))
- return hres;
-
- return to_object(ctx, &var, disp);
-}
-
HRESULT variant_change_type(script_ctx_t *ctx, VARIANT *dst, VARIANT *src, VARTYPE vt)
{
jsexcept_t ei;
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c
index b88cf84..99daf46 100644
--- a/dlls/jscript/object.c
+++ b/dlls/jscript/object.c
@@ -228,7 +228,7 @@ static HRESULT ObjectConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
if(!is_undefined(argv[0]) && !is_null(argv[0]) && (!is_object_instance(argv[0]) || get_object(argv[0]))) {
IDispatch *disp;
- hres = to_object_jsval(ctx, argv[0], &disp);
+ hres = to_object(ctx, argv[0], &disp);
if(FAILED(hres))
return hres;
More information about the wine-cvs
mailing list