program() type File = record fd: Int end Stack#[T] = record items: ^T; top: Word end var s: Stack#[File] f: File proc push#[T](target: ^Stack#[T]; value: ^T) begin target^.items := value; target^.top := target^.top + 1u return begin s.top := 0u; push#[File](@s, @f); assert(s.top = 1u); assert(s.items = @f) end.