murena
April 16, 2009, 11:22pm
1
Hi,
I have just filed this bug on CodePlex:
http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=605
It is actually pretty easy to fix with a bunch of lines of code in
RubyArray.GetHashCode (just tested, too bad IronRuby.dll is not open
to contributions) and, as a result, this would resolve the following 4
critical failures for the array core specs:
Array#hash properly handles recursive arrays
Array#| properly handles recursive arrays
Array#uniq properly handles recursive arrays
Array#uniq! properly handles recursive arrays
Regards
–
Daniele A.
http://www.clorophilla.net/blog/
http://twitter.com/JoL1hAHN
murena
April 17, 2009, 12:09am
2
I can fix RubyArray.GetHashCode to handle the simple case of an array
containing itself.
However, the simple fix wont deal with the case where the array is
indirectly recursive as in this snippet.
a = []
b = [a]
a<<b
murena
April 17, 2009, 12:24am
3
Curt pointed out a way to fix the recursive case using
RubyUtils.RecursionTracker…
murena
April 17, 2009, 12:30am
4
Great, that’s exactly what I used
Thanks
On Fri, Apr 17, 2009 at 00:22, Shri B. [email protected]
wrote:
However, the simple fix wont deal with the case where the array is indirectly recursive as in this snippet.
Hi,
Array#| properly handles recursive arrays
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core
–
Daniele A.
http://www.clorophilla.net/blog/
http://twitter.com/JoL1hAHN
murena
April 17, 2009, 1:15am
5
Does Ruby call “hash” dynamically on each element of the array?
If not then there is no need for RecursionTracker. A simple
non-recursive DFS with a dictionary that remembers visited objects
should do.
Tomas
murena
April 17, 2009, 1:16am
6
See RubyFileOps.Join for an example.
Tomas
murena
April 17, 2009, 4:01am
7
The simple test I did suggested that MRI dynamically calls hash on each
element of the array.