11.1. Miscellaneous contract annotations

The CONTRACTS module provides compile-time type constraints for generic function arguments. Annotations like [expect_any_array], [expect_any_enum], [expect_any_numeric], and [expect_any_struct] restrict which types can instantiate a generic parameter, producing clear error messages on mismatch.

See Contracts for a hands-on tutorial.

All functions and symbols are in “contracts” module, use require to get access to it.

require daslib/contracts

Example:

require daslib/contracts

[expect_any_numeric(a)]
def process(a) {
    return "scalar"
}

[expect_any_array(a)]
def process(a) {
    return "array"
}

[export]
def main() {
    var arr : int[3]
    print("{process(42)}\n")
    print("{process(arr)}\n")
}
// output:
// scalar
// array

11.1.1. Function annotations

expect_any_variant

Function annotation expect_any_variant

expect_any_workhorse

Function annotation expect_any_workhorse

expect_any_function

Function annotation expect_any_function

expect_any_lambda

Function annotation expect_any_lambda

expect_ref

Function annotation expect_ref

expect_any_bitfield

Function annotation expect_any_bitfield

expect_value_handle

Function annotation expect_value_handle

expect_any_struct

Function annotation expect_any_struct

expect_any_enum

Function annotation expect_any_enum

expect_any_tuple

Function annotation expect_any_tuple

expect_any_numeric

Function annotation expect_any_numeric

expect_any_array

Function annotation expect_any_array

expect_any_vector_type

Function annotation expect_any_vector_type

expect_pointer

Function annotation expect_pointer

expect_class

Function annotation expect_class

expect_any_workhorse_raw

Function annotation expect_any_workhorse_raw

11.1.2. Type queries

isYetAnotherVectorTemplate(td: TypeDeclPtr ): bool

def isYetAnotherVectorTemplate (td: TypeDeclPtr) : bool

Arguments: