[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnetlib/runtime/System/Reflection/Emit Assemb
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnetlib/runtime/System/Reflection/Emit AssemblyBuilder.cs,1.2,1.3 ModuleBuilder.cs,1.3,1.4 |
Date: |
Tue, 18 Mar 2003 05:53:18 -0500 |
Update of /cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit
In directory subversions:/tmp/cvs-serv9483/runtime/System/Reflection/Emit
Modified Files:
AssemblyBuilder.cs ModuleBuilder.cs
Log Message:
Define dynamic assemblies and modules.
Index: AssemblyBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/AssemblyBuilder.cs,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** AssemblyBuilder.cs 1 Mar 2003 19:32:28 -0000 1.2
--- AssemblyBuilder.cs 18 Mar 2003 10:53:15 -0000 1.3
***************
*** 36,55 ****
{
// Internal state.
! private AssemblyName name;
! private MethodInfo entryPoint;
private bool isSynchronized;
// Constructor. Called from AppDomain.DefineDynamicAssembly.
- [TODO]
internal AssemblyBuilder(AssemblyName name, AssemblyBuilderAccess
access,
! String directory,
Evidence evidence,
! PermissionSet
requiredPermissions,
! PermissionSet
optionalPermissions,
! PermissionSet
refusedPermissions,
! bool isSynchronized)
{
! this.name = (AssemblyName)(name.Clone());
! entryPoint = null;
this.isSynchronized = isSynchronized;
}
--- 36,75 ----
{
// Internal state.
! private AssemblyBuilderAccess access;
! private String directory;
private bool isSynchronized;
+ private bool saved;
+ private MethodInfo entryPoint;
+ private IntPtr writer;
+ private ModuleBuilder module;
// Constructor. Called from AppDomain.DefineDynamicAssembly.
internal AssemblyBuilder(AssemblyName name, AssemblyBuilderAccess
access,
! String directory, bool
isSynchronized)
{
! this.access = access;
! this.directory = directory;
this.isSynchronized = isSynchronized;
+ this.saved = false;
+ this.entryPoint = null;
+ Version version = name.Version;
+ if(version != null)
+ {
+ this.privateData = ClrAssemblyCreate
+ (name.Name, version.Major,
version.Minor,
+ version.Build,
version.Revision,
+ access, out writer);
+ }
+ else
+ {
+ this.privateData = ClrAssemblyCreate
+ (name.Name, 0, 0, 0, 0, access,
out writer);
+ }
+ if(this.privateData == IntPtr.Zero)
+ {
+ // The runtime engine disallowed
dynamic assemblies.
+ throw new SecurityException
+ (_("Emit_NoDynamicAssemblies"));
+ }
}
***************
*** 111,138 ****
}
! [TODO]
public ModuleBuilder DefineDynamicModule(String name)
{
! throw new
NotImplementedException("DefineDynamicModule");
}
-
- [TODO]
public ModuleBuilder DefineDynamicModule(String name, bool
emitSymbolInfo)
{
! throw new
NotImplementedException("DefineDynamicModule");
}
-
- [TODO]
public ModuleBuilder DefineDynamicModule(String name, String fileName)
{
! throw new
NotImplementedException("DefineDynamicModule");
}
-
- [TODO]
public ModuleBuilder DefineDynamicModule(String name, String fileName,
bool emitSymbolInfo)
{
! throw new
NotImplementedException("DefineDynamicModule");
}
/*
[TODO]
--- 131,191 ----
}
! // Define a dynamic module that is attached to this assembly.
public ModuleBuilder DefineDynamicModule(String name)
{
! return DefineDynamicModule(name, false);
}
public ModuleBuilder DefineDynamicModule(String name, bool
emitSymbolInfo)
{
! try
! {
! StartSync();
! if(saved)
! {
! throw new
InvalidOperationException
!
(_("Emit_AlreadySaved"));
! }
! if(name == null)
! {
! throw new
ArgumentNullException("name");
! }
! if(name == String.Empty)
! {
! throw new ArgumentException
!
(_("Emit_ModuleNameInvalid"));
! }
! if(Char.IsWhiteSpace(name[0]) ||
! name.IndexOf('/') != -1 ||
! name.IndexOf('\\') != -1)
! {
! throw new ArgumentException
!
(_("Emit_ModuleNameInvalid"));
! }
! if(module != null)
! {
! // We don't support assemblies
with multiple modules.
! throw new NotSupportedException
!
(_("Emit_SingleModuleOnly"));
! }
! module = new ModuleBuilder
! (this, name, true,
emitSymbolInfo);
! return module;
! }
! finally
! {
! EndSync();
! }
}
public ModuleBuilder DefineDynamicModule(String name, String fileName)
{
! return DefineDynamicModule(name, fileName,
false);
}
public ModuleBuilder DefineDynamicModule(String name, String fileName,
bool emitSymbolInfo)
{
! // We don't support modules in external files.
! throw new
NotSupportedException(_("Emit_ExternalModule"));
}
+
/*
[TODO]
***************
*** 190,197 ****
}
! [TODO]
public ModuleBuilder GetDynamicModule(String name)
{
! throw new
NotImplementedException("GetDynamicModule");
}
--- 243,266 ----
}
! // Get a particular module within this assembly.
public ModuleBuilder GetDynamicModule(String name)
{
! if(name == null)
! {
! throw new ArgumentNullException("name");
! }
! else if(name == String.Empty)
! {
! throw new ArgumentException
! (_("Emit_ModuleNameInvalid"));
! }
! if(module != null && module.Name == name)
! {
! return module;
! }
! else
! {
! return null;
! }
}
***************
*** 248,251 ****
--- 317,326 ----
entryPoint = entryMethod;
}
+
+ // Create a new assembly.
+ [MethodImpl(MethodImplOptions.InternalCall)]
+ extern private static IntPtr ClrAssemblyCreate
+ (String name, int v1, int v2, int v3, int v4,
+ AssemblyBuilderAccess access, out IntPtr writer);
// Internal version of "SetEntryPoint".
Index: ModuleBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/ModuleBuilder.cs,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** ModuleBuilder.cs 18 Mar 2003 09:54:50 -0000 1.3
--- ModuleBuilder.cs 18 Mar 2003 10:53:15 -0000 1.4
***************
*** 40,48 ****
private String name;
private bool transient;
private TypeBuilder moduleType;
// Constructor.
internal ModuleBuilder(AssemblyBuilder assembly, String name,
! bool transient)
{
// Initialize the fields within this object.
--- 40,49 ----
private String name;
private bool transient;
+ private bool emitSymbolInfo;
private TypeBuilder moduleType;
// Constructor.
internal ModuleBuilder(AssemblyBuilder assembly, String name,
! bool transient, bool
emitSymbolInfo)
{
// Initialize the fields within this object.
***************
*** 50,53 ****
--- 51,55 ----
this.name = name;
this.transient = transient;
+ this.emitSymbolInfo = emitSymbolInfo;
// Create a new module within the assembly.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnetlib/runtime/System/Reflection/Emit AssemblyBuilder.cs,1.2,1.3 ModuleBuilder.cs,1.3,1.4,
Rhys Weatherley <address@hidden> <=