summaryrefslogtreecommitdiff
path: root/lib/rubygems/safe_marshal/elements.rb
blob: f8874b1b2fbccdb9a7f0133672be47b9f5fa6a19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# 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