code wiki / _hdl_build / nx_scope_test.nx
nx_scope_test.nx source
↩ module page · 24 lines · 1704 B
1// nx_scope_test.nx -- does a closure assigning to an OUTER `var` update it (Sizzle setDocument sets a module
2// `document` var from inside a function)? And the exact Sizzle shape: var document; setDocument()->document=x.
3import "nx_syscalls.nx"
4import "nx_js_eval.nx"
5func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
6func cw(s: *u8) -> i64 { sys_write(1,s,slen(s)); return 0 }
7func run1(label: *u8, js: *u8) -> i64 {
8 js_set_rt_dbg(1)
9 let obx: *i64 = sys_mmap(16) as *i64
10 js_run_source_keep_doc(js, slen(js), 0 as *u8, 0, obx)
11 let genv: *i64 = (obx[1]) as *i64
12 cw(label); cw(": " as *u8)
13 if (genv as i64)==0 { cw("NULL\n" as *u8); return 1 }
14 let ub: *u8 = sys_mmap(2048); let t: i64 = js_pending_total(genv)
15 if t==0 { cw("THREW(no fetch)" as *u8) } else { var i: i64=0; while i<t { let ul: i64=js_pending_url(genv,i,ub,2048); if ul>0 { cw(ub); cw(" " as *u8) } i=i+1 } }
16 cw("\n" as *u8); return 0
17}
18func main() -> i64 {
19 run1("A closure->outer var" as *u8, "var doc;function set(){doc=42}set();fetch('x/doc-'+doc);" as *u8)
20 run1("B setDoc-preferred " as *u8, "var pref=window.document;var doc;function setDocument(n){var d=n?n.ownerDocument||n:pref;doc=d;return doc}setDocument();fetch('x/doc-'+(typeof doc)+'-ce-'+(typeof (doc&&doc.createElement)));" as *u8)
21 run1("C var-shadow-global " as *u8, "var document=window.document;function f(){return typeof document}fetch('x/'+f()+'-ce-'+(typeof document.createElement));" as *u8)
22 run1("D nested fn re-read " as *u8, "var d;function outer(){d=window.document;function inner(){return d.createElement('x')}return inner()}fetch('x/'+(typeof outer()));" as *u8)
23 return 0
24}