Changeset 12661


Ignore:
Timestamp:
05/09/10 14:58:36 (13 years ago)
Author:
astalla
Message:

Fix computation of the class precedence list for Java classes in case of multiple occurrences of the same interface in the class hierarchy.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/java.lisp

    r12660 r12661  
    349349     (make-symbol (jclass-name jclass))
    350350     :metaclass (find-class 'java-class)
    351      :direct-superclasses (mapcar #'ensure-java-class
    352                 (remove-duplicates
    353                  (delete nil
    354                    (concatenate 'list
    355                     (list (jclass-superclass jclass))
    356                     (jclass-interfaces jclass)))
    357                  :key #'jclass-name :test #'string=))
     351     :direct-superclasses
     352     (let ((supers
     353      (mapcar #'ensure-java-class
     354        (delete nil
     355          (concatenate 'list
     356                 (list (jclass-superclass jclass))
     357                 (jclass-interfaces jclass))))))
     358       (if (jclass-interface-p jclass)
     359           (append supers (list (find-class 'java-object)))
     360           supers))
    358361     :java-class jclass)))))
    359362
     
    374377   gf is specialized on two different interfaces and you apply it to an object that
    375378   implements both, it is unspecified which method will be called."
    376   (let ((cpl (call-next-method)))
     379  (let ((cpl (nreverse (mop::collect-superclasses* class))))
    377380    (flet ((score (class)
    378381       (if (not (typep class 'java-class))
Note: See TracChangeset for help on using the changeset viewer.