| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 V(UINT8_ARRAY_FUN_INDEX, JSFunction, uint8_array_fun) \ | 128 V(UINT8_ARRAY_FUN_INDEX, JSFunction, uint8_array_fun) \ |
| 129 V(INT8_ARRAY_FUN_INDEX, JSFunction, int8_array_fun) \ | 129 V(INT8_ARRAY_FUN_INDEX, JSFunction, int8_array_fun) \ |
| 130 V(UINT16_ARRAY_FUN_INDEX, JSFunction, uint16_array_fun) \ | 130 V(UINT16_ARRAY_FUN_INDEX, JSFunction, uint16_array_fun) \ |
| 131 V(INT16_ARRAY_FUN_INDEX, JSFunction, int16_array_fun) \ | 131 V(INT16_ARRAY_FUN_INDEX, JSFunction, int16_array_fun) \ |
| 132 V(UINT32_ARRAY_FUN_INDEX, JSFunction, uint32_array_fun) \ | 132 V(UINT32_ARRAY_FUN_INDEX, JSFunction, uint32_array_fun) \ |
| 133 V(INT32_ARRAY_FUN_INDEX, JSFunction, int32_array_fun) \ | 133 V(INT32_ARRAY_FUN_INDEX, JSFunction, int32_array_fun) \ |
| 134 V(FLOAT32_ARRAY_FUN_INDEX, JSFunction, float32_array_fun) \ | 134 V(FLOAT32_ARRAY_FUN_INDEX, JSFunction, float32_array_fun) \ |
| 135 V(FLOAT64_ARRAY_FUN_INDEX, JSFunction, float64_array_fun) \ | 135 V(FLOAT64_ARRAY_FUN_INDEX, JSFunction, float64_array_fun) \ |
| 136 V(UINT8_CLAMPED_ARRAY_FUN_INDEX, JSFunction, uint8_clamped_array_fun) \ | 136 V(UINT8_CLAMPED_ARRAY_FUN_INDEX, JSFunction, uint8_clamped_array_fun) \ |
| 137 V(DATA_VIEW_FUN_INDEX, JSFunction, data_view_fun) \ | 137 V(DATA_VIEW_FUN_INDEX, JSFunction, data_view_fun) \ |
| 138 V(FUNCTION_MAP_INDEX, Map, function_map) \ | 138 V(SLOPPY_FUNCTION_MAP_INDEX, Map, sloppy_function_map) \ |
| 139 V(STRICT_MODE_FUNCTION_MAP_INDEX, Map, strict_mode_function_map) \ | 139 V(STRICT_FUNCTION_MAP_INDEX, Map, strict_function_map) \ |
| 140 V(FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, function_without_prototype_map) \ | 140 V(SLOPPY_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ |
| 141 V(STRICT_MODE_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ | 141 sloppy_function_without_prototype_map) \ |
| 142 strict_mode_function_without_prototype_map) \ | 142 V(STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, \ |
| 143 strict_function_without_prototype_map) \ |
| 143 V(REGEXP_RESULT_MAP_INDEX, Map, regexp_result_map)\ | 144 V(REGEXP_RESULT_MAP_INDEX, Map, regexp_result_map)\ |
| 144 V(ARGUMENTS_BOILERPLATE_INDEX, JSObject, arguments_boilerplate) \ | 145 V(SLOPPY_ARGUMENTS_BOILERPLATE_INDEX, JSObject, \ |
| 146 sloppy_arguments_boilerplate) \ |
| 145 V(ALIASED_ARGUMENTS_BOILERPLATE_INDEX, JSObject, \ | 147 V(ALIASED_ARGUMENTS_BOILERPLATE_INDEX, JSObject, \ |
| 146 aliased_arguments_boilerplate) \ | 148 aliased_arguments_boilerplate) \ |
| 147 V(STRICT_MODE_ARGUMENTS_BOILERPLATE_INDEX, JSObject, \ | 149 V(STRICT_ARGUMENTS_BOILERPLATE_INDEX, JSObject, \ |
| 148 strict_mode_arguments_boilerplate) \ | 150 strict_arguments_boilerplate) \ |
| 149 V(MESSAGE_LISTENERS_INDEX, JSObject, message_listeners) \ | 151 V(MESSAGE_LISTENERS_INDEX, JSObject, message_listeners) \ |
| 150 V(MAKE_MESSAGE_FUN_INDEX, JSFunction, make_message_fun) \ | 152 V(MAKE_MESSAGE_FUN_INDEX, JSFunction, make_message_fun) \ |
| 151 V(GET_STACK_TRACE_LINE_INDEX, JSFunction, get_stack_trace_line_fun) \ | 153 V(GET_STACK_TRACE_LINE_INDEX, JSFunction, get_stack_trace_line_fun) \ |
| 152 V(CONFIGURE_GLOBAL_INDEX, JSFunction, configure_global_fun) \ | 154 V(CONFIGURE_GLOBAL_INDEX, JSFunction, configure_global_fun) \ |
| 153 V(FUNCTION_CACHE_INDEX, JSObject, function_cache) \ | 155 V(FUNCTION_CACHE_INDEX, JSObject, function_cache) \ |
| 154 V(JSFUNCTION_RESULT_CACHES_INDEX, FixedArray, jsfunction_result_caches) \ | 156 V(JSFUNCTION_RESULT_CACHES_INDEX, FixedArray, jsfunction_result_caches) \ |
| 155 V(NORMALIZED_MAP_CACHE_INDEX, NormalizedMapCache, normalized_map_cache) \ | 157 V(NORMALIZED_MAP_CACHE_INDEX, NormalizedMapCache, normalized_map_cache) \ |
| 156 V(RUNTIME_CONTEXT_INDEX, Context, runtime_context) \ | 158 V(RUNTIME_CONTEXT_INDEX, Context, runtime_context) \ |
| 157 V(CALL_AS_FUNCTION_DELEGATE_INDEX, JSFunction, call_as_function_delegate) \ | 159 V(CALL_AS_FUNCTION_DELEGATE_INDEX, JSFunction, call_as_function_delegate) \ |
| 158 V(CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, JSFunction, \ | 160 V(CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, JSFunction, \ |
| (...skipping 14 matching lines...) Expand all Loading... |
| 173 V(DERIVED_HAS_TRAP_INDEX, JSFunction, derived_has_trap) \ | 175 V(DERIVED_HAS_TRAP_INDEX, JSFunction, derived_has_trap) \ |
| 174 V(DERIVED_GET_TRAP_INDEX, JSFunction, derived_get_trap) \ | 176 V(DERIVED_GET_TRAP_INDEX, JSFunction, derived_get_trap) \ |
| 175 V(DERIVED_SET_TRAP_INDEX, JSFunction, derived_set_trap) \ | 177 V(DERIVED_SET_TRAP_INDEX, JSFunction, derived_set_trap) \ |
| 176 V(PROXY_ENUMERATE_INDEX, JSFunction, proxy_enumerate) \ | 178 V(PROXY_ENUMERATE_INDEX, JSFunction, proxy_enumerate) \ |
| 177 V(OBSERVERS_NOTIFY_CHANGE_INDEX, JSFunction, observers_notify_change) \ | 179 V(OBSERVERS_NOTIFY_CHANGE_INDEX, JSFunction, observers_notify_change) \ |
| 178 V(OBSERVERS_ENQUEUE_SPLICE_INDEX, JSFunction, observers_enqueue_splice) \ | 180 V(OBSERVERS_ENQUEUE_SPLICE_INDEX, JSFunction, observers_enqueue_splice) \ |
| 179 V(OBSERVERS_BEGIN_SPLICE_INDEX, JSFunction, \ | 181 V(OBSERVERS_BEGIN_SPLICE_INDEX, JSFunction, \ |
| 180 observers_begin_perform_splice) \ | 182 observers_begin_perform_splice) \ |
| 181 V(OBSERVERS_END_SPLICE_INDEX, JSFunction, \ | 183 V(OBSERVERS_END_SPLICE_INDEX, JSFunction, \ |
| 182 observers_end_perform_splice) \ | 184 observers_end_perform_splice) \ |
| 183 V(GENERATOR_FUNCTION_MAP_INDEX, Map, generator_function_map) \ | 185 V(SLOPPY_GENERATOR_FUNCTION_MAP_INDEX, Map, sloppy_generator_function_map) \ |
| 184 V(STRICT_MODE_GENERATOR_FUNCTION_MAP_INDEX, Map, \ | 186 V(STRICT_GENERATOR_FUNCTION_MAP_INDEX, Map, strict_generator_function_map) \ |
| 185 strict_mode_generator_function_map) \ | |
| 186 V(GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map, \ | 187 V(GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map, \ |
| 187 generator_object_prototype_map) \ | 188 generator_object_prototype_map) \ |
| 188 V(GENERATOR_RESULT_MAP_INDEX, Map, generator_result_map) | 189 V(GENERATOR_RESULT_MAP_INDEX, Map, generator_result_map) |
| 189 | 190 |
| 190 // JSFunctions are pairs (context, function code), sometimes also called | 191 // JSFunctions are pairs (context, function code), sometimes also called |
| 191 // closures. A Context object is used to represent function contexts and | 192 // closures. A Context object is used to represent function contexts and |
| 192 // dynamically pushed 'with' contexts (or 'scopes' in ECMA-262 speak). | 193 // dynamically pushed 'with' contexts (or 'scopes' in ECMA-262 speak). |
| 193 // | 194 // |
| 194 // At runtime, the contexts build a stack in parallel to the execution | 195 // At runtime, the contexts build a stack in parallel to the execution |
| 195 // stack, with the top-most context being the current context. All contexts | 196 // stack, with the top-most context being the current context. All contexts |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 EXTENSION_INDEX, | 250 EXTENSION_INDEX, |
| 250 GLOBAL_OBJECT_INDEX, | 251 GLOBAL_OBJECT_INDEX, |
| 251 MIN_CONTEXT_SLOTS, | 252 MIN_CONTEXT_SLOTS, |
| 252 | 253 |
| 253 // This slot holds the thrown value in catch contexts. | 254 // This slot holds the thrown value in catch contexts. |
| 254 THROWN_OBJECT_INDEX = MIN_CONTEXT_SLOTS, | 255 THROWN_OBJECT_INDEX = MIN_CONTEXT_SLOTS, |
| 255 | 256 |
| 256 // These slots are only in native contexts. | 257 // These slots are only in native contexts. |
| 257 GLOBAL_PROXY_INDEX = MIN_CONTEXT_SLOTS, | 258 GLOBAL_PROXY_INDEX = MIN_CONTEXT_SLOTS, |
| 258 SECURITY_TOKEN_INDEX, | 259 SECURITY_TOKEN_INDEX, |
| 259 ARGUMENTS_BOILERPLATE_INDEX, | 260 SLOPPY_ARGUMENTS_BOILERPLATE_INDEX, |
| 260 ALIASED_ARGUMENTS_BOILERPLATE_INDEX, | 261 ALIASED_ARGUMENTS_BOILERPLATE_INDEX, |
| 261 STRICT_MODE_ARGUMENTS_BOILERPLATE_INDEX, | 262 STRICT_ARGUMENTS_BOILERPLATE_INDEX, |
| 262 REGEXP_RESULT_MAP_INDEX, | 263 REGEXP_RESULT_MAP_INDEX, |
| 263 FUNCTION_MAP_INDEX, | 264 SLOPPY_FUNCTION_MAP_INDEX, |
| 264 STRICT_MODE_FUNCTION_MAP_INDEX, | 265 STRICT_FUNCTION_MAP_INDEX, |
| 265 FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, | 266 SLOPPY_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, |
| 266 STRICT_MODE_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, | 267 STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, |
| 267 INITIAL_OBJECT_PROTOTYPE_INDEX, | 268 INITIAL_OBJECT_PROTOTYPE_INDEX, |
| 268 INITIAL_ARRAY_PROTOTYPE_INDEX, | 269 INITIAL_ARRAY_PROTOTYPE_INDEX, |
| 269 BOOLEAN_FUNCTION_INDEX, | 270 BOOLEAN_FUNCTION_INDEX, |
| 270 NUMBER_FUNCTION_INDEX, | 271 NUMBER_FUNCTION_INDEX, |
| 271 STRING_FUNCTION_INDEX, | 272 STRING_FUNCTION_INDEX, |
| 272 STRING_FUNCTION_PROTOTYPE_MAP_INDEX, | 273 STRING_FUNCTION_PROTOTYPE_MAP_INDEX, |
| 273 SYMBOL_FUNCTION_INDEX, | 274 SYMBOL_FUNCTION_INDEX, |
| 274 OBJECT_FUNCTION_INDEX, | 275 OBJECT_FUNCTION_INDEX, |
| 275 INTERNAL_ARRAY_FUNCTION_INDEX, | 276 INTERNAL_ARRAY_FUNCTION_INDEX, |
| 276 ARRAY_FUNCTION_INDEX, | 277 ARRAY_FUNCTION_INDEX, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 ENQUEUE_EXTERNAL_MICROTASK_INDEX, | 323 ENQUEUE_EXTERNAL_MICROTASK_INDEX, |
| 323 TO_COMPLETE_PROPERTY_DESCRIPTOR_INDEX, | 324 TO_COMPLETE_PROPERTY_DESCRIPTOR_INDEX, |
| 324 DERIVED_HAS_TRAP_INDEX, | 325 DERIVED_HAS_TRAP_INDEX, |
| 325 DERIVED_GET_TRAP_INDEX, | 326 DERIVED_GET_TRAP_INDEX, |
| 326 DERIVED_SET_TRAP_INDEX, | 327 DERIVED_SET_TRAP_INDEX, |
| 327 PROXY_ENUMERATE_INDEX, | 328 PROXY_ENUMERATE_INDEX, |
| 328 OBSERVERS_NOTIFY_CHANGE_INDEX, | 329 OBSERVERS_NOTIFY_CHANGE_INDEX, |
| 329 OBSERVERS_ENQUEUE_SPLICE_INDEX, | 330 OBSERVERS_ENQUEUE_SPLICE_INDEX, |
| 330 OBSERVERS_BEGIN_SPLICE_INDEX, | 331 OBSERVERS_BEGIN_SPLICE_INDEX, |
| 331 OBSERVERS_END_SPLICE_INDEX, | 332 OBSERVERS_END_SPLICE_INDEX, |
| 332 GENERATOR_FUNCTION_MAP_INDEX, | 333 SLOPPY_GENERATOR_FUNCTION_MAP_INDEX, |
| 333 STRICT_MODE_GENERATOR_FUNCTION_MAP_INDEX, | 334 STRICT_GENERATOR_FUNCTION_MAP_INDEX, |
| 334 GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, | 335 GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, |
| 335 GENERATOR_RESULT_MAP_INDEX, | 336 GENERATOR_RESULT_MAP_INDEX, |
| 336 | 337 |
| 337 // Properties from here are treated as weak references by the full GC. | 338 // Properties from here are treated as weak references by the full GC. |
| 338 // Scavenge treats them as strong references. | 339 // Scavenge treats them as strong references. |
| 339 OPTIMIZED_FUNCTIONS_LIST, // Weak. | 340 OPTIMIZED_FUNCTIONS_LIST, // Weak. |
| 340 OPTIMIZED_CODE_LIST, // Weak. | 341 OPTIMIZED_CODE_LIST, // Weak. |
| 341 DEOPTIMIZED_CODE_LIST, // Weak. | 342 DEOPTIMIZED_CODE_LIST, // Weak. |
| 342 MAP_CACHE_INDEX, // Weak. | 343 MAP_CACHE_INDEX, // Weak. |
| 343 NEXT_CONTEXT_LINK, // Weak. | 344 NEXT_CONTEXT_LINK, // Weak. |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 ContextLookupFlags flags, | 484 ContextLookupFlags flags, |
| 484 int* index, | 485 int* index, |
| 485 PropertyAttributes* attributes, | 486 PropertyAttributes* attributes, |
| 486 BindingFlags* binding_flags); | 487 BindingFlags* binding_flags); |
| 487 | 488 |
| 488 // Code generation support. | 489 // Code generation support. |
| 489 static int SlotOffset(int index) { | 490 static int SlotOffset(int index) { |
| 490 return kHeaderSize + index * kPointerSize - kHeapObjectTag; | 491 return kHeaderSize + index * kPointerSize - kHeapObjectTag; |
| 491 } | 492 } |
| 492 | 493 |
| 493 static int FunctionMapIndex(LanguageMode language_mode, bool is_generator) { | 494 static int FunctionMapIndex(StrictMode strict_mode, bool is_generator) { |
| 494 return is_generator | 495 return is_generator |
| 495 ? (language_mode == SLOPPY_MODE | 496 ? (strict_mode == SLOPPY |
| 496 ? GENERATOR_FUNCTION_MAP_INDEX | 497 ? SLOPPY_GENERATOR_FUNCTION_MAP_INDEX |
| 497 : STRICT_MODE_GENERATOR_FUNCTION_MAP_INDEX) | 498 : STRICT_GENERATOR_FUNCTION_MAP_INDEX) |
| 498 : (language_mode == SLOPPY_MODE | 499 : (strict_mode == SLOPPY |
| 499 ? FUNCTION_MAP_INDEX | 500 ? SLOPPY_FUNCTION_MAP_INDEX |
| 500 : STRICT_MODE_FUNCTION_MAP_INDEX); | 501 : STRICT_FUNCTION_MAP_INDEX); |
| 501 } | 502 } |
| 502 | 503 |
| 503 static const int kSize = kHeaderSize + NATIVE_CONTEXT_SLOTS * kPointerSize; | 504 static const int kSize = kHeaderSize + NATIVE_CONTEXT_SLOTS * kPointerSize; |
| 504 | 505 |
| 505 // GC support. | 506 // GC support. |
| 506 typedef FixedBodyDescriptor< | 507 typedef FixedBodyDescriptor< |
| 507 kHeaderSize, kSize, kSize> ScavengeBodyDescriptor; | 508 kHeaderSize, kSize, kSize> ScavengeBodyDescriptor; |
| 508 | 509 |
| 509 typedef FixedBodyDescriptor< | 510 typedef FixedBodyDescriptor< |
| 510 kHeaderSize, | 511 kHeaderSize, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 521 static bool IsBootstrappingOrGlobalObject(Isolate* isolate, Object* object); | 522 static bool IsBootstrappingOrGlobalObject(Isolate* isolate, Object* object); |
| 522 #endif | 523 #endif |
| 523 | 524 |
| 524 STATIC_CHECK(kHeaderSize == Internals::kContextHeaderSize); | 525 STATIC_CHECK(kHeaderSize == Internals::kContextHeaderSize); |
| 525 STATIC_CHECK(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex); | 526 STATIC_CHECK(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex); |
| 526 }; | 527 }; |
| 527 | 528 |
| 528 } } // namespace v8::internal | 529 } } // namespace v8::internal |
| 529 | 530 |
| 530 #endif // V8_CONTEXTS_H_ | 531 #endif // V8_CONTEXTS_H_ |
| OLD | NEW |