pub(crate) fn create_binding_context(&mut self, outer: ControlFrame) -> EnvFrame {
        let outer = self.move_cfp_to_heap(outer);
        let iseq = ISeqRef::default();
        HeapCtxRef::new_binding(outer.self_value(), iseq, Some(outer))
    }
Create a new execution context for a block.

A new context is generated on heap, and all of the outer context chains are moved to heap.
ruruby/src/vm/executor.rs