From a4e71b2cad73b3d273ddb4dbccfab578ac4bd50f Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Fri, 16 Jul 2010 11:47:23 -0700 Subject: [PATCH] alien.enums: make it so that define-enum assigns enum values again for non-parsed enum types --- basis/alien/enums/enums-tests.factor | 12 ++++++++++++ basis/alien/enums/enums.factor | 10 +++++++--- basis/alien/syntax/syntax.factor | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/basis/alien/enums/enums-tests.factor b/basis/alien/enums/enums-tests.factor index 52337594a1..a1813d632e 100644 --- a/basis/alien/enums/enums-tests.factor +++ b/basis/alien/enums/enums-tests.factor @@ -37,3 +37,15 @@ ENUM: instrument_t < ushort trombone trumpet ; 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 diff --git a/basis/alien/enums/enums.factor b/basis/alien/enums/enums.factor index 4ac7c24cb5..c568c2af4c 100644 --- a/basis/alien/enums/enums.factor +++ b/basis/alien/enums/enums.factor @@ -29,11 +29,11 @@ M: enum-c-type c-type-unboxer-quot drop [ enum>number ] ; M: enum-c-type c-type-setter [ enum>number ] swap base-type>> c-type-setter '[ _ 2dip @ ] ; -number "enum-value" set-word-prop ; + -: define-enum ( word base-type members -- ) +: (define-enum) ( word base-type members -- ) [ dup define-enum-constructor ] 2dip dup define-enum-members swap typedef ; + +: define-enum ( word base-type members -- ) + [ (define-enum) ] + [ [ first2 define-enum-value ] each ] bi ; PREDICATE: enum-c-type-word < c-type-word "c-type" word-prop enum-c-type? ; diff --git a/basis/alien/syntax/syntax.factor b/basis/alien/syntax/syntax.factor index 6c2dc5ca85..22ad3bd174 100755 --- a/basis/alien/syntax/syntax.factor +++ b/basis/alien/syntax/syntax.factor @@ -29,7 +29,7 @@ SYNTAX: TYPEDEF: scan-c-type CREATE-C-TYPE dup save-location typedef ; SYNTAX: ENUM: - parse-enum define-enum ; + parse-enum (define-enum) ; SYNTAX: C-TYPE: void CREATE-C-TYPE typedef ;