summaryrefslogtreecommitdiff
path: root/compiler/ilxGen/Entry.ilx
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/ilxGen/Entry.ilx')
-rw-r--r--compiler/ilxGen/Entry.ilx53
1 files changed, 53 insertions, 0 deletions
diff --git a/compiler/ilxGen/Entry.ilx b/compiler/ilxGen/Entry.ilx
new file mode 100644
index 0000000000..674c83141a
--- /dev/null
+++ b/compiler/ilxGen/Entry.ilx
@@ -0,0 +1,53 @@
+.assembly test { }
+.assembly extern 'mscorlib' { }
+.assembly extern ilx 'std' { }
+// ENTRYPOINT
+.class MainMain {
+ .method public static void Main(class [mscorlib]System.String[]) {
+ .entrypoint
+ ldstr "LOG: *** loading main value" call void [mscorlib]System.Console::WriteLine(class [mscorlib]System.String)
+ ldsfld thunk<(func ( /* unit skipped */ ) --> class [std]PrelBase_Z0T)> class Main::'Main_main'
+
+ ldstr "LOG: *** evaluating main value"
+ call void [mscorlib]System.Console::WriteLine(class [mscorlib]System.String)
+ callfunc () --> (func ( /* unit skipped */ ) --> class [std]PrelBase_Z0T)
+ ldstr "LOG: *** calling main value"
+ call void [mscorlib]System.Console::WriteLine(class [mscorlib]System.String)
+ // ldunit
+ callfunc ( /* unit skipped */ ) --> class [std]PrelBase_Z0T
+
+ pop
+
+
+// HACK HACK HACK
+// Call the "finalizers" for stdin, stdout and stderr, because COM+ doesn't
+// guarantee that finalizers will be run. WE DON'T GUARANTEE TO RUN ANY
+// OTHER FINALIZERS...
+
+ ldstr "LOG: ***calling critical finalizers manually in main()"
+ call void [mscorlib]System.Console::WriteLine(class [mscorlib]System.String)
+
+ldsfld thunk<(func (thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handlezuzu>>) --> (func (/* unit skipped */) --> class [std]PrelBase_Z0T))> [std]'PrelHandle'::'PrelHandle_stdHandleFinalizzer'
+ldsfld thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handle__>> [std]'PrelHandle'::'PrelHandle_stdin'
+ callfunc () (thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handle__>>) --> (func ( /* unit skipped */ ) --> class [std]PrelBase_Z0T)
+ callfunc ( /* unit skipped */ ) --> class [std]PrelBase_Z0T
+ pop
+
+ldsfld thunk<(func (thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handlezuzu>>) --> (func (/* unit skipped */) --> class [std]PrelBase_Z0T))> [std]'PrelHandle'::'PrelHandle_stdHandleFinalizzer'
+ldsfld thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handle__>> [std]'PrelHandle'::'PrelHandle_stdout'
+ callfunc () (thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handle__>>) --> (func ( /* unit skipped */ ) --> class [std]PrelBase_Z0T)
+ callfunc ( /* unit skipped */ ) --> class [std]PrelBase_Z0T
+ pop
+
+ldsfld thunk<(func (thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handlezuzu>>) --> (func (/* unit skipped */) --> class [std]PrelBase_Z0T))> [std]'PrelHandle'::'PrelHandle_stdHandleFinalizzer'
+ldsfld thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handle__>> [std]'PrelHandle'::'PrelHandle_stderr'
+ callfunc () (thunk<class [std]PrelIOBase_MVar<class [std]PrelIOBase_Handle__>>) --> (func ( /* unit skipped */ ) --> class [std]PrelBase_Z0T)
+ callfunc ( /* unit skipped */ ) --> class [std]PrelBase_Z0T
+ pop
+
+ ldstr "LOG: exit main()\n"
+ call void [mscorlib]System.Console::WriteLine(class [mscorlib]System.String)
+ ret
+ }
+}
+