(FILECREATED "10-Sep-86 21:10:22" {ERIS}<LISPCORE>LIBRARY>CMLMVS.;24 5917
changes to: (FUNCTIONS MULTIPLE-VALUE-SETQ)
previous date: " 5-Jun-86 00:10:36" {ERIS}<LISPCORE>LIBRARY>CMLMVS.;23)
(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT CMLMVSCOMS)
(RPAQQ CMLMVSCOMS ((*
"Interpreter and compiler support for multiple values. See LLMVS for runtime support"
)
(FNS MULTIPLE-VALUE-CALL RETVALUES)
(PROP DMACRO MULTIPLE-VALUE-CALL)
(FUNCTIONS MULTIPLE-VALUE-BIND MULTIPLE-VALUE-LIST MULTIPLE-VALUE-PROG1
MULTIPLE-VALUE-SETQ)
(VARS (NEW-ADVISETEMPLATE (QUOTE (ADV-PROG (!VALUE !OTHER-VALUES)
(MULTIPLE-VALUE-SETQ (!VALUE . !OTHER-VALUES
)
(ADV-PROG NIL (ADV-RETURN DEF)))
(ADV-RETURN (VALUES-LIST (CONS !VALUE
!OTHER-VALUES
)))))))
(PROP FILETYPE CMLMVS)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA
MULTIPLE-VALUE-CALL
)
(NLAML)
(LAMA)))))
(* "Interpreter and compiler support for multiple values. See LLMVS for runtime support")
(DEFINEQ
(MULTIPLE-VALUE-CALL
[NLAMBDA FORMS
(DECLARE (LOCALVARS FORM)) (* lmm "22-Apr-86 14:00")
(* for interpreted calls only.
The macro inserts a \MVLIST call after
the computation of FORM)
(CL:APPLY (\EVAL (CAR FORMS))
(for X in (CDR FORMS) join (\MVLIST (\EVAL X])
(RETVALUES
[LAMBDA (POS VALUES FLG) (* lmm "30-May-86 00:03")
(PROG ((P (\STACKARGPTR POS)))
(COND
((fetch (FX INVALIDP) of (SETQ P (fetch (FX CLINK) of P)))
(LISPERROR "ILLEGAL RETURN" VALUES)))
(\SMASHLINK NIL P P)
(AND FLG (RELSTK POS))
(RETURN (VALUES-LIST VALUES])
)
(PUTPROPS MULTIPLE-VALUE-CALL DMACRO
(DEFMACRO (FN &BODY BODY) (* "optmizer" for special form MULTIPLE-VALUE-CALL - handle
special case of "list" and let the rest turn into an APPLY)
(COND
((AND (EQUAL FN (QUOTE (FUNCTION LIST)))
(NULL (CDR BODY)))
(CONS (QUOTE \MVLIST)
BODY))
(T (BQUOTE (CL:APPLY (\, FN)
(NCONC (\,@ (for F in BODY collect (BQUOTE (MULTIPLE-VALUE-LIST
(\, F)))))))))))
)
(DEFMACRO MULTIPLE-VALUE-BIND (VARS VALUES-FORM &REST FORMS) (BQUOTE (DESTRUCTURING-BIND
(\, VARS)
(MULTIPLE-VALUE-LIST
(\, VALUES-FORM))
(\,@ FORMS))))
(DEFMACRO MULTIPLE-VALUE-LIST (FORM) (BQUOTE (MULTIPLE-VALUE-CALL (FUNCTION LIST)
(\, FORM))))
(DEFMACRO MULTIPLE-VALUE-PROG1 (FORM . OTHER-FORMS) (BQUOTE (VALUES-LIST (PROG1 (MULTIPLE-VALUE-LIST
(\, FORM))
(\,@ OTHER-FORMS)))))
(DEFMACRO MULTIPLE-VALUE-SETQ (VARIABLES FORM) (LET ((LIST (GENSYM)))
(BQUOTE (LET (((\, LIST)
(MULTIPLE-VALUE-LIST (\, FORM))))
(PROG1 (CAR (\, LIST))
(DESTRUCTURING-SETQ
(\, VARIABLES)
(MULTIPLE-VALUE-LIST
(\, FORM))))))))
(RPAQQ NEW-ADVISETEMPLATE (ADV-PROG (!VALUE !OTHER-VALUES)
(MULTIPLE-VALUE-SETQ (!VALUE . !OTHER-VALUES)
(ADV-PROG NIL (ADV-RETURN DEF)))
(ADV-RETURN (VALUES-LIST (CONS !VALUE !OTHER-VALUES)))))
(PUTPROPS CMLMVS FILETYPE COMPILE-FILE)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
(ADDTOVAR NLAMA MULTIPLE-VALUE-CALL)
(ADDTOVAR NLAML )
(ADDTOVAR LAMA )
)
(PUTPROPS CMLMVS COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (2102 3055 (MULTIPLE-VALUE-CALL 2112 . 2647) (RETVALUES 2649 . 3053)))))
STOP