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

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2015-04-06 10:06:31 +0300
committerjfrijters <jfrijters>2015-04-06 10:06:31 +0300
commitec3143fd38942c189fd59fb76bca773504db4d57 (patch)
tree88a285685ac1554ec88cf186bc318f1bf4365703
parent996ecfeb04ade968f44c1754f39c1edcfce707fe (diff)
Added internal Type.TypeName virtual property to retrieve type name with a single virtual method call.
-rw-r--r--reflect/CustomAttributeData.cs5
-rw-r--r--reflect/Emit/EnumBuilder.cs9
-rw-r--r--reflect/Emit/ModuleBuilder.cs25
-rw-r--r--reflect/Emit/TypeBuilder.cs18
-rw-r--r--reflect/Missing.cs9
-rw-r--r--reflect/Reader/ModuleReader.cs4
-rw-r--r--reflect/Reader/TypeDefImpl.cs9
-rw-r--r--reflect/Type.cs19
8 files changed, 38 insertions, 60 deletions
diff --git a/reflect/CustomAttributeData.cs b/reflect/CustomAttributeData.cs
index 70e1b142..b9574d56 100644
--- a/reflect/CustomAttributeData.cs
+++ b/reflect/CustomAttributeData.cs
@@ -527,8 +527,9 @@ namespace IKVM.Reflection
name = null;
return false;
}
- ns = Constructor.DeclaringType.__Namespace;
- name = Constructor.DeclaringType.__Name;
+ TypeName typeName = AttributeType.TypeName;
+ ns = typeName.Namespace;
+ name = typeName.Name;
return true;
}
diff --git a/reflect/Emit/EnumBuilder.cs b/reflect/Emit/EnumBuilder.cs
index eacacb01..d396ae2b 100644
--- a/reflect/Emit/EnumBuilder.cs
+++ b/reflect/Emit/EnumBuilder.cs
@@ -39,14 +39,9 @@ namespace IKVM.Reflection.Emit
this.fieldBuilder = fieldBuilder;
}
- public override string __Name
+ internal override TypeName TypeName
{
- get { return typeBuilder.__Name; }
- }
-
- public override string __Namespace
- {
- get { return typeBuilder.__Namespace; }
+ get { return typeBuilder.TypeName; }
}
public override string Name
diff --git a/reflect/Emit/ModuleBuilder.cs b/reflect/Emit/ModuleBuilder.cs
index a3fc5fbb..8ceea42c 100644
--- a/reflect/Emit/ModuleBuilder.cs
+++ b/reflect/Emit/ModuleBuilder.cs
@@ -468,9 +468,7 @@ namespace IKVM.Reflection.Emit
// HACK we should *not* set the TypeDefId in this case, but 2.0 and 3.5 peverify gives a warning if it is missing (4.5 doesn't)
rec.TypeDefId = type.MetadataToken;
}
- rec.TypeName = this.Strings.Add(type.__Name);
- string ns = type.__Namespace;
- rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns);
+ SetTypeNameAndTypeNamespace(type.TypeName, out rec.TypeName, out rec.TypeNamespace);
if (type.IsNested)
{
rec.Flags = 0;
@@ -484,6 +482,12 @@ namespace IKVM.Reflection.Emit
return 0x27000000 | this.ExportedType.FindOrAddRecord(rec);
}
+ private void SetTypeNameAndTypeNamespace(TypeName name, out int typeName, out int typeNamespace)
+ {
+ typeName = this.Strings.Add(name.Name);
+ typeNamespace = name.Namespace == null ? 0 : this.Strings.Add(name.Namespace);
+ }
+
public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
{
SetCustomAttribute(new CustomAttributeBuilder(con, binaryAttribute));
@@ -650,7 +654,7 @@ namespace IKVM.Reflection.Emit
{
foreach (Type type in types)
{
- if (type.__Namespace == name.Namespace && type.__Name == name.Name)
+ if (type.TypeName == name)
{
return type;
}
@@ -662,7 +666,7 @@ namespace IKVM.Reflection.Emit
{
foreach (Type type in types)
{
- if (new TypeName(type.__Namespace, type.__Name).ToLowerInvariant() == lowerCaseName)
+ if (type.TypeName.ToLowerInvariant() == lowerCaseName)
{
return type;
}
@@ -908,9 +912,7 @@ namespace IKVM.Reflection.Emit
{
rec.ResolutionScope = ImportAssemblyRef(type.Assembly);
}
- rec.TypeName = this.Strings.Add(type.__Name);
- string ns = type.__Namespace;
- rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns);
+ SetTypeNameAndTypeNamespace(type.TypeName, out rec.TypeName, out rec.TypeNamespace);
token = 0x01000000 | this.TypeRef.AddRecord(rec);
}
typeTokens.Add(type, token);
@@ -1220,9 +1222,7 @@ namespace IKVM.Reflection.Emit
rec.Flags = (int)type.Attributes;
// LAMESPEC ECMA says that TypeDefId is a row index, but it should be a token
rec.TypeDefId = type.MetadataToken;
- rec.TypeName = this.Strings.Add(type.__Name);
- string ns = type.__Namespace;
- rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns);
+ SetTypeNameAndTypeNamespace(type.TypeName, out rec.TypeName, out rec.TypeNamespace);
if (type.IsNested)
{
rec.Implementation = declaringTypes[type.DeclaringType];
@@ -1604,8 +1604,7 @@ namespace IKVM.Reflection.Emit
{
TypeRefTable.Record rec = new TypeRefTable.Record();
rec.ResolutionScope = resolutionScope;
- rec.TypeName = this.Strings.Add(name);
- rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns);
+ SetTypeNameAndTypeNamespace(new TypeName(ns, name), out rec.TypeName, out rec.TypeNamespace);
return 0x01000000 | this.TypeRef.AddRecord(rec);
}
diff --git a/reflect/Emit/TypeBuilder.cs b/reflect/Emit/TypeBuilder.cs
index 41d14a24..6f17cd73 100644
--- a/reflect/Emit/TypeBuilder.cs
+++ b/reflect/Emit/TypeBuilder.cs
@@ -810,14 +810,9 @@ namespace IKVM.Reflection.Emit
}
}
- public override string __Name
+ internal override TypeName TypeName
{
- get { return name; }
- }
-
- public override string __Namespace
- {
- get { return ns; }
+ get { return new TypeName(ns, name); }
}
public override string Name
@@ -1088,14 +1083,9 @@ namespace IKVM.Reflection.Emit
get { return underlyingType.BaseType; }
}
- public override string __Name
- {
- get { return underlyingType.__Name; }
- }
-
- public override string __Namespace
+ internal override TypeName TypeName
{
- get { return underlyingType.__Namespace; }
+ get { return underlyingType.TypeName; }
}
public override string Name
diff --git a/reflect/Missing.cs b/reflect/Missing.cs
index 1754c66d..283a1326 100644
--- a/reflect/Missing.cs
+++ b/reflect/Missing.cs
@@ -454,14 +454,9 @@ namespace IKVM.Reflection
get { return declaringType; }
}
- public override string __Name
+ internal override TypeName TypeName
{
- get { return name; }
- }
-
- public override string __Namespace
- {
- get { return ns; }
+ get { return new TypeName(ns, name); }
}
public override string Name
diff --git a/reflect/Reader/ModuleReader.cs b/reflect/Reader/ModuleReader.cs
index b0cc78a3..4daa5355 100644
--- a/reflect/Reader/ModuleReader.cs
+++ b/reflect/Reader/ModuleReader.cs
@@ -279,7 +279,7 @@ namespace IKVM.Reflection.Reader
}
else if (!type.IsNestedByFlags)
{
- types.Add(new TypeName(type.__Namespace, type.__Name), type);
+ types.Add(type.TypeName, type);
}
}
// add forwarded types to forwardedTypes dictionary (because Module.GetType(string) should return them)
@@ -583,7 +583,7 @@ namespace IKVM.Reflection.Reader
PopulateTypeDef();
foreach (Type type in types.Values)
{
- if (new TypeName(type.__Namespace, type.__Name).ToLowerInvariant() == lowerCaseName)
+ if (type.TypeName.ToLowerInvariant() == lowerCaseName)
{
return type;
}
diff --git a/reflect/Reader/TypeDefImpl.cs b/reflect/Reader/TypeDefImpl.cs
index 7fb166a8..e001e552 100644
--- a/reflect/Reader/TypeDefImpl.cs
+++ b/reflect/Reader/TypeDefImpl.cs
@@ -218,14 +218,9 @@ namespace IKVM.Reflection.Reader
return Empty<PropertyInfo>.Array;
}
- public override string __Name
+ internal override TypeName TypeName
{
- get { return typeName; }
- }
-
- public override string __Namespace
- {
- get { return typeNamespace; }
+ get { return new TypeName(typeNamespace, typeName); }
}
public override string Name
diff --git a/reflect/Type.cs b/reflect/Type.cs
index 0cb1ea05..5a46f140 100644
--- a/reflect/Type.cs
+++ b/reflect/Type.cs
@@ -247,14 +247,19 @@ namespace IKVM.Reflection
get { return null; }
}
- public virtual string __Name
+ internal virtual TypeName TypeName
{
get { throw new InvalidOperationException(); }
}
- public virtual string __Namespace
+ public string __Name
{
- get { throw new InvalidOperationException(); }
+ get { return TypeName.Name; }
+ }
+
+ public string __Namespace
+ {
+ get { return TypeName.Namespace; }
}
public abstract override string Name
@@ -1064,7 +1069,7 @@ namespace IKVM.Reflection
{
foreach (Type type in __GetDeclaredTypes())
{
- if (type.__Namespace == name.Namespace && type.__Name == name.Name)
+ if (type.TypeName == name)
{
return type;
}
@@ -1076,7 +1081,7 @@ namespace IKVM.Reflection
{
foreach (Type type in __GetDeclaredTypes())
{
- if (new TypeName(type.__Namespace, type.__Name).ToLowerInvariant() == lowerCaseName)
+ if (type.TypeName.ToLowerInvariant() == lowerCaseName)
{
return type;
}
@@ -2087,7 +2092,7 @@ namespace IKVM.Reflection
if (this.Assembly == this.Universe.Mscorlib
|| this.Assembly.GetName().Name.Equals("mscorlib", StringComparison.OrdinalIgnoreCase)
// check if mscorlib forwards the type (.NETCore profile reference mscorlib forwards System.Enum and System.ValueType to System.Runtime.dll)
- || this.Universe.Mscorlib.FindType(new TypeName(__Namespace, __Name)) == this)
+ || this.Universe.Mscorlib.FindType(TypeName) == this)
{
typeFlags = (typeFlags & ~TypeFlags.PotentialEnumOrValueType) | TypeFlags.EnumOrValueType;
return true;
@@ -2707,8 +2712,6 @@ namespace IKVM.Reflection
internal static Type Make(Type type, Type[] typeArguments, CustomModifiers[] mods)
{
- if (type.Universe.SupressReferenceTypeIdentityConversion)
- return type.Universe.CanonicalizeType(new GenericTypeInstance(type, typeArguments, mods));
bool identity = true;
if (type is TypeBuilder || type is BakedType || type.__IsMissing)
{