summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGAbstractValue.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGAbstractValue.h')
-rw-r--r--Source/JavaScriptCore/dfg/DFGAbstractValue.h26
1 files changed, 25 insertions, 1 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGAbstractValue.h b/Source/JavaScriptCore/dfg/DFGAbstractValue.h
index c198b5e52..c60b792f6 100644
--- a/Source/JavaScriptCore/dfg/DFGAbstractValue.h
+++ b/Source/JavaScriptCore/dfg/DFGAbstractValue.h
@@ -284,6 +284,21 @@ struct AbstractValue {
checkConsistency();
}
+ bool filterByValue(JSValue value)
+ {
+ if (!validate(value))
+ return false;
+
+ if (!!value && value.isCell())
+ filter(StructureSet(value.asCell()->structure()));
+ else
+ filter(speculationFromValue(value));
+
+ m_value = value;
+
+ return true;
+ }
+
bool validateType(JSValue value) const
{
if (isTop())
@@ -327,6 +342,15 @@ struct AbstractValue {
return true;
}
+ Structure* bestProvenStructure() const
+ {
+ if (m_currentKnownStructure.hasSingleton())
+ return m_currentKnownStructure.singleton();
+ if (m_futurePossibleStructure.hasSingleton())
+ return m_futurePossibleStructure.singleton();
+ return 0;
+ }
+
void checkConsistency() const
{
if (!(m_type & SpecCell)) {
@@ -351,7 +375,7 @@ struct AbstractValue {
{
fprintf(out, "(%s, %s, ", speculationToString(m_type), arrayModesToString(m_arrayModes));
m_currentKnownStructure.dump(out);
- dataLog(", ");
+ dataLogF(", ");
m_futurePossibleStructure.dump(out);
if (!!m_value)
fprintf(out, ", %s", m_value.description());