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

Несовместимое поведение Выполнить, закрепленное в тестах eval #1412

Open
EvilBeaver opened this issue Jun 1, 2024 · 9 comments
Assignees

Comments

@EvilBeaver
Copy link
Owner

Существующий тест eval https://github.com/EvilBeaver/OneScript/blob/develop/tests/eval.os#L270 описывает поведение, которое не поддерживается в 1С. И судя по тесту, он тестирует не очень хорошую особенность работы ВМ 1Скрипт, исправляемую в рамках #1000 и #268

image

1C работает логично и не выполняет данный код из теста eval

@EvilBeaver EvilBeaver self-assigned this Jun 1, 2024
@EvilBeaver EvilBeaver changed the title Несовместмое поведение Выполнить, закрепленное в тестах eval Несовместимое поведение Выполнить, закрепленное в тестах eval Jun 1, 2024
@EvilBeaver EvilBeaver added this to the v2.0-rc5 milestone Jun 3, 2024
@Mr-Rm
Copy link
Collaborator

Mr-Rm commented Jun 3, 2024

Reopen, всё хуже.

Процедура Вторая(Пар)	        
	Выполнить "сообщить(ТипЗнч(Рез)); Лок = Пар + 1;";
КонецПроцедуры

Процедура ТестДолжен_ПроверитьВложенныеВызовыВыполнить()
	Рез = 1;
	Выполнить "сообщить(ТипЗнч(Рез)); Вторая(2);";
КонецПроцедуры

ТестДолжен_ПроверитьВложенныеВызовыВыполнить()

OneScript после внесенных исправлений:
Число
{Модуль {}:2: / Ошибка в строке: 1,17 / Неизвестный символ: Рез}

что ожидаемо.
Теперь 1С:
Число
Не определено

т. е. переменная Рез при вложенном вызове в контексте Выполнить существует, но имеет значение Неопределено

@nixel2007
Copy link
Collaborator

А может ну его нафиг? На лицо протекание области видимости переменной, причём ничем не обоснованное

@EvilBeaver
Copy link
Owner Author

Ну дык я это и спилил

@EvilBeaver
Copy link
Owner Author

EvilBeaver commented Jun 4, 2024

т. е. переменная Рез при вложенном вызове в контексте Выполнить существует, но имеет значение Неопределено

Так было всегда испокон в 1Скрипте и это не про Выполнить, а вообще про разные моменты инициализации переменных

А = А + 1; // Приведение к типу Число невозможно

1Скрипт

А = А + 1; // Неизвестный символ А

P.S.

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

@EvilBeaver EvilBeaver reopened this Jun 4, 2024
@EvilBeaver
Copy link
Owner Author

Переоткрыл по причине: "Надо изучить доскональнее поведение 1С"

@Mr-Rm
Copy link
Collaborator

Mr-Rm commented Jun 5, 2024

Итак, поиск странностей.
Проверялось в Onescript v1.9.1 latest, v2-rc3 develop, 1С v8.3.2.1286; модули содержит только показанные фрагменты кода.

// обращение к переменной _как бы_ до объявления.
Выполнить "Сообщить(""ТП:""+ТипЗнч(ТП)+""=""+ТП);";
ТП = -10;

ТП:Неопределено=
у всех.
В общем, объяснимо.

@Mr-Rm
Copy link
Collaborator

Mr-Rm commented Jun 5, 2024

А вот это работает только в 1С:

// проброс переменной модуля внутрь процедуры и её возврат 
Процедура Проброс()
	ТП2 = 2;
	Выполнить "сообщить(""<ТП=""+ТП+"":""+ТипЗнч(ТП));" // Onescript падает здесь
	" ТП2 = ТП+1; ТП = ложь;"
	" сообщить("">ТП=""+ТП+"":""+ТипЗнч(ТП));";
	сообщить("локальная ТП2="+ТП2+":"+ТипЗнч(ТП2));
КонецПроцедуры

ТП = -9;
Проброс();
Выполнить "сообщить(""после вызова ТП=""+ТП+"":""+ТипЗнч(ТП));";

<ТП=-9:Число
>ТП=Нет:Булево
локальная ТП2=-8:Число
после вызова ТП=Нет:Булево

@Mr-Rm
Copy link
Collaborator

Mr-Rm commented Jun 5, 2024

(опуская примеры, краткий вывод)
В 1С в контексте Выполнить на любом уровне доступны переменные модуля, как глобальные, так и собственные, если они не перекрыты локальными переменными или параметрами текущей процедуры.

@EvilBeaver
Copy link
Owner Author

@Mr-Rm спасибо за анализ!

@EvilBeaver EvilBeaver removed this from the v2.0-rc5 milestone Sep 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants