Skip to content

@wycats /marshal_proc.rb
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Source code for marshaling a Proc in Rubinius. See http://yehudakatz.com/2011/11/19/how-to-marshal-procs-using-rubinius/ for more details
module Rubinius
class CompiledMethod
def _dump(depth)
Marshal.dump([@scope, Rubinius::CompiledFile::Marshal.new.marshal(self)])
end
def self._load(string)
scope, dump = Marshal.load(string)
cm = Rubinius::CompiledFile::Marshal.new.unmarshal(dump)
cm.scope = scope
cm
end
end
class VariableScope
def _dump(depth)
Marshal.dump([@method, @module, @parent, @self, nil, locals])
end
def self._load(string)
VariableScope.synthesize *Marshal.load(string)
end
end
class StaticScope
def marshal_dump
[@module, @current_module, @parent]
end
def marshal_load(array)
@module, @current_module, @parent = array
end
end
# work around a bug where GlobalCacheEntries are visible
# in CompiledMethods. This will be fixed in Rubinius.
class GlobalCacheEntry
def rbx_marshal_constant
if @value.is_a?(Module)
@value.name
else
raise ArgumentError, "Unknown type #{self.class}: #{self.inspect}"
end
end
end
class BlockEnvironment
def marshal_dump
[@scope, @code]
end
def marshal_load(array)
scope, code = *array
under_context scope, code
#under_context *array
end
end
end
class Proc
def _dump(depth)
Marshal.dump(@block)
end
def self._load(string)
block = Marshal.load(string)
self.__from_block__(block)
end
end
@hlee

not compatible for Ruby 2.2.2?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.