diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/ScopeChain.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/ScopeChain.h | 172 |
1 files changed, 0 insertions, 172 deletions
diff --git a/Source/JavaScriptCore/runtime/ScopeChain.h b/Source/JavaScriptCore/runtime/ScopeChain.h deleted file mode 100644 index c382008f1..000000000 --- a/Source/JavaScriptCore/runtime/ScopeChain.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2003, 2008, 2009 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#ifndef ScopeChain_h -#define ScopeChain_h - -#include "JSCell.h" -#include "Structure.h" -#include <wtf/FastAllocBase.h> - -namespace JSC { - - class JSGlobalData; - class JSGlobalObject; - class JSObject; - class LLIntOffsetsExtractor; - class ScopeChainIterator; - class SlotVisitor; - - class ScopeChainNode : public JSCell { - private: - ScopeChainNode(ScopeChainNode* next, JSObject* object, JSGlobalData* globalData, JSGlobalObject* globalObject, JSObject* globalThis) - : JSCell(*globalData, globalData->scopeChainNodeStructure.get()) - , globalData(globalData) - , next(*globalData, this, next, WriteBarrier<ScopeChainNode>::MayBeNull) - , object(*globalData, this, object) - , globalObject(*globalData, this, globalObject) - , globalThis(*globalData, this, globalThis) - { - } - - protected: - void finishCreation(JSGlobalData* globalData, JSGlobalObject* globalObject) - { - Base::finishCreation(*globalData); - ASSERT_UNUSED(globalObject, globalObject); - } - - public: - typedef JSCell Base; - - static ScopeChainNode* create(ExecState* exec, ScopeChainNode* next, JSObject* object, JSGlobalData* globalData, JSGlobalObject* globalObject, JSObject* globalThis) - { - ScopeChainNode* node = new (NotNull, allocateCell<ScopeChainNode>(*exec->heap())) ScopeChainNode(next, object, globalData, globalObject, globalThis); - node->finishCreation(globalData, globalObject); - return node; - } - static ScopeChainNode* create(ScopeChainNode* next, JSObject* object, JSGlobalData* globalData, JSGlobalObject* globalObject, JSObject* globalThis) - { - ScopeChainNode* node = new (NotNull, allocateCell<ScopeChainNode>(globalData->heap)) ScopeChainNode(next, object, globalData, globalObject, globalThis); - node->finishCreation(globalData, globalObject); - return node; - } - - JSGlobalData* globalData; - WriteBarrier<ScopeChainNode> next; - WriteBarrier<JSObject> object; - WriteBarrier<JSGlobalObject> globalObject; - WriteBarrier<JSObject> globalThis; - - ScopeChainNode* push(JSObject*); - ScopeChainNode* pop(); - - ScopeChainIterator begin(); - ScopeChainIterator end(); - - int localDepth(); - -#ifndef NDEBUG - void print(); -#endif - - static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue proto) { return Structure::create(globalData, globalObject, proto, TypeInfo(CompoundType, StructureFlags), &s_info); } - static void visitChildren(JSCell*, SlotVisitor&); - static JS_EXPORTDATA const ClassInfo s_info; - - private: - friend class LLIntOffsetsExtractor; - - static const unsigned StructureFlags = OverridesVisitChildren; - }; - - inline ScopeChainNode* ScopeChainNode::push(JSObject* o) - { - ASSERT(o); - return ScopeChainNode::create(this, o, globalData, globalObject.get(), globalThis.get()); - } - - inline ScopeChainNode* ScopeChainNode::pop() - { - ASSERT(next); - return next.get(); - } - - class ScopeChainIterator { - public: - ScopeChainIterator(ScopeChainNode* node) - : m_node(node) - { - } - - WriteBarrier<JSObject> const & operator*() const { return m_node->object; } - WriteBarrier<JSObject> const * operator->() const { return &(operator*()); } - - ScopeChainIterator& operator++() { m_node = m_node->next.get(); return *this; } - - // postfix ++ intentionally omitted - - bool operator==(const ScopeChainIterator& other) const { return m_node == other.m_node; } - bool operator!=(const ScopeChainIterator& other) const { return m_node != other.m_node; } - - private: - ScopeChainNode* m_node; - }; - - inline ScopeChainIterator ScopeChainNode::begin() - { - return ScopeChainIterator(this); - } - - inline ScopeChainIterator ScopeChainNode::end() - { - return ScopeChainIterator(0); - } - - ALWAYS_INLINE JSGlobalData& ExecState::globalData() const - { - ASSERT(scopeChain()->globalData); - return *scopeChain()->globalData; - } - - ALWAYS_INLINE JSGlobalObject* ExecState::lexicalGlobalObject() const - { - return scopeChain()->globalObject.get(); - } - - ALWAYS_INLINE JSObject* ExecState::globalThisValue() const - { - return scopeChain()->globalThis.get(); - } - - ALWAYS_INLINE ScopeChainNode* Register::scopeChain() const - { - return static_cast<ScopeChainNode*>(jsValue().asCell()); - } - - ALWAYS_INLINE Register& Register::operator=(ScopeChainNode* scopeChain) - { - *this = JSValue(scopeChain); - return *this; - } - -} // namespace JSC - -#endif // ScopeChain_h |