anchor.diff:  library kernel.ast_to_text;
   
   import 'dart:core' hide MapEntry;
  +import 'dart:core' as core show MapEntry;
   
   import 'dart:convert' show json;
  +
  +import 'package:kernel/type_environment.dart' show TypeEnvironment;
   
   import '../ast.dart';
   import '../import_table.dart';
  
positive.code:   NormalNamer(this.prefix);
  }
  
  class ConstantNamer extends RecursiveVisitor<Null> with Namer<Constant> {
    final String prefix;
    ConstantNamer(this.prefix);
  
    String getName(Constant constant) {
      if (!map.containsKey(constant)) {
        // Name everything in post-order visit of DAG.
        constant.visitChildren(this);
      }
      return super.getName(constant);
    }
  
    defaultConstantReference(Constant constant) {
  
negative.code:     writeConstantReference(node);
      writeSpaced('=');
      writeClassReferenceFromReference(node.classReference);
      if (!node.typeArguments.isEmpty) {
        writeSymbol('<');
        writeList(node.typeArguments, writeType);
        writeSymbol('>');
      }
  
      writeSymbol(' {');
      writeList(node.fieldValues.entries,
          (core.MapEntry<Reference, Constant> entry) {
        if (entry.key.node != null) {
          writeWord('${entry.key.asField.name.name}');
        } else {
          writeWord('${entry.key.canonicalName.name}');
        }
        writeSymbol(':');
        writeConstantReference(entry.value);
      });
  