edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C641155
File: RubyTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C641155  (server)    11/17/2008 9:25 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;RubyClrInterop04
@@ -306,6 +306,7 @@
                 ClrDelegates1,
                 ClrDelegates2,
                 ClrEvents1,
+                ClrOverride1,
                 Scenario_RubyEngine1,
                 Scenario_RubyInteractive,
                 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;C633889
File: ClrTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;C633889  (server)    11/17/2008 9:11 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;RubyClrInterop04
@@ -458,5 +458,56 @@
             }, "outer var");
         }
 
+        public class ClassWithVirtuals {
+            public virtual string M1() {
+                return "CM1";
+            }
+            public virtual string M2() {
+                return "CM2";
+            }
+            public virtual string P1 {
+                get { return "CP1"; }
+            }
+            private string _p2 = "CP2";
+            public virtual string P2 {
+                get { return _p2; }
+                set { _p2 = value; }
+            }
+            public virtual string P3 {
+                get { return "CP3"; }
+            }
+            public string Summary {
+                get { return M1() + M2() + P1 + P2 + P3; }
+            }
+        }
+
+        public void ClrOverride1() {
+            Context.ObjectClass.SetConstant("C", Context.GetClass(typeof(ClassWithVirtuals)));
+            AssertOutput(delegate() {
+                CompilerTest(@"
+class D < C
+  def m1
+    'RM1'
+  end
+  def p2= value
+  end
+  def p3
+    'RP3'
+  end
+end
+
+$c = C.new
+$c.p2 = 'RP2'
+puts $c.summary
+
+$d = D.new
+$d.p2 = 'RP2'
+puts $d.summary
+");
+            }, @"
+CM1CM2CP1RP2CP3
+RM1CM2CP1CP2RP3
+");
+        }
     }
 }
===================================================================
add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libs/PresentationCore.rb
File: PresentationCore.rb
===================================================================
--- [no source file]
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libs/PresentationCore.rb;RubyClrInterop04
@@ -1,0 +1,1 @@
+require 'PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
===================================================================
add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libs/PresentationFramework.rb
File: PresentationFramework.rb
===================================================================
--- [no source file]
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libs/PresentationFramework.rb;RubyClrInterop04
@@ -1,0 +1,1 @@
+require 'PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
===================================================================
add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libs/System.Data.rb
File: System.Data.rb
===================================================================
--- [no source file]
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libs/System.Data.rb;RubyClrInterop04
@@ -1,0 +1,1 @@
+require 'System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyObject.Meta.cs;C633889
File: RubyObject.Meta.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyObject.Meta.cs;C633889  (server)    11/17/2008 8:16 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyObject.Meta.cs;RubyClrInterop04
@@ -37,7 +37,7 @@
             }
 
             public override MetaObject/*!*/ BindInvokeMember(InvokeMemberBinder/*!*/ binder, params MetaObject/*!*/[]/*!*/ args) {
-                var self = (RubyObject)Value;
+                var self = (IRubyObject)Value;
                 return RubyInvokeMemberBinder.TryBind(self.Class.Context, binder, this, args) ?? binder.FallbackInvokeMember(this, args);
             }
         }
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/ClsTypeEmitter.cs;C633889
File: ClsTypeEmitter.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/ClsTypeEmitter.cs;C633889  (server)    11/17/2008 8:16 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/ClsTypeEmitter.cs;RubyClrInterop04
@@ -97,6 +97,7 @@
         protected abstract bool TryGetName(Type clrType, MethodInfo mi, out string name);
         protected abstract bool TryGetName(Type clrType, EventInfo ei, MethodInfo mi, out string name);
         protected abstract bool TryGetName(Type clrType, PropertyInfo pi, MethodInfo mi, out string name);
+        protected abstract Type/*!*/[]/*!*/ MakeSiteSignature(int nargs);
 
         /// <summary>
         /// Gets the position for the parameter which we are overriding.
@@ -780,16 +781,6 @@
                 EmitImplicitContext(il);
             }
         }
-
-        private static Type/*!*/[]/*!*/ MakeSiteSignature(int nargs) {
-            Type[] sig = new Type[nargs + 4];
-            sig[0] = typeof(CallSite);
-            sig[1] = typeof(CodeContext);
-            for (int i = 2; i < sig.Length; i++) {
-                sig[i] = typeof(object);
-            }
-            return sig;
-        }
     }
 
     /// <summary>
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeEmitter.cs;C641155
File: RubyTypeEmitter.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeEmitter.cs;C641155  (server)    11/17/2008 8:16 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Generation/RubyTypeEmitter.cs;RubyClrInterop04
@@ -16,6 +16,7 @@
 using System;
 using System.Reflection;
 using System.Reflection.Emit;
+using System.Runtime.CompilerServices;
 using Microsoft.Scripting;
 using Microsoft.Scripting.Generation;
 using Microsoft.Scripting.Runtime;
@@ -104,8 +105,8 @@
         }
 
         [Emitted]
-        public static CodeContext Default {
-            get { return RubyContext._Default.EmptyScope; }
+        public static RubyContext Default {
+            get { return RubyContext._Default; }
         }
 
         protected override void EmitImplicitContext(ILGen il) {
@@ -143,5 +144,15 @@
             }
             return true;
         }
+
+        protected override Type/*!*/[]/*!*/ MakeSiteSignature(int nargs) {
+            Type[] sig = new Type[nargs + 4];
+            sig[0] = typeof(CallSite);
+            sig[1] = typeof(RubyContext);
+            for (int i = 2; i < sig.Length; i++) {
+                sig[i] = typeof(object);
+            }
+            return sig;
+        }
     }
 }
===================================================================
