forked from Mirrors/wine-wine
jscript: Store value as double in NumberInstance object.
parent
0bf61fb640
commit
7bb41e75b6
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue