1structure QUse :> QUse = 2struct 3 4fun use_reader fname (reader as {read = infn0, eof, reset}) = 5 let 6 val lineNo = ref 1 7 fun infn () = 8 case infn0 () of 9 NONE => NONE 10 | SOME (c as #"\n") => (lineNo := !lineNo + 1; 11 SOME c) 12 | SOME c => SOME c 13 open PolyML 14 in 15 while not (eof()) do 16 compiler (infn, [Compiler.CPFileName fname, 17 Compiler.CPLineNo (fn () => !lineNo)]) () 18 end 19 20fun use fname = use_reader fname (QFRead.fileToReader fname) 21 22fun useScript fname = 23 let 24 val istream = TextIO.openIn fname 25 val reader = QFRead.streamToReader true istream 26 val _ = use_reader fname reader 27 handle e => (TextIO.closeIn istream; raise e) 28 in 29 TextIO.closeIn istream 30 end 31 32end 33