From 830eeae41522ce5885021c189e0d03c071fe4fc6 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Sun, 29 May 2022 21:23:57 -0400 Subject: [PATCH 6/7] ; bindat (strz): Move all pack logic to pack function --- lisp/emacs-lisp/bindat.el | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el index 20095ef6cd..cf17e5764d 100644 --- a/lisp/emacs-lisp/bindat.el +++ b/lisp/emacs-lisp/bindat.el @@ -439,11 +439,19 @@ bindat--pack-str (aset bindat-raw (+ bindat-idx i) (aref v i))) (setq bindat-idx (+ bindat-idx len))) -(defun bindat--pack-strz (v) - (let ((len (length v))) - (dotimes (i len) - (aset bindat-raw (+ bindat-idx i) (aref v i))) - (setq bindat-idx (+ bindat-idx len 1)))) +(defun bindat--pack-strz (len v) + (if (numberp len) + (progn + ;; Same as the str type, except always leave room for the null + ;; terminator. This assumes that `len' > 0. + (bindat--pack-str (1- len) v) + ;; "Write" the null terminator. This assumes that `bindat-raw' was + ;; initialized with zeroes. + (setq bindat-idx (1+ bindat-idx))) + (let ((len (length v))) + (dotimes (i len) + (aset bindat-raw (+ bindat-idx i) (aref v i))) + (setq bindat-idx (+ bindat-idx len 1))))) (defun bindat--pack-bits (len v) (let ((bnum (1- (* 8 len))) j m) @@ -690,17 +698,7 @@ bindat--type `(cl-incf bindat-idx ,(if (numberp len) len `(1+ (length ,val))))) - (`(pack . ,args) - (macroexp-let2 nil len len - (if (numberp len) - `(progn - ;; Same as the str type, except always leave room for the null - ;; terminator. This assumes that `len' > 0. - (bindat--pack-str ,(1- len) . ,args) - ;; "Write" the null terminator. This assumes that `bindat-raw' was - ;; initialized with zeroes. - (setq bindat-idx (1+ bindat-idx))) - `(bindat--pack-strz . ,args)))))) + (`(pack . ,args) `(bindat--pack-strz ,len . ,args)))) (cl-defmethod bindat--type (op (_ (eql 'bits)) len) (bindat--pcase op -- 2.36.1