コード例 #1
0
        public DefineLabelDelegate BeginExceptionBlock()
        {
            ILGenerator forIl = null;

            System.Reflection.Emit.Label?l = null;

            DefineLabelDelegate ret =
                il =>
            {
                if (forIl != null && forIl != il)
                {
                    l = null;
                }

                if (l != null)
                {
                    return(l.Value);
                }

                forIl = il;
                l     = forIl.BeginExceptionBlock();

                return(l.Value);
            };

            InstructionSizes.Add(() => InstructionSize.BeginExceptionBlock());

            LengthCache.Clear();

            Buffer.Add(
                (il, logOnly, log) =>
            {
                if (!logOnly)
                {
                    ret(il);
                }

                log.AppendLine("--BeginExceptionBlock--");
            }
                );

            TraversableBuffer.Add(new BufferedILInstruction {
                StartsExceptionBlock = true
            });

            Operations.Add(null);

            return(ret);
        }
コード例 #2
0
        public DefineLabelDelegate DefineLabel()
        {
            ILGenerator forIl = null;

            System.Reflection.Emit.Label?l = null;

            DefineLabelDelegate ret =
                il =>
            {
                if (forIl != null && forIl != il)
                {
                    l = null;
                }

                if (l != null)
                {
                    return(l.Value);
                }

                forIl = il;
                l     = forIl.DefineLabel();

                return(l.Value);
            };

            InstructionSizes.Add(() => InstructionSize.DefineLabel());

            LengthCache.Clear();

            Buffer.Add(
                (il, logOnly, log) =>
            {
                if (!logOnly)
                {
                    ret(il);
                }
            }
                );

            TraversableBuffer.Add(new BufferedILInstruction {
                DefinesLabel = true
            });

            Operations.Add(null);

            return(ret);
        }
コード例 #3
0
 internal Label(object owner, DefineLabelDelegate label, string name)
 {
     _Owner   = owner;
     Name     = name;
     LabelDel = label;
 }
コード例 #4
0
ファイル: Label.cs プロジェクト: zhuozhuowang/Sigil
 internal Label(object owner, DefineLabelDelegate label, string name)
 {
     _Owner = owner;
     Name = name;
     LabelDel = label;
 }