summaryrefslogtreecommitdiff
path: root/src/mono_inline.sml
diff options
context:
space:
mode:
Diffstat (limited to 'src/mono_inline.sml')
-rw-r--r--src/mono_inline.sml28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/mono_inline.sml b/src/mono_inline.sml
new file mode 100644
index 00000000..d23419f3
--- /dev/null
+++ b/src/mono_inline.sml
@@ -0,0 +1,28 @@
+structure MonoInline = struct
+
+fun inlineFull file =
+ let
+ val oldInline = Settings.getMonoInline ()
+ val oldFull = !MonoReduce.fullMode
+ in
+ (Settings.setMonoInline (case Int.maxInt of
+ NONE => 1000000
+ | SOME n => n);
+ MonoReduce.fullMode := true;
+ let
+ val file = MonoReduce.reduce file
+ val file = MonoOpt.optimize file
+ val file = Fuse.fuse file
+ val file = MonoOpt.optimize file
+ val file = MonoShake.shake file
+ in
+ file
+ end before
+ (MonoReduce.fullMode := oldFull;
+ Settings.setMonoInline oldInline))
+ handle ex => (Settings.setMonoInline oldInline;
+ MonoReduce.fullMode := oldFull;
+ raise ex)
+ end
+
+end