Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/objects.cc

Issue 1135493006: Revert of [strong] Object literals create strong objects (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/hydrogen.cc ('k') | src/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 <iomanip> 5 #include <iomanip>
6 #include <sstream> 6 #include <sstream>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 3782 matching lines...) Expand 10 before | Expand all | Expand 10 after
3793 } 3793 }
3794 3794
3795 3795
3796 Handle<Map> Map::TransitionElementsTo(Handle<Map> map, 3796 Handle<Map> Map::TransitionElementsTo(Handle<Map> map,
3797 ElementsKind to_kind) { 3797 ElementsKind to_kind) {
3798 ElementsKind from_kind = map->elements_kind(); 3798 ElementsKind from_kind = map->elements_kind();
3799 if (from_kind == to_kind) return map; 3799 if (from_kind == to_kind) return map;
3800 3800
3801 Isolate* isolate = map->GetIsolate(); 3801 Isolate* isolate = map->GetIsolate();
3802 Context* native_context = isolate->context()->native_context(); 3802 Context* native_context = isolate->context()->native_context();
3803 Object* maybe_array_maps = map->is_strong() 3803 Object* maybe_array_maps = native_context->js_array_maps();
3804 ? native_context->js_array_strong_maps()
3805 : native_context->js_array_maps();
3806 if (maybe_array_maps->IsFixedArray()) { 3804 if (maybe_array_maps->IsFixedArray()) {
3807 DisallowHeapAllocation no_gc; 3805 DisallowHeapAllocation no_gc;
3808 FixedArray* array_maps = FixedArray::cast(maybe_array_maps); 3806 FixedArray* array_maps = FixedArray::cast(maybe_array_maps);
3809 if (array_maps->get(from_kind) == *map) { 3807 if (array_maps->get(from_kind) == *map) {
3810 Object* maybe_transitioned_map = array_maps->get(to_kind); 3808 Object* maybe_transitioned_map = array_maps->get(to_kind);
3811 if (maybe_transitioned_map->IsMap()) { 3809 if (maybe_transitioned_map->IsMap()) {
3812 return handle(Map::cast(maybe_transitioned_map)); 3810 return handle(Map::cast(maybe_transitioned_map));
3813 } 3811 }
3814 } 3812 }
3815 } 3813 }
(...skipping 6493 matching lines...) Expand 10 before | Expand all | Expand 10 after
10309 if (maybe_elements_transition != NULL) { 10307 if (maybe_elements_transition != NULL) {
10310 new_map = handle(maybe_elements_transition); 10308 new_map = handle(maybe_elements_transition);
10311 DCHECK(new_map->elements_kind() == next_kind); 10309 DCHECK(new_map->elements_kind() == next_kind);
10312 } else { 10310 } else {
10313 new_map = Map::CopyAsElementsKind( 10311 new_map = Map::CopyAsElementsKind(
10314 current_map, next_kind, INSERT_TRANSITION); 10312 current_map, next_kind, INSERT_TRANSITION);
10315 } 10313 }
10316 maps->set(next_kind, *new_map); 10314 maps->set(next_kind, *new_map);
10317 current_map = new_map; 10315 current_map = new_map;
10318 } 10316 }
10319 if (initial_map->is_strong()) 10317 native_context->set_js_array_maps(*maps);
10320 native_context->set_js_array_strong_maps(*maps);
10321 else
10322 native_context->set_js_array_maps(*maps);
10323 return initial_map; 10318 return initial_map;
10324 } 10319 }
10325 10320
10326 10321
10327 void JSFunction::SetInstancePrototype(Handle<JSFunction> function, 10322 void JSFunction::SetInstancePrototype(Handle<JSFunction> function,
10328 Handle<Object> value) { 10323 Handle<Object> value) {
10329 Isolate* isolate = function->GetIsolate(); 10324 Isolate* isolate = function->GetIsolate();
10330 10325
10331 DCHECK(value->IsJSReceiver()); 10326 DCHECK(value->IsJSReceiver());
10332 10327
(...skipping 14 matching lines...) Expand all
10347 initial_map->instance_type() == JS_OBJECT_TYPE) { 10342 initial_map->instance_type() == JS_OBJECT_TYPE) {
10348 // Put the value in the initial map field until an initial map is needed. 10343 // Put the value in the initial map field until an initial map is needed.
10349 // At that point, a new initial map is created and the prototype is put 10344 // At that point, a new initial map is created and the prototype is put
10350 // into the initial map where it belongs. 10345 // into the initial map where it belongs.
10351 function->set_prototype_or_initial_map(*value); 10346 function->set_prototype_or_initial_map(*value);
10352 } else { 10347 } else {
10353 Handle<Map> new_map = Map::Copy(initial_map, "SetInstancePrototype"); 10348 Handle<Map> new_map = Map::Copy(initial_map, "SetInstancePrototype");
10354 JSFunction::SetInitialMap(function, new_map, value); 10349 JSFunction::SetInitialMap(function, new_map, value);
10355 10350
10356 // If the function is used as the global Array function, cache the 10351 // If the function is used as the global Array function, cache the
10357 // updated initial maps (and transitioned versions) in the native context. 10352 // initial map (and transitioned versions) in the native context.
10358 Context* native_context = function->context()->native_context(); 10353 Context* native_context = function->context()->native_context();
10359 Object* array_function = 10354 Object* array_function =
10360 native_context->get(Context::ARRAY_FUNCTION_INDEX); 10355 native_context->get(Context::ARRAY_FUNCTION_INDEX);
10361 if (array_function->IsJSFunction() && 10356 if (array_function->IsJSFunction() &&
10362 *function == JSFunction::cast(array_function)) { 10357 *function == JSFunction::cast(array_function)) {
10363 CacheInitialJSArrayMaps(handle(native_context, isolate), new_map); 10358 CacheInitialJSArrayMaps(handle(native_context, isolate), new_map);
10364 Handle<Map> new_strong_map =
10365 Map::Copy(initial_map, "SetInstancePrototype");
10366 new_strong_map->set_is_strong(true);
10367 CacheInitialJSArrayMaps(handle(native_context, isolate),
10368 new_strong_map);
10369 } 10359 }
10370 } 10360 }
10371 10361
10372 // Deoptimize all code that embeds the previous initial map. 10362 // Deoptimize all code that embeds the previous initial map.
10373 initial_map->dependent_code()->DeoptimizeDependentCodeGroup( 10363 initial_map->dependent_code()->DeoptimizeDependentCodeGroup(
10374 isolate, DependentCode::kInitialMapChangedGroup); 10364 isolate, DependentCode::kInitialMapChangedGroup);
10375 } else { 10365 } else {
10376 // Put the value in the initial map field until an initial map is 10366 // Put the value in the initial map field until an initial map is
10377 // needed. At that point, a new initial map is created and the 10367 // needed. At that point, a new initial map is created and the
10378 // prototype is put into the initial map where it belongs. 10368 // prototype is put into the initial map where it belongs.
(...skipping 6877 matching lines...) Expand 10 before | Expand all | Expand 10 after
17256 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, 17246 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell,
17257 Handle<Object> new_value) { 17247 Handle<Object> new_value) {
17258 if (cell->value() != *new_value) { 17248 if (cell->value() != *new_value) {
17259 cell->set_value(*new_value); 17249 cell->set_value(*new_value);
17260 Isolate* isolate = cell->GetIsolate(); 17250 Isolate* isolate = cell->GetIsolate();
17261 cell->dependent_code()->DeoptimizeDependentCodeGroup( 17251 cell->dependent_code()->DeoptimizeDependentCodeGroup(
17262 isolate, DependentCode::kPropertyCellChangedGroup); 17252 isolate, DependentCode::kPropertyCellChangedGroup);
17263 } 17253 }
17264 } 17254 }
17265 } } // namespace v8::internal 17255 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698