From c2c19c2d6a6bf5967f87a4574f0382ad685cc138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Mon, 10 Apr 2023 20:16:21 +0200 Subject: [PATCH] Use number of procedure arguments function from util-proc in command-line. --- src/Makefile | 4 ++-- src/command-line.scm | 6 +++--- src/util-dict-list.scm | 8 ++++---- src/util-proc.scm | 7 +++++++ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Makefile b/src/Makefile index 7ca6aab..4ef8cb9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -91,7 +91,7 @@ listing.o: listing.import.scm listing.import.scm: $(LISTING-SOURCES) UTIL-DICT-LIST-SOURCES=util-dict-list.scm testing.import.scm \ - util-tag.import.scm + util-tag.import.scm util-proc.import.scm util-dict-list.o: util-dict-list.import.scm util-dict-list.import.scm: $(UTIL-DICT-LIST-SOURCES) @@ -113,7 +113,7 @@ ansi.o: ansi.import.scm ansi.import.scm: $(ANSI-SOURCES) COMMAND-LINE-SOURCES=command-line.scm testing.import.scm \ - util-list.import.scm + util-list.import.scm util-proc.import.scm command-line.o: command-line.import.scm command-line.import.scm: $(COMMAND-LINE-SOURCES) diff --git a/src/command-line.scm b/src/command-line.scm index 14d876e..9d3e1c2 100644 --- a/src/command-line.scm +++ b/src/command-line.scm @@ -39,7 +39,8 @@ (chicken process-context) (chicken format) util-list - testing) + testing + util-proc) ;; Consumes given number of arguments from the list and returns the ;; remainder of the list and a list of arguments consumed. @@ -74,8 +75,7 @@ (when (not specp) (error 'parse-command-line "Unknown argument" arg)) (let* ((proc (caddr specp)) - (info (procedure-information proc)) - (nargs (- (length info) 1)) + (nargs (procedure-num-args proc)) (aargsl (consume-args (cdr args) nargs)) (args (car aargsl)) (aargs (cadr aargsl))) diff --git a/src/util-dict-list.scm b/src/util-dict-list.scm index d41afaa..714ee37 100644 --- a/src/util-dict-list.scm +++ b/src/util-dict-list.scm @@ -54,7 +54,8 @@ (import scheme (chicken base) testing - util-tag) + util-tag + util-proc) ;; Tag used for identifying list dictionaries from this module (define TAG-LDICT (make-tag LDICT)) @@ -162,9 +163,8 @@ ;; accepts more than one argument. If it accepts a third argument, ;; index gets passed as well. (define (ldict-map proc ld) - (let* ((lpi (length (procedure-information proc))) - (both? (> lpi 2)) - (index? (> lpi 3))) + (let ((both? ((procedure-arity>=? 2) proc)) + (index? ((procedure-arity>=? 3) proc))) (let loop ((pairs (ldict-pairs ld)) (res '()) (i 0)) diff --git a/src/util-proc.scm b/src/util-proc.scm index 78fe9fe..8d3a360 100644 --- a/src/util-proc.scm +++ b/src/util-proc.scm @@ -31,6 +31,8 @@ procedure-arity=? procedure-arity>=? procedure-arity>? + + procedure-num-args ) (import scheme @@ -72,4 +74,9 @@ (or rest? (> args n)))) + ;; Returns the number of mandatory arguments + (define (procedure-num-args proc) + (let-values (((args rest?) (procedure-arity-info proc))) + args)) + )