[MLton] MinGW hosted MLton

Wesley W. Terpstra wesley@terpstra.ca
Mon, 2 May 2005 17:24:32 +0200


--AqsLC8rIMeq19msA
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

So, helloworld and mlton-compile compile! (patch and new .c file attached)
That is to say, they compile under a MinGW hosted MLton, not cross-compiled.

MLton is almost able to completely rebuild itself under MinGW now, except:

0. 'wait' is reported unused by MLton, but if removed it fails to build

1. MLton crashes when compiling mllex and mlyacc
   (compile log with -verbose 3 attached)

2. 'mllex mlb.lex' says:
no files
Usage: mllex file.lex ...

3. 'mlyacc ml.grm' says:
too many files
Usage: mlyacc file.grm

I have no idea what's wrong during pass 'convert'.

-- 
Wesley W. Terpstra

--AqsLC8rIMeq19msA
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="mingw.patch"

? runtime/Posix/Process/system.c
Index: basis-library/misc/primitive.sml
===================================================================
RCS file: /cvsroot/mlton/mlton/basis-library/misc/primitive.sml,v
retrieving revision 1.147
diff -u -r1.147 primitive.sml
--- basis-library/misc/primitive.sml	22 Apr 2005 18:13:45 -0000	1.147
+++ basis-library/misc/primitive.sml	2 May 2005 11:39:13 -0000
@@ -985,8 +985,6 @@
 
 	    structure Process =
 	       struct
