anchor.diff:    (:method ((x t)) nil)
     (:method ((x container)) t))
   
  +
  +(define-method lookup ((obj null) search_name)
  +  (declare (ignore search_name))
  +  nil)
  +
   (define-method lookup ((obj container) search_name)
  -  ;; FIXME: search_name is a scoped name.
  -  ;; I.e. should work more like clorb::lookup-name-in
  -  (loop for contained in (op:contents obj :dk_all nil)
  -      when (equal search_name (op:name contained))
  -      do (return contained)))
  +  (cond ((string-starts-with search_name "::")
  +         (op:lookup (op:containing_repository obj) 
  +                    (subseq search_name 2)))
  +        (t
  +         (multiple-value-bind (first-name rest-name)
  +                              (split-name search_name)
  +           (let ((contained
  +                  (find first-name (op:contents obj :dk_all nil)
  +                        :key #'op:name
  +                        :test #'string-equal)))
  +             (cond ((null contained)
  +                    (op:lookup (op:defined_in obj) search_name))
  +                   (rest-name 
  +                    (op:lookup contained rest-name))
  +                   (t
  +                    contained)))))))
  +
  +(defun split-name (str)
  +  (let ((method-end (position #\: str)))
  +    (if method-end
  +      (values (subseq str 0 method-end)
  +              (subseq str (+ method-end 2)))
  +      str )))
   
   
   ;;;  ModuleDef create_module (
  
positive.code:   (print-unreadable-object (obj stream :type t :identity t)
      (format stream "~A" (slot-value obj 'name))))
  
  (defmethod addto :after (r (c contained))
    (setf (slot-value c 'containing_repository)
      (op:containing_repository r))
    c)
  
  (define-method absolute_name ((obj contained))
    (unless (and (slot-boundp obj 'absolute_name)
  
negative.code: ;;;; local-ir.lisp -- An Interface Repository Implementation
  ;; $Id: local-ir.lisp,v 1.15 2002/06/01 05:45:43 lenst Exp $
  
  (in-package :clorb)
  
  