C-style variadic function library

August 19, 2024 ยท View on GitHub

Source: include/stdlib/c/cstdarg.ml

Provides bindings for the stdarg.h of the c standard library.

Types

TypeDescription
va_listType to hold information about variable arguments (c bind)

Functions

FunctionDescription
c_va_startInitialize a variable argument list (c bind)
c_va_argRetrieve next argument (c bind)
va_endEnd using variable argument list (c bind)
va_argWrapper for c_va_arg that relies on overloading

Macros

MacroDescription
va_startWrapper for c_va_start that mimics the c builtin
va_arg_voidptrWrapper for c_va_arg that returns a void* value
va_arg_int64Wrapper for c_va_arg that returns a int64 value

Convenience aliases

AliasAlias of
get_int64va_arg_int64
get_voidptrva_arg_voidptr

Example

import stdlib.io.print
import stdlib.c.cstdlib
import stdlib.c.cstdarg

fun var(argx: int64, ...): void
    # Declares and initializes the variable argument list
    let listx: va_list
    va_start(listx, argx)
    defer va_end(listx)

    # Prints the second argument passed to to function
    listx.get_int64.println
end

fun main: int32
    var(1, 2)
    ret 0
end