edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C597872
File: RubyTests.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C597872  (server)    10/13/2008 5:21 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;Misc1
@@ -344,6 +344,7 @@
                 Super1,
                 SuperParameterless1,
                 SuperParameterless2,
+                SuperParameterless3,
                 Super2,
                 SuperInDefineMethod1,
                 SuperInDefineMethod2,
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/SuperTests.cs;C597872
File: SuperTests.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/SuperTests.cs;C597872  (server)    10/13/2008 5:20 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/SuperTests.cs;Misc1
@@ -117,6 +117,28 @@
 ");
         }
 
+        public void SuperParameterless3() {
+            AssertOutput(delegate() {
+                CompilerTest(@"
+class C
+  def foo
+    puts 'C.foo'
+  end
+end
+
+class D < C
+  def foo a
+    super()
+  end
+end
+
+D.new.foo 'arg'
+");
+            }, @"
+C.foo
+");
+        }
+
         /// <summary>
         /// Calls to super with block and no arguments (was bug in parser/AST).
         /// </summary>
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C597872
File: Proc.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C597872  (server)    10/13/2008 3:15 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;Misc1
@@ -175,7 +175,7 @@
             var bfcVariable = metaBuilder.GetTemporary(typeof(BlockParam), "#bfc");
             var resultVariable = metaBuilder.GetTemporary(typeof(object), "#result");
 
-            metaBuilder.Result = Ast.Comma(
+            metaBuilder.Result = AstFactory.Comma(
                 Ast.Assign(bfcVariable,
                     (callingMethodExpression != null) ?
                         AstFactory.OpCall("CreateBfcForMethodProcCall",
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C597872
File: RubyClass.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C597872  (server)    10/13/2008 2:29 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;Misc1
@@ -238,6 +238,10 @@
             return (body != null) ? RubyUtils.EvaluateInModule(newClass, body, newClass) : newClass;
         }
 
+        public override string/*!*/ ToString() {
+            return Name;
+        }
+
         protected override bool ForEachAncestor(Func<RubyModule, bool>/*!*/ action) {
             // walk up the class hierarchy:
             for (RubyClass c = this; c != null; c = c._superClass) {
@@ -528,7 +532,7 @@
                 var methodUnwinder = metaBuilder.GetTemporary(typeof(MethodUnwinder), "#unwinder");
                 var resultVariable = metaBuilder.GetTemporary(typeof(object), "#result");
 
-                return Ast.Comma(
+                return AstFactory.Comma(
                     Ast.Assign(newInstanceVariable, invoke),
                     
                     AstFactory.MakeUserMethodBody(args.GetBlockExpression(), rfcVariable, methodUnwinder, 
@@ -545,7 +549,7 @@
                     resultVariable
                 );
             } else {
-                return Ast.Comma(
+                return AstFactory.Comma(
                     Ast.Assign(newInstanceVariable, invoke),
                     MakeInitializerCall(metaBuilder, args, newInstanceVariable),
                     newInstanceVariable
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/AstGenerator.cs;C591238
File: AstGenerator.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/AstGenerator.cs;C591238  (server)    10/13/2008 3:06 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/AstGenerator.cs;Misc1
@@ -605,7 +605,25 @@
         internal MSA.Expression/*!*/ TransformStatements(List<Expression>/*!*/ statements, ResultOperation resultOperation) {
             Assert.NotNullItems(statements);
 
-            if (statements.Count > 0) {
+            if (statements.Count == 0) {
+
+                if (resultOperation.IsIgnore) {
+                    return Ast.Empty();
+                } else if (resultOperation.Variable != null) {
+                    return Ast.Assign(resultOperation.Variable, Ast.Null(resultOperation.Variable.Type));
+                } else {
+                    return AstUtils.Return(Ast.Null(), SourceSpan.None);
+                }
+
+            } else if (statements.Count == 1) {
+
+                if (resultOperation.IsIgnore) {
+                    return statements[0].Transform(this);
+                } else {
+                    return statements[0].TransformResult(this, resultOperation);
+                }
+
+            } else {
                 MSA.Expression[] result = new MSA.Expression[statements.Count];
 
                 // transform all but the last statement if it is an expression stmt:
@@ -620,14 +638,6 @@
                 }
 
                 return Ast.Block(new ReadOnlyCollection<MSA.Expression>(result));
-            } else {
-                if (resultOperation.IsIgnore) {
-                    return Ast.Empty();
-                } else if (resultOperation.Variable != null) {
-                    return Ast.Assign(resultOperation.Variable, Ast.Null(resultOperation.Variable.Type));
-                } else {
-                    return AstUtils.Return(Ast.Null(), SourceSpan.None);
-                }
             }
         }
 
@@ -679,7 +689,7 @@
         }
 
         internal MSA.Expression/*!*/ DebugMark(MSA.Expression/*!*/ expression, string/*!*/ marker) {
-            return _debugCompiler ? Ast.Comma(AstFactory.OpCall("X", Ast.Constant(marker)), expression) : expression;
+            return _debugCompiler ? AstFactory.Comma(AstFactory.OpCall("X", Ast.Constant(marker)), expression) : expression;
         }
 
         internal string/*!*/ EncodeMethodName(string/*!*/ name, SourceSpan location) {
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/AstFactory.cs;C591238
File: AstFactory.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/AstFactory.cs;C591238  (server)    10/13/2008 3:01 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/AstFactory.cs;Misc1
@@ -15,6 +15,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.Reflection;
 using System.Scripting;
@@ -88,6 +89,26 @@
             return AstUtils.Infinite(Ast.Block(body), @break, @continue);
         }
 
+        public static MSA.Expression/*!*/ Block(IList<MSA.Expression/*!*/>/*!*/ expressions) {
+            switch (expressions.Count) {
+                case 0: return Ast.Empty();
+                case 1: return expressions[0];
+                default: return Ast.Block(new ReadOnlyCollection<MSA.Expression>(expressions));
+            }
+        }
+
+        public static MSA.Expression/*!*/ Comma(params MSA.Expression/*!*/[]/*!*/ expressions) {
+            return Comma((IList<MSA.Expression>)expressions);
+        }
+
+        public static MSA.Expression/*!*/ Comma(IList<MSA.Expression/*!*/>/*!*/ expressions) {
+            switch (expressions.Count) {
+                case 0: return Ast.Empty();
+                case 1: return expressions[0];
+                default: return Ast.Comma(new ReadOnlyCollection<MSA.Expression>(expressions));
+            }
+        }
+
         public static MSA.Expression/*!*/ Box(MSA.Expression/*!*/ expression) {
             return Ast.ConvertHelper(expression, ObjectType);
         }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockDefinition.cs;C590991
File: BlockDefinition.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockDefinition.cs;C590991  (server)    10/13/2008 3:05 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockDefinition.cs;Misc1
@@ -118,7 +118,7 @@
 
             int firstStatementLine = _body.Count > 0 ? _body[0].Location.Start.Line : Location.End.Line;
 
-            MSA.Expression paramInit = Ast.Block(MakeParametersInitialization(gen, parameters));
+            MSA.Expression paramInit = AstFactory.Block(MakeParametersInitialization(gen, parameters));
             MSA.Expression blockUnwinder = scope.DefineHiddenVariable("#unwinder", typeof(BlockUnwinder));
             
             MSA.Expression body = Ast.Block(
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Body.cs;C591238
File: Body.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Body.cs;C591238  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Body.cs;Misc1
@@ -70,7 +70,7 @@
             if (HasExceptionHandling) {
                 MSA.Expression resultVariable = gen.CurrentScope.DefineHiddenVariable("#block-result", typeof(object));
 
-                return Ast.Comma(
+                return AstFactory.Comma(
                     TransformExceptionHandling(gen, ResultOperation.Store(resultVariable)),
                     resultVariable
                 );
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs;C576154
File: SourceUnitTree.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs;C576154  (server)    10/13/2008 3:00 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs;Misc1
@@ -170,7 +170,7 @@
                 RubyExceptionData.TopLevelMethodName,
                 parameters, 
                 typeof(object),
-                scope.CreateScope(Ast.Block(body)),
+                scope.CreateScope(AstFactory.Block(body)),
                 MSA.Expression.Annotate(gen.SourceUnit.Information)
             );
         }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs;C584394
File: RescueClause.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs;C584394  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs;Misc1
@@ -87,7 +87,7 @@
 
                     // (temps[0] = type[0], ..., temps[n] == type[n], condition)
                     exprs[exprs.Length - 1] = condition;
-                    condition = Ast.Comma(exprs); 
+                    condition = AstFactory.Comma(exprs); 
                 }
                 
             } else {
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/ModuleDeclaration.cs;C587646
File: ModuleDeclaration.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/ModuleDeclaration.cs;C587646  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/ModuleDeclaration.cs;Misc1
@@ -101,7 +101,7 @@
             //   self = DefineModule/Class(... parent scope here ...)
             //   <body>
             // end
-            MSA.Expression result = Ast.Comma(
+            MSA.Expression result = AstFactory.Comma(
                 gen.DebugMarker(debugString),
                 Ast.Assign(selfVariable, definition),
                 scope.CreateScope(
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/CaseExpression.cs;C590991
File: CaseExpression.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/CaseExpression.cs;C590991  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/CaseExpression.cs;Misc1
@@ -106,7 +106,7 @@
             MSA.Expression resultVariable = gen.CurrentScope.DefineHiddenVariable("#case-compare-result", typeof(bool));
 
             MSA.LabelTarget label = Ast.Label();
-            return Ast.Comma(
+            return AstFactory.Comma(
                 Ast.Assign(enumVariable, Ast.Call(
                     AstFactory.OpCall("Unsplat", AstFactory.Box(array)),
                     typeof(IEnumerable<object>).GetMethod("GetEnumerator"))
@@ -181,7 +181,7 @@
             }
 
             if (_value != null) {
-                result = Ast.Comma(
+                result = AstFactory.Comma(
                     Ast.Assign(value, Ast.Convert(_value.TransformRead(gen), typeof(object))),
                     result
                 );
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalJumpExpression.cs;C584394
File: ConditionalJumpExpression.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalJumpExpression.cs;C584394  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalJumpExpression.cs;Misc1
@@ -62,7 +62,7 @@
             MSA.Expression transformedCondition = AstFactory.Box(_condition.TransformRead(gen));
             MSA.Expression tmpVariable = gen.CurrentScope.DefineHiddenVariable("#tmp_cond", transformedCondition.Type);
             
-            return Ast.Comma(
+            return AstFactory.Comma(
                 Ast.Assign(tmpVariable, transformedCondition),
                 AstUtils.IfThen(
                     AstFactory.OpCall(_negateCondition ? "IsFalse" : "IsTrue", tmpVariable),
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;C591238
File: MethodCall.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;C591238  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;Misc1
@@ -113,7 +113,7 @@
             }
 
             if (assignmentRhsArgument != null) {
-                result = Ast.Comma(result, rhsVariable);
+                result = AstFactory.Comma(result, rhsVariable);
             }
 
             return result;
@@ -130,7 +130,7 @@
 
             MSA.LabelTarget label = Ast.Label();
                     
-            return Ast.Comma(
+            return AstFactory.Comma(
                 Ast.Assign(blockArgVariable, Ast.Convert(transformedBlock, blockArgVariable.Type)),
                 AstFactory.Infinite(label, null,
                     (!isBlockDefinition) ?
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;C597872
File: SuperCall.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;C597872  (server)    10/13/2008 5:12 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;Misc1
@@ -61,7 +61,7 @@
             }
 
             // arguments:
-            if (Arguments != null && (Arguments.Expressions != null || Arguments.Array != null || Arguments.Maplets != null)) {
+            if (Arguments != null && (Arguments.Expressions != null || Arguments.Array != null || Arguments.Maplets != null || Arguments.IsEmpty)) {
                 if (Arguments.Block != null) {
                     transformedBlock = Arguments.Block.Transform(gen);
                     isBlockDefinition = Arguments.Block.IsDefinition;
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/WhileLoopExpression.cs;C590991
File: WhileLoopExpression.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/WhileLoopExpression.cs;C590991  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/WhileLoopExpression.cs;Misc1
@@ -120,7 +120,7 @@
                 );
             }
 
-            return Ast.Comma(loop, resultVariable);
+            return AstFactory.Comma(loop, resultVariable);
         }
     }
 }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/YieldCall.cs;C584394
File: YieldCall.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/YieldCall.cs;C584394  (server)    10/13/2008 3:16 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/YieldCall.cs;Misc1
@@ -53,7 +53,7 @@
                 postYield = AstFactory.OpCall("MethodYield", gen.CurrentRfcVariable, bfcVariable, resultVariable);
             }
 
-            return Ast.Comma(
+            return AstFactory.Comma(
                 gen.DebugMarker("#RB: yield begin"),
 
                 Ast.Assign(bfcVariable, AstFactory.OpCall("CreateBfcForYield", gen.MakeMethodBlockParameterRead())),
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/CompoundLeftValue.cs;C588015
File: CompoundLeftValue.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/CompoundLeftValue.cs;C588015  (server)    10/13/2008 3:14 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/CompoundLeftValue.cs;Misc1
@@ -14,6 +14,7 @@
  * ***************************************************************************/
 
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.Reflection;
 using System.Scripting;
@@ -186,7 +187,7 @@
             }
 
             writes.Add(result);
-            return Ast.Comma(writes);
+            return AstFactory.Comma(new ReadOnlyCollection<MSA.Expression>(writes));
         }
 
         internal BlockSignatureAttributes GetBlockSignatureAttributes() {
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/AliasStatement.cs;C587646
File: AliasStatement.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/AliasStatement.cs;C587646  (server)    10/13/2008 3:17 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/AliasStatement.cs;Misc1
@@ -42,7 +42,7 @@
         }
 
         internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) {
-            return Ast.Comma(Transform(gen), Ast.Null());
+            return AstFactory.Comma(Transform(gen), Ast.Null());
         }
     }
 }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/UndefineStatement.cs;C587646
File: UndefineStatement.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/UndefineStatement.cs;C587646  (server)    10/13/2008 3:17 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/UndefineStatement.cs;Misc1
@@ -41,7 +41,7 @@
         }
 
         internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) {
-            return Ast.Comma(Transform(gen), Ast.Null());
+            return AstFactory.Comma(Transform(gen), Ast.Null());
         }
     }
 }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Hosting/RubyOptionsParser.cs;C576154
File: RubyOptionsParser.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Hosting/RubyOptionsParser.cs;C576154  (server)    10/2/2008 12:48 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Hosting/RubyOptionsParser.cs;Misc1
@@ -78,7 +78,17 @@
         protected override void ParseArgument(string arg) {
             ContractUtils.RequiresNotNull(arg, "arg");
 
-            switch(arg) {
+            int colon = arg.IndexOf(':');
+            string optionName, optionValue;
+            if (colon >= 0) {
+                optionName = arg.Substring(0, colon);
+                optionValue = arg.Substring(colon + 1);
+            } else {
+                optionName = arg;
+                optionValue = null;
+            }
+
+            switch (optionName) {
                 case "-w":
                     LanguageSetup.Options["ShowWarnings"] = RuntimeHelpers.True;
                     break;
@@ -115,7 +125,7 @@
                     break;
 
                 case "-save":
-                    LanguageSetup.Options["SaveToDisk"] = RuntimeHelpers.True;
+                    LanguageSetup.Options["SavePath"] = optionValue ?? AppDomain.CurrentDomain.BaseDirectory;
                     break;
 
                 case "-load":
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;C589278
File: Loader.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;C589278  (server)    10/2/2008 11:53 AM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;Misc1
@@ -164,7 +164,7 @@
             Utils.Log("LOADING", "LOADER");
 
             ScriptCode[] codes = ScriptCode.LoadFromAssembly(_executionContext.Context.DomainManager,
-                Assembly.LoadFrom("IronRubyApplication.dll")
+                Assembly.Load(Path.GetFileName(_executionContext.Context.RubyOptions.MainFile))
             );
 
             for (int i = 0; i < codes.Length; i++) {
@@ -177,10 +177,13 @@
         }
 
         internal void SaveCompiledCode() {
-            if (_executionContext.Context.RubyOptions.SaveToDisk) {
+            string savePath = _executionContext.Context.RubyOptions.SavePath;
+            if (savePath != null) {
                 lock (_compiledFileMutex) {
-                    Utils.Log("SAVING", "LOADER");
+                    var assemblyPath = Path.Combine(savePath, Path.GetFileName(_executionContext.Context.RubyOptions.MainFile) + ".dll");
 
+                    Utils.Log(String.Format("SAVING to {0}", Path.GetFullPath(assemblyPath)), "LOADER");
+
                     // TODO: allocate eagerly (as soon as config gets fixed)
                     if (_compiledFiles == null) {
                         _compiledFiles = new Dictionary<string, CompiledFile>();
@@ -192,7 +195,7 @@
                         codes[i++] = file.CompiledCode;
                     }
 
-                    ScriptCode.SaveToAssembly("IronRubyApplication.dll", codes);
+                    ScriptCode.SaveToAssembly(assemblyPath, codes);
                 }
             }
         }
@@ -213,7 +216,7 @@
         }
 
         private void AddCompiledFile(string/*!*/ fullPath, ScriptCode/*!*/ compiledCode) {
-            if (_executionContext.Context.RubyOptions.SaveToDisk) {
+            if (_executionContext.Context.RubyOptions.SavePath != null) {
                 lock (_compiledFileMutex) {
                     // TODO: allocate eagerly (as soon as config gets fixed)
                     if (_compiledFiles == null) {
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C589278
File: RubyContext.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C589278  (server)    10/13/2008 4:09 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;Misc1
@@ -165,6 +165,16 @@
             ContractUtils.RequiresNotNull(errorSink, "errorSink");
             ContractUtils.Requires(sourceUnit.LanguageContext == this, "Language mismatch.");
 
+#if DEBUG
+            if (RubyOptions.LoadFromDisk) {
+                string code;
+                Utils.Log(String.Format("{0} {1}", Options.InterpretedMode ? "interpreting" : "compiling", sourceUnit.Path ??
+                    ((code = sourceUnit.GetCode()).Length < 100 ? code : code.Substring(0, 100))
+                    .Replace('\r', ' ').Replace('\n', ' ')
+                ), "COMPILER");
+            }
+#endif
+            
             LambdaExpression lambda = ParseSourceCode(sourceUnit, (RubyCompilerOptions)options, errorSink);
             if (lambda == null) {
                 return null;
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;C586180
File: RubyExceptionData.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;C586180  (server)    10/2/2008 10:28 AM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptionData.cs;Misc1
@@ -65,12 +65,13 @@
 
 #if SILVERLIGHT // TODO: StackTrace.ctor(exception) security critical
             // throw-site trace is built already:
-            result = _backtrace;
+            result = _backtrace ?? new RubyArray();
 #else
             result = new RubyArray();
             if (_throwSiteTrace == null) {
                 SetCompiledTrace();
             }
+
             AddBacktrace(result, _throwSiteTrace.GetFrames(), hasFileAccessPermissions, skipFrames);
 #endif
             if (_catchSiteTrace != null) {
@@ -269,9 +270,10 @@
         }
 
         private static string ParseRubyMethodName(string/*!*/ lambdaName) {
-            if (lambdaName == TopLevelMethodName) {
+            if (lambdaName.StartsWith(TopLevelMethodName)) {
                 return null;
             }
+
             int idx = lambdaName.IndexOf(';');
             if (idx < 0) {
                 return lambdaName;
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOptions.cs;C576154
File: RubyOptions.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOptions.cs;C576154  (server)    10/2/2008 12:46 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOptions.cs;Misc1
@@ -28,7 +28,7 @@
         private readonly string _mainFile;
         private readonly bool _showWarnings;
         private readonly bool _enableTracing;
-        private readonly bool _saveToDisk;
+        private readonly string _savePath;
         private readonly bool _loadFromDisk;
         private readonly bool _hasSearchPaths;
         private readonly RubyCompatibility _compatibility;
@@ -49,8 +49,8 @@
             get { return _enableTracing; }
         }
 
-        public bool SaveToDisk {
-            get { return _saveToDisk; }
+        public string SavePath {
+            get { return _savePath; }
         }
 
         public bool LoadFromDisk {
@@ -76,7 +76,7 @@
             _mainFile = GetOption(options, "MainFile", (string)null);
             _showWarnings = GetOption(options, "ShowWarnings", false);
             _enableTracing = GetOption(options, "EnableTracing", false);
-            _saveToDisk = GetOption(options, "SaveToDisk", false);
+            _savePath = GetOption(options, "SavePath", (string)null);
             _loadFromDisk = GetOption(options, "LoadFromDisk", false);
             _libraryPaths = GetStringCollectionOption(options, "LibraryPaths", ';', ',') ?? new ReadOnlyCollection<string>(new[] { "." });
             _hasSearchPaths = GetOption<object>(options, "SearchPaths", null) != null;
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallAction.cs;C587646
File: RubyCallAction.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallAction.cs;C587646  (server)    10/1/2008 5:59 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallAction.cs;Misc1
@@ -87,7 +87,7 @@
 
         Expression/*!*/ IExpressionSerializable.CreateExpression() {
             return Expression.Call(
-                typeof(RubyCallAction).GetMethod("Make", new Type[] { typeof(string), typeof(RubyCallAction) }),
+                typeof(RubyCallAction).GetMethod("Make", new Type[] { typeof(string), typeof(RubyCallSignature) }),
                 Expression.Constant(_methodName),
                 _signature.CreateExpression()
             );
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallSignature.cs;C576154
File: RubyCallSignature.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallSignature.cs;C576154  (server)    10/1/2008 5:57 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyCallSignature.cs;Misc1
@@ -90,8 +90,8 @@
         }
 
         internal Expression/*!*/ CreateExpression() {
-            return Ast.New(typeof(RubyCallSignature).GetConstructor(new[] { typeof(int), typeof(bool), typeof(bool) }),
-                Ast.Constant(_argumentCount), Ast.Constant(_hasSplattedArgument), Ast.Constant(_hasBlock)
+            return Ast.New(typeof(RubyCallSignature).GetConstructor(new[] { typeof(int), typeof(bool), typeof(bool), typeof(bool) }),
+                Ast.Constant(_argumentCount), Ast.Constant(_hasSplattedArgument), Ast.Constant(_hasBlock), Ast.Constant(_hasRhsArgument)
             );
         }
 
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C597872
File: RubyMethodGroupInfo.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C597872  (server)    10/13/2008 3:17 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;Misc1
@@ -266,7 +266,7 @@
                 if (bfcVariable != null) {
                     ParameterExpression methodUnwinder = metaBuilder.GetTemporary(typeof(MethodUnwinder), "#unwinder");
 
-                    targetExpression = Ast.Comma(
+                    targetExpression = AstFactory.Comma(
                         AstUtils.Try(
                             targetExpression
                         ).Filter(typeof(MethodUnwinder), methodUnwinder, AstFactory.OpCall("IsProcConverterTarget", bfcVariable, methodUnwinder),
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/SuperCallAction.cs;C591746
File: SuperCallAction.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/SuperCallAction.cs;C591746  (server)    10/2/2008 11:08 AM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/SuperCallAction.cs;Misc1
@@ -21,6 +21,7 @@
 using Microsoft.Scripting;
 using Microsoft.Scripting.Actions;
 using Microsoft.Scripting.Utils;
+using Microsoft.Scripting.Runtime;
 
 using IronRuby.Builtins;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
@@ -28,8 +29,8 @@
 using AstFactory = IronRuby.Compiler.Ast.AstFactory;
 
 namespace IronRuby.Runtime.Calls {
-    
-    public sealed class SuperCallAction : MetaAction, IEquatable<SuperCallAction> {
+
+    public sealed class SuperCallAction : MetaAction, IExpressionSerializable, IEquatable<SuperCallAction> {
         private readonly RubyCallSignature _signature;
         private readonly int _lexicalScopeId;
 
@@ -127,5 +128,17 @@
         }
 
         #endregion
+
+        #region IExpressionSerializable Members
+
+        Expression/*!*/ IExpressionSerializable.CreateExpression() {
+            return Expression.Call(
+                typeof(SuperCallAction).GetMethod("Make", new Type[] { typeof(RubyCallSignature), typeof(int) }),
+                _signature.CreateExpression(),
+                Expression.Constant(_lexicalScopeId)
+            );
+        }
+
+        #endregion
     }
 }
===================================================================
