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

Side by Side Diff: src/bootstrapper.cc

Issue 338793004: More set_map() calls replaced with MigrateToMap(). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressing comments Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « src/api.cc ('k') | src/factory.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 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/bootstrapper.h" 5 #include "src/bootstrapper.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/extensions/externalize-string-extension.h" 9 #include "src/extensions/externalize-string-extension.h"
10 #include "src/extensions/free-buffer-extension.h" 10 #include "src/extensions/free-buffer-extension.h"
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 Handle<Context> env = genesis.result(); 335 Handle<Context> env = genesis.result();
336 if (env.is_null() || !InstallExtensions(env, extensions)) { 336 if (env.is_null() || !InstallExtensions(env, extensions)) {
337 return Handle<Context>(); 337 return Handle<Context>();
338 } 338 }
339 return scope.CloseAndEscape(env); 339 return scope.CloseAndEscape(env);
340 } 340 }
341 341
342 342
343 static void SetObjectPrototype(Handle<JSObject> object, Handle<Object> proto) { 343 static void SetObjectPrototype(Handle<JSObject> object, Handle<Object> proto) {
344 // object.__proto__ = proto; 344 // object.__proto__ = proto;
345 Handle<Map> old_to_map = Handle<Map>(object->map()); 345 Handle<Map> old_map = Handle<Map>(object->map());
346 Handle<Map> new_to_map = Map::Copy(old_to_map); 346 Handle<Map> new_map = Map::Copy(old_map);
347 new_to_map->set_prototype(*proto); 347 new_map->set_prototype(*proto);
348 object->set_map(*new_to_map); 348 JSObject::MigrateToMap(object, new_map);
349 } 349 }
350 350
351 351
352 void Bootstrapper::DetachGlobal(Handle<Context> env) { 352 void Bootstrapper::DetachGlobal(Handle<Context> env) {
353 Factory* factory = env->GetIsolate()->factory(); 353 Factory* factory = env->GetIsolate()->factory();
354 Handle<JSGlobalProxy> global_proxy(JSGlobalProxy::cast(env->global_proxy())); 354 Handle<JSGlobalProxy> global_proxy(JSGlobalProxy::cast(env->global_proxy()));
355 global_proxy->set_native_context(*factory->null_value()); 355 global_proxy->set_native_context(*factory->null_value());
356 SetObjectPrototype(global_proxy, factory->null_value()); 356 SetObjectPrototype(global_proxy, factory->null_value());
357 } 357 }
358 358
(...skipping 2174 matching lines...) Expand 10 before | Expand all | Expand 10 after
2533 void Genesis::TransferObject(Handle<JSObject> from, Handle<JSObject> to) { 2533 void Genesis::TransferObject(Handle<JSObject> from, Handle<JSObject> to) {
2534 HandleScope outer(isolate()); 2534 HandleScope outer(isolate());
2535 2535
2536 ASSERT(!from->IsJSArray()); 2536 ASSERT(!from->IsJSArray());
2537 ASSERT(!to->IsJSArray()); 2537 ASSERT(!to->IsJSArray());
2538 2538
2539 TransferNamedProperties(from, to); 2539 TransferNamedProperties(from, to);
2540 TransferIndexedProperties(from, to); 2540 TransferIndexedProperties(from, to);
2541 2541
2542 // Transfer the prototype (new map is needed). 2542 // Transfer the prototype (new map is needed).
2543 Handle<Map> old_to_map = Handle<Map>(to->map()); 2543 Handle<Object> proto(from->map()->prototype(), isolate());
2544 Handle<Map> new_to_map = Map::Copy(old_to_map); 2544 SetObjectPrototype(to, proto);
2545 new_to_map->set_prototype(from->map()->prototype());
2546 to->set_map(*new_to_map);
2547 } 2545 }
2548 2546
2549 2547
2550 void Genesis::MakeFunctionInstancePrototypeWritable() { 2548 void Genesis::MakeFunctionInstancePrototypeWritable() {
2551 // The maps with writable prototype are created in CreateEmptyFunction 2549 // The maps with writable prototype are created in CreateEmptyFunction
2552 // and CreateStrictModeFunctionMaps respectively. Initially the maps are 2550 // and CreateStrictModeFunctionMaps respectively. Initially the maps are
2553 // created with read-only prototype for JS builtins processing. 2551 // created with read-only prototype for JS builtins processing.
2554 ASSERT(!sloppy_function_map_writable_prototype_.is_null()); 2552 ASSERT(!sloppy_function_map_writable_prototype_.is_null());
2555 ASSERT(!strict_function_map_writable_prototype_.is_null()); 2553 ASSERT(!strict_function_map_writable_prototype_.is_null());
2556 2554
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
2742 return from + sizeof(NestingCounterType); 2740 return from + sizeof(NestingCounterType);
2743 } 2741 }
2744 2742
2745 2743
2746 // Called when the top-level V8 mutex is destroyed. 2744 // Called when the top-level V8 mutex is destroyed.
2747 void Bootstrapper::FreeThreadResources() { 2745 void Bootstrapper::FreeThreadResources() {
2748 ASSERT(!IsActive()); 2746 ASSERT(!IsActive());
2749 } 2747 }
2750 2748
2751 } } // namespace v8::internal 2749 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/api.cc ('k') | src/factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698