private static Expression /*!*/ ConvertResult(Expression /*!*/ expression, Type /*!*/ resultType) { if (resultType.IsGenericType() && resultType.GetGenericTypeDefinition() == typeof(Union <,>)) { var args = resultType.GetGenericArguments(); var ctor = resultType.GetConstructor(args); if (args[0].IsAssignableFrom(expression.Type)) { return(Ast.New(ctor, expression, AstUtils.Default(args[1]))); } else { Debug.Assert(args[1].IsAssignableFrom(expression.Type)); return(Ast.New(ctor, AstUtils.Default(args[0]), expression)); } } else { return(AstUtils.Convert(expression, resultType)); } }