* lisp/emacs-lisp/timer.el (timer--time-setter): New function.

(timer--time): Use it as gv-setter.
* lisp/emacs-lisp/gv.el (gv-define-simple-setter): Output warning when
setter is not a symbol.
This commit is contained in:
Stefan Monnier 2013-08-12 22:30:52 -04:00
parent 5c41e9ffea
commit 5514cc4c84
4 changed files with 32 additions and 23 deletions

View file

@ -55,30 +55,29 @@
(defsubst timer--check (timer)
(or (timerp timer) (signal 'wrong-type-argument (list #'timerp timer))))
(defun timer--time-setter (timer time)
(timer--check timer)
(setf (timer--high-seconds timer) (pop time))
(let ((low time) (usecs 0) (psecs 0))
(when (consp time)
(setq low (pop time))
(when time
(setq usecs (pop time))
(when time
(setq psecs (car time)))))
(setf (timer--low-seconds timer) low)
(setf (timer--usecs timer) usecs)
(setf (timer--psecs timer) psecs)
time))
;; Pseudo field `time'.
(defun timer--time (timer)
(declare (gv-setter timer--time-setter))
(list (timer--high-seconds timer)
(timer--low-seconds timer)
(timer--usecs timer)
(timer--psecs timer)))
(gv-define-setter timer--time (time timer)
(macroexp-let2 nil val time
`(progn
(timer--check ,timer)
(setf (timer--high-seconds ,timer) (pop ,val))
(let ((low ,val) (usecs 0) (psecs 0))
(when (consp ,val)
(setq low (pop ,val))
(when ,val
(setq usecs (pop ,val))
(when ,val
(setq psecs (car ,val)))))
(setf (timer--low-seconds ,timer) low)
(setf (timer--usecs ,timer) usecs)
(setf (timer--psecs ,timer) psecs))
,val)))
(defun timer-set-time (timer time &optional delta)
"Set the trigger time of TIMER to TIME.
TIME must be in the internal format returned by, e.g., `current-time'.