LCOV - code coverage report
Current view: top level - src - contexts.h (source / functions) Hit Total Coverage
Test: app.info Lines: 3 3 100.0 %
Date: 2017-10-20 Functions: 0 0 -

          Line data    Source code
       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
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_CONTEXTS_H_
       6             : #define V8_CONTEXTS_H_
       7             : 
       8             : #include "src/objects.h"
       9             : 
      10             : namespace v8 {
      11             : namespace internal {
      12             : 
      13             : class RegExpMatchInfo;
      14             : 
      15             : enum ContextLookupFlags {
      16             :   FOLLOW_CONTEXT_CHAIN = 1 << 0,
      17             :   FOLLOW_PROTOTYPE_CHAIN = 1 << 1,
      18             :   STOP_AT_DECLARATION_SCOPE = 1 << 2,
      19             :   SKIP_WITH_CONTEXT = 1 << 3,
      20             : 
      21             :   DONT_FOLLOW_CHAINS = 0,
      22             :   FOLLOW_CHAINS = FOLLOW_CONTEXT_CHAIN | FOLLOW_PROTOTYPE_CHAIN,
      23             : };
      24             : 
      25             : 
      26             : // Heap-allocated activation contexts.
      27             : //
      28             : // Contexts are implemented as FixedArray objects; the Context
      29             : // class is a convenience interface casted on a FixedArray object.
      30             : //
      31             : // Note: Context must have no virtual functions and Context objects
      32             : // must always be allocated via Heap::AllocateContext() or
      33             : // Factory::NewContext.
      34             : 
      35             : #define NATIVE_CONTEXT_INTRINSIC_FUNCTIONS(V)                               \
      36             :   V(ASYNC_FUNCTION_AWAIT_CAUGHT_INDEX, JSFunction,                          \
      37             :     async_function_await_caught)                                            \
      38             :   V(ASYNC_FUNCTION_AWAIT_UNCAUGHT_INDEX, JSFunction,                        \
      39             :     async_function_await_uncaught)                                          \
      40             :   V(ASYNC_FUNCTION_PROMISE_CREATE_INDEX, JSFunction,                        \
      41             :     async_function_promise_create)                                          \
      42             :   V(ASYNC_FUNCTION_PROMISE_RELEASE_INDEX, JSFunction,                       \
      43             :     async_function_promise_release)                                         \
      44             :   V(IS_ARRAYLIKE, JSFunction, is_arraylike)                                 \
      45             :   V(GENERATOR_NEXT_INTERNAL, JSFunction, generator_next_internal)           \
      46             :   V(MAKE_ERROR_INDEX, JSFunction, make_error)                               \
      47             :   V(MAKE_RANGE_ERROR_INDEX, JSFunction, make_range_error)                   \
      48             :   V(MAKE_SYNTAX_ERROR_INDEX, JSFunction, make_syntax_error)                 \
      49             :   V(MAKE_TYPE_ERROR_INDEX, JSFunction, make_type_error)                     \
      50             :   V(MAKE_URI_ERROR_INDEX, JSFunction, make_uri_error)                       \
      51             :   V(OBJECT_CREATE, JSFunction, object_create)                               \
      52             :   V(OBJECT_DEFINE_PROPERTIES, JSFunction, object_define_properties)         \
      53             :   V(OBJECT_DEFINE_PROPERTY, JSFunction, object_define_property)             \
      54             :   V(OBJECT_GET_PROTOTYPE_OF, JSFunction, object_get_prototype_of)           \
      55             :   V(OBJECT_IS_EXTENSIBLE, JSFunction, object_is_extensible)                 \
      56             :   V(OBJECT_IS_FROZEN, JSFunction, object_is_frozen)                         \
      57             :   V(OBJECT_IS_SEALED, JSFunction, object_is_sealed)                         \
      58             :   V(OBJECT_KEYS, JSFunction, object_keys)                                   \
      59             :   V(REGEXP_INTERNAL_MATCH, JSFunction, regexp_internal_match)               \
      60             :   V(REFLECT_APPLY_INDEX, JSFunction, reflect_apply)                         \
      61             :   V(REFLECT_CONSTRUCT_INDEX, JSFunction, reflect_construct)                 \
      62             :   V(REFLECT_DEFINE_PROPERTY_INDEX, JSFunction, reflect_define_property)     \
      63             :   V(REFLECT_DELETE_PROPERTY_INDEX, JSFunction, reflect_delete_property)     \
      64             :   V(SPREAD_ARGUMENTS_INDEX, JSFunction, spread_arguments)                   \
      65             :   V(SPREAD_ITERABLE_INDEX, JSFunction, spread_iterable)                     \
      66             :   V(TYPED_ARRAY_CONSTRUCT_BY_ARRAY_BUFFER_INDEX, JSFunction,                \
      67             :     typed_array_construct_by_array_buffer)                                  \
      68             :   V(TYPED_ARRAY_CONSTRUCT_BY_ARRAY_LIKE_INDEX, JSFunction,                  \
      69             :     typed_array_construct_by_array_like)                                    \
      70             :   V(TYPED_ARRAY_CONSTRUCT_BY_LENGTH_INDEX, JSFunction,                      \
      71             :     typed_array_construct_by_length)                                        \
      72             :   V(MATH_FLOOR_INDEX, JSFunction, math_floor)                               \
      73             :   V(MATH_POW_INDEX, JSFunction, math_pow)                                   \
      74             :   V(NEW_PROMISE_CAPABILITY_INDEX, JSFunction, new_promise_capability)       \
      75             :   V(PROMISE_INTERNAL_CONSTRUCTOR_INDEX, JSFunction,                         \
      76             :     promise_internal_constructor)                                           \
      77             :   V(PROMISE_INTERNAL_REJECT_INDEX, JSFunction, promise_internal_reject)     \
      78             :   V(IS_PROMISE_INDEX, JSFunction, is_promise)                               \
      79             :   V(PROMISE_RESOLVE_INDEX, JSFunction, promise_resolve)                     \
      80             :   V(PROMISE_THEN_INDEX, JSFunction, promise_then)                           \
      81             :   V(PROMISE_HANDLE_INDEX, JSFunction, promise_handle)                       \
      82             :   V(PROMISE_HANDLE_REJECT_INDEX, JSFunction, promise_handle_reject)         \
      83             :   V(ASYNC_GENERATOR_AWAIT_CAUGHT, JSFunction, async_generator_await_caught) \
      84             :   V(ASYNC_GENERATOR_AWAIT_UNCAUGHT, JSFunction, async_generator_await_uncaught)
      85             : 
      86             : #define NATIVE_CONTEXT_IMPORTED_FIELDS(V)                                 \
      87             :   V(ARRAY_CONCAT_INDEX, JSFunction, array_concat)                         \
      88             :   V(ARRAY_POP_INDEX, JSFunction, array_pop)                               \
      89             :   V(ARRAY_PUSH_INDEX, JSFunction, array_push)                             \
      90             :   V(ARRAY_SHIFT_INDEX, JSFunction, array_shift)                           \
      91             :   V(ARRAY_SPLICE_INDEX, JSFunction, array_splice)                         \
      92             :   V(ARRAY_SLICE_INDEX, JSFunction, array_slice)                           \
      93             :   V(ARRAY_UNSHIFT_INDEX, JSFunction, array_unshift)                       \
      94             :   V(ARRAY_ENTRIES_ITERATOR_INDEX, JSFunction, array_entries_iterator)     \
      95             :   V(ARRAY_FOR_EACH_ITERATOR_INDEX, JSFunction, array_for_each_iterator)   \
      96             :   V(ARRAY_KEYS_ITERATOR_INDEX, JSFunction, array_keys_iterator)           \
      97             :   V(ARRAY_VALUES_ITERATOR_INDEX, JSFunction, array_values_iterator)       \
      98             :   V(DERIVED_GET_TRAP_INDEX, JSFunction, derived_get_trap)                 \
      99             :   V(ERROR_FUNCTION_INDEX, JSFunction, error_function)                     \
     100             :   V(ERROR_TO_STRING, JSFunction, error_to_string)                         \
     101             :   V(EVAL_ERROR_FUNCTION_INDEX, JSFunction, eval_error_function)           \
     102             :   V(GLOBAL_EVAL_FUN_INDEX, JSFunction, global_eval_fun)                   \
     103             :   V(GLOBAL_PROXY_FUNCTION_INDEX, JSFunction, global_proxy_function)       \
     104             :   V(MAP_DELETE_INDEX, JSFunction, map_delete)                             \
     105             :   V(MAP_GET_INDEX, JSFunction, map_get)                                   \
     106             :   V(MAP_HAS_INDEX, JSFunction, map_has)                                   \
     107             :   V(MAP_SET_INDEX, JSFunction, map_set)                                   \
     108             :   V(FUNCTION_HAS_INSTANCE_INDEX, JSFunction, function_has_instance)       \
     109             :   V(OBJECT_VALUE_OF, JSFunction, object_value_of)                         \
     110             :   V(OBJECT_TO_STRING, JSFunction, object_to_string)                       \
     111             :   V(PROMISE_CATCH_INDEX, JSFunction, promise_catch)                       \
     112             :   V(PROMISE_FUNCTION_INDEX, JSFunction, promise_function)                 \
     113             :   V(RANGE_ERROR_FUNCTION_INDEX, JSFunction, range_error_function)         \
     114             :   V(REFERENCE_ERROR_FUNCTION_INDEX, JSFunction, reference_error_function) \
     115             :   V(SET_ADD_INDEX, JSFunction, set_add)                                   \
     116             :   V(SET_DELETE_INDEX, JSFunction, set_delete)                             \
     117             :   V(SET_HAS_INDEX, JSFunction, set_has)                                   \
     118             :   V(SYNTAX_ERROR_FUNCTION_INDEX, JSFunction, syntax_error_function)       \
     119             :   V(TYPE_ERROR_FUNCTION_INDEX, JSFunction, type_error_function)           \
     120             :   V(URI_ERROR_FUNCTION_INDEX, JSFunction, uri_error_function)             \
     121             :   V(WASM_COMPILE_ERROR_FUNCTION_INDEX, JSFunction,                        \
     122             :     wasm_compile_error_function)                                          \
     123             :   V(WASM_LINK_ERROR_FUNCTION_INDEX, JSFunction, wasm_link_error_function) \
     124             :   V(WASM_RUNTIME_ERROR_FUNCTION_INDEX, JSFunction, wasm_runtime_error_function)
     125             : 
     126             : #define NATIVE_CONTEXT_JS_ARRAY_ITERATOR_MAPS(V)                               \
     127             :   V(TYPED_ARRAY_KEY_ITERATOR_MAP_INDEX, Map, typed_array_key_iterator_map)     \
     128             :   V(FAST_ARRAY_KEY_ITERATOR_MAP_INDEX, Map, fast_array_key_iterator_map)       \
     129             :   V(GENERIC_ARRAY_KEY_ITERATOR_MAP_INDEX, Map, array_key_iterator_map)         \
     130             :                                                                                \
     131             :   V(UINT8_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                             \
     132             :     uint8_array_key_value_iterator_map)                                        \
     133             :   V(INT8_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                              \
     134             :     int8_array_key_value_iterator_map)                                         \
     135             :   V(UINT16_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                            \
     136             :     uint16_array_key_value_iterator_map)                                       \
     137             :   V(INT16_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                             \
     138             :     int16_array_key_value_iterator_map)                                        \
     139             :   V(UINT32_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                            \
     140             :     uint32_array_key_value_iterator_map)                                       \
     141             :   V(INT32_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                             \
     142             :     int32_array_key_value_iterator_map)                                        \
     143             :   V(FLOAT32_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                           \
     144             :     float32_array_key_value_iterator_map)                                      \
     145             :   V(FLOAT64_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                           \
     146             :     float64_array_key_value_iterator_map)                                      \
     147             :   V(UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                     \
     148             :     uint8_clamped_array_key_value_iterator_map)                                \
     149             :                                                                                \
     150             :   V(FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                          \
     151             :     fast_smi_array_key_value_iterator_map)                                     \
     152             :   V(FAST_HOLEY_SMI_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                    \
     153             :     fast_holey_smi_array_key_value_iterator_map)                               \
     154             :   V(FAST_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                              \
     155             :     fast_array_key_value_iterator_map)                                         \
     156             :   V(FAST_HOLEY_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                        \
     157             :     fast_holey_array_key_value_iterator_map)                                   \
     158             :   V(FAST_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                       \
     159             :     fast_double_array_key_value_iterator_map)                                  \
     160             :   V(FAST_HOLEY_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                 \
     161             :     fast_holey_double_array_key_value_iterator_map)                            \
     162             :   V(GENERIC_ARRAY_KEY_VALUE_ITERATOR_MAP_INDEX, Map,                           \
     163             :     array_key_value_iterator_map)                                              \
     164             :                                                                                \
     165             :   V(UINT8_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map, uint8_array_value_iterator_map) \
     166             :   V(INT8_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map, int8_array_value_iterator_map)   \
     167             :   V(UINT16_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                                \
     168             :     uint16_array_value_iterator_map)                                           \
     169             :   V(INT16_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map, int16_array_value_iterator_map) \
     170             :   V(UINT32_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                                \
     171             :     uint32_array_value_iterator_map)                                           \
     172             :   V(INT32_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map, int32_array_value_iterator_map) \
     173             :   V(FLOAT32_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                               \
     174             :     float32_array_value_iterator_map)                                          \
     175             :   V(FLOAT64_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                               \
     176             :     float64_array_value_iterator_map)                                          \
     177             :   V(UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                         \
     178             :     uint8_clamped_array_value_iterator_map)                                    \
     179             :                                                                                \
     180             :   V(FAST_SMI_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                              \
     181             :     fast_smi_array_value_iterator_map)                                         \
     182             :   V(FAST_HOLEY_SMI_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                        \
     183             :     fast_holey_smi_array_value_iterator_map)                                   \
     184             :   V(FAST_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map, fast_array_value_iterator_map)   \
     185             :   V(FAST_HOLEY_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                            \
     186             :     fast_holey_array_value_iterator_map)                                       \
     187             :   V(FAST_DOUBLE_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                           \
     188             :     fast_double_array_value_iterator_map)                                      \
     189             :   V(FAST_HOLEY_DOUBLE_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map,                     \
     190             :     fast_holey_double_array_value_iterator_map)                                \
     191             :   V(GENERIC_ARRAY_VALUE_ITERATOR_MAP_INDEX, Map, array_value_iterator_map)
     192             : 
     193             : #define NATIVE_CONTEXT_FIELDS(V)                                               \
     194             :   V(GLOBAL_PROXY_INDEX, JSObject, global_proxy_object)                         \
     195             :   V(EMBEDDER_DATA_INDEX, FixedArray, embedder_data)                            \
     196             :   /* Below is alpha-sorted */                                                  \
     197             :   V(ACCESSOR_PROPERTY_DESCRIPTOR_MAP_INDEX, Map,                               \
     198             :     accessor_property_descriptor_map)                                          \
     199             :   V(ALLOW_CODE_GEN_FROM_STRINGS_INDEX, Object, allow_code_gen_from_strings)    \
     200             :   V(ARRAY_BUFFER_FUN_INDEX, JSFunction, array_buffer_fun)                      \
     201             :   V(ARRAY_BUFFER_MAP_INDEX, Map, array_buffer_map)                             \
     202             :   V(ARRAY_BUFFER_NOINIT_FUN_INDEX, JSFunction, array_buffer_noinit_fun)        \
     203             :   V(ARRAY_FUNCTION_INDEX, JSFunction, array_function)                          \
     204             :   V(ASYNC_FROM_SYNC_ITERATOR_MAP_INDEX, Map, async_from_sync_iterator_map)     \
     205             :   V(ASYNC_FUNCTION_AWAIT_REJECT_SHARED_FUN, SharedFunctionInfo,                \
     206             :     async_function_await_reject_shared_fun)                                    \
     207             :   V(ASYNC_FUNCTION_AWAIT_RESOLVE_SHARED_FUN, SharedFunctionInfo,               \
     208             :     async_function_await_resolve_shared_fun)                                   \
     209             :   V(ASYNC_FUNCTION_FUNCTION_INDEX, JSFunction, async_function_constructor)     \
     210             :   V(ASYNC_GENERATOR_FUNCTION_FUNCTION_INDEX, JSFunction,                       \
     211             :     async_generator_function_function)                                         \
     212             :   V(ASYNC_ITERATOR_VALUE_UNWRAP_SHARED_FUN, SharedFunctionInfo,                \
     213             :     async_iterator_value_unwrap_shared_fun)                                    \
     214             :   V(ASYNC_GENERATOR_AWAIT_REJECT_SHARED_FUN, SharedFunctionInfo,               \
     215             :     async_generator_await_reject_shared_fun)                                   \
     216             :   V(ASYNC_GENERATOR_AWAIT_RESOLVE_SHARED_FUN, SharedFunctionInfo,              \
     217             :     async_generator_await_resolve_shared_fun)                                  \
     218             :   V(ASYNC_GENERATOR_YIELD_RESOLVE_SHARED_FUN, SharedFunctionInfo,              \
     219             :     async_generator_yield_resolve_shared_fun)                                  \
     220             :   V(ASYNC_GENERATOR_RETURN_RESOLVE_SHARED_FUN, SharedFunctionInfo,             \
     221             :     async_generator_return_resolve_shared_fun)                                 \
     222             :   V(ASYNC_GENERATOR_RETURN_CLOSED_RESOLVE_SHARED_FUN, SharedFunctionInfo,      \
     223             :     async_generator_return_closed_resolve_shared_fun)                          \
     224             :   V(ASYNC_GENERATOR_RETURN_CLOSED_REJECT_SHARED_FUN, SharedFunctionInfo,       \
     225             :     async_generator_return_closed_reject_shared_fun)                           \
     226             :   V(ATOMICS_OBJECT, JSObject, atomics_object)                                  \
     227             :   V(BIGINT_FUNCTION_INDEX, JSFunction, bigint_function)                        \
     228             :   V(BOOLEAN_FUNCTION_INDEX, JSFunction, boolean_function)                      \
     229             :   V(BOUND_FUNCTION_WITH_CONSTRUCTOR_MAP_INDEX, Map,                            \
     230             :     bound_function_with_constructor_map)                                       \
     231             :   V(BOUND_FUNCTION_WITHOUT_CONSTRUCTOR_MAP_INDEX, Map,                         \
     232             :     bound_function_without_constructor_map)                                    \
     233             :   V(CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, JSFunction,                            \
     234             :     call_as_constructor_delegate)                                              \
     235             :   V(CALL_AS_FUNCTION_DELEGATE_INDEX, JSFunction, call_as_function_delegate)    \
     236             :   V(CALLSITE_FUNCTION_INDEX, JSFunction, callsite_function)                    \
     237             :   V(CONTEXT_EXTENSION_FUNCTION_INDEX, JSFunction, context_extension_function)  \
     238             :   V(DATA_PROPERTY_DESCRIPTOR_MAP_INDEX, Map, data_property_descriptor_map)     \
     239             :   V(DATA_VIEW_FUN_INDEX, JSFunction, data_view_fun)                            \
     240             :   V(DATE_FUNCTION_INDEX, JSFunction, date_function)                            \
     241             :   V(DEBUG_CONTEXT_ID_INDEX, Object, debug_context_id)                          \
     242             :   V(ERROR_MESSAGE_FOR_CODE_GEN_FROM_STRINGS_INDEX, Object,                     \
     243             :     error_message_for_code_gen_from_strings)                                   \
     244             :   V(ERRORS_THROWN_INDEX, Smi, errors_thrown)                                   \
     245             :   V(EXTRAS_EXPORTS_OBJECT_INDEX, JSObject, extras_binding_object)              \
     246             :   V(EXTRAS_UTILS_OBJECT_INDEX, Object, extras_utils_object)                    \
     247             :   V(FAST_ALIASED_ARGUMENTS_MAP_INDEX, Map, fast_aliased_arguments_map)         \
     248             :   V(FAST_TEMPLATE_INSTANTIATIONS_CACHE_INDEX, FixedArray,                      \
     249             :     fast_template_instantiations_cache)                                        \
     250             :   V(FLOAT32_ARRAY_FUN_INDEX, JSFunction, float32_array_fun)                    \
     251             :   V(FLOAT64_ARRAY_FUN_INDEX, JSFunction, float64_array_fun)                    \
     252             :   V(FUNCTION_FUNCTION_INDEX, JSFunction, function_function)                    \
     253             :   V(GENERATOR_FUNCTION_FUNCTION_INDEX, JSFunction,                             \
     254             :     generator_function_function)                                               \
     255             :   V(GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map, generator_object_prototype_map) \
     256             :   V(ASYNC_GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map,                           \
     257             :     async_generator_object_prototype_map)                                      \
     258             :   V(INITIAL_ARRAY_ITERATOR_PROTOTYPE_INDEX, JSObject,                          \
     259             :     initial_array_iterator_prototype)                                          \
     260             :   V(INITIAL_ARRAY_ITERATOR_PROTOTYPE_MAP_INDEX, Map,                           \
     261             :     initial_array_iterator_prototype_map)                                      \
     262             :   V(INITIAL_ARRAY_PROTOTYPE_INDEX, JSObject, initial_array_prototype)          \
     263             :   V(INITIAL_ERROR_PROTOTYPE_INDEX, JSObject, initial_error_prototype)          \
     264             :   V(INITIAL_GENERATOR_PROTOTYPE_INDEX, JSObject, initial_generator_prototype)  \
     265             :   V(INITIAL_ASYNC_GENERATOR_PROTOTYPE_INDEX, JSObject,                         \
     266             :     initial_async_generator_prototype)                                         \
     267             :   V(INITIAL_ITERATOR_PROTOTYPE_INDEX, JSObject, initial_iterator_prototype)    \
     268             :   V(INITIAL_OBJECT_PROTOTYPE_INDEX, JSObject, initial_object_prototype)        \
     269             :   V(INT16_ARRAY_FUN_INDEX, JSFunction, int16_array_fun)                        \
     270             :   V(INT32_ARRAY_FUN_INDEX, JSFunction, int32_array_fun)                        \
     271             :   V(INT8_ARRAY_FUN_INDEX, JSFunction, int8_array_fun)                          \
     272             :   V(INTERNAL_ARRAY_FUNCTION_INDEX, JSFunction, internal_array_function)        \
     273             :   V(ITERATOR_RESULT_MAP_INDEX, Map, iterator_result_map)                       \
     274             :   V(INTL_DATE_TIME_FORMAT_FUNCTION_INDEX, JSFunction,                          \
     275             :     intl_date_time_format_function)                                            \
     276             :   V(INTL_NUMBER_FORMAT_FUNCTION_INDEX, JSFunction,                             \
     277             :     intl_number_format_function)                                               \
     278             :   V(INTL_COLLATOR_FUNCTION_INDEX, JSFunction, intl_collator_function)          \
     279             :   V(INTL_PLURAL_RULES_FUNCTION_INDEX, JSFunction, intl_plural_rules_function)  \
     280             :   V(INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX, JSFunction,                         \
     281             :     intl_v8_break_iterator_function)                                           \
     282             :   V(JS_ARRAY_PACKED_SMI_ELEMENTS_MAP_INDEX, Map,                               \
     283             :     js_array_fast_smi_elements_map_index)                                      \
     284             :   V(JS_ARRAY_HOLEY_SMI_ELEMENTS_MAP_INDEX, Map,                                \
     285             :     js_array_fast_holey_smi_elements_map_index)                                \
     286             :   V(JS_ARRAY_PACKED_ELEMENTS_MAP_INDEX, Map, js_array_fast_elements_map_index) \
     287             :   V(JS_ARRAY_HOLEY_ELEMENTS_MAP_INDEX, Map,                                    \
     288             :     js_array_fast_holey_elements_map_index)                                    \
     289             :   V(JS_ARRAY_PACKED_DOUBLE_ELEMENTS_MAP_INDEX, Map,                            \
     290             :     js_array_fast_double_elements_map_index)                                   \
     291             :   V(JS_ARRAY_HOLEY_DOUBLE_ELEMENTS_MAP_INDEX, Map,                             \
     292             :     js_array_fast_holey_double_elements_map_index)                             \
     293             :   V(JS_MAP_FUN_INDEX, JSFunction, js_map_fun)                                  \
     294             :   V(JS_MAP_MAP_INDEX, Map, js_map_map)                                         \
     295             :   V(JS_MODULE_NAMESPACE_MAP, Map, js_module_namespace_map)                     \
     296             :   V(JS_SET_FUN_INDEX, JSFunction, js_set_fun)                                  \
     297             :   V(JS_SET_MAP_INDEX, Map, js_set_map)                                         \
     298             :   V(JS_WEAK_MAP_FUN_INDEX, JSFunction, js_weak_map_fun)                        \
     299             :   V(JS_WEAK_SET_FUN_INDEX, JSFunction, js_weak_set_fun)                        \
     300             :   V(MAP_CACHE_INDEX, Object, map_cache)                                        \
     301             :   V(MAP_KEY_ITERATOR_MAP_INDEX, Map, map_key_iterator_map)                     \
     302             :   V(MAP_KEY_VALUE_ITERATOR_MAP_INDEX, Map, map_key_value_iterator_map)         \
     303             :   V(MAP_VALUE_ITERATOR_MAP_INDEX, Map, map_value_iterator_map)                 \
     304             :   V(MATH_RANDOM_INDEX_INDEX, Smi, math_random_index)                           \
     305             :   V(MATH_RANDOM_CACHE_INDEX, Object, math_random_cache)                        \
     306             :   V(MESSAGE_LISTENERS_INDEX, TemplateList, message_listeners)                  \
     307             :   V(NATIVES_UTILS_OBJECT_INDEX, Object, natives_utils_object)                  \
     308             :   V(NORMALIZED_MAP_CACHE_INDEX, Object, normalized_map_cache)                  \
     309             :   V(NUMBER_FUNCTION_INDEX, JSFunction, number_function)                        \
     310             :   V(OBJECT_FUNCTION_INDEX, JSFunction, object_function)                        \
     311             :   V(OBJECT_FUNCTION_PROTOTYPE_MAP_INDEX, Map, object_function_prototype_map)   \
     312             :   V(OPAQUE_REFERENCE_FUNCTION_INDEX, JSFunction, opaque_reference_function)    \
     313             :   V(PROXY_CALLABLE_MAP_INDEX, Map, proxy_callable_map)                         \
     314             :   V(PROXY_CONSTRUCTOR_MAP_INDEX, Map, proxy_constructor_map)                   \
     315             :   V(PROXY_FUNCTION_INDEX, JSFunction, proxy_function)                          \
     316             :   V(PROXY_MAP_INDEX, Map, proxy_map)                                           \
     317             :   V(PROMISE_GET_CAPABILITIES_EXECUTOR_SHARED_FUN, SharedFunctionInfo,          \
     318             :     promise_get_capabilities_executor_shared_fun)                              \
     319             :   V(PROMISE_RESOLVE_SHARED_FUN, SharedFunctionInfo,                            \
     320             :     promise_resolve_shared_fun)                                                \
     321             :   V(PROMISE_REJECT_SHARED_FUN, SharedFunctionInfo, promise_reject_shared_fun)  \
     322             :   V(PROMISE_THEN_FINALLY_SHARED_FUN, SharedFunctionInfo,                       \
     323             :     promise_then_finally_shared_fun)                                           \
     324             :   V(PROMISE_CATCH_FINALLY_SHARED_FUN, SharedFunctionInfo,                      \
     325             :     promise_catch_finally_shared_fun)                                          \
     326             :   V(PROMISE_VALUE_THUNK_FINALLY_SHARED_FUN, SharedFunctionInfo,                \
     327             :     promise_value_thunk_finally_shared_fun)                                    \
     328             :   V(PROMISE_THROWER_FINALLY_SHARED_FUN, SharedFunctionInfo,                    \
     329             :     promise_thrower_finally_shared_fun)                                        \
     330             :   V(PROMISE_ALL_RESOLVE_ELEMENT_SHARED_FUN, SharedFunctionInfo,                \
     331             :     promise_all_resolve_element_shared_fun)                                    \
     332             :   V(PROMISE_PROTOTYPE_MAP_INDEX, Map, promise_prototype_map)                   \
     333             :   V(REGEXP_EXEC_FUNCTION_INDEX, JSFunction, regexp_exec_function)              \
     334             :   V(REGEXP_FUNCTION_INDEX, JSFunction, regexp_function)                        \
     335             :   V(REGEXP_LAST_MATCH_INFO_INDEX, RegExpMatchInfo, regexp_last_match_info)     \
     336             :   V(REGEXP_INTERNAL_MATCH_INFO_INDEX, RegExpMatchInfo,                         \
     337             :     regexp_internal_match_info)                                                \
     338             :   V(REGEXP_PROTOTYPE_MAP_INDEX, Map, regexp_prototype_map)                     \
     339             :   V(REGEXP_RESULT_MAP_INDEX, Map, regexp_result_map)                           \
     340             :   V(SCRIPT_CONTEXT_TABLE_INDEX, ScriptContextTable, script_context_table)      \
     341             :   V(SCRIPT_FUNCTION_INDEX, JSFunction, script_function)                        \
     342             :   V(SECURITY_TOKEN_INDEX, Object, security_token)                              \
     343             :   V(SELF_WEAK_CELL_INDEX, WeakCell, self_weak_cell)                            \
     344             :   V(SET_VALUE_ITERATOR_MAP_INDEX, Map, set_value_iterator_map)                 \
     345             :   V(SET_KEY_VALUE_ITERATOR_MAP_INDEX, Map, set_key_value_iterator_map)         \
     346             :   V(SHARED_ARRAY_BUFFER_FUN_INDEX, JSFunction, shared_array_buffer_fun)        \
     347             :   V(SLOPPY_ARGUMENTS_MAP_INDEX, Map, sloppy_arguments_map)                     \
     348             :   V(SLOW_ALIASED_ARGUMENTS_MAP_INDEX, Map, slow_aliased_arguments_map)         \
     349             :   V(STRICT_ARGUMENTS_MAP_INDEX, Map, strict_arguments_map)                     \
     350             :   V(SLOW_OBJECT_WITH_NULL_PROTOTYPE_MAP, Map,                                  \
     351             :     slow_object_with_null_prototype_map)                                       \
     352             :   V(SLOW_OBJECT_WITH_OBJECT_PROTOTYPE_MAP, Map,                                \
     353             :     slow_object_with_object_prototype_map)                                     \
     354             :   V(SLOW_TEMPLATE_INSTANTIATIONS_CACHE_INDEX, UnseededNumberDictionary,        \
     355             :     slow_template_instantiations_cache)                                        \
     356             :   /* All *_FUNCTION_MAP_INDEX definitions used by Context::FunctionMapIndex */ \
     357             :   /* must remain together. */                                                  \
     358             :   V(SLOPPY_FUNCTION_MAP_INDEX, Map, sloppy_function_map)                       \
     359             :   V(SLOPPY_FUNCTION_WITH_NAME_MAP_INDEX, Map, sloppy_function_with_name_map)   \
     360             :   V(SLOPPY_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map,                          \
     361             :     sloppy_function_without_prototype_map)                                     \
     362             :   V(SLOPPY_FUNCTION_WITH_READONLY_PROTOTYPE_MAP_INDEX, Map,                    \
     363             :     sloppy_function_with_readonly_prototype_map)                               \
     364             :   V(STRICT_FUNCTION_MAP_INDEX, Map, strict_function_map)                       \
     365             :   V(STRICT_FUNCTION_WITH_NAME_MAP_INDEX, Map, strict_function_with_name_map)   \
     366             :   V(STRICT_FUNCTION_WITH_READONLY_PROTOTYPE_MAP_INDEX, Map,                    \
     367             :     strict_function_with_readonly_prototype_map)                               \
     368             :   V(STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map,                          \
     369             :     strict_function_without_prototype_map)                                     \
     370             :   V(METHOD_WITH_NAME_MAP_INDEX, Map, method_with_name_map)                     \
     371             :   V(METHOD_WITH_HOME_OBJECT_MAP_INDEX, Map, method_with_home_object_map)       \
     372             :   V(METHOD_WITH_NAME_AND_HOME_OBJECT_MAP_INDEX, Map,                           \
     373             :     method_with_name_and_home_object_map)                                      \
     374             :   V(ASYNC_FUNCTION_MAP_INDEX, Map, async_function_map)                         \
     375             :   V(ASYNC_FUNCTION_WITH_NAME_MAP_INDEX, Map, async_function_with_name_map)     \
     376             :   V(ASYNC_FUNCTION_WITH_HOME_OBJECT_MAP_INDEX, Map,                            \
     377             :     async_function_with_home_object_map)                                       \
     378             :   V(ASYNC_FUNCTION_WITH_NAME_AND_HOME_OBJECT_MAP_INDEX, Map,                   \
     379             :     async_function_with_name_and_home_object_map)                              \
     380             :   V(GENERATOR_FUNCTION_MAP_INDEX, Map, generator_function_map)                 \
     381             :   V(GENERATOR_FUNCTION_WITH_NAME_MAP_INDEX, Map,                               \
     382             :     generator_function_with_name_map)                                          \
     383             :   V(GENERATOR_FUNCTION_WITH_HOME_OBJECT_MAP_INDEX, Map,                        \
     384             :     generator_function_with_home_object_map)                                   \
     385             :   V(GENERATOR_FUNCTION_WITH_NAME_AND_HOME_OBJECT_MAP_INDEX, Map,               \
     386             :     generator_function_with_name_and_home_object_map)                          \
     387             :   V(ASYNC_GENERATOR_FUNCTION_MAP_INDEX, Map, async_generator_function_map)     \
     388             :   V(ASYNC_GENERATOR_FUNCTION_WITH_NAME_MAP_INDEX, Map,                         \
     389             :     async_generator_function_with_name_map)                                    \
     390             :   V(ASYNC_GENERATOR_FUNCTION_WITH_HOME_OBJECT_MAP_INDEX, Map,                  \
     391             :     async_generator_function_with_home_object_map)                             \
     392             :   V(ASYNC_GENERATOR_FUNCTION_WITH_NAME_AND_HOME_OBJECT_MAP_INDEX, Map,         \
     393             :     async_generator_function_with_name_and_home_object_map)                    \
     394             :   V(CLASS_FUNCTION_MAP_INDEX, Map, class_function_map)                         \
     395             :   V(STRING_FUNCTION_INDEX, JSFunction, string_function)                        \
     396             :   V(STRING_FUNCTION_PROTOTYPE_MAP_INDEX, Map, string_function_prototype_map)   \
     397             :   V(STRING_ITERATOR_MAP_INDEX, Map, string_iterator_map)                       \
     398             :   V(SYMBOL_FUNCTION_INDEX, JSFunction, symbol_function)                        \
     399             :   V(NATIVE_FUNCTION_MAP_INDEX, Map, native_function_map)                       \
     400             :   V(WASM_INSTANCE_CONSTRUCTOR_INDEX, JSFunction, wasm_instance_constructor)    \
     401             :   V(WASM_MEMORY_CONSTRUCTOR_INDEX, JSFunction, wasm_memory_constructor)        \
     402             :   V(WASM_MODULE_CONSTRUCTOR_INDEX, JSFunction, wasm_module_constructor)        \
     403             :   V(WASM_TABLE_CONSTRUCTOR_INDEX, JSFunction, wasm_table_constructor)          \
     404             :   V(TEMPLATE_MAP_INDEX, HeapObject, template_map)                              \
     405             :   V(TYPED_ARRAY_FUN_INDEX, JSFunction, typed_array_function)                   \
     406             :   V(TYPED_ARRAY_PROTOTYPE_INDEX, JSObject, typed_array_prototype)              \
     407             :   V(UINT16_ARRAY_FUN_INDEX, JSFunction, uint16_array_fun)                      \
     408             :   V(UINT32_ARRAY_FUN_INDEX, JSFunction, uint32_array_fun)                      \
     409             :   V(UINT8_ARRAY_FUN_INDEX, JSFunction, uint8_array_fun)                        \
     410             :   V(UINT8_CLAMPED_ARRAY_FUN_INDEX, JSFunction, uint8_clamped_array_fun)        \
     411             :   NATIVE_CONTEXT_INTRINSIC_FUNCTIONS(V)                                        \
     412             :   NATIVE_CONTEXT_IMPORTED_FIELDS(V)                                            \
     413             :   NATIVE_CONTEXT_JS_ARRAY_ITERATOR_MAPS(V)
     414             : 
     415             : // A table of all script contexts. Every loaded top-level script with top-level
     416             : // lexical declarations contributes its ScriptContext into this table.
     417             : //
     418             : // The table is a fixed array, its first slot is the current used count and
     419             : // the subsequent slots 1..used contain ScriptContexts.
     420             : class ScriptContextTable : public FixedArray {
     421             :  public:
     422             :   // Conversions.
     423             :   static inline ScriptContextTable* cast(Object* context);
     424             : 
     425             :   struct LookupResult {
     426             :     int context_index;
     427             :     int slot_index;
     428             :     VariableMode mode;
     429             :     InitializationFlag init_flag;
     430             :     MaybeAssignedFlag maybe_assigned_flag;
     431             :   };
     432             : 
     433             :   inline int used() const;
     434             :   inline void set_used(int used);
     435             : 
     436             :   static inline Handle<Context> GetContext(Handle<ScriptContextTable> table,
     437             :                                            int i);
     438             : 
     439             :   // Lookup a variable `name` in a ScriptContextTable.
     440             :   // If it returns true, the variable is found and `result` contains
     441             :   // valid information about its location.
     442             :   // If it returns false, `result` is untouched.
     443             :   MUST_USE_RESULT
     444             :   static bool Lookup(Handle<ScriptContextTable> table, Handle<String> name,
     445             :                      LookupResult* result);
     446             : 
     447             :   MUST_USE_RESULT
     448             :   static Handle<ScriptContextTable> Extend(Handle<ScriptContextTable> table,
     449             :                                            Handle<Context> script_context);
     450             : 
     451             :   static int GetContextOffset(int context_index) {
     452       17462 :     return kFirstContextOffset + context_index * kPointerSize;
     453             :   }
     454             : 
     455             :  private:
     456             :   static const int kUsedSlot = 0;
     457             :   static const int kFirstContextSlot = kUsedSlot + 1;
     458             :   static const int kFirstContextOffset =
     459             :       FixedArray::kHeaderSize + kFirstContextSlot * kPointerSize;
     460             : 
     461             :   DISALLOW_IMPLICIT_CONSTRUCTORS(ScriptContextTable);
     462             : };
     463             : 
     464             : // JSFunctions are pairs (context, function code), sometimes also called
     465             : // closures. A Context object is used to represent function contexts and
     466             : // dynamically pushed 'with' contexts (or 'scopes' in ECMA-262 speak).
     467             : //
     468             : // At runtime, the contexts build a stack in parallel to the execution
     469             : // stack, with the top-most context being the current context. All contexts
     470             : // have the following slots:
     471             : //
     472             : // [ closure   ]  This is the current function. It is the same for all
     473             : //                contexts inside a function. It provides access to the
     474             : //                incoming context (i.e., the outer context, which may
     475             : //                or may not become the current function's context), and
     476             : //                it provides access to the functions code and thus it's
     477             : //                scope information, which in turn contains the names of
     478             : //                statically allocated context slots. The names are needed
     479             : //                for dynamic lookups in the presence of 'with' or 'eval'.
     480             : //
     481             : // [ previous  ]  A pointer to the previous context.
     482             : //
     483             : // [ extension ]  Additional data.
     484             : //
     485             : //                For script contexts, it contains the respective ScopeInfo.
     486             : //
     487             : //                For catch contexts, it contains a ContextExtension object
     488             : //                consisting of the ScopeInfo and the name of the catch
     489             : //                variable.
     490             : //
     491             : //                For module contexts, it contains the module object.
     492             : //
     493             : //                For block contexts, it contains either the respective
     494             : //                ScopeInfo or a ContextExtension object consisting of the
     495             : //                ScopeInfo and an "extension object" (see below).
     496             : //
     497             : //                For with contexts, it contains a ContextExtension object
     498             : //                consisting of the ScopeInfo and an "extension object".
     499             : //
     500             : //                An "extension object" is used to dynamically extend a context
     501             : //                with additional variables, namely in the implementation of the
     502             : //                'with' construct and the 'eval' construct.  For instance,
     503             : //                Context::Lookup also searches the extension object for
     504             : //                properties.  (Storing the extension object is the original
     505             : //                purpose of this context slot, hence the name.)
     506             : //
     507             : // [ native_context ]  A pointer to the native context.
     508             : //
     509             : // In addition, function contexts may have statically allocated context slots
     510             : // to store local variables/functions that are accessed from inner functions
     511             : // (via static context addresses) or through 'eval' (dynamic context lookups).
     512             : // The native context contains additional slots for fast access to native
     513             : // properties.
     514             : //
     515             : // Finally, with Harmony scoping, the JSFunction representing a top level
     516             : // script will have the ScriptContext rather than a FunctionContext.
     517             : // Script contexts from all top-level scripts are gathered in
     518             : // ScriptContextTable.
     519             : 
     520             : class Context: public FixedArray {
     521             :  public:
     522             :   // Conversions.
     523             :   static inline Context* cast(Object* context);
     524             : 
     525             :   // The default context slot layout; indices are FixedArray slot indices.
     526             :   enum Field {
     527             :     // These slots are in all contexts.
     528             :     CLOSURE_INDEX,
     529             :     PREVIOUS_INDEX,
     530             :     // The extension slot is used for either the global object (in native
     531             :     // contexts), eval extension object (function contexts), subject of with
     532             :     // (with contexts), or the variable name (catch contexts), the serialized
     533             :     // scope info (block contexts), or the module instance (module contexts).
     534             :     EXTENSION_INDEX,
     535             :     NATIVE_CONTEXT_INDEX,
     536             : 
     537             :     // These slots are only in native contexts.
     538             : #define NATIVE_CONTEXT_SLOT(index, type, name) index,
     539             :     NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_SLOT)
     540             : #undef NATIVE_CONTEXT_SLOT
     541             : 
     542             :     // Properties from here are treated as weak references by the full GC.
     543             :     // Scavenge treats them as strong references.
     544             :     OPTIMIZED_CODE_LIST,    // Weak.
     545             :     DEOPTIMIZED_CODE_LIST,  // Weak.
     546             :     NEXT_CONTEXT_LINK,      // Weak.
     547             : 
     548             :     // Total number of slots.
     549             :     NATIVE_CONTEXT_SLOTS,
     550             :     FIRST_WEAK_SLOT = OPTIMIZED_CODE_LIST,
     551             :     FIRST_JS_ARRAY_MAP_SLOT = JS_ARRAY_PACKED_SMI_ELEMENTS_MAP_INDEX,
     552             : 
     553             :     MIN_CONTEXT_SLOTS = GLOBAL_PROXY_INDEX,
     554             :     // This slot holds the thrown value in catch contexts.
     555             :     THROWN_OBJECT_INDEX = MIN_CONTEXT_SLOTS,
     556             : 
     557             :     // These slots hold values in debug evaluate contexts.
     558             :     WRAPPED_CONTEXT_INDEX = MIN_CONTEXT_SLOTS,
     559             :     WHITE_LIST_INDEX = MIN_CONTEXT_SLOTS + 1
     560             :   };
     561             : 
     562             :   // A region of native context entries containing maps for functions created
     563             :   // by Builtins::kFastNewClosure.
     564             :   static const int FIRST_FUNCTION_MAP_INDEX = SLOPPY_FUNCTION_MAP_INDEX;
     565             :   static const int LAST_FUNCTION_MAP_INDEX = CLASS_FUNCTION_MAP_INDEX;
     566             : 
     567             :   void ResetErrorsThrown();
     568             :   void IncrementErrorsThrown();
     569             :   int GetErrorsThrown();
     570             : 
     571             :   // Direct slot access.
     572             :   inline JSFunction* closure();
     573             :   inline void set_closure(JSFunction* closure);
     574             : 
     575             :   inline Context* previous();
     576             :   inline void set_previous(Context* context);
     577             : 
     578             :   inline Object* next_context_link();
     579             : 
     580             :   inline bool has_extension();
     581             :   inline HeapObject* extension();
     582             :   inline void set_extension(HeapObject* object);
     583             :   JSObject* extension_object();
     584             :   JSReceiver* extension_receiver();
     585             :   ScopeInfo* scope_info();
     586             :   String* catch_name();
     587             : 
     588             :   // Find the module context (assuming there is one) and return the associated
     589             :   // module object.
     590             :   Module* module();
     591             : 
     592             :   // Get the context where var declarations will be hoisted to, which
     593             :   // may be the context itself.
     594             :   Context* declaration_context();
     595             :   bool is_declaration_context();
     596             : 
     597             :   // Get the next closure's context on the context chain.
     598             :   Context* closure_context();
     599             : 
     600             :   // Returns a JSGlobalProxy object or null.
     601             :   JSObject* global_proxy();
     602             :   void set_global_proxy(JSObject* global);
     603             : 
     604             :   // Get the JSGlobalObject object.
     605             :   V8_EXPORT_PRIVATE JSGlobalObject* global_object();
     606             : 
     607             :   // Get the script context by traversing the context chain.
     608             :   Context* script_context();
     609             : 
     610             :   // Compute the native context.
     611             :   inline Context* native_context() const;
     612             :   inline void set_native_context(Context* context);
     613             : 
     614             :   // Predicates for context types.  IsNativeContext is also defined on Object
     615             :   // because we frequently have to know if arbitrary objects are natives
     616             :   // contexts.
     617             :   inline bool IsNativeContext() const;
     618             :   inline bool IsFunctionContext() const;
     619             :   inline bool IsCatchContext() const;
     620             :   inline bool IsWithContext() const;
     621             :   inline bool IsDebugEvaluateContext() const;
     622             :   inline bool IsBlockContext() const;
     623             :   inline bool IsModuleContext() const;
     624             :   inline bool IsEvalContext() const;
     625             :   inline bool IsScriptContext() const;
     626             : 
     627             :   inline bool HasSameSecurityTokenAs(Context* that) const;
     628             : 
     629             :   // The native context also stores a list of all optimized code and a
     630             :   // list of all deoptimized code, which are needed by the deoptimizer.
     631             :   void AddOptimizedCode(Code* code);
     632             :   void SetOptimizedCodeListHead(Object* head);
     633             :   Object* OptimizedCodeListHead();
     634             :   void SetDeoptimizedCodeListHead(Object* head);
     635             :   Object* DeoptimizedCodeListHead();
     636             : 
     637             :   Handle<Object> ErrorMessageForCodeGenerationFromStrings();
     638             : 
     639             :   static int ImportedFieldIndexForName(Handle<String> name);
     640             :   static int IntrinsicIndexForName(Handle<String> name);
     641             :   static int IntrinsicIndexForName(const unsigned char* name, int length);
     642             : 
     643             : #define NATIVE_CONTEXT_FIELD_ACCESSORS(index, type, name) \
     644             :   inline void set_##name(type* value);                    \
     645             :   inline bool is_##name(type* value) const;               \
     646             :   inline type* name() const;
     647             :   NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELD_ACCESSORS)
     648             : #undef NATIVE_CONTEXT_FIELD_ACCESSORS
     649             : 
     650             :   // Lookup the slot called name, starting with the current context.
     651             :   // There are three possibilities:
     652             :   //
     653             :   // 1) result->IsContext():
     654             :   //    The binding was found in a context.  *index is always the
     655             :   //    non-negative slot index.  *attributes is NONE for var and let
     656             :   //    declarations, READ_ONLY for const declarations (never ABSENT).
     657             :   //
     658             :   // 2) result->IsJSObject():
     659             :   //    The binding was found as a named property in a context extension
     660             :   //    object (i.e., was introduced via eval), as a property on the subject
     661             :   //    of with, or as a property of the global object.  *index is -1 and
     662             :   //    *attributes is not ABSENT.
     663             :   //
     664             :   // 3) result->IsModule():
     665             :   //    The binding was found in module imports or exports.
     666             :   //     *attributes is never ABSENT. imports are READ_ONLY.
     667             :   //
     668             :   // 4) result.is_null():
     669             :   //    There was no binding found, *index is always -1 and *attributes is
     670             :   //    always ABSENT.
     671             :   Handle<Object> Lookup(Handle<String> name, ContextLookupFlags flags,
     672             :                         int* index, PropertyAttributes* attributes,
     673             :                         InitializationFlag* init_flag,
     674             :                         VariableMode* variable_mode,
     675             :                         bool* is_sloppy_function_name = nullptr);
     676             : 
     677             :   // Code generation support.
     678             :   static int SlotOffset(int index) {
     679       73337 :     return kHeaderSize + index * kPointerSize - kHeapObjectTag;
     680             :   }
     681             : 
     682             :   static inline int FunctionMapIndex(LanguageMode language_mode,
     683             :                                      FunctionKind kind, bool has_prototype_slot,
     684             :                                      bool has_shared_name,
     685             :                                      bool needs_home_object);
     686             : 
     687             :   static int ArrayMapIndex(ElementsKind elements_kind) {
     688             :     DCHECK(IsFastElementsKind(elements_kind));
     689    10331179 :     return elements_kind + FIRST_JS_ARRAY_MAP_SLOT;
     690             :   }
     691             : 
     692             :   inline Map* GetInitialJSArrayMap(ElementsKind kind) const;
     693             : 
     694             :   static const int kSize = kHeaderSize + NATIVE_CONTEXT_SLOTS * kPointerSize;
     695             :   static const int kNotFound = -1;
     696             : 
     697             :   // GC support.
     698             :   typedef FixedBodyDescriptor<kHeaderSize, kSize, kSize> BodyDescriptor;
     699             : 
     700             :   typedef FixedBodyDescriptor<
     701             :       kHeaderSize, kHeaderSize + FIRST_WEAK_SLOT * kPointerSize, kSize>
     702             :       BodyDescriptorWeak;
     703             : 
     704             :  private:
     705             : #ifdef DEBUG
     706             :   // Bootstrapping-aware type checks.
     707             :   V8_EXPORT_PRIVATE static bool IsBootstrappingOrNativeContext(Isolate* isolate,
     708             :                                                                Object* object);
     709             :   static bool IsBootstrappingOrValidParentContext(Object* object, Context* kid);
     710             : #endif
     711             : 
     712             :   STATIC_ASSERT(kHeaderSize == Internals::kContextHeaderSize);
     713             :   STATIC_ASSERT(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex);
     714             : };
     715             : 
     716             : typedef Context::Field ContextField;
     717             : 
     718             : }  // namespace internal
     719             : }  // namespace v8
     720             : 
     721             : #endif  // V8_CONTEXTS_H_

Generated by: LCOV version 1.10