nx_beach_workspace_scripts_gate_t48.nx source
↩ module page · 30 lines · 1668 B
1import "nx_jsbalance.nx"
2import "nx_gate_verdict.nx"
3func t48_all(buf:*u8,n:i64,c:*i64)->i64 {
4 let out:*i64=sys_mmap(JSB_O_N*8) as *i64;var pos:i64=0;var count:i64=0;var bytes:i64=0;var bad:i64=0
5 while pos<n {
6 let open:i64=jsb_find(buf,n,pos,"<script" as *u8,7);if open<0 {break}
7 let gt:i64=jsb_find(buf,n,open,">" as *u8,1);if gt<0 {return -1}
8 let close:i64=jsb_find(buf,n,gt,"</script" as *u8,8);if close<0 {return -1}
9 let len:i64=close-gt-1;let status:i64=jsb_check((buf as i64+gt+1) as *u8,len,out)
10 count=count+1;bytes=bytes+len
11 gv_values_head();gv_kv("script_index" as *u8,count);gv_kv("bytes" as *u8,len);gv_kv("balance_status" as *u8,status);gv_kv("scanned" as *u8,out[JSB_O_SCAN])
12 if status!=0||out[JSB_O_SCAN]!=len {bad=bad+1}
13 pos=close+8
14 }
15 gv_check("every emitted script structurally balanced" as *u8,count>0&&bad==0,c)
16 gv_values_head();gv_kv("script_count" as *u8,count);gv_kv("all_script_bytes" as *u8,bytes)
17 return bad
18}
19func main(argc:i64,argv:*i64)->i64 {
20 let c:*i64=gv_ctr();let size:*i64=sys_mmap(8) as *i64
21 var path:*u8="/tmp/beach-workspace-beta-t52.html" as *u8;if argc>1 {path=argv[1] as *u8}
22 let page:*u8=sys_read_file(path,size)
23 if (page as i64)<=0 {return 3}
24 let scanned:i64=t48_all(page,size[0],c)
25 gv_check("all script elements close" as *u8,scanned>=0,c)
26 let out:*i64=sys_mmap(JSB_O_N*8) as *i64
27 gv_check("planted unmatched brace rejected" as *u8,jsb_check("{" as *u8,1,out)!=0,c)
28 gv_check("planted unterminated string rejected" as *u8,jsb_check("'x" as *u8,2,out)!=0,c)
29 return gv_verdict("BEACH-WORKSPACE-ALL-SCRIPT-BALANCE" as *u8,c,"Structural lexer only, not full JS syntax or browser execution" as *u8)
30}