18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 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#include "config.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSGlobalData.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ArgList.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Collector.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CommonIdentifiers.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FunctionConstructor.h" 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GetterSetter.h" 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Interpreter.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSActivation.h" 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSAPIValueWrapper.h" 408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JSArray.h" 418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JSByteArray.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSClassRef.h" 435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "JSFunction.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSLock.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSNotAnObject.h" 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSPropertyNameIterator.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSStaticScopeObject.h" 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Lexer.h" 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Lookup.h" 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Nodes.h" 51d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "Parser.h" 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(JSC_MULTIPLE_THREADS) 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Threading.h> 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ProfilerServer.h" 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WTF; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC { 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable arrayTable; 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable jsonTable; 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable dateTable; 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable mathTable; 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable numberTable; 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable regExpTable; 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable regExpConstructorTable; 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochextern JSC_CONST_HASHTABLE HashTable stringTable; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 74d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid* JSGlobalData::jsArrayVPtr; 75d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid* JSGlobalData::jsByteArrayVPtr; 76d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid* JSGlobalData::jsStringVPtr; 77d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid* JSGlobalData::jsFunctionVPtr; 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 79d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid JSGlobalData::storeVPtrs() 808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CollectorCell cell; 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void* storage = &cell; 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPILE_ASSERT(sizeof(JSArray) <= sizeof(CollectorCell), sizeof_JSArray_must_be_less_than_CollectorCell); 858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian JSCell* jsArray = new (storage) JSArray(JSArray::createStructure(jsNull())); 86d0825bca7fe65beaee391d30da42e937db621564Steve Block JSGlobalData::jsArrayVPtr = jsArray->vptr(); 878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian jsArray->~JSCell(); 888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPILE_ASSERT(sizeof(JSByteArray) <= sizeof(CollectorCell), sizeof_JSByteArray_must_be_less_than_CollectorCell); 908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian JSCell* jsByteArray = new (storage) JSByteArray(JSByteArray::VPtrStealingHack); 91d0825bca7fe65beaee391d30da42e937db621564Steve Block JSGlobalData::jsByteArrayVPtr = jsByteArray->vptr(); 928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian jsByteArray->~JSCell(); 938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPILE_ASSERT(sizeof(JSString) <= sizeof(CollectorCell), sizeof_JSString_must_be_less_than_CollectorCell); 958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian JSCell* jsString = new (storage) JSString(JSString::VPtrStealingHack); 96d0825bca7fe65beaee391d30da42e937db621564Steve Block JSGlobalData::jsStringVPtr = jsString->vptr(); 978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian jsString->~JSCell(); 988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPILE_ASSERT(sizeof(JSFunction) <= sizeof(CollectorCell), sizeof_JSFunction_must_be_less_than_CollectorCell); 1008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian JSCell* jsFunction = new (storage) JSFunction(JSFunction::createStructure(jsNull())); 101d0825bca7fe65beaee391d30da42e937db621564Steve Block JSGlobalData::jsFunctionVPtr = jsFunction->vptr(); 1028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian jsFunction->~JSCell(); 1038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 105d0825bca7fe65beaee391d30da42e937db621564Steve BlockJSGlobalData::JSGlobalData(bool isShared) 1068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian : isSharedInstance(isShared) 1078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , clientData(0) 1085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , arrayTable(fastNew<HashTable>(JSC::arrayTable)) 1095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , dateTable(fastNew<HashTable>(JSC::dateTable)) 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , jsonTable(fastNew<HashTable>(JSC::jsonTable)) 1115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , mathTable(fastNew<HashTable>(JSC::mathTable)) 1125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , numberTable(fastNew<HashTable>(JSC::numberTable)) 1135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , regExpTable(fastNew<HashTable>(JSC::regExpTable)) 1145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , regExpConstructorTable(fastNew<HashTable>(JSC::regExpConstructorTable)) 1155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , stringTable(fastNew<HashTable>(JSC::stringTable)) 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , activationStructure(JSActivation::createStructure(jsNull())) 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , interruptedExecutionErrorStructure(JSObject::createStructure(jsNull())) 118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , staticScopeStructure(JSStaticScopeObject::createStructure(jsNull())) 119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , stringStructure(JSString::createStructure(jsNull())) 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , notAnObjectErrorStubStructure(JSNotAnObjectErrorStub::createStructure(jsNull())) 121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , notAnObjectStructure(JSNotAnObject::createStructure(jsNull())) 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , propertyNameIteratorStructure(JSPropertyNameIterator::createStructure(jsNull())) 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , getterSetterStructure(GetterSetter::createStructure(jsNull())) 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , apiWrapperStructure(JSAPIValueWrapper::createStructure(jsNull())) 125d0825bca7fe65beaee391d30da42e937db621564Steve Block , dummyMarkableCellStructure(JSCell::createDummyStructure()) 1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(JSVALUE32) 127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , numberStructure(JSNumberCell::createStructure(jsNull())) 128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , identifierTable(createIdentifierTable()) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , propertyNames(new CommonIdentifiers(this)) 1315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , emptyList(new MarkedArgumentBuffer) 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , lexer(new Lexer(this)) 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , parser(new Parser) 1348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , interpreter(new Interpreter) 1358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(JIT) 1368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , jitStubs(this) 1378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 1388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , heap(this) 1398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , initializingLazyNumericCompareFunction(false) 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , head(0) 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , dynamicGlobalObject(0) 142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , functionCodeBlockBeingReparsed(0) 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , firstStringifierToMark(0) 144d0825bca7fe65beaee391d30da42e937db621564Steve Block , markStack(jsArrayVPtr) 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , cachedUTCOffset(NaN) 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , weakRandom(static_cast<int>(currentTime())) 147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifndef NDEBUG 148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , mainThreadOnly(false) 149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC) 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startProfilerServerIfNeeded(); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectJSGlobalData::~JSGlobalData() 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // By the time this is destroyed, heap.destroy() must already have been called. 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project delete interpreter; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Zeroing out to make the behavior more predictable when someone attempts to use a deleted instance. 163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project interpreter = 0; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project arrayTable->deleteTable(); 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dateTable->deleteTable(); 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch jsonTable->deleteTable(); 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mathTable->deleteTable(); 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project numberTable->deleteTable(); 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project regExpTable->deleteTable(); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project regExpConstructorTable->deleteTable(); 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stringTable->deleteTable(); 1745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(arrayTable)); 1765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(dateTable)); 1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch fastDelete(const_cast<HashTable*>(jsonTable)); 1785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(mathTable)); 1795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(numberTable)); 1805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(regExpTable)); 1815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(regExpConstructorTable)); 1825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian fastDelete(const_cast<HashTable*>(stringTable)); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete parser; 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete lexer; 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deleteAllValues(opaqueJSClassData); 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete emptyList; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete propertyNames; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deleteIdentifierTable(identifierTable); 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete clientData; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 197d0825bca7fe65beaee391d30da42e937db621564Steve BlockPassRefPtr<JSGlobalData> JSGlobalData::createNonDefault() 198d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 199d0825bca7fe65beaee391d30da42e937db621564Steve Block return adoptRef(new JSGlobalData(false)); 200d0825bca7fe65beaee391d30da42e937db621564Steve Block} 201d0825bca7fe65beaee391d30da42e937db621564Steve Block 202d0825bca7fe65beaee391d30da42e937db621564Steve BlockPassRefPtr<JSGlobalData> JSGlobalData::create() 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 204d0825bca7fe65beaee391d30da42e937db621564Steve Block JSGlobalData* globalData = new JSGlobalData(false); 205d0825bca7fe65beaee391d30da42e937db621564Steve Block setDefaultIdentifierTable(globalData->identifierTable); 206d0825bca7fe65beaee391d30da42e937db621564Steve Block setCurrentIdentifierTable(globalData->identifierTable); 207d0825bca7fe65beaee391d30da42e937db621564Steve Block return adoptRef(globalData); 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<JSGlobalData> JSGlobalData::createLeaked() 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Structure::startIgnoringLeaks(); 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<JSGlobalData> data = create(); 214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Structure::stopIgnoringLeaks(); 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return data.release(); 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool JSGlobalData::sharedInstanceExists() 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return sharedInstanceInternal(); 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectJSGlobalData& JSGlobalData::sharedInstance() 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JSGlobalData*& instance = sharedInstanceInternal(); 226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!instance) { 227d0825bca7fe65beaee391d30da42e937db621564Steve Block instance = new JSGlobalData(true); 228635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(JSC_MULTIPLE_THREADS) 229635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project instance->makeUsableFromMultipleThreads(); 230635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 231635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return *instance; 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectJSGlobalData*& JSGlobalData::sharedInstanceInternal() 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(JSLock::currentThreadIsHoldingLock()); 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static JSGlobalData* sharedInstance; 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return sharedInstance; 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 242635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// FIXME: We can also detect forms like v1 < v2 ? -1 : 0, reverse comparison, etc. 243635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectconst Vector<Instruction>& JSGlobalData::numericCompareFunction(ExecState* exec) 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 245635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!lazyNumericCompareFunction.size() && !initializingLazyNumericCompareFunction) { 246635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project initializingLazyNumericCompareFunction = true; 247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RefPtr<FunctionExecutable> function = FunctionExecutable::fromGlobalCode(Identifier(exec, "numericCompare"), exec, 0, makeSource(UString("(function (v1, v2) { return v1 - v2; })")), 0, 0); 248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block lazyNumericCompareFunction = function->bytecode(exec, exec->scopeChain()).instructions(); 249635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project initializingLazyNumericCompareFunction = false; 250635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 251635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 252635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return lazyNumericCompareFunction; 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 255635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectJSGlobalData::ClientData::~ClientData() 256635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 258635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 259643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid JSGlobalData::resetDateCache() 260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block cachedUTCOffset = NaN; 262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block dstOffsetCache.reset(); 263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block cachedDateString = UString(); 264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block dateInstanceCache.reset(); 265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid JSGlobalData::startSampling() 268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 269231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block interpreter->startSampling(); 270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid JSGlobalData::stopSampling() 273231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 274231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block interpreter->stopSampling(); 275231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 276231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 277231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid JSGlobalData::dumpSampleData(ExecState* exec) 278231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 279231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block interpreter->dumpSampleData(exec); 280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 282635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace JSC 283