summaryrefslogtreecommitdiffstats
path: root/match.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-05-22 20:03:13 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-05-22 20:03:13 -0700
commit42afde14b0e59de2e0f938806323dad9e2e5ed06 (patch)
tree3d00929c93994345382cc10dae674704cd5ef11a /match.c
parenta580c45de5a825165f46d95206d9ac3c2c52fcd6 (diff)
downloadtxr-42afde14b0e59de2e0f938806323dad9e2e5ed06.tar.gz
txr-42afde14b0e59de2e0f938806323dad9e2e5ed06.tar.bz2
txr-42afde14b0e59de2e0f938806323dad9e2e5ed06.zip
txr: support variable in postive match.
In the @{var mod} syntax in the pattern language, allow mod to be a variable which contains a regex or integer, not just an integer or regex literal. * match.c (h_var): Check for modifier being a variable, and resolve it. * parser.y (modifiers): Allow a SYMTOK phrase. * txr.1: Documented.
Diffstat (limited to 'match.c')
-rw-r--r--match.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/match.c b/match.c
index 3a1024e9..a7a65098 100644
--- a/match.c
+++ b/match.c
@@ -596,6 +596,11 @@ static val h_var(match_line_ctx *c)
sym, nao);
}
+ if (bindable(modifier)) {
+ val mpair = tx_lookup_var_ubc(modifier, c->bindings, elem);
+ modifier = cdr(mpair);
+ }
+
if (pair) {
/* If the variable already has a binding, we replace
it with its value, and treat it as a string match.