edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C1040664
File: Proc.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C1040664  (server)    8/20/2009 4:03 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;Cucumber
@@ -267,24 +267,32 @@
         #region Block helper methods
 
         public static Proc/*!*/ Create(RubyContext/*!*/ context, BlockCallTarget1/*!*/ clrMethod) {
-            return Create(context, clrMethod, 1);
+            return Create(context, 1, BlockDispatcher.MakeAttributes(BlockSignatureAttributes.HasSingleCompoundParameter, -1), clrMethod);
         }
 
+        public static Proc/*!*/ CreateSimple(RubyContext/*!*/ context, BlockCallTarget1/*!*/ clrMethod) {
+            return Create(context, 1, BlockSignatureAttributes.None, clrMethod);
+        }
+
         public static Proc/*!*/ Create(RubyContext/*!*/ context, BlockCallTarget2/*!*/ clrMethod) {
-            return Create(context, clrMethod, 2);
+            return Create(context, 2, BlockSignatureAttributes.None, clrMethod);
         }
 
         public static Proc/*!*/ Create(RubyContext/*!*/ context, BlockCallTarget3/*!*/ clrMethod) {
-            return Create(context, clrMethod, 3);
+            return Create(context, 3, BlockSignatureAttributes.None, clrMethod);
         }
 
-        public static Proc/*!*/ Create(RubyContext/*!*/ context, Delegate/*!*/ clrMethod, int parameterCount) {
+        public static Proc/*!*/ Create(RubyContext/*!*/ context, int parameterCount, BlockSignatureAttributes signatureAttributes, Delegate/*!*/ clrMethod) {
             // scope is used to get to the execution context:
             return new Proc(ProcKind.Block, null, context.EmptyScope,
-                BlockDispatcher.Create(parameterCount, BlockSignatureAttributes.None, null, 0).SetMethod(clrMethod)
+                BlockDispatcher.Create(parameterCount, signatureAttributes, null, 0).SetMethod(clrMethod)
             );
         }
 
         #endregion
+
+        public override string/*!*/ ToString() {
+            return String.Format("{0}: {1}:{2}", _kind, SourcePath ?? "(unknown)", SourceLine);
+        }
     }
 }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C1042261
File: RubyModule.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C1042261  (server)    8/21/2009 2:23 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;Cucumber
@@ -617,13 +617,13 @@
             Context.RequiresClassHierarchyLock();
 
             // deadCount is greated than 1/5 of total => remove dead (the threshold is arbitrary, might need tuning):
-            if (estimatedDeadCount * 5 < _dependentClasses.Count) {
+            if (estimatedDeadCount > 5 && estimatedDeadCount * 5 < _dependentClasses.Count) {
                 return;
             }
 
             int i = 0, j = 0;
             while (i < _dependentClasses.Count) {
-                if (!_dependentClasses[i].IsAlive) {
+                if (_dependentClasses[i].IsAlive) {
                     if (j != i) {
                         _dependentClasses[j] = _dependentClasses[i];
                     }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcher.cs;C1040664
File: BlockDispatcher.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcher.cs;C1040664  (server)    8/20/2009 4:09 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcher.cs;Cucumber
@@ -90,7 +90,7 @@
             get { return ((int)_attributesAndArity >> 2); }
         }
 
-        internal static BlockSignatureAttributes MakeAttributes(BlockSignatureAttributes attributes, int arity) {
+        public static BlockSignatureAttributes MakeAttributes(BlockSignatureAttributes attributes, int arity) {
             return attributes | (BlockSignatureAttributes)(arity << 2);
         }
 
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcherN.cs;C1040664
File: BlockDispatcherN.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcherN.cs;C1040664  (server)    8/20/2009 4:15 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcherN.cs;Cucumber
@@ -32,6 +32,7 @@
             : base(attributesAndArity, sourcePath, sourceLine) {
             Debug.Assert(parameterCount > BlockDispatcher.MaxBlockArity);
             Debug.Assert(!HasUnsplatParameter);
+            Debug.Assert(!HasSingleCompoundParameter);
 
             _parameterCount = parameterCount;
         }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatchers.cs;C1040664
File: BlockDispatchers.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatchers.cs;C1040664  (server)    8/20/2009 4:15 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatchers.cs;Cucumber
@@ -35,6 +35,7 @@
         public BlockDispatcher0(BlockSignatureAttributes attributesAndArity, string sourcePath, int sourceLine)
             : base(attributesAndArity, sourcePath, sourceLine) {
             Debug.Assert(!HasUnsplatParameter);
+            Debug.Assert(!HasSingleCompoundParameter);
         }
 
         // R(0, -)
@@ -285,6 +286,7 @@
         public BlockDispatcher2(BlockSignatureAttributes attributesAndArity, string sourcePath, int sourceLine)
             : base(attributesAndArity, sourcePath, sourceLine) {
             Debug.Assert(!HasUnsplatParameter);
+            Debug.Assert(!HasSingleCompoundParameter);
         }
 
         // R(0, -)
@@ -389,6 +391,7 @@
         public BlockDispatcher3(BlockSignatureAttributes attributesAndArity, string sourcePath, int sourceLine)
             : base(attributesAndArity, sourcePath, sourceLine) {
             Debug.Assert(!HasUnsplatParameter);
+            Debug.Assert(!HasSingleCompoundParameter);
         }
 
         // R(0, -)
@@ -503,6 +506,7 @@
         public BlockDispatcher4(BlockSignatureAttributes attributesAndArity, string sourcePath, int sourceLine)
             : base(attributesAndArity, sourcePath, sourceLine) {
             Debug.Assert(!HasUnsplatParameter);
+            Debug.Assert(!HasSingleCompoundParameter);
         }
 
         // R(0, -)
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcherUnsplatN.cs;C1040664
File: BlockDispatcherUnsplatN.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcherUnsplatN.cs;C1040664  (server)    8/20/2009 4:15 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/BlockDispatcherUnsplatN.cs;Cucumber
@@ -33,6 +33,7 @@
         internal BlockDispatcherUnsplatN(int parameterCount, BlockSignatureAttributes attributesAndArity, string sourcePath, int sourceLine) 
             : base(attributesAndArity, sourcePath, sourceLine) {
             Debug.Assert(HasUnsplatParameter);
+            Debug.Assert(!HasSingleCompoundParameter);
 
             _parameterCount = parameterCount;
         }
===================================================================
