Генерация исходника из макроса
От: CodingUnit Россия  
Дата: 09.02.10 08:20
Оценка:
Здравствуйте, вновь родилась задача, с помощью макросов можно реализовать очень сложные вещи, но не хотелось бы вызывать макрос для генерации сложного кода в сборку каждый раз, и при том возможности родной компиляции дали бы полноценную отладку генерируемого кода, недоступного в исходниках, а только в IL сборки, было бы здорово сгенерировать исходник на основании данных сгенерированных макросом, допустим класс который только был создан с помощью макроса представить в файле .n, и просто каждый раз его компилить, и перекомпилировать только когда нужны изменения в нем, на ум приходит CodeDOM, но ему на входе нужно дерево экспрешенов, а у нас есть только экземпляр TypeBuilder и деревья компилятора Nemerle, нет ли такой возможности как то перевести допустим класс описанный в TypeBuilder в CodeDOM деревья, чтобы сгенерить исходник .n, или сгенерить еще как то, может уже кто то подобную задачу решил?
Re: Генерация исходника из макроса
От: WolfHound  
Дата: 09.02.10 12:51
Оценка: 14 (1)
Здравствуйте, CodingUnit, Вы писали:

CU>Здравствуйте, вновь родилась задача, с помощью макросов можно реализовать очень сложные вещи, но не хотелось бы вызывать макрос для генерации сложного кода в сборку каждый раз, и при том возможности родной компиляции дали бы полноценную отладку генерируемого кода, недоступного в исходниках, а только в IL сборки, было бы здорово сгенерировать исходник на основании данных сгенерированных макросом, допустим класс который только был создан с помощью макроса представить в файле .n, и просто каждый раз его компилить, и перекомпилировать только когда нужны изменения в нем, на ум приходит CodeDOM, но ему на входе нужно дерево экспрешенов, а у нас есть только экземпляр TypeBuilder и деревья компилятора Nemerle, нет ли такой возможности как то перевести допустим класс описанный в TypeBuilder в CodeDOM деревья, чтобы сгенерить исходник .n, или сгенерить еще как то, может уже кто то подобную задачу решил?

1)Чтобы лишний раз не запускать макрос проще всего вынести использование этого макроса в отдельную сборку.
2)Если использовать метод DefineWithSource компилятор для данного методы код сгенерирует по которому будет работать отладка.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Генерация исходника из макроса
От: CodingUnit Россия  
Дата: 16.02.10 08:03
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


CU>>Здравствуйте, вновь родилась задача, с помощью макросов можно реализовать очень сложные вещи, но не хотелось бы вызывать макрос для генерации сложного кода в сборку каждый раз, и при том возможности родной компиляции дали бы полноценную отладку генерируемого кода, недоступного в исходниках, а только в IL сборки, было бы здорово сгенерировать исходник на основании данных сгенерированных макросом, допустим класс который только был создан с помощью макроса представить в файле .n, и просто каждый раз его компилить, и перекомпилировать только когда нужны изменения в нем, на ум приходит CodeDOM, но ему на входе нужно дерево экспрешенов, а у нас есть только экземпляр TypeBuilder и деревья компилятора Nemerle, нет ли такой возможности как то перевести допустим класс описанный в TypeBuilder в CodeDOM деревья, чтобы сгенерить исходник .n, или сгенерить еще как то, может уже кто то подобную задачу решил?

WH>1)Чтобы лишний раз не запускать макрос проще всего вынести использование этого макроса в отдельную сборку.
WH>2)Если использовать метод DefineWithSource компилятор для данного методы код сгенерирует по которому будет работать отладка.

Да конечно DefineWithSource решает многие проблемы, но хорошо бы было посмотреть что вообще творит макрос, потому что после него бывает код и не компилируется, как бы просмотреть код сгенерированный макросом?
Re[3]: Генерация исходника из макроса
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.02.10 10:50
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>Да конечно DefineWithSource решает многие проблемы, но хорошо бы было посмотреть что вообще творит макрос, потому что после него бывает код и не компилируется, как бы просмотреть код сгенерированный макросом?


DefineWithSource это и делает. Полученый файл нужно искать в подкаталоге obj\Debug иди obj\Release.

Если нужно получить исходники для какого-то фрагмента PExpr, то можно просто в отладчике бросить его в окно Watch и посмотреть значение (его метод ToString() выполняет форматированный вывод). Чтобы лучше было смотреть имеет смысл выбрать текстовый вьюер (контекстное меню в строке окна Watch).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.