Exemple #1
0
        private static RuntimeAssemblyName CreateRuntimeAssemblyNameFromMetadata(
            MetadataReader reader,
            ConstantStringValueHandle name,
            ushort majorVersion,
            ushort minorVersion,
            ushort buildNumber,
            ushort revisionNumber,
            ConstantStringValueHandle culture,
            IEnumerable <byte> publicKeyOrToken,
            AssemblyFlags assemblyFlags)
        {
            AssemblyNameFlags assemblyNameFlags = AssemblyNameFlags.None;

            if (0 != (assemblyFlags & AssemblyFlags.PublicKey))
            {
                assemblyNameFlags |= AssemblyNameFlags.PublicKey;
            }
            if (0 != (assemblyFlags & AssemblyFlags.Retargetable))
            {
                assemblyNameFlags |= AssemblyNameFlags.Retargetable;
            }
            int contentType = ((int)assemblyFlags) & 0x00000E00;

            assemblyNameFlags |= (AssemblyNameFlags)contentType;

            return(new RuntimeAssemblyName(
                       name.GetString(reader),
                       new Version(majorVersion, minorVersion, buildNumber, revisionNumber),
                       culture.GetStringOrNull(reader),
                       assemblyNameFlags,
                       publicKeyOrToken.ToArray()
                       ));
        }
Exemple #2
0
        public sealed override string InternalGetNameIfAvailable(ref Type rootCauseForFailure)
        {
            ConstantStringValueHandle nameHandle = _typeDefinition.Name;
            string name = nameHandle.GetString(_reader);

            return(name.EscapeTypeNameIdentifier());
        }
        private static RuntimeAssemblyName CreateRuntimeAssemblyNameFromMetadata(
            MetadataReader reader,
            ConstantStringValueHandle name,
            ushort majorVersion,
            ushort minorVersion,
            ushort buildNumber,
            ushort revisionNumber,
            ConstantStringValueHandle culture,
            IEnumerable<byte> publicKeyOrToken,
            AssemblyFlags assemblyFlags)
        {
            AssemblyNameFlags assemblyNameFlags = AssemblyNameFlags.None;
            if (0 != (assemblyFlags & AssemblyFlags.PublicKey))
                assemblyNameFlags |= AssemblyNameFlags.PublicKey;
            if (0 != (assemblyFlags & AssemblyFlags.Retargetable))
                assemblyNameFlags |= AssemblyNameFlags.Retargetable;
            int contentType = ((int)assemblyFlags) & 0x00000E00;
            assemblyNameFlags |= (AssemblyNameFlags)contentType;

            ArrayBuilder<byte> keyOrTokenArrayBuilder = new ArrayBuilder<byte>();
            foreach (byte b in publicKeyOrToken)
                keyOrTokenArrayBuilder.Add(b);

            return new RuntimeAssemblyName(
                name.GetString(reader),
                new Version(majorVersion, minorVersion, buildNumber, revisionNumber),
                culture.GetStringOrNull(reader),
                assemblyNameFlags,
                keyOrTokenArrayBuilder.ToArray()
                );
        }
Exemple #4
0
 // Useful for namespace Name string which can be a null handle.
 public static String GetStringOrNull(this ConstantStringValueHandle handle, MetadataReader reader)
 {
     if (reader.IsNull(handle))
     {
         return(null);
     }
     return(reader.GetConstantStringValue(handle).Value);
 }
        // This is specially designed for a hot path so we make some compromises in the signature:
        //
        //     - "method" is passed by reference even though no side-effects are intended.
        //
        public static bool IsConstructor(ref Method method, MetadataReader reader)
        {
            if ((method.Flags & (MethodAttributes.RTSpecialName | MethodAttributes.SpecialName)) != (MethodAttributes.RTSpecialName | MethodAttributes.SpecialName))
            {
                return(false);
            }

            ConstantStringValueHandle nameHandle = method.Name;

            return(nameHandle.StringEquals(ConstructorInfo.ConstructorName, reader) || nameHandle.StringEquals(ConstructorInfo.TypeConstructorName, reader));
        }
 public static bool StringOrNullEquals(this ConstantStringValueHandle handle, String valueOrNull, MetadataReader reader)
 {
     if (valueOrNull == null)
     {
         return(handle.IsNull(reader));
     }
     if (handle.IsNull(reader))
     {
         return(false);
     }
     return(handle.StringEquals(valueOrNull, reader));
 }
Exemple #7
0
        public static bool GetAttributeNamespaceAndName(this MetadataReader metadataReader, CustomAttributeHandle attributeHandle,
                                                        out string namespaceString, out ConstantStringValueHandle nameHandle)
        {
            Handle attributeType, attributeCtor;

            if (!GetAttributeTypeAndConstructor(metadataReader, attributeHandle, out attributeType, out attributeCtor))
            {
                namespaceString = null;
                nameHandle      = default(ConstantStringValueHandle);
                return(false);
            }

            return(GetAttributeTypeNamespaceAndName(metadataReader, attributeType, out namespaceString, out nameHandle));
        }
        private static RuntimeAssemblyName CreateRuntimeAssemblyNameFromMetadata(
            MetadataReader reader,
            ConstantStringValueHandle name,
            ushort majorVersion,
            ushort minorVersion,
            ushort buildNumber,
            ushort revisionNumber,
            ConstantStringValueHandle culture,
            ByteCollection publicKeyOrToken,
            global::Internal.Metadata.NativeFormat.AssemblyFlags assemblyFlags)
        {
            AssemblyNameFlags assemblyNameFlags = AssemblyNameFlags.None;

            if (0 != (assemblyFlags & global::Internal.Metadata.NativeFormat.AssemblyFlags.PublicKey))
            {
                assemblyNameFlags |= AssemblyNameFlags.PublicKey;
            }
            if (0 != (assemblyFlags & global::Internal.Metadata.NativeFormat.AssemblyFlags.Retargetable))
            {
                assemblyNameFlags |= AssemblyNameFlags.Retargetable;
            }
            int contentType = ((int)assemblyFlags) & 0x00000E00;

            assemblyNameFlags |= (AssemblyNameFlags)contentType;

            ArrayBuilder <byte> keyOrTokenArrayBuilder = new ArrayBuilder <byte>();

            foreach (byte b in publicKeyOrToken)
            {
                keyOrTokenArrayBuilder.Add(b);
            }

            return(new RuntimeAssemblyName(
                       name.GetString(reader),
                       new Version(majorVersion, minorVersion, buildNumber, revisionNumber),
                       culture.GetStringOrNull(reader),
                       assemblyNameFlags,
                       keyOrTokenArrayBuilder.ToArray()
                       ));
        }
