Example #1
0
        IField GetField(object token)
        {
            if (token is Mono.Cecil.FieldDefinition)
            {
                Mono.Cecil.FieldDefinition field = token as Mono.Cecil.FieldDefinition;
                var type = GetType(field.DeclaringType.FullName, field.Module);
                return(type.GetField(field.Name));
            }
            else if (token is Mono.Cecil.FieldReference)
            {
                Mono.Cecil.FieldReference field = token as Mono.Cecil.FieldReference;
                var type = GetType(field.DeclaringType.FullName, field.Module);
                return(type.GetField(field.Name));
            }
            //else if(token is CLRSharp_Instance)
            // {
            //CLRSharp_Instance inst = token as CLRSharp_Instance;
            //return inst.Fields[field.Name];
            // }

            else
            {
                throw new NotImplementedException("不可处理的token" + token.GetType().ToString());
            }
        }
Example #2
0
        public IField GetField(object token)
        {
            IField __field = null;

            if (fieldCache.TryGetValue(token.GetHashCode(), out __field))
            {
                return(__field);
            }
            if (token is Mono.Cecil.FieldDefinition)
            {
                Mono.Cecil.FieldDefinition field = token as Mono.Cecil.FieldDefinition;
                var type = GetType(field.DeclaringType.FullName);
                __field = type.GetField(field.Name);
            }
            else if (token is Mono.Cecil.FieldReference)
            {
                Mono.Cecil.FieldReference field = token as Mono.Cecil.FieldReference;
                var type = GetType(field.DeclaringType.FullName);
                __field = type.GetField(field.Name);
            }
            //else if(token is CLRSharp_Instance)
            // {
            //CLRSharp_Instance inst = token as CLRSharp_Instance;
            //return inst.Fields[field.Name];
            // }

            else
            {
                throw new NotImplementedException("不可处理的token" + token.GetType().ToString());
            }
            fieldCache[token.GetHashCode()] = __field;
            return(__field);
        }
Example #3
0
        public IField Resolve(Mono.Cecil.FieldReference fieldReference)
        {
            IField field = context.Resolve(fieldReference);

            if (field != null)
            {
                field = (IField)field.Specialize(substitution);
            }
            return(field);
        }
        public TypeInformation(Mono.Cecil.TypeReference parentType, Mono.Cecil.FieldDefinition fieldInfo, TypeAttribute inheritedAttribute,
                               string parent = null)
        {
            FieldInfo = fieldInfo;
            Type      = fieldInfo.FieldType;
            Fields    = new List <TypeInformation>();
            Attribute = inheritedAttribute;

            ParseAttribute(CecilExtensions.GetGhostFieldAttribute(parentType, fieldInfo));
            Parent = string.IsNullOrEmpty(parent) ? "" : parent;
        }
        bool MatchInitializeArrayCall(ILInstruction instruction, out IMethod method, out ILVariable array, out Mono.Cecil.FieldReference field)
        {
            method = null;
            array  = null;
            field  = null;
            Call call = instruction as Call;

            if (call == null || call.Arguments.Count != 2)
            {
                return(false);
            }
            method = call.Method;
            if (method.DeclaringTypeDefinition == null || method.DeclaringTypeDefinition.FullName != "System.Runtime.CompilerServices.RuntimeHelpers")
            {
                return(false);
            }
            if (method.Name != "InitializeArray")
            {
                return(false);
            }
            if (!call.Arguments[0].MatchLdLoc(out array))
            {
                return(false);
            }
            IMember member;

            if (!call.Arguments[1].MatchLdMemberToken(out member))
            {
                return(false);
            }
            field = context.TypeSystem.GetCecil(member) as Mono.Cecil.FieldReference;
            if (field == null)
            {
                return(false);
            }
            return(true);
        }
Example #6
0
 public static void StoreStaticField(Mono.Cecil.FieldReference field)
 {
     CurrentEmitContext.Emit(CreateInstruction.StoreStaticField(field));
 }
Example #7
0
 public static void LoadStaticFieldAdress(Mono.Cecil.FieldReference field)
 {
     CurrentEmitContext.Emit(CreateInstruction.LoadStaticFieldAdress(field));
 }
Example #8
0
        public static Instruction StoreStaticField(Mono.Cecil.FieldReference field)

        {
            return(Instruction.Create(OpCodes.Stsfld, field));
        }
Example #9
0
        public static Instruction LoadStaticFieldAdress(Mono.Cecil.FieldReference field)

        {
            return(Instruction.Create(OpCodes.Ldsflda, field));
        }
Example #10
0
        public static Instruction LoadField(Mono.Cecil.FieldReference field)

        {
            return(Instruction.Create(OpCodes.Ldfld, field));
        }