alien.parser, alien.syntax: refactor ENUM: to separate parsing from definition

db4
Joe Groff 2010-04-12 21:42:48 -07:00 committed by Erik Charlebois
parent 4bc915d526
commit 8c915e05f7
2 changed files with 21 additions and 12 deletions

View File

@ -75,19 +75,28 @@ M: pointer return-type-name to>> return-type-name CHAR: * suffix ;
"*" ?head "*" ?head
[ [ <pointer> ] dip parse-pointers ] when ; [ [ <pointer> ] dip parse-pointers ] when ;
: next-enum-member ( members name value -- members value' )
[ 2array suffix! ] [ 1 + ] bi ;
PRIVATE> PRIVATE>
: define-enum-member ( word-string value -- next-value ) : define-enum-member ( name value -- )
[ create-in ] dip [ define-constant ] keep 1 + ; [ create-in ] [ define-constant ] bi* ;
: parse-enum-member ( word-string value -- next-value ) : define-enum-members ( members -- )
over "{" = [ first2 define-enum-member ] each ;
[ 2drop scan scan-object define-enum-member "}" expect ]
[ define-enum-member ] if ;
: parse-enum-members ( counter -- ) : parse-enum-member ( members name value -- members value' )
scan dup ";" = not over "{" =
[ swap parse-enum-member parse-enum-members ] [ 2drop ] if ; [ 2drop scan scan-object next-enum-member "}" expect ]
[ next-enum-member ] if ;
: parse-enum-members ( members counter -- members )
scan dup ";" = not
[ swap parse-enum-member parse-enum-members ] [ 2drop ] if ;
: define-enum ( word members -- )
[ int swap typedef ] [ 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 ;

View File

@ -30,9 +30,9 @@ SYNTAX: TYPEDEF:
SYNTAX: ENUM: SYNTAX: ENUM:
scan dup "f" = scan dup "f" =
[ drop ] [ drop f ]
[ (CREATE-C-TYPE) dup save-location int swap typedef ] if [ (CREATE-C-TYPE) dup save-location ] if
0 parse-enum-members ; V{ } clone 0 parse-enum-members define-enum ;
SYNTAX: C-TYPE: SYNTAX: C-TYPE:
void CREATE-C-TYPE typedef ; void CREATE-C-TYPE typedef ;