diff options
author | Jo-Philipp Wich <jo@mein.io> | 2022-08-29 15:02:31 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2022-08-29 15:02:31 +0200 |
commit | 344fa9e69da43ecdc4d8f7768d85d42639352405 (patch) | |
tree | 156657bbf8ceb57d7b9af8a6a9f92d829263e2ee /lib.c | |
parent | 89452b20e5073feb28b294a707342ef144f4b5f0 (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.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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; |