MLton

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:

    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