Esempio n. 1
0
        private MethodDefinition AddSetterStruct(TypeWrapper typeWrapper, FieldWrapper fieldWrapper, string[] members)
        {
            MethodDefinition item = new MethodDefinition(string.Format("$Set{0}", fieldWrapper.Id), MethodAttributes.CompilerControlled | MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.Static, this.voidType);

            ((TypeDefinition)typeWrapper.Type).Methods.Add(item);
            ParameterDefinition definition2 = new ParameterDefinition("instance", ParameterAttributes.None, this.objectType);
            ParameterDefinition definition3 = new ParameterDefinition("value", ParameterAttributes.None, this.singleType);
            ParameterDefinition definition4 = new ParameterDefinition("index", ParameterAttributes.None, this.int32Type);

            item.Parameters.Add(definition2);
            item.Parameters.Add(definition3);
            item.Parameters.Add(definition4);
            MethodBody  body        = item.Body;
            ILProcessor iLProcessor = body.GetILProcessor();

            iLProcessor.EmitLdarg(definition2);
            iLProcessor.Emit(OpCodes.Castclass, typeWrapper.Type);
            if (fieldWrapper.StructSequence != null)
            {
                this.InjectFieldSetCodeStructMember(typeWrapper.Type.Module, iLProcessor, body, fieldWrapper, definition4, definition3, 0);
                return(item);
            }
            this.EmitKnownStructFieldSetReturn(typeWrapper.Type.Module, iLProcessor, body, fieldWrapper.Field, definition4, definition3);
            return(item);
        }
Esempio n. 2
0
        private MethodDefinition AddSetter(TypeWrapper typeWrapper, FieldWrapper fieldWrapper)
        {
            MethodDefinition item = new MethodDefinition(string.Format("$Set{0}", fieldWrapper.Id), MethodAttributes.CompilerControlled | MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.Static, this.voidType);

            ((TypeDefinition)typeWrapper.Type).Methods.Add(item);
            ParameterDefinition definition2 = new ParameterDefinition("instance", ParameterAttributes.None, this.objectType);
            ParameterDefinition definition3 = new ParameterDefinition("value", ParameterAttributes.None, this.GetType(fieldWrapper));

            item.Parameters.Add(definition2);
            item.Parameters.Add(definition3);
            ILProcessor iLProcessor = item.Body.GetILProcessor();

            iLProcessor.EmitLdarg(definition2);
            iLProcessor.Emit(OpCodes.Castclass, typeWrapper.Type);
            if (fieldWrapper.StructSequence != null)
            {
                this.InjectFieldSetCode(typeWrapper.Type.Module, iLProcessor, fieldWrapper, definition3, 0);
            }
            else
            {
                this.EmitSimpleFieldSetCode(typeWrapper.Type.Module, iLProcessor, fieldWrapper.Field, definition3);
            }
            iLProcessor.Emit(OpCodes.Ret);
            return(item);
        }
Esempio n. 3
0
 private void AddField64(FieldWrapper value)
 {
     value.Offset = this.CurrentOffset;
     this.Write64(0L);
     this.Write64(0L);
     this.AddString64(value.Name);
     this.Write64(0L);
     this.Write64((long)value.Type.Offset);
 }
Esempio n. 4
0
 private void AddField32(FieldWrapper value)
 {
     value.Offset = this.CurrentOffset;
     this.Write32(0);
     this.Write32(0);
     this.AddString32(value.Name);
     this.Write32(0);
     this.Write32(value.Type.Offset);
 }
Esempio n. 5
0
        private TypeReference GetFieldTypeReference(FieldWrapper nestedStructField)
        {
            MetadataType metadataType = nestedStructField.Field.FieldType.MetadataType;

            if (metadataType != MetadataType.Boolean)
            {
                if (metadataType != MetadataType.Single)
                {
                    throw new ArgumentException("Unsupported type: " + nestedStructField.Type.FullName);
                }
                return(this.singleType);
            }
            return(this.booleanType);
        }
Esempio n. 6
0
        private MethodDefinition AddGetterObject(TypeWrapper typeWrapper, FieldWrapper fieldWrapper)
        {
            MethodDefinition item = new MethodDefinition(string.Format("$Get{0}", fieldWrapper.Id), MethodAttributes.CompilerControlled | MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.Static, this.int64Type);

            ((TypeDefinition)typeWrapper.Type).Methods.Add(item);
            ParameterDefinition definition2 = new ParameterDefinition("instance", ParameterAttributes.None, this.objectType);

            item.Parameters.Add(definition2);
            ILProcessor iLProcessor = item.Body.GetILProcessor();

            iLProcessor.EmitLdarg(definition2);
            iLProcessor.Emit(OpCodes.Castclass, typeWrapper.Type);
            iLProcessor.Emit(OpCodes.Ldfld, base.ModuleContext.Import(fieldWrapper.Field));
            iLProcessor.Emit(OpCodes.Call, this.objectToGCHandleMethod);
            iLProcessor.Emit(OpCodes.Ret);
            return(item);
        }
 private void AddFieldWrappersForField(List <FieldWrapper> wrappers, FieldDefinition field, List <FieldDefinition> structSeq, ref int id)
 {
     if ((field.FieldType.MetadataType == MetadataType.ValueType) && !specialStructs.Contains <string>(field.FieldType.FullName))
     {
         List <FieldDefinition> structFields = this.GetStructFields(field.FieldType.Resolve());
         if (structFields != null)
         {
             if (structSeq == null)
             {
                 structSeq = new List <FieldDefinition>();
             }
             structSeq.Add(field);
             List <FieldWrapper> list2 = new List <FieldWrapper>();
             foreach (FieldDefinition definition in structFields)
             {
                 this.AddFieldWrappersForField(list2, definition, structSeq, ref id);
             }
             foreach (FieldWrapper wrapper in list2)
             {
                 wrapper.Name = string.Format("{0}.{1}", field.Name, wrapper.Name);
             }
             structSeq.RemoveAt(structSeq.Count - 1);
             wrappers.AddRange(list2);
         }
     }
     else
     {
         int num = id;
         id = num + 1;
         FieldWrapper item = new FieldWrapper(num, field, this.metadataContainer.AddType(field.FieldType));
         if ((structSeq != null) && (structSeq.Count > 0))
         {
             item.StructSequence = structSeq.ToArray();
         }
         wrappers.Add(item);
     }
 }
Esempio n. 8
0
        private void EmitPrivateFieldSetMethodCall(ModuleDefinition destModule, ILProcessor ilProcessor, FieldDefinition structField, FieldWrapper fieldWrapper, ParameterDefinition valueParameter, ParameterDefinition indexParameter)
        {
            string          str    = this.MakeName(structField, fieldWrapper);
            StructType      type   = base.MetadataContainer.AddStruct(structField.FieldType);
            MethodReference method = base.OperationContext.Import(destModule, type.PrivateSetters[str]);

            ilProcessor.EmitLdarg(valueParameter);
            if (indexParameter != null)
            {
                ilProcessor.EmitLdarg(indexParameter);
            }
            ilProcessor.Emit(OpCodes.Call, method);
            if (indexParameter != null)
            {
                ilProcessor.Emit(OpCodes.Ret);
            }
        }