diff options
Diffstat (limited to 'compiler/ilxGen/Entry.ilx')
-rw-r--r-- | compiler/ilxGen/Entry.ilx | 53 |
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 + } +} + |