code wiki / _hdl_build / nx_js_this_test.nx
nx_js_this_test.nx source
↩ module page · 27 lines · 1432 B
1// nx_js_this_test.nx -- isolate why method-shorthand+this isn't firing. Prints rc/kind/val per probe.
2import "nx_syscalls.nx"
3import "nx_js_eval.nx"
4func tp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
5func tn(v: i64) -> i64 {
6 var m: i64 = v
7 if m < 0 { tp("-\x00" as *u8); m = 0 - m }
8 let t: *u8 = sys_mmap(24); var k: i64 = 0
9 if m == 0 { t[0] = 48 as u8; k = 1 } else { while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } }
10 let o: *u8 = sys_mmap(24); var j: i64 = 0
11 while j < k { o[j] = t[k - 1 - j]; j = j + 1 }
12 sys_write(1, o, k); return 0
13}
14func tclen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
15func run(label: *u8, src: *u8) -> i64 {
16 let out: *i64 = sys_mmap(16) as *i64
17 let rc: i64 = js_run_source(src, tclen(src), out)
18 tp(label); tp(" rc=\x00" as *u8); tn(rc); tp(" kind=\x00" as *u8); tn(out[0]); tp(" val=\x00" as *u8); tn(out[1]); tp("\n\x00" as *u8)
19 return 0
20}
21func main() -> i64 {
22 run("1 funcexpr-this \x00" as *u8, "var o={n:5,f:function(){return this.n}};o.f()\x00" as *u8)
23 run("2 shorthand-noThis\x00" as *u8, "var o={n:5,g(){return 99}};o.g()\x00" as *u8)
24 run("3 shorthand-this \x00" as *u8, "var o={n:5,g(){return this.n}};o.g()\x00" as *u8)
25 run("4 this-returns-obj\x00" as *u8, "var o={f(){return this}};o.f()\x00" as *u8)
26 return 0
27}