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

Side by Side Diff: src/spaces.cc

Issue 245963007: Clean up some uses of Failures and MaybeObjects. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: address comments Created 6 years, 8 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/spaces.h ('k') | src/stub-cache.h » ('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 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 987 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 MemoryChunk::UpdateHighWaterMark(allocation_info_.top()); 998 MemoryChunk::UpdateHighWaterMark(allocation_info_.top());
999 size_t size = 0; 999 size_t size = 0;
1000 PageIterator it(this); 1000 PageIterator it(this);
1001 while (it.has_next()) { 1001 while (it.has_next()) {
1002 size += it.next()->CommittedPhysicalMemory(); 1002 size += it.next()->CommittedPhysicalMemory();
1003 } 1003 }
1004 return size; 1004 return size;
1005 } 1005 }
1006 1006
1007 1007
1008 MaybeObject* PagedSpace::FindObject(Address addr) { 1008 Object* PagedSpace::FindObject(Address addr) {
1009 // Note: this function can only be called on precisely swept spaces. 1009 // Note: this function can only be called on precisely swept spaces.
1010 ASSERT(!heap()->mark_compact_collector()->in_use()); 1010 ASSERT(!heap()->mark_compact_collector()->in_use());
1011 1011
1012 if (!Contains(addr)) return Failure::Exception(); 1012 if (!Contains(addr)) return Smi::FromInt(0); // Signaling not found.
1013 1013
1014 Page* p = Page::FromAddress(addr); 1014 Page* p = Page::FromAddress(addr);
1015 HeapObjectIterator it(p, NULL); 1015 HeapObjectIterator it(p, NULL);
1016 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { 1016 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) {
1017 Address cur = obj->address(); 1017 Address cur = obj->address();
1018 Address next = cur + obj->Size(); 1018 Address next = cur + obj->Size();
1019 if ((cur <= addr) && (addr < next)) return obj; 1019 if ((cur <= addr) && (addr < next)) return obj;
1020 } 1020 }
1021 1021
1022 UNREACHABLE(); 1022 UNREACHABLE();
1023 return Failure::Exception(); 1023 return Smi::FromInt(0);
1024 } 1024 }
1025 1025
1026 1026
1027 bool PagedSpace::CanExpand() { 1027 bool PagedSpace::CanExpand() {
1028 ASSERT(max_capacity_ % AreaSize() == 0); 1028 ASSERT(max_capacity_ % AreaSize() == 0);
1029 1029
1030 if (Capacity() == max_capacity_) return false; 1030 if (Capacity() == max_capacity_) return false;
1031 1031
1032 ASSERT(Capacity() < max_capacity_); 1032 ASSERT(Capacity() < max_capacity_);
1033 1033
(...skipping 1974 matching lines...) Expand 10 before | Expand all | Expand 10 after
3008 LargePage* current = first_page_; 3008 LargePage* current = first_page_;
3009 while (current != NULL) { 3009 while (current != NULL) {
3010 size += current->CommittedPhysicalMemory(); 3010 size += current->CommittedPhysicalMemory();
3011 current = current->next_page(); 3011 current = current->next_page();
3012 } 3012 }
3013 return size; 3013 return size;
3014 } 3014 }
3015 3015
3016 3016
3017 // GC support 3017 // GC support
3018 MaybeObject* LargeObjectSpace::FindObject(Address a) { 3018 Object* LargeObjectSpace::FindObject(Address a) {
3019 LargePage* page = FindPage(a); 3019 LargePage* page = FindPage(a);
3020 if (page != NULL) { 3020 if (page != NULL) {
3021 return page->GetObject(); 3021 return page->GetObject();
3022 } 3022 }
3023 return Failure::Exception(); 3023 return Smi::FromInt(0); // Signaling not found.
3024 } 3024 }
3025 3025
3026 3026
3027 LargePage* LargeObjectSpace::FindPage(Address a) { 3027 LargePage* LargeObjectSpace::FindPage(Address a) {
3028 uintptr_t key = reinterpret_cast<uintptr_t>(a) / MemoryChunk::kAlignment; 3028 uintptr_t key = reinterpret_cast<uintptr_t>(a) / MemoryChunk::kAlignment;
3029 HashMap::Entry* e = chunk_map_.Lookup(reinterpret_cast<void*>(key), 3029 HashMap::Entry* e = chunk_map_.Lookup(reinterpret_cast<void*>(key),
3030 static_cast<uint32_t>(key), 3030 static_cast<uint32_t>(key),
3031 false); 3031 false);
3032 if (e != NULL) { 3032 if (e != NULL) {
3033 ASSERT(e->value != NULL); 3033 ASSERT(e->value != NULL);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
3094 heap()->FreeQueuedChunks(); 3094 heap()->FreeQueuedChunks();
3095 } 3095 }
3096 3096
3097 3097
3098 bool LargeObjectSpace::Contains(HeapObject* object) { 3098 bool LargeObjectSpace::Contains(HeapObject* object) {
3099 Address address = object->address(); 3099 Address address = object->address();
3100 MemoryChunk* chunk = MemoryChunk::FromAddress(address); 3100 MemoryChunk* chunk = MemoryChunk::FromAddress(address);
3101 3101
3102 bool owned = (chunk->owner() == this); 3102 bool owned = (chunk->owner() == this);
3103 3103
3104 SLOW_ASSERT(!owned || !FindObject(address)->IsFailure()); 3104 SLOW_ASSERT(!owned || FindObject(address)->IsHeapObject());
3105 3105
3106 return owned; 3106 return owned;
3107 } 3107 }
3108 3108
3109 3109
3110 #ifdef VERIFY_HEAP 3110 #ifdef VERIFY_HEAP
3111 // We do not assume that the large object iterator works, because it depends 3111 // We do not assume that the large object iterator works, because it depends
3112 // on the invariants we are checking during verification. 3112 // on the invariants we are checking during verification.
3113 void LargeObjectSpace::Verify() { 3113 void LargeObjectSpace::Verify() {
3114 for (LargePage* chunk = first_page_; 3114 for (LargePage* chunk = first_page_;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
3214 object->ShortPrint(); 3214 object->ShortPrint();
3215 PrintF("\n"); 3215 PrintF("\n");
3216 } 3216 }
3217 printf(" --------------------------------------\n"); 3217 printf(" --------------------------------------\n");
3218 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); 3218 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes());
3219 } 3219 }
3220 3220
3221 #endif // DEBUG 3221 #endif // DEBUG
3222 3222
3223 } } // namespace v8::internal 3223 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/spaces.h ('k') | src/stub-cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698