#pragma once // KPL specific types #include "system.h" typedef enum : int32_t { KPL_EXIT_CODE_SUCCESS = 0, KPL_EXIT_CODE_ERROR = 1, KPL_EXIT_CODE_HELP = 2 } kpl_exit_code; typedef uint8_t kpl_utf8[4]; typedef union { uint8_t u8; int8_t i8; uint16_t u16; int16_t i16; uint32_t u32; int32_t i32; uint64_t u64; int64_t i64; kpl_utf8 utf8; float f32; double f64; void *ptr; } kpl_value; typedef struct { kpl_value value; int64_t tag; } kpl_result; typedef struct _kpl_task kpl_task; typedef struct _kpl_env kpl_env; typedef void kpl_task_fn(kpl_task *task, kpl_env *env); typedef struct _kpl_task { struct _kpl_task *_Atomic next, *join; kpl_task_fn *task_fn; int32_t io_res; uint32_t io_flags; int32_t thread_id; _Atomic bool canceled __attribute__((aligned(4))), join_ready __attribute__((aligned(8))); kpl_result result; // TODO TASK ARGUMENTS } kpl_task;