+;;;; Signal registration
+
+(defvar *registered-signals* ())
+
+(defbinding %signal-newv (name itype flags return-type param-types)
+ unsigned-int
+ ((signal-name-to-string name) string)
+ (itype gtype)
+ (flags signal-flags)
+ (nil null) ; class closure
+ (nil null) ; accumulator
+ (nil null) ; accumulator data
+ (nil null) ; c marshaller
+ (return-type gtype)
+ ((length param-types) unsigned-int)
+ (param-types (vector gtype)))
+
+(defun signal-new (name itype flags return-type param-types)
+ (when (zerop (signal-lookup name itype))
+ (push (list name itype flags return-type param-types) *registered-signals*)
+ (%signal-newv name itype flags return-type param-types)))
+
+(defun reinitialize-signals ()
+ (mapc #'(lambda (args) (apply #'%signal-newv args)) *registered-signals*))
+
+(asdf:install-init-hook 'reinitialize-signals)
+(asdf:install-init-hook 'reinitialize-signal-override-class-closures)
+