Index: bind-translator.scm =================================================================== --- bind-translator.scm (revision 41054) +++ bind-translator.scm (working copy) @@ -267,17 +267,25 @@ (begin (set! dc #t) (loop more) ) ) ] - [('enum ('scope more)) - (parse-enum-def #f (subst-macros more)) ] - [('enum ('id name) ('scope more)) - (parse-enum-def name (subst-macros more)) ] + [('enum ('scope more)) + (parse-enum-def #f (subst-macros more)) ] + [('enum ('op ":") (or ('id type)) ('scope more)) + (parse-enum-def #f (subst-macros more)) ] + [('enum ('id name) ('scope more)) + (parse-enum-def name (subst-macros more)) ] + [('enum ('id name) ('op ":") . more) + (parse-typed-enum-def name (subst-macros more)) ] + [('enum (or 'class 'struct) ('id name) ('scope more)) + (parse-enum-def name (subst-macros more)) ] + [('enum (or 'class 'struct) ('id name) ('op ":") . more) + (parse-typed-enum-def name (subst-macros more)) ] [('class . more) (parse-class-def more ab) ] [((or 'union 'struct) ('id name) ('scope . more)) (parse-struct-def (car c) name ab (subst-macros more)) ] [((or 'union 'struct) ('id name)) #f] - [('namespace ('id name) (scope . more)) - (for-each parse more) ] + [('namespace . more) + (parse-namespace more) ] [('typedef . more) (parse-typedef more) ] [(and more (('id name) . _)) @@ -285,6 +293,14 @@ [more (parse-prototype more cb sp dc ds)] ) ) ) ] ) ) ] ) ) +(define (parse-namespace c) + (match c + [(('id name) ('op "::") . more) + (parse-namespace more)] + [(('id name) (scope . more)) + (for-each parse more)] + [more (parsing-error "unexpected tokens" more)] ) ) + (define parse-again parse) (define parse-type-rec @@ -556,6 +572,13 @@ [('comma . more) (loop more i items)] [_ (parsing-error "syntax error in enum form" more)] ) ) ) ] ) ) ) +(define (parse-typed-enum-def ename ts) + (let-values (((type c) (parse-type ts #t))) + (match c + [(('scope more)) + (parse-enum-def ename (subst-macros more))] + [_ (parsing-error "syntax error in enum form" c) ] ) ) ) + (define (parse-enum-item ts i items) (match ts [(('id name) ('op "=") ('id name2) . more)