anchor.diff:    }
   }
   
  -class _AstToIrVisitor implements compiler_ast.AstVisitor {
  +class _AstToIrVisitor implements compiler_ast.AstVisitor<dynamic, _Mode> {
     final NameResolver _nameResolver;
     final o.Expression _implicitReceiver;
     final bool _preserveWhitespace;
  
positive.code:             .conditional(o.NULL_EXPR, receiver.callMethod(ast.name, args)));
    }
  
    dynamic visitStaticRead(compiler_ast.StaticRead ast, dynamic context) {
      _visitingRoot = false;
      _Mode mode = context;
      return convertToStatementIfNeeded(
          mode, o.importExpr(ast.id.identifier, isConst: true));
    }
  
    dynamic visitAll(List<compiler_ast.AST> asts, dynamic context) {
      _Mode mode = context;
      return asts.map((ast) => ast.visit(this, mode)).toList();
    }
  }
  
negative.code:             ast.falseExp.visit(this, _Mode.Expression)));
    }
  
    dynamic visitEmptyExpr(compiler_ast.EmptyExpr ast, _Mode mode) {
      final value = _isBoolType(_boundType)
          ? new o.LiteralExpr(true, o.BOOL_TYPE)
          : new o.LiteralExpr('', o.STRING_TYPE);
      return convertToStatementIfNeeded(mode, value);
    }
  
    dynamic visitPipe(compiler_ast.BindingPipe ast, _Mode mode) {
      _visitingRoot = false;
      var input = ast.exp.visit(this, _Mode.Expression);
      var args = visitAll(ast.args, _Mode.Expression) as List<o.Expression>;
      var value = _nameResolver.callPipe(ast.name, input, args);
      return convertToStatementIfNeeded(mode, value);
    }
  
    dynamic visitFunctionCall(compiler_ast.FunctionCall ast, _Mode mode) {
      _visitingRoot = false;
      return convertToStatementIfNeeded(
          mode,
          ast.target
  