anchor.diff:  
   
   _openNewScope(scope, k) {
  +
  +
     Map curr = {};
     curr.addAll(scope);
  +
     var ret = k(scope);
  +
     scope.clear();
     scope.addAll(curr);
     return ret;
  -}
  -
  -_addToScope(scope, bindings, k) {
  -  return _openNewScope(scope, (scope) {
  -    scope.addAll(bindings);
  -    k(scope);
  -  });
   }
   
   //TODO (jln): factories should be handled here. in ConstructorName there should be resolved what is a prefix of another library, and what is a factory call.
   
   class IdentifierResolver extends Our.RecursiveElementVisitor {
   
  -  Map<Our.Name, Our.NamedElement> declaredElements = {};
  +  Map<AstNode, Our.NamedElement> declaredElements = {};
     Our.LibraryElement currentLibrary;
     var engine;
   
  
positive.code:   }
    
    void visitBlock(Our.Block block) {
      this.declaredElements.addAll(block.declaredElements);
      
      visitBlockList(block.nestedBlocks);      
    }
  
negative.code: 
  class ScopeVisitor extends GeneralizingAstVisitor {
  
    Map<AstNode, Our.NamedElement> declaredElements;
    Map<Expression, Our.NamedElement> references = {};
    Map<String, Our.NamedElement> scope;
  
    
    var engine;
    Our.ClassElement _currentClass = null;
      
    ScopeVisitor(this.engine, this.declaredElements, this.references) {
      this.scope = {};
    }
  
    visitBlock(Block node) {
      _openNewScope(scope, (_) =>
          super.visitBlock(node));
  
      //  _enterScope();
      //super.visitBlock(node);
      // _leaveScope();
    }
  
    visitFormalParameter(FormalParameter node) {
      this.scope[node.identifier.toString()] = this.declaredElements[node];
      super.visitFormalParameter(node);
    }
    
    visitClassDeclaration(ClassDeclaration node){
      this.scope["this"] = this.declaredElements[node];
      super.visitClassDeclaration(node);
      this.scope.remove("this");
    }
  
    visitVariableDeclaration(VariableDeclaration node) {
      if (node.initializer != null) node.initializer.accept(this);
      this.scope[node.name.toString()] = this.declaredElements[node];
      if (node.name != null) node.name.accept(this);
    }
    
    visitFunctionDeclaration(FunctionDeclaration node) {
      if (node.name != null) {
        this.scope[node.name.toString()] = this.declaredElements[node];
      }
  
      if (this.declaredElements[node] == null) {
        print('failed for ${node} (${node.hashCode})');
        this.declaredElements.keys.forEach((key){
          print('${key} (${key.hashCode})');
          
        });
  
      }
      
      _openNewScope(scope, (_) {
        super.visitFunctionDeclaration(node);      
      });
  
    }
    
    visitSimpleIdentifier(SimpleIdentifier node) {
  
      var element = scope[node.name.toString()];
      if (element != null) {
        references[node] = element;
  