Exemplo n.º 1
0
 protected void AddCaptureIfNecessary(MatchResult result, ILAstNode node)
 {
     if (result.Success && Captured)
     {
         result.AddCapture(CaptureName, node);
     }
 }
Exemplo n.º 2
0
            public override MatchResult Match(ILAstNode node)
            {
                var result = new MatchResult(node is ILExpression);

                AddCaptureIfNecessary(result, node);
                return(result);
            }
Exemplo n.º 3
0
            public override MatchResult Match(ILAstNode node)
            {
                var result = new MatchResult(node is ILVariableExpression expression &&
                                             expression.Variable is ILFlagsVariable);

                AddCaptureIfNecessary(result, node);
                return(result);
            }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 public abstract MatchResult Match(ILAstNode node);