Module: wine Branch: master Commit: 9a7265beccfc385ed133bcd9afaff3befcb4640c URL: http://source.winehq.org/git/wine.git/?a=commit;h=9a7265beccfc385ed133bcd9af...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Oct 16 14:31:18 2008 -0500
jscript: Added Infinity value implementation.
---
dlls/jscript/global.c | 15 +++++++++++++-- dlls/jscript/jscript.h | 12 ++++++++++++ dlls/jscript/tests/lang.js | 9 +++++++++ 3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 39055fa..ae9cc5b 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -126,8 +126,19 @@ static HRESULT JSGlobal_NaN(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM static HRESULT JSGlobal_Infinity(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("\n"); + + switch(flags) { + case DISPATCH_PROPERTYGET: + num_set_inf(retv, TRUE); + break; + + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; }
static HRESULT JSGlobal_Array(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 88bbb8d..59e2353 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -252,6 +252,18 @@ static inline void num_set_nan(VARIANT *v) #endif }
+static inline void num_set_inf(VARIANT *v, BOOL positive) +{ + V_VT(v) = VT_R8; +#ifdef INFINITY + V_R8(v) = positive ? INFINITY : -INFINITY; +#else + V_UI8(v) = (ULONGLONG)0x7ff00000<<32; + if(!positive) + V_R8(v) = -V_R8(v); +#endif +} + const char *debugstr_variant(const VARIANT*);
HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**); diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index 5d53320..bbafb6e 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -787,9 +787,18 @@ if (true)
ok(isNaN(NaN) === true, "isNaN(NaN) !== true"); ok(isNaN(0.5) === false, "isNaN(0.5) !== false"); +ok(isNaN(Infinity) === false, "isNaN(Infinity) !== false"); ok(isNaN() === true, "isNaN() !== true"); ok(isNaN(NaN, 0) === true, "isNaN(NaN, 0) !== true"); ok(isNaN(0.5, NaN) === false, "isNaN(0.5, NaN) !== false"); ok(isNaN(+undefined) === true, "isNaN(+undefined) !== true");
+ok(isFinite(0.5) === true, "isFinite(0.5) !== true"); +ok(isFinite(Infinity) === false, "isFinite(Infinity) !== fals"); +ok(isFinite(-Infinity) === false, "isFinite(Infinity) !== fals"); +ok(isFinite(NaN) === false, "isFinite(NaN) !== false"); +ok(isFinite(0.5, NaN) === true, "isFinite(0.5, NaN) !== true"); +ok(isFinite(NaN, 0.5) === false, "isFinite(NaN, 0.5) !== false"); +ok(isFinite() === false, "isFinite() !== false"); + reportSuccess();