code wiki / (root) / parse_test.nx

parse_test.nx source

↩ module page · 33 lines · 1274 B

1// parse_test.nx -- self-test for parse.nx. 2// 3// Walk a synthetic token stream simulating `func f() { return 42 }` 4// and verify that parse_module runs to completion and produces one 5// function in the module. 6 7import "types.nx" 8import "lex_kinds.nx" 9import "ir.nx" 10import "parse.nx" 11 12func main() -> i64 { 13 let toks_raw: *u8 = sys_mmap(16 * TOK_BYTES + TOK_BYTES) 14 let toks: *Tok = toks_raw as *Tok 15 16 // Manually populate 6 tokens + EOF: 17 // 0: FUNC 1: IDENT("f") 2: '(' 3: ')' 4: '{' 18 // 5: RETURN 6: INT 42 7: '}' 8: EOF 19 let t0: *Tok = tok_at(toks, 0); t0.kind = TK_FUNC 20 let t1: *Tok = tok_at(toks, 1); t1.kind = TK_IDENT 21 let n1: *u8 = tok_text_ptr(t1); n1[0] = 0x66; n1[1] = 0 // "f" 22 let t2: *Tok = tok_at(toks, 2); t2.kind = TK_LPAREN 23 let t3: *Tok = tok_at(toks, 3); t3.kind = TK_RPAREN 24 let t4: *Tok = tok_at(toks, 4); t4.kind = TK_LBRACE 25 let t5: *Tok = tok_at(toks, 5); t5.kind = TK_RETURN 26 let t6: *Tok = tok_at(toks, 6); t6.kind = TK_INT; t6.int_val = 42 27 let t7: *Tok = tok_at(toks, 7); t7.kind = TK_RBRACE 28 let t8: *Tok = tok_at(toks, 8); t8.kind = TK_EOF 29 30 let m: *Module = parse_module(toks, 0 as *Module) 31 if m == (0 as *Module) { return 1 } 32 return 0 33}