116 lines
2.9 KiB
Rust
116 lines
2.9 KiB
Rust
#![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<AstNode>,
|
|
}
|
|
|
|
#[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;
|