System requirements
===================
-Compiling the mlt tool requires a "working version" of SML/NJ. I've
-tested it with 110.42. You'll need to get the SML/NJ source code
-package and modify some of the included .cm files to make a few
+Compiling the mlt tool requires a "working version" of SML/NJ. It's
+best to use version 110.46 or later. You may have problems with any
+version whatsoever, though, since this stuff uses some SML/NJ compiler
+internals, and they may change often.
+
+If you're using a pre-110.46 version, you'll need to, at a minimum,
+get the SML/NJ source, make the following patches, and build it. Of
+course, there are no promises that everything will then work with that
+particular version. (Especially problematic are the changes in the
+Basis library spec that aren't backwards compatible.) The patch
+involves modifying some of the included .cm files to make a few
additional internal structures visible. The necessary changes to make
are described below, with paths given relative to your base SML/NJ
directory. The lines listed for each file should be added right before
fun copy () =
(case TextIO.inputLine inf of
- "" => ()
- | line => (TextIO.output (outf, line);
+ NONE => ()
+ | SOME line => (TextIO.output (outf, line);
copy ()))
in
copy ();
val inf = TextIO.openIn fname
fun read acc =
(case TextIO.inputLine inf of
- "" => String.concat (rev acc)
- | line => read (line::acc))
+ NONE => String.concat (rev acc)
+ | SOME line => read (line::acc))
in
read []
before TextIO.closeIn inf
fun read (fields as {inPath, outPath, pubPath, lib, compiler, cm, sml, printFn, beforeT, afterT, exnT}) =
(case TextIO.inputLine inf of
- "" => CONFIG fields
- | line =>
+ NONE => CONFIG fields
+ | SOME line =>
(case String.tokens Char.isSpace line of
[] => read fields
| ["in", inPath] => read {inPath = expandPath inPath, outPath = outPath, pubPath = pubPath,
val errorTy = Types.WILDCARDty
- val ppstream = PrettyPrint.mk_ppstream {consumer = TextIO.print, flush = fn () => TextIO.flushOut TextIO.stdOut,
- linewidth = 80}
+ (*val ppstream = PrettyPrint.mk_ppstream {consumer = TextIO.print, flush = fn () => TextIO.flushOut TextIO.stdOut,
+ linewidth = 80}*)
datatype unify =
ExpUn of exp
(case StaticEnv.look (env, Symbol.varSymbol v) of
Bindings.CONbind (Types.DATACON {typ, ...}) => #1 (TypesUtil.instantiatePoly typ)
| _ => raise Fail "Unexpected binding in lookVal")
+
+
fun lookCon (env, v, pos) = (lookCon' (env, v))
handle ModuleUtil.Unbound _ => (error (SOME pos, "Unbound constructor " ^ v);
errorTy)
Unify.unifyTy (t1, t2)
(*end*)
handle Unify.Unify msg =>
- (PrettyPrint.begin_block ppstream PrettyPrint.CONSISTENT 0;
- PrettyPrint.add_string ppstream "Error unifying";
- PrettyPrint.add_break ppstream (1, 0);
- PrettyPrint.begin_block ppstream PrettyPrint.CONSISTENT 5;
+ ((*PrettyPrint.openBox ppstream (PrettyPrint.Abs 0);
+ PrettyPrint.string ppstream "Error unifying";
+ PrettyPrint.newline ppstream;
+ PrettyPrint.openBox ppstream (PrettyPrint.Abs 5);
PPType.ppType env ppstream t1;
- PrettyPrint.end_block ppstream;
- PrettyPrint.add_break ppstream (1, 0);
- PrettyPrint.add_string ppstream "and";
- PrettyPrint.add_break ppstream (1, 0);
- PrettyPrint.begin_block ppstream PrettyPrint.CONSISTENT 5;
+ PrettyPrint.closeBox ppstream;
+ PrettyPrint.newline ppstream;
+ PrettyPrint.string ppstream "and";
+ PrettyPrint.newline ppstream;
+ PrettyPrint.openBox ppstream (PrettyPrint.Abs 5);
PPType.ppType env ppstream t2;
- PrettyPrint.end_block ppstream;
- PrettyPrint.end_block ppstream;
- PrettyPrint.add_break ppstream (1, 0);
- PrettyPrint.flush_ppstream ppstream;
+ PrettyPrint.closeBox ppstream;
+ PrettyPrint.closeBox ppstream;
+ PrettyPrint.newline ppstream;
+ PrettyPrint.flushStream ppstream;*)
error (SOME pos, Unify.failMessage msg ^ " for " ^ (case e of ExpUn e => Tree.expString e
| PatUn p => "<pat>")))