I have gotten into some compiler troubles with 18d which is somewhat
over my head, and I hope somebody can give me some hints to what is wrong.
I am working with debian cmucl package version 3.1.3. When this starts
up it displays the following banner:
situla:~> lisp
; Loading #p"/n/knud/export/home/tedchly/init.lisp".
CMU Common Lisp release x86-linux 3.1.2 18d+ 29 August 2002 build 4186, running on
situla
For support see http://www.cons.org/cmucl/support.html Send bug reports to the
debian BTS.
or to [EMAIL PROTECTED]
type (help) for help, (quit) to exit, and (demo) to see the demos
Loaded subsystems:
Python 1.0, target Intel x86
CLOS based on PCL version: September 16 92 PCL (f)
*
Previous versions, at least including 18c+ (which I believe had debian
package version 3.0.9) did not have the problem.
The problem arises when I compile `eclipse', the CL based window
manager.
I get the following error:
Error in function COMMON-LISP::ASSERT-ERROR:
The assertion (EQ C::ENV
(C::LAMBDA-ENVIRONMENT
(C::LAMBDA-VAR-HOME C::THING))) failed.
Restarts:
0: [CONTINUE] Retry assertion.
1: Return NIL from load of "compile.lisp".
2: [ABORT ] Skip remaining initializations.
Debug (type H for help)
(COMMON-LISP::ASSERT-ERROR (EQ C::ENV (C::LAMBDA-ENVIRONMENT #)) NIL NIL)
Source:
; File: target:code/macros.lisp
(RESTART-CASE (ERROR COND) (CONTINUE NIL :REPORT (LAMBDA # #) NIL))
0]
The function I believe triggers the problem looks like this (the trace
below seems to suggest that it is the loop construct at the end):
(defun eclipse-internal-loop (root-window)
(let ((exit-p 0)
(exit-x11-p t))
;; Sets the root window pop-up menu
(nconc *menu-1-items*
(acons "Exit WM" (lambda (&rest) (setf exit-p 1 exit-x11-p nil))
(acons "Exit X11" (lambda (&rest) (setf exit-p 1)) '())))
(with-slots (menu1 menu3) *root*
(setf menu1 (apply #'make-pop-up *root* *menu-1-items*)
menu3 (apply #'make-pop-up *root*
(list (cons "move" (menu-3-function :move))
(cons "close" (menu-3-function :close))
(cons "resize" (menu-3-function :resize))
(cons "destroy" (menu-3-function :destroy))))))
;; Queue event for dressing already present-window when wm start.
(flet ((ignorable-window-p (window)
(let ((wm-hints (xlib:wm-hints window)))
(or
(eql (xlib:window-override-redirect window) :ON)
(eql (xlib:window-map-state window) :UNMAPPED)
(and wm-hints
(eql (xlib:wm-hints-initial-state wm-hints)
:WITHDRAWN))))))
(xlib:with-event-queue (*display*)
(mapcar #'(lambda (window)
(unless (ignorable-window-p window)
(xlib:queue-event *display*
:map-request
:event-window root-window
:window window)))
(xlib:query-tree root-window))))
;; Main loop
(loop with time = nil
for event = (get-next-event *display* :discard-p t :timeout 2)
when event do
(catch 'general-error
(handler-bind ((xlib::x-error #'handle-general-error-condition)
(end-of-file #'handle-end-of-file-condition)
(error #'handle-general-error-condition))
(with-slots (event-window) event
(event-process event (gethash event-window *object-table*)))))
when (zerop *nb-vscreen*) do (setf *nb-vscreen* 4)
when pt:preprogrammed-tasks do (pt:execute-preprogrammed-tasks)
unless (= (nb-vscreen (root-vscreens *root*)) *nb-vscreen*) do
(adjust-vscreens (root-vscreens *root*))
when (and (= exit-p 1) (not exit-x11-p)) do (extensions:quit)
when (and (= exit-p 1) exit-x11-p) do
(loop for val being each hash-value in *object-table*
do (close-window val))
(setf time 10 exit-p 2)
while (< exit-p 2))))
and the top of the stack with locals looks like this:
0] l
COMMON-LISP::ARGUMENTS = NIL
COMMON-LISP::ASSERTION = (EQ C::ENV
(C::LAMBDA-ENVIRONMENT
(C::LAMBDA-VAR-HOME C::THING)))
COMMON-LISP::DATUM = NIL
#:G1 = NIL
#:OO-3 = #<SIMPLE-ERROR {48228ADD}>
COMMON-LISP::PLACES = NIL
0] u
Top of stack.
0] d
(C::FIND-IN-ENVIRONMENT #<C::LAMBDA-VAR #x480E553D NAME= EVENT>
#<C::ENVIRONMENT #x4821EE55
FUNCTION= #<LAMBDA #x4803B70D
NAME= ECLIPSE-INTERNAL-LOOP
TYPE= #<FUNCTION-TYPE #>
WHERE-FROM= :DEFINED
VARS= #>
NLX-INFO= (#<C::NLX-INFO 4821EE75>)>)
1] l
C::ENV = #<C::ENVIRONMENT #x4821EE55
FUNCTION= #<LAMBDA #x4803B70D
NAME= ECLIPSE-INTERNAL-LOOP
TYPE= #<FUNCTION-TYPE (FUNCTION # NULL)>
WHERE-FROM= :DEFINED
VARS= (ROOT-WINDOW)>
NLX-INFO= (#<C::NLX-INFO #x4821EE75
CONTINUATION= #<Continuation c1>
TARGET= #
INFO= #<C::IR2-NLX-INFO 482207D5>>)>
C::THING = #<C::LAMBDA-VAR #x480E553D NAME= EVENT>
1] d
(C::IR2-CONVERT-SET
#<SET #x480E64D5
VAR= #<C::LAMBDA-VAR #x480E553D NAME= EVENT>
VALUE= #<C::COMBINATION #x480E60BD FUN= #<C::REF 480E608D> ARGS= #>>
#<C::IR2-BLOCK #x482224A5
START-VOP= #<C::VOP #x482280B5
INFO= SYMBOL-VALUE
ARGS= #<C:TN-REF 48228065>
RESULTS= #<C:TN-REF 4822808D>>
LAST-VOP= #<C::VOP #x48228A7D
INFO= C:MOVE
ARGS= #<C:TN-REF 48228A2D>
RESULTS= #<C:TN-REF 48228A55>>
%LABEL= #<NEW-ASSEM:LABEL 1>>)
2] l
BLOCK = #<C::IR2-BLOCK #x482224A5
START-VOP= #<C::VOP #x482280B5
INFO= SYMBOL-VALUE
ARGS= #<C:TN-REF #x48228065
TN= #<TN '*DISPLAY*!1[Const17]>
WRITE-P= NIL
VOP= SYMBOL-VALUE>
RESULTS= #<C:TN-REF #x4822808D
TN= #<TN t2>
WRITE-P= T
VOP= SYMBOL-VALUE>>
LAST-VOP= #<C::VOP #x48228A7D
INFO= C:MOVE
ARGS= #<C:TN-REF #x48228A2D
TN= #<TN t3[EDX]>
WRITE-P= NIL
VOP= C:MOVE>
RESULTS= #<C:TN-REF #x48228A55
TN= #<TN t4>
WRITE-P= T
VOP= C:MOVE>>
%LABEL= #<NEW-ASSEM:LABEL 1>>
C::CONT = #<Continuation c3>
C::LEAF = #<C::LAMBDA-VAR #x480E553D NAME= EVENT>
C::LOCS = NIL
C::NODE = #<SET #x480E64D5
VAR= #<C::LAMBDA-VAR #x480E553D NAME= EVENT>
VALUE= #<C::COMBINATION #x480E60BD
FUN= #<C::REF #x480E608D
LEAF= #<C::GLOBAL-VAR 480E602D>>
ARGS= (#<C::REF 480E6135> #<C::REF 480E61F5>
#<C::REF 480E626D> #<C::REF 480E632D>
#<C::REF 480E63F5>)>>
C::VAL = #<TN t4>
2]
------------------------+-----------------------------------------------------
Christian Lynbech | Ericsson Telebit, Skanderborgvej 232, DK-8260 Viby J
Phone: +45 8938 5244 | email: [EMAIL PROTECTED]
Fax: +45 8938 5101 | web: www.ericsson.com
------------------------+-----------------------------------------------------
Hit the philistines three times over the head with the Elisp reference manual.
- [EMAIL PROTECTED] (Michael A. Petonic)