src/Pure/ML-Systems/polyml.ML
changeset 5090 75ac9b451ae0
parent 5038 301c37df931d
child 5813 4eea84a9427d
equal deleted inserted replaced
5089:f95e0a6eb775 5090:75ac9b451ae0
    39     fn () => brk (99999, 0), en);
    39     fn () => brk (99999, 0), en);
    40 
    40 
    41 
    41 
    42 (* ML command execution -- 'eval' *)
    42 (* ML command execution -- 'eval' *)
    43 
    43 
    44 fun use_text txt =
    44 fun use_text verbose txt =
    45   let
    45   let
    46     val buffer = ref (explode txt);
    46     val in_buffer = ref (explode txt);
       
    47     val out_buffer = ref ([]: string list);
       
    48 
    47     fun get () =
    49     fun get () =
    48       (case ! buffer of
    50       (case ! in_buffer of
    49         [] => ""
    51         [] => ""
    50       | c :: cs => (buffer := cs; c));
    52       | c :: cs => (in_buffer := cs; c));
       
    53     fun put s = out_buffer := s :: ! out_buffer;
       
    54 
    51     fun exec () =
    55     fun exec () =
    52       (case ! buffer of
    56       (case ! in_buffer of
    53         [] => ()
    57         [] => ()
    54       | _ => (PolyML.compiler (get, print) (); exec ()));
    58       | _ => (PolyML.compiler (get, put) (); exec ()));
    55   in exec () end;
    59 
       
    60     fun show_output () = print (implode (rev (! out_buffer)));
       
    61   in
       
    62     exec () handle exn => (show_output (); raise exn);
       
    63     if verbose then show_output () else ()
       
    64   end;
    56 
    65 
    57 
    66 
    58 
    67 
    59 (** OS related **)
    68 (** OS related **)
    60 
    69