edit: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/defined_tags.txt;C966724
File: defined_tags.txt
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/defined_tags.txt;C966724  (server)    10/7/2009 7:21 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/defined_tags.txt;Defined
@@ -1,3 +1,1 @@
-fails:The defined? keyword returns 'super' when Subclass#no_args uses defined?
-fails:The defined? keyword returns 'super' when Subclass#args uses defined?
 fails:The defined? keyword returns 'local-variable(in-block)' when defined? is called on a block var
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C1200585
File: RubyTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C1200585  (server)    10/7/2009 7:16 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;Defined
@@ -568,19 +568,20 @@
                 SuperInTopLevelCode1,
                 SuperInAliasedDefinedMethod1,
 
-                Scenario_RubyDefinedOperator_Globals1,
-                Scenario_RubyDefinedOperator_Globals2,
-                Scenario_RubyDefinedOperator_Methods1,
-                Scenario_RubyDefinedOperator_Methods2,
-                Scenario_RubyDefinedOperator_Constants1,
-                Scenario_RubyDefinedOperator_Constants2,
-                Scenario_RubyDefinedOperator_Constants3,
-                Scenario_RubyDefinedOperator_Expressions1,
-                Scenario_RubyDefinedOperator_InstanceVariables1,
-                Scenario_RubyDefinedOperator_ClassVariables1,
-                Scenario_RubyDefinedOperator_ClassVariables2,
-                Scenario_RubyDefinedOperator_Yield1,
-                Scenario_RubyDefinedOperator_Locals1,
+                DefinedOperator_Globals1,
+                DefinedOperator_Globals2,
+                DefinedOperator_Methods1,
+                DefinedOperator_Methods2,
+                DefinedOperator_Constants1,
+                DefinedOperator_Constants2,
+                DefinedOperator_Constants3,
+                DefinedOperator_Expressions1,
+                DefinedOperator_InstanceVariables1,
+                DefinedOperator_ClassVariables1,
+                DefinedOperator_ClassVariables2,
+                DefinedOperator_Yield1,
+                DefinedOperator_Locals1,
+                DefinedOperator_Super1,
 
                 Scenario_ModuleOps_Methods,
                 Scenario_MainSingleton,
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/DefinedTests.cs;C1158858
File: DefinedTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/DefinedTests.cs;C1158858  (server)    10/7/2009 7:13 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/DefinedTests.cs;Defined
@@ -15,7 +15,7 @@
 
 namespace IronRuby.Tests {
     public partial class Tests {
-        public void Scenario_RubyDefinedOperator_Globals1() {
+        public void DefinedOperator_Globals1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 p defined? $+
@@ -31,7 +31,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Globals2() {
+        public void DefinedOperator_Globals2() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 alias $foo $bar
@@ -55,7 +55,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Methods1() {
+        public void DefinedOperator_Methods1() {
             CompilerTest(@"
 module M
   def foo; end
@@ -81,8 +81,7 @@
             AssertEquals(o, 1);
         }
 
-        public void Scenario_RubyDefinedOperator_Methods2() {
-            // TODO: visibility
+        public void DefinedOperator_Methods2() {
             AssertOutput(() => CompilerTest(@"
 def foo
   puts 'foo'
@@ -92,7 +91,7 @@
 puts defined? 1.+
 puts defined? 1.method_that_doesnt_exist
 puts defined? raise.foo
-# TODO: puts defined? foo.foo should return nil (visibility)
+puts defined? foo.foo(puts(1))                  # foo is private
 public :foo
 puts defined? foo.foo
 "), @"
@@ -100,11 +99,13 @@
 nil
 nil
 foo
+nil
+foo
 method
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Constants1() {
+        public void DefinedOperator_Constants1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 W = 0
@@ -144,7 +145,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Constants2() {
+        public void DefinedOperator_Constants2() {
             TestOutput(@"
 module M
   C = 1
@@ -172,7 +173,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Constants3() {
+        public void DefinedOperator_Constants3() {
             TestOutput(@"
 print '1' unless defined? FOO
 print '2' unless defined? FOO
@@ -187,7 +188,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Expressions1() {
+        public void DefinedOperator_Expressions1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 puts defined? true
@@ -216,7 +217,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_InstanceVariables1() {
+        public void DefinedOperator_InstanceVariables1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 p defined? @x
@@ -232,7 +233,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_ClassVariables1() {
+        public void DefinedOperator_ClassVariables1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 module M
@@ -263,7 +264,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_ClassVariables2() {
+        public void DefinedOperator_ClassVariables2() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 @@x = 1
@@ -274,7 +275,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Yield1() {
+        public void DefinedOperator_Yield1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 def foo
@@ -290,7 +291,7 @@
 ");
         }
 
-        public void Scenario_RubyDefinedOperator_Locals1() {
+        public void DefinedOperator_Locals1() {
             AssertOutput(delegate() {
                 CompilerTest(@"
 def bob a
@@ -311,5 +312,35 @@
 local-variable
 ");
         }
+
+        public void DefinedOperator_Super1() {
+            AssertOutput(delegate() {
+                CompilerTest(@"
+class C
+  def foo
+    defined?(super(puts(1)))
+  end
+end
+
+class D < C
+  def foo
+    defined?(super(puts(1)))
+  end
+
+  def bar
+    defined?(super(puts(1)))
+  end
+end
+
+puts C.new.foo
+puts D.new.foo
+puts D.new.bar
+");
+            }, @"
+nil
+super
+nil
+");
+        }
     }
 }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C1175370
File: ReflectionCache.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C1175370  (server)    10/7/2009 7:12 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;Defined
@@ -310,8 +310,6 @@
         private static MethodInfo _IsDefinedGlobalVariable;
         public static MethodInfo/*!*/ IsDefinedInstanceVariable { get { return _IsDefinedInstanceVariable ?? (_IsDefinedInstanceVariable = GetMethod(typeof(RubyOps), "IsDefinedInstanceVariable")); } }
         private static MethodInfo _IsDefinedInstanceVariable;
-        public static MethodInfo/*!*/ IsDefinedMethod { get { return _IsDefinedMethod ?? (_IsDefinedMethod = GetMethod(typeof(RubyOps), "IsDefinedMethod")); } }
-        private static MethodInfo _IsDefinedMethod;
         public static MethodInfo/*!*/ IsDefinedQualifiedConstant { get { return _IsDefinedQualifiedConstant ?? (_IsDefinedQualifiedConstant = GetMethod(typeof(RubyOps), "IsDefinedQualifiedConstant")); } }
         private static MethodInfo _IsDefinedQualifiedConstant;
         public static MethodInfo/*!*/ IsDefinedUnqualifiedConstant { get { return _IsDefinedUnqualifiedConstant ?? (_IsDefinedUnqualifiedConstant = GetMethod(typeof(RubyOps), "IsDefinedUnqualifiedConstant")); } }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;C1158858
File: MethodCall.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;C1158858  (server)    10/7/2009 6:29 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;Defined
@@ -25,6 +25,7 @@
 using Microsoft.Scripting.Actions;
 using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
+using IronRuby.Runtime.Calls;
 using IronRuby.Runtime;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 
@@ -178,16 +179,15 @@
         }
 
         internal override MSA.Expression TransformDefinedCondition(AstGenerator/*!*/ gen) {
-            if (_target != null) {
-                return gen.TryCatchAny(
-                    Methods.IsDefinedMethod.OpCall(
-                        AstFactory.Box(_target.TransformRead(gen)), gen.CurrentScopeVariable, AstUtils.Constant(_methodName)
-                    ),
-                    AstFactory.False
-                );
-            } else {
-                return Methods.IsDefinedMethod.OpCall(gen.CurrentSelfVariable, gen.CurrentScopeVariable, AstUtils.Constant(_methodName));
-            }
+            // MRI doesn't evaluate the arguments 
+            MSA.Expression result = Ast.Dynamic(
+                RubyCallAction.Make(gen.Context, _methodName, RubyCallSignature.IsDefined(_target == null)), 
+                typeof(bool),
+                gen.CurrentScopeVariable,
+                (_target != null) ? AstFactory.Box(_target.TransformRead(gen)) : gen.CurrentSelfVariable
+            );
+
+            return (_target != null) ? gen.TryCatchAny(result, AstFactory.False) : result;
         }
 
         internal override string/*!*/ GetNodeName(AstGenerator/*!*/ gen) {
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;C1107696
File: SuperCall.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;C1107696  (server)    10/7/2009 6:48 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;Defined
@@ -24,10 +24,11 @@
 using Microsoft.Scripting.Actions;
 using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
+using IronRuby.Runtime.Calls;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 
 namespace IronRuby.Compiler.Ast {
-    using Ast = Expression;
+    using Ast = MSA.Expression;
 
     /// <summary>
     /// super(args)
@@ -86,9 +87,13 @@
         }
 
         internal override MSA.Expression/*!*/ TransformDefinedCondition(AstGenerator/*!*/ gen) {
-            // TODO:
-            //throw new NotImplementedError();
-            return AstUtils.Constant(false);
+            // MRI doesn't evaluate the arguments 
+            return Ast.Dynamic(
+                SuperCallAction.Make(gen.Context, RubyCallSignature.IsDefined(true), gen.CurrentFrame.UniqueId),
+                typeof(bool),
+                gen.CurrentScopeVariable,
+                gen.CurrentSelfVariable
+            );
         }
 
         internal override string/*!*/ GetNodeName(AstGenerator/*!*/ gen) {
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C1175370
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C1175370  (server)    10/7/2009 7:12 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;Defined
@@ -577,13 +577,6 @@
             owner.UndefineMethod(name);
         }
 
-        [Emitted] // MethodCall:
-        public static bool IsDefinedMethod(object self, RubyScope/*!*/ scope, string/*!*/ name) {
-            // MRI: this is different from UndefineMethod, it behaves like Kernel#method (i.e. doesn't use lexical scope):
-            // TODO: visibility
-            return scope.RubyContext.ResolveMethod(self, name, VisibilityContext.AllVisible).Found;
-        }
-
         #endregion
 
         #region Modules
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallAction.cs;C1158858
File: RubyCallAction.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallAction.cs;C1158858  (server)    10/7/2009 6:41 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallAction.cs;Defined
@@ -32,6 +32,7 @@
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 
 namespace IronRuby.Runtime.Calls {
+    using AstFactory = IronRuby.Compiler.Ast.AstFactory;
     using Ast = Expression;
 
     public class RubyCallAction : RubyMetaBinder {
@@ -47,7 +48,7 @@
         }
 
         public override Type/*!*/ ReturnType {
-            get { return typeof(object); }
+            get { return _signature.ResolveOnly ? typeof(bool) : typeof(object); }
         }
 
         internal protected RubyCallAction(RubyContext context, string/*!*/ methodName, RubyCallSignature signature) 
@@ -97,7 +98,9 @@
         #region Precompiled Rules
 
         public override T BindDelegate<T>(CallSite<T>/*!*/ site, object[]/*!*/ args) {
-            if (Context == null || (Signature.Flags & ~(RubyCallFlags.HasImplicitSelf | RubyCallFlags.HasScope | RubyCallFlags.HasBlock)) != 0) {
+            if (Context == null || 
+                Signature.ResolveOnly ||
+                (Signature.Flags & ~(RubyCallFlags.HasImplicitSelf | RubyCallFlags.HasScope | RubyCallFlags.HasBlock)) != 0) {
                 return base.BindDelegate<T>(site, args);
             }
 
@@ -152,6 +155,11 @@
                     return false;
                 }
 
+                if (args.Signature.ResolveOnly) {
+                    metaBuilder.Result = AstFactory.True;
+                    return true;    
+                }
+                
                 if (args.Signature.IsVirtualCall && !method.Info.IsRubyMember) {
                     metaBuilder.Result = Ast.Field(null, Fields.ForwardToBase);
                     return true;
@@ -159,6 +167,9 @@
 
                 method.Info.BuildCall(metaBuilder, args, methodName);
                 return true;
+            } else if (args.Signature.ResolveOnly) {
+                metaBuilder.Result = AstFactory.False;
+                return true;
             } else {
                 return BuildMethodMissingCall(metaBuilder, args, methodName, methodMissing, method.IncompatibleVisibility, false, defaultFallback);
             }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallSignature.cs;C1107696
File: RubyCallSignature.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallSignature.cs;C1107696  (server)    10/7/2009 6:25 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallSignature.cs;Defined
@@ -54,21 +54,26 @@
     /// </summary>
     public struct RubyCallSignature : IEquatable<RubyCallSignature> {
         private const int FlagsCount = 7;
-        private const int MaxArgumentCount = (int)(UInt32.MaxValue >> FlagsCount);
-        private const RubyCallFlags FlagsMask = (RubyCallFlags)(1 << FlagsCount) - 1;
 
+        private const int ResolveOnlyArgumentCount = (int)(UInt32.MaxValue >> FlagsCount);
+        private const int MaxArgumentCount = ResolveOnlyArgumentCount - 1;
+        private const uint FlagsMask = (1 << FlagsCount) - 1;
+
         private readonly uint _countAndFlags;
 
-        public bool HasImplicitSelf { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.HasImplicitSelf) != 0; } }
-        public bool HasScope { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.HasScope) != 0; } }
-        public bool HasBlock { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.HasBlock) != 0; } }
-        public bool HasSplattedArgument { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.HasSplattedArgument) != 0; } }
-        public bool HasRhsArgument { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.HasRhsArgument) != 0; } }
-        public bool IsInteropCall { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.IsInteropCall) != 0; } }
-        public bool IsVirtualCall { get { return ((RubyCallFlags)_countAndFlags & RubyCallFlags.IsVirtualCall) != 0; } }
+        public bool HasImplicitSelf { get { return (_countAndFlags & (uint)RubyCallFlags.HasImplicitSelf) != 0; } }
+        public bool HasScope { get { return (_countAndFlags & (uint)RubyCallFlags.HasScope) != 0; } }
+        public bool HasBlock { get { return (_countAndFlags & (uint)RubyCallFlags.HasBlock) != 0; } }
+        public bool HasSplattedArgument { get { return (_countAndFlags & (uint)RubyCallFlags.HasSplattedArgument) != 0; } }
+        public bool HasRhsArgument { get { return (_countAndFlags & (uint)RubyCallFlags.HasRhsArgument) != 0; } }
+        public bool IsInteropCall { get { return (_countAndFlags & (uint)RubyCallFlags.IsInteropCall) != 0; } }
+        public bool IsVirtualCall { get { return (_countAndFlags & (uint)RubyCallFlags.IsVirtualCall) != 0; } }
 
-        public int ArgumentCount { get { return (int)_countAndFlags >> FlagsCount; } }
-        internal RubyCallFlags Flags { get { return (RubyCallFlags)_countAndFlags & FlagsMask; } }
+        // defined? ignores arguments hence we can use one argument number (max) to represent resolve only sites:
+        public bool ResolveOnly { get { return ArgumentCount == ResolveOnlyArgumentCount; } }
+
+        public int ArgumentCount { get { return (int)(_countAndFlags >> FlagsCount); } }
+        internal RubyCallFlags Flags { get { return (RubyCallFlags)(_countAndFlags & FlagsMask); } }
         
         // total call-site arguments w/o RubyContext/RubyScope
         public int TotalArgumentCount {
@@ -81,15 +86,23 @@
             }
         }
 
+        /// <summary>
+        /// Used by defined? operator applied on methods.
+        /// </summary>
+        private RubyCallSignature(RubyCallFlags flags) {
+            Debug.Assert(((int)flags >> FlagsCount) == 0);
+            _countAndFlags = ((uint)ResolveOnlyArgumentCount << FlagsCount) | (uint)flags;
+        }
+
         public RubyCallSignature(int argumentCount, RubyCallFlags flags) {
-            Debug.Assert(argumentCount >= 0 && argumentCount < MaxArgumentCount);
+            Debug.Assert(argumentCount >= 0 && argumentCount <= MaxArgumentCount);
             Debug.Assert(((int)flags >> FlagsCount) == 0);
 
             _countAndFlags = ((uint)argumentCount << FlagsCount) | (uint)flags;
         }
 
         public RubyCallSignature(bool hasScope, bool hasImplicitSelf, int argumentCount, bool hasSplattedArgument, bool hasBlock, bool hasRhsArgument) {
-            Debug.Assert(argumentCount >= 0 && argumentCount < MaxArgumentCount);
+            Debug.Assert(argumentCount >= 0 && argumentCount <= MaxArgumentCount);
 
             var flags = RubyCallFlags.None;
             if (hasImplicitSelf) flags |= RubyCallFlags.HasImplicitSelf;
@@ -151,6 +164,10 @@
             return new RubyCallSignature(argumentCount, RubyCallFlags.HasScope | RubyCallFlags.HasBlock | RubyCallFlags.HasSplattedArgument);
         }
 
+        public static RubyCallSignature IsDefined(bool hasImplicitSelf) {
+            return new RubyCallSignature(RubyCallFlags.HasScope | (hasImplicitSelf ? RubyCallFlags.HasImplicitSelf : RubyCallFlags.None));
+        }
+
         internal Expression/*!*/ CreateExpression() {
             return Ast.New(Methods.RubyCallSignatureCtor, AstUtils.Constant(_countAndFlags));
         }
@@ -163,8 +180,8 @@
             return "(" +
                 (HasImplicitSelf ? "." : "") +
                 (IsVirtualCall ? "V" : "") +
-                (HasScope ? "S," : "C,") +
-                ArgumentCount.ToString() + 
+                (HasScope ? "S" : "C") +
+                (ResolveOnly ? "?" : "," + ArgumentCount.ToString()) + 
                 (HasSplattedArgument ? "*" : "") + 
                 (HasBlock ? "&" : "") + 
                 (HasRhsArgument ? "=" : "") + 
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/SuperCallAction.cs;C1107696
File: SuperCallAction.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/SuperCallAction.cs;C1107696  (server)    10/7/2009 6:42 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/SuperCallAction.cs;Defined
@@ -63,7 +63,7 @@
         }
 
         public override Type/*!*/ ReturnType {
-            get { return typeof(object); }
+            get { return _signature.ResolveOnly ? typeof(bool) : typeof(object); }
         }
 
         #region Rule Generation
@@ -109,6 +109,12 @@
                 metaBuilder.TreatRestrictionsAsConditions = false;
 
                 method = targetClass.ResolveSuperMethodNoLock(currentMethodName, currentDeclaringModule).InvalidateSitesOnOverride().Info;
+
+                if (_signature.ResolveOnly) {
+                    metaBuilder.Result = AstUtils.Constant(method != null);
+                    return true;
+                }
+
                 if (method == null) {
                     // MRI: method_missing is called for the targetClass, not for the super:
                     methodMissing = targetClass.ResolveMethodMissingForSite(currentMethodName, RubyMethodVisibility.None);
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Tests/Scripts/ActionPackTests.rb;C1162008
File: ActionPackTests.rb
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Tests/Scripts/ActionPackTests.rb;C1162008  (server)    10/7/2009 3:36 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Tests/Scripts/ActionPackTests.rb;Defined
@@ -281,15 +281,6 @@
 
 end
 
-class LinkToUnlessCurrentWithControllerTest
-  # NoMethodError: protected method `default_url_options' called for #<LinkToUnlessCurrentWithControllerTest::TasksController:0x0043838 @before_filter_chain_aborted=false, @performed_redirect=false, @performed_render=false, @_request=#<ActionController::TestRequest:0x00437ac @env={"rack.version"=>[0, 1], "rack.input"=>IronRuby.StandardLibrary.StringIO.StringIO, "rack.errors"=>IronRuby.StandardLibrary.S
-  def test_link_to_unless_current_shows_link() end
-
-  # NoMethodError: protected method `default_url_options' called for #<LinkToUnlessCurrentWithControllerTest::TasksController:0x00438ee @before_filter_chain_aborted=false, @performed_redirect=false, @performed_render=false, @_request=#<ActionController::TestRequest:0x0043862 @env={"rack.version"=>[0, 1], "rack.input"=>IronRuby.StandardLibrary.StringIO.StringIO, "rack.errors"=>IronRuby.StandardLibrary.S
-  def test_link_to_unless_current_to_current() end
-
-end
-
 class MultipartParamsParsingTest
   # NoMethodError: undefined method `stat' for #<File:c:/github/ironruby/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/RailsTests-2.3.3/actionpack/test/controller/request/../../fixtures/multipart/none>
   def test_does_not_create_tempfile_if_no_file_has_been_selected() end
@@ -334,15 +325,6 @@
 
 end
 
-class PolymorphicControllerTest
-  # NoMethodError: protected method `default_url_options' called for #<PolymorphicControllerTest::SessionsController:0x0046aec @before_filter_chain_aborted=false, @performed_redirect=false, @performed_render=false, @_request=#<ActionController::TestRequest:0x00469ac @env={"rack.version"=>[0, 1], "rack.input"=>IronRuby.StandardLibrary.StringIO.StringIO, "rack.errors"=>IronRuby.StandardLibrary.StringIO.S
-  def test_new_nested_resource() end
-
-  # NoMethodError: protected method `default_url_options' called for #<PolymorphicControllerTest::WorkshopsController:0x0046c52 @before_filter_chain_aborted=false, @performed_redirect=false, @performed_render=false, @_request=#<ActionController::TestRequest:0x0046b12 @env={"rack.version"=>[0, 1], "rack.input"=>IronRuby.StandardLibrary.StringIO.StringIO, "rack.errors"=>IronRuby.StandardLibrary.StringIO.
-  def test_new_resource() end
-
-end
-
 class ReloadableRenderTest
   # <"undefined method `doesnt_exist' for #<ActionView::Base:0x004d78c @_rendered={:template=>#<ActionView::ReloadableTemplate:0x004d816 @template_path=\"test/_raise.html.erb\", @load_path=\"c:/github/ironruby/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/RailsTests-2.3.3/actionpack/test/fixtures\", @base_path=\"test\", @name=\"_raise\", @locale=nil, @format=\"html\", @extension=\"erb\", @_memoized
   def test_render_partial_with_errors() end
@@ -383,15 +365,6 @@
   def test_fixture_file_upload() end
 end
 
-class UrlHelperWithControllerTest
-  # NoMethodError: protected method `default_url_options' called for #<UrlHelperWithControllerTest::UrlHelperController:0x006195a @before_filter_chain_aborted=false, @performed_redirect=false, @performed_render=false, @_request=#<ActionController::TestRequest:0x0061928 @env={"rack.version"=>[0, 1], "rack.input"=>IronRuby.StandardLibrary.StringIO.StringIO, "rack.errors"=>IronRuby.StandardLibrary.StringI
-  def test_named_route_path_shows_only_path() end
-
-  # NoMethodError: protected method `default_url_options' called for #<UrlHelperWithControllerTest::UrlHelperController:0x0061a04 @before_filter_chain_aborted=false, @performed_redirect=false, @performed_render=false, @_request=#<ActionController::TestRequest:0x00619d4 @env={"rack.version"=>[0, 1], "rack.input"=>IronRuby.StandardLibrary.StringIO.StringIO, "rack.errors"=>IronRuby.StandardLibrary.StringI
-  def test_named_route_url_shows_host_and_path() end
-
-end
-
 class UrlWriterTests
   # <"http://www.basecamphq.com/"> expected but was
   # <"http://www.basecamphq.com/posts">.
===================================================================
