Diagnostic and cause
LinkNative emitter cannot lower this construct yet
- Family
- topaz
- Phase
- emit
- Code
TPZ6001
Cause and conditions
A multiple-rest list pattern retains the established TPZ6001 emission-refusal expectation. A single-rest list pattern has supported Rust emission. The language admission policy for multiple rests remains open.
Related rule: Multiple list rests and emission refusalResponse
Use one rest element per list pattern. Match additional structure inside that remainder when it is needed.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 997-1008 - compiler/crates/topaz_emit/src/codes.rs at
151141d7bb44· 21-21 - compiler/crates/topaz_self_frontend/topaz/parser/types_patterns.tpz at
17711dcdbc9b· 387-448 - compiler/crates/topaz_self_frontend/topaz/checker/patterns.tpz at
17711dcdbc9b· 1282-1378 - compiler/crates/topaz_self_frontend/topaz/emitter/emit.tpz at
17711dcdbc9b· 2220-2243 - compiler/crates/topaz_emit/src/pattern/destructure.rs at
17711dcdbc9b· 270-278 - compiler/crates/topaz_emit/src/lib.rs at
17711dcdbc9b· 190-209 - compiler/crates/topaz_emit/src/codes.rs at
17711dcdbc9b· 16-21
Compiler phase: emit.
Compiler explanation: The program is accepted by the language, but the selected native emit path lacks a proven lowering for this construct.
Message templates are Pending. The explanation above is not an observed CLI message.
A multiple-rest list pattern retains the established TPZ6001 emission-refusal expectation. A single-rest list pattern has supported Rust emission. The language admission policy for multiple rests remains open.
Multiple list rests and emission refusal
A multiple-rest list pattern retains the established TPZ6001 emission-refusal expectation. A single-rest list pattern has supported Rust emission. The language admission policy for multiple rests remains open.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/parser/types_patterns.tpz at
17711dcdbc9b· 387-448 - compiler/crates/topaz_self_frontend/topaz/checker/patterns.tpz at
17711dcdbc9b· 1282-1378 - compiler/crates/topaz_self_frontend/topaz/emitter/emit.tpz at
17711dcdbc9b· 2220-2243 - compiler/crates/topaz_emit/src/pattern/destructure.rs at
17711dcdbc9b· 270-278 - compiler/crates/topaz_emit/src/lib.rs at
17711dcdbc9b· 190-209 - compiler/crates/topaz_emit/src/codes.rs at
17711dcdbc9b· 16-21
Response
LinkUse one rest element per list pattern. Match additional structure inside that remainder when it is needed.
Reproduction and verification
LinkRejected program
Linklet value = match ([1, 2]) {case [..left, ..right] => 0case _ => 1}
Expected result
Expected result
Rejection during emit. Nonzero exit.
TPZ6001multiple-rest-emission-refusal
The required primary-location contract is Pending.
The established Rust backend reports the multiple-rest-emission-refusal cause. Current SELF emits several Rust slice rests without establishing that refusal. The P5 runtime/emit product runner preserves TPZ6001 and nonzero; the exact primary location remains pending. These examples do not decide whether the language should admit multiple rests.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/parser/types_patterns.tpz at
17711dcdbc9b· 387-448 - compiler/crates/topaz_self_frontend/topaz/checker/patterns.tpz at
17711dcdbc9b· 1282-1378 - compiler/crates/topaz_self_frontend/topaz/emitter/emit.tpz at
17711dcdbc9b· 2220-2243 - compiler/crates/topaz_emit/src/pattern/destructure.rs at
17711dcdbc9b· 270-278 - compiler/crates/topaz_emit/src/lib.rs at
17711dcdbc9b· 190-209 - compiler/crates/topaz_emit/src/codes.rs at
17711dcdbc9b· 16-21
Repaired program
Linklet value = match ([1, 2]) {case [first, ..rest] => 0case _ => 1}
Expected result
Expected result
Checking accepts the program. Exit code 0.
The established Rust backend reports the multiple-rest-emission-refusal cause. Current SELF emits several Rust slice rests without establishing that refusal. The P5 runtime/emit product runner preserves TPZ6001 and nonzero; the exact primary location remains pending. These examples do not decide whether the language should admit multiple rests.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/parser/types_patterns.tpz at
17711dcdbc9b· 387-448 - compiler/crates/topaz_self_frontend/topaz/checker/patterns.tpz at
17711dcdbc9b· 1282-1378 - compiler/crates/topaz_self_frontend/topaz/emitter/emit.tpz at
17711dcdbc9b· 2220-2243 - compiler/crates/topaz_emit/src/pattern/destructure.rs at
17711dcdbc9b· 270-278 - compiler/crates/topaz_emit/src/lib.rs at
17711dcdbc9b· 190-209 - compiler/crates/topaz_emit/src/codes.rs at
17711dcdbc9b· 16-21