diff options
Diffstat (limited to 'marshal.rb')
-rw-r--r-- | marshal.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/marshal.rb b/marshal.rb new file mode 100644 index 0000000000..9ff74dd8b2 --- /dev/null +++ b/marshal.rb @@ -0,0 +1,40 @@ +module Marshal + # call-seq: + # load(source, proc = nil, freeze: false) -> obj + # restore(source, proc = nil, freeze: false) -> obj + # + # Returns the result of converting the serialized data in source into a + # Ruby object (possibly with associated subordinate objects). source + # may be either an instance of IO or an object that responds to + # to_str. If proc is specified, each object will be passed to the proc, as the object + # is being deserialized. + # + # Never pass untrusted data (including user supplied input) to this method. + # Please see the overview for further details. + # + # If the <tt>freeze: true</tt> argument is passed, deserialized object would + # be deeply frozen. Note that it may lead to more efficient memory usage due to + # frozen strings deduplication: + # + # serialized = Marshal.dump(['value1', 'value2', 'value1', 'value2']) + # + # deserialized = Marshal.load(serialized) + # deserialized.map(&:frozen?) + # # => [false, false, false, false] + # deserialized.map(&:object_id) + # # => [1023900, 1023920, 1023940, 1023960] -- 4 different objects + # + # deserialized = Marshal.load(serialized, freeze: true) + # deserialized.map(&:frozen?) + # # => [true, true, true, true] + # deserialized.map(&:object_id) + # # => [1039360, 1039380, 1039360, 1039380] -- only 2 different objects, object_ids repeating + # + def self.load(source, proc = nil, freeze: false) + Primitive.marshal_load(source, proc, freeze) + end + + class << self + alias restore load + end +end |