speed up VarSet#deep_dup a bit

This commit is contained in:
Josh Holtrop 2014-04-15 09:47:05 -04:00
parent 5beda54374
commit 5924154229

View File

@ -82,14 +82,15 @@ module Rscons
# @param obj [Hash, Array] Hash or Array to deep copy. # @param obj [Hash, Array] Hash or Array to deep copy.
# @return [Hash, Array] Deep copied value. # @return [Hash, Array] Deep copied value.
def deep_dup(obj) def deep_dup(obj)
if obj.is_a?(Hash) obj_class = obj.class
if obj_class == Hash
obj.reduce({}) do |result, (k, v)| obj.reduce({}) do |result, (k, v)|
result[k] = deep_dup(v) result[k] = deep_dup(v)
result result
end end
elsif obj.is_a?(Array) elsif obj_class == Array
obj.map { |v| deep_dup(v) } obj.map { |v| deep_dup(v) }
elsif obj.is_a?(String) elsif obj_class == String
obj.dup obj.dup
else else
obj obj