[Openmcl-devel] More CLIM Issues

Rainer Joswig joswig at lisp.de
Thu Aug 4 13:09:55 PDT 2016

If you look at the function   find-presentation-type-class   , it gets called with an environment  compile-file (a symbol).
That kind of environment is not in standard Common Lisp.
The code calls FIND-CLASS with this environment then, where it then fails.

As you can see, there is code for allegro, which changes the environment, first:

#+allegro (setq environment (compile-file-environment-p environment))

I would guess that all ANSI CL implementation would need to do that, given a useful implementation of  the function compile-file-environment-p.

What you want:  FIND-CLASS should find the right class object in the right environment.  The symbol  COMPILE-FILE  is not an environment  for Clozure CL, so you need to call (setq environment (compile-file-environment-p environment))   to set it to a useful value.



(defun find-presentation-type-class (name &optional (errorp t) environment)
  #+Genera (declare (inline compile-file-environment-p))
  #+allegro (setq environment (compile-file-environment-p environment))
  (macrolet ((not-found (name)
               `(if (gethash name *presentation-type-abbreviation-table*)
                    (error "~S is a presentation type abbreviation, not the name of a presentation type" ,name)
                    (error "~S is not the name of a presentation type" ,name))))
    (typecase name
        (let ((compile-file-environment-p (compile-file-environment-p environment)))
          (or (and (eq name (first *presentation-type-being-defined*))
                   (second *presentation-type-being-defined*))
              (if compile-file-environment-p
                  (compile-time-property name 'presentation-type-class)
                  (gethash name *presentation-type-class-table*))
              (let ((class (find-class name nil environment)))                                ;  <- fails probably here
                (and (acceptable-presentation-type-class class)
              (when compile-file-environment-p
                ;; compile-file environment inherits from the run-time environment
                (or (gethash name *presentation-type-class-table*)
                    (let ((class (find-class name nil nil)))
                      (and (acceptable-presentation-type-class class)
              (and errorp (not-found name)))))
      ((satisfies acceptable-presentation-type-class)
      (otherwise        ;a type error should complain even if errorp is nil
        (not-found name)))))



> Am 04.08.2016 um 21:19 schrieb Craig Lanning <craig.t.lanning at gmail.com>:
> I'm making a little progress (I think).
> When I compile the CLIM Silica system, I see complaints about undefined
> functions.  Some of these are slot accessor functions that don't get
> defined until CLIM Standalone is compiled.
> Anyway, I compile and load CLIM Utils, CLIM Silica, and then CLIM
> Standalone.
> While compiling CLIM Standalone, it runs into the following error:
> ;; Compiling clim:clim;accept-values.lisp.newest
> ;Compiler warnings for "clim:clim;accept-values.lisp.newest" :
> anonymous lambda form: Unused lexical variable ACCEPT-ARGS
>> Error: The value COMPILE-FILE is not of the expected type
>> While executing: CCL::DEFINITION-ENVIRONMENT, in process listener(1).
>> Type :POP to abort, :R for a list of available restarts.
>> Type :? for other options.
> 1 > :b
> Attached is the entire output from doing the compiles and the output of
> the :b command.
> The problem here is that I'm not even sure where to look for the real
> problem.  In CLIM Utils, there were a few things that touched on the
> environment.  I think I added the appropriate #+/#- things to that
> code.
> Can anyone tell me anything that might help me figure out what the real
> problem is?
> Craig
> <output.txt>_______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> https://lists.clozure.com/mailman/listinfo/openmcl-devel

More information about the Openmcl-devel mailing list