;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 124.74 ;;; Reason: ;;; First: (setq x '(a b c)) ;;; Then, `(a ,@x b) --> (a a b c b) ;;; but `#(a ,@x b) -- error ;;; Written 18-Jun-88 15:39:40 by pld (Peter L. DeWolf) at site Gigamos Cambridge ;;; while running on Cthulhu from band 1 ;;; with Experimental System 124.65, Experimental Local-File 74.2, Experimental File-Server 23.1, Experimental Unix-Interface 12.0, Experimental ZMail 72.0, Experimental Tape 23.6, Experimental Lambda-Diag 16.2, microcode 1760, SDU Boot Tape 3.14, SDU ROM 8, the old ones. ; From modified file DJ: L.IO; READ.LISP#463 at 18-Jun-88 15:39:54 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: IO; READ  " (DEFUN BACKQUOTIFY (CODE) (PROG (AFLAG A DFLAG D) (COND ((SIMPLE-VECTOR-P CODE) (RETURN (VALUES 'VECTOR (do* ((index 0 (1+ index)) (end (length code)) (result nil)) ((= index end) (nreverse result)) (multiple-value-bind (flag code) (backquotify (aref code index)) (cond ((or (eq flag **backquote-/,/@-flag**) (eq flag **backquote-/,/.-flag**)) (let ((value (if (symbolp code) (symbol-value code) (eval code)))) (if (listp value) (dolist (x value) (push (list-in-area read-area 'quote x) result :area read-area)) (push (list-in-area read-area 'quote value) result :area read-area))) ) (t (push (backquotify-1 flag code) result :area read-area)))))))) ; (MAPCAR (LAMBDA (ELT) ; (MULTIPLE-VALUE-BIND (FLAG CODE) ; (BACKQUOTIFY ELT) ; (BACKQUOTIFY-1 FLAG CODE))) ; (LISTARRAY CODE))))) ((ATOM CODE) (COND ((NULL CODE) (RETURN (VALUES NIL NIL))) ((OR (NUMBERP CODE) (EQ CODE T)) (RETURN (VALUES T CODE))) (T (RETURN (VALUES 'QUOTE CODE))))) ((EQ (CAR CODE) **BACKQUOTE-/,-FLAG**) (SETQ CODE (CDR CODE)) (GO COMMA)) ((EQ (CAR CODE) **BACKQUOTE-/,/@-FLAG**) (RETURN (VALUES **BACKQUOTE-/,/@-FLAG** (CDR CODE)))) ((EQ (CAR CODE) **BACKQUOTE-/,/.-FLAG**) (RETURN (VALUES **BACKQUOTE-/,/.-FLAG** (CDR CODE))))) (MULTIPLE-VALUE-SETQ (AFLAG A) (BACKQUOTIFY (CAR CODE))) (MULTIPLE-VALUE-SETQ (DFLAG D) (BACKQUOTIFY (CDR CODE))) (AND (EQ DFLAG **BACKQUOTE-/,/@-FLAG**) (READ-ERROR " /",@/" after a /"./": .,@~S in ~S." D CODE)) (AND (EQ DFLAG **BACKQUOTE-/,/.-FLAG**) (READ-ERROR " /",./" after a /"./": .,.~S in ~S." D CODE)) (COND ((EQ AFLAG **BACKQUOTE-/,/@-FLAG**) (COND ((NULL DFLAG) (SETQ CODE A) (GO COMMA))) (RETURN (VALUES 'APPEND (IF (EQ DFLAG 'APPEND) (CONS-IN-AREA A D READ-AREA) (LIST-IN-AREA READ-AREA A (BACKQUOTIFY-1 DFLAG D)))))) ((EQ AFLAG **BACKQUOTE-/,/.-FLAG**) (WHEN (NULL DFLAG) (SETQ CODE A) (GO COMMA)) (RETURN (VALUES 'NCONC (IF (EQ DFLAG 'NCONC) (CONS-IN-AREA A D READ-AREA) (LIST-IN-AREA READ-AREA A (BACKQUOTIFY-1 DFLAG D)))))) ((NULL DFLAG) (IF (MEMQ AFLAG '(QUOTE T NIL)) (RETURN (VALUES 'QUOTE (LIST A))) (RETURN (VALUES 'LIST (LIST-IN-AREA READ-AREA (BACKQUOTIFY-1 AFLAG A)))))) ((MEMQ DFLAG '(QUOTE T)) (IF (MEMQ AFLAG '(QUOTE T NIL)) (RETURN (VALUES 'QUOTE (CONS-IN-AREA A D READ-AREA))) (RETURN (VALUES 'LIST* (LIST-IN-AREA READ-AREA (BACKQUOTIFY-1 AFLAG A) (BACKQUOTIFY-1 DFLAG D))))))) (SETQ A (BACKQUOTIFY-1 AFLAG A)) (IF (MEMQ DFLAG '(LIST LIST*)) (RETURN (VALUES DFLAG (CONS-IN-AREA A D READ-AREA)))) (RETURN (VALUES 'LIST* (LIST-IN-AREA READ-AREA A (BACKQUOTIFY-1 DFLAG D)))) COMMA (COND ((ATOM CODE) (COND ((NULL CODE) (RETURN (VALUES NIL NIL))) ((OR (NUMBERP CODE) (EQ CODE 'T)) (RETURN (VALUES T CODE))) (T (RETURN (VALUES **BACKQUOTE-/,-FLAG** CODE))))) ((EQ (CAR CODE) 'QUOTE) (RETURN (VALUES 'QUOTE (CADR CODE)))) ((MEMQ (CAR CODE) '(APPEND LIST LIST* NCONC)) (RETURN (VALUES (CAR CODE) (CDR CODE)))) ((EQ (CAR CODE) 'CONS) (RETURN (VALUES 'LIST* (CDR CODE)))) (T (RETURN (VALUES **BACKQUOTE-/,-FLAG** CODE)))))) ))