commit e676b7c91217d1e8ebeb9504e1d31a7ab67004f6
parent 1d7655e7bd27a2d79687656faa47a161c3d51b70
Author: Oto Havle <havleoto@gmail.com>
Date: Thu, 24 Nov 2011 23:36:09 +0100
Updated FFI.
Diffstat:
3 files changed, 7 insertions(+), 22 deletions(-)
diff --git a/src/examples/ffi-sdl.k b/src/examples/ffi-sdl.k
@@ -198,8 +198,6 @@
(#t
(event-loop screen drawing))))))
-($define! main
- ($lambda (argv)
- (with-sdl "klisp ffi demo"
- ($lambda (screen) (event-loop screen #f)))))
+(with-sdl "klisp ffi demo"
+ ($lambda (screen) (event-loop screen #f)))
diff --git a/src/examples/ffi-signal.c b/src/examples/ffi-signal.c
@@ -29,12 +29,9 @@ static void handler(int signo)
write(self_pipe[1], &message, 1);
}
-static void install_signal_handler(klisp_State *K, TValue *xparams,
- TValue ptree, TValue denv)
+static void install_signal_handler(klisp_State *K)
{
- UNUSED(xparams);
- UNUSED(denv);
- bind_1tp(K, ptree, "string", ttisstring, signame);
+ bind_1tp(K, K->next_value, "string", ttisstring, signame);
int signo;
if (!strcmp(kstring_buf(signame), "SIGINT")) {
@@ -49,12 +46,8 @@ static void install_signal_handler(klisp_State *K, TValue *xparams,
kapply_cc(K, KINERT);
}
-static void open_signal_port(klisp_State *K, TValue *xparams,
- TValue ptree, TValue denv)
+static void open_signal_port(klisp_State *K)
{
- UNUSED(xparams);
- UNUSED(denv);
-
FILE *fw = fdopen(self_pipe[0], "r");
TValue filename = kstring_new_b_imm(K, "**SIGNAL**");
krooted_tvs_push(K, filename);
@@ -65,7 +58,7 @@ static void open_signal_port(klisp_State *K, TValue *xparams,
static void safe_add_applicative(klisp_State *K, TValue env,
const char *name,
- klisp_Ofunc fn)
+ klisp_CFunction fn)
{
TValue symbol = ksymbol_new(K, name, KNIL);
krooted_tvs_push(K, symbol);
diff --git a/src/kgffi.c b/src/kgffi.c
@@ -868,13 +868,7 @@ static void ffi_callback_entry(ffi_cif *cif, void *ret, void **args, void *user_
TValue exit_guard = ffi_callback_guard(cb, do_ffi_callback_exit_guard);
krooted_tvs_push(K, exit_guard);
- /* TEMP: Construct dummy dynamic environment
- * for guard_dynamic_extent. Currently, guard_dynamic_extent()
- * stores the environment in the interceptor list. The reason
- * is not clear, because guard_dynamic_extent() and all
- * interceptors() are applicatives.
- *
- * TODO: investigate and fix */
+ /* Construct fresh dynamic environment for the callback applicative. */
TValue denv = kmake_empty_environment(K);
krooted_tvs_push(K, denv);