_selfhost_compile_let.nx source
↩ module page · 72 lines · 1883 B
1// Compile 'func main() -> i64 { let x = 7 ; return x + 1 }' via pipeline.
2// Writes asm to stdout. Expected runtime exit: 8.
3
4import "syscalls.nx"
5import "nx_nlex.nx"
6import "nx_nparse.nx"
7import "nx_nir.nx"
8import "nx_nx86.nx"
9
10func main() -> i64 {
11 let src: *u8 = sys_mmap(96)
12 src[0] = 102 as u8
13 src[1] = 117 as u8
14 src[2] = 110 as u8
15 src[3] = 99 as u8
16 src[4] = 32 as u8
17 src[5] = 109 as u8
18 src[6] = 97 as u8
19 src[7] = 105 as u8
20 src[8] = 110 as u8
21 src[9] = 40 as u8
22 src[10] = 41 as u8
23 src[11] = 32 as u8
24 src[12] = 45 as u8
25 src[13] = 62 as u8
26 src[14] = 32 as u8
27 src[15] = 105 as u8
28 src[16] = 54 as u8
29 src[17] = 52 as u8
30 src[18] = 32 as u8
31 src[19] = 123 as u8
32 src[20] = 32 as u8
33 src[21] = 108 as u8 // l
34 src[22] = 101 as u8
35 src[23] = 116 as u8
36 src[24] = 32 as u8
37 src[25] = 120 as u8 // x
38 src[26] = 32 as u8
39 src[27] = 61 as u8 // =
40 src[28] = 32 as u8
41 src[29] = 55 as u8 // 7
42 src[30] = 32 as u8
43 src[31] = 59 as u8 // ;
44 src[32] = 32 as u8
45 src[33] = 114 as u8
46 src[34] = 101 as u8
47 src[35] = 116 as u8
48 src[36] = 117 as u8
49 src[37] = 114 as u8
50 src[38] = 110 as u8
51 src[39] = 32 as u8
52 src[40] = 120 as u8 // x
53 src[41] = 32 as u8
54 src[42] = 43 as u8 // +
55 src[43] = 32 as u8
56 src[44] = 49 as u8 // 1
57 src[45] = 32 as u8
58 src[46] = 125 as u8
59
60 let lex: *NxNLexer = nx_nlex_new(src, 47, 96)
61 nx_nlex_run(lex)
62 let parser: *NxNParser = nx_nparse_new(lex, 64)
63 let func_idx: i64 = nx_nparse_run(parser)
64 if func_idx < 0 { return 1 }
65 let ir: *NxIrFunc = nx_nir_lower_func(parser, func_idx, 64)
66 if ir == (0 as *NxIrFunc) { return 2 }
67
68 let asm: *NxAsmBuf = nx_asm_new(4096)
69 nx_nx86_emit_func(asm, src, ir)
70 sys_write(1, asm.buf, asm.len)
71 return 0
72}