820 |
(write-object o file)) |
(write-object o file)) |
821 |
|
|
822 |
;;; |
;;; |
823 |
|
;;; Handling of duplicate bindings in the module system |
824 |
|
;;; |
825 |
|
|
826 |
|
(define-method (merge-generics (module <module>) |
827 |
|
(name <symbol>) |
828 |
|
(int1 <module>) |
829 |
|
(val1 <top>) |
830 |
|
(int2 <module>) |
831 |
|
(val2 <top>) |
832 |
|
(var <top>) |
833 |
|
(val <top>)) |
834 |
|
#f) |
835 |
|
|
836 |
|
(define-method (merge-generics (module <module>) |
837 |
|
(name <symbol>) |
838 |
|
(int1 <module>) |
839 |
|
(val1 <generic>) |
840 |
|
(int2 <module>) |
841 |
|
(val2 <generic>) |
842 |
|
(var <top>) |
843 |
|
(val <boolean>)) |
844 |
|
(make-variable (make-extended-generic (list val2 val1) name))) |
845 |
|
|
846 |
|
(define-method (merge-generics (module <module>) |
847 |
|
(name <symbol>) |
848 |
|
(int1 <module>) |
849 |
|
(val1 <generic>) |
850 |
|
(int2 <module>) |
851 |
|
(val2 <generic>) |
852 |
|
(var <top>) |
853 |
|
(gf <extended-generic>)) |
854 |
|
(slot-set! gf |
855 |
|
'extends |
856 |
|
(cons val2 (delq! val2 (slot-ref gf 'extends)))) |
857 |
|
(slot-set! val2 |
858 |
|
'extended-by |
859 |
|
(cons gf (delq! gf (slot-ref val2 'extended-by)))) |
860 |
|
var) |
861 |
|
|
862 |
|
(module-define! duplicate-handlers 'merge-generics merge-generics) |
863 |
|
|
864 |
|
;;; |
865 |
;;; slot access |
;;; slot access |
866 |
;;; |
;;; |
867 |
|
|