protected override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match) { CPlusPlusModifierToken o = other as CPlusPlusModifierToken; return(o != null && this.modifier == o.modifier); }
public virtual bool DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return(DoMatch(pos, match)); }
public static bool DoMatchCollection(Role role, INode firstPatternChild, INode firstOtherChild, Match match) { BacktrackingInfo backtrackingInfo = new BacktrackingInfo(); Stack <INode> patternStack = new Stack <INode>(); Stack <PossibleMatch> stack = backtrackingInfo.backtrackingStack; patternStack.Push(firstPatternChild); stack.Push(new PossibleMatch(firstOtherChild, match.CheckPoint())); while (stack.Count > 0) { INode cur1 = patternStack.Pop(); INode cur2 = stack.Peek().NextOther; match.RestoreCheckPoint(stack.Pop().Checkpoint); bool success = true; while (cur1 != null && success) { while (cur1 != null && cur1.Role != role) { cur1 = cur1.NextSibling; } while (cur2 != null && cur2.Role != role) { cur2 = cur2.NextSibling; } if (cur1 == null) { break; } Debug.Assert(stack.Count == patternStack.Count); success = cur1.DoMatchCollection(role, cur2, match, backtrackingInfo); Debug.Assert(stack.Count >= patternStack.Count); while (stack.Count > patternStack.Count) { patternStack.Push(cur1.NextSibling); } cur1 = cur1.NextSibling; if (cur2 != null) { cur2 = cur2.NextSibling; } } while (cur2 != null && cur2.Role != role) { cur2 = cur2.NextSibling; } if (success && cur2 == null) { return(true); } } return(false); }
public abstract bool DoMatch(INode other, Match match);