Summary

read-all receiving #<unspecified> unless preceded by a predicate

Metadata

Description

This happens in csi:

 #!scm
 
 ;; This works:
 (require-extension utils)
 
 (define (command/string command)
   (define-values (proc-output proc-input proc-id) (process command))
   (port? proc-output)
   (define retval (read-all proc-output))
   (close-input-port proc-output)
   (close-output-port proc-input)
   retval)
 
 (print (command/string "ls"))



 #!scm
 
 ;; This breaks:
 
 (require-extension utils)
 
 (define (command/string command)
   (define-values (proc-output proc-input proc-id) (process command))
   (define retval (read-all proc-output))
   (close-input-port proc-output)
   (close-output-port proc-input)
   retval)
 
 (print (command/string "ls"))
 
 ;; Gives us:
 ;; Error: (open-input-file) bad argument type - not a string: #<unspecified>

Changes and comments

[2016-03-31 14:48:24 UTC] sjamaan changed description

[2016-03-31 14:48:53 UTC] sjamaan changed summary

[2016-04-03 11:57:00 UTC] evhan wrote:

Transcribed from IRC: basically, ##sys#canonicalize-body reorders internal definitions so that multi-valued assignments always follow normal ones. The result is always a bunch of let bindings to introduce the vars followed by a bunch of ##core#set! nodes to assign them, but the normal and multi-valued var/val pairs are accumulated in separate lists so the ordering gets lost. Then, the templating just blindly puts the multi-valued ##core#sets! after the others. Currently, the "dimensions" of the lists are different, so to speak -- in the code, vars/vals gets a list of variables/expressions, whereas mvars/mvals gets a list of lists of variables/expressions -- and mvars/mvals has to be processed a bit more to produce a c-w-v.

[2016-04-03 11:57:00 UTC] evhan wrote:

1459677458015822

[2016-04-04 06:39:19 UTC] evhan changed status from new to closed

[2016-04-04 06:39:19 UTC] evhan set resolution to fixed

[2016-04-04 06:39:19 UTC] evhan wrote:

Fixed by 469f2bb / 6992762.