summaryrefslogtreecommitdiffhomepage
path: root/lib.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-08-29 15:02:31 +0200
committerJo-Philipp Wich <jo@mein.io>2022-08-29 15:02:31 +0200
commit344fa9e69da43ecdc4d8f7768d85d42639352405 (patch)
tree156657bbf8ceb57d7b9af8a6a9f92d829263e2ee /lib.c
parent89452b20e5073feb28b294a707342ef144f4b5f0 (diff)
lib: extend render() to support function values
Extend the `render()` function to accept a function value as first argument, which allows running arbitrary ucode functions and capturing their output. This is especially useful in conjunction with `loadfile()` or `loadstring()` to dynamically compile templates and rendering their output into a string. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib.c b/lib.c
index d5e02a5..5d76cc8 100644
--- a/lib.c
+++ b/lib.c
@@ -2484,8 +2484,13 @@ uc_render(uc_vm_t *vm, size_t nargs)
prev = vm->output;
vm->output = mem;
+ /* execute function */
+ if (ucv_is_callable(uc_fn_arg(0)))
+ (void) uc_vm_call(vm, false, nargs - 1);
+
/* execute include */
- (void) uc_include_common(vm, nargs, false);
+ else
+ (void) uc_include_common(vm, nargs, false);
/* restore previous VM output */
vm->output = prev;