import "libc.hff"; import "option.hff"; /// Macros defmacro assert { (ex, s) [ (do if not (ex) { fprintf(stderr, "%s:%d: assertion failed: ", #FILE, #LINE); fprintf(stderr, "`%s'", (s)); fprintf(stderr, "\n"); abort(); } ) ] } /// Types struct Type; struct Decl; struct Expr; struct Loc { fileid u16, idx isize, col int, line int, } #[lax] enum TokT { kw_and, kw_as, kw_break, kw_case, kw_const, kw_continue, kw_def, kw_defmacro, kw_do, kw_else, kw_enum, kw_extern, kw_fn, kw_for, kw_if, kw_import, kw_let, kw_not, kw_or, kw_return, kw_sizeof, kw_static, kw_struct, kw_switch, kw_typedef, kw_typeof, kw_union, kw_while, } struct Tok { t int, ty *const Type, u union { int i64, uint u64, float f64, bool bool, str [#]const u8, }, } struct Decl { } struct Parser { fp *FILE, curfile [#]const u8, tokloc Loc, curloc Loc, eof bool, peekchr Option, } // parse.cff extern fn parse(P *Parser, path *const u8) [#]Decl; // util.cff extern fn xmalloc(n usize) *void; extern fn xrealloc(p *void, n usize) *void;