Looks good! In IListOps.UniqueSelf, any reason you do "bool frozen = context.IsObjectFrozen(self);" upfront instead doing IsObjectFrozen when you actually need it? If uniq! Is called on a System.Collections.Generic.List<T>, IsObjectFrozen will be expensive since we have to keep the "frozen" bit on the side. (For RubyArray, we will keep the bit as an instance field which will be cheap to access). So for List<T> objects which are already unique, it will be faster if you can avoid doing IsObjectFrozen.
Note that simplicity trumps optimization unless you have hard data that the optimization is required. I am only suggesting this optimization as its trivial, and the code is as simple in either case... -----Original Message----- From: ironruby-core-boun...@rubyforge.org [mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Daniele Alessandri Sent: Saturday, April 18, 2009 3:39 PM To: ironruby-core@rubyforge.org Subject: Re: [Ironruby-core] More fixes for core/array specs Hi, just a self-reply to point out that the changes in ArrayOps.ToArray introduced a regression for Array#to_ary (reported by core/array/to_ary) due to the different behaviour of Array#to_a and Array#to_ary on subclasses of Array. I have already fixed this on my local repository, I'm just waiting to have a few more commits to rebase and push the next set of changes on github. On Sat, Apr 18, 2009 at 13:31, Daniele Alessandri <suppaki...@gmail.com> wrote: > Hi, > > http://github.com/nrk/ironruby/commit/4afc7f1bc44b007a9dca30e6330eca35d487f165 > > This commit resolves the following failing specs: > > Array#<=> properly handles recursive arrays (critical) > Array#initialize with (size, object=nil) uses the block value instead > of using the default value > Array#to_a does not return subclass instance on Array subclasses > Array#uniq! raises a TypeError on a frozen array if modification would > take place > Array#values_at returns an array of elements in the ranges when passes ranges > > From the commit message: > > * Removed unused allocateStorage argument from IListOps.First and > IListOps.Last; Removed the manual protocol conversion bits in > IListOps.Fetch > * Fix IoOps.ToPrintedString to output a double converted to string > using an invariant culture (Issue #597 NumericLiterals1 test fails > under french culture) > * IListOps.ValuesAt adds a null value to the result if the begin value > of the specified range instance(s) is <= the length of the array and > the end value is >= the length of the array. > * Array#uniq! raises a TypeError on a frozen array if modification > would take place. > * Fixed ArrayOps.ToArray to return a new RubyArray instance with the > elements of self if self is a RubyArray.Subclass. > * Array#initialize with (size, object=nil) uses the block value > instead of using the default value > * Fixed IListOps.Compare to work with recursive arrays. > > A diff is attached to this mail. > > PS: This completes my previous commit by removing unused > allocateStorage arguments from IListOps.First and IListOps.Last. > > Thanks, > Daniele > > -- > Daniele Alessandri > http://www.clorophilla.net/blog/ > http://twitter.com/JoL1hAHN > -- Daniele Alessandri http://www.clorophilla.net/blog/ http://twitter.com/JoL1hAHN _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core