2015-02-02 2 views
1

Я заметил, что вызов hh_client не всегда возвращает правильный результат. Например: я следующие фрагменты кода:HHVM Недетерминированное поведение typechecker

бэкенд \ ConvertMessage.hh:

<?hh // strict 

namespace ApiBackend\ConvertMessage { 

    enum Status: int { 
     success = 0; 
     // ... error codes 
    }; 

    // ... some other classes 

}; 

другое место в проекте:

throw new \SoapFault(
    'Server', 
    \ApiBackend\ConvertMessage\Status::getNames()[$result->status] 
); 

Иногда, после того, как делать некоторые изменения в проект Я получаю следующее сообщение об ошибке: Could not find static method getNames in type ApiBackend\ConvertMessage\Status (Typing[4090])

Wh ru Я удаляю точку с запятой после закрытия фигурных скобок, hh_client перестает отображать ошибку. Но когда я вставляю точку с запятой на свое место, typechecker все равно дает мне сообщение No errors!.

Это не единственный файл, который вызывает эту проблему - это происходит со всеми перечислениями.

Мне кажется, что это проблема с некоторым кешем hh_client или hh_server.

Заранее благодарим за помощь в решении этой проблемы (и извините, если мой английский не слишком хорош).

ответ

3

Возможно, вы используете устаревшую версию HHVM. Эта проблема звучит очень ужасно, как this race condition, которая была исправлена ​​в HHVM 3.5.0 и новее (и была включена в версию 3.3.3 LTS). Примечательно, что у 3.4.x все еще была ошибка.

Какую версию HHVM вы используете?

+0

Вы правы. Я использую версию 3.4.2. Спасибо – Luigi

+0

Да, серия 3.4 больше не поддерживается, вы должны перейти на 3.5. –