anchor.diff:        _classes = <String, _MemberTable>{};
         _classes[LibraryIndex.topLevel] = new _MemberTable.topLevel(this);
         for (var class_ in library.classes) {
  -        _classes[class_.name] = new _MemberTable(this, class_);
  +        _classes[class_.name] = new _MemberTable.fromClass(this, class_);
  +      }
  +      for (var extension_ in library.extensions) {
  +        _classes[extension_.name] =
  +            new _MemberTable.fromExtension(this, extension_);
         }
         for (Reference reference in library.additionalExports) {
           NamedNode node = reference.node;
           if (node is Class) {
  -          _classes[node.name] = new _MemberTable(this, node);
  +          _classes[node.name] = new _MemberTable.fromClass(this, node);
  +        } else if (node is Extension) {
  +          _classes[node.name] = new _MemberTable.fromExtension(this, node);
           }
         }
       }
  
positive.code:     _members[getDisambiguatedName(member)] = member;
    }
  
    String get containerName {
      if (class_ == null) {
        return "top-level of ${parent.containerName}";
      } else {
        return "class '${class_.name}' in ${parent.containerName}";
      }
    }
  
  
negative.code: 
  class _MemberTable {
    final _ClassTable parent;
    final Class class_; // Null for top-level or extension.
    final Extension extension_; // Null for top-level or class.
    Map<String, Member> _members;
  
    Library get library => parent.library;
  
    _MemberTable.fromClass(this.parent, this.class_) : extension_ = null;
    _MemberTable.fromExtension(this.parent, this.extension_) : class_ = null;
    _MemberTable.topLevel(this.parent)
        : class_ = null,
          extension_ = null;
  
    Map<String, Member> get members {
      if (_members == null) {
  