From c8ca1997a01272486a4078d3dcee8800d12cfa38 Mon Sep 17 00:00:00 2001 From: slava Date: Mon, 16 Oct 2006 22:06:34 +0000 Subject: [PATCH] Lock callbacks in memory --- TODO.FACTOR.txt | 1 - library/compiler/alien/alien-callback.factor | 10 +++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index 36285dbc1f..e3a8aeb901 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -1,7 +1,6 @@ - live search: timer delay would be nice - help responder has no way to access { "foo" "bar" } - httpd search tools -- lock callbacks + ui: diff --git a/library/compiler/alien/alien-callback.factor b/library/compiler/alien/alien-callback.factor index d3065d7a2c..091508e68b 100644 --- a/library/compiler/alien/alien-callback.factor +++ b/library/compiler/alien/alien-callback.factor @@ -4,6 +4,14 @@ IN: alien USING: compiler errors generic hashtables inference kernel namespaces sequences strings words parser prettyprint ; +! Callbacks are registered in a global hashtable. If you clear +! this hashtable, they will all be blown away by code GC, beware +SYMBOL: callbacks + +H{ } clone callbacks set-global + +: register-callback ( word -- ) dup callbacks get set-hash ; + TUPLE: alien-callback return parameters quot xt ; C: alien-callback make-node ; @@ -26,7 +34,7 @@ M: alien-callback-error summary pop-literal nip over set-alien-callback-quot pop-literal nip over set-alien-callback-parameters pop-literal nip over set-alien-callback-return - gensym over set-alien-callback-xt + gensym dup register-callback over set-alien-callback-xt callback-bottom ] "infer" set-word-prop