[Openmcl-devel] clobbered compiler/runtime, but what could it be?

Arthur W Cater arthur.cater at ucd.ie
Thu Jun 19 10:05:31 UTC 2008


I'm trying to port to ClozureCL some code originally developed in MCL, and ported to
Allegro. I'm using a saved cocoa-application and I'm trying to use the easygui widgets.
For a few days now I've been trying to understand why I'm running into an error when
an initialize-instance :around method uses call-next-method.

I've tried to prepare a simplified case. The odd thing is, this simplified case works fine
on its own, but does not work when recompiled after that error has occurred.



Here's my simplified case: it is my file "notgoblin.lisp".
I compiled it. Then I started my big-program load, and ran into my error.
I loaded notgoblin.dfsl, and successfully did (make-instance 'drawable).
Then I recompiled it and loaded, and now (make-instance 'drawable) failed.
(Some listener output is appended after the code snippet.)
Yet if I load that new notgoblin.dfsl into a fresh session, that works.

So, I think something I have done has clobbered something in the compiler, or possibly
in CLOS caches.

Can anyone offer any suggestions for what sort of thing I might have done?
I've looked at the CCL functions check-initargs, %%CNM-WITH-ARGS-COMBINED-METHOD-
DCODE 
which seem involved in creating and using vectors, but I'm more inclined to think that
I must be doing something odd to clobber cached info. Maybe somebody has been there 
before?


Arthur



; -----
(in-package :common-lisp-user)

(defclass gui-mixin ()
  ((tooltipper :accessor tooltipper :initarg :tooltipper :initform nil))
  )

(defmethod initialize-instance :around ((item gui-mixin)
                                        &rest args
                                        &key top left draw-fn
                                        &aux replaced)
"Intent: Allow the position and size of goblin gui items to be specified either
- in MCL style, using :VIEW-POSITION and :VIEW-SIZE initargs,
- or in ACL style, using :TOP :LEFT :WIDTH :HEIGHT initargs."
  (declare (ignorable top left draw-fn))
  (format t "~&; Init/Around gui-mixin ~a:~{ ~s ~s~}~%" item args)
  (setf replaced
        (list*
         :allow-other-keys t
         args))
  (format t "~&; Replaced args are: ~{ ~s ~s~}~%" replaced)
  (apply #'call-next-method item replaced))

(defclass drawable (easygui::drawing-view gui-mixin)
  ((draw-fn :reader goblin-drawable-draw-fn :initarg :draw-fn :initform 'false)))
; -----






> Error: value NIL is not of the expected type SIMPLE-VECTOR.
> While executing: (:INTERNAL CCL::DO-IT CCL::%%CNM-WITH-ARGS-COMBINED-METHOD-
DCODE), in process Listener(5).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 > :pop

? (load "~/notgoblin.dfsl")
#P"/Users/arthur/notgoblin.dfsl"
? (make-instance 'drawable)
; Init/Around gui-mixin #<DRAWABLE #xA03966E>:
; Replaced args are:  :ALLOW-OTHER-KEYS T
#<DRAWABLE #xA03966E>
? (compile-file "~/notgoblin.lisp" :load t)
#P"/Users/arthur/notgoblin.dfsl"
NIL
NIL
? (make-instance 'drawable)
; Init/Around gui-mixin #<DRAWABLE #xA016A46>:
; Replaced args are:  :ALLOW-OTHER-KEYS T
> Error: value NIL is not of the expected type SIMPLE-VECTOR.
> While executing: (:INTERNAL CCL::DO-IT CCL::%%CNM-WITH-ARGS-COMBINED-METHOD-
DCODE), in process Listener(5).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 > 





More information about the Openmcl-devel mailing list