chicken-janitors
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-janitors] #951: print-length-limit


From: Chicken Trac
Subject: [Chicken-janitors] #951: print-length-limit
Date: Thu, 08 Nov 2012 21:24:00 -0000

#951: print-length-limit
----------------------------+-----------------------------------------------
 Reporter:  zbigniew        |       Owner:         
     Type:  defect          |      Status:  new    
 Priority:  minor           |   Milestone:  someday
Component:  core libraries  |     Version:  4.8.x  
 Keywords:                  |  
----------------------------+-----------------------------------------------
 I'd appreciate clarification as to whether this is a bug or acceptable.

 Basically in ##sys#print, although outchr and outstr both respect the
 print limit, only outchr can actually exit.  Much output is built from
 multiple calls to outstr so you can get very odd results.  Furthermore
 outstr does not truncate anything under 3 chars so random parts of the
 output may show up.

 Note that if you change outstr to exit when the limit is exceeded, it may
 not print the final ... depending on the last chunk length.  In fact, not
 truncating when len <= 3 is only appropriate if we're done printing the
 whole object, which we cannot currently detect.

 Below find some examples.

 Example 1:

 {{{
 #;1> (current-output-port)
 #<output port "(stdout)">
 #;3> (##sys#with-print-length-limit 5 (lambda () (print (current-output-
 port))))
 #<out......">
 }}}

 Explanation 1:

 {{{
 #<output port \"        -> #<out...
 (stdout)                -> ...
 ">                      -> ">          (not truncated by outstr, len <= 3)
 }}}

 Example 2:

 {{{
 #;5> (use srfi-4)
 #;7> (make-u8vector 5 255)
 #u8(255 255 255 255 255)
 #;8> (##sys#with-print-length-limit 5 (lambda () (print (make-u8vector 100
 255))))
 #u8(255...
 }}}

 Explanation 2:

 {{{
 #u8(        -> #u8(
 255         -> 255       (exceeds print limit, but length < 3)
 <space>     -> ...        (outchr truncates space to ... and exits)
 }}}

 Example 3:

 {{{
 #;9> (##sys#with-print-length-limit 5 (lambda ()
       (print (u8vector->blob (make-u8vector 20 255)))))
 #${ffffffffffffffffffffffffffffffffffffffff...
 }}}

 Explanation 3:

 The bytes are all printed with outstr (which does not truncate them or
 exit) and there is no outchr to exit.  The entire bytevector is printed,
 and the final } is truncated to "..." by outchr (!)

 Example 4:

 {{{
 #;10> (##sys#with-print-length-limit 5 (lambda ()
         (print (u8vector->blob (make-u8vector 20 0)))))
 #${00...
 }}}

 Explanation 4:

 Bytes are printed with outstr, but leading zeros are printed with outchr,
 which detects the limit and bails.

-- 
Ticket URL: <http://bugs.call-cc.org/ticket/951>
Chicken Scheme <http://www.call-with-current-continuation.org/>
Chicken Scheme is a compiler for the Scheme programming language.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]