From: Katsumi Yamaoka <yamaoka@jpl.org>
Subject: cl runtime functions
Date: 01 Mar 2001 08:42:49 +0900 [thread overview]
Message-ID: <yosu7l2a2x3a.fsf@jpl.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 162 bytes --]
Hi,
I found two cl runtime functions `merge' and `subseq' in latest Gnus.
There's no problem. However, if it is possible, would you apply the
following patch?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: dgnushack.el.diff --]
[-- Type: text/x-patch, Size: 2978 bytes --]
--- dgnushack.el~ Mon Feb 12 21:54:27 2001
+++ dgnushack.el Wed Feb 28 23:38:33 2001
@@ -70,6 +70,93 @@
(while (consp (cdr x))
(pop x))
x))))
+
+ (define-compiler-macro coerce (&whole form x type)
+ (if (and (fboundp 'coerce)
+ (subrp (symbol-function 'coerce)))
+ form
+ `(let ((x ,x)
+ (type ,type))
+ (cond ((eq type 'list) (if (listp x) x (append x nil)))
+ ((eq type 'vector) (if (vectorp x) x (vconcat x)))
+ ((eq type 'string) (if (stringp x) x (concat x)))
+ ((eq type 'array) (if (arrayp x) x (vconcat x)))
+ ((and (eq type 'character) (stringp x) (= (length x) 1))
+ (aref x 0))
+ ((and (eq type 'character) (symbolp x)
+ (= (length (symbol-name x)) 1))
+ (aref (symbol-name x) 0))
+ ((eq type 'float) (float x))
+ ((typep x type) x)
+ (t (error "Can't coerce %s to type %s" x type))))))
+
+ (define-compiler-macro merge (&whole form type seq1 seq2 pred &rest keys)
+ (if (and (fboundp 'merge)
+ (subrp (symbol-function 'merge)))
+ form
+ `(let ((type ,type)
+ (seq1 ,seq1)
+ (seq2 ,seq2)
+ (pred ,pred))
+ (or (listp seq1) (setq seq1 (append seq1 nil)))
+ (or (listp seq2) (setq seq2 (append seq2 nil)))
+ (let ((res nil))
+ (while (and seq1 seq2)
+ (if (funcall pred (car seq2) (car seq1))
+ (push (pop seq2) res)
+ (push (pop seq1) res)))
+ (coerce (nconc (nreverse res) seq1 seq2) type)))))
+
+ (define-compiler-macro subseq (&whole form seq start &optional end)
+ (if (and (fboundp 'subseq)
+ (subrp (symbol-function 'subseq)))
+ form
+ (if end
+ `(let ((seq ,seq)
+ (start ,start)
+ (end ,end))
+ (if (stringp seq)
+ (substring seq start end)
+ (let (len)
+ (if (< end 0)
+ (setq end (+ end (setq len (length seq)))))
+ (if (< start 0)
+ (setq start (+ start (or len (setq len (length seq))))))
+ (cond ((listp seq)
+ (if (> start 0)
+ (setq seq (nthcdr start seq)))
+ (let ((res nil))
+ (while (>= (setq end (1- end)) start)
+ (push (pop seq) res))
+ (nreverse res)))
+ (t
+ (let ((res (make-vector (max (- end start) 0) nil))
+ (i 0))
+ (while (< start end)
+ (aset res i (aref seq start))
+ (setq i (1+ i)
+ start (1+ start)))
+ res))))))
+ `(let ((seq ,seq)
+ (start ,start))
+ (if (stringp seq)
+ (substring seq start)
+ (let (len)
+ (if (< start 0)
+ (setq start (+ start (or len (setq len (length seq))))))
+ (cond ((listp seq)
+ (if (> start 0)
+ (setq seq (nthcdr start seq)))
+ (copy-sequence seq))
+ (t
+ (let* ((end (or len (length seq)))
+ (res (make-vector (max (- end start) 0) nil))
+ (i 0))
+ (while (< start end)
+ (aset res i (aref seq start))
+ (setq i (1+ i)
+ start (1+ start)))
+ res)))))))))
)
;; If we are building w3 in a different directory than the source
[-- Attachment #3: Type: text/plain, Size: 47 bytes --]
Regards,
--
Katsumi Yamaoka <yamaoka@jpl.org>
next reply other threads:[~2001-02-28 23:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-28 23:42 Katsumi Yamaoka [this message]
2001-03-02 3:26 ` ShengHuo ZHU
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=yosu7l2a2x3a.fsf@jpl.org \
--to=yamaoka@jpl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).