@gasm-compiler/core 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +0,0 @@
1
- import{A as le,B as de,C as fe,G,H as N,I as q,J as j,K as H,L as Z,a as S,c as te,d as O,e as W,f as M,g as F,h as U,j as z,k as T,n as ne,p as re,q as oe,r as ie,s as se,t as ae,y as ce,z as ue}from"./chunk-PS4NV6ZB.js";import{a as h}from"./chunk-STDXBN5E.js";import{resolve as _e}from"node:path";import{stat as Me,readFile as ct,writeFile as ut,unlink as lt,mkdir as dt}from"node:fs/promises";import{spawn as ft}from"node:child_process";import{dirname as pt}from"node:path";function pe(e){let t=e.functions.map(n=>!("parallelLoopInfo"in n)||!n.parallelLoopInfo?n:Ve(n));return{...e,functions:t}}function Ve(e){let t=e.parallelLoopInfo.loopLocalIndex,{writes:n}=Re(e.body,t);if(n>0){let r=x(e.body,t);return{...e,body:r}}return e}function Re(e,t){let n=0,r=0;function o(s){switch(s.kind){case"simple":if(s.instructions)for(let i of s.instructions)i.opcode==="local.get"&&i.immediates?.[0]===t&&n++,(i.opcode==="local.set"||i.opcode==="local.tee")&&i.immediates?.[0]===t&&r++;break;case"block":for(let i of s.children)o(i);break;case"loop":o(s.body);break;case"if":o(s.thenBranch),s.elseBranch&&o(s.elseBranch);break;case"parallel_loop":o(s.body),s.epilogue&&o(s.epilogue);break;case"return":case"break":case"continue":break}}return o(e),{reads:n,writes:r}}function x(e,t){switch(e.kind){case"simple":{if(!e.instructions)return e;let n=e.instructions.filter(r=>!((r.opcode==="local.set"||r.opcode==="local.tee")&&r.immediates?.[0]===t));return n.length===0?{kind:"block",children:[]}:{...e,instructions:n}}case"block":{let n=e.children.map(r=>x(r,t)).filter(r=>!Be(r));return{...e,children:n}}case"loop":return{...e,body:x(e.body,t)};case"if":return{...e,thenBranch:x(e.thenBranch,t),elseBranch:e.elseBranch?x(e.elseBranch,t):void 0};case"parallel_loop":return{...e,body:x(e.body,t),epilogue:e.epilogue?x(e.epilogue,t):void 0};case"return":case"break":case"continue":return e}}function Be(e){return e.kind==="block"&&e.children.length===0||e.kind==="simple"&&(!e.instructions||e.instructions.length===0)}function me(e){let t=e.functions.map(n=>Oe(n));return{...e,functions:t}}function Oe(e){let t=C(e.body,e);return{...e,body:t}}function C(e,t){switch(e.kind){case"loop":{let n=We(e.body),r=[],o=ge(e.body,n,r,t);return r.length===0?{...e,body:C(e.body,t)}:{kind:"block",children:[{kind:"simple",instructions:r},{...e,body:C(o,t)}],label:void 0}}case"block":return{...e,children:e.children.map(n=>C(n,t))};case"if":return{...e,thenBranch:C(e.thenBranch,t),elseBranch:e.elseBranch?C(e.elseBranch,t):void 0};case"simple":return e;default:return e}}function We(e){let t=new Set;function n(r){if(r.kind==="simple"&&r.instructions){for(let o of r.instructions)if(o.id!==void 0&&t.add(o.id),(o.opcode==="local.set"||o.opcode==="local.tee")&&o.immediates){let s=o.immediates[0];t.add(-s-1)}}r.kind==="block"&&r.children.forEach(n),r.kind==="loop"&&n(r.body),r.kind==="if"&&(n(r.thenBranch),r.elseBranch&&n(r.elseBranch))}return n(e),t}function ge(e,t,n,r){switch(e.kind){case"simple":{if(!e.instructions||e.instructions.length===0)return e;let o=[],s=new Set;for(let i of e.instructions)De(i,t,s)?(n.push(i),i.id!==void 0&&s.add(i.id)):(o.push(i),i.id!==void 0&&s.add(i.id));return{...e,instructions:o}}case"block":{let o=e.children.map(s=>ge(s,t,n,r));return{...e,children:o}}case"loop":return e;case"if":return e;default:return e}}function De(e,t,n){if(!Le(e.opcode))return!1;if(e.opcode==="local.get"&&e.immediates){let o=-e.immediates[0]-1;if(t.has(o))return!1}if(e.args){for(let r of e.args)if(t.has(r))return!1}return!0}function Le(e){return new Set(["i32.const","i64.const","f32.const","f64.const","local.get","i32.add","i32.sub","i32.mul","i32.div_s","i32.div_u","i32.rem_s","i32.rem_u","i64.add","i64.sub","i64.mul","i64.div_s","i64.div_u","i64.rem_s","i64.rem_u","f32.add","f32.sub","f32.mul","f32.div","f64.add","f64.sub","f64.mul","f64.div","i32.and","i32.or","i32.xor","i32.shl","i32.shr_s","i32.shr_u","i32.rotl","i32.rotr","i64.and","i64.or","i64.xor","i64.shl","i64.shr_s","i64.shr_u","i64.rotl","i64.rotr","i32.eqz","i32.eq","i32.ne","i32.lt_s","i32.lt_u","i32.gt_s","i32.gt_u","i32.le_s","i32.le_u","i32.ge_s","i32.ge_u","i64.eqz","i64.eq","i64.ne","i64.lt_s","i64.lt_u","i64.gt_s","i64.gt_u","i64.le_s","i64.le_u","i64.ge_s","i64.ge_u","f32.eq","f32.ne","f32.lt","f32.gt","f32.le","f32.ge","f64.eq","f64.ne","f64.lt","f64.gt","f64.le","f64.ge","i32.wrap_i64","i64.extend_i32_s","i64.extend_i32_u","f32.convert_i32_s","f32.convert_i32_u","f32.convert_i64_s","f32.convert_i64_u","f32.demote_f64","f64.convert_i32_s","f64.convert_i32_u","f64.convert_i64_s","f64.convert_i64_u","f64.promote_f32","i32.reinterpret_f32","i64.reinterpret_f64","f32.reinterpret_i32","f64.reinterpret_i64","i32.clz","i32.ctz","i32.popcnt","i64.clz","i64.ctz","i64.popcnt","f32.abs","f32.neg","f32.ceil","f32.floor","f32.trunc","f32.nearest","f32.sqrt","f64.abs","f64.neg","f64.ceil","f64.floor","f64.trunc","f64.nearest","f64.sqrt","f32.min","f32.max","f32.copysign","f64.min","f64.max","f64.copysign"]).has(e)}function he(e){for(let t of e.functions)Pe(t);return e}function Pe(e){$(e.body,e)}function $(e,t){switch(e.kind){case"simple":Fe(e,t);break;case"block":for(let n of e.children)$(n,t);break;case"loop":$(e.body,t);break;case"if":$(e.thenBranch,t),e.elseBranch&&$(e.elseBranch,t);break;case"parallel_loop":$(e.body,t),e.epilogue&&$(e.epilogue,t);break}}function Fe(e,t){let n=Te(e.instructions,t);n.length>0&&Ne(e,t,n);let r=Ge(e.instructions,t);r.length>0&&qe(e,t,r)}function ye(e,t){let n=L(e,t);if(!n)return null;if(n.opcode==="i32.shr_u"&&n.args.length===2){if(D(n.args[1],t)!==2)return null;let o=n.args[0];return Ue(o,t)}return ze(e,t)}function Ue(e,t){let n=L(e,t);if(!n)return{baseVar:e,wordOffset:0};if(n.opcode==="i32.add"&&n.args.length===2){let r=D(n.args[1],t);if(r!==null&&r>=0&&r%4===0)return{baseVar:n.args[0],wordOffset:r/4};let o=D(n.args[0],t);return o!==null&&o>=0&&o%4===0?{baseVar:n.args[1],wordOffset:o/4}:null}return{baseVar:e,wordOffset:0}}function ze(e,t){let n=L(e,t);if(!n)return{baseVar:e,wordOffset:0};if(n.opcode==="i32.add"&&n.args.length===2){let r=D(n.args[1],t);if(r!==null&&r>=0)return{baseVar:n.args[0],wordOffset:r}}return{baseVar:e,wordOffset:0}}function L(e,t){if(t.inlinedExpressionMap){let n=t.inlinedExpressionMap.get(e);if(n)return n}return A(t.body,e)}function A(e,t){switch(e.kind){case"simple":for(let n of e.instructions)if(n.id===t)return n;return null;case"block":for(let n of e.children){let r=A(n,t);if(r)return r}return null;case"loop":return A(e.body,t);case"if":{let n=A(e.thenBranch,t);return n||(e.elseBranch?A(e.elseBranch,t):null)}case"parallel_loop":{let n=A(e.body,t);return n||(e.epilogue?A(e.epilogue,t):null)}default:return null}}function D(e,t){let n=L(e,t);return n&&n.opcode==="i32.const"&&n.immediates&&n.immediates.length>0?n.immediates[0]:null}function Te(e,t){let n=[],r=[];for(let s=0;s<e.length;s++){let i=e[s];if(i.opcode==="wgsl.store_f32"&&i.args.length===2){let a=ye(i.args[0],t);a&&r.push({index:s,addr:a,valueArg:i.args[1]})}}let o=new Map;for(let s of r){let i=o.get(s.addr.baseVar)||[];i.push(s),o.set(s.addr.baseVar,i)}for(let[s,i]of o){if(i.length<3)continue;i.sort((c,u)=>c.addr.wordOffset-u.addr.wordOffset);let a=0;for(;a<i.length;){let c=a;for(;c+1<i.length&&i[c+1].addr.wordOffset===i[c].addr.wordOffset+1;)c++;let u=c-a+1;if(u>=3){let p=u>=4?4:3,d=i.slice(a,a+p),m=d.map(g=>g.index);be(m,e)&&n.push({instrIndices:m,baseVar:s,valueArgs:d.map(g=>g.valueArg),components:p})}a=c+1}}return n}function Ge(e,t){let n=[],r=[];for(let s=0;s<e.length;s++){let i=e[s];if(i.opcode==="wgsl.load_f32"&&i.args.length===1&&i.id!==void 0){let a=ye(i.args[0],t);a&&r.push({index:s,addr:a,resultVar:i.id})}}let o=new Map;for(let s of r){let i=o.get(s.addr.baseVar)||[];i.push(s),o.set(s.addr.baseVar,i)}for(let[s,i]of o){if(i.length<3)continue;i.sort((c,u)=>c.addr.wordOffset-u.addr.wordOffset);let a=0;for(;a<i.length;){let c=a;for(;c+1<i.length&&i[c+1].addr.wordOffset===i[c].addr.wordOffset+1;)c++;let u=c-a+1;if(u>=3){let p=u>=4?4:3,d=i.slice(a,a+p),m=d.map(g=>g.index);be(m,e)&&n.push({instrIndices:m,baseVar:s,resultVars:d.map(g=>g.resultVar),components:p})}a=c+1}}return n}function be(e,t){if(e.length<3)return!1;let n=Math.min(...e),r=Math.max(...e),o=e.length*4;if(r-n>=o)return!1;for(let s=n;s<=r;s++)if(t[s].opcode.startsWith("wgsl.store")&&!e.includes(s))return!1;return!0}function Ne(e,t,n){n.sort((r,o)=>o.instrIndices[0]-r.instrIndices[0]);for(let r of n){let o=r.components===4?"wgsl.store_vec4f":"wgsl.store_vec3f",s=e.instructions[r.instrIndices[0]].args[0],i={type:"instr",opcode:o,args:[s,...r.valueArgs],synthetic:!0},a=[...r.instrIndices].sort((c,u)=>c-u);for(let c=a.length-1;c>=0;c--)e.instructions.splice(a[c],1);e.instructions.splice(a[0],0,i)}}function qe(e,t,n){n.sort((r,o)=>o.instrIndices[0]-r.instrIndices[0]);for(let r of n){let o=r.components===4?"wgsl.load_vec4f":"wgsl.load_vec3f",s=0;for(let d of t.vars.keys())d>s&&(s=d);let i=s+1;t.vars.set(i,{id:i,type:"v128"});let a=e.instructions[r.instrIndices[0]].args[0],c={type:"instr",id:i,opcode:o,args:[a],synthetic:!0},u=r.resultVars.map((d,m)=>({type:"instr",id:d,opcode:"wgsl.extract_f32",args:[i],immediates:[m],synthetic:!0})),p=[...r.instrIndices].sort((d,m)=>d-m);for(let d=p.length-1;d>=0;d--)e.instructions.splice(p[d],1);e.instructions.splice(p[0],0,c,...u)}}function K(e,t){let n={valid:!0,mathImports:[],errors:[],requiredLevel:null},r=t===!0||t==="M0"||t==="M1"||t==="M2",o=t===!0?"M2":t==="M0"||t==="M1"||t==="M2"?t:null,s=["M0","M1","M2"],i=0;for(let a of e.imports){if(a.kind!=="func")continue;let c=i++;if(!z(a.module,a.name))continue;let u=a.typeIndex;if(u===void 0){n.errors.push(S(`Math import ${a.name} has no type index`,{functionName:a.name})),n.valid=!1;continue}let p=e.types[u];if(!p){n.errors.push(S(`Math import ${a.name} references invalid type index ${u}`,{functionName:a.name})),n.valid=!1;continue}let d=T(a.name);if(!d){n.errors.push(S(`Unknown math intrinsic: ${a.name}`,{functionName:a.name})),n.valid=!1;continue}let m={funcIndex:c,module:a.module,name:a.name,level:d.level,params:p.params,results:p.results};if(n.mathImports.push(m),(n.requiredLevel===null||s.indexOf(d.level)>s.indexOf(n.requiredLevel))&&(n.requiredLevel=d.level),!r){n.errors.push(S(`Math intrinsic ${a.name} requires mathExtension option to be enabled`,{functionName:a.name})),n.valid=!1;continue}if(o&&!ne(a.name,o)){n.errors.push(S(`Math intrinsic ${a.name} requires level ${d.level}, but only ${o} is enabled`,{functionName:a.name})),n.valid=!1;continue}let g=re(a.name,p.params,p.results);g&&(n.errors.push(S(g,{functionName:a.name})),n.valid=!1)}return n}import{readFileSync as je}from"node:fs";var we,Se;async function He(e=Q()){let t=await Ke(e),n=await WebAssembly.instantiate(ve(t),{});return j(n.instance.exports)}function J(e=Q()){return Se??=He(e),Se}function Ze(e=Q()){let t=Je(e),n=new WebAssembly.Module(ve(t)),r=new WebAssembly.Instance(n,{});return j(r.exports)}function Ie(e,t={}){return we??=Ze(),we.compile(e,t)}function Q(){let e=globalThis.Deno,t=new URL("./gasm_core_rs.wasm",import.meta.url);if(e){let n=new URL("../../core-rs/target/wasm32-unknown-unknown/debug/gasm_core_rs.wasm",import.meta.url);try{return e.statSync(n),n}catch{}let r=new URL("../../core-rs/target/wasm32-unknown-unknown/release/gasm_core_rs.wasm",import.meta.url);try{return e.statSync(r),r}catch{}try{return e.statSync(t),t}catch{}}return new URL("../../core-rs/target/wasm32-unknown-unknown/debug/gasm_core_rs.wasm",import.meta.url)}async function Ke(e){let t=globalThis.Deno;return t?await t.readFile(e):await(await import("node:fs/promises")).readFile(e)}function Je(e){let t=globalThis.Deno;return t?t.readFileSync(e):je(e)}function ve(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}var ke={};for(let[e,t]of Object.entries(te))ke[t]=e.replace(/_/g,".");function Qe(e){let t=[];t.push("(module");for(let r of e.memories)t.push(` (memory ${r.min}${r.max!==void 0?` ${r.max}`:""})`);for(let r of e.imports)if(r.kind==="func"&&r.typeIndex!==void 0){let o=e.types[r.typeIndex];if(o){let s=o.params.map((a,c)=>`(param $${c} ${a})`).join(" "),i=o.results.map(a=>`(result ${a})`).join(" ");t.push(` (import "${r.module}" "${r.name}" (func ${s}${i?" "+i:""}))`)}}let n=new Set;for(let r of e.globals){if(r.kind==="import")continue;let o=r.mutable?"(mut ":"",s=r.mutable?")":"",i="";r.initValue!==void 0&&(r.type==="i32"||r.type==="i64"?i=`${r.type}.const ${r.initValue}`:(r.type==="f32"||r.type==="f64")&&(i=`${r.type}.const ${r.initValue}`)),t.push(` (global $${r.index} ${o}${r.type}${s} ${i?`(${i})`:""})`)}for(let r of e.data){let o=Array.from(r.data.slice(0,Math.min(32,r.data.length))).map(i=>`\\${i.toString(16).padStart(2,"0")}`).join(""),s=r.data.length>32?"...":"";t.push(` (data (i32.const ${r.memoryIndex}) "${o}${s}") ;; ${r.data.length} bytes`)}for(let r of e.functions)t.push(""),t.push(...Xe(r,e));if(e.exports.length>0){t.push("");for(let r of e.exports)r.kind==="func"?t.push(` (export "${r.name}" (func $${r.index}))`):r.kind==="mem"?t.push(` (export "${r.name}" (memory ${r.index}))`):r.kind==="global"&&t.push(` (export "${r.name}" (global ${r.index}))`)}return e.startFunctionIndex!==void 0&&t.push(` (start $${e.startFunctionIndex})`),t.push(")"),t.join(`
2
- `)}function Xe(e,t){let n=[],r=e.params.map((i,a)=>`(param $${a} ${i})`).join(" "),o=e.results.map(i=>`(result ${i})`).join(" ");if(n.push(` (func $${e.index} ${r}${o?" "+o:""}`),e.locals.length>0){let i=new Map;for(let a of e.locals)i.set(a.type,(i.get(a.type)||0)+1);for(let[a,c]of i)n.push(` (local ${a} (;${c}x;))`)}let s=Ye(e.body,2);return n.push(...s),n.push(" )"),n}function Ye(e,t){let n=[],r=" ".repeat(t);for(let o of e){let s=et(o,t);n.push(`${r}${s}`)}return n}function et(e,t){if(!e||typeof e!="object")return";; Error: Invalid instruction";let{opcode:n,immediates:r}=e,o=ke[n]||`unknown_0x${n.toString(16)}`;if(!r||r.length===0)return o;switch(o){case"local.get":case"local.set":case"local.tee":return`${o} $${r[0]}`;case"global.get":case"global.set":return`${o} $${r[0]}`;case"i32.const":case"i64.const":return`${o} ${r[0]}`;case"f32.const":case"f64.const":return`${o} ${r[0]}`;case"call":return`${o} $${r[0]}`;case"call_indirect":return`${o} (type ${r[0]})`;case"br":case"br_if":return`${o} ${r[0]}`;case"br_table":let s=r[0].join(" "),i=r[1];return`${o} ${s} ${i}`;case"if":case"block":case"loop":let a=r[0];return`${o} ${a!==void 0&&a!=="void"?`(result ${a})`:""}`;case"i32.load":case"i64.load":case"f32.load":case"f64.load":case"i32.load8_s":case"i32.load8_u":case"i32.load16_s":case"i32.load16_u":case"i64.load8_s":case"i64.load8_u":case"i64.load16_s":case"i64.load16_u":case"i64.load32_s":case"i64.load32_u":case"i32.store":case"i64.store":case"f32.store":case"f64.store":case"i32.store8":case"i32.store16":case"i64.store8":case"i64.store16":case"i64.store32":let c=r[0],u=r[1],p=[];return u!==0&&p.push(`offset=${u}`),c!==void 0&&p.push(`align=${1<<c}`),`${o}${p.length>0?" "+p.join(" "):""}`;case"memory.size":case"memory.grow":return o;default:if(o.startsWith("v128.")){if(o.includes("load")||o.includes("store")){let d=r[0],m=r[1],g=[];return m!==0&&g.push(`offset=${m}`),d!==void 0&&g.push(`align=${1<<d}`),`${o}${g.length>0?" "+g.join(" "):""}`}if(o.includes("const")){let d=r.join(" ");return`${o} ${d}`}return o.includes("extract_lane")||o.includes("replace_lane")?`${o} ${r[0]}`:`${o}${r.length>0?" "+r.join(" "):""}`}return`${o}${r.length>0?" "+r.join(" "):""}`}}var Bt=globalThis.gpu,tt=globalThis.navigator?.gpu,X=class{constructor(t={}){this.config=t}device=null;queue=null;initialized=!1;buffers=new Map;async ensureInitialized(){if(!this.initialized)try{let t=await tt?.requestAdapter?.();if(!t)throw new h("No GPU adapter available","compilation","navigator.gpu.requestAdapter() returned null");if(this.device=await t.requestDevice?.(),!this.device)throw new h("Failed to request GPU device","compilation","adapter.requestDevice() returned null");this.queue=this.device.queue,this.initialized=!0}catch(t){throw t instanceof h?t:new h(`GPU initialization failed: ${t instanceof Error?t.message:String(t)}`,"compilation",String(t))}}createBuffer(t,n,r){if(!this.device)throw new h("Device not initialized","binding","Call ensureInitialized() first");let o=this.device.createBuffer({label:t,size:n.byteLength,usage:r});return this.queue.writeBuffer(o,0,n.buffer,n.byteOffset,n.byteLength),o}async readBuffer(t,n,r){if(!this.device||!this.queue)throw new h("Device not initialized","readback","Call ensureInitialized() first");let o=Math.max(4,Math.ceil(n/4)*4),s=this.device.createBuffer({size:o,usage:9}),i=this.device.createCommandEncoder();i.copyBufferToBuffer(t,0,s,0,Math.min(n,o)),this.queue.submit([i.finish()]);try{await s.mapAsync(1)}catch(u){throw s.destroy(),new h(`Failed to map staging buffer: ${u instanceof Error?u.message:String(u)}`,"readback",String(u))}let a=s.getMappedRange(),c;return r==="f32"?c=new Float32Array(new Uint8Array(a).buffer).slice():r==="i32"?c=new Int32Array(new Uint8Array(a).buffer).slice():c=new Uint32Array(new Uint8Array(a).buffer).slice(),s.unmap(),s.destroy(),{data:c,type:r}}async execute(t,n,r,o={}){let s=o.workgroupSize??[1,1,1],i=o.workgroupCount??[1,1,1],a=o.timeout??5e3;if(await this.ensureInitialized(),!this.device||!this.queue)throw new h("Device initialization failed","compilation");try{let c;try{let l=o.shaderLabel||"Gasm Compiler Compute Shader";c=this.device.createShaderModule({code:t,label:l});let f=await c.getCompilationInfo?.();if(f&&f.messages.length>0){let y=f.messages.filter(w=>w.type==="error");if(y.length>0){let w=y.map(k=>`${k.message} at ${k.lineNum}:${k.linePos}`).join("; ");throw new h(`WGSL compilation failed: ${w}`,"compilation")}}}catch(l){throw l instanceof h?l:new h(`Failed to create shader module: ${l instanceof Error?l.message:String(l)}`,"compilation",String(l))}let u=[],p=0,d=new Map,m=Object.entries(n).sort((l,f)=>l[0]==="memory"?-1:f[0]==="memory"?1:l[0].localeCompare(f[0]));for(let[l,{data:f,type:y}]of m){let w=this.createBuffer(`input_${l}`,f,140);d.set(l,w),u.push({binding:p++,resource:{buffer:w}})}let g=new Map,b=new Map;for(let l of r){if(d.has(l)){let Ee=d.get(l),ee=n[l];g.set(l,Ee),b.set(l,{size:ee.data.byteLength,type:ee.type});continue}let f=o.outputBuffers?.[l]??{type:"f32",size:1},y=f.size??1,w=y*4,k=this.device.createBuffer({label:`output_${l}`,size:w,usage:140}),_;f.type==="f32"?_=new Float32Array(y).fill(0):f.type==="i32"?_=new Int32Array(y).fill(0):_=new Uint32Array(y).fill(0),this.queue.writeBuffer(k,0,_.buffer,_.byteOffset,_.byteLength),g.set(l,k),b.set(l,{size:w,type:f.type}),u.push({binding:p++,resource:{buffer:k}})}let I=Object.keys(n).length,E=this.device.createBindGroupLayout({entries:u.map((l,f)=>{let y=f===0&&n.memory!==void 0,w=f>=I;return{binding:f,visibility:4,buffer:{type:!y&&!w?"read-only-storage":"storage"}}})}),v=this.device.createBindGroup({layout:E,entries:u}),V=this.device.createPipelineLayout({bindGroupLayouts:[E]}),R;try{R=this.device.createComputePipeline({layout:V,compute:{module:c,entryPoint:"main"}})}catch(l){throw new h(`Failed to create compute pipeline: ${l instanceof Error?l.message:String(l)}`,"binding",String(l))}try{let l=this.device.createCommandEncoder(),f=l.beginComputePass();f.setPipeline(R),f.setBindGroup(0,v),f.dispatchWorkgroups(i[0],i[1],i[2]),f.end(),this.queue.submit([l.finish()])}catch(l){throw new h(`Compute shader dispatch failed: ${l instanceof Error?l.message:String(l)}`,"dispatch",String(l))}let B={};try{for(let l of r){let f=g.get(l),y=b.get(l);if(!f||!y)throw new h(`Output buffer "${l}" not found`,"readback");B[l]=await this.readBuffer(f,y.size,y.type)}}catch(l){throw l instanceof h?l:new h(`Failed to read back results: ${l instanceof Error?l.message:String(l)}`,"readback",String(l))}finally{let l=new Set;d.forEach(f=>{f.destroy(),l.add(f)}),g.forEach(f=>{l.has(f)||f.destroy()})}return B}catch(c){throw c instanceof h?c:new h(`Unexpected error during execution: ${c instanceof Error?c.message:String(c)}`,"dispatch",String(c))}}async destroy(){this.buffers.forEach(t=>t.destroy()),this.buffers.clear(),this.device&&typeof this.device.destroy=="function"&&this.device.destroy(),this.device=null,this.queue=null,this.initialized=!1}};function P(e,t={}){return Y()?it(e,t):xe(e,t)}async function gn(){Y()&&await J()}async function ot(e,t={}){return Y()?await st(e,t):xe(e,t)}function xe(e,t={}){let n=N(),r=G(t),o=t.strictConformance||r,s=O(e);if(W(s))return n.errors.push({severity:"error",code:s.code??M.ERR_PARSE,message:s.message,functionName:s.functionName}),{ok:!1,diagnostics:n};let i=s,a=F(i,{strictConformance:o});if(U(a))return n.errors.push({severity:"error",code:a.code??M.ERR_VALIDATION,message:a.message,functionName:a.functionName}),{ok:!1,diagnostics:n};let c=a;if(t.mathExtension){let b=K(i,t.mathExtension);if(!b.valid){for(let I of b.errors)n.errors.push({severity:"error",code:"ERR_MATH_VALIDATION",message:I.message,functionName:I.functionName});return{ok:!1,diagnostics:n}}}let u=q(c,t);if(n.warnings.push(...u.diagnostics.warnings),n.errors.push(...u.diagnostics.errors),n.demotions.push(...u.diagnostics.demotions),n.featuresUsed=u.diagnostics.featuresUsed,n.errors.length>0)return{ok:!1,diagnostics:n};let p=ue(c);t.optimize!==!1&&(p=de(p,{verbose:t.verbose??!1}));let d=fe(p);d=oe(d),t.optimize!==!1&&(d=ie(d)),t.vectorPromotion&&(d=he(d));let m=se();if(t.optimize!==!1){let b=ae(d);d=b.module,m=b.dispatchInfo,d=pe(d),d=me(d)}return{ok:!0,wgsl:le(d,t,e,m),diagnostics:n,dispatchInfo:m}}function Y(){let t=globalThis.Deno?.env?.get("GASM_CORE_BACKEND")?.toLowerCase();return t!=="typescript"&&t!=="ts"}function it(e,t){let n=$e(e,t);if(!n.ok)return{ok:!1,diagnostics:n.diagnostics};let r=Ie(e,t);return r.ok?{ok:!0,wgsl:Ae(r.wgsl,t,e,n.module),diagnostics:n.diagnostics,dispatchInfo:H(r.dispatchInfo)}:(n.diagnostics.errors.push(...Z(r.diagnostics).errors),{ok:!1,diagnostics:n.diagnostics})}async function st(e,t){let n=$e(e,t);if(!n.ok)return{ok:!1,diagnostics:n.diagnostics};let o=(await J()).compile(e,t);return o.ok?{ok:!0,wgsl:Ae(o.wgsl,t,e,n.module),diagnostics:n.diagnostics,dispatchInfo:H(o.dispatchInfo)}:(n.diagnostics.errors.push(...Z(o.diagnostics).errors),{ok:!1,diagnostics:n.diagnostics})}function $e(e,t){let n=N(),r=O(e);if(W(r))return n.errors.push({severity:"error",code:r.code??M.ERR_PARSE,message:r.message,functionName:r.functionName}),{ok:!1,diagnostics:n};let o=G(t),s=t.strictConformance||o,i=F(r,{strictConformance:s});if(U(i))return n.errors.push({severity:"error",code:i.code??M.ERR_VALIDATION,message:i.message,functionName:i.functionName}),{ok:!1,diagnostics:n};if(t.mathExtension){let c=K(r,t.mathExtension);if(!c.valid){for(let u of c.errors)n.errors.push({severity:"error",code:"ERR_MATH_VALIDATION",message:u.message,functionName:u.functionName});return{ok:!1,diagnostics:n}}}let a=q(i,t);return n.warnings.push(...a.diagnostics.warnings),n.errors.push(...a.diagnostics.errors),n.demotions.push(...a.diagnostics.demotions),n.featuresUsed=a.diagnostics.featuresUsed,n.errors.length>0?{ok:!1,diagnostics:n}:{ok:!0,diagnostics:n,module:i}}function Ae(e,t,n,r){let o=e;if(o=at(o,t,n,r),t.compilerMetadata&&(o=o.replace(/(\/\/ Generated: .*\n)/,`$1// Metadata: ${t.compilerMetadata}
3
- `)),t.workgroupSize){let[s,i,a]=t.workgroupSize;o=o.replace(/@compute @workgroup_size\(\d+, \d+, \d+\)/g,`@compute @workgroup_size(${s}, ${i}, ${a})`)}return o}function at(e,t,n,r){if(t.stripComments||t.releaseMode)return e;let s=ce(n,t.sourceMapping);if(!s)return e;let i=s.generateHeaderComment(),a=i?e.replace(/(\/\/ Generated: .*\n)/,`$1${i}
4
- `):e,c=0;return a=a.replace(/^fn ([A-Za-z_][A-Za-z0-9_]*)\(/gm,(u,p)=>{let d=r.functions[c],m=s.commentForFunction(d?.index??c,p);if(c+=1,!m)return u;let g=t.sourceMapping==="minimal"?"":`
5
- // [WAT] rust backend instruction mapping`;return`${m}${g}
6
- ${u}`}),a}function hn(e,t={}){let n=P(e,t);if(!n.ok){let r=n.diagnostics.errors[0];throw S(r?.message??"Compilation failed",{functionName:r?.functionName,instructionName:r?.code,code:r?.code})}return n.wgsl}async function yn(e,t={}){let n=await ot(e,t);if(!n.ok){let r=n.diagnostics.errors[0];throw S(r?.message??"Compilation failed",{functionName:r?.functionName,instructionName:r?.code,code:r?.code})}return n.wgsl}function Ce(e,t){for(let n of e.warnings){let r=n.functionName?` (${n.functionName})`:"";console.error(`warning${r}: ${n.message}`)}if(t&&e.demotions.length>0){let n=new Map;for(let o of e.demotions)n.set(o.kind,(n.get(o.kind)??0)+1);let r=[...n.entries()].map(([o,s])=>`${o} (${s})`);console.error(`demotions: ${r.join(", ")}`)}}function mt(e,t){return new Promise(n=>{let r=ft(e,t,{stdio:["ignore","pipe","pipe"]}),o="",s="";r.stdout.on("data",i=>{o+=String(i)}),r.stderr.on("data",i=>{s+=String(i)}),r.on("close",i=>{n({success:i===0,stdout:o,stderr:s})}),r.on("error",i=>{n({success:!1,stdout:o,stderr:`${s}
7
- ${i.message}`})})})}async function nt(e,t={}){let{output:n,verbose:r=!1,keepWasm:o=!1,optimize:s=!1,denyF64Demotion:i=!1,allowI64Demotion:a=!1,warningsAsErrors:c=!1}=t;try{r&&console.log(`[1/4] Validating input file: ${e}`);let u=_e(e);if(!(await Me(u)).isFile())throw new Error(`Not a file: ${e}`);let d=u.endsWith(".wasm");!d&&!u.endsWith(".as")&&!u.endsWith(".ts")&&console.warn("Warning: Input file does not have .as, .ts, or .wasm extension");let m=u.replace(/\.(as|ts)$/,".wasm");if(d)r&&console.log("[2/4] Input is WASM, skipping compilation..."),m=u;else{r&&console.log("[2/4] Compiling AssemblyScript to WASM...");let v=await gt(),{success:V,stdout:R,stderr:B}=await mt(v,[u,"-o",m]);if(!V)throw new Error(`AssemblyScript compilation failed:
8
- ${B}`);r&&R&&console.log(R)}r&&console.log("[3/4] Reading WASM binary...");let g=await ct(m);r&&(console.log(` WASM size: ${g.length} bytes`),console.log("[4/4] Compiling WASM to WGSL using Gasm..."));let b={};i&&(b.f64="deny"),a&&(b.i64="allow-lossy");let I=P(g,{optimize:s,demotionPolicy:b,warningsAsErrors:c});if(Ce(I.diagnostics,r),!I.ok){let v=I.diagnostics.errors[0];throw new Error(v?.message??"Compilation failed")}let E=I.wgsl;if(n){let v=_e(n),V=pt(v);await dt(V,{recursive:!0}),await ut(v,E,"utf-8"),console.log(r?`
9
- \u2713 Successfully compiled to: ${v}`:`\u2713 Compiled to: ${n}`)}if(!o&&!d)try{await lt(m),r&&console.log(" Cleaned up intermediate WASM file")}catch{}return E}catch(u){throw u instanceof Error?u:new Error(`Unknown error: ${String(u)}`)}}function rt(e,t={}){let{verbose:n=!1,optimize:r=!1,denyF64Demotion:o=!1,allowI64Demotion:s=!1,warningsAsErrors:i=!1}=t,a={};o&&(a.f64="deny"),s&&(a.i64="allow-lossy");let c=P(e,{optimize:r,demotionPolicy:a,warningsAsErrors:i});if(Ce(c.diagnostics,n),!c.ok){let u=c.diagnostics.errors[0];throw new Error(u?.message??"Compilation failed")}return c.wgsl}async function gt(){let e=["node_modules/.bin/asc","./examples/node_modules/.bin/asc","../app/node_modules/.bin/asc","./node_modules/assemblyscript/bin/asc.js"];for(let t of e)try{if((await Me(t)).isFile())return t}catch{}return"asc"}export{Qe as a,X as b,nt as c,rt as d,P as e,gn as f,ot as g,hn as h,yn as i};