edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/InitializerTests.cs;C790584
File: InitializerTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/InitializerTests.cs;C790584  (server)    6/9/2009 10:57 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/InitializerTests.cs;StructNew
@@ -245,6 +245,7 @@
 p UnboundMethod.allocate rescue p $!
 p Bignum.allocate rescue p $!
 p Fixnum.allocate rescue p $!
+p Float.allocate rescue p $!
 p TrueClass.allocate rescue p $!
 p FalseClass.allocate rescue p $!
 p NilClass.allocate rescue p $!
@@ -269,6 +270,7 @@
 #<TypeError: allocator undefined for UnboundMethod>
 #<TypeError: allocator undefined for Bignum>
 #<TypeError: allocator undefined for Fixnum>
+#<TypeError: allocator undefined for Float>
 #<TypeError: allocator undefined for TrueClass>
 #<TypeError: allocator undefined for FalseClass>
 #<TypeError: allocator undefined for NilClass>
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C934738
File: Initializers.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C934738  (server)    6/9/2009 10:56 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;StructNew
@@ -1450,6 +1450,7 @@
         }
         
         private static void LoadFixnum_Class(IronRuby.Builtins.RubyModule/*!*/ module) {
+            module.UndefineMethodNoEvent("new");
             module.DefineLibraryMethod("induced_from", 0x61, 
                 new System.Func<IronRuby.Builtins.RubyClass, System.Int32, System.Int32>(IronRuby.Builtins.Int32Ops.InducedFrom), 
                 new System.Func<IronRuby.Builtins.RubyClass, System.Double, System.Int32>(IronRuby.Builtins.Int32Ops.InducedFrom)
@@ -1478,6 +1479,7 @@
         
         private static void LoadFloat_Class(IronRuby.Builtins.RubyModule/*!*/ module) {
             LoadIronRuby__Clr__Float_Class(module);
+            module.UndefineMethodNoEvent("new");
         }
         
         private static void LoadGC_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FixnumOps.cs;C798493
File: FixnumOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FixnumOps.cs;C798493  (server)    6/9/2009 10:52 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FixnumOps.cs;StructNew
@@ -19,6 +19,7 @@
 
 namespace IronRuby.Builtins {
     [RubyClass("Fixnum", Extends = typeof(int), Inherits = typeof(Integer)), Includes(typeof(ClrInteger), Copy = true)]
+    [UndefineMethod("new", IsStatic = true)]
     public static partial class Int32Ops {
         #region to_sym
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FloatOps.cs;C798493
File: FloatOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FloatOps.cs;C798493  (server)    6/9/2009 10:57 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/FloatOps.cs;StructNew
@@ -21,6 +21,7 @@
 
 namespace IronRuby.Builtins {
     [RubyClass("Float", Extends = typeof(double), Inherits = typeof(Numeric)), Includes(typeof(ClrFloat), Copy = true), Includes(typeof(Precision))]
+    [UndefineMethod("new", IsStatic = true)]
     public static class FloatOps {
         #region Constants
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C934738
File: RubyClass.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C934738  (server)    6/7/2009 9:11 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;StructNew
@@ -1228,10 +1228,16 @@
                 } else {
                     // TODO: handle protected constructors
                     constructionOverloads = type.GetConstructors();
-                    if (constructionOverloads.Length == 0) {
+
+                    if (type.IsValueType) {
+                        if (constructionOverloads.Length == 0 || type.GetConstructor(Type.EmptyTypes) == null) {
+                            constructionOverloads = ArrayUtils.Append(constructionOverloads, Methods.CreateDefaultInstance);
+                        }
+                    } else if (constructionOverloads.Length == 0) {
                         metaBuilder.SetError(Methods.MakeAllocatorUndefinedError.OpCall(Ast.Convert(args.TargetExpression, typeof(RubyClass))));
                         return;
                     }
+
                     callConvention = SelfCallConvention.NoSelf;
                     implicitProtocolConversions = true;
                 }
@@ -1315,6 +1321,11 @@
                 return true;
             }
 
+            if (type.IsValueType && type != typeof(int) && type != typeof(double)) {
+                metaBuilder.Result = Ast.New(type);
+                return true;
+            }
+
             return false;
         }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C934738
File: ReflectionCache.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C934738  (server)    6/9/2009 10:21 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;StructNew
@@ -79,6 +79,8 @@
         private static MethodInfo _CreateBoundMember;
         public static MethodInfo/*!*/ CreateBoundMissingMember { get { return _CreateBoundMissingMember ?? (_CreateBoundMissingMember = GetMethod(typeof(RubyOps), "CreateBoundMissingMember")); } }
         private static MethodInfo _CreateBoundMissingMember;
+        public static MethodInfo/*!*/ CreateDefaultInstance { get { return _CreateDefaultInstance ?? (_CreateDefaultInstance = GetMethod(typeof(RubyOps), "CreateDefaultInstance")); } }
+        private static MethodInfo _CreateDefaultInstance;
         public static MethodInfo/*!*/ CreateDelegateFromMethod { get { return _CreateDelegateFromMethod ?? (_CreateDelegateFromMethod = GetMethod(typeof(RubyOps), "CreateDelegateFromMethod")); } }
         private static MethodInfo _CreateDelegateFromMethod;
         public static MethodInfo/*!*/ CreateDelegateFromProc { get { return _CreateDelegateFromProc ?? (_CreateDelegateFromProc = GetMethod(typeof(RubyOps), "CreateDelegateFromProc")); } }
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C934738
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C934738  (server)    6/9/2009 10:22 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;StructNew
@@ -1373,6 +1373,12 @@
             return new Range(begin, end, true);
         }
 
+        [Emitted]
+        public static object CreateDefaultInstance() {
+            // nop (stub)
+            return null;
+        }
+
         #region Dynamic Operations
 
         // allocator for struct instances:
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupBase.cs;C924186
File: RubyMethodGroupBase.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupBase.cs;C924186  (server)    6/7/2009 9:51 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupBase.cs;StructNew
@@ -230,7 +230,12 @@
             RubyOverloadResolver resolver;
             var bindingTarget = ResolveOverload(metaBuilder, args, name, overloads, callConvention, implicitProtocolConversions, out resolver);
             if (bindingTarget.Success) {
-                metaBuilder.Result = bindingTarget.MakeExpression();
+                if (bindingTarget.Method.MethodHandle == Methods.CreateDefaultInstance.MethodHandle) {
+                    Debug.Assert(args.TargetClass.TypeTracker.Type.IsValueType);
+                    metaBuilder.Result = Ast.New(args.TargetClass.TypeTracker.Type);
+                } else {
+                    metaBuilder.Result = bindingTarget.MakeExpression();
+                }
             } else {
                 metaBuilder.SetError(resolver.MakeInvalidParametersError(bindingTarget).Expression);
             }
===================================================================
