alien: merge enum improvements from Blei/gtk-image-loader
parent
38c5652093
commit
a820c1091d
|
@ -33,3 +33,19 @@ ENUM: instrument_t < ushort trombone trumpet ;
|
||||||
|
|
||||||
{ V{ { red 0 } { green 3 } { blue 4 } } }
|
{ V{ { red 0 } { green 3 } { blue 4 } } }
|
||||||
[ color_t "c-type" word-prop members>> ] unit-test
|
[ color_t "c-type" word-prop members>> ] unit-test
|
||||||
|
|
||||||
|
ENUM: colores { rojo red } { verde green } { azul blue } { colorado rojo } ;
|
||||||
|
|
||||||
|
[ { 0 3 4 0 } ] [ { rojo verde azul colorado } [ enum>number ] map ] unit-test
|
||||||
|
|
||||||
|
SYMBOLS: couleurs rouge vert bleu jaune azure ;
|
||||||
|
|
||||||
|
<< \ couleurs int {
|
||||||
|
{ rouge red }
|
||||||
|
{ vert green }
|
||||||
|
{ bleu blue }
|
||||||
|
{ jaune 14 }
|
||||||
|
{ azure bleu }
|
||||||
|
} define-enum >>
|
||||||
|
|
||||||
|
[ { 0 3 4 14 4 } ] [ { rouge vert bleu jaune azure } [ enum>number ] map ] unit-test
|
||||||
|
|
|
@ -30,16 +30,13 @@ M: enum-c-type c-type-unboxer-quot drop [ enum>number ] ;
|
||||||
M: enum-c-type c-type-setter
|
M: enum-c-type c-type-setter
|
||||||
[ enum>number ] swap base-type>> c-type-setter '[ _ 2dip @ ] ;
|
[ enum>number ] swap base-type>> c-type-setter '[ _ 2dip @ ] ;
|
||||||
|
|
||||||
|
: define-enum-value ( class value -- )
|
||||||
|
enum>number "enum-value" set-word-prop ;
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: define-enum-value ( class value -- )
|
|
||||||
"enum-value" set-word-prop ;
|
|
||||||
|
|
||||||
: define-enum-members ( members -- )
|
: define-enum-members ( members -- )
|
||||||
[
|
[ first define-singleton-class ] each ;
|
||||||
[ drop define-singleton-class ]
|
|
||||||
[ define-enum-value ] 2bi
|
|
||||||
] assoc-each ;
|
|
||||||
|
|
||||||
: define-enum-constructor ( word -- )
|
: define-enum-constructor ( word -- )
|
||||||
[ name>> "<" ">" surround create-in ] keep
|
[ name>> "<" ">" surround create-in ] keep
|
||||||
|
@ -47,10 +44,14 @@ M: enum-c-type c-type-setter
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: define-enum ( word base-type members -- )
|
: (define-enum) ( word base-type members -- )
|
||||||
[ dup define-enum-constructor ] 2dip
|
[ dup define-enum-constructor ] 2dip
|
||||||
[ define-enum-members ]
|
[ define-enum-members ]
|
||||||
[ <enum-c-type> swap typedef ] bi ;
|
[ <enum-c-type> swap typedef ] bi ;
|
||||||
|
|
||||||
|
: define-enum ( word base-type members -- )
|
||||||
|
[ (define-enum) ]
|
||||||
|
[ [ define-enum-value ] assoc-each ] 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? ;
|
||||||
|
|
|
@ -4,7 +4,7 @@ USING: accessors alien alien.c-types alien.libraries arrays
|
||||||
assocs classes combinators combinators.short-circuit
|
assocs classes combinators combinators.short-circuit
|
||||||
compiler.units effects grouping kernel parser sequences
|
compiler.units effects grouping kernel parser sequences
|
||||||
splitting words fry locals lexer namespaces summary math
|
splitting words fry locals lexer namespaces summary math
|
||||||
vocabs.parser words.constant classes.parser ;
|
vocabs.parser words.constant classes.parser alien.enums ;
|
||||||
IN: alien.parser
|
IN: alien.parser
|
||||||
|
|
||||||
SYMBOL: current-library
|
SYMBOL: current-library
|
||||||
|
@ -84,7 +84,8 @@ M: pointer return-type-name to>> return-type-name CHAR: * suffix ;
|
||||||
[ [ <pointer> ] dip parse-pointers ] when ;
|
[ [ <pointer> ] dip parse-pointers ] when ;
|
||||||
|
|
||||||
: next-enum-member ( members name value -- members value' )
|
: next-enum-member ( members name value -- members value' )
|
||||||
[ 2array suffix! ] [ 1 + ] bi ;
|
[ define-enum-value ]
|
||||||
|
[ [ 2array suffix! ] [ enum>number 1 + ] bi ] 2bi ;
|
||||||
|
|
||||||
: parse-enum-name ( -- name )
|
: parse-enum-name ( -- name )
|
||||||
scan (CREATE-C-TYPE) dup save-location ;
|
scan (CREATE-C-TYPE) dup save-location ;
|
||||||
|
|
|
@ -29,7 +29,7 @@ SYNTAX: TYPEDEF:
|
||||||
scan-c-type CREATE-C-TYPE dup save-location typedef ;
|
scan-c-type CREATE-C-TYPE dup save-location typedef ;
|
||||||
|
|
||||||
SYNTAX: ENUM:
|
SYNTAX: ENUM:
|
||||||
parse-enum define-enum ;
|
parse-enum (define-enum) ;
|
||||||
|
|
||||||
SYNTAX: C-TYPE:
|
SYNTAX: C-TYPE:
|
||||||
void CREATE-C-TYPE typedef ;
|
void CREATE-C-TYPE typedef ;
|
||||||
|
|
Loading…
Reference in New Issue