From 5cf8c7cfbaf785822bda78cc3057b10370c8bcb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Mon, 22 Sep 2014 00:02:57 +0200 Subject: [PATCH] alien,stack-checker.alien: move callback-destructor to the alien vocab It can't be placed in stack-checker.alien because that vocab isn't included in deployed images which lead to weird errors when the destructors trigger. --- basis/stack-checker/alien/alien.factor | 8 -------- core/alien/alien.factor | 13 +++++++++++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/basis/stack-checker/alien/alien.factor b/basis/stack-checker/alien/alien.factor index fab94157d1..12f2a7beeb 100644 --- a/basis/stack-checker/alien/alien.factor +++ b/basis/stack-checker/alien/alien.factor @@ -104,14 +104,6 @@ TUPLE: alien-callback-params < alien-node-params xt ; ! Quotation which coerces return value to required type infer-return ; -: delete-values ( value assoc -- ) - [ rot drop = not ] with assoc-filter! drop ; - -TUPLE: callback-destructor callback ; - -M: callback-destructor dispose ( disposable -- ) - callback>> [ callbacks get delete-values ] [ free-callback ] bi ; - : callback-xt ( word -- alien ) callbacks get [ dup "stack-cleanup" word-prop diff --git a/core/alien/alien.factor b/core/alien/alien.factor index 43617f451e..12466ef5c1 100755 --- a/core/alien/alien.factor +++ b/core/alien/alien.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2004, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors byte-arrays byte-vectors continuations.private -init kernel kernel.private math namespaces sequences ; +USING: accessors assocs byte-arrays byte-vectors continuations.private +destructors init kernel kernel.private math namespaces sequences ; IN: alien BUILTIN: alien { underlying c-ptr read-only initial: f } expired ; @@ -111,6 +111,15 @@ SYMBOL: callbacks current-callback [ 2drop call ] [ swap call( callback -- ) drop ] 3bi ; inline +! Used by stack-checker.alien to register destructors for callbacks. +TUPLE: callback-destructor callback ; + +: delete-values ( value assoc -- ) + [ rot drop = not ] with assoc-filter! drop ; + +M: callback-destructor dispose ( disposable -- ) + callback>> [ callbacks get delete-values ] [ free-callback ] bi ; + ! A utility for defining global variables that are recompiled in ! every session TUPLE: expiry-check object alien ;