anchor.diff:  
     InferredInfoNode({this.name: "", this.description, this.type});
   
  -  void emitHtml(ProgramInfo programInfo, StringSink buffer) {
  -    buffer.write('\n');
  +  void emitHtml(ProgramInfo programInfo, StringBuffer buffer,
  +      [String indentation = '']) {
  +    buffer.write(indentation);
       buffer.write(
           div('${span("Inferred " + description, cls: "kind")} '
               '${span(esc(name), cls: "name")} '
               '${span(esc(type), cls: "type")} ',
               cls: "attr"));
  +    buffer.write('\n');
     }
   }
   
  
positive.code: var esc = const HtmlEscape().convert;
  
  String sizeDescription(int size, ProgramInfo programInfo) {
    return size == null
        ? ''
        : span('${size} bytes '
          '(${size * 100 ~/ programInfo.size}%)', cls: "size");
  }
  
  /// An [InfoNode] holds information about a part the program.
  
negative.code:       buffer.writeln(h2('Dart2js version: ${info.dart2jsVersion}'));
      }
  
      buffer.writeln('<a href="#" class="sort_by_size">Sort by size</a>\n');
  
      buffer.writeln('<div class="contents">');
      info.libraries.forEach((InfoNode node) {
        node.emitHtml(info, buffer);
      });
      buffer.writeln('</div>');
  
      // TODO (sigurdm): This script should be written in dart
      buffer.writeln(r"""
  