summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/bytecode/GetByIdStatus.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/bytecode/GetByIdStatus.h
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/bytecode/GetByIdStatus.h')
-rw-r--r--Source/JavaScriptCore/bytecode/GetByIdStatus.h65
1 files changed, 27 insertions, 38 deletions
diff --git a/Source/JavaScriptCore/bytecode/GetByIdStatus.h b/Source/JavaScriptCore/bytecode/GetByIdStatus.h
index 6afac5400..a1e801cca 100644
--- a/Source/JavaScriptCore/bytecode/GetByIdStatus.h
+++ b/Source/JavaScriptCore/bytecode/GetByIdStatus.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012, 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,11 +26,9 @@
#ifndef GetByIdStatus_h
#define GetByIdStatus_h
-#include "CallLinkStatus.h"
-#include "CodeOrigin.h"
-#include "ConcurrentJITLock.h"
-#include "ExitingJITType.h"
-#include "GetByIdVariant.h"
+#include "IntendedStructureChain.h"
+#include "PropertyOffset.h"
+#include "StructureSet.h"
#include "StructureStubInfo.h"
namespace JSC {
@@ -49,66 +47,57 @@ public:
GetByIdStatus()
: m_state(NoInformation)
+ , m_offset(invalidOffset)
{
}
explicit GetByIdStatus(State state)
: m_state(state)
+ , m_offset(invalidOffset)
{
ASSERT(state == NoInformation || state == TakesSlowPath || state == MakesCalls);
}
GetByIdStatus(
- State state, bool wasSeenInJIT, const GetByIdVariant& variant = GetByIdVariant())
+ State state, bool wasSeenInJIT, const StructureSet& structureSet = StructureSet(),
+ PropertyOffset offset = invalidOffset, JSValue specificValue = JSValue(), PassRefPtr<IntendedStructureChain> chain = nullptr)
: m_state(state)
+ , m_structureSet(structureSet)
+ , m_chain(chain)
+ , m_specificValue(specificValue)
+ , m_offset(offset)
, m_wasSeenInJIT(wasSeenInJIT)
{
- ASSERT((state == Simple) == variant.isSet());
- m_variants.append(variant);
+ ASSERT((state == Simple) == (offset != invalidOffset));
}
- static GetByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, UniquedStringImpl* uid);
- static GetByIdStatus computeFor(const StructureSet&, UniquedStringImpl* uid);
+ static GetByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, StringImpl* uid);
+ static GetByIdStatus computeFor(VM&, Structure*, StringImpl* uid);
- static GetByIdStatus computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin, UniquedStringImpl* uid);
-
-#if ENABLE(DFG_JIT)
- static GetByIdStatus computeForStubInfo(const ConcurrentJITLocker&, CodeBlock* baselineBlock, StructureStubInfo*, CodeOrigin, UniquedStringImpl* uid);
-#endif
-
State state() const { return m_state; }
bool isSet() const { return m_state != NoInformation; }
bool operator!() const { return !isSet(); }
bool isSimple() const { return m_state == Simple; }
-
- size_t numVariants() const { return m_variants.size(); }
- const Vector<GetByIdVariant, 1>& variants() const { return m_variants; }
- const GetByIdVariant& at(size_t index) const { return m_variants[index]; }
- const GetByIdVariant& operator[](size_t index) const { return at(index); }
-
bool takesSlowPath() const { return m_state == TakesSlowPath || m_state == MakesCalls; }
- bool makesCalls() const;
+ bool makesCalls() const { return m_state == MakesCalls; }
- bool wasSeenInJIT() const { return m_wasSeenInJIT; }
+ const StructureSet& structureSet() const { return m_structureSet; }
+ IntendedStructureChain* chain() const { return const_cast<IntendedStructureChain*>(m_chain.get()); } // Returns null if this is a direct access.
+ JSValue specificValue() const { return m_specificValue; } // Returns JSValue() if there is no specific value.
+ PropertyOffset offset() const { return m_offset; }
- void dump(PrintStream&) const;
+ bool wasSeenInJIT() const { return m_wasSeenInJIT; }
private:
-#if ENABLE(DFG_JIT)
- static bool hasExitSite(const ConcurrentJITLocker&, CodeBlock*, unsigned bytecodeIndex);
-#endif
-#if ENABLE(JIT)
- static GetByIdStatus computeForStubInfoWithoutExitSiteFeedback(
- const ConcurrentJITLocker&, CodeBlock* profiledBlock, StructureStubInfo*,
- UniquedStringImpl* uid, CallLinkStatus::ExitSiteData);
-#endif
- static GetByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, UniquedStringImpl* uid);
-
- bool appendVariant(const GetByIdVariant&);
+ static void computeForChain(GetByIdStatus& result, CodeBlock*, StringImpl* uid);
+ static GetByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, StringImpl* uid);
State m_state;
- Vector<GetByIdVariant, 1> m_variants;
+ StructureSet m_structureSet;
+ RefPtr<IntendedStructureChain> m_chain;
+ JSValue m_specificValue;
+ PropertyOffset m_offset;
bool m_wasSeenInJIT;
};