18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef JSGlobalData_h 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define JSGlobalData_h 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3221939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "CachedTranscendentalFunction.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "Heap.h" 34cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "DateInstanceCache.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ExecutableAllocator.h" 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "Strong.h" 378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JITStubs.h" 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "JSValue.h" 39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "NumericStrings.h" 408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "SmallStrings.h" 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Terminator.h" 428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "TimeoutChecker.h" 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WeakRandom.h" 440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include <wtf/BumpPointerAllocator.h> 458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/Forward.h> 468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/HashMap.h> 478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/RefCounted.h> 4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include <wtf/ThreadSpecific.h> 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include <wtf/WTFThreadData.h> 505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if ENABLE(REGEXP_TRACING) 515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include <wtf/ListHashSet.h> 525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct OpaqueJSClass; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct OpaqueJSClassContextData; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC { 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block class CodeBlock; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class CommonIdentifiers; 612bde8e466a4451c7319e3a072d118917957d6554Steve Block class HandleStack; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class IdentifierTable; 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project class Interpreter; 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class JSGlobalObject; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class JSObject; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Lexer; 6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch class NativeExecutable; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Parser; 6906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen class RegExpCache; 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class Stringifier; 71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project class Structure; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class UString; 735abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if ENABLE(REGEXP_TRACING) 745abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick class RegExp; 755abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct HashTable; 782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block struct Instruction; 792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block struct DSTOffsetCache { 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block DSTOffsetCache() 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block reset(); 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void reset() 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block offset = 0.0; 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block start = 0.0; 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block end = -1.0; 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block increment = 0.0; 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block double offset; 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block double start; 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block double end; 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block double increment; 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }; 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block enum ThreadStackType { 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ThreadStackTypeLarge, 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ThreadStackTypeSmall 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class JSGlobalData : public RefCounted<JSGlobalData> { 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 10721939df44de1705786c545cd1bf519d47250322dBen Murdoch // WebCore has a one-to-one mapping of threads to JSGlobalDatas; 10821939df44de1705786c545cd1bf519d47250322dBen Murdoch // either create() or createLeaked() should only be called once 10921939df44de1705786c545cd1bf519d47250322dBen Murdoch // on a thread, this is the 'default' JSGlobalData (it uses the 11021939df44de1705786c545cd1bf519d47250322dBen Murdoch // thread's default string uniquing table from wtfThreadData). 11121939df44de1705786c545cd1bf519d47250322dBen Murdoch // API contexts created using the new context group aware interface 11221939df44de1705786c545cd1bf519d47250322dBen Murdoch // create APIContextGroup objects which require less locking of JSC 11321939df44de1705786c545cd1bf519d47250322dBen Murdoch // than the old singleton APIShared JSGlobalData created for use by 11421939df44de1705786c545cd1bf519d47250322dBen Murdoch // the original API. 11521939df44de1705786c545cd1bf519d47250322dBen Murdoch enum GlobalDataType { Default, APIContextGroup, APIShared }; 11621939df44de1705786c545cd1bf519d47250322dBen Murdoch 1178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian struct ClientData { 1188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual ~ClientData() = 0; 1198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian }; 1208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 12121939df44de1705786c545cd1bf519d47250322dBen Murdoch bool isSharedInstance() { return globalDataType == APIShared; } 1224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang bool usingAPI() { return globalDataType != Default; } 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool sharedInstanceExists(); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static JSGlobalData& sharedInstance(); 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static PassRefPtr<JSGlobalData> create(ThreadStackType); 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static PassRefPtr<JSGlobalData> createLeaked(ThreadStackType); 12821939df44de1705786c545cd1bf519d47250322dBen Murdoch static PassRefPtr<JSGlobalData> createContextGroup(ThreadStackType); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~JSGlobalData(); 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(JSC_MULTIPLE_THREADS) 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Will start tracking threads that use the heap, which is resource-heavy. 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block void makeUsableFromMultipleThreads() { heap.machineThreads().makeUsableFromMultipleThreads(); } 134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 13621939df44de1705786c545cd1bf519d47250322dBen Murdoch GlobalDataType globalDataType; 1378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ClientData* clientData; 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* arrayTable; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* dateTable; 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const HashTable* jsonTable; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* mathTable; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* numberTable; 14481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const HashTable* objectConstructorTable; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* regExpTable; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* regExpConstructorTable; 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashTable* stringTable; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> structureStructure; 1502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> activationStructure; 1512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> interruptedExecutionErrorStructure; 1522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> terminatedExecutionErrorStructure; 1532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> staticScopeStructure; 1542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> strictEvalActivationStructure; 1552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> stringStructure; 1562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> notAnObjectStructure; 1572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> propertyNameIteratorStructure; 1582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> getterSetterStructure; 1592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> apiWrapperStructure; 1602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> scopeChainNodeStructure; 1612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> executableStructure; 1622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> nativeExecutableStructure; 1632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> evalExecutableStructure; 1642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> programExecutableStructure; 1652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> functionExecutableStructure; 1662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> dummyMarkableCellStructure; 1672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> structureChainStructure; 1682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(JSC_ZOMBIES) 1702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Strong<Structure> zombieStructure; 1712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 173d0825bca7fe65beaee391d30da42e937db621564Steve Block static void storeVPtrs(); 174d0825bca7fe65beaee391d30da42e937db621564Steve Block static JS_EXPORTDATA void* jsArrayVPtr; 175d0825bca7fe65beaee391d30da42e937db621564Steve Block static JS_EXPORTDATA void* jsByteArrayVPtr; 176d0825bca7fe65beaee391d30da42e937db621564Steve Block static JS_EXPORTDATA void* jsStringVPtr; 177d0825bca7fe65beaee391d30da42e937db621564Steve Block static JS_EXPORTDATA void* jsFunctionVPtr; 1788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IdentifierTable* identifierTable; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CommonIdentifiers* propertyNames; 1815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian const MarkedArgumentBuffer* emptyList; // Lists are supposed to be allocated on the stack to have their elements properly marked, which is not the case here - but this list has nothing to mark. 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SmallStrings smallStrings; 183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block NumericStrings numericStrings; 184cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block DateInstanceCache dateInstanceCache; 185cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(ASSEMBLER) 1878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ExecutableAllocator executableAllocator; 188f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ExecutableAllocator regexAllocator; 1898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 191967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if !ENABLE(JIT) 192967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool canUseJIT() { return false; } // interpreter only 193967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#elif !ENABLE(INTERPRETER) 194967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool canUseJIT() { return true; } // jit only 195e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#else 196967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool canUseJIT() { return m_canUseJIT; } 197e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#endif 198f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 199f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch const StackBounds& stack() 200f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 201f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return (globalDataType == Default) 202f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ? m_stack 203f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch : wtfThreadData().stack(); 204f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 205f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Lexer* lexer; 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Parser* parser; 2088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Interpreter* interpreter; 2098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(JIT) 210967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch OwnPtr<JITThunks> jitStubs; 211e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block MacroAssemblerCodePtr getCTIStub(ThunkGenerator generator) 21221939df44de1705786c545cd1bf519d47250322dBen Murdoch { 213967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return jitStubs->ctiStub(this, generator); 21421939df44de1705786c545cd1bf519d47250322dBen Murdoch } 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block NativeExecutable* getHostFunction(NativeFunction, ThunkGenerator); 2168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 2172bde8e466a4451c7319e3a072d118917957d6554Steve Block NativeExecutable* getHostFunction(NativeFunction); 21881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian TimeoutChecker timeoutChecker; 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Terminator terminator; 2218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Heap heap; 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2232bde8e466a4451c7319e3a072d118917957d6554Steve Block JSValue exception; 2248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(JIT) 2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ReturnAddressPtr exceptionLocation; 2268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian HashMap<OpaqueJSClass*, OpaqueJSClassContextData*> opaqueJSClassData; 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch unsigned globalObjectCount; 2318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian JSGlobalObject* dynamicGlobalObject; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 233ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch HashSet<JSObject*> stringRecursionCheckVisitedObjects; 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 235643ca7872b450ea4efacab6188849e5aac2ba161Steve Block double cachedUTCOffset; 236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block DSTOffsetCache dstOffsetCache; 237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block UString cachedDateString; 239643ca7872b450ea4efacab6188849e5aac2ba161Steve Block double cachedDateStringValue; 240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int maxReentryDepth; 24206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 24306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RegExpCache* m_regExpCache; 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BumpPointerAllocator m_regExpAllocator; 2450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 2465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if ENABLE(REGEXP_TRACING) 2475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick typedef ListHashSet<RefPtr<RegExp> > RTTraceList; 2485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick RTTraceList* m_rtTraceList; 2495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 2505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifndef NDEBUG 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ThreadIdentifier exclusiveThread; 253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 254231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 25521939df44de1705786c545cd1bf519d47250322dBen Murdoch CachedTranscendentalFunction<sin> cachedSin; 25621939df44de1705786c545cd1bf519d47250322dBen Murdoch 257643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void resetDateCache(); 258643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void startSampling(); 260231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void stopSampling(); 261231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void dumpSampleData(ExecState* exec); 262f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void recompileAllJSFunctions(); 26306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RegExpCache* regExpCache() { return m_regExpCache; } 2645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if ENABLE(REGEXP_TRACING) 2655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick void addRegExpToTrace(PassRefPtr<RegExp> regExp); 2665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 2675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick void dumpRegExpTrace(); 26881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch HandleSlot allocateGlobalHandle() { return heap.allocateGlobalHandle(); } 2692bde8e466a4451c7319e3a072d118917957d6554Steve Block HandleSlot allocateLocalHandle() { return heap.allocateLocalHandle(); } 2702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void clearBuiltinStructures(); 27181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 27321939df44de1705786c545cd1bf519d47250322dBen Murdoch JSGlobalData(GlobalDataType, ThreadStackType); 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static JSGlobalData*& sharedInstanceInternal(); 2755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void createNativeThunk(); 276e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#if ENABLE(JIT) && ENABLE(INTERPRETER) 277e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke bool m_canUseJIT; 278e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#endif 279f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch StackBounds m_stack; 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 28121939df44de1705786c545cd1bf519d47250322dBen Murdoch 2822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch inline HandleSlot allocateGlobalHandle(JSGlobalData& globalData) 2832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return globalData.allocateGlobalHandle(); 2852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace JSC 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // JSGlobalData_h 290