private static void ProcessPropertySetExclude(PropertyInformation pi, IlBuilder processor) { processor.LoadArg(0); processor.LoadArg(1); processor.SetField(pi.FieldDefinition); processor.Return(); processor.Append(); }
private void ProcessComposedOfInit(IlBuilder processor) { foreach (var kv in _coTypes) { processor.LoadArg(0); processor.LoadArg(0); processor.NewObj(kv.Key.GetFirstConstructor()); processor.SetField(kv.Value); } }
private void ProcessPropertySetNormal(IlBuilder processor) { processor.Return(); processor.Append(); if (ProcessorSettings.AddCompareToSetProperty) { ProcessPropertySetNormalCompare(processor); } processor.LoadArg(0); processor.LoadArg(1); processor.SetField(_pi.FieldDefinition); processor.InsertBefore(_pi.PropertyDefinition.SetMethod.Body.Instructions.LastItem()); }
private void GenerateConstructor() { var method = new MethodDefinition(".ctor", CtorAttr, _handler.VoidType); method.Parameters.Add(new ParameterDefinition("owner", ParameterAttributes.None, _model)); var processor = new IlBuilder(method.Body); processor.LoadArg(0); processor.Call(_handler.ObjectTypeCtor); processor.LoadArg(0); processor.LoadArg(1); processor.SetField(_result.Fields[0]); processor.Return(); processor.Append(); _result.Methods.Add(method); }
private void ProcessGenericPropertyInConstructor(PropertyInformation pi, IlBuilder processor) { processor.LoadArg(0).LoadArg(0); MethodReference ci1; var ft = (GenericInstanceType)pi.FieldDefinition.FieldType; if (pi.IsHasOne || pi.IsHasMany || pi.IsHasAndBelongsToMany) { ci1 = ft.GetConstructor(typeof(DbObjectSmartUpdate), typeof(string), typeof(string)); var ob = GetOrderByString(pi); if (string.IsNullOrEmpty(ob)) { processor.LoadNull(); } else { processor.LoadString(ob); } } else { ci1 = ft.GetConstructor(typeof(DbObjectSmartUpdate), typeof(string)); } if (pi.IsLazyLoad) { processor.LoadString(pi.ColumnName); } else { processor.Nop().Nop().Nop().Nop().LoadString(pi.FieldDefinition.Name); } var ctor = _handler.Import(ci1); ctor.DeclaringType = ft; //NOTE: might be a bug of Cecil processor.NewObj(ctor); processor.SetField(pi.FieldDefinition); }