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

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

Reviewed by Geoff.

  • Property svn:eol-style set to native
File size: 3.3 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
37namespace WTF {
38 template<typename> class ThreadSpecific;
39}
40
41namespace KJS {
42
43 class CommonIdentifiers;
44 class Heap;
45 class IdentifierTable;
46 class JSGlobalObject;
47 class Lexer;
48 class Machine;
49 class Parser;
50 class ParserRefCounted;
51 class UString;
52 struct HashTable;
53
54 // This serves as a bottleneck for accessing per-thread data structures.
55 // Note that the effective instance may be different from the thread one in case of legacy
56 // JavaScriptCore clients, which all share a single JSGlobalData, and thus cannot run concurrently.
57 struct JSGlobalData : Noncopyable {
58 static JSGlobalData& threadInstance();
59 static JSGlobalData& sharedInstance();
60
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*> newTrackedObjects;
76 HashCountedSet<ParserRefCounted*> trackedObjectExtraRefCounts;
77
78 Lexer* lexer;
79 Parser* parser;
80
81 JSGlobalObject* head;
82
83 Machine* machine;
84
85 private:
86 friend class WTF::ThreadSpecific<JSGlobalData>;
87
88 JSGlobalData();
89 ~JSGlobalData();
90 };
91
92}
93
94#endif
Note: See TracBrowser for help on using the repository browser.