Ejemplo n.º 1
0
        private static bool ApplyRulesToNode(
            RuleProcessingContext context, ReadOnlyCollection <ReadOnlyCollection <Rule> > rules, Node currentNode, out Node newNode)
        {
            newNode = currentNode;

            // Apply any pre-rule delegates
            context.PreProcess(currentNode);

            foreach (var r in rules[(int)currentNode.Op.OpType])
            {
                if (!r.Match(currentNode))
                {
                    continue;
                }

                // Did the rule modify the subtree?
                if (r.Apply(context, currentNode, out newNode))
                {
                    // The node has changed; don't try to apply any more rules
                    context.PostProcess(newNode, r);
                    return(true);
                }
                else
                {
                    Debug.Assert(newNode == currentNode, "Liar! This rule should have returned 'true'");
                }
            }

            context.PostProcess(currentNode, null);
            return(false);
        }
Ejemplo n.º 2
0
        private static bool ApplyRulesToNode(
            RuleProcessingContext context, ReadOnlyCollection<ReadOnlyCollection<Rule>> rules, Node currentNode, out Node newNode)
        {
            newNode = currentNode;

            // Apply any pre-rule delegates
            context.PreProcess(currentNode);

            foreach (var r in rules[(int)currentNode.Op.OpType])
            {
                if (!r.Match(currentNode))
                {
                    continue;
                }

                // Did the rule modify the subtree?
                if (r.Apply(context, currentNode, out newNode))
                {
                    // The node has changed; don't try to apply any more rules
                    context.PostProcess(newNode, r);
                    return true;
                }
                else
                {
                    Debug.Assert(newNode == currentNode, "Liar! This rule should have returned 'true'");
                }
            }

            context.PostProcess(currentNode, null);
            return false;
        }
 private static bool ApplyRulesToNode(
     RuleProcessingContext context,
     ReadOnlyCollection <ReadOnlyCollection <Rule> > rules,
     Node currentNode,
     out Node newNode)
 {
     newNode = currentNode;
     context.PreProcess(currentNode);
     foreach (Rule rule in rules[(int)currentNode.Op.OpType])
     {
         if (rule.Match(currentNode) && rule.Apply(context, currentNode, out newNode))
         {
             context.PostProcess(newNode, rule);
             return(true);
         }
     }
     context.PostProcess(currentNode, (Rule)null);
     return(false);
 }