Skip to content

Commit

Permalink
bump version number, add changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
joddie committed Oct 30, 2012
1 parent c5d1c5b commit 993a79f
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 37 deletions.
7 changes: 4 additions & 3 deletions README.org
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,14 @@
... ))=. It would be better to recognise =function=, =quote= and
other special forms using their =edebug-form-spec= property.

Macro-expanding a call to an autoloaded macro doesn't work. This
shouldn't be too hard to fix.

Please send other bug reports and feature requests to the author.

** Acknowledgements
Thanks to John Wiegley for fixing a bug with the face definitions
under Emacs 24.

** Changelog
- v0.3, 2012-10-30: print dotted lists correctly. autoload
definitions.

#+OPTIONS: author:nil email:nil toc:nil timestamp:nil
81 changes: 47 additions & 34 deletions macrostep.el
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
;; Maintainer: joddie <j.j.oddie@gmail.com>
;; Created: 16 January 2012
;; Updated: 23 September 2012
;; Version: 0.2
;; Version: 0.3
;; Keywords: lisp, languages, macro, debugging
;; Url: https://github.com/joddie/macrostep

Expand All @@ -26,11 +26,11 @@
;; along with this program. If not, see `http://www.gnu.org/licenses/'.

;;; Commentary:

;; 1.1 Overview
;; =============
;; `macrostep-mode' is a minor mode for interactively stepping through
;; the expansion of macros in Emacs Lisp source code. It lets you see
;; This is a minor mode for interactively stepping through the
;; expansion of macros in Emacs Lisp source code. It lets you see
;; exactly what happens at each step of the expansion process by
;; pretty-printing the expanded forms inline in the source buffer,
;; which is read-only while macro expansions are visible. You can
Expand All @@ -43,7 +43,7 @@
;; `macroexpand', because `macroexpand' continues expansion until the
;; top-level form is no longer a macro call.
;;
;; `macrostep-mode' also adds some simple additional fontification to
;; The mode also adds some simple additional fontification to
;; macro-expanded code. The heads of macro sub-forms are fontified
;; using `macrostep-macro-face'. Uninterned symbols (gensyms) are
;; fontified based on which step in the expansion created them, to
Expand All @@ -54,7 +54,7 @@
;; 1.2 Key-bindings and usage
;; ===========================
;; The standard macrostep-mode keybindings are the following:
;;
;;
;; e, =, RET : expand the macro form following point one step
;; c, u, DEL : collapse the form following point
;; q, C-c C-c: collapse all expanded forms and exit macrostep-mode
Expand All @@ -74,30 +74,35 @@
;;
;;
;; You can then enter macrostep-mode and expand a macro form
;; completely by typing =C-c e e e ...= as many times as necessary.
;; completely by typing `C-c e e e ...' as many times as necessary.
;;
;; Exit macrostep-mode either with `q', `C-c C-c', or by successively
;; typing `c' to collapse all expanded forms back to their original
;; text.
;;
;; 1.3 Expanding sub-forms
;; ========================
;; By moving point around in the macro expansion (perhaps using `n'
;; and `p'), you can macro-expand sub-forms before fully expanding
;; the enclosing form. This can be useful in some cases, but you
;; should keep in mind that it does not correspond to the way Emacs
;; actually expands macro calls when evaluating or compiling your
;; code. Macro expansion in Emacs Lisp always proceeds by fully
;; By moving point around in the macro expansion (perhaps using the
;; `n' and `p' keys), you can macro-expand sub-forms before fully
;; expanding the enclosing form. This can be useful in some cases,
;; but you should keep in mind that it does not correspond to the way
;; Emacs actually expands macro calls when evaluating or compiling
;; your code. Macro expansion in Emacs Lisp always proceeds by fully
;; expanding the outer form to a non-macro form before doing anything
;; with the sub-forms.
;;
;;
;; For example, with `cl' loaded, try expanding the following form:
;;
;;
;;
;; (dolist (l list-of-lists)
;; (incf (car l)))
;;
;;
;; to produce the following:
;;
;;
;;
;; (block nil
;; (let
;; ((--cl-dolist-temp-- list-of-lists)
Expand All @@ -111,16 +116,17 @@
;; (cdr --cl-dolist-temp--)))
;; nil))
;;
;;
;; where the forms beginning `block' and `incf' are both macro calls.
;;
;; At this point, you can either continue expanding the `block' form
;; -- which corresponds to the real order of macro expansion in
;; evaluation -- or type `n' to move point to the unexpanded `incf'
;; and expand it to a `callf' form and finally to a =let*= form. If
;; you then move point back to the `block' and expand it, an
;; unexpanded `incf' form appears again in the result. This might
;; look visually confusing, but it at least corresponds to the way
;; real macro expansion works.
;; At this point, you can either continue expanding the `block' form,
;; which corresponds to the real order of macro expansion in
;; evaluation, or type `n' to move point to the unexpanded `incf' and
;; expand it to a `callf' form and finally to a =let*= form. If you
;; then move point back to the `block' and expand it, an unexpanded
;; `incf' form appears again in the result. This might look visually
;; confusing, but it does at least correspond to the way real macro
;; expansion works.
;;
;; Why allow expanding sub-forms out of order like this at all? The
;; main reason is for debugging macros which expand into another
Expand All @@ -130,29 +136,36 @@
;; via `cl-macroexpand-all'.
;;
;;
;; 1.4 Bugs and known limitations:
;; ================================
;; 1.4 Bugs and known limitations
;; ===============================
;; You can evaluate and edebug macro-expanded forms and step through
;; the macro-expanded version, but the form that `eval-defun' and
;; friends read from the buffer won't have the uninterned symbols of
;; the real macro expansion. This will probably work OK with CL-style
;; `(gensym)'s, but may cause problems with =(make-symbol ...)=
;; symbols if they have the same print name as another symbol in the
;; expansion. It's possible that using `print-circle' and
;; `print-gensym' could get around this.
;; gensyms, but may cause problems with `make-symbol' symbols if they
;; have the same print name as another symbol in the expansion. It's
;; possible that using `print-circle' and `print-gensym' could get
;; around this.
;;
;; The macro stepper doesn't bother trying to determine whether or not
;; a sub-form is in an evaluated position before highlighting it as a
;; macro. It does exclude `lambda' from treatment as a macro, since
;; that leads to an endless series of expansions: =(function (function
;; ... ))=. It would be better to recognise `function', `quote' and
;; other special forms using their edebug-form-spec property.
;;
;; Macro-expanding a call to an autoloaded macro doesn't work. This
;; shouldn't be too hard to fix.
;; that leads to an endless series of expansions: (function (function
;; ... )). It would be better to recognise `function', `quote' and
;; other special forms using their `edebug-form-spec' property.
;;
;; Please send other bug reports and feature requests to the author.
;;
;; 1.5 Acknowledgements
;; =====================
;; Thanks to John Wiegley for fixing a bug with the face definitions
;; under Emacs 24.
;;
;; 1.6 Changelog
;; ==============
;; - v0.3, 2012-10-30: print dotted lists correctly. autoload
;; definitions.
;;

;;; Code:

Expand Down

0 comments on commit 993a79f

Please sign in to comment.