parser

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

 

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

Интересный случай (C)

MoKo 21.10.2013 13:34

Стало падать из-за другого исправления, про которое мы забыли упомянуть (исправим это):

"Исправлена ошибка, из-за которой не вызывались геттеры и сеттеры значений у автоматически создаваемых переменных в ^foreach[], ^match[]".

Логика внутри метода match такая - сохраняем текущее значение переменной match, изменяем значение переменной match и выполняем код, восстанавливаем значение переменной match.

При этом match - по-сути обычная переменная, но раньше, если она оказывалась геттером или сеттером - код геттера или сеттера просто не выполнялся. Теперь это исправлено. Но: дальше вылезает проблема с тем, что при @OPTIONS locals на самом деле работает не совсем так, как описано. :) При присвоении - да, всегда присваивается локальная переменная. Но при обращении, если нет локальной переменной - происходит поиск значения и в полях объекта, который и приводит в вашем случае к вызову GET_DEFAULT. У нас давно есть про это тикет, но поскольку это несовместимое изменение и 100% полезут баги мы "боимся" текущее поведение менять.

Так что для повышения совместимости из описанного исправления уберем работу геттеров при сохранении значения $match. То есть ваш код будет работать как и раньше. При этом сеттеры все-таки будут работать, что более важно.

Так что ваш код затронул сразу несколько тонких моментов в парсере. :)