]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/alien/parser/parser.factor
Remove ENUM: f and replace uses with CONSTANTs.
[factor.git] / basis / alien / parser / parser.factor
index 952f7b64d99391966828e861c8b295f3a2bae90a..166c29bef509ec6f0ecb7a7d1265c37a96735f56 100755 (executable)
@@ -78,25 +78,29 @@ 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* ;
+: parse-enum-name ( -- name )
+    scan (CREATE-C-TYPE) dup save-location ;
 
-: define-enum-members ( members -- )
-    [ first2 define-enum-member ] each ;
+: parse-enum-base-type ( -- base-type token )
+    scan dup "<" =
+    [ drop scan-object scan ]
+    [ [ int ] dip ] if ;
 
 : parse-enum-member ( members name value -- members value' )
     over "{" =
-    [ 2drop scan scan-object next-enum-member "}" expect ]
-    [ next-enum-member ] if ;
+    [ 2drop scan create-in scan-object next-enum-member "}" expect ]
+    [ [ create-in ] dip next-enum-member ] if ;
 
-: parse-enum-members ( members counter -- members )
-    scan dup ";" = not
-    [ swap parse-enum-member parse-enum-members ] [ 2drop ] if ;
+: parse-enum-members ( members counter token -- members )
+    dup ";" = not
+    [ swap parse-enum-member scan parse-enum-members ] [ 2drop ] if ;
+
+PRIVATE>
 
-: define-enum ( word members -- )
-    [ [ int swap typedef ] when ] [ define-enum-members ] bi* ;
+: parse-enum ( -- name base-type members )
+    parse-enum-name
+    parse-enum-base-type
+    [ V{ } clone 0 ] dip parse-enum-members ;
 
 : scan-function-name ( -- return function )
     scan-c-type scan parse-pointers ;