|
From: Pascal B. <pj...@in...> - 2003-05-06 21:29:51
|
What declarations are needed to compile this without type uncertainty?
(DEFUN COPY (SRC FROM-SRC DST FROM-DST LENGTH)
(DECLARE (STRING SRC DST) (FIXNUM FROM-SRC FROM-DST LENGTH))
(WHILE (< 0 LENGTH)
(SETF (CHAR DST FROM-DST) (CHAR SRC FROM-SRC))
(INCF FROM-DST)
(INCF FROM-SRC)
(DECF LENGTH))
) ;;COPY
; (SETF (CHAR COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::DST
; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::FROM-DST)
; (CHAR COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::SRC
; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::FROM-SRC))
; --> SB-KERNEL:%CHARSET SB-KERNEL:%ASET LET* SB-KERNEL:HAIRY-DATA-VECTOR=
-SET=20
; --> MULTIPLE-VALUE-BIND MULTIPLE-VALUE-CALL=20
; =3D=3D>
; (SB-KERNEL:%DATA-VECTOR-AND-INDEX ARRAY SB-INT:INDEX)
;=20
; note: unable to
; optimize
; due to type uncertainty:
; The first argument is a BASE-STRING, not a SIMPLE-ARRAY.
(Typical usage of COPY would be:
(let ((dst (make-string 10)))
(copy "hello" 0 dst 0 5)
(copy "world" 0 dst 5 5)
dst)
)
--=20
__Pascal_Bourguignon__ http://www.informatimago.com/
----------------------------------------------------------------------
Do not adjust your mind, there is a fault in reality.
|