Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/mcs/ilasm
diff options
context:
space:
mode:
authorAnkit Jain <radical@corewars.org>2006-11-09 12:29:17 +0300
committerAnkit Jain <radical@corewars.org>2006-11-09 12:29:17 +0300
commit66d84ed5016c9999dd5f58b04961e9d5bd4050e7 (patch)
tree576f48259923ede4a5246c52cddb2266106f2e3e /mcs/ilasm
parent41f534fdfb9688865ed07fd2e937c15164af01fe (diff)
Fix bug #79860. Add support for Retargetable assembly flag.
In ilasm/codegen: * CodeGen.cs (CodeGen.BeginAssemblyRef): Add param for attributes. (SetAssemblyName): Rename to .. (SetThisAssembly): .. this. Add param for attributes. * ExternTable (ExternAssembly.ctor): Likewise. (ExternAssembly.Resolve): Add attributes. (ExternTable.AddAssembly): Add param for attributes. (ExternTable): Update to changes. * Assembly.cs (Assembly.SetAssemblyAttr): New. (Assembly.Resolve): Add the flags. In ilasm/scanner: * ILTables.cs (keywords): Add 'retargetable'. In ilasm/parser: * ILParser.jay (K_RETARGETABLE): New. (asm_attr): Add rule for K_RETARGETABLE. (assembly_head): Handle attributes. (assemblyref_head): Add asm_attr. In class/PEAPI: * Metadata.cs (AssemAttr.Retargetable): New. (AssemblyRef.AddAssemblyAttr): New. svn path=/trunk/mcs/; revision=67582
Diffstat (limited to 'mcs/ilasm')
-rw-r--r--mcs/ilasm/codegen/Assembly.cs7
-rw-r--r--mcs/ilasm/codegen/ChangeLog12
-rw-r--r--mcs/ilasm/codegen/CodeGen.cs7
-rw-r--r--mcs/ilasm/codegen/ExternTable.cs14
-rw-r--r--mcs/ilasm/parser/ChangeLog7
-rw-r--r--mcs/ilasm/parser/ILParser.jay26
-rw-r--r--mcs/ilasm/scanner/ChangeLog4
-rw-r--r--mcs/ilasm/scanner/ILTables.cs1
8 files changed, 61 insertions, 17 deletions
diff --git a/mcs/ilasm/codegen/Assembly.cs b/mcs/ilasm/codegen/Assembly.cs
index 2a58988b47d..ed8842bc122 100644
--- a/mcs/ilasm/codegen/Assembly.cs
+++ b/mcs/ilasm/codegen/Assembly.cs
@@ -46,6 +46,7 @@ namespace Mono.ILASM {
private int revision_version;
private string locale;
private int hash_algorithm;
+ private PEAPI.AssemAttr attr;
public Assembly (string name)
{
@@ -87,6 +88,11 @@ namespace Mono.ILASM {
this.public_key = public_key;
}
+ public void SetAssemblyAttr (PEAPI.AssemAttr attr)
+ {
+ this.attr = attr;
+ }
+
public void AddCustomAttribute (CustomAttr customattr)
{
if (customattr_list == null)
@@ -111,6 +117,7 @@ namespace Mono.ILASM {
revision_version, public_key,
(uint) hash_algorithm, locale);
+ asm.AddAssemblyAttr (attr);
}
}
}
diff --git a/mcs/ilasm/codegen/ChangeLog b/mcs/ilasm/codegen/ChangeLog
index 1723adf776a..e85763a4ab3 100644
--- a/mcs/ilasm/codegen/ChangeLog
+++ b/mcs/ilasm/codegen/ChangeLog
@@ -1,3 +1,15 @@
+2006-11-09 Ankit Jain <jankit@novell.com>
+
+ * CodeGen.cs (CodeGen.BeginAssemblyRef): Add param for attributes.
+ (SetAssemblyName): Rename to ..
+ (SetThisAssembly): .. this. Add param for attributes.
+ * ExternTable (ExternAssembly.ctor): Likewise.
+ (ExternAssembly.Resolve): Add attributes.
+ (ExternTable.AddAssembly): Add param for attributes.
+ (ExternTable): Update to changes.
+ * Assembly.cs (Assembly.SetAssemblyAttr): New.
+ (Assembly.Resolve): Add the flags.
+
2006-07-20 Ankit Jain <jankit@novell.com>
* TypeDef.cs (.ctor): If the type is an interface, then make it
diff --git a/mcs/ilasm/codegen/CodeGen.cs b/mcs/ilasm/codegen/CodeGen.cs
index 5fcf3cac5cf..73f477403cb 100644
--- a/mcs/ilasm/codegen/CodeGen.cs
+++ b/mcs/ilasm/codegen/CodeGen.cs
@@ -238,12 +238,13 @@ namespace Mono.ILASM {
this.stack_reserve = stack_reserve;
}
- public void SetAssemblyName (string name)
+ public void SetThisAssembly (string name, PEAPI.AssemAttr attr)
{
if (this_assembly != null && this_assembly.Name != name)
Report.Error ("Multiple assembly declarations");
this_assembly = new Assembly (name);
+ this_assembly.SetAssemblyAttr (attr);
if (name != "mscorlib")
ExternTable.AddCorlib ();
}
@@ -409,9 +410,9 @@ namespace Mono.ILASM {
}
- public void BeginAssemblyRef (string name, AssemblyName asmb_name)
+ public void BeginAssemblyRef (string name, AssemblyName asmb_name, PEAPI.AssemAttr attr)
{
- current_customattrtarget = current_assemblyref = ExternTable.AddAssembly (name, asmb_name);
+ current_customattrtarget = current_assemblyref = ExternTable.AddAssembly (name, asmb_name, attr);
current_declsectarget = current_assemblyref;
}
diff --git a/mcs/ilasm/codegen/ExternTable.cs b/mcs/ilasm/codegen/ExternTable.cs
index 037ecfada85..ff0237d8398 100644
--- a/mcs/ilasm/codegen/ExternTable.cs
+++ b/mcs/ilasm/codegen/ExternTable.cs
@@ -146,11 +146,14 @@ namespace Mono.ILASM {
private byte [] hash;
private DeclSecurity decl_sec;
private AssemblyName asmb_name;
+ //flags
+ private PEAPI.AssemAttr attr;
- public ExternAssembly (string name, AssemblyName asmb_name) : base (name)
+ public ExternAssembly (string name, AssemblyName asmb_name, PEAPI.AssemAttr attr) : base (name)
{
this.name = name;
this.asmb_name = asmb_name;
+ this.attr = attr;
major = minor = build = revision = -1;
}
@@ -180,6 +183,7 @@ namespace Mono.ILASM {
return;
AssemblyRef = code_gen.PEFile.AddExternAssembly (name);
+ AssemblyRef.AddAssemblyAttr (attr);
if (major != -1)
AssemblyRef.AddVersionInfo (major, minor, build, revision);
if (public_key != null)
@@ -256,14 +260,14 @@ namespace Mono.ILASM {
string mscorlib_name = "mscorlib";
AssemblyName mscorlib = new AssemblyName ();
mscorlib.Name = mscorlib_name;
- AddAssembly (mscorlib_name, mscorlib);
+ AddAssembly (mscorlib_name, mscorlib, 0);
// Also need to alias corlib, normally corlib and
// mscorlib are used interchangably
assembly_table["corlib"] = assembly_table["mscorlib"];
}
- public ExternAssembly AddAssembly (string name, AssemblyName asmb_name)
+ public ExternAssembly AddAssembly (string name, AssemblyName asmb_name, PEAPI.AssemAttr attr)
{
ExternAssembly ea = null;
@@ -275,7 +279,7 @@ namespace Mono.ILASM {
return ea;
}
- ea = new ExternAssembly (name, asmb_name);
+ ea = new ExternAssembly (name, asmb_name, attr);
assembly_table [name] = ea;
@@ -334,7 +338,7 @@ namespace Mono.ILASM {
asmname.Name = asmb_name;
Report.Warning (String.Format ("Reference to undeclared extern assembly '{0}', adding.", asmb_name));
- ext_asmb = AddAssembly (asmb_name, asmname);
+ ext_asmb = AddAssembly (asmb_name, asmname, 0);
}
return ext_asmb.GetTypeRef (full_name, is_valuetype);
diff --git a/mcs/ilasm/parser/ChangeLog b/mcs/ilasm/parser/ChangeLog
index 470b98ef8b2..a321058e29b 100644
--- a/mcs/ilasm/parser/ChangeLog
+++ b/mcs/ilasm/parser/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-09 Ankit Jain <jankit@novell.com>
+
+ * ILParser.jay (K_RETARGETABLE): New.
+ (asm_attr): Add rule for K_RETARGETABLE.
+ (assembly_head): Handle attributes.
+ (assemblyref_head): Add asm_attr.
+
2006-06-07 Ankit Jain <jankit@novell.com>
* ILParser.jay : Update to use Report.Warning instead of
diff --git a/mcs/ilasm/parser/ILParser.jay b/mcs/ilasm/parser/ILParser.jay
index c7dc4318018..40c09f14eb2 100644
--- a/mcs/ilasm/parser/ILParser.jay
+++ b/mcs/ilasm/parser/ILParser.jay
@@ -460,6 +460,7 @@ namespace Mono.ILASM {
// %token K_PUBLICKEY
%token K_ENABLEJITTRACKING
%token K_DISABLEJITOPTIMIZER
+%token K_RETARGETABLE
%token K_PRESERVESIG
%token K_BEFOREFIELDINIT
%token K_ALIGNMENT
@@ -3059,16 +3060,23 @@ assembly_all : assembly_head OPEN_BRACE assembly_decls CLOSE_BRACE
assembly_head : D_ASSEMBLY asm_attr slashed_name
{
- codegen.SetAssemblyName ((string) $3);
+ codegen.SetThisAssembly ((string) $3, (PEAPI.AssemAttr) $2);
codegen.CurrentCustomAttrTarget = codegen.ThisAssembly;
codegen.CurrentDeclSecurityTarget = codegen.ThisAssembly;
}
;
asm_attr : /* EMPTY */
- | asm_attr K_NOAPPDOMAIN
+ {
+ $$ = new PEAPI.AssemAttr ();
+ }
+ /*| asm_attr K_NOAPPDOMAIN
| asm_attr K_NOPROCESS
- | asm_attr K_NOMACHINE
+ | asm_attr K_NOMACHINE*/
+ | asm_attr K_RETARGETABLE
+ {
+ $$ = ((PEAPI.AssemAttr) $1) | PEAPI.AssemAttr.Retargetable;
+ }
;
assembly_decls : /* EMPTY */
@@ -3112,19 +3120,19 @@ asm_or_ref_decl : D_PUBLICKEY ASSIGN bytes_list
assemblyref_all : assemblyref_head OPEN_BRACE assemblyref_decls CLOSE_BRACE
;
-assemblyref_head : D_ASSEMBLY K_EXTERN slashed_name
+assemblyref_head : D_ASSEMBLY K_EXTERN asm_attr slashed_name
{
System.Reflection.AssemblyName asmb_name =
new System.Reflection.AssemblyName ();
- asmb_name.Name = (string) $3;
- codegen.BeginAssemblyRef ((string) $3, asmb_name);
+ asmb_name.Name = (string) $4;
+ codegen.BeginAssemblyRef ((string) $4, asmb_name, (PEAPI.AssemAttr) $3);
}
- | D_ASSEMBLY K_EXTERN slashed_name K_AS slashed_name
+ | D_ASSEMBLY K_EXTERN asm_attr slashed_name K_AS slashed_name
{
System.Reflection.AssemblyName asmb_name =
new System.Reflection.AssemblyName ();
- asmb_name.Name = (string) $3;
- codegen.BeginAssemblyRef ((string) $5, asmb_name);
+ asmb_name.Name = (string) $4;
+ codegen.BeginAssemblyRef ((string) $6, asmb_name, (PEAPI.AssemAttr) $3);
}
;
diff --git a/mcs/ilasm/scanner/ChangeLog b/mcs/ilasm/scanner/ChangeLog
index 064721497aa..103e7bc94a9 100644
--- a/mcs/ilasm/scanner/ChangeLog
+++ b/mcs/ilasm/scanner/ChangeLog
@@ -1,3 +1,7 @@
+2006-11-09 Ankit Jain <jankit@novell.com>
+
+ * ILTables.cs (keywords): Add 'retargetable'.
+
2006-05-26 Ankit Jain <jankit@novell.com>
* ILTables.cs (keywords): Move 'property' out of NET_2_0 .
diff --git a/mcs/ilasm/scanner/ILTables.cs b/mcs/ilasm/scanner/ILTables.cs
index e215ff960ad..0a9e994ce70 100644
--- a/mcs/ilasm/scanner/ILTables.cs
+++ b/mcs/ilasm/scanner/ILTables.cs
@@ -301,6 +301,7 @@ namespace Mono.ILASM {
// keywords ["publickey"] = new ILToken (Token.K_PUBLICKEY, "publickey");
keywords ["enablejittracking"] = new ILToken (Token.K_ENABLEJITTRACKING, "enablejittracking");
keywords ["disablejitoptimizer"] = new ILToken (Token.K_DISABLEJITOPTIMIZER, "disablejitoptimizer");
+ keywords ["retargetable"] = new ILToken (Token.K_RETARGETABLE, "retargetable");
keywords ["preservesig"] = new ILToken (Token.K_PRESERVESIG, "preservesig");
keywords ["beforefieldinit"] = new ILToken (Token.K_BEFOREFIELDINIT, "beforefieldinit");
keywords ["alignment"] = new ILToken (Token.K_ALIGNMENT, "alignment");