Jacek Caban : jscript: Return array length in Array. unshift for invoke version >= 2.
Alexandre Julliard
julliard at winehq.org
Tue Oct 20 10:33:34 CDT 2009
Module: wine
Branch: master
Commit: 96cbc45a528966bff136d3f5214edfb69cafbb58
URL: http://source.winehq.org/git/wine.git/?a=commit;h=96cbc45a528966bff136d3f5214edfb69cafbb58
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Oct 19 20:40:39 2009 +0200
jscript: Return array length in Array.unshift for invoke version >= 2.
---
dlls/jscript/array.c | 55 +++++++++++++++++++++++++++----------------------
1 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c
index e4ee4db..8ce35cf 100644
--- a/dlls/jscript/array.c
+++ b/dlls/jscript/array.c
@@ -967,29 +967,25 @@ static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISP
return hres;
argc = arg_cnt(dp);
- if(!argc) {
- if(retv)
- V_VT(retv) = VT_EMPTY;
- return S_OK;
- }
-
- buf_end = buf + sizeof(buf)/sizeof(WCHAR)-1;
- *buf_end-- = 0;
- i = length;
+ if(argc) {
+ buf_end = buf + sizeof(buf)/sizeof(WCHAR)-1;
+ *buf_end-- = 0;
+ i = length;
- while(i--) {
- str = idx_to_str(i, buf_end);
+ while(i--) {
+ str = idx_to_str(i, buf_end);
- hres = jsdisp_get_id(jsthis, str, 0, &id);
- if(SUCCEEDED(hres)) {
- hres = jsdisp_propget(jsthis, id, &var, ei, caller);
- if(FAILED(hres))
- return hres;
+ hres = jsdisp_get_id(jsthis, str, 0, &id);
+ if(SUCCEEDED(hres)) {
+ hres = jsdisp_propget(jsthis, id, &var, ei, caller);
+ if(FAILED(hres))
+ return hres;
- hres = jsdisp_propput_idx(jsthis, i+argc, &var, ei, caller);
- VariantClear(&var);
- }else if(hres == DISP_E_UNKNOWNNAME) {
- hres = IDispatchEx_DeleteMemberByDispID(vthis->u.dispex, id);
+ hres = jsdisp_propput_idx(jsthis, i+argc, &var, ei, caller);
+ VariantClear(&var);
+ }else if(hres == DISP_E_UNKNOWNNAME) {
+ hres = IDispatchEx_DeleteMemberByDispID(vthis->u.dispex, id);
+ }
}
if(FAILED(hres))
@@ -1002,12 +998,21 @@ static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISP
return hres;
}
- hres = set_length(jsthis, ei, length+argc);
- if(FAILED(hres))
- return hres;
+ if(argc) {
+ length += argc;
+ hres = set_length(jsthis, ei, length);
+ if(FAILED(hres))
+ return hres;
+ }
- if(retv)
- V_VT(retv) = VT_EMPTY;
+ if(retv) {
+ if(ctx->version < 2) {
+ V_VT(retv) = VT_EMPTY;
+ }else {
+ V_VT(retv) = VT_I4;
+ V_I4(retv) = length;
+ }
+ }
return S_OK;
}
More information about the wine-cvs
mailing list