XO1403: call of a function not known to be real-time
A real-time function (core 6.5) may call only other real-time functions (declared uses realtime), the bounded prelude methods (scalar arithmetic, len, get, contains, List.set, Atomic operations), and C functions of a use c module. A call of a function value or of an interface method (a capability, or a method of a type parameter’s constraint) is rejected: its callee is not known, so neither its allocation nor its recursion can be checked. Mark the helper uses realtime when it follows the rules, or move the call out of the real-time function.
Example
fn scale(x: Float) -> Float { x * 0.5 }
fn tick(x: Float) -> Float uses realtime {
scale(x)
}Fix
fn scale(x: Float) -> Float uses realtime { x * 0.5 }
fn tick(x: Float) -> Float uses realtime {
scale(x)
}Run xo explain XO1403 for this text in a terminal, or see
section 10.6 of the specification.