эксперименты с макросами
От: para  
Дата: 28.09.09 07:38
Оценка: 90 (1)
Здравствуйте!
Хочу предложить простенький макрос "saving".

using Nemerle;
using Nemerle.Utility;
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;
using Nemerle.Compiler.Typedtree;

namespace ParaLib.Nemerle.Macros
{
    module SavingMacroHelper
    {
        public Saving(_body : PExpr, _arg : PExpr) : PExpr
        {
            def tmpVarName = Macros.NewSymbol();        

            def pre = <[def $(tmpVarName :name) = $(_arg)]>;
            def post = <[$(_arg) = $(tmpVarName :name)]>;            

            def res = <[
                $(pre);
                try
                {
                    $(_body);
                }
                finally
                {
                    $(post);
                }
            ]>;           

            res;
        }        
    }    

    macro @saving (body, arg : expr)
    syntax ("saving", "(", arg, ")", body) 
    {
        SavingMacroHelper.Saving(body, arg);
    }
}


Похож на using =)

Зачем:
    saving(member.Body.Location)
    {
         mb.Body = <[
            ...
            $(member.Body)
         ]>;
    }


1. Замечания/предложения?
2. Как можно использовать макрос в той же сборке для разработки других макросов, или надо делать промежуточную библиотеку?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.