Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 3261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3272 | 3272 |
| 3273 // Allocate the proxy object. | 3273 // Allocate the proxy object. |
| 3274 Object* result; | 3274 Object* result; |
| 3275 MaybeObject* maybe_result = Allocate(map, NEW_SPACE); | 3275 MaybeObject* maybe_result = Allocate(map, NEW_SPACE); |
| 3276 if (!maybe_result->ToObject(&result)) return maybe_result; | 3276 if (!maybe_result->ToObject(&result)) return maybe_result; |
| 3277 JSProxy::cast(result)->set_handler(handler); | 3277 JSProxy::cast(result)->set_handler(handler); |
| 3278 return result; | 3278 return result; |
| 3279 } | 3279 } |
| 3280 | 3280 |
| 3281 | 3281 |
| 3282 MaybeObject* Heap::AllocateGlobalObject(JSFunction* constructor) { | 3282 MaybeObject* Heap::AllocateGlobalObject(JSFunction* constructor) { |
|
Mads Ager (chromium)
2011/07/17 10:43:47
Accidental edit. :-)
rossberg
2011/07/18 10:53:53
Done.
| |
| 3283 ASSERT(constructor->has_initial_map()); | 3283 ASSERT(constructor->has_initial_map()); |
| 3284 Map* map = constructor->initial_map(); | 3284 Map* map = constructor->initial_map(); |
| 3285 | 3285 |
| 3286 // Make sure no field properties are described in the initial map. | 3286 // Make sure no field properties are described in the initial map. |
| 3287 // This guarantees us that normalizing the properties does not | 3287 // This guarantees us that normalizing the properties does not |
| 3288 // require us to change property values to JSGlobalPropertyCells. | 3288 // require us to change property values to JSGlobalPropertyCells. |
| 3289 ASSERT(map->NextFreePropertyIndex() == 0); | 3289 ASSERT(map->NextFreePropertyIndex() == 0); |
| 3290 | 3290 |
| 3291 // Make sure we don't have a ton of pre-allocated slots in the | 3291 // Make sure we don't have a ton of pre-allocated slots in the |
| 3292 // global objects. They will be unused once we normalize the object. | 3292 // global objects. They will be unused once we normalize the object. |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3407 { MaybeObject* maybe_prop = CopyFixedArray(properties); | 3407 { MaybeObject* maybe_prop = CopyFixedArray(properties); |
| 3408 if (!maybe_prop->ToObject(&prop)) return maybe_prop; | 3408 if (!maybe_prop->ToObject(&prop)) return maybe_prop; |
| 3409 } | 3409 } |
| 3410 JSObject::cast(clone)->set_properties(FixedArray::cast(prop)); | 3410 JSObject::cast(clone)->set_properties(FixedArray::cast(prop)); |
| 3411 } | 3411 } |
| 3412 // Return the new clone. | 3412 // Return the new clone. |
| 3413 return clone; | 3413 return clone; |
| 3414 } | 3414 } |
| 3415 | 3415 |
| 3416 | 3416 |
| 3417 MaybeObject* Heap::ReinitializeJSReceiverAsJSObject(JSReceiver* object) { | |
| 3418 // Allocate fresh map. | |
| 3419 // TODO(rossberg): Once we optimize proxies, cache these maps. | |
| 3420 Map* map; | |
| 3421 MaybeObject* maybe_map_obj = | |
| 3422 AllocateMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); | |
| 3423 if (!maybe_map_obj->To<Map>(&map)) return maybe_map_obj; | |
| 3424 | |
| 3425 // Check that the receiver has the same size as a fresh object. | |
| 3426 ASSERT(map->instance_size() == object->map()->instance_size()); | |
| 3427 | |
| 3428 map->set_prototype(object->map()->prototype()); | |
| 3429 | |
| 3430 // Allocate the backing storage for the properties. | |
| 3431 int prop_size = map->unused_property_fields() - map->inobject_properties(); | |
| 3432 Object* properties; | |
| 3433 { MaybeObject* maybe_properties = AllocateFixedArray(prop_size, TENURED); | |
| 3434 if (!maybe_properties->ToObject(&properties)) return maybe_properties; | |
| 3435 } | |
| 3436 | |
| 3437 // Reset the map for the object. | |
| 3438 object->set_map(map); | |
| 3439 | |
| 3440 // Reinitialize the object from the constructor map. | |
| 3441 InitializeJSObjectFromMap(JSObject::cast(object), | |
| 3442 FixedArray::cast(properties), map); | |
| 3443 return object; | |
| 3444 } | |
| 3445 | |
| 3446 | |
| 3417 MaybeObject* Heap::ReinitializeJSGlobalProxy(JSFunction* constructor, | 3447 MaybeObject* Heap::ReinitializeJSGlobalProxy(JSFunction* constructor, |
| 3418 JSGlobalProxy* object) { | 3448 JSGlobalProxy* object) { |
| 3419 ASSERT(constructor->has_initial_map()); | 3449 ASSERT(constructor->has_initial_map()); |
| 3420 Map* map = constructor->initial_map(); | 3450 Map* map = constructor->initial_map(); |
| 3421 | 3451 |
| 3422 // Check that the already allocated object has the same size and type as | 3452 // Check that the already allocated object has the same size and type as |
| 3423 // objects allocated using the constructor. | 3453 // objects allocated using the constructor. |
| 3424 ASSERT(map->instance_size() == object->map()->instance_size()); | 3454 ASSERT(map->instance_size() == object->map()->instance_size()); |
| 3425 ASSERT(map->instance_type() == object->map()->instance_type()); | 3455 ASSERT(map->instance_type() == object->map()->instance_type()); |
| 3426 | 3456 |
| (...skipping 2568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5995 } | 6025 } |
| 5996 | 6026 |
| 5997 | 6027 |
| 5998 void ExternalStringTable::TearDown() { | 6028 void ExternalStringTable::TearDown() { |
| 5999 new_space_strings_.Free(); | 6029 new_space_strings_.Free(); |
| 6000 old_space_strings_.Free(); | 6030 old_space_strings_.Free(); |
| 6001 } | 6031 } |
| 6002 | 6032 |
| 6003 | 6033 |
| 6004 } } // namespace v8::internal | 6034 } } // namespace v8::internal |
| OLD | NEW |