   root.foldChildren null, 'declareType', null, options
   options.crossScope = true
   root.foldChildren null, 'primeComputeType', 'computeType', options
-  root.spOffsets = spOffsets scope
   root.frameSize = scope.frameSize
   root.transformRoot = (o) ->
     # Require the heap. This has to be done using `o.scope.assign`, to make sure

    exprs = @expressions
    if frameSize = @frameSize
      o.frameSize = frameSize
      stackFence o, exprs, frameSize, @spOffsets, yes
    # Bring in `malloc` if this module needs it.
    if scope.needsMalloc
      obj = new Value new Obj [MALLOC, FREE]

    # argument.
    exprs = @body.expressions
    for param in @params
      for arg in param.variables when arg.binding.onStack
        plh = new Value new Literal arg.name
        prh = new Value new Literal arg.name
        asn = new Assign plh, prh
        asn.computedType = plh.computedType = prh.computedType = arg.type
        plh.computedBinding = arg.binding
        exprs.unshift asn
    o.frameSize = frameSize
    stackFence o, exprs, frameSize
  return

# Add SP computation and pointer conversions to explicit returns.
