diff options
author | Maxime Devos <maximedevos@telenet.be> | 2022-02-11 14:59:38 +0000 |
---|---|---|
committer | Maxime Devos <maximedevos@telenet.be> | 2022-02-11 14:59:38 +0000 |
commit | 81447e9b38e3dbee59709d71c0b571be13bfd4f9 (patch) | |
tree | ceded06f0a37e5360e711718dc7d5b9b9a3a638c | |
parent | 7f6e421e9085ffc72815cde41404f484dd803ab6 (diff) | |
download | gnunet-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.am | 1 | ||||
-rw-r--r-- | gnu/gnunet/dht/client.scm | 66 | ||||
-rw-r--r-- | gnu/gnunet/utils/cut-syntax.scm | 38 | ||||
-rw-r--r-- | tests/mq.scm | 26 | ||||
-rw-r--r-- | tests/network-size.scm | 21 |
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)) |