diff options
Diffstat (limited to 'module/system')
-rw-r--r-- | module/system/finalizers.scm | 34 | ||||
-rw-r--r-- | module/system/foreign-object.scm | 9 |
2 files changed, 37 insertions, 6 deletions
diff --git a/module/system/finalizers.scm b/module/system/finalizers.scm new file mode 100644 index 000000000..1193439e5 --- /dev/null +++ b/module/system/finalizers.scm @@ -0,0 +1,34 @@ +;;; Copyright (C) 2025 Free Software Foundation, Inc. +;;; +;;; This library is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU Lesser General Public License as +;;; published by the Free Software Foundation, either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; This library is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with this program. If not, see +;;; <http://www.gnu.org/licenses/>. + + +(define-module (system finalizers) + #:export (add-finalizer! + %guardian-finalizer-priority + %default-finalizer-priority)) + +(eval-when (expand load eval) + (load-extension (string-append "libguile-" (effective-version)) + "scm_init_finalizers_module")) + +(define %guardian-finalizer-priority 1) +(define %default-finalizer-priority 0) + +(define* (add-finalizer! obj proc + #:optional (priority %default-finalizer-priority)) + "Add a finalizer @var{proc} to object @var{obj}, with priority +@var{priority}. Return the finalizer object." + (%add-finalizer! obj proc priority)) diff --git a/module/system/foreign-object.scm b/module/system/foreign-object.scm index 3f05ccaad..2e613d406 100644 --- a/module/system/foreign-object.scm +++ b/module/system/foreign-object.scm @@ -1,6 +1,6 @@ ;;; Wrapping foreign objects in Scheme -;;; Copyright (C) 2014, 2015, 2024 Free Software Foundation, Inc. +;;; Copyright (C) 2014, 2015, 2024, 2025 Free Software Foundation, Inc. ;;; ;;; This library is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Lesser General Public @@ -24,13 +24,10 @@ (define-module (system foreign-object) #:use-module (oop goops) + #:use-module (system finalizers) #:export (make-foreign-object-type define-foreign-object-type)) -(eval-when (eval load expand) - (load-extension (string-append "libguile-" (effective-version)) - "scm_init_foreign_object")) - (define-class <foreign-class> (<class>)) (define-class <foreign-class-with-finalizer> (<foreign-class>) @@ -42,7 +39,7 @@ (let ((instance (next-method)) (finalizer (finalizer class))) (when finalizer - (%add-finalizer! instance finalizer)) + (add-finalizer! instance finalizer)) instance)) (define* (make-foreign-object-type name slots #:key finalizer |