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 program() begin s.top := 0u; push#[^File](@s, @f); assert(s.top = 1u); assert(s.items = @f) return 0u8 end.