147 lines
2.7 KiB
Ruby
147 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gem
|
|
module SafeMarshal
|
|
module Elements
|
|
class Element
|
|
end
|
|
|
|
class Symbol < Element
|
|
def initialize(name)
|
|
@name = name
|
|
end
|
|
attr_reader :name
|
|
end
|
|
|
|
class UserDefined < Element
|
|
def initialize(name, binary_string)
|
|
@name = name
|
|
@binary_string = binary_string
|
|
end
|
|
|
|
attr_reader :name, :binary_string
|
|
end
|
|
|
|
class UserMarshal < Element
|
|
def initialize(name, data)
|
|
@name = name
|
|
@data = data
|
|
end
|
|
|
|
attr_reader :name, :data
|
|
end
|
|
|
|
class String < Element
|
|
def initialize(str)
|
|
@str = str
|
|
end
|
|
|
|
attr_reader :str
|
|
end
|
|
|
|
class Hash < Element
|
|
def initialize(pairs)
|
|
@pairs = pairs
|
|
end
|
|
|
|
attr_reader :pairs
|
|
end
|
|
|
|
class HashWithDefaultValue < Hash
|
|
def initialize(pairs, default)
|
|
super(pairs)
|
|
@default = default
|
|
end
|
|
|
|
attr_reader :default
|
|
end
|
|
|
|
class Array < Element
|
|
def initialize(elements)
|
|
@elements = elements
|
|
end
|
|
|
|
attr_reader :elements
|
|
end
|
|
|
|
class Integer < Element
|
|
def initialize(int)
|
|
@int = int
|
|
end
|
|
|
|
attr_reader :int
|
|
end
|
|
|
|
class True < Element
|
|
def initialize
|
|
end
|
|
TRUE = new.freeze
|
|
end
|
|
|
|
class False < Element
|
|
def initialize
|
|
end
|
|
|
|
FALSE = new.freeze
|
|
end
|
|
|
|
class WithIvars < Element
|
|
def initialize(object, ivars)
|
|
@object = object
|
|
@ivars = ivars
|
|
end
|
|
|
|
attr_reader :object, :ivars
|
|
end
|
|
|
|
class Object < Element
|
|
def initialize(name)
|
|
@name = name
|
|
end
|
|
attr_reader :name
|
|
end
|
|
|
|
class Nil < Element
|
|
NIL = new.freeze
|
|
end
|
|
|
|
class ObjectLink < Element
|
|
def initialize(offset)
|
|
@offset = offset
|
|
end
|
|
attr_reader :offset
|
|
end
|
|
|
|
class SymbolLink < Element
|
|
def initialize(offset)
|
|
@offset = offset
|
|
end
|
|
attr_reader :offset
|
|
end
|
|
|
|
class Float < Element
|
|
def initialize(string)
|
|
@string = string
|
|
end
|
|
attr_reader :string
|
|
end
|
|
|
|
class Bignum < Element # rubocop:disable Lint/UnifiedInteger
|
|
def initialize(sign, data)
|
|
@sign = sign
|
|
@data = data
|
|
end
|
|
attr_reader :sign, :data
|
|
end
|
|
|
|
class UserClass < Element
|
|
def initialize(name, wrapped_object)
|
|
@name = name
|
|
@wrapped_object = wrapped_object
|
|
end
|
|
attr_reader :name, :wrapped_object
|
|
end
|
|
end
|
|
end
|
|
end
|