ошибки с подстановками строк
От: _Claus_  
Дата: 28.11.11 22:19
Оценка:
наблюдаю странности генерации при подстановках строк


var_has_saved = "_struct.x"
<[ ..
$(var_has_saved : dyn) = true; //компиляция макроса ок, при генерации error : unbound name _struct.x
]>


//а это работает
_struct.$(name : dyn) // name == "x"


проблема видимо в "ранней компиляции" квазицитаты, но при сложной генерации сильно хочется вычислить
сложные имена и положить их в определенные места и дальше уже не морочится.

второй странностью, связанной с первой является ошибки кодогенерации при
<[ ..
var_has_saved = "_struct.x"
$var_has_saved  = true; //компиляция макроса ок, при генерации  error : присвоение строке bool,
]>


хотя var_has_saved объявлена как bool.
Re: ошибки с подстановками строк
От: catbert  
Дата: 28.11.11 22:30
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>наблюдаю странности генерации при подстановках строк



_C_>
_C_>var_has_saved = "_struct.x"
_C_><[ ..
_C_>$(var_has_saved : dyn) = true; //компиляция макроса ок, при генерации error : unbound name _struct.x
_C_>]>
_C_>


Мне кажется, у Вас странные представления о подстановке строк и о суффиксе :dyn квазицитаты.
Re: ошибки с подстановками строк
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.11.11 23:05
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>наблюдаю странности генерации при подстановках строк

_C_>
_C_>var_has_saved = "_struct.x"
_C_><[ ..
_C_>$(var_has_saved : dyn) = true; //компиляция макроса ок, при генерации error : unbound name _struct.x
_C_>]>
_C_>


Сплайсы могут позволить вставить только простые имена. Для вставки сложных выражений их нужно парсить сранчала. Это можно сделать MainParser.ParseExpr() или PExpr.FromQualifiedIdentifier() (последнее применимо, если параметров типов нет).

Но то что у тебя имена в виде строк — это уже указывает на то, что ты, скорее всего, делаешь что-то не так.

_C_>проблема видимо в "ранней компиляции" квазицитаты,


Нет.

_C_>но при сложной генерации сильно хочется вычислить

_C_>сложные имена и положить их в определенные места и дальше уже не морочится.

А как ты эти имена получаешь?

_C_>второй странностью, связанной с первой является ошибки кодогенерации при

_C_>
_C_><[ ..
_C_>var_has_saved = "_struct.x"
_C_>$var_has_saved  = true; //компиляция макроса ок, при генерации  error : присвоение строке bool,
_C_>]>
_C_>

_C_>хотя var_has_saved объявлена как bool.

Это вообще какой-то страшный изврат. Никакого присвоения тут не будет. Это просто не скомпилируется. У тебя var_has_saved обявлена в цитате, а далее ты подставляешь в цитату значение переменной var_has_saved которая должна быть объявлена вне цитаты.

Скорее всего ты неверно код сюда скопировал. Или нужно смотреть на объявление обоих переменных var_has_saved (той что в цитате объявлена, и то чье значение подставляется).

ЗЫ

Погляди еще:
https://groups.google.com/forum/#!topic/nemerle-en/eXo53RhBuCo
https://groups.google.com/forum/#!topic/nemerle-en/O7AiQ27_IR4
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ошибки с подстановками строк
От: _Claus_  
Дата: 29.11.11 08:55
Оценка:
Здравствуйте, VladD2, Вы писали:

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


_C_>>наблюдаю странности генерации при подстановках строк

_C_>>
_C_>>var_has_saved = "_struct.x"
_C_>><[ ..
_C_>>$(var_has_saved : dyn) = true; //компиляция макроса ок, при генерации error : unbound name _struct.x
_C_>>]>
_C_>>


VD>Сплайсы могут позволить вставить только простые имена. Для вставки сложных выражений их нужно парсить сранчала. Это можно сделать MainParser.ParseExpr() или PExpr.FromQualifiedIdentifier() (последнее применимо, если параметров типов нет).


VD>Но то что у тебя имена в виде строк — это уже указывает на то, что ты, скорее всего, делаешь что-то не так.


да вот такие имена каждый раз писать имя вроде _db_service.exchange.xx некрасиво как то.

вот и хочу

def xx = _db_service.exchange.xx

_C_>>проблема видимо в "ранней компиляции" квазицитаты,


VD>Нет.


тогда сообщения в блоке один было бы другое, если рассуждать логично.


_C_>>но при сложной генерации сильно хочется вычислить

_C_>>сложные имена и положить их в определенные места и дальше уже не морочится.


_C_>>
_C_>><[ ..
_C_>>var_has_saved = "_struct.x"
_C_>>$var_has_saved  = true; //компиляция макроса ок, при генерации  error : присвоение строке bool,
_C_>>]>
_C_>>

_C_>>хотя var_has_saved объявлена как bool.

VD>Скорее всего ты неверно код сюда скопировал. Или нужно смотреть на объявление обоих переменных var_has_saved (той что в цитате объявлена, и то чье значение подставляется).


