есть простенький макрос:
namespace TestMacros
{
public macro Cond(cond, trueExpr, falseExpr)
{
<[ if ($cond) $trueExpr; else $falseExpr ]>
}
}
и есть вот такое его использование:
Enumerable.Range(0, 10).AsQueryable().Select(ToExpression(fun(i) { TestMacros.Cond(true, 1, 2) }));
макрос ToExpression выдает ошибку conversion from Call (expr: TestMacros.Cond(true, 1, 2)) into 'expression tree' not supported
но разве должен вызов макроса паковаться в вариант MacroCall ?
сейчас при разборе мы падаем тут (файл ToExpressionImpl.n, в районе 370ой строки):
| PExpr.Call(func, _parms) =>
match (expr)
{
| <[ $inst . $_meth (..$args) ]>
| <[ $_meth (..$args) ]> with inst = <[ null ]> =>
match (func.TypedObject) // TypedObject == null поэтому поднимается error()
{
... тут туча всего..
| _ => error(expr)
}