проблемы с макросом ToExpression
От: Jack128  
Дата: 20.04.11 09:48
Оценка:
есть простенький макрос:
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)
              }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.