diff options
Diffstat (limited to 'bstruct.scm')
-rw-r--r-- | bstruct.scm | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/bstruct.scm b/bstruct.scm index df5163a..8efe98b 100644 --- a/bstruct.scm +++ b/bstruct.scm @@ -693,6 +693,10 @@ (symbolic-match? pointer) #`(make-pointer size align #,(build-type #'desc))))) (syntax-case stx () + ;; Opaque types have no descriptor. + ((_ id name (opaque)) + (symbolic-match? opaque) + #'(define id #f)) ((_ id name layout . kwargs) (with-syntax ((type (build-type #'layout))) #`(define id (make-bstruct-descriptor 'name type . kwargs))))))) @@ -1176,6 +1180,9 @@ (type-id (bstruct-descriptor-identifier? #'type-id) #'type-id) + ((opaque) + (symbolic-match? opaque) + expr) (primitive (identifier-memq? #'primitive primitives) (let ((type (syntax->datum #'primitive))) @@ -1357,7 +1364,7 @@ (with-syntax ((((expr . kwargs) ...) (map (lambda (stx) (syntax-case stx () - (() #'(opaque)) + (() #'((opaque))) (_ stx))) #'(args ...)))) #'(define-bstruct* (id expr . kwargs) ...))) |