anchor.diff:  }
   
   class ReadKeyExpr extends Expression {
  -  Expression receiver;
  -  Expression index;
  +  final Expression receiver;
  +  final Expression index;
   
     ReadKeyExpr(this.receiver, this.index, [OutputType type = null])
         : super(type);
  
positive.code: }
  
  class LiteralExpr extends Expression {
    dynamic value;
    LiteralExpr(this.value, [OutputType type = null]) : super(type);
  
    dynamic visitExpression(ExpressionVisitor visitor, dynamic context) {
  
negative.code: }
  
  class MapType extends OutputType {
    final OutputType valueType;
    MapType(this.valueType, [List<TypeModifier> modifiers]) : super(modifiers);
  
    dynamic visitType(TypeVisitor visitor, dynamic context) {
      return visitor.visitMapType(this, context);
    }
  }
  
  const DYNAMIC_TYPE = const BuiltinType(BuiltinTypeName.Dynamic);
  const BOOL_TYPE = const BuiltinType(BuiltinTypeName.Bool);
  const INT_TYPE = const BuiltinType(BuiltinTypeName.Int);
  const DOUBLE_TYPE = const BuiltinType(BuiltinTypeName.Double);
  const NUMBER_TYPE = const BuiltinType(BuiltinTypeName.Number);
  const STRING_TYPE = const BuiltinType(BuiltinTypeName.String);
  const FUNCTION_TYPE = const BuiltinType(BuiltinTypeName.Function);
  
  abstract class TypeVisitor {
    dynamic visitBuiltintType(BuiltinType type, dynamic context);
  