Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (218217 => 218218)
--- trunk/Source/_javascript_Core/ChangeLog 2017-06-13 22:31:49 UTC (rev 218217)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-06-13 22:39:34 UTC (rev 218218)
@@ -1,3 +1,32 @@
+2017-06-13 Michael Saboff <msab...@apple.com>
+
+ Refactor AbsenceOfSetter to AbsenceOfSetEffects
+ https://bugs.webkit.org/show_bug.cgi?id=173322
+
+ Reviewed by Filip Pizlo.
+
+ * bytecode/ObjectPropertyCondition.h:
+ (JSC::ObjectPropertyCondition::absenceOfSetEffectWithoutBarrier):
+ (JSC::ObjectPropertyCondition::absenceOfSetEffect):
+ (JSC::ObjectPropertyCondition::absenceOfSetterWithoutBarrier): Deleted.
+ (JSC::ObjectPropertyCondition::absenceOfSetter): Deleted.
+ * bytecode/ObjectPropertyConditionSet.cpp:
+ (JSC::generateConditionsForPropertySetterMiss):
+ (JSC::generateConditionsForPropertySetterMissConcurrently):
+ * bytecode/PropertyCondition.cpp:
+ (JSC::PropertyCondition::dumpInContext):
+ (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint):
+ (JSC::PropertyCondition::isStillValid):
+ (WTF::printInternal):
+ * bytecode/PropertyCondition.h:
+ (JSC::PropertyCondition::absenceOfSetEffectWithoutBarrier):
+ (JSC::PropertyCondition::absenceOfSetEffect):
+ (JSC::PropertyCondition::hasPrototype):
+ (JSC::PropertyCondition::hash):
+ (JSC::PropertyCondition::operator==):
+ (JSC::PropertyCondition::absenceOfSetterWithoutBarrier): Deleted.
+ (JSC::PropertyCondition::absenceOfSetter): Deleted.
+
2017-06-13 JF Bastien <jfbast...@apple.com>
WebAssembly: import updated spec tests
Modified: trunk/Source/_javascript_Core/bytecode/ObjectPropertyCondition.h (218217 => 218218)
--- trunk/Source/_javascript_Core/bytecode/ObjectPropertyCondition.h 2017-06-13 22:31:49 UTC (rev 218217)
+++ trunk/Source/_javascript_Core/bytecode/ObjectPropertyCondition.h 2017-06-13 22:39:34 UTC (rev 218218)
@@ -88,21 +88,21 @@
return absenceWithoutBarrier(object, uid, prototype);
}
- static ObjectPropertyCondition absenceOfSetterWithoutBarrier(
+ static ObjectPropertyCondition absenceOfSetEffectWithoutBarrier(
JSObject* object, UniquedStringImpl* uid, JSObject* prototype)
{
ObjectPropertyCondition result;
result.m_object = object;
- result.m_condition = PropertyCondition::absenceOfSetterWithoutBarrier(uid, prototype);
+ result.m_condition = PropertyCondition::absenceOfSetEffectWithoutBarrier(uid, prototype);
return result;
}
- static ObjectPropertyCondition absenceOfSetter(
+ static ObjectPropertyCondition absenceOfSetEffect(
VM& vm, JSCell* owner, JSObject* object, UniquedStringImpl* uid, JSObject* prototype)
{
if (owner)
vm.heap.writeBarrier(owner);
- return absenceOfSetterWithoutBarrier(object, uid, prototype);
+ return absenceOfSetEffectWithoutBarrier(object, uid, prototype);
}
static ObjectPropertyCondition equivalenceWithoutBarrier(
Modified: trunk/Source/_javascript_Core/bytecode/ObjectPropertyConditionSet.cpp (218217 => 218218)
--- trunk/Source/_javascript_Core/bytecode/ObjectPropertyConditionSet.cpp 2017-06-13 22:31:49 UTC (rev 218217)
+++ trunk/Source/_javascript_Core/bytecode/ObjectPropertyConditionSet.cpp 2017-06-13 22:39:34 UTC (rev 218218)
@@ -206,8 +206,8 @@
vm, owner, object, uid, object->structure()->storedPrototypeObject());
break;
}
- case PropertyCondition::AbsenceOfSetter: {
- result = ObjectPropertyCondition::absenceOfSetter(
+ case PropertyCondition::AbsenceOfSetEffect: {
+ result = ObjectPropertyCondition::absenceOfSetEffect(
vm, owner, object, uid, object->structure()->storedPrototypeObject());
break;
}
@@ -333,7 +333,7 @@
vm, exec->lexicalGlobalObject(), headStructure, nullptr,
[&] (Vector<ObjectPropertyCondition>& conditions, JSObject* object) -> bool {
ObjectPropertyCondition result =
- generateCondition(vm, owner, object, uid, PropertyCondition::AbsenceOfSetter);
+ generateCondition(vm, owner, object, uid, PropertyCondition::AbsenceOfSetEffect);
if (!result)
return false;
conditions.append(result);
@@ -413,7 +413,7 @@
vm, globalObject, headStructure, nullptr,
[&] (Vector<ObjectPropertyCondition>& conditions, JSObject* object) -> bool {
ObjectPropertyCondition result =
- generateCondition(vm, nullptr, object, uid, PropertyCondition::AbsenceOfSetter);
+ generateCondition(vm, nullptr, object, uid, PropertyCondition::AbsenceOfSetEffect);
if (!result)
return false;
conditions.append(result);
Modified: trunk/Source/_javascript_Core/bytecode/PropertyCondition.cpp (218217 => 218218)
--- trunk/Source/_javascript_Core/bytecode/PropertyCondition.cpp 2017-06-13 22:31:49 UTC (rev 218217)
+++ trunk/Source/_javascript_Core/bytecode/PropertyCondition.cpp 2017-06-13 22:39:34 UTC (rev 218218)
@@ -47,7 +47,7 @@
out.print(" at ", offset(), " with attributes ", attributes());
return;
case Absence:
- case AbsenceOfSetter:
+ case AbsenceOfSetEffect:
out.print(" with prototype ", inContext(JSValue(prototype()), context));
return;
case Equivalence:
@@ -124,7 +124,7 @@
return true;
}
- case AbsenceOfSetter: {
+ case AbsenceOfSetEffect: {
if (structure->isDictionary()) {
if (verbose)
dataLog("Invalid because it's a dictionary.\n");
@@ -134,9 +134,6 @@
unsigned currentAttributes;
PropertyOffset currentOffset = structure->getConcurrently(uid(), currentAttributes);
if (currentOffset != invalidOffset) {
- // FIXME: Given the addition of the check for ReadOnly attributes, we should refactor
- // instances of AbsenceOfSetter.
- // https://bugs.webkit.org/show_bug.cgi?id=173322 - Refactor AbsenceOfSetter to something like AbsenceOfSetEffects
if (currentAttributes & (ReadOnly | Accessor | CustomAccessor)) {
if (verbose) {
dataLog(
@@ -223,7 +220,7 @@
// Currently we assume that an impure property can cause a property to appear, and can also
// "shadow" an existing JS property on the same object. Hence it affects both presence and
- // absence. It doesn't affect AbsenceOfSetter because impure properties aren't ever setters.
+ // absence. It doesn't affect AbsenceOfSetEffect because impure properties aren't ever setters.
switch (m_kind) {
case Absence:
if (structure->typeInfo().getOwnPropertySlotIsImpure() || structure->typeInfo().getOwnPropertySlotIsImpureForPropertyAbsence())
@@ -354,7 +351,7 @@
case JSC::PropertyCondition::Absence:
out.print("Absence");
return;
- case JSC::PropertyCondition::AbsenceOfSetter:
+ case JSC::PropertyCondition::AbsenceOfSetEffect:
out.print("Absence");
return;
case JSC::PropertyCondition::Equivalence:
Modified: trunk/Source/_javascript_Core/bytecode/PropertyCondition.h (218217 => 218218)
--- trunk/Source/_javascript_Core/bytecode/PropertyCondition.h 2017-06-13 22:31:49 UTC (rev 218217)
+++ trunk/Source/_javascript_Core/bytecode/PropertyCondition.h 2017-06-13 22:39:34 UTC (rev 218218)
@@ -37,7 +37,7 @@
enum Kind {
Presence,
Absence,
- AbsenceOfSetter,
+ AbsenceOfSetEffect,
Equivalence // An adaptive watchpoint on this will be a pair of watchpoints, and when the structure transitions, we will set the replacement watchpoint on the new structure.
};
@@ -89,22 +89,22 @@
return absenceWithoutBarrier(uid, prototype);
}
- static PropertyCondition absenceOfSetterWithoutBarrier(
+ static PropertyCondition absenceOfSetEffectWithoutBarrier(
UniquedStringImpl* uid, JSObject* prototype)
{
PropertyCondition result;
result.m_uid = uid;
- result.m_kind = AbsenceOfSetter;
+ result.m_kind = AbsenceOfSetEffect;
result.u.absence.prototype = prototype;
return result;
}
- static PropertyCondition absenceOfSetter(
+ static PropertyCondition absenceOfSetEffect(
VM& vm, JSCell* owner, UniquedStringImpl* uid, JSObject* prototype)
{
if (owner)
vm.heap.writeBarrier(owner);
- return absenceOfSetterWithoutBarrier(uid, prototype);
+ return absenceOfSetEffectWithoutBarrier(uid, prototype);
}
static PropertyCondition equivalenceWithoutBarrier(
@@ -143,7 +143,7 @@
return u.presence.attributes;
}
- bool hasPrototype() const { return !!*this && (m_kind == Absence || m_kind == AbsenceOfSetter); }
+ bool hasPrototype() const { return !!*this && (m_kind == Absence || m_kind == AbsenceOfSetEffect); }
JSObject* prototype() const
{
ASSERT(hasPrototype());
@@ -169,7 +169,7 @@
result ^= u.presence.attributes;
break;
case Absence:
- case AbsenceOfSetter:
+ case AbsenceOfSetEffect:
result ^= WTF::PtrHash<JSObject*>::hash(u.absence.prototype);
break;
case Equivalence:
@@ -190,7 +190,7 @@
return u.presence.offset == other.u.presence.offset
&& u.presence.attributes == other.u.presence.attributes;
case Absence:
- case AbsenceOfSetter:
+ case AbsenceOfSetEffect:
return u.absence.prototype == other.u.absence.prototype;
case Equivalence:
return u.equivalence.value == other.u.equivalence.value;