Skip to content
Topaz6.0 · Before release
Download

Search documentation

Specification 6.0 · Not released · Tested product 5.21.3

Use arrow keys to choose a result. Press Enter to open.

Type an API name, diagnostic number, rule, or project topic.

    Diagnostics

    TPZ5001 Runtime value guard

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

    Diagnostic and cause

    Link

    Runtime value guard

    Family
    topaz
    Phase
    run
    Code
    TPZ5001

    Cause and conditions

    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.

    Source evidence

    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.

    Rulediagnostics.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.

    Source evidence

    Response

    Link

    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

    Link

    Rejected program

    Link
    example.tpzRejected program
    1. import std.decimal { Decimal }
    2. let one: Decimal = (1).toDecimal()
    3. one.round(-1)
    Expected outputNonzero exit
    No stdout.
    $ topaz run example.tpz · target product 5.21.3
    Expected result

    Expected result

    Rejection during run. Nonzero exit.

    • TPZ5001 stdlib-decimal-scale at example.tpz:3:1

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

    Source evidence

    Repaired program

    Link
    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())
    Expected outputexit 0
    1
    
    $ topaz run example.tpz · target product 5.21.3
    Expected result

    Expected result

    Execution completes. Exit code 0.

    Expected stdout
    1. 1

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

    Source evidence

    Menu

    Download