Jacek Caban : jscript: Return double from to_integer.
Alexandre Julliard
julliard at winehq.org
Thu May 3 14:23:49 CDT 2012
Module: wine
Branch: master
Commit: 56bf46fda0770d5de871b955f397bd8f1343cb7c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=56bf46fda0770d5de871b955f397bd8f1343cb7c
Author: Jacek Caban <jacek at 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
More information about the wine-cvs
mailing list