| 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]));
|
| + }
|
| }
|
|
|
|
|
|
|