functors: make 'final' declarations work in functors

db4
Slava Pestov 2010-02-18 03:56:41 +13:00
parent d2ae4ff4ba
commit 4b76e2a61d
3 changed files with 52 additions and 7 deletions

View File

@ -1,6 +1,6 @@
USING: accessors arrays assocs generic.standard kernel
lexer locals.types namespaces parser quotations vocabs.parser
words ;
words classes.tuple ;
IN: functors.backend
DEFER: functor-words
@ -27,7 +27,11 @@ SYNTAX: FUNCTOR-SYNTAX:
: define* ( word def -- ) over set-word define ;
: define-declared* ( word def effect -- ) pick set-word define-declared ;
: define-declared* ( word def effect -- )
pick set-word define-declared ;
: define-simple-generic* ( word effect -- ) over set-word define-simple-generic ;
: define-simple-generic* ( word effect -- )
over set-word define-simple-generic ;
: define-tuple-class* ( class superclass slots -- )
pick set-word define-tuple-class ;

View File

@ -1,5 +1,5 @@
USING: classes.struct functors tools.test math words kernel
multiline parser io.streams.string generic ;
USING: classes.struct classes.tuple functors tools.test math
words kernel multiline parser io.streams.string generic ;
QUALIFIED-WITH: alien.c-types c
IN: functors.tests
@ -36,7 +36,7 @@ WW DEFINES ${W}${W}
WHERE
: WW ( a -- b ) \ W twice ; inline
: WW ( a -- b ) \ W twice ;
;FUNCTOR
@ -211,3 +211,44 @@ STRUCT: T-class
}
] [ a-struct struct-slots ] unit-test
<<
FUNCTOR: define-an-inline-word ( W -- )
W DEFINES ${W}
W-W DEFINES ${W}-${W}
WHERE
: W ( -- ) ; inline
: W-W ( -- ) W W ;
;FUNCTOR
"an-inline-word" define-an-inline-word
>>
[ t ] [ \ an-inline-word inline? ] unit-test
[ f ] [ \ an-inline-word-an-inline-word inline? ] unit-test
<<
FUNCTOR: define-a-final-class ( T W -- )
T DEFINES-CLASS ${T}
W DEFINES ${W}
WHERE
TUPLE: T ; final
: W ( -- ) ;
;FUNCTOR
"a-final-tuple" "a-word" define-a-final-class
>>
[ t ] [ a-final-tuple final-class? ] unit-test

View File

@ -61,7 +61,7 @@ FUNCTOR-SYNTAX: TUPLE:
make suffix!
]
} case
\ define-tuple-class suffix! ;
\ define-tuple-class* suffix! ;
FUNCTOR-SYNTAX: final
[ word make-final ] append! ;