[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet-scheme] 31/324: fix netstruct, and implement wrap-reader-setter
From: |
gnunet |
Subject: |
[gnunet-scheme] 31/324: fix netstruct, and implement wrap-reader-setter |
Date: |
Tue, 21 Sep 2021 13:21:11 +0200 |
This is an automated email from the git hooks/post-receive script.
maxime-devos pushed a commit to branch master
in repository gnunet-scheme.
commit 643cb8be6ea2bf7930340df128650945b5292967
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Mon Jan 4 16:29:28 2021 +0100
fix netstruct, and implement wrap-reader-setter
---
gnu/gnunet/utils/netstruct.scm | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/gnu/gnunet/utils/netstruct.scm b/gnu/gnunet/utils/netstruct.scm
index b7ca44b..913e064 100644
--- a/gnu/gnunet/utils/netstruct.scm
+++ b/gnu/gnunet/utils/netstruct.scm
@@ -32,7 +32,8 @@
u16/big u32/big u64/big
u16/little u32/little u64/little
structure/packed
- sizeof offset select read% set!%)
+ wrap-reader-setter
+ sizeof offset select read% set%!)
(import (rnrs base)
(srfi srfi-26)
(gnu gnunet utils bv-slice))
@@ -141,6 +142,9 @@
((4 slice-u32-ref slice-u64-set!) (u32/big u32/little))
((8 slice-u32-ref slice-u64-set!) (u64/big u64/little)))
+ ;; FIXME ideally field names would be symbols,
+ ;; not strings, but I can't get this to work
+ ;; with symbols.
(define-syntax structure/packed
(syntax-rules ::: ()
((_)
@@ -151,8 +155,7 @@
((_ (field-name field-type) (field-name* field-type*) :::)
(syntax-rules (:sizeof :offset :select
:reader-for-field :setter-for-field
- :reader :setter
- field-name field-name* :::)
+ :reader :setter)
((% :sizeof ())
(+ (field-type :sizeof ())
(field-type* :sizeof ())
@@ -207,6 +210,25 @@
(lambda (slice x)
(fset (fsel slice) x)))))))))
+ (define-syntax wrap-reader-setter
+ (syntax-rules ()
+ ((_ internal internal->wrap wrap->internal)
+ (syntax-rules (:sizeof :offset :reader :setter)
+ ((% :sizeof rest)
+ (internal :sizeof rest))
+ ((% :offset ())
+ (internal :offset ()))
+ ((% :reader ())
+ (let ((internal-reader (internal :reader ()))
+ (internal->wrap/expanded internal->wrap))
+ (lambda (slice)
+ (internal->wrap (internal-reader slice)))))
+ ((% :setter ())
+ (let ((internal-setter (internal :setter ()))
+ (wrap->internal/expanded wrap->internal))
+ (lambda (slice wrapped)
+ (internal-setter slice (wrap->internal wrapped)))))))))
+
(define-syntax syntax-method
(syntax-rules ()
((_ () method)
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet-scheme] 09/324: Fix libextractor imports, (continued)
- [gnunet-scheme] 09/324: Fix libextractor imports, gnunet, 2021/09/21
- [gnunet-scheme] 11/324: Fix some imports and exports, gnunet, 2021/09/21
- [gnunet-scheme] 17/324: Fix libextractor imports, gnunet, 2021/09/21
- [gnunet-scheme] 20/324: Define missing constants, gnunet, 2021/09/21
- [gnunet-scheme] 23/324: Correct variable reference, gnunet, 2021/09/21
- [gnunet-scheme] 24/324: Regularise naming convention, gnunet, 2021/09/21
- [gnunet-scheme] 25/324: Extend let^, gnunet, 2021/09/21
- [gnunet-scheme] 30/324: Correct maximum in metaformats.scm and metatypes.scm, gnunet, 2021/09/21
- [gnunet-scheme] 26/324: Port meta-data-serialize/uncached, gnunet, 2021/09/21
- [gnunet-scheme] 29/324: Define meta data structures systematically, gnunet, 2021/09/21
- [gnunet-scheme] 31/324: fix netstruct, and implement wrap-reader-setter,
gnunet <=
- [gnunet-scheme] 28/324: Define library for structures, gnunet, 2021/09/21
- [gnunet-scheme] 34/324: scripts: add incomplete script for publishing a store item, gnunet, 2021/09/21
- [gnunet-scheme] 33/324: include some notes on reverse-engineering GNUdirs, gnunet, 2021/09/21
- [gnunet-scheme] 36/324: scripts: publish-store: eliminate add-name, gnunet, 2021/09/21
- [gnunet-scheme] 32/324: remove some uses of old accessors, gnunet, 2021/09/21
- [gnunet-scheme] 41/324: scripts: publish-store: fix predicate of --format option, gnunet, 2021/09/21
- [gnunet-scheme] 38/324: scripts: publish-store: publish whole trees, gnunet, 2021/09/21
- [gnunet-scheme] 37/324: scripts: publish-store: publish individual files, gnunet, 2021/09/21
- [gnunet-scheme] 40/324: scripts: publish-store: allow setting all options, gnunet, 2021/09/21
- [gnunet-scheme] 39/324: guix: suggest a package definition, gnunet, 2021/09/21