Make alien.enums create singletons so I can dispatch on them. Clean up the code a bit.
parent
0939590955
commit
56c8d47d58
|
@ -1,6 +1,7 @@
|
||||||
! (c)2010 Joe Groff, Erik Charlebois bsd license
|
! (c)2010 Joe Groff, Erik Charlebois bsd license
|
||||||
USING: accessors alien.c-types arrays combinators delegate fry
|
USING: accessors alien.c-types arrays combinators delegate fry
|
||||||
generic.parser kernel macros math parser sequences words words.symbol ;
|
generic.parser kernel macros math parser sequences words words.symbol
|
||||||
|
classes.singleton assocs ;
|
||||||
IN: alien.enums
|
IN: alien.enums
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
@ -34,11 +35,11 @@ M: enum-c-type c-type-setter
|
||||||
: define-enum-value ( class value -- )
|
: define-enum-value ( class value -- )
|
||||||
"enum-value" set-word-prop ;
|
"enum-value" set-word-prop ;
|
||||||
|
|
||||||
: define-enum-members ( member-names -- )
|
: define-enum-members ( members -- )
|
||||||
[
|
[
|
||||||
[ first define-symbol ]
|
[ drop define-singleton-class ]
|
||||||
[ first2 define-enum-value ] bi
|
[ define-enum-value ] 2bi
|
||||||
] each ;
|
] assoc-each ;
|
||||||
|
|
||||||
: define-enum-constructor ( word -- )
|
: define-enum-constructor ( word -- )
|
||||||
[ name>> "<" ">" surround create-in ] keep
|
[ name>> "<" ">" surround create-in ] keep
|
||||||
|
@ -48,8 +49,8 @@ PRIVATE>
|
||||||
|
|
||||||
: define-enum ( word base-type members -- )
|
: define-enum ( word base-type members -- )
|
||||||
[ dup define-enum-constructor ] 2dip
|
[ dup define-enum-constructor ] 2dip
|
||||||
dup define-enum-members
|
[ define-enum-members ]
|
||||||
<enum-c-type> swap typedef ;
|
[ <enum-c-type> swap typedef ] bi ;
|
||||||
|
|
||||||
PREDICATE: enum-c-type-word < c-type-word
|
PREDICATE: enum-c-type-word < c-type-word
|
||||||
"c-type" word-prop enum-c-type? ;
|
"c-type" word-prop enum-c-type? ;
|
||||||
|
|
Loading…
Reference in New Issue