* sml-move.el (sml-(for|back)ward-sym): now also return the string if any
and take care of the "op" special keyword.
(sml-op-prec): setup an alist for the infix operators.
* version 3.9.1: sent to Roland McGrath.

* opt/split.sml: seriously reworked. Now splits TFNs as well.
* kernel/primop.sml (effect): removed DEREF and MAKEREF from the pure
primops.
* flint/flintutil.sml (copy): sort the type-map since {lt,tc}_subst
actually expects it to be sorted.
* kernel/ltyextern.{sml,sig} (lt_nvpoly): new function (digged from
recover.sml to build a LT_POLY in the case of named tvars.
* opt/recover.sml: removed unused depth arguments left behind from before
we switched to named tvars.
(addLty): added for the benefit of opt/split.sml
(lt_nvpoly): moved to ltyextern.sml

* opt/fcontract.sml: (fcexp): straightforward split into functions
(fcLet): do the BRANCH thing after contraction (plus force an additional
contraction, so the total is 3 passes for a fairly good handling of
wrap's equality-primop compilation)
(fcLet): drop TAPP if the output is unused.

* opt/fcontract.sml: generalized the BRANCH thing.
It should now be faster to detect and avoid potential code blowups while
applying to more cases. But it requires one more pass to generate the
same code quality :-(

Merged in Bratin's typelifting and Chris' named tvars.
FLINT is now using tvars from the first lcontract all the way to cps.
* reps/rttype.sml: changes from Bratin.
(rtLexp): define the NVAR case (return the tvar as an lvar).
* opt/[fl]contract.sml: removed the restriction on inlining at the same
deBruijn depth.
* opt/lift.sml: new file for typelifting.
* flint/flintutil.sml (copy): added tvar renaming.
* flint/tvarcvt.sml: new file for named tvar <-> deBruijn conversions.

* opt/optutils.sml (id): removed. That was stupid.
* opt/collect.sml: drop support for actuals (was only used for cstargs).
* opt/lcontract.sml (lpfd): reset the inline bit to a safe value.
* opt/fcontract.sml (cstargs): eliminated. Might reappear in a
specialization phase some day.
(inline): turned off unrolling because it's buggy.
(APP): use the new ifs, damit!

* opt/fcontract.sml: take advantage of single-arm SWITCH (aka decon)
(SWITCH(CON)): just compare the conreps because types may differ (?)
(inlineWitness): ugly hack used to figure out if inlining happened,
in order to decide whether to keep the inline bit or not (in cfun).

* added basic unrolling support
* changed fkind to have most annotations valid on
functors as well. It also adds a loopkind annotation as well as extends
the inline boolean into a three-way alternative.
* switched to a continuation passing style to implement the
let-associativity rule in a better way.

made changes to kind-checking so that enc_tvar need not be exported
by ltykernel. one awkwardness is that the tkLookupFreeVars function
in ltykernel manipulates a tkindenv, which is technically not defined
until ltyextern.