diff options
author | Ankit Jain <radical@corewars.org> | 2006-11-09 12:29:17 +0300 |
---|---|---|
committer | Ankit Jain <radical@corewars.org> | 2006-11-09 12:29:17 +0300 |
commit | 66d84ed5016c9999dd5f58b04961e9d5bd4050e7 (patch) | |
tree | 576f48259923ede4a5246c52cddb2266106f2e3e /mcs/ilasm | |
parent | 41f534fdfb9688865ed07fd2e937c15164af01fe (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.cs | 7 | ||||
-rw-r--r-- | mcs/ilasm/codegen/ChangeLog | 12 | ||||
-rw-r--r-- | mcs/ilasm/codegen/CodeGen.cs | 7 | ||||
-rw-r--r-- | mcs/ilasm/codegen/ExternTable.cs | 14 | ||||
-rw-r--r-- | mcs/ilasm/parser/ChangeLog | 7 | ||||
-rw-r--r-- | mcs/ilasm/parser/ILParser.jay | 26 | ||||
-rw-r--r-- | mcs/ilasm/scanner/ChangeLog | 4 | ||||
-rw-r--r-- | mcs/ilasm/scanner/ILTables.cs | 1 |
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");
|