Advertisement
Guest User

ILEmitter

a guest
Mar 1st, 2015
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.37 KB | None | 0 0
  1.         private class ILEmitter
  2.         {
  3.             public ILGenerator il;
  4.  
  5.             public ILEmitter ret()                                { il.Emit(OpCodes.Ret); return this; }
  6.             public ILEmitter cast(Type type)                      { il.Emit(OpCodes.Castclass, type); return this; }
  7.             public ILEmitter box(Type type)                       { il.Emit(OpCodes.Box, type); return this; }
  8.             public ILEmitter unbox_any(Type type)                 { il.Emit(OpCodes.Unbox_Any, type); return this; }
  9.             public ILEmitter unbox(Type type)                     { il.Emit(OpCodes.Unbox, type); return this; }
  10.             public ILEmitter call(MethodInfo method)              { il.Emit(OpCodes.Call, method); return this; }
  11.             public ILEmitter callvirt(MethodInfo method)          { il.Emit(OpCodes.Callvirt, method); return this; }
  12.             public ILEmitter ldnull()                             { il.Emit(OpCodes.Ldnull); return this; }
  13.             public ILEmitter bne_un(Label target)                 { il.Emit(OpCodes.Bne_Un, target); return this; }
  14.             public ILEmitter beq(Label target)                    { il.Emit(OpCodes.Beq, target); return this; }
  15.             public ILEmitter ldc_i4_0()                           { il.Emit(OpCodes.Ldc_I4_0); return this; }
  16.             public ILEmitter ldc_i4_1()                           { il.Emit(OpCodes.Ldc_I4_1); return this; }
  17.             public ILEmitter ldc_i4(int c)                        { il.Emit(OpCodes.Ldc_I4, c); return this; }
  18.             public ILEmitter ldarg0()                             { il.Emit(OpCodes.Ldarg_0); return this; }
  19.             public ILEmitter ldarg1()                             { il.Emit(OpCodes.Ldarg_1); return this; }
  20.             public ILEmitter ldarg2()                             { il.Emit(OpCodes.Ldarg_2); return this; }
  21.             public ILEmitter ldarga(int idx)                      { il.Emit(OpCodes.Ldarga, idx); return this; }
  22.             public ILEmitter ldarga_s(int idx)                    { il.Emit(OpCodes.Ldarga_S, idx); return this; }
  23.             public ILEmitter ldarg(int idx)                       { il.Emit(OpCodes.Ldarg, idx); return this; }
  24.             public ILEmitter ldarg_s(int idx)                     { il.Emit(OpCodes.Ldarg_S, idx); return this; }
  25.             public ILEmitter ifclass_ldind_ref(Type type)         { if (!type.IsValueType) il.Emit(OpCodes.Ldind_Ref); return this; }
  26.             public ILEmitter ldloc0()                             { il.Emit(OpCodes.Ldloc_0); return this; }
  27.             public ILEmitter ldloc1()                             { il.Emit(OpCodes.Ldloc_1); return this; }
  28.             public ILEmitter ldloc2()                             { il.Emit(OpCodes.Ldloc_2); return this; }
  29.             public ILEmitter ldloca_s(int idx)                    { il.Emit(OpCodes.Ldloca_S, idx); return this; }
  30.             public ILEmitter ldloca_s(LocalBuilder local)         { il.Emit(OpCodes.Ldloca_S, local); return this; }
  31.             public ILEmitter ldloc_s(int idx)                     { il.Emit(OpCodes.Ldloc_S, idx); return this; }
  32.             public ILEmitter ldloc_s(LocalBuilder local)          { il.Emit(OpCodes.Ldloc_S, local); return this; }
  33.             public ILEmitter ldloca(int idx)                      { il.Emit(OpCodes.Ldloca, idx); return this; }
  34.             public ILEmitter ldloca(LocalBuilder local)           { il.Emit(OpCodes.Ldloca, local); return this; }
  35.             public ILEmitter ldloc(int idx)                       { il.Emit(OpCodes.Ldloc, idx); return this; }
  36.             public ILEmitter ldloc(LocalBuilder local)            { il.Emit(OpCodes.Ldloc, local); return this; }
  37.             public ILEmitter initobj(Type type)                   { il.Emit(OpCodes.Initobj, type); return this; }
  38.             public ILEmitter newobj(ConstructorInfo ctor)         { il.Emit(OpCodes.Newobj, ctor); return this; }
  39.             public ILEmitter Throw()                              { il.Emit(OpCodes.Throw); return this; }
  40.             public ILEmitter throw_new(Type type)                 { var exp = type.GetConstructor(Type.EmptyTypes); newobj(exp).Throw(); return this; }
  41.             public ILEmitter stelem_ref()                         { il.Emit(OpCodes.Stelem_Ref); return this; }
  42.             public ILEmitter ldelem_ref()                         { il.Emit(OpCodes.Ldelem_Ref); return this; }
  43.             public ILEmitter ldlen()                              { il.Emit(OpCodes.Ldlen); return this; }
  44.             public ILEmitter stloc(int idx)                       { il.Emit(OpCodes.Stloc, idx); return this; }
  45.             public ILEmitter stloc_s(int idx)                     { il.Emit(OpCodes.Stloc_S, idx); return this; }
  46.             public ILEmitter stloc(LocalBuilder local)            { il.Emit(OpCodes.Stloc, local); return this; }
  47.             public ILEmitter stloc_s(LocalBuilder local)          { il.Emit(OpCodes.Stloc_S, local); return this; }
  48.             public ILEmitter stloc0()                             { il.Emit(OpCodes.Stloc_0); return this; }
  49.             public ILEmitter stloc1()                             { il.Emit(OpCodes.Stloc_1); return this; }
  50.             public ILEmitter mark(Label label)                    { il.MarkLabel(label); return this; }
  51.             public ILEmitter ldfld(FieldInfo field)               { il.Emit(OpCodes.Ldfld, field); return this; }
  52.             public ILEmitter ldsfld(FieldInfo field)               { il.Emit(OpCodes.Ldsfld, field); return this; }
  53.             public ILEmitter lodfld(FieldInfo field)               { if (field.IsStatic) ldsfld(field); else ldfld(field); return this; }
  54.             public ILEmitter ifvaluetype_box(Type type)           { if (type.IsValueType) il.Emit(OpCodes.Box, type); return this; }
  55.             public ILEmitter stfld(FieldInfo field)               { il.Emit(OpCodes.Stfld, field); return this; }
  56.             public ILEmitter stsfld(FieldInfo field)               { il.Emit(OpCodes.Stsfld, field); return this; }
  57.             public ILEmitter setfld(FieldInfo field)               { if (field.IsStatic) stsfld(field); else stfld(field); return this; }
  58.             public ILEmitter unboxorcast(Type type)               { if (type.IsValueType) unbox(type); else cast(type); return this; }
  59.             public ILEmitter callorvirt(MethodInfo method)        { if (method.IsVirtual) il.Emit(OpCodes.Callvirt, method); else il.Emit(OpCodes.Call, method); return this; }
  60.             public ILEmitter stind_ref()                          { il.Emit(OpCodes.Stind_Ref); return this; }
  61.             public ILEmitter ldind_ref()                          { il.Emit(OpCodes.Ldind_Ref); return this; }
  62.             public LocalBuilder declocal(Type type)               { return il.DeclareLocal(type); }
  63.             public Label deflabel()                               { return il.DefineLabel(); }
  64.             public ILEmitter ifclass_ldarg_else_ldarga(int idx, Type type) { if (type.IsValueType) emit.ldarga(idx); else emit.ldarg(idx); return this; }
  65.             public ILEmitter ifclass_ldloc_else_ldloca(int idx, Type type) { if (type.IsValueType) emit.ldloca(idx); else emit.ldloc(idx); return this; }
  66.             public ILEmitter perform(Action<ILEmitter, MemberInfo> action, MemberInfo member) { action(this, member); return this; }
  67.             public ILEmitter ifbyref_ldloca_else_ldloc(LocalBuilder local, Type type) { if (type.IsByRef) ldloca(local); else ldloc(local); return this; }
  68.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement