summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/interpreter/JSStack.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/interpreter/JSStack.h')
-rw-r--r--Source/JavaScriptCore/interpreter/JSStack.h164
1 files changed, 0 insertions, 164 deletions
diff --git a/Source/JavaScriptCore/interpreter/JSStack.h b/Source/JavaScriptCore/interpreter/JSStack.h
deleted file mode 100644
index cb47a9f0b..000000000
--- a/Source/JavaScriptCore/interpreter/JSStack.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2008, 2009, 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
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JSStack_h
-#define JSStack_h
-
-#include "ExecutableAllocator.h"
-#include "Register.h"
-#include <wtf/Noncopyable.h>
-#include <wtf/PageReservation.h>
-#include <wtf/VMTags.h>
-
-#define ENABLE_DEBUG_JSSTACK 0
-#if !defined(NDEBUG) && !defined(ENABLE_DEBUG_JSSTACK)
-#define ENABLE_DEBUG_JSSTACK 1
-#endif
-
-namespace JSC {
-
- class CodeBlockSet;
- class ConservativeRoots;
- class ExecState;
- class JITStubRoutineSet;
- class VM;
- class LLIntOffsetsExtractor;
-
- struct Instruction;
- typedef ExecState CallFrame;
-
- struct CallerFrameAndPC {
- CallFrame* callerFrame;
- Instruction* pc;
- };
-
- class JSStack {
- WTF_MAKE_NONCOPYABLE(JSStack);
- public:
- enum CallFrameHeaderEntry {
- CodeBlock = sizeof(CallerFrameAndPC) / sizeof(Register),
- ScopeChain,
- Callee,
- ArgumentCount,
- CallFrameHeaderSize,
-
- // The following entries are not part of the CallFrameHeader but are provided here as a convenience:
- ThisArgument = CallFrameHeaderSize,
- FirstArgument,
- };
-
- static const size_t defaultCapacity = 512 * 1024;
- // Allow 8k of excess registers before we start trying to reap the stack
- static const ptrdiff_t maxExcessCapacity = 8 * 1024;
-
- JSStack(VM&, size_t capacity = defaultCapacity);
- ~JSStack();
-
- void gatherConservativeRoots(ConservativeRoots&);
- void gatherConservativeRoots(ConservativeRoots&, JITStubRoutineSet&, CodeBlockSet&);
-
- Register* getBaseOfStack() const
- {
- return highAddress() - 1;
- }
-
- size_t size() const { return highAddress() - lowAddress(); }
-
- bool grow(Register*);
-
- static size_t committedByteCount();
- static void initializeThreading();
-
- Register* getTopOfFrame(CallFrame*);
- Register* getStartOfFrame(CallFrame*);
- Register* getTopOfStack();
-
- bool entryCheck(class CodeBlock*, int);
-
- CallFrame* pushFrame(class CodeBlock*, JSScope*, int argsCount, JSObject* callee);
-
- void popFrame(CallFrame*);
-
- bool containsAddress(Register* address) { return (lowAddress() <= address && address <= highAddress()); }
-
- void enableErrorStackReserve();
- void disableErrorStackReserve();
-
-#if ENABLE(DEBUG_JSSTACK)
- void installFence(CallFrame*, const char *function = "", int lineNo = 0);
- void validateFence(CallFrame*, const char *function = "", int lineNo = 0);
- static const int FenceSize = 4;
-#else // !ENABLE(DEBUG_JSSTACK)
- void installFence(CallFrame*, const char* = "", int = 0) { }
- void validateFence(CallFrame*, const char* = "", int = 0) { }
-#endif // !ENABLE(DEBUG_JSSTACK)
-
- private:
- Register* lowAddress() const
- {
- return m_end;
- }
-
- Register* highAddress() const
- {
- return reinterpret_cast_ptr<Register*>(static_cast<char*>(m_reservation.base()) + m_reservation.size());
- }
-
- Register* reservationEnd() const
- {
- char* reservationEnd = static_cast<char*>(m_reservation.base());
- return reinterpret_cast_ptr<Register*>(reservationEnd);
- }
-
-#if ENABLE(DEBUG_JSSTACK)
- static JSValue generateFenceValue(size_t argIndex);
- void installTrapsAfterFrame(CallFrame*);
-#else
- void installTrapsAfterFrame(CallFrame*) { }
-#endif
-
- bool growSlowCase(Register*);
- void shrink(Register*);
- void releaseExcessCapacity();
- void addToCommittedByteCount(long);
-
- void updateStackLimit(Register* newEnd);
-
- VM& m_vm;
- Register* m_end;
- Register* m_commitEnd;
- Register* m_useableEnd;
- PageReservation m_reservation;
- CallFrame*& m_topCallFrame;
-
- friend class LLIntOffsetsExtractor;
- };
-
-} // namespace JSC
-
-#endif // JSStack_h