diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-10-24 23:35:48 -0400 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-10-24 23:35:48 -0400 |
commit | 77b9c8f289df7b0ba45668e09cdc040252c681c8 (patch) | |
tree | d1d6df2cd1ed2ad82a9aa845cda6c4243f01ce99 /unwind.c | |
parent | 23a6fd5129b285d25faa8198e395ac91db0348c4 (diff) | |
download | txr-77b9c8f289df7b0ba45668e09cdc040252c681c8.tar.gz txr-77b9c8f289df7b0ba45668e09cdc040252c681c8.tar.bz2 txr-77b9c8f289df7b0ba45668e09cdc040252c681c8.zip |
* filter.c (function_filter): New function.
(get_filter): Handle (fun ...) syntax.
* match.c (v_bind): Establish dynamic environment frame around
dest_bind, and stash the bindings there so filters can have access
to the bindings.
(v_output): Likewise, around do_output calls.
(v_fun): New function.
(match_files): Function handling broken out into v_fun.
(match_funcall): New function.
* match.h (match_funcall): Declared.
* unwind.c (uw_push_env): Initialize match_context.
(uw_get_match_context, uw_set_match_context): New functions.
* unwind.h (struct uw_dynamic_env): New member, match_context.
(uw_get_match_context, uw_set_match_context): Declared.
* txr.1: Documented function filters.
Diffstat (limited to 'unwind.c')
-rw-r--r-- | unwind.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -125,6 +125,7 @@ void uw_push_env(uw_frame_t *fr) fr->ev.type = UW_ENV; fr->ev.up_env = prev_env; fr->ev.func_bindings = nil; + fr->ev.match_context = nil; fr->ev.up = uw_stack; uw_stack = fr; uw_env_stack = fr; @@ -152,6 +153,19 @@ val uw_set_func(val sym, val value) return value; } +val uw_get_match_context(void) +{ + uw_frame_t *env = uw_find_env(); + return env->ev.match_context; +} + +val uw_set_match_context(val context) +{ + uw_frame_t *env = uw_find_env(); + env->ev.match_context = context; + return context; +} + void uw_pop_frame(uw_frame_t *fr) { assert (fr == uw_stack); |