home *** CD-ROM | disk | FTP | other *** search
- A very quick check reveals the following suspiciousness: The function
- in flavors.l being compiled when the failure occurs is apparently:
-
- (DEFUN (FLAVOR :NAMED-STRUCTURE-INVOKE) (OPERATION &OPTIONAL SELF &REST ARGS)
- (SELECTQ OPERATION
- (:WHICH-OPERATIONS '(:PRINT-SELF :DESCRIBE))
- (:PRINT-SELF
- (SI:PRINTING-RANDOM-OBJECT (SELF (CAR ARGS))
- (FORMAT (CAR ARGS) "FLAVOR ~S" (FLAVOR-NAME SELF))))
- (:DESCRIBE (DESCRIBE-FLAVOR SELF))
- (OTHERWISE
- (FERROR NIL "~S UNKNOWN OPERATION FOR FLAVOR" OPERATION))))
-
- This is the first appearance in the file of defun with a "function
- spec" instead of a symbol as the first argument. This is a Lisp
- Machine hack which basically means to squirrel the functional object
- away under the :NAMED-STRUCTURE-INVOKE property of the plist of FLAVOR.
- (More precisely, the first arg is the Maclisp compatability syntax for
- (:PROPERTY FLAVOR :NAMED-STRUCTURE-INVOKE) ...)
-
- Liszt could be choking as it tries to store into the
- function-definition slot of something other than a symbol. Such
- abilities of defun are not documented in Franz, and it might be that
- your defun macro in common0.l has not been extended for such usage.
- Locally it is defined as follows:
-
- ;--- defun
- ; maclisp style function defintion
- ;
- (def defun
- (macro (l)
- (prog (name type arglist body specind specnam)
- (setq name (cadr l) l (cddr l))
- (cond ((dtpr name)
- (cond ((memq (cadr name) '(macro expr fexpr lexpr))
- (setq l (cons (cadr name) l)
- name (car name)))
- (t (setq specnam (car name)
- specind (cadr name)
- name (concat (gensym) "::" specnam))))))
- (cond ((null (car l)) (setq type 'lambda))
- ((eq 'fexpr (car l)) (setq type 'nlambda l (cdr l)))
- ((eq 'expr (car l)) (setq type 'lambda l (cdr l)))
- ((eq 'macro (car l)) (setq type 'macro l (cdr l)))
- ((atom (car l))
- (setq type 'lexpr
- l (nconc (list (list (car l)))
- (cdr l))))
- (t (setq type 'lambda)))
- (setq body (list 'def name (cons type l)))
- (cond (specnam
- (return (list 'progn ''compile
- body
- (list 'putprop
- (list 'quote specnam)
- (list 'getd
- (list 'quote name))
- (list 'quote specind)))))
- (t (return body))))))
-
- You could also check by invoking liszt without arguments and then
- asking it
- (testmac '(defun (foo bar) () (hello goodbye)))
- and seeing if it properly generates
- (progn 'compile (defun ... ) (putprop ... ))
-
- On another matter, I have recently been making a number of minor
- bugfixes to the flavor and various other MIT compatibility packages.
- These files come indirecly from Maclisp or Lisp Machines, and the ports
- have generally never been exercised sufficiently to check all the
- obscure features. These fixes postdate the versions Rich Zippel
- recently transmitted to Berkeley. I will shortly distribute the
- new versions to Berkeley.
-
- Believe it or not, the flavor system really does work under Franz.
- So do hash tables, defstruct, format, etc. I use them every day.
-
- Steve Haflich, MIT Experimental Music Studio
- smh@mit-ems@mit-mc
- {decvax!genrad, ihnp4}!mit-eddie!smh
-
-
-