diff --git a/src/CHANGELOG b/src/CHANGELOG index 194a959ad..b27de4364 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -20,6 +20,9 @@ ECL 0.9h - The block name of a function does not involve the the forms in the lambda list: i.e. (LAMBDA-EXT F (&aux (X (RETURN-FROM F 2)))) is no longer valid. + - Many of the STRING* functions (STRING=, STRING<, etc) were proclaimed to + work only on strings, instead of string-designators. + * Design: - Simplified the structure of the frame stack, removing redundant fields. diff --git a/src/cmp/sysfun.lsp b/src/cmp/sysfun.lsp index 2cb1633c7..8f01977c0 100644 --- a/src/cmp/sysfun.lsp +++ b/src/cmp/sysfun.lsp @@ -86,6 +86,12 @@ (put-sysprop name safety (cons inline-info (get-sysprop name safety)))) nil) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; AUXILIARY TYPES +;; + +(deftype string-designator () '(or string symbol character)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ALL FUNCTION DECLARATIONS AND INLINE FORMS @@ -1113,7 +1119,7 @@ type_of(#0)==t_bitvector") (def-inline si:char-set :unsafe (t fixnum character) :char "(#0)->string.self[#1]= #2") -(proclaim-function schar (string fixnum) character :no-side-effects t) +(proclaim-function schar (simple-string fixnum) character :no-side-effects t) (def-inline schar :always (t t) t "elt(#0,fixint(#1))") (def-inline schar :always (t fixnum) t "elt(#0,#1)") (def-inline schar :unsafe (t t) t "CODE_CHAR((#0)->string.self[fix(#1)])") @@ -1129,30 +1135,30 @@ type_of(#0)==t_bitvector") (def-inline si:schar-set :unsafe (t fixnum character) :char "(#0)->string.self[#1]= #2") -(proclaim-function string= (string string *) t :predicate t :no-side-effects t) +(proclaim-function string= (string-designator string-designator *) t :predicate t :no-side-effects t) (def-inline string= :always (string string) :bool "string_eq(#0,#1)") -(proclaim-function string-equal (string string *) t :predicate t +(proclaim-function string-equal (string-designator string-designator *) t :predicate t :no-side-effects t) (def-inline string-equal :always (string string) :bool "string_equal(#0,#1)") -(proclaim-function string< (string string *) t :predicate t) -(proclaim-function string> (string string *) t :predicate t) -(proclaim-function string<= (string string *) t :predicate t) -(proclaim-function string>= (string string *) t :predicate t) -(proclaim-function string/= (string string *) t :predicate t) -(proclaim-function string-lessp (string string *) t :predicate t) -(proclaim-function string-greaterp (string string *) t :predicate t) -(proclaim-function string-not-lessp (string string *) t :predicate t) -(proclaim-function string-not-greaterp (string string *) t :predicate t) -(proclaim-function string-not-equal (string string *) t :predicate t) +(proclaim-function string< (string-designator string-designator *) t :predicate t) +(proclaim-function string> (string-designator string-designator *) t :predicate t) +(proclaim-function string<= (string-designator string-designator *) t :predicate t) +(proclaim-function string>= (string-designator string-designator *) t :predicate t) +(proclaim-function string/= (string-designator string-designator *) t :predicate t) +(proclaim-function string-lessp (string-designator string-designator *) t :predicate t) +(proclaim-function string-greaterp (string-designator string-designator *) t :predicate t) +(proclaim-function string-not-lessp (string-designator string-designator *) t :predicate t) +(proclaim-function string-not-greaterp (string-designator string-designator *) t :predicate t) +(proclaim-function string-not-equal (string-designator string-designator *) t :predicate t) (proclaim-function make-string (fixnum *) string) -(proclaim-function string-trim (t string) string) -(proclaim-function string-left-trim (t string) string) -(proclaim-function string-right-trim (t string) string) -(proclaim-function string-upcase (string *) string) -(proclaim-function string-downcase (string *) string) -(proclaim-function string-capitalize (string *) string) +(proclaim-function string-trim (t string-designator) string) +(proclaim-function string-left-trim (t string-designator) string) +(proclaim-function string-right-trim (t string-designator) string) +(proclaim-function string-upcase (string-designator *) string) +(proclaim-function string-downcase (string-designator *) string) +(proclaim-function string-capitalize (string-designator *) string) (proclaim-function nstring-upcase (string *) string) (proclaim-function nstring-downcase (string *) string) (proclaim-function nstring-capitalize (string *) string)