PREDICATE: c-type-word < word
"c-type" word-prop >boolean ;
+M: c-type-word reset-word
+ [ call-next-method ] [ "c-type" remove-word-prop ] bi ;
+
TUPLE: pointer { to initial: void read-only } ;
C: <pointer> pointer
: define-enum-value ( class value -- )
enum>number "enum-value" set-word-prop ;
+PREDICATE: enum-value < word "enum-value" word-prop >boolean ;
+
+M: enum-value reset-word
+ [ call-next-method ] [ "enum-value" remove-word-prop ] bi ;
+
<PRIVATE
: define-enum-members ( members -- )
PREDICATE: enum-c-type-word < c-type-word
"c-type" word-prop enum-c-type? ;
+M: enum-c-type-word subwords
+ lookup-c-type members>> keys ;
+
: enum>values ( enum -- seq )
- "c-type" word-prop members>> values ;
+ lookup-c-type members>> values ;
: enum>keys ( enum -- seq )
- "c-type" word-prop members>> keys [ name>> ] map ;
+ lookup-c-type members>> keys [ name>> ] map ;