public override void Generate(EmitExpContext context) { ILGenerator il = context.ILout; if (newCode == 1) { var Constructor = ConstructorDesc.Constructor; LocalBuilder varLocal = il.DeclareLocal(SubjectGCL.ForType); EmitHelper.NewObj(il, Constructor); il.Emit(OpCodes.Stloc, varLocal); MethodInfo addMethod = SubjectGCL.ForType.GetMethod("Add"); ExMethodInfo exAddMethodInfo = GclUtil.CreatExMethodInfo(addMethod, SubjectGCL.ForType); if (BrackestArgs != null) { foreach (var exp in BrackestArgs.InneExps) { EmitHelper.LoadVar(il, varLocal);//il.Emit(OpCodes.Ldloc, varLocal); (exp).Generate(context); EmitHelper.CallDynamic(il, exAddMethodInfo); } } EmitHelper.LoadVar(il, varLocal);//il.Emit(OpCodes.Ldloc, varLocal); } else if (newCode == 2) { var Constructor = ConstructorDesc.Constructor; if (!IsAssignedValue) { LocalBuilder varLocal = il.DeclareLocal(SubjectGCL.ForType); emitConstructor(context);//emitArgs(context); EmitHelper.NewObj(il, Constructor); il.Emit(OpCodes.Stloc, varLocal); EmitHelper.LoadVar(il, varLocal);//il.Emit(OpCodes.Ldloc, varLocal); } else { emitConstructor(context);//emitArgs(context); EmitHelper.NewObj(il, Constructor); } } else { var Method = ProcDesc.ExMethod; emitProc(context); EmitHelper.CallDynamic(il, Method); } base.GenerateConv(context); }