Files
wehub-resource-sync e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
chore: import upstream snapshot with attribution
2026-07-13 12:29:30 +08:00

1338 lines
38 KiB
C

#ifndef ZERO_C_ZERO_H
#define ZERO_C_ZERO_H
#include <stdbool.h>
#include <stddef.h>
#include "zero_contracts.h"
#define ZERO_VERSION "0.3.4"
#ifndef ZERO_BUILD_HASH
#define ZERO_BUILD_HASH "unknown"
#endif
typedef struct ZTargetInfo ZTargetInfo;
typedef struct ZProgramGraph ZProgramGraph;
typedef struct {
char *data;
size_t len;
size_t cap;
} ZBuf;
#define Z_BORROW_TRACE_MAX 16
typedef struct {
char root[128];
char path[256];
char kind[16];
char binding[128];
const char *binding_decl_path;
int binding_line;
int binding_column;
} ZBorrowTrace;
typedef struct {
bool present;
char target[64];
char object_format[32];
char backend[64];
char stage[32];
char unsupported_feature[128];
} ZBackendBlocker;
typedef struct {
int code;
char code_text[16];
char message[256];
char expected[128];
char actual[128];
char help[256];
ZBorrowTrace borrow_traces[Z_BORROW_TRACE_MAX];
size_t borrow_trace_count;
bool borrow_trace_truncated;
char borrow_repair[256];
ZBackendBlocker backend_blocker;
const char *path;
int line;
int column;
int length;
} ZDiag;
typedef enum {
EXPR_IDENT,
EXPR_STRING,
EXPR_CHAR,
EXPR_NUMBER,
EXPR_BOOL,
EXPR_NULL,
EXPR_MEMBER,
EXPR_INDEX,
EXPR_SLICE,
EXPR_CALL,
EXPR_BINARY,
EXPR_CAST,
EXPR_BORROW,
EXPR_CHECK,
EXPR_RESCUE,
EXPR_META,
EXPR_SHAPE_LITERAL,
EXPR_ARRAY_LITERAL
} ExprKind;
typedef struct Expr Expr;
typedef struct TypeArg TypeArg;
typedef struct {
char *name;
Expr *value;
int line;
int column;
} FieldInit;
typedef struct {
FieldInit *items;
size_t len;
size_t cap;
} FieldInitVec;
typedef struct {
Expr **items;
size_t len;
size_t cap;
} ExprVec;
struct TypeArg {
char *type;
int line;
int column;
};
typedef struct {
TypeArg *items;
size_t len;
size_t cap;
} TypeArgVec;
struct Expr {
ExprKind kind;
char *text;
char *resolved_type;
bool moves_ownership;
bool mutable_borrow;
bool bool_value;
bool array_repeat;
bool prefix_deref;
Expr *left;
Expr *right;
ExprVec args;
TypeArgVec type_args;
TypeArgVec checked_type_args;
FieldInitVec fields;
int line;
int column;
};
typedef enum {
STMT_LET,
STMT_ASSIGN,
STMT_DEFER,
STMT_CHECK,
STMT_RETURN,
STMT_EXPR,
STMT_IF,
STMT_WHILE,
STMT_FOR,
STMT_BREAK,
STMT_CONTINUE,
STMT_MATCH,
STMT_RAISE
} StmtKind;
typedef struct Stmt Stmt;
typedef struct MatchArm MatchArm;
typedef struct {
char *name;
char *type;
Expr *default_value;
bool is_static;
int line;
int column;
} Param;
typedef struct {
Param *items;
size_t len;
size_t cap;
} ParamVec;
typedef struct {
Stmt **items;
size_t len;
size_t cap;
} StmtVec;
struct MatchArm {
char *case_name;
char *range_end;
char *payload_name;
Expr *guard;
StmtVec body;
char *body_graph_id;
int line;
int column;
};
typedef struct {
MatchArm *items;
size_t len;
size_t cap;
} MatchArmVec;
struct Stmt {
StmtKind kind;
char *name;
char *type;
char *resolved_type;
bool mutable_binding;
Expr *target;
Expr *expr;
Expr *range_end;
StmtVec then_body;
StmtVec else_body;
MatchArmVec match_arms;
char *graph_id;
char *then_graph_id;
char *else_graph_id;
int line;
int column;
};
typedef struct {
char *name;
char *test_name;
char *return_type;
ParamVec type_params;
ParamVec params;
bool is_public;
bool raises;
bool has_error_set;
ParamVec errors;
bool is_test;
bool export_c;
StmtVec body;
int line;
int column;
} Function;
typedef struct {
Function *items;
size_t len;
size_t cap;
} FunctionVec;
typedef struct {
char *name;
char *layout;
ParamVec type_params;
ParamVec fields;
FunctionVec methods;
bool is_public;
int line;
int column;
} Shape;
typedef struct {
Shape *items;
size_t len;
size_t cap;
} ShapeVec;
typedef struct {
char *name;
ParamVec type_params;
FunctionVec methods;
bool is_public;
int line;
int column;
} InterfaceDecl;
typedef struct {
InterfaceDecl *items;
size_t len;
size_t cap;
} InterfaceVec;
typedef struct {
char *name;
char *type;
ParamVec cases;
bool is_public;
int line;
int column;
} EnumDecl;
typedef struct {
EnumDecl *items;
size_t len;
size_t cap;
} EnumVec;
typedef struct {
char *name;
ParamVec cases;
bool is_public;
int line;
int column;
} Choice;
typedef struct {
Choice *items;
size_t len;
size_t cap;
} ChoiceVec;
typedef struct {
char *name;
char *type;
Expr *expr;
bool is_public;
int line;
int column;
} ConstDecl;
typedef struct {
ConstDecl *items;
size_t len;
size_t cap;
} ConstVec;
typedef struct {
char *name;
char *target;
bool is_public;
int line;
int column;
} TypeAlias;
typedef struct {
TypeAlias *items;
size_t len;
size_t cap;
} TypeAliasVec;
typedef struct {
char *header;
char *resolved_header;
char *alias;
int line;
int column;
} CImport;
typedef struct {
CImport *items;
size_t len;
size_t cap;
} CImportVec;
typedef struct {
char *module;
char *alias;
int line;
int column;
int end_column;
} UseImport;
typedef struct {
UseImport *items;
size_t len;
size_t cap;
} UseImportVec;
typedef struct {
UseImportVec use_imports;
CImportVec c_imports;
ConstVec consts;
TypeAliasVec aliases;
InterfaceVec interfaces;
ShapeVec shapes;
EnumVec enums;
ChoiceVec choices;
FunctionVec functions;
} Program;
typedef enum {
IR_TYPE_UNSUPPORTED,
IR_TYPE_VOID,
IR_TYPE_BOOL,
IR_TYPE_U8,
IR_TYPE_U16,
IR_TYPE_USIZE,
IR_TYPE_I32,
IR_TYPE_U32,
IR_TYPE_I64,
IR_TYPE_U64,
IR_TYPE_BYTE_VIEW,
IR_TYPE_ALLOC,
IR_TYPE_VEC,
IR_TYPE_MAYBE_BYTE_VIEW,
IR_TYPE_MAYBE_SCALAR,
IR_TYPE_RECORD
} IrTypeKind;
typedef enum {
IR_ERROR_NONE = 0,
IR_ERROR_UNKNOWN = 1,
IR_ERROR_NOT_FOUND = 2,
IR_ERROR_TOO_LARGE = 3,
IR_ERROR_IO = 4
} IrErrorCode;
typedef enum {
IR_VALUE_INT,
IR_VALUE_BOOL,
IR_VALUE_LOCAL,
IR_VALUE_CAST,
IR_VALUE_BINARY,
IR_VALUE_COMPARE,
IR_VALUE_CALL,
IR_VALUE_INDEX_LOAD,
IR_VALUE_STRING_LITERAL,
IR_VALUE_ARRAY_BYTE_VIEW,
IR_VALUE_BYTE_SLICE,
IR_VALUE_BYTE_VIEW_LEN,
IR_VALUE_BYTE_VIEW_REMAINING,
IR_VALUE_BYTE_VIEW_INDEX_LOAD,
IR_VALUE_BYTE_VIEW_EQ,
IR_VALUE_STR_CONTAINS,
IR_VALUE_STR_RUNTIME,
IR_VALUE_ASCII_RUNTIME,
IR_VALUE_TEXT_RUNTIME,
IR_VALUE_PARSE_RUNTIME,
IR_VALUE_TIME_RUNTIME,
IR_VALUE_MATH_RUNTIME,
IR_VALUE_SEARCH_RUNTIME,
IR_VALUE_SORT_RUNTIME,
IR_VALUE_PARSE_I32,
IR_VALUE_PARSE_U32,
IR_VALUE_ARGS_PARSE_U32,
IR_VALUE_FMT_BOOL,
IR_VALUE_FMT_HEX_U32,
IR_VALUE_FMT_I32,
IR_VALUE_FMT_U32,
IR_VALUE_FMT_USIZE,
IR_VALUE_BYTE_COPY,
IR_VALUE_BYTE_FILL,
IR_VALUE_ITEM_COPY,
IR_VALUE_ITEM_FILL,
IR_VALUE_ITEM_CONTAINS,
IR_VALUE_CRC32_BYTES,
IR_VALUE_FIXED_BUF_ALLOC,
IR_VALUE_VEC_INIT,
IR_VALUE_VEC_PUSH,
IR_VALUE_VEC_LEN,
IR_VALUE_VEC_CAPACITY,
IR_VALUE_ALLOC_BYTES,
IR_VALUE_MAYBE_HAS,
IR_VALUE_MAYBE_VALUE,
IR_VALUE_MAYBE_BYTE_VIEW_LITERAL,
IR_VALUE_MAYBE_SCALAR_LITERAL,
IR_VALUE_ARGS_LEN,
IR_VALUE_ARGS_GET,
IR_VALUE_ARGS_EQ,
IR_VALUE_ARGS_GET_OR,
IR_VALUE_ARGS_FIND,
IR_VALUE_ARGS_CONTAINS,
IR_VALUE_ARGS_VALUE_AFTER,
IR_VALUE_ARGS_VALUE_AFTER_OR,
IR_VALUE_ARGS_VALUE_AFTER_PARSE_U32,
IR_VALUE_ENV_GET,
IR_VALUE_TIME_WALL_SECONDS,
IR_VALUE_TIME_MONOTONIC,
IR_VALUE_TIME_AS_MS,
IR_VALUE_RAND_NEXT_U32,
IR_VALUE_RAND_NEXT_BELOW,
IR_VALUE_RAND_RANGE_U32,
IR_VALUE_RAND_ENTROPY_U32,
IR_VALUE_FS_HOST,
IR_VALUE_FS_OPEN,
IR_VALUE_FS_CREATE,
IR_VALUE_FS_READ_PATH,
IR_VALUE_FS_WRITE_PATH,
IR_VALUE_FS_READ_BYTES_PATH,
IR_VALUE_FS_WRITE_BYTES_PATH,
IR_VALUE_FS_READ_ALL,
IR_VALUE_FS_READ_FILE,
IR_VALUE_FS_WRITE_ALL_FILE,
IR_VALUE_FS_CLOSE_FILE,
IR_VALUE_FS_EXISTS,
IR_VALUE_FS_REMOVE,
IR_VALUE_FS_RENAME,
IR_VALUE_FS_FILE_LEN,
IR_VALUE_FS_MAKE_DIR,
IR_VALUE_FS_REMOVE_DIR,
IR_VALUE_FS_IS_DIR,
IR_VALUE_FS_DIR_ENTRY_COUNT,
IR_VALUE_FS_DIR_ENTRY_NAME,
IR_VALUE_FS_TEMP_NAME,
IR_VALUE_FS_ATOMIC_WRITE,
IR_VALUE_JSON_PARSE_BYTES,
IR_VALUE_JSON_VALIDATE_BYTES,
IR_VALUE_JSON_STREAM_TOKENS_BYTES,
IR_VALUE_JSON_DIAGNOSTIC_BYTES,
IR_VALUE_JSON_FIELD,
IR_VALUE_JSON_LOOKUP_SCALAR,
IR_VALUE_JSON_STRING_DECODE,
IR_VALUE_JSON_STRING_FIELD,
IR_VALUE_JSON_WRITE_STRING,
IR_VALUE_JSON_WRITE_RUNTIME,
IR_VALUE_HTTP_FETCH,
IR_VALUE_HTTP_RESULT_OK,
IR_VALUE_HTTP_RESULT_STATUS,
IR_VALUE_HTTP_RESULT_BODY_LEN,
IR_VALUE_HTTP_RESULT_ERROR,
IR_VALUE_HTTP_RESPONSE_LEN,
IR_VALUE_HTTP_RESPONSE_HEADERS_LEN,
IR_VALUE_HTTP_RESPONSE_BODY_OFFSET,
IR_VALUE_HTTP_HEADER_VALUE,
IR_VALUE_HTTP_HEADER_FOUND,
IR_VALUE_HTTP_HEADER_OFFSET,
IR_VALUE_HTTP_HEADER_LEN,
IR_VALUE_HTTP_WRITE_JSON_RESPONSE,
IR_VALUE_HTTP_REQUEST_METHOD_NAME,
IR_VALUE_HTTP_REQUEST_PATH,
IR_VALUE_HTTP_REQUEST_MATCHES,
IR_VALUE_HTTP_REQUEST_BODY_WITHIN,
IR_VALUE_HTTP_STATUS_CLASS,
IR_VALUE_FIELD_LOAD,
IR_VALUE_CHECK,
IR_VALUE_RESCUE,
IR_VALUE_RECORD_ADDR,
/* Appended after RECORD_ADDR so persisted MIR value-kind numbering stays stable. */
IR_VALUE_FS_READ_BYTES_AT_PATH,
IR_VALUE_VEC_BYTES,
IR_VALUE_VEC_GET,
IR_VALUE_VEC_SET,
IR_VALUE_VEC_CLEAR,
IR_VALUE_VEC_POP,
IR_VALUE_VEC_TRUNCATE,
IR_VALUE_VEC_REMOVE_SWAP,
IR_VALUE_VEC_INDEX,
IR_VALUE_VEC_CONTAINS,
IR_VALUE_VEC_INSERT_UNIQUE,
IR_VALUE_VEC_REMOVE_VALUE,
IR_VALUE_JSON_ERROR_LABEL,
IR_VALUE_PROC_CAPTURE,
IR_VALUE_PROC_CAPTURE_FILES,
IR_VALUE_PROC_CHILD_SPAWN,
IR_VALUE_PROC_CHILD_OP,
IR_VALUE_PROC_CHILD_IO,
IR_VALUE_PROC_PTY_RESIZE,
IR_VALUE_TERM_RUNTIME,
IR_VALUE_PROC_SPAWN_INHERIT,
IR_VALUE_FS_APPEND_BYTES_PATH, IR_VALUE_KIND_LAST = IR_VALUE_FS_APPEND_BYTES_PATH
} IrValueKind;
typedef enum {
IR_JSON_WRITE_FIELD_RAW,
IR_JSON_WRITE_FIELD_STRING,
IR_JSON_WRITE_FIELD_U32,
IR_JSON_WRITE_FIELD_BOOL,
IR_JSON_WRITE_OBJECT1_STRING,
IR_JSON_WRITE_OBJECT1_U32,
IR_JSON_WRITE_OBJECT1_BOOL,
IR_JSON_WRITE_OBJECT2_FIELDS,
IR_JSON_WRITE_OBJECT2_STRING_FIELD,
IR_JSON_WRITE_OBJECT2_U32_FIELD,
IR_JSON_WRITE_OBJECT2_BOOL_FIELD,
IR_JSON_WRITE_ARRAY2_STRINGS,
IR_JSON_WRITE_ARRAY2_U32,
IR_JSON_WRITE_ARRAY2_BOOLS
} IrJsonWriteOp;
typedef enum {
IR_STR_OP_REVERSE,
IR_STR_OP_COPY,
IR_STR_OP_CONCAT,
IR_STR_OP_REPEAT,
IR_STR_OP_TO_LOWER_ASCII,
IR_STR_OP_TO_UPPER_ASCII,
IR_STR_OP_TRIM_ASCII,
IR_STR_OP_TRIM_START_ASCII,
IR_STR_OP_TRIM_END_ASCII,
IR_STR_OP_COUNT_BYTE,
IR_STR_OP_STARTS_WITH,
IR_STR_OP_ENDS_WITH,
IR_STR_OP_CONTAINS,
IR_STR_OP_COUNT,
IR_STR_OP_INDEX_OF,
IR_STR_OP_LAST_INDEX_OF,
IR_STR_OP_EQL_IGNORE_ASCII_CASE,
IR_STR_OP_WORD_COUNT_ASCII,
IR_STR_OP_PATH_BASENAME,
IR_STR_OP_PATH_DIRNAME,
IR_STR_OP_PATH_EXTENSION,
IR_STR_OP_PARSE_TOKEN_ASCII,
IR_STR_OP_CRYPTO_SHA256,
IR_STR_OP_CRYPTO_SHA256_HEX,
IR_STR_OP_CRYPTO_HMAC_SHA256,
IR_STR_OP_CRYPTO_HMAC_SHA256_HEX
} IrStrOp;
typedef enum {
IR_ASCII_OP_IS_DIGIT,
IR_ASCII_OP_IS_LOWER,
IR_ASCII_OP_IS_UPPER,
IR_ASCII_OP_IS_ALPHA,
IR_ASCII_OP_IS_ALNUM,
IR_ASCII_OP_IS_WHITESPACE,
IR_ASCII_OP_IS_HEX_DIGIT,
IR_ASCII_OP_TO_LOWER,
IR_ASCII_OP_TO_UPPER,
IR_ASCII_OP_DIGIT_VALUE,
IR_ASCII_OP_HEX_VALUE
} IrAsciiOp;
typedef enum {
IR_TEXT_OP_IS_ASCII,
IR_TEXT_OP_UTF8_VALID,
IR_TEXT_OP_UTF8_LEN
} IrTextOp;
typedef enum {
IR_PARSE_OP_IS_ASCII_DIGIT,
IR_PARSE_OP_IS_ASCII_ALPHA,
IR_PARSE_OP_IS_IDENTIFIER_START,
IR_PARSE_OP_IS_WHITESPACE,
IR_PARSE_OP_SCAN_DIGITS,
IR_PARSE_OP_SCAN_IDENTIFIER,
IR_PARSE_OP_SCAN_UNTIL_BYTE,
IR_PARSE_OP_SCAN_WHITESPACE,
IR_PARSE_OP_PARSE_BOOL,
IR_PARSE_OP_PARSE_U8,
IR_PARSE_OP_PARSE_U16,
IR_PARSE_OP_PARSE_USIZE,
IR_PARSE_OP_TERM_KEY_CODE,
IR_PARSE_OP_TERM_KEY_BYTE_LEN
} IrParseOp;
typedef enum {
IR_TIME_OP_AS_US_FLOOR,
IR_TIME_OP_AS_MS_FLOOR,
IR_TIME_OP_AS_SECONDS_FLOOR,
IR_TIME_OP_MIN,
IR_TIME_OP_MAX,
IR_TIME_OP_CLAMP,
IR_TIME_OP_SLEEP,
IR_TIME_OP_WALL_SECONDS,
IR_TIME_OP_MONOTONIC
} IrTimeOp;
typedef enum {
IR_TERM_OP_STDIN_IS_TTY,
IR_TERM_OP_STDOUT_IS_TTY,
IR_TERM_OP_WIDTH_OR,
IR_TERM_OP_HEIGHT_OR,
IR_TERM_OP_ENTER_RAW_MODE,
IR_TERM_OP_LEAVE_RAW_MODE,
IR_TERM_OP_READ_INPUT
} IrTermOp;
typedef enum {
IR_PROC_CHILD_OP_RUNNING,
IR_PROC_CHILD_OP_WAIT,
IR_PROC_CHILD_OP_KILL,
IR_PROC_CHILD_OP_CLOSE,
IR_PROC_CHILD_OP_VALID,
IR_PROC_CHILD_OP_PID,
IR_PROC_CHILD_OP_INTERRUPT,
IR_PROC_CHILD_OP_CLOSE_STDIN,
IR_PROC_CHILD_OP_PID_RUNNING,
IR_PROC_CHILD_OP_KILL_PID,
IR_PROC_CHILD_OP_INTERRUPT_PID, IR_PROC_CHILD_OP_KILL_GROUP_PID, IR_PROC_CHILD_OP_INTERRUPT_GROUP_PID
} IrProcChildOp;
typedef enum {
IR_PROC_CHILD_IO_READ_STDOUT,
IR_PROC_CHILD_IO_READ_STDERR,
IR_PROC_CHILD_IO_WRITE_STDIN
} IrProcChildIoOp;
typedef enum {
IR_MATH_OP_MIN_I32,
IR_MATH_OP_MAX_I32,
IR_MATH_OP_CLAMP_I32,
IR_MATH_OP_MIN_I64,
IR_MATH_OP_MAX_I64,
IR_MATH_OP_CLAMP_I64,
IR_MATH_OP_MIN_U32,
IR_MATH_OP_MAX_U32,
IR_MATH_OP_CLAMP_U32,
IR_MATH_OP_MIN_U64,
IR_MATH_OP_MAX_U64,
IR_MATH_OP_CLAMP_U64,
IR_MATH_OP_MIN_USIZE,
IR_MATH_OP_MAX_USIZE,
IR_MATH_OP_CLAMP_USIZE,
IR_MATH_OP_ABS_I32,
IR_MATH_OP_ABS_I64,
IR_MATH_OP_CHECKED_ADD_U32,
IR_MATH_OP_CHECKED_SUB_U32,
IR_MATH_OP_CHECKED_MUL_U32,
IR_MATH_OP_SATURATING_ADD_U32,
IR_MATH_OP_SATURATING_SUB_U32,
IR_MATH_OP_SATURATING_MUL_U32,
IR_MATH_OP_CHECKED_ADD_I32,
IR_MATH_OP_CHECKED_SUB_I32,
IR_MATH_OP_CHECKED_MUL_I32,
IR_MATH_OP_SATURATING_ADD_I32,
IR_MATH_OP_SATURATING_SUB_I32,
IR_MATH_OP_SATURATING_MUL_I32,
IR_MATH_OP_GCD_U32,
IR_MATH_OP_LCM_U32,
IR_MATH_OP_CHECKED_LCM_U32,
IR_MATH_OP_POW_U32,
IR_MATH_OP_CHECKED_POW_U32,
IR_MATH_OP_MOD_POW_U32,
IR_MATH_OP_IS_PRIME_U32,
IR_MATH_OP_SQRT_FLOOR_U32,
IR_MATH_OP_FACTORIAL_U32,
IR_MATH_OP_BINOMIAL_U32,
IR_MATH_OP_DIVISOR_COUNT_U32,
IR_MATH_OP_PROPER_DIVISOR_SUM_U32,
IR_MATH_OP_CHECKED_ADD_USIZE,
IR_MATH_OP_CHECKED_SUB_USIZE,
IR_MATH_OP_CHECKED_MUL_USIZE,
IR_MATH_OP_SATURATING_ADD_USIZE,
IR_MATH_OP_SATURATING_SUB_USIZE,
IR_MATH_OP_SATURATING_MUL_USIZE
} IrMathOp;
typedef enum {
IR_SEARCH_OP_LOWER_BOUND_I32,
IR_SEARCH_OP_BINARY_I32,
IR_SEARCH_OP_LOWER_BOUND_U32,
IR_SEARCH_OP_BINARY_U32,
IR_SEARCH_OP_LOWER_BOUND_USIZE,
IR_SEARCH_OP_BINARY_USIZE,
IR_SEARCH_OP_UPPER_BOUND_I32,
IR_SEARCH_OP_UPPER_BOUND_U32,
IR_SEARCH_OP_UPPER_BOUND_USIZE
} IrSearchOp;
typedef enum {
IR_SORT_OP_INSERTION_I32,
IR_SORT_OP_IS_SORTED_I32,
IR_SORT_OP_INSERTION_U32,
IR_SORT_OP_IS_SORTED_U32,
IR_SORT_OP_INSERTION_USIZE,
IR_SORT_OP_IS_SORTED_USIZE
} IrSortOp;
typedef enum {
IR_BIN_ADD,
IR_BIN_SUB,
IR_BIN_MUL,
IR_BIN_DIV,
IR_BIN_MOD,
IR_BIN_AND,
IR_BIN_OR
} IrBinaryOp;
typedef enum {
IR_CMP_EQ,
IR_CMP_NE,
IR_CMP_LT,
IR_CMP_LE,
IR_CMP_GT,
IR_CMP_GE
} IrCompareOp;
typedef struct IrValue IrValue;
typedef struct IrInstr IrInstr;
struct IrValue {
IrValueKind kind;
IrTypeKind type;
unsigned long long int_value;
unsigned local_index;
unsigned callee_index;
unsigned array_index;
unsigned field_offset;
unsigned data_offset;
unsigned data_len;
IrTypeKind element_type;
unsigned error_code;
unsigned external_index;
bool external_call;
IrBinaryOp binary_op;
IrCompareOp compare_op;
IrValue **args;
size_t arg_len;
size_t arg_cap;
IrValue *index;
IrValue *left;
IrValue *right;
int line;
int column;
};
typedef enum {
IR_INSTR_LOCAL_SET,
IR_INSTR_INDEX_STORE,
IR_INSTR_ARRAY_FILL,
IR_INSTR_FIELD_STORE,
IR_INSTR_WORLD_WRITE,
IR_INSTR_RAISE,
IR_INSTR_EXPR,
IR_INSTR_RETURN,
IR_INSTR_IF,
IR_INSTR_WHILE,
IR_INSTR_BREAK,
IR_INSTR_CONTINUE, IR_INSTR_KIND_LAST = IR_INSTR_CONTINUE
} IrInstrKind;
typedef struct {
size_t continue_target;
size_t *break_patches;
size_t break_len;
size_t break_cap;
} ZDirectLoopFrame;
bool z_direct_loop_frame_add_break(Z_INOUT ZDirectLoopFrame *frame, size_t patch_offset);
// Describes a maximal run of consecutive constant-index, constant-value
// IR_INSTR_INDEX_STORE instructions over a single array local that writes the
// elements 0,1,2,...,count-1 with one identical scalar literal. Direct
// backends fold such runs into a single fill loop instead of emitting one
// store per element, which is the dominant source of emitted-code density for
// zero-initialized fixed arrays.
typedef struct {
unsigned array_index;
size_t count; // number of stores folded (run length)
unsigned long long fill_value;
IrTypeKind element_type;
} ZDirectFillRun;
struct IrInstr {
IrInstrKind kind;
unsigned local_index;
unsigned array_index;
unsigned field_offset;
unsigned error_code;
IrValue *value;
IrValue *index;
IrInstr *then_instrs;
size_t then_len;
size_t then_cap;
IrInstr *else_instrs;
size_t else_len;
size_t else_cap;
int line;
int column;
};
typedef struct {
char *name;
IrTypeKind type;
IrTypeKind element_type;
unsigned index;
unsigned frame_offset;
unsigned array_len;
unsigned field_offset;
unsigned byte_size;
unsigned alignment;
bool is_param;
bool is_array;
bool is_record;
bool is_record_ref;
bool is_mutable;
unsigned ref_byte_size;
char *shape_name;
int line;
int column;
} IrLocal;
typedef struct {
unsigned offset;
unsigned len;
unsigned char *bytes;
} IrDataSegment;
typedef struct {
char *name;
char *stable_id;
char *world_param_name;
char **generic_param_names;
char **generic_arg_types;
size_t generic_binding_len;
IrTypeKind return_type;
IrTypeKind value_return_type;
IrTypeKind return_element_type;
IrLocal *locals;
size_t local_len;
size_t local_cap;
size_t param_count;
IrInstr *instrs;
size_t instr_len;
size_t instr_cap;
size_t frame_bytes;
bool is_exported;
bool raises;
int line;
int column;
} IrFunction;
// Detects a fill run starting at instrs[start]. Returns true and fills *out
// when at least min_run stores form a 0..count-1 constant fill of one array
// local with a single literal value. The caller emits a fill loop and
// advances past the run.
bool z_direct_detect_fill_run(Z_IN const IrFunction *fun, Z_IN const IrInstr *instrs, size_t len, size_t start, size_t min_run, Z_OUT ZDirectFillRun *out);
bool z_direct_fill_run_from_instr(Z_IN const IrFunction *fun, Z_IN const IrInstr *instr, Z_OUT ZDirectFillRun *out);
typedef struct {
char *symbol;
char *import_header;
char *import_resolved_header;
IrTypeKind return_type;
IrTypeKind *param_types;
size_t param_len;
size_t param_cap;
} IrExternalFunction;
typedef struct {
Program program;
const ZTargetInfo *target;
IrFunction *functions;
size_t function_len;
size_t function_cap;
IrExternalFunction *external_functions;
size_t external_function_len;
size_t external_function_cap;
IrDataSegment *data_segments;
size_t data_segment_len;
size_t data_segment_cap;
size_t readonly_data_bytes;
bool mir_valid;
char mir_expected[128];
char mir_actual[128];
char mir_message[256];
char mir_help[256];
char *mir_path;
char *package_root;
const unsigned char *mir_binary_storage;
size_t mir_binary_storage_len;
bool mir_binary_storage_mapped;
bool mir_binary_storage_borrowed;
int mir_binary_storage_fd;
ZBackendBlocker backend_blocker;
int mir_line;
int mir_column;
size_t mir_bytes;
size_t direct_function_count;
size_t direct_export_count;
size_t direct_stack_bytes;
size_t direct_max_frame_bytes;
size_t direct_readonly_data_bytes;
size_t direct_allocator_helper_count;
size_t direct_buffer_helper_count;
size_t direct_runtime_helper_count;
size_t direct_host_runtime_import_count;
size_t direct_http_runtime_import_count;
size_t direct_c_import_call_count;
size_t direct_c_import_symbol_count;
char **active_local_names;
size_t active_local_len;
size_t active_local_cap;
size_t const_lower_depth;
} IrProgram;
typedef struct {
char *name;
char *version;
char *path;
char *resolved_manifest;
char *resolved_name;
char *resolved_version;
char *targets_json;
char *status;
unsigned long long fingerprint;
bool direct;
} SourceDependency;
typedef struct {
char *source_file;
char *source;
char *package_root;
char *manifest_path;
char *package_name;
char *package_version;
char *lockfile_path;
char *program_graph_hash;
char *program_graph_module_identity;
unsigned long long manifest_hash;
unsigned long long dependency_graph_hash;
unsigned long long lockfile_hash;
char **source_files;
char **imports;
char **module_names;
char **module_paths;
char **import_from;
char **import_to;
char **import_paths;
char **import_source_paths;
int *import_lines;
int *import_columns;
int *import_lengths;
char **symbol_names;
char **symbol_modules;
char **symbol_kinds;
char **source_line_paths;
int *source_line_numbers;
SourceDependency *dependencies;
bool *symbol_public;
bool canonical_text_source;
size_t source_file_count;
size_t import_count;
size_t module_count;
size_t import_edge_count;
size_t symbol_count;
size_t source_line_count;
size_t dependency_count;
long long resolve_ms, parse_ms, interface_ms, check_ms;
long long lower_ms, codegen_ms, object_ms, link_ms;
long long graph_load_ms, graph_stdlib_merge_ms, graph_readiness_check_ms;
long long graph_stdlib_reference_scan_ms, graph_stdlib_cleanup_ms, graph_stdlib_module_load_ms;
long long graph_stdlib_node_merge_ms, graph_stdlib_edge_merge_ms, graph_stdlib_finalize_ms, graph_stdlib_prune_ms, graph_stdlib_identity_ms;
long long graph_mir_cache_load_ms, graph_mir_lower_ms, graph_mir_cache_write_ms, graph_mir_cache_reload_ms;
size_t graph_stdlib_modules_merged, graph_stdlib_nodes_merged, graph_stdlib_edges_merged;
bool graph_stdlib_merge_cache_hit, graph_stdlib_merge_cache_stored;
size_t lowered_ir_bytes;
char *mapped_mir_cache_path;
size_t mapped_mir_cache_bytes;
bool mapped_mir_cache_hit, mapped_mir_cache_written;
bool mapped_mir_memory_mapped, mapped_mir_borrowed_storage;
bool mapped_mir_codegen_immediate, mapped_mir_program_reconstructed;
size_t direct_function_count;
size_t direct_export_count;
size_t direct_stack_bytes;
size_t direct_max_frame_bytes;
size_t direct_readonly_data_bytes;
size_t direct_allocator_helper_count;
size_t direct_buffer_helper_count;
size_t direct_runtime_helper_count;
size_t direct_host_runtime_import_count;
size_t direct_http_runtime_import_count;
size_t direct_c_import_call_count;
size_t direct_c_import_symbol_count;
char **direct_c_import_headers;
char **direct_c_import_resolved_headers;
size_t direct_c_import_header_count;
bool parse_cache_hit;
bool interface_cache_hit;
bool check_cache_hit;
bool specialization_cache_hit;
bool emitted_object_cache_hit;
bool allow_missing_main;
} SourceInput;
typedef struct {
char *name;
char *version;
char *path;
char *targets_json;
} ZManifestDependency;
typedef struct {
char *name;
char *headers_json;
char *include_json;
char *lib_json;
char *link_json;
char *mode;
char *pkg_config;
} ZManifestCLib;
typedef struct {
char *package_name;
char *package_version;
char *main_path;
char *graph_path;
char *kind;
bool repository_graph_compiler_input_present;
bool repository_graph_compiler_input;
ZManifestDependency *dependencies;
ZManifestCLib *c_libs;
size_t dependency_count;
size_t c_lib_count;
} ZManifest;
struct ZTargetInfo {
const char *name;
const char *aliases;
const char *os;
const char *arch;
const char *abi;
const char *libc;
const char *libc_mode;
const char *exe_suffix;
const char *zig_target;
const char *object_format;
const char *linker;
const char *capabilities;
};
typedef enum {
Z_DIRECT_BACKEND_NONE,
Z_DIRECT_BACKEND_ELF64,
Z_DIRECT_BACKEND_ELF_AARCH64,
Z_DIRECT_BACKEND_MACHO64,
Z_DIRECT_BACKEND_MACHO_X64,
Z_DIRECT_BACKEND_COFF_X64,
Z_DIRECT_BACKEND_COFF_AARCH64
} ZDirectBackend;
typedef enum {
Z_DIRECT_TRAP_INDEX_BOUNDS = 0,
Z_DIRECT_TRAP_VALUE_BOUNDS,
Z_DIRECT_TRAP_WRITE_FAILED,
Z_DIRECT_TRAP_KIND_COUNT
} ZDirectTrapKind;
typedef struct {
unsigned offsets[Z_DIRECT_TRAP_KIND_COUNT];
unsigned lens[Z_DIRECT_TRAP_KIND_COUNT];
} ZDirectTrapMessages;
typedef struct {
size_t *items;
size_t len;
size_t cap;
} ZDirectTrapBranchList;
Z_RET_BORROWED const char *z_direct_trap_message(ZDirectTrapKind kind);
bool z_direct_trap_branches_record(Z_INOUT ZDirectTrapBranchList *list, size_t patch_offset);
void z_direct_trap_branches_free(Z_INOUT ZDirectTrapBranchList *lists, size_t count);
typedef enum {
Z_BACKEND_FAMILY_UNKNOWN,
Z_BACKEND_FAMILY_DIRECT,
Z_BACKEND_FAMILY_LLVM
} ZBackendFamily;
typedef struct {
const char *driver_kind;
const char *selection_source;
const char *compiler;
const char *target_triple;
const char *linker_flavor;
const char *libc_mode;
const char *sysroot_env;
const char *sysroot_path;
const char *sysroot_status;
bool requires_sysroot;
bool uses_target_flag;
bool uses_zig_cache;
bool strip_artifact;
} ZToolchainPlan;
typedef struct {
const char *driver_kind;
const char *selection_source;
const char *compiler;
const char *target_triple;
const char *status;
const char *reason;
bool target_supported;
bool tool_available;
bool native_executable;
} ZLlvmToolchainPlan;
typedef struct {
const char *selected_emitter;
const char *artifact_kind;
const char *linker_flavor;
const char *artifact_libc_mode;
const char *sysroot_status;
bool direct_selected;
bool target_requires_sysroot;
bool artifact_requires_sysroot;
} ZDirectReleaseTargetFacts;
typedef struct {
ZDirectBackend backend;
const char *selected_emitter;
const char *artifact_path;
const char *linker_flavor;
bool active;
} ZDirectObjectBackendFacts;
typedef struct {
ZDirectBackend backend;
const char *artifact_path;
const char *unsupported_reason;
bool available;
} ZDirectObjectTargetFacts;
typedef struct {
ZDirectBackend backend;
const char *cache_key;
const char *blocker;
bool supported;
} ZDirectRuntimeObjectFacts;
typedef struct {
ZDirectBackend backend;
const char *default_request_name;
const char *artifact_path;
bool requested;
bool requested_name;
bool request_supported;
} ZDirectExecutableTargetFacts;
typedef struct {
size_t hits;
size_t misses;
size_t entries;
} ZMetaCacheStats;
void zbuf_init(Z_OUT ZBuf *buf);
void zbuf_append(Z_INOUT ZBuf *buf, Z_IN const char *text);
void zbuf_append_char(Z_INOUT ZBuf *buf, char ch);
void zbuf_appendf(Z_INOUT ZBuf *buf, Z_IN const char *fmt, ...);
void zbuf_free(Z_INOUT ZBuf *buf);
Z_RET_OWNED void *z_checked_malloc(size_t size);
Z_RET_OWNED void *z_checked_calloc(size_t count, size_t item_size);
Z_RET_OWNED void *z_checked_reallocarray(Z_SINK Z_OPTIONAL void *ptr, size_t count, size_t item_size);
size_t z_grow_capacity(size_t current, size_t required, size_t initial);
Z_RET_OWNED char *z_strdup(Z_IN const char *text);
Z_RET_OWNED char *z_strndup(Z_IN const char *text, size_t len);
Z_RET_OWNED Z_RET_OPTIONAL char *z_read_file(Z_IN const char *path, Z_OUT ZDiag *diag);
bool z_read_binary_file(Z_IN const char *path, Z_OUT unsigned char **out, Z_OUT size_t *out_len, Z_OUT ZDiag *diag);
bool z_read_file_prefix(Z_IN const char *path, Z_OUT void *bytes, size_t len, Z_OUT size_t *out_read, Z_OUT ZDiag *diag);
bool z_write_file(Z_IN const char *path, Z_IN const char *text, Z_OUT ZDiag *diag);
bool z_write_binary_file(Z_IN const char *path, Z_IN const unsigned char *data, size_t len, Z_OUT ZDiag *diag);
bool z_map_source_diag(Z_IN const SourceInput *input, Z_INOUT ZDiag *diag);
void z_diag_set_path_copy(Z_INOUT ZDiag *diag, Z_OPTIONAL Z_IN const char *path);
void z_free_source(Z_INOUT SourceInput *input);
bool z_parse_manifest_json(Z_IN const char *manifest, Z_OUT ZManifest *out, Z_OUT ZDiag *diag);
bool z_resolve_package_metadata(Z_IN const char *manifest_path, Z_IN const char *manifest, Z_IN const ZManifest *parsed_manifest, Z_OUT SourceInput *out, Z_OUT ZDiag *diag);
Z_RET_OWNED Z_RET_OPTIONAL char *z_manifest_path_for_input(Z_IN const char *input_path);
Z_RET_OWNED Z_RET_OPTIONAL char *z_manifest_path_for_root(Z_IN const char *root);
bool z_resolve_manifest_graph_artifact_path(Z_IN const char *input_path, Z_OUT char **out_artifact_path, Z_OUT bool *handled, bool require_graph, Z_OUT ZDiag *diag);
void z_free_manifest(Z_INOUT ZManifest *manifest);
Z_RET_OWNED char *z_default_out_path(Z_IN const char *source_file);
ZToolchainPlan z_plan_toolchain(Z_IN const char *cc, Z_IN const char *profile, Z_IN const ZTargetInfo *target);
ZToolchainPlan z_direct_backend_toolchain_plan(ZDirectBackend backend, Z_IN const ZTargetInfo *target);
bool z_direct_backend_toolchain_plan_for_emit_kind(Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *requested_backend, Z_OUT ZToolchainPlan *out);
size_t z_direct_target_stack_bytes(Z_IN const ZTargetInfo *target, Z_IN const IrProgram *program);
size_t z_direct_target_max_frame_bytes(Z_IN const ZTargetInfo *target, Z_IN const IrProgram *program);
bool z_toolchain_compiler_override_safe(Z_IN const char *compiler);
bool z_toolchain_compile_c_object(Z_IN const ZToolchainPlan *plan, Z_IN const char *profile, Z_IN const ZTargetInfo *target, Z_IN const char *c_file, Z_IN const char *object_file, Z_IN const char *include_dir, Z_IN const char *extra_c_flags);
bool z_toolchain_link_objects(Z_IN const ZToolchainPlan *plan, Z_IN const ZTargetInfo *target, Z_IN const char *const *object_files, size_t object_count, Z_IN const char *exe_file, Z_IN const char *pre_link_flags, Z_IN const char *post_object_flags);
bool z_run_cc(Z_IN const char *c_file, Z_IN const char *exe_file, Z_IN const char *cc, Z_IN const char *profile, Z_IN const ZTargetInfo *target);
void z_free_program(Z_INOUT Program *program);
bool z_check_program(Z_IN const Program *program, Z_OUT ZDiag *diag);
bool z_check_program_library(Z_IN const Program *program, Z_OUT ZDiag *diag);
#define Z_DIRECT_FRAME_LOCAL_LIMIT_BYTES 131072u
bool z_function_frame_locals_within_limit(Z_IN const Program *program, Z_IN const Function *fun, size_t limit, Z_OUT size_t *out_total, Z_OUT const Stmt **out_over);
void z_append_call_resolution_facts_json(Z_INOUT ZBuf *buf, Z_IN const SourceInput *input, Z_IN const Program *program);
void z_set_check_target(Z_OPTIONAL Z_IN const ZTargetInfo *target);
ZMetaCacheStats z_meta_cache_stats(void);
void z_backend_blocker_set(Z_OUT ZBackendBlocker *blocker, Z_IN const char *target, Z_IN const char *object_format, Z_IN const char *backend, Z_IN const char *stage, Z_IN const char *unsupported_feature);
void z_diag_set_backend_blocker(Z_INOUT ZDiag *diag, Z_IN const ZBackendBlocker *blocker);
IrProgram z_lower_program(Z_IN const Program *program);
IrProgram z_lower_program_with_source(Z_IN const Program *program, Z_IN const SourceInput *input, Z_IN const ZTargetInfo *target);
IrProgram z_lower_program_graph_with_source(Z_IN const ZProgramGraph *graph, Z_IN const SourceInput *input, Z_IN const ZTargetInfo *target);
void z_free_ir_program(Z_INOUT IrProgram *program);
bool z_emit_elf64_object_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_elf64_exe_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_elf_aarch64_object_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_elf_aarch64_exe_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
size_t z_elf_aarch64_stack_bytes_from_ir(Z_IN const IrProgram *program);
size_t z_elf_aarch64_max_frame_bytes_from_ir(Z_IN const IrProgram *program);
size_t z_macho64_stack_bytes_from_ir(Z_IN const IrProgram *program);
size_t z_macho64_max_frame_bytes_from_ir(Z_IN const IrProgram *program);
bool z_emit_macho64_object_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_macho64_exe_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_macho_x64_object_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_macho_x64_exe_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_coff_x64_object_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_coff_x64_exe_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_coff_aarch64_object_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_coff_aarch64_exe_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_direct_object_from_ir(ZDirectBackend backend, Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_direct_executable_from_ir(ZDirectBackend backend, Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
bool z_emit_llvm_ir_from_ir(Z_IN const IrProgram *program, Z_INOUT ZBuf *out, Z_OUT ZDiag *diag);
Z_RET_BORROWED const char *z_host_target(void);
size_t z_target_count(void);
Z_RET_BORROWED Z_RET_OPTIONAL const ZTargetInfo *z_target_at(size_t index);
Z_RET_BORROWED Z_RET_OPTIONAL const ZTargetInfo *z_find_target(Z_IN const char *target);
bool z_is_known_target(Z_IN const char *target);
bool z_target_is_host(Z_IN const ZTargetInfo *target);
bool z_target_has_capability(Z_IN const ZTargetInfo *target, Z_IN const char *capability);
Z_RET_BORROWED const char *z_target_libc_mode(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_target_sysroot_env_name(Z_IN const ZTargetInfo *target);
bool z_target_requires_sysroot(Z_IN const ZTargetInfo *target);
ZDirectBackend z_direct_object_backend(Z_IN const ZTargetInfo *target);
ZDirectBackend z_direct_exe_backend(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_direct_backend_object_emitter(ZDirectBackend backend);
Z_RET_BORROWED const char *z_direct_backend_exe_emitter(ZDirectBackend backend);
ZDirectBackend z_direct_backend_from_emitter(Z_IN const char *emitter);
Z_RET_BORROWED const char *z_direct_backend_linker_flavor(ZDirectBackend backend);
Z_RET_BORROWED const char *z_direct_backend_artifact_path(ZDirectBackend backend, bool executable);
Z_RET_BORROWED const char *z_direct_backend_runtime_object_cache_key(ZDirectBackend backend);
size_t z_direct_backend_symbol_overhead(ZDirectBackend backend, bool has_readonly_data);
bool z_direct_backend_supports_runtime_object(ZDirectBackend backend);
Z_RET_BORROWED Z_RET_OPTIONAL const char *z_direct_runtime_link_blocker(Z_IN const ZTargetInfo *target, bool needs_http_runtime);
bool z_direct_backend_emitter_is_executable(Z_IN const char *emitter);
bool z_direct_backend_is_request_name(Z_IN const char *requested_backend);
bool z_direct_requested_backend_matches(Z_IN const char *requested_backend, ZDirectBackend backend);
ZBackendFamily z_backend_family_from_request(Z_IN const char *requested_backend, Z_IN const char *emit_kind);
Z_RET_BORROWED const char *z_backend_family_name(ZBackendFamily family);
bool z_backend_request_is_known(Z_IN const char *requested_backend, Z_IN const char *emit_kind);
bool z_backend_request_is_llvm(Z_IN const char *requested_backend, Z_IN const char *emit_kind);
Z_RET_BORROWED Z_RET_OPTIONAL const char *z_backend_direct_request_name(Z_IN const char *requested_backend);
Z_RET_BORROWED const char *z_backend_request_expected(void);
void z_backend_init_unknown_diag(Z_OUT ZDiag *diag, Z_IN const char *requested_backend, Z_IN const char *path);
void z_backend_init_llvm_unavailable_diag(Z_OUT ZDiag *diag, Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *path);
Z_RET_BORROWED const char *z_llvm_target_triple(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_llvm_optimization_level(Z_IN const char *profile);
ZLlvmToolchainPlan z_llvm_toolchain_plan(Z_IN const ZTargetInfo *target);
ZToolchainPlan z_llvm_c_toolchain_plan(Z_IN const ZTargetInfo *target);
bool z_llvm_native_executable_ready(Z_IN const ZTargetInfo *target, Z_IN const char *path, Z_OUT ZDiag *diag);
bool z_llvm_link_executable(Z_IN const char *llvm_file, Z_IN const char *runtime_object_file, Z_IN const char *exe_file, Z_IN const ZToolchainPlan *plan, Z_IN const ZTargetInfo *target, Z_IN const char *profile, bool links_zero_runtime, Z_OUT ZDiag *diag);
Z_RET_BORROWED const char *z_llvm_backend_lifecycle_json_text(void);
void z_append_llvm_backend_lifecycle_json(Z_INOUT ZBuf *buf);
void z_append_llvm_backend_lifecycle_field_json(Z_INOUT ZBuf *buf);
void z_append_doctor_llvm_toolchain_json(Z_INOUT ZBuf *buf, Z_IN const ZTargetInfo *host_target, Z_IN const ZLlvmToolchainPlan *plan);
void z_append_llvm_toolchain_plan_json(Z_INOUT ZBuf *buf, Z_IN const ZTargetInfo *target);
void z_append_llvm_target_backend_json(Z_INOUT ZBuf *buf, Z_IN const ZTargetInfo *target);
void z_append_llvm_ir_backend_json(Z_INOUT ZBuf *buf, Z_IN const SourceInput *input, Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind);
void z_append_llvm_native_backend_json(Z_INOUT ZBuf *buf, Z_IN const SourceInput *input, Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind);
Z_RET_BORROWED const char *z_direct_backend_status(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_direct_object_emitter(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_direct_exe_emitter(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_direct_backend_reason(Z_IN const ZTargetInfo *target);
ZDirectBackend z_direct_backend_for_emit_kind(Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *requested_backend);
Z_RET_BORROWED const char *z_direct_backend_emitter_for_emit_kind(Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *requested_backend);
Z_RET_BORROWED const char *z_direct_backend_name_for_emit_kind(Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *requested_backend);
ZDirectReleaseTargetFacts z_direct_release_target_facts(Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *requested_backend, Z_IN const ZToolchainPlan *fallback_plan, bool linked_executable);
ZDirectObjectBackendFacts z_direct_object_backend_facts(Z_IN const ZTargetInfo *target, Z_IN const char *emit_kind, Z_IN const char *requested_backend, bool has_runtime_imports);
ZDirectObjectTargetFacts z_direct_object_target_facts(Z_IN const ZTargetInfo *target);
ZDirectRuntimeObjectFacts z_direct_runtime_object_facts(Z_IN const ZTargetInfo *target, bool needs_http_runtime);
ZDirectExecutableTargetFacts z_direct_executable_target_facts(Z_IN const ZTargetInfo *target, Z_IN const char *requested_backend);
Z_RET_BORROWED const char *z_direct_backend_expected(Z_IN const ZTargetInfo *target);
Z_RET_BORROWED const char *z_direct_backend_help(Z_IN const ZTargetInfo *target);
void z_append_http_runtime_json(Z_INOUT ZBuf *buf, Z_IN const ZTargetInfo *target);
void z_append_targets_json(Z_INOUT ZBuf *buf);
void z_append_target_names_json(Z_INOUT ZBuf *buf);
#endif