summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bstruct.scm9
-rw-r--r--tests/test-bstruct.scm3
2 files changed, 11 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) ...)))
diff --git a/tests/test-bstruct.scm b/tests/test-bstruct.scm
index c0e3aaa..7990ab2 100644
--- a/tests/test-bstruct.scm
+++ b/tests/test-bstruct.scm
@@ -66,6 +66,9 @@
(c u64)
(d u32)))
+;; For testing opaque types.
+(define-bstruct <opaque>)
+
(test-suite "bstruct"
(test-group "bstruct?"
(test-assert (bstruct? (bstruct-alloc <vec2>)))