示例#1
0
 public override void Match(MatchContext context)
 {
     pattern.TryMatch (context);
 }
示例#2
0
            public override void Match(MatchContext context)
            {
                foreach (var pattern in patterns) {
                    pattern.Match (context);

                    if (!context.success)
                        break;
                }
            }
示例#3
0
 public override void Match(MatchContext context)
 {
     if (!a.TryMatch (context))
         b.Match (context);
 }
示例#4
0
            public override void Match(MatchContext context)
            {
                if (context.instruction == null) {
                    context.success = false;
                    return;
                }

                context.success = context.instruction.OpCode == opcode;
                context.Advance ();
            }
示例#5
0
        protected static Instruction GetLastMatchingInstruction(MatchContext context)
        {
            if (context.instruction == null)
                return null;

            return context.instruction.Previous;
        }
示例#6
0
        public bool TryMatch(MatchContext context)
        {
            var instruction = context.instruction;
            Match (context);

            if (context.success)
                return true;

            context.Reset (instruction);
            return false;
        }
示例#7
0
 public abstract void Match(MatchContext context);
示例#8
0
        public static MatchContext Match(MethodBase method, ILPattern pattern)
        {
            if (method == null)
                throw new ArgumentNullException ("method");
            if (pattern == null)
                throw new ArgumentNullException ("pattern");

            var instructions = method.GetInstructions ();
            if (instructions.Count == 0)
                throw new ArgumentException ();

            var context = new MatchContext (instructions [0]);
            pattern.Match (context);
            return context;
        }
            public override void Match(MatchContext context)
            {
                pattern.Match (context);
                if (!context.success)
                    return;

                var match = GetLastMatchingInstruction (context);
                var field = (FieldInfo) match.Operand;
                context.AddData (FieldKey, field);
            }