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}