internal override bool MatchPattern(Node pattern, Dictionary <int, Node> matchings) { if (pattern is PatternNode) { PatternNode patternNode = pattern as PatternNode; if (patternNode.Type == PatternType.Any || patternNode.Type == PatternType.Constant) { if (!matchings.ContainsKey(patternNode.Key)) { matchings[patternNode.Key] = this; return(true); } else { return(matchings[patternNode.Key].Equals(this)); } } else if (patternNode.Type == PatternType.Position) { matchings[patternNode.Key] = this; return(true); } return(false); } else if (pattern is NumberNode) { return(pattern.Equals(this)); } else if (pattern is UniaryOperatorNode) { UniaryOperatorNode uniOp = pattern as UniaryOperatorNode; return(new UniaryOperatorNode(UniaryOperator.Negate, -Value).MatchPattern(pattern, matchings)); } return(false); }
public override bool Equals(object obj) { if (obj is UniaryOperatorNode) { UniaryOperatorNode uniaryOperatorNode = (UniaryOperatorNode)obj; if (uniaryOperatorNode.Operator != Operator) { return(false); } if (!uniaryOperatorNode.Left.Equals(Left)) { return(false); } } return(false); }