diff --git a/core/classes/classes.factor b/core/classes/classes.factor index 656037c739..e4301f6bae 100644 --- a/core/classes/classes.factor +++ b/core/classes/classes.factor @@ -37,9 +37,12 @@ PREDICATE: class < word "class" word-prop ; : classes ( -- seq ) implementors-map get keys ; -: predicate-word ( word -- predicate ) +: create-predicate-word ( word -- predicate ) [ name>> "?" append ] [ vocabulary>> ] bi create ; +: predicate-word ( word -- predicate ) + "predicate" word-prop first ; + PREDICATE: predicate < word "predicating" word-prop >boolean ; M: predicate forget* @@ -49,8 +52,7 @@ M: predicate reset-word [ call-next-method ] [ f "predicating" set-word-prop ] bi ; : define-predicate ( class quot -- ) - [ "predicate" word-prop first ] dip - (( object -- ? )) define-declared ; + [ predicate-word ] dip (( object -- ? )) define-declared ; : superclass ( class -- super ) #! Output f for non-classes to work with algebra code @@ -144,7 +146,7 @@ M: sequence implementors [ implementors ] gather ; [ ] } cleave ] dip [ assoc-union ] curry change-props - dup predicate-word + dup create-predicate-word [ 1quotation "predicate" set-word-prop ] [ swap "predicating" set-word-prop ] [ drop t "class" set-word-prop ] diff --git a/core/classes/parser/parser.factor b/core/classes/parser/parser.factor index 0697537d12..8233d8cff3 100644 --- a/core/classes/parser/parser.factor +++ b/core/classes/parser/parser.factor @@ -1,4 +1,4 @@ -! Copyright (C) 2008 Slava Pestov. +! Copyright (C) 2008, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: parser vocabs.parser words kernel classes compiler.units lexer ; IN: classes.parser @@ -9,7 +9,7 @@ IN: classes.parser : create-class-in ( string -- word ) current-vocab create dup save-class-location - dup predicate-word dup set-word save-location ; + dup create-predicate-word dup set-word save-location ; : CREATE-CLASS ( -- word ) scan create-class-in ;