• Kunshan Wang's avatar
    Use frame cursors in stack introspection. · 868f8fd4
    Kunshan Wang authored
    Introduced the framecursorref type. This is to solve performance problem
    when the stack is very deep. The API is still stateless, but a frame
    cursor is mutable. A frame cursor can only be created from a stack in
    the READY<Ts> state, may iterate downwards, and must be explicitly
    closed. Concurrent introspection that races with stack modification (pop
    frames/push frames/resuming a stack) has undefined behaviour.
    
    Also used "resumption point" to simplify the description of stack
    binding. The semantics is not changed. In the concrete syntax,
    resumption points are "beginning of function", "OSR point instruction"
    or "the appropriate place for native function". The Mu cases can be
    mapped to the resumption points in the formal model: entry of the %entry
    block, and the exit of the block where the OSR point instruction is in.
    868f8fd4
common-insts.rest 17.3 KB