From 6e55a3b8f5b1f6c707e2c85269f7996ac349b838 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 12 Apr 2010 21:58:08 -0700 Subject: [PATCH] alien.parser, alien.syntax: send ENUM: body to parse-enum --- basis/alien/parser/parser.factor | 24 +++++++++++++++--------- basis/alien/syntax/syntax.factor | 5 +---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/basis/alien/parser/parser.factor b/basis/alien/parser/parser.factor index 952f7b64d9..731cc4d6b5 100755 --- a/basis/alien/parser/parser.factor +++ b/basis/alien/parser/parser.factor @@ -78,14 +78,6 @@ M: pointer return-type-name to>> return-type-name CHAR: * suffix ; : next-enum-member ( members name value -- members value' ) [ 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' ) over "{" = [ 2drop scan scan-object next-enum-member "}" expect ] @@ -95,8 +87,22 @@ PRIVATE> scan dup ";" = not [ 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 -- ) - [ [ int swap typedef ] when ] [ define-enum-members ] bi* ; + [ [ int swap typedef ] when* ] [ define-enum-members ] bi* ; : scan-function-name ( -- return function ) scan-c-type scan parse-pointers ; diff --git a/basis/alien/syntax/syntax.factor b/basis/alien/syntax/syntax.factor index c69a9b8ebe..be137b1da8 100755 --- a/basis/alien/syntax/syntax.factor +++ b/basis/alien/syntax/syntax.factor @@ -29,10 +29,7 @@ SYNTAX: TYPEDEF: scan-c-type CREATE-C-TYPE dup save-location typedef ; SYNTAX: ENUM: - scan dup "f" = - [ drop f ] - [ (CREATE-C-TYPE) dup save-location ] if - V{ } clone 0 parse-enum-members define-enum ; + parse-enum define-enum ; SYNTAX: C-TYPE: void CREATE-C-TYPE typedef ;