Code Review: bugfixes-7

tfpt review /shelveset:bugfixes-7;REDMOND\jflam

Ruby only

This shelveset fixes a number of open bugs on Rubyforge and adds some
features that we need to get the latest rubinius specs running.


  •   we used to alias MatchData to 

System.Text.RegularExpressions.Match. However, to fully implement
MatchData we need to also hold onto a reference to the original string
that we matched against. A new MatchData type was created (MatchData.cs)
which wraps the existing .NET Match object. This also touches
MutableStringOps.cs, RubyOps.cs, RubyScope.cs,

  •   finished implementing all methods. 16 out of 16 specs pass
  •   implemented to_a which closes bug #19903


  •   added ctor overload to close bug #19927
  •   made some changes to return MatchData objects instead of Match 


  •   made some changes to return boxed integers via 

RuntimeHelpers.Int32ToObject() instead of explicit boxing. This also
touches MutableStringOps.cs


  •   removed overloaded constructors to close bug #19956. But this 

exposes a new problem about Type aliasing that is described by bug 20035
(referencing a System::DateTime explicitly does not allow you to call
the .NET constructors - only the Ruby-defined constructors).

  •   fixed Time#- bug - #19955


  •   fixed some very old bugs #15996, #15995 related to including 

non-sensible things (include 1, include nil). RequireNonClasses() method
now throws the correct Ruby exceptions. This also touches


  •   added an implementation of String#rindex which closes #19904. We 

pass all specs except for 4 which fail because of differences between
.NET regex and Ruby regex.


  •   cleaned up some code here, was about to work on glob 

implementation (bugs #19843 #19950, but handed off to Curt)


  •   added an implementation of File#basename which closes #19905. 

passes all specs except for one which is wrong, and one which is
unix-specific. These things are likely bugs in Ruby.

#File.basename('baz.rb', 'z.rb').should == 'ba' -- bad test
#File.basename("bar.txt.exe", ".txt.exe").should == "bar" - 

unix-only, should be wrapped in platform

  •   added an implementation of File.file? to close #19949


  •   added a static Empty MutableString
  •   added delegation thunks to LastIndexOf()
  •   fixed our Equals() implementation to correctly distinguish 

between different types of strings (CLR vs. MutableString)


  •   fixes a bug related to what "w+" means in .NET. - its