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); }
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); }
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); }
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); }
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); }
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); } }
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); } }