Как должен выглядить inline-meta-code?
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.04 12:14
Оценка:
Как лучше выделять встроенный мета-код. Есть две проблемы. Мета-код может быть встроен в код мета-шаблонов (код используемый как основа для изменения работчего кода). И в мета-коде могут быть участки которые должны после некоторой модификации перенаситься в конечный код. Нужно как то выделять все это. Причем это выделение должно быть в рамках синтаксиса Шарпа, чтобы студия не ругалась на непонятный ей синтаксис.

Пока что на ум приходят следующие варианты:
1. Выделение некими конструкциями языка. Например, псевдо-методами:
BeginMetaCode();
// Этот код производит модификацию кода метода в который
// он встроен.
foreach (RMemberPropertyImpl prop in meta.Propertys)
{
        if (prop.Type.IsInheritedFrom("ICollection"))
        {
                BeginMetaEmit();
                // Это шаблон который переносится в конечный код.
                // Методы начинающиеся с префикса "Meta" являются
                // мета-методами. Они заменяются на некоторые языковые
                // конструкции. Так MetaMakeRef заменяется ссылкой
                // на свойство, описание которого передается в метод.
                nodeCount += MetaMakeRef(prop).Count;
                EndMetaEmit();
        }
}
EndMetaCode();

2. Выделение атрибутами спрятанными в коментарии:
/*[MetaCode]*/
foreach (RMemberPropertyImpl prop in meta.Propertys)
{
        if (prop.Type.IsInheritedFrom("ICollection"))
        {
                /*[MetaEmit]*/
                {
                    nodeCount += MetaMakeRef(prop).Count;
                }
        }
}

т.е. мета-атрибут распространяется на следующую инструкцию, в том числе на блок.

Какой синтаксис лучше? И чем? Если у кого есть свои варианты, то милости просим.
... << RSDN@Home 1.1.3 beta 2 >>

29.04.04 18:21: Перенесено модератором из 'RSDN Research' — VD
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.