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

Side by Side Diff: src/heap.cc

Issue 35413006: Correct handling of arrays with callbacks in the prototype chain. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Test fixes Created 7 years, 1 month 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/heap.h ('k') | src/hydrogen.cc » ('j') | src/ia32/ic-ia32.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 intptr_t Heap::SizeOfObjects() { 460 intptr_t Heap::SizeOfObjects() {
461 intptr_t total = 0; 461 intptr_t total = 0;
462 AllSpaces spaces(this); 462 AllSpaces spaces(this);
463 for (Space* space = spaces.next(); space != NULL; space = spaces.next()) { 463 for (Space* space = spaces.next(); space != NULL; space = spaces.next()) {
464 total += space->SizeOfObjects(); 464 total += space->SizeOfObjects();
465 } 465 }
466 return total; 466 return total;
467 } 467 }
468 468
469 469
470 void Heap::ClearAllICsByKind(Code::Kind kind) {
471 HeapObjectIterator it(code_space());
472
473 for (Object* object = it.Next(); object != NULL; object = it.Next()) {
474 Code* code = Code::cast(object);
475 Code::Kind current_kind = code->kind();
476 // TODO(mvstanton): are these kinds enough?
477 if (current_kind == Code::FUNCTION ||
478 current_kind == Code::OPTIMIZED_FUNCTION) {
479 code->ClearInlineCaches(kind);
480 }
481 }
482 }
483
484
470 void Heap::RepairFreeListsAfterBoot() { 485 void Heap::RepairFreeListsAfterBoot() {
471 PagedSpaces spaces(this); 486 PagedSpaces spaces(this);
472 for (PagedSpace* space = spaces.next(); 487 for (PagedSpace* space = spaces.next();
473 space != NULL; 488 space != NULL;
474 space = spaces.next()) { 489 space = spaces.next()) {
475 space->RepairFreeListsAfterBoot(); 490 space->RepairFreeListsAfterBoot();
476 } 491 }
477 } 492 }
478 493
479 494
(...skipping 1966 matching lines...) Expand 10 before | Expand all | Expand 10 after
2446 reinterpret_cast<Map*>(result)->set_visitor_id( 2461 reinterpret_cast<Map*>(result)->set_visitor_id(
2447 StaticVisitorBase::GetVisitorId(instance_type, instance_size)); 2462 StaticVisitorBase::GetVisitorId(instance_type, instance_size));
2448 reinterpret_cast<Map*>(result)->set_inobject_properties(0); 2463 reinterpret_cast<Map*>(result)->set_inobject_properties(0);
2449 reinterpret_cast<Map*>(result)->set_pre_allocated_property_fields(0); 2464 reinterpret_cast<Map*>(result)->set_pre_allocated_property_fields(0);
2450 reinterpret_cast<Map*>(result)->set_unused_property_fields(0); 2465 reinterpret_cast<Map*>(result)->set_unused_property_fields(0);
2451 reinterpret_cast<Map*>(result)->set_bit_field(0); 2466 reinterpret_cast<Map*>(result)->set_bit_field(0);
2452 reinterpret_cast<Map*>(result)->set_bit_field2(0); 2467 reinterpret_cast<Map*>(result)->set_bit_field2(0);
2453 int bit_field3 = Map::EnumLengthBits::encode(Map::kInvalidEnumCache) | 2468 int bit_field3 = Map::EnumLengthBits::encode(Map::kInvalidEnumCache) |
2454 Map::OwnsDescriptors::encode(true); 2469 Map::OwnsDescriptors::encode(true);
2455 reinterpret_cast<Map*>(result)->set_bit_field3(bit_field3); 2470 reinterpret_cast<Map*>(result)->set_bit_field3(bit_field3);
2471 reinterpret_cast<Map*>(result)->set_bit_field4(0);
2456 return result; 2472 return result;
2457 } 2473 }
2458 2474
2459 2475
2460 MaybeObject* Heap::AllocateMap(InstanceType instance_type, 2476 MaybeObject* Heap::AllocateMap(InstanceType instance_type,
2461 int instance_size, 2477 int instance_size,
2462 ElementsKind elements_kind) { 2478 ElementsKind elements_kind) {
2463 Object* result; 2479 Object* result;
2464 MaybeObject* maybe_result = AllocateRaw(Map::kSize, MAP_SPACE, MAP_SPACE); 2480 MaybeObject* maybe_result = AllocateRaw(Map::kSize, MAP_SPACE, MAP_SPACE);
2465 if (!maybe_result->To(&result)) return maybe_result; 2481 if (!maybe_result->To(&result)) return maybe_result;
(...skipping 13 matching lines...) Expand all
2479 SKIP_WRITE_BARRIER); 2495 SKIP_WRITE_BARRIER);
2480 map->init_back_pointer(undefined_value()); 2496 map->init_back_pointer(undefined_value());
2481 map->set_unused_property_fields(0); 2497 map->set_unused_property_fields(0);
2482 map->set_instance_descriptors(empty_descriptor_array()); 2498 map->set_instance_descriptors(empty_descriptor_array());
2483 map->set_bit_field(0); 2499 map->set_bit_field(0);
2484 map->set_bit_field2(1 << Map::kIsExtensible); 2500 map->set_bit_field2(1 << Map::kIsExtensible);
2485 int bit_field3 = Map::EnumLengthBits::encode(Map::kInvalidEnumCache) | 2501 int bit_field3 = Map::EnumLengthBits::encode(Map::kInvalidEnumCache) |
2486 Map::OwnsDescriptors::encode(true); 2502 Map::OwnsDescriptors::encode(true);
2487 map->set_bit_field3(bit_field3); 2503 map->set_bit_field3(bit_field3);
2488 map->set_elements_kind(elements_kind); 2504 map->set_elements_kind(elements_kind);
2505 map->set_bit_field4(0);
2489 2506
2490 return map; 2507 return map;
2491 } 2508 }
2492 2509
2493 2510
2494 MaybeObject* Heap::AllocateCodeCache() { 2511 MaybeObject* Heap::AllocateCodeCache() {
2495 CodeCache* code_cache; 2512 CodeCache* code_cache;
2496 { MaybeObject* maybe_code_cache = AllocateStruct(CODE_CACHE_TYPE); 2513 { MaybeObject* maybe_code_cache = AllocateStruct(CODE_CACHE_TYPE);
2497 if (!maybe_code_cache->To(&code_cache)) return maybe_code_cache; 2514 if (!maybe_code_cache->To(&code_cache)) return maybe_code_cache;
2498 } 2515 }
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
3282 { MaybeObject* maybe_obj = AllocateSymbol(); 3299 { MaybeObject* maybe_obj = AllocateSymbol();
3283 if (!maybe_obj->ToObject(&obj)) return false; 3300 if (!maybe_obj->ToObject(&obj)) return false;
3284 } 3301 }
3285 set_frozen_symbol(Symbol::cast(obj)); 3302 set_frozen_symbol(Symbol::cast(obj));
3286 3303
3287 { MaybeObject* maybe_obj = AllocateSymbol(); 3304 { MaybeObject* maybe_obj = AllocateSymbol();
3288 if (!maybe_obj->ToObject(&obj)) return false; 3305 if (!maybe_obj->ToObject(&obj)) return false;
3289 } 3306 }
3290 set_elements_transition_symbol(Symbol::cast(obj)); 3307 set_elements_transition_symbol(Symbol::cast(obj));
3291 3308
3309 { MaybeObject* maybe_obj = AllocateSymbol();
3310 if (!maybe_obj->ToObject(&obj)) return false;
3311 }
3312 set_element_callbacks_symbol(Symbol::cast(obj));
3313
3292 { MaybeObject* maybe_obj = SeededNumberDictionary::Allocate(this, 0, TENURED); 3314 { MaybeObject* maybe_obj = SeededNumberDictionary::Allocate(this, 0, TENURED);
3293 if (!maybe_obj->ToObject(&obj)) return false; 3315 if (!maybe_obj->ToObject(&obj)) return false;
3294 } 3316 }
3295 SeededNumberDictionary::cast(obj)->set_requires_slow_elements(); 3317 SeededNumberDictionary::cast(obj)->set_requires_slow_elements();
3296 set_empty_slow_element_dictionary(SeededNumberDictionary::cast(obj)); 3318 set_empty_slow_element_dictionary(SeededNumberDictionary::cast(obj));
3297 3319
3298 { MaybeObject* maybe_obj = AllocateSymbol(); 3320 { MaybeObject* maybe_obj = AllocateSymbol();
3299 if (!maybe_obj->ToObject(&obj)) return false; 3321 if (!maybe_obj->ToObject(&obj)) return false;
3300 } 3322 }
3301 set_observed_symbol(Symbol::cast(obj)); 3323 set_observed_symbol(Symbol::cast(obj));
(...skipping 4665 matching lines...) Expand 10 before | Expand all | Expand 10 after
7967 if (FLAG_concurrent_recompilation) { 7989 if (FLAG_concurrent_recompilation) {
7968 heap_->relocation_mutex_->Lock(); 7990 heap_->relocation_mutex_->Lock();
7969 #ifdef DEBUG 7991 #ifdef DEBUG
7970 heap_->relocation_mutex_locked_by_optimizer_thread_ = 7992 heap_->relocation_mutex_locked_by_optimizer_thread_ =
7971 heap_->isolate()->optimizing_compiler_thread()->IsOptimizerThread(); 7993 heap_->isolate()->optimizing_compiler_thread()->IsOptimizerThread();
7972 #endif // DEBUG 7994 #endif // DEBUG
7973 } 7995 }
7974 } 7996 }
7975 7997
7976 } } // namespace v8::internal 7998 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap.h ('k') | src/hydrogen.cc » ('j') | src/ia32/ic-ia32.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698