-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
currently, when one has a define-binary-type form with slots, the :key args provided by those slots are not seen by the compiler as being available to subsequent forms, causing warnings such as this:
(define-binary-type box-list (limit)
(:reader (in)
(read-boxes in limit (current-binary-object)))
(:writer (out value)
(write-boxes out value)))
(define-binary-class full-container-bbox (full-bbox-header)
((children (box-list :limit (data-size (current-binary-object))))))
; file: /Users/sly/projects/iso-media/iso-media.lisp
; in: DEFINE-BINARY-CLASS FULL-CONTAINER-BBOX
; (COM.GIGAMONKEYS.BINARY-DATA:DEFINE-BINARY-CLASS
; ISO-MEDIA::FULL-CONTAINER-BBOX (ISO-MEDIA::FULL-BBOX-HEADER)
; ((ISO-MEDIA:CHILDREN (ISO-MEDIA::BOX-LIST :LIMIT (ISO-MEDIA::DATA-SIZE #)))))
; --> COM.GIGAMONKEYS.BINARY-DATA::DEFINE-GENERIC-BINARY-CLASS PROGN
; --> DEFMETHOD PROGN EVAL-WHEN SB-PCL::%DEFMETHOD-EXPANDER PROGN
; --> SB-PCL::LOAD-DEFMETHOD SYMBOL-MACROLET
; --> SB-PCL::FAST-LEXICAL-METHOD-FUNCTIONS
; --> SB-PCL::BIND-FAST-LEXICAL-METHOD-FUNCTIONS LOCALLY SB-PCL::BIND-ARGS
; --> LET* LOCALLY SYMBOL-MACROLET SB-PCL::PV-BINDING SB-PCL::PV-BINDING1
; --> SB-PCL::PV-ENV LOCALLY LET BLOCK LET SYMBOL-MACROLET
; --> SB-PCL::OPTIMIZED-SET-SLOT-VALUE LET
; ==>
; (COM.GIGAMONKEYS.BINARY-DATA:READ-VALUE 'ISO-MEDIA::BOX-LIST #:STREAMVAR708
; :LIMIT
; (ISO-MEDIA::DATA-SIZE
; (COM.GIGAMONKEYS.BINARY-DATA:CURRENT-BINARY-OBJECT)))
;
; caught STYLE-WARNING:
; :LIMIT is not a known argument keyword.
; --> COM.GIGAMONKEYS.BINARY-DATA::DEFINE-GENERIC-BINARY-CLASS PROGN
; --> DEFMETHOD PROGN EVAL-WHEN SB-PCL::%DEFMETHOD-EXPANDER PROGN
; --> SB-PCL::LOAD-DEFMETHOD SYMBOL-MACROLET
; --> SB-PCL::FAST-LEXICAL-METHOD-FUNCTIONS
; --> SB-PCL::BIND-FAST-LEXICAL-METHOD-FUNCTIONS LOCALLY SB-PCL::BIND-ARGS
; --> LET* LOCALLY SYMBOL-MACROLET SB-PCL::PV-BINDING SB-PCL::PV-BINDING1
; --> SB-PCL::PV-ENV LOCALLY LET BLOCK LET SYMBOL-MACROLET
; ==>
; (COM.GIGAMONKEYS.BINARY-DATA:WRITE-VALUE 'ISO-MEDIA::BOX-LIST #:STREAMVAR710
; (SB-PCL::OPTIMIZED-SLOT-VALUE
; (SLOT-VALUE #:G746
; 'ISO-MEDIA:CHILDREN)
; #:OBJECTVAR709
; (SB-PCL::INSTANCE-READ
; (SB-PCL::PV-OFFSET 0)
; #:OBJECTVAR709 0
; 'ISO-MEDIA:CHILDREN
; 'ISO-MEDIA::FULL-CONTAINER-BBOX))
; :LIMIT
; (ISO-MEDIA::DATA-SIZE
; (COM.GIGAMONKEYS.BINARY-DATA:CURRENT-BINARY-OBJECT)))
;
; caught STYLE-WARNING:
; :LIMIT is not a known argument keyword.
Changing the progn in the define-binary-type macro to an eval-when fixes the problem:
diff --git a/binary-data.lisp b/binary-data.lisp
index bf0e080..573af15 100644
--- a/binary-data.lisp
+++ b/binary-data.lisp
@@ -36,7 +36,7 @@
(defmacro define-binary-type (name (&rest args) &body spec)
(with-gensyms (type stream value)
- `(progn
+ `(eval-when (:compile-toplevel :load-toplevel :execute)
(defmethod read-value ((,type (eql ',name)) ,stream &key ,@args)
(declare (ignorable ,@args))
,(type-reader-body spec stream))
Metadata
Metadata
Assignees
Labels
No labels