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

Side by Side Diff: src/objects.cc

Issue 11118018: Enable --verify-heap in release mode (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 2 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/objects.h ('k') | src/objects-debug.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 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 2148 matching lines...) Expand 10 before | Expand all | Expand 10 after
2159 ASSERT(elms->map() != HEAP->fixed_cow_array_map()); 2159 ASSERT(elms->map() != HEAP->fixed_cow_array_map());
2160 // For now this trick is only applied to fixed arrays in new and paged space. 2160 // For now this trick is only applied to fixed arrays in new and paged space.
2161 ASSERT(!HEAP->lo_space()->Contains(elms)); 2161 ASSERT(!HEAP->lo_space()->Contains(elms));
2162 2162
2163 const int len = elms->length(); 2163 const int len = elms->length();
2164 2164
2165 ASSERT(to_trim < len); 2165 ASSERT(to_trim < len);
2166 2166
2167 Address new_end = elms->address() + FixedArray::SizeFor(len - to_trim); 2167 Address new_end = elms->address() + FixedArray::SizeFor(len - to_trim);
2168 2168
2169 if (trim_mode == FROM_GC) { 2169 if (trim_mode != FROM_GC || Heap::ShouldZapGarbage()) {
2170 #ifdef DEBUG 2170 ZapEndOfFixedArray(new_end, to_trim);
2171 ZapEndOfFixedArray(new_end, to_trim);
2172 #endif
2173 } else {
2174 ZapEndOfFixedArray(new_end, to_trim);
2175 } 2171 }
2176 2172
2177 int size_delta = to_trim * kPointerSize; 2173 int size_delta = to_trim * kPointerSize;
2178 2174
2179 // Technically in new space this write might be omitted (except for 2175 // Technically in new space this write might be omitted (except for
2180 // debug mode which iterates through the heap), but to play safer 2176 // debug mode which iterates through the heap), but to play safer
2181 // we still do it. 2177 // we still do it.
2182 heap->CreateFillerObjectAt(new_end, size_delta); 2178 heap->CreateFillerObjectAt(new_end, size_delta);
2183 2179
2184 elms->set_length(len - to_trim); 2180 elms->set_length(len - to_trim);
(...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
3210 3206
3211 3207
3212 MaybeObject* NormalizedMapCache::Get(JSObject* obj, 3208 MaybeObject* NormalizedMapCache::Get(JSObject* obj,
3213 PropertyNormalizationMode mode) { 3209 PropertyNormalizationMode mode) {
3214 Isolate* isolate = obj->GetIsolate(); 3210 Isolate* isolate = obj->GetIsolate();
3215 Map* fast = obj->map(); 3211 Map* fast = obj->map();
3216 int index = fast->Hash() % kEntries; 3212 int index = fast->Hash() % kEntries;
3217 Object* result = get(index); 3213 Object* result = get(index);
3218 if (result->IsMap() && 3214 if (result->IsMap() &&
3219 Map::cast(result)->EquivalentToForNormalization(fast, mode)) { 3215 Map::cast(result)->EquivalentToForNormalization(fast, mode)) {
3220 #ifdef DEBUG 3216 #ifdef VERIFY_HEAP
3221 if (FLAG_verify_heap) { 3217 if (FLAG_verify_heap) {
3222 Map::cast(result)->SharedMapVerify(); 3218 Map::cast(result)->SharedMapVerify();
3223 } 3219 }
3220 #endif
3221 #ifdef DEBUG
3224 if (FLAG_enable_slow_asserts) { 3222 if (FLAG_enable_slow_asserts) {
3225 // The cached map should match newly created normalized map bit-by-bit, 3223 // The cached map should match newly created normalized map bit-by-bit,
3226 // except for the code cache, which can contain some ics which can be 3224 // except for the code cache, which can contain some ics which can be
3227 // applied to the shared map. 3225 // applied to the shared map.
3228 Object* fresh; 3226 Object* fresh;
3229 MaybeObject* maybe_fresh = 3227 MaybeObject* maybe_fresh =
3230 fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP); 3228 fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP);
3231 if (maybe_fresh->ToObject(&fresh)) { 3229 if (maybe_fresh->ToObject(&fresh)) {
3232 ASSERT(memcmp(Map::cast(fresh)->address(), 3230 ASSERT(memcmp(Map::cast(fresh)->address(),
3233 Map::cast(result)->address(), 3231 Map::cast(result)->address(),
(...skipping 1695 matching lines...) Expand 10 before | Expand all | Expand 10 after
4929 if (!maybe_result->To(&result)) return maybe_result; 4927 if (!maybe_result->To(&result)) return maybe_result;
4930 4928
4931 if (mode != CLEAR_INOBJECT_PROPERTIES) { 4929 if (mode != CLEAR_INOBJECT_PROPERTIES) {
4932 result->set_inobject_properties(inobject_properties()); 4930 result->set_inobject_properties(inobject_properties());
4933 } 4931 }
4934 4932
4935 result->set_code_cache(code_cache()); 4933 result->set_code_cache(code_cache());
4936 result->set_is_shared(sharing == SHARED_NORMALIZED_MAP); 4934 result->set_is_shared(sharing == SHARED_NORMALIZED_MAP);
4937 result->set_dictionary_map(true); 4935 result->set_dictionary_map(true);
4938 4936
4939 #ifdef DEBUG 4937 #ifdef VERIFY_HEAP
4940 if (FLAG_verify_heap && result->is_shared()) { 4938 if (FLAG_verify_heap && result->is_shared()) {
4941 result->SharedMapVerify(); 4939 result->SharedMapVerify();
4942 } 4940 }
4943 #endif 4941 #endif
4944 4942
4945 return result; 4943 return result;
4946 } 4944 }
4947 4945
4948 4946
4949 MaybeObject* Map::CopyDropDescriptors() { 4947 MaybeObject* Map::CopyDropDescriptors() {
(...skipping 4089 matching lines...) Expand 10 before | Expand all | Expand 10 after
9039 int last = transitions - 1; 9037 int last = transitions - 1;
9040 9038
9041 cache->set(header + last * step + kProtoTransitionPrototypeOffset, prototype); 9039 cache->set(header + last * step + kProtoTransitionPrototypeOffset, prototype);
9042 cache->set(header + last * step + kProtoTransitionMapOffset, map); 9040 cache->set(header + last * step + kProtoTransitionMapOffset, map);
9043 SetNumberOfProtoTransitions(transitions); 9041 SetNumberOfProtoTransitions(transitions);
9044 9042
9045 return cache; 9043 return cache;
9046 } 9044 }
9047 9045
9048 9046
9047 void Map::ZapTransitions() {
9048 TransitionArray* transition_array = transitions();
9049 MemsetPointer(transition_array->data_start(),
9050 GetHeap()->the_hole_value(),
9051 transition_array->length());
9052 }
9053
9054
9055 void Map::ZapPrototypeTransitions() {
9056 FixedArray* proto_transitions = GetPrototypeTransitions();
9057 MemsetPointer(proto_transitions->data_start(),
9058 GetHeap()->the_hole_value(),
9059 proto_transitions->length());
9060 }
9061
9062
9049 MaybeObject* JSReceiver::SetPrototype(Object* value, 9063 MaybeObject* JSReceiver::SetPrototype(Object* value,
9050 bool skip_hidden_prototypes) { 9064 bool skip_hidden_prototypes) {
9051 #ifdef DEBUG 9065 #ifdef DEBUG
9052 int size = Size(); 9066 int size = Size();
9053 #endif 9067 #endif
9054 9068
9055 Heap* heap = GetHeap(); 9069 Heap* heap = GetHeap();
9056 // Silently ignore the change if value is not a JSObject or null. 9070 // Silently ignore the change if value is not a JSObject or null.
9057 // SpiderMonkey behaves this way. 9071 // SpiderMonkey behaves this way.
9058 if (!value->IsJSReceiver() && !value->IsNull()) return value; 9072 if (!value->IsJSReceiver() && !value->IsNull()) return value;
(...skipping 4450 matching lines...) Expand 10 before | Expand all | Expand 10 after
13509 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); 13523 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER);
13510 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); 13524 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER);
13511 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); 13525 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER);
13512 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); 13526 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER);
13513 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); 13527 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER);
13514 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); 13528 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER);
13515 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); 13529 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER);
13516 } 13530 }
13517 13531
13518 } } // namespace v8::internal 13532 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698