#![allow(non_camel_case_types, dead_code, non_upper_case_globals, improper_ctypes)] // Auto-generated Rust bindings from assembly source unsafe extern "C" { pub unsafe fn parse_func(ast: *mut Ast) -> u64; pub unsafe fn parse_args(ast: *mut Ast) -> (*const Argument, usize); pub unsafe fn parse_primary_expr(ast: *mut Ast) -> u64; pub unsafe fn parse_binary_expr(ast: *mut Ast, precedence: u8) -> u64; pub unsafe fn parse_expr(ast: *mut Ast) -> u64; pub unsafe fn parse_statement(ast: *mut Ast) -> u64; pub unsafe fn parse_block(ast: *mut Ast) -> u64; pub unsafe fn parse_type(ast: *mut Ast) -> Type; } pub const AST_FUNCTION: u32 = 1; pub const AST_BLOCK: u32 = 2; pub const AST_VARIABLE: u32 = 3; pub const AST_NUMBER: u32 = 4; pub const AST_BINARY_OP: u32 = 5; pub const AST_RETURN_STATEMENT: u32 = 6; pub const TYPE_VOID: u32 = 1; pub const TYPE_BOOL: u32 = 2; pub const TYPE_I32: u32 = 3; pub const TYPE_U32: u32 = 4; pub const TYPE_STR: u32 = 5; pub const TOKEN_EOF: u32 = 0; pub const TOKEN_LET: u32 = 1; pub const TOKEN_IF: u32 = 2; pub const TOKEN_ELSE: u32 = 3; pub const TOKEN_FN: u32 = 4; pub const TOKEN_RETURN: u32 = 5; pub const TOKEN_LOOP: u32 = 6; pub const TOKEN_BREAK: u32 = 7; pub const TOKEN_CONTINUE: u32 = 8; pub const TOKEN_TRUE: u32 = 9; pub const TOKEN_FALSE: u32 = 10; pub const TOKEN_BOOL: u32 = 11; pub const TOKEN_ARROW: u32 = 12; pub const TOKEN_I32: u32 = 13; pub const TOKEN_U32: u32 = 14; pub const TOKEN_EQUALS: u32 = 15; pub const TOKEN_PLUS: u32 = 16; pub const TOKEN_MINUS: u32 = 17; pub const TOKEN_RPARENS: u32 = 18; pub const TOKEN_LPARENS: u32 = 19; pub const TOKEN_RBRACE: u32 = 20; pub const TOKEN_LBRACE: u32 = 21; pub const TOKEN_COLON: u32 = 22; pub const TOKEN_SEMI: u32 = 23; pub const TOKEN_COMMA: u32 = 24; pub const TOKEN_PIPE: u32 = 25; pub const TOKEN_AMP: u32 = 26; pub const TOKEN_EQEQ: u32 = 27; pub const TOKEN_LBRACKET: u32 = 28; pub const TOKEN_RBRACKET: u32 = 29; pub const TOKEN_VOID: u32 = 30; pub const TOKEN_IDENT: u32 = 31; pub const TOKEN_NUMBER: u32 = 32; pub const TOKEN_STRING: u32 = 33; pub const TOKEN_COMMENT: u32 = 34; #[repr(C)] #[derive(Debug)] pub struct Ast { pub nodes: Vec, } #[repr(C)] #[derive(Debug)] pub struct AstNode { pub kind: u8, pub data: *const (), } #[repr(C)] #[derive(Debug)] pub struct Argument { pub name: *const u8, pub name_len: usize, pub arg_type: Type, } #[repr(C)] #[derive(Debug)] pub struct Type { pub kind: u8, } #[repr(C)] #[derive(Debug)] pub struct AstFunction { pub name: *const u8, pub name_len: usize, pub args: *const Argument, pub args_len: usize, pub return_type: Type, pub body: u64, } #[repr(C)] #[derive(Debug)] pub struct BinaryExpr { pub left: u64, pub operator: u8, pub right: u64, } #[repr(C)] #[derive(Debug)] pub struct Block { pub statements: *const u64, pub statements_len: usize, } use super::vec::Vec;