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

Unified Diff: src/objects-inl.h

Issue 12224035: Generalize map dependent codes array to allow multiple dependency groups. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
« src/objects-debug.cc ('K') | « src/objects-debug.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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]));
+ }
}
« src/objects-debug.cc ('K') | « src/objects-debug.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698