| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/scavenger.h" | 5 #include "vm/scavenger.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 ASSERT(!in_scavenge_pointer_); | 148 ASSERT(!in_scavenge_pointer_); |
| 149 BoolScope bs(&in_scavenge_pointer_, true); | 149 BoolScope bs(&in_scavenge_pointer_, true); |
| 150 #endif | 150 #endif |
| 151 | 151 |
| 152 RawObject* raw_obj = *p; | 152 RawObject* raw_obj = *p; |
| 153 | 153 |
| 154 if (raw_obj->IsSmiOrOldObject()) { | 154 if (raw_obj->IsSmiOrOldObject()) { |
| 155 return; | 155 return; |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Objects should be contained in the heap. | |
| 159 // TODO(iposva): Add an appropriate assert here or in the return block | |
| 160 // below. | |
| 161 | |
| 162 // The scavenger is only interested in objects located in the from space. | 158 // The scavenger is only interested in objects located in the from space. |
| 163 // | 159 // |
| 164 // We are using address math here and relying on the unsigned underflow | 160 // We are using address math here and relying on the unsigned underflow |
| 165 // in the code below to avoid having two checks. | 161 // in the code below to avoid having two checks. |
| 166 uword obj_offset = reinterpret_cast<uword>(raw_obj) - from_start_; | 162 uword obj_offset = reinterpret_cast<uword>(raw_obj) - from_start_; |
| 167 if (obj_offset > from_size_) { | 163 if (obj_offset > from_size_) { |
| 164 ASSERT(scavenger_->to_->Contains(RawObject::ToAddr(raw_obj))); |
| 168 return; | 165 return; |
| 169 } | 166 } |
| 170 | 167 |
| 171 uword raw_addr = RawObject::ToAddr(raw_obj); | 168 uword raw_addr = RawObject::ToAddr(raw_obj); |
| 172 // Read the header word of the object and determine if the object has | 169 // Read the header word of the object and determine if the object has |
| 173 // already been copied. | 170 // already been copied. |
| 174 uword header = *reinterpret_cast<uword*>(raw_addr); | 171 uword header = *reinterpret_cast<uword*>(raw_addr); |
| 175 uword new_addr = 0; | 172 uword new_addr = 0; |
| 176 if (IsForwarding(header)) { | 173 if (IsForwarding(header)) { |
| 177 // Get the new location of the object. | 174 // Get the new location of the object. |
| (...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 } | 900 } |
| 904 | 901 |
| 905 | 902 |
| 906 void Scavenger::FreeExternal(intptr_t size) { | 903 void Scavenger::FreeExternal(intptr_t size) { |
| 907 ASSERT(size >= 0); | 904 ASSERT(size >= 0); |
| 908 external_size_ -= size; | 905 external_size_ -= size; |
| 909 ASSERT(external_size_ >= 0); | 906 ASSERT(external_size_ >= 0); |
| 910 } | 907 } |
| 911 | 908 |
| 912 } // namespace dart | 909 } // namespace dart |
| OLD | NEW |