[patch] More fixes for Array (IListOps.cs)

Hi,

I’ve committed more fixes for a few methods of the Array class that
were failing to pass the specs:

These are the specs affected by this patch:

  • core/array/compact
    • Array#compact keeps tainted status even if all elements are removed
  • core/array/delete
    • Array#delete may be given a block that is executed if no element
      matches object
  • core/array/first
    • Array#first does not return subclass instance when passed count on
      Array subclasses
  • core/array/last
    • Array#last does not return subclass instance on Array subclasses
  • core/array/flatten
    • Array#flatten returns subclass instance for Array subclasses
    • Array#flatten does not call flatten on elements
  • core/array/fetch
    • Array#fetch passes the original index argument object to the
      block, not the converted Integer

I hope I haven’t forgotten anything important this time, changes to
the tags files are included in the commit :slight_smile:

Regards,
Daniele


Daniele A.
http://www.clorophilla.net/blog/
http://twitter.com/JoL1hAHN

In IListOps.Fetch, instead of doing the protocol conversion manually,
you should calls Protocols. ConvertToInteger. Tomas, can you
double-check this?

In IListOps.First, you can get rid of the allocateStorage argument as
its not being used anymore. (You can batch this fix with your next
commit)

The rest looks good! Great to see array getting more compliant!

Btw, could you please increase the diff context size to 15-20 so more of
the surrounding lines are included? That makes it easier to understand
what the fix is doing when using the url below, without having to map
that back to the correct line number in the actual file.

Shri

Yes, Shri is right in essence - you shouldn’t do protocol conversions
manually. The conversion used by DefaultProtocol on int is
Protocols.CastToInteger however (ConvertToInteger performs different
integer conversion).

Tomas

From: [email protected]
[mailto:[email protected]] On Behalf Of Shri B.
Sent: Wednesday, April 15, 2009 4:14 PM
To: [email protected]
Subject: Re: [Ironruby-core] [patch] More fixes for Array (IListOps.cs)

In IListOps.Fetch, instead of doing the protocol conversion manually,
you should calls Protocols. ConvertToInteger. Tomas, can you
double-check this?

In IListOps.First, you can get rid of the allocateStorage argument as
its not being used anymore. (You can batch this fix with your next
commit)

The rest looks good! Great to see array getting more compliant!

Btw, could you please increase the diff context size to 15-20 so more of
the surrounding lines are included? That makes it easier to understand
what the fix is doing when using the url below, without having to map
that back to the correct line number in the actual file.

Shri

On Thu, Apr 16, 2009 at 01:14, Shri B. [email protected]
wrote:

In IListOps.Fetch, instead of doing the protocol conversion manually, you
should calls Protocols. ConvertToInteger. Tomas, can you double-check this?

Hmm, right, and the code looks much more cleaner too.
I think I should just use Protocols.CastToFixnum then: we don’t really
care about bignums here, they can’t be used as indexes for arrays
anyway and in fact MRI throws a RangeError “bignum too big to convert
into `long’”.

In IListOps.First, you can get rid of the allocateStorage argument as its
not being used anymore. (You can batch this fix with your next commit)

Same for IListOps.Last, it just slipped away. I removed allocateStorage
on both.

Btw, could you please increase the diff context size to 15-20 so more of the
surrounding lines are included? That makes it easier to understand what the
fix is doing when using the url below, without having to map that back to
the correct line number in the actual file.

I guess there is no way to increase the lines range of a diff viewed
via the github web interface, but I can generate and attach custom
diff patches to my mails if you think it could be useful, just like
the one attached to this mail and generated with "git diff HEAD~1 -U15

patch.diff" (PS: I have not yet pushed this commit on my remote
repository).

Result of “git diff HEAD~1 -U15” would be nice if you can remember to
include it, but don’t worry about it too much. I will try to deal with
the github.com web view and see if it bothers me too much.

Correction: CastToFixnum is the right one. Ruby has just to many integer
conversions to remember :slight_smile:

Tomas

From: [email protected]
[mailto:[email protected]] On Behalf Of Tomas M.
Sent: Wednesday, April 15, 2009 8:45 PM
To: [email protected]
Subject: Re: [Ironruby-core] [patch] More fixes for Array (IListOps.cs)

Yes, Shri is right in essence - you shouldn’t do protocol conversions
manually. The conversion used by DefaultProtocol on int is
Protocols.CastToInteger however (ConvertToInteger performs different
integer conversion).

Tomas

From: [email protected]
[mailto:[email protected]] On Behalf Of Shri B.
Sent: Wednesday, April 15, 2009 4:14 PM
To: [email protected]
Subject: Re: [Ironruby-core] [patch] More fixes for Array (IListOps.cs)

In IListOps.Fetch, instead of doing the protocol conversion manually,
you should calls Protocols. ConvertToInteger. Tomas, can you
double-check this?

In IListOps.First, you can get rid of the allocateStorage argument as
its not being used anymore. (You can batch this fix with your next
commit)

The rest looks good! Great to see array getting more compliant!

Btw, could you please increase the diff context size to 15-20 so more of
the surrounding lines are included? That makes it easier to understand
what the fix is doing when using the url below, without having to map
that back to the correct line number in the actual file.

Shri

There is a setting in “git gui” I was thinking of, but it does not
affect the github web view. Never mind…

From: Jim D.
Sent: Wednesday, April 15, 2009 5:14 PM
To: Shri B.
Subject: RE: [Ironruby-core] [patch] More fixes for Array (IListOps.cs)

There is no control over the context size on Github… Unless I
misunderstood your point

From: [email protected]
[mailto:[email protected]] On Behalf Of Shri B.
Sent: Wednesday, April 15, 2009 4:14 PM
To: [email protected]
Subject: Re: [Ironruby-core] [patch] More fixes for Array (IListOps.cs)

In IListOps.Fetch, instead of doing the protocol conversion manually,
you should calls Protocols. ConvertToInteger. Tomas, can you
double-check this?

In IListOps.First, you can get rid of the allocateStorage argument as
its not being used anymore. (You can batch this fix with your next
commit)

The rest looks good! Great to see array getting more compliant!

Btw, could you please increase the diff context size to 15-20 so more of
the surrounding lines are included? That makes it easier to understand
what the fix is doing when using the url below, without having to map
that back to the correct line number in the actual file.

Shri