summaryrefslogtreecommitdiffstats
path: root/match.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-02-17 07:56:29 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-02-17 07:56:29 -0800
commite45772713089105c776556655d671102375d9a72 (patch)
treeb6201f694dac62b8375c087a97ccf437847dce52 /match.c
parentcf5fbe748a05001e840d3efcdba15e8d56369ccb (diff)
downloadtxr-e45772713089105c776556655d671102375d9a72.tar.gz
txr-e45772713089105c776556655d671102375d9a72.tar.bz2
txr-e45772713089105c776556655d671102375d9a72.zip
@(call): bugfix: matching doesn't continue.
* match.c (v_call): This function must propagate the next_spec_k return value, rather than return a short-circuiting match object, which causes the parent to immediately succeed. * tests/008/call.txr: New test case, from Frank Schwidom. * tests/008/call.expected: Likewise.
Diffstat (limited to 'match.c')
-rw-r--r--match.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/match.c b/match.c
index 1010062d..9782c937 100644
--- a/match.c
+++ b/match.c
@@ -4516,7 +4516,8 @@ static val v_call(match_files_ctx *c)
if (ret == decline_k)
sem_error(nil, lit("call: function ~s not found"), funval, nao);
- return cons(ctx.bindings, if3(ctx.data, cons(ctx.data, ctx.data_lineno), t));
+ c->bindings = ctx.bindings;
+ return ret;
}
static val h_do(match_line_ctx *c)