emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: patch: {append,prepend}-to-register on empty register


From: Thien-Thi Nguyen
Subject: Re: patch: {append,prepend}-to-register on empty register
Date: Mon, 05 Nov 2007 09:30:29 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux)

() Miles Bader <address@hidden>
() Mon, 05 Nov 2007 15:54:52 +0900

   Thien-Thi Nguyen <address@hidden> writes:
   > i would prefer `(set-register register (cond ...))'.
   > likewise for other hunk.

   (let ((reg (get-register register))
         (text (filter-buffer-substring start end)))
     (cond ((stringp reg)
            (setq text (concat reg text)))
           (reg
            (error "Register does not contain text")))
     (set-register register text))

i like this better than the original, but not as
much as the (more) functional, approach, due to setq.

fwiw, following is a *scratch* snapshot.  i read it as
"you win some, you lose some, ..."  :-/

thi


______________________________________________________________
(defun ttn-a (register start end)
  (let ((reg (get-register register))
        (text (filter-buffer-substring start end)))
    (cond ((stringp reg)
           (setq text (concat reg text)))
          (reg
           (error "Register does not contain text")))
    (set-register register text)))

(defun ttn-b (register start end)
  (let ((reg (get-register register))
        (text (filter-buffer-substring start end)))
    (set-register
     register (cond ((not reg) text)
                    ((stringp reg) (concat reg text))
                    (t (error "Register does not contain text"))))))

(byte-compile 'ttn-a)
(byte-compile 'ttn-b)

(disassemble 'ttn-a) ; write output to file A
(disassemble 'ttn-b) ; write output to file B

(shell-command "echo ; diff -y A B -W 78" t)
783
byte code for ttn-a:                  | byte code for ttn-b:
  args: (register start end)              args: (register start end)
0       constant  get-register          0       constant  get-register
1       varref    register              1       varref    register
2       call      1                     2       call      1
3       constant  filter-buffer-subst   3       constant  filter-buffer-subst
4       varref    start                 4       varref    start
5       varref    end                   5       varref    end
6       call      2                     6       call      2
7       varbind   text                  7       varbind   text
8       dup                           | 8       varbind   reg
9       varbind   reg                 | 9       constant  set-register
10      stringp                       | 10      varref    register
11      goto-if-nil 1                 | 11      varref    reg
14      varref    reg                 | 12      goto-if-not-nil 1
15      varref    text                  15      varref    text
16      concat2                       | 16      goto      3
17      varset    text                | 19:1    varref    reg
18      goto      2                   | 20      stringp   
21:1    varref    reg                 | 21      goto-if-nil 2
22      goto-if-nil 2                 | 24      varref    reg
25      constant  error               | 25      varref    text
26      constant  "Register does..."  | 26      concat2   
27      call      1                   | 27      goto      3
28      discard                       | 30:2    constant  error
29:2    constant  set-register        | 31      constant  "Register does..."
30      varref    register            | 32      call      1
31      varref    text                | 33:3    call      2
32      call      2                   | 34      unbind    2
33      unbind    2                   | 35      return    
34      return                        <




reply via email to

[Prev in Thread] Current Thread [Next in Thread]