summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-11-15 08:13:42 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-11-20 16:17:18 -0800
commit4d2ab06904fd69c0fc7ba3c5237127726ab5c98b (patch)
treebc4b0613b7af5e914fc70e6d6b20cf1a71e0cbc1 /lib.c
parent3cad8dfa357c5733c94e2a301da9184f3eb50e78 (diff)
downloadtxr-4d2ab06904fd69c0fc7ba3c5237127726ab5c98b.tar.gz
txr-4d2ab06904fd69c0fc7ba3c5237127726ab5c98b.tar.bz2
txr-4d2ab06904fd69c0fc7ba3c5237127726ab5c98b.zip
Functors: structs callable as functions.
* lib.c (generic_funcall): If an object is used as a function, get its lambda method and call that. * txr.1: Document functors.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 2771c18d..09e85693 100644
--- a/lib.c
+++ b/lib.c
@@ -4762,6 +4762,9 @@ val generic_funcall(val fun, struct args *args_in)
default:
callerror(fun, lit("too many arguments"));
}
+ } else if (structp(fun)) {
+ fun = method(fun, lambda_s);
+ break;
}
/* fallthrough */
default: