OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/allocation-site-scopes.h" | 7 #include "src/allocation-site-scopes.h" |
8 #include "src/arguments.h" | 8 #include "src/arguments.h" |
9 #include "src/ast.h" | 9 #include "src/ast.h" |
10 #include "src/parser.h" | 10 #include "src/parser.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 MUST_USE_RESULT static MaybeHandle<Object> CreateLiteralBoilerplate( | 36 MUST_USE_RESULT static MaybeHandle<Object> CreateLiteralBoilerplate( |
37 Isolate* isolate, Handle<FixedArray> literals, | 37 Isolate* isolate, Handle<FixedArray> literals, |
38 Handle<FixedArray> constant_properties); | 38 Handle<FixedArray> constant_properties); |
39 | 39 |
40 | 40 |
41 MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate( | 41 MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate( |
42 Isolate* isolate, Handle<FixedArray> literals, | 42 Isolate* isolate, Handle<FixedArray> literals, |
43 Handle<FixedArray> constant_properties, bool should_have_fast_elements, | 43 Handle<FixedArray> constant_properties, bool should_have_fast_elements, |
44 bool has_function_literal) { | 44 bool has_function_literal) { |
45 // Get the native context from the literals array. This is the | 45 Handle<Context> context = isolate->native_context(); |
46 // context in which the function was created and we use the object | |
47 // function from this context to create the object literal. We do | |
48 // not use the object function from the current native context | |
49 // because this might be the object function from another context | |
50 // which we should not have access to. | |
51 Handle<Context> context = | |
52 Handle<Context>(JSFunction::NativeContextFromLiterals(*literals)); | |
53 | 46 |
54 // In case we have function literals, we want the object to be in | 47 // In case we have function literals, we want the object to be in |
55 // slow properties mode for now. We don't go in the map cache because | 48 // slow properties mode for now. We don't go in the map cache because |
56 // maps with constant functions can't be shared if the functions are | 49 // maps with constant functions can't be shared if the functions are |
57 // not the same (which is the common case). | 50 // not the same (which is the common case). |
58 bool is_result_from_cache = false; | 51 bool is_result_from_cache = false; |
59 Handle<Map> map = has_function_literal | 52 Handle<Map> map = has_function_literal |
60 ? Handle<Map>(context->object_function()->initial_map()) | 53 ? Handle<Map>(context->object_function()->initial_map()) |
61 : ComputeObjectLiteralMap(context, constant_properties, | 54 : ComputeObjectLiteralMap(context, constant_properties, |
62 &is_result_from_cache); | 55 &is_result_from_cache); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 "FastLiteral"); | 132 "FastLiteral"); |
140 } | 133 } |
141 return boilerplate; | 134 return boilerplate; |
142 } | 135 } |
143 | 136 |
144 | 137 |
145 MaybeHandle<Object> Runtime::CreateArrayLiteralBoilerplate( | 138 MaybeHandle<Object> Runtime::CreateArrayLiteralBoilerplate( |
146 Isolate* isolate, Handle<FixedArray> literals, | 139 Isolate* isolate, Handle<FixedArray> literals, |
147 Handle<FixedArray> elements) { | 140 Handle<FixedArray> elements) { |
148 // Create the JSArray. | 141 // Create the JSArray. |
149 Handle<JSFunction> constructor( | 142 Handle<JSFunction> constructor = isolate->array_function(); |
150 JSFunction::NativeContextFromLiterals(*literals)->array_function()); | |
151 | 143 |
152 PretenureFlag pretenure_flag = | 144 PretenureFlag pretenure_flag = |
153 isolate->heap()->InNewSpace(*literals) ? NOT_TENURED : TENURED; | 145 isolate->heap()->InNewSpace(*literals) ? NOT_TENURED : TENURED; |
154 | 146 |
155 Handle<JSArray> object = Handle<JSArray>::cast( | 147 Handle<JSArray> object = Handle<JSArray>::cast( |
156 isolate->factory()->NewJSObject(constructor, pretenure_flag)); | 148 isolate->factory()->NewJSObject(constructor, pretenure_flag)); |
157 | 149 |
158 ElementsKind constant_elements_kind = | 150 ElementsKind constant_elements_kind = |
159 static_cast<ElementsKind>(Smi::cast(elements->get(0))->value()); | 151 static_cast<ElementsKind>(Smi::cast(elements->get(0))->value()); |
160 Handle<FixedArrayBase> constant_elements_values( | 152 Handle<FixedArrayBase> constant_elements_values( |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 JSObject::TransitionElementsKind(boilerplate_object, transitioned_kind); | 418 JSObject::TransitionElementsKind(boilerplate_object, transitioned_kind); |
427 } | 419 } |
428 } | 420 } |
429 FixedArray* object_array = FixedArray::cast(object->elements()); | 421 FixedArray* object_array = FixedArray::cast(object->elements()); |
430 object_array->set(store_index, *value); | 422 object_array->set(store_index, *value); |
431 } | 423 } |
432 return *object; | 424 return *object; |
433 } | 425 } |
434 } | 426 } |
435 } // namespace v8::internal | 427 } // namespace v8::internal |
OLD | NEW |