alien.parser, alien.syntax: send ENUM: body to parse-enum
parent
f394cb4fdc
commit
6e55a3b8f5
|
@ -78,14 +78,6 @@ M: pointer return-type-name to>> return-type-name CHAR: * suffix ;
|
||||||
: next-enum-member ( members name value -- members value' )
|
: next-enum-member ( members name value -- members value' )
|
||||||
[ 2array suffix! ] [ 1 + ] bi ;
|
[ 2array suffix! ] [ 1 + ] bi ;
|
||||||
|
|
||||||
PRIVATE>
|
|
||||||
|
|
||||||
: define-enum-member ( name value -- )
|
|
||||||
[ create-in ] [ define-constant ] bi* ;
|
|
||||||
|
|
||||||
: define-enum-members ( members -- )
|
|
||||||
[ first2 define-enum-member ] each ;
|
|
||||||
|
|
||||||
: parse-enum-member ( members name value -- members value' )
|
: parse-enum-member ( members name value -- members value' )
|
||||||
over "{" =
|
over "{" =
|
||||||
[ 2drop scan scan-object next-enum-member "}" expect ]
|
[ 2drop scan scan-object next-enum-member "}" expect ]
|
||||||
|
@ -95,8 +87,22 @@ PRIVATE>
|
||||||
scan dup ";" = not
|
scan dup ";" = not
|
||||||
[ swap parse-enum-member parse-enum-members ] [ 2drop ] if ;
|
[ swap parse-enum-member parse-enum-members ] [ 2drop ] if ;
|
||||||
|
|
||||||
|
: define-enum-member ( name value -- )
|
||||||
|
[ create-in ] [ define-constant ] bi* ;
|
||||||
|
|
||||||
|
: define-enum-members ( members -- )
|
||||||
|
[ first2 define-enum-member ] each ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
: parse-enum ( -- name members )
|
||||||
|
scan dup "f" =
|
||||||
|
[ drop f ]
|
||||||
|
[ (CREATE-C-TYPE) dup save-location ] if
|
||||||
|
V{ } clone 0 parse-enum-members ;
|
||||||
|
|
||||||
: define-enum ( word members -- )
|
: define-enum ( word members -- )
|
||||||
[ [ int swap typedef ] when ] [ define-enum-members ] bi* ;
|
[ [ int swap typedef ] when* ] [ define-enum-members ] bi* ;
|
||||||
|
|
||||||
: scan-function-name ( -- return function )
|
: scan-function-name ( -- return function )
|
||||||
scan-c-type scan parse-pointers ;
|
scan-c-type scan parse-pointers ;
|
||||||
|
|
|
@ -29,10 +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:
|
||||||
scan dup "f" =
|
parse-enum define-enum ;
|
||||||
[ drop f ]
|
|
||||||
[ (CREATE-C-TYPE) dup save-location ] if
|
|
||||||
V{ } clone 0 parse-enum-members define-enum ;
|
|
||||||
|
|
||||||
SYNTAX: C-TYPE:
|
SYNTAX: C-TYPE:
|
||||||
void CREATE-C-TYPE typedef ;
|
void CREATE-C-TYPE typedef ;
|
||||||
|
|
Loading…
Reference in New Issue