Module: wine Branch: master Commit: 1a97632a4e1a5f653fbfacb695b6c2b6bf9af73f URL: http://source.winehq.org/git/wine.git/?a=commit;h=1a97632a4e1a5f653fbfacb695...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Sep 16 20:45:45 2008 +0200
jscript: Added to_object(number) implementation.
---
dlls/jscript/jscript.h | 1 + dlls/jscript/jsutils.c | 8 ++++++++ dlls/jscript/number.c | 17 +++++++++++++++++ dlls/jscript/tests/lang.js | 4 ++++ 4 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 8f14e63..4b384c7 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -135,6 +135,7 @@ HRESULT create_array(script_ctx_t*,DWORD,DispatchEx**); HRESULT create_regexp_str(script_ctx_t*,const WCHAR*,DWORD,const WCHAR*,DWORD,DispatchEx**); HRESULT create_string(script_ctx_t*,const WCHAR*,DWORD,DispatchEx**); HRESULT create_bool(script_ctx_t*,VARIANT_BOOL,DispatchEx**); +HRESULT create_number(script_ctx_t*,VARIANT*,DispatchEx**);
HRESULT to_primitive(script_ctx_t*,VARIANT*,jsexcept_t*,VARIANT*); HRESULT to_boolean(VARIANT*,VARIANT_BOOL*); diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c index 01b0ef7..616369e 100644 --- a/dlls/jscript/jsutils.c +++ b/dlls/jscript/jsutils.c @@ -260,6 +260,14 @@ HRESULT to_object(exec_ctx_t *ctx, VARIANT *v, IDispatch **disp)
*disp = (IDispatch*)_IDispatchEx_(dispex); break; + case VT_I4: + case VT_R8: + hres = create_number(ctx->parser->script, v, &dispex); + if(FAILED(hres)) + return hres; + + *disp = (IDispatch*)_IDispatchEx_(dispex); + break; case VT_DISPATCH: IDispatch_AddRef(V_DISPATCH(v)); *disp = V_DISPATCH(v); diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c index b4db863..108cfff 100644 --- a/dlls/jscript/number.c +++ b/dlls/jscript/number.c @@ -24,6 +24,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(jscript);
typedef struct { DispatchEx dispex; + + VARIANT num; } NumberInstance;
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0}; @@ -165,3 +167,18 @@ HRESULT create_number_constr(script_ctx_t *ctx, DispatchEx **ret) jsdisp_release(&number->dispex); return hres; } + +HRESULT create_number(script_ctx_t *ctx, VARIANT *num, DispatchEx **ret) +{ + NumberInstance *number; + HRESULT hres; + + hres = alloc_number(ctx, TRUE, &number); + if(FAILED(hres)) + return hres; + + number->num = *num; + + *ret = &number->dispex; + return S_OK; +} diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index 3ca57c0..e099df9 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -239,6 +239,10 @@ ok("".test === true, """.test is not true"); Boolean.prototype.test = true; ok(true.test === true, "true.test is not true");
+Number.prototype.test = true; +ok((0).test === true, "(0).test is not true"); +ok((0.5).test === true, "(0.5).test is not true"); + var state = ""; try { ok(state === "", "try: state = " + state);