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

Side by Side Diff: src/heap.cc

Issue 358363003: Only create arguments-maps in the bootstrapper, remove now obsolete ValueType flag. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 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 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/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/once.h" 9 #include "src/base/once.h"
10 #include "src/base/utils/random-number-generator.h" 10 #include "src/base/utils/random-number-generator.h"
(...skipping 3531 matching lines...) Expand 10 before | Expand all | Expand 10 after
3542 result->set_map_no_write_barrier(map); 3542 result->set_map_no_write_barrier(map);
3543 if (allocation_site != NULL) { 3543 if (allocation_site != NULL) {
3544 AllocationMemento* alloc_memento = reinterpret_cast<AllocationMemento*>( 3544 AllocationMemento* alloc_memento = reinterpret_cast<AllocationMemento*>(
3545 reinterpret_cast<Address>(result) + map->instance_size()); 3545 reinterpret_cast<Address>(result) + map->instance_size());
3546 InitializeAllocationMemento(alloc_memento, allocation_site); 3546 InitializeAllocationMemento(alloc_memento, allocation_site);
3547 } 3547 }
3548 return result; 3548 return result;
3549 } 3549 }
3550 3550
3551 3551
3552 AllocationResult Heap::AllocateArgumentsObject(Object* callee, int length) {
3553 // To get fast allocation and map sharing for arguments objects we
3554 // allocate them based on an arguments boilerplate.
3555
3556 JSObject* boilerplate;
3557 int arguments_object_size;
3558 bool strict_mode_callee = callee->IsJSFunction() &&
3559 JSFunction::cast(callee)->shared()->strict_mode() == STRICT;
3560 if (strict_mode_callee) {
3561 boilerplate =
3562 isolate()->context()->native_context()->strict_arguments_boilerplate();
3563 arguments_object_size = kStrictArgumentsObjectSize;
3564 } else {
3565 boilerplate =
3566 isolate()->context()->native_context()->sloppy_arguments_boilerplate();
3567 arguments_object_size = kSloppyArgumentsObjectSize;
3568 }
3569
3570 // Check that the size of the boilerplate matches our
3571 // expectations. The ArgumentsAccessStub::GenerateNewObject relies
3572 // on the size being a known constant.
3573 ASSERT(arguments_object_size == boilerplate->map()->instance_size());
3574
3575 // Do the allocation.
3576 HeapObject* result;
3577 { AllocationResult allocation =
3578 AllocateRaw(arguments_object_size, NEW_SPACE, OLD_POINTER_SPACE);
3579 if (!allocation.To(&result)) return allocation;
3580 }
3581
3582 // Copy the content. The arguments boilerplate doesn't have any
3583 // fields that point to new space so it's safe to skip the write
3584 // barrier here.
3585 CopyBlock(result->address(), boilerplate->address(), JSObject::kHeaderSize);
3586
3587 // Set the length property.
3588 JSObject* js_obj = JSObject::cast(result);
3589 js_obj->InObjectPropertyAtPut(
3590 kArgumentsLengthIndex, Smi::FromInt(length), SKIP_WRITE_BARRIER);
3591 // Set the callee property for sloppy mode arguments object only.
3592 if (!strict_mode_callee) {
3593 js_obj->InObjectPropertyAtPut(kArgumentsCalleeIndex, callee);
3594 }
3595
3596 // Check the state of the object
3597 ASSERT(js_obj->HasFastProperties());
3598 ASSERT(js_obj->HasFastObjectElements());
3599
3600 return js_obj;
3601 }
3602
3603
3604 void Heap::InitializeJSObjectFromMap(JSObject* obj, 3552 void Heap::InitializeJSObjectFromMap(JSObject* obj,
3605 FixedArray* properties, 3553 FixedArray* properties,
3606 Map* map) { 3554 Map* map) {
3607 obj->set_properties(properties); 3555 obj->set_properties(properties);
3608 obj->initialize_elements(); 3556 obj->initialize_elements();
3609 // TODO(1240798): Initialize the object's body using valid initial values 3557 // TODO(1240798): Initialize the object's body using valid initial values
3610 // according to the object's initial map. For example, if the map's 3558 // according to the object's initial map. For example, if the map's
3611 // instance type is JS_ARRAY_TYPE, the length field should be initialized 3559 // instance type is JS_ARRAY_TYPE, the length field should be initialized
3612 // to a number (e.g. Smi::FromInt(0)) and the elements initialized to a 3560 // to a number (e.g. Smi::FromInt(0)) and the elements initialized to a
3613 // fixed array (e.g. Heap::empty_fixed_array()). Currently, the object 3561 // fixed array (e.g. Heap::empty_fixed_array()). Currently, the object
(...skipping 2829 matching lines...) Expand 10 before | Expand all | Expand 10 after
6443 static_cast<int>(object_sizes_last_time_[index])); 6391 static_cast<int>(object_sizes_last_time_[index]));
6444 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) 6392 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT)
6445 #undef ADJUST_LAST_TIME_OBJECT_COUNT 6393 #undef ADJUST_LAST_TIME_OBJECT_COUNT
6446 6394
6447 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); 6395 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_));
6448 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); 6396 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_));
6449 ClearObjectStats(); 6397 ClearObjectStats();
6450 } 6398 }
6451 6399
6452 } } // namespace v8::internal 6400 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698