Skip to content
  • Kevin Newton's avatar
    194584f2
    [ruby/yarp] Introduce owned constants · 194584f2
    Kevin Newton authored
    Before this commit, constants in the constant pool were assumed to
    be slices of the source string. This works in _almost_ all cases.
    
    There are times, however, when a string needs to be synthesized.
    This can occur when passing in locals that need to be scoped through
    eval, or when generating method names like `foo=`.
    
    After this commit, there is a single bit `owned` boolean on
    constants in the pool that indicates whether or not it is a slice
    of the source string. If it is not, it is assumed to be allocated
    memory that should be freed by the constant pool when the constant
    pool is freed.
    
    When serializing, the most significant bit in the location of the
    contents of the constant indicates whether or not it is owned.
    When it is, instead of 4 bytes for the source offset and 4 bytes
    for the length it is instead 4 bytes for the buffer offset and 4
    bytes the length. The contents of the owned constants are embedded
    into the buffer after the constant pool itself.
    
    https://github.com/ruby/yarp/commit/461c047365
    194584f2
    [ruby/yarp] Introduce owned constants
    Kevin Newton authored
    Before this commit, constants in the constant pool were assumed to
    be slices of the source string. This works in _almost_ all cases.
    
    There are times, however, when a string needs to be synthesized.
    This can occur when passing in locals that need to be scoped through
    eval, or when generating method names like `foo=`.
    
    After this commit, there is a single bit `owned` boolean on
    constants in the pool that indicates whether or not it is a slice
    of the source string. If it is not, it is assumed to be allocated
    memory that should be freed by the constant pool when the constant
    pool is freed.
    
    When serializing, the most significant bit in the location of the
    contents of the constant indicates whether or not it is owned.
    When it is, instead of 4 bytes for the source offset and 4 bytes
    for the length it is instead 4 bytes for the buffer offset and 4
    bytes the length. The contents of the owned constants are embedded
    into the buffer after the constant pool itself.
    
    https://github.com/ruby/yarp/commit/461c047365
Loading