Skip to content

Stack empty при обращении к свойству простого значения #1791

Open

Description

@Stivo182

Опишите ошибку
Stack empty при обращении к свойству простого значения

Воспроизведение ошибки

Попытка
    Результат = (Неопределено).НесуществующееСвойство;
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

То же воспроизводится для Null, Истина и числового литерала:

(Null).НесуществующееСвойство;
(Истина).НесуществующееСвойство;
(1).НесуществующееСвойство;

Фактический результат

Внешнее исключение (System.InvalidOperationException): Stack empty.

Ожидаемое поведение

Сценарий должен завершаться диагностикой с предметным смыслом, а не внутренним
System.InvalidOperationException. Например, ошибкой о том, что значение не является объектом.

Окружение

  • ОС: Windows
  • Версия: 2.2.1

Activity

  1. Mr-Rm commented on Oct 14, 2026

    @Mr-Rm
    Collaborator

    Всё дело в скобках вокруг литерала.

    Результат = Неопределено.Свойство;

    - не компилируется: Ожидается символ ; (точка с запятой)

    А вот такой, выглядящий допустимо и работающий в OneScript код

    Структура = Новый Структура("Свойство");
    Результат = (Структура).Свойство;

    1C не компилирует с диагностикой
    Неопознанный оператор
    Результат = (Структура)<<?>>.Свойство;

    Но срабатывает трюк с ?(,,), и можно организовать ошибку в рантайме

    Тут, похоже, разница на уровне грамматики. Что выбираем?

  2. EvilBeaver commented on Oct 14, 2026

    @EvilBeaver
    Owner

    Я бы выбирал в пользу того, что (Структура).Свойство должно работать, а (Неопределено).Свойство выдавать ошибку в рантайме.

    @dmpas @nixel2007 @sfaqer что думаете?

  3. dmpas commented on Oct 14, 2026

    @dmpas
    Collaborator

    Оно и выдаёт ошибку в рантайме :-D просто не совсем понятную...

  4. nixel2007 commented on Oct 14, 2026

    @nixel2007
    Collaborator

    Я бы выбирал в пользу того, что (Структура).Свойство должно работать, а (Неопределено).Свойство выдавать ошибку в рантайме.

    (Структура).Свойство звучит как обычный дереференс выражения, и на мой взгляд, это должно работать.
    (неопределено).свойство - такой же дереференс, и да, оно должно падать в рантайме с внятной ошибкой типа "значение не является значением объектного типа" или чем-то аналогичным. Но не кишками движка.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions