diff options
author | Kristian Monsen <kristianm@google.com> | 2010-05-25 07:58:57 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-05-25 07:58:57 -0700 |
commit | af3a41387e228a5fbaec2957e5756497f9107b4a (patch) | |
tree | 12f68f43faa6b0d8d2c5bec49959c1062f0feeac /JavaScriptCore/bytecode/CodeBlock.h | |
parent | 1e51c8e2be1aabe013c4595352e2e1edc16ae0de (diff) | |
parent | 6c2af9490927c3c5959b5cb07461b646f8b32f6c (diff) | |
download | external_webkit-af3a41387e228a5fbaec2957e5756497f9107b4a.zip external_webkit-af3a41387e228a5fbaec2957e5756497f9107b4a.tar.gz external_webkit-af3a41387e228a5fbaec2957e5756497f9107b4a.tar.bz2 |
Merge "Merge WebKit at r59636: Initial merge by git"
Diffstat (limited to 'JavaScriptCore/bytecode/CodeBlock.h')
-rw-r--r-- | JavaScriptCore/bytecode/CodeBlock.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/JavaScriptCore/bytecode/CodeBlock.h b/JavaScriptCore/bytecode/CodeBlock.h index 1bbb265..13956df 100644 --- a/JavaScriptCore/bytecode/CodeBlock.h +++ b/JavaScriptCore/bytecode/CodeBlock.h @@ -272,7 +272,7 @@ namespace JSC { class CodeBlock : public FastAllocBase { friend class JIT; protected: - CodeBlock(ScriptExecutable* ownerExecutable, CodeType, PassRefPtr<SourceProvider>, unsigned sourceOffset, SymbolTable* symbolTable); + CodeBlock(ScriptExecutable* ownerExecutable, CodeType, PassRefPtr<SourceProvider>, unsigned sourceOffset, SymbolTable* symbolTable, bool isConstructor); public: virtual ~CodeBlock(); @@ -350,7 +350,7 @@ namespace JSC { unsigned getBytecodeIndex(CallFrame* callFrame, ReturnAddressPtr returnAddress) { reparseForExceptionInfoIfNecessary(callFrame); - return binaryChop<CallReturnOffsetToBytecodeIndex, unsigned, getCallReturnOffset>(callReturnIndexVector().begin(), callReturnIndexVector().size(), ownerExecutable()->generatedJITCode().offsetOf(returnAddress.value()))->bytecodeIndex; + return binaryChop<CallReturnOffsetToBytecodeIndex, unsigned, getCallReturnOffset>(callReturnIndexVector().begin(), callReturnIndexVector().size(), getJITCode().offsetOf(returnAddress.value()))->bytecodeIndex; } bool functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex); @@ -368,8 +368,8 @@ namespace JSC { #endif #if ENABLE(JIT) - JITCode& getJITCode() { return ownerExecutable()->generatedJITCode(); } - ExecutablePool* executablePool() { return ownerExecutable()->getExecutablePool(); } + JITCode& getJITCode() { return m_isConstructor ? ownerExecutable()->generatedJITCodeForConstruct() : ownerExecutable()->generatedJITCodeForCall(); } + ExecutablePool* executablePool() { return getJITCode().getExecutablePool(); } #endif ScriptExecutable* ownerExecutable() const { return m_ownerExecutable; } @@ -458,6 +458,10 @@ namespace JSC { unsigned addFunctionExpr(NonNullPassRefPtr<FunctionExecutable> n) { unsigned size = m_functionExprs.size(); m_functionExprs.append(n); return size; } FunctionExecutable* functionExpr(int index) { return m_functionExprs[index].get(); } + unsigned addRegExp(RegExp* r) { createRareDataIfNecessary(); unsigned size = m_rareData->m_regexps.size(); m_rareData->m_regexps.append(r); return size; } + RegExp* regexp(int index) const { ASSERT(m_rareData); return m_rareData->m_regexps[index].get(); } + + // Jump Tables size_t numberOfImmediateSwitchJumpTables() const { return m_rareData ? m_rareData->m_immediateSwitchJumpTables.size() : 0; } @@ -485,6 +489,7 @@ namespace JSC { int m_numCalleeRegisters; int m_numVars; int m_numParameters; + bool m_isConstructor; private: #if !defined(NDEBUG) || ENABLE(OPCODE_SAMPLING) @@ -552,6 +557,9 @@ namespace JSC { struct RareData : FastAllocBase { Vector<HandlerInfo> m_exceptionHandlers; + // Rare Constants + Vector<RefPtr<RegExp> > m_regexps; + // Jump Tables Vector<SimpleJumpTable> m_immediateSwitchJumpTables; Vector<SimpleJumpTable> m_characterSwitchJumpTables; @@ -572,7 +580,7 @@ namespace JSC { class GlobalCodeBlock : public CodeBlock { public: GlobalCodeBlock(ScriptExecutable* ownerExecutable, CodeType codeType, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset, JSGlobalObject* globalObject) - : CodeBlock(ownerExecutable, codeType, sourceProvider, sourceOffset, &m_unsharedSymbolTable) + : CodeBlock(ownerExecutable, codeType, sourceProvider, sourceOffset, &m_unsharedSymbolTable, false) , m_globalObject(globalObject) { m_globalObject->codeBlocks().add(this); @@ -628,8 +636,8 @@ namespace JSC { // as we need to initialise the CodeBlock before we could initialise any RefPtr to hold the shared // symbol table, so we just pass as a raw pointer with a ref count of 1. We then manually deref // in the destructor. - FunctionCodeBlock(FunctionExecutable* ownerExecutable, CodeType codeType, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset) - : CodeBlock(ownerExecutable, codeType, sourceProvider, sourceOffset, new SharedSymbolTable) + FunctionCodeBlock(FunctionExecutable* ownerExecutable, CodeType codeType, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset, bool isConstructor) + : CodeBlock(ownerExecutable, codeType, sourceProvider, sourceOffset, new SharedSymbolTable, isConstructor) { } ~FunctionCodeBlock() |