Diff
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/ChangeLog (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/ChangeLog 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/ChangeLog 2019-02-18 16:17:00 UTC (rev 241713)
@@ -1,5 +1,49 @@
2019-02-16 Yusuke Suzuki <ysuz...@apple.com>
+ [JSC] JSWrapperObject should not be destructible
+ https://bugs.webkit.org/show_bug.cgi?id=194743
+
+ Reviewed by Saam Barati.
+
+ JSWrapperObject should be just a wrapper object for JSValue, thus, it should not be a JSDestructibleObject.
+ Currently it is destructible object because DateInstance uses it. This patch changes Base of DateInstance from
+ JSWrapperObject to JSDestructibleObject, and makes JSWrapperObject non-destructible.
+
+ * runtime/BigIntObject.cpp:
+ (JSC::BigIntObject::BigIntObject):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::finishCreation):
+ * runtime/BooleanObject.cpp:
+ (JSC::BooleanObject::BooleanObject):
+ * runtime/BooleanObject.h:
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ (JSC::DateInstance::finishCreation):
+ * runtime/DateInstance.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncGetTime):
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/JSCPoison.h:
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::JSWrapperObject):
+ * runtime/NumberObject.cpp:
+ (JSC::NumberObject::NumberObject):
+ * runtime/NumberObject.h:
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::finishCreation):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ (JSC::StringObject::internalValue const):
+ * runtime/SymbolObject.cpp:
+ (JSC::SymbolObject::SymbolObject):
+ * runtime/SymbolObject.h:
+
+2019-02-16 Yusuke Suzuki <ysuz...@apple.com>
+
[JSC] Shrink UnlinkedFunctionExecutable
https://bugs.webkit.org/show_bug.cgi?id=194733
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BigIntObject.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BigIntObject.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BigIntObject.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -45,7 +45,7 @@
}
BigIntObject::BigIntObject(VM& vm, Structure* structure)
- : JSWrapperObject(vm, structure)
+ : Base(vm, structure)
{
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanConstructor.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanConstructor.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanConstructor.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -57,7 +57,7 @@
void BooleanConstructor::finishCreation(VM& vm, BooleanPrototype* booleanPrototype)
{
- Base::finishCreation(vm, booleanPrototype->classInfo()->className);
+ Base::finishCreation(vm, booleanPrototype->classInfo(vm)->className);
putDirectWithoutTransition(vm, vm.propertyNames->prototype, booleanPrototype, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum);
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanObject.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanObject.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanObject.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -28,10 +28,10 @@
STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(BooleanObject);
-const ClassInfo BooleanObject::s_info = { "Boolean", &JSWrapperObject::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(BooleanObject) };
+const ClassInfo BooleanObject::s_info = { "Boolean", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(BooleanObject) };
BooleanObject::BooleanObject(VM& vm, Structure* structure)
- : JSWrapperObject(vm, structure)
+ : Base(vm, structure)
{
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanObject.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanObject.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/BooleanObject.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -30,7 +30,7 @@
JS_EXPORT_PRIVATE void finishCreation(VM&);
public:
- typedef JSWrapperObject Base;
+ using Base = JSWrapperObject;
static BooleanObject* create(VM& vm, Structure* structure)
{
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DateInstance.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DateInstance.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DateInstance.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -32,10 +32,10 @@
using namespace WTF;
-const ClassInfo DateInstance::s_info = {"Date", &JSWrapperObject::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DateInstance)};
+const ClassInfo DateInstance::s_info = {"Date", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DateInstance)};
DateInstance::DateInstance(VM& vm, Structure* structure)
- : JSWrapperObject(vm, structure)
+ : Base(vm, structure)
{
}
@@ -43,7 +43,6 @@
{
Base::finishCreation(vm);
ASSERT(inherits(vm, info()));
- setInternalValue(vm, jsNaN());
}
void DateInstance::finishCreation(VM& vm, double time)
@@ -50,7 +49,7 @@
{
Base::finishCreation(vm);
ASSERT(inherits(vm, info()));
- setInternalValue(vm, jsNumber(timeClip(time)));
+ m_internalNumber = timeClip(time);
}
void DateInstance::destroy(JSCell* cell)
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DateInstance.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DateInstance.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DateInstance.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -20,12 +20,11 @@
#pragma once
-#include "JSCPoison.h"
-#include "JSWrapperObject.h"
+#include "JSDestructibleObject.h"
namespace JSC {
-class DateInstance final : public JSWrapperObject {
+class DateInstance final : public JSDestructibleObject {
protected:
JS_EXPORT_PRIVATE DateInstance(VM&, Structure*);
void finishCreation(VM&);
@@ -34,7 +33,7 @@
JS_EXPORT_PRIVATE static void destroy(JSCell*);
public:
- typedef JSWrapperObject Base;
+ using Base = JSDestructibleObject;
static DateInstance* create(VM& vm, Structure* structure, double date)
{
@@ -50,7 +49,8 @@
return instance;
}
- double internalNumber() const { return internalValue().asNumber(); }
+ double internalNumber() const { return m_internalNumber; }
+ void setInternalNumber(double value) { m_internalNumber = value; }
DECLARE_EXPORT_INFO;
@@ -77,7 +77,8 @@
JS_EXPORT_PRIVATE const GregorianDateTime* calculateGregorianDateTime(ExecState*) const;
JS_EXPORT_PRIVATE const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const;
- mutable PoisonedRefPtr<DateInstancePoison, DateInstanceData> m_data;
+ double m_internalNumber { PNaN };
+ mutable RefPtr<DateInstanceData> m_data;
};
} // namespace JSC
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DatePrototype.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DatePrototype.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/DatePrototype.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -648,7 +648,7 @@
if (UNLIKELY(!thisDateObj))
return throwVMTypeError(exec, scope);
- return JSValue::encode(thisDateObj->internalValue());
+ return JSValue::encode(jsNumber(thisDateObj->internalNumber()));
}
EncodedJSValue JSC_HOST_CALL dateProtoFuncGetFullYear(ExecState* exec)
@@ -923,9 +923,8 @@
double milli = timeClip(exec->argument(0).toNumber(exec));
RETURN_IF_EXCEPTION(scope, encodedJSValue());
- JSValue result = jsNumber(milli);
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(milli);
+ return JSValue::encode(jsNumber(milli));
}
static EncodedJSValue setNewValueFromTimeArgs(ExecState* exec, int numArgsToUse, WTF::TimeType inputTimeType)
@@ -940,9 +939,8 @@
double milli = thisDateObj->internalNumber();
if (!exec->argumentCount() || std::isnan(milli)) {
- JSValue result = jsNaN();
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(PNaN);
+ return JSValue::encode(jsNaN());
}
double secs = floor(milli / msPerSecond);
@@ -959,15 +957,14 @@
bool success = fillStructuresUsingTimeArgs(exec, numArgsToUse, &ms, &gregorianDateTime);
RETURN_IF_EXCEPTION(scope, encodedJSValue());
if (!success) {
- JSValue result = jsNaN();
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(PNaN);
+ return JSValue::encode(jsNaN());
}
double newUTCDate = gregorianDateTimeToMS(vm, gregorianDateTime, ms, inputTimeType);
- JSValue result = jsNumber(timeClip(newUTCDate));
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ double result = timeClip(newUTCDate);
+ thisDateObj->setInternalNumber(result);
+ return JSValue::encode(jsNumber(result));
}
static EncodedJSValue setNewValueFromDateArgs(ExecState* exec, int numArgsToUse, WTF::TimeType inputTimeType)
@@ -980,9 +977,8 @@
return throwVMTypeError(exec, scope);
if (!exec->argumentCount()) {
- JSValue result = jsNaN();
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(PNaN);
+ return JSValue::encode(jsNaN());
}
double milli = thisDateObj->internalNumber();
@@ -1004,15 +1000,14 @@
bool success = fillStructuresUsingDateArgs(exec, numArgsToUse, &ms, &gregorianDateTime);
RETURN_IF_EXCEPTION(scope, encodedJSValue());
if (!success) {
- JSValue result = jsNaN();
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(PNaN);
+ return JSValue::encode(jsNaN());
}
double newUTCDate = gregorianDateTimeToMS(vm, gregorianDateTime, ms, inputTimeType);
- JSValue result = jsNumber(timeClip(newUTCDate));
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ double result = timeClip(newUTCDate);
+ thisDateObj->setInternalNumber(result);
+ return JSValue::encode(jsNumber(result));
}
EncodedJSValue JSC_HOST_CALL dateProtoFuncSetMilliSeconds(ExecState* exec)
@@ -1095,9 +1090,8 @@
return throwVMTypeError(exec, scope);
if (!exec->argumentCount()) {
- JSValue result = jsNaN();
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(PNaN);
+ return JSValue::encode(jsNaN());
}
double milli = thisDateObj->internalNumber();
@@ -1118,16 +1112,15 @@
double year = exec->argument(0).toIntegerPreserveNaN(exec);
RETURN_IF_EXCEPTION(scope, encodedJSValue());
if (!std::isfinite(year)) {
- JSValue result = jsNaN();
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ thisDateObj->setInternalNumber(PNaN);
+ return JSValue::encode(jsNaN());
}
gregorianDateTime.setYear(toInt32((year >= 0 && year <= 99) ? (year + 1900) : year));
double timeInMilliseconds = gregorianDateTimeToMS(vm, gregorianDateTime, ms, WTF::LocalTime);
- JSValue result = jsNumber(timeClip(timeInMilliseconds));
- thisDateObj->setInternalValue(vm, result);
- return JSValue::encode(result);
+ double result = timeClip(timeInMilliseconds);
+ thisDateObj->setInternalNumber(result);
+ return JSValue::encode(jsNumber(result));
}
EncodedJSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState* exec)
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/JSCPoison.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/JSCPoison.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/JSCPoison.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -33,7 +33,6 @@
#define FOR_EACH_JSC_POISON(v) \
v(ArrayPrototype) \
v(CodeBlock) \
- v(DateInstance) \
v(GlobalData) \
v(JITCode) \
v(JSAPIWrapperObject) \
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/JSWrapperObject.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/JSWrapperObject.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/JSWrapperObject.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -21,15 +21,15 @@
#pragma once
-#include "JSDestructibleObject.h"
+#include "JSObject.h"
namespace JSC {
// This class is used as a base for classes such as String,
-// Number, Boolean and Date which are wrappers for primitive types.
-class JSWrapperObject : public JSDestructibleObject {
+// Number, Boolean and Symbol which are wrappers for primitive types.
+class JSWrapperObject : public JSNonFinalObject {
public:
- typedef JSDestructibleObject Base;
+ using Base = JSNonFinalObject;
static size_t allocationSize(Checked<size_t> inlineCapacity)
{
@@ -65,7 +65,7 @@
};
inline JSWrapperObject::JSWrapperObject(VM& vm, Structure* structure)
- : JSDestructibleObject(vm, structure)
+ : Base(vm, structure)
{
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/NumberObject.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/NumberObject.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/NumberObject.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -30,10 +30,10 @@
STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(NumberObject);
-const ClassInfo NumberObject::s_info = { "Number", &JSWrapperObject::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(NumberObject) };
+const ClassInfo NumberObject::s_info = { "Number", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(NumberObject) };
NumberObject::NumberObject(VM& vm, Structure* structure)
- : JSWrapperObject(vm, structure)
+ : Base(vm, structure)
{
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/NumberObject.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/NumberObject.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/NumberObject.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -30,7 +30,7 @@
void finishCreation(VM&);
public:
- typedef JSWrapperObject Base;
+ using Base = JSWrapperObject;
static NumberObject* create(VM& vm, Structure* structure)
{
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringConstructor.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringConstructor.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringConstructor.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -63,7 +63,7 @@
void StringConstructor::finishCreation(VM& vm, StringPrototype* stringPrototype)
{
- Base::finishCreation(vm, stringPrototype->classInfo()->className);
+ Base::finishCreation(vm, stringPrototype->classInfo(vm)->className);
putDirectWithoutTransition(vm, vm.propertyNames->prototype, stringPrototype, PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum | PropertyAttribute::DontDelete);
putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum);
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringObject.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringObject.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringObject.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -30,10 +30,10 @@
STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(StringObject);
-const ClassInfo StringObject::s_info = { "String", &JSWrapperObject::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(StringObject) };
+const ClassInfo StringObject::s_info = { "String", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(StringObject) };
StringObject::StringObject(VM& vm, Structure* structure)
- : JSWrapperObject(vm, structure)
+ : Base(vm, structure)
{
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringObject.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringObject.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/StringObject.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -27,7 +27,7 @@
class StringObject : public JSWrapperObject {
public:
- typedef JSWrapperObject Base;
+ using Base = JSWrapperObject;
static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | OverridesGetPropertyNames;
static StringObject* create(VM& vm, Structure* structure)
@@ -59,7 +59,7 @@
DECLARE_EXPORT_INFO;
- JSString* internalValue() const { return asString(JSWrapperObject::internalValue());}
+ JSString* internalValue() const { return asString(JSWrapperObject::internalValue()); }
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
{
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/SymbolObject.cpp (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/SymbolObject.cpp 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/SymbolObject.cpp 2019-02-18 16:17:00 UTC (rev 241713)
@@ -33,10 +33,10 @@
STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(SymbolObject);
-const ClassInfo SymbolObject::s_info = { "Symbol", &JSWrapperObject::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(SymbolObject) };
+const ClassInfo SymbolObject::s_info = { "Symbol", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(SymbolObject) };
SymbolObject::SymbolObject(VM& vm, Structure* structure)
- : JSWrapperObject(vm, structure)
+ : Base(vm, structure)
{
}
Modified: releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/SymbolObject.h (241712 => 241713)
--- releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/SymbolObject.h 2019-02-18 16:16:52 UTC (rev 241712)
+++ releases/WebKitGTK/webkit-2.24/Source/_javascript_Core/runtime/SymbolObject.h 2019-02-18 16:17:00 UTC (rev 241713)
@@ -28,7 +28,7 @@
class SymbolObject final : public JSWrapperObject {
public:
- typedef JSWrapperObject Base;
+ using Base = JSWrapperObject;
static SymbolObject* create(VM& vm, Structure* structure)
{