dotgnu-pnet-commits
[Top][All Lists]
Advanced

[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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]