ImplementSuffix =============== <:ImplementSuffix:> is a pass for the <:SXML:> <:IntermediateLanguage:>, invoked from <:SXMLSimplify:>. == Description == This pass implements the `TopLevel_setSuffix` primitive, which installs a function to exit the program. == Implementation == * == 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: + [source,sml] ---- 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 + [source,sml] ---- val x_0 = TopLevel_setSuffix (f_0) ---- + is rewritten to + [source,sml] ---- val x_0 = Ref_assign (topLevelSuffixCell, f_0) ---- * The following code (appropriately alpha-converted) is appended to the end of the <:SXML:> program: + [source,sml] ---- val f_0 = Ref_deref (topLevelSuffixCell) val z_0 = () val x_0 = f_0 z_0 ----