Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

TU и TV

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

Помимо модуля HN.MilnerTools, занимающегося Хиндли-Милнером, вышеупомянутой конвертацией и пост-процессингом выведенных типов для нужд C++, обнаружился модуль HN.TypeTools, работающий исключительно со "старым" представлением типов.

В этом старом представлении типопеременные есть двух видов - TU String и TV String. И в модуле TypeTools есть функция removeTU, которая тупо заменяет все встретившиеся TU на TV, а остальное оставляет как есть.

Обнаружилось, что эта removeTU вызывается только один раз из Root.ag, а там код, который вызывается только в начале или только в конце обработки AST атрибутной грамматикой. То есть, разного рода инициализации, препроцессинги и постпроцессинги атрибутов.

Выяснилось, что removeTU постпроцессит выход парсера FFI. Из этого парсера типы библиотечных функций поступают в чекер, ну и парсер генерит TU, а чекеру требуются TV. Тупо? Тупо, надо чинить!

Но тут выясняется, что парсер FFI у меня используется ещё в тестах, причём не только в тестах парсера FFI :) То есть, чтобы убрать лишнюю конвертацию, надо много всего перелопатить.

Чем завтра и займусь.

Upd: не мог заснуть, а проблема оказалась не столь большой. Починил. 7 files changed, 13 insertions(+), 18 deletions(-)
Tags: fp, hn0, programming
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments