diff -urN IronRuby-Pre-Alpha1.orig/Src/Ruby/Builtins/Bignum.cs IronRuby-Pre-Alpha1/Src/Ruby/Builtins/Bignum.cs --- IronRuby-Pre-Alpha1.orig/Src/Ruby/Builtins/Bignum.cs 2007-07-16 11:43:58.000000000 +0900 +++ IronRuby-Pre-Alpha1/Src/Ruby/Builtins/Bignum.cs 2007-07-26 23:24:38.000000000 +0900 @@ -25,5 +25,15 @@ public sealed class BignumOps : Integer { private BignumOps() { } + + [RubyMethodAttribute("*", RubyMethodAttributes.PublicInstance)] + public static object Multiply(BigInteger self, BigInteger value) { + return self * value; + } + + [RubyMethodAttribute("inspect", RubyMethodAttributes.PublicInstance)] + public static object ToString(BigInteger self) { + return new MutableString(self.ToString()); + } } } diff -urN IronRuby-Pre-Alpha1.orig/Src/Ruby/Builtins/FixnumOps.cs IronRuby-Pre-Alpha1/Src/Ruby/Builtins/FixnumOps.cs --- IronRuby-Pre-Alpha1.orig/Src/Ruby/Builtins/FixnumOps.cs 2007-07-19 08:51:28.000000000 +0900 +++ IronRuby-Pre-Alpha1/Src/Ruby/Builtins/FixnumOps.cs 2007-07-26 23:23:32.000000000 +0900 @@ -46,7 +46,20 @@ [RubyMethodAttribute("*", RubyMethodAttributes.PublicInstance)] public static object Multiply(int self, int value) { - return self * value; + long result = (long)self * value; + if (Int32.MinValue <= result && result <= Int32.MaxValue) { + return (int)result; + } + return BignumOps.Multiply((BigInteger)self, (BigInteger)value); + } + + [RubyMethodAttribute("**", RubyMethodAttributes.PublicInstance)] + public static object Power(int self, int value) { + BigInteger result = ((BigInteger)self).Power(value); + if (Int32.MinValue <= result && result <= Int32.MaxValue) { + return (int)result; + } + return result; } [RubyMethodAttribute("/", RubyMethodAttributes.PublicInstance)] @@ -54,6 +67,11 @@ return self / value; } + [RubyMethodAttribute("/", RubyMethodAttributes.PublicInstance)] + public static object Divide(int self, double value) { + return self / value; + } + [RubyMethodAttribute(">", RubyMethodAttributes.PublicInstance)] public static bool GraterThan(int self, int value) { return self > value; diff -urN IronRuby-Pre-Alpha1.orig/Src/Ruby/Builtins/FloatOps.cs IronRuby-Pre-Alpha1/Src/Ruby/Builtins/FloatOps.cs --- IronRuby-Pre-Alpha1.orig/Src/Ruby/Builtins/FloatOps.cs 2007-07-17 19:31:10.000000000 +0900 +++ IronRuby-Pre-Alpha1/Src/Ruby/Builtins/FloatOps.cs 2007-07-26 23:03:55.000000000 +0900 @@ -21,6 +21,11 @@ [RubyExtensionClass("Float", typeof(double), Inherits = typeof(Numeric))] public static class FloatOps { + [RubyMethodAttribute("/", RubyMethodAttributes.PublicInstance)] + public static object Divide(double self, double value) { + return self / value; + } + [RubyMethodAttribute("to_i", RubyMethodAttributes.PublicInstance)] public static int ToInteger(double self) { return System.Convert.ToInt32(System.Math.Floor(self));