summaryrefslogtreecommitdiffstats
path: root/match.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-04-13 21:56:12 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-04-13 21:56:12 -0700
commite42436bf67ede230612c838b0253276d98b48c72 (patch)
tree966d7f15eaa860654de3d07c941eb2c4b372f48e /match.c
parentd2bcf2d01c52b23fea69b1492d437404eb67f7ff (diff)
downloadtxr-e42436bf67ede230612c838b0253276d98b48c72.tar.gz
txr-e42436bf67ede230612c838b0253276d98b48c72.tar.bz2
txr-e42436bf67ede230612c838b0253276d98b48c72.zip
txr: gather: report list of missing required vars.
* match.c (v_gather): Identify all required variables that are missing, and list them all in the diagnostic.
Diffstat (limited to 'match.c')
-rw-r--r--match.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/match.c b/match.c
index d95331e3..2fa61026 100644
--- a/match.c
+++ b/match.c
@@ -3134,19 +3134,25 @@ static val v_gather(match_files_ctx *c)
if (have_vars) {
val iter;
+ val missing = nil;
for (iter = vars; iter != nil; iter = cdr(iter)) {
cons_bind (var, dfl_val, car(iter));
if (!tx_lookup_var(var, c->bindings)) {
if (dfl_val == noval_s) {
- debuglf(specline, lit("gather failed to match some required vars"), nao);
- return nil;
+ push(var, &missing);
} else {
c->bindings = acons(var, dfl_val, c->bindings);
}
}
}
+ if (missing) {
+ debuglf(specline, lit("gather failed to match required vars ~s"),
+ missing, nao);
+ return nil;
+ }
+
debuglf(specline, lit("gather matched all required vars"), nao);
return next_spec_k;
}