Built-ins
This section describes some language constructions which are less fundamental than the ones described in previous articles. They could be defined in stdlib.fc but it would leave less room for the FunC optimizer.
Throwing exceptions
Exceptions can be thrown by conditional primitives throw_if
, and throw_unless
, and by unconditional throw
. The first argument is the error code; the second is the condition (throw
has only one argument). These primitives have parametrized versions throw_arg_if
, throw_arg_unless
, and throw_arg
. The first argument is the exception parameter of any type; the second is the error code; the third is the condition (throw_arg
has only two arguments).
Booleans
true
is alias for-1
false
is alias for0
Dump variable
A variable can be dumped to the debug log by the ~dump
function.
Dump string
A string can be dumped to the debug log by the ~strdump
function.
Integer operations
muldiv
is a multiple-then-divide operation. The intermediate result is stored in 513-bit integer, so it won't overflow if the actual result fits into a 257-bit integer.divmod
is a operation that takes two numbers as parameters and gives the quotient and remainder of their division.
Other primitives
null?
checks whether the argument isnull
. By the valuenull
of a TVM type,Null
FunC represents absence of a value of some atomic type; see null values.touch
and~touch
move a variable to the top of the stackat
gets the value of a tuple component on the specified position