jscript: Added Math.PI implementation.
authorJacek Caban <jacek@codeweavers.com>
Thu, 11 Dec 2008 11:27:39 +0000 (12:27 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 11 Dec 2008 11:45:36 +0000 (12:45 +0100)
dlls/jscript/math.c
dlls/jscript/tests/api.js

index e6b7202e1a2910d88989de5fbc413c40a361d880..ceabc36639b54f9d95c2ef901ce63bb31587c978 100644 (file)
@@ -54,6 +54,21 @@ static const WCHAR sinW[] = {'s','i','n',0};
 static const WCHAR sqrtW[] = {'s','q','r','t',0};
 static const WCHAR tanW[] = {'t','a','n',0};
 
+static HRESULT math_constant(DOUBLE val, WORD flags, VARIANT *retv)
+{
+    switch(flags) {
+    case DISPATCH_PROPERTYGET:
+        V_VT(retv) = VT_R8;
+        V_R8(retv) = val;
+        return S_OK;
+    case DISPATCH_PROPERTYPUT:
+        return S_OK;
+    }
+
+    FIXME("unhandled flags %x\n", flags);
+    return E_NOTIMPL;
+}
+
 static HRESULT Math_E(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
@@ -89,11 +104,12 @@ static HRESULT Math_LN10(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *
     return E_NOTIMPL;
 }
 
+/* ECMA-262 3rd Edition    15.8.1.6 */
 static HRESULT Math_PI(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    TRACE("\n");
+    return math_constant(M_PI, flags, retv);
 }
 
 static HRESULT Math_SQRT2(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
index 2868c0f7aedeb7298bb5b9be991f487cffcd3b7b..738161217ba5700d64544c981bf2a0b26a675eec 100644 (file)
@@ -609,4 +609,9 @@ date = new Date(100);
 ok(date.getTime() === 100, "date.getTime() = " + date.getTime());
 ok(Date.prototype.getTime() === 0, "date.prototype.getTime() = " + Date.prototype.getTime());
 
+ok(typeof(Math.PI) === "number", "typeof(Math.PI) = " + typeof(Math.PI));
+ok(Math.floor(Math.PI*100) === 314, "Math.PI = " + Math.PI);
+Math.PI = "test";
+ok(Math.floor(Math.PI*100) === 314, "modified Math.PI = " + Math.PI);
+
 reportSuccess();