code wiki / _hdl_build / nx_js_navier_diag.nx
nx_js_navier_diag.nx source
↩ module page · 24 lines · 1585 B
1// diagnose NavierStokes runtime gap. Minimal calls (tree+VM). expect_exit: 0 license_tier: ORIGINAL
2import "nx_js_vm.nx"
3func w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
4func nn(v: i64) -> i64 { if v==0 { sys_write(1,"0" as *u8,1); return 0 } var m: i64=v; if m<0 { sys_write(1,"-" as *u8,1); m=0-m } let t: *u8=sys_mmap(24); var k: i64=0; while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } let o: *u8=sys_mmap(24); var q: i64=k-1; var x: i64=0; while q>=0 { o[x]=t[q]; x=x+1; q=q-1 } sys_write(1,o,x); return 0 }
5func show(label: *u8, src: *u8) -> i64 {
6 let ot: *i64 = sys_mmap(16) as *i64
7 let ov: *i64 = sys_mmap(16) as *i64
8 let rt: i64 = js_run_source(src, bsl(src), ot)
9 let rv: i64 = compile_run(src, ov)
10 w(label); w(" TREE rc="); nn(rt); w(" val="); nn(ot[1]); w(" | VM rc="); nn(rv); w(" val="); nn(ov[1]); w("\n" as *u8)
11 return 0
12}
13func main(argc: i64, argv: *i64) -> i64 {
14 w("=== NavierStokes feature diagnostic ===\n" as *u8)
15 show("A this.x in plain call" as *u8, "function f(){this.r=5;return this.r;}f()" as *u8)
16 show("B Math.sqrt(16)|0" as *u8, "Math.sqrt(16)|0" as *u8)
17 show("C ~~(3.7)" as *u8, "~~(3.7)" as *u8)
18 show("D ~~(dens*10) idiom" as *u8, "var d=3/4;~~((d*10))" as *u8)
19 show("E new Array(n).length" as *u8, "var a=new Array(50);a.length" as *u8)
20 show("F new Array(n) fill loop" as *u8, "var a=new Array(3);a[0]=1;a[1]=2;a[2]=4;a[0]+a[1]+a[2]" as *u8)
21 show("G float literal 3.7" as *u8, "3.7>3?1:0" as *u8)
22 w("DONE\n" as *u8)
23 return 0
24}