Jacek Caban : jscript: Store value as double in NumberInstance object.

Alexandre Julliard julliard at winehq.org
Tue Mar 27 12:48:04 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Mar 27 11:30:51 2012 +0200

jscript: Store value as double in NumberInstance object.

---

 dlls/jscript/jscript.h |    2 +-
 dlls/jscript/jsutils.c |    2 +-
 dlls/jscript/number.c  |   33 ++++++++++++++-------------------
 3 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index fbe3142..3948a9c 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -242,7 +242,7 @@ HRESULT create_regexp(script_ctx_t*,const WCHAR *,int,DWORD,jsdisp_t**) DECLSPEC
 HRESULT create_regexp_var(script_ctx_t*,VARIANT*,VARIANT*,jsdisp_t**) DECLSPEC_HIDDEN;
 HRESULT create_string(script_ctx_t*,const WCHAR*,DWORD,jsdisp_t**) DECLSPEC_HIDDEN;
 HRESULT create_bool(script_ctx_t*,VARIANT_BOOL,jsdisp_t**) DECLSPEC_HIDDEN;
-HRESULT create_number(script_ctx_t*,VARIANT*,jsdisp_t**) DECLSPEC_HIDDEN;
+HRESULT create_number(script_ctx_t*,double,jsdisp_t**) DECLSPEC_HIDDEN;
 HRESULT create_vbarray(script_ctx_t*,SAFEARRAY*,jsdisp_t**) DECLSPEC_HIDDEN;
 
 typedef enum {
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index 564dba6..31c471f 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -623,7 +623,7 @@ HRESULT to_object(script_ctx_t *ctx, VARIANT *v, IDispatch **disp)
         break;
     case VT_I4:
     case VT_R8:
-        hres = create_number(ctx, v, &dispex);
+        hres = create_number(ctx, num_val(v), &dispex);
         if(FAILED(hres))
             return hres;
 
diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c
index 7a3d8b0..de0ff63 100644
--- a/dlls/jscript/number.c
+++ b/dlls/jscript/number.c
@@ -30,7 +30,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 typedef struct {
     jsdisp_t dispex;
 
-    VARIANT num;
+    double value;
 } NumberInstance;
 
 static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
@@ -76,17 +76,16 @@ static HRESULT Number_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D
             return throw_type_error(ctx, ei, JS_E_INVALIDARG, NULL);
     }
 
-    if(V_VT(&number->num) == VT_I4)
-        val = V_I4(&number->num);
-    else
-        val = V_R8(&number->num);
+    val = number->value;
 
     if(radix==10 || isnan(val) || isinf(val)) {
-        hres = to_string(ctx, &number->num, ei, &str);
+        VARIANT v;
+
+        num_set_val(&v, val);
+        hres = to_string(ctx, &v, ei, &str);
         if(FAILED(hres))
             return hres;
-    }
-    else {
+    }else {
         INT idx = 0;
         DOUBLE integ, frac, log_radix = 0;
         WCHAR buf[NUMBER_TOSTRING_BUF_SIZE+16];
@@ -218,7 +217,7 @@ static HRESULT Number_valueOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI
         return throw_type_error(ctx, ei, JS_E_NUMBER_EXPECTED, NULL);
 
     if(retv)
-        *retv = number->num;
+        num_set_val(retv, number->value);
     return S_OK;
 }
 
@@ -231,7 +230,7 @@ static HRESULT Number_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP
     case INVOKE_FUNC:
         return throw_type_error(ctx, ei, JS_E_FUNCTION_EXPECTED, NULL);
     case DISPATCH_PROPERTYGET:
-        *retv = number->num;
+        num_set_val(retv, number->value);
         break;
 
     default:
@@ -288,20 +287,16 @@ static HRESULT NumberConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
 
     case DISPATCH_CONSTRUCT: {
         jsdisp_t *obj;
-        VARIANT v;
 
         if(arg_cnt(dp)) {
             hres = to_number(ctx, get_arg(dp, 0), ei, &n);
             if(FAILED(hres))
                 return hres;
-
-            num_set_val(&v, n);
         }else {
-            V_VT(&v) = VT_I4;
-            V_I4(&v) = 0;
+            n = 0;
         }
 
-        hres = create_number(ctx, &v, &obj);
+        hres = create_number(ctx, n, &obj);
         if(FAILED(hres))
             return hres;
 
@@ -347,7 +342,7 @@ HRESULT create_number_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdi
     if(FAILED(hres))
         return hres;
 
-    V_VT(&number->num) = VT_I4;
+    number->value = 0;
     hres = create_builtin_function(ctx, NumberConstr_value, NumberW, NULL,
             PROPF_CONSTR|1, &number->dispex, ret);
 
@@ -355,7 +350,7 @@ HRESULT create_number_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdi
     return hres;
 }
 
-HRESULT create_number(script_ctx_t *ctx, VARIANT *num, jsdisp_t **ret)
+HRESULT create_number(script_ctx_t *ctx, double value, jsdisp_t **ret)
 {
     NumberInstance *number;
     HRESULT hres;
@@ -364,7 +359,7 @@ HRESULT create_number(script_ctx_t *ctx, VARIANT *num, jsdisp_t **ret)
     if(FAILED(hres))
         return hres;
 
-    number->num = *num;
+    number->value = value;
 
     *ret = &number->dispex;
     return S_OK;




More information about the wine-cvs mailing list