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