edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C427406
File: Proc.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C427406  (server)    5/2/2008 9:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;ConstraintsRuby
@@ -85,7 +85,7 @@
             get { return RubyContext._Default; }
         }
 
-        public RuleBuilder<T>/*!*/ GetRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ context, object[]/*!*/ args) {
+        public RuleBuilder<T>/*!*/ GetRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ context, object[]/*!*/ args) where T : class {
             switch (action.Kind) {
                 case DynamicActionKind.Call:
                     RuleBuilder<T> rule = new RuleBuilder<T>();
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C420856
File: RubyModule.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C420856  (server)    5/2/2008 9:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;ConstraintsRuby
@@ -674,7 +674,7 @@
 
         #region IDynamicObject Members
 
-        public virtual RuleBuilder<T> GetRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) {
+        public virtual RuleBuilder<T> GetRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class {
             switch (action.Kind) {
                 case DynamicActionKind.InvokeMember:
                     RuleBuilder<T> result = new RuleBuilder<T>();
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeBuilder.cs;C420856
File: RubyTypeBuilder.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeBuilder.cs;C420856  (server)    5/2/2008 9:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeBuilder.cs;ConstraintsRuby
@@ -185,6 +185,7 @@
             il = DefineMethodOverride(typeGen, decl, out impl);
             MethodInfo mi = typeof(RubyOps).GetMethod("GetClassRule");
             GenericTypeParameterBuilder[] types = impl.DefineGenericParameters("T");
+            types[0].SetGenericParameterAttributes(GenericParameterAttributes.ReferenceTypeConstraint);
 
             for (int i = 1; i < 4; i++) {
                 il.EmitLoadArg(i);
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/BlockReturnReason.cs;C427406
File: BlockReturnReason.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/BlockReturnReason.cs;C427406  (server)    5/2/2008 9:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/BlockReturnReason.cs;ConstraintsRuby
@@ -168,7 +168,7 @@
             get { return _proc.LanguageContext; }
         }
 
-        public RuleBuilder<T> GetRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ context, object[]/*!*/ args) {
+        public RuleBuilder<T> GetRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ context, object[]/*!*/ args) where T : class {
             switch (action.Kind) {
                 case DynamicActionKind.Call:
                     RuleBuilder<T> result = new RuleBuilder<T>();
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C427406
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C427406  (server)    5/2/2008 9:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;ConstraintsRuby
@@ -827,7 +827,7 @@
         }
 
         // emitted: (IDO implementation for Ruby classes)
-        public static RuleBuilder<T>/*!*/ GetClassRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) {
+        public static RuleBuilder<T>/*!*/ GetClassRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class {
             return RubyBinder.GetUserClassRule<T>(action, callerContext, args);
         }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;C423094
File: RubyBinder.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;C423094  (server)    5/2/2008 9:42 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;ConstraintsRuby
@@ -84,7 +84,7 @@
             return base.GetExtensionTypes(t);
         }
 
-        internal static RuleBuilder<T> GetUserClassRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) {
+        internal static RuleBuilder<T> GetUserClassRule<T>(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class {
             Assert.NotNull(action, callerContext, args);
 
             switch (action.Kind) {
===================================================================
