code wiki / _hdl_build / nx_ext_test.nx

nx_ext_test.nx source

↩ module page · 25 lines · 1821 B

1// nx_ext_test.nx -- isolate jQuery's ce.extend({config}) pattern: a METHOD call whose `this` = the FUNCTION ce, 2// copying config props via for-in onto the function (a[t]=e[t] with a=this=function). THREW = the gap. 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 this=fn, for-in copy " as *u8, "var ce=function(){};ce.ext=function(){var a=arguments[0]||{},s=1,u=arguments.length;if(s===u){a=this;s--}for(;s<u;s++){var e=arguments[s];for(var t in e){a[t]=e[t]}}return a};ce.ext({foo:1,bar:function(){return 2}});fetch('x/foo-'+ce.foo+'-bar-'+(typeof ce.bar));" as *u8) 20 run1("B for-in over obj " as *u8, "var o={a:1,b:2,c:3};var s='';for(var k in o){s=s+k}fetch('x/'+s);" as *u8) 21 run1("C index-write to fn " as *u8, "var f=function(){};var k='dyn';f[k]=42;fetch('x/'+f.dyn+'-'+f['dyn']);" as *u8) 22 run1("D method this=fn " as *u8, "var ce=function(){};ce.m=function(){return typeof this};fetch('x/'+ce.m());" as *u8) 23 run1("E expando regex replace " as *u8, "var t='3.7.1';var x='jQuery'+(t+0.5763).replace(/\\D/g,'');fetch('x/exp-'+x);" as *u8) 24 return 0 25}