edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Parser/ParserTests.cs;C641155
File: ParserTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Parser/ParserTests.cs;C641155  (server)    11/17/2008 7:26 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Parser/ParserTests.cs;MiscFixesA2
@@ -683,7 +683,6 @@
         }
 
         private void AstLocations1() {
-#if TODO
             // DumpExpression uses private reflection:
             if (_driver.PartialTrust) return;
 
@@ -703,25 +702,28 @@
             parser.TokenSink = (token, span) => { tokens.Add(new KeyValuePair<SourceSpan, Tokens>(span, token)); };
             var ast = parser.Parse(sourceUnit, options, Context.RuntimeErrorSink);
 
-            var lambda = CallSiteTracer.Transform(ast, sourceUnit, options);
+            const int Id = 0x12345678;
+
+            var lambda = CallSiteTracer.Transform<DlrMainCallTarget>(ast, sourceUnit, options, Id);
             var code = new ScriptCode(lambda, sourceUnit);
 
             var locations = new List<int>();
-            CallSiteTracer.Register((context, args, result, location) => {
+            CallSiteTracer.Register((context, args, result, id, location) => {
                 locations.Add(location);
+                Debug.Assert(id == Id);
+                Debug.Assert(location > 0);
 
-                Console.WriteLine("-- {0} ---------", location);
-                Console.WriteLine(this);
-                Console.WriteLine(AstUtils.DumpExpression(result.Restrictions.ToExpression()));
-                Console.WriteLine();
-                Console.WriteLine(AstUtils.DumpExpression(result.Expression));
-                Console.WriteLine("----------------");
+                //Console.WriteLine("-- {0} ---------", location);
+                //Console.WriteLine(this);
+                //Console.WriteLine(AstUtils.DumpExpression(result.Restrictions.ToExpression()));
+                //Console.WriteLine();
+                //Console.WriteLine(AstUtils.DumpExpression(result.Expression));
+                //Console.WriteLine("----------------");
             });
 
             code.Run();
 
             Debug.Assert(locations.Count == 4 && locations[0] == 31 && locations[1] == 19 && locations[2] == 41 && locations[3] == 19);
-#endif
         }
 
         #region Helpers
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/EvalEntryPointDelegate.cs;C533798
File: EvalEntryPointDelegate.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/EvalEntryPointDelegate.cs;C533798  (server)    11/17/2008 10:38 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/EvalEntryPointDelegate.cs;MiscFixesA2
@@ -25,7 +25,7 @@
 using IronRuby.Runtime.Calls;
 
 namespace IronRuby.Runtime {
-    internal delegate object EvalEntryPointDelegate(
+    public delegate object EvalEntryPointDelegate(
         RubyScope scope,
         object self,
         RubyModule module,
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;C633889
File: Loader.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;C633889  (server)    11/17/2008 10:38 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;MiscFixesA2
@@ -532,7 +532,7 @@
             return null;
         }
 
-        private static readonly string[] _LibraryExtensions = new string[] { ".dll", ".so" };
+        private static readonly string[] _LibraryExtensions = new string[] { ".dll", ".so", ".exe" };
 
         private static bool IsKnownExtension(string/*!*/ extension, string[]/*!*/ knownExtensions) {
             return extension.Length > 0 && Array.BinarySearch(knownExtensions, extension, DlrConfiguration.FileExtensionComparer) >= 0;
@@ -660,19 +660,16 @@
         #region IronRuby Libraries
 
         /// <exception cref="LoadError"></exception>
-        internal bool TryLoadBuiltins() {
+        internal void LoadBuiltins() {
             Type initializerType;
             try {
                 Assembly assembly = _context.DomainManager.Platform.LoadAssembly(GetIronRubyAssemblyLongName("IronRuby.Libraries"));
                 initializerType = assembly.GetType(LibraryInitializer.GetBuiltinsFullTypeName());
-            } catch (FileNotFoundException) {
-                return false;
             } catch (Exception e) {
                 throw new LoadError(e.Message, e);
             }
 
             LoadLibrary(initializerType, true);
-            return true;
         }
 
         public static string/*!*/ GetIronRubyAssemblyLongName(string/*!*/ simpleName) {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C641155
File: RubyContext.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C641155  (server)    11/17/2008 10:38 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;MiscFixesA2
@@ -386,13 +386,8 @@
             // TODO:
             Interlocked.CompareExchange(ref _Default, this, null);
 
-            if (!_loader.TryLoadBuiltins()) {
-                Action<RubyModule> empty = delegate(RubyModule/*!*/ module) { };
-                RegisterPrimitives(empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty);
-            } else {
-                // TODO:
-                Debug.Assert(_exceptionClass != null && _standardErrorClass != null && _nilClass != null);
-            }
+            _loader.LoadBuiltins();
+            Debug.Assert(_exceptionClass != null && _standardErrorClass != null && _nilClass != null);
 
             Debug.Assert(_classClass != null && _moduleClass != null);
 
@@ -2031,6 +2026,17 @@
             return new RubyGetMemberBinder(this, name);
         }
 
+        public override InvokeMemberBinder/*!*/ CreateCallBinder(string name, bool ignoreCase, params ArgumentInfo[] arguments) {
+            if (RubyCallSignature.HasNamedArgument(arguments)) {
+                return base.CreateCallBinder(name, ignoreCase, arguments);
+            }
+            // TODO:
+            if (ignoreCase) {
+                throw new NotSupportedException("Ignore-case lookup not supported");
+            }
+            return new RubyInvokeMemberBinder(this, name, arguments);
+        }
+
         public override CreateInstanceBinder/*!*/ CreateCreateBinder(params ArgumentInfo[]/*!*/ arguments) {
             if (RubyCallSignature.HasNamedArgument(arguments)) {
                 return base.CreateCreateBinder(arguments);
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CallSiteTracer.cs;C633889
File: CallSiteTracer.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CallSiteTracer.cs;C633889  (server)    11/17/2008 10:38 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CallSiteTracer.cs;MiscFixesA2
@@ -38,33 +38,43 @@
     public sealed class CallSiteTracer {
         /// <summary>
         /// Registers a call site tracer associated with the current thread.
+        /// Traces is called for each rule created for sites with arguments:
+        /// - context meta-object (RubyScope or RubyContext)
+        /// - argument meta-objects
+        /// - resulting meta-object
+        /// - sourceId passed to Transform method
+        /// - site offset within the source code
         /// </summary>
-        public static void Register(Action<MetaObject, MetaObject[], MetaObject, int>/*!*/ tracer) {
+        public static void Register(Action<MetaObject, MetaObject[], MetaObject, int, int>/*!*/ tracer) {
             ContractUtils.RequiresNotNull(tracer, "tracer");
             TracingRubyCallAction.Tracer = tracer;
         }
 
-        public static MSA.Expression<DlrMainCallTarget>/*!*/ Transform(SourceUnitTree/*!*/ ast, SourceUnit/*!*/ sourceUnit,
-            RubyCompilerOptions/*!*/ options) {
+        public static MSA.Expression<T>/*!*/ Transform<T>(SourceUnitTree/*!*/ ast, SourceUnit/*!*/ sourceUnit,
+            RubyCompilerOptions/*!*/ options, int sourceId) {
 
             var context = (RubyContext)sourceUnit.LanguageContext;
             var siteNodes = new Dictionary<MSA.DynamicExpression, SourceSpan>();
             var generator = new TraceAstGenerator(siteNodes, context, options, sourceUnit, ast.Encoding);
-            var lambda = ast.Transform<DlrMainCallTarget>(generator);
+            var lambda = ast.Transform<T>(generator);
 
-            return (MSA.Expression<DlrMainCallTarget>)new CallSiteTraceInjector(siteNodes).Visit(lambda);
+            return (MSA.Expression<T>)new CallSiteTraceInjector(siteNodes, sourceId).Visit(lambda);
         }
 
         public sealed class TracingRubyCallAction : RubyCallAction, IExpressionSerializable {
             [ThreadStatic]
-            private static int _CurrentSiteLocation;
+            private static int _Id;
 
             [ThreadStatic]
-            internal static Action<MetaObject, MetaObject[], MetaObject, int> Tracer;
+            private static int _Location;
 
+            [ThreadStatic]
+            internal static Action<MetaObject, MetaObject[], MetaObject, int, int> Tracer;
+
             [Emitted]
-            public static T EnterCallSite<T>(T result, int offset) {
-                _CurrentSiteLocation = offset;
+            public static T EnterCallSite<T>(T result, int id, int location) {
+                _Id = id;
+                _Location = location;
                 return result;
             }
 
@@ -78,8 +88,9 @@
 
             public override MetaObject/*!*/ Bind(MetaObject/*!*/ context, MetaObject/*!*/[]/*!*/ args) {
                 var result = base.Bind(context, args);
-                if (Tracer != null) {
-                    Tracer(context, args, result, _CurrentSiteLocation);
+                var tracer = Tracer;
+                if (tracer != null) {
+                    tracer(context, args, result, _Id, _Location);
                 }
                 return result;
             }
@@ -106,9 +117,11 @@
 
         private sealed class CallSiteTraceInjector : MSA.ExpressionVisitor {
             private readonly Dictionary<MSA.DynamicExpression, SourceSpan>/*!*/ _sites;
+            private readonly int _sourceId;
 
-            public CallSiteTraceInjector(Dictionary<MSA.DynamicExpression, SourceSpan>/*!*/ sites) {
+            public CallSiteTraceInjector(Dictionary<MSA.DynamicExpression, SourceSpan>/*!*/ sites, int sourceId) {
                 _sites = sites;
+                _sourceId = sourceId;
             }
 
             protected override MSA.Expression/*!*/ VisitDynamic(MSA.DynamicExpression/*!*/ node) {
@@ -125,6 +138,7 @@
 
                     args[last] = typeof(TracingRubyCallAction).GetMethod("EnterCallSite").MakeGenericMethod(args[last].Type).OpCall(
                         args[last],
+                        Ast.Constant(_sourceId), 
                         Ast.Constant(_sites[node].Start.Index)
                     );
 
===================================================================
