rquickjs_core/value/atom/
predefined.rs

1use crate::qjs;
2
3/// A collection of atoms which are predefined in quickjs.
4///
5/// Using these over [`Atom::from_str`](crate::Atom::from_str) can be more performant as these don't need to be looked up
6/// in a hashmap.
7#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)]
8#[repr(u32)]
9#[allow(clippy::unnecessary_cast)]
10pub enum PredefinedAtom {
11    /// "null"
12    Null = qjs::JS_ATOM_null as u32, // must be first
13    /// "false"
14    False = qjs::JS_ATOM_false as u32,
15    /// "true"
16    True = qjs::JS_ATOM_true as u32,
17    /// "if"
18    If = qjs::JS_ATOM_if as u32,
19    /// "else"
20    Else = qjs::JS_ATOM_else as u32,
21    /// "return"
22    Return = qjs::JS_ATOM_return as u32,
23    /// "var"
24    Var = qjs::JS_ATOM_var as u32,
25    /// "this"
26    This = qjs::JS_ATOM_this as u32,
27    /// "delete"
28    Delete = qjs::JS_ATOM_delete as u32,
29    /// "void"
30    Void = qjs::JS_ATOM_void as u32,
31    /// "typeof"
32    Typeof = qjs::JS_ATOM_typeof as u32,
33    /// "new"
34    New = qjs::JS_ATOM_new as u32,
35    /// "in"
36    In = qjs::JS_ATOM_in as u32,
37    /// "instanceof"
38    Instanceof = qjs::JS_ATOM_instanceof as u32,
39    /// "do"
40    Do = qjs::JS_ATOM_do as u32,
41    /// "while"
42    While = qjs::JS_ATOM_while as u32,
43    /// "for"
44    For = qjs::JS_ATOM_for as u32,
45    /// "break"
46    Break = qjs::JS_ATOM_break as u32,
47    /// "continue"
48    Continue = qjs::JS_ATOM_continue as u32,
49    /// "switch"
50    Switch = qjs::JS_ATOM_switch as u32,
51    /// "case"
52    Case = qjs::JS_ATOM_case as u32,
53    /// "default"
54    Default = qjs::JS_ATOM_default as u32,
55    /// "throw"
56    Throw = qjs::JS_ATOM_throw as u32,
57    /// "try"
58    Try = qjs::JS_ATOM_try as u32,
59    /// "catch"
60    Catch = qjs::JS_ATOM_catch as u32,
61    /// "finally"
62    Finally = qjs::JS_ATOM_finally as u32,
63    /// "function"
64    FunctionKw = qjs::JS_ATOM_function as u32,
65    /// "debugger"
66    Debugger = qjs::JS_ATOM_debugger as u32,
67    /// "with"
68    With = qjs::JS_ATOM_with as u32,
69    /// "class"
70    Class = qjs::JS_ATOM_class as u32,
71    /// "const"
72    Const = qjs::JS_ATOM_const as u32,
73    /// "enum"
74    Enum = qjs::JS_ATOM_enum as u32,
75    /// "export"
76    Export = qjs::JS_ATOM_export as u32,
77    /// "extends"
78    Extends = qjs::JS_ATOM_extends as u32,
79    /// "import"
80    Import = qjs::JS_ATOM_import as u32,
81    /// "super"
82    Super = qjs::JS_ATOM_super as u32,
83    /// "implements"
84    Implements = qjs::JS_ATOM_implements as u32,
85    /// "interface"
86    Interface = qjs::JS_ATOM_interface as u32,
87    /// "let"
88    Let = qjs::JS_ATOM_let as u32,
89    /// "package"
90    Package = qjs::JS_ATOM_package as u32,
91    /// "private"
92    Private = qjs::JS_ATOM_private as u32,
93    /// "protected"
94    Protected = qjs::JS_ATOM_protected as u32,
95    /// "public"
96    Public = qjs::JS_ATOM_public as u32,
97    /// "static"
98    Static = qjs::JS_ATOM_static as u32,
99    /// "yield"
100    Yield = qjs::JS_ATOM_yield as u32,
101    /// "await"
102    Await = qjs::JS_ATOM_await as u32,
103
104    /// ""
105    Empty = qjs::JS_ATOM_empty_string as u32,
106    /// "length"
107    Length = qjs::JS_ATOM_length as u32,
108    /// "message"
109    Message = qjs::JS_ATOM_message as u32,
110    /// "errors"
111    Errors = qjs::JS_ATOM_errors as u32,
112    /// "stack"
113    Stack = qjs::JS_ATOM_stack as u32,
114    /// "name"
115    Name = qjs::JS_ATOM_name as u32,
116    /// "toString"
117    ToString = qjs::JS_ATOM_toString as u32,
118    /// "toLocaleString"
119    ToLocaleString = qjs::JS_ATOM_toLocaleString as u32,
120    /// "valueOf"
121    ValueOf = qjs::JS_ATOM_valueOf as u32,
122    /// "eval"
123    Eval = qjs::JS_ATOM_eval as u32,
124    /// "prototype"
125    Prototype = qjs::JS_ATOM_prototype as u32,
126    /// "constructor"
127    Constructor = qjs::JS_ATOM_constructor as u32,
128    /// "configurable"
129    Configurable = qjs::JS_ATOM_configurable as u32,
130    /// "writable"
131    Writable = qjs::JS_ATOM_writable as u32,
132    /// "enumerable"
133    Enumerable = qjs::JS_ATOM_enumerable as u32,
134    /// "value"
135    Value = qjs::JS_ATOM_value as u32,
136    /// "get"
137    Getter = qjs::JS_ATOM_get as u32,
138    /// "set"
139    Setter = qjs::JS_ATOM_set as u32,
140    /// "of"
141    Of = qjs::JS_ATOM_of as u32,
142    /// "__proto__"
143    UnderscoreProto = qjs::JS_ATOM___proto__ as u32,
144    /// "undefined"
145    Undefined = qjs::JS_ATOM_undefined as u32,
146    /// "number"
147    NumberLower = qjs::JS_ATOM_number as u32,
148    /// "boolean"
149    BooleanLower = qjs::JS_ATOM_boolean as u32,
150    /// "string"
151    StringLower = qjs::JS_ATOM_string as u32,
152    /// "object"
153    ObjectLower = qjs::JS_ATOM_object as u32,
154    /// "symbol"
155    SymbolLower = qjs::JS_ATOM_symbol as u32,
156    /// "integer"
157    Integer = qjs::JS_ATOM_integer as u32,
158    /// "unknown"
159    Unknown = qjs::JS_ATOM_unknown as u32,
160    /// "arguments"
161    ArgumentsLower = qjs::JS_ATOM_arguments as u32,
162    /// "callee"
163    Callee = qjs::JS_ATOM_callee as u32,
164    /// "caller"
165    Caller = qjs::JS_ATOM_caller as u32,
166    /// "lastIndex"
167    LastIndex = qjs::JS_ATOM_lastIndex as u32,
168    /// "target"
169    Target = qjs::JS_ATOM_target as u32,
170    /// "index"
171    Index = qjs::JS_ATOM_index as u32,
172    /// "input"
173    Input = qjs::JS_ATOM_input as u32,
174    /// "defineProperties"
175    DefineProperties = qjs::JS_ATOM_defineProperties as u32,
176    /// "apply"
177    Apply = qjs::JS_ATOM_apply as u32,
178    /// "join"
179    Join = qjs::JS_ATOM_join as u32,
180    /// "concat"
181    Concat = qjs::JS_ATOM_concat as u32,
182    /// "split"
183    Split = qjs::JS_ATOM_split as u32,
184    /// "construct"
185    Construct = qjs::JS_ATOM_construct as u32,
186    /// "getPrototypeOf"
187    GetPrototypeOf = qjs::JS_ATOM_getPrototypeOf as u32,
188    /// "setPrototypeOf"
189    SetPrototypeOf = qjs::JS_ATOM_setPrototypeOf as u32,
190    /// "isExtensible"
191    IsExtensible = qjs::JS_ATOM_isExtensible as u32,
192    /// "preventExtensions"
193    PreventExtensions = qjs::JS_ATOM_preventExtensions as u32,
194    /// "has"
195    Has = qjs::JS_ATOM_has as u32,
196    /// "deleteProperty"
197    DeleteProperty = qjs::JS_ATOM_deleteProperty as u32,
198    /// "defineProperty"
199    DefineProperty = qjs::JS_ATOM_defineProperty as u32,
200    /// "getOwnPropertyDescriptor"
201    GetOwnPropertyDescriptor = qjs::JS_ATOM_getOwnPropertyDescriptor as u32,
202    /// "ownKeys"
203    OwnKeys = qjs::JS_ATOM_ownKeys as u32,
204    /// "add"
205    Add = qjs::JS_ATOM_add as u32,
206    /// "done"
207    Done = qjs::JS_ATOM_done as u32,
208    /// "next"
209    Next = qjs::JS_ATOM_next as u32,
210    /// "values"
211    Values = qjs::JS_ATOM_values as u32,
212    /// "source"
213    Source = qjs::JS_ATOM_source as u32,
214    /// "flags"
215    Flags = qjs::JS_ATOM_flags as u32,
216    /// "global"
217    Global = qjs::JS_ATOM_global as u32,
218    /// "unicode"
219    Unicode = qjs::JS_ATOM_unicode as u32,
220    /// "raw"
221    Raw = qjs::JS_ATOM_raw as u32,
222    /// "new.target"
223    NewTarget = qjs::JS_ATOM_new_target as u32,
224    /// "this.active_func"
225    ThisActiveFunc = qjs::JS_ATOM_this_active_func as u32,
226    /// "\<home_object\>"
227    HomeObject = qjs::JS_ATOM_home_object as u32,
228    /// "\<computed_field\>"
229    ComputedField = qjs::JS_ATOM_computed_field as u32,
230    /// "\<static_computed_field\>"
231    StaticComputedField = qjs::JS_ATOM_static_computed_field as u32, // must come after computed_fields
232    /// "\<class_fields_init\>"
233    ClassFieldsInit = qjs::JS_ATOM_class_fields_init as u32,
234    /// "\<brand\>"
235    Brand = qjs::JS_ATOM_brand as u32,
236    /// "#constructor"
237    HashConstructor = qjs::JS_ATOM_hash_constructor as u32,
238    /// "as"
239    As = qjs::JS_ATOM_as as u32,
240    /// "from"
241    From = qjs::JS_ATOM_from as u32,
242    /// "meta"
243    Meta = qjs::JS_ATOM_meta as u32,
244    /// "*default*"
245    StarDefault = qjs::JS_ATOM__default_ as u32,
246    /// "*"
247    Star = qjs::JS_ATOM__star_ as u32,
248    /// "Module"
249    Module = qjs::JS_ATOM_Module as u32,
250    /// "then"
251    Then = qjs::JS_ATOM_then as u32,
252    /// "resolve"
253    Resolve = qjs::JS_ATOM_resolve as u32,
254    /// "reject"
255    Reject = qjs::JS_ATOM_reject as u32,
256    /// "promise"
257    PromiseLower = qjs::JS_ATOM_promise as u32,
258    /// "proxy"
259    ProxyLower = qjs::JS_ATOM_proxy as u32,
260    /// "revoke"
261    Revoke = qjs::JS_ATOM_revoke as u32,
262    /// "async"
263    Async = qjs::JS_ATOM_async as u32,
264    /// "exec"
265    Exec = qjs::JS_ATOM_exec as u32,
266    /// "groups"
267    Groups = qjs::JS_ATOM_groups as u32,
268    /// "status"
269    Status = qjs::JS_ATOM_status as u32,
270    /// "reason"
271    Reason = qjs::JS_ATOM_reason as u32,
272    /// "globalThis"
273    GlobalThis = qjs::JS_ATOM_globalThis as u32,
274    /// "bigint"
275    Bigint = qjs::JS_ATOM_bigint as u32,
276    /// "toJSON"
277    ToJSON = qjs::JS_ATOM_toJSON as u32,
278    /// "toJSON"
279    MaxByteLength = qjs::JS_ATOM_maxByteLength as u32,
280    /// "Object"
281    Object = qjs::JS_ATOM_Object as u32,
282    /// "Array"
283    Array = qjs::JS_ATOM_Array as u32,
284    /// "Error"
285    Error = qjs::JS_ATOM_Error as u32,
286    /// "Number"
287    Number = qjs::JS_ATOM_Number as u32,
288    /// "String"
289    String = qjs::JS_ATOM_String as u32,
290    /// "Boolean"
291    Boolean = qjs::JS_ATOM_Boolean as u32,
292    /// "Symbol"
293    Symbol = qjs::JS_ATOM_Symbol as u32,
294    /// "Arguments"
295    Arguments = qjs::JS_ATOM_Arguments as u32,
296    /// "Math"
297    Math = qjs::JS_ATOM_Math as u32,
298    /// "JSON"
299    JSON = qjs::JS_ATOM_JSON as u32,
300    /// "Date"
301    Date = qjs::JS_ATOM_Date as u32,
302    /// "Function"
303    Function = qjs::JS_ATOM_Function as u32,
304    /// "GeneratorFunction"
305    GeneratorFunction = qjs::JS_ATOM_GeneratorFunction as u32,
306    /// "ForInIterator"
307    ForInIterator = qjs::JS_ATOM_ForInIterator as u32,
308    /// "RegExp"
309    RegExp = qjs::JS_ATOM_RegExp as u32,
310    /// "ArrayBuffer"
311    ArrayBuffer = qjs::JS_ATOM_ArrayBuffer as u32,
312    /// "SharedArrayBuffer"
313    SharedArrayBuffer = qjs::JS_ATOM_SharedArrayBuffer as u32,
314    /// "Uint8ClampedArray"
315    Uint8ClampedArray = qjs::JS_ATOM_Uint8ClampedArray as u32,
316    /// "Int8Array"
317    Int8Array = qjs::JS_ATOM_Int8Array as u32,
318    /// "Uint8Array"
319    Uint8Array = qjs::JS_ATOM_Uint8Array as u32,
320    /// "Int16Array"
321    Int16Array = qjs::JS_ATOM_Int16Array as u32,
322    /// "Uint16Array"
323    Uint16Array = qjs::JS_ATOM_Uint16Array as u32,
324    /// "Int32Array"
325    Int32Array = qjs::JS_ATOM_Int32Array as u32,
326    /// "Uint32Array"
327    Uint32Array = qjs::JS_ATOM_Uint32Array as u32,
328    /// "BigInt64Array"
329    BigInt64Array = qjs::JS_ATOM_BigInt64Array as u32,
330    /// "BigUint64Array"
331    BigUint64Array = qjs::JS_ATOM_BigUint64Array as u32,
332    /// "Float32Array"
333    Float32Array = qjs::JS_ATOM_Float32Array as u32,
334    /// "Float64Array"
335    Float64Array = qjs::JS_ATOM_Float64Array as u32,
336    /// "DataView"
337    DataView = qjs::JS_ATOM_DataView as u32,
338    /// "BigInt"
339    BigInt = qjs::JS_ATOM_BigInt as u32,
340    /// "Map"
341    Map = qjs::JS_ATOM_Map as u32,
342    /// "Set"
343    Set = qjs::JS_ATOM_Set as u32,
344    /// "WeakMap"
345    WeakMap = qjs::JS_ATOM_WeakMap as u32,
346    /// "WeakSet"
347    WeakSet = qjs::JS_ATOM_WeakSet as u32,
348    /// "Map Iterator"
349    MapIterator = qjs::JS_ATOM_Map_Iterator as u32,
350    /// "Set Iterator"
351    SetIterator = qjs::JS_ATOM_Set_Iterator as u32,
352    /// "Array Iterator"
353    ArrayIterator = qjs::JS_ATOM_Array_Iterator as u32,
354    /// "String Iterator"
355    StringIterator = qjs::JS_ATOM_String_Iterator as u32,
356    /// "RegExp String Iterator"
357    RegExpStringIterator = qjs::JS_ATOM_RegExp_String_Iterator as u32,
358    /// "Generator"
359    Generator = qjs::JS_ATOM_Generator as u32,
360    /// "Proxy"
361    Proxy = qjs::JS_ATOM_Proxy as u32,
362    /// "Promise"
363    Promise = qjs::JS_ATOM_Promise as u32,
364    /// "PromiseResolveFunction"
365    PromiseResolveFunction = qjs::JS_ATOM_PromiseResolveFunction as u32,
366    /// "PromiseRejectFunction"
367    PromiseRejectFunction = qjs::JS_ATOM_PromiseRejectFunction as u32,
368    /// "AsyncFunction"
369    AsyncFunction = qjs::JS_ATOM_AsyncFunction as u32,
370    /// "AsyncFunctionResolve"
371    AsyncFunctionResolve = qjs::JS_ATOM_AsyncFunctionResolve as u32,
372    /// "AsyncFunctionReject"
373    AsyncFunctionReject = qjs::JS_ATOM_AsyncFunctionReject as u32,
374    /// "AsyncGeneratorFunction"
375    AsyncGeneratorFunction = qjs::JS_ATOM_AsyncGeneratorFunction as u32,
376    /// "AsyncGenerator"
377    AsyncGenerator = qjs::JS_ATOM_AsyncGenerator as u32,
378    /// "EvalError"
379    EvalError = qjs::JS_ATOM_EvalError as u32,
380    /// "RangeError"
381    RangeError = qjs::JS_ATOM_RangeError as u32,
382    /// "ReferenceError"
383    ReferenceError = qjs::JS_ATOM_ReferenceError as u32,
384    /// "SyntaxError"
385    SyntaxError = qjs::JS_ATOM_SyntaxError as u32,
386    /// "TypeError"
387    TypeError = qjs::JS_ATOM_TypeError as u32,
388    /// "URIError"
389    URIError = qjs::JS_ATOM_URIError as u32,
390    /// "InternalError"
391    InternalError = qjs::JS_ATOM_InternalError as u32,
392    /// "Symbol.asyncIterator"
393    SymbolAsyncIterator = qjs::JS_ATOM_Symbol_asyncIterator as u32,
394    /// "Symbol.iterator"
395    SymbolIterator = qjs::JS_ATOM_Symbol_iterator as u32,
396    /// "Symbol.match"
397    SymbolMatch = qjs::JS_ATOM_Symbol_match as u32,
398    /// "Symbol.matchAll"
399    SymbolMatchAll = qjs::JS_ATOM_Symbol_matchAll as u32,
400    /// "Symbol.replace"
401    SymbolReplace = qjs::JS_ATOM_Symbol_replace as u32,
402    /// "Symbol.search"
403    SymbolSearch = qjs::JS_ATOM_Symbol_search as u32,
404    /// "Symbol.split"
405    SymbolSplit = qjs::JS_ATOM_Symbol_split as u32,
406    /// "Symbol.toStringTag"
407    SymbolToStringTag = qjs::JS_ATOM_Symbol_toStringTag as u32,
408    /// "Symbol.isConcatSpreadable"
409    SymbolIsConcatSpreadable = qjs::JS_ATOM_Symbol_isConcatSpreadable as u32,
410    /// "Symbol.hasInstance"
411    SymbolHasInstance = qjs::JS_ATOM_Symbol_hasInstance as u32,
412    /// "Symbol.species"
413    SymbolSpecies = qjs::JS_ATOM_Symbol_species as u32,
414    /// "Symbol.unscopables"
415    SymbolUnscopables = qjs::JS_ATOM_Symbol_unscopables as u32,
416}
417
418impl PredefinedAtom {
419    pub const fn is_symbol(self) -> bool {
420        matches!(
421            self,
422            PredefinedAtom::SymbolAsyncIterator
423                | PredefinedAtom::SymbolIterator
424                | PredefinedAtom::SymbolMatch
425                | PredefinedAtom::SymbolMatchAll
426                | PredefinedAtom::SymbolReplace
427                | PredefinedAtom::SymbolSearch
428                | PredefinedAtom::SymbolSplit
429                | PredefinedAtom::SymbolToStringTag
430                | PredefinedAtom::SymbolIsConcatSpreadable
431                | PredefinedAtom::SymbolHasInstance
432                | PredefinedAtom::SymbolSpecies
433                | PredefinedAtom::SymbolUnscopables
434        )
435    }
436
437    pub const fn to_str(self) -> &'static str {
438        match self {
439            PredefinedAtom::Null => "null",
440            PredefinedAtom::False => "false",
441            PredefinedAtom::True => "true",
442            PredefinedAtom::If => "if",
443            PredefinedAtom::Else => "else",
444            PredefinedAtom::Return => "return",
445            PredefinedAtom::Var => "var",
446            PredefinedAtom::This => "this",
447            PredefinedAtom::Delete => "delete",
448            PredefinedAtom::Void => "void",
449            PredefinedAtom::Typeof => "typeof",
450            PredefinedAtom::New => "new",
451            PredefinedAtom::In => "in",
452            PredefinedAtom::Instanceof => "instanceof",
453            PredefinedAtom::Do => "do",
454            PredefinedAtom::While => "while",
455            PredefinedAtom::For => "for",
456            PredefinedAtom::Break => "break",
457            PredefinedAtom::Continue => "continue",
458            PredefinedAtom::Switch => "switch",
459            PredefinedAtom::Case => "case",
460            PredefinedAtom::Default => "default",
461            PredefinedAtom::Throw => "throw",
462            PredefinedAtom::Try => "try",
463            PredefinedAtom::Catch => "catch",
464            PredefinedAtom::Finally => "finally",
465            PredefinedAtom::FunctionKw => "function",
466            PredefinedAtom::Debugger => "debugger",
467            PredefinedAtom::With => "with",
468            PredefinedAtom::Class => "class",
469            PredefinedAtom::Const => "const",
470            PredefinedAtom::Enum => "enum",
471            PredefinedAtom::Export => "export",
472            PredefinedAtom::Extends => "extends",
473            PredefinedAtom::Import => "import",
474            PredefinedAtom::Super => "super",
475            PredefinedAtom::Implements => "implements",
476            PredefinedAtom::Interface => "interface",
477            PredefinedAtom::Let => "let",
478            PredefinedAtom::Package => "package",
479            PredefinedAtom::Private => "private",
480            PredefinedAtom::Protected => "protected",
481            PredefinedAtom::Public => "public",
482            PredefinedAtom::Static => "static",
483            PredefinedAtom::Yield => "yield",
484            PredefinedAtom::Await => "await",
485            PredefinedAtom::Empty => "",
486            PredefinedAtom::Length => "length",
487            PredefinedAtom::Message => "message",
488            PredefinedAtom::Errors => "errors",
489            PredefinedAtom::Stack => "stack",
490            PredefinedAtom::Name => "name",
491            PredefinedAtom::ToString => "toString",
492            PredefinedAtom::ToLocaleString => "toLocaleString",
493            PredefinedAtom::ValueOf => "valueOf",
494            PredefinedAtom::Eval => "eval",
495            PredefinedAtom::Prototype => "prototype",
496            PredefinedAtom::Constructor => "constructor",
497            PredefinedAtom::Configurable => "configurable",
498            PredefinedAtom::Writable => "writable",
499            PredefinedAtom::Enumerable => "enumerable",
500            PredefinedAtom::Value => "value",
501            PredefinedAtom::Getter => "get",
502            PredefinedAtom::Setter => "set",
503            PredefinedAtom::Of => "of",
504            PredefinedAtom::UnderscoreProto => "__proto__",
505            PredefinedAtom::Undefined => "undefined",
506            PredefinedAtom::NumberLower => "number",
507            PredefinedAtom::BooleanLower => "boolean",
508            PredefinedAtom::StringLower => "string",
509            PredefinedAtom::ObjectLower => "object",
510            PredefinedAtom::SymbolLower => "symbol",
511            PredefinedAtom::Integer => "integer",
512            PredefinedAtom::Unknown => "unknown",
513            PredefinedAtom::ArgumentsLower => "arguments",
514            PredefinedAtom::Callee => "callee",
515            PredefinedAtom::Caller => "caller",
516            PredefinedAtom::LastIndex => "lastIndex",
517            PredefinedAtom::Target => "target",
518            PredefinedAtom::Index => "index",
519            PredefinedAtom::Input => "input",
520            PredefinedAtom::DefineProperties => "defineProperties",
521            PredefinedAtom::Apply => "apply",
522            PredefinedAtom::Join => "join",
523            PredefinedAtom::Concat => "concat",
524            PredefinedAtom::Split => "split",
525            PredefinedAtom::Construct => "construct",
526            PredefinedAtom::GetPrototypeOf => "getPrototypeOf",
527            PredefinedAtom::SetPrototypeOf => "setPrototypeOf",
528            PredefinedAtom::IsExtensible => "isExtensible",
529            PredefinedAtom::PreventExtensions => "preventExtensions",
530            PredefinedAtom::Has => "has",
531            PredefinedAtom::DeleteProperty => "deleteProperty",
532            PredefinedAtom::DefineProperty => "defineProperty",
533            PredefinedAtom::GetOwnPropertyDescriptor => "getOwnPropertyDescriptor",
534            PredefinedAtom::OwnKeys => "ownKeys",
535            PredefinedAtom::Add => "add",
536            PredefinedAtom::Done => "done",
537            PredefinedAtom::Next => "next",
538            PredefinedAtom::Values => "values",
539            PredefinedAtom::Source => "source",
540            PredefinedAtom::Flags => "flags",
541            PredefinedAtom::Global => "global",
542            PredefinedAtom::Unicode => "unicode",
543            PredefinedAtom::Raw => "raw",
544            PredefinedAtom::NewTarget => "new.target",
545            PredefinedAtom::ThisActiveFunc => "this.active_func",
546            PredefinedAtom::HomeObject => "<home_object>",
547            PredefinedAtom::ComputedField => "<computed_field>",
548            PredefinedAtom::StaticComputedField => "<static_computed_field>",
549            PredefinedAtom::ClassFieldsInit => "<class_fields_init>",
550            PredefinedAtom::Brand => "<brand>",
551            PredefinedAtom::HashConstructor => "#constructor",
552            PredefinedAtom::As => "as",
553            PredefinedAtom::From => "from",
554            PredefinedAtom::Meta => "meta",
555            PredefinedAtom::StarDefault => "*default*",
556            PredefinedAtom::Star => "*",
557            PredefinedAtom::Module => "Module",
558            PredefinedAtom::Then => "then",
559            PredefinedAtom::Resolve => "resolve",
560            PredefinedAtom::Reject => "reject",
561            PredefinedAtom::PromiseLower => "promise",
562            PredefinedAtom::ProxyLower => "proxy",
563            PredefinedAtom::Revoke => "revoke",
564            PredefinedAtom::Async => "async",
565            PredefinedAtom::Exec => "exec",
566            PredefinedAtom::Groups => "groups",
567            PredefinedAtom::Status => "status",
568            PredefinedAtom::Reason => "reason",
569            PredefinedAtom::GlobalThis => "globalThis",
570            PredefinedAtom::Bigint => "bigint",
571            PredefinedAtom::ToJSON => "toJSON",
572            PredefinedAtom::MaxByteLength => "maxByteLength",
573            PredefinedAtom::Object => "Object",
574            PredefinedAtom::Array => "Array",
575            PredefinedAtom::Error => "Error",
576            PredefinedAtom::Number => "Number",
577            PredefinedAtom::String => "String",
578            PredefinedAtom::Boolean => "Boolean",
579            PredefinedAtom::Symbol => "Symbol",
580            PredefinedAtom::Arguments => "Arguments",
581            PredefinedAtom::Math => "Math",
582            PredefinedAtom::JSON => "JSON",
583            PredefinedAtom::Date => "Date",
584            PredefinedAtom::Function => "Function",
585            PredefinedAtom::GeneratorFunction => "GeneratorFunction",
586            PredefinedAtom::ForInIterator => "ForInIterator",
587            PredefinedAtom::RegExp => "RegExp",
588            PredefinedAtom::ArrayBuffer => "ArrayBuffer",
589            PredefinedAtom::SharedArrayBuffer => "SharedArrayBuffer",
590            PredefinedAtom::Uint8ClampedArray => "Uint8ClampedArray",
591            PredefinedAtom::Int8Array => "Int8Array",
592            PredefinedAtom::Uint8Array => "Uint8Array",
593            PredefinedAtom::Int16Array => "Int16Array",
594            PredefinedAtom::Uint16Array => "Uint16Array",
595            PredefinedAtom::Int32Array => "Int32Array",
596            PredefinedAtom::Uint32Array => "Uint32Array",
597            PredefinedAtom::BigInt64Array => "BigInt64Array",
598            PredefinedAtom::BigUint64Array => "BigUint64Array",
599            PredefinedAtom::Float32Array => "Float32Array",
600            PredefinedAtom::Float64Array => "Float64Array",
601            PredefinedAtom::DataView => "DataView",
602            PredefinedAtom::BigInt => "BigInt",
603            PredefinedAtom::Map => "Map",
604            PredefinedAtom::Set => "Set",
605            PredefinedAtom::WeakMap => "WeakMap",
606            PredefinedAtom::WeakSet => "WeakSet",
607            PredefinedAtom::MapIterator => "Map Iterator",
608            PredefinedAtom::SetIterator => "Set Iterator",
609            PredefinedAtom::ArrayIterator => "Array Iterator",
610            PredefinedAtom::StringIterator => "String Iterator",
611            PredefinedAtom::RegExpStringIterator => "RegExp String Iterator",
612            PredefinedAtom::Generator => "Generator",
613            PredefinedAtom::Proxy => "Proxy",
614            PredefinedAtom::Promise => "Promise",
615            PredefinedAtom::PromiseResolveFunction => "PromiseResolveFunction",
616            PredefinedAtom::PromiseRejectFunction => "PromiseRejectFunction",
617            PredefinedAtom::AsyncFunction => "AsyncFunction",
618            PredefinedAtom::AsyncFunctionResolve => "AsyncFunctionResolve",
619            PredefinedAtom::AsyncFunctionReject => "AsyncFunctionReject",
620            PredefinedAtom::AsyncGeneratorFunction => "AsyncGeneratorFunction",
621            PredefinedAtom::AsyncGenerator => "AsyncGenerator",
622            PredefinedAtom::EvalError => "EvalError",
623            PredefinedAtom::RangeError => "RangeError",
624            PredefinedAtom::ReferenceError => "ReferenceError",
625            PredefinedAtom::SyntaxError => "SyntaxError",
626            PredefinedAtom::TypeError => "TypeError",
627            PredefinedAtom::URIError => "URIError",
628            PredefinedAtom::InternalError => "InternalError",
629            PredefinedAtom::SymbolAsyncIterator => "Symbol.asyncIterator",
630            PredefinedAtom::SymbolIterator => "Symbol.iterator",
631            PredefinedAtom::SymbolMatch => "Symbol.match",
632            PredefinedAtom::SymbolMatchAll => "Symbol.matchAll",
633            PredefinedAtom::SymbolReplace => "Symbol.replace",
634            PredefinedAtom::SymbolSearch => "Symbol.search",
635            PredefinedAtom::SymbolSplit => "Symbol.split",
636            PredefinedAtom::SymbolToStringTag => "Symbol.toStringTag",
637            PredefinedAtom::SymbolIsConcatSpreadable => "Symbol.isConcatSpreadable",
638            PredefinedAtom::SymbolHasInstance => "Symbol.hasInstance",
639            PredefinedAtom::SymbolSpecies => "Symbol.species",
640            PredefinedAtom::SymbolUnscopables => "Symbol.unscopables",
641        }
642    }
643}
644
645#[cfg(test)]
646mod test {
647    use crate::{Atom, Context, IntoAtom, Runtime};
648
649    use super::PredefinedAtom;
650    #[test]
651    fn string_correct() {
652        static ALL_PREDEFS: &[PredefinedAtom] = &[
653            PredefinedAtom::Null,
654            PredefinedAtom::False,
655            PredefinedAtom::True,
656            PredefinedAtom::If,
657            PredefinedAtom::Else,
658            PredefinedAtom::Return,
659            PredefinedAtom::Var,
660            PredefinedAtom::This,
661            PredefinedAtom::Delete,
662            PredefinedAtom::Void,
663            PredefinedAtom::Typeof,
664            PredefinedAtom::New,
665            PredefinedAtom::In,
666            PredefinedAtom::Instanceof,
667            PredefinedAtom::Do,
668            PredefinedAtom::While,
669            PredefinedAtom::For,
670            PredefinedAtom::Break,
671            PredefinedAtom::Continue,
672            PredefinedAtom::Switch,
673            PredefinedAtom::Case,
674            PredefinedAtom::Default,
675            PredefinedAtom::Throw,
676            PredefinedAtom::Try,
677            PredefinedAtom::Catch,
678            PredefinedAtom::Finally,
679            PredefinedAtom::FunctionKw,
680            PredefinedAtom::Debugger,
681            PredefinedAtom::With,
682            PredefinedAtom::Class,
683            PredefinedAtom::Const,
684            PredefinedAtom::Enum,
685            PredefinedAtom::Export,
686            PredefinedAtom::Extends,
687            PredefinedAtom::Import,
688            PredefinedAtom::Super,
689            PredefinedAtom::Implements,
690            PredefinedAtom::Interface,
691            PredefinedAtom::Let,
692            PredefinedAtom::Package,
693            PredefinedAtom::Private,
694            PredefinedAtom::Protected,
695            PredefinedAtom::Public,
696            PredefinedAtom::Static,
697            PredefinedAtom::Yield,
698            PredefinedAtom::Await,
699            PredefinedAtom::Empty,
700            PredefinedAtom::Length,
701            PredefinedAtom::Message,
702            PredefinedAtom::Errors,
703            PredefinedAtom::Stack,
704            PredefinedAtom::Name,
705            PredefinedAtom::ToString,
706            PredefinedAtom::ToLocaleString,
707            PredefinedAtom::ValueOf,
708            PredefinedAtom::Eval,
709            PredefinedAtom::Prototype,
710            PredefinedAtom::Constructor,
711            PredefinedAtom::Configurable,
712            PredefinedAtom::Writable,
713            PredefinedAtom::Enumerable,
714            PredefinedAtom::Value,
715            PredefinedAtom::Getter,
716            PredefinedAtom::Setter,
717            PredefinedAtom::Of,
718            PredefinedAtom::UnderscoreProto,
719            PredefinedAtom::Undefined,
720            PredefinedAtom::NumberLower,
721            PredefinedAtom::BooleanLower,
722            PredefinedAtom::StringLower,
723            PredefinedAtom::ObjectLower,
724            PredefinedAtom::SymbolLower,
725            PredefinedAtom::Integer,
726            PredefinedAtom::Unknown,
727            PredefinedAtom::ArgumentsLower,
728            PredefinedAtom::Callee,
729            PredefinedAtom::Caller,
730            PredefinedAtom::LastIndex,
731            PredefinedAtom::Target,
732            PredefinedAtom::Index,
733            PredefinedAtom::Input,
734            PredefinedAtom::DefineProperties,
735            PredefinedAtom::Apply,
736            PredefinedAtom::Join,
737            PredefinedAtom::Concat,
738            PredefinedAtom::Split,
739            PredefinedAtom::Construct,
740            PredefinedAtom::GetPrototypeOf,
741            PredefinedAtom::SetPrototypeOf,
742            PredefinedAtom::IsExtensible,
743            PredefinedAtom::PreventExtensions,
744            PredefinedAtom::Has,
745            PredefinedAtom::DeleteProperty,
746            PredefinedAtom::DefineProperty,
747            PredefinedAtom::GetOwnPropertyDescriptor,
748            PredefinedAtom::OwnKeys,
749            PredefinedAtom::Add,
750            PredefinedAtom::Done,
751            PredefinedAtom::Next,
752            PredefinedAtom::Values,
753            PredefinedAtom::Source,
754            PredefinedAtom::Flags,
755            PredefinedAtom::Global,
756            PredefinedAtom::Unicode,
757            PredefinedAtom::Raw,
758            PredefinedAtom::NewTarget,
759            PredefinedAtom::ThisActiveFunc,
760            PredefinedAtom::HomeObject,
761            PredefinedAtom::ComputedField,
762            PredefinedAtom::StaticComputedField,
763            PredefinedAtom::ClassFieldsInit,
764            PredefinedAtom::Brand,
765            PredefinedAtom::HashConstructor,
766            PredefinedAtom::As,
767            PredefinedAtom::From,
768            PredefinedAtom::Meta,
769            PredefinedAtom::StarDefault,
770            PredefinedAtom::Star,
771            PredefinedAtom::Module,
772            PredefinedAtom::Then,
773            PredefinedAtom::Resolve,
774            PredefinedAtom::Reject,
775            PredefinedAtom::PromiseLower,
776            PredefinedAtom::ProxyLower,
777            PredefinedAtom::Revoke,
778            PredefinedAtom::Async,
779            PredefinedAtom::Exec,
780            PredefinedAtom::Groups,
781            PredefinedAtom::Status,
782            PredefinedAtom::Reason,
783            PredefinedAtom::GlobalThis,
784            PredefinedAtom::Bigint,
785            PredefinedAtom::ToJSON,
786            PredefinedAtom::Object,
787            PredefinedAtom::Array,
788            PredefinedAtom::Error,
789            PredefinedAtom::Number,
790            PredefinedAtom::String,
791            PredefinedAtom::Boolean,
792            PredefinedAtom::Symbol,
793            PredefinedAtom::Arguments,
794            PredefinedAtom::Math,
795            PredefinedAtom::JSON,
796            PredefinedAtom::Date,
797            PredefinedAtom::Function,
798            PredefinedAtom::GeneratorFunction,
799            PredefinedAtom::ForInIterator,
800            PredefinedAtom::RegExp,
801            PredefinedAtom::ArrayBuffer,
802            PredefinedAtom::SharedArrayBuffer,
803            PredefinedAtom::Uint8ClampedArray,
804            PredefinedAtom::Int8Array,
805            PredefinedAtom::Uint8Array,
806            PredefinedAtom::Int16Array,
807            PredefinedAtom::Uint16Array,
808            PredefinedAtom::Int32Array,
809            PredefinedAtom::Uint32Array,
810            PredefinedAtom::BigInt64Array,
811            PredefinedAtom::BigUint64Array,
812            PredefinedAtom::Float32Array,
813            PredefinedAtom::Float64Array,
814            PredefinedAtom::DataView,
815            PredefinedAtom::BigInt,
816            PredefinedAtom::Map,
817            PredefinedAtom::Set,
818            PredefinedAtom::WeakMap,
819            PredefinedAtom::WeakSet,
820            PredefinedAtom::MapIterator,
821            PredefinedAtom::SetIterator,
822            PredefinedAtom::ArrayIterator,
823            PredefinedAtom::StringIterator,
824            PredefinedAtom::RegExpStringIterator,
825            PredefinedAtom::Generator,
826            PredefinedAtom::Proxy,
827            PredefinedAtom::Promise,
828            PredefinedAtom::PromiseResolveFunction,
829            PredefinedAtom::PromiseRejectFunction,
830            PredefinedAtom::AsyncFunction,
831            PredefinedAtom::AsyncFunctionResolve,
832            PredefinedAtom::AsyncFunctionReject,
833            PredefinedAtom::AsyncGeneratorFunction,
834            PredefinedAtom::AsyncGenerator,
835            PredefinedAtom::EvalError,
836            PredefinedAtom::RangeError,
837            PredefinedAtom::ReferenceError,
838            PredefinedAtom::SyntaxError,
839            PredefinedAtom::TypeError,
840            PredefinedAtom::URIError,
841            PredefinedAtom::InternalError,
842            PredefinedAtom::SymbolAsyncIterator,
843            PredefinedAtom::SymbolIterator,
844            PredefinedAtom::SymbolMatch,
845            PredefinedAtom::SymbolMatchAll,
846            PredefinedAtom::SymbolReplace,
847            PredefinedAtom::SymbolSearch,
848            PredefinedAtom::SymbolSplit,
849            PredefinedAtom::SymbolToStringTag,
850            PredefinedAtom::SymbolIsConcatSpreadable,
851            PredefinedAtom::SymbolHasInstance,
852            PredefinedAtom::SymbolSpecies,
853            PredefinedAtom::SymbolUnscopables,
854        ];
855
856        let rt = Runtime::new().unwrap();
857        let context = Context::full(&rt).unwrap();
858        context.with(|ctx| {
859            for predef in ALL_PREDEFS {
860                let atom = predef.into_atom(&ctx).unwrap();
861                assert_eq!(atom.to_string().unwrap().as_str(), predef.to_str());
862
863                // the string of a symbol doesn't convert to the same atom.
864                if predef.is_symbol() {
865                    continue;
866                }
867
868                let from_str = Atom::from_str(ctx.clone(), predef.to_str()).unwrap();
869                assert_eq!(
870                    atom,
871                    from_str,
872                    "Atom `{}` from str and from redefined not equal",
873                    predef.to_str()
874                )
875            }
876        })
877    }
878}