[MLton] Re: MLton and shared libraries
Stephen Weeks
MLton@mlton.org
Sat, 16 Apr 2005 10:30:46 -0700
> val _ = (Primitive.TopLevel.setHandler MLtonExn.topLevelHandler
> ; Primitive.TopLevel.setSuffix
> (if Control.isSharedLibrary
> then (fn () => 0)
> else (fn () => MLtonProcess.exit MLtonProcess.Status.success)))
> end
>
> ?
I was thinking
fn () => if Primitive.isSharedLibrary
then Primitive.Thread.returnToC ()
else MLtonProcess.exit MLtonProcess.Status.success
* I used Primitive.isSharedLibrary rather than Control.isSharedLibrary
because Primitive is for holding such controls in the basis library,
while Control is for holding such stuff in the compiler.
* I called returnToC, because falling off the end of the program
without doing anything will cause a segfault, as the return will
have nothing to return to.
* There's no need to duplicate the "fn () =>", as the if test will be
simplified at compile time. (just a style issue)