(require-relative-list
'("command") "dbgr-buffer-")
+(declare-function dbgr-backtrace-mode (cmdbuf))
+
(defstruct dbgr-backtrace-info
"debugger object/structure specific to a (top-level) Ruby file
to be debugged."
)
(defalias 'dbgr-srcbuf-info? 'dbgr-srcbuf-p)
-;; FIXME: DRY = access via a macro. See also analogous
-;; code in dbgr-srcbuf
-(defun dbgr-srcbuf-info-was-read-only?=(value)
- (setf (dbgr-srcbuf-info-was-read-only? dbgr-srcbuf-info) value))
-
-(defun dbgr-srcbuf-info-short-key?=(value)
- (setf (dbgr-srcbuf-info-short-key? dbgr-srcbuf-info) value))
+;; FIXME: figure out how to put in a loop.
+(dbgr-struct-field-setter "dbgr-srcbuf-info" "cmd-args")
+(dbgr-struct-field-setter "dbgr-srcbuf-info" "cmdproc")
+(dbgr-struct-field-setter "dbgr-srcbuf-info" "debugger-name")
+(dbgr-struct-field-setter "dbgr-srcbuf-info" "short-key?")
+(dbgr-struct-field-setter "dbgr-srcbuf-info" "was-read-only?")
(defun dbgr-srcbuf-info-set? ()
"Return true if `dbgr-srcbuf-info' is set."
(with-current-buffer-safe src-buf
(dbgr-sget 'srcbuf-info 'loc-hist))
)
-;; FIXME: DRY = access via a macro
-(defun dbgr-srcbuf-info-cmdproc=(buffer)
- (setf (dbgr-srcbuf-info-cmdproc dbgr-srcbuf-info) buffer))
-
-(defun dbgr-srcbuf-info-debugger-name=(value)
- (setf (dbgr-srcbuf-info-debugger-name dbgr-srcbuf-info) value))
-
-(defun dbgr-srcbuf-info-cmd-args=(buffer)
- (setf (dbgr-srcbuf-info-cmd-args dbgr-srcbuf-info) buffer))
(declare-function fn-p-to-fn?-alias(sym))
(fn-p-to-fn?-alias 'dbgr-srcbuf-info-p)
(intern (concat dbgr-symbol-str "-" (symbol-name, struct-field)))))
(funcall dbgr-field-access (eval (intern dbgr-symbol-str)))))
-;; FIXME: This is broken. setf is not setting.
-(defmacro dbgr-setter(struct-var field)
- "Create field-setter macro name STRUCT-VAR-FEILD= takes a value parameters and sets
-the FIELD field of STRUCT. The macro created looks like this:
- (defmacro (value) (setf (STRUCT-VAR-FIELD STRUCT-VAR) value))"
+
+(defmacro dbgr-struct-field-setter (variable-name field)
+ "Creates an defstruct setter method for field FIELD with
+of defstruct variable VARIABLE-NAME. For example:
+
+ (dbgr-struct-field-setter \"dbgr-srcbuf-info\" \"short-key?\")
+gives:
+ (defun dbgr-srcbuf-info-short-key?=(value)
+ (setf (dbgr-srcbuf-info-short-key? dbgr-srcbuf-info) value))
+"
(declare (indent 1) (debug t))
- (let* ((struct-var-field (concat struct-var "-" field))
- (struct-var-sym (intern struct-var))
- (struct-var-field-sym (intern struct-var-field))
- (macro-symbol (intern (concat struct-var-field "="))))
- (list 'defmacro macro-symbol '(value)
- (list 'setf (list struct-var-field-sym struct-var-sym)) 'value)
- ))
+ `(defun ,(intern (concat variable-name "-" field "=")) (value)
+ ;; FIXME: figure out how to add docstring
+ ;; ,(concat "Sets field" ,field " of " ,variable-name " to VALUE")
+ (setf (,(intern (concat variable-name "-" field))
+ ,(intern variable-name)) value)
+ ))
;; (defun dbgr-struct-field (var-sym field-sym)
;; (setq var-str (symbol-name var-sym))
--- /dev/null
+(require 'test-unit)
+(load-file "../dbgr/common/helper.el")
+
+(test-unit-clear-contexts)
+
+(defstruct dbgr-test-info name)
+(dbgr-struct-field-setter "dbgr-test-info" "name")
+
+(context "common-helper"
+ (tag common-helper)
+
+ (set (make-local-variable 'dbgr-test-info)
+ (make-dbgr-test-info :name "foo"))
+
+ (specify "setter macro works"
+ (assert-t (functionp 'dbgr-test-info-name=))
+ (assert-equal "foo" (dbgr-test-info-name= "foo")
+ )
+ )
+ )
+
+(test-unit "common-helper")