edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj;C576154
File: IronRuby.Tests.csproj
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj;C576154  (server)    9/30/2008 3:53 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj;BacktraceFix
@@ -59,6 +59,7 @@
     <Compile Include="RubyTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Runtime\AssignmentTests.cs" />
+    <Compile Include="Runtime\BacktraceTests.cs" />
     <Compile Include="Runtime\BoolAndConditionalTests.cs" />
     <Compile Include="Runtime\ClrTests.cs" />
     <Compile Include="Runtime\ArrayTests.cs" />
@@ -117,4 +118,4 @@
   <Target Name="AfterBuild">
   </Target>
   -->
-</Project>
+</Project>
\ No newline at end of file
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C576154
File: RubyTests.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C576154  (server)    9/30/2008 3:54 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;BacktraceFix
@@ -379,6 +379,10 @@
                 SuperEval1,
                 // TODO: SuperParameterlessEval1,
                 SuperInDefineMethodEval1,
+
+                Backtrace1,
+                Backtrace2,
+                Backtrace3,
             };
         }
     }
===================================================================
add: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BacktraceTests.cs
File: BacktraceTests.cs
===================================================================
--- [no source file]
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BacktraceTests.cs;BacktraceFix
@@ -1,0 +1,141 @@
+?/* ****************************************************************************
+ *
+ * Copyright (c) Microsoft Corporation. 
+ *
+ * This source code is subject to terms and conditions of the Microsoft Public License. A 
+ * copy of the license can be found in the License.html file at the root of this distribution. If 
+ * you cannot locate the  Microsoft Public License, please send an email to 
+ * ironruby@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
+ * by the terms of the Microsoft Public License.
+ *
+ * You must not remove this notice, or any other, from this software.
+ *
+ *
+ * ***************************************************************************/
+
+using Microsoft.Scripting;
+namespace IronRuby.Tests {
+    public partial class Tests {
+        private bool PreciseTraces {
+            get { return !_driver.PartialTrust || _driver.Interpret; }
+        }
+
+        public void Backtrace1() {
+            AssertOutput(delegate() {
+                Engine.CreateScriptSourceFromString(@"
+def goo()
+  foo()
+end
+
+def foo()
+  bar()
+end
+
+def bar()  
+  baz()
+end
+
+def baz()
+  puts caller[0..3]
+end
+
+goo
+", "Backtrace1.rb", SourceCodeKind.File).Execute();
+            }, PreciseTraces ? @"
+Backtrace1.rb:11:in `bar'
+Backtrace1.rb:7:in `foo'
+Backtrace1.rb:3:in `goo'
+Backtrace1.rb:18
+" : @"
+Backtrace1.rb:10:in `bar'
+Backtrace1.rb:6:in `foo'
+Backtrace1.rb:2:in `goo'
+:0
+");
+        }
+
+        public void Backtrace2() {
+            AssertOutput(delegate() {
+                CompilerTest(@"
+def goo()
+  foo()
+end
+
+def foo()
+  bar()
+end
+
+def bar()  
+  baz()
+end
+
+def baz()
+  raise
+end
+
+begin
+  goo
+rescue
+  puts $@[0..4]
+end
+");
+            }, PreciseTraces ? @"
+Backtrace2.rb:15:in `baz'
+Backtrace2.rb:11:in `bar'
+Backtrace2.rb:7:in `foo'
+Backtrace2.rb:3:in `goo'
+Backtrace2.rb:19
+" : @"
+Backtrace2.rb:14:in `baz'
+Backtrace2.rb:10:in `bar'
+Backtrace2.rb:6:in `foo'
+Backtrace2.rb:2:in `goo'
+:0
+");
+        }
+
+        public void Backtrace3() {
+            AssertOutput(delegate() {
+                CompilerTest(@"
+def goo()
+  foo()
+rescue  
+  raise
+end
+
+def foo()
+  bar()
+end
+
+def bar()
+  baz()
+rescue  
+  raise
+end
+
+def baz()
+  raise
+end
+
+begin
+  goo
+rescue
+  puts $@[0..4]
+end
+");
+            }, PreciseTraces ? @"
+Backtrace3.rb:19:in `baz'
+Backtrace3.rb:13:in `bar'
+Backtrace3.rb:9:in `foo'
+Backtrace3.rb:3:in `goo'
+Backtrace3.rb:23
+" : @"
+Backtrace3.rb:18:in `baz'
+Backtrace3.rb:12:in `bar'
+Backtrace3.rb:8:in `foo'
+Backtrace3.rb:2:in `goo'
+:0
+");
+        }
+    }
+}
\ No newline at end of file
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C577943
File: Initializers.Generated.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C577943  (server)    9/30/2008 2:51 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;BacktraceFix
@@ -76,7 +76,7 @@
                 new System.Action<IronRuby.Builtins.RubyClass, System.Object[]>(IronRuby.Builtins.RubyStructOps.AllocatorUndefined),
             });
             ExtendModule(typeof(System.Collections.Generic.IDictionary<System.Object, System.Object>), new System.Action<IronRuby.Builtins.RubyModule>(LoadSystem__Collections__Generic__IDictionary_Instance), null, new IronRuby.Builtins.RubyModule[] {def17, });
-            ExtendModule(typeof(System.Collections.IEnumerable), new System.Action<IronRuby.Builtins.RubyModule>(LoadSystem__Collections__IEnumerable_Instance), null, new IronRuby.Builtins.RubyModule[] {def17, });
+            IronRuby.Builtins.RubyModule def31 = ExtendModule(typeof(System.Collections.IEnumerable), new System.Action<IronRuby.Builtins.RubyModule>(LoadSystem__Collections__IEnumerable_Instance), null, new IronRuby.Builtins.RubyModule[] {def17, });
             ExtendModule(typeof(System.Collections.IList), new System.Action<IronRuby.Builtins.RubyModule>(LoadSystem__Collections__IList_Instance), null, new IronRuby.Builtins.RubyModule[] {def17, });
             ExtendModule(typeof(System.IComparable), new System.Action<IronRuby.Builtins.RubyModule>(LoadSystem__IComparable_Instance), null, new IronRuby.Builtins.RubyModule[] {def26, });
             DefineGlobalClass("Array", typeof(IronRuby.Builtins.RubyArray), Context.ObjectClass, new System.Action<IronRuby.Builtins.RubyModule>(LoadArray_Instance), new System.Action<IronRuby.Builtins.RubyModule>(LoadArray_Class), new IronRuby.Builtins.RubyModule[] {def17, }, new System.Delegate[] {
@@ -90,7 +90,7 @@
                 new System.Func<IronRuby.Runtime.RubyScope, IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, System.Object, System.Object>(IronRuby.Builtins.ArrayOps.CreateArray),
             });
             DefineGlobalClass("Binding", typeof(IronRuby.Builtins.Binding), Context.ObjectClass, null, null, IronRuby.Builtins.RubyModule.EmptyArray, null);
-            DefineGlobalClass("ClrString", typeof(System.String), Context.ObjectClass, new System.Action<IronRuby.Builtins.RubyModule>(LoadClrString_Instance), null, IronRuby.Builtins.RubyModule.EmptyArray, null);
+            DefineGlobalClass("ClrString", typeof(System.String), Context.ObjectClass, new System.Action<IronRuby.Builtins.RubyModule>(LoadClrString_Instance), null, new IronRuby.Builtins.RubyModule[] {def31, }, null);
             DefineGlobalClass("Dir", typeof(IronRuby.Builtins.RubyDir), Context.ObjectClass, new System.Action<IronRuby.Builtins.RubyModule>(LoadDir_Instance), new System.Action<IronRuby.Builtins.RubyModule>(LoadDir_Class), new IronRuby.Builtins.RubyModule[] {def17, }, null);
             #if !SILVERLIGHT
             DefineGlobalClass("Encoding", typeof(IronRuby.Builtins.RubyEncoding), Context.ObjectClass, new System.Action<IronRuby.Builtins.RubyModule>(LoadEncoding_Instance), new System.Action<IronRuby.Builtins.RubyModule>(LoadEncoding_Class), IronRuby.Builtins.RubyModule.EmptyArray, new System.Delegate[] {
@@ -2259,7 +2259,7 @@
             });
             
             module.DefineLibraryMethod("caller", 0x2a, new System.Delegate[] {
-                new System.Func<System.Object, System.Int32, IronRuby.Builtins.RubyArray>(IronRuby.Builtins.KernelOps.GetStackTrace),
+                new System.Func<IronRuby.Runtime.RubyContext, System.Object, System.Int32, IronRuby.Builtins.RubyArray>(IronRuby.Builtins.KernelOps.GetStackTrace),
             });
             
             module.DefineLibraryMethod("catch", 0x2a, new System.Delegate[] {
@@ -2633,7 +2633,7 @@
             });
             
             module.DefineLibraryMethod("caller", 0x31, new System.Delegate[] {
-                new System.Func<System.Object, System.Int32, IronRuby.Builtins.RubyArray>(IronRuby.Builtins.KernelOps.GetStackTrace),
+                new System.Func<IronRuby.Runtime.RubyContext, System.Object, System.Int32, IronRuby.Builtins.RubyArray>(IronRuby.Builtins.KernelOps.GetStackTrace),
             });
             
             module.DefineLibraryMethod("catch", 0x31, new System.Delegate[] {
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs;C576154
File: KernelOps.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs;C576154  (server)    9/30/2008 2:46 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs;BacktraceFix
@@ -257,17 +257,12 @@
         [RubyMethod("caller", RubyMethodAttributes.PrivateInstance)]
         [RubyMethod("caller", RubyMethodAttributes.PublicSingleton)]
         [RubyStackTraceHidden]
-        public static RubyArray/*!*/ GetStackTrace(object self, [DefaultParameterValue(1)]int skipFrames) {
+        public static RubyArray/*!*/ GetStackTrace(RubyContext/*!*/ context, object self, [DefaultParameterValue(1)]int skipFrames) {
             if (skipFrames < 0) {
                 return new RubyArray();
             }
 
-#if SILVERLIGHT
-            StackTrace trace = new StackTrace();
-#else
-            StackTrace trace = new StackTrace(true);
-#endif
-            return RubyExceptionData.CreateBacktrace(trace.GetFrames(), skipFrames);
+            return RubyExceptionData.CreateBacktrace(context, skipFrames);
         }
 
         //chomp
@@ -728,7 +723,7 @@
         [RubyMethod("set_trace_func", RubyMethodAttributes.PrivateInstance)]
         [RubyMethod("set_trace_func", RubyMethodAttributes.PublicSingleton)]
         public static Proc SetTraceListener(RubyContext/*!*/ context, object self, Proc listener) {
-            if (!context.RubyOptions.EnableTracing) {
+            if (listener != null && !context.RubyOptions.EnableTracing) {
                 throw new NotSupportedException("Tracing is not supported unless -trace option is specified.");
             }
             return context.ExecutionContext.TraceListener = listener;
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;C577943
File: RubyExceptionData.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;C577943  (server)    9/27/2008 3:32 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;BacktraceFix
@@ -34,75 +34,115 @@
         private static readonly object/*!*/ _DataKey = new object();
         internal const string TopLevelMethodName = "#top-level-method#";
 
-        private Exception/*!*/ _exception; // owner exception, needed for lazy initialization of message, backtrace
-        private MutableString _message; // if this is set to null we need to initialze it
-        private RubyArray _backtrace; // nil is an allowed value
-        private bool _backtraceInitialized; // If this is false, it means we need to initialize the backtrace
-        private StackTrace _catchSiteTrace; // stack trace at the Ruby catch site; will be combined with the exception trace
-        private InterpreterState _interpretedTrace; // linked list of interpreted frames
+        // owner exception, needed for lazy initialization of message, backtrace
+        private Exception/*!*/ _exception; 
 
+        // if this is set to null we need to initialze it
+        private MutableString _message; 
+        
+        // can be set explicitly by the user (even to nil):
+        private RubyArray _backtrace;
+
+        // false if _backtrace needs to be initialized.
+        private bool _backtraceInitialized; 
+
+        // Compiled trace: contains frames above and including the first Ruby filter/catch site that the exception was caught by:
+        private StackTrace _catchSiteTrace;
+
+        // Compiled trace: contains frames starting with the throw site up to the first filter/catch that the exception was caught by:
+        private StackTrace _throwSiteTrace; 
+
         private RubyExceptionData(Exception/*!*/ exception) {
             _exception = exception;
         }
 
         // Called lazily to create a Ruby backtrace.
         private void CreateBacktrace() {
-            RubyArray result = new RubyArray();
+            RubyArray result;
 
-            if (_interpretedTrace != null) {
-                Debug.Assert(_catchSiteTrace == null, "We shouldn't capture trace at catch site");
-                AddBacktrace(result, _interpretedTrace); 
-            } else {
-                int skipFrames = 0;
+            int skipFrames = 0;
+            bool hasFileAccessPermissions = DetectFileAccessPermissions();
 
-                bool hasFileAccessPermissions = DetectFileAccessPermissions();
-
 #if SILVERLIGHT // TODO: StackTrace.ctor(exception) security critical
-                foreach (string line in _exception.StackTrace.Split('\n')) {
-                    string frame = line.Trim();
-                    if (frame.StartsWith("at ")) {
-                        frame = frame.Substring("at ".Length);
-                    }
-
-                    if (frame.StartsWith("_stub_") ||
-                        frame.StartsWith("Microsoft.Scripting") ||
-                        frame.StartsWith("System.Runtime") ||
-                        frame.StartsWith("IronRuby.Builtins.Kernel.RaiseException") ||
-                        frame.StartsWith("IronRuby.Builtins.Kernel.MethodMissing")) {
-                        continue;
-                    }
-
-                    int lineNumber = 0;
-                    string fileName = null;
-                    string methodName = frame;
-                    TryParseRubyMethodName(ref methodName, ref fileName, ref lineNumber);
-                    result.Add(FormatFrame(methodName, lineNumber, fileName));
-                }
+            // throw-site trace is built already:
+            result = _backtrace;
 #else
-                AddBacktrace(result, new StackTrace(_exception, true).GetFrames(), hasFileAccessPermissions, ref skipFrames);
+            result = new RubyArray();
+            AddBacktrace(result, _throwSiteTrace.GetFrames(), hasFileAccessPermissions, ref skipFrames);
 #endif
-                if (_catchSiteTrace != null) {
-                    skipFrames = 1; // the catch-site frame is already included
-                    AddBacktrace(result, _catchSiteTrace.GetFrames(), hasFileAccessPermissions, ref skipFrames);
-                }
+            if (_catchSiteTrace != null) {
+                skipFrames = 1; // the catch-site frame is already included
+                AddBacktrace(result, _catchSiteTrace.GetFrames(), hasFileAccessPermissions, ref skipFrames);
             }
 
             _backtrace = result;
             _backtraceInitialized = true;
         }
-        
-        internal void CaptureCatchSiteTrace() {
-#if SILVERLIGHT
-                _catchSiteTrace = new StackTrace();
+
+        internal void SetCompiledTrace() {
+            Debug.Assert(!_backtraceInitialized);
+
+#if SILVERLIGHT // TODO: StackTrace.ctor(exception) security critical
+            _catchSiteTrace = new StackTrace();
+
+            result = new RubyArray();
+            foreach (string line in _exception.StackTrace.Split('\n')) {
+                string frame = line.Trim();
+                if (frame.StartsWith("at ")) {
+                    frame = frame.Substring("at ".Length);
+                }
+
+                if (frame.StartsWith("_stub_") ||
+                    frame.StartsWith("Microsoft.Scripting") ||
+                    frame.StartsWith("System.Runtime") ||
+                    frame.StartsWith("IronRuby.Builtins.Kernel.RaiseException") ||
+                    frame.StartsWith("IronRuby.Builtins.Kernel.MethodMissing")) {
+                    continue;
+                }
+
+                int lineNumber = 0;
+                string fileName = null;
+                string methodName = frame;
+                TryParseRubyMethodName(ref methodName, ref fileName, ref lineNumber);
+                result.Add(FormatFrame(methodName, lineNumber, fileName));
+            }
+
+            // save partial trace:
+            _backtrace = result; 
 #else
-                _catchSiteTrace = new StackTrace(true);
+            _catchSiteTrace = new StackTrace(true);
+            _throwSiteTrace = new StackTrace(_exception, true);
 #endif
         }
 
+        internal void SetInterpretedTrace(InterpreterState/*!*/ state) {
+            Debug.Assert(!_backtraceInitialized);
+
+            // we need to copy the trace since the source locations in frames above catch site could be altered by further interpretation:
+            int skipFrames = 0;
+            _backtrace = AddBacktrace(new RubyArray(), state, ref skipFrames);
+            _backtraceInitialized = true;
+        }
+
         public static RubyArray/*!*/ CreateBacktrace(IEnumerable<StackFrame>/*!*/ stackTrace, int skipFrames) {
             return AddBacktrace(new RubyArray(), stackTrace, DetectFileAccessPermissions(), ref skipFrames);
         }
 
+        public static RubyArray/*!*/ CreateBacktrace(RubyContext/*!*/ context, int skipFrames) {
+            if (context.Options.InterpretedMode) {
+                var currentFrame = InterpreterState.Current.Value;
+                Debug.Assert(currentFrame != null); 
+                return AddBacktrace(new RubyArray(), currentFrame, ref skipFrames);
+            } else {
+#if SILVERLIGHT
+                StackTrace trace = new StackTrace();
+#else
+                StackTrace trace = new StackTrace(true);
+#endif
+                return AddBacktrace(new RubyArray(), trace.GetFrames(), DetectFileAccessPermissions(), ref skipFrames);
+            }
+        }
+
         // TODO: partial trust
         private static bool DetectFileAccessPermissions() {
 #if SILVERLIGHT
@@ -117,23 +157,27 @@
 #endif
         }
 
-        private static RubyArray/*!*/ AddBacktrace(RubyArray/*!*/ result, InterpreterState/*!*/ frame) {
+        private static RubyArray/*!*/ AddBacktrace(RubyArray/*!*/ result, InterpreterState/*!*/ frame, ref int skipFrames) {
             do {
-                string methodName;
+                if (skipFrames == 0) {
+                    string methodName;
 
-                // TODO: generalize for all languages
-                if (frame.ScriptCode.LanguageContext is RubyContext) {
-                    methodName = ParseRubyMethodName(frame.Lambda.Name);
+                    // TODO: generalize for all languages
+                    if (frame.ScriptCode.LanguageContext is RubyContext) {
+                        methodName = ParseRubyMethodName(frame.Lambda.Name);
+                    } else {
+                        methodName = frame.Lambda.Name;
+                    }
+
+                    result.Add(MutableString.Create(FormatFrame(
+                        frame.ScriptCode.SourceUnit.Path,
+                        frame.CurrentLocation.Line,
+                        methodName
+                    )));
                 } else {
-                    methodName = frame.Lambda.Name;
+                    skipFrames--;
                 }
 
-                result.Add(MutableString.Create(FormatFrame(
-                    frame.ScriptCode.SourceUnit.Path, 
-                    frame.CurrentLocation.Line,
-                    methodName
-                )));
-
                 frame = frame.Caller;
             } while (frame != null);
 
@@ -166,6 +210,7 @@
                 return String.Format("{0}:{1}:in `{2}'", file, line, methodName);
             }
         }
+
         private static void GetStackFrameInfo(StackFrame/*!*/ frame, bool hasFileAccessPermission, 
             out string/*!*/ methodName, out string/*!*/ fileName, out int line) {
 
@@ -222,7 +267,15 @@
         }
 
         private static string ParseRubyMethodName(string/*!*/ lambdaName) {
-            return (lambdaName != TopLevelMethodName) ? lambdaName.Substring(0, lambdaName.IndexOf(';')) : null;
+            if (lambdaName == TopLevelMethodName) {
+                return null;
+            }
+            int idx = lambdaName.IndexOf(';');
+            if (idx < 0) {
+                return lambdaName;
+            }
+
+            return lambdaName.Substring(0, idx);
         }
 
         // TODO: better filtering in DLR
@@ -321,9 +374,5 @@
                 result._catchSiteTrace = null;
             }
         }
-
-        internal void SetInterpretedTrace(InterpreterState/*!*/ state) {
-            _interpretedTrace = state;
-        }
     }
 }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C576154
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C576154  (server)    9/30/2008 4:28 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;BacktraceFix
@@ -1113,7 +1113,9 @@
 
         // emitted (Body):
         public static void SetCurrentExceptionAndStackTrace(RubyScope/*!*/ scope, Exception/*!*/ exception) {
-            RubyExceptionData.GetInstance(exception).CaptureCatchSiteTrace();
+            if (RubyExceptionData.TryGetInstance(exception) == null) {
+                RubyExceptionData.AssociateInstance(exception).SetCompiledTrace();
+            }
             scope.ExecutionContext.CurrentException = exception;
         }
 
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Tests/irtest.bat;C576154
File: irtest.bat
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Tests/irtest.bat;C576154  (server)    9/30/2008 4:58 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Tests/irtest.bat;BacktraceFix
@@ -1,6 +1,10 @@
 @echo off
-echo Running dev unit test first
 
+echo ===================================================================
+echo == IronRuby.Tests.exe
+echo ===================================================================
+
+
 if "%ROWAN_BIN%" == "" ( 
   set ROWAN_BIN=%MERLIN_ROOT%\bin\debug
 )
@@ -13,8 +17,9 @@
   exit /b 1
 )
 
-echo ""
-echo Running dev unit tests with partial trust
+echo ===================================================================
+echo == IronRuby.Tests.exe /partial
+echo ===================================================================
 
 pushd %ROWAN_BIN%
 
@@ -24,8 +29,42 @@
 
 if NOT "%EXITLEVEL%" == "0" (
   echo ""
-  echo At least 1 of the dev unit tests with partial trust failed
+  echo At least 1 of the dev unit tests failed; args: /partial
   exit /b 1
 )
 
+echo ===================================================================
+echo == IronRuby.Tests.exe /interpret
+echo ===================================================================
 
+pushd %ROWAN_BIN%
+
+%ROWAN_BIN%\IronRuby.Tests.exe /interpret
+set EXITLEVEL=%ERRORLEVEL%
+popd
+
+if NOT "%EXITLEVEL%" == "0" (
+  echo ""
+  echo At least 1 of the dev unit tests failed; args: /interpret
+  exit /b 1
+)
+
+echo ===================================================================
+echo == IronRuby.Tests.exe /partial /interpret 
+echo ===================================================================
+
+pushd %ROWAN_BIN%
+
+%ROWAN_BIN%\IronRuby.Tests.exe /partial /interpret
+set EXITLEVEL=%ERRORLEVEL%
+popd
+
+if NOT "%EXITLEVEL%" == "0" (
+  echo ""
+  echo At least 1 of the dev unit tests failed; args: /partial /interpret
+  exit /b 1
+)
+
+echo OK
+
+
===================================================================
edit: $/Merlin_External/Languages/IronRuby/mspec/ironruby-tags/1.8/core/kernel/caller_tags.txt;C544557
File: caller_tags.txt
===================================================================
--- $/Merlin_External/Languages/IronRuby/mspec/ironruby-tags/1.8/core/kernel/caller_tags.txt;C544557  (server)    9/30/2008 3:47 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/mspec/ironruby-tags/1.8/core/kernel/caller_tags.txt;BacktraceFix
@@ -1,6 +1,4 @@
 fails:Kernel#caller returns the current call stack
-fails:Kernel#caller omits a number of frames corresponding to the parameter
-fails:Kernel#caller defaults to omitting one frame
 fails:Kernel#caller in a Proc or eval returns the definition trace of a block when evaluated in a Proc binding
 fails:Kernel#caller in a Proc or eval returns the definition trace of a Proc
 fails:Kernel#caller in a Proc or eval returns the correct caller line from a called Proc
@@ -9,8 +7,6 @@
 fails:Kernel#caller in a Proc or eval begins with the eval's sender's sender for caller(1) in eval
 fails:Kernel#caller in a Proc or eval shows the current line in the calling block twice when evaled
 fail:Kernel#caller returns the current call stack
-fail:Kernel#caller omits a number of frames corresponding to the parameter
-fail:Kernel#caller defaults to omitting one frame
 fail:Kernel#caller in a Proc or eval returns the definition trace of a block when evaluated in a Proc binding
 fail:Kernel#caller in a Proc or eval returns the definition trace of a Proc
 fail:Kernel#caller in a Proc or eval returns the correct caller line from a called Proc
===================================================================
