1// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_VM_SYMBOLS_H_
6#define RUNTIME_VM_SYMBOLS_H_
7
8#include "vm/growable_array.h"
9#include "vm/object.h"
10
11namespace dart {
12
13// Forward declarations.
14class IsolateGroup;
15class ObjectPointerVisitor;
16
17// One-character symbols are added implicitly.
18#define PREDEFINED_SYMBOLS_LIST(V) \
19 V(AbiSpecificInteger, "AbiSpecificInteger") \
20 V(AbstractClassInstantiationError, "AbstractClassInstantiationError") \
21 V(AllocateInvocationMirror, "_allocateInvocationMirror") \
22 V(AllocateInvocationMirrorForClosure, "_allocateInvocationMirrorForClosure") \
23 V(AnonymousClosure, "<anonymous closure>") \
24 V(ApiError, "ApiError") \
25 V(ArgDescVar, ":arg_desc") \
26 V(ArgumentError, "ArgumentError") \
27 V(StateError, "StateError") \
28 V(AssertionError, "_AssertionError") \
29 V(AssignIndexToken, "[]=") \
30 V(Bool, "bool") \
31 V(BooleanExpression, "boolean expression") \
32 V(BoundsCheckForPartialInstantiation, "_boundsCheckForPartialInstantiation") \
33 V(ByteData, "ByteData") \
34 V(Capability, "Capability") \
35 V(CheckLoaded, "_checkLoaded") \
36 V(Class, "Class") \
37 V(ClassID, "ClassID") \
38 V(ClosureData, "ClosureData") \
39 V(ClosureParameter, ":closure") \
40 V(Code, "Code") \
41 V(CodeSourceMap, "CodeSourceMap") \
42 V(ColonMatcher, ":matcher") \
43 V(_Completer, "_Completer") \
44 V(_AsyncCompleter, "_AsyncCompleter") \
45 V(_SyncCompleter, "_SyncCompleter") \
46 V(Compound, "_Compound") \
47 V(CompressedStackMaps, "CompressedStackMaps") \
48 V(Context, "Context") \
49 V(ContextScope, "ContextScope") \
50 V(Current, "current") \
51 V(CurrentContextVar, ":current_context_var") \
52 V(DartAsync, "dart:async") \
53 V(DartCollection, "dart:collection") \
54 V(DartCore, "dart:core") \
55 V(DartDeveloper, "dart:developer") \
56 V(DartDeveloperTimeline, "dart.developer.timeline") \
57 V(DartFfi, "dart:ffi") \
58 V(DartInternal, "dart:_internal") \
59 V(DartIsVM, "dart.isVM") \
60 V(DartIsolate, "dart:isolate") \
61 V(DartLibrary, "dart.library.") \
62 V(DartLibraryFfi, "dart.library.ffi") \
63 V(DartLibraryMirrors, "dart.library.mirrors") \
64 V(DartMirrors, "dart:mirrors") \
65 V(DartNativeWrappers, "dart:nativewrappers") \
66 V(DartNativeWrappersLibName, "nativewrappers") \
67 V(DartScheme, "dart:") \
68 V(DartSchemePrivate, "dart:_") \
69 V(DartTypedData, "dart:typed_data") \
70 V(DartVMProduct, "dart.vm.product") \
71 V(DartVMService, "dart:_vmservice") \
72 V(DebugProcedureName, ":Eval") \
73 V(Default, "Default") \
74 V(DefaultLabel, ":L") \
75 V(DotCreate, "._create") \
76 V(DotFieldADI, ".fieldADI") \
77 V(DotFieldNI, ".fieldNI") \
78 V(DotRange, ".range") \
79 V(DotUnder, "._") \
80 V(DotValue, ".value") \
81 V(DotWithType, "._withType") \
82 V(Double, "double") \
83 V(Dynamic, "dynamic") \
84 V(DynamicCall, "dyn:call") \
85 V(DynamicCallCurrentFunctionVar, ":dyn_call_current_function") \
86 V(DynamicCallCurrentNumProcessedVar, ":dyn_call_current_num_processed") \
87 V(DynamicCallCurrentParamIndexVar, ":dyn_call_current_param_index") \
88 V(DynamicCallCurrentTypeParamVar, ":dyn_call_current_type_param") \
89 V(DynamicCallFunctionTypeArgsVar, ":dyn_call_function_type_args") \
90 V(DynamicPrefix, "dyn:") \
91 V(EntryPointsTemp, ":entry_points_temp") \
92 V(EqualOperator, "==") \
93 V(Error, "Error") \
94 V(EvalSourceUri, "evaluate:source") \
95 V(EvaluateAssertion, "_evaluateAssertion") \
96 V(ExceptionHandlers, "ExceptionHandlers") \
97 V(ExceptionVar, ":exception_var") \
98 V(Expando, "Expando") \
99 V(ExprTemp, ":expr_temp") \
100 V(ExternalOneByteString, "_ExternalOneByteString") \
101 V(ExternalTwoByteString, "_ExternalTwoByteString") \
102 V(FfiAbiSpecificMapping, "_FfiAbiSpecificMapping") \
103 V(FfiAsyncCallback, "_FfiAsyncCallback") \
104 V(FfiBool, "Bool") \
105 V(FfiCallback, "_FfiCallback") \
106 V(FfiDouble, "Double") \
107 V(FfiDynamicLibrary, "DynamicLibrary") \
108 V(FfiElementType, "elementType") \
109 V(FfiFieldPacking, "packing") \
110 V(FfiFieldTypes, "fieldTypes") \
111 V(FfiFloat, "Float") \
112 V(FfiHandle, "Handle") \
113 V(FfiInt16, "Int16") \
114 V(FfiInt32, "Int32") \
115 V(FfiInt64, "Int64") \
116 V(FfiInt8, "Int8") \
117 V(FfiIntPtr, "IntPtr") \
118 V(FfiNativeFunction, "NativeFunction") \
119 V(FfiNativeType, "NativeType") \
120 V(FfiNativeTypes, "nativeTypes") \
121 V(FfiPointer, "Pointer") \
122 V(FfiPointerAsyncFromFunctionSendArgs, "_pointerAsyncFromFunctionSendArgs") \
123 V(FfiStructLayout, "_FfiStructLayout") \
124 V(FfiStructLayoutArray, "_FfiInlineArray") \
125 V(FfiTrampolineData, "FfiTrampolineData") \
126 V(FfiUint16, "Uint16") \
127 V(FfiUint32, "Uint32") \
128 V(FfiUint64, "Uint64") \
129 V(FfiUint8, "Uint8") \
130 V(FfiVoid, "Void") \
131 V(Field, "Field") \
132 V(Finalizable, "Finalizable") \
133 V(FinalizerBase, "FinalizerBase") \
134 V(FinalizerEntry, "FinalizerEntry") \
135 V(FinallyRetVal, ":finally_ret_val") \
136 V(FirstArg, "x") \
137 V(Float32List, "Float32List") \
138 V(Float32x4, "Float32x4") \
139 V(Float32x4List, "Float32x4List") \
140 V(Float64List, "Float64List") \
141 V(Float64x2, "Float64x2") \
142 V(Float64x2List, "Float64x2List") \
143 V(FormatException, "FormatException") \
144 V(ForwardingCorpse, "ForwardingCorpse") \
145 V(FreeListElement, "FreeListElement") \
146 V(Function, "Function") \
147 V(FunctionResult, "function result") \
148 V(FunctionTypeArgumentsVar, ":function_type_arguments_var") \
149 V(Future, "Future") \
150 V(_Future, "_Future") \
151 V(FutureOr, "FutureOr") \
152 V(FutureValue, "Future.value") \
153 V(GetCall, "get:call") \
154 V(GetLength, "get:length") \
155 V(GetRuntimeType, "get:runtimeType") \
156 V(GetterPrefix, "get:") \
157 V(Get_fieldNames, "get:_fieldNames") \
158 V(GreaterEqualOperator, ">=") \
159 V(HaveSameRuntimeType, "_haveSameRuntimeType") \
160 V(ICData, "ICData") \
161 V(Identical, "identical") \
162 V(InTypeCast, " in type cast") \
163 V(Index, "index") \
164 V(IndexToken, "[]") \
165 V(InitPrefix, "init:") \
166 V(Instructions, "Instructions") \
167 V(InstructionsSection, "InstructionsSection") \
168 V(InstructionsTable, "InstructionsTable") \
169 V(Int, "int") \
170 V(Int16List, "Int16List") \
171 V(Int32List, "Int32List") \
172 V(Int32x4, "Int32x4") \
173 V(Int32x4List, "Int32x4List") \
174 V(Int64List, "Int64List") \
175 V(Int8List, "Int8List") \
176 V(IntegerDivisionByZeroException, "IntegerDivisionByZeroException") \
177 V(Interpolate, "_interpolate") \
178 V(InterpolateSingle, "_interpolateSingle") \
179 V(InvocationMirror, "_InvocationMirror") \
180 V(IsolateSpawnException, "IsolateSpawnException") \
181 V(Iterable, "Iterable") \
182 V(Iterator, "iterator") \
183 V(KernelProgramInfo, "KernelProgramInfo") \
184 V(LanguageError, "LanguageError") \
185 V(LateError, "LateError") \
186 V(LeftShiftOperator, "<<") \
187 V(Length, "length") \
188 V(LessEqualOperator, "<=") \
189 V(LibraryClass, "Library") \
190 V(LibraryPrefix, "LibraryPrefix") \
191 V(List, "List") \
192 V(ListFactory, "List.") \
193 V(ListFilledFactory, "List.filled") \
194 V(LoadLibrary, "_loadLibrary") \
195 V(LoadingUnit, "LoadingUnit") \
196 V(LocalVarDescriptors, "LocalVarDescriptors") \
197 V(Map, "Map") \
198 V(MapLiteralFactory, "Map._fromLiteral") \
199 V(MegamorphicCache, "MegamorphicCache") \
200 V(MonomorphicSmiableCall, "MonomorphicSmiableCall") \
201 V(MoveNext, "moveNext") \
202 V(Namespace, "Namespace") \
203 V(Never, "Never") \
204 V(NoSuchMethod, "noSuchMethod") \
205 V(NoSuchMethodError, "NoSuchMethodError") \
206 V(Null, "Null") \
207 V(Number, "num") \
208 V(Object, "Object") \
209 V(ObjectPool, "ObjectPool") \
210 V(OneByteString, "_OneByteString") \
211 V(OptimizedOut, "<optimized out>") \
212 V(OriginalParam, ":original:") \
213 V(OutOfMemoryError, "OutOfMemoryError") \
214 V(PackageScheme, "package:") \
215 V(Patch, "patch") \
216 V(PatchClass, "PatchClass") \
217 V(PcDescriptors, "PcDescriptors") \
218 V(Pragma, "pragma") \
219 V(PrependTypeArguments, "_prependTypeArguments") \
220 V(QuoteIsNotASubtypeOf, "' is not a subtype of ") \
221 V(RangeError, "RangeError") \
222 V(Record, "Record") \
223 V(RegExp, "RegExp") \
224 V(RightShiftOperator, ">>") \
225 V(SavedTryContextVar, ":saved_try_context_var") \
226 V(Script, "Script") \
227 V(SecondArg, "y") \
228 V(SendPort, "SendPort") \
229 V(Sentinel, "Sentinel") \
230 V(Set, "Set") \
231 V(SetterPrefix, "set:") \
232 V(SingleTargetCache, "SingleTargetCache") \
233 V(SpaceIsFromSpace, " is from ") \
234 V(SpaceOfSpace, " of ") \
235 V(SpaceWhereNewLine, " where\n") \
236 V(StackOverflowError, "StackOverflowError") \
237 V(Stream, "Stream") \
238 V(StringBase, "_StringBase") \
239 V(Struct, "Struct") \
240 V(SubtypeTestCache, "SubtypeTestCache") \
241 V(SuspendStateVar, ":suspend_state_var") \
242 V(SwitchExpr, ":switch_expr") \
243 V(Symbol, "Symbol") \
244 V(ThrowNew, "_throwNew") \
245 V(ThrowNewInvocation, "_throwNewInvocation") \
246 V(ThrowNewNullAssertion, "_throwNewNullAssertion") \
247 V(TopLevel, "::") \
248 V(TransferableTypedData, "TransferableTypedData") \
249 V(TruncDivOperator, "~/") \
250 V(TryFinallyReturnValue, ":try_finally_return_value") \
251 V(TwoByteString, "_TwoByteString") \
252 V(TwoSpaces, " ") \
253 V(Type, "Type") \
254 V(TypeArguments, "TypeArguments") \
255 V(TypeArgumentsParameter, ":type_arguments") \
256 V(TypeError, "_TypeError") \
257 V(TypeParameters, "TypeParameters") \
258 V(TypeQuote, "type '") \
259 V(Uint16List, "Uint16List") \
260 V(Uint32List, "Uint32List") \
261 V(Uint64List, "Uint64List") \
262 V(Uint8ClampedList, "Uint8ClampedList") \
263 V(Uint8List, "Uint8List") \
264 V(UnaryMinus, "unary-") \
265 V(UnhandledException, "UnhandledException") \
266 V(Union, "Union") \
267 V(UnlinkedCall, "UnlinkedCall") \
268 V(UnsafeCast, "unsafeCast") \
269 V(UnsignedRightShiftOperator, ">>>") \
270 V(UnsupportedError, "UnsupportedError") \
271 V(UnwindError, "UnwindError") \
272 V(Value, "value") \
273 V(Values, "values") \
274 V(VarArgs, "VarArgs") \
275 V(WeakArray, "WeakArray") \
276 V(WeakSerializationReference, "WeakSerializationReference") \
277 V(_AsyncStarStreamController, "_AsyncStarStreamController") \
278 V(_BufferingStreamSubscription, "_BufferingStreamSubscription") \
279 V(_ByteBuffer, "_ByteBuffer") \
280 V(_ByteBufferDot_New, "_ByteBuffer._New") \
281 V(_ByteDataView, "_ByteDataView") \
282 V(_Capability, "_Capability") \
283 V(_ClassMirror, "_ClassMirror") \
284 V(_Closure, "_Closure") \
285 V(_ClosureCall, "_Closure.call") \
286 V(_CombinatorMirror, "_CombinatorMirror") \
287 V(_CompileTimeError, "_CompileTimeError") \
288 V(_ConstMap, "_ConstMap") \
289 V(_ConstSet, "_ConstSet") \
290 V(_ControllerSubscription, "_ControllerSubscription") \
291 V(_CyclicInitializationError, "_CyclicInitializationError") \
292 V(_DeletedEnumPrefix, "Deleted enum value from ") \
293 V(_DeletedEnumSentinel, "_deleted_enum_sentinel") \
294 V(_Double, "_Double") \
295 V(_Enum, "_Enum") \
296 V(_ExternalFloat32Array, "_ExternalFloat32Array") \
297 V(_ExternalFloat32x4Array, "_ExternalFloat32x4Array") \
298 V(_ExternalFloat64Array, "_ExternalFloat64Array") \
299 V(_ExternalFloat64x2Array, "_ExternalFloat64x2Array") \
300 V(_ExternalInt16Array, "_ExternalInt16Array") \
301 V(_ExternalInt32Array, "_ExternalInt32Array") \
302 V(_ExternalInt32x4Array, "_ExternalInt32x4Array") \
303 V(_ExternalInt64Array, "_ExternalInt64Array") \
304 V(_ExternalInt8Array, "_ExternalInt8Array") \
305 V(_ExternalUint16Array, "_ExternalUint16Array") \
306 V(_ExternalUint32Array, "_ExternalUint32Array") \
307 V(_ExternalUint64Array, "_ExternalUint64Array") \
308 V(_ExternalUint8Array, "_ExternalUint8Array") \
309 V(_ExternalUint8ClampedArray, "_ExternalUint8ClampedArray") \
310 V(_FinalizerImpl, "_FinalizerImpl") \
311 V(_Float32ArrayFactory, "Float32List.") \
312 V(_Float32ArrayView, "_Float32ArrayView") \
313 V(_Float32List, "_Float32List") \
314 V(_Float32x4, "_Float32x4") \
315 V(_Float32x4ArrayFactory, "Float32x4List.") \
316 V(_Float32x4ArrayView, "_Float32x4ArrayView") \
317 V(_Float32x4List, "_Float32x4List") \
318 V(_Float64ArrayFactory, "Float64List.") \
319 V(_Float64ArrayView, "_Float64ArrayView") \
320 V(_Float64List, "_Float64List") \
321 V(_Float64x2, "_Float64x2") \
322 V(_Float64x2ArrayFactory, "Float64x2List.") \
323 V(_Float64x2ArrayView, "_Float64x2ArrayView") \
324 V(_Float64x2List, "_Float64x2List") \
325 V(_FunctionType, "_FunctionType") \
326 V(_FunctionTypeMirror, "_FunctionTypeMirror") \
327 V(_FutureListener, "_FutureListener") \
328 V(_GrowableList, "_GrowableList") \
329 V(_GrowableListFactory, "_GrowableList.") \
330 V(_GrowableListFilledFactory, "_GrowableList.filled") \
331 V(_GrowableListGenerateFactory, "_GrowableList.generate") \
332 V(_GrowableListLiteralFactory, "_GrowableList._literal") \
333 V(_GrowableListWithData, "_GrowableList._withData") \
334 V(_ImmutableList, "_ImmutableList") \
335 V(_Int16ArrayFactory, "Int16List.") \
336 V(_Int16ArrayView, "_Int16ArrayView") \
337 V(_Int16List, "_Int16List") \
338 V(_Int32ArrayFactory, "Int32List.") \
339 V(_Int32ArrayView, "_Int32ArrayView") \
340 V(_Int32List, "_Int32List") \
341 V(_Int32x4, "_Int32x4") \
342 V(_Int32x4ArrayFactory, "Int32x4List.") \
343 V(_Int32x4ArrayView, "_Int32x4ArrayView") \
344 V(_Int32x4List, "_Int32x4List") \
345 V(_Int64ArrayFactory, "Int64List.") \
346 V(_Int64ArrayView, "_Int64ArrayView") \
347 V(_Int64List, "_Int64List") \
348 V(_Int8ArrayFactory, "Int8List.") \
349 V(_Int8ArrayView, "_Int8ArrayView") \
350 V(_Int8List, "_Int8List") \
351 V(_IntegerImplementation, "_IntegerImplementation") \
352 V(_IsolateMirror, "_IsolateMirror") \
353 V(_LibraryDependencyMirror, "_LibraryDependencyMirror") \
354 V(_LibraryMirror, "_LibraryMirror") \
355 V(_LibraryPrefix, "_LibraryPrefix") \
356 V(_List, "_List") \
357 V(_ListFactory, "_List.") \
358 V(_ListFilledFactory, "_List.filled") \
359 V(_ListGenerateFactory, "_List.generate") \
360 V(_Map, "_Map") \
361 V(_MethodMirror, "_MethodMirror") \
362 V(_Mint, "_Mint") \
363 V(_MirrorReference, "_MirrorReference") \
364 V(_NativeFinalizer, "_NativeFinalizer") \
365 V(_ParameterMirror, "_ParameterMirror") \
366 V(_Random, "_Random") \
367 V(_RawReceivePort, "_RawReceivePort") \
368 V(_Record, "_Record") \
369 V(_RecordType, "_RecordType") \
370 V(_RegExp, "_RegExp") \
371 V(_SendPort, "_SendPort") \
372 V(_Set, "_Set") \
373 V(_Smi, "_Smi") \
374 V(_SourceLocation, "_SourceLocation") \
375 V(_SpecialTypeMirror, "_SpecialTypeMirror") \
376 V(_StackTrace, "_StackTrace") \
377 V(_StreamController, "_StreamController") \
378 V(_StreamIterator, "_StreamIterator") \
379 V(_String, "String") \
380 V(_SuspendState, "_SuspendState") \
381 V(_SyncStarIterator, "_SyncStarIterator") \
382 V(_SyncStreamController, "_SyncStreamController") \
383 V(_TransferableTypedDataImpl, "_TransferableTypedDataImpl") \
384 V(_Type, "_Type") \
385 V(_TypeParameter, "_TypeParameter") \
386 V(_TypeVariableMirror, "_TypeVariableMirror") \
387 V(_Uint16ArrayFactory, "Uint16List.") \
388 V(_Uint16ArrayView, "_Uint16ArrayView") \
389 V(_Uint16List, "_Uint16List") \
390 V(_Uint32ArrayFactory, "Uint32List.") \
391 V(_Uint32ArrayView, "_Uint32ArrayView") \
392 V(_Uint32List, "_Uint32List") \
393 V(_Uint64ArrayFactory, "Uint64List.") \
394 V(_Uint64ArrayView, "_Uint64ArrayView") \
395 V(_Uint64List, "_Uint64List") \
396 V(_Uint8ArrayFactory, "Uint8List.") \
397 V(_Uint8ArrayView, "_Uint8ArrayView") \
398 V(_Uint8ClampedArrayFactory, "Uint8ClampedList.") \
399 V(_Uint8ClampedArrayView, "_Uint8ClampedArrayView") \
400 V(_Uint8ClampedList, "_Uint8ClampedList") \
401 V(_Uint8List, "_Uint8List") \
402 V(_UnmodifiableByteDataView, "_UnmodifiableByteDataView") \
403 V(_UnmodifiableFloat32ArrayView, "_UnmodifiableFloat32ArrayView") \
404 V(_UnmodifiableFloat32x4ArrayView, "_UnmodifiableFloat32x4ArrayView") \
405 V(_UnmodifiableFloat64ArrayView, "_UnmodifiableFloat64ArrayView") \
406 V(_UnmodifiableFloat64x2ArrayView, "_UnmodifiableFloat64x2ArrayView") \
407 V(_UnmodifiableInt16ArrayView, "_UnmodifiableInt16ArrayView") \
408 V(_UnmodifiableInt32ArrayView, "_UnmodifiableInt32ArrayView") \
409 V(_UnmodifiableInt32x4ArrayView, "_UnmodifiableInt32x4ArrayView") \
410 V(_UnmodifiableInt64ArrayView, "_UnmodifiableInt64ArrayView") \
411 V(_UnmodifiableInt8ArrayView, "_UnmodifiableInt8ArrayView") \
412 V(_UnmodifiableUint16ArrayView, "_UnmodifiableUint16ArrayView") \
413 V(_UnmodifiableUint32ArrayView, "_UnmodifiableUint32ArrayView") \
414 V(_UnmodifiableUint64ArrayView, "_UnmodifiableUint64ArrayView") \
415 V(_UnmodifiableUint8ArrayView, "_UnmodifiableUint8ArrayView") \
416 V(_UnmodifiableUint8ClampedArrayView, "_UnmodifiableUint8ClampedArrayView") \
417 V(_UserTag, "_UserTag") \
418 V(_Utf8Decoder, "_Utf8Decoder") \
419 V(_VariableMirror, "_VariableMirror") \
420 V(_WeakProperty, "_WeakProperty") \
421 V(_WeakReference, "_WeakReference") \
422 V(_await, "_await") \
423 V(_awaitWithTypeCheck, "_awaitWithTypeCheck") \
424 V(_backtrackingStack, "_backtrackingStack") \
425 V(_classRangeCheck, "_classRangeCheck") \
426 V(_current, "_current") \
427 V(_ensureScheduleImmediate, "_ensureScheduleImmediate") \
428 V(future, "future") \
429 V(_future, "_future") \
430 V(_getRegisters, "_getRegisters") \
431 V(_growBacktrackingStack, "_growBacktrackingStack") \
432 V(_handleException, "_handleException") \
433 V(_handleFinalizerMessage, "_handleFinalizerMessage") \
434 V(_handleMessage, "_handleMessage") \
435 V(_handleNativeFinalizerMessage, "_handleNativeFinalizerMessage") \
436 V(_hasValue, "_hasValue") \
437 V(_initAsync, "_initAsync") \
438 V(_initAsyncStar, "_initAsyncStar") \
439 V(_initSyncStar, "_initSyncStar") \
440 V(_instanceOf, "_instanceOf") \
441 V(_listGetAt, "_listGetAt") \
442 V(_listLength, "_listLength") \
443 V(_listSetAt, "_listSetAt") \
444 V(_lookupHandler, "_lookupHandler") \
445 V(_lookupOpenPorts, "_lookupOpenPorts") \
446 V(_mapContainsKey, "_mapContainsKey") \
447 V(_mapGet, "_mapGet") \
448 V(_mapKeys, "_mapKeys") \
449 V(_name, "_name") \
450 V(_objectEquals, "_objectEquals") \
451 V(_objectHashCode, "_objectHashCode") \
452 V(_objectNoSuchMethod, "_objectNoSuchMethod") \
453 V(_objectToString, "_objectToString") \
454 V(_onData, "_onData") \
455 V(_rehashObjects, "_rehashObjects") \
456 V(_resultOrListeners, "_resultOrListeners") \
457 V(_returnAsync, "_returnAsync") \
458 V(_returnAsyncNotFuture, "_returnAsyncNotFuture") \
459 V(_returnAsyncStar, "_returnAsyncStar") \
460 V(_runExtension, "_runExtension") \
461 V(_runPendingImmediateCallback, "_runPendingImmediateCallback") \
462 V(_scanFlags, "_scanFlags") \
463 V(_simpleInstanceOf, "_simpleInstanceOf") \
464 V(_simpleInstanceOfFalse, "_simpleInstanceOfFalse") \
465 V(_simpleInstanceOfTrue, "_simpleInstanceOfTrue") \
466 V(_stackTrace, "_stackTrace") \
467 V(_state, "_state") \
468 V(_stateData, "_stateData") \
469 V(_suspendSyncStarAtStart, "_suspendSyncStarAtStart") \
470 V(_toString, "_toString") \
471 V(_typedDataBase, "_typedDataBase") \
472 V(_varData, "_varData") \
473 V(_wordCharacterMap, "_wordCharacterMap") \
474 V(_yieldAsyncStar, "_yieldAsyncStar") \
475 V(_yieldStarIterable, "_yieldStarIterable") \
476 V(_yieldSyncStar, "_yieldSyncStar") \
477 V(absolute, "absolute") \
478 V(add, "add") \
479 V(addStream, "addStream") \
480 V(asyncStarBody, "asyncStarBody") \
481 V(c_result, ":result") \
482 V(call, "call") \
483 V(callback, "callback") \
484 V(capture_length, ":capture_length") \
485 V(capture_start_index, ":capture_start_index") \
486 V(char_in_capture, ":char_in_capture") \
487 V(char_in_match, ":char_in_match") \
488 V(controller, "controller") \
489 V(current_character, ":current_character") \
490 V(current_position, ":current_position") \
491 V(dynamic_assert_assignable_stc_check, \
492 ":dynamic_assert_assignable_stc_check") \
493 V(executable, "executable") \
494 V(get, "get") \
495 V(index_temp, ":index_temp") \
496 V(isPaused, "isPaused") \
497 V(match_end_index, ":match_end_index") \
498 V(match_start_index, ":match_start_index") \
499 V(name, "name") \
500 V(native_assets, "native-assets") \
501 V(null, "null") \
502 V(options, "options") \
503 V(position_registers, ":position_registers") \
504 V(print, "print") \
505 V(process, "process") \
506 V(relative, "relative") \
507 V(result, "result") \
508 V(set, "set") \
509 V(stack, ":stack") \
510 V(stack_pointer, ":stack_pointer") \
511 V(start_index_param, ":start_index_param") \
512 V(state, "state") \
513 V(string_param, ":string_param") \
514 V(string_param_length, ":string_param_length") \
515 V(system, "system") \
516 V(vm_always_consider_inlining, "vm:always-consider-inlining") \
517 V(vm_entry_point, "vm:entry-point") \
518 V(vm_exact_result_type, "vm:exact-result-type") \
519 V(vm_external_name, "vm:external-name") \
520 V(vm_ffi_abi_specific_mapping, "vm:ffi:abi-specific-mapping") \
521 V(vm_ffi_native_assets, "vm:ffi:native-assets") \
522 V(vm_ffi_struct_fields, "vm:ffi:struct-fields") \
523 V(vm_invisible, "vm:invisible") \
524 V(vm_isolate_unsendable, "vm:isolate-unsendable") \
525 V(vm_awaiter_link, "vm:awaiter-link") \
526 V(vm_never_inline, "vm:never-inline") \
527 V(vm_non_nullable_result_type, "vm:non-nullable-result-type") \
528 V(vm_notify_debugger_on_exception, "vm:notify-debugger-on-exception") \
529 V(vm_prefer_inline, "vm:prefer-inline") \
530 V(vm_recognized, "vm:recognized") \
531 V(vm_testing_print_flow_graph, "vm:testing:print-flow-graph") \
532 V(vm_trace_entrypoints, "vm:testing.unsafe.trace-entrypoints-fn") \
533 V(vm_unsafe_no_interrupts, "vm:unsafe:no-interrupts")
534
535// Contains a list of frequently used strings in a canonicalized form. This
536// list is kept in the vm_isolate in order to share the copy across isolates
537// without having to maintain copies in each isolate.
538class Symbols : public AllStatic {
539 public:
540 enum { kMaxOneCharCodeSymbol = 0xFF };
541
542 // List of strings that are pre created in the vm isolate.
543 enum SymbolId {
544 // clang-format off
545 kIllegal = 0,
546
547#define DEFINE_SYMBOL_INDEX(symbol, literal) k##symbol##Id,
548 PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX)
549#undef DEFINE_SYMBOL_INDEX
550
551 kTokenTableStart, // First token at kTokenTableStart + 1.
552
553#define DEFINE_TOKEN_SYMBOL_INDEX(t, s, p, a) t##Id,
554 DART_TOKEN_LIST(DEFINE_TOKEN_SYMBOL_INDEX) DART_KEYWORD_LIST(
555 DEFINE_TOKEN_SYMBOL_INDEX)
556#undef DEFINE_TOKEN_SYMBOL_INDEX
557
558 kNullCharId, // One char code symbol starts here and takes up 256 entries.
559 kMaxPredefinedId = kNullCharId + kMaxOneCharCodeSymbol + 1,
560 // clang-format on
561 };
562
563 // Number of one character symbols being predefined in the predefined_ array.
564 static constexpr int kNumberOfOneCharCodeSymbols =
565 (kMaxPredefinedId - kNullCharId);
566
567 // Offset of Null character which is the predefined character symbol.
568 static constexpr int kNullCharCodeSymbolOffset = 0;
569
570 static const String& Symbol(intptr_t index) {
571 ASSERT((index > kIllegal) && (index < kMaxPredefinedId));
572 return *(symbol_handles_[index]);
573 }
574
575 // Access methods for one byte character symbols stored in the vm isolate.
576 static const String& Dot() { return *(symbol_handles_[kNullCharId + '.']); }
577 static const String& Equals() {
578 return *(symbol_handles_[kNullCharId + '=']);
579 }
580 static const String& Plus() { return *(symbol_handles_[kNullCharId + '+']); }
581 static const String& Minus() { return *(symbol_handles_[kNullCharId + '-']); }
582 static const String& BitOr() { return *(symbol_handles_[kNullCharId + '|']); }
583 static const String& BitAnd() {
584 return *(symbol_handles_[kNullCharId + '&']);
585 }
586 static const String& LAngleBracket() {
587 return *(symbol_handles_[kNullCharId + '<']);
588 }
589 static const String& RAngleBracket() {
590 return *(symbol_handles_[kNullCharId + '>']);
591 }
592 static const String& LParen() {
593 return *(symbol_handles_[kNullCharId + '(']);
594 }
595 static const String& RParen() {
596 return *(symbol_handles_[kNullCharId + ')']);
597 }
598 static const String& LBracket() {
599 return *(symbol_handles_[kNullCharId + '[']);
600 }
601 static const String& RBracket() {
602 return *(symbol_handles_[kNullCharId + ']']);
603 }
604 static const String& LBrace() {
605 return *(symbol_handles_[kNullCharId + '{']);
606 }
607 static const String& RBrace() {
608 return *(symbol_handles_[kNullCharId + '}']);
609 }
610 static const String& Blank() { return *(symbol_handles_[kNullCharId + ' ']); }
611 static const String& Dollar() {
612 return *(symbol_handles_[kNullCharId + '$']);
613 }
614 static const String& NewLine() {
615 return *(symbol_handles_[kNullCharId + '\n']);
616 }
617 static const String& DoubleQuote() {
618 return *(symbol_handles_[kNullCharId + '"']);
619 }
620 static const String& SingleQuote() {
621 return *(symbol_handles_[kNullCharId + '\'']);
622 }
623 static const String& LowercaseR() {
624 return *(symbol_handles_[kNullCharId + 'r']);
625 }
626 static const String& Dash() { return *(symbol_handles_[kNullCharId + '-']); }
627 static const String& Ampersand() {
628 return *(symbol_handles_[kNullCharId + '&']);
629 }
630 static const String& Backtick() {
631 return *(symbol_handles_[kNullCharId + '`']);
632 }
633 static const String& Slash() { return *(symbol_handles_[kNullCharId + '/']); }
634 static const String& At() { return *(symbol_handles_[kNullCharId + '@']); }
635 static const String& HashMark() {
636 return *(symbol_handles_[kNullCharId + '#']);
637 }
638 static const String& Semicolon() {
639 return *(symbol_handles_[kNullCharId + ';']);
640 }
641 static const String& Star() { return *(symbol_handles_[kNullCharId + '*']); }
642 static const String& Percent() {
643 return *(symbol_handles_[kNullCharId + '%']);
644 }
645 static const String& QuestionMark() {
646 return *(symbol_handles_[kNullCharId + '?']);
647 }
648 static const String& Caret() { return *(symbol_handles_[kNullCharId + '^']); }
649 static const String& Tilde() { return *(symbol_handles_[kNullCharId + '~']); }
650
651 static const String& Empty() { return *(symbol_handles_[kTokenTableStart]); }
652 static const String& False() { return *(symbol_handles_[kFALSEId]); }
653 static const String& Library() { return *(symbol_handles_[kLIBRARYId]); }
654 static const String& Super() { return *(symbol_handles_[kSUPERId]); }
655 static const String& This() { return *(symbol_handles_[kTHISId]); }
656 static const String& True() { return *(symbol_handles_[kTRUEId]); }
657 static const String& Void() { return *(symbol_handles_[kVOIDId]); }
658
659// Access methods for symbol handles stored in the vm isolate for predefined
660// symbols.
661#define DEFINE_SYMBOL_HANDLE_ACCESSOR(symbol, literal) \
662 static const String& symbol() { return *(symbol_handles_[k##symbol##Id]); }
663 PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
664#undef DEFINE_SYMBOL_HANDLE_ACCESSOR
665
666// Access methods for symbol handles stored in the vm isolate for keywords.
667#define DEFINE_SYMBOL_HANDLE_ACCESSOR(t, s, p, a) \
668 static const String& t() { return *(symbol_handles_[t##Id]); }
669 DART_TOKEN_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
670 DART_KEYWORD_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
671#undef DEFINE_SYMBOL_HANDLE_ACCESSOR
672
673 // Get symbol for scanner token.
674 static const String& Token(Token::Kind token);
675
676 // Initialize frequently used symbols in the vm isolate.
677 static void Init(IsolateGroup* isolate_group);
678 static void InitFromSnapshot(IsolateGroup* isolate_group);
679
680 // Initialize and setup a symbol table for the isolate.
681 static void SetupSymbolTable(IsolateGroup* isolate_group);
682
683 // Creates a Symbol given a C string that is assumed to contain
684 // UTF-8 encoded characters and '\0' is considered a termination character.
685 // TODO(7123) - Rename this to FromCString(....).
686 static StringPtr New(Thread* thread, const char* cstr) {
687 return New(thread, cstr, length: strlen(s: cstr));
688 }
689 static StringPtr New(Thread* thread, const char* cstr, intptr_t length);
690
691 // Creates a new Symbol from an array of UTF-8 encoded characters.
692 static StringPtr FromUTF8(Thread* thread,
693 const uint8_t* utf8_array,
694 intptr_t len);
695
696 // Creates a new Symbol from an array of Latin-1 encoded characters.
697 static StringPtr FromLatin1(Thread* thread,
698 const uint8_t* latin1_array,
699 intptr_t len);
700
701 // Creates a new Symbol from an array of UTF-16 encoded characters.
702 static StringPtr FromUTF16(Thread* thread,
703 const uint16_t* utf16_array,
704 intptr_t len);
705
706 static StringPtr New(Thread* thread, const String& str);
707 static StringPtr New(Thread* thread,
708 const String& str,
709 intptr_t begin_index,
710 intptr_t length);
711
712 static StringPtr NewFormatted(Thread* thread, const char* format, ...)
713 PRINTF_ATTRIBUTE(2, 3);
714 static StringPtr NewFormattedV(Thread* thread,
715 const char* format,
716 va_list args);
717
718 static StringPtr FromConcat(Thread* thread,
719 const String& str1,
720 const String& str2);
721
722 static StringPtr FromConcatAll(
723 Thread* thread,
724 const GrowableHandlePtrArray<const String>& strs);
725
726 static StringPtr FromGet(Thread* thread, const String& str);
727 static StringPtr FromSet(Thread* thread, const String& str);
728 static StringPtr FromDot(Thread* thread, const String& str);
729
730 // Returns char* of predefined symbol.
731 static const char* Name(SymbolId symbol);
732
733 static StringPtr FromCharCode(Thread* thread, uint16_t char_code);
734
735 static StringPtr* PredefinedAddress() {
736 return reinterpret_cast<StringPtr*>(&predefined_);
737 }
738
739 static void DumpStats(IsolateGroup* isolate_group);
740 static void DumpTable(IsolateGroup* isolate_group);
741
742 // Returns Symbol::Null if no symbol is found.
743 template <typename StringType>
744 static StringPtr Lookup(Thread* thread, const StringType& str);
745
746 // Returns Symbol::Null if no symbol is found.
747 static StringPtr LookupFromConcat(Thread* thread,
748 const String& str1,
749 const String& str2);
750
751 static StringPtr LookupFromGet(Thread* thread, const String& str);
752 static StringPtr LookupFromSet(Thread* thread, const String& str);
753 static StringPtr LookupFromDot(Thread* thread, const String& str);
754
755 static void GetStats(IsolateGroup* isolate_group,
756 intptr_t* size,
757 intptr_t* capacity);
758
759 private:
760 enum { kInitialVMIsolateSymtabSize = 1024, kInitialSymtabSize = 2048 };
761
762 template <typename StringType>
763 static StringPtr NewSymbol(Thread* thread, const StringType& str);
764
765 // List of Latin1 characters stored in the vm isolate as symbols
766 // in order to make Symbols::FromCharCode fast. This structure is
767 // used in generated dart code for direct access to these objects.
768 static StringPtr predefined_[kNumberOfOneCharCodeSymbols];
769
770 // List of handles for predefined symbols.
771 static String* symbol_handles_[kMaxPredefinedId];
772
773 friend class Dart;
774 friend class String;
775 friend class Serializer;
776 friend class Deserializer;
777
778 DISALLOW_COPY_AND_ASSIGN(Symbols);
779};
780
781} // namespace dart
782
783#endif // RUNTIME_VM_SYMBOLS_H_
784

Provided by KDAB

Privacy Policy
Learn more about Flutter for embedded and desktop on industrialflutter.com

source code of flutter_engine/third_party/dart/runtime/vm/symbols.h