protected LiteralNode FindCoercionType(int index, bool nested) { if (index != 0 && index != 2) { return(null); } LiteralNode node = FindChild <LiteralNode>(OppositeSide(index)); // look at what the child operand is being compared to if (node == null && (Index == 0 || Index == 2)) { node = Parent.FindChild <LiteralNode>(OppositeSide(this.Index)); // look at what the whole expression is being compared to } // if we don't find any literals in the area look, for a predicate expression that can drive the type coercion if (node == null) { PredicateNode predicate = FindChild <PredicateNode>(OppositeSide(index)); // look at what the child operand is being compared to if (predicate == null && (Index == 0 || Index == 2)) { predicate = Parent.FindChild <PredicateNode>(OppositeSide(this.Index)); // look at what the whole expression is being compared to } if (predicate != null && !nested) { node = predicate.GetExpressionType(true); } } return(node); }
internal override LiteralNode GetExpressionType() { PredicateNode p = FindChild <PredicateNode>(1); if (p != null) { return(p.GetExpressionType()); } return(base.GetExpressionType()); }