protected void AddCaptureIfNecessary(MatchResult result, ILAstNode node) { if (result.Success && Captured) { result.AddCapture(CaptureName, node); } }
public override MatchResult Match(ILAstNode node) { var result = new MatchResult(node is ILExpression); AddCaptureIfNecessary(result, node); return(result); }
public override MatchResult Match(ILAstNode node) { var result = new MatchResult(node is ILVariableExpression expression && expression.Variable is ILFlagsVariable); AddCaptureIfNecessary(result, node); return(result); }
public void AddCapture(string name, ILAstNode node) { if (!Captures.TryGetValue(name, out var captures)) { Captures.Add(name, captures = new List <ILAstNode>()); } captures.Add(node); }
public override MatchResult Match(ILAstNode node) { var result = new MatchResult(false); if (node is ILExpressionStatement statement) { result.Success = true; result.CombineWith(Expression.Match(statement.Expression)); } AddCaptureIfNecessary(result, node); return(result); }
public override MatchResult Match(ILAstNode node) { var result = new MatchResult(false); if (node is ILAssignmentStatement statement) { result.Success = Variable.VariableName == null || Variable.VariableName == statement.Variable.Name; if (result.Success) { result.CombineWith(Value.Match(statement.Value)); } } AddCaptureIfNecessary(result, node); return(result); }
public override MatchResult Match(ILAstNode node) { var result = new MatchResult(false); if (node is ILInstructionExpression expression) { result.Success = OpCode.Match(expression.OpCode.Code) && Operand.Match(expression.Operand) && expression.Arguments.Count == Arguments.Count; for (int i = 0; result.Success && i < expression.Arguments.Count; i++) { var argumentMatch = Arguments[i].Match(expression.Arguments[i]); result.CombineWith(argumentMatch); } } AddCaptureIfNecessary(result, node); return(result); }
public abstract MatchResult Match(ILAstNode node);