Pass VM instead of JSGlobalObject to MathObject constructor.
<https://webkit.org/b/122119>
Reviewed by Geoffrey Garen.
The MathObject constructor was only using the global object to get
to the VM. finishCreation() still uses it to set up functions.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156679 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index 9242ae2..0b0bc81 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,13 @@
+2013-09-30 Andreas Kling <akling@apple.com>
+
+ Pass VM instead of JSGlobalObject to MathObject constructor.
+ <https://webkit.org/b/122119>
+
+ Reviewed by Geoffrey Garen.
+
+ The MathObject constructor was only using the global object to get
+ to the VM. finishCreation() still uses it to set up functions.
+
2013-09-30 Filip Pizlo <fpizlo@apple.com>
Get rid of the AlreadyInJSStack recoveries since they are totally redundant with the DisplacedInJSStack recoveries
diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
index c416ed2..cace3c3 100644
--- a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
@@ -388,7 +388,7 @@
putDirectWithoutTransition(vm, vm.propertyNames->eval, m_evalFunction.get(), DontEnum);
putDirectWithoutTransition(vm, vm.propertyNames->JSON, JSONObject::create(exec, this, JSONObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum);
- putDirectWithoutTransition(vm, vm.propertyNames->Math, MathObject::create(exec, this, MathObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum);
+ putDirectWithoutTransition(vm, vm.propertyNames->Math, MathObject::create(vm, this, MathObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum);
FixedArray<InternalFunction*, NUMBER_OF_TYPED_ARRAY_TYPES> typedArrayConstructors;
typedArrayConstructors[toIndex(TypeInt8)] = JSInt8ArrayConstructor::create(vm, JSInt8ArrayConstructor::createStructure(vm, this, m_functionPrototype.get()), m_typedArrays[toIndex(TypeInt8)].prototype.get(), "Int8Array");
diff --git a/Source/JavaScriptCore/runtime/JSObject.cpp b/Source/JavaScriptCore/runtime/JSObject.cpp
index 2519010..23c78fa 100644
--- a/Source/JavaScriptCore/runtime/JSObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSObject.cpp
@@ -2210,12 +2210,11 @@
putDirect(vm, propertyName, function, attributes);
}
-void JSObject::putDirectNativeFunctionWithoutTransition(ExecState* exec, JSGlobalObject* globalObject, const PropertyName& propertyName, unsigned functionLength, NativeFunction nativeFunction, Intrinsic intrinsic, unsigned attributes)
+void JSObject::putDirectNativeFunctionWithoutTransition(VM& vm, JSGlobalObject* globalObject, const PropertyName& propertyName, unsigned functionLength, NativeFunction nativeFunction, Intrinsic intrinsic, unsigned attributes)
{
StringImpl* name = propertyName.publicName();
ASSERT(name);
- VM& vm = exec->vm();
JSFunction* function = JSFunction::create(vm, globalObject, functionLength, name, nativeFunction, intrinsic);
putDirectWithoutTransition(vm, propertyName, function, attributes);
}
diff --git a/Source/JavaScriptCore/runtime/JSObject.h b/Source/JavaScriptCore/runtime/JSObject.h
index 3d65347..ce7cadfc 100644
--- a/Source/JavaScriptCore/runtime/JSObject.h
+++ b/Source/JavaScriptCore/runtime/JSObject.h
@@ -578,7 +578,7 @@
void putDirectUndefined(PropertyOffset offset) { locationForOffset(offset)->setUndefined(); }
void putDirectNativeFunction(VM&, JSGlobalObject*, const PropertyName&, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
- void putDirectNativeFunctionWithoutTransition(ExecState*, JSGlobalObject*, const PropertyName&, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
+ void putDirectNativeFunctionWithoutTransition(VM&, JSGlobalObject*, const PropertyName&, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow);
diff --git a/Source/JavaScriptCore/runtime/MathObject.cpp b/Source/JavaScriptCore/runtime/MathObject.cpp
index 8ba4e04..1ff2f91 100644
--- a/Source/JavaScriptCore/runtime/MathObject.cpp
+++ b/Source/JavaScriptCore/runtime/MathObject.cpp
@@ -60,44 +60,44 @@
const ClassInfo MathObject::s_info = { "Math", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(MathObject) };
-MathObject::MathObject(JSGlobalObject* globalObject, Structure* structure)
- : JSNonFinalObject(globalObject->vm(), structure)
+MathObject::MathObject(VM& vm, Structure* structure)
+ : JSNonFinalObject(vm, structure)
{
}
-void MathObject::finishCreation(ExecState* exec, JSGlobalObject* globalObject)
+void MathObject::finishCreation(VM& vm, JSGlobalObject* globalObject)
{
- Base::finishCreation(globalObject->vm());
+ Base::finishCreation(vm);
ASSERT(inherits(info()));
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "E"), jsNumber(exp(1.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "LN2"), jsNumber(log(2.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "LN10"), jsNumber(log(10.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "LOG2E"), jsNumber(1.0 / log(2.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "LOG10E"), jsNumber(0.4342944819032518), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "PI"), jsNumber(piDouble), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "SQRT1_2"), jsNumber(sqrt(0.5)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(exec->vm(), Identifier(exec, "SQRT2"), jsNumber(sqrt(2.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "E"), jsNumber(exp(1.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "LN2"), jsNumber(log(2.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "LN10"), jsNumber(log(10.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "LOG2E"), jsNumber(1.0 / log(2.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "LOG10E"), jsNumber(0.4342944819032518), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "PI"), jsNumber(piDouble), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "SQRT1_2"), jsNumber(sqrt(0.5)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(vm, Identifier(&vm, "SQRT2"), jsNumber(sqrt(2.0)), DontDelete | DontEnum | ReadOnly);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "abs"), 1, mathProtoFuncAbs, AbsIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "acos"), 1, mathProtoFuncACos, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "asin"), 1, mathProtoFuncASin, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "atan"), 1, mathProtoFuncATan, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "atan2"), 2, mathProtoFuncATan2, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "ceil"), 1, mathProtoFuncCeil, CeilIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "cos"), 1, mathProtoFuncCos, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "exp"), 1, mathProtoFuncExp, ExpIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "floor"), 1, mathProtoFuncFloor, FloorIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "log"), 1, mathProtoFuncLog, LogIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "max"), 2, mathProtoFuncMax, MaxIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "min"), 2, mathProtoFuncMin, MinIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "pow"), 2, mathProtoFuncPow, PowIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "random"), 0, mathProtoFuncRandom, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "round"), 1, mathProtoFuncRound, RoundIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "sin"), 1, mathProtoFuncSin, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "sqrt"), 1, mathProtoFuncSqrt, SqrtIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "tan"), 1, mathProtoFuncTan, NoIntrinsic, DontEnum | Function);
- putDirectNativeFunctionWithoutTransition(exec, globalObject, Identifier(exec, "imul"), 1, mathProtoFuncIMul, IMulIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "abs"), 1, mathProtoFuncAbs, AbsIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "acos"), 1, mathProtoFuncACos, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "asin"), 1, mathProtoFuncASin, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "atan"), 1, mathProtoFuncATan, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "atan2"), 2, mathProtoFuncATan2, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "ceil"), 1, mathProtoFuncCeil, CeilIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "cos"), 1, mathProtoFuncCos, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "exp"), 1, mathProtoFuncExp, ExpIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "floor"), 1, mathProtoFuncFloor, FloorIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "log"), 1, mathProtoFuncLog, LogIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "max"), 2, mathProtoFuncMax, MaxIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "min"), 2, mathProtoFuncMin, MinIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "pow"), 2, mathProtoFuncPow, PowIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "random"), 0, mathProtoFuncRandom, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "round"), 1, mathProtoFuncRound, RoundIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "sin"), 1, mathProtoFuncSin, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "sqrt"), 1, mathProtoFuncSqrt, SqrtIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "tan"), 1, mathProtoFuncTan, NoIntrinsic, DontEnum | Function);
+ putDirectNativeFunctionWithoutTransition(vm, globalObject, Identifier(&vm, "imul"), 1, mathProtoFuncIMul, IMulIntrinsic, DontEnum | Function);
}
// ------------------------------ Functions --------------------------------
diff --git a/Source/JavaScriptCore/runtime/MathObject.h b/Source/JavaScriptCore/runtime/MathObject.h
index 03a76d1..4b2a5bb 100644
--- a/Source/JavaScriptCore/runtime/MathObject.h
+++ b/Source/JavaScriptCore/runtime/MathObject.h
@@ -27,15 +27,15 @@
class MathObject : public JSNonFinalObject {
private:
- MathObject(JSGlobalObject*, Structure*);
+ MathObject(VM&, Structure*);
public:
typedef JSNonFinalObject Base;
- static MathObject* create(ExecState* exec, JSGlobalObject* globalObject, Structure* structure)
+ static MathObject* create(VM& vm, JSGlobalObject* globalObject, Structure* structure)
{
- MathObject* object = new (NotNull, allocateCell<MathObject>(*exec->heap())) MathObject(globalObject, structure);
- object->finishCreation(exec, globalObject);
+ MathObject* object = new (NotNull, allocateCell<MathObject>(vm.heap)) MathObject(vm, structure);
+ object->finishCreation(vm, globalObject);
return object;
}
@@ -47,7 +47,7 @@
}
protected:
- void finishCreation(ExecState*, JSGlobalObject*);
+ void finishCreation(VM&, JSGlobalObject*);
static const unsigned StructureFlags = OverridesGetOwnPropertySlot | JSObject::StructureFlags;
};