aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2022-02-11 14:59:38 +0000
committerMaxime Devos <maximedevos@telenet.be>2022-02-11 14:59:38 +0000
commit81447e9b38e3dbee59709d71c0b571be13bfd4f9 (patch)
treeceded06f0a37e5360e711718dc7d5b9b9a3a638c
parent7f6e421e9085ffc72815cde41404f484dd803ab6 (diff)
downloadgnunet-scheme-81447e9b38e3dbee59709d71c0b571be13bfd4f9.tar.gz
gnunet-scheme-81447e9b38e3dbee59709d71c0b571be13bfd4f9.zip
Make uses of 'set%!' less verbose.
* gnu/gnunet/utils/cut-syntax.scm: New module. * Makefile.am: Add it. * gnu/gnunet/dht/client.scm: Use it. * tests/mq.scm: Likewise. * tests/network-size.scm: Likewise.
-rw-r--r--Makefile.am1
-rw-r--r--gnu/gnunet/dht/client.scm66
-rw-r--r--gnu/gnunet/utils/cut-syntax.scm38
-rw-r--r--tests/mq.scm26
-rw-r--r--tests/network-size.scm21
5 files changed, 96 insertions, 56 deletions
diff --git a/Makefile.am b/Makefile.am
index b42b6cc..dc4b207 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,6 +60,7 @@ modules = \
60 \ 60 \
61 gnu/gnunet/utils/bv-slice.scm \ 61 gnu/gnunet/utils/bv-slice.scm \
62 gnu/gnunet/utils/hat-let.scm \ 62 gnu/gnunet/utils/hat-let.scm \
63 gnu/gnunet/utils/cut-syntax.scm \
63 gnu/gnunet/utils/netstruct.scm \ 64 gnu/gnunet/utils/netstruct.scm \
64 gnu/gnunet/utils/platform-enum.scm \ 65 gnu/gnunet/utils/platform-enum.scm \
65 gnu/gnunet/utils/tokeniser.scm \ 66 gnu/gnunet/utils/tokeniser.scm \
diff --git a/gnu/gnunet/dht/client.scm b/gnu/gnunet/dht/client.scm
index 95aedc8..12bd9d7 100644
--- a/gnu/gnunet/dht/client.scm
+++ b/gnu/gnunet/dht/client.scm
@@ -103,11 +103,13 @@
103 slice-length slice/read-only make-slice/read-write slice-copy! 103 slice-length slice/read-only make-slice/read-write slice-copy!
104 slice-slice verify-slice-readable) 104 slice-slice verify-slice-readable)
105 (gnu gnunet utils hat-let) 105 (gnu gnunet utils hat-let)
106 (only (gnu gnunet utils cut-syntax)
107 cut-syntax)
106 (only (rnrs base) 108 (only (rnrs base)
107 and >= = quote * / + - define begin ... let* 109 and >= = quote * / + - define begin ... let*
108 quote case else values apply let cond if > 110 quote case else values apply let cond if >
109 <= expt assert exact? integer? lambda for-each 111 <= expt assert exact? integer? lambda for-each
110 not expt min max div-and-mod positive?) 112 not expt min max div-and-mod positive? define-syntax)
111 (only (rnrs control) 113 (only (rnrs control)
112 unless when) 114 unless when)
113 (only (rnrs records syntactic) 115 (only (rnrs records syntactic)
@@ -399,15 +401,16 @@ slices in @var{old} do not impact the new search result."
399 "Create a new @code{/:msg:dht:client:get} message for the query object 401 "Create a new @code{/:msg:dht:client:get} message for the query object
400 @var{query}, with @var{unique-id} as ‘unique id’ and @var{options} as options." 402 @var{query}, with @var{unique-id} as ‘unique id’ and @var{options} as options."
401 (define s (make-slice/read-write (sizeof /:msg:dht:client:get '()))) 403 (define s (make-slice/read-write (sizeof /:msg:dht:client:get '())))
402 (set%! /:msg:dht:client:get '(header size) s (slice-length s)) 404 (define-syntax set%!/get (cut-syntax set%! /:msg:dht:client:get <> s <>))
403 (set%! /:msg:dht:client:get '(header type) s 405 (set%!/get '(header size) (slice-length s))
404 (value->index (symbol-value message-type msg:dht:client:get))) 406 (set%!/get '(header type)
405 (set%! /:msg:dht:client:get '(options) s options) 407 (value->index (symbol-value message-type msg:dht:client:get)))
406 (set%! /:msg:dht:client:get '(desired-replication-level) s 408 (set%!/get '(options) options)
407 (query-desired-replication-level query)) 409 (set%!/get '(desired-replication-level)
408 (set%! /:msg:dht:client:get '(type) s (query-type query)) 410 (query-desired-replication-level query))
411 (set%!/get '(type) (query-type query))
409 (slice-copy! (query-key query) (select /:msg:dht:client:get '(key) s)) 412 (slice-copy! (query-key query) (select /:msg:dht:client:get '(key) s))
410 (set%! /:msg:dht:client:get '(unique-id) s unique-id) 413 (set%!/get '(unique-id) unique-id)
411 s) 414 s)
412 415
413 (define* (construct-client-put insertion #:optional (options 0)) 416 (define* (construct-client-put insertion #:optional (options 0))
@@ -421,17 +424,17 @@ object insertion with @var{options} as options."
421 (+ size/header (slice-length (datum-value datum))))) 424 (+ size/header (slice-length (datum-value datum)))))
422 (define header (slice-slice message 0 size/header)) 425 (define header (slice-slice message 0 size/header))
423 (define rest (slice-slice message size/header)) 426 (define rest (slice-slice message size/header))
424 (set%! /:msg:dht:client:put '(header type) header 427 (define-syntax set%!/put (cut-syntax set%! /:msg:dht:client:put <> header <>))
425 (value->index (symbol-value message-type msg:dht:client:put))) 428 (set%!/put '(header type)
426 (set%! /:msg:dht:client:put '(header size) header size) 429 (value->index (symbol-value message-type msg:dht:client:put)))
427 (set%! /:msg:dht:client:put '(type) header (datum-type datum)) 430 (set%!/put '(header size) size)
428 (set%! /:msg:dht:client:put '(option) header options) 431 (set%!/put '(type) (datum-type datum))
429 (set%! /:msg:dht:client:put '(desired-replication-level) header 432 (set%!/put '(option) options)
430 (insertion-desired-replication-level insertion)) 433 (set%!/put '(desired-replication-level)
431 (set%! /:msg:dht:client:put '(expiration) header (datum-expiration datum)) 434 (insertion-desired-replication-level insertion))
435 (set%!/put '(expiration) (datum-expiration datum))
432 ;; Copy key-data pair to insert into the DHT. 436 ;; Copy key-data pair to insert into the DHT.
433 (slice-copy! (datum-key datum) 437 (slice-copy! (datum-key datum) (select /:msg:dht:client:put '(key) header))
434 (select /:msg:dht:client:put '(key) header))
435 (slice-copy! (datum-value datum) rest) 438 (slice-copy! (datum-value datum) rest)
436 message) 439 message)
437 440
@@ -459,20 +462,17 @@ result object @var{search-result}, with @var{unique-id} as ‘unique id’"
459 (! message (make-slice/read-write size)) 462 (! message (make-slice/read-write size))
460 (! header (slice-slice message 0 size/header)) 463 (! header (slice-slice message 0 size/header))
461 (! rest (slice-slice message size/header))) 464 (! rest (slice-slice message size/header)))
462 (set%! /:msg:dht:client:result '(header type) 465 (define-syntax set%!/result
463 header 466 (cut-syntax set%! /:msg:dht:client:result <> header <>))
464 (value->index 467 (set%!/result '(header type)
465 (symbol-value message-type msg:dht:client:result))) 468 (value->index
466 (set%! /:msg:dht:client:result '(header size) 469 (symbol-value message-type msg:dht:client:result)))
467 header 470 (set%!/result '(header size) size)
468 size) 471 (set%!/result '(type) type)
469 (set%! /:msg:dht:client:result '(type) header type) 472 (set%!/result '(get-path-length) get-path-length)
470 (set%! /:msg:dht:client:result '(get-path-length) 473 (set%!/result '(put-path-length) put-path-length)
471 header get-path-length) 474 (set%!/result '(unique-id) unique-id)
472 (set%! /:msg:dht:client:result '(put-path-length) 475 (set%!/result '(expiration) expiration)
473 header put-path-length)
474 (set%! /:msg:dht:client:result '(unique-id) header unique-id)
475 (set%! /:msg:dht:client:result '(expiration) header expiration)
476 (slice-copy! key (select /:msg:dht:client:result '(key) header)) 476 (slice-copy! key (select /:msg:dht:client:result '(key) header))
477 ;; TODO: get-path and put path! 477 ;; TODO: get-path and put path!
478 (slice-copy! value rest) 478 (slice-copy! value rest)
diff --git a/gnu/gnunet/utils/cut-syntax.scm b/gnu/gnunet/utils/cut-syntax.scm
new file mode 100644
index 0000000..bc4ee9d
--- /dev/null
+++ b/gnu/gnunet/utils/cut-syntax.scm
@@ -0,0 +1,38 @@
1;; This file is part of Scheme-GNUnet
2;; Copyright © 2022 GNUnet e.V.
3;;
4;; Scheme-GNUnet is free software: you can redistribute it and/or modify it
5;; under the terms of the GNU Affero General Public License as published
6;; by the Free Software Foundation, either version 3 of the License,
7;; or (at your option) any later version.
8;;
9;; Scheme-GNUnet is distributed in the hope that it will be useful, but
10;; WITHOUT ANY WARRANTY; without even the implied warranty of
11;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12;; Affero General Public License for more details.
13;;
14;; You should have received a copy of the GNU Affero General Public License
15;; along with this program. If not, see <http://www.gnu.org/licenses/>.
16;;
17;; SPDX-License-Identifier: AGPL-3.0-or-later
18
19;; TODO: eliminate (gnu gnunet netstruct syntactic), use a compiler pass instead
20;; for inlining, then ‘cut-syntax’ can be deprecated in favour of a ‘cut’.
21(define-library (gnu gnunet utils cut-syntax)
22 (export cut-syntax)
23 (import (only (rnrs base) ... begin define-syntax syntax-rules))
24 (begin
25 (define-syntax substitute
26 (syntax-rules (<>)
27 ((_ (substituted ...) (<> . foos) (bar . bars))
28 (substitute (substituted ... bar) foos bars))
29 ((_ (substituted ...) (foo . foos) bars)
30 (substitute (substituted ... foo) foos bars))
31 ((_ (substituted ...) () ())
32 (substituted ...))))
33
34 (define-syntax cut-syntax
35 (syntax-rules ()
36 ((_ . foos)
37 (syntax-rules ()
38 ((_ . bars) (substitute () foos bars))))))))
diff --git a/tests/mq.scm b/tests/mq.scm
index 14d2a27..8d456ac 100644
--- a/tests/mq.scm
+++ b/tests/mq.scm
@@ -1,5 +1,5 @@
1;; This file is part of GNUnet. 1;; This file is part of GNUnet.
2;; Copyright (C) 2012, 2018, 2021 GNUnet e.V. 2;; Copyright (C) 2012, 2018, 2021, 2022 GNUnet e.V.
3;; 3;;
4;; GNUnet is free software: you can redistribute it and/or modify it 4;; GNUnet is free software: you can redistribute it and/or modify it
5;; under the terms of the GNU Affero General Public License as published 5;; under the terms of the GNU Affero General Public License as published
@@ -46,6 +46,7 @@
46 (gnu gnunet util struct) 46 (gnu gnunet util struct)
47 (gnu gnunet utils bv-slice) 47 (gnu gnunet utils bv-slice)
48 (gnu gnunet utils hat-let) 48 (gnu gnunet utils hat-let)
49 (gnu gnunet utils cut-syntax)
49 ((gnu extractor enum) 50 ((gnu extractor enum)
50 #:select (symbol-value value->index)) 51 #:select (symbol-value value->index))
51 (gnu gnunet message protocols) 52 (gnu gnunet message protocols)
@@ -82,11 +83,11 @@ Then each time the index is increased.")
82(define (index->dummy i) 83(define (index->dummy i)
83 (let ((s (make-slice/read-write 84 (let ((s (make-slice/read-write
84 (sizeof /:msg:our-test:dummy '())))) 85 (sizeof /:msg:our-test:dummy '()))))
85 (set%! /:msg:our-test:dummy '(header type) s 86 (define-syntax set%!/dummy (cut-syntax set%! /:msg:our-test:dummy <> s <>))
86 (value->index (symbol-value message-type msg:util:dummy))) 87 (set%!/dummy '(header type)
87 (set%! /:msg:our-test:dummy '(header size) s 88 (value->index (symbol-value message-type msg:util:dummy)))
88 (sizeof /:msg:our-test:dummy '())) 89 (set%!/dummy '(header size) (sizeof /:msg:our-test:dummy '()))
89 (set%! /:msg:our-test:dummy '(index) s i) 90 (set%!/dummy '(index) i)
90 s)) 91 s))
91 92
92(define (dummy->index s) 93(define (dummy->index s)
@@ -341,12 +342,13 @@ Then each time the index is increased.")
341(define (make-thread-message thread-index i) 342(define (make-thread-message thread-index i)
342 (let ((s (make-slice/read-write 343 (let ((s (make-slice/read-write
343 (sizeof /:msg:our-test:concurrency '())))) 344 (sizeof /:msg:our-test:concurrency '()))))
344 (set%! /:msg:our-test:concurrency '(header type) s 345 (define-syntax set%!/concurrency
345 (value->index (symbol-value message-type msg:util:dummy))) 346 (cut-syntax set%! /:msg:our-test:concurrency <> s <>))
346 (set%! /:msg:our-test:concurrency '(header size) s 347 (set%!/concurrency
347 (sizeof /:msg:our-test:concurrency '())) 348 '(header type) (value->index (symbol-value message-type msg:util:dummy)))
348 (set%! /:msg:our-test:concurrency '(index) s i) 349 (set%!/concurrency '(header size) (sizeof /:msg:our-test:concurrency '()))
349 (set%! /:msg:our-test:concurrency '(thread) s thread-index) 350 (set%!/concurrency '(index) i)
351 (set%!/concurrency '(thread) thread-index)
350 s)) 352 s))
351 353
352(define (decode-thread-message s) 354(define (decode-thread-message s)
diff --git a/tests/network-size.scm b/tests/network-size.scm
index 0b27d29..8f8e6bb 100644
--- a/tests/network-size.scm
+++ b/tests/network-size.scm
@@ -23,6 +23,7 @@
23 (gnu extractor enum) 23 (gnu extractor enum)
24 (gnu gnunet message protocols) 24 (gnu gnunet message protocols)
25 (gnu gnunet config db) 25 (gnu gnunet config db)
26 (gnu gnunet utils cut-syntax)
26 (only (rnrs base) 27 (only (rnrs base)
27 assert) 28 assert)
28 (prefix (gnu gnunet nse client) #{nse:}#) 29 (prefix (gnu gnunet nse client) #{nse:}#)
@@ -103,19 +104,17 @@
103 (define (send! estimate) 104 (define (send! estimate)
104 (define s (make-slice/read-write 105 (define s (make-slice/read-write
105 (sizeof /:msg:nse:estimate '()))) 106 (sizeof /:msg:nse:estimate '())))
107 (define-syntax set%!/estimate
108 (cut-syntax set%! /:msg:nse:estimate <> s <>))
106 ;; Set the headers 109 ;; Set the headers
107 (set%! /:msg:nse:estimate '(header size) s 110 (set%!/estimate '(header size) (sizeof /:msg:nse:estimate '()))
108 (sizeof /:msg:nse:estimate '())) 111 (set%!/estimate '(header type)
109 (set%! /:msg:nse:estimate '(header type) s 112 (value->index
110 (value->index 113 (symbol-value message-type msg:nse:estimate)))
111 (symbol-value message-type msg:nse:estimate)))
112 ;; Set the data 114 ;; Set the data
113 (set%! /:msg:nse:estimate '(timestamp) s 115 (set%!/estimate '(timestamp) (list-ref estimate 3))
114 (list-ref estimate 3)) 116 (set%!/estimate '(size-estimate) (list-ref estimate 0))
115 (set%! /:msg:nse:estimate '(size-estimate) s 117 (set%!/estimate '(std-deviation) (list-ref estimate 2))
116 (list-ref estimate 0))
117 (set%! /:msg:nse:estimate '(std-deviation) s
118 (list-ref estimate 2))
119 ;; Send the estimate 118 ;; Send the estimate
120 (send-message! mq s)) 119 (send-message! mq s))
121 (for-each send! %estimates)) 120 (for-each send! %estimates))