source: webkit/trunk/JavaScriptCore/kjs/JSGlobalData.h@ 34979

Last change on this file since 34979 was 34977, checked in by [email protected], 17 years ago

Reviewed by Geoff.

Don't create unnecessary JSGlobalData instances.

  • kjs/JSGlobalData.h:
  • kjs/JSGlobalData.cpp: (KJS::JSGlobalData::threadInstanceExists): (KJS::JSGlobalData::sharedInstanceExists): (KJS::JSGlobalData::threadInstance): (KJS::JSGlobalData::sharedInstance): (KJS::JSGlobalData::threadInstanceInternal): (KJS::JSGlobalData::sharedInstanceInternal): Added methods to query instance existence.
  • kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Initialize thread instance static in a new way.
  • API/JSBase.cpp: (JSGarbageCollect):
  • kjs/collector.cpp: (KJS::Heap::collect): Check for instance existence before accessing it.
  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1/*
2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef JSGlobalData_h
30#define JSGlobalData_h
31
32#include "list.h"
33#include <wtf/HashCountedSet.h>
34#include <wtf/HashSet.h>
35#include <wtf/Noncopyable.h>
36#include <wtf/OwnPtr.h>
37
38namespace KJS {
39
40 class CommonIdentifiers;
41 class Heap;
42 class IdentifierTable;
43 class JSGlobalObject;
44 class Lexer;
45 class Machine;
46 class Parser;
47 class ParserRefCounted;
48 class UString;
49 struct HashTable;
50
51 // This serves as a bottleneck for accessing per-thread data structures.
52 // Note that the effective instance may be different from the thread one in case of legacy
53 // JavaScriptCore clients, which all share a single JSGlobalData, and thus cannot run concurrently.
54 struct JSGlobalData : Noncopyable {
55 static bool threadInstanceExists();
56 static bool sharedInstanceExists();
57 static JSGlobalData& threadInstance();
58 static JSGlobalData& sharedInstance();
59
60 Machine* machine;
61 Heap* heap;
62
63 const HashTable* arrayTable;
64 const HashTable* dateTable;
65 const HashTable* mathTable;
66 const HashTable* numberTable;
67 const HashTable* regExpTable;
68 const HashTable* regExpConstructorTable;
69 const HashTable* stringTable;
70
71 IdentifierTable* identifierTable;
72 CommonIdentifiers* propertyNames;
73 const ArgList 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.
74
75 HashSet<ParserRefCounted*>* newParserObjects;
76 HashCountedSet<ParserRefCounted*>* parserObjectExtraRefCounts;
77
78 Lexer* lexer;
79 Parser* parser;
80
81 JSGlobalObject* head;
82
83 bool isSharedInstance;
84
85 private:
86 JSGlobalData(bool isShared = false);
87 ~JSGlobalData();
88
89 static JSGlobalData*& threadInstanceInternal();
90 static JSGlobalData*& sharedInstanceInternal();
91
92 struct DataInstance {
93 DataInstance() : m_data(0) {}
94 ~DataInstance() { delete m_data; }
95 operator JSGlobalData*&() { return m_data; }
96
97 JSGlobalData* m_data;
98 };
99 };
100
101}
102
103#endif
Note: See TracBrowser for help on using the repository browser.