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}