code wiki / (root) / nx_nir_test.nx

nx_nir_test.nx source

↩ module page · 71 lines · 1863 B

1// Test full pipeline: lex -> parse -> IR build, all NishiLang. 2 3import "syscalls.nx" 4import "nx_nlex.nx" 5import "nx_nparse.nx" 6import "nx_nir.nx" 7 8func main() -> i64 { 9 let src: *u8 = sys_mmap(64) 10 src[0] = 102 as u8 // f 11 src[1] = 117 as u8 // u 12 src[2] = 110 as u8 // n 13 src[3] = 99 as u8 // c 14 src[4] = 32 as u8 15 src[5] = 109 as u8 16 src[6] = 97 as u8 17 src[7] = 105 as u8 18 src[8] = 110 as u8 19 src[9] = 40 as u8 20 src[10] = 41 as u8 21 src[11] = 32 as u8 22 src[12] = 45 as u8 23 src[13] = 62 as u8 24 src[14] = 32 as u8 25 src[15] = 105 as u8 26 src[16] = 54 as u8 27 src[17] = 52 as u8 28 src[18] = 32 as u8 29 src[19] = 123 as u8 30 src[20] = 32 as u8 31 src[21] = 114 as u8 32 src[22] = 101 as u8 33 src[23] = 116 as u8 34 src[24] = 117 as u8 35 src[25] = 114 as u8 36 src[26] = 110 as u8 37 src[27] = 32 as u8 38 src[28] = 52 as u8 39 src[29] = 50 as u8 40 src[30] = 32 as u8 41 src[31] = 125 as u8 42 43 let lex: *NxNLexer = nx_nlex_new(src, 32, 32) 44 if nx_nlex_run(lex) != 11 { return 1 } 45 46 let parser: *NxNParser = nx_nparse_new(lex, 32) 47 let func_idx: i64 = nx_nparse_run(parser) 48 if func_idx < 0 { return 2 } 49 50 let ir_func: *NxIrFunc = nx_nir_lower_func(parser, func_idx, 32) 51 if ir_func == (0 as *NxIrFunc) { return 3 } 52 53 // Expected IR: 2 instructions 54 // v0 = CONST_I64 42 55 // v1 = RETURN v0 56 if ir_func.n_instrs != 2 { return 4 } 57 58 let i0: *NxInstr = nx_nir_instr_at(ir_func, 0) 59 if i0.opcode != NX_IR_CONST_I64 { return 5 } 60 if i0.op0 != 42 { return 6 } 61 62 let i1: *NxInstr = nx_nir_instr_at(ir_func, 1) 63 if i1.opcode != NX_IR_RETURN { return 7 } 64 if i1.op0 != 0 { return 8 } // returns v0 65 66 // Function metadata 67 if ir_func.name_len != 4 { return 9 } 68 if ir_func.return_ty != 0 { return 10 } 69 70 return 0 71}