| Index: runtime/vm/intermediate_language.cc
|
| diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
|
| index 3a1c8c54eef914a2c09fabe76006286fa6357a12..aab31326e6955b50be39bc87d61539ba2530c1f4 100644
|
| --- a/runtime/vm/intermediate_language.cc
|
| +++ b/runtime/vm/intermediate_language.cc
|
| @@ -20,6 +20,45 @@ namespace dart {
|
|
|
| DECLARE_FLAG(bool, enable_type_checks);
|
|
|
| +UseVal::UseVal(Definition* definition)
|
| + : definition_(definition), next_use_(NULL), previous_use_(NULL) {
|
| + AddToDefUseChain();
|
| +}
|
| +
|
| +void UseVal::set_definition(Definition* definition) {
|
| + ASSERT(definition != NULL);
|
| + RemoveFromDefUseChain();
|
| + definition_ = definition;
|
| + AddToDefUseChain();
|
| +}
|
| +
|
| +void UseVal::RemoveFromDefUseChain() {
|
| + ASSERT(definition_ != NULL);
|
| + if (previous_use_ == NULL) {
|
| + ASSERT(definition_->def_use_chain() == this);
|
| + definition_->set_def_use_chain(next_use_);
|
| + } else {
|
| + previous_use_->next_use_ = next_use_;
|
| + }
|
| + if (next_use_ != NULL) {
|
| + next_use_->previous_use_ = previous_use_;
|
| + }
|
| + previous_use_ = next_use_ = NULL;
|
| + definition_ = NULL;
|
| +}
|
| +
|
| +void UseVal::AddToDefUseChain() {
|
| + ASSERT(next_use_ == NULL && previous_use_ == NULL && definition_ != NULL);
|
| + UseVal* chain = definition_->def_use_chain();
|
| + if (chain != NULL) {
|
| + next_use_ = chain;
|
| + chain->previous_use_ = this;
|
| + }
|
| + definition_->set_def_use_chain(this);
|
| +}
|
| +
|
| +
|
| +
|
|
|
| MethodRecognizer::Kind MethodRecognizer::RecognizeKind(
|
| const Function& function) {
|
|
|