Diagnostic and cause
СсылкаLoop break values do not agree
- Семейство
- topaz
- Этап
- check
- Код
TPZ5721
Причина и условия
When a value-producing loop has no contextual result type, incompatible break-value types are rejected with TPZ5721. The int and string break values in this program are assignable in neither direction.
Действия
Make the breaks produce compatible values. The repaired program returns int from both branches.
Compiler phase: check.
Compiler explanation: A loop expression has break values whose types cannot join to one result type.
Message templates. The marker ⟨value⟩ stands for text computed for the reported program.
breakvalues targeting this loop disagree — earlierbreakis⟨value⟩, this is⟨value⟩(all break values must have the same type) Source
When a value-producing loop has no contextual result type, incompatible break-value types are rejected with TPZ5721. The int and string break values in this program are assignable in neither direction.
Inferred loop break types must be compatible
When a value-producing loop has no contextual result type, incompatible break-value types are rejected with TPZ5721. The int and string break values in this program are assignable in neither direction.
Response
СсылкаMake the breaks produce compatible values. The repaired program returns int from both branches.
Reproduction and verification
СсылкаRejected program
Ссылкаlet flag: bool = truelet result = loop {if (flag) { break 1 } else { break "text" }}
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
diagnostic-tpz5721 at
example.tpz:3:32
This condition applies to a value loop with no expected result type and concrete incompatible break types. The checker compares assignability in both directions; the example does not impose a type-spelling equality rule on other loop contexts.
Repaired program
Ссылкаlet flag: bool = truelet result = loop {if (flag) { break 1 } else { break 2 }}
Ожидаемый результат
Ожидаемый результат
Проверка принимает программу. Код завершения 0.
This condition applies to a value loop with no expected result type and concrete incompatible break types. The checker compares assignability in both directions; the example does not impose a type-spelling equality rule on other loop contexts.