private AddModule ( |
||
dynModule | ||
return | void |
private ModuleBuilder DefineDynamicModuleInternalNoLock( String name, bool emitSymbolInfo, // specify if emit symbol info or not ref StackCrawlMark stackMark) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (name.Length == 0) { throw new ArgumentException(SR.Argument_EmptyName, nameof(name)); } if (name[0] == '\0') { throw new ArgumentException(SR.Argument_InvalidName, nameof(name)); } BCLDebug.Log("DYNIL", "## DYNIL LOGGING: AssemblyBuilder.DefineDynamicModule( " + name + " )"); Debug.Assert(m_assemblyData != null, "m_assemblyData is null in DefineDynamicModuleInternal"); ModuleBuilder dynModule; ISymbolWriter writer = null; IntPtr pInternalSymWriter = new IntPtr(); // create the dynamic module- only one ModuleBuilder per AssemblyBuilder can be created if (m_fManifestModuleUsedAsDefinedModule == true) { throw new InvalidOperationException(SR.InvalidOperation_NoMultiModuleAssembly); } // Init(...) has already been called on m_manifestModuleBuilder in InitManifestModule() dynModule = m_manifestModuleBuilder; // Create the symbol writer if (emitSymbolInfo) { writer = SymWrapperCore.SymWriter.CreateSymWriter(); String fileName = "Unused"; // this symfile is never written to disk so filename does not matter. // Pass the "real" module to the VM pInternalSymWriter = ModuleBuilder.nCreateISymWriterForDynamicModule(dynModule.InternalModule, fileName); // In Telesto, we took the SetUnderlyingWriter method private as it's a very rickety method. // This might someday be a good move for the desktop CLR too. ((SymWrapperCore.SymWriter)writer).InternalSetUnderlyingWriter(pInternalSymWriter); } // Creating the symbol writer dynModule.SetSymWriter(writer); m_assemblyData.AddModule(dynModule); if (dynModule == m_manifestModuleBuilder) { // We are reusing manifest module as user-defined dynamic module m_fManifestModuleUsedAsDefinedModule = true; } return(dynModule); } // DefineDynamicModuleInternalNoLock
private ModuleBuilder DefineDynamicModuleInternalNoLock( String name, bool emitSymbolInfo, // specify if emit symbol info or not ref StackCrawlMark stackMark) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (name.Length == 0) { throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), nameof(name)); } if (name[0] == '\0') { throw new ArgumentException(Environment.GetResourceString("Argument_InvalidName"), nameof(name)); } Contract.Ensures(Contract.Result <ModuleBuilder>() != null); Contract.EndContractBlock(); BCLDebug.Log("DYNIL", "## DYNIL LOGGING: AssemblyBuilder.DefineDynamicModule( " + name + " )"); Debug.Assert(m_assemblyData != null, "m_assemblyData is null in DefineDynamicModuleInternal"); ModuleBuilder dynModule; ISymbolWriter writer = null; IntPtr pInternalSymWriter = new IntPtr(); // create the dynamic module- only one ModuleBuilder per AssemblyBuilder can be created if (m_fManifestModuleUsedAsDefinedModule == true) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NoMultiModuleAssembly")); } // Init(...) has already been called on m_manifestModuleBuilder in InitManifestModule() dynModule = m_manifestModuleBuilder; // Create the symbol writer if (emitSymbolInfo) { writer = SymWrapperCore.SymWriter.CreateSymWriter(); // Set the underlying writer for the managed writer // that we're using. Note that this function requires // unmanaged code access. #pragma warning disable 618 new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert(); #pragma warning restore 618 String fileName = "Unused"; // this symfile is never written to disk so filename does not matter. // Pass the "real" module to the VM pInternalSymWriter = ModuleBuilder.nCreateISymWriterForDynamicModule(dynModule.InternalModule, fileName); // In Telesto, we took the SetUnderlyingWriter method private as it's a very rickety method. // This might someday be a good move for the desktop CLR too. ((SymWrapperCore.SymWriter)writer).InternalSetUnderlyingWriter(pInternalSymWriter); } // Creating the symbol writer dynModule.SetSymWriter(writer); m_assemblyData.AddModule(dynModule); if (dynModule == m_manifestModuleBuilder) { // We are reusing manifest module as user-defined dynamic module m_fManifestModuleUsedAsDefinedModule = true; } return(dynModule); } // DefineDynamicModuleInternalNoLock