Ответ
moko 25.06.2020 16:04
При правильном копировании должно было получиться как у автора топика и в 3.4.6b (у меня получилось). Но тут есть еще более тонкий момент. :)
Методы, которые используют $result и которые его не используют по внутренней логике парсера работают заметно по разному. Если в коде написать 'z', то в случае использования $result этот вывод будет проигнорирован, иначе попадет в результат работы метода. И есть оптимизация - если мы знаем, что $result используется - весь вывод метода игнорируется в момент его появления. Поскольку заранее понять факт использования $result нет возможности, это делается в момент выполнения метода. И оказалось, что код проверки использования не работает, если присвоение $result происходит в самом конце метода.
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_vmethod_frame.h?revision=1.124&view=markup#l242Поэтому если в примере автора топика написать $result[$Params.litera] z, то все будет работать корректно. Возможно в вашем случае после присвоения оказались пробельные символы, и поэтому все тоже сработало ожидаемым образом. Доработаем, но правило "Каждый метод должен будет или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе" не исчезнет - если первой вызвать ветвь кода, где $result не используется - C = ^a_class:TEST[$.litera[C]] - проблема останется.