Jacek Caban : jscript: Store exception value as jsval_t instead of VARIANT.

Alexandre Julliard julliard at winehq.org
Mon Sep 17 14:06:34 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Sep 17 15:17:36 2012 +0200

jscript: Store exception value as jsval_t instead of VARIANT.

---

 dlls/jscript/engine.c  |   38 +++++++-------------------------------
 dlls/jscript/error.c   |    2 +-
 dlls/jscript/jscript.c |    2 +-
 dlls/jscript/jscript.h |   11 ++++++-----
 dlls/jscript/jsutils.c |    2 +-
 dlls/jscript/regexp.c  |    2 +-
 6 files changed, 17 insertions(+), 40 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index 1cc8884..10e47f6 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -674,19 +674,9 @@ static HRESULT interp_case(exec_ctx_t *ctx)
 /* ECMA-262 3rd Edition    12.13 */
 static HRESULT interp_throw(exec_ctx_t *ctx)
 {
-    VARIANT v;
-    jsval_t val;
-    HRESULT hres;
-
     TRACE("\n");
 
-    val = stack_pop(ctx);
-    hres = jsval_to_variant(val, &v);
-    jsval_release(val);
-    if(FAILED(hres))
-        return hres;
-
-    ctx->ei->var = v;
+    ctx->ei->val = stack_pop(ctx);
     return DISP_E_EXCEPTION;
 }
 
@@ -778,9 +768,7 @@ static HRESULT interp_end_finally(exec_ctx_t *ctx)
         jsval_release(v);
         stack_popn(ctx, 1);
 
-        v = stack_pop(ctx);
-        hres = jsval_to_variant(v, &ctx->ei->var);
-        jsval_release(v);
+        ctx->ei->val = stack_pop(ctx);
         return SUCCEEDED(hres) ? DISP_E_EXCEPTION : hres;
     }
 
@@ -2382,7 +2370,7 @@ OP_LIST
 static HRESULT unwind_exception(exec_ctx_t *ctx)
 {
     except_frame_t *except_frame;
-    VARIANT except_val;
+    jsval_t except_val;
     BSTR ident;
     HRESULT hres;
 
@@ -2397,7 +2385,7 @@ static HRESULT unwind_exception(exec_ctx_t *ctx)
 
     ctx->ip = except_frame->catch_off;
 
-    except_val = ctx->ei->var;
+    except_val = ctx->ei->val;
     memset(ctx->ei, 0, sizeof(*ctx->ei));
 
     ident = except_frame->ident;
@@ -2408,30 +2396,18 @@ static HRESULT unwind_exception(exec_ctx_t *ctx)
 
         hres = create_dispex(ctx->script, NULL, NULL, &scope_obj);
         if(SUCCEEDED(hres)) {
-            jsval_t val;
-
-            hres = variant_to_jsval(&except_val, &val);
-            if(SUCCEEDED(hres)) {
-                hres = jsdisp_propput_name(scope_obj, ident, val, ctx->ei);
-                jsval_release(val);
-            }
+            hres = jsdisp_propput_name(scope_obj, ident, except_val, ctx->ei);
             if(FAILED(hres))
                 jsdisp_release(scope_obj);
         }
-        VariantClear(&except_val);
+        jsval_release(except_val);
         if(FAILED(hres))
             return hres;
 
         hres = scope_push(ctx->scope_chain, scope_obj, to_disp(scope_obj), &ctx->scope_chain);
         jsdisp_release(scope_obj);
     }else {
-        jsval_t exceptv;
-
-        hres = variant_to_jsval(&except_val, &exceptv);
-        if(FAILED(hres))
-            return hres;
-
-        hres = stack_push(ctx, exceptv);
+        hres = stack_push(ctx, except_val);
         if(FAILED(hres))
             return hres;
 
diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c
index 407bd3b..77497a9 100644
--- a/dlls/jscript/error.c
+++ b/dlls/jscript/error.c
@@ -400,7 +400,7 @@ static HRESULT throw_error(script_ctx_t *ctx, jsexcept_t *ei, HRESULT error, con
         return hres;
 
     if(ei)
-        var_set_jsdisp(&ei->var, err);
+        ei->val = jsval_obj(err);
     return error;
 }
 
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index bf6710b..f106be9 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -110,7 +110,7 @@ static HRESULT exec_global_code(JScript *This, bytecode_t *code)
 
     memset(&jsexcept, 0, sizeof(jsexcept));
     hres = exec_source(exec_ctx, code, &code->global_code, FALSE, &jsexcept, NULL);
-    VariantClear(&jsexcept.var);
+    jsval_release(jsexcept.val);
     exec_release(exec_ctx);
 
     IActiveScriptSite_OnLeaveScript(This->site);
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index ef20c54..41c67c9 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -37,11 +37,7 @@ typedef struct _jsval_t jsval_t;
 typedef struct _script_ctx_t script_ctx_t;
 typedef struct _exec_ctx_t exec_ctx_t;
 typedef struct _dispex_prop_t dispex_prop_t;
-
-typedef struct {
-    EXCEPINFO ei;
-    VARIANT var;
-} jsexcept_t;
+typedef struct _jsexcept_t jsexcept_t;
 
 typedef struct {
     void **blocks;
@@ -548,3 +544,8 @@ static inline LPWSTR heap_strdupW(LPCWSTR str)
 }
 
 #include "jsval.h"
+
+struct _jsexcept_t {
+    EXCEPINFO ei;
+    jsval_t val;
+};
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index a4f84c5..0439b10 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -1062,7 +1062,7 @@ HRESULT variant_change_type(script_ctx_t *ctx, VARIANT *dst, VARIANT *src, VARTY
     }
 
     if(FAILED(hres)) {
-        VariantClear(&ei.var);
+        jsval_release(ei.val);
         return hres;
     }
 
diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c
index e783c54..1c891a6 100644
--- a/dlls/jscript/regexp.c
+++ b/dlls/jscript/regexp.c
@@ -3525,7 +3525,7 @@ static INT index_from_val(script_ctx_t *ctx, jsval_t v)
     memset(&ei, 0, sizeof(ei));
     hres = to_number_jsval(ctx, v, &ei, &n);
     if(FAILED(hres)) { /* FIXME: Move ignoring exceptions to to_primitive */
-        VariantClear(&ei.var);
+        jsval_release(ei.val);
         return 0;
     }
 




More information about the wine-cvs mailing list