Что делает DefineCTX
От: FDSC Россия consp11.github.io блог
Дата: 23.08.11 18:53
Оценка:
Возникли вопросы, ответов не нашёл

1. Что делает DefineCTX (впечатление, что он объявляет контекст макроса в обычной функции)
2. Что будет, если он вызывается в функции, которая вызывает себя рекурсивно?
Re: Что делает DefineCTX
От: hardcase Пират http://nemerle.org
Дата: 23.08.11 19:11
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Возникли вопросы, ответов не нашёл


FDS>1. Что делает DefineCTX (впечатление, что он объявляет контекст макроса в обычной функции)


Он создает переменную типа Typer: банально кладет туда аргумент — экземпляр типизатора.
Макрос требуется для создания цитат <[ typed: ]>

FDS>2. Что будет, если он вызывается в функции, которая вызывает себя рекурсивно?


Ничего страшного не произойдет.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Что делает DefineCTX
От: hardcase Пират http://nemerle.org
Дата: 23.08.11 19:14
Оценка: 4 (1)
Здравствуйте, FDSC, Вы писали:

FDS>Возникли вопросы, ответов не нашёл


FDS>1. Что делает DefineCTX (впечатление, что он объявляет контекст макроса в обычной функции)


здесь его код:

  macro DefineCTX(ctx)
  {
    <[ def $(ImplicitCTX().Manager.MacrosRegistry.GetImplicitCTXName() : name) = $ctx ]>
  }
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Что делает DefineCTX
От: FDSC Россия consp11.github.io блог
Дата: 23.08.11 19:15
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, FDSC, Вы писали:


FDS>>Возникли вопросы, ответов не нашёл


FDS>>1. Что делает DefineCTX (впечатление, что он объявляет контекст макроса в обычной функции)


H>Он создает переменную типа Typer: банально кладет туда аргумент — экземпляр типизатора.


Зачем тогда мы передаём typer из макроса, вызвав Macros.ImplicitCTX() ???
Re[3]: Что делает DefineCTX
От: hardcase Пират http://nemerle.org
Дата: 23.08.11 19:22
Оценка: 9 (1)
Здравствуйте, FDSC, Вы писали:

FDS>Зачем тогда мы передаём typer из макроса, вызвав Macros.ImplicitCTX() ???


Чтобы в функции-обработчике макроса работали цитаты <[ ttype: ... ]>.
ImplicitCTX просто подставляет имя некоторой переменной, в которой лежит типизатор. В случае с телом макроса это не переменная, а параметр, который приезжает в макрос.

Да это все невероятно криво
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.