[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: defclass in CLOS & 7.2

  Replied: Tue, 26 Apr 88 05:23:37 -0400
  Replied: "Jim Kelly <jkelly@vax.bbn.com> rshapiro@vax.bbn.com, kanderson@vax.bbn.com"
  Received: from vax.bbn.com by WILMA.BBN.COM id aa11591; 25 Apr 88 21:10 EDT
  Date:     Mon, 25 Apr 88 21:04:43 EDT
  From:     Jim Kelly <jkelly@vax.bbn.com>
  To:       rshapiro@vax.bbn.com, kanderson@vax.bbn.com
  cc:       jkelly@vax.bbn.com
  Subject:  defclass in CLOS & 7.2
  In trying to compile a defclass I got the following errror:
  "Maximum stack level for this function (230) exceeds
  architectural limit (224)."  This compiled fine in PCL (ie: the
  old version) and 7.1 - the error occurs with CLOS loaded in 7.2.
  The error happens after the file is 100% read in - in the 
  bottom right the message "Compiling (PCL:TOP-LEVEL-FORM (DEFCLASS
  SCHEDULE-D))" appears and the "completion bar" underneath
  indicates that it's about half done when it dies.  Perhaps the new
  version can't handle as many slots as the older one (although I 
  don't know what the 230 in the message means - the defclass has 
  221 slots).
  Any comments, suggestions? (The file I was trying to compile was
  conger:>aiis>defclasses>taxforms>schedule-d.lisp if it's any

Basically you are running into limitations of the Symbolics, and i
presume other systems have their own limitations.  It is typical for
automatically generated code to run into such problems.

If you break up your class into smaller mixins it should work.  Let me
know if this doesn't work.

Here's what seems to be happening:

DEFCLASS expands into a form like

  (load-defclass ...
   (list (list* :name slot-1 :initfunction #'false
           '(:init-form nil :accessor slot-1))
         ... many other slots ...))

LIST can only handle about 256 arguments.  If you rewrite the above
form into an nconc of smaller lists, you run into another limitation on the
number of constants you can have in a function from all the
'(:init-form ...)'s.  I couldn't think of a way around that.