edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C924186
File: ReflectionCache.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C924186  (server)    6/1/2009 7:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;SuperFix
@@ -294,6 +294,8 @@
         private static MethodInfo _LeaveProcConverter;
         public static MethodInfo/*!*/ LeaveRescue { get { return _LeaveRescue ?? (_LeaveRescue = GetMethod(typeof(RubyOps), "LeaveRescue")); } }
         private static MethodInfo _LeaveRescue;
+        public static MethodInfo/*!*/ MakeAbstractMethodCalledError { get { return _MakeAbstractMethodCalledError ?? (_MakeAbstractMethodCalledError = GetMethod(typeof(RubyOps), "MakeAbstractMethodCalledError")); } }
+        private static MethodInfo _MakeAbstractMethodCalledError;
         public static MethodInfo/*!*/ MakeAllocatorUndefinedError { get { return _MakeAllocatorUndefinedError ?? (_MakeAllocatorUndefinedError = GetMethod(typeof(RubyOps), "MakeAllocatorUndefinedError")); } }
         private static MethodInfo _MakeAllocatorUndefinedError;
         public static MethodInfo/*!*/ MakeAmbiguousMatchError { get { return _MakeAmbiguousMatchError ?? (_MakeAmbiguousMatchError = GetMethod(typeof(RubyOps), "MakeAmbiguousMatchError")); } }
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;C922537
File: RubyExceptionData.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;C922537  (server)    6/1/2009 7:49 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;SuperFix
@@ -266,9 +266,9 @@
         private const string RubyMethodPrefix = "\u2111\u211c;";
         private static int _Id = 0;
 
-        internal static string/*!*/ EncodeMethodName(SourceUnit/*!*/ sourceUnit, string/*!*/ methodName, SourceSpan location) {
+        internal static string/*!*/ EncodeMethodName(SourceUnit sourceUnit, string/*!*/ methodName, SourceSpan location) {
             // encodes line number, file name into the method name
-            string fileName = sourceUnit.HasPath ? Path.GetFileName(sourceUnit.Path) : String.Empty;
+            string fileName = sourceUnit != null && sourceUnit.HasPath ? Path.GetFileName(sourceUnit.Path) : String.Empty;
             return String.Format(RubyMethodPrefix + "{0};{1};{2};{3}", methodName, fileName, location.IsValid ? location.Start.Line : 0,
                 Interlocked.Increment(ref _Id));
         }
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C924186
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C924186  (server)    6/1/2009 7:35 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;SuperFix
@@ -1285,6 +1285,11 @@
         }
 
         [Emitted]
+        public static Exception/*!*/ MakeAbstractMethodCalledError(RuntimeMethodHandle/*!*/ method) {
+            return new NotImplementedException(String.Format("Abstract method `{0}' not implemented", MethodInfo.GetMethodFromHandle(method)));
+        }
+
+        [Emitted]
         public static Exception/*!*/ MakeInvalidArgumentTypesError(string/*!*/ methodName) {
             // TODO:
             return new ArgumentException(String.Format("wrong number or type of arguments for `{0}'", methodName));
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C924186
File: RubyMethodGroupInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C924186  (server)    6/1/2009 7:30 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;SuperFix
@@ -23,6 +23,7 @@
 using IronRuby.Compiler.Generation;
 using Microsoft.Scripting.Utils;
 using Ast = System.Linq.Expressions.Expression;
+using Microsoft.Scripting;
 
 namespace IronRuby.Runtime.Calls {
     /// <summary>
@@ -126,21 +127,38 @@
             return _staticDispatchMethods;
         }
 
+#if DEBUG
+        internal const string SuperCallMethodWrapperNameSuffix = "$RubyMethodGroupInfo.SuperCallMethodWrapper";
+#else
+        internal const string SuperCallMethodWrapperNameSuffix = "";
+#endif
+
         public static DynamicMethod/*!*/ WrapMethod(MethodInfo/*!*/ info, Type/*!*/ associatedType) {
             var originalParams = info.GetParameters();
             var newParams = new Type[originalParams.Length + 1];
-            string name = "";
+            
             newParams[0] = info.DeclaringType;
             for (int i = 0; i < originalParams.Length; i++) {
                 newParams[i + 1] = originalParams[i].ParameterType;
             }
-            DynamicMethod result = new DynamicMethod(name, info.ReturnType, newParams, associatedType);
+
+            DynamicMethod result = new DynamicMethod(
+                RubyExceptionData.EncodeMethodName(null, info.Name, SourceSpan.None) + SuperCallMethodWrapperNameSuffix,
+                info.ReturnType, newParams, associatedType
+            );
+
             ILGenerator ilg = result.GetILGenerator();
-            for (int i = 0; i < newParams.Length; i++) {
-                ilg.Emit(OpCodes.Ldarg, i);
+            if (info.IsAbstract) {
+                ilg.Emit(OpCodes.Ldtoken, info);
+                ilg.EmitCall(OpCodes.Call, Methods.MakeAbstractMethodCalledError, null);
+                ilg.Emit(OpCodes.Throw);
+            } else {
+                for (int i = 0; i < newParams.Length; i++) {
+                    ilg.Emit(OpCodes.Ldarg, i);
+                }
+                ilg.EmitCall(OpCodes.Call, info, null);
+                ilg.Emit(OpCodes.Ret);
             }
-            ilg.EmitCall(OpCodes.Call, info, null);
-            ilg.Emit(OpCodes.Ret);
             return result;
         }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyOverloadResolver.cs;C916389
File: RubyOverloadResolver.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyOverloadResolver.cs;C916389  (server)    6/1/2009 7:32 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyOverloadResolver.cs;SuperFix
@@ -91,7 +91,9 @@
 
             if (_callConvention == SelfCallConvention.SelfIsInstance) {
                 if (CompilerHelpers.IsStatic(method)) {
-                    Debug.Assert(RubyClass.IsOperator(method) || CompilerHelpers.IsExtension(method));
+                    Debug.Assert(RubyClass.IsOperator(method) || CompilerHelpers.IsExtension(method) || 
+                        method.Name.EndsWith(RubyMethodGroupInfo.SuperCallMethodWrapperNameSuffix)
+                    );
 
                     // receiver maps to the first parameter:
                     mapping.AddParameter(new ParameterWrapper(infos[i], infos[i].ParameterType, null, true, false, false, true));
===================================================================
