diff --git a/basis/alien/enums/enums.factor b/basis/alien/enums/enums.factor index 6920a7742d..d8c1a02c69 100644 --- a/basis/alien/enums/enums.factor +++ b/basis/alien/enums/enums.factor @@ -1,6 +1,6 @@ ! (c)2010 Joe Groff, Erik Charlebois bsd license USING: accessors alien.c-types arrays classes.singleton combinators -delegate fry generic.parser kernel math parser sequences words ; +delegate fry generic.parser kernel macros math parser sequences words ; IN: alien.enums > ; PRIVATE> -GENERIC: enum>number ( enum -- number ) +GENERIC: enum>number ( enum -- number ) foldable M: integer enum>number ; -: number>enum ( number enum-c-type -- enum ) - c-type-boxer-quot call( x -- y ) ; inline - +MACRO: number>enum ( enum-c-type -- ) + 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 ; M: enum-c-type c-type-unboxer-quot drop [ enum>number ] ; @@ -42,7 +42,7 @@ M: enum-c-type c-type-setter : define-enum-constructor ( word -- ) [ name>> "<" ">" surround create-in ] keep - [ number>enum ] curry (( enum -- number )) define-inline ; + [ number>enum ] curry (( number -- enum )) define-inline ; PRIVATE>