Add classes as run-time descriptors of cl-structs.
commit872481d9e26d7569145c897fd319b1104e028878
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 18 Mar 2015 14:31:07 +0000 (18 10:31 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 18 Mar 2015 14:31:07 +0000 (18 10:31 -0400)
treecdccdeb6934b6f36b078e41e9e10ba4e6af1af08
parentfd93edbb1cabfdf0c732dbb0c6892a515b406a65
Add classes as run-time descriptors of cl-structs.

* lisp/emacs-lisp/cl-preloaded.el (cl--struct-get-class): New function.
(cl--make-slot-desc): New constructor.
(cl--plist-remove, cl--struct-register-child): New functions.
(cl-struct-define): Rewrite.
(cl-structure-class, cl-structure-object, cl-slot-descriptor)
(cl--class): New structs.
(cl--struct-default-parent): Initialize it here.
* lisp/emacs-lisp/cl-macs.el (cl--find-class): New macro.
(cl-defsubst, cl--defsubst-expand, cl--sublis): Move before first use.
(cl--struct-default-parent): New var.
(cl-defstruct): Adjust to new representation of classes; add
default parent.  In accessors, signal `wrong-type-argument' rather than
a generic error.
(cl-struct-sequence-type, cl-struct-slot-info)
(cl-struct-slot-offset): Rewrite.
* lisp/emacs-lisp/cl-generic.el (cl--generic-struct-specializers)
(cl-generic-generalizers): Rewrite.
* src/alloc.c (purecopy): Handle hash-tables.

* lisp/emacs-lisp/debug.el (debug--implement-debug-on-entry):
Bind inhibit-debug-on-entry here...
(debug): Instead of here.

* lisp/emacs-lisp/macroexp.el (macroexp--debug-eager): New var.
(internal-macroexpand-for-load): Use it.

* lwlib/xlwmenu.c (pop_up_menu): Remove debugging code.
lisp/ChangeLog
lisp/emacs-lisp/cl-generic.el
lisp/emacs-lisp/cl-macs.el
lisp/emacs-lisp/cl-preloaded.el
lisp/emacs-lisp/debug.el
lisp/emacs-lisp/macroexp.el
lwlib/ChangeLog
lwlib/xlwmenu.c
src/ChangeLog
src/alloc.c