Skip to content
  • Damien George's avatar
    py: Reduce size of mp_code_state_t structure. · 71a3d6ec
    Damien George authored
    Instead of caching data that is constant (code_info, const_table and
    n_state), store just a pointer to the underlying function object from which
    this data can be derived.
    
    This helps reduce stack usage for the case when the mp_code_state_t
    structure is stored on the stack, as well as heap usage when it's stored
    on the heap.
    
    The downside is that the VM becomes a little more complex because it now
    needs to derive the data from the underlying function object.  But this
    doesn't impact the performance by much (if at all) because most of the
    decoding of data is done outside the main opcode loop.  Measurements using
    pystone show that little to no performance is lost.
    
    This patch also fixes a nasty bug whereby the bytecode can be reclaimed by
    the GC during execution.  With this patch there is always a pointer to the
    function object held by the VM during execution, since it's stored in the
    mp_code_state_t structure.
    71a3d6ec