[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/xelb 23285493ad 3/6: Handle <length> elements in XCB sp
|
From: |
ELPA Syncer |
|
Subject: |
[elpa] externals/xelb 23285493ad 3/6: Handle <length> elements in XCB specs |
|
Date: |
Thu, 18 Jan 2024 12:59:14 -0500 (EST) |
branch: externals/xelb
commit 23285493ad1460e08331969cd580595cc3973702
Author: Steven Allen <steven@stebalien.com>
Commit: Steven Allen <steven@stebalien.com>
Handle <length> elements in XCB specs
See https://cgit.freedesktop.org/xcb/proto/tree/doc/xml-xcb.txt,
xinput's DeviceClass needed this.
* el_client.el (xelb-parse-length): Add a function to handle length
nodes.
(xelb-parse-structure-content): Use `xelb-parse-length'.
---
xcb-types.el | 9 +++++++--
xelb-gen | 6 ++++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/xcb-types.el b/xcb-types.el
index 42e6913f6f..7a9521a799 100644
--- a/xcb-types.el
+++ b/xcb-types.el
@@ -498,7 +498,8 @@ Consider let-bind it rather than change its global value."))
(defclass xcb:-struct (xcb:--struct)
((~lsb :initarg :~lsb
:initform (symbol-value 'xcb:lsb) ;see `eieio-default-eval-maybe'
- :type xcb:-ignore))
+ :type xcb:-ignore)
+ (~size :initform nil :type xcb:-ignore))
:documentation "Struct type.")
(cl-defmethod xcb:marshal ((obj xcb:-struct))
@@ -639,7 +640,11 @@ The optional argument CTX is for <paramref>."
(setq result (+ result (cadr tmp)))
(when (eq type 'xcb:-switch) ;xcb:-switch always finishes a struct
(throw 'break 'nil)))))
- result))
+ (if-let ((size (slot-value obj '~size)))
+ ;; Let the struct compute it's size if a length field is specified.
This lets us skip
+ ;; unknown fields.
+ (eval (slot-value obj '~size) `((obj . ,obj)))
+ result)))
(cl-defmethod xcb:-unmarshal-field ((obj xcb:-struct) type data offset
initform &optional ctx total-length)
diff --git a/xelb-gen b/xelb-gen
index 9d3c634503..7873d120f3 100755
--- a/xelb-gen
+++ b/xelb-gen
@@ -494,6 +494,7 @@ The `combine-adjacent' attribute is simply ignored."
(`pad (xelb-parse-pad node))
(`required_start_align (xelb-parse-required_start_align node))
(`field (xelb-parse-field node))
+ (`length (xelb-parse-length node))
(`fd (xelb-parse-fd node))
(`list (xelb-parse-list node))
(`exprfield (xelb-parse-exprfield node))
@@ -531,6 +532,11 @@ The `combine-adjacent' attribute is simply ignored."
(type (xelb-node-type node)))
`((,name :initarg ,(intern (concat ":" (symbol-name name))) :type ,type))))
+(defun xelb-parse-length (node)
+ "Parse <length>."
+ (let ((length (xelb-parse-expression (xelb-node-subnode node))))
+ `((~size :initform ',length))))
+
(defun xelb-parse-fd (node)
"Parse <fd>."
(let ((name (intern (xelb-node-attr-escape node 'name))))
- [elpa] externals/xelb updated (dfcdbeddf5 -> 04db92e5ab), ELPA Syncer, 2024/01/18
- [elpa] externals/xelb 85e407448e 4/6: Switch back to the Emacs 28 pretty-printer function, ELPA Syncer, 2024/01/18
- [elpa] externals/xelb 23285493ad 3/6: Handle <length> elements in XCB specs,
ELPA Syncer <=
- [elpa] externals/xelb 38962a2085 5/6: Update to xcb-proto 1.16.0, ELPA Syncer, 2024/01/18
- [elpa] externals/xelb 31146e35bb 2/6: Improve type-name resolution, ELPA Syncer, 2024/01/18
- [elpa] externals/xelb 04db92e5ab 6/6: Strict (un)marshal size checking, ELPA Syncer, 2024/01/18
- [elpa] externals/xelb 58a21fdd2f 1/6: Implement float & double types, ELPA Syncer, 2024/01/18