From 25f5433ad858fafd93ef72112d85d11df147af49 Mon Sep 17 00:00:00 2001 From: "Paul A. Patience" Date: Sat, 12 Feb 2022 15:38:04 +0000 Subject: getopts: forbid :bool in list/cumul types. * stdlib/getopts.tl (list-type-p): Return nil if subtype is :bool. (cumul-type-p): Same. * txr.1: Documented, reworded some sentences, fixed some typos. --- stdlib/getopts.tl | 2 ++ txr.1 | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/stdlib/getopts.tl b/stdlib/getopts.tl index fcfa8ea8..aa6ba4ab 100644 --- a/stdlib/getopts.tl +++ b/stdlib/getopts.tl @@ -73,12 +73,14 @@ (defmeth opt-desc list-type-p (me type) (tree-case type ((indicator btype) (and (eq indicator 'list) + (neq btype :bool) me.(basic-type-p btype))) (x nil))) (defmeth opt-desc cumul-type-p (me type) (tree-case type ((indicator btype) (and (eq indicator 'usr:cumul) + (neq btype :bool) (or me.(basic-type-p btype) me.(list-type-p btype)))) (x nil))) diff --git a/txr.1 b/txr.1 index 4be1b6ef..056b7eec 100644 --- a/txr.1 +++ b/txr.1 @@ -68314,7 +68314,7 @@ macro: (c nil upcase-str "Custom treatment: ARG is converted to uppercase.") (b bool :bool - "A flag you can flip true.")) + "A flag you can flip true.")) (defvarl prog-name *load-path*) @@ -68440,7 +68440,12 @@ and converted accordingly. The option's argument is then a list object whose elements are the converted pieces. For instance .code "(list :dec)" will convert a list of comma-separated decimal integer tokens into -a list of integer objects. The +a list of integer objects. +The +.meta type +argument must be a basic type other than +.codn :bool . +The .code list option type does not nest. .meIP (cumul << type ) @@ -68450,14 +68455,17 @@ symbol, it indicates that if the option is specified multiple times, the values coming from the multiple occurrences are accumulated into a list. The .meta type -argument may be a +argument must be a .code list -type, exemplified by +type or a basic type other than +.codn :bool , +for example .code "(cumul (list :dec))" -or a basic type, such as +and .codn "(cumul :str)" . -However, this type specifier does not nest. Combinations such as -.code "(cumul (cumul ...)" +This type specifier does not nest: +combinations such as +.code "(cumul (cumul ...))" and .code "(list (cumul ...))" are invalid. -- cgit v1.2.3