]> code.delx.au - gnu-emacs-elpa/commitdiff
Add macro to create defstruct setter functions. source.el changed. command.el needs...
authorrocky <rocky@gnu.org>
Wed, 13 Apr 2011 17:18:40 +0000 (13:18 -0400)
committerrocky <rocky@gnu.org>
Wed, 13 Apr 2011 17:18:40 +0000 (13:18 -0400)
dbgr/common/buffer/backtrace.el
dbgr/common/buffer/source.el
dbgr/common/helper.el
test/test-common-helper.el [new file with mode: 0644]

index 7f2b1de4530bf24da2a50d5bdb436251b0f88f5c..6cfc33dc03a7a0356819165b1d785d9ff9973297 100644 (file)
@@ -7,6 +7,8 @@
 (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."
index dfb7f2c712352c19147c138f0ae7c0086b65a7f2..b7406a862ba6bd0c6c740949e70dd34dd47bd8a4 100644 (file)
@@ -43,13 +43,12 @@ 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."
@@ -75,15 +74,6 @@ to be debugged."
   (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)
index b624cb7cae2194f20ecf51371297e3626e404e30..5f70f5aadcef05e5e27839d1b3a1897479a7594b 100644 (file)
@@ -45,19 +45,23 @@ is a field in that. Access (STRUCT-SYMBOL-STRUCT-FIELD STRUCT-SYMBOL)"
           (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))
diff --git a/test/test-common-helper.el b/test/test-common-helper.el
new file mode 100644 (file)
index 0000000..d427284
--- /dev/null
@@ -0,0 +1,22 @@
+(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")