;;; -*- Mode:Common-Lisp; Package:Compiler; Base:10; Patch-file:T -*-

;;; Reason: Fix so compiler optimizations recognize that the STRING function always 
;;; returns a value of type STRING.  [SPR 9737]


;;;                           RESTRICTED RIGHTS LEGEND
;;;
;;; Use, duplication, or disclosure by the Government is subject to
;;; restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
;;; Technical Data and Computer Software clause at 52.227-7013.
;;;
;;;   TEXAS INSTRUMENTS INCORPORATED      
;;;   P.O. BOX 149149, M/S 2151             
;;;   AUSTIN, TEXAS 78714
;;;
;;; Copyright (C) 1989 Texas Instruments Incorporated.
;;; All rights reserved.

;;; Patch file for COMPILER version 6.7
;;; Written 07/05/89 14:19:58 by GRAY,
;;; while running on Kelvin from band LOD2
;;; With SYSTEM 6.10, VIRTUAL-MEMORY 6.1, EH 6.3, MAKE-SYSTEM 6.0, MICRONET 6.0, LOCAL-FILE 6.0,
;;;  BASIC-PATHNAME 6.0, NETWORK-SUPPORT-COLD 6.0, BASIC-NAMESPACE 6.1, NETWORK-NAMESPACE 6.0,
;;;  DISK-IO 6.0, DISK-LABEL 6.0, BASIC-FILE 6.2, MAC-PATHNAME 6.0, NETWORK-PATHNAME 6.0,
;;;  COMPILER 6.6, TV 6.12, DATALINK 6.0, CHAOSNET 6.0, GC 6.3, MEMORY-AUX 6.0, NVRAM 6.1,
;;;  SYSLOG 6.1, STREAMER-TAPE 6.3, UCL 6.0, INPUT-EDITOR 6.0, Inconsistent METER 6.1,
;;;  ZWEI 6.3, DEBUG-TOOLS 6.3, NETWORK-SUPPORT 6.0, NETWORK-SERVICE 6.1, DATALINK-DISPLAYS 6.0,
;;;  FONT-EDITOR 6.1, SERIAL 6.0, PRINTER 6.2, MAC-PRINTER-TYPES 6.1, PRINTER-TYPES 6.0,
;;;  IMAGEN 6.0, SUGGESTIONS 6.0, MAIL-DAEMON 6.2, MAIL-READER 6.0, TELNET 6.0, VT100 6.0,
;;;  NAMESPACE-EDITOR 6.0, PROFILE 6.1, VISIDOC 6.2, Inconsistent TI-CLOS 6.12, CLEH 6.4,
;;;  IP 3.47, Experimental BUG 11.10, Experimental CLX 6.2, CLUE 6.6, X11M 6.1, Experimental DOCUMENTER 619.0,
;;;  Experimental GRAPHICS-WINDOW 6.0, Inconsistent GED 6.2,  microcode 429, Band Name: 6.0 SLE 6/5 + u429 6/8

;;; BUG REPORT NUMBER:  9737
;;;
;;; PROBLEM: In 6.0, the compiler no longer recognizes that the
;;;	STRING function always returns a string, which prevents a number
;;;	of very helpful optimizations. 
;;;
;;; SOLUTION:  Add (THE STRING ...) to the inline STRING function and its 
;;;	optimization.  Define FUNCTION-RESULT-TYPE property for STRING-AUX.

#!C
; From file STRINGS.LISP#> KERNEL; MR-X:
#10R SYSTEM#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "SYSTEM"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* *COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: KERNEL; STRINGS.#"


;;  7/05/89 DNG - Added (THE STRING ...). [SPR 9737]
(defun cli:string (x)
  "Convert X to a string if X is a symbol, a string or a string character."
  (the string
       (typecase x
	 (symbol (symbol-name x))
	 (string x)
	 (T (string-aux x)))))

))

#!C
; From file TYPEOPT.LISP#> COMPILER; MR-X:
#10R COMPILER#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "COMPILER"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: COMPILER; TYPEOPT.#"


	(OPTIMIZE-PATTERN (STRING T) (FUNCALL #'(LAMBDA (X)
						  (THE STRING
						       (COND ((SYMBOLP X) (SYMBOL-NAME X))
							     ((STRINGP X) X)
							     (T (DONT-OPTIMIZE (STRING X))))))
					      1))
))

#!C
; From file TYPEOPT.LISP#> COMPILER; MR-X:
#10R COMPILER#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "COMPILER"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: COMPILER; TYPEOPT.#"


(DEFPROP SI::STRING-AUX		STRING	FUNCTION-RESULT-TYPE) ; 7/5/89
))



;;; BUG REPORT NUMBER:  10071
;;;
;;; PROBLEM:  The compiler incorrectly optimizes (CL:COMPLEMENT #'CHAR<) to 
;;;	#'CHAR<= and (CL:COMPLEMENT #'STRING<) to #'STRING<=; should be #'CHAR>= 
;;;	and #'STRING>=.
;;;
;;; SOLUTION:  Fix typos in the *COMPLEMENTS* table.

#!C
; From file P1OPT.LISP#> COMPILER; MR-X:
#10R COMPILER#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "COMPILER"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: COMPILER; P1OPT.#"


(DEFPARAMETER *COMPLEMENTS*
	      '((EQ . NEQ)
		(= . /=)
		(< . >=)
		(> . <=)
		(ODDP . EVENP)
		(TRUE . FALSE)
		(SYMBOLP . NSYMBOLP)
		(ATOM . CONSP)
		(LISTP . NLISTP)
		(CHAR= . CHAR/=) (CHAR< . CHAR>=) (CHAR> . CHAR<=)
		(CHAR-EQUAL . CHAR-NOT-EQUAL)
		(CHAR-LESSP . CHAR-NOT-LESSP)
		(CHAR-GREATERP . CHAR-NOT-GREATERP)
		(STRING= . STRING/=) (STRING< . STRING>=) (STRING> . STRING<=)
		(STRING-EQUAL . STRING-NOT-EQUAL)
		(STRING-LESSP . STRING-NOT-LESSP)
		(STRING-GREATERP . STRING-NOT-GREATERP)
		))

))
