Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 18894c1d56123f99fe02df5967ea06ffdac8a857..209c2ade04a077b1b340251f295bbfcbdd061e12 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -3425,44 +3425,64 @@ bool Map::is_observed() { |
} |
-void Map::AddDependentCode(Handle<Code> code) { |
+void Map::AddDependentCode(DependentCodes::DependencyGroup group, |
+ Handle<Code> code) { |
Handle<DependentCodes> codes = |
- DependentCodes::Append(Handle<DependentCodes>(dependent_codes()), code); |
+ DependentCodes::Insert(Handle<DependentCodes>(dependent_codes()), |
+ group, code); |
if (*codes != dependent_codes()) { |
set_dependent_codes(*codes); |
} |
} |
-int DependentCodes::number_of_codes() { |
+int DependentCodes::number_of_codes(DependencyGroup group) { |
if (length() == 0) return 0; |
- return Smi::cast(get(kNumberOfCodesIndex))->value(); |
+ return Smi::cast(get(group))->value(); |
} |
-void DependentCodes::set_number_of_codes(int value) { |
- set(kNumberOfCodesIndex, Smi::FromInt(value)); |
+void DependentCodes::set_number_of_codes(DependencyGroup group, int value) { |
+ set(group, Smi::FromInt(value)); |
} |
Code* DependentCodes::code_at(int i) { |
- return Code::cast(get(kCodesIndex + i)); |
+ return Code::cast(get(kCodesStartIndex + i)); |
} |
void DependentCodes::set_code_at(int i, Code* value) { |
- set(kCodesIndex + i, value); |
+ set(kCodesStartIndex + i, value); |
} |
Object** DependentCodes::code_slot_at(int i) { |
return HeapObject::RawField( |
- this, FixedArray::OffsetOfElementAt(kCodesIndex + i)); |
+ this, FixedArray::OffsetOfElementAt(kCodesStartIndex + i)); |
} |
void DependentCodes::clear_code_at(int i) { |
- set_undefined(kCodesIndex + i); |
+ set_undefined(kCodesStartIndex + i); |
+} |
+ |
+ |
+void DependentCodes::ComputeGroupStartIndexes(GroupStartIndexes starts) { |
+ starts[0] = 0; |
+ for (int g = 1; g <= kGroupCount; g++) { |
+ int count = number_of_codes(static_cast<DependencyGroup>(g - 1)); |
+ starts[g] = starts[g - 1] + count; |
+ } |
+} |
+ |
+ |
+void DependentCodes::ExtendGroup(DependencyGroup group) { |
+ GroupStartIndexes starts; |
+ ComputeGroupStartIndexes(starts); |
+ for (int g = kGroupCount - 2; g > group; g--) { |
+ set_code_at(starts[g + 1], code_at(starts[g])); |
+ } |
} |