edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Protocols.cs;C622329
File: Protocols.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Protocols.cs;C622329  (server)    10/30/2008 9:15 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Protocols.cs;ArrayOfT
@@ -22,6 +22,7 @@
 using Microsoft.Scripting;
 using Microsoft.Scripting.Math;
 using Microsoft.Scripting.Runtime;
+using Microsoft.Scripting.Actions;
 
 namespace IronRuby.Runtime {
     /// <summary>
@@ -642,6 +643,33 @@
 
         #endregion
 
+        #region CLR Types
+
+        public static Type[]/*!*/ ToTypes(RubyContext/*!*/ context, object[]/*!*/ values) {
+            Type[] args = new Type[values.Length];
+            for (int i = 0; i < args.Length; i++) {
+                args[i] = ToType(context, values[i]);
+            }
+
+            return args;
+        }
+
+        public static Type/*!*/ ToType(RubyContext/*!*/ context, object value) {
+            TypeTracker tt = value as TypeTracker;
+            if (tt != null) {
+                return tt.Type;
+            }
+
+            RubyClass rc = value as RubyClass;
+            if (rc != null) {
+                return rc.GetUnderlyingSystemType();
+            }
+
+            throw RubyExceptions.InvalidValueForType(context, value, "Class");
+        }
+
+        #endregion
+
         #region Security
 
         public static void CheckSafeLevel(RubyContext/*!*/ context, int level) {
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs;C622329
File: ModuleOps.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs;C622329  (server)    10/30/2008 9:15 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs;ArrayOfT
@@ -793,7 +793,12 @@
             }
 
             Type type = self.Tracker.Type;
-            int provided = typeArgs == null ? 0 : typeArgs.Length;
+            int provided = typeArgs.Length;
+
+            if (provided == 1 && type == typeof(Array)) {
+                return self.Context.GetModule(Protocols.ToType(self.Context, typeArgs[0]).MakeArrayType());
+            } 
+
             int required = type.GetGenericArguments().Length;
             if (required == 0 && provided > 0) {
                 throw RubyExceptions.CreateArgumentError(String.Format("'{0}' is not a generic type", type.FullName));
@@ -804,35 +809,13 @@
             }
 
             if (typeArgs.Length > 0) {
-                Type concreteType = type.MakeGenericType(ToGenericTypeArguments(self.Context, typeArgs));
+                Type concreteType = type.MakeGenericType(Protocols.ToTypes(self.Context, typeArgs));
                 return self.Context.GetModule(concreteType);
             } else {
                 return self;
             }
         }
 
-        internal static Type[]/*!*/ ToGenericTypeArguments(RubyContext/*!*/ context, object[]/*!*/ typeArgs) {
-            // pull out the type arguments
-            Type[] args = new Type[typeArgs.Length];
-            for (int i = 0; i < args.Length; i++) {
-                object arg = typeArgs[i];
-                TypeTracker tt = arg as TypeTracker;
-                if (tt != null) {
-                    args[i] = tt.Type;
-                    continue;
-                }
-
-                RubyClass rc = arg as RubyClass;
-                if (rc != null) {
-                    args[i] = rc.GetUnderlyingSystemType();
-                    continue;
-                }
-
-                throw RubyExceptions.InvalidValueForType(context, arg, "Class");
-            }
-            return args;
-        }
-
         #endregion
 
         #region Singleton Methods
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/TypeGroupOps.cs;C622329
File: TypeGroupOps.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/TypeGroupOps.cs;C622329  (server)    10/30/2008 9:14 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Extensions/TypeGroupOps.cs;ArrayOfT
@@ -40,7 +40,7 @@
 
             Type concreteType;
             if (typeArgs.Length > 0) {
-                concreteType = tracker.Type.MakeGenericType(ModuleOps.ToGenericTypeArguments(context, typeArgs));
+                concreteType = tracker.Type.MakeGenericType(Protocols.ToTypes(context, typeArgs));
             } else {
                 concreteType = tracker.Type;
             }
===================================================================
