chiark
/
gitweb
/
~mdw
/
clg
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ad98b59
)
CALL-NEXT-HANDLER given same semantic as CALL-NEXT-METHOD
author
espen
<espen>
Wed, 8 Feb 2006 19:56:25 +0000
(19:56 +0000)
committer
espen
<espen>
Wed, 8 Feb 2006 19:56:25 +0000
(19:56 +0000)
glib/gcallback.lisp
patch
|
blob
|
blame
|
history
diff --git
a/glib/gcallback.lisp
b/glib/gcallback.lisp
index 9a30a769935537859df8e0310303b60c31c1ed53..faab749b7fccc2af05f6593df0278397a958f38f 100644
(file)
--- a/
glib/gcallback.lisp
+++ b/
glib/gcallback.lisp
@@
-20,7
+20,7
@@
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: gcallback.lisp,v 1.2
8 2006/02/06 18:12:19
espen Exp $
+;; $Id: gcallback.lisp,v 1.2
9 2006/02/08 19:56:25
espen Exp $
(in-package "GLIB")
(in-package "GLIB")
@@
-219,15
+219,13
@@
(defbinding %signal-chain-from-overridden () nil
(args pointer)
(return-value (or null gvalue)))
(args pointer)
(return-value (or null gvalue)))
-;; TODO: implement same semantics as CALL-NEXT-METHOD
-(defun %call-next-handler (n-params types args
defaults
return-type)
+
+(defun %call-next-handler (n-params types args return-type)
(let ((params (allocate-memory (* n-params +gvalue-size+))))
(loop
(let ((params (allocate-memory (* n-params +gvalue-size+))))
(loop
- as tmp = args then (rest tmp)
- for default in defaults
+ for arg in args
for type in types
for offset from 0 by +gvalue-size+
for type in types
for offset from 0 by +gvalue-size+
- as arg = (if tmp (car tmp) default)
do (gvalue-init (sap+ params offset) type arg))
(unwind-protect
do (gvalue-init (sap+ params offset) type arg))
(unwind-protect
@@
-253,15
+251,16
@@
(defmacro define-signal-handler (name ((object class) &rest args) &body body)
until (eq arg '&rest)
collect arg))
(rest (cadr (member '&rest args)))
until (eq arg '&rest)
collect arg))
(rest (cadr (member '&rest args)))
- (next (make-symbol "ARGS")))
+ (next (make-symbol "ARGS"))
+ (default (make-symbol "DEFAULT")))
`(progn
(signal-override-class-closure ',name ',class
#'(lambda (,object ,@args)
`(progn
(signal-override-class-closure ',name ',class
#'(lambda (,object ,@args)
- (
flet ((call-next-handler (&rest ,next
)
-
(let ((defaults (list* ,object ,@vars ,rest))
)
+ (
let ((,default (list* ,object ,@vars ,rest))
)
+
(flet ((call-next-handler (&rest ,next
)
(%call-next-handler
(%call-next-handler
- ,n-params ',types
,next defaults
',return-type))))
+ ,n-params ',types
(or ,next ,default)
',return-type))))
,@body)))
',name)))
,@body)))
',name)))