In ilasm/tests:
authorAnkit Jain <radical@corewars.org>
Wed, 22 Feb 2006 10:22:22 +0000 (10:22 -0000)
committerAnkit Jain <radical@corewars.org>
Wed, 22 Feb 2006 10:22:22 +0000 (10:22 -0000)
* test-nonsealed-valueclass.il: New. Value class should be sealed.

In ilasm/codegen:
* ExternTable.cs (ExternTable.GetTypeRef): Emit a warning if mscorlib is
referenced without a corresponding '.assembly extern' directive.
* TypeDef.cs (TypeDef.Define): Valuetype class should be sealed. Emit
warning if its not, and make it so.

In class/PEAPI:
* Metadata.cs (TypeAttr): Add [Flags] attribute.

svn path=/trunk/mcs/; revision=57150

mcs/class/PEAPI/ChangeLog
mcs/class/PEAPI/Metadata.cs
mcs/ilasm/codegen/ChangeLog
mcs/ilasm/codegen/ExternTable.cs
mcs/ilasm/codegen/TypeDef.cs
mcs/ilasm/tests/ChangeLog
mcs/ilasm/tests/test-nonsealed-valueclass.il [new file with mode: 0644]

index 4d8823ac5ea83d35054b1418c87cef3b02fea6f5..98323b1b74c62b4790e81bc7b1b2920197490847 100644 (file)
@@ -1,3 +1,7 @@
+2006-02-22  Ankit Jain  <jankit@novell.com>
+
+       * Metadata.cs (TypeAttr): Add [Flags] attribute.
+
 2006-02-20  Ankit Jain  <jankit@novell.com>
 
        * PEAPI.cs (PEFileException): Update error message.
index 96a06311e730bb7cf5f0dd60176892b54b7bf027..c77ae5d9b650fdf484389ed14b6f525c679558db 100644 (file)
@@ -46,6 +46,7 @@ namespace PEAPI {
        /// <summary>
        /// Attibutes for a class
        /// </summary>
+       [Flags]
        public enum TypeAttr {Private, Public, NestedPublic, NestedPrivate, 
                NestedFamily, NestedAssembly, NestedFamAndAssem, NestedFamOrAssem, 
                SequentialLayout, ExplicitLayout = 0x10, Interface = 0x20, 
index cf933042a788f268282000efe9eb911ae83bbd7f..c93e93ee92a881c8804b804999bd6b6a488b33c5 100644 (file)
@@ -1,3 +1,10 @@
+2006-02-22  Ankit Jain  <jankit@novell.com>
+
+       * ExternTable.cs (ExternTable.GetTypeRef): Emit a warning if mscorlib is
+       referenced without a corresponding '.assembly extern' directive. 
+       * TypeDef.cs (TypeDef.Define): Valuetype class should be sealed. Emit
+       warning if its not, and make it so.
+
 2006-02-20  Ankit Jain  <jankit@novell.com>
 
        * *.cs: Update all .cs files to use Report.Error instead of directly
index 59f6f43e1f6fd1b293f1b902aff547b1afae71d2..659f0b462a5f405ca708c92ebd8c56197b34dba6 100644 (file)
@@ -316,10 +316,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. */
+                                Console.Error.WriteLine ("Warning -- Reference to undeclared extern assembly '{0}', adding.", asmb_name);
                                 AddCorlib ();
+                        }
                         if (assembly_table != null)
                                 ext_asmb = assembly_table[asmb_name] as ExternAssembly;
 
index c5fd8697f7e4c1849a06881caf31741202de3dc6..6dafb428c43d5d6b04e420826c043ff2c5eab4bb 100644 (file)
@@ -341,6 +341,11 @@ namespace Mono.ILASM {
                                                 is_enum_class = true;          
                                 } 
 
+                                if (is_value_class && (attr & PEAPI.TypeAttr.Sealed) == 0) {
+                                        Console.WriteLine ("Warning -- Non-sealed value class, made sealed.");
+                                        attr |= PEAPI.TypeAttr.Sealed;
+                                }
+
                                 if (outer != null) {
                                         if (!outer.IsDefined)
                                                 outer.Define (code_gen);
index 2a85fac0a93a05bde5c9d9ff6024a83a7c7f53d8..4bff294d2264088cc90c9f8b8dcc9d392ab317ca 100644 (file)
@@ -1,3 +1,7 @@
+2006-02-22  Ankit Jain  <jankit@novell.com>
+
+       * test-nonsealed-valueclass.il: New. Value class should be sealed.
+
 2006-02-20  Ankit Jain  <jankit@novell.com>
 
        * generics-al.i, test-29.il: Remove. These use invalid style of
diff --git a/mcs/ilasm/tests/test-nonsealed-valueclass.il b/mcs/ilasm/tests/test-nonsealed-valueclass.il
new file mode 100644 (file)
index 0000000..368031b
--- /dev/null
@@ -0,0 +1,7 @@
+// Test for a non-sealed value class
+// ilasm gives a warning and seals the class
+
+.class public test 
+ extends [mscorlib]System.ValueType
+{
+}