Skip to content
Snippets Groups Projects
Select Git revision
  • dualcore
  • ch3/leds
  • wip-bootstrap default
  • ch3/time
  • master
5 results

objfun.c

Blame
    • Damien George's avatar
      71a3d6ec
      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
      History
      py: Reduce size of mp_code_state_t structure.
      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.