diff --git a/library/generic/generic.factor b/library/generic/generic.factor index bf68267652..c4e376498d 100644 --- a/library/generic/generic.factor +++ b/library/generic/generic.factor @@ -162,6 +162,9 @@ SYMBOL: object : type-union ( list list -- list ) append prune [ > ] sort ; +: type-intersection ( list list -- list ) + intersection [ > ] sort ; + : class-or ( class class -- class ) #! Return a class that both classes are subclasses of. swap builtin-supertypes @@ -173,7 +176,7 @@ SYMBOL: object #! error if this is impossible. over builtin-supertypes over builtin-supertypes - intersection dup [ + type-intersection dup [ nip nip classes get hash [ object ] unless* ] [ drop [ @@ -187,4 +190,4 @@ SYMBOL: object dup builtin-supertypes [ > ] sort classes get set-hash ; -global [ classes set ] bind +global [ classes get [ classes set ] unless ] bind diff --git a/library/inference/words.factor b/library/inference/words.factor index f5970a0c6c..eef233f211 100644 --- a/library/inference/words.factor +++ b/library/inference/words.factor @@ -37,7 +37,6 @@ USE: strings USE: vectors USE: words USE: hashtables -USE: prettyprint : with-dataflow ( param op [ in | out ] quot -- ) #! Take input parameters, execute quotation, take output diff --git a/library/test/generic.factor b/library/test/generic.factor index d84b8659fe..dc119ab099 100644 --- a/library/test/generic.factor +++ b/library/test/generic.factor @@ -136,3 +136,5 @@ M: very-funny gooey sq ; [ integer ] [ fixnum bignum class-or ] unit-test [ integer ] [ fixnum integer class-or ] unit-test [ rational ] [ ratio integer class-or ] unit-test +[ number ] [ number object class-and ] unit-test +[ number ] [ object number class-and ] unit-test diff --git a/library/test/inference.factor b/library/test/inference.factor index 027ead5342..29bb6eb0b1 100644 --- a/library/test/inference.factor +++ b/library/test/inference.factor @@ -203,3 +203,4 @@ SYMBOL: sym-test [ [ [ cons ] [ cons ] ] ] [ [ uncons cons ] infer ] unit-test [ [ [ object ] [ object ] ] ] [ [ dup [ car ] when ] infer ] unit-test [ [ [ vector ] [ vector ] ] ] [ [ vector-clone ] infer ] unit-test +[ [ [ number ] [ number ] ] ] [ [ dup + ] infer ] unit-test