From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Lars Brinkhoff <lars@nocrew.org>
Cc: emacs-devel@gnu.org
Subject: Re: User-defined record types
Date: Wed, 15 Mar 2017 23:05:13 -0400 [thread overview]
Message-ID: <jwvo9x2sziv.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <jwv7f3qz816.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Wed, 15 Mar 2017 15:12:05 -0400")
>> However, there is still EIEIO which may well need some expert guidance
>> to update.
> I can take care of that. Can you put your code on a branch like
> scratch/record?
OK, it's not working.
I found a problem with cl-defstruct objects, tho:
We're going to have trouble preserving backward compatibility with
pre-existing .elc files. If you look at the macro expansion of current
cl-defstruct:
(macroexpand '(cl-defstruct (sm-test) a b))
=>
(progn
(defvar cl-struct-sm-test-tags)
(define-inline sm-test-p (x) (declare (side-effect-free error-free))
(inline-letevals (x)
(inline-quote
(and (vectorp #1=,x) (>= (length #1#) 3)
(memq (aref #1# 0) cl-struct-sm-test-tags)
t))))
(put 'sm-test 'cl-deftype-satisfies 'sm-test-p)
(define-inline sm-test-a #2=(x)
"Access slot \"a\" of `(sm-test)' struct CL-X."
#3=(declare (side-effect-free t))
(inline-letevals #4=(x)
(inline-quote
(progn
(or (memq (aref #5=,x 0) cl-struct-sm-test-tags)
(signal #6='wrong-type-argument (list 'sm-test . #7=(,x))))
(aref #8=,x 1)))))
(define-inline sm-test-b #2# "Access slot \"b\" of `(sm-test)' struct CL-X." #3#
(inline-letevals #4#
(inline-quote
(progn
(or (memq (aref #5# 0) cl-struct-sm-test-tags)
(signal #6# (list 'sm-test . #7#)))
(aref #8# 2)))))
(defalias 'copy-sm-test (function copy-sequence))
(cl-defsubst make-sm-test
(&cl-defs (nil . #9=((cl-tag-slot) (a) (b))) &key a b)
"Constructor for objects of type `sm-test'."
(declare (side-effect-free t))
(vector 'cl-struct-sm-test a b))
(eval-and-compile
(cl-struct-define 'sm-test nil 'cl-structure-object 'nil nil '#9# 'cl-struct-sm-test-tags 'cl-struct-sm-test 't))
'sm-test)
As you can see, the code says it inherits from `cl-structure-object'
(which now is of `record` type), but its constructor `make-sm-test`
creates a vector rather than a record, so (cl-typep 'cl-structure-object)
will fail if it only considers `type-of'.
Even if we could arrange for cl-struct-define to override the
definition of make-sm-test, that wouldn't help with all the places
where make-sm-test has been inlined already.
[ Of course, the reverse could happen as well: a new struct type (using
`record` in its constructor) could inherit from a parent that's still
using `vector`. But I think we can arrange for that to happen only in
cases we don't care to support. ]
Stefan
next prev parent reply other threads:[~2017-03-16 3:05 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-29 20:52 bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug Eric Abrahamsen
[not found] ` <handler.25295.B.148304476023950.ack@debbugs.gnu.org>
2016-12-29 21:50 ` bug#25295: Acknowledgement (26.0.50; Represent eieio objects using object-print in backtraces and edebug) Eric Abrahamsen
2016-12-30 3:42 ` npostavs
2016-12-30 19:14 ` Eric Abrahamsen
2016-12-31 5:48 ` npostavs
2016-12-31 18:56 ` Eric Abrahamsen
2016-12-31 19:23 ` npostavs
2016-12-31 20:52 ` Eric Abrahamsen
2016-12-30 7:51 ` Eli Zaretskii
2017-01-03 18:21 ` bug#25295: Represent eieio objects using object-print in backtraces and edebug Stefan Monnier
2017-01-04 23:40 ` Eric Abrahamsen
2017-01-05 1:51 ` Stefan Monnier
2017-01-05 2:11 ` Stefan Monnier
2017-01-05 4:37 ` Stefan Monnier
2017-01-05 15:39 ` Eli Zaretskii
2017-01-06 0:42 ` Stefan Monnier
2017-01-06 7:50 ` Eli Zaretskii
2017-02-21 2:56 ` npostavs
2017-02-21 17:23 ` Stefan Monnier
2017-02-22 16:15 ` Richard Stallman
2017-02-22 19:08 ` Stefan Monnier
2017-03-02 5:36 ` Elisp printer (was: bug#25295: Represent eieio objects using object-print in backtraces and edebug) Michael Heerdegen
2017-03-02 6:38 ` Elisp printer Stefan Monnier
2017-03-03 2:14 ` Michael Heerdegen
2017-03-03 2:38 ` Stefan Monnier
2017-03-03 4:23 ` Michael Heerdegen
2017-03-06 2:50 ` Stefan Monnier
2017-03-08 4:09 ` Tom Tromey
2017-03-08 4:39 ` Stefan Monnier
2017-03-08 6:35 ` Tom Tromey
2017-03-08 9:43 ` Stefan Monnier
2017-03-08 18:17 ` Lars Brinkhoff
2017-03-08 23:02 ` Stefan Monnier
2017-03-09 15:12 ` Lars Brinkhoff
2017-03-14 9:52 ` User-defined record types Lars Brinkhoff
2017-03-14 12:28 ` Lars Brinkhoff
[not found] ` <86bmt42nk2.fsf_-_@molnjunk.nocrew.org>
[not found] ` <jwvzigoow0k.fsf-monnier+emacs@gnu.org>
2017-03-14 13:25 ` Lars Brinkhoff
2017-03-14 14:28 ` Lars Brinkhoff
2017-03-14 15:20 ` Stefan Monnier
2017-03-14 17:23 ` Lars Brinkhoff
2017-03-15 14:38 ` Stefan Monnier
2017-03-15 18:14 ` Lars Brinkhoff
2017-03-15 19:12 ` Stefan Monnier
2017-03-15 19:21 ` Lars Brinkhoff
2017-03-15 20:05 ` Stefan Monnier
2017-03-15 21:49 ` Lars Brinkhoff
2017-03-15 23:42 ` Stefan Monnier
2017-03-16 3:05 ` Stefan Monnier [this message]
2017-03-16 3:08 ` Stefan Monnier
2017-03-16 20:03 ` Lars Brinkhoff
2017-03-16 21:32 ` Stefan Monnier
2017-03-17 11:22 ` Lars Brinkhoff
2017-03-17 20:45 ` Lars Brinkhoff
2017-03-18 23:24 ` Stefan Monnier
2017-03-18 23:36 ` Stefan Monnier
2017-03-19 9:34 ` Lars Brinkhoff
2017-03-19 12:42 ` Stefan Monnier
2017-03-02 7:00 ` bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug Stefan Monnier
2017-03-02 12:52 ` npostavs
2017-03-02 13:38 ` Stefan Monnier
2017-03-11 5:43 ` npostavs
2017-03-11 15:38 ` New pp (was: bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug) Stefan Monnier
2017-03-11 16:05 ` Noam Postavsky
2017-03-11 16:40 ` New pp Stefan Monnier
2017-03-11 16:52 ` Noam Postavsky
2017-03-11 16:57 ` Stefan Monnier
2017-03-12 13:31 ` Noam Postavsky
2017-03-12 14:06 ` Stefan Monnier
2017-03-12 16:13 ` Noam Postavsky
2017-03-02 17:35 ` bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug Eric Abrahamsen
2017-03-02 18:31 ` Stefan Monnier
2017-10-21 21:36 ` Eric Abrahamsen
2017-10-22 3:21 ` Stefan Monnier
2018-10-18 19:01 ` Eric Abrahamsen
-- strict thread matches above, loose matches on Subject: below --
2013-10-10 11:22 RFC: User-defined pseudovectors Lars Brinkhoff
2013-10-10 14:00 ` Stefan Monnier
2013-10-10 16:30 ` Lars Brinkhoff
2013-10-10 20:42 ` Stefan Monnier
2013-10-11 6:00 ` Lars Brinkhoff
2013-10-11 12:22 ` Stefan Monnier
2013-10-12 16:01 ` User-defined record types Lars Brinkhoff
2013-10-12 18:58 ` Stefan Monnier
2013-10-18 13:39 ` Ted Zlatanov
2013-10-18 15:28 ` Stefan Monnier
2013-10-18 23:24 ` Ted Zlatanov
2013-10-19 2:09 ` Stefan Monnier
2013-10-19 2:30 ` Drew Adams
2013-10-19 11:48 ` Ted Zlatanov
2013-10-19 14:37 ` Stefan Monnier
2013-10-19 20:11 ` Ted Zlatanov
2013-10-19 21:48 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvo9x2sziv.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=emacs-devel@gnu.org \
--cc=lars@nocrew.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.