summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2024-11-18 21:12:09 -0500
committerDavid Thompson <dthompson2@worcester.edu>2024-11-18 21:12:09 -0500
commitb882724e502c07c7e4e475d266dbb5175c661b48 (patch)
treee5c6790f65593419cd9d1b8459b1628eca083a21
parent1f4778a74416b51fbeaed9ea78ecd5adf7f384a2 (diff)
Remove opaque type; s/alignment/align
-rw-r--r--bstruct.scm94
1 files changed, 38 insertions, 56 deletions
diff --git a/bstruct.scm b/bstruct.scm
index 9edb5ce..2755303 100644
--- a/bstruct.scm
+++ b/bstruct.scm
@@ -76,10 +76,10 @@
define-bstruct))
(define-record-type <scalar>
- (make-scalar size alignment native? type)
+ (make-scalar size align native? type)
scalar?
(size scalar-size)
- (alignment scalar-alignment)
+ (align scalar-align)
(native? scalar-native?) ; native endianness?
(type scalar-type))
@@ -91,10 +91,10 @@
(type struct-field-type))
(define-record-type <struct>
- (make-struct size alignment fields)
+ (make-struct size align fields)
%struct?
(size struct-size)
- (alignment struct-alignment)
+ (align struct-align)
(fields struct-fields))
(define-record-type <union-field>
@@ -104,33 +104,28 @@
(type union-field-type))
(define-record-type <union>
- (make-union size alignment fields)
+ (make-union size align fields)
union?
(size union-size)
- (alignment union-alignment)
+ (align union-align)
(fields union-fields))
(define-record-type <array>
- (make-array size alignment length type)
+ (make-array size align length type)
array?
(size array-size)
- (alignment array-alignment)
+ (align array-align)
(length array-length)
(type array-type))
(define-record-type <pointer>
- (make-pointer size alignment type)
+ (make-pointer size align type)
pointer?
(size pointer-size)
- (alignment pointer-alignment)
- ;; Mutable for recursive types.
+ (align pointer-align)
+ ;; Mutable for setting up recursive types.
(type pointer-type set-pointer-type!))
-(define-record-type <opaque>
- (make-opaque)
- opaque?)
-
-;; TODO: functions
;; TODO: bitfields
(define (struct-field-ref struct name)
@@ -152,8 +147,7 @@
(%struct? obj)
(union? obj)
(array? obj)
- (pointer? obj)
- (opaque? obj)))
+ (pointer? obj)))
(define (sizeof type)
(match type
@@ -162,28 +156,16 @@
($ <union> size)
($ <array> size)
($ <pointer> size))
- size)
- (($ <opaque>)
- (raise-exception
- (make-exception (make-exception-with-message
- "cannot get size of opaque type")
- (make-exception-with-origin 'sizeof)
- (make-exception-with-irritants (list type)))))))
+ size)))
(define (alignof type)
(match type
- ((or ($ <scalar> _ alignment)
- ($ <struct> _ alignment)
- ($ <union> _ alignment)
- ($ <array> _ alignment)
- ($ <pointer> _ alignment))
- alignment)
- (($ <opaque>)
- (raise-exception
- (make-exception (make-exception-with-message
- "cannot get alignment of opaque type")
- (make-exception-with-origin 'sizeof)
- (make-exception-with-irritants (list type)))))))
+ ((or ($ <scalar> _ align)
+ ($ <struct> _ align)
+ ($ <union> _ align)
+ ($ <array> _ align)
+ ($ <pointer> _ align))
+ align)))
(define-syntax-rule (assert expr who)
(unless expr
@@ -413,9 +395,9 @@
(let-values (((_ transformer) (syntax-local-binding id)))
(procedure-property transformer 'bstruct-size)))
-(define (bstruct-descriptor-identifier-alignment id)
+(define (bstruct-descriptor-identifier-align id)
(let-values (((_ transformer) (syntax-local-binding id)))
- (procedure-property transformer 'bstruct-alignment)))
+ (procedure-property transformer 'bstruct-align)))
;; A predicate that can answer the questions:
;; 1) Is this *any kind* of bstruct?
@@ -526,7 +508,7 @@
(syntax-case stx ()
((_ <type>)
(non-opaque-bstruct-descriptor-identifier? #'<type>)
- (bstruct-descriptor-identifier-alignment #'<type>)))))
+ (bstruct-descriptor-identifier-align #'<type>)))))
;; 'bstruct-pack!' and 'bstruct-unpack' allow for directly
;; interpreting bytevector contents as structured data.
@@ -648,29 +630,29 @@
(id
(identifier? #'id)
desc)
- ((scalar size alignment native? type)
+ ((scalar size align native? type)
(symbolic-match? scalar)
- #'(make-scalar size alignment native? 'type))
- ((struct size alignment (field ...))
+ #'(make-scalar size align native? 'type))
+ ((struct size align (field ...))
(symbolic-match? struct)
(with-syntax (((field ...) (map build-struct-field #'(field ...))))
- #'(make-struct size alignment (list field ...))))
- ((union size alignment (field ...))
+ #'(make-struct size align (list field ...))))
+ ((union size align (field ...))
(symbolic-match? union)
(with-syntax (((field ...) (map build-union-field #'(field ...))))
- #'(make-union size alignment (list field ...))))
- ((array size alignment length desc)
+ #'(make-union size align (list field ...))))
+ ((array size align length desc)
(symbolic-match? array)
- #`(make-array size alignment length #,(build-type #'desc)))
- ((pointer size alignment (recur _))
+ #`(make-array size align length #,(build-type #'desc)))
+ ((pointer size align (recur _))
(and (symbolic-match? pointer) (symbolic-match? recur))
- #'(make-pointer size alignment #f))
- ((pointer size alignment void)
+ #'(make-pointer size align #f))
+ ((pointer size align void)
(and (symbolic-match? pointer) (symbolic-match? void))
- #'(make-pointer size alignment #f))
- ((pointer size alignment desc)
+ #'(make-pointer size align #f))
+ ((pointer size align desc)
(symbolic-match? pointer)
- #`(make-pointer size alignment #,(build-type #'desc)))))
+ #`(make-pointer size align #,(build-type #'desc)))))
(syntax-case stx ()
((_ id name layout . kwargs)
(with-syntax ((type (build-type #'layout)))
@@ -721,7 +703,7 @@
0)
(_
(bstruct-descriptor-identifier? type)
- (bstruct-descriptor-identifier-alignment type))))
+ (bstruct-descriptor-identifier-align type))))
(define (expand-accessor proc stx id op type)
(syntax-case stx ()
(() (proc id 0)) ; self reference
@@ -1026,7 +1008,7 @@
#((bstruct? . #t)
(bstruct-opaque? . #f)
(bstruct-size . size)
- (bstruct-alignment . align))
+ (bstruct-align . align))
(let ((type #'desc))
(syntax-case stx ()
(self