summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/bytecode/DFGExitProfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/bytecode/DFGExitProfile.h')
-rw-r--r--Source/JavaScriptCore/bytecode/DFGExitProfile.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/bytecode/DFGExitProfile.h b/Source/JavaScriptCore/bytecode/DFGExitProfile.h
index 31db084f5..09f9ee075 100644
--- a/Source/JavaScriptCore/bytecode/DFGExitProfile.h
+++ b/Source/JavaScriptCore/bytecode/DFGExitProfile.h
@@ -39,6 +39,7 @@ enum ExitKind {
Overflow, // We exited because of overflow.
NegativeZero, // We exited because we encountered negative zero.
InadequateCoverage, // We exited because we ended up in code that didn't have profiling coverage.
+ ArgumentsEscaped, // We exited because arguments escaped but we didn't expect them to.
Uncountable, // We exited for none of the above reasons, and we should not count it. Most uses of this should be viewed as a FIXME.
};
@@ -96,6 +97,15 @@ public:
ASSERT(exitKindIsCountable(kind));
}
+ // Use this constructor if you wish for the exit site to be counted globally within its
+ // code block.
+ explicit FrequentExitSite(ExitKind kind)
+ : m_bytecodeOffset(0)
+ , m_kind(kind)
+ {
+ ASSERT(exitKindIsCountable(kind));
+ }
+
bool operator!() const
{
return m_kind == ExitKindUnset;
@@ -178,6 +188,11 @@ public:
return m_frequentExitSites.find(site) != m_frequentExitSites.end();
}
+ bool hasExitSite(ExitKind kind) const
+ {
+ return hasExitSite(FrequentExitSite(kind));
+ }
+
bool hasExitSite(unsigned bytecodeIndex, ExitKind kind) const
{
return hasExitSite(FrequentExitSite(bytecodeIndex, kind));