code wiki / (root) / _selfhost_compile_binop.nx

_selfhost_compile_binop.nx source

↩ module page · 64 lines · 1778 B

1// Compile 'func main() -> i64 { return 2 + 3 * 4 }' via NishiLang pipeline. 2// Writes asm to stdout. Expected runtime exit: 14. 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(64) 12 src[0] = 102 as u8 // f 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 // m 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 // i 28 src[16] = 54 as u8 // 6 29 src[17] = 52 as u8 // 4 30 src[18] = 32 as u8 31 src[19] = 123 as u8 // { 32 src[20] = 32 as u8 33 src[21] = 114 as u8 // r 34 src[22] = 101 as u8 35 src[23] = 116 as u8 36 src[24] = 117 as u8 37 src[25] = 114 as u8 38 src[26] = 110 as u8 39 src[27] = 32 as u8 40 src[28] = 50 as u8 // 2 41 src[29] = 32 as u8 42 src[30] = 43 as u8 // + 43 src[31] = 32 as u8 44 src[32] = 51 as u8 // 3 45 src[33] = 32 as u8 46 src[34] = 42 as u8 // * 47 src[35] = 32 as u8 48 src[36] = 52 as u8 // 4 49 src[37] = 32 as u8 50 src[38] = 125 as u8 // } 51 52 let lex: *NxNLexer = nx_nlex_new(src, 39, 64) 53 nx_nlex_run(lex) 54 let parser: *NxNParser = nx_nparse_new(lex, 64) 55 let func_idx: i64 = nx_nparse_run(parser) 56 if func_idx < 0 { return 1 } 57 let ir: *NxIrFunc = nx_nir_lower_func(parser, func_idx, 64) 58 if ir == (0 as *NxIrFunc) { return 2 } 59 60 let asm: *NxAsmBuf = nx_asm_new(4096) 61 nx_nx86_emit_func(asm, src, ir) 62 sys_write(1, asm.buf, asm.len) 63 return 0 64}