Skip to content

Commit

Permalink
Showing 6 changed files with 16 additions and 8 deletions.
1 change: 0 additions & 1 deletion spec/truffle/tags/core/array/dig_tags.txt

This file was deleted.

1 change: 0 additions & 1 deletion spec/truffle/tags/core/hash/dig_tags.txt

This file was deleted.

6 changes: 0 additions & 6 deletions spec/truffle/tags/core/struct/dig_tags.txt

This file was deleted.

1 change: 1 addition & 0 deletions truffle/src/main/ruby/core/array.rb
Original file line number Diff line number Diff line change
@@ -320,6 +320,7 @@ def dig(idx, *more)
if result.nil? || more.empty?
result
else
raise TypeError, "#{result.class} does not have #dig method" unless result.respond_to?(:dig)
result.dig(*more)
end
end
1 change: 1 addition & 0 deletions truffle/src/main/ruby/core/hash.rb
Original file line number Diff line number Diff line change
@@ -154,6 +154,7 @@ def dig(key, *more)
if result.nil? || more.empty?
result
else
raise TypeError, "#{result.class} does not have #dig method" unless result.respond_to?(:dig)
result.dig(*more)
end
end
14 changes: 14 additions & 0 deletions truffle/src/main/ruby/core/struct.rb
Original file line number Diff line number Diff line change
@@ -207,6 +207,20 @@ def []=(var, obj)
return instance_variable_set(:"@#{var}", obj)
end

def dig(key, *more)
result = nil
begin
result = self[key]
rescue IndexError, NameError
end
if result.nil? || more.empty?
result
else
raise TypeError, "#{result.class} does not have #dig method" unless result.respond_to?(:dig)
result.dig(*more)
end
end

def eql?(other)
return true if equal? other
return false if self.class != other.class

0 comments on commit 4a96aca

Please sign in to comment.