[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New pp (was: bug#25295: 26.0.50; Represent eieio objects using objec
From: |
Noam Postavsky |
Subject: |
Re: New pp (was: bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug) |
Date: |
Sat, 11 Mar 2017 11:05:26 -0500 |
On Sat, Mar 11, 2017 at 10:38 AM, Stefan Monnier
<address@hidden> wrote:
>> +(defun pp-prin1 (object &optional stream)
>> + (let ((cl-print-readably nil)
>> + (stream (make-pp-state (or stream standard-output))))
>> + (pp--scan :open-block stream)
>> + (prog1 (cl-prin1 object (cons :pprint stream))
> ^^^^^^^^^^^^^^^^^^^^^
> Why not just pass `stream' since it's a struct and we can hence dispatch
> based on its type?
Oh, hmm, that makes sense. I took a few wrong turns while implementing
this, probably what happened is that when I decided to use (cons
:pprint) I hadn't decided on a struct yet.
>
>> +;; fallback to standard `cl-print-object'.
>> +(cl-defmethod cl-print-object (object (stream (head :pprint)))
>> + (pp--scan (cl-prin1-to-string object) (cdr stream))
>> + object)
>
> Hmm... but if we use such a pseudo-stream here, doesn't it break all
> calls to `princ' within other cl-print-object methods (i.e. forcing us
> the override pretty much all existing cl-print-object methods with
> a pprint-specific one)?
It doesn't break anything, AFAIK, it just means that you don't get
control over newlines vs spaces. So we would need pprint-specific
methods for "big" structures only.
Oh wait, did you possibly miss a close paren? Might be clearer this way:
(cl-defmethod cl-print-object (object (pprint-state (head :pprint)))
(pp--scan (cl-prin1-to-string object)
(cdr pprint-state))
object)
- New pp (was: bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug), Stefan Monnier, 2017/03/11
- Re: New pp (was: bug#25295: 26.0.50; Represent eieio objects using object-print in backtraces and edebug),
Noam Postavsky <=
- Re: New pp, Stefan Monnier, 2017/03/11
- Re: New pp, Noam Postavsky, 2017/03/11
- Re: New pp, Stefan Monnier, 2017/03/11
- Re: New pp, Noam Postavsky, 2017/03/12
- Re: New pp, Stefan Monnier, 2017/03/12
- Re: New pp, Noam Postavsky, 2017/03/12