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