Пример #1
0
 private static void ProcessPropertySetExclude(PropertyInformation pi, IlBuilder processor)
 {
     processor.LoadArg(0);
     processor.LoadArg(1);
     processor.SetField(pi.FieldDefinition);
     processor.Return();
     processor.Append();
 }
Пример #2
0
 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);
     }
 }
Пример #3
0
 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());
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }