diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/bytecode/GetByIdStatus.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-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.h | 65 |
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; }; |