This pass implements the TopLevel_setSuffix primitive, which installs a function to exit the program.
Details and Notes
ImplementSuffix works by introducing a new ref cell to contain the function of type unit -> unit that should be called on program exit.
The following code (appropriately alpha-converted) is appended to the beginning of the SXML program:
val z_0 = fn a_0 => let val x_0 = "toplevel suffix not installed" val x_1 = MLton_bug (x_0) in x_1 end val topLevelSuffixCell = Ref_ref (z_0)
Any occurrence of
val x_0 = TopLevel_setSuffix (f_0)
is rewritten to
val x_0 = Ref_assign (topLevelSuffixCell, f_0)
The following code (appropriately alpha-converted) is appended to the end of the SXML program:
val f_0 = Ref_deref (topLevelSuffixCell) val z_0 = () val x_0 = f_0 z_0