freenode/#clasp - IRC Chatlog
Search
14:24:36
kpoeck
Drmeister why did you change in load.cc the outputs for :verbose and :print to BFORMAT_T (initially eval::funcall(cl::_sym_format ....)
14:27:45
kpoeck
Can I change that back to eval::funcall, so that some ansi-tests that capture output from load work again?
14:31:12
drmeister
Ok, so I changed from my old, weird _lisp->print(...) to BFORMAT_T because BFORMAT_T prints properly to the standard output.
14:32:21
kpoeck
to eval::funcall(cl::_sym_format, _lisp->_true(), SimpleBaseString_O::make("~&;;; Loading ~s~%"), lsource);
14:33:26
drmeister
Right - but that may have trouble or at least look weird in the interpreter or aclasp - because format isn't fully installed at that point.
14:34:18
drmeister
The interpreter provides a seriously crippled version of format and only bclasp contains the proper version implemented in Common Lisp.
14:36:56
kpoeck
In compile-file there is describe-form using only write-string and terpri, is that bootstrap safe?
14:37:17
drmeister
What I mean to say is "yes", we can change it to eval::funcall(cl::_sym_format,...) to make it work properly.
14:37:43
drmeister
I'm just messing more with the interpreter and aclasp and it would be nice to have load print stuff properly in there as well.
14:39:51
kpoeck
Is there something like if (format-already-works) eval::funcalll .... else bformat();?
14:39:54
drmeister
If you can do it with write-string and terpri - then do that. If it has a problem - it's easier to back port a solution to the interpreter
14:41:54
drmeister
It writes out to *standard-output* - isn't that all that matters for load printing messages for :verbose and :print?
14:42:40
kpoeck
well and that (with-output-to-string (*standard-output*)(load ...)) captures the output
14:43:35
drmeister
Ah - so the output from BFORMAT_T doesn't get captured by (with-output-to-string (*standard-output*) ...) - that's not good.
14:47:32
drmeister
Ah - I see - that's the central problem. I use BFORMAT_T and BFORMAT a lot in the C++ code because I wanted something like format that worked right from the beginning - but it's not working right.
14:52:01
kpoeck
ok is #define BFORMAT_T(fmt) core::core__bformat(_lisp->_true(),(fmt).str(),_Nil<core::T_O>());
14:54:34
kpoeck
(with-output-to-string (*standard-output*)(core:bformat *standard-output* "Foo")) -> "Foo"
14:54:56
drmeister
It's not working properly (with-output-to-string (*standard-output*) (bformat t "whatever")) should return a string containing "whatever"
14:55:16
kpoeck
and (with-output-to-string (*standard-output*)(core:bformat *standard-output* "Foo")) works
14:56:57
drmeister
Yeah - if you pass T to it you get cl::*terminal-io* rather than cl::*standard-output*
15:00:15
Bike
it shouldn't be hard. destination can be T, NIL, a string with a fill pointer, or a stream. T means standard output, nil means write to string, a string means put it on the end, and a stream is itself;.
15:02:23
Bike
we handle it fine for actual format https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/lsp/format.lsp#L505-L517
15:02:41
kpoeck
Bike, do you say that changing outputStreamDesignator to return *standard-output* instead of *terminal-io* is wrong?
15:03:40
Bike
if bformat is supposed to mimic format, it shouldn't be using an output stream designator.
15:05:02
kpoeck
http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_s.htm#stream_designator ?
15:06:16
kpoeck
nil (denoting the value of *standard-input* for input stream designators or denoting the value of *standard-output* for output stream designators)
15:07:49
drmeister
NIL converts to my_thread->_BFormatStringOutputStream - a thread local string-output-stream ... for speed.
15:08:00
kpoeck
yes, but than I would expect (with-output-to-string (*standard-output*)(core:bformat nil "Foo")) to return "Foo"
15:09:04
Bike
bformat returns the wrong thing, i guess? it has nothing to do with outputStreamDesignator though.
15:10:41
drmeister
Something else must be wrong kpoeck - I'll compile the change above and then see what's going on.
15:12:55
drmeister
I'm seeing at least two bugs - I'll fixed one - it's compiling - and then i'll take a look at the next one.
15:14:37
kpoeck
I have written some regression to test to verify correct behaviour, so I am prepared to test :-)
15:18:45
drmeister
Right - it would be more consistent with the rest of the code to keep using BFORMAT
15:24:13
Bike
as far as those go, i looked at https://github.com/clasp-developers/clasp/issues/522 but i'm a bit stumped
15:25:02
Bike
i don't see anything that actually alters the fill pointer, so i think it's maybe returning the underlying data vector, or something
15:31:54
drmeister
There's no second bug: (with-output-to-string (*standard-output*) (format nil "Hello")) --> "" is correct.
15:35:49
karlosz
is there a way to invoke partial inlining without the liveness analysis? i do my own dead code elimination later - i feel like the liveness computation outweighs any gains in not analyzing dead variables
15:41:10
drmeister
(with-output-to-string (*standard-output*) (format nil "Hello")) --> "" - there is no output being written to *standard-output* so the form returns an empty string.