コード例 #1
0
        public ILIf(ILValue c, ILStatement t, ILStatement f)
        {
            condition = c;

            if_true_statement  = t;
            if_false_statement = f;
        }
コード例 #2
0
        static public ILBody Write(MethodBase method, ILGenerator generator, ILStatement statement)
        {
            ILBody body = new ILBody(method, statement);

            body.Write(generator);
            return(body);
        }
コード例 #3
0
        public ILSwitch(ILValue i, ILStatement d, IEnumerable <ILCase> c)
        {
            input = i;

            cases             = c.Sort(z => (IComparable)z.GetLabelValue()).ToList();
            default_statement = d;
        }
コード例 #4
0
        public void AddStatement(ILStatement to_add)
        {
            if (to_add == null)
            {
                throw new ArgumentNullException("to_add");
            }

            statements.Add(to_add);
        }
コード例 #5
0
        private void RenderIL_ExecuteInternal(ILCanvas canvas, ILValue value, ILStatement else_statement)
        {
            int index = cases.Count / 2;

            canvas.UseValue(value, delegate(ILValue local) {
                cases[index].GenerateStatement(local, cases, else_statement, 0, cases.Count, index)
                .RenderIL_Execute(canvas);
            });
        }
コード例 #6
0
        public ILLoadStatement(Operation <ILValue, ILBlock> o)
        {
            ILBlock block = new ILBlock();
            ILValue value = o(block);

            block.AddStatement(new ILLoad(value));

            type      = value.GetValueType();
            statement = block;
        }
コード例 #7
0
        public ILStatement GenerateStatement(ILValue value, IList <ILCase> cases, ILStatement else_statement, int min_index, int max_index, int index)
        {
            int less_index    = (index + min_index) / 2;
            int greater_index = (index + max_index) / 2;

            if (index == min_index || index == max_index)
            {
                return(new ILIf(
                           value.GetILEqualTo(label),
                           statement,
                           else_statement
                           ));
            }

            return(new ILIf(
                       value.GetILLessThan(label),
                       cases[less_index].GenerateStatement(value, cases, else_statement, min_index, index, less_index),
                       cases[greater_index].GenerateStatement(value, cases, else_statement, index, max_index, greater_index)
                       ));
        }
コード例 #8
0
 static public ILBody Write(MethodBuilderEX builder, ILStatement statement)
 {
     return(Write(builder, builder.GetILGenerator(), statement));
 }
コード例 #9
0
 static public ILBody Write(DynamicMethod method, ILStatement statement)
 {
     return(Write(method, method.GetILGenerator(), statement));
 }
コード例 #10
0
 static public void RenderText_StatementEX(this ILStatement item, ILTextCanvas canvas)
 {
     item.IfNotNull(i => i.RenderText_Statement(canvas), () => canvas.AppendToLine("?????;"));
 }
コード例 #11
0
 static public T CreateDynamicMethodDelegate <T>(this Type item, string name, ILStatement statement)
 {
     return(item.CreateDynamicMethodDelegate <T>(name, delegate(MethodBase method) {
         return statement;
     }));
 }
コード例 #12
0
 public ILWhile(ILValue c, ILStatement w)
 {
     condition       = c;
     while_statement = w;
 }
コード例 #13
0
 public ILCase(ILLiteral l, ILStatement s)
 {
     label     = l;
     statement = s;
 }
コード例 #14
0
 public ILSwitch(ILValue i, ILStatement d, params ILCase[] c) : this(i, d, (IEnumerable <ILCase>)c)
 {
 }
コード例 #15
0
 public ILBody(MethodBase m, ILStatement s)
 {
     method    = m;
     statement = s;
 }
コード例 #16
0
 static public ConstructorBuilderEX CreateConstructor(this TypeBuilder item, MethodAttributes attributes, ILStatement statement, params Type[] parameter_types)
 {
     return(item.CreateConstructor(attributes, statement, (IEnumerable <Type>)parameter_types));
 }
コード例 #17
0
 public ILIf(ILValue c, ILStatement t) : this(c, t, null)
 {
 }
コード例 #18
0
 static public MethodBuilderEX CreateMethod(this TypeBuilder item, string name, MethodAttributes method_attributes, ILStatement statement, params Type[] parameter_types)
 {
     return(item.CreateMethod(name, method_attributes, statement, (IEnumerable <Type>)parameter_types));
 }
コード例 #19
0
 public ILLoadStatement(Type t, ILStatement s)
 {
     type      = t;
     statement = s;
 }
コード例 #20
0
 static public T CreateDynamicMethodDelegate <T>(this Type item, ILStatement statement)
 {
     return(item.CreateDynamicMethodDelegate <T>(typeof(T).Name, statement));
 }
コード例 #21
0
 public ILInjectCave(ILStatement s)
 {
     entry_label = new ILLabel();
     statement   = s;
 }