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

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

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

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

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

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

    Runtime value guards produce TPZ5001 when a value or pattern fails an operation requirement.

    Diagnostic and cause

    Ссылка

    Runtime value guard

    Семейство
    topaz
    Этап
    run
    Код
    TPZ5001

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

    At runtime TPZ5001 reports a value that fails the operation guard. Decimal scales follow Decimal rounding. Invalid scales fail before division classifies a zero divisor. BigInt radix and ByteBuffer byte guards use the same runtime identity. A comprehension stops when its pattern does not match a reached element.

    Действия

    Use a valid value for the operation. Check its scale, radix or byte bounds. Use an explicit filter when a comprehension should skip unmatched values.

    Compiler phase: check/runtime.

    Compiler explanation: A value's type does not match the type required by its context.

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

    • const initializers must be constant expressions (§4) Source
    • ⟨value⟩ is not iterable (§10) Source
    • return outside a function Source
    • a placeholder _ is valid only inside a pipeline stage (§11) Source
    • expected ⟨value⟩, found ⟨value⟩ Source
    • ⟨value⟩ outside a loop Source
    • bare ⟨value⟩ cannot target ⟨value⟩ Source
    • concurrent timeout duration must fit in u64 milliseconds (§15) Source
    • the range step must not be zero (§10) Source
    • ?? needs an Option or nullable left operand, found ⟨value⟩ Source
    • Length operation requires compatible units and scalar operands, found ⟨value⟩ and ⟨value⟩ Source
    • arithmetic needs matching numeric operands, found ⟨value⟩ and ⟨value⟩ Source
    • % needs int operands in v5.2, found ⟨value⟩ and ⟨value⟩ Source
    • + needs matching int, float, string, BigInt, or Decimal operands, found ⟨value⟩ and ⟨value⟩ Source
    • in does not apply to a Map; use in map.keys Source
    • in does not apply to strings Source
    • integer literal is out of range Source
    • unary operator cannot apply to ⟨value⟩ Source
    • ? propagates an error, but the function returns ⟨value⟩, not a Result Source
    • ? requires a Result value, found ⟨value⟩ Source
    • ⟨value⟩ is not index-readable; only arrays support […] indexing (§9) Source
    • integer literal ⟨value⟩ is out of range Source
    • a placeholder _ is valid only in a pipeline stage's argument list (§11) Source
    • ⟨value⟩ is not iterable (§10) Source
    • ByteBuffer values cannot be interpolated; snapshot to Bytes and encode explicitly Source
    • array spread needs an Array, found ⟨value⟩ Source
    • ?. needs an Option or nullable receiver, found namespace Source
    • ?. needs an Option or nullable receiver, found ⟨value⟩ Source
    • record spread ... needs a declared record; ⟨value⟩ is not one Source
    • record update needs a record, found ⟨value⟩ Source
    • integer literal type ⟨value⟩ is out of range Source
    • Length requires one compiler-owned Pt, Mm, Cm, In or Em marker Source
    • this pattern can never match ⟨value⟩ Source
    • a ⟨value⟩ pattern cannot establish nominal identity for rigid scrutinee type ⟨value⟩ Source
    • this ⟨value⟩ pattern can never match ⟨value⟩ Source
    • this ⟨value⟩ pattern can never match ⟨value⟩ Source
    • a Map is not index-assignable; use m.insert (§22) Source
    • cannot assign through optional access ?. (§4) Source
    • ??= needs an Option or nullable target, found ⟨value⟩ Source
    • constant expression error: ⟨value⟩ Source

    A checked program can still receive an invalid value during execution. Invalid numeric parameters and byte values use TPZ5001. A failed comprehension pattern uses the same runtime code. Each operation keeps its own cause and source location.

    Правилоdiagnostics.tpz5001.runtime.p5.rule

    Reject invalid values during execution

    At runtime TPZ5001 reports a value that fails the operation guard. Decimal scales follow Decimal rounding. Invalid scales fail before division classifies a zero divisor. BigInt radix and ByteBuffer byte guards use the same runtime identity. A comprehension stops when its pattern does not match a reached element.

    Response

    Ссылка

    Use a valid value for the operation. Check its scale, radix or byte bounds. Use an explicit filter when a comprehension should skip unmatched values.

    Reproduction and verification

    Ссылка

    Rejected program

    Ссылка
    example.tpzRejected program
    1. import std.decimal { Decimal }
    2. let one: Decimal = (1).toDecimal()
    3. one.round(-1)
    Ожидаемый выводНенулевой код завершения
    Нет стандартного вывода.
    $ topaz run example.tpz · Целевой продукт 5.21.3
    Ожидаемый результат

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

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

    Pinned source identifies the guard and call location. This pair has not been run with the public CLI.

    Repaired program

    Ссылка
    example.tpzRepaired program
    1. import std.decimal { Decimal }
    2. import std.io
    3. let one: Decimal = (1).toDecimal()
    4. io.writeLine(one.round(0).toString())
    Ожидаемый выводКод завершения 0
    1
    
    $ topaz run example.tpz · Целевой продукт 5.21.3
    Ожидаемый результат

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

    Выполнение завершается. Код завершения 0.

    Ожидаемый стандартный вывод
    1. 1

    Pinned source identifies the guard and call location. This pair has not been run with the public CLI.

    Меню

    Загрузка →