diff options
author | jfrijters <jfrijters> | 2015-04-06 10:06:31 +0300 |
---|---|---|
committer | jfrijters <jfrijters> | 2015-04-06 10:06:31 +0300 |
commit | ec3143fd38942c189fd59fb76bca773504db4d57 (patch) | |
tree | 88a285685ac1554ec88cf186bc318f1bf4365703 | |
parent | 996ecfeb04ade968f44c1754f39c1edcfce707fe (diff) |
Added internal Type.TypeName virtual property to retrieve type name with a single virtual method call.
-rw-r--r-- | reflect/CustomAttributeData.cs | 5 | ||||
-rw-r--r-- | reflect/Emit/EnumBuilder.cs | 9 | ||||
-rw-r--r-- | reflect/Emit/ModuleBuilder.cs | 25 | ||||
-rw-r--r-- | reflect/Emit/TypeBuilder.cs | 18 | ||||
-rw-r--r-- | reflect/Missing.cs | 9 | ||||
-rw-r--r-- | reflect/Reader/ModuleReader.cs | 4 | ||||
-rw-r--r-- | reflect/Reader/TypeDefImpl.cs | 9 | ||||
-rw-r--r-- | reflect/Type.cs | 19 |
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) { |