TriAxis.RunSharp.CodeGen.EmitI4Helper C# (CSharp) Method

EmitI4Helper() protected method

protected EmitI4Helper ( int value ) : void
value int
return void
        protected internal void EmitI4Helper(int value)
        {
            OpCode code;

            switch (value)
            {
                case 0: code = OpCodes.Ldc_I4_0; break;
                case 1: code = OpCodes.Ldc_I4_1; break;
                case 2: code = OpCodes.Ldc_I4_2; break;
                case 3: code = OpCodes.Ldc_I4_3; break;
                case 4: code = OpCodes.Ldc_I4_4; break;
                case 5: code = OpCodes.Ldc_I4_5; break;
                case 6: code = OpCodes.Ldc_I4_6; break;
                case 7: code = OpCodes.Ldc_I4_7; break;
                case 8: code = OpCodes.Ldc_I4_8; break;
                case -1: code = OpCodes.Ldc_I4_M1; break;
                default:
                    if (value >= sbyte.MinValue && value <= sbyte.MaxValue)
                        IL.Emit(OpCodes.Ldc_I4_S, (sbyte)value);
                    else
                        IL.Emit(OpCodes.Ldc_I4, value);
                    return;
            }

            IL.Emit(code);
        }

Usage Example

Example #1
0
        public void EmitArgs(CodeGen g, Operand[] args)
        {
            if (args.Length != appliedSignature.Length)
            {
                throw new InvalidOperationException();
            }

            if (IsExpanded)
            {
                int  fixedCount = methodSignature.Length - 1;
                Type expType    = methodSignature[fixedCount].GetElementType();

                for (int i = 0; i < fixedCount; i++)
                {
                    EmitArg(g, i, args[i]);
                }

                int arrayLen = args.Length - methodSignature.Length - 1;
                g.EmitI4Helper(arrayLen);
                g.IL.Emit(OpCodes.Newarr, expType);
                OpCode stelemCode = CodeGen.GetStelemOpCode(expType);
                for (int i = 0; i < arrayLen; i++)
                {
                    g.IL.Emit(OpCodes.Dup);
                    g.EmitI4Helper(i);
                    if (stelemCode == OpCodes.Stobj)
                    {
                        g.IL.Emit(OpCodes.Ldelema, expType);
                    }
                    EmitArg(g, fixedCount + i, args[fixedCount + i]);
                    if (stelemCode == OpCodes.Stobj)
                    {
                        g.IL.Emit(OpCodes.Stobj, expType);
                    }
                    else
                    {
                        g.IL.Emit(stelemCode);
                    }
                }
            }
            else
            {
                for (int i = 0; i < args.Length; i++)
                {
                    EmitArg(g, i, args[i]);
                }
            }
        }
All Usage Examples Of TriAxis.RunSharp.CodeGen::EmitI4Helper