parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

@method[][local] << переключает на 'все новые $переменные локальны' << а это вариант!

Александр Петросян (PAF) 18.12.2006 22:52 / 18.12.2006 23:04

кто что скажет?
относительно халявный вариант.

реализация:
сделать два потомка methodFrame, делающих по-разному .putElement:
один, как и сейчас делает .putElement в self.
а другой пусть смотрит, и если переменная новая, делает перед .putElement регистрацию name в списке локальных (и сразу делает put туда, без поиска в родителях).
при компиляции выставлять флажок в Method.
а в execute при создании VMethodFrame, создавать нужную по флажку.

(а чтобы ещё ускорить, можно ввести ещё два байт-кода в дополнение OP_CALL и OP_CALL__WRITE).


конечно, в конструкторе будет не очень понятно, что лучше выбрать.
многие в конструкторе пишут код (сюрприз), и им захочется и там иметь "всё локальное".
таким людям придётся
@constructor[][local]
$variable1[эта локальна]
$self.field1[это поле]
другим так не понравится, и в конструкторе придётся по-старинке
@constructor[][variable1]
$variable1[эта локальна]
$field1[а это поле]
выбор не то чтобы богат.

но этот вариант простой, без спорных «$:», и, думаю, многим понравится.