anchor.diff:      _visitingRoot = false;
       var args = visitAll(ast.args, _Mode.Expression) as List<o.Expression>;
       o.Expression result;
  -    o.Expression receiver = ast.receiver.visit(this, _Mode.Expression);
  +    o.Expression receiver =
  +        ast.receiver.visit<dynamic, _Mode>(this, _Mode.Expression);
       if (identical(receiver, IMPLICIT_RECEIVER)) {
         var varExpr = _nameResolver.getLocal(ast.name);
         if (varExpr != null) {
  
positive.code:         mode,
          ast.obj
              .visit(this, _Mode.Expression)
              .key(ast.key.visit(this, _Mode.Expression)));
    }
  
    dynamic visitKeyedWrite(compiler_ast.KeyedWrite ast, _Mode mode) {
      _visitingRoot = false;
      o.Expression obj = ast.obj.visit(this, _Mode.Expression);
      o.Expression key = ast.key.visit(this, _Mode.Expression);
      o.Expression value = ast.value.visit(this, _Mode.Expression);
      return convertToStatementIfNeeded(mode, obj.key(key).set(value));
    }
  
  
negative.code:       String secondArg = compressWhitespaceFollowing(ast.strings[1]);
        if (firstArg.isEmpty && secondArg.isEmpty) {
          var args = <o.Expression>[
            ast.expressions[0].visit<dynamic, _Mode>(this, _Mode.Expression)
          ];
          return o.importExpr(Identifiers.interpolate[0]).callFn(args);
        } else {
          var args = <o.Expression>[
            o.literal(firstArg),
            ast.expressions[0].visit<dynamic, _Mode>(this, _Mode.Expression),
            o.literal(secondArg),
          ];
          return o.importExpr(Identifiers.interpolate[1]).callFn(args);
  