public void AddIncParameter(ParameterBuilder parameterInfo, Parser.IncDecOps incOp) { switch (incOp) { case Parser.IncDecOps.PostInc: il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Starg, parameterInfo.Position - 1); break; case Parser.IncDecOps.PostDec: il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Starg, parameterInfo.Position - 1); break; case Parser.IncDecOps.PreInc: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Starg, parameterInfo.Position - 1); break; case Parser.IncDecOps.PreDec: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Starg, parameterInfo.Position - 1); break; } }
public void AddIncLocalVar(LocalVariableInfo localVariableInfo, Parser.IncDecOps incOp) { switch (incOp) { case Parser.IncDecOps.PostInc: il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Stloc, (LocalBuilder)localVariableInfo); break; case Parser.IncDecOps.PostDec: il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Stloc, (LocalBuilder)localVariableInfo); break; case Parser.IncDecOps.PreInc: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Stloc, (LocalBuilder)localVariableInfo); break; case Parser.IncDecOps.PreDec: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Stloc, (LocalBuilder)localVariableInfo); break; } }
public void AddIncField(FieldInfo fieldInfo, Parser.IncDecOps incOp) { switch (incOp) { case Parser.IncDecOps.PostInc: il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Stsfld, fieldInfo); break; case Parser.IncDecOps.PostDec: il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Stsfld, fieldInfo); break; case Parser.IncDecOps.PreInc: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Stsfld, fieldInfo); break; case Parser.IncDecOps.PreDec: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Stsfld, fieldInfo); break; } }
public void AddIncArray(FieldInfo fieldInfo, Parser.IncDecOps incOp) { LocalBuilder tempLocal; Type elemType; switch (incOp) { case Parser.IncDecOps.PostInc: elemType = fieldInfo.FieldType.GetElementType(); il.Emit(OpCodes.Ldelema, elemType); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldobj, elemType); il.Emit(OpCodes.Dup); tempLocal = il.DeclareLocal(elemType); il.Emit(OpCodes.Stloc, tempLocal); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Stobj, elemType); il.Emit(OpCodes.Ldloc, tempLocal); break; case Parser.IncDecOps.PostDec: elemType = fieldInfo.FieldType.GetElementType(); il.Emit(OpCodes.Ldelema, elemType); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldobj, elemType); il.Emit(OpCodes.Dup); tempLocal = il.DeclareLocal(elemType); il.Emit(OpCodes.Stloc, tempLocal); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Stobj, elemType); il.Emit(OpCodes.Ldloc, tempLocal); break; case Parser.IncDecOps.PreInc: elemType = fieldInfo.FieldType.GetElementType(); il.Emit(OpCodes.Ldelema, elemType); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldobj, elemType); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); il.Emit(OpCodes.Dup); tempLocal = il.DeclareLocal(elemType); il.Emit(OpCodes.Stloc, tempLocal); il.Emit(OpCodes.Stobj, elemType); il.Emit(OpCodes.Ldloc, tempLocal); break; case Parser.IncDecOps.PreDec: elemType = fieldInfo.FieldType.GetElementType(); il.Emit(OpCodes.Ldelema, elemType); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldobj, elemType); il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Dup); tempLocal = il.DeclareLocal(elemType); il.Emit(OpCodes.Stloc, tempLocal); il.Emit(OpCodes.Stobj, elemType); il.Emit(OpCodes.Ldloc, tempLocal); break; } }