Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:
Запилил минимальный демонстратор пропадания узлов на HOOPL. Ничего не пропадает :( Придётся дальше ковыряться в моём коде.

https://gist.github.com/nponeccop/d5a7ab5bdb22b7ecc76a

Upd: удалось воспроизвести! При обратном проходе не пропадает, а при прямом - запросто!

Upd2: нашёл воркараунд, теперь ничего в новом недоделанном инлайнере не пропадает (но баг в хупле есть незарепорченный). Но оказывается, когда я рефакторил старый инлайнер, я этот воркараунд случайно заимплементил. Так что два падавших теста, оказывается, заработали!

Там в хупле высокоуровневый хелпер есть, distributeXfer. Если им пользоваться - ничего не падает, а если низкоуровнево работать - то можно хупл и уронить. Видимо, в тестах везде этим врапперам пользуются, и не заметили.

Типа, если хуплу говоришь "по таким-то исходящим из текущей вершины рёбрам никаких новых фактов не передаю", он считает, что по этим рёбрам вообще ходить не надо. А потом он считает все непосещённые вершины недостижимыми и удаляет из графа. В результате в хвалёном GADT-овом коде образуются графы с висячими рёбрами в никуда.

Upd3: Вспомнил, на чём остановился до обнаружения пропадания узлов. Завтра надо будет дописать композицию прямого прохода ArgumentValues и обратного DeleteActualArguments. Cегодня никак не мог понять, что же первый подаёт на вход второму.
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