Module: wine Branch: master Commit: 56bf46fda0770d5de871b955f397bd8f1343cb7c URL: http://source.winehq.org/git/wine.git/?a=commit;h=56bf46fda0770d5de871b955f3...
Author: Jacek Caban jacek@codeweavers.com Date: Thu May 3 10:42:42 2012 +0200
jscript: Return double from to_integer.
---
dlls/jscript/array.c | 8 ++---- dlls/jscript/jscript.h | 2 +- dlls/jscript/jsutils.c | 15 +++++------- dlls/jscript/string.c | 56 +++++++++++++---------------------------------- 4 files changed, 26 insertions(+), 55 deletions(-)
diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index e288525..5ff6344 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -853,9 +853,9 @@ static HRESULT Array_splice(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPP { DWORD length, start=0, delete_cnt=0, argc, i, add_args = 0; jsdisp_t *ret_array = NULL, *jsthis; + VARIANT v; double d; int n; - VARIANT v; HRESULT hres = S_OK;
TRACE("\n"); @@ -866,10 +866,9 @@ static HRESULT Array_splice(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPP
argc = arg_cnt(dp); if(argc >= 1) { - hres = to_integer(ctx, get_arg(dp,0), ei, &v); + hres = to_integer(ctx, get_arg(dp,0), ei, &d); if(FAILED(hres)) return hres; - d = num_val(&v);
if(is_int32(d)) { if((n = d) >= 0) @@ -882,10 +881,9 @@ static HRESULT Array_splice(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPP }
if(argc >= 2) { - hres = to_integer(ctx, get_arg(dp,1), ei, &v); + hres = to_integer(ctx, get_arg(dp,1), ei, &d); if(FAILED(hres)) return hres; - d = num_val(&v);
if(is_int32(d)) { if((n = d) > 0) diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index c9bd6c0..dcdd143 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -254,7 +254,7 @@ typedef enum { HRESULT to_primitive(script_ctx_t*,VARIANT*,jsexcept_t*,VARIANT*, hint_t) DECLSPEC_HIDDEN; HRESULT to_boolean(VARIANT*,VARIANT_BOOL*) DECLSPEC_HIDDEN; HRESULT to_number(script_ctx_t*,VARIANT*,jsexcept_t*,double*) DECLSPEC_HIDDEN; -HRESULT to_integer(script_ctx_t*,VARIANT*,jsexcept_t*,VARIANT*) DECLSPEC_HIDDEN; +HRESULT to_integer(script_ctx_t*,VARIANT*,jsexcept_t*,double*) DECLSPEC_HIDDEN; HRESULT to_int32(script_ctx_t*,VARIANT*,jsexcept_t*,INT*) DECLSPEC_HIDDEN; HRESULT to_uint32(script_ctx_t*,VARIANT*,jsexcept_t*,DWORD*) DECLSPEC_HIDDEN; HRESULT to_string(script_ctx_t*,VARIANT*,jsexcept_t*,BSTR*) DECLSPEC_HIDDEN; diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c index 5e7e347..c3924b7 100644 --- a/dlls/jscript/jsutils.c +++ b/dlls/jscript/jsutils.c @@ -457,13 +457,13 @@ HRESULT to_number(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, double *ret) }
/* ECMA-262 3rd Edition 9.4 */ -HRESULT to_integer(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret) +HRESULT to_integer(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, double *ret) { double n; HRESULT hres;
if(V_VT(v) == VT_I4) { - *ret = *v; + *ret = V_I4(v); return S_OK; }
@@ -471,13 +471,10 @@ HRESULT to_integer(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret) if(FAILED(hres)) return hres;
- if(isnan(n)) { - V_VT(ret) = VT_I4; - V_I4(ret) = 0; - }else { - num_set_val(ret, n >= 0.0 ? floor(n) : -floor(-n)); - } - + if(isnan(n)) + *ret = 0; + else + *ret = n >= 0.0 ? floor(n) : -floor(-n); return S_OK; }
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index 9e2fcb2..ea826c6 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -302,15 +302,13 @@ static HRESULT String_charAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS return hres;
if(arg_cnt(dp)) { - VARIANT num; double d;
- hres = to_integer(ctx, get_arg(dp, 0), ei, &num); + hres = to_integer(ctx, get_arg(dp, 0), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; } - d = num_val(&num); pos = is_int32(d) ? d : -1; }
@@ -349,17 +347,14 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, return hres;
if(arg_cnt(dp) > 0) { - VARIANT v; double d;
- hres = to_integer(ctx, get_arg(dp, 0), ei, &v); + hres = to_integer(ctx, get_arg(dp, 0), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); - if(!is_int32(d) || d < 0 || d >= length) { SysFreeString(val_str); if(retv) @@ -493,15 +488,11 @@ static HRESULT String_indexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI }
if(arg_cnt(dp) >= 2) { - VARIANT ival; double d;
- hres = to_integer(ctx, get_arg(dp,1), ei, &ival); - if(SUCCEEDED(hres)) { - d = num_val(&ival); - if(d > 0.0) - pos = is_int32(d) ? min((int)d, length) : length; - } + hres = to_integer(ctx, get_arg(dp,1), ei, &d); + if(SUCCEEDED(hres) && d > 0.0) + pos = is_int32(d) ? min(length, d) : length; }
if(SUCCEEDED(hres)) { @@ -567,15 +558,11 @@ static HRESULT String_lastIndexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags search_len = SysStringLen(search_str);
if(arg_cnt(dp) >= 2) { - VARIANT ival; double d;
- hres = to_integer(ctx, get_arg(dp,1), ei, &ival); - if(SUCCEEDED(hres)) { - d = num_val(&ival); - if(d > 0) - pos = is_int32(d) ? min((int)d, length) : length; - } + hres = to_integer(ctx, get_arg(dp,1), ei, &d); + if(SUCCEEDED(hres) && d > 0) + pos = is_int32(d) ? min(length, d) : length; }else { pos = length; } @@ -1072,7 +1059,6 @@ static HRESULT String_slice(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP DWORD length; INT start=0, end; double d; - VARIANT v; HRESULT hres;
TRACE("\n"); @@ -1082,14 +1068,12 @@ static HRESULT String_slice(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP return hres;
if(arg_cnt(dp)) { - hres = to_integer(ctx, get_arg(dp,0), ei, &v); + hres = to_integer(ctx, get_arg(dp,0), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); - if(is_int32(d)) { start = d; if(start < 0) { @@ -1105,14 +1089,12 @@ static HRESULT String_slice(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP }
if(arg_cnt(dp) >= 2) { - hres = to_integer(ctx, get_arg(dp,1), ei, &v); + hres = to_integer(ctx, get_arg(dp,1), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); - if(is_int32(d)) { end = d; if(end < 0) { @@ -1301,7 +1283,6 @@ static HRESULT String_substring(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, BSTR val_str; INT start=0, end; DWORD length; - VARIANT v; double d; HRESULT hres;
@@ -1312,27 +1293,25 @@ static HRESULT String_substring(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, return hres;
if(arg_cnt(dp) >= 1) { - hres = to_integer(ctx, get_arg(dp,0), ei, &v); + hres = to_integer(ctx, get_arg(dp,0), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); if(d >= 0) - start = is_int32(d) ? min((int)d, length) : length; + start = is_int32(d) ? min(length, d) : length; }
if(arg_cnt(dp) >= 2) { - hres = to_integer(ctx, get_arg(dp,1), ei, &v); + hres = to_integer(ctx, get_arg(dp,1), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); if(d >= 0) - end = is_int32(d) ? min((int)d, length) : length; + end = is_int32(d) ? min(length, d) : length; else end = 0; }else { @@ -1365,7 +1344,6 @@ static HRESULT String_substr(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS const WCHAR *str; INT start=0, len; DWORD length; - VARIANT v; double d; HRESULT hres;
@@ -1376,25 +1354,23 @@ static HRESULT String_substr(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS return hres;
if(arg_cnt(dp) >= 1) { - hres = to_integer(ctx, get_arg(dp,0), ei, &v); + hres = to_integer(ctx, get_arg(dp,0), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); if(d >= 0) start = is_int32(d) ? min(length, d) : length; }
if(arg_cnt(dp) >= 2) { - hres = to_integer(ctx, get_arg(dp,1), ei, &v); + hres = to_integer(ctx, get_arg(dp,1), ei, &d); if(FAILED(hres)) { SysFreeString(val_str); return hres; }
- d = num_val(&v); if(d >= 0.0) len = is_int32(d) ? min(length-start, d) : length-start; else