-                  val cwait =
-                     _import "MLton_Process_cwait": Pid.t * int ref -> Pid.t;
 		  val spawne =
 		     _import "MLton_Process_spawne"
 		     : (NullString.t * NullString.t array * NullString.t array
Index: basis-library/mlton/process.sml
===================================================================
RCS file: /cvsroot/mlton/mlton/basis-library/mlton/process.sml,v
retrieving revision 1.18
diff -u -r1.18 process.sml
--- basis-library/mlton/process.sml	2 Dec 2004 21:07:40 -0000	1.18
+++ basis-library/mlton/process.sml	2 May 2005 11:39:13 -0000
@@ -187,22 +187,6 @@
 	    DynamicWind.wind (fn () => f x, fn () => Mask.unblock Mask.all)
 	 end
 
-      fun cwait pid =
-	 let
-	    val status: int ref = ref 0
-	    val pid =
-	       SysCall.syscall
-	       (fn () =>
-		let 
-		   val p = Prim.cwait (pid, status)
-		   val p' = Pid.toInt p
-		in
-		   (p', fn () => p)
-		end)
-	 in
-	    (pid, Process.fromStatus (Exit.Status.fromInt (!status)))
-	 end
-
       fun reap (T {pid, status, stderr, stdin, stdout}) =
 	 case !status of
 	    NONE => 
@@ -213,7 +197,7 @@
 		   *)
 		  val (_, st) =
 		     if useWindowsProcess
-			then cwait pid
+			then Process.waitpid (Process.W_CHILD pid, [])
 		     else protect Process.waitpid (Process.W_CHILD pid, [])
 		  val () = status := SOME st
 	       in
Index: basis-library/posix/primitive.sml
===================================================================
RCS file: /cvsroot/mlton/mlton/basis-library/posix/primitive.sml,v
retrieving revision 1.31
diff -u -r1.31 primitive.sml
--- basis-library/posix/primitive.sml	2 Dec 2004 21:07:40 -0000	1.31
+++ basis-library/posix/primitive.sml	2 May 2005 11:39:14 -0000
@@ -197,10 +197,14 @@
 	    val pause = _import "Posix_Process_pause": unit -> int;
 	    val sleep = _import "Posix_Process_sleep": int -> int;
 	    val stopSig = _import "Posix_Process_stopSig": Status.t -> Signal.t;
+	    val system = _import "Posix_Process_system": string -> Status.t;
 	    val termSig = _import "Posix_Process_termSig": Status.t -> Signal.t;
 	    val waitpid =
 	       _import "Posix_Process_waitpid"
 	       : Pid.t * Status.t ref * int -> Pid.t;
+            val cwait =
+               _import "MLton_Process_cwait"
+               : Pid.t * Status.t ref -> Pid.t;
 	 end
 
       structure ProcEnv =
Index: basis-library/posix/process.sml
===================================================================
RCS file: /cvsroot/mlton/mlton/basis-library/posix/process.sml,v
retrieving revision 1.29
diff -u -r1.29 process.sml
--- basis-library/posix/process.sml	2 Dec 2004 21:07:43 -0000	1.29
+++ basis-library/posix/process.sml	2 May 2005 11:39:14 -0000
@@ -92,6 +92,10 @@
 	 val status: Status.t ref = ref (Status.fromInt 0)
 	 fun wait (wa, status, flags) =
 	    let
+	       val usecwait = 
+	          Primitive.MLton.Platform.OS.useWindowsProcess
+	          andalso case wa of W_CHILD _ => true | _ => false
+               
 	       val p =
 		  case wa of
 		     W_ANY_CHILD => ~1
@@ -103,7 +107,10 @@
 	       SysCall.syscallRestart
 	       (fn () =>
 		let
-		   val pid = Prim.waitpid (Pid.fromInt p, status,
+		   val pid = 
+		      if usecwait 
+		      then Prim.cwait (Pid.fromInt p, status)
+		      else Prim.waitpid (Pid.fromInt p, status,
 					   SysWord.toInt flags)
 		in
 		   (Pid.toInt pid, fn () => pid)
Index: basis-library/system/process.sml
===================================================================
RCS file: /cvsroot/mlton/mlton/basis-library/system/process.sml,v
retrieving revision 1.14
diff -u -r1.14 process.sml
--- basis-library/system/process.sml	25 Nov 2004 01:35:48 -0000	1.14
+++ basis-library/system/process.sml	2 May 2005 11:39:14 -0000
@@ -15,8 +15,6 @@
    struct
       open Posix.Process
 
-      structure Signal = MLtonSignal
-	 
       structure Status =
 	 struct
 	    open Primitive.Status
@@ -43,25 +41,7 @@
       fun wait (pid: Pid.t): Status.t =
 	 Status.fromPosix (#2 (waitpid (W_CHILD pid, [])))
 	       
-      fun system cmd =
-	 let
-	    val pid =
-	       MLtonProcess.spawn {args = ["sh", "-c", cmd],
-				   path = "/bin/sh"}
-	    val old =
-	       List.map (fn s => 
-			 let
-			    open Signal
-			    val old = getHandler s
-			    val _ = setHandler (s, Handler.ignore)
-			 in
-			    (s, old)
-			 end)
-	       [Posix.Signal.int, Posix.Signal.quit]
-	 in
-	    DynamicWind.wind (fn () => wait pid,
-			      fn () => List.app Signal.setHandler old)
-	 end
+      fun system cmd = PosixPrimitive.Process.system (cmd ^ "\000")
 
       val atExit = MLtonProcess.atExit
 	 
Index: mlton/main/main.fun
===================================================================
RCS file: /cvsroot/mlton/mlton/mlton/main/main.fun,v
retrieving revision 1.88
diff -u -r1.88 main.fun
--- mlton/main/main.fun	1 May 2005 09:28:53 -0000	1.88
+++ mlton/main/main.fun	2 May 2005 11:39:16 -0000
@@ -720,7 +720,7 @@
 			let
 			   val (tmpVar, default) =
 			      case MLton.Platform.OS.host of
-				 MinGW => ("TEMP", "C:/WINNT/TEMP")
+				 MinGW => ("TEMP", "C:/WINDOWS/TEMP")
 			       | _ => ("TMPDIR", "/tmp")
 			in
 			   case Process.getEnv tmpVar of

--AqsLC8rIMeq19msA
Content-Type: text/x-csrc; charset=us-ascii
Content-Disposition: attachment; filename="system.c"

#include "platform.h"

int Posix_Process_system(const char* cmd) {
	return system(cmd);
}

--AqsLC8rIMeq19msA
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="mllex.log"

MLton starting
MLton MLTONVERSION (built Mon May 02 13:47:16 2005 on unknown)
  created this file on Mon May 02 17:17:38 2005.
Do not edit this file.
Flag settings: 
   align: 4
   atMLtons: (mllex, @MLton, --)
   basis library: basis-2002
   log2 (card size): 8
   chunk: chunk per function
   codegen: Native
   contifyIntoMain: false
   debug: false
   deepFlattenDelay: true
   deepFlattenUnify: false
   defines: []
   diag passes: []
   drop passes: []
   elaborate allowConstant (default): false
   elaborate allowConstant (enabled): true
   elaborate allowExport (default): false
   elaborate allowExport (enabled): true
   elaborate allowImport (default): false
   elaborate allowImport (enabled): true
   elaborate allowPrim (default): false
   elaborate allowPrim (enabled): true
   elaborate allowOverload (default): false
   elaborate allowOverload (enabled): true
   elaborate allowRebindEquals (default): false
   elaborate allowRebindEquals (enabled): true
   elaborate deadCode (default): false
   elaborate deadCode (enabled): true
   elaborate forceUsed (default): false
   elaborate forceUsed (enabled): true
   elaborate ffiStr (default): None
   elaborate ffiStr (enabled): true
   elaborate sequenceUnit (default): false
   elaborate sequenceUnit (enabled): true
   elaborate warnMatch (default): true
   elaborate warnMatch (enabled): true
   elaborate warnUnused (default): false
   elaborate warnUnused (enabled): true
   elaborate only: false
   eliminate overflow: true
   export header: None
   exn history: false
   gc check: Limit
   handlers: Flow
   indentation: 3
   inline: NonRecursive {product = 320, small = 60}
   inlineIntoMain: true
   input file: mllex
   instrument: false
   instrument Sxml: false
   keep Machine: false
   keep RSSA: false
   keep SSA: false
   keep SSA2: false
   keep dot: false
   keep passes: []
   extra_: true
   lib dir: C:/msys/1.0/mlton
   lib target dir: C:/msys/1.0/mlton/self
   limit check: loop headers (fullCFG = false, loopExits = true)
   limit check counts: false
   loop passes: 1
   mark cards: true
   max function size: 10000
   may load world: true
   native commented: 0
   native live stack: false
   native optimize: 1
   native move hoist: true
   native copy prop: true
   native copy prop cutoff: 1000
   native cutoff: 100
   native live transfer: 8
   native future: 64
   native shuffle: true
   native ieee fp: false
   native split: Some 20000
   new return: false
   polyvariance: Some {rounds = 2, small = 30, product = 300}
   prof passes: []
   profile: None
   profile basis: false
   profile branch: false
   profile IL: ProfileSource
   profile stack: false
   reserve esp: None
   show basis: None
   show def-use: None
   show types: false
   ssaPassesSet: <ssaPassesSet>
   ssaPasses: [default]
   ssa2PassesSet: <ssa2PassesSet>
   ssa2Passes: [default]
   stack cont: false
   static: false
   sxmlPassesSet: <sxmlPassesSet>
   sxmlPasses: [default]
   target: self
   target arch: X86
   target OS: MinGW
   type check: false
   type error: concise
   use basis library: true
   verbosity: Detail
   warn unrecognized annotation: true
   xmlPassesSet: <xmlPassesSet>
   xmlPasses: [default]
   zone cut depth: 100
   Compile SML starting
      pre codegen starting
	 parseAndElaborate starting
	 parseAndElaborate finished in 0.00 + 0.00 (0% GC)
	 core-ml size is 39,170,660 bytes
	 numPeeks = 2463593
	 maxLength = 3
	 average position in property list = 0.347
	 numPeeks = 98779
	 average position in bucket = 1.009
Warning: c:\msys\1.0\mlton\sml\basis\system\process.sml 41.11.
  Unused variable: wait.
	 deadCode starting
	 deadCode finished in 0.00 + 0.00 (0% GC)
	 core-ml size is 29,378,416 bytes
	 numPeeks = 2509999
	 maxLength = 3
	 average position in property list = 0.348
	 numPeeks = 98779
	 average position in bucket = 1.009
	 defunctorize starting
	 defunctorize finished in 0.00 + 0.00 (0% GC)
	 xml size is 27,031,236 bytes
	 numPeeks = 2814348
	 maxLength = 4
	 average position in property list = 0.360
	 numPeeks = 147047
	 average position in bucket = 0.937
	 size = 72682
	 num types in program = 18320
	 num distinct types = 20737
	 hash table size is 0 bytes
	 xmlSimplify starting
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	    size = 72682
	    num types in program = 18320
	    num distinct types = 21533
	    hash table size is 0 bytes
	    xmlShrink starting
	    xmlShrink finished in 0.00 + 0.00 (0% GC)
	    post.xml size is 5,596,572 bytes
	    numPeeks = 4361742
	    maxLength = 4
	    average position in property list = 0.238
	    numPeeks = 208619
	    average position in bucket = 1.045
	    size = 33514
	    num types in program = 15380
	    num distinct types = 21533
	    hash table size is 0 bytes
	    xmlSimplifyTypes starting
	    xmlSimplifyTypes finished in 0.00 + 0.00 (0% GC)
	    post.xml size is 6,614,104 bytes
	    numPeeks = 4592866
	    maxLength = 4
	    average position in property list = 0.231
	    numPeeks = 224136
	    average position in bucket = 1.048
	    size = 33514
	    num types in program = 15372
	    num distinct types = 21541
	    hash table size is 0 bytes
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	 xmlSimplify finished in 0.00 + 0.00 (0% GC)
	 xml size is 6,380,496 bytes
	 numPeeks = 5003309
	 maxLength = 4
	 average position in property list = 0.251
	 numPeeks = 270251
	 average position in bucket = 1.089
	 size = 33514
	 num types in program = 15372
	 num distinct types = 21546
	 hash table size is 0 bytes
	 monomorphise starting
	 monomorphise finished in 0.00 + 0.00 (0% GC)
	 sxml size is 6,730,108 bytes
	 numPeeks = 5949302
	 maxLength = 4
	 average position in property list = 0.269
	 numPeeks = 458502
	 average position in bucket = 1.304
	 size = 51135
	 num types in program = 5665
	 num distinct types = 26662
	 hash table size is 0 bytes
	 sxmlSimplify starting
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	    size = 51135
	    num types in program = 5665
	    num distinct types = 26881
	    hash table size is 0 bytes
	    sxmlShrink1 starting
	    sxmlShrink1 finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 4,517,024 bytes
	    numPeeks = 7070790
	    maxLength = 4
	    average position in property list = 0.240
	    numPeeks = 478278
	    average position in bucket = 1.309
	    size = 36260
	    num types in program = 2569
	    num distinct types = 26881
	    hash table size is 0 bytes
	    implementSuffix starting
	    implementSuffix finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 4,518,368 bytes
	    numPeeks = 7117810
	    maxLength = 4
	    average position in property list = 0.238
	    numPeeks = 478284
	    average position in bucket = 1.309
	    size = 36267
	    num types in program = 2570
	    num distinct types = 26882
	    hash table size is 0 bytes
	    sxmlShrink2 starting
	    sxmlShrink2 finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 3,741,544 bytes
	    numPeeks = 7584395
	    maxLength = 4
	    average position in property list = 0.225
	    numPeeks = 478284
	    average position in bucket = 1.309
	    size = 29523
	    num types in program = 2219
	    num distinct types = 26882
	    hash table size is 0 bytes
	    implementExceptions starting
	    implementExceptions finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 3,856,868 bytes
	    numPeeks = 7628966
	    maxLength = 4
	    average position in property list = 0.223
	    numPeeks = 478547
	    average position in bucket = 1.309
	    size = 30537
	    num types in program = 2231
	    num distinct types = 26891
	    hash table size is 0 bytes
	    sxmlShrink3 starting
	    sxmlShrink3 finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 3,795,524 bytes
	    numPeeks = 8055766
	    maxLength = 4
	    average position in property list = 0.212
	    numPeeks = 478547
	    average position in bucket = 1.309
	    size = 29879
	    num types in program = 2225
	    num distinct types = 26891
	    hash table size is 0 bytes
	    polyvariance starting
	       size = 27958
	       num types in program = 1694
	       num distinct types = 26891
	       hash table size is 0 bytes
	       size = 26588
	       num types in program = 1667
	       num distinct types = 26891
	       hash table size is 0 bytes
	    polyvariance finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 3,350,804 bytes
	    numPeeks = 9255285
	    maxLength = 4
	    average position in property list = 0.187
	    numPeeks = 478547
	    average position in bucket = 1.309
	    size = 26588
	    num types in program = 1667
	    num distinct types = 26891
	    hash table size is 0 bytes
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	 sxmlSimplify finished in 0.00 + 0.00 (0% GC)
	 sxml size is 3,350,804 bytes
	 numPeeks = 9436396
	 maxLength = 4
	 average position in property list = 0.187
	 numPeeks = 489910
	 average position in bucket = 1.313
	 size = 26588
	 num types in program = 1667
	 num distinct types = 26897
	 hash table size is 0 bytes
	 closureConvert starting
	    flow analysis starting
	    flow analysis finished in 0.00 + 0.00 (0% GC)
	    free variables starting
	    free variables finished in 0.00 + 0.00 (0% GC)
	    globalize starting
	    globalize finished in 0.00 + 0.00 (0% GC)
	    convert starting

--AqsLC8rIMeq19msA
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="mlyacc.log"

MLton starting
MLton MLTONVERSION (built Mon May 02 13:47:16 2005 on unknown)
  created this file on Mon May 02 17:18:39 2005.
Do not edit this file.
Flag settings: 
   align: 4
   atMLtons: (mlyacc, @MLton, --)
   basis library: basis-2002
   log2 (card size): 8
   chunk: chunk per function
   codegen: Native
   contifyIntoMain: false
   debug: false
   deepFlattenDelay: true
   deepFlattenUnify: false
   defines: []
   diag passes: []
   drop passes: []
   elaborate allowConstant (default): false
   elaborate allowConstant (enabled): true
   elaborate allowExport (default): false
   elaborate allowExport (enabled): true
   elaborate allowImport (default): false
   elaborate allowImport (enabled): true
   elaborate allowPrim (default): false
   elaborate allowPrim (enabled): true
   elaborate allowOverload (default): false
   elaborate allowOverload (enabled): true
   elaborate allowRebindEquals (default): false
   elaborate allowRebindEquals (enabled): true
   elaborate deadCode (default): false
   elaborate deadCode (enabled): true
   elaborate forceUsed (default): false
   elaborate forceUsed (enabled): true
   elaborate ffiStr (default): None
   elaborate ffiStr (enabled): true
   elaborate sequenceUnit (default): false
   elaborate sequenceUnit (enabled): true
   elaborate warnMatch (default): true
   elaborate warnMatch (enabled): true
   elaborate warnUnused (default): false
   elaborate warnUnused (enabled): true
   elaborate only: false
   eliminate overflow: true
   export header: None
   exn history: false
   gc check: Limit
   handlers: Flow
   indentation: 3
   inline: NonRecursive {product = 320, small = 60}
   inlineIntoMain: true
   input file: mlyacc
   instrument: false
   instrument Sxml: false
   keep Machine: false
   keep RSSA: false
   keep SSA: false
   keep SSA2: false
   keep dot: false
   keep passes: []
   extra_: true
   lib dir: C:/msys/1.0/mlton
   lib target dir: C:/msys/1.0/mlton/self
   limit check: loop headers (fullCFG = false, loopExits = true)
   limit check counts: false
   loop passes: 1
   mark cards: true
   max function size: 10000
   may load world: true
   native commented: 0
   native live stack: false
   native optimize: 1
   native move hoist: true
   native copy prop: true
   native copy prop cutoff: 1000
   native cutoff: 100
   native live transfer: 8
   native future: 64
   native shuffle: true
   native ieee fp: false
   native split: Some 20000
   new return: false
   polyvariance: Some {rounds = 2, small = 30, product = 300}
   prof passes: []
   profile: None
   profile basis: false
   profile branch: false
   profile IL: ProfileSource
   profile stack: false
   reserve esp: None
   show basis: None
   show def-use: None
   show types: false
   ssaPassesSet: <ssaPassesSet>
   ssaPasses: [default]
   ssa2PassesSet: <ssa2PassesSet>
   ssa2Passes: [default]
   stack cont: false
   static: false
   sxmlPassesSet: <sxmlPassesSet>
   sxmlPasses: [default]
   target: self
   target arch: X86
   target OS: MinGW
   type check: false
   type error: concise
   use basis library: true
   verbosity: Detail
   warn unrecognized annotation: true
   xmlPassesSet: <xmlPassesSet>
   xmlPasses: [default]
   zone cut depth: 100
   Compile SML starting
      pre codegen starting
	 parseAndElaborate starting
	 parseAndElaborate finished in 0.00 + 0.00 (0% GC)
	 core-ml size is 45,646,848 bytes
	 numPeeks = 3030799
	 maxLength = 3
	 average position in property list = 0.331
	 numPeeks = 112110
	 average position in bucket = 1.001
Warning: c:\msys\1.0\mlton\sml\basis\system\process.sml 41.11.
  Unused variable: wait.
	 deadCode starting
	 deadCode finished in 0.00 + 0.00 (0% GC)
	 core-ml size is 35,837,292 bytes
	 numPeeks = 3084921
	 maxLength = 3
	 average position in property list = 0.332
	 numPeeks = 112110
	 average position in bucket = 1.001
	 defunctorize starting
	 defunctorize finished in 0.00 + 0.00 (0% GC)
	 xml size is 33,754,304 bytes
	 numPeeks = 3477690
	 maxLength = 4
	 average position in property list = 0.343
	 numPeeks = 170754
	 average position in bucket = 0.956
	 size = 98037
	 num types in program = 22370
	 num distinct types = 25006
	 hash table size is 0 bytes
	 xmlSimplify starting
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	    size = 98037
	    num types in program = 22370
	    num distinct types = 26038
	    hash table size is 0 bytes
	    xmlShrink starting
	    xmlShrink finished in 0.00 + 0.00 (0% GC)
	    post.xml size is 7,289,032 bytes
	    numPeeks = 5557716
	    maxLength = 4
	    average position in property list = 0.220
	    numPeeks = 248799
	    average position in bucket = 1.111
	    size = 45295
	    num types in program = 18363
	    num distinct types = 26038
	    hash table size is 0 bytes
	    xmlSimplifyTypes starting
	    xmlSimplifyTypes finished in 0.00 + 0.00 (0% GC)
	    post.xml size is 8,519,664 bytes
	    numPeeks = 5855449
	    maxLength = 4
	    average position in property list = 0.214
	    numPeeks = 267179
	    average position in bucket = 1.112
	    size = 45295
	    num types in program = 18355
	    num distinct types = 26046
	    hash table size is 0 bytes
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	 xmlSimplify finished in 0.00 + 0.00 (0% GC)
	 xml size is 8,252,080 bytes
	 numPeeks = 6406597
	 maxLength = 4
	 average position in property list = 0.237
	 numPeeks = 326008
	 average position in bucket = 1.162
	 size = 45295
	 num types in program = 18355
	 num distinct types = 26051
	 hash table size is 0 bytes
	 monomorphise starting
	 monomorphise finished in 0.00 + 0.00 (0% GC)
	 sxml size is 8,813,904 bytes
	 numPeeks = 7666508
	 maxLength = 4
	 average position in property list = 0.258
	 numPeeks = 561654
	 average position in bucket = 1.390
	 size = 66301
	 num types in program = 7597
	 num distinct types = 33088
	 hash table size is 0 bytes
	 sxmlSimplify starting
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	    size = 66301
	    num types in program = 7597
	    num distinct types = 33396
	    hash table size is 0 bytes
	    sxmlShrink1 starting
	    sxmlShrink1 finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 6,096,320 bytes
	    numPeeks = 9122903
	    maxLength = 4
	    average position in property list = 0.229
	    numPeeks = 586909
	    average position in bucket = 1.389
	    size = 48288
	    num types in program = 3670
	    num distinct types = 33396
	    hash table size is 0 bytes
	    implementSuffix starting
	    implementSuffix finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 6,097,664 bytes
	    numPeeks = 9186355
	    maxLength = 4
	    average position in property list = 0.227
	    numPeeks = 586915
	    average position in bucket = 1.389
	    size = 48295
	    num types in program = 3671
	    num distinct types = 33397
	    hash table size is 0 bytes
	    sxmlShrink2 starting
	    sxmlShrink2 finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 5,277,992 bytes
	    numPeeks = 9818395
	    maxLength = 4
	    average position in property list = 0.214
	    numPeeks = 586915
	    average position in bucket = 1.389
	    size = 41252
	    num types in program = 3240
	    num distinct types = 33397
	    hash table size is 0 bytes
	    implementExceptions starting
	    implementExceptions finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 5,405,644 bytes
	    numPeeks = 9881756
	    maxLength = 4
	    average position in property list = 0.212
	    numPeeks = 587205
	    average position in bucket = 1.388
	    size = 42359
	    num types in program = 3254
	    num distinct types = 33410
	    hash table size is 0 bytes
	    sxmlShrink3 starting
	    sxmlShrink3 finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 5,337,200 bytes
	    numPeeks = 10471540
	    maxLength = 4
	    average position in property list = 0.201
	    numPeeks = 587205
	    average position in bucket = 1.388
	    size = 41620
	    num types in program = 3248
	    num distinct types = 33410
	    hash table size is 0 bytes
	    polyvariance starting
	       size = 40216
	       num types in program = 2575
	       num distinct types = 33410
	       hash table size is 0 bytes
	       size = 38721
	       num types in program = 2533
	       num distinct types = 33410
	       hash table size is 0 bytes
	    polyvariance finished in 0.00 + 0.00 (0% GC)
	    post.sxml size is 4,925,428 bytes
	    numPeeks = 12154088
	    maxLength = 4
	    average position in property list = 0.175
	    numPeeks = 587205
	    average position in bucket = 1.388
	    size = 38721
	    num types in program = 2533
	    num distinct types = 33410
	    hash table size is 0 bytes
	    typeCheck starting
	    typeCheck finished in 0.00 + 0.00 (0% GC)
	 sxmlSimplify finished in 0.00 + 0.00 (0% GC)
	 sxml size is 4,925,428 bytes
	 numPeeks = 12422345
	 maxLength = 4
	 average position in property list = 0.175
	 numPeeks = 602818
	 average position in bucket = 1.390
	 size = 38721
	 num types in program = 2533
	 num distinct types = 33418
	 hash table size is 0 bytes
	 closureConvert starting
	    flow analysis starting
	    flow analysis finished in 0.00 + 0.00 (0% GC)
	    free variables starting
	    free variables finished in 0.00 + 0.00 (0% GC)
	    globalize starting
	    globalize finished in 0.00 + 0.00 (0% GC)
	    convert starting

--AqsLC8rIMeq19msA--