X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/b5422865f473faf3977f31b96a635c4c8c4ede09..9dae56ea45a0f5f8136a5c93d6f3a7f99399ca73:/kjs/math_object.cpp diff --git a/kjs/math_object.cpp b/kjs/math_object.cpp deleted file mode 100644 index 805efda..0000000 --- a/kjs/math_object.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) - * Copyright (C) 2007, 2008 Apple Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include "config.h" -#include "math_object.h" -#include "math_object.lut.h" - -#include "operations.h" -#include -#include -#include - -namespace KJS { - -// ------------------------------ MathObjectImp -------------------------------- - -const ClassInfo MathObjectImp::info = { "Math", 0, &mathTable }; - -/* Source for math_object.lut.h -@begin mathTable 21 - E MathObjectImp::Euler DontEnum|DontDelete|ReadOnly - LN2 MathObjectImp::Ln2 DontEnum|DontDelete|ReadOnly - LN10 MathObjectImp::Ln10 DontEnum|DontDelete|ReadOnly - LOG2E MathObjectImp::Log2E DontEnum|DontDelete|ReadOnly - LOG10E MathObjectImp::Log10E DontEnum|DontDelete|ReadOnly - PI MathObjectImp::Pi DontEnum|DontDelete|ReadOnly - SQRT1_2 MathObjectImp::Sqrt1_2 DontEnum|DontDelete|ReadOnly - SQRT2 MathObjectImp::Sqrt2 DontEnum|DontDelete|ReadOnly - abs mathProtoFuncAbs DontEnum|Function 1 - acos mathProtoFuncACos DontEnum|Function 1 - asin mathProtoFuncASin DontEnum|Function 1 - atan mathProtoFuncATan DontEnum|Function 1 - atan2 mathProtoFuncATan2 DontEnum|Function 2 - ceil mathProtoFuncCeil DontEnum|Function 1 - cos mathProtoFuncCos DontEnum|Function 1 - exp mathProtoFuncExp DontEnum|Function 1 - floor mathProtoFuncFloor DontEnum|Function 1 - log mathProtoFuncLog DontEnum|Function 1 - max mathProtoFuncMax DontEnum|Function 2 - min mathProtoFuncMin DontEnum|Function 2 - pow mathProtoFuncPow DontEnum|Function 2 - random mathProtoFuncRandom DontEnum|Function 0 - round mathProtoFuncRound DontEnum|Function 1 - sin mathProtoFuncSin DontEnum|Function 1 - sqrt mathProtoFuncSqrt DontEnum|Function 1 - tan mathProtoFuncTan DontEnum|Function 1 -@end -*/ - -MathObjectImp::MathObjectImp(ExecState*, ObjectPrototype* objectPrototype) - : JSObject(objectPrototype) -{ -} - -// ECMA 15.8 - -bool MathObjectImp::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot &slot) -{ - return getStaticPropertySlot(exec, &mathTable, this, propertyName, slot); -} - -JSValue* MathObjectImp::getValueProperty(ExecState*, int token) const -{ - switch (token) { - case Euler: - return jsNumber(exp(1.0)); - case Ln2: - return jsNumber(log(2.0)); - case Ln10: - return jsNumber(log(10.0)); - case Log2E: - return jsNumber(1.0 / log(2.0)); - case Log10E: - return jsNumber(1.0 / log(10.0)); - case Pi: - return jsNumber(piDouble); - case Sqrt1_2: - return jsNumber(sqrt(0.5)); - case Sqrt2: - return jsNumber(sqrt(2.0)); - } - - ASSERT_NOT_REACHED(); - return 0; -} - -// ------------------------------ Functions -------------------------------- - -JSValue* mathProtoFuncAbs(ExecState* exec, JSObject*, const List& args) -{ - double arg = args[0]->toNumber(exec); - return signbit(arg) ? jsNumber(-arg) : jsNumber(arg); -} - -JSValue* mathProtoFuncACos(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(acos(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncASin(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(asin(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncATan(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(atan(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncATan2(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(atan2(args[0]->toNumber(exec), args[1]->toNumber(exec))); -} - -JSValue* mathProtoFuncCeil(ExecState* exec, JSObject*, const List& args) -{ - double arg = args[0]->toNumber(exec); - if (signbit(arg) && arg > -1.0) - return jsNumber(-0.0); - return jsNumber(ceil(arg)); -} - -JSValue* mathProtoFuncCos(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(cos(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncExp(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(exp(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncFloor(ExecState* exec, JSObject*, const List& args) -{ - double arg = args[0]->toNumber(exec); - if (signbit(arg) && arg == 0.0) - return jsNumber(-0.0); - return jsNumber(floor(arg)); -} - -JSValue* mathProtoFuncLog(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(log(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncMax(ExecState* exec, JSObject*, const List& args) -{ - unsigned argsCount = args.size(); - double result = -Inf; - for (unsigned k = 0; k < argsCount; ++k) { - double val = args[k]->toNumber(exec); - if (isnan(val)) { - result = NaN; - break; - } - if (val > result || (val == 0 && result == 0 && !signbit(val))) - result = val; - } - return jsNumber(result); -} - -JSValue* mathProtoFuncMin(ExecState* exec, JSObject*, const List& args) -{ - unsigned argsCount = args.size(); - double result = +Inf; - for (unsigned k = 0; k < argsCount; ++k) { - double val = args[k]->toNumber(exec); - if (isnan(val)) { - result = NaN; - break; - } - if (val < result || (val == 0 && result == 0 && signbit(val))) - result = val; - } - return jsNumber(result); -} - -JSValue* mathProtoFuncPow(ExecState* exec, JSObject*, const List& args) -{ - // ECMA 15.8.2.1.13 - - double arg = args[0]->toNumber(exec); - double arg2 = args[1]->toNumber(exec); - - if (isnan(arg2)) - return jsNumber(NaN); - if (isinf(arg2) && fabs(arg) == 1) - return jsNumber(NaN); - return jsNumber(pow(arg, arg2)); -} - -static bool didInitRandom; - -JSValue* mathProtoFuncRandom(ExecState*, JSObject*, const List&) -{ - if (!didInitRandom) { - wtf_random_init(); - didInitRandom = true; - } - return jsNumber(wtf_random()); -} - -JSValue* mathProtoFuncRound(ExecState* exec, JSObject*, const List& args) -{ - double arg = args[0]->toNumber(exec); - if (signbit(arg) && arg >= -0.5) - return jsNumber(-0.0); - return jsNumber(floor(arg + 0.5)); -} - -JSValue* mathProtoFuncSin(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(sin(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncSqrt(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(sqrt(args[0]->toNumber(exec))); -} - -JSValue* mathProtoFuncTan(ExecState* exec, JSObject*, const List& args) -{ - return jsNumber(tan(args[0]->toNumber(exec))); -} - -} // namespace KJS