OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_CONTEXTS_H_ | 5 #ifndef V8_CONTEXTS_H_ |
6 #define V8_CONTEXTS_H_ | 6 #define V8_CONTEXTS_H_ |
7 | 7 |
8 #include "src/heap/heap.h" | 8 #include "src/heap/heap.h" |
9 #include "src/objects.h" | 9 #include "src/objects.h" |
10 | 10 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 V(REFLECT_APPLY_INDEX, JSFunction, reflect_apply) \ | 83 V(REFLECT_APPLY_INDEX, JSFunction, reflect_apply) \ |
84 V(REFLECT_CONSTRUCT_INDEX, JSFunction, reflect_construct) \ | 84 V(REFLECT_CONSTRUCT_INDEX, JSFunction, reflect_construct) \ |
85 V(REFLECT_DEFINE_PROPERTY_INDEX, JSFunction, reflect_define_property) \ | 85 V(REFLECT_DEFINE_PROPERTY_INDEX, JSFunction, reflect_define_property) \ |
86 V(REFLECT_DELETE_PROPERTY_INDEX, JSFunction, reflect_delete_property) \ | 86 V(REFLECT_DELETE_PROPERTY_INDEX, JSFunction, reflect_delete_property) \ |
87 V(SPREAD_ARGUMENTS_INDEX, JSFunction, spread_arguments) \ | 87 V(SPREAD_ARGUMENTS_INDEX, JSFunction, spread_arguments) \ |
88 V(SPREAD_ITERABLE_INDEX, JSFunction, spread_iterable) \ | 88 V(SPREAD_ITERABLE_INDEX, JSFunction, spread_iterable) \ |
89 V(ORDINARY_HAS_INSTANCE_INDEX, JSFunction, ordinary_has_instance) \ | 89 V(ORDINARY_HAS_INSTANCE_INDEX, JSFunction, ordinary_has_instance) \ |
90 V(MATH_FLOOR, JSFunction, math_floor) \ | 90 V(MATH_FLOOR, JSFunction, math_floor) \ |
91 V(MATH_SQRT, JSFunction, math_sqrt) | 91 V(MATH_SQRT, JSFunction, math_sqrt) |
92 | 92 |
93 #define NATIVE_CONTEXT_IMPORTED_FIELDS(V) \ | 93 #define NATIVE_CONTEXT_IMPORTED_FIELDS(V) \ |
94 V(ARRAY_CONCAT_INDEX, JSFunction, array_concat) \ | 94 V(ARRAY_CONCAT_INDEX, JSFunction, array_concat) \ |
95 V(ARRAY_POP_INDEX, JSFunction, array_pop) \ | 95 V(ARRAY_POP_INDEX, JSFunction, array_pop) \ |
96 V(ARRAY_PUSH_INDEX, JSFunction, array_push) \ | 96 V(ARRAY_PUSH_INDEX, JSFunction, array_push) \ |
97 V(ARRAY_SHIFT_INDEX, JSFunction, array_shift) \ | 97 V(ARRAY_SHIFT_INDEX, JSFunction, array_shift) \ |
98 V(ARRAY_SPLICE_INDEX, JSFunction, array_splice) \ | 98 V(ARRAY_SPLICE_INDEX, JSFunction, array_splice) \ |
99 V(ARRAY_SLICE_INDEX, JSFunction, array_slice) \ | 99 V(ARRAY_SLICE_INDEX, JSFunction, array_slice) \ |
100 V(ARRAY_UNSHIFT_INDEX, JSFunction, array_unshift) \ | 100 V(ARRAY_UNSHIFT_INDEX, JSFunction, array_unshift) \ |
101 V(ARRAY_VALUES_ITERATOR_INDEX, JSFunction, array_values_iterator) \ | 101 V(ARRAY_VALUES_ITERATOR_INDEX, JSFunction, array_values_iterator) \ |
102 V(DERIVED_GET_TRAP_INDEX, JSFunction, derived_get_trap) \ | 102 V(ASYNC_FUNCTION_AWAIT_INDEX, JSFunction, async_function_await) \ |
103 V(ERROR_FUNCTION_INDEX, JSFunction, error_function) \ | 103 V(DERIVED_GET_TRAP_INDEX, JSFunction, derived_get_trap) \ |
104 V(EVAL_ERROR_FUNCTION_INDEX, JSFunction, eval_error_function) \ | 104 V(ERROR_FUNCTION_INDEX, JSFunction, error_function) \ |
105 V(GET_STACK_TRACE_LINE_INDEX, JSFunction, get_stack_trace_line_fun) \ | 105 V(EVAL_ERROR_FUNCTION_INDEX, JSFunction, eval_error_function) \ |
106 V(GLOBAL_EVAL_FUN_INDEX, JSFunction, global_eval_fun) \ | 106 V(GET_STACK_TRACE_LINE_INDEX, JSFunction, get_stack_trace_line_fun) \ |
107 V(JSON_SERIALIZE_ADAPTER_INDEX, JSFunction, json_serialize_adapter) \ | 107 V(GLOBAL_EVAL_FUN_INDEX, JSFunction, global_eval_fun) \ |
108 V(MAKE_ERROR_FUNCTION_INDEX, JSFunction, make_error_function) \ | 108 V(JSON_SERIALIZE_ADAPTER_INDEX, JSFunction, json_serialize_adapter) \ |
109 V(MAP_DELETE_METHOD_INDEX, JSFunction, map_delete) \ | 109 V(MAKE_ERROR_FUNCTION_INDEX, JSFunction, make_error_function) \ |
110 V(MAP_GET_METHOD_INDEX, JSFunction, map_get) \ | 110 V(MAP_DELETE_METHOD_INDEX, JSFunction, map_delete) \ |
111 V(MAP_HAS_METHOD_INDEX, JSFunction, map_has) \ | 111 V(MAP_GET_METHOD_INDEX, JSFunction, map_get) \ |
112 V(MAP_SET_METHOD_INDEX, JSFunction, map_set) \ | 112 V(MAP_HAS_METHOD_INDEX, JSFunction, map_has) \ |
113 V(MATH_POW_METHOD_INDEX, JSFunction, math_pow) \ | 113 V(MAP_SET_METHOD_INDEX, JSFunction, map_set) \ |
114 V(MESSAGE_GET_COLUMN_NUMBER_INDEX, JSFunction, message_get_column_number) \ | 114 V(MATH_POW_METHOD_INDEX, JSFunction, math_pow) \ |
115 V(MESSAGE_GET_LINE_NUMBER_INDEX, JSFunction, message_get_line_number) \ | 115 V(MESSAGE_GET_COLUMN_NUMBER_INDEX, JSFunction, message_get_column_number) \ |
116 V(MESSAGE_GET_SOURCE_LINE_INDEX, JSFunction, message_get_source_line) \ | 116 V(MESSAGE_GET_LINE_NUMBER_INDEX, JSFunction, message_get_line_number) \ |
117 V(NO_SIDE_EFFECTS_TO_STRING_FUN_INDEX, JSFunction, \ | 117 V(MESSAGE_GET_SOURCE_LINE_INDEX, JSFunction, message_get_source_line) \ |
118 no_side_effects_to_string_fun) \ | 118 V(NO_SIDE_EFFECTS_TO_STRING_FUN_INDEX, JSFunction, \ |
119 V(OBJECT_VALUE_OF, JSFunction, object_value_of) \ | 119 no_side_effects_to_string_fun) \ |
120 V(OBJECT_TO_STRING, JSFunction, object_to_string) \ | 120 V(OBJECT_VALUE_OF, JSFunction, object_value_of) \ |
121 V(PROMISE_CATCH_INDEX, JSFunction, promise_catch) \ | 121 V(OBJECT_TO_STRING, JSFunction, object_to_string) \ |
122 V(PROMISE_CHAIN_INDEX, JSFunction, promise_chain) \ | 122 V(PROMISE_CATCH_INDEX, JSFunction, promise_catch) \ |
123 V(PROMISE_CREATE_INDEX, JSFunction, promise_create) \ | 123 V(PROMISE_CHAIN_INDEX, JSFunction, promise_chain) \ |
124 V(PROMISE_FUNCTION_INDEX, JSFunction, promise_function) \ | 124 V(PROMISE_CREATE_INDEX, JSFunction, promise_create) \ |
125 V(PROMISE_HAS_USER_DEFINED_REJECT_HANDLER_INDEX, JSFunction, \ | 125 V(PROMISE_FUNCTION_INDEX, JSFunction, promise_function) \ |
126 promise_has_user_defined_reject_handler) \ | 126 V(PROMISE_HAS_USER_DEFINED_REJECT_HANDLER_INDEX, JSFunction, \ |
127 V(PROMISE_REJECT_INDEX, JSFunction, promise_reject) \ | 127 promise_has_user_defined_reject_handler) \ |
128 V(PROMISE_RESOLVE_INDEX, JSFunction, promise_resolve) \ | 128 V(PROMISE_REJECT_INDEX, JSFunction, promise_reject) \ |
129 V(PROMISE_THEN_INDEX, JSFunction, promise_then) \ | 129 V(PROMISE_RESOLVE_INDEX, JSFunction, promise_resolve) \ |
130 V(RANGE_ERROR_FUNCTION_INDEX, JSFunction, range_error_function) \ | 130 V(PROMISE_CREATE_RESOLVED_INDEX, JSFunction, promise_create_resolved) \ |
131 V(REFERENCE_ERROR_FUNCTION_INDEX, JSFunction, reference_error_function) \ | 131 V(PROMISE_CREATE_REJECTED_INDEX, JSFunction, promise_create_rejected) \ |
132 V(SET_ADD_METHOD_INDEX, JSFunction, set_add) \ | 132 V(PROMISE_THEN_INDEX, JSFunction, promise_then) \ |
133 V(SET_DELETE_METHOD_INDEX, JSFunction, set_delete) \ | 133 V(RANGE_ERROR_FUNCTION_INDEX, JSFunction, range_error_function) \ |
134 V(SET_HAS_METHOD_INDEX, JSFunction, set_has) \ | 134 V(REFERENCE_ERROR_FUNCTION_INDEX, JSFunction, reference_error_function) \ |
135 V(STACK_OVERFLOW_BOILERPLATE_INDEX, JSObject, stack_overflow_boilerplate) \ | 135 V(SET_ADD_METHOD_INDEX, JSFunction, set_add) \ |
136 V(SYNTAX_ERROR_FUNCTION_INDEX, JSFunction, syntax_error_function) \ | 136 V(SET_DELETE_METHOD_INDEX, JSFunction, set_delete) \ |
137 V(TYPE_ERROR_FUNCTION_INDEX, JSFunction, type_error_function) \ | 137 V(SET_HAS_METHOD_INDEX, JSFunction, set_has) \ |
| 138 V(STACK_OVERFLOW_BOILERPLATE_INDEX, JSObject, stack_overflow_boilerplate) \ |
| 139 V(SYNTAX_ERROR_FUNCTION_INDEX, JSFunction, syntax_error_function) \ |
| 140 V(TYPE_ERROR_FUNCTION_INDEX, JSFunction, type_error_function) \ |
138 V(URI_ERROR_FUNCTION_INDEX, JSFunction, uri_error_function) | 141 V(URI_ERROR_FUNCTION_INDEX, JSFunction, uri_error_function) |
139 | 142 |
140 #define NATIVE_CONTEXT_FIELDS(V) \ | 143 #define NATIVE_CONTEXT_FIELDS(V) \ |
141 V(GLOBAL_PROXY_INDEX, JSObject, global_proxy_object) \ | 144 V(GLOBAL_PROXY_INDEX, JSObject, global_proxy_object) \ |
142 V(EMBEDDER_DATA_INDEX, FixedArray, embedder_data) \ | 145 V(EMBEDDER_DATA_INDEX, FixedArray, embedder_data) \ |
143 /* Below is alpha-sorted */ \ | 146 /* Below is alpha-sorted */ \ |
144 V(ACCESSOR_PROPERTY_DESCRIPTOR_MAP_INDEX, Map, \ | 147 V(ACCESSOR_PROPERTY_DESCRIPTOR_MAP_INDEX, Map, \ |
145 accessor_property_descriptor_map) \ | 148 accessor_property_descriptor_map) \ |
146 V(ALLOW_CODE_GEN_FROM_STRINGS_INDEX, Object, allow_code_gen_from_strings) \ | 149 V(ALLOW_CODE_GEN_FROM_STRINGS_INDEX, Object, allow_code_gen_from_strings) \ |
147 V(ARRAY_BUFFER_FUN_INDEX, JSFunction, array_buffer_fun) \ | 150 V(ARRAY_BUFFER_FUN_INDEX, JSFunction, array_buffer_fun) \ |
148 V(ARRAY_BUFFER_MAP_INDEX, Map, array_buffer_map) \ | 151 V(ARRAY_BUFFER_MAP_INDEX, Map, array_buffer_map) \ |
149 V(ARRAY_FUNCTION_INDEX, JSFunction, array_function) \ | 152 V(ARRAY_FUNCTION_INDEX, JSFunction, array_function) \ |
| 153 V(ASYNC_FUNCTION_FUNCTION_INDEX, JSFunction, async_function_constructor) \ |
150 V(BOOL16X8_FUNCTION_INDEX, JSFunction, bool16x8_function) \ | 154 V(BOOL16X8_FUNCTION_INDEX, JSFunction, bool16x8_function) \ |
151 V(BOOL32X4_FUNCTION_INDEX, JSFunction, bool32x4_function) \ | 155 V(BOOL32X4_FUNCTION_INDEX, JSFunction, bool32x4_function) \ |
152 V(BOOL8X16_FUNCTION_INDEX, JSFunction, bool8x16_function) \ | 156 V(BOOL8X16_FUNCTION_INDEX, JSFunction, bool8x16_function) \ |
153 V(BOOLEAN_FUNCTION_INDEX, JSFunction, boolean_function) \ | 157 V(BOOLEAN_FUNCTION_INDEX, JSFunction, boolean_function) \ |
154 V(BOUND_FUNCTION_WITH_CONSTRUCTOR_MAP_INDEX, Map, \ | 158 V(BOUND_FUNCTION_WITH_CONSTRUCTOR_MAP_INDEX, Map, \ |
155 bound_function_with_constructor_map) \ | 159 bound_function_with_constructor_map) \ |
156 V(BOUND_FUNCTION_WITHOUT_CONSTRUCTOR_MAP_INDEX, Map, \ | 160 V(BOUND_FUNCTION_WITHOUT_CONSTRUCTOR_MAP_INDEX, Map, \ |
157 bound_function_without_constructor_map) \ | 161 bound_function_without_constructor_map) \ |
158 V(CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, JSFunction, \ | 162 V(CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, JSFunction, \ |
159 call_as_constructor_delegate) \ | 163 call_as_constructor_delegate) \ |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 V(SELF_WEAK_CELL_INDEX, WeakCell, self_weak_cell) \ | 231 V(SELF_WEAK_CELL_INDEX, WeakCell, self_weak_cell) \ |
228 V(SET_ITERATOR_MAP_INDEX, Map, set_iterator_map) \ | 232 V(SET_ITERATOR_MAP_INDEX, Map, set_iterator_map) \ |
229 V(SHARED_ARRAY_BUFFER_FUN_INDEX, JSFunction, shared_array_buffer_fun) \ | 233 V(SHARED_ARRAY_BUFFER_FUN_INDEX, JSFunction, shared_array_buffer_fun) \ |
230 V(SLOPPY_ARGUMENTS_MAP_INDEX, Map, sloppy_arguments_map) \ | 234 V(SLOPPY_ARGUMENTS_MAP_INDEX, Map, sloppy_arguments_map) \ |
231 V(SLOPPY_FUNCTION_MAP_INDEX, Map, sloppy_function_map) \ | 235 V(SLOPPY_FUNCTION_MAP_INDEX, Map, sloppy_function_map) \ |
232 V(SLOPPY_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ | 236 V(SLOPPY_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ |
233 sloppy_function_without_prototype_map) \ | 237 sloppy_function_without_prototype_map) \ |
234 V(SLOPPY_FUNCTION_WITH_READONLY_PROTOTYPE_MAP_INDEX, Map, \ | 238 V(SLOPPY_FUNCTION_WITH_READONLY_PROTOTYPE_MAP_INDEX, Map, \ |
235 sloppy_function_with_readonly_prototype_map) \ | 239 sloppy_function_with_readonly_prototype_map) \ |
236 V(WASM_FUNCTION_MAP_INDEX, Map, wasm_function_map) \ | 240 V(WASM_FUNCTION_MAP_INDEX, Map, wasm_function_map) \ |
| 241 V(SLOPPY_ASYNC_FUNCTION_MAP_INDEX, Map, sloppy_async_function_map) \ |
237 V(SLOPPY_GENERATOR_FUNCTION_MAP_INDEX, Map, sloppy_generator_function_map) \ | 242 V(SLOPPY_GENERATOR_FUNCTION_MAP_INDEX, Map, sloppy_generator_function_map) \ |
238 V(SLOW_ALIASED_ARGUMENTS_MAP_INDEX, Map, slow_aliased_arguments_map) \ | 243 V(SLOW_ALIASED_ARGUMENTS_MAP_INDEX, Map, slow_aliased_arguments_map) \ |
| 244 V(STRICT_ASYNC_FUNCTION_MAP_INDEX, Map, strict_async_function_map) \ |
239 V(STRICT_ARGUMENTS_MAP_INDEX, Map, strict_arguments_map) \ | 245 V(STRICT_ARGUMENTS_MAP_INDEX, Map, strict_arguments_map) \ |
240 V(STRICT_FUNCTION_MAP_INDEX, Map, strict_function_map) \ | 246 V(STRICT_FUNCTION_MAP_INDEX, Map, strict_function_map) \ |
241 V(STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ | 247 V(STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ |
242 strict_function_without_prototype_map) \ | 248 strict_function_without_prototype_map) \ |
243 V(STRICT_GENERATOR_FUNCTION_MAP_INDEX, Map, strict_generator_function_map) \ | 249 V(STRICT_GENERATOR_FUNCTION_MAP_INDEX, Map, strict_generator_function_map) \ |
244 V(STRING_FUNCTION_INDEX, JSFunction, string_function) \ | 250 V(STRING_FUNCTION_INDEX, JSFunction, string_function) \ |
245 V(STRING_FUNCTION_PROTOTYPE_MAP_INDEX, Map, string_function_prototype_map) \ | 251 V(STRING_FUNCTION_PROTOTYPE_MAP_INDEX, Map, string_function_prototype_map) \ |
246 V(SYMBOL_FUNCTION_INDEX, JSFunction, symbol_function) \ | 252 V(SYMBOL_FUNCTION_INDEX, JSFunction, symbol_function) \ |
247 V(UINT16_ARRAY_FUN_INDEX, JSFunction, uint16_array_fun) \ | 253 V(UINT16_ARRAY_FUN_INDEX, JSFunction, uint16_array_fun) \ |
248 V(UINT16X8_FUNCTION_INDEX, JSFunction, uint16x8_function) \ | 254 V(UINT16X8_FUNCTION_INDEX, JSFunction, uint16x8_function) \ |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 static int SlotOffset(int index) { | 517 static int SlotOffset(int index) { |
512 return kHeaderSize + index * kPointerSize - kHeapObjectTag; | 518 return kHeaderSize + index * kPointerSize - kHeapObjectTag; |
513 } | 519 } |
514 | 520 |
515 static int FunctionMapIndex(LanguageMode language_mode, FunctionKind kind) { | 521 static int FunctionMapIndex(LanguageMode language_mode, FunctionKind kind) { |
516 if (IsGeneratorFunction(kind)) { | 522 if (IsGeneratorFunction(kind)) { |
517 return is_strict(language_mode) ? STRICT_GENERATOR_FUNCTION_MAP_INDEX | 523 return is_strict(language_mode) ? STRICT_GENERATOR_FUNCTION_MAP_INDEX |
518 : SLOPPY_GENERATOR_FUNCTION_MAP_INDEX; | 524 : SLOPPY_GENERATOR_FUNCTION_MAP_INDEX; |
519 } | 525 } |
520 | 526 |
| 527 if (IsAsyncFunction(kind)) { |
| 528 return is_strict(language_mode) ? STRICT_ASYNC_FUNCTION_MAP_INDEX |
| 529 : SLOPPY_ASYNC_FUNCTION_MAP_INDEX; |
| 530 } |
| 531 |
521 if (IsClassConstructor(kind)) { | 532 if (IsClassConstructor(kind)) { |
522 // Use strict function map (no own "caller" / "arguments") | 533 // Use strict function map (no own "caller" / "arguments") |
523 return STRICT_FUNCTION_MAP_INDEX; | 534 return STRICT_FUNCTION_MAP_INDEX; |
524 } | 535 } |
525 | 536 |
526 if (IsArrowFunction(kind) || IsConciseMethod(kind) || | 537 if (IsArrowFunction(kind) || IsConciseMethod(kind) || |
527 IsAccessorFunction(kind)) { | 538 IsAccessorFunction(kind)) { |
528 return STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX; | 539 return STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX; |
529 } | 540 } |
530 | 541 |
(...skipping 26 matching lines...) Expand all Loading... |
557 #endif | 568 #endif |
558 | 569 |
559 STATIC_ASSERT(kHeaderSize == Internals::kContextHeaderSize); | 570 STATIC_ASSERT(kHeaderSize == Internals::kContextHeaderSize); |
560 STATIC_ASSERT(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex); | 571 STATIC_ASSERT(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex); |
561 }; | 572 }; |
562 | 573 |
563 } // namespace internal | 574 } // namespace internal |
564 } // namespace v8 | 575 } // namespace v8 |
565 | 576 |
566 #endif // V8_CONTEXTS_H_ | 577 #endif // V8_CONTEXTS_H_ |
OLD | NEW |