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

					if (!context.success)
						break;
				}
			}
			public override void Match(MatchContext context)
			{
				pattern.Match (context);
				if (!context.IsMatch) return;

				var match = GetLastMatchingInstruction(context);
				var field = (FieldInfo)match.Operand;
				context.AddData(BackingFieldKey, field);
			}
			public override void Match(MatchContext context)
			{
				pattern.Match(context);
				if (!context.IsMatch) return;

				var match = GetLastMatchingInstruction(context);
				var method = (MethodInfo)match.Operand;
				if (!IsActivateCall(method)) context.IsMatch = false;
			}
示例#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
			public override void Match (MatchContext context) {
				pattern.TryMatch(context);
			}
示例#6
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;
		}
示例#7
0
		public bool TryMatch (MatchContext context) {
			var instruction = context.instruction;
			Match(context);

			if (context.success)
				return true;

			context.Reset(instruction);
			return false;
		}
示例#8
0
		protected static Instruction GetLastMatchingInstruction (MatchContext context) {
			if (context.instruction == null)
				return null;

			return context.instruction.Previous;
		}
示例#9
0
		public abstract void Match (MatchContext context);
示例#10
0
			public override void Match (MatchContext context) {
				if (!a.TryMatch(context))
					b.Match(context);
			}
示例#11
0
		private static FieldInfo GetFieldFromContext(MatchContext context)
		{
			object data;
			if (!context.TryGetData(BackingFieldPattern.BackingFieldKey, out data)) throw new NotSupportedException();

			return (FieldInfo)data;
		}
示例#12
0
 public override void Match(MatchContext context)
 {
     pattern.TryMatch(context);
 }
示例#13
0
 public abstract void Match(MatchContext context);