Diagnostic and cause
LinkTPZ5524
- Family
- topaz
- Phase
- check
- Code
TPZ5524
Cause and conditions
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.
Related rule: Bounds exposed by public callablesResponse
Source evidence
- Bound diagnostics at
d61f9fd0efb0· 177-191
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.
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.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/bodies_captures.tpz at
151141d7bb44· 170-182
Response
LinkExport 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
LinkRejected program
Linkprotocol Local {function show(value: Self) -> string}export function render<T: Local>(value: T) -> string { Local.show(value) }
No stdout.
Expected result
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/bodies_captures.tpz at
151141d7bb44· 170-182
Repaired program
Linkprotocol Local {function show(value: Self) -> string}function render<T: Local>(value: T) -> string { Local.show(value) }
Expected result
Expected result
Checking accepts the program. Exit code 0.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/bodies_captures.tpz at
151141d7bb44· 170-182