wenzelm@21653: (* Title: Pure/ML-Systems/polyml-5.0.ML wenzelm@21653: ID: $Id$ wenzelm@21653: wenzelm@21653: Compatibility wrapper for Poly/ML 5.0. wenzelm@21653: *) wenzelm@21653: wenzelm@21653: use "ML-Systems/polyml.ML"; wenzelm@21653: wenzelm@21653: val pointer_eq = PolyML.pointerEq; wenzelm@21771: wenzelm@21771: wenzelm@21771: (* improved versions of use_text/file *) wenzelm@21853: wenzelm@24600: fun use_text (tune: string -> string) name (print, err) verbose txt = wenzelm@21771: let wenzelm@24600: val in_buffer = ref (explode (tune txt)); wenzelm@21771: val out_buffer = ref ([]: string list); wenzelm@21771: fun output () = implode (rev (case ! out_buffer of "\n" :: cs => cs | cs => cs)); wenzelm@21771: wenzelm@21771: val line_no = ref 1; wenzelm@21771: fun line () = ! line_no; wenzelm@21771: fun get () = wenzelm@21771: (case ! in_buffer of wenzelm@21771: [] => "" wenzelm@21771: | c :: cs => (in_buffer := cs; if c = "\n" then line_no := ! line_no + 1 else (); c)); wenzelm@21923: fun put s = out_buffer := s :: ! out_buffer; wenzelm@21771: wenzelm@21771: fun exec () = wenzelm@21771: (case ! in_buffer of wenzelm@21771: [] => () wenzelm@21923: | _ => (PolyML.compilerEx (get, put, line, name) (); exec ())); wenzelm@21771: in wenzelm@21771: exec () handle exn => (err (output ()); raise exn); wenzelm@21923: if verbose then print (output ()) else () wenzelm@21771: end; wenzelm@21771: wenzelm@21771: fun use_file output verbose name = wenzelm@21771: let wenzelm@21771: val instream = TextIO.openIn name; wenzelm@21771: val txt = TextIO.inputAll instream before TextIO.closeIn instream; wenzelm@22144: in use_text name output verbose txt end;