Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с глобальной оптимизацией и detached $ENTRY #302

Closed
Mazdaywik opened this issue Jun 27, 2020 · 1 comment
Assignees
Labels

Comments

@Mazdaywik
Copy link
Member

Воспроизведение проблемы

Файл main.ref:

$EXTERN Entry;

$ENTRY Go {
  = <Prout <Entry>>;
}

Файл lib.ref:

$ENTRY Entry;

Entry {
  = 'Hello!'
}

* $ENTRY Entry;

(причём можно закомментировать любую из двух $ENTRY, проблема сохраняется)

Компиляция:

D:\Mazdaywik\Documents\Refal-5-lambda\build>call ..\bin\rlc main.ref lib.ref -OG --log=log.txt
*Parsing main.ref...
*Parsing lib.ref...
*Generating code...
** Compilation succeeded **

Запуск:

D:\Mazdaywik\Documents\Refal-5-lambda\build>main.exe
INTERNAL ERROR: unresolved external: Entry#0:0

Без ключа -OG всё работает:

D:\Mazdaywik\Documents\Refal-5-lambda\build>call ..\bin\rlc main.ref lib.ref --log=log.txt
*Compiling main.ref:
*Compiling lib.ref:
** Compilation succeeded **

D:\Mazdaywik\Documents\Refal-5-lambda\build>main.exe
Hello!

В логе наблюдается такой нонсенс:

  $ENTRY Entry~2 {
    /* empty */ = 'Hello!';
  }

Для синтаксиса detached $ENTRY почему-то суффикс приписывается к entry-функции.

@Mazdaywik Mazdaywik self-assigned this Jun 27, 2020
@Mazdaywik Mazdaywik added the bug label Jun 27, 2020
Mazdaywik added a commit that referenced this issue Jul 4, 2020
Ошибка была выявлена в ходе исправления ошибки #302.
Вообще, этот проход рассахаривателя (Pass-AttachEntries) стоит переписать.
Mazdaywik added a commit that referenced this issue Jul 4, 2020
Это не рефакторинг, т.к. в первоначальном варианте тоже были ошибки. Однако,
исправлению #302 мешала только одна и она была исправлена в коммите 0462a58.
В новом варианте старых ошибок нет, к тому же он короче и прозрачнее.
@Mazdaywik
Copy link
Member Author

Ошибка исправлена. Попутно была обнаружена другая ошибка, и она тоже исправлена.

Mazdaywik added a commit that referenced this issue Jul 4, 2020
Проход Pass-AttachEntries, как оказалось, также удалял маркер области
видимости у узлов дерева (Drive …), (Inline …) и (Intrinsic …), что было
не очевидно. Предыдущий коммит потерял эту логику.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant