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

Unified Diff: runtime/vm/intermediate_language.cc

Issue 12079096: Make use lists into doubly-linked lists. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 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
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intermediate_language.cc
===================================================================
--- runtime/vm/intermediate_language.cc (revision 17923)
+++ runtime/vm/intermediate_language.cc (working copy)
@@ -627,47 +627,57 @@
void Value::AddToInputUseList() {
- set_next_use(definition()->input_use_list());
+ Value* next = definition()->input_use_list();
definition()->set_input_use_list(this);
+ set_next_use(next);
+ set_previous_use(NULL);
+ if (next != NULL) next->set_previous_use(this);
}
void Value::AddToEnvUseList() {
- set_next_use(definition()->env_use_list());
+ Value* next = definition()->env_use_list();
definition()->set_env_use_list(this);
+ set_next_use(next);
+ set_previous_use(NULL);
+ if (next != NULL) next->set_previous_use(this);
}
void Value::RemoveFromInputUseList() {
- if (definition_->input_use_list() == this) {
- definition_->set_input_use_list(next_use_);
- return;
+ Value* previous = previous_use();
+ Value* next = next_use();
+ if (previous == NULL) {
+ definition()->set_input_use_list(next);
+ } else {
+ previous->set_next_use(next);
}
-
- Value* prev = definition_->input_use_list();
- while (prev->next_use_ != this) {
- prev = prev->next_use_;
- }
- prev->next_use_ = next_use_;
- definition_ = NULL;
+ if (next != NULL) next->set_previous_use(previous);
+ set_definition(NULL);
}
void Definition::ReplaceUsesWith(Definition* other) {
ASSERT(other != NULL);
ASSERT(this != other);
- while (input_use_list_ != NULL) {
- Value* current = input_use_list_;
- input_use_list_ = input_use_list_->next_use();
+ Value* next = input_use_list();
+ while (next != NULL) {
+ Value* current = next;
+ next = current->next_use();
current->set_definition(other);
current->AddToInputUseList();
}
- while (env_use_list_ != NULL) {
- Value* current = env_use_list_;
- env_use_list_ = env_use_list_->next_use();
+
+ next = env_use_list();
+ while (next != NULL) {
+ Value* current = next;
+ next = current->next_use();
current->set_definition(other);
current->AddToEnvUseList();
}
+
+ set_input_use_list(NULL);
+ set_env_use_list(NULL);
}
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698