code wiki / _hdl_build / nx_fwdcall_probe.nx

nx_fwdcall_probe.nx source

↩ module page · 24 lines · 1055 B

1// nx_fwdcall_probe.nx -- DIAGNOSTIC: does nx_cc support FORWARD calls / mutual recursion (needed for a 2// recursive-descent formula parser: factor -> expr for parens)? Prints A/B chain result; expect 10. 3// license_tier: ORIGINAL 4import "nx_syscalls.nx" 5 6func fp_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 7func fp_num(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 8 9// fp_a calls fp_b which is defined LATER (forward call), and fp_b recurses back into fp_a (mutual). 10func fp_a(n: i64) -> i64 { 11 if n <= 0 { return 0 } 12 return 1 + fp_b(n - 1) 13} 14func fp_b(n: i64) -> i64 { 15 if n <= 0 { return 0 } 16 return 1 + fp_a(n - 1) 17} 18 19func main() -> i64 { 20 let r: i64 = fp_a(10) 21 fp_puts("fwdcall result=" as *u8); fp_num(r); fp_puts(" (expect 10)\n" as *u8) 22 if r == 10 { return 0 } 23 return 1 24}