anchor.diff:      return newElement;
     }
   
  -  String toString() => '$element${elements.getKeys()}';
  +  Element localLookup(SourceString name) => elements[name];
   }
   
  -class BlockScope extends MethodScope {
  -  BlockScope(Scope parent) : super(parent, parent.element);
  -
  -  String toString() => 'block${elements.getKeys()}';
  +class MethodScope extends MutableScope {
  +  final Element element;
  +
  +  MethodScope(Scope parent, this.element)
  +      : super(parent);
  +
  +  String toString() => 'MethodScope($element${elements.getKeys()})';
  +}
  +
  +class BlockScope extends MutableScope {
  +  BlockScope(Scope parent) : super(parent);
  +
  +  String toString() => 'BlockScope(${elements.getKeys()})';
   }
   
   /**
  
positive.code:   String toString() => 'ClassScope($element)';
  }
  
  class LibraryScope extends Scope {
    LibraryElement get library => element;
  
    LibraryScope(LibraryElement library) : super(null, library);
  
    Element localLookup(SourceString name) => library.find(name);
    Element lookup(SourceString name) => localLookup(name);
    Element lexicalLookup(SourceString name) => localLookup(name);
  
    Element add(Element newElement) {
      throw "Cannot add an element to a library scope";
    }
  
    String toString() => 'LibraryScope($element)';
  }
  
negative.code:     throw "Cannot add element to TypeDeclarationScope";
    }
  
    Element lookupTypeVariable(SourceString name) {
      Link<DartType> typeVariableLink = element.typeVariables;
      while (!typeVariableLink.isEmpty()) {
        TypeVariableType typeVariable = typeVariableLink.head;
  