[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--