anchor.diff:  // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
   // for details. All rights reserved. Use of this source code is governed by a
   // BSD-style license that can be found in the LICENSE file.
  -library kernerl.interpreter;
  +library kernel.interpreter;
   
   import '../ast.dart';
   
  
positive.code:       // Special evaluation of print.
        var res = eval(node.arguments.positional[0], env);
        print(res.value);
        return new NullValue();
      } else {
        throw new NotImplemented('Support for statement type '
            '${node.runtimeType} is not implemented');
      }
    }
  
    Value visitNot(Not node, env) {
      return new BoolValue(!eval(node.operand, env).asBool);
    }
  
    Value visitLogicalExpression(LogicalExpression node, env) {
      if ('||' == node.operator) {
        bool left = eval(node.left, env).asBool;
        return left
            ? new BoolValue(true)
            : new BoolValue(eval(node.right, env).asBool);
      } else {
        assert('&&' == node.operator);
        bool left = eval(node.left, env).asBool;
        return !left
            ? new BoolValue(false)
            : new BoolValue(eval(node.right, env).asBool);
      }
    }
  
    Value visitConditionalExpression(ConditionalExpression node, env) {
      if (eval(node.condition, env).asBool) {
        return eval(node.then, env);
      } else {
        return eval(node.otherwise, env);
      }
    }
  
    Value visitStringConcatenation(StringConcatenation node, env) {
  
negative.code:   Value visitIntLiteral(IntLiteral node, env) => new IntValue(node.value);
    Value visitDoubleLiteral(DoubleLiteral node, env) =>
        new DoubleValue(node.value);
    Value visitBoolLiteral(BoolLiteral node, env) =>
        node.value ? Value.trueInstance : Value.falseInstance;
    Value visitNullLiteral(NullLiteral node, env) => Value.nullInstance;
  
    Value visitLet(Let node, env) {
      var value = eval(node.variable.initializer, env);
  