Diagnostic and cause
LinkDuplicate runtime map key
- Family
- topaz
- Phase
- run
- Code
TPZ4601
Cause and conditions
A map comprehension rejects two entries whose evaluated keys have the same canonical key with TPZ4601. The primary location is the map expression. Distinct computed keys construct the map.
Related rule: Computed map entries require distinct keysResponse
Ensure that generated entries have distinct keys. If replacing an existing value is intended, perform that update explicitly instead of constructing duplicate entries.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 571-579 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 61-61 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 172-172 - compiler/crates/topaz_value/src/value/collections.rs at
151141d7bb44· 693-713 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 1052-1063
Compiler phase: runtime.
Compiler explanation: A map literal or comprehension produced the same key more than once at runtime.
Message templates are Pending. The explanation above is not an observed CLI message.
A map comprehension rejects two entries whose evaluated keys have the same canonical key with TPZ4601. The primary location is the map expression. Distinct computed keys construct the map.
Computed map entries require distinct keys
A map comprehension rejects two entries whose evaluated keys have the same canonical key with TPZ4601. The primary location is the map expression. Distinct computed keys construct the map.
Source evidence
- compiler/crates/topaz_value/src/value/collections.rs at
151141d7bb44· 693-713 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 1052-1063
Response
LinkEnsure that generated entries have distinct keys. If replacing an existing value is intended, perform that update explicitly instead of constructing duplicate entries.
Reproduction and verification
LinkRejected program
Linklet values = map { for key in (["same", "same"]) => key: 1 }
No stdout.
Expected result
Run the paired runtime product assertions with TOPAZ_BIN set using node docs/topaz-reference/templates/diagnostics-p5-runtime.product.mjs. The shared example observer currently evaluates check diagnostics.
Source evidence
- compiler/crates/topaz_value/src/value/collections.rs at
151141d7bb44· 693-713 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 1052-1063
Repaired program
Linklet values = map { for key in (["first", "second"]) => key: 1 }
No stdout.
Expected result
Expected result
Execution completes. Exit code 0.
Run the paired runtime product assertions with TOPAZ_BIN set using node docs/topaz-reference/templates/diagnostics-p5-runtime.product.mjs. The shared example observer currently evaluates check diagnostics.
Source evidence
- compiler/crates/topaz_value/src/value/collections.rs at
151141d7bb44· 693-713 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 1052-1063