проблема видимо в "ранней компиляции" квазицитаты, но при сложной генерации сильно хочется вычислить
сложные имена и положить их в определенные места и дальше уже не морочится.
второй странностью, связанной с первой является ошибки кодогенерации при
Сплайсы могут позволить вставить только простые имена. Для вставки сложных выражений их нужно парсить сранчала. Это можно сделать MainParser.ParseExpr() или PExpr.FromQualifiedIdentifier() (последнее применимо, если параметров типов нет).
Но то что у тебя имена в виде строк — это уже указывает на то, что ты, скорее всего, делаешь что-то не так.
_C_>проблема видимо в "ранней компиляции" квазицитаты,
Нет.
_C_>но при сложной генерации сильно хочется вычислить _C_>сложные имена и положить их в определенные места и дальше уже не морочится.
А как ты эти имена получаешь?
_C_>второй странностью, связанной с первой является ошибки кодогенерации при _C_>
Это вообще какой-то страшный изврат. Никакого присвоения тут не будет. Это просто не скомпилируется. У тебя var_has_saved обявлена в цитате, а далее ты подставляешь в цитату значение переменной var_has_saved которая должна быть объявлена вне цитаты.
Скорее всего ты неверно код сюда скопировал. Или нужно смотреть на объявление обоих переменных var_has_saved (той что в цитате объявлена, и то чье значение подставляется).
VD>Сплайсы могут позволить вставить только простые имена. Для вставки сложных выражений их нужно парсить сранчала. Это можно сделать MainParser.ParseExpr() или PExpr.FromQualifiedIdentifier() (последнее применимо, если параметров типов нет).
VD>Но то что у тебя имена в виде строк — это уже указывает на то, что ты, скорее всего, делаешь что-то не так.
да вот такие имена каждый раз писать имя вроде _db_service.exchange.xx некрасиво как то.
вот и хочу
def xx = _db_service.exchange.xx
_C_>>проблема видимо в "ранней компиляции" квазицитаты,
VD>Нет.
тогда сообщения в блоке один было бы другое, если рассуждать логично.
_C_>>но при сложной генерации сильно хочется вычислить _C_>>сложные имена и положить их в определенные места и дальше уже не морочится.
_C_>>хотя var_has_saved объявлена как bool.
VD>Скорее всего ты неверно код сюда скопировал. Или нужно смотреть на объявление обоих переменных var_has_saved (той что в цитате объявлена, и то чье значение подставляется).
Далее по тексту.
_C_>вопрос еще остался, как посмотреть генерируемый код? по компилятору флаги набросаны, а чем их включать?
Можно в отладчике поглядеть.
Если генерируется метод, то можно добавлять его методом Define, а методом DefineWithSource. После компиляции можно будет просто входить отладчиком в этот метод. Так же исходним можно будет найти в подкаталоге Debug\obj и на них будут указывать ошибки, если они есть в коде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Если генерируется метод, то можно добавлять его методом Define, а методом DefineWithSource. После компиляции можно будет просто входить отладчиком в этот метод. Так же исходним можно будет найти в подкаталоге Debug\obj и на них будут указывать ошибки, если они есть в коде.
спасибо!