a1ea328d7c54cd3ae4719dc3592b2aecf8c76ee9
[WebKit-https.git] / Source / JavaScriptCore / runtime / CommonIdentifiers.h
1 /*
2  *  Copyright (C) 2003, 2007, 2009 Apple Inc. All rights reserved.
3  *
4  *  This library is free software; you can redistribute it and/or
5  *  modify it under the terms of the GNU Library General Public
6  *  License as published by the Free Software Foundation; either
7  *  version 2 of the License, or (at your option) any later version.
8  *
9  *  This library is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  *  Library General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Library General Public License
15  *  along with this library; see the file COPYING.LIB.  If not, write to
16  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  *  Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #ifndef CommonIdentifiers_h
22 #define CommonIdentifiers_h
23
24 #include "BytecodeIntrinsicRegistry.h"
25 #include "Identifier.h"
26 #include <wtf/Noncopyable.h>
27
28 // MarkedArgumentBuffer of property names, passed to a macro so we can do set them up various
29 // ways without repeating the list.
30 #define JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \
31     macro(Array) \
32     macro(ArrayBuffer) \
33     macro(ArrayIterator) \
34     macro(BYTES_PER_ELEMENT) \
35     macro(Boolean) \
36     macro(Date) \
37     macro(Error) \
38     macro(EvalError) \
39     macro(Function) \
40     macro(Infinity) \
41     macro(Intl) \
42     macro(JSON) \
43     macro(Map)\
44     macro(MapIterator)\
45     macro(Math) \
46     macro(NaN) \
47     macro(Number) \
48     macro(Object) \
49     macro(Promise) \
50     macro(RangeError) \
51     macro(ReferenceError) \
52     macro(RegExp) \
53     macro(Set)\
54     macro(SetIterator)\
55     macro(String) \
56     macro(Symbol) \
57     macro(SyntaxError) \
58     macro(TypeError) \
59     macro(URIError) \
60     macro(UTC) \
61     macro(WeakMap)\
62     macro(WeakSet)\
63     macro(__defineGetter__) \
64     macro(__defineSetter__) \
65     macro(__lookupGetter__) \
66     macro(__lookupSetter__) \
67     macro(add) \
68     macro(additionalJettisonReason) \
69     macro(anonymous) \
70     macro(arguments) \
71     macro(assign) \
72     macro(back) \
73     macro(bind) \
74     macro(blur) \
75     macro(buffer) \
76     macro(byteLength) \
77     macro(byteOffset) \
78     macro(bytecode) \
79     macro(bytecodeIndex) \
80     macro(bytecodes) \
81     macro(bytecodesID) \
82     macro(callee) \
83     macro(caller) \
84     macro(clear) \
85     macro(close) \
86     macro(closed) \
87     macro(column) \
88     macro(compilationKind) \
89     macro(compilations) \
90     macro(compile) \
91     macro(configurable) \
92     macro(constructor) \
93     macro(count) \
94     macro(counters) \
95     macro(defineProperty) \
96     macro(description) \
97     macro(descriptions) \
98     macro(displayName) \
99     macro(document) \
100     macro(done) \
101     macro(entries) \
102     macro(enumerable) \
103     macro(eval) \
104     macro(exec) \
105     macro(executionCount) \
106     macro(exitKind) \
107     macro(flags) \
108     macro(focus) \
109     macro(forEach) \
110     macro(forward) \
111     macro(fromCharCode) \
112     macro(get) \
113     macro(global) \
114     macro(go) \
115     macro(has) \
116     macro(hasOwnProperty) \
117     macro(hash) \
118     macro(header) \
119     macro(href) \
120     macro(id) \
121     macro(ignoreCase) \
122     macro(index) \
123     macro(indexedDB) \
124     macro(inferredName) \
125     macro(input) \
126     macro(instructionCount) \
127     macro(isArray) \
128     macro(isPrototypeOf) \
129     macro(isView) \
130     macro(isWatchpoint) \
131     macro(jettisonReason) \
132     macro(join) \
133     macro(keys) \
134     macro(lastIndex) \
135     macro(length) \
136     macro(line) \
137     macro(message) \
138     macro(multiline) \
139     macro(name) \
140     macro(next) \
141     macro(now) \
142     macro(numInlinedCalls) \
143     macro(numInlinedGetByIds) \
144     macro(numInlinedPutByIds) \
145     macro(of) \
146     macro(opcode) \
147     macro(origin) \
148     macro(osrExitSites) \
149     macro(osrExits) \
150     macro(parse) \
151     macro(parseInt) \
152     macro(postMessage) \
153     macro(profiledBytecodes) \
154     macro(propertyIsEnumerable) \
155     macro(prototype) \
156     macro(raw) \
157     macro(reload) \
158     macro(replace) \
159     macro(resolve) \
160     macro(set) \
161     macro(showModalDialog) \
162     macro(size) \
163     macro(slice) \
164     macro(source) \
165     macro(sourceURL) \
166     macro(sourceCode) \
167     macro(stack) \
168     macro(subarray) \
169     macro(target) \
170     macro(test) \
171     macro(then) \
172     macro(toExponential) \
173     macro(toFixed) \
174     macro(toISOString) \
175     macro(toJSON) \
176     macro(toLocaleString) \
177     macro(toPrecision) \
178     macro(toString) \
179     macro(value) \
180     macro(valueOf) \
181     macro(values) \
182     macro(webkit) \
183     macro(webkitIndexedDB) \
184     macro(window) \
185     macro(writable)
186
187 #define JSC_COMMON_IDENTIFIERS_EACH_KEYWORD(macro) \
188     macro(break) \
189     macro(case) \
190     macro(catch) \
191     macro(class) \
192     macro(const) \
193     macro(continue) \
194     macro(debugger) \
195     macro(default) \
196     macro(delete) \
197     macro(do) \
198     macro(else) \
199     macro(enum) \
200     macro(export) \
201     macro(extends) \
202     macro(false) \
203     macro(finally) \
204     macro(for) \
205     macro(function) \
206     macro(if) \
207     macro(implements) \
208     macro(import) \
209     macro(in) \
210     macro(instanceof) \
211     macro(interface) \
212     macro(let) \
213     macro(new) \
214     macro(null) \
215     macro(package) \
216     macro(private) \
217     macro(protected) \
218     macro(public) \
219     macro(return) \
220     macro(static) \
221     macro(super) \
222     macro(switch) \
223     macro(this) \
224     macro(throw) \
225     macro(true) \
226     macro(try) \
227     macro(typeof) \
228     macro(undefined) \
229     macro(var) \
230     macro(void) \
231     macro(while) \
232     macro(with) \
233     macro(yield)
234
235 #define JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_WELL_KNOWN_SYMBOL_NOT_IMPLEMENTED_YET(macro)\
236     macro(hasInstance) \
237     macro(isConcatSpreadable) \
238     macro(match) \
239     macro(replace) \
240     macro(search) \
241     macro(species) \
242     macro(split) \
243     macro(toPrimitive) \
244     macro(toStringTag)
245
246 #define JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_WELL_KNOWN_SYMBOL(macro) \
247     macro(iterator) \
248     macro(unscopables)
249
250 #define JSC_COMMON_BYTECODE_INTRINSICS_EACH_NAME(macro) \
251     macro(putByValDirect) \
252     macro(toString)
253
254 #define JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \
255     JSC_COMMON_BYTECODE_INTRINSICS_EACH_NAME(macro) \
256     macro(iteratedObject) \
257     macro(arrayIteratorNextIndex) \
258     macro(arrayIterationKind) \
259     macro(arrayIterationKindKey) \
260     macro(arrayIterationKindValue) \
261     macro(arrayIterationKindKeyValue) \
262     macro(charCodeAt) \
263     macro(iteratedString) \
264     macro(stringIteratorNextIndex) \
265     macro(promise) \
266     macro(fulfillmentHandler) \
267     macro(rejectionHandler) \
268     macro(index) \
269     macro(values) \
270     macro(deferred) \
271     macro(countdownHolder) \
272     macro(Object) \
273     macro(ownEnumerablePropertyKeys) \
274     macro(Number) \
275     macro(Array) \
276     macro(String) \
277     macro(Promise) \
278     macro(abs) \
279     macro(floor) \
280     macro(isFinite) \
281     macro(getPrototypeOf) \
282     macro(getOwnPropertyNames) \
283     macro(TypeError) \
284     macro(undefined) \
285     macro(BuiltinLog) \
286     macro(homeObject) \
287     macro(getTemplateObject) \
288     macro(enqueueJob) \
289     macro(handler) \
290     macro(promiseState) \
291     macro(promisePending) \
292     macro(promiseFulfilled) \
293     macro(promiseRejected) \
294     macro(promiseFulfillReactions) \
295     macro(promiseRejectReactions) \
296     macro(promiseResult) \
297     macro(capabilities) \
298
299
300 namespace JSC {
301     
302     class BuiltinNames;
303     
304     class CommonIdentifiers {
305         WTF_MAKE_NONCOPYABLE(CommonIdentifiers); WTF_MAKE_FAST_ALLOCATED;
306     private:
307         CommonIdentifiers(VM*);
308         ~CommonIdentifiers();
309         friend class VM;
310         
311     public:
312         const BuiltinNames& builtinNames() const { return *m_builtinNames; }
313         const Identifier nullIdentifier;
314         const Identifier emptyIdentifier;
315         const Identifier underscoreProto;
316         const Identifier thisIdentifier;
317         const Identifier useStrictIdentifier;
318     private:
319         std::unique_ptr<BuiltinNames> m_builtinNames;
320
321     public:
322         
323 #define JSC_IDENTIFIER_DECLARE_KEYWORD_NAME_GLOBAL(name) const Identifier name##Keyword;
324         JSC_COMMON_IDENTIFIERS_EACH_KEYWORD(JSC_IDENTIFIER_DECLARE_KEYWORD_NAME_GLOBAL)
325 #undef JSC_IDENTIFIER_DECLARE_KEYWORD_NAME_GLOBAL
326         
327 #define JSC_IDENTIFIER_DECLARE_PROPERTY_NAME_GLOBAL(name) const Identifier name;
328         JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(JSC_IDENTIFIER_DECLARE_PROPERTY_NAME_GLOBAL)
329 #undef JSC_IDENTIFIER_DECLARE_PROPERTY_NAME_GLOBAL
330
331 #define JSC_IDENTIFIER_DECLARE_PRIVATE_PROPERTY_NAME_GLOBAL(name) const Identifier name##PrivateName;
332         JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_PROPERTY_NAME(JSC_IDENTIFIER_DECLARE_PRIVATE_PROPERTY_NAME_GLOBAL)
333 #undef JSC_IDENTIFIER_DECLARE_PRIVATE_PROPERTY_NAME_GLOBAL
334
335 #define JSC_IDENTIFIER_DECLARE_PRIVATE_WELL_KNOWN_SYMBOL_GLOBAL(name) const Identifier name##Symbol;
336         JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_WELL_KNOWN_SYMBOL(JSC_IDENTIFIER_DECLARE_PRIVATE_WELL_KNOWN_SYMBOL_GLOBAL)
337 #undef JSC_IDENTIFIER_DECLARE_PRIVATE_WELL_KNOWN_SYMBOL_GLOBAL
338
339         bool isPrivateName(SymbolImpl& uid) const;
340         bool isPrivateName(UniquedStringImpl& uid) const;
341         bool isPrivateName(const Identifier&) const;
342
343         const Identifier* getPrivateName(const Identifier&) const;
344         Identifier getPublicName(const Identifier&) const;
345
346         const BytecodeIntrinsicRegistry& bytecodeIntrinsicRegistry() const { return m_bytecodeIntrinsicRegistry; }
347
348     private:
349         BytecodeIntrinsicRegistry m_bytecodeIntrinsicRegistry;
350     };
351
352 } // namespace JSC
353
354 #endif // CommonIdentifiers_h