opal/corelib/marshal/read_buffer.rb
# Reads and returns an abstract object from an input stream
#
# @example
#   obj = Object.new
#   obj.instance_variable_set(:@ivar, 100)
#   obj
# is encoded as
#   'o', :Object, {:@ivar => 100}
#
# The only exception is a Range class (and its subclasses)
# For some reason in MRI isntances of this class have instance variables
# - begin
# - end
# - excl
# without '@' perfix.
#
Reads and returns an abstract object from an input stream
Reads and returns an abstract object from an input stream
def read_object
      klass_name = read(cache: false)
      klass = safe_const_get(klass_name)
      object = klass.allocate
      @object_cache << object
      ivars = read_hash(cache: false)
      ivars.each do |name, value|
        if name[0] == '@'
          object.instance_variable_set(name, value)
        else
          `object[name] = value`
        end
      end
      object
    end
def read_object klass_name = read ( cache : false ) klass = safe_const_get ( klass_name ) object = klass . allocate @object_cache << object ivars = read_hash ( cache : false ) ivars . each do | name , value | if name [ 0 ] == '@' object . instance_variable_set ( name , value ) else ` object[name] = value ` end end object end
Reads and returns an abstract object from an input stream
Reads and returns an abstract object from an input stream
# MRI allows an object to have ivars that do not start from '@' # https://github.com/ruby/ruby/blob/ab3a40c1031ff3a0535f6bcf26de40de37dbb1db/range.c#L1225
example
obj = Object.new obj.instance_variable_set(:@ivar, 100) obj is encoded as 'o', :Object, {:@ivar => 100} The only exception is a Range class (and its subclasses) For some reason in MRI isntances of this class have instance variables - begin - end - excl without '@' perfix.
obj = Object . new obj . instance_variable_set ( : @ivar 100 ) obj is encoded as ' o ' : Object { : @ivar = > 100 } The only exception is a Range class ( and its subclasses ) For some reason in MRI isntances of this class have instance variables - begin - end - excl without ' @ ' perfix .