New test.
[mono.git] / mcs / ilasm / codegen / ExternTable.cs
index 3fe73286e75d17f859a189d01f094591d0d8afb0..037ecfada85d04521baabf5c74d462dce137c0a0 100644 (file)
@@ -11,6 +11,7 @@ using System;
 using System.Collections;
 using System.Reflection;
 using System.Security;
+using System.Globalization;
 
 namespace Mono.ILASM {
 
@@ -144,10 +145,12 @@ namespace Mono.ILASM {
                 private string locale;
                 private byte [] hash;
                 private DeclSecurity decl_sec;
+                private AssemblyName asmb_name;
 
                 public ExternAssembly (string name, AssemblyName asmb_name) : base (name)
                 {
                         this.name = name;
+                        this.asmb_name = asmb_name;
                         major = minor = build = revision = -1;
                 }
 
@@ -159,6 +162,18 @@ namespace Mono.ILASM {
                         }
                 }
 
+                public AssemblyName AssemblyName {
+                        get { return asmb_name; }
+                }
+
+                public DeclSecurity DeclSecurity {
+                        get {
+                                if (decl_sec == null)
+                                        decl_sec = new DeclSecurity ();
+                                return decl_sec;
+                        }
+                }
+
                 public override void Resolve (CodeGen code_gen)
                 {
                         if (is_resolved)
@@ -193,43 +208,32 @@ namespace Mono.ILASM {
                         return AssemblyRef;
                 }
                 
-                public void AddPermissionSet (PEAPI.SecurityAction sec_action, PermissionSet ps)
-                {
-                        if (decl_sec == null)
-                                decl_sec = new DeclSecurity ();
-
-                        decl_sec.AddPermissionSet (sec_action, ps);        
-                }
-                
-                public void AddPermission (PEAPI.SecurityAction sec_action, IPermission iper)
-                {
-                        if (decl_sec == null)
-                                decl_sec = new DeclSecurity ();
-
-                        decl_sec.AddPermission (sec_action, iper);
-                }
-
                 public void SetVersion (int major, int minor, int build, int revision)
                 {
                         this.major = major;
                         this.minor = minor;
                         this.build = build;
                         this.revision = revision;
+                        asmb_name.Version = new Version (major, minor, build, revision);
                 }
 
                 public void SetPublicKey (byte [] public_key)
                 {
                         this.public_key = public_key;
+                        asmb_name.SetPublicKey (public_key);
                 }
 
                 public void SetPublicKeyToken (byte [] public_key_token)
                 {
                         this.public_key_token = public_key_token;
+                        asmb_name.SetPublicKey (public_key);
                 }
 
                 public void SetLocale (string locale)
                 {
                         this.locale = locale;
+                        //FIXME: is this correct?
+                        asmb_name.CultureInfo = new CultureInfo (locale);
                 }
 
                 public void SetHash (byte [] hash)
@@ -316,10 +320,12 @@ namespace Mono.ILASM {
                 public ExternTypeRef GetTypeRef (string asmb_name, string full_name, bool is_valuetype)
                 {
                         ExternAssembly ext_asmb = null;
-                        if (assembly_table == null && (asmb_name == "mscorlib" || asmb_name == "corlib"))
+                        if (assembly_table == null && (asmb_name == "mscorlib" || asmb_name == "corlib")) {
                                 /* AddCorlib if mscorlib is being referenced but
                                    we haven't encountered a ".assembly 'name'" as yet. */
+                                Report.Warning (String.Format ("Reference to undeclared extern assembly '{0}', adding.", asmb_name));
                                 AddCorlib ();
+                        }
                         if (assembly_table != null)
                                 ext_asmb = assembly_table[asmb_name] as ExternAssembly;
 
@@ -327,7 +333,7 @@ namespace Mono.ILASM {
                                 System.Reflection.AssemblyName asmname = new System.Reflection.AssemblyName ();
                                 asmname.Name = asmb_name;
 
-                                Console.Error.WriteLine ("Warning -- Reference to undeclared extern assembly '{0}', adding.", asmb_name);
+                                Report.Warning (String.Format ("Reference to undeclared extern assembly '{0}', adding.", asmb_name));
                                 ext_asmb = AddAssembly (asmb_name, asmname);
                         }
 
@@ -341,7 +347,7 @@ namespace Mono.ILASM {
                                 mod = module_table [mod_name] as ExternModule;
 
                         if (mod == null)
-                                throw new Exception (String.Format ("Module {0} not defined.", mod_name));
+                                Report.Error ("Module " + mod_name + " not defined.");
 
                         return mod.GetTypeRef (full_name, is_valuetype);
                 }