private CanCastExpression CreateCanCastExpression(Pattern.MatchContext matchContext, BinaryExpression node) { SafeCastExpression safeCast = (SafeCastExpression)matchContext[SafeCastKey]; List <Instruction> instructions = new List <Instruction>(); instructions.AddRange(safeCast.MappedInstructions); instructions.AddRange(node.MappedInstructions); instructions.AddRange(node.Right.UnderlyingSameMethodInstructions); return(new CanCastExpression( (Expression)codeTransformer.Visit(safeCast.Expression), safeCast.TargetType, instructions)); }
private bool TryMatchCanCastPattern(BinaryExpression node, IEnumerable <Pattern.ICodePattern> patterns, out CanCastExpression result) { foreach (Pattern.ICodePattern pattern in patterns) { Pattern.MatchContext matchContext = Pattern.CodePattern.Match(pattern, node); if (matchContext.Success) { result = CreateCanCastExpression(matchContext, node); return(true); } } result = null; return(false); }