Перейти к содержимому
Топаз6.0 · До релиза
Загрузка →

Поиск в документации

Спецификация 6.0

Выберите результат стрелками и нажмите Enter, чтобы открыть его.

Введите имя API, номер диагностики, правило или тему проекта.

    Диагностика TPZ5524

    An exported function exposes a bound on a module-local user protocol.

    Diagnostic and cause

    Ссылка

    TPZ5524

    Семейство
    topaz
    Этап
    check
    Код
    TPZ5524

    Причина и условия

    An exported function or a method signature of an exported protocol may expose built-in protocols and exported user protocols in its bounds. Resolve each bound through its defining protocol identity, including selected aliases and namespace qualification. A private protocol bound is rejected with TPZ5524. Default expressions keep their ordinary lexical environment. This visibility check concerns the public signature.

    Действия

    Compiler phase: check/package.

    Compiler explanation: An exported function exposes a bound on a module-local user protocol.

    Message templates. The marker ⟨value⟩ stands for text computed for the reported program.

    • exported functions cannot expose module-local protocol bound ⟨value⟩ Source

    Public callable bounds may name built-in or exported user protocols. Exposing a private protocol bound is rejected with TPZ5524.

    Правилоdiagnostics.tpz5524.p5.rule

    Private protocol bound cannot cross a module interface

    Public callable bounds may name built-in or exported user protocols. Exposing a private protocol bound is rejected with TPZ5524.

    Response

    Ссылка

    Export the protocol when it belongs in the public contract, or keep the callable private. Import an exported protocol through the ordinary module boundary.

    Reproduction and verification

    Ссылка

    Rejected program

    Ссылка
    example.tpzRejected programОткрыть песочницу →
    1. protocol Local {
    2. function show(value: Self) -> string
    3. }
    4. export function render<T: Local>(value: T) -> string { Local.show(value) }
    Ожидаемый выводНенулевой код завершения
    Нет стандартного вывода.
    $ topaz check example.tpz · Целевой продукт 5.21.3
    Ожидаемый результат

    Ожидаемый результат

    Этап отклонения check. Ненулевой код завершения.

    Repaired program

    Ссылка
    example.tpzRepaired program
    1. protocol Local {
    2. function show(value: Self) -> string
    3. }
    4. function render<T: Local>(value: T) -> string { Local.show(value) }
    Ожидаемый выводКод завершения 0
    $ topaz check example.tpz · Целевой продукт 5.21.3
    Ожидаемый результат

    Ожидаемый результат

    Проверка принимает программу. Код завершения 0.

    Меню

    Загрузка →