RSSA LimitCheck transfer

Stephen Weeks MLton@sourcelight.com
Mon, 7 Jan 2002 17:51:05 -0800


I'm not too sure that the LimitCheck transfer has the right
arguments.  Here's what it is now.

	     | LimitCheck of {kind: LimitCheck.t,
			      return: Label.t} (* return must be nullary and of
						* Cont kind.
						*)

Is this return for the success or failure case?  Maybe LimitCheck
should have two return labels, like arith, dependending on whether the
check succeeds or fails, and both of the labels should be Normal kind?
Then, the fail branch could express the Runtime transfer that calls
the GC.  This would mean duplicating the LimitCheck.t in both the
LimitCheck and Runtime transfer.  At that point, maybe it makes sense
to make the limit check computation explicit, frontier, array, stack,
and all?  This would completely eliminate the LimitCheck transfer,
expressing it as Ariths and Runtimes.  A bit harder to check of
course, but if we're ever gonna have typed assembly, we're going to
have to figure it out.

Also, I'm not sure what the right kind of label to use for a Runtime
return?  Should it be a CReturn or a Cont?  I guess a Cont because
that has the liveness info.