Exemple #9
0
 public static string GetString(this ConstantStringValueHandle handle, MetadataReader reader)
 {
     return(reader.GetConstantStringValue(handle).Value);
 }
Exemple #10
0
 /// <summary>
 /// Emit a string (represented by a serialized ConstantStringValue) to the output string builder.
 /// </summary>
 /// <param name="stringHandle">Constant string value token (offset within stack trace native metadata)</param>
 private void EmitString(ConstantStringValueHandle stringHandle)
 {
     _outputBuilder.Append(_metadataReader.GetConstantStringValue(stringHandle).Value);
 }
Exemple #11
0
        internal NamespaceChain(MetadataReader reader, NamespaceDefinitionHandle innerMostNamespaceHandle)
        {
            NamespaceDefinition       currentNamespaceDefinition = innerMostNamespaceHandle.GetNamespaceDefinition(reader);
            ConstantStringValueHandle currentNameHandle          = currentNamespaceDefinition.Name;
            Handle currentNamespaceHandle = innerMostNamespaceHandle.ToHandle(reader);
            LowLevelList <String> names   = new LowLevelList <String>();

            for (;;)
            {
                String name = currentNameHandle.GetStringOrNull(reader);
                names.Add(name);
                currentNamespaceHandle = currentNamespaceDefinition.ParentScopeOrNamespace;
                HandleType handleType = currentNamespaceHandle.HandleType;
                if (handleType == HandleType.ScopeDefinition)
                {
                    break;
                }
                if (handleType == HandleType.NamespaceDefinition)
                {
                    NamespaceDefinitionHandle nsHandle = currentNamespaceHandle.ToNamespaceDefinitionHandle(reader);
                    currentNamespaceDefinition = nsHandle.GetNamespaceDefinition(reader);
                    currentNameHandle          = currentNamespaceDefinition.Name;
                    continue;
                }

                throw new BadImageFormatException(SR.Bif_InvalidMetadata);
            }

            DefiningScope = currentNamespaceHandle.ToScopeDefinitionHandle(reader);

            int count = names.Count;

            if (count == 0)
            {
                // Every namespace chain has to start with the root namespace.
                throw new BadImageFormatException();
            }
            else if (count == 1)
            {
                // The root namespace. For compat with the desktop, TypeInfo.NameSpaces returns null in this case.
                NameSpace = null;
            }
            else
            {
                // Namespace has at least one non-root component.
                StringBuilder sb  = new StringBuilder();
                int           idx = count - 1;
                while (idx-- != 0)
                {
                    String name = names[idx];
                    if (name == null)
                    {
                        throw new BadImageFormatException(); // null namespace fragment found in middle.
                    }
                    sb.Append(name);
                    if (idx != 0)
                    {
                        sb.Append('.');
                    }
                }
                NameSpace = sb.ToString();
            }
        }
 public sealed override bool Matches(ConstantStringValueHandle stringHandle, MetadataReader reader) => stringHandle.GetConstantStringValue(reader).Value.Equals(ExpectedName, StringComparison.OrdinalIgnoreCase);
 public sealed override bool Matches(ConstantStringValueHandle stringHandle, MetadataReader reader) => stringHandle.StringEquals(ExpectedName, reader);
 public abstract bool Matches(ConstantStringValueHandle stringHandle, MetadataReader reader);
Exemple #15
0
        public static bool GetAttributeTypeNamespaceAndName(this MetadataReader metadataReader, Handle attributeType,
                                                            out string namespaceString, out ConstantStringValueHandle nameHandle)
        {
            namespaceString = null;
            nameHandle      = default(ConstantStringValueHandle);

            if (attributeType.HandleType == HandleType.TypeReference)
            {
                TypeReference typeRefRow = metadataReader.GetTypeReference(attributeType.ToTypeReferenceHandle(metadataReader));
                HandleType    handleType = typeRefRow.ParentNamespaceOrType.HandleType;

                // Nested type?
                if (handleType == HandleType.TypeReference || handleType == HandleType.TypeDefinition)
                {
                    return(false);
                }

                nameHandle      = typeRefRow.TypeName;
                namespaceString = metadataReader.GetNamespaceName(typeRefRow.ParentNamespaceOrType.ToNamespaceReferenceHandle(metadataReader));
                return(true);
            }
            else if (attributeType.HandleType == HandleType.TypeDefinition)
            {
                var def = metadataReader.GetTypeDefinition(attributeType.ToTypeDefinitionHandle(metadataReader));

                // Nested type?
                if (IsNested(def.Flags))
                {
                    return(false);
                }

                nameHandle      = def.Name;
                namespaceString = metadataReader.GetNamespaceName(def.NamespaceDefinition);
                return(true);
            }
            else
            {
                // unsupported metadata
                return(false);
            }
        }