GetImage() public method

public GetImage ( TargetAddress address ) : MonoSymbolFile
address TargetAddress
return MonoSymbolFile
Example #1
0
        public static MonoClassInfo ReadClassInfo(MonoLanguageBackend mono,
							   TargetMemoryAccess target,
							   TargetAddress klass)
        {
            TargetAddress image = mono.MetadataHelper.MonoClassGetMonoImage (target, klass);
            MonoSymbolFile file = mono.GetImage (image);
            if (file == null)
                throw new InternalError ();

            int token = mono.MetadataHelper.MonoClassGetToken (target, klass);
            if ((token & 0xff000000) != 0x02000000)
                throw new InternalError ();

            Cecil.TypeDefinition typedef;
            typedef = (Cecil.TypeDefinition) file.ModuleDefinition.LookupByToken (
                Cecil.Metadata.TokenType.TypeDef, token & 0x00ffffff);
            if (typedef == null)
                throw new InternalError ();

            MonoClassInfo info = new MonoClassInfo (file, typedef, target, klass);
            if ((file == mono.BuiltinTypes.Corlib) &&
                (typedef.FullName == "System.Decimal")) {
                MonoFundamentalType ftype = mono.BuiltinTypes.DecimalType;

                if (ftype.ClassType == null) {
                    MonoClassType ctype = new MonoClassType (file, typedef, info);
                    ((IMonoStructType) ctype).ClassInfo = info;
                    ftype.SetClass (ctype);
                }

                info.struct_type = (IMonoStructType) ftype.ClassType;
                info.type = ftype;
            } else if (info.IsGenericClass) {
                info.struct_type = (IMonoStructType)
                    file.MonoLanguage.ReadGenericClass (
                        target, info.GenericClass, false);
                info.type = info.struct_type.Type;
            } else {
                info.type = file.LookupMonoType (typedef);
                if (info.type is TargetClassType)
                    info.struct_type = (IMonoStructType) info.type;
                else
                    info.struct_type = (IMonoStructType) info.type.ClassType;
            }
            info.struct_type.ClassInfo = info;
            return info;
        }