anchor.diff:          sideEffects, inLoop);
     }
   
  -  void updateSelectorInTree(Node node, Selector selector) {
  -    if (node.asSendSet() != null) {
  -      if (selector.isSetter() || selector.isIndexSet()) {
  -        elements.setSelector(node, selector);
  -      } else if (selector.isGetter() || selector.isIndex()) {
  -        elements.setGetterSelectorInComplexSendSet(node, selector);
  -      } else {
  -        assert(selector.isOperator());
  -        elements.setOperatorSelectorInComplexSendSet(node, selector);
  -      }
  -    } else if (node.asSend() != null) {
  -      elements.setSelector(node, selector);
  -    } else {
  -      assert(node.asForIn() != null);
  -      if (selector.asUntyped == compiler.iteratorSelector) {
  -        elements.setIteratorSelector(node, selector);
  -      } else if (selector.asUntyped == compiler.currentSelector) {
  -        elements.setCurrentSelector(node, selector);
  -      } else {
  -        assert(selector.asUntyped == compiler.moveNextSelector);
  -        elements.setMoveNextSelector(node, selector);
  -      }
  -    }
  -  }
  -
     T handleDynamicSend(Node node,
                         Selector selector,
                         T receiverType,
  
positive.code:       // We only set the type once. We don't need to re-visit the children
        // when re-analyzing the node.
        return inferrer.concreteTypes.putIfAbsent(node, () {
          T elementType = types.nonNullEmpty();
          int length = 0;
          for (Node element in node.elements.nodes) {
            length++;
            elementType = types.computeLUB(elementType, visit(element));
          }
          return types.allocateContainer(
              types.constListType,
              node,
              outermostElement,
              elementType,
              length);
        });
      } else {
  
negative.code:     } else {
        return returnTypeOfElement(element);
      }
    }
  
    void updateSelectorInTree(Element owner, Node node, Selector selector) {
      var elements = compiler.enqueuer.resolution.getCachedElements(owner);
      if (node.asSendSet() != null) {
        if (selector.isSetter() || selector.isIndexSet()) {
          elements.setSelector(node, selector);
        } else if (selector.isGetter() || selector.isIndex()) {
          elements.setGetterSelectorInComplexSendSet(node, selector);
        } else {
          assert(selector.isOperator());
          elements.setOperatorSelectorInComplexSendSet(node, selector);
        }
      } else if (node.asSend() != null) {
        elements.setSelector(node, selector);
      } else {
        assert(node.asForIn() != null);
        if (selector.asUntyped == compiler.iteratorSelector) {
          elements.setIteratorSelector(node, selector);
        } else if (selector.asUntyped == compiler.currentSelector) {
          elements.setCurrentSelector(node, selector);
        } else {
          assert(selector.asUntyped == compiler.moveNextSelector);
          elements.setMoveNextSelector(node, selector);
        }
      }
    }
  
    bool isNativeElement(Element element) {
      if (element.isNative()) return true;
      return element.isMember()
          && element.getEnclosingClass().isNative()
          && element.isField();
    }
  }
  
  