-! (c)2010 Joe Groff, Erik Charlebois bsd license
-USING: accessors alien.c-types arrays combinators delegate fry
-generic.parser kernel macros math parser sequences words words.symbol
-classes.singleton assocs ;
+! Copyright (C) 2010 Joe Groff, Erik Charlebois.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types arrays assocs classes.singleton
+combinators delegate kernel math parser sequences words ;
IN: alien.enums
<PRIVATE
{ } map-as [ ] suffix '[ _ case ] ;
PRIVATE>
-MACRO: number>enum ( enum-c-type -- )
- c-type members>> enum-boxer ;
+MACRO: number>enum ( enum-c-type -- quot )
+ lookup-c-type members>> enum-boxer ;
M: enum-c-type c-type-boxed-class drop object ;
M: enum-c-type c-type-boxer-quot members>> enum-boxer ;
[ first define-singleton-class ] each ;
: define-enum-constructor ( word -- )
- [ name>> "<" ">" surround create-in ] keep
- [ number>enum ] curry (( number -- enum )) define-inline ;
+ [ name>> "<" ">" surround create-word-in ] keep
+ [ number>enum ] curry ( number -- enum ) define-declared ;
PRIVATE>
: define-enum ( word base-type members -- )
[ (define-enum) ]
[ [ define-enum-value ] assoc-each ] bi ;
-
+
PREDICATE: enum-c-type-word < c-type-word
"c-type" word-prop enum-c-type? ;
+
+: enum>values ( enum -- seq )
+ "c-type" word-prop members>> values ;
+
+: enum>keys ( enum -- seq )
+ "c-type" word-prop members>> keys [ name>> ] map ;
+
+: values>enum ( values enum -- seq )
+ '[ _ number>enum ] map ; inline
+