• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright JS Foundation and other contributors, http://js.foundation
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef LIT_MAGIC_STRINGS_H
17 #define LIT_MAGIC_STRINGS_H
18 
19 #include "lit-globals.h"
20 
21 /**
22  * Identifiers of ECMA and implementation-defined magic string constants
23  */
24 typedef enum
25 {
26 /** @cond doxygen_suppress */
27 #define LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE(size, id)
28 #define LIT_MAGIC_STRING_DEF(id, ascii_zt_string) \
29      id,
30 #include "lit-magic-strings.inc.h"
31 #undef LIT_MAGIC_STRING_DEF
32 #undef LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE
33 /** @endcond */
34   LIT_NON_INTERNAL_MAGIC_STRING__COUNT, /**< number of non-internal magic strings */
35   LIT_INTERNAL_MAGIC_STRING_PROMISE = LIT_NON_INTERNAL_MAGIC_STRING__COUNT, /**<  [[Promise]] of promise
36                                                                              *    reject or resolve functions */
37   LIT_INTERNAL_MAGIC_STRING_ALREADY_RESOLVED, /**< [[AlreadyResolved]] of promise reject or resolve functions */
38   LIT_INTERNAL_MAGIC_STRING_RESOLVE_FUNCTION, /**< the resolve funtion of the promise object */
39   LIT_INTERNAL_MAGIC_STRING_REJECT_FUNCTION, /**< the reject function of the promise object */
40   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE, /**< [[Promise]] property */
41   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE, /**< [[Resolve]] property */
42   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT, /**< [[Reject]] property */
43   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY, /**< [[Capability]] property */
44   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_ALREADY_CALLED, /**< [[AlreadyCalled]] property */
45   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_INDEX, /**< [[Index]] property */
46   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_VALUE, /**< [[Values]] property */
47   LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REMAINING_ELEMENT, /**< [[RemainingElement]] property */
48   LIT_INTERNAL_MAGIC_STRING_ITERATOR_NEXT_INDEX, /**< [[%Iterator%NextIndex]] property */
49   LIT_INTERNAL_MAGIC_STRING_MAP_KEY, /**< Property key used when an object is a key in a map object */
50   LIT_INTERNAL_MAGIC_API_INTERNAL, /**< Property key used to add non-visible JS properties from the public API  */
51   LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES, /**< %ArrayProto_values% intrinsic routine */
52   LIT_INTERNAL_MAGIC_THIS_BINDING_VALUE, /**< FunctionEnvironmentRecord [[ThisBindingValue]] internal slot */
53   /* List of well known symbols */
54   LIT_GLOBAL_SYMBOL_HAS_INSTANCE, /**< @@hasInstance well known symbol */
55   LIT_GLOBAL_SYMBOL_IS_CONCAT_SPREADABLE, /**< @@isConcatSpreadable well known symbol */
56   LIT_GLOBAL_SYMBOL_ITERATOR, /**< @@iterator well known symbol */
57   LIT_GLOBAL_SYMBOL_MATCH, /**< @@match well known symbol */
58   LIT_GLOBAL_SYMBOL_REPLACE, /**< @@replace well known symbol */
59   LIT_GLOBAL_SYMBOL_SEARCH, /**< @@search well known symbol */
60   LIT_GLOBAL_SYMBOL_SPECIES, /**< @@species well known symbol */
61   LIT_GLOBAL_SYMBOL_SPLIT, /**< @@split well known symbol */
62   LIT_GLOBAL_SYMBOL_TO_PRIMITIVE, /**< @@toPrimitive well known symbol */
63   LIT_GLOBAL_SYMBOL_TO_STRING_TAG, /**< @@toStringTag well known symbol */
64   LIT_GLOBAL_SYMBOL_UNSCOPABLES, /**< @@unscopables well known symbol */
65   LIT_GC_MARK_REQUIRED_MAGIC_STRING__COUNT,  /**< number of internal magic strings which will be used as
66                                               *   property names, and their values need to be marked during gc. */
67   LIT_INTERNAL_MAGIC_STRING_DELETED = LIT_GC_MARK_REQUIRED_MAGIC_STRING__COUNT, /**< special value for
68                                                                                  *   deleted properties */
69 
70   LIT_INTERNAL_MAGIC_STRING_NATIVE_POINTER, /**< native pointer info associated with an object */
71   LIT_FIRST_INTERNAL_MAGIC_STRING = LIT_INTERNAL_MAGIC_STRING_NATIVE_POINTER,  /**< first index of internal
72                                                                                 *   magic strings */
73   LIT_INTERNAL_MAGIC_STRING_WEAK_REFS, /**< Weak references to the current object */
74   LIT_INTERNAL_MAGIC_STRING_INTERNAL_OBJECT, /**< Internal object ID for internal properties */
75   LIT_MAGIC_STRING__COUNT /**< number of magic strings */
76 } lit_magic_string_id_t;
77 
78 /**
79  * Identifiers of implementation-defined external magic string constants
80  */
81 typedef uint32_t lit_magic_string_ex_id_t;
82 
83 uint32_t lit_get_magic_string_ex_count (void);
84 
85 const lit_utf8_byte_t *lit_get_magic_string_utf8 (uint32_t id);
86 lit_utf8_size_t lit_get_magic_string_size (uint32_t id);
87 
88 const lit_utf8_byte_t *lit_get_magic_string_ex_utf8 (uint32_t id);
89 lit_utf8_size_t lit_get_magic_string_ex_size (uint32_t id);
90 
91 void lit_magic_strings_ex_set (const lit_utf8_byte_t * const *ex_str_items,
92                                uint32_t count,
93                                const lit_utf8_size_t *ex_str_sizes);
94 
95 lit_magic_string_id_t lit_is_utf8_string_magic (const lit_utf8_byte_t *string_p, lit_utf8_size_t string_size);
96 lit_magic_string_id_t lit_is_utf8_string_pair_magic (const lit_utf8_byte_t *string1_p, lit_utf8_size_t string1_size,
97                                                      const lit_utf8_byte_t *string2_p, lit_utf8_size_t string2_size);
98 
99 lit_magic_string_ex_id_t lit_is_ex_utf8_string_magic (const lit_utf8_byte_t *string_p, lit_utf8_size_t string_size);
100 lit_magic_string_ex_id_t lit_is_ex_utf8_string_pair_magic (const lit_utf8_byte_t *string1_p,
101                                                            lit_utf8_size_t string1_size,
102                                                            const lit_utf8_byte_t *string2_p,
103                                                            lit_utf8_size_t string2_size);
104 
105 lit_utf8_byte_t *lit_copy_magic_string_to_buffer (lit_magic_string_id_t id, lit_utf8_byte_t *buffer_p,
106                                                   lit_utf8_size_t buffer_size);
107 
108 #endif /* !LIT_MAGIC_STRINGS_H */
109