все правильно. я не скопировал. а набирал чтобы проще выглядело и скобку не там втулил. конечно, var_has_saved = "_struct.x" вне кодоцитаты.
но суть ошибки описана верно.

VD>https://groups.google.com/forum/#!topic/nemerle-en/eXo53RhBuCo

VD>https://groups.google.com/forum/#!topic/nemerle-en/O7AiQ27_IR4
ок.
Re[2]: ошибки с подстановками строк
От: _Claus_  
Дата: 29.11.11 09:03
Оценка:
_C_>>
_C_>>var_has_saved = "_struct.x"
_C_>><[ ..
_C_>>$(var_has_saved : dyn) = true; //компиляция макроса ок, 
_C_>>]>
_C_>>


C>Мне кажется, у Вас странные представления о подстановке строк и о суффиксе :dyn квазицитаты.


они навязаны мне компилятором. если без dyn — при генерации error : unbound name _struct.x

та ошибка мне приятней чем эта.
Re[2]: ошибки с подстановками строк
От: _Claus_  
Дата: 29.11.11 09:08
Оценка:
C>Мне кажется, у Вас странные представления о подстановке строк и о суффиксе :dyn квазицитаты.
коррекция предыдущего сообщения:

без dyn ошибка при генерации error : присвоение строке bool, которая мне совсем не нравится.

P.S. А вообще почему нельзя редактировать или хотя бы удалить свое сообщение, чтобы потом перенабрать?
Re[2]: ошибки с подстановками строк
От: _Claus_  
Дата: 29.11.11 12:33
Оценка:
VD>Погляди еще:
VD>https://groups.google.com/forum/#!topic/nemerle-en/eXo53RhBuCo
VD>https://groups.google.com/forum/#!topic/nemerle-en/O7AiQ27_IR4

просмотр помог. добился чего хотел:


  private str2expr(name : string): PExpr
      PExpr.FromQualifiedIdentifier((Manager,name))



  private_ref = str2expr($"_db_service.$(fld_name)")
      
  loaded_flag = str2expr($"_db_service.$(fld_name)_loaded")

  ...




  <[  
   when ($var_has_saved)
  {        
       datamap.write_string($private_ref, $exchange); 
                            
      $var_has_saved = false;
  }
  ]>


вроде все ок. и выглядеть стало по-людски спасибо!

вопрос еще остался, как посмотреть генерируемый код? по компилятору флаги набросаны, а чем их включать?
Re: ошибки с подстановками строк
От: catbert  
Дата: 29.11.11 14:25
Оценка:
Здравствуйте, _Claus_, Вы писали:

А как насчет

var_has_saved = <[_struct.x]>;
<[ ..
$(var_has_saved : dyn) = true; 
]>
Re[3]: ошибки с подстановками строк
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.11.11 00:34
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>просмотр помог. добился чего хотел:

_C_>
_C_>  private_ref = str2expr($"_db_service.$(fld_name)")
_C_>  loaded_flag = str2expr($"_db_service.$(fld_name)_loaded")
_C_>  <[  
_C_>   when ($var_has_saved)
_C_>  {        
_C_>       datamap.write_string($private_ref, $exchange); 
                            
_C_>      $var_has_saved = false;
_C_>  }
_C_>  ]> 
_C_>


Я вот просил тебя показать вот этот код. В твоем случае все делается очень просто:
  private_ref = <[ _db_service.$(fld_name : usesite) ]>;
  loaded_flag = <[ _db_service.$((fld_name + "_loaded") : usesite) ]>;

Далее по тексту.

_C_>вопрос еще остался, как посмотреть генерируемый код? по компилятору флаги набросаны, а чем их включать?


Можно в отладчике поглядеть.

Если генерируется метод, то можно добавлять его методом Define, а методом DefineWithSource. После компиляции можно будет просто входить отладчиком в этот метод. Так же исходним можно будет найти в подкаталоге Debug\obj и на них будут указывать ошибки, если они есть в коде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ошибки с подстановками строк
От: catbert  
Дата: 30.11.11 09:46
Оценка:
Здравствуйте, catbert, Вы писали:

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


C>А как насчет


C>
C>var_has_saved = <[_struct.x]>;
C><[ ..
C>$(var_has_saved : dyn) = true; 
C>]>
C>


То есть
var_has_saved = <[_struct.x]>;
<[ 
  $var_has_saved = true; 
]>
Re[4]: ошибки с подстановками строк
От: _Claus_  
Дата: 30.11.11 10:23
Оценка:
VD>Если генерируется метод, то можно добавлять его методом Define, а методом DefineWithSource. После компиляции можно будет просто входить отладчиком в этот метод. Так же исходним можно будет найти в подкаталоге Debug\obj и на них будут указывать ошибки, если они есть в коде.
спасибо!
Re[3]: ошибки с подстановками строк
От: _Claus_  
Дата: 30.11.11 10:27
Оценка:
C>То есть
C>
C>var_has_saved = <[_struct.x]>;
C><[ 
C>  $var_has_saved = true; 
C>]>
C>


так работает! спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.