code wiki / (root) / _selfhost_compile_let.nx

_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}