edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/ClassInitGenerator/Program.cs;C436555 File: Program.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/ClassInitGenerator/Program.cs;C436555 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/ClassInitGenerator/Program.cs;RubyLibs @@ -675,15 +675,17 @@ _output.Write("Context.StandardErrorClass = "); } +#if TODO string extensionType = "null"; if (def.Trait != def.Extends) { extensionType = string.Format("typeof({0})", TypeName(def.Trait)); } + pass: extensionType, +#endif - _output.Write("Define{6}Class(\"{0}\", typeof({1}), {2}, {3}, {4}, {5}, ", + _output.Write("Define{5}Class(\"{0}\", typeof({1}), {2}, {3}, {4}, ", def.QualifiedName, TypeName(def.Extends), - extensionType, (def.HasInstanceInitializer) ? String.Format("new {0}(Load{1}_Instance)", TypeActionOfRubyModule, def.Id) : "null", (def.HasClassInitializer) ? String.Format("new {0}(Load{1}_Class)", TypeActionOfRubyModule, def.Id) : "null", def.Super.RefName, =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/LoaderTests.cs;C436555 File: LoaderTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/LoaderTests.cs;C436555 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/LoaderTests.cs;RubyLibs @@ -29,6 +29,7 @@ using Ruby.Runtime; using System.Reflection; using Ruby.Builtins; +using Microsoft.Scripting.Utils; namespace Ruby.Tests { public partial class Tests { @@ -146,7 +147,18 @@ public class TestLibraryInitializer1 : LibraryInitializer { protected override void LoadModules() { Context.ObjectClass.SetConstant("TEST_LIBRARY", "hello from library"); + DefineGlobalModule("Object", typeof(Object), ObjectMonkeyPatch, null, RubyModule.EmptyArray); } + + private void ObjectMonkeyPatch(RubyModule/*!*/ module) { + Debug.Assert(module == Context.ObjectClass); + + module.DefineMethod("object_monkey", 0x9, new System.Delegate[] { + new Function(delegate(object obj) { + return "This is monkey!"; + }), + }); + } } public void LibraryLoader1() { @@ -156,9 +168,11 @@ CompilerTest(@" require($lib_name) puts TEST_LIBRARY +puts object_monkey "); }, @" hello from library +This is monkey! "); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializer.Generated.cs;C440810 File: Initializer.Generated.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializer.Generated.cs;C440810 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializer.Generated.cs;RubyLibs @@ -30,11 +30,11 @@ // Skipped primitive: Kernel DefineGlobalModule("Marshal", typeof(Ruby.Builtins.RubyMarshal), new System.Action(LoadMarshal_Instance), new System.Action(LoadMarshal_Class), Ruby.Builtins.RubyModule.EmptyArray); DefineGlobalModule("Math", typeof(Ruby.Builtins.Math), new System.Action(LoadMath_Instance), new System.Action(LoadMath_Class), Ruby.Builtins.RubyModule.EmptyArray); - DefineClass("Microsoft::Scripting::Actions::TypeTracker", typeof(Microsoft.Scripting.Actions.TypeTracker), typeof(Ruby.Runtime.TypeTrackerOps), new System.Action(LoadMicrosoft__Scripting__Actions__TypeTracker_Instance), null, classRef0, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineClass("Microsoft::Scripting::Actions::TypeTracker", typeof(Microsoft.Scripting.Actions.TypeTracker), new System.Action(LoadMicrosoft__Scripting__Actions__TypeTracker_Instance), null, classRef0, Ruby.Builtins.RubyModule.EmptyArray, null); Ruby.Builtins.RubyModule def16 = DefineGlobalModule("OpenSSL", typeof(Ruby.StandardLibrary.OpenSSL), null, null, Ruby.Builtins.RubyModule.EmptyArray); Ruby.Builtins.RubyModule def17 = DefineModule("OpenSSL::Digest", typeof(Ruby.StandardLibrary.OpenSSL.DigestFactory), null, null, Ruby.Builtins.RubyModule.EmptyArray); Ruby.Builtins.RubyModule def35 = DefineGlobalModule("Precision", typeof(Ruby.Builtins.Precision), new System.Action(LoadPrecision_Instance), new System.Action(LoadPrecision_Class), Ruby.Builtins.RubyModule.EmptyArray); - DefineClass("System::Type", typeof(System.Type), typeof(Ruby.Runtime.TypeOps), new System.Action(LoadSystem__Type_Instance), null, classRef2, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineClass("System::Type", typeof(System.Type), new System.Action(LoadSystem__Type_Instance), null, classRef2, Ruby.Builtins.RubyModule.EmptyArray, null); Ruby.Builtins.RubyModule def20 = DefineGlobalModule("Zlib", typeof(Ruby.StandardLibrary.Zlib), new System.Action(LoadZlib_Instance), null, Ruby.Builtins.RubyModule.EmptyArray); // Skipped primitive: __ClassSingletonSingleton #if !SILVERLIGHT @@ -48,10 +48,10 @@ Ruby.Builtins.RubyModule def47 = DefineModule("System::Collections::IEnumerable", typeof(System.Collections.IEnumerable), new System.Action(LoadSystem__Collections__IEnumerable_Instance), null, new Ruby.Builtins.RubyModule[] {def28, }); Ruby.Builtins.RubyModule def40 = DefineModule("System::Collections::IList", typeof(System.Collections.IList), new System.Action(LoadSystem__Collections__IList_Instance), null, new Ruby.Builtins.RubyModule[] {def28, }); DefineModule("System::IComparable", typeof(System.IComparable), new System.Action(LoadSystem__IComparable_Instance), null, new Ruby.Builtins.RubyModule[] {def38, }); - DefineGlobalClass("Time", typeof(System.DateTime), typeof(Ruby.Builtins.TimeOps), new System.Action(LoadTime_Instance), new System.Action(LoadTime_Class), classRef1, new Ruby.Builtins.RubyModule[] {def38, }, new System.Delegate[] { + DefineGlobalClass("Time", typeof(System.DateTime), new System.Action(LoadTime_Instance), new System.Action(LoadTime_Class), classRef1, new Ruby.Builtins.RubyModule[] {def38, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.TimeOps.Create), }); - DefineGlobalClass("Array", typeof(Ruby.Builtins.RubyArray), typeof(Ruby.Builtins.ArrayOps), new System.Action(LoadArray_Instance), new System.Action(LoadArray_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { + DefineGlobalClass("Array", typeof(Ruby.Builtins.RubyArray), new System.Action(LoadArray_Instance), new System.Action(LoadArray_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ArrayOps.CreateArray), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ArrayOps.CreateArray), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ArrayOps.CreateArray), @@ -60,38 +60,38 @@ new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ArrayOps.CreateArray), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ArrayOps.CreateArray), }); - DefineGlobalClass("Binding", typeof(Ruby.Builtins.Binding), typeof(Ruby.Builtins.BindingOps), null, null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("ClrString", typeof(System.String), typeof(Ruby.Builtins.StringOps), new System.Action(LoadClrString_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def47, }, null); - Ruby.Builtins.RubyClass def13 = DefineClass("Digest::Class", typeof(Ruby.StandardLibrary.Digest.Class), null, null, new System.Action(LoadDigest__Class_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def14, }, null); - DefineGlobalClass("Dir", typeof(Ruby.Builtins.RubyDir), null, new System.Action(LoadDir_Instance), new System.Action(LoadDir_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, null); - Ruby.Builtins.RubyClass def39 = Context.ExceptionClass = DefineGlobalClass("Exception", typeof(System.Exception), typeof(Ruby.Builtins.ExceptionOps), new System.Action(LoadException_Instance), new System.Action(LoadException_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("Binding", typeof(Ruby.Builtins.Binding), null, null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("ClrString", typeof(System.String), new System.Action(LoadClrString_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def47, }, null); + Ruby.Builtins.RubyClass def13 = DefineClass("Digest::Class", typeof(Ruby.StandardLibrary.Digest.Class), null, new System.Action(LoadDigest__Class_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def14, }, null); + DefineGlobalClass("Dir", typeof(Ruby.Builtins.RubyDir), new System.Action(LoadDir_Instance), new System.Action(LoadDir_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, null); + Ruby.Builtins.RubyClass def39 = Context.ExceptionClass = DefineGlobalClass("Exception", typeof(System.Exception), new System.Action(LoadException_Instance), new System.Action(LoadException_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ExceptionOps.Factory), }); - Context.FalseClass = DefineGlobalClass("FalseClass", typeof(Ruby.Builtins.FalseClass), null, new System.Action(LoadFalseClass_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("Hash", typeof(Ruby.Builtins.Hash), typeof(Ruby.Builtins.HashOps), new System.Action(LoadHash_Instance), new System.Action(LoadHash_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { + Context.FalseClass = DefineGlobalClass("FalseClass", typeof(Ruby.Builtins.FalseClass), new System.Action(LoadFalseClass_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Hash", typeof(Ruby.Builtins.Hash), new System.Action(LoadHash_Instance), new System.Action(LoadHash_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.HashOps.Hash), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.HashOps.Hash), }); - Ruby.Builtins.RubyClass def41 = DefineGlobalClass("IO", typeof(Ruby.Builtins.RubyIO), typeof(Ruby.Builtins.RubyIOOps), new System.Action(LoadIO_Instance), new System.Action(LoadIO_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def41 = DefineGlobalClass("IO", typeof(Ruby.Builtins.RubyIO), new System.Action(LoadIO_Instance), new System.Action(LoadIO_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RubyIOOps.CreateIO), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RubyIOOps.CreateIO), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RubyIOOps.CreateIO), }); - DefineGlobalClass("MatchData", typeof(Ruby.Builtins.MatchData), typeof(Ruby.Builtins.MatchDataOps), new System.Action(LoadMatchData_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("Method", typeof(Ruby.Builtins.RubyMethod), typeof(Ruby.Builtins.MethodOps), new System.Action(LoadMethod_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("MatchData", typeof(Ruby.Builtins.MatchData), new System.Action(LoadMatchData_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Method", typeof(Ruby.Builtins.RubyMethod), new System.Action(LoadMethod_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); // Skipped primitive: Module - Context.NilClass = DefineGlobalClass("NilClass", typeof(Microsoft.Scripting.None), typeof(Ruby.Builtins.NilClassOps), new System.Action(LoadNilClass_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def34 = DefineGlobalClass("Numeric", typeof(Ruby.Builtins.Numeric), null, new System.Action(LoadNumeric_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def38, }, null); - Ruby.Builtins.RubyClass def18 = DefineClass("OpenSSL::Digest::Digest", typeof(Ruby.StandardLibrary.OpenSSL.DigestFactory.Digest), null, new System.Action(LoadOpenSSL__Digest__Digest_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def19 = DefineClass("OpenSSL::HMAC", typeof(Ruby.StandardLibrary.OpenSSL.HMAC), null, null, new System.Action(LoadOpenSSL__HMAC_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("Proc", typeof(Ruby.Builtins.Proc), typeof(Ruby.Builtins.ProcOps), new System.Action(LoadProc_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Context.NilClass = DefineGlobalClass("NilClass", typeof(Microsoft.Scripting.None), new System.Action(LoadNilClass_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def34 = DefineGlobalClass("Numeric", typeof(Ruby.Builtins.Numeric), new System.Action(LoadNumeric_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def38, }, null); + Ruby.Builtins.RubyClass def18 = DefineClass("OpenSSL::Digest::Digest", typeof(Ruby.StandardLibrary.OpenSSL.DigestFactory.Digest), new System.Action(LoadOpenSSL__Digest__Digest_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def19 = DefineClass("OpenSSL::HMAC", typeof(Ruby.StandardLibrary.OpenSSL.HMAC), null, new System.Action(LoadOpenSSL__HMAC_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Proc", typeof(Ruby.Builtins.Proc), new System.Action(LoadProc_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ProcOps.CreateProc), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ProcOps.CreateProc), }); - DefineGlobalClass("Range", typeof(Ruby.Builtins.Range), typeof(Ruby.Builtins.RangeOps), new System.Action(LoadRange_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { + DefineGlobalClass("Range", typeof(Ruby.Builtins.Range), new System.Action(LoadRange_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RangeOps.CreateRange), }); - DefineGlobalClass("Regexp", typeof(Ruby.Builtins.RubyRegex), typeof(Ruby.Builtins.RegexpOps), new System.Action(LoadRegexp_Instance), new System.Action(LoadRegexp_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { + DefineGlobalClass("Regexp", typeof(Ruby.Builtins.RubyRegex), new System.Action(LoadRegexp_Instance), new System.Action(LoadRegexp_Class), Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RegexpOps.Create), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RegexpOps.Create), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RegexpOps.Create), @@ -100,142 +100,142 @@ new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RegexpOps.Create), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RegexpOps.Create), }); - DefineGlobalClass("String", typeof(Ruby.Builtins.MutableString), typeof(Ruby.Builtins.MutableStringOps), new System.Action(LoadString_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, def38, }, new System.Delegate[] { + DefineGlobalClass("String", typeof(Ruby.Builtins.MutableString), new System.Action(LoadString_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, def38, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MutableStringOps.Create), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MutableStringOps.Create), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MutableStringOps.Create), }); - DefineGlobalClass("StringScanner", typeof(Ruby.Builtins.StringScanner), null, new System.Action(LoadStringScanner_Instance), new System.Action(LoadStringScanner_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("Struct", typeof(Ruby.Builtins.RubyStruct), typeof(Ruby.Builtins.RubyStructOps), new System.Action(LoadStruct_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { + DefineGlobalClass("StringScanner", typeof(Ruby.Builtins.StringScanner), new System.Action(LoadStringScanner_Instance), new System.Action(LoadStringScanner_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Struct", typeof(Ruby.Builtins.RubyStruct), new System.Action(LoadStruct_Instance), null, Context.ObjectClass, new Ruby.Builtins.RubyModule[] {def28, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RubyStructOps.CreateNamed), }); - DefineGlobalClass("Symbol", typeof(Microsoft.Scripting.SymbolId), typeof(Ruby.Builtins.SymbolOps), new System.Action(LoadSymbol_Instance), new System.Action(LoadSymbol_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("Thread", typeof(System.Threading.Thread), typeof(Ruby.Builtins.ThreadOps), new System.Action(LoadThread_Instance), new System.Action(LoadThread_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - Context.TrueClass = DefineGlobalClass("TrueClass", typeof(Ruby.Builtins.TrueClass), null, new System.Action(LoadTrueClass_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("UnboundMethod", typeof(Ruby.Builtins.UnboundMethod), null, new System.Action(LoadUnboundMethod_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def22 = DefineClass("Zlib::GzipFile", typeof(Ruby.StandardLibrary.Zlib.GZipFile), null, null, null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def26 = DefineClass("Zlib::ZStream", typeof(Ruby.StandardLibrary.Zlib.ZStream), null, new System.Action(LoadZlib__ZStream_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Symbol", typeof(Microsoft.Scripting.SymbolId), new System.Action(LoadSymbol_Instance), new System.Action(LoadSymbol_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Thread", typeof(System.Threading.Thread), new System.Action(LoadThread_Instance), new System.Action(LoadThread_Class), Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + Context.TrueClass = DefineGlobalClass("TrueClass", typeof(Ruby.Builtins.TrueClass), new System.Action(LoadTrueClass_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("UnboundMethod", typeof(Ruby.Builtins.UnboundMethod), new System.Action(LoadUnboundMethod_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def22 = DefineClass("Zlib::GzipFile", typeof(Ruby.StandardLibrary.Zlib.GZipFile), null, null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def26 = DefineClass("Zlib::ZStream", typeof(Ruby.StandardLibrary.Zlib.ZStream), new System.Action(LoadZlib__ZStream_Instance), null, Context.ObjectClass, Ruby.Builtins.RubyModule.EmptyArray, null); #if !SILVERLIGHT - Ruby.Builtins.RubyClass def42 = DefineGlobalClass("BasicSocket", typeof(Ruby.StandardLibrary.RubyBasicSocket), null, new System.Action(LoadBasicSocket_Instance), new System.Action(LoadBasicSocket_Class), def41, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def42 = DefineGlobalClass("BasicSocket", typeof(Ruby.StandardLibrary.RubyBasicSocket), new System.Action(LoadBasicSocket_Instance), new System.Action(LoadBasicSocket_Class), def41, Ruby.Builtins.RubyModule.EmptyArray, null); #endif // Skipped primitive: Class - Ruby.Builtins.RubyClass def12 = DefineClass("Digest::Base", typeof(Ruby.StandardLibrary.Digest.Base), null, new System.Action(LoadDigest__Base_Instance), null, def13, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("File", typeof(Ruby.Builtins.RubyFile), typeof(Ruby.Builtins.RubyFileOps), new System.Action(LoadFile_Instance), new System.Action(LoadFile_Class), def41, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def12 = DefineClass("Digest::Base", typeof(Ruby.StandardLibrary.Digest.Base), new System.Action(LoadDigest__Base_Instance), null, def13, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("File", typeof(Ruby.Builtins.RubyFile), new System.Action(LoadFile_Instance), new System.Action(LoadFile_Class), def41, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RubyFileOps.CreateIO), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RubyFileOps.CreateIO), }); - DefineGlobalClass("Float", typeof(System.Double), typeof(Ruby.Builtins.FloatOps), new System.Action(LoadFloat_Instance), new System.Action(LoadFloat_Class), def34, new Ruby.Builtins.RubyModule[] {def35, }, null); - Ruby.Builtins.RubyClass def27 = DefineGlobalClass("Integer", typeof(Ruby.Builtins.Integer), null, new System.Action(LoadInteger_Instance), new System.Action(LoadInteger_Class), def34, new Ruby.Builtins.RubyModule[] {def35, }, null); - DefineGlobalClass("NoMemoryError", typeof(Ruby.Builtins.NoMemoryError), null, null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def36 = DefineGlobalClass("ScriptError", typeof(Ruby.Builtins.ScriptError), typeof(Ruby.Builtins.ScriptErrorOps), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("Float", typeof(System.Double), new System.Action(LoadFloat_Instance), new System.Action(LoadFloat_Class), def34, new Ruby.Builtins.RubyModule[] {def35, }, null); + Ruby.Builtins.RubyClass def27 = DefineGlobalClass("Integer", typeof(Ruby.Builtins.Integer), new System.Action(LoadInteger_Instance), new System.Action(LoadInteger_Class), def34, new Ruby.Builtins.RubyModule[] {def35, }, null); + DefineGlobalClass("NoMemoryError", typeof(Ruby.Builtins.NoMemoryError), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def36 = DefineGlobalClass("ScriptError", typeof(Ruby.Builtins.ScriptError), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ScriptErrorOps.Factory), }); - Ruby.Builtins.RubyClass def37 = Context.StandardErrorClass = DefineGlobalClass("StandardError", typeof(System.SystemException), typeof(Ruby.Builtins.SystemExceptionOps), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def37 = Context.StandardErrorClass = DefineGlobalClass("StandardError", typeof(System.SystemException), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.SystemExceptionOps.Factory), }); - DefineGlobalClass("StringIO", typeof(Ruby.Builtins.StringIO), null, new System.Action(LoadStringIO_Instance), new System.Action(LoadStringIO_Class), def41, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("StringIO", typeof(Ruby.Builtins.StringIO), new System.Action(LoadStringIO_Instance), new System.Action(LoadStringIO_Class), def41, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.StringIO.CreateIO), }); - DefineGlobalClass("SystemExit", typeof(Ruby.Builtins.SystemExit), typeof(Ruby.Builtins.SystemExitOps), new System.Action(LoadSystemExit_Instance), null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("SystemExit", typeof(Ruby.Builtins.SystemExit), new System.Action(LoadSystemExit_Instance), null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.SystemExitOps.Factory), }); - DefineGlobalClass("SystemStackError", typeof(Ruby.Builtins.SystemStackError), typeof(Ruby.Builtins.SystemStackErrorOps), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("SystemStackError", typeof(Ruby.Builtins.SystemStackError), null, null, def39, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.SystemStackErrorOps.Factory), }); - Ruby.Builtins.RubyClass def24 = DefineClass("Zlib::GzipReader", typeof(Ruby.StandardLibrary.Zlib.GZipReader), null, new System.Action(LoadZlib__GzipReader_Instance), new System.Action(LoadZlib__GzipReader_Class), def22, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def24 = DefineClass("Zlib::GzipReader", typeof(Ruby.StandardLibrary.Zlib.GZipReader), new System.Action(LoadZlib__GzipReader_Instance), new System.Action(LoadZlib__GzipReader_Class), def22, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.Zlib.GZipReader.Initialize), }); - Ruby.Builtins.RubyClass def25 = DefineClass("Zlib::Inflate", typeof(Ruby.StandardLibrary.Zlib.Inflate), null, new System.Action(LoadZlib__Inflate_Instance), new System.Action(LoadZlib__Inflate_Class), def26, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def25 = DefineClass("Zlib::Inflate", typeof(Ruby.StandardLibrary.Zlib.Inflate), new System.Action(LoadZlib__Inflate_Instance), new System.Action(LoadZlib__Inflate_Class), def26, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.Zlib.Inflate.Initialize), new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.Zlib.Inflate.Initialize), }); - DefineGlobalClass("ArgumentError", typeof(System.ArgumentException), typeof(Ruby.Builtins.ArgumentErrorOps), new System.Action(LoadArgumentError_Instance), null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("ArgumentError", typeof(System.ArgumentException), new System.Action(LoadArgumentError_Instance), null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ArgumentErrorOps.Factory), }); - DefineGlobalClass("Bignum", typeof(Microsoft.Scripting.Math.BigInteger), typeof(Ruby.Builtins.BignumOps), new System.Action(LoadBignum_Instance), null, def27, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Bignum", typeof(Microsoft.Scripting.Math.BigInteger), new System.Action(LoadBignum_Instance), null, def27, Ruby.Builtins.RubyModule.EmptyArray, null); #if !SILVERLIGHT - Ruby.Builtins.RubyClass def15 = DefineClass("Digest::MD5", typeof(Ruby.StandardLibrary.Digest.MD5), null, null, null, def12, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def15 = DefineClass("Digest::MD5", typeof(Ruby.StandardLibrary.Digest.MD5), null, null, def12, Ruby.Builtins.RubyModule.EmptyArray, null); #endif - DefineGlobalClass("Fixnum", typeof(System.Int32), typeof(Ruby.Builtins.FixnumOps), new System.Action(LoadFixnum_Instance), new System.Action(LoadFixnum_Class), def27, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("IndexError", typeof(System.IndexOutOfRangeException), typeof(Ruby.Builtins.IndexErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("Fixnum", typeof(System.Int32), new System.Action(LoadFixnum_Instance), new System.Action(LoadFixnum_Class), def27, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("IndexError", typeof(System.IndexOutOfRangeException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.IndexErrorOps.Factory), }); - Ruby.Builtins.RubyClass def30 = DefineGlobalClass("IOError", typeof(System.IO.IOException), typeof(Ruby.Builtins.IOErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def30 = DefineGlobalClass("IOError", typeof(System.IO.IOException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.IOErrorOps.Factory), }); #if !SILVERLIGHT - Ruby.Builtins.RubyClass def44 = DefineGlobalClass("IPSocket", typeof(Ruby.StandardLibrary.IPSocket), null, new System.Action(LoadIPSocket_Instance), new System.Action(LoadIPSocket_Class), def42, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def44 = DefineGlobalClass("IPSocket", typeof(Ruby.StandardLibrary.IPSocket), new System.Action(LoadIPSocket_Instance), new System.Action(LoadIPSocket_Class), def42, Ruby.Builtins.RubyModule.EmptyArray, null); #endif - DefineGlobalClass("LoadError", typeof(Ruby.Builtins.LoadError), typeof(Ruby.Builtins.LoadErrorOps), null, null, def36, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("LoadError", typeof(Ruby.Builtins.LoadError), null, null, def36, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.LoadErrorOps.Factory), }); - DefineGlobalClass("LocalJumpError", typeof(Ruby.Builtins.LocalJumpError), typeof(Ruby.Builtins.LocalJumpErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("LocalJumpError", typeof(Ruby.Builtins.LocalJumpError), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.LocalJumpErrorOps.Factory), }); - Ruby.Builtins.RubyClass def46 = DefineGlobalClass("NameError", typeof(System.MemberAccessException), typeof(Ruby.Builtins.NameErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def46 = DefineGlobalClass("NameError", typeof(System.MemberAccessException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.NameErrorOps.Factory), }); - DefineGlobalClass("NotImplementedError", typeof(Ruby.Builtins.NotImplementedError), typeof(Ruby.Builtins.NotImplementedErrorOps), null, null, def36, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("NotImplementedError", typeof(Ruby.Builtins.NotImplementedError), null, null, def36, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.NotImplementedErrorOps.Factory), }); - Ruby.Builtins.RubyClass def32 = DefineGlobalClass("RangeError", typeof(System.ArgumentOutOfRangeException), typeof(Ruby.Builtins.RangeErrorOps), new System.Action(LoadRangeError_Instance), null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def32 = DefineGlobalClass("RangeError", typeof(System.ArgumentOutOfRangeException), new System.Action(LoadRangeError_Instance), null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RangeErrorOps.Factory), }); - DefineGlobalClass("RegexpError", typeof(Ruby.Builtins.RegexpError), typeof(Ruby.Builtins.RegexpErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("RegexpError", typeof(Ruby.Builtins.RegexpError), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.RegexpErrorOps.Factory), }); - Ruby.Builtins.RubyClass def45 = DefineGlobalClass("RuntimeError", typeof(Ruby.Builtins.RuntimeError), null, null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("SecurityError", typeof(System.Security.SecurityException), typeof(Ruby.Builtins.SecurityErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def45 = DefineGlobalClass("RuntimeError", typeof(Ruby.Builtins.RuntimeError), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("SecurityError", typeof(System.Security.SecurityException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.SecurityErrorOps.Factory), }); #if !SILVERLIGHT - DefineGlobalClass("Socket", typeof(Ruby.StandardLibrary.RubySocket), null, new System.Action(LoadSocket_Instance), new System.Action(LoadSocket_Class), def42, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("Socket", typeof(Ruby.StandardLibrary.RubySocket), new System.Action(LoadSocket_Instance), new System.Action(LoadSocket_Class), def42, Ruby.Builtins.RubyModule.EmptyArray, null); #endif #if !SILVERLIGHT - DefineGlobalClass("SocketError", typeof(System.Net.Sockets.SocketException), typeof(Ruby.StandardLibrary.SocketErrorOps), new System.Action(LoadSocketError_Instance), null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("SocketError", typeof(System.Net.Sockets.SocketException), new System.Action(LoadSocketError_Instance), null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.SocketErrorOps.Factory), }); #endif - DefineGlobalClass("SyntaxError", typeof(Ruby.Builtins.SyntaxError), typeof(Ruby.Builtins.SyntaxErrorOps), null, null, def36, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("SyntaxError", typeof(Ruby.Builtins.SyntaxError), null, null, def36, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.SyntaxErrorOps.Factory), }); - Ruby.Builtins.RubyClass def31 = DefineGlobalClass("SystemCallError", typeof(System.Runtime.InteropServices.ExternalException), typeof(Ruby.Builtins.SystemCallErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def31 = DefineGlobalClass("SystemCallError", typeof(System.Runtime.InteropServices.ExternalException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.SystemCallErrorOps.Factory), }); - DefineGlobalClass("ThreadError", typeof(Ruby.Builtins.ThreadError), null, null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("TypeError", typeof(System.InvalidOperationException), typeof(Ruby.Builtins.TypeErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("ThreadError", typeof(Ruby.Builtins.ThreadError), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("TypeError", typeof(System.InvalidOperationException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.TypeErrorOps.Factory), }); - DefineGlobalClass("ZeroDivisionError", typeof(System.DivideByZeroException), typeof(Ruby.Builtins.ZeroDivisionErrorOps), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("ZeroDivisionError", typeof(System.DivideByZeroException), null, null, def37, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ZeroDivisionErrorOps.Factory), }); - DefineGlobalClass("EOFError", typeof(Ruby.Builtins.EOFError), null, null, null, def30, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def4 = DefineClass("Errno::EACCES", typeof(Ruby.Builtins.Errno.AccessError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def5 = DefineClass("Errno::EBADF", typeof(Ruby.Builtins.Errno.BadFileDescriptorError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def6 = DefineClass("Errno::EDOM", typeof(Ruby.Builtins.Errno.DomainError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def7 = DefineClass("Errno::EEXIST", typeof(Ruby.Builtins.Errno.ExistError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def8 = DefineClass("Errno::EINVAL", typeof(Ruby.Builtins.Errno.InvalidError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def9 = DefineClass("Errno::ENOENT", typeof(Ruby.Builtins.Errno.NoEntryError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def10 = DefineClass("Errno::ENOTDIR", typeof(Ruby.Builtins.Errno.NotDirectoryError), null, null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("FloatDomainError", typeof(Ruby.Builtins.FloatDomainError), null, null, null, def32, Ruby.Builtins.RubyModule.EmptyArray, null); - DefineGlobalClass("NoMethodError", typeof(System.MissingMethodException), typeof(Ruby.Builtins.NoMethodErrorOps), new System.Action(LoadNoMethodError_Instance), null, def46, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("EOFError", typeof(Ruby.Builtins.EOFError), null, null, def30, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def4 = DefineClass("Errno::EACCES", typeof(Ruby.Builtins.Errno.AccessError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def5 = DefineClass("Errno::EBADF", typeof(Ruby.Builtins.Errno.BadFileDescriptorError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def6 = DefineClass("Errno::EDOM", typeof(Ruby.Builtins.Errno.DomainError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def7 = DefineClass("Errno::EEXIST", typeof(Ruby.Builtins.Errno.ExistError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def8 = DefineClass("Errno::EINVAL", typeof(Ruby.Builtins.Errno.InvalidError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def9 = DefineClass("Errno::ENOENT", typeof(Ruby.Builtins.Errno.NoEntryError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def10 = DefineClass("Errno::ENOTDIR", typeof(Ruby.Builtins.Errno.NotDirectoryError), null, null, def31, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("FloatDomainError", typeof(Ruby.Builtins.FloatDomainError), null, null, def32, Ruby.Builtins.RubyModule.EmptyArray, null); + DefineGlobalClass("NoMethodError", typeof(System.MissingMethodException), new System.Action(LoadNoMethodError_Instance), null, def46, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.NoMethodErrorOps.Factory), }); #if !SILVERLIGHT - Ruby.Builtins.RubyClass def43 = DefineGlobalClass("TCPSocket", typeof(Ruby.StandardLibrary.TCPSocket), null, null, new System.Action(LoadTCPSocket_Class), def44, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + Ruby.Builtins.RubyClass def43 = DefineGlobalClass("TCPSocket", typeof(Ruby.StandardLibrary.TCPSocket), null, new System.Action(LoadTCPSocket_Class), def44, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.TCPSocket.CreateTCPSocket), }); #endif #if !SILVERLIGHT - DefineGlobalClass("UDPSocket", typeof(Ruby.StandardLibrary.UDPSocket), null, new System.Action(LoadUDPSocket_Instance), null, def44, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("UDPSocket", typeof(Ruby.StandardLibrary.UDPSocket), new System.Action(LoadUDPSocket_Instance), null, def44, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.UDPSocket.CreateUDPSocket), new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.UDPSocket.CreateUDPSocket), }); #endif - Ruby.Builtins.RubyClass def21 = DefineClass("Zlib::DataError", typeof(Ruby.StandardLibrary.Zlib.DataError), null, null, null, def45, Ruby.Builtins.RubyModule.EmptyArray, null); - Ruby.Builtins.RubyClass def23 = DefineClass("Zlib::GzipFile::Error", typeof(Ruby.StandardLibrary.Zlib.GZipFile.Error), null, null, null, def45, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def21 = DefineClass("Zlib::DataError", typeof(Ruby.StandardLibrary.Zlib.DataError), null, null, def45, Ruby.Builtins.RubyModule.EmptyArray, null); + Ruby.Builtins.RubyClass def23 = DefineClass("Zlib::GzipFile::Error", typeof(Ruby.StandardLibrary.Zlib.GZipFile.Error), null, null, def45, Ruby.Builtins.RubyModule.EmptyArray, null); #if !SILVERLIGHT - DefineGlobalClass("TCPServer", typeof(Ruby.StandardLibrary.TCPServer), null, new System.Action(LoadTCPServer_Instance), null, def43, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { + DefineGlobalClass("TCPServer", typeof(Ruby.StandardLibrary.TCPServer), new System.Action(LoadTCPServer_Instance), null, def43, Ruby.Builtins.RubyModule.EmptyArray, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.StandardLibrary.TCPServer.CreateTCPServer), }); #endif =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Initializer.cs;C420856 File: Initializer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Initializer.cs;C420856 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Initializer.cs;RubyLibs @@ -39,30 +39,16 @@ LoadModules(); } - protected RubyClass/*!*/ DefineGlobalClass(string/*!*/ name, Type/*!*/ type, Type extensionType, Action instanceTrait, Action classTrait, RubyClass/*!*/ super, - RubyModule[]/*!*/ mixins, Delegate[] factories) { - RubyClass result = DefineClass(name, type, extensionType, instanceTrait, classTrait, super, mixins, factories); + protected RubyClass/*!*/ DefineGlobalClass(string/*!*/ name, Type/*!*/ type, Action instanceTrait, Action classTrait, + RubyClass/*!*/ super, RubyModule[]/*!*/ mixins, Delegate[] factories) { + RubyClass result = _context.DefineLibraryClass(name, type, instanceTrait, classTrait, super, mixins, factories); _context.ObjectClass.SetConstant(result.Name, result); return result; } - protected RubyClass/*!*/ DefineClass(string/*!*/ name, Type/*!*/ type, Type extensionType, Action instanceTrait, Action classTrait, RubyClass/*!*/ super, - RubyModule[]/*!*/ mixins, Delegate[] factories) { - - Assert.NotNull(name, type, super); - Debug.Assert(_context.ObjectClass != null); - - // setting tracker on the class makes CLR methods visible: - TypeTracker tracker = ReflectionCache.GetTypeTracker(type); - - RubyClass result = _context.CreateClass(SymbolTable.StringToId(name), type, null, instanceTrait, classTrait, super, tracker, false); - result.SetMixins(mixins); - result.Factories = factories; - result.ExtensionType = extensionType; - - _context.AddClassToCache(type, result); - - return result; + protected RubyClass/*!*/ DefineClass(string/*!*/ name, Type/*!*/ type, Action instanceTrait, Action classTrait, + RubyClass/*!*/ super, RubyModule[]/*!*/ mixins, Delegate[] factories) { + return _context.DefineLibraryClass(name, type, instanceTrait, classTrait, super, mixins, factories); } protected RubyModule/*!*/ DefineGlobalModule(string/*!*/ name, Type/*!*/ type, Action instanceTrait, @@ -72,24 +58,18 @@ return module; } + // + // - Ruby module definitions: + // "type" parameter specifies the primary type that identifies the module. + // If a library extends existing Ruby module it uses its primary type in Extends attribute parameter. + // E.g. Ruby.Builtins.Kernel is primary type for Kernel module, libraries maight add more methods by implementing + // types marked by [RubyModule(Extends = typeof(Ruby.Builtins.Kernel)] + // - Interface modules: + // "type" parameter specifies the CLR interface being extended. + // protected RubyModule/*!*/ DefineModule(string/*!*/ name, Type/*!*/ type, Action instanceTrait, Action classTrait, RubyModule[]/*!*/ mixins) { - Assert.NotNull(name); - Assert.NotNullItems(mixins); - Debug.Assert(_context.ObjectClass != null); - - // setting tracker for interfaces: - TypeTracker tracker = type.IsInterface ? ReflectionCache.GetTypeTracker(type) : null; - - RubyModule module = _context.CreateModule(SymbolTable.StringToId(name), instanceTrait, classTrait, null, tracker); - module.SetMixins(mixins); - - // non-interface type => module is pure Ruby module => no type caching - if (type.IsInterface) { - _context.AddInterfaceToCache(type, module); - } - - return module; + return _context.DefineLibraryModule(name, type, instanceTrait, classTrait, mixins); } protected object/*!*/ DefineSingleton(Action instanceTrait, Action classTrait, RubyModule[]/*!*/ mixins) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C438696 File: RubyClass.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C438696 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;RubyLibs @@ -51,8 +51,6 @@ private readonly Type _underlyingSystemType; private readonly bool _isRubyClass; - private Type _extensionType; - private Delegate[] _factories; public RubyClass SuperClass { @@ -75,6 +73,9 @@ get { return _isRubyClass; } } +#if FALSE + private Type _extensionType; + /// /// Holds on to the type with extension members, if any /// Used by the DLR action binder & binder helpers. @@ -84,6 +85,7 @@ get { return _extensionType; } internal set { _extensionType = value; } } +#endif public Type/*!*/ GetUnderlyingSystemType() { if (_isSingletonClass) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C438696 File: RubyModule.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C438696 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;RubyLibs @@ -64,7 +64,7 @@ private SymbolId _name; private State _state; - private readonly Action _initializer; + private Action _initializer; private IAttributesCollection _clrConstants; // need to know if this is an interface module @@ -177,12 +177,14 @@ _methods = new Dictionary(); _state = State.Initializing; - - if (_initializer != null) { - _initializer(this); + try { + if (_initializer != null) { + _initializer(this); + } + } finally { + _initializer = null; + _state = State.Initialized; } - - _state = State.Initialized; } internal virtual void EnsureInitialized() { @@ -683,6 +685,35 @@ } } + internal void IncludeTrait(Action/*!*/ trait) { + Assert.NotNull(trait); + + if (_state == State.Uninitialized) { + if (_initializer != null) { + _initializer += trait; + } else { + _initializer = trait; + } + } else { + // TODO: postpone + trait(this); + } + } + + internal void IncludeLibraryModule(Action instanceTrait, Action classTrait, RubyModule[]/*!*/ mixins) { + Assert.NotNull(mixins); + + IncludeModules(mixins); + + if (instanceTrait != null) { + IncludeTrait(instanceTrait); + } + + if (classTrait != null) { + SingletonClass.IncludeTrait(classTrait); + } + } + #endregion #region IDynamicObject Members =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExecutionContext.cs;C440068 File: RubyExecutionContext.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExecutionContext.cs;C440068 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExecutionContext.cs;RubyLibs @@ -78,22 +78,17 @@ private EqualityComparer _equalityComparer; - private static readonly object/*!*/ _cacheLock = new object(); - /// - /// Maps CLR types to Ruby classes. + /// Maps CLR types to Ruby classes/modules. /// - private readonly Dictionary/*!*/ _classCache; + private readonly Dictionary/*!*/ _moduleCache; + private object ModuleCacheSyncRoot { get { return _moduleCache; } } /// - /// Maps CLR interfaces to Ruby modules - /// - private readonly Dictionary/*!*/ _interfaceModuleCache; - - /// /// Maps CLR namespace trackers to Ruby modules. /// - private readonly Dictionary/*!*/ _namespaceModuleCache; + private readonly Dictionary/*!*/ _namespaceCache; + private object NamespaceCacheSyncRoot { get { return _namespaceCache; } } private readonly Loader/*!*/ _loader; private Scope/*!*/ _globalScope; @@ -229,9 +224,8 @@ _runtimeErrorSink = new RuntimeErrorSink(this); _globalVariables = new Dictionary(); - _classCache = new Dictionary(); - _namespaceModuleCache = new Dictionary(); - _interfaceModuleCache = new Dictionary(); + _moduleCache = new Dictionary(); + _namespaceCache = new Dictionary(); _inputProvider = new RubyInputProvider(this); _globalScope = globalScope; @@ -413,9 +407,9 @@ _objectClass.SetMixins(new RubyModule[] { _kernelModule }); - AddClassToCache(objectTracker.Type, _objectClass); - AddClassToCache(_moduleClass.GetUnderlyingSystemType(), _moduleClass); - AddClassToCache(_classClass.GetUnderlyingSystemType(), _classClass); + AddModuleToCacheNoLock(objectTracker.Type, _objectClass); + AddModuleToCacheNoLock(_moduleClass.GetUnderlyingSystemType(), _moduleClass); + AddModuleToCacheNoLock(_classClass.GetUnderlyingSystemType(), _classClass); _objectClass.SetConstant(_moduleClass.Name, _moduleClass); _objectClass.SetConstant(_classClass.Name, _classClass); @@ -434,50 +428,61 @@ #region CLR Type and Namespaces caching - internal void AddClassToCache(Type/*!*/ type, RubyClass/*!*/ classObject) { - Assert.NotNull(type, classObject); - Debug.Assert(!classObject.IsSingletonClass); - Debug.Assert(!type.IsInterface); - - _classCache.Add(type, classObject); + internal void AddModuleToCacheNoLock(Type/*!*/ type, RubyModule/*!*/ module) { + Assert.NotNull(type, module); + _moduleCache.Add(type, module); } - internal void AddInterfaceToCache(Type/*!*/ interfaceType, RubyModule/*!*/ module) { - Assert.NotNull(interfaceType, module); - Debug.Assert(interfaceType.IsInterface); - - _interfaceModuleCache.Add(interfaceType, module); - } - - internal void AddNamespaceToCache(NamespaceTracker/*!*/ namespaceTracker, RubyModule/*!*/ module) { + internal void AddNamespaceToCacheNoLock(NamespaceTracker/*!*/ namespaceTracker, RubyModule/*!*/ module) { Assert.NotNull(namespaceTracker, module); - _namespaceModuleCache.Add(namespaceTracker, module); + _namespaceCache.Add(namespaceTracker, module); } internal RubyModule/*!*/ GetOrCreateModule(NamespaceTracker/*!*/ tracker) { Assert.NotNull(tracker); - // TODO: optimize (if this context isn't shared, we don't need to use locks) - lock (_cacheLock) { + lock (ModuleCacheSyncRoot) { return GetOrCreateModuleNoLock(tracker); } } + + internal bool TryGetModule(NamespaceTracker/*!*/ namespaceTracker, out RubyModule result) { + lock (NamespaceCacheSyncRoot) { + return _namespaceCache.TryGetValue(namespaceTracker, out result); + } + } internal RubyModule/*!*/ GetOrCreateModule(Type/*!*/ interfaceType) { Debug.Assert(interfaceType != null && interfaceType.IsInterface); - // TODO: optimize (if this context isn't shared, we don't need to use locks) - lock (_cacheLock) { + lock (ModuleCacheSyncRoot) { return GetOrCreateModuleNoLock(interfaceType); } } + + internal bool TryGetModuleNoLock(Type/*!*/ type, out RubyModule result) { + return _moduleCache.TryGetValue(type, out result); + } + + internal bool TryGetClassNoLock(Type/*!*/ type, out RubyClass result) { + RubyModule module; + if (_moduleCache.TryGetValue(type, out module)) { + result = module as RubyClass; + if (result == null) { + throw new InvalidOperationException("Specified type doesn't represent a class"); + } + return true; + } else { + result = null; + return false; + } + } internal RubyClass/*!*/ GetOrCreateClass(Type/*!*/ type) { Debug.Assert(type != null && !type.IsInterface); - // TODO: optimize (if this context isn't shared, we don't need to use locks) - lock (_cacheLock) { + lock (ModuleCacheSyncRoot) { return GetOrCreateClassNoLock(type); } } @@ -486,12 +491,12 @@ Assert.NotNull(tracker); RubyModule result; - if (_namespaceModuleCache.TryGetValue(tracker, out result)) { + if (_namespaceCache.TryGetValue(tracker, out result)) { return result; } result = CreateModule(SymbolTable.StringToId(RubyUtils.GetQualifiedName(tracker)), null, null, tracker, null); - _namespaceModuleCache[tracker] = result; + _namespaceCache[tracker] = result; return result; } @@ -499,13 +504,13 @@ Debug.Assert(interfaceType != null && interfaceType.IsInterface); RubyModule result; - if (_interfaceModuleCache.TryGetValue(interfaceType, out result)) { + if (_moduleCache.TryGetValue(interfaceType, out result)) { return result; } TypeTracker tracker = (TypeTracker)TypeTracker.FromMemberInfo(interfaceType); result = CreateModule(SymbolTable.StringToId(RubyUtils.GetQualifiedName(interfaceType)), null, null, null, tracker); - _interfaceModuleCache[interfaceType] = result; + _moduleCache[interfaceType] = result; return result; } @@ -513,7 +518,7 @@ Debug.Assert(type != null && !type.IsInterface); RubyClass result; - if (_classCache.TryGetValue(type, out result)) { + if (TryGetClassNoLock(type, out result)) { return result; } @@ -527,7 +532,8 @@ result.SetMixins(interfaceMixins); } - return _classCache[type] = result; + _moduleCache[type] = result; + return result; } private List GetDeclaredInterfaceModules(Type/*!*/ type) { @@ -646,7 +652,7 @@ ContractUtils.RequiresNotNull(superClass, "superClass"); RubyClass result = RubyTypeBuilder.MakeClass(this, owner.MakeNestedModuleName(name), superClass); - AddClassToCache(result.GetUnderlyingSystemType(), result); + AddModuleToCacheNoLock(result.GetUnderlyingSystemType(), result); if (!name.IsEmpty) { owner.SetConstant(name, result); @@ -656,6 +662,67 @@ #endregion + #region Libraries + + internal RubyModule/*!*/ DefineLibraryModule(string/*!*/ name, Type/*!*/ type, Action instanceTrait, + Action classTrait, RubyModule[]/*!*/ mixins) { + Assert.NotNull(name, type); + Assert.NotNullItems(mixins); + + lock (ModuleCacheSyncRoot) { + RubyModule module; + + if (TryGetModuleNoLock(type, out module)) { + module.IncludeLibraryModule(instanceTrait, classTrait, mixins); + return module; + } + + // setting tracker for interfaces: + TypeTracker tracker = type.IsInterface ? ReflectionCache.GetTypeTracker(type) : null; + + module = CreateModule(SymbolTable.StringToId(name), instanceTrait, classTrait, null, tracker); + module.SetMixins(mixins); + + AddModuleToCacheNoLock(type, module); + return module; + } + } + + internal RubyClass/*!*/ DefineLibraryClass(string/*!*/ name, Type/*!*/ type, Action instanceTrait, Action classTrait, + RubyClass/*!*/ super, RubyModule[]/*!*/ mixins, Delegate[] factories) { + + Assert.NotNull(name, type, super); + + lock (ModuleCacheSyncRoot) { + RubyClass result; + if (TryGetClassNoLock(type, out result)) { + if (super != result.SuperClass) { + // TODO: better message + throw new InvalidOperationException("Cannot change super class"); + } + + result.IncludeLibraryModule(instanceTrait, classTrait, mixins); + if (factories != null) { + result.Factories = ArrayUtils.AppendRange(result.Factories, factories); + } + + return result; + } + + // setting tracker on the class makes CLR methods visible: + TypeTracker tracker = ReflectionCache.GetTypeTracker(type); + + result = CreateClass(SymbolTable.StringToId(name), type, null, instanceTrait, classTrait, super, tracker, false); + result.SetMixins(mixins); + result.Factories = factories; + + AddModuleToCacheNoLock(type, result); + return result; + } + } + + #endregion + #region Getting Modules and Classes from objects, CLR types and CLR namespaces. public RubyModule/*!*/ GetModule(Type/*!*/ type) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;C440887 File: RubyBinder.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;C440887 (server) 5/16/2008 2:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;RubyLibs @@ -251,7 +251,8 @@ #endregion - public override IList/*!*/ GetExtensionTypes(Type/*!*/ t) { +#if TODO + protected override IList/*!*/ GetExtensionTypes(Type/*!*/ t) { Type extentionType = _rubyContext.ExecutionContext.GetClass(t).ExtensionType; if (extentionType != null) { @@ -263,6 +264,7 @@ return base.GetExtensionTypes(t); } +#endif #region Conversions ===================================================================