Looks good.  The changes for the StringFormatter sites are much needed!

The test PythonInterop5 doesn't look complete -- there's no assertion.
It seems odd that CharOps would include Enumerable.  Is that because a char 
looks like a string that can never have a length != 1?
You don't want to use Int32ToObject on ClrInteger.Narrow?
There's a minor typo in the comment for MultiDimensionalClrArrayOps.
In RubyClass.GetDeclaredClrMethods, what if the member you're looking for 
actually has a name that ends in "*" ? :)

From: Tomas Matousek
Sent: Tuesday, March 24, 2009 11:33 AM
To: IronRuby External Code Reviewers
Cc: [email protected]
Subject: Code Review: ClrPrimitives2


  tfpt review "/shelveset:ClrPrimitives2;REDMOND\tomat"



Python, DLR outer ring changes:

Hoists FloorDivision implementation to MathUtils - Ruby uses the very same 
operation.

Ruby changes:

A couple of breaking changes:

-          Removes ClrString constant. CLR string should be referred to as 
System::String.

-          Removes IronRuby library. "require 'IronRuby'" is no longer needed, 
IronRuby module is now a built-in module.

Implements integer/float operations for all CLR primitive numeric types (byte, 
sbyte, short, ushort, uint, long, ulong, float).
Those integer types that fit in 32-bit signed integer (Fixnum) are widened to 
Fixnum for all operations. The other integer types are widened to BigInteger. 
Float is converted to double.
The operations on these types don't narrow their results even if the values 
fit. For example, (System::Byte.new(1) + 1).class == Fixnum, not System::Byte. 
This might not be optimal for some scenarios. If we find it important we'll fix 
this in future.

The implementation takes the operations from FixnumOps, BignumOps and FloatOps 
and moves them to new modules IronRuby::Clr::Integer, IronRuby::Clr::BigInteger 
and IronRuby::Clr::Float respectively. These are mixed back into the numeric 
types. Some methods need to be specialized for each types, so we generated C# 
code for them. Ruby 1.9 script ClrInteger.Generator.rb produces 
ClrInteger.Generated.cs.

Implements System::Char and System::String methods so that they behave like an 
immutable UTF-8 encoded string (of size 1 character in the case of 
System::Char). Many methods in MutableStringOps can share implementation with 
CLR string. There is still a lot of work to be done here, especially to support 
encodings. So for now, to make CLR strings work like Ruby frozen strings to a 
large extent, I've implemented method-missing dispatch that forwards to a 
MutableString.

Adds IronRuby::Clr::MultiDimensionalArray that is mixed into all 
multi-dimensional arrays. This mixin needs to implement those IList methods 
that only work with vectors.

Enables checked arithmetic operations in debug builds. Fixes underflow/overflow 
bugs in integer operations and adds tests for them.

Adds C# code generator script - used for generating ClrInteger classes.
Groups all StringFormatter sites into a single site local storage class.
Fixes [#20265] library classes nested in an extension class have wrong name




Tomas
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to