@shd101wyy/yo 0.0.4 → 0.0.6

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.
Files changed (37) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +40 -11
  3. package/out/cjs/index.cjs +14 -14
  4. package/out/cjs/yo-cli.cjs +453 -403
  5. package/out/esm/index.mjs +22 -22
  6. package/out/types/src/codegen/expressions/index.d.ts +0 -1
  7. package/out/types/src/codegen/utils/index.d.ts +5 -3
  8. package/out/types/src/env.d.ts +7 -6
  9. package/out/types/src/error.d.ts +6 -3
  10. package/out/types/src/evaluator/async/await-analysis-types.d.ts +1 -1
  11. package/out/types/src/evaluator/builtins/arc_fns.d.ts +20 -0
  12. package/out/types/src/evaluator/builtins/array_fns.d.ts +8 -0
  13. package/out/types/src/evaluator/builtins/type_fns.d.ts +2 -2
  14. package/out/types/src/evaluator/builtins/var_fns.d.ts +1 -1
  15. package/out/types/src/evaluator/calls/numeric_type.d.ts +4 -0
  16. package/out/types/src/evaluator/types/utils.d.ts +10 -10
  17. package/out/types/src/evaluator/utils.d.ts +1 -1
  18. package/out/types/src/expr.d.ts +9 -4
  19. package/out/types/src/types/creators.d.ts +1 -1
  20. package/out/types/src/types/definitions.d.ts +1 -1
  21. package/out/types/src/types/guards.d.ts +1 -1
  22. package/out/types/src/types/utils.d.ts +3 -2
  23. package/out/types/src/utils.d.ts +3 -1
  24. package/out/types/src/value.d.ts +4 -4
  25. package/out/types/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +15 -2
  27. package/scripts/check-liburing.js +51 -39
  28. package/std/collections/array_list.yo +2 -2
  29. package/std/prelude.yo +272 -189
  30. package/out/types/src/codegen/expressions/array.d.ts +0 -4
  31. package/out/types/src/evaluator/utils/array-utils.d.ts +0 -15
  32. package/out/types/src/tests/codegen.test.d.ts +0 -1
  33. package/out/types/src/tests/module-manager.test.d.ts +0 -1
  34. package/out/types/src/tests/parser.test.d.ts +0 -1
  35. package/out/types/src/tests/sample.test.d.ts +0 -0
  36. package/out/types/src/tests/std.test.d.ts +0 -1
  37. package/std/monad.yo +0 -152
@@ -1,70 +1,72 @@
1
- var Vf=Object.create;var Ul=Object.defineProperty;var xf=Object.getOwnPropertyDescriptor;var Mf=Object.getOwnPropertyNames;var Sf=Object.getPrototypeOf,Lf=Object.prototype.hasOwnProperty;var Af=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Mf(t))!Lf.call(e,o)&&o!==n&&Ul(e,o,{get:()=>t[o],enumerable:!(r=xf(t,o))||r.enumerable});return e};var Kn=(e,t,n)=>(n=e!=null?Vf(Sf(e)):{},Af(t||!e||!e.__esModule?Ul(n,"default",{value:e,enumerable:!0}):n,e));var Ea=Kn(require("fs")),kf=Kn(require("yargs")),bf=require("yargs/helpers");var Bl={name:"@shd101wyy/yo",displayName:"Yo",version:"0.0.3",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",format:'prettier --write "**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/check-liburing.js"},dependencies:{yargs:"^17.7.2"},devDependencies:{"@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0",glob:"^11.0.3",jest:"^29.7.0",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var Zo=require("child_process"),Jo=Kn(require("fs"));var hf=Kn(require("node:path"));var ei=class{constructor(){this.headers="";this.declarations="";this.code=""}emit(t,n=""){return this.code+=n+t,this.code}emitLine(t,n=""){return this.code+=n+t+`
1
+ var fd=Object.create;var Eu=Object.defineProperty;var dd=Object.getOwnPropertyDescriptor;var md=Object.getOwnPropertyNames;var yd=Object.getPrototypeOf,_d=Object.prototype.hasOwnProperty;var gd=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of md(t))!_d.call(e,o)&&o!==n&&Eu(e,o,{get:()=>t[o],enumerable:!(r=dd(t,o))||r.enumerable});return e};var zn=(e,t,n)=>(n=e!=null?fd(yd(e)):{},gd(t||!e||!e.__esModule?Eu(n,"default",{value:e,enumerable:!0}):n,e));var ld=require("child_process"),Ia=zn(require("fs")),ud=zn(require("yargs")),pd=require("yargs/helpers");var Na={name:"@shd101wyy/yo",displayName:"Yo",version:"0.0.5",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",lint:"eslint .",format:'prettier --write "**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/check-liburing.js",prepare:"husky"},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml,css,html}":["prettier --write"]},dependencies:{yargs:"^17.7.2"},devDependencies:{"@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0",glob:"^11.0.3",husky:"^9.1.7",jest:"^29.7.0","lint-staged":"^16.2.7",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var ri=require("child_process"),oi=zn(require("fs")),ni=zn(require("path"));var td=require("node:fs"),Sa=zn(require("node:path"));var si=class{constructor(){this.headers="";this.declarations="";this.code=""}emit(t,n=""){return this.code+=n+t,this.code}emitLine(t,n=""){return this.code+=n+t+`
2
2
  `,this.code}emitHeaderLine(t,n=""){return this.headers+=n+t+`
3
3
  `,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
4
4
  `,this.declarations}print(){return this.headers+`
5
5
  `+this.declarations+`
6
- `+this.code.trim()}};var ka=require("crypto");var ke={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}};var Ca=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function uo(e){return Ca.includes(e)}function Ln(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!uo(r)){t=!1;break}}return t}var ti=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function Pl(e,t){let n=")";if(!e[t])return-1;let r=e[t].type;if(r==="{")n="}";else if(r==="(")n=")";else if(r==="[")n="]";else throw this.formatErrorMessage(e[t],"Expected '{', '(' or '['");t=t+1;let o=1,i=-1;for(;;){let a=e[t];if(!a)return-1;if(a.type===n){if(o=o-1,o===0){i=t;break}}else a.type===r&&(o=o+1);t=t+1}return i}var Nf=0;function ht(){return`id${Nf++}`}function ni(e){return"yo"+(0,ka.createHash)("sha1").update(e).digest("hex").slice(0,8)}var Df=1;function Gl(e){return`_${ni(e)}_temp_`}function Rl(e){return`${Gl(e)}${Df++}`}function St(e,t){return t.startsWith(Gl(e))}var zl=new Map;function mr(e,t){let n="";for(let i=0;i<t.length;i++)if(uo(t[i])){let a=Ca.indexOf(t[i]);n+=`${a}`}else n+=t[i];let r=ni(e)+"_"+n,o=zl.get(r);return o===void 0?o=0:o++,zl.set(r,o),r+(o==0?"":`_${o}`)}function ba(e){return(0,ka.createHash)("sha1").update(e).digest("hex").slice(0,10)}function ql(e){for(let t in e.types){let{type:n}=e.types[t];n.cInclude&&e.cIncludes.add(n.cInclude)}for(let t in e.externFunctions){let{type:n}=e.externFunctions[t];n.cInclude&&e.cIncludes.add(n.cInclude)}}function Yl(e){e.emitter.emitHeaderLine("#ifndef _WIN32"),e.emitter.emitHeaderLine("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("");for(let t of e.cIncludes)e.emitter.emitHeaderLine(`#include ${t}`);e.emitter.emitHeaderLine(""),e.allocator==="mimalloc"?(e.emitter.emitHeaderLine("// Mimalloc compatibility layer - try mimalloc first, fallback to stdlib"),e.emitter.emitHeaderLine("#ifdef __has_include"),e.emitter.emitHeaderLine(" #if __has_include(<mimalloc.h>)"),e.emitter.emitHeaderLine(" #include <mimalloc.h>"),e.emitter.emitHeaderLine(" #define __yo_malloc mi_malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc mi_calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc mi_realloc"),e.emitter.emitHeaderLine(" #define __yo_free mi_free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc mi_aligned_alloc"),e.emitter.emitHeaderLine(" #else"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #endif"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" // Fallback for older compilers without __has_include"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#endif")):(e.emitter.emitHeaderLine("// Using libc allocator"),e.emitter.emitHeaderLine("#define __yo_malloc malloc"),e.emitter.emitHeaderLine("#define __yo_calloc calloc"),e.emitter.emitHeaderLine("#define __yo_realloc realloc"),e.emitter.emitHeaderLine("#define __yo_free free"),e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc")),e.emitter.emitHeaderLine("")}var Qn=class{constructor({characterIndex:t,message:n}){this.characterIndex=t,this.message=n}},Jt=class{constructor(t,n){this.tokenAndErrorList=[];this.tokenAndErrorList=t,this.isAssertionError=n||!1}toString(){return this.tokenAndErrorList.map(({token:n,errorMessage:r})=>`Error: ${r}
7
- ${jl({token:n})}`).join(`
6
+ `+this.code.trim()}};var Ba=require("crypto");var be={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}};var Da=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function fo(e){return Da.includes(e)}function Nn(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!fo(r)){t=!1;break}}return t}var li=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function Cu(e,t){let n=")";if(!e[t])return-1;let r=e[t].type;if(r==="{")n="}";else if(r==="(")n=")";else if(r==="[")n="]";else throw this.formatErrorMessage(e[t],"Expected '{', '(' or '['");t=t+1;let o=1,i=-1;for(;;){let a=e[t];if(!a)return-1;if(a.type===n){if(o=o-1,o===0){i=t;break}}else a.type===r&&(o=o+1);t=t+1}return i}function mo(e){return"yo"+(0,Ba.createHash)("sha1").update(e).digest("hex").slice(0,8)}var ui=new Map;function ct(e){let t=ui.get(e);return t===void 0&&(t=0),ui.set(e,t+1),`${mo(e)}_id_${t}`}function ku(e){ui.delete(e)}var bu=1;function wu(e){return`_${mo(e)}_temp_`}function Fu(e){return`${wu(e)}${bu++}`}function It(e,t){return t.startsWith(wu(e))}var Oa=new Map;function gr(e,t){let n="";for(let i=0;i<t.length;i++)if(fo(t[i])){let a=Da.indexOf(t[i]);n+=`${a}`}else n+=t[i];let r=mo(e)+"_"+n,o=Oa.get(r);return o===void 0?o=0:o++,Oa.set(r,o),r+(o==0?"":`_${o}`)}function Ua(e){return(0,Ba.createHash)("sha1").update(e).digest("hex").slice(0,10)}function Ra(){ui.clear(),Oa.clear(),bu=1}function Vu(e){for(let t in e.types){let{type:n}=e.types[t];n.cInclude&&e.cIncludes.add(n.cInclude)}for(let t in e.externFunctions){let{type:n}=e.externFunctions[t];n.cInclude&&e.cIncludes.add(n.cInclude)}}function xu(e){e.emitter.emitHeaderLine("#ifndef _WIN32"),e.emitter.emitHeaderLine("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("");for(let t of e.cIncludes)e.emitter.emitHeaderLine(`#include ${t}`);e.emitter.emitHeaderLine(""),e.allocator==="mimalloc"?(e.emitter.emitHeaderLine("// Mimalloc compatibility layer - try mimalloc first, fallback to stdlib"),e.emitter.emitHeaderLine("#ifdef __has_include"),e.emitter.emitHeaderLine(" #if __has_include(<mimalloc.h>)"),e.emitter.emitHeaderLine(" #include <mimalloc.h>"),e.emitter.emitHeaderLine(" #define __yo_malloc mi_malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc mi_calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc mi_realloc"),e.emitter.emitHeaderLine(" #define __yo_free mi_free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc mi_aligned_alloc"),e.emitter.emitHeaderLine(" #else"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #endif"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" // Fallback for older compilers without __has_include"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#endif")):(e.emitter.emitHeaderLine("// Using libc allocator"),e.emitter.emitHeaderLine("#define __yo_malloc malloc"),e.emitter.emitHeaderLine("#define __yo_calloc calloc"),e.emitter.emitHeaderLine("#define __yo_realloc realloc"),e.emitter.emitHeaderLine("#define __yo_free free"),e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc")),e.emitter.emitHeaderLine("")}var Jn=class{constructor({characterIndex:t,message:n}){this.characterIndex=t,this.message=n}},Gt=class{constructor(t,n,r){this.tokenAndErrorList=[];this.tokenAndErrorList=t,this.isAssertionError=n||!1,this.kind=r}toString(){return this.tokenAndErrorList.map(({token:n,errorMessage:r})=>`Error: ${r}
7
+ ${Mu({token:n})}`).join(`
8
8
 
9
- `)}};function jl({token:e}){let{position:t,modulePath:n,inputString:r}=e,{row:o,column:i}=t,s=r.split(`
9
+ `)}};function Mu({token:e}){let{position:t,modulePath:n,inputString:r}=e,{row:o,column:i}=t,s=r.split(`
10
10
  `)[o];return`${n}:${o+1}:${i+1}:
11
11
  ${s}
12
- ${" ".repeat(i+Math.floor(e.value.length/2))}^`}function p({token:e,errorMessage:t,cause:n,isAssertionError:r}){let o=`${t.trim()}
12
+ ${" ".repeat(i+Math.floor(e.value.length/2))}^`}function p({token:e,errorMessage:t,cause:n,isAssertionError:r,kind:o}){let i=`${t.trim()}
13
13
 
14
- ${jl({token:e})}`;return new Jt([{token:e,errorMessage:o+(n!=null&&n.message?`
15
- `+n.message:"")}],r)}function st(e,t){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new Jt(e,t)}var Fa;function Wl(e){Fa=e}function S({expr:e,env:t,context:n}){if(!Fa)throw new Error("Internal Error: evaluateExpression function is not set.");return Fa({expr:e,env:t,context:n})}function Hl(e,t){let n=[],r=0,o=0;for(let i=0;i<e.length;i++){let a=e[i],s=i-o,l=i,u="",d=i;if(e[d]===".")for(;e[d]===".";)u+=e[d],d=d+1;else for(;uo(e[d])&&e[d]!==".";)u+=e[d],d=d+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=d-1;continue}switch(a){case" ":case" ":case`
14
+ ${Mu({token:e})}`;return new Gt([{token:e,errorMessage:i+(n!=null&&n.message?`
15
+ `+n.message:"")}],r,o)}function st(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new Gt(e,t,n)}var Pa;function Lu(e){Pa=e}function M({expr:e,env:t,context:n}){if(!Pa)throw new Error("Internal Error: evaluateExpression function is not set.");return Pa({expr:e,env:t,context:n})}function Su(e,t){let n=[],r=0,o=0;for(let i=0;i<e.length;i++){let a=e[i],s=i-o,l=i,u="",d=i;if(e[d]===".")for(;e[d]===".";)u+=e[d],d=d+1;else for(;fo(e[d])&&e[d]!==".";)u+=e[d],d=d+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=d-1;continue}switch(a){case" ":case" ":case`
16
16
  `:case"\r":{let c="",f=i,m=r;for(;e[f]===" "||e[f]===" "||e[f]===`
17
17
  `||e[f]==="\r";)c+=e[f],e[f]===`
18
18
  `&&(r++,o=f+1),f=f+1;n.push({type:"whitespace",value:c,position:{row:m,column:s,character:l},modulePath:t,inputString:e}),i=f-1;break}case"/":if(e[i+1]==="/"){let c="",f=i;for(;e[f]!==`
19
19
  `&&f<e.length;)c+=e[f],f=f+1;n.push({type:"single_line_comment",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=f-1}else if(e[i+1]==="*"){let c=i,f="",m=r,y=1;for(f+=e[c],c++,f+=e[c],c++;y>0&&c<e.length;){if(e[c]===`
20
- `&&(o=c+1,r++),e[c]==="/"&&e[c+1]==="*"){y++,f+="/*",c+=2;continue}if(e[c]==="*"&&e[c+1]==="/"){y--,f+="*/",c+=2;continue}f+=e[c],c++}if(y>0)throw new Qn({message:"Unterminated multi-line comment",characterIndex:e.length-1});n.push({type:"multi_line_comment",value:f,position:{row:m,column:s,character:l},modulePath:t,inputString:e}),i=c-1}else throw new Qn({message:`Unexpected character ${a}`,characterIndex:i+1});break;case"(":n.push({type:"(",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case")":n.push({type:")",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"[":n.push({type:"[",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"]":n.push({type:"]",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"{":n.push({type:"{",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"}":n.push({type:"}",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"'":{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==="'"){i=f;break}c+=e[f]}if(c.length===1||c.length===2&&c[0]==="\\")n.push({type:"char",value:`'${c}'`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});else throw new Qn({message:`Invalid char '${c}', expected char to have length 1.`,characterIndex:i});break}case'"':{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==='"'){i=f;break}c+=e[f]}n.push({type:"string",value:`"${c}"`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case"`":{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==="`"){i=f;break}c+=e[f]}if(!ti.test(c))throw new Qn({message:`Invalid backtick identifier \`${c}\``,characterIndex:i});n.push({type:"backtick_identifier",value:`\`${c}\``,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case",":n.push({type:",",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case";":n.push({type:";",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:if(/[0-9]/.test(a)){let c=i,f=a;i=i+1;let m=/[0-9_]/;for(e[i-1]==="0"&&typeof e[i]=="string"&&(e[i]==="x"||e[i]==="X"?(f+=e[i],i=i+1,m=/[0-9A-Fa-f]/):e[i]==="b"||e[i]==="B"?(f+=e[i],i=i+1,m=/[01]/):(e[i]==="o"||e[i]==="O")&&(f+=e[i],i=i+1,m=/[0-7]/));typeof e[i]=="string"&&m.test(e[i]);)f+=e[i],i=i+1;if(e[i]==="."&&e[c-1]!=="."&&(e[i+1]??"").match(/[0-9]/)){for(f+=e[i],i=i+1;typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;if((e[i]==="e"||e[i]==="E")&&typeof e[i+1]=="string"&&(e[i+1]==="+"||e[i+1]==="-"||/[0-9]/.test(e[i+1])))for(f+=e[i],i=i+1,(e[i]==="+"||e[i]==="-")&&(f+=e[i],i=i+1);typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;n.push({type:"float",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=i-1}else{if((e[i]==="e"||e[i]==="E")&&typeof e[i+1]=="string"&&(e[i+1]==="+"||e[i+1]==="-"||/[0-9]/.test(e[i+1])))for(f+=e[i],i=i+1,(e[i]==="+"||e[i]==="-")&&(f+=e[i],i=i+1);typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;n.push({type:"integer",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=i-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let c=a,f=i;for(i=i+1;typeof e[i]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[i]);)c+=e[i],i=i+1;if(i=i-1,(e[i+1]==="!"||e[i+1]==="?")&&ti.test(c+e[i+1])&&(i=i+1,c+=e[i]),ti.test(c))switch(c){case"true":case"false":n.push({type:"bool",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new Qn({message:`Invalid identifier ${c}`,characterIndex:f})}else throw new Qn({message:`Unexpected character ${a}`,characterIndex:i});break}}return n}var wr=class{constructor({modulePath:t,inputString:n}){this.modulePath=t,this.inputString=n,this.tokens=Hl(n,t),this.program=[],this.parse(this.tokens)}skipWhitespace(t,n){for(;t[n]&&(t[n].type==="whitespace"||t[n].type==="single_line_comment"||t[n].type==="multi_line_comment");)n=n+1;return n}skipWhitespaceBackward(t,n){for(;t[n]&&(t[n].type==="whitespace"||t[n].type==="single_line_comment"||t[n].type==="multi_line_comment");)n=n-1;return n}isParenthesizedExpression(t,n,r){return n=this.skipWhitespace(t,n),r=this.skipWhitespaceBackward(t,r),!!t[n]&&t[n].type==="("&&!!t[r]&&t[r].type===")"&&Pl(t,n)===r}parseParenExpr({tokens:t,index:n}){var a;let r=n;if(t[n].type!=="(")throw p({token:t[n],errorMessage:"Expected left paren"});if(((a=t[n+1])==null?void 0:a.type)===")")return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:A.tuple,position:t[n].position,modulePath:this.modulePath,inputString:this.inputString}},args:[],token:t[n]},index:n+2};let o=this.parseExpression({tokens:t,index:n+1}),i=o.expr;if(n=o.index,t[n].type===")")return{expr:i,index:n+1};{let s,l=[i];for(;;){if(!t[n])throw p({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!s||s===",")s=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!s||s===";")s=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in (...)'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type===")")break;let{expr:d,index:c}=this.parseExpression({tokens:t,index:n});l.push(d),n=c}let u=s===";"||!s;return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:u?A.Tuple[0]:A.tuple,position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:l,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw p({token:t[n],errorMessage:"Expected left bracket"});n=n+1;let o,i=[];for(;;){if(!t[n])throw p({token:t[n-1],errorMessage:"Expected ] or , for array"});if(t[n].type===","){if(!o||o===",")o=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in [...]'});n=n+1}else if(t[n].type===";"){if(!o||o===";")o=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in [...]'});n=n+1}if(t[n].type==="]")break;let{expr:u,index:d}=this.parseExpression({tokens:t,index:n});i.push(u),n=d}let a=o===";"||!o;if(a&&i.length>2)throw p({token:t[r],errorMessage:`Expected at 2 arguments for Array type, or 1 argument for Slice type, got ${i.length}`});let s=a&&i.length===2,l=a&&i.length===1;return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:s?A.Array[0]:l?A.Slice[0]:A.array,position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}parseCurlyBracketExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="{")throw p({token:t[n],errorMessage:"Expected left curly bracket"});let o=[],i;for(n=n+1;;){if(n=this.skipWhitespace(t,n),!t[n])throw p({token:t[n-1],errorMessage:'Unexpected end of curly bracket. Expected "}" or "," or ";"'});if(t[n].type===","){if(!i||i===",")i=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in {...}'});n=n+1}else if(t[n].type===";"){if(!i||i===";")i=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in {...}'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type==="}"){let l=t[this.skipWhitespaceBackward(t,n-1)];if(i===";"&&l&&(l.type===";"||l.type==="{")){let u={type:"identifier",value:A.tuple,position:l.position,modulePath:this.modulePath,inputString:this.inputString};o.push({tag:"FuncCall",func:{tag:"Atom",token:u},args:[],token:u})}break}let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});o.push(a),n=s}if(i===","||!i){for(let s=0;s<o.length;s++){let l=o[s];if(j(l)){let u={type:"operator",value:":",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString},d={tag:"FuncCall",func:{tag:"Atom",token:u},isInfix:!0,args:[l,l],token:u};o[s]=d}}return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:"_",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}else return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:A.begin[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}parsePrimary({tokens:t,index:n}){n=this.skipWhitespace(t,n);let r=t[n];if(!r)throw p({token:ke,errorMessage:"Unexpected end of input"});let o=null;switch(r.type){case"identifier":case"operator":case"bool":case"integer":case"float":case"string":case"char":{o={expr:{tag:"Atom",token:r},index:n+1};break}case"(":{o=this.parseParenExpr({tokens:t,index:n});break}case"[":{o=this.parseArrayExpr({tokens:t,index:n});break}case"{":{o=this.parseCurlyBracketExpr({tokens:t,index:n});break}case".":{o={expr:{tag:"Atom",token:r},index:n+1};break}default:throw p({token:r,errorMessage:`Unexpected token "${r.type}"`})}return o}isOperatorAtLineStart(t,n){for(let r=t.length-1;r>=0;r--){let o=t[r];if(o.type==="whitespace"&&o.value.includes(`
21
- `))return t.slice(r+1).every(s=>s.type==="whitespace");if(o.type!=="whitespace")return!1}return t.every(r=>r.type==="whitespace")}parseLeftAssociativeOperator({primaryExpr:t,operatorToken:n,rhs:r,tokens:o,index:i}){if(r.tag==="FuncCall"&&r.isInfix&&r.func.tag==="Atom"&&r.func.token.type!=="."){let a=r.args[0],s=r.args[1],l=r.func,u={tag:"FuncCall",func:{tag:"Atom",token:n},args:[t,a],isInfix:!0,token:n};return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:l,args:[u,s],isInfix:!0,token:l.token},tokens:o,index:i})}else return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:{tag:"Atom",token:n},args:[t,r],isInfix:!0,token:n},tokens:o,index:i})}getExprMinimumColumnNumber(t){return j(t)?t.token.position.column:Math.min(this.getExprMinimumColumnNumber(t.func),...t.args.map(n=>this.getExprMinimumColumnNumber(n)))}parsePrimaryEnd({primaryExpr:t,tokens:n,index:r}){var u,d,c,f,m;let o=this.skipWhitespace(n,r),i=o!==r,a=((u=n[r-1])==null?void 0:u.type)==="whitespace";r=o;let s=n[o];if(!s||s.type===";"||s.type===","||s.type===")"||s.type==="]"||s.type==="}")return{expr:t,index:r};let l=t.tag==="Atom"&&t.token.type===".";if(l||s.type==="."&&!i&&!a&&((d=n[o+1])==null?void 0:d.type)!=="whitespace"){let{expr:y,index:g}=this.parsePrimary({tokens:n,index:l?r:r+1});r=g;let h={expr:{tag:"FuncCall",func:{tag:"Atom",token:l?t.token:s},args:l?[y]:[t,y],isInfix:!l,token:l?t.token:s},index:r};for(;n[r]&&n[r].type===".";){let{expr:_,index:E}=this.parsePrimary({tokens:n,index:r+1});h={expr:{tag:"FuncCall",func:{tag:"Atom",token:s},args:[h.expr,_],isInfix:!0,token:s},index:E},r=E}return this.parsePrimaryEnd({primaryExpr:h.expr,tokens:n,index:h.index})}else if((s.type==="operator"||s.type==="."&&!i||s.type==="backtick_identifier")&&((c=n[r+1])==null?void 0:c.type)!=="("){let y=this.skipWhitespace(n,r+1),{expr:g,index:h}=this.parseExpression({tokens:n,index:y});if(g.tag==="FuncCall"&&g.isInfix&&g.func.tag==="Atom"&&g.func.token.type!=="."&&!this.isParenthesizedExpression(n,y,h-1)){let _=`Ambiguous operator precedence.
20
+ `&&(o=c+1,r++),e[c]==="/"&&e[c+1]==="*"){y++,f+="/*",c+=2;continue}if(e[c]==="*"&&e[c+1]==="/"){y--,f+="*/",c+=2;continue}f+=e[c],c++}if(y>0)throw new Jn({message:"Unterminated multi-line comment",characterIndex:e.length-1});n.push({type:"multi_line_comment",value:f,position:{row:m,column:s,character:l},modulePath:t,inputString:e}),i=c-1}else throw new Jn({message:`Unexpected character ${a}`,characterIndex:i+1});break;case"(":n.push({type:"(",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case")":n.push({type:")",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"[":n.push({type:"[",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"]":n.push({type:"]",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"{":n.push({type:"{",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"}":n.push({type:"}",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"'":{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==="'"){i=f;break}c+=e[f]}if(c.length===1||c.length===2&&c[0]==="\\")n.push({type:"char",value:`'${c}'`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});else throw new Jn({message:`Invalid char '${c}', expected char to have length 1.`,characterIndex:i});break}case'"':{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==='"'){i=f;break}c+=e[f]}n.push({type:"string",value:`"${c}"`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case"`":{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==="`"){i=f;break}c+=e[f]}if(!li.test(c))throw new Jn({message:`Invalid backtick identifier \`${c}\``,characterIndex:i});n.push({type:"backtick_identifier",value:`\`${c}\``,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case",":n.push({type:",",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case";":n.push({type:";",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:if(/[0-9]/.test(a)){let c=i,f=a;i=i+1;let m=/[0-9_]/;for(e[i-1]==="0"&&typeof e[i]=="string"&&(e[i]==="x"||e[i]==="X"?(f+=e[i],i=i+1,m=/[0-9A-Fa-f]/):e[i]==="b"||e[i]==="B"?(f+=e[i],i=i+1,m=/[01]/):(e[i]==="o"||e[i]==="O")&&(f+=e[i],i=i+1,m=/[0-7]/));typeof e[i]=="string"&&m.test(e[i]);)f+=e[i],i=i+1;if(e[i]==="."&&e[c-1]!=="."&&(e[i+1]??"").match(/[0-9]/)){for(f+=e[i],i=i+1;typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;if((e[i]==="e"||e[i]==="E")&&typeof e[i+1]=="string"&&(e[i+1]==="+"||e[i+1]==="-"||/[0-9]/.test(e[i+1])))for(f+=e[i],i=i+1,(e[i]==="+"||e[i]==="-")&&(f+=e[i],i=i+1);typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;n.push({type:"float",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=i-1}else{if((e[i]==="e"||e[i]==="E")&&typeof e[i+1]=="string"&&(e[i+1]==="+"||e[i+1]==="-"||/[0-9]/.test(e[i+1])))for(f+=e[i],i=i+1,(e[i]==="+"||e[i]==="-")&&(f+=e[i],i=i+1);typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;n.push({type:"integer",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=i-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let c=a,f=i;for(i=i+1;typeof e[i]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[i]);)c+=e[i],i=i+1;if(i=i-1,(e[i+1]==="!"||e[i+1]==="?")&&li.test(c+e[i+1])&&(i=i+1,c+=e[i]),li.test(c))switch(c){case"true":case"false":n.push({type:"bool",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new Jn({message:`Invalid identifier ${c}`,characterIndex:f})}else throw new Jn({message:`Unexpected character ${a}`,characterIndex:i});break}}return n}var Mr=class{constructor({modulePath:t,inputString:n}){this.modulePath=t,this.inputString=n,this.tokens=Su(n,t),this.program=[],this.parse(this.tokens)}skipWhitespace(t,n){for(;t[n]&&(t[n].type==="whitespace"||t[n].type==="single_line_comment"||t[n].type==="multi_line_comment");)n=n+1;return n}skipWhitespaceBackward(t,n){for(;t[n]&&(t[n].type==="whitespace"||t[n].type==="single_line_comment"||t[n].type==="multi_line_comment");)n=n-1;return n}isParenthesizedExpression(t,n,r){return n=this.skipWhitespace(t,n),r=this.skipWhitespaceBackward(t,r),!!t[n]&&t[n].type==="("&&!!t[r]&&t[r].type===")"&&Cu(t,n)===r}parseParenExpr({tokens:t,index:n}){var a;let r=n;if(t[n].type!=="(")throw p({token:t[n],errorMessage:"Expected left paren"});if(((a=t[n+1])==null?void 0:a.type)===")")return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:A.tuple,position:t[n].position,modulePath:this.modulePath,inputString:this.inputString}},args:[],token:t[n]},index:n+2};let o=this.parseExpression({tokens:t,index:n+1}),i=o.expr;if(n=o.index,t[n].type===")")return{expr:i,index:n+1};{let s,l=[i];for(;;){if(!t[n])throw p({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!s||s===",")s=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!s||s===";")s=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in (...)'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type===")")break;let{expr:d,index:c}=this.parseExpression({tokens:t,index:n});l.push(d),n=c}let u=s===";"||!s;return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:u?A.Tuple[0]:A.tuple,position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:l,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw p({token:t[n],errorMessage:"Expected left bracket"});n=n+1;let o,i=[];for(;;){if(!t[n])throw p({token:t[n-1],errorMessage:"Expected ] or , for array"});if(t[n].type===","){if(!o||o===",")o=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in [...]'});n=n+1}else if(t[n].type===";"){if(!o||o===";")o=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in [...]'});n=n+1}if(t[n].type==="]")break;let{expr:u,index:d}=this.parseExpression({tokens:t,index:n});i.push(u),n=d}let a=o===";"||!o;if(a&&i.length>2)throw p({token:t[r],errorMessage:`Expected at 2 arguments for Array type, or 1 argument for Slice type, got ${i.length}`});let s=a&&i.length===2,l=a&&i.length===1;return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:s?A.Array[0]:l?A.Slice[0]:A.array,position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}parseCurlyBracketExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="{")throw p({token:t[n],errorMessage:"Expected left curly bracket"});let o=[],i;for(n=n+1;;){if(n=this.skipWhitespace(t,n),!t[n])throw p({token:t[n-1],errorMessage:'Unexpected end of curly bracket. Expected "}" or "," or ";"'});if(t[n].type===","){if(!i||i===",")i=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in {...}'});n=n+1}else if(t[n].type===";"){if(!i||i===";")i=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in {...}'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type==="}"){let l=t[this.skipWhitespaceBackward(t,n-1)];if(i===";"&&l&&(l.type===";"||l.type==="{")){let u={type:"identifier",value:A.tuple,position:l.position,modulePath:this.modulePath,inputString:this.inputString};o.push({tag:"FuncCall",func:{tag:"Atom",token:u},args:[],token:u})}break}let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});o.push(a),n=s}if(i===","||!i){for(let s=0;s<o.length;s++){let l=o[s];if(Q(l)){let u={type:"operator",value:":",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString},d={tag:"FuncCall",func:{tag:"Atom",token:u},isInfix:!0,args:[l,l],token:u};o[s]=d}}return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:"_",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}else return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:A.begin[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}parsePrimary({tokens:t,index:n}){n=this.skipWhitespace(t,n);let r=t[n];if(!r)throw p({token:be,errorMessage:"Unexpected end of input"});let o=null;switch(r.type){case"identifier":case"operator":case"bool":case"integer":case"float":case"string":case"char":{o={expr:{tag:"Atom",token:r},index:n+1};break}case"(":{o=this.parseParenExpr({tokens:t,index:n});break}case"[":{o=this.parseArrayExpr({tokens:t,index:n});break}case"{":{o=this.parseCurlyBracketExpr({tokens:t,index:n});break}case".":{o={expr:{tag:"Atom",token:r},index:n+1};break}default:throw p({token:r,errorMessage:`Unexpected token "${r.type}"`})}return o}isOperatorAtLineStart(t,n){for(let r=t.length-1;r>=0;r--){let o=t[r];if(o.type==="whitespace"&&o.value.includes(`
21
+ `))return t.slice(r+1).every(s=>s.type==="whitespace");if(o.type!=="whitespace")return!1}return t.every(r=>r.type==="whitespace")}parseLeftAssociativeOperator({primaryExpr:t,operatorToken:n,rhs:r,tokens:o,index:i}){if(r.tag==="FuncCall"&&r.isInfix&&r.func.tag==="Atom"&&r.func.token.type!=="."){let a=r.args[0],s=r.args[1],l=r.func,u={tag:"FuncCall",func:{tag:"Atom",token:n},args:[t,a],isInfix:!0,token:n};return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:l,args:[u,s],isInfix:!0,token:l.token},tokens:o,index:i})}else return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:{tag:"Atom",token:n},args:[t,r],isInfix:!0,token:n},tokens:o,index:i})}getExprMinimumColumnNumber(t){return Q(t)?t.token.position.column:Math.min(this.getExprMinimumColumnNumber(t.func),...t.args.map(n=>this.getExprMinimumColumnNumber(n)))}parsePrimaryEnd({primaryExpr:t,tokens:n,index:r}){var u,d,c,f,m;let o=this.skipWhitespace(n,r),i=o!==r,a=((u=n[r-1])==null?void 0:u.type)==="whitespace";r=o;let s=n[o];if(!s||s.type===";"||s.type===","||s.type===")"||s.type==="]"||s.type==="}")return{expr:t,index:r};let l=t.tag==="Atom"&&t.token.type===".";if(l||s.type==="."&&!i&&!a&&((d=n[o+1])==null?void 0:d.type)!=="whitespace"){let{expr:y,index:h}=this.parsePrimary({tokens:n,index:l?r:r+1});r=h;let _={expr:{tag:"FuncCall",func:{tag:"Atom",token:l?t.token:s},args:l?[y]:[t,y],isInfix:!l,token:l?t.token:s},index:r};for(;n[r]&&n[r].type===".";){let{expr:g,index:$}=this.parsePrimary({tokens:n,index:r+1});_={expr:{tag:"FuncCall",func:{tag:"Atom",token:s},args:[_.expr,g],isInfix:!0,token:s},index:$},r=$}return this.parsePrimaryEnd({primaryExpr:_.expr,tokens:n,index:_.index})}else if((s.type==="operator"||s.type==="."&&!i||s.type==="backtick_identifier")&&((c=n[r+1])==null?void 0:c.type)!=="("){let y=this.skipWhitespace(n,r+1),{expr:h,index:_}=this.parseExpression({tokens:n,index:y});if(h.tag==="FuncCall"&&h.isInfix&&h.func.tag==="Atom"&&h.func.token.type!=="."&&!this.isParenthesizedExpression(n,y,_-1)){let g=`Ambiguous operator precedence.
22
22
  Please use parentheses to clarify:
23
23
 
24
- ${T(t)} ${s.value} (${T(g)})
24
+ ${T(t)} ${s.value} (${T(h)})
25
25
  // or
26
- (${T(t)} ${s.value} ${T(g.args[0])}) ${T(g.func)} ${T(g.args[1])}
26
+ (${T(t)} ${s.value} ${T(h.args[0])}) ${T(h.func)} ${T(h.args[1])}
27
27
 
28
28
  Or use newline after "${s.value}" to confirm the right-associativity.
29
- `,k=n.slice(r+1,y).some(M=>M.type==="whitespace"&&M.value.includes(`
30
- `)),w=n.slice(0,r),$=this.isOperatorAtLineStart(w,r),b=n.slice(r+1,y),F=$&&b.length>0&&((f=b[0])==null?void 0:f.type)==="whitespace"&&((m=b[0])==null?void 0:m.value.includes(`
31
- `));if(!(k&&!$)){if(!F){if($)return this.parseLeftAssociativeOperator({primaryExpr:t,operatorToken:s,rhs:g,tokens:n,index:h});throw p({token:s,errorMessage:_})}}}return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:{tag:"Atom",token:s},args:[t,g],isInfix:!0,token:s},tokens:n,index:h})}else if(!i&&s.type==="("){let y=this.parseFunctionCall({func:t,tokens:n,index:r+1,hasWhitespace:!1});return this.parsePrimaryEnd({primaryExpr:y.expr,tokens:n,index:y.index})}else{let y=this.parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:!0});return this.parsePrimaryEnd({primaryExpr:y.expr,tokens:n,index:y.index})}}parseFunctionArguments({tokens:t,index:n,hasWhitespace:r}){var i;let o=[];if(n=this.skipWhitespace(t,n),!r&&((i=t[n])==null?void 0:i.type)===")")return{args:o,index:n+1};for(;;){let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});o.push(a),n=s;let l=t[n];if((l==null?void 0:l.type)===",")n=n+1;else{if(!l||l.type===";"||l.type==="]"||l.type==="}")return{args:o,index:n};if(l.type===")")return{args:o,index:r?n:n+1};throw p({token:l,errorMessage:r?"Expected ; to end the function call":`Expected , to separate arguments
29
+ `,k=n.slice(r+1,y).some(L=>L.type==="whitespace"&&L.value.includes(`
30
+ `)),b=n.slice(0,r),E=this.isOperatorAtLineStart(b,r),w=n.slice(r+1,y),F=E&&w.length>0&&((f=w[0])==null?void 0:f.type)==="whitespace"&&((m=w[0])==null?void 0:m.value.includes(`
31
+ `));if(!(k&&!E)){if(!F){if(E)return this.parseLeftAssociativeOperator({primaryExpr:t,operatorToken:s,rhs:h,tokens:n,index:_});throw p({token:s,errorMessage:g})}}}return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:{tag:"Atom",token:s},args:[t,h],isInfix:!0,token:s},tokens:n,index:_})}else if(!i&&s.type==="("){let y=this.parseFunctionCall({func:t,tokens:n,index:r+1,hasWhitespace:!1});return this.parsePrimaryEnd({primaryExpr:y.expr,tokens:n,index:y.index})}else{let y=this.parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:!0});return this.parsePrimaryEnd({primaryExpr:y.expr,tokens:n,index:y.index})}}parseFunctionArguments({tokens:t,index:n,hasWhitespace:r}){var i;let o=[];if(n=this.skipWhitespace(t,n),!r&&((i=t[n])==null?void 0:i.type)===")")return{args:o,index:n+1};for(;;){let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});o.push(a),n=s;let l=t[n];if((l==null?void 0:l.type)===",")n=n+1;else{if(!l||l.type===";"||l.type==="]"||l.type==="}")return{args:o,index:n};if(l.type===")")return{args:o,index:r?n:n+1};throw p({token:l,errorMessage:r?"Expected ; to end the function call":`Expected , to separate arguments
32
32
  or ) to end the function call`})}}}parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:o}){let{args:i,index:a}=this.parseFunctionArguments({tokens:n,index:r,hasWhitespace:o});return r=a,{expr:{tag:"FuncCall",func:t,args:i,token:t.token},index:r}}parseExpression({tokens:t,index:n}){n=this.skipWhitespace(t,n);let{expr:r,index:o}=this.parsePrimary({tokens:t,index:n});return this.parsePrimaryEnd({primaryExpr:r,tokens:t,index:o})}programToString(){return this.program.map(n=>T(n)).join(`;
33
- `)}parse(t){let n=0,r=[];for(;n<t.length;){switch(t[n].type){case"whitespace":case";":case"single_line_comment":case"multi_line_comment":{n=n+1;continue}}if(n>=t.length)break;try{let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});r.push(a),n=s}catch(a){this.parserError=a;break}}let o=t[this.skipWhitespaceBackward(t,t.length-1)];if(o&&o.type===";"){let i={type:"identifier",value:A.tuple,position:o.position,modulePath:this.modulePath,inputString:this.inputString};r.push({tag:"FuncCall",func:{tag:"Atom",token:i},args:[],token:i})}this.program=r}getProgram(){return this.program}getParserError(){return this.parserError}getTokens(){return this.tokens}};function Gt(e){let t=new wr({modulePath:`auto-generated://
33
+ `)}parse(t){let n=0,r=[];for(;n<t.length;){switch(t[n].type){case"whitespace":case";":case"single_line_comment":case"multi_line_comment":{n=n+1;continue}}if(n>=t.length)break;try{let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});r.push(a),n=s}catch(a){this.parserError=a;break}}let o=t[this.skipWhitespaceBackward(t,t.length-1)];if(o&&o.type===";"){let i={type:"identifier",value:A.tuple,position:o.position,modulePath:this.modulePath,inputString:this.inputString};r.push({tag:"FuncCall",func:{tag:"Atom",token:i},args:[],token:i})}this.program=r}getProgram(){return this.program}getParserError(){return this.parserError}getTokens(){return this.tokens}};function Yt(e){let t=new Mr({modulePath:`auto-generated://
34
34
  // === START auto-generated code ===
35
35
  ${e}
36
36
  // === END auto-generated code ===
37
37
  `,inputString:e});if(t.getParserError())throw t.getParserError();let n=t.getProgram();if(n.length!==1)throw new Error(`Expected exactly one expression from parsed code, got ${n.length}: "${e}"
38
38
  ${n.map(r=>T(r)).join(`
39
39
  `)}
40
- `);return n[0]}function je(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return x(e.value);case"ComptInt":case"ComptFloat":return e.value.toString();case"ComptString":return JSON.stringify(e.value);case"ComptList":return`compt_list(${e.elements.map(je).join(", ")})`;case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return e.value.toString();case"Bool":return e.value.toString();case"Array":return`[${e.elements.map(je).join(", ")}${e.elements.length===1?",":""}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(je).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Ln(r)&&(r=`(${r})`),e.type.fields[n].isCompileTimeOnly&&(r=Ln(r)?`compt${r}`:`compt(${r})`),`${r}: ${je(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let o=(t==null?void 0:t.fields[r].label)??"_";return Ln(o)&&(o=`(${o})`),t!=null&&t.fields[r].isCompileTimeOnly&&(o=Ln(o)?`compt${o}`:`compt(${o})`),`${o}: ${je(n)}`}).join(", ")})`}case"Function":return e.funcName?`<fn ${e.funcName}>`:e.type.typeName?`<fn ${e.type.typeName}>`:"<fn>";case"Module":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Ln(r)&&(r=`(${r})`),`${r}: ${je(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${T(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<compt ${x(e.type)}>`;default:throw new Error("valueToString: Unsupported value")}}function G(e){return(e==null?void 0:e.tag)==="Type"}function Zn(e){return(e==null?void 0:e.tag)==="ComptInt"}function ri(e){return(e==null?void 0:e.tag)==="ComptFloat"}function We(e){return(e==null?void 0:e.tag)==="ComptString"}function Bn(e){return(e==null?void 0:e.tag)==="ComptList"}function Kl(e){return Bn(e)&&dt(e.type.childType)}function ct(e){return(e==null?void 0:e.tag)==="ComptInt"||(e==null?void 0:e.tag)==="ComptFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function et(e){return(e==null?void 0:e.tag)==="Bool"}function Fe(e){return(e==null?void 0:e.tag)==="Function"}function Ue(e){return(e==null?void 0:e.tag)==="Unknown"}function ln(e){return(e==null?void 0:e.tag)==="Tuple"}function tn(e){return(e==null?void 0:e.tag)==="Struct"}function lr(e){return(e==null?void 0:e.tag)==="Array"}function Nt(e){return(e==null?void 0:e.tag)==="Enum"}function Ke(e){return(e==null?void 0:e.tag)==="Module"}function Rt(e){return(e==null?void 0:e.tag)==="Expr"}function ae(e){return{tag:"Type",type:At(e),value:e}}function un(e){return{tag:"ComptString",type:Ot(),value:e}}function kn(e,t){return{tag:"ComptList",type:po(e),elements:t}}function Dt(e,t){let n;if(e==="ComptInt")n=ur();else if(e==="ComptFloat")n=xr();else if(e==="U8")n=pr();else if(e==="I8")n=Sr();else if(e==="U16")n=Lr();else if(e==="I16")n=Ar();else if(e==="U32")n=Ir();else if(e==="I32")n=cr();else if(e==="U64")n=Nr();else if(e==="I64")n=Dr();else if(e==="F32")n=Or();else if(e==="F64")n=fr();else if(e==="Usize")n=_t();else if(e==="Isize")n=Mr();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Pn(e){return Dt("ComptInt",e)}function oi(e){return Dt("ComptFloat",e)}function it(e){return{tag:"Bool",type:Qe(),value:e}}function re(e,t,n){if(ft(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${x(e)}`);let r=wn(e,t,void 0,void 0,void 0,n);return ae(r)}return{tag:"Unknown",type:e,variableName:t}}function bn(e,t){return{tag:"Struct",type:e,fields:t}}function Vr(e,t){return{tag:"Module",type:e,fields:t}}function ii(e,t){return{tag:"Tuple",type:e,fields:t}}function Jn(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function zn(e,t){return{tag:"Array",type:e,elements:t}}function Fn(e){return{tag:"Expr",type:jt(),value:e}}function Lt(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return W({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(We(n)&&We(r))return n.value===r.value;if(Bn(n)&&Bn(r)){if(n.elements.length!==r.elements.length)return!1;for(let o=0;o<n.elements.length;o++)if(!Lt({value:n.elements[o],env:e.env},{value:r.elements[o],env:t.env}))return!1;return!0}else{if(ct(n)&&ct(r))return n.value===r.value;if(et(n)&&et(r))return n.value===r.value;if(lr(n)&&lr(r)){if(n.elements.length!==r.elements.length)return!1;for(let o=0;o<n.elements.length;o++)if(!Lt({value:n.elements[o],env:e.env},{value:r.elements[o],env:t.env}))return!1;return!0}else if(ln(n)&&ln(r)){if(n.fields.length!==r.fields.length)return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(tn(n)&&tn(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(Nt(n)&&Nt(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(Ke(n)&&Ke(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else{if(Rt(n)&&Rt(r))return n.value===r.value||ai(n.value,r.value);if(Ue(n)&&Ue(r)){let o,i;if(n.variableName){let a=me(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ue(s.value)&&(o=s.value)}}if(r.variableName){let a=me(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ue(s.value)&&(i=s.value)}}return o&&i?Lt({value:o,env:e.env},{value:i,env:t.env}):o||i?!1:W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Ue(n)&&!Ue(r)){if(n.variableName){let o=me(e.env,n.variableName);if(o.length>0){let i=o[o.length-1];if(i.value&&!Ue(i.value))return Lt({value:i.value,env:e.env},{value:r,env:t.env})}}return!1}else if(!Ue(n)&&Ue(r)){if(r.variableName){let o=me(t.env,r.variableName);if(o.length>0){let i=o[o.length-1];if(i.value&&!Ue(i.value))return Lt({value:n,env:e.env},{value:i.value,env:t.env})}}return!1}else return!1}}}function Ql(e,t){return!ft(e)||!ft(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function An(e,t){return ee(t)?e===t.id:$e(t)?t.fields.some(n=>An(e,n.type)):Ve(t)?t.variants.some(n=>n.fields?n.fields.some(r=>An(e,r.type)):!1):He(t)?t.fields.some(n=>An(e,n.type)):Oe(t)||at(t)||mt(t)?An(e,t.childType):De(t)?!1:gt(t)?An(e,t.childType):ce(t)?t.parameters.some(n=>An(e,n.type))||An(e,t.return.type):Wt(t)?An(e,t.isFuture.outputType):Ut(t)?An(e,t.isFn.callType):!1}function pt(e,t,n=[]){if(n.find(r=>r.expected===e.type&&r.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),ee(e.type)&&ee(t.type)){let r=fn(e.env,e.type),o=fn(t.env,t.type);if(ee(r))if(ee(o)){if(r!==o){let i=ae(t.type);{let a=me(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Xe(e.env,s,{...s,value:i});else{let{env:l}=we({env:e.env,variable:{name:e.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=l}}{let a=me(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Xe(t.env,s,{...s,value:i});else{let{env:l}=we({env:t.env,variable:{name:t.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});t.env=l}}}}else{let i=ae(o),a=me(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Xe(e.env,s,{...s,value:i});else{let{env:l}=we({env:e.env,variable:{name:e.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=l}}else{let i=ae(r),a=me(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Xe(t.env,s,{...s,value:i});else{let{env:l}=we({env:t.env,variable:{name:t.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});t.env=l}}}else if(ee(e.type)){let r=fn(e.env,e.type);if(ee(r)&&r.id===e.type.id){if(An(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${x(t.type)}" because it would create an infinite type.`);let o=ae(t.type),i=me(e.env,e.type.name),a=i[i.length-1];if(a)a&&(e.env=Xe(e.env,a,{...a,value:o}));else{let{env:s}=we({env:e.env,variable:{name:e.type.name,value:o,type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=s}}else if(!ee(r)){let{expectedEnv:o,givenEnv:i}=pt({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=o,t.env=i}}else if(ee(t.type)){let r=fn(t.env,t.type);if(ee(r)){if(An(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${x(e.type)}" because it would create an infinite type.`);let o=ae(e.type),i=me(t.env,t.type.name),a=i[i.length-1];if(a)a&&(t.env=Xe(t.env,a,{...a,value:o}));else{let{env:s}=we({env:t.env,variable:{name:t.type.name,value:o,type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});t.env=s}}else{let{expectedEnv:o,givenEnv:i}=pt({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=o,t.env=i}}else if(He(e.type)&&He(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:o,givenEnv:i}=pt({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=o,t.env=i}else if($e(e.type)&&$e(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.fields.length;r++){let o=e.type.fields[r],i=t.type.fields[r],{expectedEnv:a,givenEnv:s}=pt({type:o.type,env:e.env},{type:i.type,env:t.env},n);if(e.env=a,t.env=s,o.assignedValue&&i.assignedValue&&G(o.assignedValue)&&G(i.assignedValue)){let{expectedEnv:l,givenEnv:u}=pt({type:o.assignedValue.value,env:e.env},{type:i.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(Ve(e.type)&&Ve(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.variants.length;r++){let o=e.type.variants[r],i=t.type.variants[r],a=o.fields??[],s=i.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:d}=pt({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=d}}else if(Ee(e.type)&&Ee(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let o=e.type.fields[r],i=t.type.fields[r],{expectedEnv:a,givenEnv:s}=pt({type:o.type,env:e.env},{type:i.type,env:t.env},n);if(e.env=a,t.env=s,o.assignedValue&&i.assignedValue&&G(o.assignedValue)&&G(i.assignedValue)){let{expectedEnv:l,givenEnv:u}=pt({type:o.assignedValue.value,env:e.env},{type:i.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(De(e.type)&&De(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(gt(e.type)&&gt(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(Oe(e.type)&&Oe(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=o,Ue(e.type.length)&&e.type.length.variableName&&!Ue(t.type.length)){let i=e.type.length.variableName,a=t.type.length,s=me(e.env,i),l=s[s.length-1];if(l)l&&(e.env=Xe(e.env,l,{...l,value:a}));else{let{env:u}=we({env:e.env,variable:{name:i,value:a,type:t.type.length.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=u}}}else if(at(e.type)&&at(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(mt(e.type)&&mt(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(Wt(e.type)&&Wt(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=o}else if(Ut(e.type)&&Ut(t.type)){let r=e.type,o=t.type,{expectedEnv:i,givenEnv:a}=pt({type:r.isFn.callType,env:e.env},{type:o.isFn.callType,env:t.env},n);e.env=i,t.env=a}else if(ce(e.type)&&ce(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,o=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=o.forallParameters[s],{expectedEnv:d,givenEnv:c}=pt({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=d,t.env=c}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=pt({type:r.parameters[s].type,env:e.env},{type:o.parameters[s].type,env:t.env},n);e.env=l,t.env=u}let{expectedEnv:i,givenEnv:a}=pt({type:r.return.type,env:e.env},{type:o.return.type,env:t.env},n);e.env=i,t.env=a}else if(!(ft(e.type)&&!ft(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types: "${x(e.type)}" and "${x(t.type)}"`)}return{expectedEnv:e.env,givenEnv:t.env}}function Zl(e,t,n,r){let o=Gt(e),i=S({expr:o,env:n,context:{...r,SelfType:t}});if(!i.$)throw new Error(`Failed to evaluate auto-generated expression: ${T(o)}`);return{expr:i,env:i.$.env}}function Ur({label:e,functionSignature:t,SelfType:n,env:r,context:o}){let{expr:i,env:a}=Zl(t,n,r,o);if(V(i)&&i.$&&i.$.value&&G(i.$.value)&&ce(i.$.value.value)){let s=i.$.value.value,l={label:e,type:s,assignedValue:void 0,isCompileTimeOnly:!0,exprs:{expr:i,labelExpr:i.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.module){let u=n.module.fields.findIndex(d=>d.label===e);u>=0?n.module.fields[u]=l:n.module.fields.push(l)}}return a}function xn({label:e,functionCode:t,SelfType:n,env:r,context:o}){let{expr:i,env:a}=Zl(t,n,r,o);if(V(i)&&i.$&&i.$.value&&Fe(i.$.value)){i.$.value.funcId+=e;let s={label:e,type:i.$.type,assignedValue:i.$.value,isCompileTimeOnly:!0,exprs:{expr:i,labelExpr:i.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:i}};if(n.module){let l=n.module.fields.findIndex(u=>u.label===e);l>=0?n.module.fields[l]=s:n.module.fields.push(s)}}return a}var wa="(fn(self : Self) -> unit)",si="(fn(self : Self) -> unit)",li="(fn(self : Self) -> Self)";function Of(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function Uf(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Va(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let o of e)if(Uf(o))if(o==="self"){let i="_self";n.push(`${o} : ${i}`),r.push(`(${t})(${i});`)}else n.push(o),r.push(`(${t})(${o});`);else{let i=Of(o);n.push(`(${o}) : ${i}`),r.push(`(${t})(${i});`)}return{destructuringExpr:`{ ${n.join(", ")} } := self;`,callsExpr:r.join(`
41
- `)}}function Bf(e){let t=wa;if(!Xt(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(s=>!s.isCompileTimeOnly&&qe(s.type)).map(s=>s.label),r=e.module.fields.some(s=>s.label===C.dispose[0]);if(!n.length&&!r)return{signature:t,code:`(${t} ())`};let{destructuringExpr:o,callsExpr:i}=Va(n,C.___drop[0]),a=n.length?`
40
+ `);return n[0]}function He(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return x(e.value);case"ComptInt":case"ComptFloat":return e.value.toString();case"ComptString":return JSON.stringify(e.value);case"ComptList":return`compt_list(${e.elements.map(He).join(", ")})`;case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return typeof e.value=="bigint",e.value.toString();case"Bool":return e.value.toString();case"Array":return`[${e.elements.map(He).join(", ")}${e.elements.length===1?",":""}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(He).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Nn(r)&&(r=`(${r})`),e.type.fields[n].isCompileTimeOnly&&(r=Nn(r)?`compt${r}`:`compt(${r})`),`${r}: ${He(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let o=(t==null?void 0:t.fields[r].label)??"_";return Nn(o)&&(o=`(${o})`),t!=null&&t.fields[r].isCompileTimeOnly&&(o=Nn(o)?`compt${o}`:`compt(${o})`),`${o}: ${He(n)}`}).join(", ")})`}case"Function":return e.funcName?`<fn ${e.funcName}>`:e.type.typeName?`<fn ${e.type.typeName}>`:"<fn>";case"Module":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Nn(r)&&(r=`(${r})`),`${r}: ${He(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${T(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<compt ${x(e.type)}>`;default:throw new Error("valueToString: Unsupported value")}}function j(e){return(e==null?void 0:e.tag)==="Type"}function Xn(e){return(e==null?void 0:e.tag)==="ComptInt"}function pi(e){return(e==null?void 0:e.tag)==="ComptFloat"}function Qe(e){return(e==null?void 0:e.tag)==="ComptString"}function Gn(e){return(e==null?void 0:e.tag)==="ComptList"}function Au(e){return Gn(e)&&ht(e.type.childType)}function tt(e){return(e==null?void 0:e.tag)==="ComptInt"||(e==null?void 0:e.tag)==="ComptFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function nt(e){return(e==null?void 0:e.tag)==="Bool"}function xe(e){return(e==null?void 0:e.tag)==="Function"}function Be(e){return(e==null?void 0:e.tag)==="Unknown"}function en(e){return(e==null?void 0:e.tag)==="Tuple"}function on(e){return(e==null?void 0:e.tag)==="Struct"}function pr(e){return(e==null?void 0:e.tag)==="Array"}function Ut(e){return(e==null?void 0:e.tag)==="Enum"}function Je(e){return(e==null?void 0:e.tag)==="Module"}function jt(e){return(e==null?void 0:e.tag)==="Expr"}function le(e){return{tag:"Type",type:Ot(e),value:e}}function dn(e){return{tag:"ComptString",type:Rt(),value:e}}function xn(e,t){return{tag:"ComptList",type:yo(e),elements:t}}function Dt(e,t){let n;if(e==="ComptInt")n=cr();else if(e==="ComptFloat")n=Sr();else if(e==="U8")n=fr();else if(e==="I8")n=Ir();else if(e==="U16")n=Nr();else if(e==="I16")n=Dr();else if(e==="U32")n=Or();else if(e==="I32")n=dr();else if(e==="U64")n=Br();else if(e==="I64")n=Ur();else if(e==="F32")n=Rr();else if(e==="F64")n=mr();else if(e==="Usize")n=yt();else if(e==="Isize")n=Ar();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function qn(e){return Dt("ComptInt",e)}function ci(e){return Dt("ComptFloat",e)}function lt(e){return{tag:"Bool",type:Xe(),value:e}}function ae(e,t,n){if(_t(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${x(e)}`);let r=Sn(e,t,void 0,void 0,void 0,n);return le(r)}return{tag:"Unknown",type:e,variableName:t}}function Mn(e,t){return{tag:"Struct",type:e,fields:t}}function Lr(e,t){return{tag:"Module",type:e,fields:t}}function fi(e,t){return{tag:"Tuple",type:e,fields:t}}function er(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Yn(e,t){return{tag:"Array",type:e,elements:t}}function Ln(e){return{tag:"Expr",type:Ht(),value:e}}function Nt(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return te({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(Qe(n)&&Qe(r))return n.value===r.value;if(Gn(n)&&Gn(r)){if(n.elements.length!==r.elements.length)return!1;for(let o=0;o<n.elements.length;o++)if(!Nt({value:n.elements[o],env:e.env},{value:r.elements[o],env:t.env}))return!1;return!0}else if(tt(n)&&tt(r)){let o=n.value,i=r.value;if(typeof o==typeof i)return o===i;let a=typeof o=="bigint"?o:BigInt(o),s=typeof i=="bigint"?i:BigInt(i);return a===s}else{if(nt(n)&&nt(r))return n.value===r.value;if(pr(n)&&pr(r)){if(n.elements.length!==r.elements.length)return!1;for(let o=0;o<n.elements.length;o++)if(!Nt({value:n.elements[o],env:e.env},{value:r.elements[o],env:t.env}))return!1;return!0}else if(en(n)&&en(r)){if(n.fields.length!==r.fields.length)return!1;for(let o=0;o<n.fields.length;o++)if(!Nt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(on(n)&&on(r)){if(n.fields.length!==r.fields.length||!te({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let o=0;o<n.fields.length;o++)if(!Nt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(Ut(n)&&Ut(r)){if(n.fields.length!==r.fields.length||!te({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let o=0;o<n.fields.length;o++)if(!Nt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(Je(n)&&Je(r)){if(n.fields.length!==r.fields.length||!te({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let o=0;o<n.fields.length;o++)if(!Nt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else{if(jt(n)&&jt(r))return n.value===r.value||di(n.value,r.value);if(Be(n)&&Be(r)){let o,i;if(n.variableName){let a=he(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Be(s.value)&&(o=s.value)}}if(r.variableName){let a=he(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Be(s.value)&&(i=s.value)}}return o&&i?Nt({value:o,env:e.env},{value:i,env:t.env}):o||i?!1:te({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Be(n)&&!Be(r)){if(n.variableName){let o=he(e.env,n.variableName);if(o.length>0){let i=o[o.length-1];if(i.value&&!Be(i.value))return Nt({value:i.value,env:e.env},{value:r,env:t.env})}}return!1}else if(!Be(n)&&Be(r)){if(r.variableName){let o=he(t.env,r.variableName);if(o.length>0){let i=o[o.length-1];if(i.value&&!Be(i.value))return Nt({value:n,env:e.env},{value:i.value,env:t.env})}}return!1}else return!1}}}function Iu(e,t){return!_t(e)||!_t(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Dn(e,t){return X(t)?e===t.id:we(t)?t.fields.some(n=>Dn(e,n.type)):Ve(t)?t.variants.some(n=>n.fields?n.fields.some(r=>Dn(e,r.type)):!1):Ne(t)?t.fields.some(n=>Dn(e,n.type)):Oe(t)||ft(t)||$t(t)?Dn(e,t.childType):ze(t)?!1:Ct(t)?Dn(e,t.childType):me(t)?t.parameters.some(n=>Dn(e,n.type))||Dn(e,t.return.type):an(t)?Dn(e,t.isFuture.outputType):Bt(t)?Dn(e,t.isFn.callType):!1}function mt(e,t,n=[]){if(n.find(r=>r.expected===e.type&&r.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),X(e.type)&&X(t.type)){let r=mn(e.env,e.type),o=mn(t.env,t.type);if(X(r))if(X(o)){if(r!==o){let i=le(t.type);{let a=he(e.env,e.type.name),s=a[a.length-1];if(s)e.env=et(e.env,s,{...s,value:i});else{let{env:l}=Me({env:e.env,variable:{name:e.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=he(t.env,t.type.name),s=a[a.length-1];if(s)t.env=et(t.env,s,{...s,value:i});else{let{env:l}=Me({env:t.env,variable:{name:t.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let i=le(o),a=he(e.env,e.type.name),s=a[a.length-1];if(s)e.env=et(e.env,s,{...s,value:i});else{let{env:l}=Me({env:e.env,variable:{name:e.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let i=le(r),a=he(t.env,t.type.name),s=a[a.length-1];if(s)t.env=et(t.env,s,{...s,value:i});else{let{env:l}=Me({env:t.env,variable:{name:t.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}else if(X(e.type)){let r=mn(e.env,e.type);if(X(r)&&(r.id===e.type.id||r.name===e.type.name)){if(Dn(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${x(t.type)}" because it would create an infinite type.`);let o=le(t.type),i=he(e.env,e.type.name),a=i[i.length-1];if(a)a&&(e.env=et(e.env,a,{...a,value:o}));else{let{env:s}=Me({env:e.env,variable:{name:e.type.name,value:o,type:o.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}}else if(!X(r)){let{expectedEnv:o,givenEnv:i}=mt({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=o,t.env=i}}else if(X(t.type)){let r=mn(t.env,t.type);if(X(r)){if(Dn(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${x(e.type)}" because it would create an infinite type.`);let o=le(e.type),i=he(t.env,t.type.name),a=i[i.length-1];if(a)a&&(t.env=et(t.env,a,{...a,value:o}));else{let{env:s}=Me({env:t.env,variable:{name:t.type.name,value:o,type:o.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:o,givenEnv:i}=mt({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=o,t.env=i}}else if(Ne(e.type)&&Ne(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:o,givenEnv:i}=mt({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=o,t.env=i}else if(we(e.type)&&we(t.type)){if(!(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))throw new Error(`Cannot unify incompatible struct types: "${x(e.type)}" and "${x(t.type)}"`);for(let r=0;r<e.type.fields.length;r++){let o=e.type.fields[r],i=t.type.fields[r],{expectedEnv:a,givenEnv:s}=mt({type:o.type,env:e.env},{type:i.type,env:t.env},n);if(e.env=a,t.env=s,o.assignedValue&&i.assignedValue&&j(o.assignedValue)&&j(i.assignedValue)){let{expectedEnv:l,givenEnv:u}=mt({type:o.assignedValue.value,env:e.env},{type:i.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(Ve(e.type)&&Ve(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.variants.length;r++){let o=e.type.variants[r],i=t.type.variants[r],a=o.fields??[],s=i.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:d}=mt({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=d}}else if(Fe(e.type)&&Fe(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let o=e.type.fields[r],i=t.type.fields[r],{expectedEnv:a,givenEnv:s}=mt({type:o.type,env:e.env},{type:i.type,env:t.env},n);if(e.env=a,t.env=s,o.assignedValue&&i.assignedValue&&j(o.assignedValue)&&j(i.assignedValue)){let{expectedEnv:l,givenEnv:u}=mt({type:o.assignedValue.value,env:e.env},{type:i.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(ze(e.type)&&ze(t.type)){let{expectedEnv:r,givenEnv:o}=mt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(Ct(e.type)&&Ct(t.type)){let{expectedEnv:r,givenEnv:o}=mt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(Oe(e.type)&&Oe(t.type)){let{expectedEnv:r,givenEnv:o}=mt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=o,Be(e.type.length)&&e.type.length.variableName&&!Be(t.type.length)){let i=e.type.length.variableName,a=t.type.length,s=he(e.env,i),l=s[s.length-1];if(l)l&&(e.env=et(e.env,l,{...l,value:a}));else{let{env:u}=Me({env:e.env,variable:{name:i,value:a,type:t.type.length.type,isCompileTimeOnly:!0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(ft(e.type)&&ft(t.type)){let{expectedEnv:r,givenEnv:o}=mt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if($t(e.type)&&$t(t.type)){let{expectedEnv:r,givenEnv:o}=mt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(an(e.type)&&an(t.type)){let{expectedEnv:r,givenEnv:o}=mt({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=o}else if(Bt(e.type)&&Bt(t.type)){let r=e.type,o=t.type,{expectedEnv:i,givenEnv:a}=mt({type:r.isFn.callType,env:e.env},{type:o.isFn.callType,env:t.env},n);e.env=i,t.env=a}else if(me(e.type)&&me(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,o=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=o.forallParameters[s],{expectedEnv:d,givenEnv:c}=mt({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=d,t.env=c}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=mt({type:r.parameters[s].type,env:e.env},{type:o.parameters[s].type,env:t.env},n);e.env=l,t.env=u}let{expectedEnv:i,givenEnv:a}=mt({type:r.return.type,env:e.env},{type:o.return.type,env:t.env},n);e.env=i,t.env=a}else if(!(_t(e.type)&&!_t(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
41
+ Expected: "${x(e.type)}"
42
+ Given: "${x(t.type)}"`)}return{expectedEnv:e.env,givenEnv:t.env}}var gt="__yo_self";function Nu(e,t,n,r){let o=Yt(e),i=M({expr:o,env:n,context:{...r,SelfType:t}});if(!i.$)throw new Error(`Failed to evaluate auto-generated expression: ${T(o)}`);return{expr:i,env:i.$.env}}function Pr({label:e,functionSignature:t,SelfType:n,env:r,context:o}){let{expr:i,env:a}=Nu(t,n,r,o);if(V(i)&&i.$&&i.$.value&&j(i.$.value)&&me(i.$.value.value)){let s=i.$.value.value,l={label:e,type:s,assignedValue:void 0,isCompileTimeOnly:!0,exprs:{expr:i,labelExpr:i.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.module){let u=n.module.fields.findIndex(d=>d.label===e);u>=0?n.module.fields[u]=l:n.module.fields.push(l)}}return a}function In({label:e,functionCode:t,SelfType:n,env:r,context:o}){let{expr:i,env:a}=Nu(t,n,r,o);if(V(i)&&i.$&&i.$.value&&xe(i.$.value)){i.$.value.funcId+=e;let s={label:e,type:i.$.type,assignedValue:i.$.value,isCompileTimeOnly:!0,exprs:{expr:i,labelExpr:i.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:i}};if(n.module){let l=n.module.fields.findIndex(u=>u.label===e);l>=0?n.module.fields[l]=s:n.module.fields.push(s)}}return a}var za=`(fn(${gt} : Self) -> unit)`,mi=`(fn(${gt} : Self) -> unit)`,yi=`(fn(${gt} : Self) -> Self)`;function vd(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function $d(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Ga(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let o of e)if($d(o)){let i=ct("field_"+o);n.push(`${o} : ${i}`),r.push(`(${t})(${i});`)}else{let i=ct("field_"+vd(o));n.push(`(${o}) : ${i}`),r.push(`(${t})(${i});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${gt};`,callsExpr:r.join(`
43
+ `)}}function Td(e){let t=za;if(!tn(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(s=>!s.isCompileTimeOnly&&Ge(s.type)).map(s=>s.label),r=e.module.fields.some(s=>s.label===C.dispose[0]);if(!n.length&&!r)return{signature:t,code:`(${t} ())`};let{destructuringExpr:o,callsExpr:i}=Ga(n,C.___drop[0]),a=n.length?`
42
44
  ${o}
43
45
  ${i}
44
46
  `:"";return{signature:t,code:`(${t} { // ___dispose
45
- ${r?"Self.dispose(self);":""}
47
+ ${r?`Self.dispose(${gt});`:""}
46
48
  ${a}
47
49
  return ();
48
- })`}}function Pf(e){let t=si,n=e.fields.filter(i=>!i.isCompileTimeOnly&&qe(i.type)).map(i=>i.label),r=Xt(e)?`
49
- ${C.__yo_decr_rc[0]}(self);`:"",o="";if(!Xt(e)&&n.length){let{destructuringExpr:i,callsExpr:a}=Va(n,C.___drop[0]);o=`
50
- ${i}
50
+ })`}}function Ed(e){let t=mi,n=e.fields.filter(a=>!a.isCompileTimeOnly&&Ge(a.type)).map(a=>a.label),r=tn(e)?`
51
+ ${C.__yo_decr_rc[0]}(${gt});`:"",o="";if(!tn(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=Ga(n,C.___drop[0]);o=`
51
52
  ${a}
52
- `}return{signature:t,code:`(${t} { // ___drop
53
+ ${s}
54
+ `}let i=`(${t} { // ___drop
53
55
  ${o}
54
56
  ${r}
55
57
  return ();
56
- })`}}function zf(e){let t=li,n=e.fields.filter(i=>!i.isCompileTimeOnly&&qe(i.type)).map(i=>i.label),r=Xt(e)?`
57
- ${C.__yo_incr_rc[0]}(self);`:"",o="";if(!Xt(e)&&n.length){let{destructuringExpr:i,callsExpr:a}=Va(n,C.___dup[0]);o=`
58
+ })`;return{signature:t,code:i}}function Cd(e){let t=yi,n=e.fields.filter(i=>!i.isCompileTimeOnly&&Ge(i.type)).map(i=>i.label),r=tn(e)?`
59
+ ${C.__yo_incr_rc[0]}(${gt});`:"",o="";if(!tn(e)&&n.length){let{destructuringExpr:i,callsExpr:a}=Ga(n,C.___dup[0]);o=`
58
60
  ${i}
59
61
  ${a}
60
62
  `}return{signature:t,code:`(${t} { // ___dup
61
63
  ${o}
62
64
  ${r}
63
- return ${C.__yo_rc_own[0]}(self);
64
- })`}}function yr({structType:e,env:t,context:n}){At(e);let r=Ye(e),{code:o}=Bf(e),{code:i}=Pf(e),{code:a}=zf(e);return xa({structType:e,env:t,context:n}),r||(t=xn({label:C.___dispose[0],functionCode:o,SelfType:e,env:t,context:n}),t=xn({label:C.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function xa({structType:e,env:t,context:n}){Ur({label:C.___dispose[0],functionSignature:wa,SelfType:e,env:t,context:n}),Ur({label:C.___drop[0],functionSignature:si,SelfType:e,env:t,context:n}),Ur({label:C.___dup[0],functionSignature:li,SelfType:e,env:t,context:n})}function Gf(e){let t=si,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>qe(a.type))),r=Xt(e)?`
65
- ${C.__yo_decr_rc[0]}(self);`:"",o=Xt(e)?"":n.length?`
66
- match(self,
67
- ${n.map(i=>{let a=i.fields.filter(u=>!u.isCompileTimeOnly&&qe(u.type)).map(u=>u.label),s=i.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${C.___drop[0]})(${u});`).join(`
65
+ return ${C.__yo_rc_own[0]}(${gt});
66
+ })`}}function hr({structType:e,env:t,context:n}){Ot(e);let r=Ke(e),{code:o}=Td(e),{code:i}=Ed(e),{code:a}=Cd(e);return qa({structType:e,env:t,context:n}),r||(t=In({label:C.___dispose[0],functionCode:o,SelfType:e,env:t,context:n}),t=In({label:C.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=In({label:C.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function qa({structType:e,env:t,context:n}){Pr({label:C.___dispose[0],functionSignature:za,SelfType:e,env:t,context:n}),Pr({label:C.___drop[0],functionSignature:mi,SelfType:e,env:t,context:n}),Pr({label:C.___dup[0],functionSignature:yi,SelfType:e,env:t,context:n})}function kd(e){let t=mi,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>Ge(a.type))),r=tn(e)?`
67
+ ${C.__yo_decr_rc[0]}(${gt});`:"",o=tn(e)?"":n.length?`
68
+ match(${gt},
69
+ ${n.map(i=>{let a=i.fields.filter(u=>!u.isCompileTimeOnly&&Ge(u.type)).map(u=>u.label),s=i.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${C.___drop[0]})(${u});`).join(`
68
70
  `);return`.${i.name}(${s}) => {
69
71
  ${l}
70
72
  }`}).join(`,
@@ -74,10 +76,10 @@ ${l}
74
76
  ${o}
75
77
  ${r}
76
78
  return ();
77
- })`}}function Rf(e){let t=li,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>qe(a.type))),r=Xt(e)?`
78
- ${C.__yo_incr_rc[0]}(self);`:"",o=Xt(e)?"":n.length?`
79
- match(self,
80
- ${n.map(i=>{let a=i.fields.filter(u=>!u.isCompileTimeOnly&&qe(u.type)).map(u=>u.label),s=i.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${C.___dup[0]})(${u});`).join(`
79
+ })`}}function bd(e){let t=yi,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>Ge(a.type))),r=tn(e)?`
80
+ ${C.__yo_incr_rc[0]}(${gt});`:"",o=tn(e)?"":n.length?`
81
+ match(${gt},
82
+ ${n.map(i=>{let a=i.fields.filter(u=>!u.isCompileTimeOnly&&Ge(u.type)).map(u=>u.label),s=i.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${C.___dup[0]})(${u});`).join(`
81
83
  `);return`.${i.name}(${s}) => {
82
84
  ${l}
83
85
  }`}).join(`,
@@ -86,93 +88,94 @@ ${l}
86
88
  );`:"";return{signature:t,code:`(${t} { // ___dup
87
89
  ${o}
88
90
  ${r}
89
- return ${C.__yo_rc_own[0]}(self);
90
- })`}}function Jl({enumType:e,env:t,context:n}){At(e);let r=Ye(e),{code:o}=Gf(e),{code:i}=Rf(e);return Ma({enumType:e,env:t,context:n}),r||(t=xn({label:C.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),t}function Ma({enumType:e,env:t,context:n}){Ur({label:C.___dispose[0],functionSignature:wa,SelfType:e,env:t,context:n}),Ur({label:C.___drop[0],functionSignature:si,SelfType:e,env:t,context:n}),Ur({label:C.___dup[0],functionSignature:li,SelfType:e,env:t,context:n})}function co({dynType:e,env:t,context:n}){let r=qf(e),o=Yf(e);return o&&(t=xn({label:C.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),r&&(t=xn({label:C.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function qf(e){return`((fn(self : Self) -> unit) { // ___drop for ${x(e)}
91
- ${C.__yo_dyn_drop[0]}(self);
92
- })`}function Yf(e){return`((fn(self : Self) -> Self) { // ___dup for ${x(e)}
93
- ${C.__yo_dyn_dup[0]}(self);
94
- return ${C.__yo_rc_own[0]}(self);
95
- })`}function jf(e){return`((fn(self : Self) -> unit) { // ___drop for ${x(e)}
96
- ${C.__yo_sometype_drop[0]}(self);
97
- })`}function Wf(e){return`((fn(self : Self) -> Self) { // ___dup for ${x(e)}
98
- ${C.__yo_sometype_dup[0]}(self);
99
- return ${C.__yo_rc_own[0]}(self);
100
- })`}function Xl({someType:e,env:t,context:n}){let r=jf(e),o=Wf(e);return t=xn({label:C.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Hf(e){return`((fn(self : Self) -> unit) { // ___dispose for Iso
101
- ${C.__yo_iso_dispose[0]}(self);
91
+ return ${C.__yo_rc_own[0]}(${gt});
92
+ })`}}function Du({enumType:e,env:t,context:n}){Ot(e);let r=Ke(e),{code:o}=kd(e),{code:i}=bd(e);return Ya({enumType:e,env:t,context:n}),r||(t=In({label:C.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=In({label:C.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),t}function Ya({enumType:e,env:t,context:n}){Pr({label:C.___dispose[0],functionSignature:za,SelfType:e,env:t,context:n}),Pr({label:C.___drop[0],functionSignature:mi,SelfType:e,env:t,context:n}),Pr({label:C.___dup[0],functionSignature:yi,SelfType:e,env:t,context:n})}function _o({dynType:e,env:t,context:n}){let r=wd(e),o=Fd(e);return o&&(t=In({label:C.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),r&&(t=In({label:C.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function wd(e){return`((fn(${gt} : Self) -> unit) { // ___drop for ${x(e)}
93
+ ${C.__yo_dyn_drop[0]}(${gt});
94
+ })`}function Fd(e){return`((fn(${gt} : Self) -> Self) { // ___dup for ${x(e)}
95
+ ${C.__yo_dyn_dup[0]}(${gt});
96
+ return ${C.__yo_rc_own[0]}(${gt});
97
+ })`}function Vd(e){return`((fn(${gt} : Self) -> unit) { // ___drop for ${x(e)}
98
+ ${C.__yo_sometype_drop[0]}(${gt});
99
+ })`}function xd(e){return`((fn(${gt} : Self) -> Self) { // ___dup for ${x(e)}
100
+ ${C.__yo_sometype_dup[0]}(${gt});
101
+ return ${C.__yo_rc_own[0]}(${gt});
102
+ })`}function Ou({someType:e,env:t,context:n}){let r=Vd(e),o=xd(e);return t=In({label:C.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=In({label:C.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Md(e){return`((fn(${gt} : Self) -> unit) { // ___dispose for Iso
103
+ ${C.__yo_iso_dispose[0]}(${gt});
102
104
  return ();
103
- })`}function Kf(e){return`((fn(self : Self) -> unit) { // ___drop for Iso
104
- ${C.__yo_decr_rc_atomic[0]}(self);
105
+ })`}function Ld(e){return`((fn(${gt} : Self) -> unit) { // ___drop for Iso
106
+ ${C.__yo_decr_rc_atomic[0]}(${gt});
105
107
  return ();
106
- })`}function Qf(e){return`((fn(self : Self) -> Self) { // ___dup for Iso
107
- ${C.__yo_incr_rc_atomic[0]}(self);
108
- return ${C.__yo_rc_own[0]}(self);
109
- })`}function eu({isoType:e,env:t,context:n}){let r=Hf(e),o=Kf(e),i=Qf(e);return t=xn({label:C.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=xn({label:C.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function Sa(e,t,n,r){let o=`${e}()`,i=Gt(o),a=S({expr:i,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Ke(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:i}};return t.module.fields.push(l),n}function tu({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.filter(o=>!o.isCompileTimeOnly).every(o=>ui(o.type,t))&&(t=Sa("Send",e,t,n)),t}function nu({enumType:e,env:t,context:n}){return e.variants.every(o=>!o.fields||o.fields.length===0?!0:o.fields.every(i=>ui(i.type,t)))&&(t=Sa("Send",e,t,n)),t}function ru({unionType:e,env:t,context:n}){return e.fields.filter(o=>!o.isCompileTimeOnly).every(o=>ui(o.type,t))&&(t=Sa("Send",e,t,n)),t}var pi=null;function ur(){if(pi)return pi;let e=tt(),t=Ie(e),n={id:"compt_int",tag:"compt_int",module:t};return t.receiverType=n,pi=n,n}var ci=null;function xr(){if(ci)return ci;let e=tt(),t=Ie(e),n={id:"compt_float",tag:"compt_float",module:t};return t.receiverType=n,ci=n,n}var fi=null;function Ot(){if(fi)return fi;let e=tt(),t=Ie(e),n={id:"compt_string",tag:"compt_string",module:t};return t.receiverType=n,fi=n,n}var di=null;function jt(){if(di)return di;let e=tt(),t=Ie(e),n={id:"Expr",tag:"Expr",module:t};return t.receiverType=n,di=n,n}var mi=new Map;function po(e){if(mi.has(e))return mi.get(e);let t=tt(),n=Ie(t),o={id:`compt_list_${e.id}`,tag:"ComptList",childType:e,module:n};return n.receiverType=o,mi.set(e,o),o}function mo(){return po(jt())}var yi=null;function Qe(){if(yi)return yi;let e=tt(),t=Ie(e),n={id:"bool",tag:"bool",module:t};return t.receiverType=n,yi=n,n}var _i=null;function _t(){if(_i)return _i;let e=tt(),t=Ie(e),n={id:"usize",tag:"usize",module:t};return t.receiverType=n,_i=n,n}var gi=null;function Mr(){if(gi)return gi;let e=tt(),t=Ie(e),n={id:"isize",tag:"isize",module:t};return t.receiverType=n,gi=n,n}var hi=null;function pr(){if(hi)return hi;let e=tt(),t=Ie(e),n={id:"u8",tag:"u8",module:t};return t.receiverType=n,hi=n,n}var vi=null;function Sr(){if(vi)return vi;let e=tt(),t=Ie(e),n={id:"i8",tag:"i8",module:t};return t.receiverType=n,vi=n,n}var Ti=null;function Lr(){if(Ti)return Ti;let e=tt(),t=Ie(e),n={id:"u16",tag:"u16",module:t};return t.receiverType=n,Ti=n,n}var $i=null;function Ar(){if($i)return $i;let e=tt(),t=Ie(e),n={id:"i16",tag:"i16",module:t};return t.receiverType=n,$i=n,n}var Ei=null;function Ir(){if(Ei)return Ei;let e=tt(),t=Ie(e),n={id:"u32",tag:"u32",module:t};return t.receiverType=n,Ei=n,n}var Ci=null;function cr(){if(Ci)return Ci;let e=tt(),t=Ie(e),n={id:"i32",tag:"i32",module:t};return t.receiverType=n,Ci=n,n}var ki=null;function Nr(){if(ki)return ki;let e=tt(),t=Ie(e),n={id:"u64",tag:"u64",module:t};return t.receiverType=n,ki=n,n}var bi=null;function Dr(){if(bi)return bi;let e=tt(),t=Ie(e),n={id:"i64",tag:"i64",module:t};return t.receiverType=n,bi=n,n}var Fi=null;function Or(){if(Fi)return Fi;let e=tt(),t=Ie(e),n={id:"f32",tag:"f32",module:t};return t.receiverType=n,Fi=n,n}var wi=null;function fr(){if(wi)return wi;let e=tt(),t=Ie(e),n={id:"f64",tag:"f64",module:t};return t.receiverType=n,wi=n,n}var Vi=null;function Br(){if(Vi)return Vi;let e=tt(),t=Ie(e),n={id:"unit",tag:"unit",module:t};return t.receiverType=n,Vi=n,n}var xi=null;function zi(){if(xi)return xi;let e=tt(),t=Ie(e),n={id:"char",tag:"char",module:t};return t.receiverType=n,xi=n,n}var Mi=null;function Gi(){if(Mi)return Mi;let e=tt(),t=Ie(e),n={id:"short",tag:"short",module:t};return t.receiverType=n,Mi=n,n}var Si=null;function Ri(){if(Si)return Si;let e=tt(),t=Ie(e),n={id:"ushort",tag:"ushort",module:t};return t.receiverType=n,Si=n,n}var Li=null;function qi(){if(Li)return Li;let e=tt(),t=Ie(e),n={id:"int",tag:"int",module:t};return t.receiverType=n,Li=n,n}var Ai=null;function Yi(){if(Ai)return Ai;let e=tt(),t=Ie(e),n={id:"uint",tag:"uint",module:t};return t.receiverType=n,Ai=n,n}var Ii=null;function ji(){if(Ii)return Ii;let e=tt(),t=Ie(e),n={id:"long",tag:"long",module:t};return t.receiverType=n,Ii=n,n}var Ni=null;function Wi(){if(Ni)return Ni;let e=tt(),t=Ie(e),n={id:"ulong",tag:"ulong",module:t};return t.receiverType=n,Ni=n,n}var Di=null;function Hi(){if(Di)return Di;let e=tt(),t=Ie(e),n={id:"longlong",tag:"longlong",module:t};return t.receiverType=n,Di=n,n}var Oi=null;function Ki(){if(Oi)return Oi;let e=tt(),t=Ie(e),n={id:"ulonglong",tag:"ulonglong",module:t};return t.receiverType=n,Oi=n,n}var Ui=null;function Qi(){if(Ui)return Ui;let e=tt(),t=Ie(e),n={id:"longdouble",tag:"longdouble",module:t};return t.receiverType=n,Ui=n,n}function lt(e){return dn(0,e)}function Gn(e,t){let n=tt(),r=Ie(n),o={id:`array_${e.id+"_"+ba(je(t))}`,tag:"Array",childType:e,length:t,module:r};return r.receiverType=o,o}var Bi=new Map;function _r(e){if(Bi.has(e))return Bi.get(e);let t=tt(),n=Ie(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,module:n};return n.receiverType=r,Bi.set(e,r),r}var Pi;function iu(){if(Pi)return Pi;let e=tt(),t=Ie(e),n={id:"void",tag:"void",module:t};return t.receiverType=n,Pi=n,n}function Zi(e){let t=tt(),n=Ie(t),r={id:`tuple_${e.map(o=>o.type.id).join("_")}`,tag:"Tuple",fields:e,module:n};return n.receiverType=r,r}function gr(e,t=!1,n=!1){let r=Ie(e),o={id:`struct_${ht()}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],module:r,env:e};return r.receiverType=o,o}function Ie(e){return{id:`module_${ht()}`,tag:"Module",fields:[],env:e,module:void 0}}function au(e){let t=Ie(e),n={id:`enum_${ht()}`,tag:"Enum",variants:[],module:t,env:e};return t.receiverType=n,n}function su(e){let t=Ie(e),n={id:`union_${ht()}`,tag:"Union",fields:[],module:t,env:e};return t.receiverType=n,n}function Pr({parameters:e,forallParameters:t,variadicParameter:n,return_:r,env:o,parametersFrame:i,SelfType:a,ParentFunctionType:s,isClosure:l}){let u=tt(),d=Ie(u),c={id:`fn_${ht()}`,tag:"Function",parameters:e,forallParameters:t,variadicParameter:n,return:r,env:o,parametersFrame:i,SelfType:a,ParentFunctionType:s,module:d,isClosure:l};return d.receiverType=c,c}var La=new Map;function hr(e){if(La.has(e))return La.get(e);let t=tt(),n=Ie(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,module:n};return n.receiverType=r,La.set(e,r),r}var Aa=new Map;function lu(e,t){if(Aa.has(e))return Aa.get(e);let n=Ie(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,module:n,env:t};return n.receiverType=r,Aa.set(e,r),r}function wn(e,t,n,r,o,i){if(e.level!==0)throw console.trace(),new Error(`createSomeType expects a type with level 0, got level ${e.level}`);let a=tt(),s=Ie(a),l={id:n??`sometype_${ht()}`,tag:"SomeType",name:t,parentType:e,size:void 0,requiredModules:r??[],negativeModules:o&&o.length>0?o:void 0,module:s,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:i};return s.receiverType=l,Xl({someType:l,env:a,context:{SelfType:l,stdPath:""}}),l}var fo=new Map;function dn(e,t){if(fo.has(e)){let o=fo.get(e);if(o.has(t))return o.get(t)}else fo.set(e,new Map);let n=Ie(tt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,module:n};return n.receiverType=r,fo.get(e).set(t,r),r}function uu({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:o}){if(!t&&!n&&!r&&!o)throw new Error("At least one of labelExpr, typeExpr, defaultValueExpr or assignedValueExpr must be defined");if(!n&&!r&&!o)throw new Error("Expected either typeExpr, defaultValueExpr or assignedValueExpr to be defined");return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:o}}function pu(e,t){let n=`fn_module_${e.id}`,r=Ie(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}var Zf=0;function cu(e,t){let n=`future_module_${e.id}_${Zf++}`,r=Ie(t);return r.isFuture={outputType:e},r.id=n,r.receiverType=void 0,r}function ou(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,o=r.parameters.map(a=>`${a.label}:${x(a.type)}`).join(","),i=x(r.return.type);return`${n.label}:(${o})->${i}`}return`${n.label}:${x(n.type)}`}).join(";")}function yo(e,t,n){let r=Ie(t),o=e.map(l=>ou(l)).join("__"),i=n?n.map(l=>ou(l)).join("__"):"",s={id:`dyn_${ba(o+(i?`_neg_${i}`:""))}`,tag:"Dyn",requiredModules:[...e],negativeModules:n&&n.length>0?n:void 0,module:r,env:t};return r.receiverType=s,s}function Ia(){pi=null,ci=null,fi=null,di=null,mi.clear(),yi=null,_i=null,gi=null,hi=null,vi=null,Ti=null,$i=null,Ei=null,Ci=null,ki=null,bi=null,Fi=null,wi=null,Vi=null,xi=null,Mi=null,Si=null,Li=null,Ai=null,Ii=null,Ni=null,Di=null,Oi=null,Ui=null,Bi.clear(),Pi=void 0,fo.clear()}function Jf(e,t){let n=me(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&G(r.value)){let o=r.value;if(Ee(o.value))return o.value}}function _o({targetType:e,moduleType:t,env:n}){let r={...t,receiverType:e},o=e.module;if(o)for(let i of o.fields){if(!i.assignedValue||!Ke(i.assignedValue))continue;let s=i.assignedValue.type;if(W({type:r,env:n},{type:s,env:n}))return!0}return!1}function ui(e,t){if(!e)return!1;let n=Jf(t,"Send");return n?_o({targetType:e,moduleType:n,env:t}):!1}function mn(e){if(!e)return!1;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Ut(n))return!0}}return!1}function nn(e){if(Ut(e))return e;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Ut(n))return n}}}function Pe(e){if(!e)return!1;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Wt(n))return!0}}return!1}function Ht(e){if(Wt(e))return e;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Wt(n))return n}}}function hn(e){return ft(e)||Ee(e)||kt(e)||Bt(e)||Pt(e)||mt(e)||dt(e)}function er(e){return In(e)}function qe(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),Xt(e))return!0;switch(e.tag){case"Array":return qe(e.childType,t);case"Tuple":return e.fields.some(n=>qe(n.type,t));case"Union":return e.fields.some(n=>qe(n.type,t));case"Struct":return e.fields.some(n=>qe(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>qe(o.type,t))});case"Iso":return qe(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return Pe(n)?!0:n.resolvedConcreteType?qe(n.resolvedConcreteType,t):!0}default:return!1}}function Ye(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),ee(e))return e.isExtern?!1:e.resolvedConcreteType?Ye(e.resolvedConcreteType,t):!(mn(e)||Pe(e));switch(e.tag){case"Array":return Ye(e.childType,t);case"Tuple":return e.fields.some(n=>Ye(n.type,t));case"Struct":return e.fields.some(n=>Ye(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Ye(o.type,t))});case"Union":return e.fields.some(n=>Ye(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ye(r.type,t))||Ye(n.return.type,t)}case"Module":return e.fields.some(n=>Ye(n.type,t));case"Ptr":return Ye(e.childType,t);default:return!1}}function Na(e){let t=new Set,n=new Set;function r(o){if(!(o&&n.has(o))){if(o&&n.add(o),ee(o)){if(t.has(o))return;o.resolvedConcreteType||t.add(o)}switch(o.tag){case"Array":r(o.childType);break;case"Tuple":o.fields.forEach(i=>r(i.type));break;case"Struct":o.fields.forEach(i=>r(i.type));break;case"Enum":o.variants.forEach(i=>{var a;(a=i.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":o.fields.forEach(i=>r(i.type));break;case"Module":o.fields.forEach(i=>r(i.type));break;case"Ptr":r(o.childType);break;default:break}}}return r(e),t}function Gr(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Ue(t.length)||Gr(t.childType)}case"SomeType":return!0;case"Module":{let t=e;return t.isFn?Gr(t.isFn.callType):!1}default:return!1}}function fn(e,t){let n,r=new Set;do{if(r.has(t))return t;r.add(t);let o=me(e,t.name,i=>{var a;return((a=i.value)==null?void 0:a.tag)==="Type"});if(!o.length||(n=o[o.length-1].value,n.value===t))return t;if(ee(n.value))t=n.value;else break}while(ee(t));return n.value}function vt({type:e,expectedType:t,expr:n,env:r}){let o;if(kt(e))o=cr();else if(Bt(e))o=fr();else{if(Oe(e))return e.childType=vt({type:e.childType,expectedType:void 0,expr:void 0,env:r}),e;if(He(e))return e.fields=e.fields.map(i=>({...i,type:vt({type:i.type,expectedType:void 0,expr:void 0,env:r})})),e;if($e(e))return $t(e)||(e.fields=e.fields.map(i=>({...i,type:vt({type:i.type,expectedType:void 0,expr:void 0,env:r})}))),e;if(Ve(e))return e.variants=e.variants.map(i=>(i.fields&&(i.fields=i.fields.map(a=>({...a,type:vt({type:a.type,expectedType:void 0,expr:void 0,env:r})}))),i)),e;if(Pt(e))t&&(De(t)&&(nr(t.childType)||ea(t.childType))||at(t))&&(o=t),o||(o=_r(pr()));else return e}return o&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=o),o??e}function fu(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isCompileTimeOnly&&(n=`compt(${n})`);let r=x(e.type,t),o=e.exprs.defaultValueExpr?T(e.exprs.defaultValueExpr):"";return o?`(${n} : ${r}) ?= ${o}`:`${n} : ${r}`}function zr(e,t=new Set){let n=e.label;Ln(n)&&(n=`(${n})`),e.isCompileTimeOnly&&(n=`compt(${n})`);let r=e.defaultValue?je(e.defaultValue):"",o=e.assignedValue?je(e.assignedValue):"";return r?`(${n}: ${x(e.type,t)}) ?= ${r}`:o?`(${n}: ${x(e.type,t)}) = ${o}`:`${n}: ${x(e.type,t)}`}function Xf(e,t=new Set){let n=e.label;Ln(n)&&(n=`(${n})`);let r=e.defaultValue?je(e.defaultValue):"",o=e.assignedValue?je(e.assignedValue):"";return r?`(${n} : ${x(e.type,t)}) ?= ${r}`:o?`(${n} : ${x(e.type,t)}) = ${o}`:`${n} : ${x(e.type,t)}`}function du(e,t=new Set){var d;let n=e.parameters.map(c=>fu(c,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(c=>fu(c,t)).join(", ")})`:"",o="";e.variadicParameter&&(e.variadicParameter.label==="..."?o="...":e.variadicParameter.isQuote?o=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?o=`...(compt(${e.variadicParameter.label}))`:o=`...(${e.variadicParameter.label})`);let i=x(e.return.type,t),a=i;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${i})`:a=`unquote(${i})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(compt(${e.return.label}) : ${i})`:a=`compt(${i})`);let s=[r,n,o].filter(c=>!!c).join(", "),l=(d=e.SelfType)==null?void 0:d.typeName;return`${l?`(${l}) `:""}fn(${s}) -> ${a}`}function x(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return ed(e,t)}finally{e.id&&t.delete(e.id)}}function ed(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${x(e.childType,t)}; ${je(e.length)}]`;case"Slice":return`[${x(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>zr(n,t)).join(", ")}${e.fields.length===1?",":""})`;case"Struct":{let n=e;return n.typeName?n.typeName:`${n.typeName?`(${n.typeName}) `:""}${n.isReferenceSemantics?"object":n.isNewtype?"newtype":"struct"}(${n.fields.map(r=>zr(r,t)).join(", ")})`}case"Enum":{let n=e;if(n.typeName){let r=n.typeName;return n.requiredVariantNames??n.selectedVariantName?`${r} (${n.requiredVariantNames?`${n.requiredVariantNames.map(o=>`.${o}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(o=>zr(o,t)).join(", ")})`:""}`).join(", ")})`}case"Union":{let n=e;if(n.typeName)return n.typeName;let r=n.fields;return`${n.typeName?`(${n.typeName}) `:""}${n.typeName?"union":n.id}(${r.map(o=>zr(o,t)).join(", ")})`}case"Module":{let n=e;if(Ut(n))return`Fn${du(n.isFn.callType,t).slice(2)}`;if(Wt(n))return`Future(${x(n.isFuture.outputType,t)})`;let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(o=>Xf(o,t)).join(", ")})`,n.receiverType&&(r=`(${x(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:du(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return T(n.functionApplication);let r=[];if(n.requiredModules&&n.requiredModules.length>0)for(let o of n.requiredModules)r.push(x(o,t));if(n.negativeModules&&n.negativeModules.length>0)for(let o of n.negativeModules)r.push(`!(${x(o,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${x(e.childType,t)})`;case"Iso":return`Iso(${x(e.childType,t)})`;case"Expr":return"Expr";case"ComptList":return`ComptList(${x(e.childType)})`;case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let o of n.requiredModules)r.push(x(o,t));if(n.negativeModules&&n.negativeModules.length>0)for(let o of n.negativeModules)r.push(`!(${x(o,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var mu=64;function Ji(){return mu}function Xi(){return mu/8}function td(e){let t=dr(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(ct(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function nd(e){let t=0;for(let n of e.fields){let r=dr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function rd(e){let t=0;for(let n of e.fields){let r=dr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function od(e){let t=0,n=0;for(let y of e.variants){let g=0;if(y.fields)for(let h of y.fields){let _=dr(h.type);if(_===null)return null;if(_===-1)return-1;g+=_;let E=Xn(h.type);if(E===null)return null;n=Math.max(n,E*8)}t=Math.max(t,g)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,o=32,i=Math.max(n,8),a=Math.max(o,i),s=r/8,l=i/8,u=(l-s%l)%l*8,d=r+u+t,c=d/8,f=a/8,m=(f-c%f)%f*8;return d+m}function id(e){let t=0;for(let n of e.fields){let r=dr(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Xn(e){if(ee(e))return null;if(Be(e)||ft(e)||kt(e)||Bt(e)||Pt(e)||mt(e)||Ee(e)||dt(e))return 1;if(vn(e))return 1;if(ho(e)||vo(e))return Xi();if(nr(e)||To(e))return 1;if($o(e)||Eo(e))return 2;if(Co(e)||ko(e))return 4;if(bo(e)||Fo(e))return 8;if(wo(e))return 4;if(Vo(e))return 8;if(Oe(e))return Xn(e.childType);if(He(e)){let t=1;for(let n of e.fields){let r=Xn(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if($e(e)){if(e.isReferenceSemantics)return Xi();if(e.isNewtype)return Xn(e.fields[0].type);let t=1;for(let n of e.fields){let r=Xn(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ve(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let o=Xn(r.type);if(o===null)return null;t=Math.max(t,o)}return t}else if(ot(e)){let t=1;for(let n of e.fields){let r=Xn(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(ce(e))return Xi();if(De(e))return Xi()}return null}function dr(e){return ee(e)?null:Be(e)||ft(e)||kt(e)||Bt(e)||Pt(e)||mt(e)||Ee(e)||dt(e)?0:vn(e)?8:ho(e)||vo(e)?Ji():nr(e)||To(e)?8:$o(e)||Eo(e)?16:Co(e)||ko(e)?32:bo(e)||Fo(e)?64:wo(e)?32:Vo(e)?64:Oe(e)?td(e):He(e)?nd(e):$e(e)?e.isReferenceSemantics?Ji():e.isNewtype?dr(e.fields[0].type):rd(e):Ve(e)?od(e):ot(e)?id(e):ce(e)||De(e)?Ji():null}function tr(e,t){if(rr(e))throw st([{token:t,errorMessage:`Cannot use 'void' type here.
108
+ })`}function Sd(e){return`((fn(${gt} : Self) -> Self) { // ___dup for Iso
109
+ ${C.__yo_incr_rc_atomic[0]}(${gt});
110
+ return ${C.__yo_rc_own[0]}(${gt});
111
+ })`}function Bu({isoType:e,env:t,context:n}){let r=Md(e),o=Ld(e),i=Sd(e);return t=In({label:C.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=In({label:C.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=In({label:C.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function ja(e,t,n,r){let o=`${e}()`,i=Yt(o),a=M({expr:i,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Je(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:hn(1),isCompileTimeOnly:!0,assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:i}};return t.module.fields.push(l),n}function Uu({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.filter(o=>!o.isCompileTimeOnly).every(o=>_i(o.type,t))&&(t=ja("Send",e,t,n)),t}function Ru({enumType:e,env:t,context:n}){return e.variants.every(o=>!o.fields||o.fields.length===0?!0:o.fields.every(i=>_i(i.type,t)))&&(t=ja("Send",e,t,n)),t}function Pu({unionType:e,env:t,context:n}){return e.fields.filter(o=>!o.isCompileTimeOnly).every(o=>_i(o.type,t))&&(t=ja("Send",e,t,n)),t}var gi=null;function cr(){if(gi)return gi;let e=rt(),t=Ue(e),n={id:"compt_int",tag:"compt_int",module:t};return t.receiverType=n,gi=n,n}var hi=null;function Sr(){if(hi)return hi;let e=rt(),t=Ue(e),n={id:"compt_float",tag:"compt_float",module:t};return t.receiverType=n,hi=n,n}var vi=null;function Rt(){if(vi)return vi;let e=rt(),t=Ue(e),n={id:"compt_string",tag:"compt_string",module:t};return t.receiverType=n,vi=n,n}var $i=null;function Ht(){if($i)return $i;let e=rt(),t=Ue(e),n={id:"Expr",tag:"Expr",module:t};return t.receiverType=n,$i=n,n}var Ti=new Map;function yo(e){if(Ti.has(e))return Ti.get(e);let t=rt(),n=Ue(t),o={id:`compt_list_${e.id}`,tag:"ComptList",childType:e,module:n};return n.receiverType=o,Ti.set(e,o),o}function ho(){return yo(Ht())}var Ei=null;function Xe(){if(Ei)return Ei;let e=rt(),t=Ue(e),n={id:"bool",tag:"bool",module:t};return t.receiverType=n,Ei=n,n}var Ci=null;function yt(){if(Ci)return Ci;let e=rt(),t=Ue(e),n={id:"usize",tag:"usize",module:t};return t.receiverType=n,Ci=n,n}var ki=null;function Ar(){if(ki)return ki;let e=rt(),t=Ue(e),n={id:"isize",tag:"isize",module:t};return t.receiverType=n,ki=n,n}var bi=null;function fr(){if(bi)return bi;let e=rt(),t=Ue(e),n={id:"u8",tag:"u8",module:t};return t.receiverType=n,bi=n,n}var wi=null;function Ir(){if(wi)return wi;let e=rt(),t=Ue(e),n={id:"i8",tag:"i8",module:t};return t.receiverType=n,wi=n,n}var Fi=null;function Nr(){if(Fi)return Fi;let e=rt(),t=Ue(e),n={id:"u16",tag:"u16",module:t};return t.receiverType=n,Fi=n,n}var Vi=null;function Dr(){if(Vi)return Vi;let e=rt(),t=Ue(e),n={id:"i16",tag:"i16",module:t};return t.receiverType=n,Vi=n,n}var xi=null;function Or(){if(xi)return xi;let e=rt(),t=Ue(e),n={id:"u32",tag:"u32",module:t};return t.receiverType=n,xi=n,n}var Mi=null;function dr(){if(Mi)return Mi;let e=rt(),t=Ue(e),n={id:"i32",tag:"i32",module:t};return t.receiverType=n,Mi=n,n}var Li=null;function Br(){if(Li)return Li;let e=rt(),t=Ue(e),n={id:"u64",tag:"u64",module:t};return t.receiverType=n,Li=n,n}var Si=null;function Ur(){if(Si)return Si;let e=rt(),t=Ue(e),n={id:"i64",tag:"i64",module:t};return t.receiverType=n,Si=n,n}var Ai=null;function Rr(){if(Ai)return Ai;let e=rt(),t=Ue(e),n={id:"f32",tag:"f32",module:t};return t.receiverType=n,Ai=n,n}var Ii=null;function mr(){if(Ii)return Ii;let e=rt(),t=Ue(e),n={id:"f64",tag:"f64",module:t};return t.receiverType=n,Ii=n,n}var Ni=null;function zr(){if(Ni)return Ni;let e=rt(),t=Ue(e),n={id:"unit",tag:"unit",module:t};return t.receiverType=n,Ni=n,n}var Di=null;function Qi(){if(Di)return Di;let e=rt(),t=Ue(e),n={id:"char",tag:"char",module:t};return t.receiverType=n,Di=n,n}var Oi=null;function Zi(){if(Oi)return Oi;let e=rt(),t=Ue(e),n={id:"short",tag:"short",module:t};return t.receiverType=n,Oi=n,n}var Bi=null;function Ji(){if(Bi)return Bi;let e=rt(),t=Ue(e),n={id:"ushort",tag:"ushort",module:t};return t.receiverType=n,Bi=n,n}var Ui=null;function Xi(){if(Ui)return Ui;let e=rt(),t=Ue(e),n={id:"int",tag:"int",module:t};return t.receiverType=n,Ui=n,n}var Ri=null;function ea(){if(Ri)return Ri;let e=rt(),t=Ue(e),n={id:"uint",tag:"uint",module:t};return t.receiverType=n,Ri=n,n}var Pi=null;function ta(){if(Pi)return Pi;let e=rt(),t=Ue(e),n={id:"long",tag:"long",module:t};return t.receiverType=n,Pi=n,n}var zi=null;function na(){if(zi)return zi;let e=rt(),t=Ue(e),n={id:"ulong",tag:"ulong",module:t};return t.receiverType=n,zi=n,n}var Gi=null;function ra(){if(Gi)return Gi;let e=rt(),t=Ue(e),n={id:"longlong",tag:"longlong",module:t};return t.receiverType=n,Gi=n,n}var qi=null;function oa(){if(qi)return qi;let e=rt(),t=Ue(e),n={id:"ulonglong",tag:"ulonglong",module:t};return t.receiverType=n,qi=n,n}var Yi=null;function ia(){if(Yi)return Yi;let e=rt(),t=Ue(e),n={id:"longdouble",tag:"longdouble",module:t};return t.receiverType=n,Yi=n,n}function ut(e){return hn(0,e)}function jn(e,t){let n=rt(),r=Ue(n),o={id:`array_${e.id+"_"+Ua(He(t))}`,tag:"Array",childType:e,length:t,module:r};return r.receiverType=o,o}var ji=new Map;function vr(e){if(ji.has(e))return ji.get(e);let t=rt(),n=Ue(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,module:n};return n.receiverType=r,ji.set(e,r),r}var Wi;function Gu(){if(Wi)return Wi;let e=rt(),t=Ue(e),n={id:"void",tag:"void",module:t};return t.receiverType=n,Wi=n,n}function aa(e){let t=rt(),n=Ue(t),r={id:`tuple_${e.map(o=>o.type.id).join("_")}`,tag:"Tuple",fields:e,module:n};return n.receiverType=r,r}function $r(e,t=!1,n=!1){let r=Ue(e),o={id:`struct_${ct(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],module:r,env:e};return r.receiverType=o,o}function Ue(e){return{id:`module_${ct(e.modulePath)}`,tag:"Module",fields:[],env:e,module:void 0}}function qu(e){let t=Ue(e),n={id:`enum_${ct(e.modulePath)}`,tag:"Enum",variants:[],module:t,env:e};return t.receiverType=n,n}function Yu(e){let t=Ue(e),n={id:`union_${ct(e.modulePath)}`,tag:"Union",fields:[],module:t,env:e};return t.receiverType=n,n}function Gr({parameters:e,forallParameters:t,variadicParameter:n,return_:r,env:o,parametersFrame:i,SelfType:a,ParentFunctionType:s,isClosure:l}){let u=rt(),d=Ue(u),c={id:`fn_${ct(o.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,variadicParameter:n,return:r,env:o,parametersFrame:i,SelfType:a,ParentFunctionType:s,module:d,isClosure:l};return d.receiverType=c,c}var Hi=new Map;function Tr(e){if(Hi.has(e))return Hi.get(e);let t=rt(),n=Ue(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,module:n};return n.receiverType=r,Hi.set(e,r),r}var Ki=new Map;function ju(e,t){if(Ki.has(e))return Ki.get(e);let n=Ue(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,module:n,env:t};return n.receiverType=r,Ki.set(e,r),r}function Sn(e,t,n,r,o,i,a){if(e.level!==0)throw console.trace(),new Error(`createSomeType expects a type with level 0, got level ${e.level}`);let s=a??rt(),l=Ue(s),u={id:n??`sometype_${ct(s.modulePath)}`,tag:"SomeType",name:t,parentType:e,size:void 0,requiredModules:r??[],negativeModules:o&&o.length>0?o:void 0,module:l,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:i};return l.receiverType=u,Ou({someType:u,env:s,context:{SelfType:u,stdPath:""}}),u}var go=new Map;function hn(e,t){if(go.has(e)){let o=go.get(e);if(o.has(t))return o.get(t)}else go.set(e,new Map);let n=Ue(rt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,module:n};return n.receiverType=r,go.get(e).set(t,r),r}function Wu({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:o}){if(!t&&!n&&!r&&!o)throw new Error("At least one of labelExpr, typeExpr, defaultValueExpr or assignedValueExpr must be defined");if(!n&&!r&&!o)throw new Error("Expected either typeExpr, defaultValueExpr or assignedValueExpr to be defined");return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:o}}function Hu(e,t){let n=`fn_module_${e.id}`,r=Ue(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}var Ad=0;function Ku(e,t){let n=`future_module_${e.id}_${Ad++}`,r=Ue(t);return r.isFuture={outputType:e},r.id=n,r.receiverType=void 0,r}function zu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,o=r.parameters.map(a=>`${a.label}:${x(a.type)}`).join(","),i=x(r.return.type);return`${n.label}:(${o})->${i}`}return`${n.label}:${x(n.type)}`}).join(";")}function vo(e,t,n){let r=Ue(t),o=e.map(l=>zu(l)).join("__"),i=n?n.map(l=>zu(l)).join("__"):"",s={id:`dyn_${Ua(o+(i?`_neg_${i}`:""))}`,tag:"Dyn",requiredModules:[...e],negativeModules:n&&n.length>0?n:void 0,module:r,env:t};return r.receiverType=s,s}function Wa(){gi=null,hi=null,vi=null,$i=null,Ti.clear(),Ei=null,Ci=null,ki=null,bi=null,wi=null,Fi=null,Vi=null,xi=null,Mi=null,Li=null,Si=null,Ai=null,Ii=null,Ni=null,Di=null,Oi=null,Bi=null,Ui=null,Ri=null,Pi=null,zi=null,Gi=null,qi=null,Yi=null,ji.clear(),Wi=void 0,go.clear(),Hi.clear(),Ki.clear()}function Id(e,t){let n=he(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&j(r.value)){let o=r.value;if(Fe(o.value))return o.value}}function $o({targetType:e,moduleType:t,env:n}){let r={...t,receiverType:e},o=e.module;if(o)for(let i of o.fields){if(!i.assignedValue||!Je(i.assignedValue))continue;let s=i.assignedValue.type;if(te({type:r,env:n},{type:s,env:n}))return!0}return!1}function _i(e,t){if(!e)return!1;let n=Id(t,"Send");return n?$o({targetType:e,moduleType:n,env:t}):!1}function vn(e){if(!e)return!1;if(X(e)||Re(e)){let t=e.requiredModules;if(t){for(let n of t)if(Bt(n))return!0}}return!1}function sn(e){if(Bt(e))return e;if(X(e)||Re(e)){let t=e.requiredModules;if(t){for(let n of t)if(Bt(n))return n}}}function je(e){if(!e)return!1;if(X(e)||Re(e)){let t=e.requiredModules;if(t){for(let n of t)if(an(n))return!0}}return!1}function Kt(e){if(an(e))return e;if(X(e)||Re(e)){let t=e.requiredModules;if(t){for(let n of t)if(an(n))return n}}}function En(e){return _t(e)||Fe(e)||Mt(e)||Pt(e)||zt(e)||$t(e)||ht(e)}function rr(e){return On(e)}function Ge(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(tn(e))return!0;switch(e.tag){case"Array":return Ge(e.childType,t);case"Tuple":return e.fields.some(n=>Ge(n.type,t));case"Union":return e.fields.some(n=>Ge(n.type,t));case"Struct":return e.fields.some(n=>Ge(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Ge(o.type,t))});case"Iso":return Ge(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return je(n)?!0:n.resolvedConcreteType?Ge(n.resolvedConcreteType,t):!0}default:return!1}}function Ke(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),X(e))return e.isExtern?!1:e.resolvedConcreteType?Ke(e.resolvedConcreteType,t):!(vn(e)||je(e));switch(e.tag){case"Array":return Ke(e.childType,t);case"Tuple":return e.fields.some(n=>Ke(n.type,t));case"Struct":return e.fields.some(n=>Ke(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Ke(o.type,t))});case"Union":return e.fields.some(n=>Ke(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ke(r.type,t))||Ke(n.return.type,t)}case"Module":return e.fields.some(n=>Ke(n.type,t));case"Ptr":return Ke(e.childType,t);default:return!1}}function tr(e){return Oe(e)?Be(e.length)?!0:tr(e.childType):ze(e)||ft(e)?tr(e.childType):Ne(e)?e.fields.some(t=>tr(t.type)):we(e)?e.fields.some(t=>tr(t.type)):Ve(e)?e.variants.some(t=>{var n;return(n=t.fields)==null?void 0:n.some(r=>tr(r.type))}):pt(e)?e.fields.some(t=>tr(t.type)):!1}function Ha(e){let t=new Set,n=new Set;function r(o){if(!(o&&n.has(o))){if(o&&n.add(o),X(o)){if(t.has(o))return;o.resolvedConcreteType||t.add(o)}switch(o.tag){case"Array":r(o.childType);break;case"Tuple":o.fields.forEach(i=>r(i.type));break;case"Struct":o.fields.forEach(i=>r(i.type));break;case"Enum":o.variants.forEach(i=>{var a;(a=i.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":o.fields.forEach(i=>r(i.type));break;case"Module":o.fields.forEach(i=>r(i.type));break;case"Ptr":r(o.childType);break;default:break}}}return r(e),t}function Yr(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Be(t.length)||Yr(t.childType)}case"SomeType":return!0;case"Module":{let t=e;return t.isFn?Yr(t.isFn.callType):!1}default:return!1}}function mn(e,t){let n,r=new Set;do{if(r.has(t))return t;r.add(t);let o=he(e,t.name,i=>{var a;return((a=i.value)==null?void 0:a.tag)==="Type"});if(!o.length||(n=o[o.length-1].value,n.value===t))return t;if(X(n.value))t=n.value;else break}while(X(t));return n.value}function Tt({type:e,expectedType:t,expr:n,env:r}){let o;if(Mt(e))o=dr();else if(Pt(e))o=mr();else{if(Oe(e))return e.childType=Tt({type:e.childType,expectedType:void 0,expr:void 0,env:r}),e;if(Ne(e))return e.fields=e.fields.map(i=>({...i,type:Tt({type:i.type,expectedType:void 0,expr:void 0,env:r})})),e;if(we(e))return vt(e)||(e.fields=e.fields.map(i=>({...i,type:Tt({type:i.type,expectedType:void 0,expr:void 0,env:r})}))),e;if(Ve(e))return e.variants=e.variants.map(i=>(i.fields&&(i.fields=i.fields.map(a=>({...a,type:Tt({type:a.type,expectedType:void 0,expr:void 0,env:r})}))),i)),e;if(zt(e))t&&(ze(t)&&(ir(t.childType)||ua(t.childType))||ft(t))&&(o=t),o||(o=vr(fr()));else return e}return o&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=o),o??e}function Qu(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isCompileTimeOnly&&(n=`compt(${n})`);let r=x(e.type,t),o=e.exprs.defaultValueExpr?T(e.exprs.defaultValueExpr):"";return o?`(${n} : ${r}) ?= ${o}`:`${n} : ${r}`}function qr(e,t=new Set){let n=e.label;Nn(n)&&(n=`(${n})`),e.isCompileTimeOnly&&(n=`compt(${n})`);let r=e.defaultValue?He(e.defaultValue):"",o=e.assignedValue?He(e.assignedValue):"";return r?`(${n}: ${x(e.type,t)}) ?= ${r}`:o?`(${n}: ${x(e.type,t)}) = ${o}`:`${n}: ${x(e.type,t)}`}function Nd(e,t=new Set){let n=e.label;Nn(n)&&(n=`(${n})`);let r=e.defaultValue?He(e.defaultValue):"",o=e.assignedValue?He(e.assignedValue):"";return r?`(${n} : ${x(e.type,t)}) ?= ${r}`:o?`(${n} : ${x(e.type,t)}) = ${o}`:`${n} : ${x(e.type,t)}`}function Zu(e,t=new Set){var d;let n=e.parameters.map(c=>Qu(c,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(c=>Qu(c,t)).join(", ")})`:"",o="";e.variadicParameter&&(e.variadicParameter.label==="..."?o="...":e.variadicParameter.isQuote?o=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?o=`...(compt(${e.variadicParameter.label}))`:o=`...(${e.variadicParameter.label})`);let i=x(e.return.type,t),a=i;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${i})`:a=`unquote(${i})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(compt(${e.return.label}) : ${i})`:a=`compt(${i})`);let s=[r,n,o].filter(c=>!!c).join(", "),l=(d=e.SelfType)==null?void 0:d.typeName;return`${l?`(${l}) `:""}fn(${s}) -> ${a}`}function x(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return Dd(e,t)}finally{e.id&&t.delete(e.id)}}function Dd(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${x(e.childType,t)}; ${He(e.length)}]`;case"Slice":return`[${x(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>qr(n,t)).join(", ")}${e.fields.length===1?",":""})`;case"Struct":{let n=e;return n.typeName?n.typeName:`${n.typeName?`(${n.typeName}) `:""}${n.isReferenceSemantics?"object":n.isNewtype?"newtype":"struct"}(${n.fields.map(r=>qr(r,t)).join(", ")})`}case"Enum":{let n=e;if(n.typeName){let r=n.typeName;return n.requiredVariantNames??n.selectedVariantName?`${r} (${n.requiredVariantNames?`${n.requiredVariantNames.map(o=>`.${o}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(o=>qr(o,t)).join(", ")})`:""}`).join(", ")})`}case"Union":{let n=e;if(n.typeName)return n.typeName;let r=n.fields;return`${n.typeName?`(${n.typeName}) `:""}${n.typeName?"union":n.id}(${r.map(o=>qr(o,t)).join(", ")})`}case"Module":{let n=e;if(Bt(n))return`Fn${Zu(n.isFn.callType,t).slice(2)}`;if(an(n))return`Future(${x(n.isFuture.outputType,t)})`;let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(o=>Nd(o,t)).join(", ")})`,n.receiverType&&(r=`(${x(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:Zu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return T(n.functionApplication);let r=[];if(n.requiredModules&&n.requiredModules.length>0)for(let o of n.requiredModules)r.push(x(o,t));if(n.negativeModules&&n.negativeModules.length>0)for(let o of n.negativeModules)r.push(`!(${x(o,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${x(e.childType,t)})`;case"Iso":return`Iso(${x(e.childType,t)})`;case"Expr":return"Expr";case"ComptList":return`ComptList(${x(e.childType)})`;case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let o of n.requiredModules)r.push(x(o,t));if(n.negativeModules&&n.negativeModules.length>0)for(let o of n.negativeModules)r.push(`!(${x(o,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var Ju=64;function sa(){return Ju}function la(){return Ju/8}function Od(e){let t=yr(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(tt(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function Bd(e){let t=0;for(let n of e.fields){let r=yr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function Ud(e){let t=0;for(let n of e.fields){let r=yr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function Rd(e){let t=0,n=0;for(let y of e.variants){let h=0;if(y.fields)for(let _ of y.fields){let g=yr(_.type);if(g===null)return null;if(g===-1)return-1;h+=g;let $=nr(_.type);if($===null)return null;n=Math.max(n,$*8)}t=Math.max(t,h)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,o=32,i=Math.max(n,8),a=Math.max(o,i),s=r/8,l=i/8,u=(l-s%l)%l*8,d=r+u+t,c=d/8,f=a/8,m=(f-c%f)%f*8;return d+m}function Pd(e){let t=0;for(let n of e.fields){let r=yr(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function nr(e){if(X(e))return null;if(De(e)||_t(e)||Mt(e)||Pt(e)||zt(e)||$t(e)||Fe(e)||ht(e))return 1;if(Cn(e))return 1;if(Eo(e)||Co(e))return la();if(ir(e)||ko(e))return 1;if(bo(e)||wo(e))return 2;if(Fo(e)||Vo(e))return 4;if(xo(e)||Mo(e))return 8;if(Lo(e))return 4;if(So(e))return 8;if(Oe(e))return nr(e.childType);if(Ne(e)){let t=1;for(let n of e.fields){let r=nr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(we(e)){if(e.isReferenceSemantics)return la();if(e.isNewtype)return nr(e.fields[0].type);let t=1;for(let n of e.fields){let r=nr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ve(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let o=nr(r.type);if(o===null)return null;t=Math.max(t,o)}return t}else if(pt(e)){let t=1;for(let n of e.fields){let r=nr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(me(e))return la();if(ze(e))return la()}return null}function yr(e){return X(e)?null:De(e)||_t(e)||Mt(e)||Pt(e)||zt(e)||$t(e)||Fe(e)||ht(e)?0:Cn(e)?8:Eo(e)||Co(e)?sa():ir(e)||ko(e)?8:bo(e)||wo(e)?16:Fo(e)||Vo(e)?32:xo(e)||Mo(e)?64:Lo(e)?32:So(e)?64:Oe(e)?Od(e):Ne(e)?Bd(e):we(e)?e.isReferenceSemantics?sa():e.isNewtype?yr(e.fields[0].type):Ud(e):Ve(e)?Rd(e):pt(e)?Pd(e):me(e)||ze(e)?sa():null}function or(e,t){if(ar(e))throw st([{token:t,errorMessage:`Cannot use 'void' type here.
110
112
  Please consider use 'unit' type instead.
111
- `}])}function go(e,t=new Set){if(!$t(e))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let n of e.fields)if(vr(n.type,e,t))return!0;return!1}finally{t.delete(e.id)}}function vr(e,t,n){if($e(e)&&e.id===t.id)return!0;if($e(e)&&e.isReferenceSemantics)return go(e,new Set(n));if(Ve(e)){for(let r of e.variants)if(r.fields){for(let o of r.fields)if(vr(o.type,t,n))return!0}}if(ee(e))return e.resolvedConcreteType?vr(e.resolvedConcreteType,t,n):!0;if(Oe(e)||at(e))return vr(e.childType,t,n);if(He(e)){for(let r of e.fields)if(vr(r.type,t,n))return!0}if(ot(e)){for(let r of e.fields)if(vr(r.type,t,n))return!0}return Ne(e)?!0:(De(e),!1)}function Rn(e,t){return t?e.id===t.id?!0:Oe(e)||at(e)||De(e)?Rn(e.childType,t):He(e)?e.fields.some(n=>Rn(n.type,t)):$e(e)?e.fields.some(n=>Rn(n.type,t)):ot(e)?e.fields.some(n=>Rn(n.type,t)):Ve(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Rn(o.type,t))}):ce(e)?Rn(e.return.type,t):!1:!1}function xo(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function Be(e){return(e==null?void 0:e.tag)==="unit"}function kt(e){return(e==null?void 0:e.tag)==="compt_int"}function Bt(e){return(e==null?void 0:e.tag)==="compt_float"}function Pt(e){return(e==null?void 0:e.tag)==="compt_string"}function mt(e){return(e==null?void 0:e.tag)==="ComptList"}function Er(e){return mt(e)&&dt(e.childType)}function vn(e){return(e==null?void 0:e.tag)==="bool"}function ho(e){return(e==null?void 0:e.tag)==="usize"}function vo(e){return(e==null?void 0:e.tag)==="isize"}function nr(e){return(e==null?void 0:e.tag)==="u8"}function To(e){return(e==null?void 0:e.tag)==="i8"}function $o(e){return(e==null?void 0:e.tag)==="u16"}function Eo(e){return(e==null?void 0:e.tag)==="i16"}function Co(e){return(e==null?void 0:e.tag)==="u32"}function ko(e){return(e==null?void 0:e.tag)==="i32"}function bo(e){return(e==null?void 0:e.tag)==="u64"}function Fo(e){return(e==null?void 0:e.tag)==="i64"}function wo(e){return(e==null?void 0:e.tag)==="f32"}function Vo(e){return(e==null?void 0:e.tag)==="f64"}function dt(e){return(e==null?void 0:e.tag)==="Expr"}function Oe(e){return(e==null?void 0:e.tag)==="Array"}function at(e){return(e==null?void 0:e.tag)==="Slice"}function He(e){return(e==null?void 0:e.tag)==="Tuple"}function ot(e){return(e==null?void 0:e.tag)==="Union"}function Ve(e){return(e==null?void 0:e.tag)==="Enum"}function $e(e){return(e==null?void 0:e.tag)==="Struct"}function $t(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function Da(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function Ee(e){return(e==null?void 0:e.tag)==="Module"}function Ut(e){return(e==null?void 0:e.tag)==="Module"&&!!e.isFn}function ce(e){return(e==null?void 0:e.tag)==="Function"}function ta(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function ft(e){return(e==null?void 0:e.tag)==="Type"}function yu(e){return ft(e)&&e.tag==="Type"&&e.level===0}function ee(e){return(e==null?void 0:e.tag)==="SomeType"}function De(e){return(e==null?void 0:e.tag)==="Ptr"}function gt(e){return(e==null?void 0:e.tag)==="Iso"}function Ne(e){return(e==null?void 0:e.tag)==="Dyn"}function Xt(e){if(ee(e)){let t=e;if(Pe(t))return!0;if(t.resolvedConcreteType)return Xt(t.resolvedConcreteType)}return $t(e)||Ne(e)||gt(e)}function Tr(e){return(e==null?void 0:e.tag)==="u8"||(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="u16"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="u32"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="u64"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="usize"||(e==null?void 0:e.tag)==="isize"}function $r(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function ea(e){return(e==null?void 0:e.tag)==="char"}function rr(e){return(e==null?void 0:e.tag)==="void"}function Wt(e){return Ee(e)&&e.isFuture!==void 0}function _u(e){return Ee(e)&&e.isConcrete!==void 0}function In(e){return!!e&&(e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble")}function Nn(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(o=>o.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(o=>!o.isCompileTimeOnly&&ee(o.type)&&!Pe(o.type));return t||n}function yn(e){var t;return $t(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function W(e,t,n=!1,r=new Set){var a,s;let o=e.type.id,i=t.type.id;if(o&&i&&($e(e.type)||Ve(e.type)||ot(e.type))&&($e(t.type)||Ve(t.type)||ot(t.type))){let l=`${o}:${i}`;if(r.has(l))return!0;r.add(l)}if(xo(e.type)&&xo(t.type))return e.type.tag===t.type.tag;if((kt(e.type)||e.type.tag==="u8"||e.type.tag==="i8"||e.type.tag==="u16"||e.type.tag==="i16"||e.type.tag==="u32"||e.type.tag==="i32"||e.type.tag==="u64"||e.type.tag==="i64"||e.type.tag==="usize"||e.type.tag==="isize"||In(e.type))&&kt(t.type))return!(n&&!kt(e.type));if((Bt(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Bt(t.type))return!(n&&!Bt(e.type));if((Pt(e.type)||at(e.type)&&nr(e.type.childType)||De(e.type)&&(nr(e.type.childType)||ea(e.type.childType)))&&Pt(t.type))return!0;if(In(e.type)&&In(t.type))return e.type.tag===t.type.tag;if(dt(e.type)&&dt(t.type))return!0;if(mt(e.type)&&mt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Oe(e.type)&&Oe(t.type))return Lt({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(at(e.type)&&at(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(He(e.type)&&He(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(!W({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if($e(e.type)&&$e(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ye(e.type)&&!Ye(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(u.label!==d.label||!W({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(Ve(e.type)&&Ve(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],d=t.type.variants[l];if(u.name!==d.name||((a=u.fields)==null?void 0:a.length)!==((s=d.fields)==null?void 0:s.length))return!1;if(u.fields)for(let c=0;c<u.fields.length;c++){let f=u.fields[c],m=d.fields[c];if(f.label!==m.label||!W({type:f.type,env:e.env},{type:m.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(ot(e.type)&&ot(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ye(e.type)&&!Ye(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(u.label!==d.label||!W({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(Ee(e.type))return Ee(t.type)?Ut(e.type)?!(!Ut(t.type)||!gu({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n)):Wt(e.type)?!(!Wt(t.type)||!W({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r)):e.type.id===t.type.id:ft(t.type)&&t.type.baseType&&t.type.baseType.module&&Ee(e.type)?W({type:e.type,env:e.env},{type:t.type.baseType.module,env:t.env},n,r):!1;if(ce(e.type)&&ce(t.type))return gu({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(ft(e.type)&&ft(t.type))return Ql(e.type,t.type);if(De(e.type)&&De(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(gt(e.type)&&gt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.type.tag==="void"&&t.type.tag==="void")return!0;if(Ne(e.type)&&Ne(t.type)){for(let l of e.type.requiredModules)if(!t.type.requiredModules.find(d=>W({type:l,env:e.env},{type:d,env:t.env},n,r)))return!1;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let l of e.type.negativeModules)if(t.type.requiredModules.find(d=>W({type:l,env:e.env},{type:d,env:t.env},n,r)))return!1}return!0}if(ee(e.type)){if(Ne(t.type))return!0;if(ee(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=e.type.requiredModules??[],u=t.type.requiredModules??[];if(n&&l.length!==u.length)return!1;for(let d of l)if(!u.find(f=>W({type:d,env:e.env},{type:f,env:t.env},n,r)))return!1;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let d of e.type.negativeModules)if(u.find(f=>W({type:d,env:e.env},{type:f,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r))return!1}else if(n&&(e.type.resolvedConcreteType||t.type.resolvedConcreteType))return!1;return!0}else{let l=e.type.requiredModules??[];if(l.length>0){for(let c of l)if(!_o({targetType:t.type,moduleType:c,env:e.env}))break;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let c of e.type.negativeModules)if(_o({targetType:t.type,moduleType:c,env:e.env}))return!1}let d=!0;for(let c of l)if(!_o({targetType:t.type,moduleType:c,env:e.env})){d=!1;break}if(d)return!0}let u=fn(e.env,e.type);return e.type===u?!1:W({type:u,env:e.env},t,n,r)}}else if(ee(t.type)){if(t.type.resolvedConcreteType&&W(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=fn(t.env,t.type);return t.type===l?!1:W(e,{type:l,env:t.env},n,r)}return!1}function gu(e,t,n=!1){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:o,givenEnv:i}=pt({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=o,t.env=i}catch{return!1}for(let o=0;o<e.type.forallParameters.length;o++){let i=e.type.forallParameters[o],a=t.type.forallParameters[o];if(!W({type:i.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let o=0;o<e.type.parameters.length;o++){let i=e.type.parameters[o],a=t.type.parameters[o];if(i.isCompileTimeOnly!==a.isCompileTimeOnly||!W({type:i.type,env:e.env},{type:a.type,env:t.env},n))return!1}return W({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function na(e,t,n){let r=!1,o=0;for(let i of t){let a=i.type;if(n.includes(i))throw p({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
112
- Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if($t(a))continue;let s=[...n,i],l=At(a,s);ft(l)&&(o=Math.max(o,l.level),l.tag==="Type"&&(r=!0))}return o>0?dn(o):r?lt(e):lt(e)}function At(e,t=[]){if(Ne(e))return lt(e);if(xo(e))return lt(e);if(ft(e))return dn(e.level+1);if(kt(e)||Bt(e)||Pt(e)||mt(e))return lt(e);if(dt(e))return lt(e);if(ce(e))return lt(e);if(Ut(e))return lt(e);if(Oe(e))return At(e.childType,t);if(at(e))return lt(e);if(He(e))return na(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if($e(e))return na(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(Ve(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields.filter(o=>!o.isCompileTimeOnly));return na(e,n,t)}else{if(ot(e))return na(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(Ee(e))return dn(1,e);if(ee(e))return e.parentType;if(De(e))return lt(e);if(gt(e))return lt(e);if(Wt(e))return lt(e);if(rr(e))return lt(e);throw new Error(`Unknown type tag: ${e.tag}`)}}function hu(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function yt(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FuncCall":return{...e,func:yt(e.func),args:e.args.map(yt),$:void 0}}}function V(e){return(e==null?void 0:e.tag)==="FuncCall"}function j(e){return(e==null?void 0:e.tag)==="Atom"}function en(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function Rr(e){return e.tag==="Atom"&&e.token.type==="operator"}function v(e,t,n){if(e.tag!=="FuncCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.func.token.type==="backtick_identifier"&&(r=r.slice(1,-1)),e.tag==="FuncCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function Ce(e,t,n){if(!V(e))throw p({token:e.token,errorMessage:`Expected function call, got atom:
113
+ `}])}function To(e,t=new Set){if(!vt(e))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let n of e.fields)if(Er(n.type,e,t))return!0;return!1}finally{t.delete(e.id)}}function Er(e,t,n){if(we(e)&&e.id===t.id)return!0;if(we(e)&&e.isReferenceSemantics)return To(e,new Set(n));if(Ve(e)){for(let r of e.variants)if(r.fields){for(let o of r.fields)if(Er(o.type,t,n))return!0}}if(X(e))return e.resolvedConcreteType?Er(e.resolvedConcreteType,t,n):!0;if(Oe(e)||ft(e))return Er(e.childType,t,n);if(Ne(e)){for(let r of e.fields)if(Er(r.type,t,n))return!0}if(pt(e)){for(let r of e.fields)if(Er(r.type,t,n))return!0}return Re(e)?!0:(ze(e),!1)}function Wn(e,t){return t?e.id===t.id?!0:Oe(e)||ft(e)||ze(e)?Wn(e.childType,t):Ne(e)?e.fields.some(n=>Wn(n.type,t)):we(e)?e.fields.some(n=>Wn(n.type,t)):pt(e)?e.fields.some(n=>Wn(n.type,t)):Ve(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Wn(o.type,t))}):me(e)?Wn(e.return.type,t):!1:!1}function Ao(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function De(e){return(e==null?void 0:e.tag)==="unit"}function Mt(e){return(e==null?void 0:e.tag)==="compt_int"}function Pt(e){return(e==null?void 0:e.tag)==="compt_float"}function zt(e){return(e==null?void 0:e.tag)==="compt_string"}function $t(e){return(e==null?void 0:e.tag)==="ComptList"}function br(e){return $t(e)&&ht(e.childType)}function Cn(e){return(e==null?void 0:e.tag)==="bool"}function Eo(e){return(e==null?void 0:e.tag)==="usize"}function Co(e){return(e==null?void 0:e.tag)==="isize"}function ir(e){return(e==null?void 0:e.tag)==="u8"}function ko(e){return(e==null?void 0:e.tag)==="i8"}function bo(e){return(e==null?void 0:e.tag)==="u16"}function wo(e){return(e==null?void 0:e.tag)==="i16"}function Fo(e){return(e==null?void 0:e.tag)==="u32"}function Vo(e){return(e==null?void 0:e.tag)==="i32"}function xo(e){return(e==null?void 0:e.tag)==="u64"}function Mo(e){return(e==null?void 0:e.tag)==="i64"}function Lo(e){return(e==null?void 0:e.tag)==="f32"}function So(e){return(e==null?void 0:e.tag)==="f64"}function ht(e){return(e==null?void 0:e.tag)==="Expr"}function Oe(e){return(e==null?void 0:e.tag)==="Array"}function ft(e){return(e==null?void 0:e.tag)==="Slice"}function Ne(e){return(e==null?void 0:e.tag)==="Tuple"}function pt(e){return(e==null?void 0:e.tag)==="Union"}function Ve(e){return(e==null?void 0:e.tag)==="Enum"}function we(e){return(e==null?void 0:e.tag)==="Struct"}function vt(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function Ka(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function Fe(e){return(e==null?void 0:e.tag)==="Module"}function Bt(e){return(e==null?void 0:e.tag)==="Module"&&!!e.isFn}function me(e){return(e==null?void 0:e.tag)==="Function"}function pa(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function _t(e){return(e==null?void 0:e.tag)==="Type"}function Xu(e){return _t(e)&&e.tag==="Type"&&e.level===0}function X(e){return(e==null?void 0:e.tag)==="SomeType"}function ze(e){return(e==null?void 0:e.tag)==="Ptr"}function Ct(e){return(e==null?void 0:e.tag)==="Iso"}function Re(e){return(e==null?void 0:e.tag)==="Dyn"}function tn(e){if(X(e)){let t=e;if(je(t))return!0;if(t.resolvedConcreteType)return tn(t.resolvedConcreteType)}return vt(e)||Re(e)||Ct(e)}function Cr(e){return(e==null?void 0:e.tag)==="u8"||(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="u16"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="u32"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="u64"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="usize"||(e==null?void 0:e.tag)==="isize"}function kr(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function ua(e){return(e==null?void 0:e.tag)==="char"}function ar(e){return(e==null?void 0:e.tag)==="void"}function an(e){return Fe(e)&&e.isFuture!==void 0}function ep(e){return Fe(e)&&e.isConcrete!==void 0}function On(e){return!!e&&(e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble")}function ln(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(o=>o.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(o=>!o.isCompileTimeOnly&&X(o.type)&&!je(o.type));return t||n}function $n(e){var t;return vt(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function te(e,t,n=!1,r=new Set){var a,s;let o=e.type.id,i=t.type.id;if(o&&i&&(we(e.type)||Ve(e.type)||pt(e.type))&&(we(t.type)||Ve(t.type)||pt(t.type))){let l=`${o}:${i}`;if(r.has(l))return!0;r.add(l)}if(Ao(e.type)&&Ao(t.type))return e.type.tag===t.type.tag;if((Mt(e.type)||e.type.tag==="u8"||e.type.tag==="i8"||e.type.tag==="u16"||e.type.tag==="i16"||e.type.tag==="u32"||e.type.tag==="i32"||e.type.tag==="u64"||e.type.tag==="i64"||e.type.tag==="usize"||e.type.tag==="isize"||On(e.type))&&Mt(t.type))return!(n&&!Mt(e.type));if((Pt(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Pt(t.type))return!(n&&!Pt(e.type));if((zt(e.type)||ft(e.type)&&ir(e.type.childType)||ze(e.type)&&(ir(e.type.childType)||ua(e.type.childType)))&&zt(t.type))return!0;if(On(e.type)&&On(t.type))return e.type.tag===t.type.tag;if(ht(e.type)&&ht(t.type))return!0;if($t(e.type)&&$t(t.type))return te({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Oe(e.type)&&Oe(t.type))return Nt({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&te({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(ft(e.type)&&ft(t.type))return te({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Ne(e.type)&&Ne(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(!te({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(we(e.type)&&we(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ke(e.type)&&!Ke(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(u.label!==d.label||!te({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(Ve(e.type)&&Ve(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],d=t.type.variants[l];if(u.name!==d.name||((a=u.fields)==null?void 0:a.length)!==((s=d.fields)==null?void 0:s.length))return!1;if(u.fields)for(let c=0;c<u.fields.length;c++){let f=u.fields[c],m=d.fields[c];if(f.label!==m.label||!te({type:f.type,env:e.env},{type:m.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(pt(e.type)&&pt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ke(e.type)&&!Ke(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(u.label!==d.label||!te({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(Fe(e.type))return Fe(t.type)?Bt(e.type)?!(!Bt(t.type)||!tp({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n)):an(e.type)?!(!an(t.type)||!te({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r)):e.type.id===t.type.id:_t(t.type)&&t.type.baseType&&t.type.baseType.module&&Fe(e.type)?te({type:e.type,env:e.env},{type:t.type.baseType.module,env:t.env},n,r):!1;if(me(e.type)&&me(t.type))return tp({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(_t(e.type)&&_t(t.type))return Iu(e.type,t.type);if(ze(e.type)&&ze(t.type))return te({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Ct(e.type)&&Ct(t.type))return te({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.type.tag==="void"&&t.type.tag==="void")return!0;if(Re(e.type)&&Re(t.type)){for(let l of e.type.requiredModules)if(!t.type.requiredModules.find(d=>te({type:l,env:e.env},{type:d,env:t.env},n,r)))return!1;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let l of e.type.negativeModules)if(t.type.requiredModules.find(d=>te({type:l,env:e.env},{type:d,env:t.env},n,r)))return!1}return!0}if(X(e.type)){if(Re(t.type))return!0;if(X(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?te({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=e.type.requiredModules??[],u=t.type.requiredModules??[];if(n&&l.length!==u.length)return!1;for(let d of l)if(!u.find(f=>te({type:d,env:e.env},{type:f,env:t.env},n,r)))return!1;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let d of e.type.negativeModules)if(u.find(f=>te({type:d,env:e.env},{type:f,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!te({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r))return!1}else if(n&&(e.type.resolvedConcreteType||t.type.resolvedConcreteType))return!1;return!0}else{let l=e.type.requiredModules??[];if(l.length>0){for(let c of l)if(!$o({targetType:t.type,moduleType:c,env:e.env}))break;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let c of e.type.negativeModules)if($o({targetType:t.type,moduleType:c,env:e.env}))return!1}let d=!0;for(let c of l)if(!$o({targetType:t.type,moduleType:c,env:e.env})){d=!1;break}if(d)return!0}let u=mn(e.env,e.type);return e.type===u?!1:te({type:u,env:e.env},t,n,r)}}else if(X(t.type)){if(t.type.resolvedConcreteType&&te(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=mn(t.env,t.type);return t.type===l?!1:te(e,{type:l,env:t.env},n,r)}return!1}function tp(e,t,n=!1){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:o,givenEnv:i}=mt({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=o,t.env=i}catch{return!1}for(let o=0;o<e.type.forallParameters.length;o++){let i=e.type.forallParameters[o],a=t.type.forallParameters[o];if(!te({type:i.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let o=0;o<e.type.parameters.length;o++){let i=e.type.parameters[o],a=t.type.parameters[o];if(i.isCompileTimeOnly!==a.isCompileTimeOnly||!te({type:i.type,env:e.env},{type:a.type,env:t.env},n))return!1}return te({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function ca(e,t,n){let r=!1,o=0;for(let i of t){let a=i.type;if(n.includes(i))throw p({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
114
+ Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(vt(a))continue;let s=[...n,i],l=Ot(a,s);_t(l)&&(o=Math.max(o,l.level),l.tag==="Type"&&(r=!0))}return o>0?hn(o):r?ut(e):ut(e)}function Ot(e,t=[]){if(Re(e))return ut(e);if(Ao(e))return ut(e);if(_t(e))return hn(e.level+1);if(Mt(e)||Pt(e)||zt(e)||$t(e))return ut(e);if(ht(e))return ut(e);if(me(e))return ut(e);if(Bt(e))return ut(e);if(Oe(e))return Ot(e.childType,t);if(ft(e))return ut(e);if(Ne(e))return ca(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(we(e))return ca(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(Ve(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields.filter(o=>!o.isCompileTimeOnly));return ca(e,n,t)}else{if(pt(e))return ca(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(Fe(e))return hn(1,e);if(X(e))return e.parentType;if(ze(e))return ut(e);if(Ct(e))return ut(e);if(an(e))return ut(e);if(ar(e))return ut(e);throw new Error(`Unknown type tag: ${e.tag}`)}}function np(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function dt(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FuncCall":return{...e,func:dt(e.func),args:e.args.map(dt),$:void 0}}}function V(e){return(e==null?void 0:e.tag)==="FuncCall"}function Q(e){return(e==null?void 0:e.tag)==="Atom"}function nn(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function jr(e){return e.tag==="Atom"&&e.token.type==="operator"}function v(e,t,n){if(e.tag!=="FuncCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.func.token.type==="backtick_identifier"&&(r=r.slice(1,-1)),e.tag==="FuncCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function Ce(e,t,n){if(!V(e))throw p({token:e.token,errorMessage:`Expected function call, got atom:
113
115
  ${T(e)}`});if(!v(e,t))throw p({token:e.token,errorMessage:`Expected function call of ${Array.isArray(t)?t.map(r=>`"${r}"`).join(" or "):`"${t}"`}, got:
114
116
  ${T(e)}`});if(n!==void 0&&e.args.length!==n)throw p({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
115
- ${T(e)}`})}function ai(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FuncCall"&&t.tag==="FuncCall"){if(!ai(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!ai(e.args[n],t.args[n]))return!1;return!0}return!1}var A={compt:["compt"],ref:["ref"],forall:["forall","\u2200"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],not:["not"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],ComptList:["ComptList"],tuple:"tuple",array:"array",compt_list:"compt_list"},C={compt_expect_error:["compt_expect_error"],compt_assert:["compt_assert"],compt_print:["compt_print"],va_start:["va_start"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",async:["async"],await:["await"],__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_compt_list_car:["__yo_compt_list_car"],__yo_compt_list_cdr:["__yo_compt_list_cdr"],__yo_compt_list_cons:["__yo_compt_list_cons"],__yo_compt_list_append:["__yo_compt_list_append"],__yo_compt_list_length:["__yo_compt_list_length"],__yo_compt_list_element_type:["__yo_compt_list_element_type"],__yo_compt_int_add:["__yo_compt_int_add"],__yo_compt_int_sub:["__yo_compt_int_sub"],__yo_compt_int_mul:["__yo_compt_int_mul"],__yo_compt_int_div:["__yo_compt_int_div"],__yo_compt_int_mod:["__yo_compt_int_mod"],__yo_compt_int_eq:["__yo_compt_int_eq"],__yo_compt_int_neq:["__yo_compt_int_neq"],__yo_compt_int_lt:["__yo_compt_int_lt"],__yo_compt_int_lte:["__yo_compt_int_lte"],__yo_compt_int_gt:["__yo_compt_int_gt"],__yo_compt_int_gte:["__yo_compt_int_gte"],__yo_compt_int_as:["__yo_compt_int_as"],__yo_compt_int_neg:["__yo_compt_int_neg"],__yo_compt_int_to_float:["__yo_compt_int_to_float"],__yo_compt_int_to_string:["__yo_compt_int_to_string"],__yo_compt_float_add:["__yo_compt_float_add"],__yo_compt_float_sub:["__yo_compt_float_sub"],__yo_compt_float_mul:["__yo_compt_float_mul"],__yo_compt_float_div:["__yo_compt_float_div"],__yo_compt_float_eq:["__yo_compt_float_eq"],__yo_compt_float_neq:["__yo_compt_float_neq"],__yo_compt_float_lt:["__yo_compt_float_lt"],__yo_compt_float_lte:["__yo_compt_float_lte"],__yo_compt_float_gt:["__yo_compt_float_gt"],__yo_compt_float_gte:["__yo_compt_float_gte"],__yo_compt_float_as:["__yo_compt_float_as"],__yo_compt_float_neg:["__yo_compt_float_neg"],__yo_compt_float_to_int:["__yo_compt_float_to_int"],__yo_compt_float_to_string:["__yo_compt_float_to_string"],__yo_u8_add:["__yo_u8_add"],__yo_u8_sub:["__yo_u8_sub"],__yo_u8_mul:["__yo_u8_mul"],__yo_u8_div:["__yo_u8_div"],__yo_u8_mod:["__yo_u8_mod"],__yo_u8_eq:["__yo_u8_eq"],__yo_u8_neq:["__yo_u8_neq"],__yo_u8_lt:["__yo_u8_lt"],__yo_u8_lte:["__yo_u8_lte"],__yo_u8_gt:["__yo_u8_gt"],__yo_u8_gte:["__yo_u8_gte"],__yo_u8_neg:["__yo_u8_neg"],__yo_u8_to_string:["__yo_u8_to_string"],__yo_u8_as:["__yo_u8_as"],__yo_i8_add:["__yo_i8_add"],__yo_i8_sub:["__yo_i8_sub"],__yo_i8_mul:["__yo_i8_mul"],__yo_i8_div:["__yo_i8_div"],__yo_i8_mod:["__yo_i8_mod"],__yo_i8_eq:["__yo_i8_eq"],__yo_i8_neq:["__yo_i8_neq"],__yo_i8_lt:["__yo_i8_lt"],__yo_i8_lte:["__yo_i8_lte"],__yo_i8_gt:["__yo_i8_gt"],__yo_i8_gte:["__yo_i8_gte"],__yo_i8_neg:["__yo_i8_neg"],__yo_i8_to_string:["__yo_i8_to_string"],__yo_i8_as:["__yo_i8_as"],__yo_u16_add:["__yo_u16_add"],__yo_u16_sub:["__yo_u16_sub"],__yo_u16_mul:["__yo_u16_mul"],__yo_u16_div:["__yo_u16_div"],__yo_u16_mod:["__yo_u16_mod"],__yo_u16_eq:["__yo_u16_eq"],__yo_u16_neq:["__yo_u16_neq"],__yo_u16_lt:["__yo_u16_lt"],__yo_u16_lte:["__yo_u16_lte"],__yo_u16_gt:["__yo_u16_gt"],__yo_u16_gte:["__yo_u16_gte"],__yo_u16_neg:["__yo_u16_neg"],__yo_u16_to_string:["__yo_u16_to_string"],__yo_u16_as:["__yo_u16_as"],__yo_i16_add:["__yo_i16_add"],__yo_i16_sub:["__yo_i16_sub"],__yo_i16_mul:["__yo_i16_mul"],__yo_i16_div:["__yo_i16_div"],__yo_i16_mod:["__yo_i16_mod"],__yo_i16_eq:["__yo_i16_eq"],__yo_i16_neq:["__yo_i16_neq"],__yo_i16_lt:["__yo_i16_lt"],__yo_i16_lte:["__yo_i16_lte"],__yo_i16_gt:["__yo_i16_gt"],__yo_i16_gte:["__yo_i16_gte"],__yo_i16_neg:["__yo_i16_neg"],__yo_i16_to_string:["__yo_i16_to_string"],__yo_i16_as:["__yo_i16_as"],__yo_u32_add:["__yo_u32_add"],__yo_u32_sub:["__yo_u32_sub"],__yo_u32_mul:["__yo_u32_mul"],__yo_u32_div:["__yo_u32_div"],__yo_u32_mod:["__yo_u32_mod"],__yo_u32_eq:["__yo_u32_eq"],__yo_u32_neq:["__yo_u32_neq"],__yo_u32_lt:["__yo_u32_lt"],__yo_u32_lte:["__yo_u32_lte"],__yo_u32_gt:["__yo_u32_gt"],__yo_u32_gte:["__yo_u32_gte"],__yo_u32_neg:["__yo_u32_neg"],__yo_u32_to_string:["__yo_u32_to_string"],__yo_u32_as:["__yo_u32_as"],__yo_i32_add:["__yo_i32_add"],__yo_i32_sub:["__yo_i32_sub"],__yo_i32_mul:["__yo_i32_mul"],__yo_i32_div:["__yo_i32_div"],__yo_i32_mod:["__yo_i32_mod"],__yo_i32_eq:["__yo_i32_eq"],__yo_i32_neq:["__yo_i32_neq"],__yo_i32_lt:["__yo_i32_lt"],__yo_i32_lte:["__yo_i32_lte"],__yo_i32_gt:["__yo_i32_gt"],__yo_i32_gte:["__yo_i32_gte"],__yo_i32_neg:["__yo_i32_neg"],__yo_i32_to_string:["__yo_i32_to_string"],__yo_i32_as:["__yo_i32_as"],__yo_u64_add:["__yo_u64_add"],__yo_u64_sub:["__yo_u64_sub"],__yo_u64_mul:["__yo_u64_mul"],__yo_u64_div:["__yo_u64_div"],__yo_u64_mod:["__yo_u64_mod"],__yo_u64_eq:["__yo_u64_eq"],__yo_u64_neq:["__yo_u64_neq"],__yo_u64_lt:["__yo_u64_lt"],__yo_u64_lte:["__yo_u64_lte"],__yo_u64_gt:["__yo_u64_gt"],__yo_u64_gte:["__yo_u64_gte"],__yo_u64_neg:["__yo_u64_neg"],__yo_u64_to_string:["__yo_u64_to_string"],__yo_u64_as:["__yo_u64_as"],__yo_i64_add:["__yo_i64_add"],__yo_i64_sub:["__yo_i64_sub"],__yo_i64_mul:["__yo_i64_mul"],__yo_i64_div:["__yo_i64_div"],__yo_i64_mod:["__yo_i64_mod"],__yo_i64_eq:["__yo_i64_eq"],__yo_i64_neq:["__yo_i64_neq"],__yo_i64_lt:["__yo_i64_lt"],__yo_i64_lte:["__yo_i64_lte"],__yo_i64_gt:["__yo_i64_gt"],__yo_i64_gte:["__yo_i64_gte"],__yo_i64_neg:["__yo_i64_neg"],__yo_i64_to_string:["__yo_i64_to_string"],__yo_i64_as:["__yo_i64_as"],__yo_usize_add:["__yo_usize_add"],__yo_usize_sub:["__yo_usize_sub"],__yo_usize_mul:["__yo_usize_mul"],__yo_usize_div:["__yo_usize_div"],__yo_usize_mod:["__yo_usize_mod"],__yo_usize_eq:["__yo_usize_eq"],__yo_usize_neq:["__yo_usize_neq"],__yo_usize_lt:["__yo_usize_lt"],__yo_usize_lte:["__yo_usize_lte"],__yo_usize_gt:["__yo_usize_gt"],__yo_usize_gte:["__yo_usize_gte"],__yo_usize_neg:["__yo_usize_neg"],__yo_usize_to_string:["__yo_usize_to_string"],__yo_usize_as:["__yo_usize_as"],__yo_isize_add:["__yo_isize_add"],__yo_isize_sub:["__yo_isize_sub"],__yo_isize_mul:["__yo_isize_mul"],__yo_isize_div:["__yo_isize_div"],__yo_isize_mod:["__yo_isize_mod"],__yo_isize_eq:["__yo_isize_eq"],__yo_isize_neq:["__yo_isize_neq"],__yo_isize_lt:["__yo_isize_lt"],__yo_isize_lte:["__yo_isize_lte"],__yo_isize_gt:["__yo_isize_gt"],__yo_isize_gte:["__yo_isize_gte"],__yo_isize_neg:["__yo_isize_neg"],__yo_isize_to_string:["__yo_isize_to_string"],__yo_isize_as:["__yo_isize_as"],__yo_f32_add:["__yo_f32_add"],__yo_f32_sub:["__yo_f32_sub"],__yo_f32_mul:["__yo_f32_mul"],__yo_f32_div:["__yo_f32_div"],__yo_f32_eq:["__yo_f32_eq"],__yo_f32_neq:["__yo_f32_neq"],__yo_f32_lt:["__yo_f32_lt"],__yo_f32_lte:["__yo_f32_lte"],__yo_f32_gt:["__yo_f32_gt"],__yo_f32_gte:["__yo_f32_gte"],__yo_f32_neg:["__yo_f32_neg"],__yo_f32_to_string:["__yo_f32_to_string"],__yo_f32_as:["__yo_f32_as"],__yo_f64_add:["__yo_f64_add"],__yo_f64_sub:["__yo_f64_sub"],__yo_f64_mul:["__yo_f64_mul"],__yo_f64_div:["__yo_f64_div"],__yo_f64_eq:["__yo_f64_eq"],__yo_f64_neq:["__yo_f64_neq"],__yo_f64_lt:["__yo_f64_lt"],__yo_f64_lte:["__yo_f64_lte"],__yo_f64_gt:["__yo_f64_gt"],__yo_f64_gte:["__yo_f64_gte"],__yo_f64_neg:["__yo_f64_neg"],__yo_f64_to_string:["__yo_f64_to_string"],__yo_f64_as:["__yo_f64_as"],__yo_compt_boolean_and:["__yo_compt_boolean_and"],__yo_compt_boolean_or:["__yo_compt_boolean_or"],__yo_compt_boolean_eq:["__yo_compt_boolean_eq"],__yo_compt_boolean_neq:["__yo_compt_boolean_neq"],__yo_compt_boolean_not:["__yo_compt_boolean_not"],__yo_compt_boolean_to_string:["__yo_compt_boolean_to_string"],__yo_compt_string_concat:["__yo_compt_string_concat"],__yo_compt_string_eq:["__yo_compt_string_eq"],__yo_compt_string_neq:["__yo_compt_string_neq"],__yo_compt_string_lt:["__yo_compt_string_lt"],__yo_compt_string_lte:["__yo_compt_string_lte"],__yo_compt_string_gt:["__yo_compt_string_gt"],__yo_compt_string_gte:["__yo_compt_string_gte"],__yo_compt_string_length:["__yo_compt_string_length"],__yo_compt_string_to_upper:["__yo_compt_string_to_upper"],__yo_compt_string_to_lower:["__yo_compt_string_to_lower"],__yo_compt_string_slice:["__yo_compt_string_slice"],__yo_type_to_string:["__yo_type_to_string"],__yo_type_contains_gc_type:["__yo_type_contains_gc_type"],__yo_type_can_form_gc_cycle:["__yo_type_can_form_gc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_type_impls:["__yo_type_impls"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_gc_value:["__yo_var_is_owning_the_gc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"]};function qr(e){return!!(e.tag==="FuncCall"&&e.isInfix&&e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="backtick_identifier")&&e.args.length===2)}function T(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?pn(e,r):qn(e)}function qn(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FuncCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="."||e.func.token.type==="backtick_identifier")){if(e.args.length===1){e.func.token.value==="."?t=`${e.func.token.value}${qn(e.args[0])}`:t=`${e.func.token.value}(${qn(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let o=qn(e.args[0]),i=qn(e.args[1]);o=qr(e.args[0])||Rr(e.args[0])?`(${o})`:o,i=qr(e.args[1])||Rr(e.args[1])?`(${i})`:i,e.func.token.value==="."?t=`(${o}.${i})`:t=`${o} ${e.func.token.value} ${i}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===A.tuple){e.args.length===1?t=`(${qn(e.args[0])},)`:t=`(${e.args.map(o=>qn(o)).join(", ").trim()})`;break}let n=qn(e.func);n=qr(e.func)||Rr(e.func)?`(${n})`:n;let r=e.args.map(o=>qn(o)).join(", ").trim();t=`${n}(${r})`;break}}return t}function pn(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},o=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FuncCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="."||e.func.token.type==="backtick_identifier")){if(e.args.length===1){if(e.func.token.value===".")return`${e.func.token.value}${pn(e.args[0],t)}`;{let u=pn(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=pn(e.args[0],t),d=pn(e.args[1],t);return u=qr(e.args[0])||Rr(e.args[0])?`(${u})`:u,d=qr(e.args[1])||Rr(e.args[1])?`(${d})`:d,e.func.token.value==="."?`(${u}.${d})`:`${u} ${e.func.token.value} ${d}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===A.tuple){if(e.args.length===0)return"()";if(e.args.length===1)return`(${pn(e.args[0],t)},)`;{let u=e.args.map(c=>pn(c,t)),d=`(${u.join(", ")})`;return d.length<=t.maxLineLength?d:`(
117
+ ${T(e)}`})}function di(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FuncCall"&&t.tag==="FuncCall"){if(!di(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!di(e.args[n],t.args[n]))return!1;return!0}return!1}var A={compt:["compt"],ref:["ref"],forall:["forall","\u2200"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],not:["not"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],ComptList:["ComptList"],tuple:"tuple",array:"array",compt_list:"compt_list"},C={compt_expect_error:["compt_expect_error"],compt_assert:["compt_assert"],compt_print:["compt_print"],va_start:["va_start"],__yo_array_fill:["__yo_array_fill"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",async:["async"],await:["await"],__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_compt_list_car:["__yo_compt_list_car"],__yo_compt_list_cdr:["__yo_compt_list_cdr"],__yo_compt_list_cons:["__yo_compt_list_cons"],__yo_compt_list_append:["__yo_compt_list_append"],__yo_compt_list_length:["__yo_compt_list_length"],__yo_compt_list_element_type:["__yo_compt_list_element_type"],__yo_compt_int_add:["__yo_compt_int_add"],__yo_compt_int_sub:["__yo_compt_int_sub"],__yo_compt_int_mul:["__yo_compt_int_mul"],__yo_compt_int_div:["__yo_compt_int_div"],__yo_compt_int_mod:["__yo_compt_int_mod"],__yo_compt_int_eq:["__yo_compt_int_eq"],__yo_compt_int_neq:["__yo_compt_int_neq"],__yo_compt_int_lt:["__yo_compt_int_lt"],__yo_compt_int_lte:["__yo_compt_int_lte"],__yo_compt_int_gt:["__yo_compt_int_gt"],__yo_compt_int_gte:["__yo_compt_int_gte"],__yo_compt_int_as:["__yo_compt_int_as"],__yo_compt_int_neg:["__yo_compt_int_neg"],__yo_compt_int_to_float:["__yo_compt_int_to_float"],__yo_compt_int_to_string:["__yo_compt_int_to_string"],__yo_compt_float_add:["__yo_compt_float_add"],__yo_compt_float_sub:["__yo_compt_float_sub"],__yo_compt_float_mul:["__yo_compt_float_mul"],__yo_compt_float_div:["__yo_compt_float_div"],__yo_compt_float_eq:["__yo_compt_float_eq"],__yo_compt_float_neq:["__yo_compt_float_neq"],__yo_compt_float_lt:["__yo_compt_float_lt"],__yo_compt_float_lte:["__yo_compt_float_lte"],__yo_compt_float_gt:["__yo_compt_float_gt"],__yo_compt_float_gte:["__yo_compt_float_gte"],__yo_compt_float_as:["__yo_compt_float_as"],__yo_compt_float_neg:["__yo_compt_float_neg"],__yo_compt_float_to_int:["__yo_compt_float_to_int"],__yo_compt_float_to_string:["__yo_compt_float_to_string"],__yo_u8_add:["__yo_u8_add"],__yo_u8_sub:["__yo_u8_sub"],__yo_u8_mul:["__yo_u8_mul"],__yo_u8_div:["__yo_u8_div"],__yo_u8_mod:["__yo_u8_mod"],__yo_u8_eq:["__yo_u8_eq"],__yo_u8_neq:["__yo_u8_neq"],__yo_u8_lt:["__yo_u8_lt"],__yo_u8_lte:["__yo_u8_lte"],__yo_u8_gt:["__yo_u8_gt"],__yo_u8_gte:["__yo_u8_gte"],__yo_u8_neg:["__yo_u8_neg"],__yo_u8_to_string:["__yo_u8_to_string"],__yo_u8_as:["__yo_u8_as"],__yo_i8_add:["__yo_i8_add"],__yo_i8_sub:["__yo_i8_sub"],__yo_i8_mul:["__yo_i8_mul"],__yo_i8_div:["__yo_i8_div"],__yo_i8_mod:["__yo_i8_mod"],__yo_i8_eq:["__yo_i8_eq"],__yo_i8_neq:["__yo_i8_neq"],__yo_i8_lt:["__yo_i8_lt"],__yo_i8_lte:["__yo_i8_lte"],__yo_i8_gt:["__yo_i8_gt"],__yo_i8_gte:["__yo_i8_gte"],__yo_i8_neg:["__yo_i8_neg"],__yo_i8_to_string:["__yo_i8_to_string"],__yo_i8_as:["__yo_i8_as"],__yo_u16_add:["__yo_u16_add"],__yo_u16_sub:["__yo_u16_sub"],__yo_u16_mul:["__yo_u16_mul"],__yo_u16_div:["__yo_u16_div"],__yo_u16_mod:["__yo_u16_mod"],__yo_u16_eq:["__yo_u16_eq"],__yo_u16_neq:["__yo_u16_neq"],__yo_u16_lt:["__yo_u16_lt"],__yo_u16_lte:["__yo_u16_lte"],__yo_u16_gt:["__yo_u16_gt"],__yo_u16_gte:["__yo_u16_gte"],__yo_u16_neg:["__yo_u16_neg"],__yo_u16_to_string:["__yo_u16_to_string"],__yo_u16_as:["__yo_u16_as"],__yo_i16_add:["__yo_i16_add"],__yo_i16_sub:["__yo_i16_sub"],__yo_i16_mul:["__yo_i16_mul"],__yo_i16_div:["__yo_i16_div"],__yo_i16_mod:["__yo_i16_mod"],__yo_i16_eq:["__yo_i16_eq"],__yo_i16_neq:["__yo_i16_neq"],__yo_i16_lt:["__yo_i16_lt"],__yo_i16_lte:["__yo_i16_lte"],__yo_i16_gt:["__yo_i16_gt"],__yo_i16_gte:["__yo_i16_gte"],__yo_i16_neg:["__yo_i16_neg"],__yo_i16_to_string:["__yo_i16_to_string"],__yo_i16_as:["__yo_i16_as"],__yo_u32_add:["__yo_u32_add"],__yo_u32_sub:["__yo_u32_sub"],__yo_u32_mul:["__yo_u32_mul"],__yo_u32_div:["__yo_u32_div"],__yo_u32_mod:["__yo_u32_mod"],__yo_u32_eq:["__yo_u32_eq"],__yo_u32_neq:["__yo_u32_neq"],__yo_u32_lt:["__yo_u32_lt"],__yo_u32_lte:["__yo_u32_lte"],__yo_u32_gt:["__yo_u32_gt"],__yo_u32_gte:["__yo_u32_gte"],__yo_u32_neg:["__yo_u32_neg"],__yo_u32_to_string:["__yo_u32_to_string"],__yo_u32_as:["__yo_u32_as"],__yo_i32_add:["__yo_i32_add"],__yo_i32_sub:["__yo_i32_sub"],__yo_i32_mul:["__yo_i32_mul"],__yo_i32_div:["__yo_i32_div"],__yo_i32_mod:["__yo_i32_mod"],__yo_i32_eq:["__yo_i32_eq"],__yo_i32_neq:["__yo_i32_neq"],__yo_i32_lt:["__yo_i32_lt"],__yo_i32_lte:["__yo_i32_lte"],__yo_i32_gt:["__yo_i32_gt"],__yo_i32_gte:["__yo_i32_gte"],__yo_i32_neg:["__yo_i32_neg"],__yo_i32_to_string:["__yo_i32_to_string"],__yo_i32_as:["__yo_i32_as"],__yo_u64_add:["__yo_u64_add"],__yo_u64_sub:["__yo_u64_sub"],__yo_u64_mul:["__yo_u64_mul"],__yo_u64_div:["__yo_u64_div"],__yo_u64_mod:["__yo_u64_mod"],__yo_u64_eq:["__yo_u64_eq"],__yo_u64_neq:["__yo_u64_neq"],__yo_u64_lt:["__yo_u64_lt"],__yo_u64_lte:["__yo_u64_lte"],__yo_u64_gt:["__yo_u64_gt"],__yo_u64_gte:["__yo_u64_gte"],__yo_u64_neg:["__yo_u64_neg"],__yo_u64_to_string:["__yo_u64_to_string"],__yo_u64_as:["__yo_u64_as"],__yo_i64_add:["__yo_i64_add"],__yo_i64_sub:["__yo_i64_sub"],__yo_i64_mul:["__yo_i64_mul"],__yo_i64_div:["__yo_i64_div"],__yo_i64_mod:["__yo_i64_mod"],__yo_i64_eq:["__yo_i64_eq"],__yo_i64_neq:["__yo_i64_neq"],__yo_i64_lt:["__yo_i64_lt"],__yo_i64_lte:["__yo_i64_lte"],__yo_i64_gt:["__yo_i64_gt"],__yo_i64_gte:["__yo_i64_gte"],__yo_i64_neg:["__yo_i64_neg"],__yo_i64_to_string:["__yo_i64_to_string"],__yo_i64_as:["__yo_i64_as"],__yo_usize_add:["__yo_usize_add"],__yo_usize_sub:["__yo_usize_sub"],__yo_usize_mul:["__yo_usize_mul"],__yo_usize_div:["__yo_usize_div"],__yo_usize_mod:["__yo_usize_mod"],__yo_usize_eq:["__yo_usize_eq"],__yo_usize_neq:["__yo_usize_neq"],__yo_usize_lt:["__yo_usize_lt"],__yo_usize_lte:["__yo_usize_lte"],__yo_usize_gt:["__yo_usize_gt"],__yo_usize_gte:["__yo_usize_gte"],__yo_usize_neg:["__yo_usize_neg"],__yo_usize_to_string:["__yo_usize_to_string"],__yo_usize_as:["__yo_usize_as"],__yo_isize_add:["__yo_isize_add"],__yo_isize_sub:["__yo_isize_sub"],__yo_isize_mul:["__yo_isize_mul"],__yo_isize_div:["__yo_isize_div"],__yo_isize_mod:["__yo_isize_mod"],__yo_isize_eq:["__yo_isize_eq"],__yo_isize_neq:["__yo_isize_neq"],__yo_isize_lt:["__yo_isize_lt"],__yo_isize_lte:["__yo_isize_lte"],__yo_isize_gt:["__yo_isize_gt"],__yo_isize_gte:["__yo_isize_gte"],__yo_isize_neg:["__yo_isize_neg"],__yo_isize_to_string:["__yo_isize_to_string"],__yo_isize_as:["__yo_isize_as"],__yo_f32_add:["__yo_f32_add"],__yo_f32_sub:["__yo_f32_sub"],__yo_f32_mul:["__yo_f32_mul"],__yo_f32_div:["__yo_f32_div"],__yo_f32_eq:["__yo_f32_eq"],__yo_f32_neq:["__yo_f32_neq"],__yo_f32_lt:["__yo_f32_lt"],__yo_f32_lte:["__yo_f32_lte"],__yo_f32_gt:["__yo_f32_gt"],__yo_f32_gte:["__yo_f32_gte"],__yo_f32_neg:["__yo_f32_neg"],__yo_f32_to_string:["__yo_f32_to_string"],__yo_f32_as:["__yo_f32_as"],__yo_f64_add:["__yo_f64_add"],__yo_f64_sub:["__yo_f64_sub"],__yo_f64_mul:["__yo_f64_mul"],__yo_f64_div:["__yo_f64_div"],__yo_f64_eq:["__yo_f64_eq"],__yo_f64_neq:["__yo_f64_neq"],__yo_f64_lt:["__yo_f64_lt"],__yo_f64_lte:["__yo_f64_lte"],__yo_f64_gt:["__yo_f64_gt"],__yo_f64_gte:["__yo_f64_gte"],__yo_f64_neg:["__yo_f64_neg"],__yo_f64_to_string:["__yo_f64_to_string"],__yo_f64_as:["__yo_f64_as"],__yo_compt_boolean_and:["__yo_compt_boolean_and"],__yo_compt_boolean_or:["__yo_compt_boolean_or"],__yo_compt_boolean_eq:["__yo_compt_boolean_eq"],__yo_compt_boolean_neq:["__yo_compt_boolean_neq"],__yo_compt_boolean_not:["__yo_compt_boolean_not"],__yo_compt_boolean_to_string:["__yo_compt_boolean_to_string"],__yo_compt_string_concat:["__yo_compt_string_concat"],__yo_compt_string_eq:["__yo_compt_string_eq"],__yo_compt_string_neq:["__yo_compt_string_neq"],__yo_compt_string_lt:["__yo_compt_string_lt"],__yo_compt_string_lte:["__yo_compt_string_lte"],__yo_compt_string_gt:["__yo_compt_string_gt"],__yo_compt_string_gte:["__yo_compt_string_gte"],__yo_compt_string_length:["__yo_compt_string_length"],__yo_compt_string_to_upper:["__yo_compt_string_to_upper"],__yo_compt_string_to_lower:["__yo_compt_string_to_lower"],__yo_compt_string_slice:["__yo_compt_string_slice"],__yo_type_to_string:["__yo_type_to_string"],__yo_type_contains_rc_type:["__yo_type_contains_rc_type"],__yo_type_can_form_rc_cycle:["__yo_type_can_form_rc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_type_impls:["__yo_type_impls"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_rc_value:["__yo_var_is_owning_the_rc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_drop_array_element:["__yo_drop_array_element"],__yo_dup_array_element:["__yo_dup_array_element"],__yo_drop_tuple_element:["__yo_drop_tuple_element"],__yo_dup_tuple_element:["__yo_dup_tuple_element"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"]};function Wr(e){return!!(e.tag==="FuncCall"&&e.isInfix&&e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="backtick_identifier")&&e.args.length===2)}function T(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?yn(e,r):Hn(e)}function Hn(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FuncCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="."||e.func.token.type==="backtick_identifier")){if(e.args.length===1){e.func.token.value==="."?t=`${e.func.token.value}${Hn(e.args[0])}`:t=`${e.func.token.value}(${Hn(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let o=Hn(e.args[0]),i=Hn(e.args[1]);o=Wr(e.args[0])||jr(e.args[0])?`(${o})`:o,i=Wr(e.args[1])||jr(e.args[1])?`(${i})`:i,e.func.token.value==="."?t=`(${o}.${i})`:t=`${o} ${e.func.token.value} ${i}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===A.tuple){e.args.length===1?t=`(${Hn(e.args[0])},)`:t=`(${e.args.map(o=>Hn(o)).join(", ").trim()})`;break}let n=Hn(e.func);n=Wr(e.func)||jr(e.func)?`(${n})`:n;let r=e.args.map(o=>Hn(o)).join(", ").trim();t=`${n}(${r})`;break}}return t}function yn(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},o=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FuncCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="."||e.func.token.type==="backtick_identifier")){if(e.args.length===1){if(e.func.token.value===".")return`${e.func.token.value}${yn(e.args[0],t)}`;{let u=yn(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=yn(e.args[0],t),d=yn(e.args[1],t);return u=Wr(e.args[0])||jr(e.args[0])?`(${u})`:u,d=Wr(e.args[1])||jr(e.args[1])?`(${d})`:d,e.func.token.value==="."?`(${u}.${d})`:`${u} ${e.func.token.value} ${d}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===A.tuple){if(e.args.length===0)return"()";if(e.args.length===1)return`(${yn(e.args[0],t)},)`;{let u=e.args.map(c=>yn(c,t)),d=`(${u.join(", ")})`;return d.length<=t.maxLineLength?d:`(
116
118
  ${o}${u.join(`,
117
119
  ${o}`)}
118
- ${n})`}}let i=e.func.tag==="Atom"?e.func.token.value:null,a=i&&[...A.begin,...A.cond,...A.match,...A.fn,...A.if,...A.while].includes(i),s=pn(e.func,t);if(s=qr(e.func)||Rr(e.func)?`(${s})`:s,e.args.length===0)return`${s}()`;if(!a){let u=e.args.map(c=>pn(c,t)),d=`${s}(${u.join(", ")})`;if(d.length<=t.maxLineLength)return d}if(a){if(i===A.begin[0]){if(e.args.length===1){let d=pn(e.args[0],t);if(d.length<=t.maxLineLength&&!d.includes(`
119
- `))return`${s}(${d})`}let u=e.args.map(d=>pn(d,r));return`${s}(
120
+ ${n})`}}let i=e.func.tag==="Atom"?e.func.token.value:null,a=i&&[...A.begin,...A.cond,...A.match,...A.fn,...A.if,...A.while].includes(i),s=yn(e.func,t);if(s=Wr(e.func)||jr(e.func)?`(${s})`:s,e.args.length===0)return`${s}()`;if(!a){let u=e.args.map(c=>yn(c,t)),d=`${s}(${u.join(", ")})`;if(d.length<=t.maxLineLength)return d}if(a){if(i===A.begin[0]){if(e.args.length===1){let d=yn(e.args[0],t);if(d.length<=t.maxLineLength&&!d.includes(`
121
+ `))return`${s}(${d})`}let u=e.args.map(d=>yn(d,r));return`${s}(
120
122
  ${o}${u.join(`,
121
123
  ${o}`)}
122
- ${n})`}else if(i===A.cond[0]){let u=e.args.map(d=>{if(V(d)&&d.isInfix&&v(d,"=>")){let c=d.args[0],f=pn(d.args[1],r),m=pn(c,t);if(V(c)&&c.isInfix&&!v(c,"=>")&&(m=`(${m})`),f.includes(`
123
- `)){let g=f.split(`
124
- `).map((h,_)=>_===0?h:`${o}${h}`).join(`
125
- `);return`${m} => ${g}`}else return`${m} => ${f}`}return pn(d,r)});return`${s}(
124
+ ${n})`}else if(i===A.cond[0]){let u=e.args.map(d=>{if(V(d)&&d.isInfix&&v(d,"=>")){let c=d.args[0],f=yn(d.args[1],r),m=yn(c,t);if(V(c)&&c.isInfix&&!v(c,"=>")&&(m=`(${m})`),f.includes(`
125
+ `)){let h=f.split(`
126
+ `).map((_,g)=>g===0?_:`${o}${_}`).join(`
127
+ `);return`${m} => ${h}`}else return`${m} => ${f}`}return yn(d,r)});return`${s}(
126
128
  ${o}${u.join(`,
127
129
  ${o}`)}
128
- ${n})`}}let l=e.args.map(u=>pn(u,r));return`${s}(
130
+ ${n})`}}let l=e.args.map(u=>yn(u,r));return`${s}(
129
131
  ${o}${l.join(`,
130
132
  ${o}`)}
131
- ${n})`}}return qn(e)}function ze(e,t,n){if(!e.$)throw new Error(`Expected expression to be evaluated, but it is not:
132
- ${T(e)}`);let{env:r,type:o,value:i,originType:a}=e.$,s=r.modulePath,l=t&&qe(o);if(e.$.variableName){let c=me(r,e.$.variableName);if(c.length>0){let m=c[c.length-1],y=m.isOwningTheGcValue?l:!1,g={...m,type:o,value:y?void 0:i,isCompileTimeOnly:y?!1:!!i,isOwningTheGcValue:y,isOwningTheSameGcValueAs:n};e.$.env=Xe(r,m,g),a||(e.$.originType=o);return}let{env:f}=we({env:r,variable:{name:e.$.variableName,type:o,value:l?void 0:i,isCompileTimeOnly:l?!1:!!i,initializedAtToken:e.token,isOwningTheGcValue:l,isOwningTheSameGcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});a||(e.$.originType=o),e.$.env=f;return}let u=Rl(s),{env:d}=we({env:r,variable:{name:u,type:o,value:l?void 0:i,isCompileTimeOnly:l?!1:!!i,initializedAtToken:e.token,isOwningTheGcValue:l,isOwningTheSameGcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});e.$.variableName=u,a||(e.$.originType=o),e.$.env=d}function Mo(e,t){let n=e.frames.length-1,r=[];for(let o=0;o<t.length;o++){let i=t[o];if(!i.$)throw st([{token:i.token,errorMessage:"Expected the body of the case to be evaluated, but it is not."}]);let a=i.$.env;r.push(a)}for(let o=0;o<r.length;o++)if(r[o].frames.length-1!==n)throw st([{token:t[o].token,errorMessage:"Frame level is different for different cases."}]);for(let o=0;o<=n;o++){let i=o,s=[...e.frames[o].variables],l=[[]];s.forEach(c=>{l[0].push({consumedAtToken:c.consumedAtToken,initializedAtToken:c.initializedAtToken,type:c.type,isOwningTheGcValue:c.isOwningTheGcValue??!1})});for(let c=0;c<r.length;c++){let y=r[c].frames[o].variables;if(o!==n&&s.length!==y.length)throw st([{token:t[c].token,errorMessage:`Frame level ${o} has different number of values for different cases.`}]);for(let g=0;g<s.length;g++){let h=s[g],_=y[g];if(h.name!==_.name)throw st([{token:t[c].token,errorMessage:`Frame level ${o} has different variable names for different cases.`}])}l.push([]),y.forEach(g=>{l[l.length-1].push({consumedAtToken:g.consumedAtToken,initializedAtToken:g.initializedAtToken,type:g.type,isOwningTheGcValue:g.isOwningTheGcValue??!1})})}let u=l.length,d=l[0].length;for(let c=0;c<d;c++){let f=s[c].name,m=[],y=[],g=[],h=[];for(let $=1;$<u;$++){let F=r[$-1].frames[i].variables;m.push(l[$][c].initializedAtToken),y.push(l[$][c].isOwningTheGcValue?F[c].token:void 0),g.push(l[$][c].consumedAtToken),h.push(l[$][c].type)}let _=m.map(($,b)=>({token:$,index:b})).filter(({token:$})=>!!$);if(_.length>1){let $=h[_[0].index],b=r[_[0].index];for(let F=1;F<_.length;F++){let M=h[_[F].index],L=r[_[F].index];if(ee($)&&ee(M)){let O=$.resolvedConcreteType,B=M.resolvedConcreteType;if(O&&B&&!W({type:O,env:b},{type:B,env:L}))throw st([{token:t[_[0].index].token,errorMessage:`Variable "${f}" has type Impl(...) but different concrete types across branches.
133
+ ${n})`}}return Hn(e)}function Ze(e,t,n){if(!e.$)throw new Error(`Expected expression to be evaluated, but it is not:
134
+ ${T(e)}`);let{env:r,type:o,value:i,originType:a}=e.$,s=r.modulePath,l=t&&Ge(o);if(e.$.variableName){let c=he(r,e.$.variableName);if(c.length>0){let m=c[c.length-1],y=m.isOwningTheRcValue?l:!1,h={...m,type:o,value:y?void 0:i,isCompileTimeOnly:y?!1:!!i,isOwningTheRcValue:y,isOwningTheSameRcValueAs:n};e.$.env=et(r,m,h),a||(e.$.originType=o);return}let{env:f}=Me({env:r,variable:{name:e.$.variableName,type:o,value:l?void 0:i,isCompileTimeOnly:l?!1:!!i,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});a||(e.$.originType=o),e.$.env=f;return}let u=Fu(s),{env:d}=Me({env:r,variable:{name:u,type:o,value:l?void 0:i,isCompileTimeOnly:l?!1:!!i,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});e.$.variableName=u,a||(e.$.originType=o),e.$.env=d}function Io(e,t){let n=e.frames.length-1,r=[];for(let o=0;o<t.length;o++){let i=t[o];if(!i.$)throw st([{token:i.token,errorMessage:"Expected the body of the case to be evaluated, but it is not."}]);let a=i.$.env;r.push(a)}for(let o=0;o<r.length;o++)if(r[o].frames.length-1!==n)throw st([{token:t[o].token,errorMessage:"Frame level is different for different cases."}]);for(let o=0;o<=n;o++){let i=o,s=[...e.frames[o].variables],l=[[]];s.forEach(c=>{l[0].push({consumedAtToken:c.consumedAtToken,initializedAtToken:c.initializedAtToken,type:c.type,isOwningTheRcValue:c.isOwningTheRcValue??!1})});for(let c=0;c<r.length;c++){let y=r[c].frames[o].variables;if(o!==n&&s.length!==y.length)throw st([{token:t[c].token,errorMessage:`Frame level ${o} has different number of values for different cases.`}]);for(let h=0;h<s.length;h++){let _=s[h],g=y[h];if(_.name!==g.name)throw st([{token:t[c].token,errorMessage:`Frame level ${o} has different variable names for different cases.`}])}l.push([]),y.forEach(h=>{l[l.length-1].push({consumedAtToken:h.consumedAtToken,initializedAtToken:h.initializedAtToken,type:h.type,isOwningTheRcValue:h.isOwningTheRcValue??!1})})}let u=l.length,d=l[0].length;for(let c=0;c<d;c++){let f=s[c].name,m=[],y=[],h=[],_=[];for(let E=1;E<u;E++){let F=r[E-1].frames[i].variables;m.push(l[E][c].initializedAtToken),y.push(l[E][c].isOwningTheRcValue?F[c].token:void 0),h.push(l[E][c].consumedAtToken),_.push(l[E][c].type)}let g=m.map((E,w)=>({token:E,index:w})).filter(({token:E})=>!!E);if(g.length>1){let E=_[g[0].index],w=r[g[0].index];for(let F=1;F<g.length;F++){let L=_[g[F].index],S=r[g[F].index];if(X(E)&&X(L)){let B=E.resolvedConcreteType,R=L.resolvedConcreteType;if(B&&R&&!te({type:B,env:w},{type:R,env:S}))throw st([{token:t[g[0].index].token,errorMessage:`Variable "${f}" has type Impl(...) but different concrete types across branches.
133
135
  Impl(...) uses static dispatch and requires the same concrete type in all branches.
134
- Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:m[_[0].index],errorMessage:`First branch has concrete type: ${x(O)}`},{token:m[_[F].index],errorMessage:`Conflicting branch has concrete type: ${x(B)}`}])}if($!==M&&!W({type:$,env:b},{type:M,env:L}))throw st([{token:t[_[0].index].token,errorMessage:`Variable "${f}" has incompatible types across different cases:`},{token:m[_[0].index],errorMessage:`First initialization: ${x($)}`},{token:m[_[F].index],errorMessage:`Conflicting initialization: ${x(M)}`}])}}if(m.length===1){if(m[0]&&!s[c].initializedAtToken)throw st([{token:s[c].token,errorMessage:`Variable "${s[c].name}" might not be initialized in all cases.`},{token:m[0],errorMessage:"Might be initialized here:"}])}else if(!s[c].initializedAtToken&&m.every($=>$)){let $={...s[c],initializedAtToken:m[0]};e=Xe(e,s[c],$),s[c]=$}else{let $=m.filter(F=>!!F),b=m.filter(F=>!F);if($.length>0&&b.length>0)throw st(m.map((F,M)=>({errorMessage:(M===0?`Variable "${f}" might be initialized in some cases but not initialized in other cases:
135
- `:"")+(F?"Might be initialized here:":"Not initialized here:"),token:F??t[M].token})))}if(g.length===1){if(g[0]&&!s[c].consumedAtToken){let $={...s[c],consumedAtToken:g[0]};e=Xe(e,s[c],$),s[c]=$}}else if(!s[c].consumedAtToken&&g.every($=>$)){let $={...s[c],consumedAtToken:g[0]};e=Xe(e,s[c],$),s[c]=$}else{let $=g.filter(F=>!!F),b=g.filter(F=>!F);if($.length>0&&b.length>0)throw st(g.map((F,M)=>({errorMessage:(M===0?`Variable "${f}" is consumed in some cases but not in other cases:
136
- `:"")+(F?"Consumed here:":"Not consumed here:"),token:F??t[M].token})))}if(!s[c].isOwningTheGcValue&&y.every($=>$)){let $={...s[c],isOwningTheGcValue:!0,isOwningTheSameGcValueAs:void 0};e=Xe(e,s[c],$),s[c]=$}else{let $=y.filter(F=>!!F),b=y.filter(F=>!F);if($.length>0&&b.length>0)throw st(y.map((F,M)=>({errorMessage:(M===0?`Variable "${f}" might be holding the Gc value in some cases but not holding the Gc value in other cases:
137
- `:"")+(F?"Might be owning the Gc value here:":"Might be not owning the Gc value here:"),token:F??t[M].token})))}let E=s[c].id,k=[];for(let $=1;$<u;$++){let M=r[$-1].frames[i].variables[c];k.push(M.id)}if(k.some($=>$!==E)){let $=mr(e.modulePath,f),b={...s[c],id:$,isOwningTheSameGcValueAs:void 0};e=Xe(e,s[c],b),s[c]=b}}}return e}function Yn(e,t){e.$=t.$,e.args=t.args,e.func=t.func,e.isInfix=t.isInfix,e.tag=t.tag,e.token=t.token}function ra(e,t){V(e)||(e.tag=t.tag),Yn(e,t)}function Mn(e,t,n=!1){var a,s,l;if((a=e.$)!=null&&a.value&&G((s=e.$)==null?void 0:s.value))return t;let r=(l=e.$)==null?void 0:l.variableName;if(!r)return t;let o=me(t,r);if(o.length===0)throw st([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let i=o[o.length-1];if(i.consumedAtToken&&!n){let u=`use of moved value: \`${r}\``;throw st([{token:e.token,errorMessage:u},{token:i.consumedAtToken,errorMessage:"value moved here"}])}else t=Xe(t,i,{...i,consumedAtToken:e.token});return t}function xt(e,t){var r;if(!e.$||e.$.value||!e.$.variableName)return;let n=e.$.variableName;if(!n)throw p({token:e.token,errorMessage:`Expression does not have a variable name to call ${C.___dup} on:
138
- ${T(e)}`});if(qe(e.$.type)){if(St(e.$.env.modulePath,n)&&!(j(e)&&e.token.value!==n)){let a=me(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheGcValue){s.consumedAtToken||(e.$.env=Xe(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let o=Gt(`${C.___dup[0]}(${n})`),i=S({expr:o,env:e.$.env,context:{...t,expectedType:void 0}});if((r=i.$)!=null&&r.variableName){let a=me(i.$.env,i.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(i.$.env=Xe(i.$.env,s,{...s,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function Cr(e,t){var i;let n=(i=e.$)==null?void 0:i.variableName;if(!n)return;let r=me(t,n);if(r.length===0)throw st([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let o=r[r.length-1];if(o.consumedAtToken){let a=`use of moved value: \`${n}\``;throw st([{token:e.token,errorMessage:a},{token:o.consumedAtToken,errorMessage:"value moved here"}])}}var J={tag:"Unit",type:Br()};var Oa=!0;function ad({variablesToDrop:e,env:t,context:n}){let r=[],o=t;for(let i of e){let a=Gt(`${C.___drop[0]}(${i.name})`),s=S({expr:a,env:o,context:{...n,expectedType:{env:o,type:J.type}}});r.push(s),s.$&&s.$.env&&(o=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:o}}function So(e,t){var r,o;if((r=e.$)!=null&&r.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)So(i,t);if(V(e)&&V(e.func)&&v(e.func,".",2)&&j(e.func.args[0])&&j(e.func.args[1])&&e.func.args[1].token.value===C.___dup[0]&&e.args.length===0&&((o=e.$)!=null&&o.env)){let i=e.func.args[0].token.value,a=me(e.$.env,i);if(a.length>0){let s=a[a.length-1];t.has(s.id)||t.set(s.id,[]),t.get(s.id).push(e)}return}if(V(e)&&v(e,A.while))return;function n(i,a){let s=[];for(let l=a;l<i.args.length;l++){let u=i.args[l];if(V(u)&&v(u,"=>",2)){let d=u.args[1],c=vu(d);s.push(c)}}if(s.length>0){let l=s[0];for(let[u,d]of l)if(s.every(f=>f.has(u))){let f=[];for(let m of s)f.push(...m.get(u));t.set(u,f)}}}if(V(e)&&v(e,A.cond)){n(e,0);return}if(V(e)&&v(e,A.match)){e.args[0]&&So(e.args[0],t),n(e,1);return}if(V(e)){So(e.func,t);for(let i of e.args)So(i,t)}}function vu(e){let t=new Map;return So(e,t),t}function Ua(e){return V(e)&&v(e,A.tuple,0)}function sd(e){let t=e;for(;t.isOwningTheSameGcValueAs;)t=t.isOwningTheSameGcValueAs;return t.id}function Ba(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),V(e)){Ba(e.func,t);for(let r of e.args)Ba(r,t)}}function Et({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:o=!1}){var _,E,k,w,$,b,F,M;if(!V(e)||!v(e,A.begin)){let L={tag:"FuncCall",func:{tag:"Atom",token:{...e.token,value:A.begin[0]}},args:[yt(e)],token:{...e.token,value:A.begin[0]}};Yn(e,L),e=e}let i=e.args,a=n.expectedType;if(i.length===0)return e.$={env:t,type:J.type,value:J,pathCollection:[]},e;t=ut(t,void 0,!0);for(let L=0;L<r.length;L++){let O=r[L],{env:B}=we({env:t,variable:O});t=B}let s=i[i.length-1],l;for(let L=0;L<i.length;L++){let O=i[L];if(j(O)&&en(O,A.return)||V(O)&&v(O,A.return)){if(L!==i.length-1&&!(L===i.length-2&&Ua(i[i.length-1])))throw p({token:O.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(V(O)&&Ce(O,A.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:O.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=O,j(O)){O.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"return"},s=O;break}else{Ce(O,A.return,1);let B=O.args[0],P=S({expr:B,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!P.$)throw p({token:B.token,errorMessage:`Return expression is not evaluated correctly:
139
- ${T(B)}`});if(((_=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:_.kind)==="function-body"&&ee(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let q=P.$.type;if(n.functionReturnImplConcreteType.length>0){let ne=n.functionReturnImplConcreteType[0];if(!W({type:ne.concreteType,env:ne.env},{type:q,env:t}))throw st([{token:O.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
136
+ Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:m[g[0].index],errorMessage:`First branch has concrete type: ${x(B)}`},{token:m[g[F].index],errorMessage:`Conflicting branch has concrete type: ${x(R)}`}])}if(E!==L&&!te({type:E,env:w},{type:L,env:S}))throw st([{token:t[g[0].index].token,errorMessage:`Variable "${f}" has incompatible types across different cases:`},{token:m[g[0].index],errorMessage:`First initialization: ${x(E)}`},{token:m[g[F].index],errorMessage:`Conflicting initialization: ${x(L)}`}])}}if(m.length===1){if(m[0]&&!s[c].initializedAtToken)throw st([{token:s[c].token,errorMessage:`Variable "${s[c].name}" might not be initialized in all cases.`},{token:m[0],errorMessage:"Might be initialized here:"}])}else if(!s[c].initializedAtToken&&m.every(E=>E)){let E={...s[c],initializedAtToken:m[0]};e=et(e,s[c],E),s[c]=E}else{let E=m.filter(F=>!!F),w=m.filter(F=>!F);if(E.length>0&&w.length>0)throw st(m.map((F,L)=>({errorMessage:(L===0?`Variable "${f}" might be initialized in some cases but not initialized in other cases:
137
+ `:"")+(F?"Might be initialized here:":"Not initialized here:"),token:F??t[L].token})))}if(h.length===1){if(h[0]&&!s[c].consumedAtToken){let E={...s[c],consumedAtToken:h[0]};e=et(e,s[c],E),s[c]=E}}else if(!s[c].consumedAtToken&&h.every(E=>E)){let E={...s[c],consumedAtToken:h[0]};e=et(e,s[c],E),s[c]=E}else{let E=h.filter(F=>!!F),w=h.filter(F=>!F);if(E.length>0&&w.length>0)throw st(h.map((F,L)=>({errorMessage:(L===0?`Variable "${f}" is consumed in some cases but not in other cases:
138
+ `:"")+(F?"Consumed here:":"Not consumed here:"),token:F??t[L].token})))}if(!s[c].isOwningTheRcValue&&y.every(E=>E)){let E={...s[c],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=et(e,s[c],E),s[c]=E}else{let E=y.filter(F=>!!F),w=y.filter(F=>!F);if(E.length>0&&w.length>0)throw st(y.map((F,L)=>({errorMessage:(L===0?`Variable "${f}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
139
+ `:"")+(F?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:F??t[L].token})))}let $=s[c].id,k=[];for(let E=1;E<u;E++){let L=r[E-1].frames[i].variables[c];k.push(L.id)}if(k.some(E=>E!==$)){let E=gr(e.modulePath,f),w={...s[c],id:E,isOwningTheSameRcValueAs:void 0};e=et(e,s[c],w),s[c]=w}}}return e}function Kn(e,t){e.$=t.$,e.args=t.args,e.func=t.func,e.isInfix=t.isInfix,e.tag=t.tag,e.token=t.token}function fa(e,t){V(e)||(e.tag=t.tag),Kn(e,t)}function kn(e,t,n=!1){var a,s,l;if((a=e.$)!=null&&a.value&&j((s=e.$)==null?void 0:s.value))return t;let r=(l=e.$)==null?void 0:l.variableName;if(!r)return t;let o=he(t,r);if(o.length===0)throw st([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let i=o[o.length-1];if(i.consumedAtToken&&!n){let u=`use of moved value: \`${r}\``;throw st([{token:e.token,errorMessage:u},{token:i.consumedAtToken,errorMessage:"value moved here"}])}else t=et(t,i,{...i,consumedAtToken:e.token});return t}function At(e,t){var r;if(!e.$||e.$.value||!e.$.variableName)return;let n=e.$.variableName;if(!n)throw p({token:e.token,errorMessage:`Expression does not have a variable name to call ${C.___dup} on:
140
+ ${T(e)}`});if(Ge(e.$.type)){if(It(e.$.env.modulePath,n)&&!(Q(e)&&e.token.value!==n)){let a=he(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=et(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let o=Yt(`${C.___dup[0]}(${n})`),i=M({expr:o,env:e.$.env,context:{...t,expectedType:void 0}});if((r=i.$)!=null&&r.variableName){let a=he(i.$.env,i.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(i.$.env=et(i.$.env,s,{...s,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function wr(e,t){var i;let n=(i=e.$)==null?void 0:i.variableName;if(!n)return;let r=he(t,n);if(r.length===0)throw st([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let o=r[r.length-1];if(o.consumedAtToken){let a=`use of moved value: \`${n}\``;throw st([{token:e.token,errorMessage:a},{token:o.consumedAtToken,errorMessage:"value moved here"}])}}var ne={tag:"Unit",type:zr()};var Qa=!0;function zd({variablesToDrop:e,env:t,context:n}){let r=[],o=t;for(let i of e){let a=Yt(`${C.___drop[0]}(${i.name})`),s=M({expr:a,env:o,context:{...n,expectedType:{env:o,type:ne.type}}});r.push(s),s.$&&s.$.env&&(o=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:o}}function No(e,t){var r,o;if((r=e.$)!=null&&r.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)No(i,t);if(V(e)&&V(e.func)&&v(e.func,".",2)&&Q(e.func.args[0])&&Q(e.func.args[1])&&e.func.args[1].token.value===C.___dup[0]&&e.args.length===0&&((o=e.$)!=null&&o.env)){let i=e.func.args[0].token.value,a=he(e.$.env,i);if(a.length>0){let s=a[a.length-1];t.has(s.id)||t.set(s.id,[]),t.get(s.id).push(e)}return}if(V(e)&&v(e,A.while))return;function n(i,a){let s=[];for(let l=a;l<i.args.length;l++){let u=i.args[l];if(V(u)&&v(u,"=>",2)){let d=u.args[1],c=rp(d);s.push(c)}}if(s.length>0){let l=s[0];for(let[u,d]of l)if(s.every(f=>f.has(u))){let f=[];for(let y of s){let h=y.get(u);h&&h.length>0&&f.push(...h)}t.has(u)||t.set(u,[]);let m=f[0];m.__branchGroup=f,t.get(u).push(m)}}}if(V(e)&&v(e,A.cond)){n(e,0);return}if(V(e)&&v(e,A.match)){e.args[0]&&No(e.args[0],t),n(e,1);return}if(V(e)){No(e.func,t);for(let i of e.args)No(i,t)}}function rp(e){let t=new Map;return No(e,t),t}function Za(e){return V(e)&&v(e,A.tuple,0)}function Ja(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),V(e)){Ja(e.func,t);for(let r of e.args)Ja(r,t)}}function kt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:o=!1}){var g,$,k,b,E,w,F,L;if(!V(e)||!v(e,A.begin)){let S={tag:"FuncCall",func:{tag:"Atom",token:{...e.token,value:A.begin[0]}},args:[dt(e)],token:{...e.token,value:A.begin[0]}};Kn(e,S),e=e}let i=e.args,a=n.expectedType;if(i.length===0)return e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e;t=at(t,void 0,!0);for(let S=0;S<r.length;S++){let B=r[S],{env:R}=Me({env:t,variable:B});t=R}let s=i[i.length-1],l;for(let S=0;S<i.length;S++){let B=i[S];if(Q(B)&&nn(B,A.return)||V(B)&&v(B,A.return)){if(S!==i.length-1&&!(S===i.length-2&&Za(i[i.length-1])))throw p({token:B.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(V(B)&&Ce(B,A.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:B.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=B,Q(B)){B.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"return"},s=B;break}else{Ce(B,A.return,1);let R=B.args[0],Y=M({expr:R,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!Y.$)throw p({token:R.token,errorMessage:`Return expression is not evaluated correctly:
141
+ ${T(R)}`});if(((g=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:g.kind)==="function-body"&&X(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let W=Y.$.type;if(n.functionReturnImplConcreteType.length>0){let H=n.functionReturnImplConcreteType[0];if(!te({type:H.concreteType,env:H.env},{type:W,env:t}))throw st([{token:B.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
140
142
  Impl(...) uses static dispatch and requires the same concrete type across all returns.
141
- Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:ne.token,errorMessage:`First return has concrete type: ${x(ne.concreteType)}`},{token:O.token,errorMessage:`Conflicting return has concrete type: ${x(q)}`}])}else n.functionReturnImplConcreteType.push({concreteType:q,env:t,token:O.token})}ze(P,!0),t=P.$.env,O.$={env:t,type:P.$.type,value:P.$.value,pathCollection:P.$.pathCollection,variableName:P.$.variableName,controlFlow:"return"},s=O;break}}else if(j(O)&&en(O,A.break)){if(L!==i.length-1&&!(L===i.length-2&&Ua(i[i.length-1])))throw p({token:O.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw p({token:O.token,errorMessage:'The "break" keyword can only be used inside a loop.'});O.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"break"},s=O;break}else if(j(O)&&en(O,A.continue)){if(L!==i.length-1&&!(L===i.length-2&&Ua(i[i.length-1])))throw p({token:O.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw p({token:O.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});O.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"continue"},s=O;break}else{let B=S({expr:O,env:t,context:{...n,expectedType:L===i.length-1?a:void 0}});if((E=B.$)!=null&&E.env&&(t=(k=B.$)==null?void 0:k.env),(w=B.$)!=null&&w.controlFlow){s=B;break}}}if(!s.$)throw p({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
142
- ${T(s)}`});let u=s.$.type;if(s.$.controlFlow==="return"){if((($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body")try{pt({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:u,env:t})}catch{if(!W({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:u,env:t}))throw p({token:s.token,errorMessage:`Return type mismatch. Expected type "${x(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${x(u)}".`})}else if(((b=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="async-block"&&n.expectedType)try{pt({type:n.expectedType.type,env:n.expectedType.env},{type:u,env:t})}catch{if(!W({type:n.expectedType.type,env:n.expectedType.env},{type:u,env:t}))throw p({token:s.token,errorMessage:`Return type mismatch. Expected type "${x(n.expectedType.type)}", but got "${x(u)}".`})}}let d,c=s;V(s)&&v(s,A.return,1)&&(c=s.args[0]);let f=c?(F=c.$)==null?void 0:F.variableName:void 0;if(f){let L=me(t,f);L.length&&(d=L[L.length-1])}d!=null&&d.isOwningTheGcValue&&d.frameLevel===t.frames.length-1&&!d.consumedAtToken?t=Xe(t,d,{...d,consumedAtToken:s.token}):d&&c&&(xt(c,n),t=c.$.env);let m=Yr(t),y=[];if(Oa){if(o&&t.frames.length>=2){let B={...t,frames:t.frames.slice(0,-1)},P=Yr(B);m=[...m,...P]}let L=new Map;if(V(e))for(let B of e.args){let P=vu(B);for(let[q,ne]of P)L.has(q)||L.set(q,[]),L.get(q).push(...ne)}let O=new Set;for(let B of m){let P=sd(B),q=L.get(P);if(q&&q.length>0){let ne=q[0];O.add(ne),q.shift(),t=Xe(t,B,{...B,consumedAtToken:s.token})}else y.push(B)}if(V(e))for(let B of e.args)Ba(B,O)}let g;if((Oa?y:m).length>0){let L=ad({variablesToDrop:Oa?y:m,env:t,context:{...n,expectedType:void 0}});g=L.deferredDropExpressions,t=L.env}l&&l.$&&(l.$.deferredDropExpressions=g);let h=t.frames[t.frames.length-1];return t=Ct(t),e.$={env:t,type:s.$.type,value:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:g,poppedEnvFrame:h},d&&((M=c==null?void 0:c.$)!=null&&M.deferredDupExpressions)&&c.$.deferredDupExpressions.length>0?ze(e,!0,d):d!=null&&d.consumedAtToken?ze(e,!0,d):ze(e,!0),e}function jn({targetType:e,moduleType:t,env:n}){let r={...t,receiverType:e},o=e.module;if(o)for(let a of o.fields){if(!a.assignedValue||!Ke(a.assignedValue))continue;let l=a.assignedValue.type;if(W({type:r,env:n},{type:l,env:n}))return!0}return!!oa({concreteType:e,moduleType:t,env:n})}function Pa({targetType:e,moduleType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let o of t.selfConstraints)if(!jn({targetType:e,moduleType:o,env:n}))throw p({token:r,errorMessage:`Type "${x(e)}" does not implement required constraint "${o.typeName??x(o)}" from module "${t.typeName??x(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(jn({targetType:e,moduleType:o,env:n}))throw p({token:r,errorMessage:`Type "${x(e)}" implements "${o.typeName??x(o)}" but the module "${t.typeName??x(t)}"'s where clause requires it to NOT implement this module.`})}}function Tu({expr:e,env:t,context:n}){Ce(e,"<:",2);let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$||!i.$.value||!G(i.$.value))throw p({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=i.$.env;let a=i.$.value;if(n.isInsideWhereClause&&!ee(a.value))throw p({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${T(r)} of type ${x(a.value)}`});let s=[];if(V(o)&&v(o,A.tuple))for(let m of o.args)V(m)&&v(m,"!")&&m.args.length===1?s.push({expr:m.args[0],isNegated:!0}):s.push({expr:m,isNegated:!1});else V(o)&&v(o,"!")&&o.args.length===1?s.push({expr:o.args[0],isNegated:!0}):s.push({expr:o,isNegated:!1});let l=[];for(let{expr:m,isNegated:y}of s){let g=S({expr:m,env:t,context:{...n}});if(!g.$||!g.$.value||!G(g.$.value)||!Ee(g.$.value.value))throw p({token:m.token,errorMessage:"Expected module type for right-hand side expression."});t=g.$.env;let h=g.$.value.value;if(h.receiverType)throw p({token:m.token,errorMessage:"Expected module type already has a receiver type assigned."});if(y&&!n.isInsideWhereClause)throw p({token:m.token,errorMessage:"Negated module constraints !(Module) are only allowed in where clauses."});l.push({moduleType:h,expr:m,isNegated:y})}if(n.isInsideWhereClause&&ee(a.value)){let m=a.value;for(let{moduleType:y,expr:g,isNegated:h}of l){let _={...y,receiverType:m};if(h){let E={..._,isNegatedConstraint:!0},w={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:ae(E),exprs:{expr:g}};m.module.fields.push(w)}else{let k={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:ae(_),exprs:{expr:g}};m.module.fields.push(k)}}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw p({token:o.token,errorMessage:"Multiple module constraints (tuple form) are only allowed in where clauses."});let{moduleType:u}=l[0],d=a.value;if(!ee(d)&&!jn({targetType:d,moduleType:u,env:t}))throw p({token:e.token,errorMessage:`Type "${x(d)}" does not implement module "${u.typeName??x(u)}".`});let c={...u,receiverType:a.value},f=ae(c);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function nt(e){return j(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Lo(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=me(t,e.$.variableName);if(!r.length)return;let o=r[r.length-1],i=new Set;for(;o&&o.isOwningTheSameGcValueAs;){if(i.has(o.id))return;i.add(o.id),o=o.isOwningTheSameGcValueAs}if(o&&o.isOwningTheGcValue)return o}function jr({beginExprs:e,env:t,context:n,allowPartialModule:r=!1,receiverType:o}){var u,d;let i=Ie(t),a=[],s;t=ut(t);for(let c=0;c<e.length;c++){let f=e[c];try{if(V(f)&&v(f,A.export)){let m=f.args;for(let y=0;y<m.length;y++){let g=m[y];if(V(g)&&v(g,"...")){let h=g.args[0],_=g.args[1],E=S({expr:h,env:t,context:{...n,SelfType:o}});if(!E.$)throw p({token:h.token,errorMessage:`Failed to evaluate the extended struct expression:
143
- ${T(h)}`});let k=E.$.type;if(!Ee(k))throw p({token:h.token,errorMessage:`Expected struct type for export, got:
144
- ${x(k)}`});let w=E.$.value,$=new Set;if(_)if(V(_)&&v(_,":",2)&&en(_.args[0],"exclude")&&(_=_.args[1]),j(_)){let b=_.token.value,F=k.fields.find(M=>M.label===b);if(!F)throw p({token:_.token,errorMessage:`Label "${b}" is not found in the extended module type.`});$.add(b),_.$={env:t,type:F.type,value:F.assignedValue,pathCollection:[]}}else if(V(_)&&v(_,A.tuple))for(let b of _.args){if(!j(b))throw p({token:b.token,errorMessage:`Expected identifier for excluded label, got:
145
- ${T(b)}`});let F=b.token.value,M=k.fields.find(L=>L.label===F);if(!M)throw p({token:b.token,errorMessage:`Label "${F}" is not found in the extended module type.`});$.add(F),b.$={env:t,type:M.type,value:M.assignedValue,pathCollection:[]}}else throw p({token:_.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
146
- ${T(_)}`});for(let b=0;b<k.fields.length;b++){let F=k.fields[b];if($.has(F.label))continue;if(i.fields.findIndex(L=>L.label===F.label)>=0)throw p({token:g.token,errorMessage:`Element "${F.label}" is already exported in the module.`});i.fields.push({label:F.label,type:F.type,isCompileTimeOnly:F.isCompileTimeOnly,assignedValue:F.isCompileTimeOnly?F.assignedValue:void 0,defaultValue:F.defaultValue,exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),w?a.push(w.fields[b]):a.push(void 0),g.$={env:t,type:F.type,value:w?w.fields[b]:void 0,pathCollection:[]}}}else{let h="",_="";if(j(g)){if(!nt(g))throw p({token:g.token,errorMessage:`Expected identifier for export, got:
147
- ${T(g)}`});h=g.token.value,_=h}else if(V(g)&&v(g,":",2)){let $=g.args[0],b=g.args[1];if(!j($))throw p({token:$.token,errorMessage:`Expected identifier for export, got:
148
- ${T($)}`});if(!nt($))throw p({token:$.token,errorMessage:`Expected identifier for export, got:
149
- ${T($)}`});if(h=$.token.value,!j(b))throw p({token:b.token,errorMessage:`Expected identifier for export, got:
150
- ${T(b)}`});if(!nt(b))throw p({token:b.token,errorMessage:`Expected identifier for export, got:
151
- ${T(b)}`});_=b.token.value}let E=me(t,_);if(E.length===0)throw p({token:g.token,errorMessage:`Variable "${_}" is not defined in the module.`});let k=E[E.length-1];if(i.fields.findIndex($=>$.label===_)>=0)throw p({token:g.token,errorMessage:`Variable "${_}" is already exported in the module.`});if(!k.isCompileTimeOnly)throw p({token:g.token,errorMessage:`Variable "${_}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:h,type:k.type,isCompileTimeOnly:k.isCompileTimeOnly,assignedValue:k.isCompileTimeOnly?k.value:void 0,defaultValue:void 0,exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),a.push(k.value),g.$={env:t,type:k.type,value:k.value,pathCollection:[]}}}}else{let m=S({expr:f,env:t,context:{...n,expectedType:void 0,SelfType:o}});(u=m.$)!=null&&u.env&&(t=(d=m.$)==null?void 0:d.env)}}catch(m){if(r){s=m;break}else throw m}}try{s||(t=Ct(t))}catch(c){if(r)s=c;else throw c}return{moduleValue:Vr({...i,receiverType:o},a),moduleType:i,env:t,partialModuleError:s}}var Ao=new Map,or=new Map,ia=new Map;function Ga(e){for(let[t,n]of or.entries()){let r=n.filter(o=>o.sourceModulePath!==e);r.length===0?or.delete(t):or.set(t,r)}}function aa(){Ao.clear(),or.clear(),ia.clear()}function ld(e,t){let n=or.get(e);n||(n=[],or.set(e,n)),n.push(t)}function ud({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){let o=e.id,a=(ia.get(o)||[]).find(s=>s.moduleTypeId===t.id);if(a)throw p({token:r.token,errorMessage:`Module "${t.typeName??t.id}" is already implemented for type "${x(e)}".
152
- First implementation was in: ${a.modulePath||"unknown"}`})}function pd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){let o=e.id,i=ia.get(o);i||(i=[],ia.set(o,i)),i.push({moduleTypeId:t.id,moduleTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function cd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){if(!n)return;let o=t.definedInModulePath===n,i=e.definedInModulePath===n;if(!(n.includes("prelude.yo")||n.includes("std/"))&&!o&&!i)throw p({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign module "${t.typeName??t.id}" for foreign type "${x(e)}".
143
+ Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:H.token,errorMessage:`First return has concrete type: ${x(H.concreteType)}`},{token:B.token,errorMessage:`Conflicting return has concrete type: ${x(W)}`}])}else n.functionReturnImplConcreteType.push({concreteType:W,env:t,token:B.token})}Ze(Y,!0),t=Y.$.env,B.$={env:t,type:Y.$.type,value:Y.$.value,pathCollection:Y.$.pathCollection,variableName:Y.$.variableName,controlFlow:"return"},s=B;break}}else if(Q(B)&&nn(B,A.break)){if(S!==i.length-1&&!(S===i.length-2&&Za(i[i.length-1])))throw p({token:B.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw p({token:B.token,errorMessage:'The "break" keyword can only be used inside a loop.'});B.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"break"},s=B;break}else if(Q(B)&&nn(B,A.continue)){if(S!==i.length-1&&!(S===i.length-2&&Za(i[i.length-1])))throw p({token:B.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw p({token:B.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});B.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"continue"},s=B;break}else{let R=M({expr:B,env:t,context:{...n,expectedType:S===i.length-1?a:void 0}});if(($=R.$)!=null&&$.env&&(t=(k=R.$)==null?void 0:k.env),(b=R.$)!=null&&b.controlFlow){s=R;break}}}if(!s.$)throw p({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
144
+ ${T(s)}`});let u=s.$.type;if(s.$.controlFlow==="return"){if(((E=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:E.kind)==="function-body")try{mt({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:u,env:t})}catch{if(!te({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:u,env:t}))throw p({token:s.token,errorMessage:`Return type mismatch. Expected type "${x(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${x(u)}".`})}else if(((w=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:w.kind)==="async-block"&&n.expectedType)try{mt({type:n.expectedType.type,env:n.expectedType.env},{type:u,env:t})}catch{if(!te({type:n.expectedType.type,env:n.expectedType.env},{type:u,env:t}))throw p({token:s.token,errorMessage:`Return type mismatch. Expected type "${x(n.expectedType.type)}", but got "${x(u)}".`})}}let d,c=s;V(s)&&v(s,A.return,1)&&(c=s.args[0]);let f=c?(F=c.$)==null?void 0:F.variableName:void 0;if(f){let S=he(t,f);S.length&&(d=S[S.length-1])}d!=null&&d.isOwningTheRcValue&&d.frameLevel===t.frames.length-1&&!d.consumedAtToken?t=et(t,d,{...d,consumedAtToken:s.token}):d&&c&&(At(c,n),t=c.$.env);let m=Hr(t),y=[];if(Qa){if(o&&t.frames.length>=2){let R={...t,frames:t.frames.slice(0,-1)},Y=Hr(R);m=[...m,...Y]}let S=new Map;if(V(e))for(let R of e.args){let Y=rp(R);for(let[W,H]of Y)S.has(W)||S.set(W,[]),S.get(W).push(...H)}let B=new Set;for(let R of m){let Y=R;for(;Y.isOwningTheSameRcValueAs;)Y=Y.isOwningTheSameRcValueAs;let W=Y.id,H=S.get(W),se=!vt(Y.type)&&Ge(Y.type);if(H&&H.length>0&&!se){let ye=0,oe=[];for(let pe of H){let _e=pe;_e.__branchGroup?(ye++,oe.push(..._e.__branchGroup)):(ye++,oe.push(pe))}if(ye>0){let pe=H[0],_e=pe;if(_e.__branchGroup)for(let Ie of _e.__branchGroup)B.add(Ie);else B.add(pe);H.shift(),t=et(t,R,{...R,consumedAtToken:s.token})}}else y.push(R)}if(V(e))for(let R of e.args)Ja(R,B)}let h;if((Qa?y:m).length>0){let S=zd({variablesToDrop:Qa?y:m,env:t,context:{...n,expectedType:void 0}});h=S.deferredDropExpressions,t=S.env}l&&l.$&&(l.$.deferredDropExpressions=h);let _=t.frames[t.frames.length-1];return t=bt(t),e.$={env:t,type:s.$.type,value:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:h,poppedEnvFrame:_},d&&((L=c==null?void 0:c.$)!=null&&L.deferredDupExpressions)&&c.$.deferredDupExpressions.length>0?Ze(e,!0,d):d!=null&&d.consumedAtToken?Ze(e,!0,d):Ze(e,!0),e}function Qn({targetType:e,moduleType:t,env:n}){let r={...t,receiverType:e},o=e.module;if(o)for(let a of o.fields){if(!a.assignedValue||!Je(a.assignedValue))continue;let l=a.assignedValue.type;if(te({type:r,env:n},{type:l,env:n}))return!0}return!!da({concreteType:e,moduleType:t,env:n})}function Xa({targetType:e,moduleType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let o of t.selfConstraints)if(!Qn({targetType:e,moduleType:o,env:n}))throw p({token:r,errorMessage:`Type "${x(e)}" does not implement required constraint "${o.typeName??x(o)}" from module "${t.typeName??x(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(Qn({targetType:e,moduleType:o,env:n}))throw p({token:r,errorMessage:`Type "${x(e)}" implements "${o.typeName??x(o)}" but the module "${t.typeName??x(t)}"'s where clause requires it to NOT implement this module.`})}}function op({expr:e,env:t,context:n}){Ce(e,"<:",2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$||!i.$.value||!j(i.$.value))throw p({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=i.$.env;let a=i.$.value;if(n.isInsideWhereClause&&!X(a.value))throw p({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${T(r)} of type ${x(a.value)}`});let s=[];if(V(o)&&v(o,A.tuple))for(let m of o.args)V(m)&&v(m,"!")&&m.args.length===1?s.push({expr:m.args[0],isNegated:!0}):s.push({expr:m,isNegated:!1});else V(o)&&v(o,"!")&&o.args.length===1?s.push({expr:o.args[0],isNegated:!0}):s.push({expr:o,isNegated:!1});let l=[];for(let{expr:m,isNegated:y}of s){let h=M({expr:m,env:t,context:{...n}});if(!h.$||!h.$.value||!j(h.$.value)||!Fe(h.$.value.value))throw p({token:m.token,errorMessage:"Expected module type for right-hand side expression."});t=h.$.env;let _=h.$.value.value;if(_.receiverType)throw p({token:m.token,errorMessage:"Expected module type already has a receiver type assigned."});if(y&&!n.isInsideWhereClause)throw p({token:m.token,errorMessage:"Negated module constraints !(Module) are only allowed in where clauses."});l.push({moduleType:_,expr:m,isNegated:y})}if(n.isInsideWhereClause&&X(a.value)){let m=a.value;for(let{moduleType:y,expr:h,isNegated:_}of l){let g={...y,receiverType:m};if(_){let $={...g,isNegatedConstraint:!0},b={label:"",type:hn(1),isCompileTimeOnly:!0,assignedValue:le($),exprs:{expr:h}};m.module.fields.push(b)}else{let k={label:"",type:hn(1),isCompileTimeOnly:!0,assignedValue:le(g),exprs:{expr:h}};m.module.fields.push(k)}}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw p({token:o.token,errorMessage:"Multiple module constraints (tuple form) are only allowed in where clauses."});let{moduleType:u}=l[0],d=a.value;if(!X(d)&&!Qn({targetType:d,moduleType:u,env:t}))throw p({token:e.token,errorMessage:`Type "${x(d)}" does not implement module "${u.typeName??x(u)}".`});let c={...u,receiverType:a.value},f=le(c);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function ot(e){return Q(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Do(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=he(t,e.$.variableName);if(!r.length)return;let o=r[r.length-1],i=new Set;for(;o&&o.isOwningTheSameRcValueAs;){if(i.has(o.id))return;i.add(o.id),o=o.isOwningTheSameRcValueAs}if(o&&o.isOwningTheRcValue)return o}function Kr({beginExprs:e,env:t,context:n,allowPartialModule:r=!1,receiverType:o}){var u,d;let i=Ue(t),a=[],s;t=at(t);for(let c=0;c<e.length;c++){let f=e[c];try{if(V(f)&&v(f,A.export)){let m=f.args;for(let y=0;y<m.length;y++){let h=m[y];if(V(h)&&v(h,"...")){let _=h.args[0],g=h.args[1],$=M({expr:_,env:t,context:{...n,SelfType:o}});if(!$.$)throw p({token:_.token,errorMessage:`Failed to evaluate the extended struct expression:
145
+ ${T(_)}`});let k=$.$.type;if(!Fe(k))throw p({token:_.token,errorMessage:`Expected struct type for export, got:
146
+ ${x(k)}`});let b=$.$.value,E=new Set;if(g)if(V(g)&&v(g,":",2)&&nn(g.args[0],"exclude")&&(g=g.args[1]),Q(g)){let w=g.token.value,F=k.fields.find(L=>L.label===w);if(!F)throw p({token:g.token,errorMessage:`Label "${w}" is not found in the extended module type.`});E.add(w),g.$={env:t,type:F.type,value:F.assignedValue,pathCollection:[]}}else if(V(g)&&v(g,A.tuple))for(let w of g.args){if(!Q(w))throw p({token:w.token,errorMessage:`Expected identifier for excluded label, got:
147
+ ${T(w)}`});let F=w.token.value,L=k.fields.find(S=>S.label===F);if(!L)throw p({token:w.token,errorMessage:`Label "${F}" is not found in the extended module type.`});E.add(F),w.$={env:t,type:L.type,value:L.assignedValue,pathCollection:[]}}else throw p({token:g.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
148
+ ${T(g)}`});for(let w=0;w<k.fields.length;w++){let F=k.fields[w];if(E.has(F.label))continue;if(i.fields.findIndex(S=>S.label===F.label)>=0)throw p({token:h.token,errorMessage:`Element "${F.label}" is already exported in the module.`});i.fields.push({label:F.label,type:F.type,isCompileTimeOnly:F.isCompileTimeOnly,assignedValue:F.isCompileTimeOnly?F.assignedValue:void 0,defaultValue:F.defaultValue,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),b?a.push(b.fields[w]):a.push(void 0),h.$={env:t,type:F.type,value:b?b.fields[w]:void 0,pathCollection:[]}}}else{let _="",g="";if(Q(h)){if(!ot(h))throw p({token:h.token,errorMessage:`Expected identifier for export, got:
149
+ ${T(h)}`});_=h.token.value,g=_}else if(V(h)&&v(h,":",2)){let E=h.args[0],w=h.args[1];if(!Q(E))throw p({token:E.token,errorMessage:`Expected identifier for export, got:
150
+ ${T(E)}`});if(!ot(E))throw p({token:E.token,errorMessage:`Expected identifier for export, got:
151
+ ${T(E)}`});if(_=E.token.value,!Q(w))throw p({token:w.token,errorMessage:`Expected identifier for export, got:
152
+ ${T(w)}`});if(!ot(w))throw p({token:w.token,errorMessage:`Expected identifier for export, got:
153
+ ${T(w)}`});g=w.token.value}let $=he(t,g);if($.length===0)throw p({token:h.token,errorMessage:`Variable "${g}" is not defined in the module.`});let k=$[$.length-1];if(i.fields.findIndex(E=>E.label===g)>=0)throw p({token:h.token,errorMessage:`Variable "${g}" is already exported in the module.`});if(!k.isCompileTimeOnly)throw p({token:h.token,errorMessage:`Variable "${g}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:_,type:k.type,isCompileTimeOnly:k.isCompileTimeOnly,assignedValue:k.isCompileTimeOnly?k.value:void 0,defaultValue:void 0,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),a.push(k.value),h.$={env:t,type:k.type,value:k.value,pathCollection:[]}}}}else{let m=M({expr:f,env:t,context:{...n,expectedType:void 0,SelfType:o}});(u=m.$)!=null&&u.env&&(t=(d=m.$)==null?void 0:d.env)}}catch(m){if(r){s=m;break}else throw m}}try{s||(t=bt(t))}catch(c){if(r)s=c;else throw c}return{moduleValue:Lr({...i,receiverType:o},a),moduleType:i,env:t,partialModuleError:s}}function es({functionType:e,specializedEnv:t,SelfType:n}){var s;let r=e.parameters.map(l=>{var c;if(!l.exprs.typeExpr)return l;let u=dt(l.exprs.typeExpr),d=M({expr:u,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return j((c=d.$)==null?void 0:c.value)?{...l,type:d.$.value.value,exprs:{...l.exprs,typeExpr:void 0}}:l}),o=e.return.type;if(e.return.expr){let l=dt(e.return.expr),u=M({expr:l,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});j((s=u.$)==null?void 0:s.value)&&(o=u.$.value.value)}let i=e.SelfType;n&&(i=n);let a={...e.parametersFrame,variables:e.parametersFrame.variables.map(l=>{let u=r.find(c=>c.label===l.name),d=u?u.type:l.type;return d!==l.type?{...l,type:d}:l})};return{...e,forallParameters:[],parameters:r,parametersFrame:a,return:{...e.return,type:o,expr:void 0},SelfType:i}}var Oo=new Map,sr=new Map,ma=new Map;function ns(e){for(let[t,n]of sr.entries()){let r=n.filter(o=>o.sourceModulePath!==e);r.length===0?sr.delete(t):sr.set(t,r)}}function ya(){Oo.clear(),sr.clear(),ma.clear()}function Gd(e,t){let n=sr.get(e);n||(n=[],sr.set(e,n)),n.push(t)}function qd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){let o=e.id,a=(ma.get(o)||[]).find(s=>s.moduleTypeId===t.id);if(a)throw p({token:r.token,errorMessage:`Module "${t.typeName??t.id}" is already implemented for type "${x(e)}".
154
+ First implementation was in: ${a.modulePath||"unknown"}`})}function Yd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){let o=e.id,i=ma.get(o);i||(i=[],ma.set(o,i)),i.push({moduleTypeId:t.id,moduleTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function jd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){if(!n)return;let o=t.definedInModulePath===n,i=e.definedInModulePath===n;if(!(n.includes("prelude.yo")||n.includes("std/"))&&!o&&!i)throw p({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign module "${t.typeName??t.id}" for foreign type "${x(e)}".
153
155
  At least one of the module or the type must be defined in this module.
154
156
  Module defined in: ${t.definedInModulePath||"unknown"}
155
157
  Type defined in: ${e.definedInModulePath||"unknown"}
156
- Current module: ${n}`})}function oa({concreteType:e,moduleType:t,env:n}){let r=t.typeName||t.id,o=or.get(r);if(!(!o||o.length===0)){for(let i of o)if(qa({concreteType:e,impl:i,env:n}).matched)return i}}function Wr({concreteType:e,methodName:t,env:n}){var o;let r=[];for(let[i,a]of or.entries())for(let s of a){let l=qa({concreteType:e,impl:s,env:n});if(!l.matched)continue;let u=s.moduleType,d=s.moduleValue,c=u.fields.findIndex(f=>f.label===t&&ce(f.type));if(c>=0){let f=u.fields[c];if(ce(f.type)){let m=d.fields[c],y=Ra(f.type,l.substitutions,l.valueSubstitutions),g=m;if(Fe(m)&&(l.valueSubstitutions.size>0||l.substitutions.size>0)){let h=yt(m.body),_=s.definitionEnv,E=ut(_,y.parametersFrame);for(let[b,F]of l.valueSubstitutions){let{env:M}=we({env:E,variable:{name:b,type:F.type,isCompileTimeOnly:!0,value:F,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}for(let[b,F]of l.substitutions)if(b!=="Self"){let{env:M}=we({env:E,variable:{name:b,type:lt(),isCompileTimeOnly:!0,value:ae(F),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}let k=Et({expr:h,env:E,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:E},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:m,evaluationEnv:E},functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),w=y;(o=k.$)!=null&&o.type&&(w={...y,return:{...y.return,type:k.$.type}}),g={...m,specializedType:w,body:k,funcId:`${m.funcId}_specialized_${[...l.substitutions.entries()].map(([b,F])=>`${b}_${x(F)}`).join("_")}_${[...l.valueSubstitutions.entries()].map(([b,F])=>`${b}_${je(F)}`).join("_")}`,funcName:m.funcName?`${m.funcName}_specialized`:void 0},r.push({type:w,value:g})}else Fe(m)?(g={...m,specializedType:y},r.push({type:y,value:g})):r.push({type:y,value:g})}}}return r}function Cu({concreteType:e,moduleType:t,methodName:n,env:r}){var a;let o=t.typeName||t.id,i=or.get(o);if(!(!i||i.length===0))for(let s of i){let l=qa({concreteType:e,impl:s,env:r});if(!l.matched)continue;let u=s.moduleType,d=s.moduleValue,c=u.fields.findIndex(f=>f.label===n&&ce(f.type));if(c>=0){let f=u.fields[c];if(ce(f.type)){let m=d.fields[c],y=Ra(f.type,l.substitutions,l.valueSubstitutions),g=m;if(Fe(m)&&(l.valueSubstitutions.size>0||l.substitutions.size>0)){let h=yt(m.body),_=s.definitionEnv,E=ut(_,y.parametersFrame);for(let[b,F]of l.valueSubstitutions){let{env:M}=we({env:E,variable:{name:b,type:F.type,isCompileTimeOnly:!0,value:F,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}for(let[b,F]of l.substitutions)if(b!=="Self"){let{env:M}=we({env:E,variable:{name:b,type:lt(),isCompileTimeOnly:!0,value:ae(F),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}let k=Et({expr:h,env:E,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:E},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:m,evaluationEnv:E},functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),w=y;return(a=k.$)!=null&&a.type&&(w={...y,return:{...y.return,type:k.$.type}}),g={...m,specializedType:w,body:k,funcId:`${m.funcId}_specialized_${[...l.substitutions.entries()].map(([b,F])=>`${b}_${x(F)}`).join("_")}_${[...l.valueSubstitutions.entries()].map(([b,F])=>`${b}_${je(F)}`).join("_")}`,funcName:m.funcName?`${m.funcName}_specialized`:void 0},{type:w,value:g}}else return Fe(m)?(g={...m,specializedType:y},{type:y,value:g}):{type:y,value:g}}}}}function _n(e,t,n=new Map){if(ee(e)){let r=t.get(e.name);return r||e}if(De(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}if(Oe(e)){let r=_n(e.childType,t,n),o=e.length;if(Ue(e.length)&&e.length.variableName){let i=n.get(e.length.variableName);i&&(o=i)}return r===e.childType&&o===e.length?e:{...e,childType:r,length:o}}if(at(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}if(mt(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}if(He(e)){let r=!1,o=e.fields.map(i=>{let a=_n(i.type,t,n);return a!==i.type?(r=!0,{...i,type:a}):i});return r?{...e,fields:o}:e}if($e(e)){let r=!1,o=e.fields.map(i=>{let a=_n(i.type,t,n);return a!==i.type?(r=!0,{...i,type:a}):i});return r?{...e,fields:o}:e}if(Ve(e)){let r=!1,o=e.variants.map(i=>{if(!i.fields)return i;let a=i.fields.map(s=>{let l=_n(s.type,t,n);return l!==s.type?(r=!0,{...s,type:l}):s});return a!==i.fields?{...i,fields:a}:i});return r?{...e,variants:o}:e}if(ot(e)){let r=!1,o=e.fields.map(i=>{let a=_n(i.type,t,n);return a!==i.type?(r=!0,{...i,type:a}):i});return r?{...e,fields:o}:e}if(Wt(e)){let r=_n(e.isFuture.outputType,t,n);return r===e.isFuture.outputType?e:{...e,isFuture:{childType:r}}}if(gt(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}return ce(e)?Ra(e,t,n):e}function Ra(e,t,n=new Map){let r=!1,o=e.parameters.map(u=>{let d=_n(u.type,t,n);return d!==u.type?(r=!0,{...u,type:d}):u}),i=_n(e.return.type,t,n),a=i!==e.return.type,s=e.SelfType;if(e.SelfType&&(s=_n(e.SelfType,t,n),s!==e.SelfType&&(r=!0)),!r&&!a)return e;let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(u=>{let d=_n(u.type,t,n);return d!==u.type?{...u,type:d}:u})};return{...e,forallParameters:[],parameters:o,parametersFrame:l,return:a?{...e.return,type:i,expr:void 0}:e.return,SelfType:s}}function qa({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map},o=ut(n);for(let i of t.forallParameters)if(i.kind==="type"){let{env:a}=we({env:o,variable:{name:i.name,type:lt(),isCompileTimeOnly:!0,value:ae(i.someType),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});o=a}else{let{env:a}=we({env:o,variable:{name:i.name,type:i.type,isCompileTimeOnly:!0,value:i.unknownValue,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});o=a}try{let{expectedEnv:i}=pt({type:t.receiverTypePattern,env:o},{type:e,env:n});for(let{someType:l,moduleType:u}of t.whereConstraints){let d=$u(i,l);if(!d)return r;if(u.isNegatedConstraint){if(ee(d)){if(!dd(d,u))return r;continue}if(jn({targetType:d,moduleType:u,env:n}))return r;continue}if(ee(d)){if(!fd(d,u))return r;continue}if(!jn({targetType:d,moduleType:u,env:n}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=$u(i,l.someType);u&&!ee(u)&&a.set(l.name,u)}else{let u=me(i,l.name),d=u[u.length-1];d&&d.value&&!Ue(d.value)&&s.set(l.name,d.value)}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function fd(e,t){let n=t.typeName;if(!n)return!1;for(let r of e.module.fields)if(r.assignedValue&&G(r.assignedValue)&&Ee(r.assignedValue.value)){let o=r.assignedValue.value;if(o.typeName===n&&!o.isNegatedConstraint)return!0}return!1}function dd(e,t){let n=t.typeName;if(!n)return!1;for(let r of e.module.fields)if(r.assignedValue&&G(r.assignedValue)&&Ee(r.assignedValue.value)){let o=r.assignedValue.value;if(o.typeName===n&&o.isNegatedConstraint)return!0}return!1}function md({receiverTypePattern:e,moduleType:t,whereConstraints:n,env:r,errorToken:o}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let i of t.selfConstraints){if(jn({targetType:e,moduleType:i,env:r}))continue;let a=new Set;for(let s of n)s.moduleType.typeName===i.typeName&&!s.moduleType.isNegatedConstraint&&a.add(s.someType.name);throw p({token:o,errorMessage:`Generic impl receiver type "${x(e)}" does not satisfy constraint "${i.typeName??x(i)}" required by module "${t.typeName??x(t)}".
157
- Consider adding "where(T <: ${i.typeName??x(i)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(jn({targetType:e,moduleType:i,env:r}))throw p({token:o,errorMessage:`Generic impl receiver type "${x(e)}" implements "${i.typeName??x(i)}" but module "${t.typeName??x(t)}" requires it to NOT implement this module.
158
- Consider adding "where(T <: !(${i.typeName??x(i)}))" to the impl.`})}}function $u(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let o of r.variables)if(o.name===t.name&&o.value&&G(o.value))return o.value.value}return t}function Ya(e){let t=Ao.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Ao.delete(e)}}function yd(e,t){let n=Ao.get(e);n||(n=new Set,Ao.set(e,n)),n.add(t)}function Eu(e,t,n){let r=e.type.receiverType;if(!(!r||!r.module))if(e.type.typeName&&(cd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t}),ud({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t}),pd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t})),n&&yd(n,r.module),e.type.typeName){let o={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.module.fields.push(o)}else for(let o=0;o<e.type.fields.length;o++){let i=e.type.fields[o],a=e.fields[o],s={label:i.label,type:i.type,isCompileTimeOnly:i.isCompileTimeOnly,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.module.fields.push(s)}}function ku({expr:e,env:t,context:n}){var r,o;if(!v(e,A.impl))throw p({token:e.token,errorMessage:`Expected "impl", got:
159
- ${T(e)}`});if(e.args.length===1&&V(e.args[0])&&v(e.args[0],A.begin)){let i=e.args[0].args,{moduleType:a,moduleValue:s,env:l}=jr({beginExprs:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});return t=l,e.$={env:t,type:a,value:s,pathCollection:[]},e}else if(e.args.length===2){let i=e.args[0],a=e.args[1],s=S({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value||!G(s.$.value))throw p({token:i.token,errorMessage:"Expected type for receiver type argument."});t=s.$.env;let l=s.$.value.value;if(V(e.args[1])&&v(e.args[1],A.begin)){if(!za())throw p({token:e.token,errorMessage:"impl a receiver type with anonymous module (begin block) is only allowed in prelude.yo"});let u=e.args[1].args,{moduleType:d,moduleValue:c,env:f}=jr({beginExprs:u,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:l});return t=f,Pa({targetType:l,moduleType:c.type,env:t,errorToken:e.token}),Eu(c,e,n.currentModulePath),e.$={env:t,type:d,value:c,pathCollection:[]},e}else{let u=S({expr:a,env:t,context:{...n,expectedType:void 0,ReceiverType:l}});if(!u.$||!Ke(u.$.value))throw p({token:a.token,errorMessage:"Expected module value for module call argument."});t=u.$.env;let d=u.$.value;return Pa({targetType:l,moduleType:d.type,env:t,errorToken:e.token}),Eu(d,e,n.currentModulePath),e.$={env:t,type:u.$.type,value:d,pathCollection:[]},e}}else if(e.args.length===3||e.args.length===4){let i=e.args[0];if(!V(i)||!v(i,A.forall))throw p({token:i.token,errorMessage:`Expected forall(...) as first argument in generic impl, got: ${T(i)}`});let a=!1,s,l,u;if(e.args.length===4){let k=e.args[1];if(!V(k)||!v(k,A.where))throw p({token:k.token,errorMessage:`Expected where(...) as second argument in 4-argument generic impl, got: ${T(k)}`});a=!0,s=k,l=e.args[2],u=e.args[3]}else{let k=e.args[1];if(V(k)&&v(k,A.where))throw p({token:k.token,errorMessage:"impl with where clause requires 4 arguments: impl(forall(...), where(...), ReceiverType, Module(...))"});l=k,u=e.args[2]}let d=i.args,c=[];t=ut(t);for(let k of d){let w,$;if(V(k)&&v(k,":",2)){let B=k.args[0];if(!j(B))throw p({token:B.token,errorMessage:`Expected identifier for forall parameter name, got: ${T(B)}`});w=B.token.value,$=k.args[1]}else if(j(k))w=k.token.value;else throw p({token:k.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${T(k)}`});let b;if($){let B=S({expr:$,env:t,context:{...n}});if((r=B.$)!=null&&r.env&&(t=B.$.env),!B.$||!B.$.value||!G(B.$.value))throw p({token:$.token,errorMessage:`Expected type for forall parameter type, got: ${T($)}`});b=B.$.value.value}let F=!b||yu(b),M=b||lt(),L=re(M,w),{env:O}=we({env:t,variable:{name:w,type:M,isCompileTimeOnly:!0,value:L,token:k.token,initializedAtToken:k.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});if(t=O,F){let B=L.value;c.push({kind:"type",name:w,someType:B})}else c.push({kind:"value",name:w,type:M,unknownValue:L})}if(a&&s)for(let k of s.args){if(!V(k)||!v(k,"<:",2))throw p({token:k.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${T(k)}`});let w=S({expr:k,env:t,context:{...n,isInsideWhereClause:!0}});(o=w.$)!=null&&o.env&&(t=w.$.env)}let f=[];for(let k of c){if(k.kind!=="type")continue;let{someType:w}=k;for(let $ of w.module.fields)$.assignedValue&&G($.assignedValue)&&Ee($.assignedValue.value)&&f.push({someType:w,moduleType:$.assignedValue.value})}let m=S({expr:l,env:t,context:{...n}});if(!m.$||!m.$.value||!G(m.$.value))throw p({token:l.token,errorMessage:"Expected type for receiver type pattern."});t=m.$.env;let y=m.$.value.value,g,h;if(V(u)&&v(u,A.begin)){if(!za())throw p({token:e.token,errorMessage:"impl a receiver type with anonymous module (begin block) is only allowed in prelude.yo"});let k=u.args,w=jr({beginExprs:k,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:y});t=w.env,h=w.moduleType,g=w.moduleValue}else{let k=S({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:y}});if(!k.$||!Ke(k.$.value))throw p({token:u.token,errorMessage:"Expected module value for module call argument."});t=k.$.env,g=k.$.value,h=g.type}md({receiverTypePattern:y,moduleType:h,whereConstraints:f,env:t,errorToken:e.token}),t=Ct(t);let _=h.typeName||h.id,E={forallParameters:c,whereConstraints:f,receiverTypePattern:y,moduleType:h,moduleValue:g,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};return ld(_,E),e.$={env:t,type:h,value:g,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Invalid module implementation, expected a "begin" block, got:
160
- ${T(e)}`})}function ja({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],freeVariables:[],modulePath:e,inputString:t}}function tt(){let e=ja({modulePath:"",inputString:""});return ut(e)}var Wa=null;function bu(e){Wa=e}function Ha(){Wa=null}function za(){return Wa===null}function we({env:e,variable:t,deltaFrame:n,variableId:r,skipCheckingFunctionOverloading:o,addToBeginBlockFrame:i}){let a=e.frames.length-1+(n??0);if(i){let m=hd(e);m>=0&&(a=m)}if(!o&&ce(t.type)){let m=me(e,t.name,y=>ce(y.type)&&y.frameLevel===a);if(m.length>0)throw st([{token:t.token,errorMessage:`Failed to define function "${t.name}" as overloading is not allowed:`},{token:m[0].token,errorMessage:`Function "${m[0].name}" is already defined here:`}])}let s=e.frames[a];if(!s)throw console.trace(`Frame at level ${a} does not exist in the environment.`),new Error(`Frame at level ${a} does not exist in the environment.`);let l=St(e.modulePath,t.name)?t.name:r??mr(e.modulePath,t.name),u={...t,frameLevel:a,id:l},d=_d({frame:s,variable:u}),c=e.frames.slice();return c[a]=d,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:c,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function _d({frame:e,variable:t}){if(e.variables.some(r=>r.name===t.name))throw st([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:e.variables.find(r=>r.name===t.name).token,errorMessage:`Variable "${t.name}" is already defined here in the same scope:`}]);let n=e.variables.findIndex(r=>r.name===t.name&&!r.initializedAtToken);if(n>-1){let r=e.variables.slice();return r[n]=t,{id:e.id,variables:r,isBeginBlockFrame:e.isBeginBlockFrame}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame}}function gd(e,t,n){let r=e.variables.filter(o=>o.name===t);return n?r.filter(n):r}function me(e,t,n){let r=[];for(let o=0;o<e.frames.length;o++){let i=e.frames[o],a=gd(i,t,n);r.push(...a)}return n?r.filter(n):r}function sa(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let i=e.frames[r].variables.filter(t);n.push(...i)}return n}function ut(e,t={id:mr(e.modulePath,"frame"),variables:[],isBeginBlockFrame:!1},n){let r=n?{...t,isBeginBlockFrame:!0}:t;return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:[...e.frames,r],modulePath:e.modulePath,inputString:e.inputString}}function Ct(e,t=!1){if(!t){let n=e.frames[e.frames.length-1],r=Yr(e),o=n.variables.filter(i=>!i.initializedAtToken);if(r.length>0)throw st(r.map(i=>({token:i.token,errorMessage:`Variable "${i.name}" was not consumed. It is supposed to be consumed before going out of scope.
161
- Typeof "${i.name}": ${x(i.type)}`})));if(o.length>0)throw st(o.map(i=>({token:i.token,errorMessage:`Variable "${i.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function Xe(e,t,n){let r=e.frames.map(o=>{let i=o.variables.map(a=>a.id===t.id?n:a);return{...o,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function Fu(e){var t;return{id:e.id,name:e.name,type:x(e.type),typeId:e.type.id,value:je(e.value),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheGcValue:!!e.isOwningTheGcValue,isOwningTheSameGcValueAs:(t=e.isOwningTheSameGcValueAs)==null?void 0:t.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function Ka(e,t,n,r=!1,o){var f;let i=[],a=n;for(;De(a);)a=a.childType;function s(m,y){let g=m.fields.find(h=>h.label===t&&(ce(h.type)||Ee(h.type)));if(g){let h;if(ce(g.type)){if(Ue(y))h=re(g.type,g.label);else if(Ke(y)){let _=m.fields.findIndex(E=>E.label===g.label);h=y.fields[_]}i.push({type:g.type,value:h})}else if(Ee(g.type)){let _=g.assignedValue;Ke(_)&&l(_)}}if(!g)for(let h of m.fields)Ee(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(m){let y=m.type.fields.findIndex(g=>g.label==="Call");if(y>=0){let g=m.type.fields[y];if(g.assignedValue){let h=g.assignedValue;ln(h)?h.fields.forEach(_=>{i.push({type:_.type,value:_})}):i.push({type:h.type,value:h})}}}function u(m){return m.filter(g=>{if(ce(g.type)){if(g.type.parameters.length===0)return!1;let h=g.type.parameters[0].type;if(!r&&De(h)){let E=h.childType;if(W({type:E,env:g.type.env},{type:n,env:e},!0))return g.needsPointerConversion=!0,!0}if(Ye(h)||Ye(h)&&!Ye(n)||ee(n)&&n.resolvedConcreteType&&!Pe(n)&&!Ye(h)&&W({type:h,env:g.type.env},{type:n.resolvedConcreteType,env:e},!0))return!0;if(!Ye(h)&&Ye(n))return!1;if(kt(n)||Bt(n)||Pt(n)){let E=vt({type:n,expectedType:void 0,expr:void 0,env:e});if(W({type:h,env:g.type.env},{type:E,env:e},!0))return!0}if(Ne(n)&&g.value===void 0){if(g.type.parameters.length>0&&g.type.SelfType){let k=g.type.parameters[0];if(k){let w=k.type;if(!$t(w)&&!Ne(w)&&!De(w))return!1}}let E=g.type.return.type;if(Rn(E,g.type.SelfType))return!1}return W({type:h,env:g.type.env},{type:n,env:e},!0)}return!0})}function d(m,y,g=new Set){if(g.has(m.id))return;g.add(m.id);let h=m.fields.find(_=>_.label===y&&ce(_.type));if(h&&ce(h.type)){let _=h.assignedValue;Ue(_)&&(_=re(h.type,h.label)),i.push({type:h.type,value:_});return}for(let _ of m.fields)Ee(_.type)&&_.assignedValue&&s(_.type,_.assignedValue)}if(n!==a&&n.module){let m=n.module.fields.find(y=>y.label===t&&ce(y.type));if(m&&ce(m.type)){let y=m.assignedValue;Ue(y)&&(y=re(m.type,m.label)),i.push({type:m.type,value:y})}else d(n.module,t)}if(i.length===0&&n!==a){let m=Wr({concreteType:n,methodName:t,env:e});i.push(...m)}let c=ee(a)&&a.resolvedConcreteType&&!Pe(a);if(a.module&&!Ne(a)&&!c){let m=a.module.fields.find(y=>y.label===t&&ce(y.type));if(m&&ce(m.type)){let y=m.assignedValue;Ue(y)&&(y=re(m.type,m.label)),i.push({type:m.type,value:y})}else d(a.module,t);if(i.length===0){for(let y of a.module.fields)if(y.label===""&&y.assignedValue&&Ke(y.assignedValue)){let g=y.assignedValue,h=g.type,_=h.fields.findIndex(E=>E.label===t&&ce(E.type));if(_>=0){let E=h.fields[_];if(ce(E.type)){let k=g.fields[_],w=E.type;Fe(k)&&k.specializedType&&(w=k.specializedType),i.push({type:w,value:k})}}}}if(i.length===0){let y=Wr({concreteType:a,methodName:t,env:e});i.push(...y)}}if(i.length===0&&(kt(a)||Bt(a)||Pt(a))){let m=vt({type:a,expectedType:void 0,expr:void 0,env:e});if(m.module){for(let y of m.module.fields)if(y.label===""&&y.assignedValue&&Ke(y.assignedValue)){let g=y.assignedValue,h=g.type,_=h.fields.findIndex(E=>E.label===t&&ce(E.type));if(_>=0){let E=h.fields[_];if(ce(E.type)){let k=g.fields[_],w=E.type;Fe(k)&&k.specializedType&&(w=k.specializedType),i.push({type:w,value:k})}}}}}if(ee(a)){if((f=a.resolvedConcreteType)!=null&&f.module&&!Pe(a)){let m=a.resolvedConcreteType,y=m.module,g=y==null?void 0:y.fields.find(h=>h.label===t&&ce(h.type));if(g&&ce(g.type)){let h=g.assignedValue||re(g.type,g.label);i.push({type:g.type,value:h})}if(i.length===0){for(let h of(y==null?void 0:y.fields)??[])if(h.label===""&&h.assignedValue&&Ke(h.assignedValue)){let _=h.assignedValue,E=_.type,k=E.fields.findIndex(w=>w.label===t&&ce(w.type));if(k>=0){let w=E.fields[k];if(ce(w.type)){let $=_.fields[k],b=w.type;Fe($)&&$.specializedType&&(b=$.specializedType),i.push({type:b,value:$});break}}}}if(i.length===0){let h=Wr({concreteType:m,methodName:t,env:e});i.push(...h)}}if(i.length===0&&a.requiredModules)for(let m of a.requiredModules){let y=m.fields.find(g=>g.label===t&&ce(g.type));if(y&&ce(y.type)){let g={...y.type,SelfType:a},h=re(g,y.label);i.push({type:g,value:h})}}if(i.length===0){let m=g=>{if(!(g!=null&&g.whereClauseConstraints))return;let h=g.whereClauseConstraints.get(a);if(!h&&ee(a)){for(let[_,E]of g.whereClauseConstraints)if(ee(_)&&W({type:_,env:e},{type:a,env:e},!1)){h=E;break}}return h},y=o;for(;y&&i.length===0;){let g=m(y);if(g)for(let h of g.requiredModules){let _=h.fields.find(E=>E.label===t&&ce(E.type));if(_&&ce(_.type)){let E={..._.type,SelfType:a},k=re(E,_.label);i.push({type:E,value:k})}}y=y.ParentFunctionType}}if(i.length===0){for(let m of a.module.fields)if(m.label===""&&m.assignedValue&&G(m.assignedValue)&&Ee(m.assignedValue.value)){let g=m.assignedValue.value.fields.find(h=>h.label===t&&ce(h.type));if(g&&ce(g.type)){let h=re(g.type,g.label);i.push({type:g.type,value:h})}}}}if(Ne(a)){let m=a.module.fields.find(g=>g.label===t&&(ce(g.type)||Ee(g.type)));if(m&&ce(m.type)){let g=m.assignedValue||re(m.type,m.label);i.push({type:m.type,value:g})}let y=a.requiredModules;for(let g of y){let h=g.fields.find(_=>_.label===t&&(ce(_.type)||Ee(_.type)));h&&ce(h.type)&&h.type.parameters.length>0&&(Ye(h.type.parameters[0].type)||Ye(n)||W({type:h.type.parameters[0].type,env:h.type.env},{type:n,env:e},!0))&&i.push({type:h.type,value:void 0})}}return i.length>0,u(i)}function wu(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let o=n.variables.filter(i=>!!i.isCompileTimeOnly);return{...n,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Yr(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>!r.consumedAtToken&&r.isOwningTheGcValue&&qe(r.type)).reverse()}function hd(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}var Hr=[...C.__yo_op_add,...C.__yo_op_sub,...C.__yo_op_mul,...C.__yo_op_div,...C.__yo_op_mod,...C.__yo_op_neg,...C.__yo_op_eq,...C.__yo_op_neq,...C.__yo_op_lt,...C.__yo_op_lte,...C.__yo_op_gt,...C.__yo_op_gte,...C.__yo_op_not,...C.__yo_op_bit_and,...C.__yo_op_bit_or,...C.__yo_op_bit_xor,...C.__yo_op_bit_complement,...C.__yo_op_bit_left_shift,...C.__yo_op_bit_right_shift,...C.__yo_ptr_add,...C.__yo_ptr_sub,...C.__yo_ptr_diff,...C.__yo_ptr_eq,...C.__yo_ptr_neq,...C.__yo_ptr_lt,...C.__yo_ptr_lte,...C.__yo_ptr_gt,...C.__yo_ptr_gte,...C.__yo_slice_len,...C.__yo_as,...C.__yo_noop,...C.__yo_return_self,...C.__yo_ms_sleep],Vu=new Set(["bool","usize","isize","u8","i8","u16","i16","u32","i32","u64","i64","f32","f64","char","short","ushort","int","uint","long","ulong","longlong","ulonglong","longdouble"]);function Q(e){let t=new Set(["auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","inline","int","long","register","restrict","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while","_Alignas","_Alignof","_Atomic","_Bool","_Complex","_Generic","_Imaginary","_Noreturn","_Static_assert","_Thread_local","errno","stdin","stdout","stderr","NULL","true","false"]),n=e.replace(/[^a-zA-Z0-9_]/g,r=>`_u${r.charCodeAt(0)}_`);return t.has(n)&&(n="__yo_c_reserved_"+n),n}function H(e,t){var n,r,o,i,a;if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"compt_int":return"int64_t";case"compt_float":return"double";case"compt_string":return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let u=rn(e);if(u)return H(u,t)}let s;switch(e.tag){case"Tuple":s="tuple";break;case"Struct":s="struct";break;case"Union":s="union";break;case"Enum":s="enum";break;default:throw new Error("Unreachable")}let l=(n=t.types[e.id])==null?void 0:n.cName;if(!l)throw new Error(`No C type name found for ${s} ${x(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&$e(e)&&e.isReferenceSemantics?`${l}*`:l}case"Function":return"void*";case"Dyn":{let s=(r=t.types[e.id])==null?void 0:r.cName;if(!s)throw new Error(`No C type name found for dynamic dispatch type ${x(e)}`);return s}case"Array":{let s=e,l=s.childType,u=s.length;if(ct(u)){let d=H(l,t),c=`Array_${Q(d)}_${u.value}`;return t.arrayStructTypes.has(c)||t.arrayStructTypes.set(c,{childType:d,length:u.value}),c}break}case"Slice":{let s=e,u=`Slice_${Q(H(s.childType,t))}`;return t.sliceStructTypes.has(u)||t.sliceStructTypes.set(u,{childType:H(s.childType,t)}),u}case"SomeType":{let s=e;if(Pe(s)){if((o=s.resolvedConcreteType)!=null&&o.isExtern)return`${H(s.resolvedConcreteType,t)}*`;let l=(i=t.types[s.id])==null?void 0:i.cName;if(l)return`${l}*`;let u=Ht(s);if(u){let d=(a=t.types[u.id])==null?void 0:a.cName;if(d)return`${d}*`}if(s.resolvedConcreteType&&$e(s.resolvedConcreteType)){let d=s.resolvedConcreteType.id;for(let[c,f]of Object.entries(t.types))if(ee(f.type)&&Pe(f.type)&&f.type.resolvedConcreteType&&$e(f.type.resolvedConcreteType)&&f.type.resolvedConcreteType.id===d)return`${f.cName}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${s.id}, FutureModule: ${(u==null?void 0:u.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.`)}return mn(s)&&s.resolvedConcreteType||s.resolvedConcreteType?H(s.resolvedConcreteType,t):"void*"}case"Ptr":{let l=e.childType;if(at(l)){let c=H(l.childType,t),f=`Slice_${Q(c)}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:c}),f}let u=H(l,t);return $t(l)?`${u}*`:Ve(l)&&rn(l)?u:`${u}*`}case"Iso":{let s=e,l=s.childType,u=H(l,t),d=u.replace(/\*/g,"").trim(),c=`Iso_${Q(d)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(c)||t.isoTypes.set(c,{childTypeCName:u,isoType:s}),c}}return`// Unknown type: ${x(e)}`}function bt(e,t,n){let r=Q(t);return`${H(e,n)} ${r}`}function Tn(e,t,n){var o;let r=(o=n.types[e.id])==null?void 0:o.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${x(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Io(e){return Nn(e.type)}function No(e){return e.type.return.isCompileTimeOnly}function Do(e){let t=e.body,n=null;return V(t)&&v(t,"begin")&&t.args.length===1&&V(t.args[0])&&v(t.args[0],Hr)?n=t.args[0].func.token.value:V(t)&&v(t,Hr)&&(n=t.func.token.value),n&&C.__yo_as.includes(n)?null:n}function rn(e){if(e.variants.length!==2)return null;let t=null,n=null;for(let r of e.variants)if(!r.fields||r.fields.length===0){if(t)return null;t=r}else if(r.fields.length===1){let o=r.fields[0].type;if(De(o)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function ir(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function xu(e){var a,s,l;if(!V(e.func)||!v(e.func,".",2))return!1;let t=e.func,n=t.args[0],r=t.args[1];if(!j(r)||r.token.value!=="fill"||!n)return!1;let o=(a=n.$)==null?void 0:a.value;if(G(o)){let u=o.value;if(Oe(u))return!0}let i=(s=n.$)==null?void 0:s.type;if(Oe(i))return!0;if(V(n)){let u=(l=n.$)==null?void 0:l.type;return Oe(u)}return!1}function Mu(e,t,n){var m,y,g;let r=n.emitter,i=e.func.args[0],a=e.args[0];if(!a)return"/* ERROR: Array.fill requires a fill value argument */";let s=(m=i.$)==null?void 0:m.value,l;if(G(s)&&Oe(s.value))l=s.value;else{let h=(y=i.$)==null?void 0:y.type;if(Oe(h))l=h;else return"/* ERROR: Array.fill receiver is not an array type */"}let u=l.length;if(!ct(u))return"/* ERROR: Array.fill requires compile-time known array length */";let d=H(l,n),c=z(a,t,n),f=((g=e.$)==null?void 0:g.variableName)||`temp_array_${Date.now()}`;return r.emitLine(`${t}${d} ${f};`),r.emitLine(`${t}for (int i = 0; i < ${u.value}; i++) {`),r.emitLine(`${t} ${f}.data[i] = ${c};`),r.emitLine(`${t}}`),f}function Su(e,t){let n=[];if(e.tag!=="FuncCall"||!v(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],awaitPoint:null}]:[{stateNumber:0,expressions:[e],awaitPoint:t[0]??null}];let r=e.args,o=[],i=[];for(let a of r){let s=vd(a,t),l=v(a,"return");if(s!==-1)i.push(a),o.push(i),i=[];else if(l){i.push(a),o.push(i),i=[];break}else i.push(a)}i.length>0&&o.push(i);for(let a=0;a<o.length;a++){let s=o[a],l=a<t.length?t[a]:null;n.push({stateNumber:a,expressions:s,awaitPoint:l})}return n}function vd(e,t){for(let n=0;n<t.length;n++)if(ua(e,t[n].expr))return n;return-1}function ua(e,t){if(e===t)return!0;switch(e.tag){case"FuncCall":if(ua(e.func,t))return!0;for(let n of e.args)if(ua(n,t))return!0;break}return!1}function Lu(e,t,n,r=!1){let o=n.emitter;for(let i=0;i<e.expressions.length;i++){let a=e.expressions[i],s=i===e.expressions.length-1,l=e.awaitPoint&&ua(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FuncCall"&&(v(a,A.while)||v(a,A.cond))&&pa(a);if((l||u)&&e.awaitPoint)Td(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let d=z(a,t,n);d&&(o.emitLine(`${t}// Store final expression result`),o.emitLine(`${t}sm->result = ${d};`))}else{let d=z(a,t,n);!d||!a.$||St(a.$.env.modulePath,d)||o.emitLine(`${t}${d};`)}}}function Td(e,t,n,r,o){var a,s;let i=o.emitter;if(e.tag==="FuncCall"&&v(e,C.await)){let l=e.args[0];if(!l){i.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=z(l,r,o);i.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),i.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else i.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FuncCall"&&v(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){i.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(!d){i.emitLine(`${r}// Error: await without argument`);return}let c=(a=l.token)==null?void 0:a.value;if(!c||!l.$){i.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=z(d,r,o);i.emitLine(`${r}// Store Future for await (variable: ${c})`),i.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else i.emitLine(`${r}// Store Future for await (variable: ${c}) - future already in state machine`);return}if(u.tag==="FuncCall"&&v(u,A.cond)){let d;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let c=l.token.value,f=me(l.$.env,c);f.length>0&&(d=f[f.length-1].id)}Qa(u,t,r,o,d);return}}if(e.tag==="FuncCall"&&v(e,A.cond)){Qa(e,t,r,o);return}if(e.tag==="FuncCall"&&v(e,A.match)){Za(e,t,r,o);return}if(e.tag==="FuncCall"&&v(e,A.while)){$d(e,t,r,o);return}i.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),i.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FuncCall"?e.func.tag==="Atom"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function Qa(e,t,n,r,o){var l,u,d;let i=r.emitter;if(e.tag!=="FuncCall"||!v(e,A.cond)){i.emitLine(`${n}// Error: Expected cond expression`);return}let a=e.args;if(a.length===0){i.emitLine(`${n}// Error: cond must have at least one branch`);return}let s=[];for(let c=0;c<a.length;c++){let f=a[c];if(f.tag!=="FuncCall"||!v(f,"=>")){i.emitLine(`${n}// Error: Expected => pair in cond`);continue}let m=f.args[0],y=f.args[1];if(!m||!y){i.emitLine(`${n}// Error: Invalid pair in cond`);continue}let g=c===a.length-1&&m.tag==="Atom"&&((l=m.token)==null?void 0:l.value)==="true"?null:z(m,n,r);if(g?i.emitLine(`${n}${c===0?"if":"else if"} (${g}) {`):i.emitLine(`${n}${c===0?"{":"else {"}`),Oo(y)){i.emitLine(`${n} sm->cond_branch_${t.index} = ${c};`);let _=la(y,t,`${n} `,r);s.push({index:c,value:y,hasAwait:!0,remainingExprs:_,deferredDropExpressions:(u=y.$)==null?void 0:u.deferredDropExpressions})}else{if(V(y)&&v(y,A.begin)){let _=y.args;for(let E=0;E<_.length;E++){let k=_[E],w=z(k,`${n} `,r);if(w==="break"&&t.isInsideWhile)i.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),i.emitLine(`${n} goto while_loop_${t.index}_end;`);else{let $=w==="break"||w==="continue"||(w==null?void 0:w.includes("return"));w&&($||k.$&&!St(k.$.env.modulePath,w))&&i.emitLine(`${n} ${w};`)}}if((d=y.$)!=null&&d.deferredDropExpressions)for(let E of y.$.deferredDropExpressions){let k=z(E,`${n} `,r);k&&i.emitLine(`${n} ${k};`)}}else{let _=z(y,`${n} `,r);if(_==="break"&&t.isInsideWhile)i.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),i.emitLine(`${n} goto while_loop_${t.index}_end;`);else{let E=_==="break"||_==="continue"||(_==null?void 0:_.includes("return"));_&&(E||y.$&&!St(y.$.env.modulePath,_))&&i.emitLine(`${n} ${_};`)}}s.push({index:c,value:y,hasAwait:!1})}i.emitLine(`${n}}`)}r.condBranchInfo||(r.condBranchInfo=new Map),r.condBranchInfo.set(t.index,{branches:s,targetVariableId:o})}function Oo(e){if(e.tag==="FuncCall"&&v(e,C.await))return!0;if(e.tag==="FuncCall"){for(let t of e.args)if(Oo(t))return!0}return!1}function Za(e,t,n,r){var f,m,y,g,h;let o=r.emitter;if(e.tag!=="FuncCall"||!v(e,A.match)){o.emitLine(`${n}// Error: Expected match expression`);return}let i=e.args[0],a=e.args.slice(1);if(!i||a.length===0){o.emitLine(`${n}// Error: match must have a value and at least one case`);return}let s=z(i,n,r),l=(f=i.$)==null?void 0:f.type;if(!l||!Ve(l)){o.emitLine(`${n}// Error: match requires an enum type`);return}let u=l,d=(m=r.types[u.id])==null?void 0:m.cName;if(!d){o.emitLine(`${n}// Error: enum type has no C name`);return}let c=rn(u);if(c){let _=-1,E=-1,k;for(let w=0;w<a.length;w++){let $=a[w];if(V($)&&v($,"=>",2)){let b=$.args[0];if(b&&V(b)&&v(b,"."))_=w;else if(b&&V(b)){let F=b.func;F&&V(F)&&v(F,".")&&(E=w,b.args.length>0&&j(b.args[0])&&(k=b.args[0].token.value))}}}if(o.emitLine(`${n}if (${s} != NULL) {`),E>=0){let w=a[E];if(!V(w))o.emitLine(`${n} // Error: Expected => in case`);else{let $=w.args[1];if(k){let F=r,M=!1,L;if(F.stateMachineVariables){for(let[O,B]of F.stateMachineVariables)if(B.name===k){M=!0,L=O;break}}M&&L?o.emitLine(`${n} sm->var_${L} = ${s};`):o.emitLine(`${n} ${H(c,r)} ${k} = ${s};`)}o.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`);let b=la($,t,n+" ",r);if(b.length>0){let F=r;F.condBranchInfo||(F.condBranchInfo=new Map);let M=F.condBranchInfo.get(t.index)||{branches:[]};M.branches.push({index:E,value:$,hasAwait:!0,remainingExprs:b,deferredDropExpressions:(y=$.$)==null?void 0:y.deferredDropExpressions}),F.condBranchInfo.set(t.index,M)}}}if(o.emitLine(`${n}} else {`),_>=0){let w=a[_];if(!V(w))o.emitLine(`${n} // Error: Expected => in case`);else{let $=w.args[1];if(o.emitLine(`${n} sm->cond_branch_${t.index} = ${_};`),Oo($)){let b=la($,t,n+" ",r);if(b.length>0){let F=r;F.condBranchInfo||(F.condBranchInfo=new Map);let M=F.condBranchInfo.get(t.index)||{branches:[]};M.branches.push({index:_,value:$,hasAwait:!0,remainingExprs:b,deferredDropExpressions:(g=$.$)==null?void 0:g.deferredDropExpressions}),F.condBranchInfo.set(t.index,M)}}else{let b=z($,n+" ",r);b&&$.$&&!St($.$.env.modulePath,b)&&o.emitLine(`${n} ${b};`)}}}o.emitLine(`${n}}`)}else{o.emitLine(`${n}switch (${s}.tag) {`);for(let _=0;_<a.length;_++){let E=a[_];if(!V(E)||!v(E,"=>",2))continue;let k=E.args[0],w=E.args[1],$;if(V(k)&&v(k,".",1))$=k.args[0].token.value;else if(V(k)){let F=k.func;F&&V(F)&&v(F,".",1)&&($=F.args[0].token.value)}if(!$){o.emitLine(`${n} // Error: Could not extract variant name`);continue}let b=`${d.toUpperCase()}_${$.toUpperCase()}`;if(o.emitLine(`${n} case ${b}: {`),o.emitLine(`${n} sm->cond_branch_${t.index} = ${_};`),V(k)&&k.args.length>=1){let F=k.func;if(F&&V(F)&&v(F,".")){let M=u.variants.find(L=>L.name===$);if(M&&M.fields)for(let L=0;L<Math.min(k.args.length,M.fields.length);L++){let O=k.args[L],B=M.fields[L];if(j(O)&&B){let P=O.token.value,q=r,ne=!1,pe;if(q.stateMachineVariables){for(let[ye,ge]of q.stateMachineVariables)if(ge.name===P){ne=!0,pe=ye;break}}let ue=Q(B.label),oe=`${s}.data.${$}.${ue}`;if(ne&&pe)o.emitLine(`${n} sm->var_${pe} = ${oe};`);else{let ye=H(B.type,r);o.emitLine(`${n} ${ye} ${P} = ${oe};`)}}}}}if(Oo(w)){let F=la(w,t,n+" ",r);if(F.length>0){let M=r;M.condBranchInfo||(M.condBranchInfo=new Map);let L=M.condBranchInfo.get(t.index)||{branches:[]};L.branches.push({index:_,value:w,hasAwait:!0,remainingExprs:F,deferredDropExpressions:(h=w.$)==null?void 0:h.deferredDropExpressions}),M.condBranchInfo.set(t.index,L)}}else{let F=z(w,n+" ",r);F&&w.$&&!St(w.$.env.modulePath,F)&&o.emitLine(`${n} ${F};`)}o.emitLine(`${n} break;`),o.emitLine(`${n} }`)}o.emitLine(`${n} default: break;`),o.emitLine(`${n}}`)}}function la(e,t,n,r){let o=r.emitter,i=[];if(e.tag!=="FuncCall"||!v(e,"begin"))return o.emitLine(`${n}// Error: Expected begin block in cond branch with await`),i;let a=e.args,s=!1;for(let l of a){if(s){i.push(l);continue}if(Oo(l))if(s=!0,l.tag==="FuncCall"&&v(l,":=")){let u=l.args[1];if(u&&u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(d){let c=z(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),o.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}}}else if(l.tag==="FuncCall"&&v(l,C.await)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let d=z(u,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}else o.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else l.tag==="FuncCall"&&v(l,A.match)&&Za(l,t,n,r);else{let u=z(l,n,r);u&&l.$&&!St(l.$.env.modulePath,u)&&o.emitLine(`${n}${u};`)}}return i}function $d(e,t,n,r){let o=r.emitter;if(e.tag!=="FuncCall"||!v(e,"while")){o.emitLine(`${n}// Error: Expected while expression`);return}let i=e.args;if(i.length!==2){o.emitLine(`${n}// Error: while must have exactly 2 arguments (condition, body)`);return}let a=i[0],s=i[1];o.emitLine(`${n}sm->while_loop_${t.index}_active = true;`),o.emitLine(`${n}while_loop_${t.index}_start:`);let l=z(a,n,r);o.emitLine(`${n}if (!(${l})) {`),o.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),o.emitLine(`${n} goto while_loop_${t.index}_end;`),o.emitLine(`${n}}`);let u=Ed(s,t,n,r);o.emitLine(`${n}while_loop_${t.index}_end:`),r.whileLoopInfo||(r.whileLoopInfo=new Map),r.whileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:u})}function Ed(e,t,n,r){let o=r.emitter,i=[],a=[];e.tag==="FuncCall"&&v(e,"begin")?a=e.args:a=[e];let s=-1;for(let u=0;u<a.length;u++){let d=a[u];if(pa(d)){s=u;break}}if(s===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),i;for(let u=0;u<s;u++){let d=a[u],c=z(d,n,r);c&&d.$&&!St(d.$.env.modulePath,c)&&o.emitLine(`${n}${c};`)}let l=a[s];if(V(l)&&v(l,":=")){let u=l.args[1];if(u&&u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(d){let c=z(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}}}else if(l.tag==="FuncCall"&&v(l,C.await)){let u=l.args[0];if(u){let d=z(u,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}}else{if(V(l)&&v(l,A.cond))return Qa(l,t,n,r,void 0),i;if(V(l)&&v(l,A.match))return Za(l,t,n,r),i}for(let u=s+1;u<a.length;u++)i.push(a[u]);return i}function pa(e){if(e.tag==="FuncCall"&&v(e,C.await))return!0;if(e.tag==="FuncCall"){if(pa(e.func))return!0;for(let t of e.args)if(pa(t))return!0}return!1}function Au(e,t){if(e.futureVariableId){let n=t.capturedVariables.find(r=>r.id===e.futureVariableId);if(n)return n.kind==="outer"?n.name:`var_${n.id}`}return`await_future_${e.index}`}function ca(e,t){return t==="outer"?`__capture.${Q(e)}`:Q(`var_${e}`)}function Iu(e,t,n,r,o,i,a,s){var m,y,g,h,_,E;let l=s.emitter,d=Ht(i).isFuture.outputType,c=Be(d);s.condBranchInfo=new Map;let f=Su(e,o.awaitPoints);l.emitLine(`// Resume function for async block ${t}`),l.emitLine(`void ${r}(${n}* sm) {`),l.emitLine(` ASYNC_DEBUG("${t}_resume: state=%d\\n", sm->state);`),l.emitLine(" switch (sm->state) {");for(let k=0;k<f.length;k++){let w=f[k];if(!w)continue;let $=w.stateNumber,b=k===f.length-1;if(l.emitLine(`
162
- state_${$}:`),l.emitLine(` case ${$}: { // State ${$}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${$}\\n");`),$>0&&o.awaitPoints[$-1]){let P=o.awaitPoints[$-1],q=Au(P,o);if(P&&!Be(P.resultType)){if(l.emitLine(` // Extract result from await ${$-1}`),l.emitLine(` int state_before_read = atomic_load_explicit(&sm->${q}->state, memory_order_acquire);`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${$-1}, state=%d\\n", state_before_read);`),qe(P.resultType)){let pe=Nu(P.resultType,s);pe?l.emitLine(` sm->await_result_${$-1} = ${pe}(sm->${q}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${$-1} = sm->${q}->result;`))}else l.emitLine(` sm->await_result_${$-1} = sm->${q}->result;`);if(P.targetVariableId){let pe=ca(P.targetVariableId,"local");l.emitLine(` sm->${pe} = sm->await_result_${$-1};`)}l.emitLine("")}if(!P.futureVariableId){let pe=P.expr;if(pe.tag==="FuncCall"){let ue=pe.args[0],oe=(m=ue==null?void 0:ue.$)==null?void 0:m.type;oe&&(ee(oe)||Ne(oe))&&(l.emitLine(` if (sm->${q} != NULL) { __yo_decr_rc((void*)sm->${q}); sm->${q} = NULL; }`),l.emitLine(""))}}let ne=s;if(P){let pe=(y=ne.condBranchInfo)==null?void 0:y.get(P.index);if(pe&&pe.branches.some(oe=>oe.hasAwait)){l.emitLine(" // Execute remaining code from chosen cond branch"),l.emitLine(` switch (sm->cond_branch_${P.index}) {`);for(let oe of pe.branches)if(oe.hasAwait){if(l.emitLine(` case ${oe.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${oe.index}\\n");`),oe.remainingExprs&&oe.remainingExprs.length>0){let ye=s.inStateMachine,ge=s.stateMachineVariables;s.inStateMachine={futureType:i};let Me=new Map;for(let Se of o.capturedVariables)Me.set(Se.id,Se);if(a)for(let Se of a.fields)Me.set(Se.label,{id:Se.label,name:Se.label,type:Se.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=Me;for(let Se of oe.remainingExprs){let Re=z(Se," ",s);!Re||!Se.$||St(Se.$.env.modulePath,Re)||l.emitLine(` ${Re};`)}if(oe.deferredDropExpressions)for(let Se of oe.deferredDropExpressions){let Re=z(Se," ",s);Re&&Re.includes("sm->")&&l.emitLine(` ${Re};`)}s.inStateMachine=ye,s.stateMachineVariables=ge}l.emitLine(" break;"),l.emitLine(" }")}if(l.emitLine(" }"),pe.targetVariableId){let oe=ca(pe.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${oe} = sm->await_result_${P.index};`)}l.emitLine("")}let ue=(g=ne.whileLoopInfo)==null?void 0:g.get(P.index);if(ue){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${P.index}_active) {`),ue.bodyExprsAfterAwait&&ue.bodyExprsAfterAwait.length>0){let Re=s.inStateMachine,Te=s.stateMachineVariables;s.inStateMachine={futureType:i};let be=new Map;for(let I of o.capturedVariables)be.set(I.id,I);if(a)for(let I of a.fields)be.set(I.label,{id:I.label,name:I.label,type:I.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=be;for(let I of ue.bodyExprsAfterAwait){let U=z(I," ",s);!U||!I.$||St(I.$.env.modulePath,U)||l.emitLine(` ${U};`)}s.inStateMachine=Re,s.stateMachineVariables=Te}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let oe=s.inStateMachine,ye=s.stateMachineVariables;s.inStateMachine={futureType:i};let ge=new Map;for(let Re of o.capturedVariables)ge.set(Re.id,Re);if(a)for(let Re of a.fields)ge.set(Re.label,{id:Re.label,name:Re.label,type:Re.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=ge;let Me=z(ue.conditionExpr," ",s);s.inStateMachine=oe,s.stateMachineVariables=ye,l.emitLine(` if (!(${Me})) {`),l.emitLine(` sm->while_loop_${P.index}_active = false;`),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition false, exiting loop\\n");`),l.emitLine(" } else {"),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition true, continuing iteration\\n");`);let Se=P.index;l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${Se};`),l.emitLine(` goto while_loop_${Se}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${P.index}:`)}}}let F=s.inStateMachine,M=s.stateMachineVariables;s.inStateMachine={futureType:i};let L=new Map;for(let P of o.capturedVariables)L.set(P.id,P);if(a)for(let P of a.fields)L.set(P.label,{id:P.label,name:P.label,type:P.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=L;let O=s.pendingDeferredDrops;s.pendingDeferredDrops=(h=e.$)==null?void 0:h.deferredDropExpressions;let B=b&&!c&&w.expressions.length>0;if(Lu(w," ",s,B),s.pendingDeferredDrops=O,l.emitLine(""),w.awaitPoint){s.inStateMachine=F,s.stateMachineVariables=M;let P=$+1,q=Au(w.awaitPoint,o),ne=(_=w.awaitPoint)==null?void 0:_.isInsideWhile;if(ne){let pe=w.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${pe}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${P};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = atomic_load_explicit(&sm->${q}->state, memory_order_acquire);`),l.emitLine(" if (future_state == -1) { // -1 = completed"),l.emitLine(" // Yield once even when ready (microtask semantics), then resume in next tick"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" } else {"),l.emitLine(" // Register continuation to be called when future completes"),l.emitLine(` atomic_store_explicit(&sm->${q}->continuation_fn, (void (*)(void*))${r}, memory_order_release);`),l.emitLine(` atomic_store_explicit(&sm->${q}->continuation_sm, (void*)sm, memory_order_release);`),l.emitLine(" return;"),l.emitLine(" }"),ne){let pe=w.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${pe};`),l.emitLine(" }")}}else if(b){if(!w.expressions.some(q=>v(q,"return"))){if((E=e.$)!=null&&E.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let q of e.$.deferredDropExpressions){let ne=z(q," ",s);ne&&l.emitLine(` ${ne};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),l.emitLine(" atomic_store_explicit(&sm->state, -1, memory_order_release); // -1 = completed"),l.emitLine(""),l.emitLine(" // Check if there's a continuation to invoke"),l.emitLine(" void (*continuation_fn)(void*) = (void (*)(void*))atomic_load_explicit(&sm->continuation_fn, memory_order_acquire);"),l.emitLine(" void* continuation_sm = atomic_load_explicit(&sm->continuation_sm, memory_order_acquire);"),l.emitLine(""),l.emitLine(" if (continuation_fn != NULL) {"),l.emitLine(' ASYNC_DEBUG("Future %p completed, spawning continuation: resume_fn=%p, sm=%p\\n", (void*)sm, (void*)continuation_fn, continuation_sm);'),l.emitLine(""),l.emitLine(" // Clear the continuation (prevent double-spawn)"),l.emitLine(" atomic_store_explicit(&sm->continuation_fn, NULL, memory_order_relaxed);"),l.emitLine(" atomic_store_explicit(&sm->continuation_sm, NULL, memory_order_relaxed);"),l.emitLine(""),l.emitLine(" // Spawn the continuation as a new task"),l.emitLine(" yo_async_spawn_task(continuation_fn, continuation_sm);"),l.emitLine(" }"),l.emitLine(""),l.emitLine(" // Release event loop's reference now that task is complete"),l.emitLine(" // This balances the __yo_incr_rc in yo_async_spawn_task"),l.emitLine(" __yo_decr_rc((void*)sm);"),l.emitLine(""),l.emitLine(" // Stay in terminal state (-1)"),l.emitLine(" return;")}s.inStateMachine=F,s.stateMachineVariables=M}else s.inStateMachine=F,s.stateMachineVariables=M;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function Kr(e,t,n){let r=me(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function Du(e,t){if(!t)return Q(e);let n=me(t,e);if(n.length>0){let r=n[n.length-1];if(r.parameterAlias)return Q(r.parameterAlias)}return Q(e)}function Uu(e){if(!V(e)||e.args.length<1)return;let t=e.args[0];if(!(!t||!j(t)))return t.token.value}function Cd(e,t,n,r,o,i=!1){var m;let a=Object.values(o.types).find(y=>y.type===e);if(!a)return o.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if((m=n.$)!=null&&m.deferredDupExpressions)for(let y of n.$.deferredDupExpressions){let g=Uu(y);g&&l.set(g,y)}let u=e.fields.map(y=>{var E,k;let g,h=y.exprs.expr;if((k=(E=h.$)==null?void 0:E.deferredDupExpressions)!=null&&k.length&&(g=h.$.deferredDupExpressions[0]),!g){let w=[y.label];j(h)&&w.push(h.token.value);for(let $ of w){let b=l.get($);if(b){g=b;break}}}if(g)return z(g,r,o);let _={tag:"Atom",token:y.exprs.expr.token,$:y.exprs.expr.$};return fa(_,o)}),d=`(${s}){ ${u.map((y,g)=>{let h=e.fields[g];return h?`.${Q(h.label)} = ${y}`:`/* Error: missing field at index ${g} */`}).join(", ")} }`,c=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${c}`;return i?o.emitter.emitLine(`${r}${s} ${f} = ${d};`):(o.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),o.emitter.emitLine(`${r}*${f} = ${d};`)),{captureTempVar:f,captureCName:s}}function z(e,t,n){let r;switch(e.tag){case"FuncCall":r=Bo(e,t,n);break;case"Atom":r=fa(e,n);break}return r}function Bo(e,t,n){var i,a,s,l,u,d,c,f,m,y,g,h,_,E,k,w,$,b,F,M,L,O,B,P,q,ne,pe,ue,oe,ye,ge,Me,Se,Re,Te,be,I,U,te,se,ve,xe,Ze,Je,rt,Cn,qt,an,Xo,ss,ls,us,ps,cs,fs,ds,ms,ys,_s,gs,hs,vs,Ts,$s,Es,Cs,ks,bs,Fs,ws,Vs,xs,Ms,Ss,Ls,As,Is,Ns,Ds,Os,Us,Bs,Ps,zs,Gs,Rs,qs,Ys,js,Ws,Hs,Ks,Qs,Zs,Js,Xs,el,tl,nl,rl,ol,il,al,sl,ll,ul,pl,cl,fl,dl,ml,yl,_l,gl,hl,vl,Tl,$l,El,Cl,kl,bl,Fl,wl,Vl,xl,Ml,Sl,Ll,Al,Il,Nl,Dl,Ol;let r=n.emitter;if((i=e.$)!=null&&i.macroExpansion)return z(e.$.macroExpansion,t,n);if(V(e.func)&&v(e.func,".",2)&&e.func.args[1]&&j(e.func.args[1])){let D=e.func.args[1].token.value,N=e.func.args[0],Y=(a=N==null?void 0:N.$)==null?void 0:a.type;if(Y&&ee(Y)&&Pe(Y)){if(D===C.___drop[0]){let Z=z(N,t,n);return`if (${Z} != NULL) { __yo_decr_rc((void*)${Z}); }`}if(D===C.___dup[0])return`__yo_incr_rc((void*)${z(N,t,n)})`}}if((s=e.$)!=null&&s.closureFunctionValue&&((l=e.$)!=null&&l.type)&&mn(e.$.type)){let D=nn(e.$.type),N=D.isFn.callType,Y=e.$.closureFunctionValue,Z=e.$.captureType,ie=(u=n.functions[Y.funcId])==null?void 0:u.cName;if(!ie)return"// Error: Closure implementation function not found in context";let X=Ne(e.$.type),R;if(X){let de=n.types[e.$.type.id];if(!de)return"// Error: Dyn closure type not found in context";R=de.cName}let K=Z&&$e(Z)&&Z.fields.length>0,le=H(N.return.type,n),he=N.parameters.map(de=>H(de.type,n)).join(", "),_e=`(${le} (*)(void*${he?", "+he:""}))${ie}`;if(K&&Z&&$e(Z)){let de=!X,fe=Cd(Z,N.id,e,t,n,de);if(!fe)return"// Error: Failed to allocate closure capture";let{captureTempVar:Le}=fe;if(X){let Ge=`__yo_create_${R}`,Tt=`__yo_dispose_${R}`;return`${Ge}(${Le}, ${Tt}, ${_e})`}else return n.implClosureCallMap.set(Z.id,{functionCName:ie,callTypeId:D.isFn.callType.id}),Le}else if(X){let de=`__yo_create_${R}`,fe=`__yo_dispose_${R}`;return`${de}(NULL, ${fe}, ${_e})`}else{if(e.$.type&&e.$.type.tag==="SomeType"){let de=e.$.type;if(de.resolvedConcreteType)return n.implClosureCallMap.set(de.resolvedConcreteType.id,{functionCName:ie,callTypeId:D.isFn.callType.id}),`(${H(de.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}if(v(e,C.__yo_decr_rc)){let D=e.args[0];return D?`__yo_decr_rc(${z(D,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}if(v(e,C.__yo_incr_rc)){let D=e.args[0];return D?`__yo_incr_rc(${z(D,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}if(v(e,C.__yo_rc_own)){let D=e.args[0];return D?z(D,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}if(v(e,C.___dup)){let D=e.args[0];if(!D)return"// Error: ___dup requires exactly 1 argument";let N=z(D,t,n),Y=((d=D.$)==null?void 0:d.type)??((c=e.$)==null?void 0:c.type);return Y?Ne(Y)?`((${H(Y,n)}){ .data = __yo_incr_rc((void*)(${N}).data), .vtable = (${N}).vtable })`:$t(Y)?`((${H(Y,n)})__yo_incr_rc((void*)(${N})))`:gt(Y)?`((${H(Y,n)})__yo_incr_rc_atomic((void*)(${N})))`:N:N}if(v(e,C.___drop)){let D=e.args[0];if(!D)return"// Error: ___drop requires exactly 1 argument";let N=z(D,t,n),Y=((f=D.$)==null?void 0:f.type)??((m=e.$)==null?void 0:m.type);if(!Y)return"";if(Ne(Y))return`__yo_decr_rc((void*)(${N}).data)`;if($t(Y))return`__yo_decr_rc((void*)(${N}))`;if(gt(Y))return`__yo_decr_rc_atomic((void*)(${N}))`;if(ee(Y)&&Y.resolvedConcreteType){let ie=(y=Y.resolvedConcreteType.module)==null?void 0:y.fields.find(X=>X.label===C.___drop[0]);if(ie&&ie.assignedValue&&Fe(ie.assignedValue)){let X=(g=n.functions[ie.assignedValue.funcId])==null?void 0:g.cName;if(X)return`${X}(${N})`}}return""}if(v(e,C.__yo_dyn_drop)){let D=e.args[0];return D?`__yo_decr_rc((void*)(${z(D,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}if(v(e,C.__yo_dyn_dup)){let D=e.args[0];return D?`__yo_incr_rc((void*)(${z(D,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}if(v(e,C.__yo_incr_rc_atomic)){let D=e.args[0];return D?`__yo_incr_rc_atomic(${z(D,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}if(v(e,C.__yo_decr_rc_atomic)){let D=e.args[0];return D?`__yo_decr_rc_atomic(${z(D,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}if(v(e,C.__yo_iso_extract)){let D=e.args[0];if(!D)return"// Error: __yo_iso_extract requires exactly 1 argument";let N=z(D,t,n),Y=(h=D.$)==null?void 0:h.type;if(!Y||!gt(Y))return"// Error: __yo_iso_extract requires an Iso type";let Z=H(Y,n),ie=(_=e.$)==null?void 0:_.type;if(ie&&((E=n.isoTypes)!=null&&E.has(Z))){let K=n.isoTypes.get(Z);K.optionTypeCName||(K.optionTypeCName=H(ie,n))}let X=`__yo_iso_extract_${Z}(${N})`,R=(k=e.$)==null?void 0:k.variableName;return R&&ie?(n.emitter.emitLine(`${t}${H(ie,n)} ${R} = ${X};`),R):X}if(v(e,C.__yo_iso_dispose)){let D=e.args[0];if(!D)return"// Error: __yo_iso_dispose requires exactly 1 argument";let N=z(D,t,n),Y=(w=D.$)==null?void 0:w.type;return!Y||!gt(Y)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(Y,n)}(${N})`}let o=($=e.func.$)==null?void 0:$.value;if(G(o)&&gt(o.value)&&e.args.length===1){let D=o.value,N=D.childType,Y=e.args[0],Z=z(Y,t,n),ie=H(D,n),X=H(N,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(ie)||n.isoTypes.set(ie,{childTypeCName:X,isoType:D}),`__yo_create_iso_${ie}(${Z})`}if(v(e,C.__yo_sometype_drop)){let D=e.args[0];if(!D)return"// Error: __yo_sometype_drop requires exactly 1 argument";let N=(b=D.$)==null?void 0:b.type;if(N&&ee(N)&&Pe(N)){let Y=z(D,t,n);return`if (${Y} != NULL) { __yo_decr_rc((void*)${Y}); }`}if(N&&ee(N)&&N.resolvedConcreteType){let Z=(F=N.resolvedConcreteType.module)==null?void 0:F.fields.find(ie=>ie.label===C.___drop[0]);if(Z&&Z.assignedValue&&Fe(Z.assignedValue)){let ie=(M=n.functions[Z.assignedValue.funcId])==null?void 0:M.cName;if(ie){let X=z(D,t,n);return`${ie}(${X})`}}}return"/* __yo_sometype_drop: no-op */"}if(v(e,C.__yo_sometype_dup)){let D=e.args[0];if(!D)return"// Error: __yo_sometype_dup requires exactly 1 argument";let N=(L=D.$)==null?void 0:L.type;if(N&&ee(N)&&Pe(N))return`__yo_incr_rc((void*)${z(D,t,n)})`;if(N&&ee(N)&&N.resolvedConcreteType){let Z=(O=N.resolvedConcreteType.module)==null?void 0:O.fields.find(ie=>ie.label===C.___dup[0]);if(Z&&Z.assignedValue&&Fe(Z.assignedValue)){let ie=(B=n.functions[Z.assignedValue.funcId])==null?void 0:B.cName;if(ie){let X=z(D,t,n);return`${ie}(${X})`}}}return"/* __yo_sometype_dup: no-op */"}if(v(e,C.__yo_gc_collect))return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()";if(v(e,C.rc)){if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let D=e.args[0],N=(P=D.$)==null?void 0:P.type;if(!N)return"// Error: rc argument missing type information";let Y=z(D,t,n);return Xt(N)?`((yo_ref_header_t*)(${Y}))->ref_count`:"1"}if(v(e,C.panic)){let D=(q=e.$)==null?void 0:q.type;if(!D)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let Y=e.args[0];if((ne=Y.$)!=null&&ne.value&&We(Y.$.value)){let Z=Y.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(Z)});`),r.emitLine(`${t}abort();`)}else{let Z=z(Y,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${Z});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${H(D,n)}*)NULL))`}if(v(e,A.test))return"/* test declaration skipped */";if(v(e,C.__yo_thread_set_maximum_threads)){let D=e.args[0];return D?`__yo_thread_set_maximum_threads(${z(D,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}if(v(e,A.op_and))return e.args.length===0?"true":e.args.length===1?z(e.args[0],t,n):`(${e.args.map(N=>z(N,t,n)).join(" && ")})`;if(v(e,A.op_or))return e.args.length===0?"false":e.args.length===1?z(e.args[0],t,n):`(${e.args.map(N=>z(N,t,n)).join(" || ")})`;if(v(e,C.async))return bd(e,t,n);if(v(e,A.dyn))return Ld(e,t,n);if(v(e,C.await)){let D=e.args[0];if(!D)return"// Error: await requires exactly 1 argument";let N=(pe=D.$)==null?void 0:pe.type;return!N||!Pe(N)?"// Error: await argument must be a Future type":Ht(N)?n.inStateMachine?"":"// Error: await should only be used inside async blocks":"// Error: could not extract Future module from type"}if(v(e,A.return)){let D=e.args[0];if(D){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!Be(e.$.type))return"// Error: return expression missing temporary variable name";let N=n,Y,Z=!1;if(N.inStateMachine&&((ue=D.$)!=null&&ue.variableName)){let le=D.$.variableName;D.$.variableName=void 0,Y=z(D,t,n),D.$.variableName=le,Z=!0}else if((oe=D.$)!=null&&oe.variableName&&((ye=D.$)!=null&&ye.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){let le=D.$.variableName;D.$.variableName=void 0;let he=z(D,t,n);D.$.variableName=le;let _e=H(D.$.type,n),de=Q(le);de!==he&&n.emitter.emitLine(`${t}${_e} ${de} = ${he};`),Y=de}else Y=z(D,t,n);let ie=!1;if((ge=D.$)!=null&&ge.deferredDupExpressions&&D.$.deferredDupExpressions.length>0){Ft(D,t,N);let le=D.$.deferredDupExpressions[0];V(le)&&((Me=le.$)!=null&&Me.variableName)&&(Y=Q(le.$.variableName),ie=!0)}let X=H(e.$.type,n),R=e.$.variableName?Q(e.$.variableName):void 0;if(!ie&&!Be(e.$.type)&&R&&R!==Y&&n.emitter.emitLine(`${t}${X} ${R} = ${Y};`),e.$.deferredDropExpressions&&Kt(e,t,n),N.inStateMachine){let le=N.inStateMachine.futureType,_e=Ht(le).isFuture.outputType,de=Be(_e);if(N.pendingDeferredDrops&&(!e.$.deferredDropExpressions||e.$.deferredDropExpressions.length===0)){n.emitter.emitLine(`${t}// Drop local variables before early completion`);for(let fe of N.pendingDeferredDrops){let Le=z(fe,t,n);Le&&n.emitter.emitLine(`${t}${Le};`)}}if(n.emitter.emitLine(`${t}// Final state - complete the result Future`),n.emitter.emitLine(`${t}ASYNC_DEBUG("${n.currentFunctionName}: Completing async function\\n");`),!de){let fe=e.$.variableName&&Z?e.$.variableName:e.$.variableName||Y;n.emitter.emitLine(`${t}sm->result = ${fe};`)}return n.emitter.emitLine(`${t}ASYNC_DEBUG("${n.currentFunctionName}: Setting state to COMPLETED\\n");`),n.emitter.emitLine(`${t}atomic_store_explicit(&sm->state, -1, memory_order_release); // -1 = completed`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}// Check if there's a continuation waiting for this Future to complete`),n.emitter.emitLine(`${t}void (*continuation_fn)(void*) = atomic_load_explicit(&sm->continuation_fn, memory_order_acquire);`),n.emitter.emitLine(`${t}void* continuation_sm = atomic_load_explicit(&sm->continuation_sm, memory_order_acquire);`),n.emitter.emitLine(`${t}if (continuation_fn != NULL) {`),n.emitter.emitLine(`${t} ASYNC_DEBUG("${n.currentFunctionName}: Spawning continuation: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),n.emitter.emitLine(`${t} yo_async_spawn_task(continuation_fn, continuation_sm);`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}sm->state = ${Number.MAX_SAFE_INTEGER}; // Terminal state`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}// Release the "running task" reference now that task is complete`),n.emitter.emitLine(`${t}// This balances the __yo_incr_rc in the constructor`),n.emitter.emitLine(`${t}__yo_decr_rc((void*)sm);`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}return;`),""}return Be(e.$.type)?"return":`return ${ie?Y:R??Y}`}else return(Se=e.$)!=null&&Se.deferredDropExpressions&&Kt(e,t,n),"return"}if(xu(e))return Mu(e,t,n);if(v(e,"::",2))return"";if(v(e,":",2)){let D=e.args[0];if(V(D)&&v(D,A.compt,1))return"";if(!((Re=D.$)!=null&&Re.type))return`// Error: No type information for left-hand side ${T(D)}
163
- `;let N=D.token.value,Y=bt(D.$.type,N,n);return n.emitter.emitLine(`${t}${Y};`),""}else if(v(e,":=",2)){let D=e.args[0],N=e.args[1],Y=n;if(V(D)&&v(D,A.compt,1))return"";if(Y.inStateMachine&&j(D)&&j(N)){let Z=D.token.value,ie=N.token.value,X=Y.stateMachineVariables&&Array.from(Y.stateMachineVariables.values()).some(K=>K.name===Z),R=Y.stateMachineVariables&&Array.from(Y.stateMachineVariables.values()).some(K=>K.name===ie);if(Z===ie&&(X||R))return""}if((Te=e.$)!=null&&Te.runtimeDestructurings){let Z=e.$.runtimeDestructurings,ie=z(N,t,n),X=(be=N.$)==null?void 0:be.type;return Z.forEach(({label:R,type:K,variableName:le})=>{let he=Q(le),_e=bt(K,he,n);if(X&&$e(X)&&X.isNewtype&&X.fields.length===1){let Le=X.fields[0];if(Le&&Le.label===R){n.emitter.emitLine(`${t}${_e} = ${ie}; // Destructuring ${R} (newtype)`);return}}let de=R.match(/^\d+$/)?`_${R}`:Q(R);if(X&&He(X)&&!R.match(/^\d+$/)){let Le=X.fields.findIndex(Ge=>Ge.label===R);de=Le>=0?`_${Le}`:de}let fe=X&&$t(X)?"->":".";n.emitter.emitLine(`${t}${_e} = ${ie}${fe}${de}; // Destructuring ${R}`)}),""}if(j(D)){let Z=D.token.value;if(!((I=D.$)!=null&&I.type))return`// Error: No type information for variable ${Z}
164
- `;let ie=n,X=!1,R;if(ie.inStateMachine&&ie.stateMachineVariables&&((U=D.$)!=null&&U.env)){let K=me(D.$.env,Z);if(K.length>0){let le=K[K.length-1],he=le.isOwningTheSameGcValueAs?le.isOwningTheSameGcValueAs.id:le.id;ie.stateMachineVariables.has(he)&&(X=!0,R=he)}}if(Oe(D.$.type))if(V(N)&&v(N,A.array)){let K=z(N,t,n);if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let le=bt(D.$.type,Z,n);n.emitter.emitLine(`${t}${le} = ${K};`)}}else{let K;if((te=N.$)!=null&&te.variableName){let le=Q(N.$.variableName),he=z(N,t,n);if(!X){let _e=bt(N.$.type,le,n);le!==he&&n.emitter.emitLine(`${t}${_e} = ${he};`)}K=le}else K=z(N,t,n);if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let le=bt(D.$.type,Z,n);n.emitter.emitLine(`${t}${le} = ${K};`)}}else{let K,le=V(N)&&((se=N.$)==null?void 0:se.closureFunctionValue)&&((ve=N.$)==null?void 0:ve.type)&&mn(N.$.type);if((xe=N.$)!=null&&xe.variableName){let he=Q(N.$.variableName),_e=Q(Z);if(he===_e){if(K=z(N,t,n),!le&&((Ze=N.$)!=null&&Ze.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,ie);let de=N.$.deferredDupExpressions[0];V(de)&&((Je=de.$)!=null&&Je.variableName)&&(K=Q(de.$.variableName))}}else if(j(N)&&he===Q(N.token.value)){if(K=z(N,t,n),!le&&((rt=N.$)!=null&&rt.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,ie);let de=N.$.deferredDupExpressions[0];V(de)&&((Cn=de.$)!=null&&Cn.variableName)&&(K=Q(de.$.variableName))}}else{let de=n;if(j(N)&&de.currentClosureCaptures&&de.currentClosureCaptures.includes(N.token.value)&&((qt=N.$)!=null&&qt.env)&&de.currentClosureCaptureFrameLevel!==void 0&&Kr(N.token.value,N.$.env,de.currentClosureCaptureFrameLevel)){let fe=de.currentClosureType;if(fe&&fe.isClosure){let Le=Object.values(de.types).find(Ge=>Ge.type===fe);Le?K=`((${`${Le.cName}_capture`}*)closure_context->data)->${Q(N.token.value)}`:K=`closure_context->${Q(N.token.value)}`}else K=`closure_context->${Q(N.token.value)}`}else{let fe=z(N,t,n);if(fe.trim()!==he){let Le=bt(N.$.type,he,n);n.emitter.emitLine(`${t}${Le} = ${fe};`)}if(!le&&((an=N.$)!=null&&an.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,de);let Le=N.$.deferredDupExpressions[0];V(Le)&&((Xo=Le.$)!=null&&Xo.variableName)?K=Q(Le.$.variableName):K=he}else K=he}}}else if(K=z(N,t,n),!le&&((ss=N.$)!=null&&ss.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,n);let _e=N.$.deferredDupExpressions[0];V(_e)&&((ls=_e.$)!=null&&ls.variableName)&&(K=Q(_e.$.variableName))}if(at(D.$.type)){let he=D.$.type;if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let _e=bt(he,Z,n);n.emitter.emitLine(`${t}${_e} = ${K};`)}}else if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let he=St(N.$.env.modulePath,K.trim()),_e;if(he&&n.tempVarAsyncStructNames){let de=n.tempVarAsyncStructNames.get(K.trim());de?_e=`${de}*`:_e=H(D.$.type,n)}else _e=H(D.$.type,n);n.emitter.emitLine(`${t}${_e} ${Q(Z)} = ${K};`)}}return""}}else if(v(e,"=",2)){let D=e.args[0],N=e.args[1],Y=!1;if(V(D)&&v(D,":",2)&&(Y=!0,D=D.args[0]),V(D)&&v(D,A.compt))return"";if(!((us=D.$)!=null&&us.type))return`// Error: No type information for left-hand side ${T(D)}
165
- `;let Z=z(D,t,n);if((ps=e.$)!=null&&ps.variableName){let ie=e.$.variableName;if(!(n.inStateMachine&&Z.startsWith("sm->"))){let K=bt(D.$.type,ie,n);Oe(D.$.type)?n.emitter.emitLine(`${t}${K} = ${Z}; // Save old value for later use`):Be(D.$.type)||n.emitter.emitLine(`${t}${K} = ${Z}; // Save old value for later use`)}}if(Oe(D.$.type)){let ie=z(N,t,n),X=V(N)&&((cs=N.$)==null?void 0:cs.closureFunctionValue)&&((fs=N.$)==null?void 0:fs.type)&&mn(N.$.type),R=n,K=ie;if(!X&&((ds=N.$)!=null&&ds.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){if((ms=N.$)!=null&&ms.variableName&&((ys=N.$)!=null&&ys.type)){let he=Q(N.$.variableName);if(he!==ie.trim()){let _e=H(N.$.type,n);n.emitter.emitLine(`${t}${_e} ${he} = ${ie};`)}}Ft(N,t,R);let le=N.$.deferredDupExpressions[0];V(le)&&((_s=le.$)!=null&&_s.variableName)&&(K=Q(le.$.variableName))}if(Y){let le=bt(D.$.type,z(D,t,n),n);n.emitter.emitLine(`${t}${le} = ${K};`)}else n.emitter.emitLine(`${t}${Z} = ${K};`)}else{let ie=z(N,t,n),X=V(N)&&((gs=N.$)==null?void 0:gs.closureFunctionValue)&&((hs=N.$)==null?void 0:hs.type)&&mn(N.$.type),R=n,K=ie;if(!X&&((vs=N.$)!=null&&vs.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){if((Ts=N.$)!=null&&Ts.variableName&&(($s=N.$)!=null&&$s.type)){let he=Q(N.$.variableName);if(he!==ie.trim()){let _e=H(N.$.type,n);n.emitter.emitLine(`${t}${_e} ${he} = ${ie};`)}}Ft(N,t,R);let le=N.$.deferredDupExpressions[0];V(le)&&((Es=le.$)!=null&&Es.variableName)&&(K=Q(le.$.variableName))}if(!Be(D.$.type)){let le=D.$.type,he=(Cs=N.$)==null?void 0:Cs.type,_e,de=St(N.$.env.modulePath,K.trim());de&&n.tempVarAsyncStructNames&&(_e=n.tempVarAsyncStructNames.get(K.trim()));let fe=Y&&he&&Pe(le)&&Pe(he),Le;de&&fe?_e?Le=`${_e}*`:Le=H(he,n):fe&&_e?Le=`${_e}*`:Le=H(fe?he:le,n),n.emitter.emitLine(`${t}${Y?Le+" ":""}${Z} = ${K};`)}}return((ks=e.$)==null?void 0:ks.variableName)??""}else if((bs=e.$)!=null&&bs.value&&!Ue((Fs=e.$)==null?void 0:Fs.value)&&!Be(e.$.type)){let D=e.$.value;return Wn(D,n,e)}else{if(v(e,".",2))return Ad(e,t,n);if(v(e,A.begin)){let D=(ws=e.$)==null?void 0:ws.variableName,N=(Vs=e.$)==null?void 0:Vs.type;if(D&&N){!Be(N)&&!((xs=e.$)!=null&&xs.controlFlow)&&n.emitter.emitLine(`${t}${H(N,n)} ${D};`),n.emitter.emitLine(`${t}{ // begin block`);let Y=[],Z=!Be(N)&&!((Ms=e.$)!=null&&Ms.controlFlow);for(let ie=0;ie<e.args.length;ie++){let X=e.args[ie],R=z(X,t+" ",n);Y.push(R);let K=ie===e.args.length-1;R&&!(K&&Z)&&(X.$&&St(X.$.env.modulePath,R)||n.emitter.emitLine(`${t} ${R};`))}if(Z&&n.emitter.emitLine(`${t} ${D} = ${Y[Y.length-1]};`),(Ss=e.$)!=null&&Ss.deferredDropExpressions)for(let ie of e.$.deferredDropExpressions){let X=z(ie,t+" ",n);X&&n.emitter.emitLine(`${t} ${X};`)}return n.emitter.emitLine(`${t}} // end begin block`),Be(N)||(Ls=e.$)!=null&&Ls.controlFlow?"":D}else{if(n.emitter.emitLine(`${t}{ // begin block`),e.args.map(Z=>z(Z,t+" ",n)).forEach(Z=>{Z&&n.emitter.emitLine(`${t} ${Z};`)}),(As=e.$)!=null&&As.deferredDropExpressions)for(let Z of e.$.deferredDropExpressions){let ie=z(Z,t+" ",n);ie&&n.emitter.emitLine(`${t} ${ie};`)}return n.emitter.emitLine(`${t}} // end begin block`),""}}else{if(v(e,A.cond))return Id(e,t,n);if(v(e,A.match))return Nd(e,t,n);if(v(e,C.__yo_address_of,1)){if(!((Is=e.$)==null?void 0:Is.type))return`// Error: No type information for pointer/reference expression ${T(e)}
166
- `;let N=e.args[0];if(V(N)){let Z=(Ns=N.func.$)==null?void 0:Ns.type;if(Z&&Oe(Z)){let ie=N.args[0];if(ie&&V(ie)&&v(ie,":")){let X=z(N.func,t,n),R=z(ie.args[0],t,n),K=z(ie.args[1],t,n),le=`Slice_${Q(H(Z.childType,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(Z.childType,n)}),`(${le}){ .data = &${X}.data[${R}], .length = ${K} - ${R} }`}else if(ie&&j(ie)&&ie.token.value===":"){let X=z(N.func,t,n),R=Z,K=R.childType,le=`Slice_${Q(H(K,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(K,n)}),ct(R.length)?`(${le}){ .data = &${X}.data[0], .length = ${R.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(Z&&(at(Z)||De(Z)&&at(Z.childType))){let ie=at(Z)?Z:Z.childType,X=N.args[0];if(X&&V(X)&&v(X,":")){let R=z(N.func,t,n),K=z(X.args[0],t,n),le=z(X.args[1],t,n),he=`Slice_${Q(H(ie.childType,n))}`;return n.sliceStructTypes.has(he)||n.sliceStructTypes.set(he,{childType:H(ie.childType,n)}),`(${he}){ .data = &${R}.data[${K}], .length = ${le} - ${K} }`}else if(X&&j(X)&&X.token.value===":"){let R=z(N.func,t,n),K=`Slice_${Q(H(ie.childType,n))}`;return n.sliceStructTypes.has(K)||n.sliceStructTypes.set(K,{childType:H(ie.childType,n)}),`(${K}){ .data = ${R}.data, .length = ${R}.length }`}}}return`(&${z(N,t,n)})`}else if(v(e,A.tuple)){let D=(Ds=e.$)==null?void 0:Ds.runtimeArgExprsInOrder,N=(Bs=n.types[((Us=(Os=e.$)==null?void 0:Os.type)==null?void 0:Us.id)??""])==null?void 0:Bs.cName,Y=(Ps=e.$)==null?void 0:Ps.variableName;if(D&&N){let Z=n,ie=D.map(X=>{var K,le;let R=z(X,t,n);if((K=X.$)!=null&&K.deferredDupExpressions&&X.$.deferredDupExpressions.length>0){Ft(X,t,Z);let he=X.$.deferredDupExpressions[0];if(V(he)&&((le=he.$)!=null&&le.variableName))return Q(he.$.variableName)}return R}).join(", ");if(Y&&((zs=e.$)!=null&&zs.type)){let X=`(${N}){ ${ie} }`,R=bt(e.$.type,Y,n);return n.emitter.emitLine(`${t}${R} = ${X};`),Y}else return`(${N}){ ${ie} }`}else if(e.args.length===0)return""}else if(v(e,A.array)){let D=(Gs=e.$)==null?void 0:Gs.runtimeArgExprsInOrder,N=(Rs=e.$)==null?void 0:Rs.type,Y=(qs=e.$)==null?void 0:qs.variableName;if(Oe(N)&&D){let Z=n,ie=D.map(R=>{var le,he;let K=z(R,t,n);if((le=R.$)!=null&&le.deferredDupExpressions&&R.$.deferredDupExpressions.length>0){Ft(R,t,Z);let _e=R.$.deferredDupExpressions[0];if(V(_e)&&((he=_e.$)!=null&&he.variableName))return Q(_e.$.variableName)}return K}).join(", "),X=H(N,n);if(Y&&((Ys=e.$)!=null&&Ys.type)){let R=`(${X}){ .data = { ${ie} } }`,K=bt(e.$.type,Y,n);return n.emitter.emitLine(`${t}${K} = ${R};`),Y}else return`(${X}){ .data = { ${ie} } }`}}else if(v(e,A.recur)){let D=(js=e.$)==null?void 0:js.runtimeArgExprsInOrder;if(D){let N=n,Y=D.map(Z=>{var X,R;let ie=z(Z,t,n);if((X=Z.$)!=null&&X.deferredDupExpressions&&Z.$.deferredDupExpressions.length>0){Ft(Z,t,N);let K=Z.$.deferredDupExpressions[0];if(V(K)&&((R=K.$)!=null&&R.variableName))return Q(K.$.variableName)}return ie}).join(", ");return`${n.currentFunctionName}(${Y})`}else return`// Error: No arguments for recur call ${T(e)}
167
- `}else if(v(e,C.sizeof,1)){let D=e.args[0];return`sizeof(${z(D,t,n)})`}else if(v(e,C.__yo_decr_rc)){let D=e.args[0];return`__yo_decr_rc(${z(D,t,n)})`}else if(v(e,Hr)){let D=((Ws=e.$)==null?void 0:Ws.runtimeArgExprsInOrder)||e.args;if(D){let N=n,Y=D.map(Z=>{var X,R;let ie=z(Z,t,n);if((X=Z.$)!=null&&X.deferredDupExpressions&&Z.$.deferredDupExpressions.length>0){Ft(Z,t,N);let K=Z.$.deferredDupExpressions[0];if(V(K)&&((R=K.$)!=null&&R.variableName))return Q(K.$.variableName)}return ie});return Ja(e.func.token.value,Y,e,n)}}else{if(v(e,A.while))return Od(e,t,n);if(v(e,"->",2)&&V(e.args[0])&&v(e.args[0],A.fn)){let D=(Hs=e.$)==null?void 0:Hs.value;return Fe(D)?Wn(D,n):"// Error: Anonymous function missing function value"}else{if(v(e,C.consume))return z(e.args[0],t,n);if(v(e,C.compt_expect_error)||v(e,C.__yo_var_print_info)||v(e,C.__yo_var_is_owning_the_gc_value)||v(e,C.__yo_var_has_other_aliases))return"";{let D=(Ks=e.func.$)==null?void 0:Ks.type,N=(Qs=e.func.$)==null?void 0:Qs.value;if(ce(D)){let Y=(Zs=e.$)==null?void 0:Zs.runtimeArgExprsInOrder;if(Y){let Z=!1;if(V(e.func)&&v(e.func,".",2)){let R=e.func.args[0],K=(Js=R==null?void 0:R.$)==null?void 0:Js.type;K&&Ne(K)&&(Z=!0)}let ie=Y.map((R,K)=>{var le,he,_e,de,fe,Le,Ge,Tt,Vt;if((le=R.$)!=null&&le.variableName&&((he=R.$)!=null&&he.type)){let wt=n,Yt=wt.currentClosureCaptures&&wt.currentClosureCaptures.includes(R.$.variableName)&&j(R)&&R.$.env&&wt.currentClosureCaptureFrameLevel!==void 0&&Kr(R.token.value,R.$.env,wt.currentClosureCaptureFrameLevel),Mt=z(R,t,n),sn=wt.inStateMachine&&Mt.startsWith("sm->");if(Mt&&Mt!==R.$.variableName&&!Yt&&!sn){let Zt=Q(R.$.variableName);if(Mt!==Zt){let Sn=bt(R.$.type,R.$.variableName,n);n.emitter.emitLine(`${t}${Sn} = ${Mt};`)}}let Qt=R.$.variableName;if((_e=R.$)!=null&&_e.deferredDupExpressions&&R.$.deferredDupExpressions.length>0){let Zt=new Set;(de=R.$)!=null&&de.variableName&&Zt.add(Q(R.$.variableName)),Mt&&Zt.add(Mt),j(R)&&Zt.add(Q(R.token.value));let Sn=R.$.deferredDupExpressions.find(Fr=>{let lo=Uu(Fr);return lo?Zt.has(Q(lo)):!1});Sn&&(Ft(R,t,wt),V(Sn)&&((fe=Sn.$)!=null&&fe.variableName)&&(Qt=Q(Sn.$.variableName)))}if(Z&&K===0){if(V(e.func)&&v(e.func,".",2)){let Sn=e.func.args[0],Fr=(Le=Sn==null?void 0:Sn.$)==null?void 0:Le.type,lo=e.func.args[1];if(j(lo)&&Ne(Fr)){let Ff=lo.token.value;if(Fr.module.fields.find(wf=>wf.label===Ff))return Q(Qt)}}let Zt=(Ge=R.$)==null?void 0:Ge.type;return Zt&&De(Zt)?`${Q(Qt)}->data`:`(${Q(Qt)}).data`}else return Yt||sn?Mt:Q(Qt)}else if(Z&&K===0){let wt=z(R,t,n);if(V(e.func)&&v(e.func,".",2)){let Mt=e.func.args[0],sn=(Tt=Mt==null?void 0:Mt.$)==null?void 0:Tt.type,Qt=e.func.args[1];if(j(Qt)&&Ne(sn)){let Zt=Qt.token.value;if(sn.module.fields.find(Fr=>Fr.label===Zt))return wt}}let Yt=(Vt=R.$)==null?void 0:Vt.type;return Yt&&De(Yt)?`(${wt})->data`:`(${wt}).data`}else return z(R,t,n)}),X=ie.join(", ");if(D.isExtern==="yo"&&D.externName){let R=D.externName;return Hr.includes(R)?Ja(R,ie,e,n):R==="__yo_thread_spawn"?Md(e,t,n):R==="__yo_worker_spawn"?Sd(e,t,n):Be(D.return.type)?(n.emitter.emitLine(`${t}${R}(${X});`),(Xs=e.$)!=null&&Xs.deferredDropExpressions&&Kt(e,t,n),""):`${R}(${X})`}if(Fe(N)){let R=Do(N);if(R)return Ja(R,ie,e,n);let K=N.specializedType??N.type,le=(el=n.functions[N.funcId])==null?void 0:el.cName;if(le){if(Be(K.return.type))return n.emitter.emitLine(`${t}${le}(${X});`),(tl=e.$)!=null&&tl.deferredDropExpressions&&Kt(e,t,n),"";{let he=(nl=e.$)==null?void 0:nl.variableName;if(he){let _e=((rl=N.specializedType)==null?void 0:rl.return.type)??K.return.type,de=(ol=e.$)==null?void 0:ol.type,fe=de&&Pe(de),Le=_e&&Pe(_e),Ge;if(fe&&Le){let Tt=N.body;if(Tt&&v(Tt,"begin")){let Vt=Tt.args;if(Vt.length>0){let wt=Vt[Vt.length-1];v(wt,C.async)&&(Tt=wt)}}if(Tt&&v(Tt,C.async)&&((il=Tt.$)!=null&&il.asyncStateMachineStructName)){let Vt=Tt.$.asyncStateMachineStructName;Ge=`${Vt}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(he,Vt)}else Ge=H(_e,n)}else Ge=H(de??_e,n);return n.emitter.emitLine(`${t}${Ge} ${he} = ${le}(${X});`),(al=e.$)!=null&&al.deferredDropExpressions&&Kt(e,t,n),he}else return`// Error: Regular function call returns ${H(((sl=N.specializedType)==null?void 0:sl.return.type)??K.return.type,n)} but no temp variable assigned`}}}else{let R=n.externFunctions[D.id];if(R){let K=R.cName;return(ll=e.$)!=null&&ll.deferredDropExpressions&&Kt(e,t,n),`${K}(${X})`}else{let K=z(e.func,t,n);if(Be(D.return.type))return n.emitter.emitLine(`${t}${K}(${X});`),(ul=e.$)!=null&&ul.deferredDropExpressions&&Kt(e,t,n),"";{let le=(pl=e.$)==null?void 0:pl.variableName;if(le){let he=D.return.type,_e=(cl=e.$)==null?void 0:cl.type,de=_e&&he&&Pe(_e)&&Pe(he)?he:_e??he;return n.emitter.emitLine(`${t}${H(de,n)} ${le} = ${K}(${X});`),(fl=e.$)!=null&&fl.deferredDropExpressions&&Kt(e,t,n),le}else return`// Error: Function parameter call returns ${H(D.return.type,n)} but no temp variable assigned`}}}}}else if(D&&mn(D)){let Y=D,Z=nn(Y),ie=Ne(Y);{let X=Z.isFn.callType,R=(dl=e.$)==null?void 0:dl.runtimeArgExprsInOrder;if(R){let K=n;for(let fe of R)if((ml=fe.$)!=null&&ml.variableName&&((yl=fe.$)!=null&&yl.type)){let Le=K.currentClosureCaptures&&K.currentClosureCaptures.includes(fe.$.variableName)&&j(fe)&&fe.$.env&&K.currentClosureCaptureFrameLevel!==void 0&&Kr(fe.token.value,fe.$.env,K.currentClosureCaptureFrameLevel),Ge=z(fe,t,n),Tt=K.inStateMachine&&Ge.startsWith("sm->");if(Ge&&Ge!==fe.$.variableName&&!Le&&!Tt){let Vt=bt(fe.$.type,fe.$.variableName,n);n.emitter.emitLine(`${t}${Vt} = ${Ge};`)}}let le=z(e.func,t,n),he=R.map(fe=>{var Le,Ge,Tt,Vt;if((Le=fe.$)!=null&&Le.variableName&&((Ge=fe.$)!=null&&Ge.type)){if(K.currentClosureCaptures&&K.currentClosureCaptures.includes(fe.$.variableName)&&j(fe)&&fe.$.env&&K.currentClosureCaptureFrameLevel!==void 0&&Kr(fe.token.value,fe.$.env,K.currentClosureCaptureFrameLevel))return z(fe,t,n);{let Yt=z(fe,t,n),Mt=K.inStateMachine&&Yt.startsWith("sm->"),sn=fe.$.variableName;if((Tt=fe.$)!=null&&Tt.deferredDupExpressions&&fe.$.deferredDupExpressions.length>0){Ft(fe,t,K);let Qt=fe.$.deferredDupExpressions[0];V(Qt)&&((Vt=Qt.$)!=null&&Vt.variableName)&&(sn=Q(Qt.$.variableName))}return Mt?Yt:sn}}else return z(fe,t,n)}),_e;if(ie){let fe=[`(${le}).data`,...he];_e=`(${le}).vtable->call(${fe.join(", ")})`}else{let fe;if(Y.tag==="SomeType"){let Ge=Y;Ge.resolvedConcreteType&&(fe=Ge.resolvedConcreteType.id)}let Le=fe?n.implClosureCallMap.get(fe):void 0;if(Le){let Ge=[`&(${le})`,...he];_e=`${Le.functionCName}(${Ge.join(", ")})`}else{let Ge=[`(${le}).data`,...he];_e=`(${le}).call(${Ge.join(", ")})`}}let de=X.return.type;if(Be(de))return n.emitter.emitLine(`${t}${_e};`),(_l=e.$)!=null&&_l.deferredDropExpressions&&Kt(e,t,n),"";{let fe=(gl=e.$)==null?void 0:gl.variableName;return fe?(n.emitter.emitLine(`${t}${H(de,n)} ${fe} = ${_e};`),(hl=e.$)!=null&&hl.deferredDropExpressions&&Kt(e,t,n),fe):`// Error: Closure call returns ${H(de,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(G(N))if($e(N.value)){let Y=N.value,Z=(vl=e.$)==null?void 0:vl.runtimeArgExprsInOrder,ie=(Tl=n.types[Y.id])==null?void 0:Tl.cName,X=Y.fields.map(K=>K.label),R=($l=e.$)==null?void 0:$l.variableName;if(Z&&ie&&X.length===Z.length){if(Y.isNewtype&&Y.fields.length===1){let K=z(Z[0],t,n),le=`((${ie})(${K}))`;if(R&&((El=e.$)!=null&&El.type)){let he=bt(e.$.type,R,n);return n.emitter.emitLine(`${t}${he} = ${le};`),R}else return le}if(Y.isReferenceSemantics){let K=n,le=Z.map(de=>{var Le,Ge,Tt,Vt;let fe=z(de,t,n);if((Le=de.$)!=null&&Le.deferredDupExpressions&&de.$.deferredDupExpressions.length>0){if((Ge=de.$)!=null&&Ge.variableName&&((Tt=de.$)!=null&&Tt.type)){let Yt=Q(de.$.variableName);if(fe!==Yt){let Mt=de.$.type,sn=H(Mt,n);n.emitter.emitLine(`${t}${sn} ${Yt} = ${fe};`)}}Ft(de,t,K);let wt=de.$.deferredDupExpressions[0];if(V(wt)&&((Vt=wt.$)!=null&&Vt.variableName))return Q(wt.$.variableName)}return fe}).join(", "),_e=`${`__yo_new_${ie}`}(${le})`;if(R&&((Cl=e.$)!=null&&Cl.type)){let de=bt(e.$.type,R,n);return n.emitter.emitLine(`${t}${de} = ${_e};`),R}else return _e}else{let K=n,le=Z.map((_e,de)=>{var Tt,Vt,wt,Yt;let fe=z(_e,t,n),Le=Q(X[de]),Ge=fe;if((Tt=_e.$)!=null&&Tt.deferredDupExpressions&&_e.$.deferredDupExpressions.length>0){if((Vt=_e.$)!=null&&Vt.variableName&&((wt=_e.$)!=null&&wt.type)){let sn=Q(_e.$.variableName),Qt=_e.$.type,Zt=H(Qt,n);fe!==sn&&n.emitter.emitLine(`${t}${Zt} ${sn} = ${fe};`)}Ft(_e,t,K);let Mt=_e.$.deferredDupExpressions[0];V(Mt)&&((Yt=Mt.$)!=null&&Yt.variableName)&&(Ge=Q(Mt.$.variableName))}return`.${Le} = `+Ge}).join(", "),he=`(${ie}){ ${le} }`;if(R&&((kl=e.$)!=null&&kl.type)){let _e=bt(e.$.type,R,n);return n.emitter.emitLine(`${t}${_e} = ${he};`),R}else return he}}}else{if(mn(N.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(ot(N.value)){let Y=(bl=e.$)==null?void 0:bl.variableName,Z=e.args[0];if(Z&&V(Z)&&v(Z,":",2)){let ie=Z.args[0],X=Z.args[1],R=(Fl=n.types[N.value.id])==null?void 0:Fl.cName;if(R&&j(ie)&&X){let K=n,le=ie.token.value,he=Q(le),de=z(X,t,n);if((wl=X.$)!=null&&wl.deferredDupExpressions&&X.$.deferredDupExpressions.length>0){Ft(X,t,K);let Le=X.$.deferredDupExpressions[0];V(Le)&&((Vl=Le.$)!=null&&Vl.variableName)&&(de=Q(Le.$.variableName))}let fe=`(${R}){ .${he} = ${de} }`;if(Y&&((xl=e.$)!=null&&xl.type)){let Le=bt(e.$.type,Y,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),Y}else return fe}}}else if(Ve(N.value)){let Y=N.value,Z=(Ml=e.$)==null?void 0:Ml.runtimeArgExprsInOrder,ie=(Sl=n.types[Y.id])==null?void 0:Sl.cName,X=(Ll=e.$)==null?void 0:Ll.variableName;if(Y.selectedVariantName&&Z&&ie){if(rn(Y)){let _e=Y.selectedVariantName,de=Y.variants.find(fe=>fe.name===_e);if(de){if(!de.fields||de.fields.length===0){let fe="NULL";if(X&&((Al=e.$)!=null&&Al.type)){let Le=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),X}else return fe}else if(de.fields.length===1){let fe=z(Z[0],t,n);if(X&&((Il=e.$)!=null&&Il.type)){let Le=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),X}else return fe}}}if(ir(Y)){let _e=Y.selectedVariantName,de=Tn(Y,_e,n);if(X&&((Nl=e.$)!=null&&Nl.type)){let fe=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${fe} = ${de};`),X}else return de}let le=Y.selectedVariantName,he=Y.variants.find(_e=>_e.name===le);if(he){let _e=((Dl=he.fields)==null?void 0:Dl.filter(Ge=>!Be(Ge.type)))||[],de=n,fe=Z.map((Ge,Tt)=>{var Vt,wt;if(he.fields){let Yt=he.fields[Tt];if(Yt&&!Be(Yt.type)){let Mt=z(Ge,t,n),sn=Q(Yt.label),Qt=Mt;if((Vt=Ge.$)!=null&&Vt.deferredDupExpressions&&Ge.$.deferredDupExpressions.length>0){Ft(Ge,t,de);let Zt=Ge.$.deferredDupExpressions[0];V(Zt)&&((wt=Zt.$)!=null&&wt.variableName)&&(Qt=Q(Zt.$.variableName))}return`.${sn} = `+Qt}return""}else return""}).filter(Ge=>Ge).join(", "),Le=_e.length>0?`(${ie}){ .tag = ${Tn(Y,le,n)}, .data = { .${le} = { ${fe} } } }`:`(${ie}){ .tag = ${Tn(Y,le,n)} }`;if(X&&((Ol=e.$)!=null&&Ol.type)){let Ge=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${Ge} = ${Le};`),X}else return Le}}}}else if(Oe(D)){let Y=e.args[0];if(Y&&V(Y)&&v(Y,":")){let X=z(e.func,t,n),R=z(Y.args[0],t,n),K=z(Y.args[1],t,n),le=`Slice_${Q(H(D.childType,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(D.childType,n)}),`(${le}){ .data = &${X}.data[${R}], .length = (${K}) - (${R}) }`}else if(Y&&j(Y)&&Y.token.value===":"){let X=z(e.func,t,n),R=D,K=R.childType,le=`Slice_${Q(H(K,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(K,n)}),ct(R.length)?`(${le}){ .data = &${X}.data[0], .length = ${R.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let Z=z(e.func,t,n),ie=z(Y,t,n);return`${Z}.data[${ie}]`}else if(at(D)){let Y=e.args[0];if(Y&&V(Y)&&v(Y,":")){let X=z(e.func,t,n),R=z(Y.args[0],t,n),K=z(Y.args[1],t,n),le=`Slice_${Q(H(D.childType,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(D.childType,n)}),`(${le}){ .data = &${X}.data[${R}], .length = (${K}) - (${R}) }`}else if(Y&&j(Y)&&Y.token.value===":"){let X=z(e.func,t,n),R=`Slice_${Q(H(D.childType,n))}`;return n.sliceStructTypes.has(R)||n.sliceStructTypes.set(R,{childType:H(D.childType,n)}),`(${R}){ .data = ${X}.data, .length = ${X}.length }`}let Z=z(e.func,t,n),ie=z(Y,t,n);return`${Z}.data[${ie}]`}else if(D&&De(D)&&at(D.childType)){let Y=z(e.func,t,n),Z=z(e.args[0],t,n);return`${Y}.data[${Z}]`}}}}}}if(V(e))throw new Error(`Unhandled function call: ${T(e)}`);return`// Failed to transpile ${T(e)}`}function kd(e,t){var n;if($e(e)||Ve(e)||Ne(e)||ee(e)||gt(e)){let r=e.module.fields.find(o=>o.label===C.___drop[0]);if(r&&r.assignedValue&&Fe(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Nu(e,t){var n;if($e(e)||Ve(e)||Ne(e)||ee(e)||gt(e)){let r=e.module.fields.find(o=>o.label===C.___dup[0]);if(r&&r.assignedValue&&Fe(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function bd(e,t,n){var h,_,E,k,w,$,b,F,M,L;let r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let o=(h=e.$)==null?void 0:h.type;if(!o||!Pe(o))return"/* Error: async block must have Future type */";let i=Ht(o);if(!i)return"/* Error: Could not extract Future module type */";let a=((_=e.$)==null?void 0:_.variableName)||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,d=`${a}_state_dispose`;n.types[o.id]={type:o,cName:s};let c=(E=e.$)==null?void 0:E.awaitAnalysis;if(!c)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=i.isFuture.outputType,m=H(f,n),y=n.emitter;if(y.emitDeclarationLine(`void ${d}(void* sm_ptr); // Dispose function for state machine`),y.emitDeclarationLine(""),y.emitDeclarationLine(`void ${l}(${s}* sm);`),y.emitDeclarationLine(""),(k=e.$)!=null&&k.captureType){let O=e.$.captureType,B=Object.values(n.types).find(q=>q.type===O),P=B?B.cName:`async_capture_${O.id}`;y.emitDeclarationLine(`${s}* ${u}(${P} __capture);`)}else y.emitDeclarationLine(`${s}* ${u}();`);y.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:d,futureType:o,futureModuleType:i,resultType:f,resultTypeCName:m,captureType:(w=e.$)==null?void 0:w.captureType,analysis:c});let g=($=e.$)==null?void 0:$.captureType;if(g){let O=Object.values(n.types).find(ye=>ye.type===g),B=O?O.cName:`async_capture_${g.id}`,P=n,q=P.currentClosureCaptures!==void 0||P.inStateMachine!==void 0,ne=g.fields.map(ye=>{var Se,Re;let ge;if(!q&&((Se=e.$)!=null&&Se.deferredDupExpressions))for(let Te of e.$.deferredDupExpressions){let be;if(V(Te)&&(Te.args.length>0&&j(Te.args[0])?be=Te.args[0].token.value:Te.args.length===0&&V(Te.func)&&v(Te.func,".")&&Te.func.args.length>=2&&j(Te.func.args[0])&&(be=Te.func.args[0].token.value)),be===ye.label){ge=Te;break}}if(ge)return(Re=ge.$)!=null&&Re.variableName?(z(ge,t,n),`.${ye.label} = ${ge.$.variableName}`):`.${ye.label} = ${z(ge,t,n)}`;let Me={tag:"Atom",token:ye.exprs.expr.token,$:ye.exprs.expr.$};return`.${ye.label} = ${fa(Me,n)}`}).join(", "),pe=`(${B}){${ne}}`,ue=((b=e.$)==null?void 0:b.variableName)||"async_result",oe=`${u}(${pe})`;if(ue&&((F=e.$)!=null&&F.type)){let ye=bt(e.$.type,ue,n);return n.emitter.emitLine(`${t}${ye} = ${oe};`),ue}else return oe}else{let O=((M=e.$)==null?void 0:M.variableName)||"async_result",B=`${u}()`;if(O&&((L=e.$)!=null&&L.type)){let P=bt(e.$.type,O,n);return n.emitter.emitLine(`${t}${P} = ${B};`),O}else return B}}function Fd(e,t){var c;let n=t.emitter,{asyncBlockId:r,structName:o,resultType:i,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${x(i)})`),n.emitDeclarationLine(`struct ${o}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(` _Atomic int state; // Current state (0 = initial, ${l.awaitPoints.length+1} = done, -1 = completed)`),Be(i)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${x(i)}`),n.emitDeclarationLine(" _Atomic(void (*)(void*)) continuation_fn; // Resume function of awaiting task"),n.emitDeclarationLine(" _Atomic(void*) continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),s){let f=Object.values(t.types).find(y=>y.type===s),m=f?f.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${m} __capture;`),n.emitDeclarationLine("")}if(l.capturedVariables.length>0){n.emitDeclarationLine(" // Local variables");for(let f of l.capturedVariables){let m=H(f.type,t),y=ca(f.id,"local");n.emitDeclarationLine(` ${m} ${y}; // ${f.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let f of l.awaitPoints)if(!Be(f.resultType)){let m=f.resultType;if(f.futureType){let g=Ht(f.futureType);g&&(m=g.isFuture.outputType)}let y=H(m,t);n.emitDeclarationLine(` ${y} await_result_${f.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let f=l.awaitPoints.filter(m=>m.futureVariableId===void 0);if(f.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let m of f){let y=m.expr;if(y.tag!=="FuncCall")continue;let g=y.args[0],h=(c=g==null?void 0:g.$)==null?void 0:c.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let _=H(h,t);n.emitDeclarationLine(` ${_} await_future_${m.index};`)}n.emitDeclarationLine("")}}let u=l.awaitPoints.filter(f=>f.isInsideCond);if(u.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let f of u)n.emitDeclarationLine(` int cond_branch_${f.index}; // Which branch was taken in cond with await ${f.index}`);n.emitDeclarationLine("")}let d=l.awaitPoints.filter(f=>f.isInsideWhile);if(d.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");for(let f of d)n.emitDeclarationLine(` _Bool while_loop_${f.index}_active; // Whether while loop ${f.index} should continue`);n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function wd(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,o=new Map;for(let u of t)r.set(u.structName,new Set),o.set(u.structName,0);for(let u of t){let d=c=>{let f=r.get(c);f.has(u.structName)||(f.add(u.structName),o.set(u.structName,(o.get(u.structName)??0)+1))};for(let c of u.analysis.capturedVariables){let f;try{f=H(c.type,e)}catch{continue}let m=n.get(f);m&&m.structName!==u.structName&&d(m.structName)}for(let c of u.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let f=c.expr;if(f.tag!=="FuncCall")continue;let m=f.args[0],y=(l=m==null?void 0:m.$)==null?void 0:l.type;if(!y)continue;let g;try{g=H(y,e)}catch{continue}let h=n.get(g);h&&h.structName!==u.structName&&d(h.structName)}}let i=[];for(let[u,d]of o.entries())d===0&&i.push(u);let a=[];for(;i.length>0;){let u=i.shift();a.push(u);let d=r.get(u);if(d)for(let c of d){let f=(o.get(c)??0)-1;o.set(c,f),f===0&&i.push(c)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)Fd({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function Vd(e,t,n,r,o,i,a){var l;let s=a.emitter;if(s.emitLine(`// Dispose function for async block ${e} state machine`),s.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),s.emitLine(`void ${n}(void* sm_ptr) {`),s.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),s.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),s.emitLine(""),o&&qe(o)){let u=Object.values(a.types).find(d=>d.type===o);if(!u)s.emitLine(" /* Error: capture struct type not found in context */");else{let d=u.cName,c=o.module.fields.find(f=>f.label===C.___drop[0]);if(c&&c.assignedValue&&Fe(c.assignedValue)){let f=(l=a.functions[c.assignedValue.funcId])==null?void 0:l.cName;f&&(s.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),s.emitLine(` ${f}(sm->__capture);`))}else s.emitLine(` /* Warning: ___drop function not found for capture struct ${d} */`)}}if(s.emitLine(""),!Be(r)&&qe(r)){let u=H(r,a);s.emitLine(" // Drop result field if it was set (state == -1 means completed)"),s.emitLine(" int final_state = atomic_load_explicit(&sm->state, memory_order_acquire);"),s.emitLine(" if (final_state == -1) {"),s.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let d=kd(r,a);d?s.emitLine(` ${d}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${u} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function xd(e,t,n,r,o,i,a,s,l,u){let d=u.emitter;if(l){let c=Object.values(u.types).find(m=>m.type===l),f=c?c.cName:`async_capture_${l.id}`;d.emitLine(`${t}* ${r}(${f} __capture) {`)}else d.emitLine(`${t}* ${r}() {`);d.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),d.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),d.emitLine(` memset(sm, 0, sizeof(${t}));`),d.emitLine(""),d.emitLine(" // Initialize reference counting header"),d.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),d.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),d.emitLine(" sm->header.gc_flags = 0;"),d.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),d.emitLine(" sm->header.gc_next = NULL;"),d.emitLine(" sm->header.gc_prev = NULL;"),d.emitLine(` sm->header.dispose_fn = (void(*)(void*))${o};`),d.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),d.emitLine(""),d.emitLine(" atomic_init(&sm->state, 0);"),d.emitLine(" atomic_init(&sm->continuation_fn, NULL);"),d.emitLine(" atomic_init(&sm->continuation_sm, NULL);"),d.emitLine(""),l&&(d.emitLine(" // Initialize captured variables"),d.emitLine(" sm->__capture = __capture;"),d.emitLine("")),d.emitLine(" // Initialize result (will be set when async block completes)"),Be(a)?d.emitLine(" // Result is unit type, no initialization needed"):d.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),d.emitLine(""),d.emitLine(" // Eager execution: start running immediately (C#/C++ style)"),d.emitLine(' // Before running, increment refcount for the "running task" reference'),d.emitLine(" // This ensures the task stays alive until completion, even if user drops early"),d.emitLine(" __yo_incr_rc((void*)sm); // refcount: 1 -> 2"),d.emitLine(` GC_DEBUG("AsyncBlock ${t}: Eager increment ptr=%p RC=2\\n", (void*)sm);`),d.emitLine(` ${n}(sm);`),d.emitLine(""),d.emitLine(" return sm;"),d.emitLine("}"),d.emitLine("")}function Md(e,t,n){var g,h,_,E;let r=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let o=r[0],i=(h=o.$)==null?void 0:h.type;if(!i)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(ee(i)){let k=i;k.resolvedConcreteType&&(a=k.resolvedConcreteType.id,s=k.resolvedConcreteType)}else $e(i)&&(a=i.id,s=i);if(!a||!s)return"/* Error: __yo_thread_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_thread_spawn could not find closure function for type ${a} */`;let u=l.functionCName,d=H(s,n),c=z(o,t,n),f=(_=o.$)!=null&&_.variableName?Q(o.$.variableName):c,m=`_thread_closure_data_${ht()}`;n.emitter.emitLine(`${t}${d}* ${m} = (${d}*)__yo_malloc(sizeof(${d}));`),n.emitter.emitLine(`${t}*${m} = ${f};`);let y=(E=e.$)==null?void 0:E.variableName;return y?(n.emitter.emitLine(`${t}__yo_thread_t ${y} = __yo_thread_spawn(${u}, ${m});`),y):`__yo_thread_spawn(${u}, ${m})`}function Sd(e,t,n){var y,g,h;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let o=r[0],i=(g=o.$)==null?void 0:g.type;if(!i)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(ee(i)){let _=i;_.resolvedConcreteType&&(a=_.resolvedConcreteType.id,s=_.resolvedConcreteType)}else $e(i)&&(a=i.id,s=i);if(!a||!s)return"/* Error: __yo_worker_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_worker_spawn could not find closure function for type ${a} */`;let u=l.functionCName,d=H(s,n),c=z(o,t,n),f=(h=o.$)!=null&&h.variableName?Q(o.$.variableName):c,m=`_worker_closure_data_${ht()}`;return n.emitter.emitLine(`${t}${d}* ${m} = (${d}*)__yo_malloc(sizeof(${d}));`),n.emitter.emitLine(`${t}*${m} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${m});`),""}function Ld(e,t,n){var g,h,_,E,k,w,$;if(!((g=e.$)!=null&&g.dynCallModuleValues)||e.$.dynCallModuleValues.length===0)return"/* Error: dyn() call missing module values */";let r=((_=(h=e.$)==null?void 0:h.runtimeArgExprsInOrder)==null?void 0:_[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let o=e.$.type;if(!Ne(o))return"/* Error: dyn() result type is not DynType */";let i=(E=r.$)==null?void 0:E.type;if(!i)return"/* Error: dyn() value has no type */";let a=e.$.dynCallModuleValues;if(!a||a.length===0)return"/* Error: dyn() call missing module values */";let s=a[0];if(!s)return"/* Error: Invalid module value */";if(!$t(i)&&!yn(i))return"/* Error: dyn() requires an object type (use box() for value types) */";let l=yn(i)?i.fields[0].type:i,u=((k=n.types[o.id])==null?void 0:k.cName)||`yo_dyn_${o.id}`,c=`${(()=>{var L,O;let b=(L=n.types[l.id])==null?void 0:L.cName;if(b)return b;let F=nn(l);return(F?(O=n.types[F.id])==null?void 0:O.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(c,{dynType:o,concreteType:l,dataType:i,moduleValue:s});let f=z(r,t,n);if((w=r.$)!=null&&w.variableName&&f!==r.$.variableName){let b=bt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${b} = ${f};`),f=r.$.variableName}let m=($=e.$)==null?void 0:$.variableName;if(!m)return"/* Error: dyn() expression missing temp variable name */";let y=`yo_vtable_${c}`;return n.emitter.emitLine(`${t}${u} ${m} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),m}function fa(e,t){var i,a,s,l,u,d,c,f,m,y,g,h,_,E;let n=t;if(e.token.value==="continue")return"continue";if(e.token.value==="break")return"break";if(e.token.value==="return")return"return";if((i=e.$)!=null&&i.type&&Be(e.$.type))return"";if(n.inStateMachine&&n.stateMachineVariables){let k=e.token.value;if((a=n.localShadowedVariables)!=null&&a.has(k))return k;let w=!1;if((s=e.$)!=null&&s.env){let $=me(e.$.env,k);if($.length>0){let b=$[$.length-1],F=b.isOwningTheSameGcValueAs?b.isOwningTheSameGcValueAs.id:b.id,M=n.stateMachineVariables.get(F);if(M){let L=M.kind==="outer"?`__capture.${k}`:`var_${F}`;return w=!0,`sm->${L}`}}}if(!w){for(let[$,b]of n.stateMachineVariables)if(b.name===k){let F=b.kind==="outer"?`__capture.${k}`:`var_${$}`;return w=!0,`sm->${F}`}}if((l=e.$)!=null&&l.env){let $=me(e.$.env,k);if($.length>0){let b=$[$.length-1];if(b.isOwningTheSameGcValueAs){let F=b.isOwningTheSameGcValueAs.name,M=b.isOwningTheSameGcValueAs.id;for(let[L,O]of n.stateMachineVariables)if(O.name===F||L===M)return`sm->${O.kind==="outer"?`__capture.${F}`:`var_${L}`}`}}}if((u=e.$)!=null&&u.variableName)return Q(e.$.variableName)}if((d=e.$)!=null&&d.variableName){if((c=e.$)!=null&&c.env&&((f=e.$)!=null&&f.value)&&!Ue(e.$.value)){let k=me(e.$.env,e.$.variableName);if(k.length>0&&k[k.length-1].isCompileTimeOnly)return Wn(e.$.value,t,e)}if(!(n.currentClosureCaptures&&n.currentClosureCaptures.includes(e.token.value)&&((m=e.$)!=null&&m.env)&&n.currentClosureCaptureFrameLevel!==void 0&&Kr(e.token.value,e.$.env,n.currentClosureCaptureFrameLevel))){let k=Du(e.$.variableName,(y=e.$)==null?void 0:y.env);return Q(k)}}if((g=e.$)!=null&&g.value){if(Ue(e.$.value))throw new Error(`Cannot generate code for unknown compile-time value of atom: ${T(e)}`);return Wn(e.$.value,t,e)}let r=(h=e.$)!=null&&h.env&&n.currentClosureCaptureFrameLevel!==void 0?Kr(e.token.value,e.$.env,n.currentClosureCaptureFrameLevel):!1;if(n.currentClosureCaptures&&n.currentClosureCaptures.includes(e.token.value)&&n.currentClosureCaptureFrameLevel!==void 0&&(!((_=e.$)!=null&&_.env)||r)){let k=n.currentClosureCaptureTypeCName;return k?`((${k}*)closure_context)->${Q(e.token.value)}`:`closure_context->${Q(e.token.value)}`}if(n.currentFunctionName&&!n.currentClosureCaptures){let k=Object.values(n.functions).find(w=>w.cName===n.currentFunctionName);if(k&&k.value.type.isClosure){let w=Object.values(n.types).find($=>ce($.type)&&$.type.isClosure&&$.type===k.value.type);if(w)return`((${`${w.cName}_capture`}*)closure_context->data)->${Q(e.token.value)}`}}let o=Du(e.token.value,(E=e.$)==null?void 0:E.env);return Q(o)}function Wn(e,t,n){var r,o,i,a,s;if(ct(e))return je(e);if(et(e))return e.value?"true":"false";if(We(e)){let l=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((o=n==null?void 0:n.$)==null?void 0:o.type);if(l&&at(l)){let u=H(l,t),d=JSON.stringify(e.value),c=Buffer.byteLength(e.value,"utf8");return`(${u}){ .data = (uint8_t*)${d}, .length = ${c} }`}return JSON.stringify(e.value)}else if(Nt(e)){let l=e.type;if(rn(l)){let m=l.variants.find(y=>y.name===e.variantName);if(!m)return`// Error: Variant ${e.variantName} not found in enum`;if(!m.fields||m.fields.length===0)return"NULL";if(m.fields.length===1&&e.fields.length===1)return Wn(e.fields[0],t)}if(ir(l))return Tn(l,e.variantName,t);let c=(i=t.types[l.id])==null?void 0:i.cName;if(!c)return`// Error: No C type name found for enum ${x(l)}`;let f=Tn(l,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${c}){ .tag = ${f} }`;{let m=l.variants.find(g=>g.name===e.variantName);if(!m||!m.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let y=e.fields.map((g,h)=>{let _=m.fields[h];if(_&&!Be(_.type)){let E=Q(_.label),k=Wn(g,t);return`.${E} = ${k}`}return null}).filter(g=>g!==null);return y.length===0?`(${c}){ .tag = ${f} }`:`(${c}){ .tag = ${f}, .data = { .${e.variantName} = { ${y.join(", ")} } } }`}}else if(tn(e)){let l=e.type;if(l&&$e(l)){let u=(a=t.types[l.id])==null?void 0:a.cName;if(!u)return`// Error: No C type name found for struct ${x(l)}
168
- `;if(l.isNewtype&&l.fields.length===1&&e.fields.length===1){let d=Wn(e.fields[0],t);return`((${u})(${d}))`}if(l.isReferenceSemantics){let d=e.fields.map(f=>Wn(f,t));return`${`__yo_new_${u}`}(${d.join(", ")})`}else{let d=e.fields.map((c,f)=>{let m=c,y=Q(l.fields[f].label),g=Wn(m,t);return`.${y} = ${g}`});return`(${u}){ ${d.join(", ")} }`}}}else if(lr(e)){let l=e.type,u=H(l,t),d=e.elements.map(c=>Wn(c,t));return`(${u}){ .data = { ${d.join(", ")} } }`}else if(Fe(e)){let l=(s=t.functions[e.funcId])==null?void 0:s.cName;return l||`// Error: No C function name found for function value with ID ${e.funcId}
169
- `}else if(G(e)){let l=e.value;if(l)return t.types[l.id]?t.types[l.id].cName:`/* Error: No C type name found for type ${x(l)} */`}return""}function Ad(e,t,n){var l,u,d,c,f,m,y;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],o=e.args[1];if(!r||!o)return"/* ERROR: invalid field access arguments */";let i=z(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(j(o)){let g=o.token.value;if((d=e.$)!=null&&d.value&&Fe(e.$.value)){let h=e.$.value;return((c=n.functions[h.funcId])==null?void 0:c.cName)||h.funcId}if(!((f=e.$)!=null&&f.value)&&(C.___dispose.includes(g)||C.___drop.includes(g)||C.___dup.includes(g))&&a){let h=null;if(($e(a)||Ve(a))&&(h=a.module),h){let _=h.fields.find(E=>E.label===g&&E.assignedValue&&Fe(E.assignedValue));if(_&&Fe(_.assignedValue)){let E=_.assignedValue;return((m=n.functions[E.funcId])==null?void 0:m.cName)||E.funcId}else return`/* ERROR: Gc method ${g} not found in type module */`}else return`/* ERROR: No module found for Gc method ${g} */`}if(Da(a)&&a.fields.length===1){let h=a.fields[0];if(h&&h.label===g)return i}if(Ve(a)){let h=a;if(rn(h))return i;for(let E of h.variants)if(E.fields){for(let k of E.fields)if(k.label===g){let w=E.name;return`${i}.data.${w}.${Q(g)}`}}return`/* ERROR: field ${g} not found in enum ${h.typeName} */`}else if(G(s)&&Ve(s.value)){let h=s.value,_=h.variants.find(k=>k.name===g),E=(y=n.types[h.id])==null?void 0:y.cName;if(_&&!_.fields&&E){let k=Tn(h,_.name,n);return`(${E}){ .tag = ${k}, .data = { } }`}}else{if(De(a)&&at(a.childType))return`${i}.${Q(g)}`;if(De(a)){if(g==="*")return`(*${i})`;{let h=0,_=a;for(;De(_);)h++,_=_.childType;if(h>0&&$e(_)&&_.isReferenceSemantics&&h++,Da(_)&&_.fields.length===1){let E=_.fields[0];if(E&&E.label===g)return h===1?`(*${i})`:`${"*".repeat(h)}(${i})`}return h>0?h===1?`${i}->${Q(g)}`:`${`(${"*".repeat(h-1)}${i})`}->${Q(g)}`:`${i}.${Q(g)}`}}else if(He(a)){if(g.match(/^\d+$/))return`${i}._${g}`;{let h=a.fields.findIndex(_=>_.label===g);return`${i}._${h}`}}else return Ne(a)?`${i}.vtable->${Q(g)}`:$t(a)?`${i}->${Q(g)}`:`${i}.${Q(g)}`}}return"/* ERROR: field name must be an identifier */"}function Id(e,t,n){var r,o,i,a,s,l,u,d,c;if(e.$){let f=e.$.variableName,m=e.$.type,y=m&&Be(m);if(!y&&f){let w=H(m,n);n.emitter.emitLine(`${t}${w} ${f};`)}let g=-1;for(let w=0;w<e.args.length;w++){let $=e.args[w];if(V($)&&v($,"=>",2)){let b=$.args[0];if(b&&!(et((r=b.$)==null?void 0:r.value)&&b.$.value.value===!1)){g=w;break}}}let h=!1;if(g>=0){let w=e.args[g];if(w&&V(w)&&v(w,"=>",2)){let $=w.args[0];$&&et((o=$.$)==null?void 0:o.value)&&$.$.value.value===!0&&(h=!0)}}if(h&&g>=0){let w=e.args[g];if(w&&V(w)&&v(w,"=>",2)){let $=w.args[1];if($){let b=z($,t,n);f&&!y&&b&&b!==""&&b!=="continue"&&b!=="break"&&!b.includes("return")&&n.emitter.emitLine(`${t}${f} = ${b};`)}}return y?"":f??""}let _=t,E=0,k=!1;for(let w=0;w<e.args.length;w++){let $=e.args[w];if(V($)&&v($,"=>",2)){let b=$.args[0],F=$.args[1];if(b&&F){if(et((i=b.$)==null?void 0:i.value)&&b.$.value.value===!1)continue;if(k){if(n.emitter.emitLine(`${_}else {`),E++,_+=" ",!(et((s=b.$)==null?void 0:s.value)&&b.$.value.value===!0)){let P=z(b,_,n);n.emitter.emitLine(`${_}if (${P}) {`)}}else{if(et((a=b.$)==null?void 0:a.value)&&b.$.value.value===!0)n.emitter.emitLine(`${_}{`);else{let B=z(b,_,n);n.emitter.emitLine(`${_}if (${B}) {`)}k=!0}let M=et((l=b.$)==null?void 0:l.value)&&b.$.value.value===!0,L=k&&M?_:_+" ";if(V(F)&&v(F,A.begin)){let B=F.args;for(let P=0;P<B.length-1;P++){let q=B[P],ne=z(q,L,n);ne&&q.$&&!St(q.$.env.modulePath,ne)&&n.emitter.emitLine(`${L}${ne};`)}if(B.length>0){let P=B[B.length-1];(u=P.$)!=null&&u.deferredDupExpressions&&Ft(P,L,n);let q=z(P,L,n);q&&(q==="continue"||q==="break"||V(P)&&v(P,A.return)||q.includes("return")?n.emitter.emitLine(`${L}${q};`):f&&!y&&n.emitter.emitLine(`${L}${f} = ${q};`))}(d=F.$)!=null&&d.deferredDropExpressions&&Kt(F,L,n)}else{(c=F.$)!=null&&c.deferredDupExpressions&&Ft(F,L,n);let B=z(F,L,n);B==="continue"||B==="break"||V(F)&&v(F,A.return)||B.includes("return")?n.emitter.emitLine(`${L}${B};`):B===""||!B||f&&(y||n.emitter.emitLine(`${L}${f} = ${B};`))}!(k&&M)&&n.emitter.emitLine(`${_}}`)}}}for(let w=0;w<E;w++)_=_.slice(0,-2),n.emitter.emitLine(`${_}}`);return y?"":f??""}return'/* "cond" expression is not evaluated */'}function Nd(e,t,n){var y,g,h,_,E,k,w,$,b,F,M;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,o=e.$.type,i=o&&Be(o);if(!i&&r){let L=H(o,n);n.emitter.emitLine(`${t}${L} ${r};`)}let a=z(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires an enum type';let l,u;if(De(s)?(u=s.childType,l=s.tag):$t(s)?(u=s,l="ref_semantics"):u=s,!Ve(u))return'// Error: "match" expression requires an enum type';if(!((g=n.types[u.id])==null?void 0:g.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let c=rn(u);if(c){let L=e.args.slice(1),O=null,B=null;for(let P of L)if(V(P)&&v(P,"=>",2)){let q=P.args[0],ne=P.args[1];if(q&&ne&&V(q)&&v(q,"."))O={caseBody:ne};else{let pe=q.func;if(pe&&V(pe)&&v(pe,".")){let ue=pe.args[0];if(ue&&j(ue)){let oe=ue.token.value;B={caseBody:ne,variantName:oe,casePattern:q}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),B){let P;if(V(B.casePattern)&&B.casePattern.args.length>0){let ue=B.casePattern.args[0];if(ue&&j(ue)){P=ue.token.value;let oe=c;n.emitter.emitLine(`${t} ${H(oe,n)} ${P} = ${a};`)}}let q=n;P&&q.inStateMachine&&(q.localShadowedVariables||(q.localShadowedVariables=new Set),q.localShadowedVariables.add(P));let ne=Uo(B.caseBody,t+" ",n);P&&q.localShadowedVariables&&q.localShadowedVariables.delete(P);let pe=ne===""||ne==="break"||ne==="continue"||ne.includes("return");if(!i&&r&&!pe){let ue=ne||a;n.emitter.emitLine(`${t} ${r} = ${ue};`)}else ne&&ne!==""&&n.emitter.emitLine(`${t} ${ne};`)}if(n.emitter.emitLine(`${t}} else {`),O){let P=Uo(O.caseBody,t+" ",n),q=P===""||P==="break"||P==="continue"||P.includes("return");!i&&r&&!q?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),i?"":r??""}if(ir(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let L=e.args.slice(1);for(let O=0;O<L.length;O++){let B=L[O];if(V(B)&&v(B,"=>",2)){let P=B.args[0],q=B.args[1];if(P&&q&&V(P)&&v(P,".",1)){let ne=P.args[0].token.value,pe=Tn(u,ne,n);n.emitter.emitLine(`${t}case ${pe}:`);let ue=Uo(q,t+" ",n);!i&&r&&ue?n.emitter.emitLine(`${t} ${r} = ${ue};`):ue&&n.emitter.emitLine(`${t} ${ue};`),n.currentLoopLabel&&((h=q.$)==null?void 0:h.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):n.currentLoopLabel&&((_=q.$)==null?void 0:_.controlFlow)==="continue"?n.emitter.emitLine(`${t} break;`):n.emitter.emitLine(`${t} break;`)}}}return n.emitter.emitLine(`${t}}`),i?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let m=e.args.slice(1);for(let L=0;L<m.length;L++){let O=m[L];if(V(O)&&v(O,"=>",2)){let B=O.args[0],P=O.args[1];if(B&&P&&V(B)&&B.func.tag==="Atom"&&B.func.token.value==="."&&B.args.length>=1){let q=B.args[0].token.value,ne=Tn(u,q,n);if(n.emitter.emitLine(`${t}case ${ne}:`),B.args.length>1){let ue=u.variants.find(oe=>oe.name===q);if(ue&&ue.fields)for(let oe=0;oe<Math.min(B.args.length-1,ue.fields.length);oe++){let ye=B.args[oe+1],ge=ue.fields[oe];if(ye.tag==="Atom"&&ge){if(Be(ge.type))continue;let Me=ye.token.value,Se=Q(ge.label),Re=H(ge.type,n),Te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} /* MARKER: Generating destructured variable ${Me} */`),n.emitter.emitLine(`${t} ${Re} ${Me} = ${a}${Te}data.${q}.${Se};`);let be=n;if(be!=null&&be.inStateMachine&&be.stateMachineVariables){let I;if((E=ye.$)!=null&&E.env){let U=me(ye.$.env,Me);U.length>0&&(I=U[U.length-1].id)}I&&be.stateMachineVariables.has(I)&&n.emitter.emitLine(`${t} sm->var_${I} = ${Me};`)}}}}if(V(P)&&v(P,"=>",2)){let ue=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${ue.token.value} = ${a};`),P=P.args[1]}let pe=Uo(P,t+" ",n);!i&&r&&pe?n.emitter.emitLine(`${t} ${r} = ${pe};`):pe&&n.emitter.emitLine(`${t} ${pe};`),n.currentLoopLabel&&((k=P.$)==null?void 0:k.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):n.currentLoopLabel&&((w=P.$)==null?void 0:w.controlFlow)==="continue"?n.emitter.emitLine(`${t} break;`):n.emitter.emitLine(`${t} break;`)}else if(B&&P&&V(B)&&V(B.func)&&B.func.func.tag==="Atom"&&B.func.func.token.value==="."&&B.func.args.length===1){let q=B.func.args[0].token.value,ne=Tn(u,q,n),pe=B.args;n.emitter.emitLine(`${t}case ${ne}:`);let ue=u.variants.find(ye=>ye.name===q);if(ue&&ue.fields&&pe.length>0)for(let ye=0;ye<Math.min(pe.length,ue.fields.length);ye++){let ge=pe[ye],Me=ue.fields[ye];if(ge.tag==="Atom"&&Me){let Se=ge.token.value;if(Se!=="_")if(Be(Me.type))n.emitter.emitLine(`${t} // ${Se} is unit type (no value)`);else{let Re=Q(Me.label),Te=H(Me.type,n),be=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Te} ${Se} = ${a}${be}data.${q}.${Re};`);let I=n;if(I!=null&&I.inStateMachine&&I.stateMachineVariables){let U;if(($=ge.$)!=null&&$.env){let te=me(ge.$.env,Se);te.length>0&&(U=te[te.length-1].id)}U&&I.stateMachineVariables.has(U)&&n.emitter.emitLine(`${t} sm->var_${U} = ${Se};`)}}}}if(V(P)&&v(P,"=>",2)){let ye=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${ye.token.value} = ${a};`),P=P.args[1]}let oe=Uo(P,t+" ",n);!i&&r&&oe?n.emitter.emitLine(`${t} ${r} = ${oe};`):oe&&n.emitter.emitLine(`${t} ${oe};`),n.currentLoopLabel&&((b=P.$)==null?void 0:b.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):n.currentLoopLabel&&((F=P.$)==null?void 0:F.controlFlow)==="continue"?n.emitter.emitLine(`${t} break;`):n.emitter.emitLine(`${t} break;`)}}}return n.emitter.emitLine(`${t}}`),(M=e.$)!=null&&M.deferredDropExpressions&&Kt(e,t,n),i?"":r??""}function Bu(e,t,n){var r,o,i,a,s;switch(e.tag){case"Atom":{let l=fa(e,n);if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ft(e,t,n);let u=e.$.deferredDupExpressions[0];V(u)&&((o=u.$)!=null&&o.variableName)&&(l=Q(u.$.variableName))}n.emitter.emitLine(`${t}return ${l};`);break}case"FuncCall":{if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((a=e.$)!=null&&a.variableName){let u=e.$.variableName;e.$.variableName=void 0;let d=Bo(e,t,n);e.$.variableName=u;let c=H(e.$.type,n),f=Q(u);f!==d&&n.emitter.emitLine(`${t}${c} ${f} = ${d};`)}else{let u=Bo(e,t,n);n.emitter.emitLine(`${t}${u};`)}Ft(e,t,n);let l=e.$.deferredDupExpressions[0];if(V(l)&&((s=l.$)!=null&&s.variableName)){let u=Q(l.$.variableName);n.emitter.emitLine(`${t}return ${u};`)}else{let u=Bo(e,t,n);n.emitter.emitLine(`${t}return ${u};`)}}else{let l=Bo(e,t,n);v(e,A.return)?n.emitter.emitLine(`${t}${l};`):n.emitter.emitLine(`${t}return ${l};`)}break}}}function Ja(e,t,n,r){var o;return C.__yo_op_add.includes(e)?`((${t[0]}) + (${t[1]}))`:C.__yo_op_sub.includes(e)?`((${t[0]}) - (${t[1]}))`:C.__yo_op_mul.includes(e)?`((${t[0]}) * (${t[1]}))`:C.__yo_op_div.includes(e)?`((${t[0]}) / (${t[1]}))`:C.__yo_op_mod.includes(e)?`((${t[0]}) % (${t[1]}))`:C.__yo_op_neg.includes(e)?`(-(${t[0]}))`:C.__yo_op_eq.includes(e)?`((${t[0]}) == (${t[1]}))`:C.__yo_op_neq.includes(e)?`((${t[0]}) != (${t[1]}))`:C.__yo_op_lt.includes(e)?`((${t[0]}) < (${t[1]}))`:C.__yo_op_lte.includes(e)?`((${t[0]}) <= (${t[1]}))`:C.__yo_op_gt.includes(e)?`((${t[0]}) > (${t[1]}))`:C.__yo_op_gte.includes(e)?`((${t[0]}) >= (${t[1]}))`:C.__yo_op_not.includes(e)?`(!(${t[0]}))`:C.__yo_op_bit_and.includes(e)?`((${t[0]}) & (${t[1]}))`:C.__yo_op_bit_or.includes(e)?`((${t[0]}) | (${t[1]}))`:C.__yo_op_bit_xor.includes(e)?`((${t[0]}) ^ (${t[1]}))`:C.__yo_op_bit_complement.includes(e)?`(~(${t[0]}))`:C.__yo_op_bit_left_shift.includes(e)?`((${t[0]}) << (${t[1]}))`:C.__yo_op_bit_right_shift.includes(e)?`((${t[0]}) >> (${t[1]}))`:C.__yo_noop.includes(e)?"":C.__yo_return_self.includes(e)?`(*${t[0]})`:C.__yo_ms_sleep.includes(e)?`(
158
+ Current module: ${n}`})}function da({concreteType:e,moduleType:t,env:n}){let r=t.typeName||t.id,o=sr.get(r);if(!(!o||o.length===0)){for(let i of o)if(rs({concreteType:e,impl:i,env:n}).matched)return i}}function Qr({concreteType:e,methodName:t,env:n}){let r=[];for(let[o,i]of sr.entries())for(let a of i){let s=rs({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.moduleType,u=a.moduleValue,d=l.fields.findIndex(c=>c.label===t&&me(c.type));if(d>=0){let c=l.fields[d];if(me(c.type)){let f=u.fields[d],m=tr(e);if(xe(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!m){let h=a.definitionEnv,_=at(h);for(let[E,w]of s.substitutions){let{env:F}=Me({env:_,variable:{name:E,type:ut(),isCompileTimeOnly:!0,value:le(w),token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=F}for(let[E,w]of s.valueSubstitutions){let{env:F}=Me({env:_,variable:{name:E,type:w.type,isCompileTimeOnly:!0,value:w,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=F}let g=es({functionType:c.type,specializedEnv:_,SelfType:s.substitutions.get("Self")});_=at(_,g.parametersFrame);let $=dt(f.body),k=kt({expr:$,env:_,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:g.return.type,env:_},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:g,value:f,evaluationEnv:_},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),b={...f,specializedType:g,body:k,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([E,w])=>`${E}_${x(w)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([E,w])=>`${E}_${He(w)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};r.push({type:g,value:b})}else if(m){let h=a.definitionEnv,_=at(h);for(let[$,k]of s.substitutions){let{env:b}=Me({env:_,variable:{name:$,type:ut(),isCompileTimeOnly:!0,value:le(k),token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=b}for(let[$,k]of s.valueSubstitutions){let{env:b}=Me({env:_,variable:{name:$,type:k.type,isCompileTimeOnly:!0,value:k,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=b}let g=es({functionType:c.type,specializedEnv:_,SelfType:s.substitutions.get("Self")});r.push({type:g,value:void 0})}else if(xe(f)){let h={...f,specializedType:c.type};r.push({type:c.type,value:h})}else r.push({type:c.type,value:f})}}}return r}function sp({concreteType:e,moduleType:t,methodName:n,env:r}){let o=t.typeName||t.id,i=sr.get(o);if(!(!i||i.length===0))for(let a of i){let s=rs({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.moduleType,u=a.moduleValue,d=l.fields.findIndex(c=>c.label===n&&me(c.type));if(d>=0){let c=l.fields[d];if(me(c.type)){let f=u.fields[d];if(xe(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let m=a.definitionEnv,y=at(m);for(let[k,b]of s.substitutions){let{env:E}=Me({env:y,variable:{name:k,type:ut(),isCompileTimeOnly:!0,value:le(b),token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}for(let[k,b]of s.valueSubstitutions){let{env:E}=Me({env:y,variable:{name:k,type:b.type,isCompileTimeOnly:!0,value:b,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}let h=es({functionType:c.type,specializedEnv:y,SelfType:s.substitutions.get("Self")});y=at(y,h.parametersFrame);let _=dt(f.body),g=kt({expr:_,env:y,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:h.return.type,env:y},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:h,value:f,evaluationEnv:y},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),$={...f,specializedType:h,body:g,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([k,b])=>`${k}_${x(b)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([k,b])=>`${k}_${He(b)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};return{type:h,value:$}}else if(xe(f)){let m={...f,specializedType:c.type};return{type:c.type,value:m}}else return{type:c.type,value:f}}}}}function rs({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map},o=at(n);for(let i of t.forallParameters)if(i.kind==="type"){let{env:a}=Me({env:o,variable:{name:i.name,type:ut(),isCompileTimeOnly:!0,value:le(i.someType),token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});o=a}else{let{env:a}=Me({env:o,variable:{name:i.name,type:i.type,isCompileTimeOnly:!0,value:i.unknownValue,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});o=a}try{let{expectedEnv:i}=mt({type:t.receiverTypePattern,env:o},{type:e,env:n});for(let{someType:l,moduleType:u}of t.whereConstraints){let d=ip(i,l);if(!d)return r;if(u.isNegatedConstraint){if(X(d)){if(!Hd(d,u))return r;continue}if(Qn({targetType:d,moduleType:u,env:n}))return r;continue}if(X(d)){if(!Wd(d,u))return r;continue}if(!Qn({targetType:d,moduleType:u,env:n}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=ip(i,l.someType);u&&!X(u)&&a.set(l.name,u)}else{let u=he(i,l.name),d=u[u.length-1];if(d&&d.value&&!Be(d.value)){let c={...d.value,type:l.type};s.set(l.name,c)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function Wd(e,t){let n=t.typeName;if(!n)return!1;for(let r of e.module.fields)if(r.assignedValue&&j(r.assignedValue)&&Fe(r.assignedValue.value)){let o=r.assignedValue.value;if(o.typeName===n&&!o.isNegatedConstraint)return!0}return!1}function Hd(e,t){let n=t.typeName;if(!n)return!1;for(let r of e.module.fields)if(r.assignedValue&&j(r.assignedValue)&&Fe(r.assignedValue.value)){let o=r.assignedValue.value;if(o.typeName===n&&o.isNegatedConstraint)return!0}return!1}function Kd({receiverTypePattern:e,moduleType:t,whereConstraints:n,env:r,errorToken:o}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let i of t.selfConstraints){if(Qn({targetType:e,moduleType:i,env:r}))continue;let a=new Set;for(let s of n)s.moduleType.typeName===i.typeName&&!s.moduleType.isNegatedConstraint&&a.add(s.someType.name);throw p({token:o,errorMessage:`Generic impl receiver type "${x(e)}" does not satisfy constraint "${i.typeName??x(i)}" required by module "${t.typeName??x(t)}".
159
+ Consider adding "where(T <: ${i.typeName??x(i)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(Qn({targetType:e,moduleType:i,env:r}))throw p({token:o,errorMessage:`Generic impl receiver type "${x(e)}" implements "${i.typeName??x(i)}" but module "${t.typeName??x(t)}" requires it to NOT implement this module.
160
+ Consider adding "where(T <: !(${i.typeName??x(i)}))" to the impl.`})}}function ip(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let o of r.variables)if(o.name===t.name&&o.value&&j(o.value))return o.value.value}return t}function os(e){let t=Oo.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Oo.delete(e)}}function Qd(e,t){let n=Oo.get(e);n||(n=new Set,Oo.set(e,n)),n.add(t)}function ap(e,t,n){let r=e.type.receiverType;if(!(!r||!r.module))if(e.type.typeName&&(jd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t}),qd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t}),Yd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t})),n&&Qd(n,r.module),e.type.typeName){let o={label:"",type:hn(1),isCompileTimeOnly:!0,assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.module.fields.push(o)}else for(let o=0;o<e.type.fields.length;o++){let i=e.type.fields[o],a=e.fields[o],s={label:i.label,type:i.type,isCompileTimeOnly:i.isCompileTimeOnly,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.module.fields.push(s)}}function lp({expr:e,env:t,context:n}){var r,o;if(!v(e,A.impl))throw p({token:e.token,errorMessage:`Expected "impl", got:
161
+ ${T(e)}`});if(e.args.length===1&&V(e.args[0])&&v(e.args[0],A.begin)){let i=e.args[0].args,{moduleType:a,moduleValue:s,env:l}=Kr({beginExprs:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});return t=l,e.$={env:t,type:a,value:s,pathCollection:[]},e}else if(e.args.length===2){let i=e.args[0],a=e.args[1],s=M({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value||!j(s.$.value))throw p({token:i.token,errorMessage:"Expected type for receiver type argument."});t=s.$.env;let l=s.$.value.value;if(V(e.args[1])&&v(e.args[1],A.begin)){if(!ts())throw p({token:e.token,errorMessage:"impl a receiver type with anonymous module (begin block) is only allowed in prelude.yo"});let u=e.args[1].args,{moduleType:d,moduleValue:c,env:f}=Kr({beginExprs:u,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:l});return t=f,Xa({targetType:l,moduleType:c.type,env:t,errorToken:e.token}),ap(c,e,n.currentModulePath),e.$={env:t,type:d,value:c,pathCollection:[]},e}else{let u=M({expr:a,env:t,context:{...n,expectedType:void 0,ReceiverType:l}});if(!u.$||!Je(u.$.value))throw p({token:a.token,errorMessage:"Expected module value for module call argument."});t=u.$.env;let d=u.$.value;return Xa({targetType:l,moduleType:d.type,env:t,errorToken:e.token}),ap(d,e,n.currentModulePath),e.$={env:t,type:u.$.type,value:d,pathCollection:[]},e}}else if(e.args.length===3||e.args.length===4){let i=e.args[0];if(!V(i)||!v(i,A.forall))throw p({token:i.token,errorMessage:`Expected forall(...) as first argument in generic impl, got: ${T(i)}`});let a=!1,s,l,u;if(e.args.length===4){let k=e.args[1];if(!V(k)||!v(k,A.where))throw p({token:k.token,errorMessage:`Expected where(...) as second argument in 4-argument generic impl, got: ${T(k)}`});a=!0,s=k,l=e.args[2],u=e.args[3]}else{let k=e.args[1];if(V(k)&&v(k,A.where))throw p({token:k.token,errorMessage:"impl with where clause requires 4 arguments: impl(forall(...), where(...), ReceiverType, Module(...))"});l=k,u=e.args[2]}let d=i.args,c=[];t=at(t);for(let k of d){let b,E;if(V(k)&&v(k,":",2)){let R=k.args[0];if(!Q(R))throw p({token:R.token,errorMessage:`Expected identifier for forall parameter name, got: ${T(R)}`});b=R.token.value,E=k.args[1]}else if(Q(k))b=k.token.value;else throw p({token:k.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${T(k)}`});let w;if(E){let R=M({expr:E,env:t,context:{...n}});if((r=R.$)!=null&&r.env&&(t=R.$.env),!R.$||!R.$.value||!j(R.$.value))throw p({token:E.token,errorMessage:`Expected type for forall parameter type, got: ${T(E)}`});w=R.$.value.value}let F=!w||Xu(w),L=w||ut(),S=ae(L,b),{env:B}=Me({env:t,variable:{name:b,type:L,isCompileTimeOnly:!0,value:S,token:k.token,initializedAtToken:k.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=B,F){let R=S.value;c.push({kind:"type",name:b,someType:R})}else c.push({kind:"value",name:b,type:L,unknownValue:S})}if(a&&s)for(let k of s.args){if(!V(k)||!v(k,"<:",2))throw p({token:k.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${T(k)}`});let b=M({expr:k,env:t,context:{...n,isInsideWhereClause:!0}});(o=b.$)!=null&&o.env&&(t=b.$.env)}let f=[];for(let k of c){if(k.kind!=="type")continue;let{someType:b}=k;for(let E of b.module.fields)E.assignedValue&&j(E.assignedValue)&&Fe(E.assignedValue.value)&&f.push({someType:b,moduleType:E.assignedValue.value})}let m=M({expr:l,env:t,context:{...n}});if(!m.$||!m.$.value||!j(m.$.value))throw p({token:l.token,errorMessage:"Expected type for receiver type pattern."});t=m.$.env;let y=m.$.value.value,h,_;if(V(u)&&v(u,A.begin)){if(!ts())throw p({token:e.token,errorMessage:"impl a receiver type with anonymous module (begin block) is only allowed in prelude.yo"});let k=u.args,b=Kr({beginExprs:k,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:y});t=b.env,_=b.moduleType,h=b.moduleValue}else{let k=M({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:y}});if(!k.$||!Je(k.$.value))throw p({token:u.token,errorMessage:"Expected module value for module call argument."});t=k.$.env,h=k.$.value,_=h.type}Kd({receiverTypePattern:y,moduleType:_,whereConstraints:f,env:t,errorToken:e.token}),t=bt(t);let g=_.typeName||_.id,$={forallParameters:c,whereConstraints:f,receiverTypePattern:y,moduleType:_,moduleValue:h,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};return Gd(g,$),e.$={env:t,type:_,value:h,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Invalid module implementation, expected a "begin" block, got:
162
+ ${T(e)}`})}function is({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],freeVariables:[],modulePath:e,inputString:t}}function rt(){let e=is({modulePath:"",inputString:""});return at(e)}var as=null;function up(e){as=e}function ss(){as=null}function ts(){return as===null}var Zd="__yo_self";function Me({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:o,allowVariableShadowing:i}){let a=e.frames.length-1+(n??0);if(o){let m=em(e);m>=0&&(a=m)}if(t.name!==Zd){let m=he(e,t.name);if(m.length>0&&!i){let y=m[m.length-1];throw st([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:y.token,errorMessage:`Variable "${t.name}" is already defined here (variable shadowing is not allowed):`}])}}let s=e.frames[a];if(!s)throw console.trace(`Frame at level ${a} does not exist in the environment.`),new Error(`Frame at level ${a} does not exist in the environment.`);let l=It(e.modulePath,t.name)?t.name:r??gr(e.modulePath,t.name),u={...t,frameLevel:a,id:l},d=Jd({frame:s,variable:u}),c=e.frames.slice();return c[a]=d,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:c,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function Jd({frame:e,variable:t}){if(e.variables.some(r=>r.name===t.name))throw st([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:e.variables.find(r=>r.name===t.name).token,errorMessage:`Variable "${t.name}" is already defined here in the same scope:`}]);let n=e.variables.findIndex(r=>r.name===t.name&&!r.initializedAtToken);if(n>-1){let r=e.variables.slice();return r[n]=t,{id:e.id,variables:r,isBeginBlockFrame:e.isBeginBlockFrame}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame}}function Xd(e,t,n){let r=e.variables.filter(o=>o.name===t);return n?r.filter(n):r}function he(e,t,n){let r=[];for(let o=0;o<e.frames.length;o++){let i=e.frames[o],a=Xd(i,t,n);r.push(...a)}return n?r.filter(n):r}function _a(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let i=e.frames[r].variables.filter(t);n.push(...i)}return n}function at(e,t={id:gr(e.modulePath,"frame"),variables:[],isBeginBlockFrame:!1},n){let r=n?{...t,isBeginBlockFrame:!0}:t;return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:[...e.frames,r],modulePath:e.modulePath,inputString:e.inputString}}function bt(e,t=!1){if(!t){let n=e.frames[e.frames.length-1],r=Hr(e),o=n.variables.filter(i=>!i.initializedAtToken);if(r.length>0)throw st(r.map(i=>({token:i.token,errorMessage:`Variable "${i.name}" was not consumed. It is supposed to be consumed before going out of scope.
163
+ Typeof "${i.name}": ${x(i.type)}`})));if(o.length>0)throw st(o.map(i=>({token:i.token,errorMessage:`Variable "${i.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function et(e,t,n){let r=e.frames.map(o=>{let i=o.variables.map(a=>a.id===t.id?n:a);return{...o,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function pp(e){var t;return{id:e.id,name:e.name,type:x(e.type),typeId:e.type.id,value:He(e.value),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:(t=e.isOwningTheSameRcValueAs)==null?void 0:t.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function ls(e,t,n,r=!1,o){var f;let i=[],a=n;for(;ze(a);)a=a.childType;function s(m,y){let h=m.fields.find(_=>_.label===t&&(me(_.type)||Fe(_.type)));if(h){let _;if(me(h.type)){if(Be(y))_=ae(h.type,h.label);else if(Je(y)){let g=m.fields.findIndex($=>$.label===h.label);_=y.fields[g]}i.push({type:h.type,value:_})}else if(Fe(h.type)){let g=h.assignedValue;Je(g)&&l(g)}}if(!h)for(let _ of m.fields)Fe(_.type)&&_.assignedValue&&s(_.type,_.assignedValue)}function l(m){let y=m.type.fields.findIndex(h=>h.label==="Call");if(y>=0){let h=m.type.fields[y];if(h.assignedValue){let _=h.assignedValue;en(_)?_.fields.forEach(g=>{i.push({type:g.type,value:g})}):i.push({type:_.type,value:_})}}}function u(m){return m.filter(h=>{if(me(h.type)){if(h.type.parameters.length===0)return!1;let _=h.type.parameters[0].type;if(!r&&ze(_)){let $=_.childType;if(te({type:$,env:h.type.env},{type:n,env:e},!0))return h.needsPointerConversion=!0,!0}if(Ke(_)||Ke(_)&&!Ke(n)||X(n)&&n.resolvedConcreteType&&!je(n)&&!Ke(_)&&te({type:_,env:h.type.env},{type:n.resolvedConcreteType,env:e},!0))return!0;if(!Ke(_)&&Ke(n))return!1;if(Mt(n)||Pt(n)||zt(n)){let $=Tt({type:n,expectedType:void 0,expr:void 0,env:e});if(te({type:_,env:h.type.env},{type:$,env:e},!0))return!0}if(Re(n)&&h.value===void 0){if(h.type.parameters.length>0&&h.type.SelfType){let k=h.type.parameters[0];if(k){let b=k.type;if(!vt(b)&&!Re(b)&&!ze(b))return!1}}let $=h.type.return.type;if(Wn($,h.type.SelfType))return!1}return te({type:_,env:h.type.env},{type:n,env:e},!0)}return!0})}function d(m,y,h=new Set){if(h.has(m.id))return;h.add(m.id);let _=m.fields.find(g=>g.label===y&&me(g.type));if(_&&me(_.type)){let g=_.assignedValue;Be(g)&&(g=ae(_.type,_.label)),i.push({type:_.type,value:g});return}for(let g of m.fields)Fe(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}if(n!==a&&n.module){let m=n.module.fields.find(y=>y.label===t&&me(y.type));if(m&&me(m.type)){let y=m.assignedValue;Be(y)&&(y=ae(m.type,m.label)),i.push({type:m.type,value:y})}else d(n.module,t)}if(i.length===0&&n!==a){let m=Qr({concreteType:n,methodName:t,env:e});i.push(...m)}let c=X(a)&&a.resolvedConcreteType&&!je(a);if(a.module&&!Re(a)&&!c){let m=a.module.fields.find(y=>y.label===t&&me(y.type));if(m&&me(m.type)){let y=m.assignedValue;Be(y)&&(y=ae(m.type,m.label)),i.push({type:m.type,value:y})}else d(a.module,t);if(i.length===0){for(let y of a.module.fields)if(y.label===""&&y.assignedValue&&Je(y.assignedValue)){let h=y.assignedValue,_=h.type,g=_.fields.findIndex($=>$.label===t&&me($.type));if(g>=0){let $=_.fields[g];if(me($.type)){let k=h.fields[g],b=$.type;xe(k)&&k.specializedType&&(b=k.specializedType),i.push({type:b,value:k})}}}}if(i.length===0){let y=Qr({concreteType:a,methodName:t,env:e});i.push(...y)}}if(i.length===0&&(Mt(a)||Pt(a)||zt(a))){let m=Tt({type:a,expectedType:void 0,expr:void 0,env:e});if(m.module){for(let y of m.module.fields)if(y.label===""&&y.assignedValue&&Je(y.assignedValue)){let h=y.assignedValue,_=h.type,g=_.fields.findIndex($=>$.label===t&&me($.type));if(g>=0){let $=_.fields[g];if(me($.type)){let k=h.fields[g],b=$.type;xe(k)&&k.specializedType&&(b=k.specializedType),i.push({type:b,value:k})}}}}}if(X(a)){if((f=a.resolvedConcreteType)!=null&&f.module&&!je(a)){let m=a.resolvedConcreteType,y=m.module,h=y==null?void 0:y.fields.find(_=>_.label===t&&me(_.type));if(h&&me(h.type)){let _=h.assignedValue||ae(h.type,h.label);i.push({type:h.type,value:_})}if(i.length===0){for(let _ of(y==null?void 0:y.fields)??[])if(_.label===""&&_.assignedValue&&Je(_.assignedValue)){let g=_.assignedValue,$=g.type,k=$.fields.findIndex(b=>b.label===t&&me(b.type));if(k>=0){let b=$.fields[k];if(me(b.type)){let E=g.fields[k],w=b.type;xe(E)&&E.specializedType&&(w=E.specializedType),i.push({type:w,value:E});break}}}}if(i.length===0){let _=Qr({concreteType:m,methodName:t,env:e});i.push(..._)}}if(i.length===0&&a.requiredModules)for(let m of a.requiredModules){let y=m.fields.find(h=>h.label===t&&me(h.type));if(y&&me(y.type)){let h={...y.type,SelfType:a},_=ae(h,y.label);i.push({type:h,value:_})}}if(i.length===0){let m=h=>{if(!(h!=null&&h.whereClauseConstraints))return;let _=h.whereClauseConstraints.get(a);if(!_&&X(a)){for(let[g,$]of h.whereClauseConstraints)if(X(g)&&te({type:g,env:e},{type:a,env:e},!1)){_=$;break}}return _},y=o;for(;y&&i.length===0;){let h=m(y);if(h)for(let _ of h.requiredModules){let g=_.fields.find($=>$.label===t&&me($.type));if(g&&me(g.type)){let $={...g.type,SelfType:a},k=ae($,g.label);i.push({type:$,value:k})}}y=y.ParentFunctionType}}if(i.length===0){for(let m of a.module.fields)if(m.label===""&&m.assignedValue&&j(m.assignedValue)&&Fe(m.assignedValue.value)){let h=m.assignedValue.value.fields.find(_=>_.label===t&&me(_.type));if(h&&me(h.type)){let _=ae(h.type,h.label);i.push({type:h.type,value:_})}}}}if(Re(a)){let m=a.module.fields.find(h=>h.label===t&&(me(h.type)||Fe(h.type)));if(m&&me(m.type)){let h=m.assignedValue||ae(m.type,m.label);i.push({type:m.type,value:h})}let y=a.requiredModules;for(let h of y){let _=h.fields.find(g=>g.label===t&&(me(g.type)||Fe(g.type)));_&&me(_.type)&&_.type.parameters.length>0&&(Ke(_.type.parameters[0].type)||Ke(n)||te({type:_.type.parameters[0].type,env:_.type.env},{type:n,env:e},!0))&&i.push({type:_.type,value:void 0})}}return i.length>0,u(i)}function cp(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let o=n.variables.filter(i=>!!i.isCompileTimeOnly);return{...n,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Hr(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Ge(r.type))return!1;let o=r.type;return!(X(o)&&!o.resolvedConcreteType)}).reverse()}function em(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}var Zr=[...C.__yo_op_add,...C.__yo_op_sub,...C.__yo_op_mul,...C.__yo_op_div,...C.__yo_op_mod,...C.__yo_op_neg,...C.__yo_op_eq,...C.__yo_op_neq,...C.__yo_op_lt,...C.__yo_op_lte,...C.__yo_op_gt,...C.__yo_op_gte,...C.__yo_op_not,...C.__yo_op_bit_and,...C.__yo_op_bit_or,...C.__yo_op_bit_xor,...C.__yo_op_bit_complement,...C.__yo_op_bit_left_shift,...C.__yo_op_bit_right_shift,...C.__yo_ptr_add,...C.__yo_ptr_sub,...C.__yo_ptr_diff,...C.__yo_ptr_eq,...C.__yo_ptr_neq,...C.__yo_ptr_lt,...C.__yo_ptr_lte,...C.__yo_ptr_gt,...C.__yo_ptr_gte,...C.__yo_slice_len,...C.__yo_as,...C.__yo_noop,...C.__yo_return_self,...C.__yo_ms_sleep],fp=new Set(["bool","usize","isize","u8","i8","u16","i16","u32","i32","u64","i64","f32","f64","char","short","ushort","int","uint","long","ulong","longlong","ulonglong","longdouble"]);function Te(e,t=!1){let n=new Set(["auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","inline","int","long","register","restrict","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while","_Alignas","_Alignof","_Atomic","_Bool","_Complex","_Generic","_Imaginary","_Noreturn","_Static_assert","_Thread_local","errno","stdin","stdout","stderr","NULL","true","false"]),r=e.replace(/[^a-zA-Z0-9_]/g,o=>`_u${o.charCodeAt(0)}_`);return!t&&n.has(r)&&(r="__yo_c_reserved_"+r),r}function Z(e,t){var n,r,o,i,a;if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"compt_int":return"int32_t";case"compt_float":return"double";case"compt_string":return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let u=un(e);if(u)return Z(u,t)}let s;switch(e.tag){case"Tuple":s="tuple";break;case"Struct":s="struct";break;case"Union":s="union";break;case"Enum":s="enum";break;default:throw new Error("Unreachable")}let l=(n=t.types[e.id])==null?void 0:n.cName;if(!l)throw new Error(`No C type name found for ${s} ${x(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&we(e)&&e.isReferenceSemantics?`${l}*`:l}case"Function":return"void*";case"Dyn":{let s=(r=t.types[e.id])==null?void 0:r.cName;if(!s)throw new Error(`No C type name found for dynamic dispatch type ${x(e)}`);return s}case"Array":{let s=e,l=s.childType,u=s.length;if(tt(u)){let d=Z(l,t),c=`Array_${Te(d)}_${u.value}`;return t.arrayStructTypes.has(c)||t.arrayStructTypes.set(c,{childType:d,length:typeof u.value=="bigint"?Number(u.value):u.value}),c}break}case"Slice":{let s=e,u=`Slice_${Te(Z(s.childType,t))}`;return t.sliceStructTypes.has(u)||t.sliceStructTypes.set(u,{childType:Z(s.childType,t)}),u}case"SomeType":{let s=e;if(je(s)){if((o=s.resolvedConcreteType)!=null&&o.isExtern)return`${Z(s.resolvedConcreteType,t)}*`;let l=(i=t.types[s.id])==null?void 0:i.cName;if(l)return`${l}*`;let u=Kt(s);if(u){let d=(a=t.types[u.id])==null?void 0:a.cName;if(d)return`${d}*`}if(s.resolvedConcreteType&&we(s.resolvedConcreteType)){let d=s.resolvedConcreteType.id;for(let[c,f]of Object.entries(t.types))if(X(f.type)&&je(f.type)&&f.type.resolvedConcreteType&&we(f.type.resolvedConcreteType)&&f.type.resolvedConcreteType.id===d)return`${f.cName}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${s.id}, FutureModule: ${(u==null?void 0:u.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.`)}return vn(s)&&s.resolvedConcreteType||s.resolvedConcreteType?Z(s.resolvedConcreteType,t):"void*"}case"Ptr":{let l=e.childType;if(ft(l)){let c=Z(l.childType,t),f=`Slice_${Te(c)}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:c}),f}let u=Z(l,t);return vt(l)?`${u}*`:Ve(l)&&un(l)?u:`${u}*`}case"Iso":{let s=e,l=s.childType,u=Z(l,t),d=u.replace(/\*/g,"").trim(),c=`Iso_${Te(d)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(c)||t.isoTypes.set(c,{childTypeCName:u,isoType:s}),c}}return`// Unknown type: ${x(e)}`}function wt(e,t,n){let r=Te(t);return`${Z(e,n)} ${r}`}function bn(e,t,n){var o;let r=(o=n.types[e.id])==null?void 0:o.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${x(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Bo(e){return e.type.return.isCompileTimeOnly}function Uo(e){let t=e.body,n=null;return V(t)&&v(t,"begin")&&t.args.length===1&&V(t.args[0])&&v(t.args[0],Zr)?n=t.args[0].func.token.value:V(t)&&v(t,Zr)&&(n=t.func.token.value),n&&C.__yo_as.includes(n)?null:n}function un(e){if(e.variants.length!==2)return null;let t=null,n=null;for(let r of e.variants)if(!r.fields||r.fields.length===0){if(t)return null;t=r}else if(r.fields.length===1){let o=r.fields[0].type;if(ze(o)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function lr(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Pe(e,t){if(!t)return Te(e);let n=he(t,e);if(n.length>0){let r=n[n.length-1];return r.parameterAlias?Te(r.parameterAlias,r.type.isExtern==="c"):Te(r.name,r.type.isExtern==="c")}return Te(e)}function dp(e,t){let n=[];if(e.tag!=="FuncCall"||!v(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],awaitPoint:null}]:[{stateNumber:0,expressions:[e],awaitPoint:t[0]??null}];let r=e.args,o=[],i=[];for(let a of r){let s=tm(a,t),l=v(a,"return");if(s!==-1)i.push(a),o.push(i),i=[];else if(l){i.push(a),o.push(i),i=[];break}else i.push(a)}i.length>0&&o.push(i);for(let a=0;a<o.length;a++){let s=o[a],l=a<t.length?t[a]:null;n.push({stateNumber:a,expressions:s,awaitPoint:l})}return n}function tm(e,t){for(let n=0;n<t.length;n++)if(ha(e,t[n].expr))return n;return-1}function ha(e,t){if(e===t)return!0;switch(e.tag){case"FuncCall":if(ha(e.func,t))return!0;for(let n of e.args)if(ha(n,t))return!0;break}return!1}function mp(e,t,n,r=!1){let o=n.emitter;for(let i=0;i<e.expressions.length;i++){let a=e.expressions[i],s=i===e.expressions.length-1,l=e.awaitPoint&&ha(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FuncCall"&&(v(a,A.while)||v(a,A.cond))&&va(a);if((l||u)&&e.awaitPoint)nm(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let d=P(a,t,n);d&&(o.emitLine(`${t}// Store final expression result`),o.emitLine(`${t}sm->result = ${d};`))}else{let d=P(a,t,n);!d||!a.$||It(a.$.env.modulePath,d)||o.emitLine(`${t}${d};`)}}}function nm(e,t,n,r,o){var a,s;let i=o.emitter;if(e.tag==="FuncCall"&&v(e,C.await)){let l=e.args[0];if(!l){i.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=P(l,r,o);i.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),i.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else i.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FuncCall"&&v(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){i.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(!d){i.emitLine(`${r}// Error: await without argument`);return}let c=(a=l.token)==null?void 0:a.value;if(!c||!l.$){i.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=P(d,r,o);i.emitLine(`${r}// Store Future for await (variable: ${c})`),i.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else i.emitLine(`${r}// Store Future for await (variable: ${c}) - future already in state machine`);return}if(u.tag==="FuncCall"&&v(u,A.cond)){let d;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let c=l.token.value,f=he(l.$.env,c);f.length>0&&(d=f[f.length-1].id)}us(u,t,r,o,d);return}}if(e.tag==="FuncCall"&&v(e,A.cond)){us(e,t,r,o);return}if(e.tag==="FuncCall"&&v(e,A.match)){ps(e,t,r,o);return}if(e.tag==="FuncCall"&&v(e,A.while)){rm(e,t,r,o);return}i.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),i.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FuncCall"?e.func.tag==="Atom"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function us(e,t,n,r,o){var l,u,d;let i=r.emitter;if(e.tag!=="FuncCall"||!v(e,A.cond)){i.emitLine(`${n}// Error: Expected cond expression`);return}let a=e.args;if(a.length===0){i.emitLine(`${n}// Error: cond must have at least one branch`);return}let s=[];for(let c=0;c<a.length;c++){let f=a[c];if(f.tag!=="FuncCall"||!v(f,"=>")){i.emitLine(`${n}// Error: Expected => pair in cond`);continue}let m=f.args[0],y=f.args[1];if(!m||!y){i.emitLine(`${n}// Error: Invalid pair in cond`);continue}let h=c===a.length-1&&m.tag==="Atom"&&((l=m.token)==null?void 0:l.value)==="true"?null:P(m,n,r);if(h?i.emitLine(`${n}${c===0?"if":"else if"} (${h}) {`):i.emitLine(`${n}${c===0?"{":"else {"}`),Ro(y)){i.emitLine(`${n} sm->cond_branch_${t.index} = ${c};`);let g=ga(y,t,`${n} `,r);s.push({index:c,value:y,hasAwait:!0,remainingExprs:g,deferredDropExpressions:(u=y.$)==null?void 0:u.deferredDropExpressions})}else{if(V(y)&&v(y,A.begin)){let g=y.args;for(let $=0;$<g.length;$++){let k=g[$],b=P(k,`${n} `,r);if(b==="break"&&t.isInsideWhile)i.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),i.emitLine(`${n} goto while_loop_${t.index}_end;`);else{let E=b==="break"||b==="continue"||(b==null?void 0:b.includes("return"));b&&(E||k.$&&!It(k.$.env.modulePath,b))&&i.emitLine(`${n} ${b};`)}}if((d=y.$)!=null&&d.deferredDropExpressions)for(let $ of y.$.deferredDropExpressions){let k=P($,`${n} `,r);k&&i.emitLine(`${n} ${k};`)}}else{let g=P(y,`${n} `,r);if(g==="break"&&t.isInsideWhile)i.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),i.emitLine(`${n} goto while_loop_${t.index}_end;`);else{let $=g==="break"||g==="continue"||(g==null?void 0:g.includes("return"));g&&($||y.$&&!It(y.$.env.modulePath,g))&&i.emitLine(`${n} ${g};`)}}s.push({index:c,value:y,hasAwait:!1})}i.emitLine(`${n}}`)}r.condBranchInfo||(r.condBranchInfo=new Map),r.condBranchInfo.set(t.index,{branches:s,targetVariableId:o})}function Ro(e){if(e.tag==="FuncCall"&&v(e,C.await))return!0;if(e.tag==="FuncCall"){for(let t of e.args)if(Ro(t))return!0}return!1}function ps(e,t,n,r){var f,m,y,h,_;let o=r.emitter;if(e.tag!=="FuncCall"||!v(e,A.match)){o.emitLine(`${n}// Error: Expected match expression`);return}let i=e.args[0],a=e.args.slice(1);if(!i||a.length===0){o.emitLine(`${n}// Error: match must have a value and at least one case`);return}let s=P(i,n,r),l=(f=i.$)==null?void 0:f.type;if(!l||!Ve(l)){o.emitLine(`${n}// Error: match requires an enum type`);return}let u=l,d=(m=r.types[u.id])==null?void 0:m.cName;if(!d){o.emitLine(`${n}// Error: enum type has no C name`);return}let c=un(u);if(c){let g=-1,$=-1,k;for(let b=0;b<a.length;b++){let E=a[b];if(V(E)&&v(E,"=>",2)){let w=E.args[0];if(w&&V(w)&&v(w,"."))g=b;else if(w&&V(w)){let F=w.func;F&&V(F)&&v(F,".")&&($=b,w.args.length>0&&Q(w.args[0])&&(k=w.args[0].token.value))}}}if(o.emitLine(`${n}if (${s} != NULL) {`),$>=0){let b=a[$];if(!V(b))o.emitLine(`${n} // Error: Expected => in case`);else{let E=b.args[1];if(k){let F=r,L=!1,S;if(F.stateMachineVariables){for(let[B,R]of F.stateMachineVariables)if(R.name===k){L=!0,S=B;break}}L&&S?o.emitLine(`${n} sm->var_${S} = ${s};`):o.emitLine(`${n} ${Z(c,r)} ${k} = ${s};`)}o.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`);let w=ga(E,t,n+" ",r);if(w.length>0){let F=r;F.condBranchInfo||(F.condBranchInfo=new Map);let L=F.condBranchInfo.get(t.index)||{branches:[]};L.branches.push({index:$,value:E,hasAwait:!0,remainingExprs:w,deferredDropExpressions:(y=E.$)==null?void 0:y.deferredDropExpressions}),F.condBranchInfo.set(t.index,L)}}}if(o.emitLine(`${n}} else {`),g>=0){let b=a[g];if(!V(b))o.emitLine(`${n} // Error: Expected => in case`);else{let E=b.args[1];if(o.emitLine(`${n} sm->cond_branch_${t.index} = ${g};`),Ro(E)){let w=ga(E,t,n+" ",r);if(w.length>0){let F=r;F.condBranchInfo||(F.condBranchInfo=new Map);let L=F.condBranchInfo.get(t.index)||{branches:[]};L.branches.push({index:g,value:E,hasAwait:!0,remainingExprs:w,deferredDropExpressions:(h=E.$)==null?void 0:h.deferredDropExpressions}),F.condBranchInfo.set(t.index,L)}}else{let w=P(E,n+" ",r);w&&E.$&&!It(E.$.env.modulePath,w)&&o.emitLine(`${n} ${w};`)}}}o.emitLine(`${n}}`)}else{o.emitLine(`${n}switch (${s}.tag) {`);for(let g=0;g<a.length;g++){let $=a[g];if(!V($)||!v($,"=>",2))continue;let k=$.args[0],b=$.args[1],E;if(V(k)&&v(k,".",1))E=k.args[0].token.value;else if(V(k)){let F=k.func;F&&V(F)&&v(F,".",1)&&(E=F.args[0].token.value)}if(!E){o.emitLine(`${n} // Error: Could not extract variant name`);continue}let w=`${d.toUpperCase()}_${E.toUpperCase()}`;if(o.emitLine(`${n} case ${w}: {`),o.emitLine(`${n} sm->cond_branch_${t.index} = ${g};`),V(k)&&k.args.length>=1){let F=k.func;if(F&&V(F)&&v(F,".")){let L=u.variants.find(S=>S.name===E);if(L&&L.fields)for(let S=0;S<Math.min(k.args.length,L.fields.length);S++){let B=k.args[S],R=L.fields[S];if(Q(B)&&R){let Y=B.token.value,W=r,H=!1,se;if(W.stateMachineVariables){for(let[pe,_e]of W.stateMachineVariables)if(_e.name===Y){H=!0,se=pe;break}}let ye=Te(R.label,R.type.isExtern==="c"),oe=`${s}.data.${E}.${ye}`;if(H&&se)o.emitLine(`${n} sm->var_${se} = ${oe};`);else{let pe=Z(R.type,r);o.emitLine(`${n} ${pe} ${Y} = ${oe};`)}}}}}if(Ro(b)){let F=ga(b,t,n+" ",r);if(F.length>0){let L=r;L.condBranchInfo||(L.condBranchInfo=new Map);let S=L.condBranchInfo.get(t.index)||{branches:[]};S.branches.push({index:g,value:b,hasAwait:!0,remainingExprs:F,deferredDropExpressions:(_=b.$)==null?void 0:_.deferredDropExpressions}),L.condBranchInfo.set(t.index,S)}}else{let F=P(b,n+" ",r);F&&b.$&&!It(b.$.env.modulePath,F)&&o.emitLine(`${n} ${F};`)}o.emitLine(`${n} break;`),o.emitLine(`${n} }`)}o.emitLine(`${n} default: break;`),o.emitLine(`${n}}`)}}function ga(e,t,n,r){let o=r.emitter,i=[];if(e.tag!=="FuncCall"||!v(e,"begin"))return o.emitLine(`${n}// Error: Expected begin block in cond branch with await`),i;let a=e.args,s=!1;for(let l of a){if(s){i.push(l);continue}if(Ro(l))if(s=!0,l.tag==="FuncCall"&&v(l,":=")){let u=l.args[1];if(u&&u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(d){let c=P(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),o.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}}}else if(l.tag==="FuncCall"&&v(l,C.await)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let d=P(u,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}else o.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else l.tag==="FuncCall"&&v(l,A.match)&&ps(l,t,n,r);else{let u=P(l,n,r);u&&l.$&&!It(l.$.env.modulePath,u)&&o.emitLine(`${n}${u};`)}}return i}function rm(e,t,n,r){let o=r.emitter;if(e.tag!=="FuncCall"||!v(e,"while")){o.emitLine(`${n}// Error: Expected while expression`);return}let i=e.args;if(i.length!==2){o.emitLine(`${n}// Error: while must have exactly 2 arguments (condition, body)`);return}let a=i[0],s=i[1];o.emitLine(`${n}sm->while_loop_${t.index}_active = true;`),o.emitLine(`${n}while_loop_${t.index}_start:`);let l=P(a,n,r);o.emitLine(`${n}if (!(${l})) {`),o.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),o.emitLine(`${n} goto while_loop_${t.index}_end;`),o.emitLine(`${n}}`);let u=om(s,t,n,r);o.emitLine(`${n}while_loop_${t.index}_end:`),r.whileLoopInfo||(r.whileLoopInfo=new Map),r.whileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:u})}function om(e,t,n,r){let o=r.emitter,i=[],a=[];e.tag==="FuncCall"&&v(e,"begin")?a=e.args:a=[e];let s=-1;for(let u=0;u<a.length;u++){let d=a[u];if(va(d)){s=u;break}}if(s===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),i;for(let u=0;u<s;u++){let d=a[u],c=P(d,n,r);c&&d.$&&!It(d.$.env.modulePath,c)&&o.emitLine(`${n}${c};`)}let l=a[s];if(V(l)&&v(l,":=")){let u=l.args[1];if(u&&u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(d){let c=P(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}}}else if(l.tag==="FuncCall"&&v(l,C.await)){let u=l.args[0];if(u){let d=P(u,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}}else{if(V(l)&&v(l,A.cond))return us(l,t,n,r,void 0),i;if(V(l)&&v(l,A.match))return ps(l,t,n,r),i}for(let u=s+1;u<a.length;u++)i.push(a[u]);return i}function va(e){if(e.tag==="FuncCall"&&v(e,C.await))return!0;if(e.tag==="FuncCall"){if(va(e.func))return!0;for(let t of e.args)if(va(t))return!0}return!1}function yp(e,t){if(e.futureVariableId){let n=t.capturedVariables.find(r=>r.id===e.futureVariableId);if(n)return n.kind==="outer"?n.name:`var_${n.id}`}return`await_future_${e.index}`}function $a(e,t){return t==="outer"?`__capture.${Te(e)}`:Te(`var_${e}`)}function _p(e,t,n,r,o,i,a,s){var m,y,h,_,g,$;let l=s.emitter,d=Kt(i).isFuture.outputType,c=De(d);s.condBranchInfo=new Map;let f=dp(e,o.awaitPoints);l.emitLine(`// Resume function for async block ${t}`),l.emitLine(`void ${r}(${n}* sm) {`),l.emitLine(` ASYNC_DEBUG("${t}_resume: state=%d\\n", sm->state);`),l.emitLine(" switch (sm->state) {");for(let k=0;k<f.length;k++){let b=f[k];if(!b)continue;let E=b.stateNumber,w=k===f.length-1;if(l.emitLine(`
164
+ state_${E}:`),l.emitLine(` case ${E}: { // State ${E}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${E}\\n");`),E>0&&o.awaitPoints[E-1]){let Y=o.awaitPoints[E-1],W=yp(Y,o);if(Y&&!De(Y.resultType)){if(l.emitLine(` // Extract result from await ${E-1}`),l.emitLine(` int state_before_read = atomic_load_explicit(&sm->${W}->state, memory_order_acquire);`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${E-1}, state=%d\\n", state_before_read);`),Ge(Y.resultType)){let se=Po(Y.resultType,s);se?l.emitLine(` sm->await_result_${E-1} = ${se}(sm->${W}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${E-1} = sm->${W}->result;`))}else l.emitLine(` sm->await_result_${E-1} = sm->${W}->result;`);if(Y.targetVariableId){let se=$a(Y.targetVariableId,"local");l.emitLine(` sm->${se} = sm->await_result_${E-1};`)}l.emitLine("")}if(!Y.futureVariableId){let se=Y.expr;if(se.tag==="FuncCall"){let ye=se.args[0],oe=(m=ye==null?void 0:ye.$)==null?void 0:m.type;oe&&(X(oe)||Re(oe))&&(l.emitLine(` if (sm->${W} != NULL) { __yo_decr_rc((void*)sm->${W}); sm->${W} = NULL; }`),l.emitLine(""))}}let H=s;if(Y){let se=(y=H.condBranchInfo)==null?void 0:y.get(Y.index);if(se&&se.branches.some(oe=>oe.hasAwait)){l.emitLine(" // Execute remaining code from chosen cond branch"),l.emitLine(` switch (sm->cond_branch_${Y.index}) {`);for(let oe of se.branches)if(oe.hasAwait){if(l.emitLine(` case ${oe.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${oe.index}\\n");`),oe.remainingExprs&&oe.remainingExprs.length>0){let pe=s.inStateMachine,_e=s.stateMachineVariables;s.inStateMachine={futureType:i};let Ie=new Map;for(let ke of o.capturedVariables)Ie.set(ke.id,ke);if(a)for(let ke of a.fields)Ie.set(ke.label,{id:ke.label,name:ke.label,type:ke.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ie;for(let ke of oe.remainingExprs){let Ae=P(ke," ",s);!Ae||!ke.$||It(ke.$.env.modulePath,Ae)||l.emitLine(` ${Ae};`)}if(oe.deferredDropExpressions)for(let ke of oe.deferredDropExpressions){let Ae=P(ke," ",s);Ae&&Ae.includes("sm->")&&l.emitLine(` ${Ae};`)}s.inStateMachine=pe,s.stateMachineVariables=_e}l.emitLine(" break;"),l.emitLine(" }")}if(l.emitLine(" }"),se.targetVariableId){let oe=$a(se.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${oe} = sm->await_result_${Y.index};`)}l.emitLine("")}let ye=(h=H.whileLoopInfo)==null?void 0:h.get(Y.index);if(ye){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${Y.index}_active) {`),ye.bodyExprsAfterAwait&&ye.bodyExprsAfterAwait.length>0){let Ae=s.inStateMachine,ge=s.stateMachineVariables;s.inStateMachine={futureType:i};let $e=new Map;for(let I of o.capturedVariables)$e.set(I.id,I);if(a)for(let I of a.fields)$e.set(I.label,{id:I.label,name:I.label,type:I.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=$e;for(let I of ye.bodyExprsAfterAwait){let U=P(I," ",s);!U||!I.$||It(I.$.env.modulePath,U)||l.emitLine(` ${U};`)}s.inStateMachine=Ae,s.stateMachineVariables=ge}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let oe=s.inStateMachine,pe=s.stateMachineVariables;s.inStateMachine={futureType:i};let _e=new Map;for(let Ae of o.capturedVariables)_e.set(Ae.id,Ae);if(a)for(let Ae of a.fields)_e.set(Ae.label,{id:Ae.label,name:Ae.label,type:Ae.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=_e;let Ie=P(ye.conditionExpr," ",s);s.inStateMachine=oe,s.stateMachineVariables=pe,l.emitLine(` if (!(${Ie})) {`),l.emitLine(` sm->while_loop_${Y.index}_active = false;`),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition false, exiting loop\\n");`),l.emitLine(" } else {"),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition true, continuing iteration\\n");`);let ke=Y.index;l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${ke};`),l.emitLine(` goto while_loop_${ke}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Y.index}:`)}}}let F=s.inStateMachine,L=s.stateMachineVariables;s.inStateMachine={futureType:i};let S=new Map;for(let Y of o.capturedVariables)S.set(Y.id,Y);if(a)for(let Y of a.fields)S.set(Y.label,{id:Y.label,name:Y.label,type:Y.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=S;let B=s.pendingDeferredDrops;s.pendingDeferredDrops=(_=e.$)==null?void 0:_.deferredDropExpressions;let R=w&&!c&&b.expressions.length>0;if(mp(b," ",s,R),s.pendingDeferredDrops=B,l.emitLine(""),b.awaitPoint){s.inStateMachine=F,s.stateMachineVariables=L;let Y=E+1,W=yp(b.awaitPoint,o),H=(g=b.awaitPoint)==null?void 0:g.isInsideWhile;if(H){let se=b.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${se}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${Y};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = atomic_load_explicit(&sm->${W}->state, memory_order_acquire);`),l.emitLine(" if (future_state == -1) { // -1 = completed"),l.emitLine(" // Yield once even when ready (microtask semantics), then resume in next tick"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" } else {"),l.emitLine(" // Register continuation to be called when future completes"),l.emitLine(` atomic_store_explicit(&sm->${W}->continuation_fn, (void (*)(void*))${r}, memory_order_release);`),l.emitLine(` atomic_store_explicit(&sm->${W}->continuation_sm, (void*)sm, memory_order_release);`),l.emitLine(" return;"),l.emitLine(" }"),H){let se=b.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${se};`),l.emitLine(" }")}}else if(w){if(!b.expressions.some(W=>v(W,"return"))){if(($=e.$)!=null&&$.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let W of e.$.deferredDropExpressions){let H=P(W," ",s);H&&l.emitLine(` ${H};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),l.emitLine(" atomic_store_explicit(&sm->state, -1, memory_order_release); // -1 = completed"),l.emitLine(""),l.emitLine(" // Check if there's a continuation to invoke"),l.emitLine(" void (*continuation_fn)(void*) = (void (*)(void*))atomic_load_explicit(&sm->continuation_fn, memory_order_acquire);"),l.emitLine(" void* continuation_sm = atomic_load_explicit(&sm->continuation_sm, memory_order_acquire);"),l.emitLine(""),l.emitLine(" if (continuation_fn != NULL) {"),l.emitLine(' ASYNC_DEBUG("Future %p completed, spawning continuation: resume_fn=%p, sm=%p\\n", (void*)sm, (void*)continuation_fn, continuation_sm);'),l.emitLine(""),l.emitLine(" // Clear the continuation (prevent double-spawn)"),l.emitLine(" atomic_store_explicit(&sm->continuation_fn, NULL, memory_order_relaxed);"),l.emitLine(" atomic_store_explicit(&sm->continuation_sm, NULL, memory_order_relaxed);"),l.emitLine(""),l.emitLine(" // Spawn the continuation as a new task"),l.emitLine(" yo_async_spawn_task(continuation_fn, continuation_sm);"),l.emitLine(" }"),l.emitLine(""),l.emitLine(" // Release event loop's reference now that task is complete"),l.emitLine(" // This balances the __yo_incr_rc in yo_async_spawn_task"),l.emitLine(" __yo_decr_rc((void*)sm);"),l.emitLine(""),l.emitLine(" // Stay in terminal state (-1)"),l.emitLine(" return;")}s.inStateMachine=F,s.stateMachineVariables=L}else s.inStateMachine=F,s.stateMachineVariables=L;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function Jr(e,t,n){let r=he(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function hp(e){if(!V(e)||e.args.length<1)return;let t=e.args[0];if(!(!t||!Q(t)))return t.token.value}function im(e,t,n,r,o,i=!1){var m;let a=Object.values(o.types).find(y=>y.type===e);if(!a)return o.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if((m=n.$)!=null&&m.deferredDupExpressions)for(let y of n.$.deferredDupExpressions){let h=hp(y);h&&l.set(h,y)}let u=e.fields.map(y=>{var $,k;let h,_=y.exprs.expr;if((k=($=_.$)==null?void 0:$.deferredDupExpressions)!=null&&k.length&&(h=_.$.deferredDupExpressions[0]),!h){let b=[y.label];Q(_)&&b.push(_.token.value);for(let E of b){let w=l.get(E);if(w){h=w;break}}}if(h)return P(h,r,o);let g={tag:"Atom",token:y.exprs.expr.token,$:y.exprs.expr.$};return Ea(g,o)}),d=`(${s}){ ${u.map((y,h)=>{let _=e.fields[h];return _?`.${Te(_.label,_.type.isExtern==="c")} = ${y}`:`/* Error: missing field at index ${h} */`}).join(", ")} }`,c=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${c}`;return i?o.emitter.emitLine(`${r}${s} ${f} = ${d};`):(o.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),o.emitter.emitLine(`${r}*${f} = ${d};`)),{captureTempVar:f,captureCName:s}}function P(e,t,n){let r;switch(e.tag){case"FuncCall":r=Go(e,t,n);break;case"Atom":r=Ea(e,n);break}return r}function Go(e,t,n){var i,a,s,l,u,d,c,f,m,y,h,_,g,$,k,b,E,w,F,L,S,B,R,Y,W,H,se,ye,oe,pe,_e,Ie,ke,Ae,ge,$e,I,U,re,ie,ve,Ee,qe,We,it,Vn,Wt,cn,ii,Ts,Es,Cs,ks,bs,ws,Fs,Vs,xs,Ms,Ls,Ss,As,Is,Ns,Ds,Os,Bs,Us,Rs,Ps,zs,Gs,qs,Ys,js,Ws,Hs,Ks,Qs,Zs,Js,Xs,el,tl,nl,rl,ol,il,al,sl,ll,ul,pl,cl,fl,dl,ml,yl,_l,gl,hl,vl,$l,Tl,El,Cl,kl,bl,wl,Fl,Vl,xl,Ml,Ll,Sl,Al,Il,Nl,Dl,Ol,Bl,Ul,Rl,Pl,zl,Gl,ql,Yl,jl,Wl,Hl,Kl,Ql,Zl,Jl,Xl,eu,tu,nu,ru,ou,iu,au,su,lu,uu,pu,cu,fu,du,mu,yu,_u,gu,hu,vu,$u,Tu;let r=n.emitter;if((i=e.$)!=null&&i.macroExpansion)return P(e.$.macroExpansion,t,n);if(V(e.func)&&v(e.func,".",2)&&e.func.args[1]&&Q(e.func.args[1])){let N=e.func.args[1].token.value,D=e.func.args[0],q=(a=D==null?void 0:D.$)==null?void 0:a.type;if(q&&X(q)&&je(q)){if(N===C.___drop[0]){let K=P(D,t,n);return`if (${K} != NULL) { __yo_decr_rc((void*)${K}); }`}if(N===C.___dup[0])return`__yo_incr_rc((void*)${P(D,t,n)})`}}if((s=e.$)!=null&&s.closureFunctionValue&&((l=e.$)!=null&&l.type)&&vn(e.$.type)){let N=sn(e.$.type),D=N.isFn.callType,q=e.$.closureFunctionValue,K=e.$.captureType,ee=(u=n.functions[q.funcId])==null?void 0:u.cName;if(!ee)return"// Error: Closure implementation function not found in context";let G=Re(e.$.type),O;if(G){let de=n.types[e.$.type.id];if(!de)return"// Error: Dyn closure type not found in context";O=de.cName}let z=K&&we(K)&&K.fields.length>0,J=Z(D.return.type,n),ce=D.parameters.map(de=>Z(de.type,n)).join(", "),ue=`(${J} (*)(void*${ce?", "+ce:""}))${ee}`;if(z&&K&&we(K)){let de=!G,fe=im(K,D.id,e,t,n,de);if(!fe)return"// Error: Failed to allocate closure capture";let{captureTempVar:Le}=fe;if(G){let Ye=`__yo_create_${O}`,Et=`__yo_dispose_${O}`;return`${Ye}(${Le}, ${Et}, ${ue})`}else return n.implClosureCallMap.set(K.id,{functionCName:ee,callTypeId:N.isFn.callType.id}),Le}else if(G){let de=`__yo_create_${O}`,fe=`__yo_dispose_${O}`;return`${de}(NULL, ${fe}, ${ue})`}else{if(e.$.type&&e.$.type.tag==="SomeType"){let de=e.$.type;if(de.resolvedConcreteType)return n.implClosureCallMap.set(de.resolvedConcreteType.id,{functionCName:ee,callTypeId:N.isFn.callType.id}),`(${Z(de.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}if(v(e,C.__yo_decr_rc)){let N=e.args[0];return N?`__yo_decr_rc(${P(N,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}if(v(e,C.__yo_incr_rc)){let N=e.args[0];return N?`__yo_incr_rc(${P(N,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}if(v(e,C.__yo_rc_own)){let N=e.args[0];return N?P(N,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}if(v(e,C.__yo_drop_array_element)){let N=e.args[0],D=e.args[1];if(!N||!D)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let q=P(N,t,n),K=P(D,t,n),ee=(d=N.$)==null?void 0:d.type;if(!ee||!Oe(ee))return"// Error: __yo_drop_array_element requires an array type";let G=ee.childType,O=X(G)&&G.resolvedConcreteType?G.resolvedConcreteType:G;if(Oe(O)){let J=O.length;if(!tt(J))return"// Error: array element has non-constant length";let ce=`i_${Math.floor(Math.random()*1e6)}`,ue=n.emitter;ue.emitLine(`for (size_t ${ce} = 0; ${ce} < ${J.value}; ${ce}++) {`);let de=`(${q}).data[${K}].data[${ce}]`;ue.emitLine(" { // drop nested array element");let fe=Xr(de,O.childType,n);return fe&&ue.emitLine(` ${fe};`),ue.emitLine(" }"),ue.emitLine("}"),""}let z=Ta(O,n);return z?`${z}((${q}).data[${K}])`:"// No drop function for array element type"}if(v(e,C.__yo_dup_array_element)){let N=e.args[0],D=e.args[1];if(!N||!D)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let q=P(N,t,n),K=P(D,t,n),ee=(c=N.$)==null?void 0:c.type;if(!ee||!Oe(ee))return"// Error: __yo_dup_array_element requires an array type";let G=ee.childType,O=X(G)&&G.resolvedConcreteType?G.resolvedConcreteType:G;if(Oe(O)){let J=O.length;if(!tt(J))return"// Error: array element has non-constant length";let ce=`temp_array_${Math.floor(Math.random()*1e6)}`,ue=`i_${Math.floor(Math.random()*1e6)}`,de=Z(O,n),fe=n.emitter;fe.emitLine(`${de} ${ce} = (${q}).data[${K}];`),fe.emitLine(`for (size_t ${ue} = 0; ${ue} < ${J.value}; ${ue}++) {`);let Le=qo(`${ce}.data[${ue}]`,O.childType,n);return fe.emitLine(` ${ce}.data[${ue}] = ${Le};`),fe.emitLine("}"),ce}let z=Po(O,n);return z?`${z}((${q}).data[${K}])`:"// No dup function for array element type"}if(v(e,C.__yo_drop_tuple_element)){let N=e.args[0],D=e.args[1];if(!N||!D)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let q=P(N,t,n);P(D,t,n);let K=(f=N.$)==null?void 0:f.type;if(!K||!Ne(K))return"// Error: __yo_drop_tuple_element requires a tuple type";let ee=(m=D.$)==null?void 0:m.value;if(!tt(ee))return"// Error: __yo_drop_tuple_element requires a constant index";let G=Number(ee.value);if(G<0||G>=K.fields.length)return"// Error: __yo_drop_tuple_element index out of bounds";let O=K.fields[G].type,z=X(O)&&O.resolvedConcreteType?O.resolvedConcreteType:O;if(Ne(z)){let ce=`(${q})._${G}`;return Xr(ce,z,n)}let J=Ta(z,n);return J?`${J}((${q})._${G})`:"// No drop function for tuple element type"}if(v(e,C.__yo_dup_tuple_element)){let N=e.args[0],D=e.args[1];if(!N||!D)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let q=P(N,t,n);P(D,t,n);let K=(y=N.$)==null?void 0:y.type;if(!K||!Ne(K))return"// Error: __yo_dup_tuple_element requires a tuple type";let ee=(h=D.$)==null?void 0:h.value;if(!tt(ee))return"// Error: __yo_dup_tuple_element requires a constant index";let G=Number(ee.value);if(G<0||G>=K.fields.length)return"// Error: __yo_dup_tuple_element index out of bounds";let O=K.fields[G].type,z=X(O)&&O.resolvedConcreteType?O.resolvedConcreteType:O;if(Ne(z)){let ce=`(${q})._${G}`;return qo(ce,z,n)}let J=Po(z,n);return J?`${J}((${q})._${G})`:"// No dup function for tuple element type"}if(v(e,C.___dup)){let N=e.args[0];if(!N)return"// Error: ___dup requires exactly 1 argument";let D=P(N,t,n),q=((_=N.$)==null?void 0:_.type)??((g=e.$)==null?void 0:g.type);return q?qo(D,q,n):D}if(v(e,C.___drop)){let N=e.args[0];if(!N)return"// Error: ___drop requires exactly 1 argument";let D=P(N,t,n),q=(($=N.$)==null?void 0:$.type)??((k=e.$)==null?void 0:k.type);return q?Xr(D,q,n):""}if(v(e,C.__yo_dyn_drop)){let N=e.args[0];return N?`__yo_decr_rc((void*)(${P(N,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}if(v(e,C.__yo_dyn_dup)){let N=e.args[0];return N?`__yo_incr_rc((void*)(${P(N,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}if(v(e,C.__yo_incr_rc_atomic)){let N=e.args[0];return N?`__yo_incr_rc_atomic(${P(N,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}if(v(e,C.__yo_decr_rc_atomic)){let N=e.args[0];return N?`__yo_decr_rc_atomic(${P(N,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}if(v(e,C.__yo_iso_extract)){let N=e.args[0];if(!N)return"// Error: __yo_iso_extract requires exactly 1 argument";let D=P(N,t,n),q=(b=N.$)==null?void 0:b.type;if(!q||!Ct(q))return"// Error: __yo_iso_extract requires an Iso type";let K=Z(q,n),ee=(E=e.$)==null?void 0:E.type;if(ee&&((w=n.isoTypes)!=null&&w.has(K))){let z=n.isoTypes.get(K);z.optionTypeCName||(z.optionTypeCName=Z(ee,n))}let G=`__yo_iso_extract_${K}(${D})`,O=(F=e.$)==null?void 0:F.variableName;return O&&ee?(n.emitter.emitLine(`${t}${Z(ee,n)} ${O} = ${G};`),O):G}if(v(e,C.__yo_iso_dispose)){let N=e.args[0];if(!N)return"// Error: __yo_iso_dispose requires exactly 1 argument";let D=P(N,t,n),q=(L=N.$)==null?void 0:L.type;return!q||!Ct(q)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${Z(q,n)}(${D})`}let o=(S=e.func.$)==null?void 0:S.value;if(j(o)&&Ct(o.value)&&e.args.length===1){let N=o.value,D=N.childType,q=e.args[0],K=P(q,t,n),ee=Z(N,n),G=Z(D,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(ee)||n.isoTypes.set(ee,{childTypeCName:G,isoType:N}),`__yo_create_iso_${ee}(${K})`}if(v(e,C.__yo_sometype_drop)){let N=e.args[0];if(!N)return"// Error: __yo_sometype_drop requires exactly 1 argument";let D=(B=N.$)==null?void 0:B.type;if(D&&X(D)&&je(D)){let q=P(N,t,n);return`if (${q} != NULL) { __yo_decr_rc((void*)${q}); }`}if(D&&X(D)&&D.resolvedConcreteType){let K=(R=D.resolvedConcreteType.module)==null?void 0:R.fields.find(ee=>ee.label===C.___drop[0]);if(K&&K.assignedValue&&xe(K.assignedValue)){let ee=(Y=n.functions[K.assignedValue.funcId])==null?void 0:Y.cName;if(ee){let G=P(N,t,n);return`${ee}(${G})`}}}return"/* __yo_sometype_drop: no-op */"}if(v(e,C.__yo_sometype_dup)){let N=e.args[0];if(!N)return"// Error: __yo_sometype_dup requires exactly 1 argument";let D=(W=N.$)==null?void 0:W.type;if(D&&X(D)&&je(D))return`__yo_incr_rc((void*)${P(N,t,n)})`;if(D&&X(D)&&D.resolvedConcreteType){let K=(H=D.resolvedConcreteType.module)==null?void 0:H.fields.find(ee=>ee.label===C.___dup[0]);if(K&&K.assignedValue&&xe(K.assignedValue)){let ee=(se=n.functions[K.assignedValue.funcId])==null?void 0:se.cName;if(ee){let G=P(N,t,n);return`${ee}(${G})`}}}return"/* __yo_sometype_dup: no-op */"}if(v(e,C.__yo_gc_collect))return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()";if(v(e,C.rc)){if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let N=e.args[0],D=(ye=N.$)==null?void 0:ye.type;if(!D)return"// Error: rc argument missing type information";let q=P(N,t,n);return tn(D)?`((yo_ref_header_t*)(${q}))->ref_count`:"1"}if(v(e,C.panic)){let N=(oe=e.$)==null?void 0:oe.type;if(!N)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let q=e.args[0];if((pe=q.$)!=null&&pe.value&&Qe(q.$.value)){let K=q.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(K)});`),r.emitLine(`${t}abort();`)}else{let K=P(q,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${K});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${Z(N,n)}*)NULL))`}if(v(e,A.test))return"/* test declaration skipped */";if(v(e,C.__yo_thread_set_maximum_threads)){let N=e.args[0];return N?`__yo_thread_set_maximum_threads(${P(N,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}if(v(e,A.op_and))return e.args.length===0?"true":e.args.length===1?P(e.args[0],t,n):`(${e.args.map(D=>P(D,t,n)).join(" && ")})`;if(v(e,A.op_or))return e.args.length===0?"false":e.args.length===1?P(e.args[0],t,n):`(${e.args.map(D=>P(D,t,n)).join(" || ")})`;if(v(e,C.async))return am(e,t,n);if(v(e,A.dyn))return dm(e,t,n);if(v(e,C.await)){let N=e.args[0];if(!N)return"// Error: await requires exactly 1 argument";let D=(_e=N.$)==null?void 0:_e.type;return!D||!je(D)?"// Error: await argument must be a Future type":Kt(D)?n.inStateMachine?"":"// Error: await should only be used inside async blocks":"// Error: could not extract Future module from type"}if(v(e,A.return)){let N=e.args[0];if(N){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!De(e.$.type))return"// Error: return expression missing temporary variable name";let D=n,q,K=!1;if(D.inStateMachine&&((Ie=N.$)!=null&&Ie.variableName)){let J=N.$.variableName;N.$.variableName=void 0,q=P(N,t,n),N.$.variableName=J,K=!0}else if((ke=N.$)!=null&&ke.variableName&&((Ae=N.$)!=null&&Ae.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){let J=N.$.variableName;N.$.variableName=void 0;let ce=P(N,t,n);N.$.variableName=J;let ue=Z(N.$.type,n),de=Pe(J,N.$.env);de!==ce&&n.emitter.emitLine(`${t}${ue} ${de} = ${ce};`),q=de}else q=P(N,t,n);let ee=!1;if((ge=N.$)!=null&&ge.deferredDupExpressions&&N.$.deferredDupExpressions.length>0){Ft(N,t,D);let J=N.$.deferredDupExpressions[0];V(J)&&(($e=J.$)!=null&&$e.variableName)&&(q=Pe(J.$.variableName,J.$.env),ee=!0)}let G=Z(e.$.type,n),O=e.$.variableName?Pe(e.$.variableName,e.$.env):void 0;if(!ee&&!De(e.$.type)&&O&&O!==q&&n.emitter.emitLine(`${t}${G} ${O} = ${q};`),e.$.deferredDropExpressions&&Qt(e,t,n),D.inStateMachine){let J=D.inStateMachine.futureType,ue=Kt(J).isFuture.outputType,de=De(ue);if(D.pendingDeferredDrops&&(!e.$.deferredDropExpressions||e.$.deferredDropExpressions.length===0)){n.emitter.emitLine(`${t}// Drop local variables before early completion`);for(let fe of D.pendingDeferredDrops){let Le=P(fe,t,n);Le&&n.emitter.emitLine(`${t}${Le};`)}}if(n.emitter.emitLine(`${t}// Final state - complete the result Future`),n.emitter.emitLine(`${t}ASYNC_DEBUG("${n.currentFunctionName}: Completing async function\\n");`),!de){let fe=e.$.variableName&&K?e.$.variableName:e.$.variableName||q;n.emitter.emitLine(`${t}sm->result = ${fe};`)}return n.emitter.emitLine(`${t}ASYNC_DEBUG("${n.currentFunctionName}: Setting state to COMPLETED\\n");`),n.emitter.emitLine(`${t}atomic_store_explicit(&sm->state, -1, memory_order_release); // -1 = completed`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}// Check if there's a continuation waiting for this Future to complete`),n.emitter.emitLine(`${t}void (*continuation_fn)(void*) = atomic_load_explicit(&sm->continuation_fn, memory_order_acquire);`),n.emitter.emitLine(`${t}void* continuation_sm = atomic_load_explicit(&sm->continuation_sm, memory_order_acquire);`),n.emitter.emitLine(`${t}if (continuation_fn != NULL) {`),n.emitter.emitLine(`${t} ASYNC_DEBUG("${n.currentFunctionName}: Spawning continuation: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),n.emitter.emitLine(`${t} yo_async_spawn_task(continuation_fn, continuation_sm);`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}sm->state = ${Number.MAX_SAFE_INTEGER}; // Terminal state`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}// Release the "running task" reference now that task is complete`),n.emitter.emitLine(`${t}// This balances the __yo_incr_rc in the constructor`),n.emitter.emitLine(`${t}__yo_decr_rc((void*)sm);`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}return;`),""}if(D.pendingDeferredDrops&&(!e.$.deferredDropExpressions||e.$.deferredDropExpressions.length===0)){n.emitter.emitLine(`${t}// Drop local variables before early return`);for(let J of D.pendingDeferredDrops){let ce=P(J,t,n);ce&&n.emitter.emitLine(`${t}${ce};`)}}return De(e.$.type)?"return":`return ${ee?q:O??q}`}else{(I=e.$)!=null&&I.deferredDropExpressions&&Qt(e,t,n);let D=n;if(D.pendingDeferredDrops){n.emitter.emitLine(`${t}// Drop local variables before early return`);for(let q of D.pendingDeferredDrops){let K=P(q,t,n);K&&n.emitter.emitLine(`${t}${K};`)}}return"return"}}if(v(e,C.__yo_array_fill,2)){let N=e.args[0],D=e.args[1],q=(U=N.$)==null?void 0:U.value;if(!q||!j(q)||!Oe(q.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let K=q.value,ee=K.length;if(!tt(ee))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let G=Z(K,n),O=P(D,t,n),z=((re=e.$)==null?void 0:re.variableName)||`temp_array_${Date.now()}`,J=`i_${ct(((ie=e.$)==null?void 0:ie.env.modulePath)??"")}`;return r.emitLine(`${t}${G} ${z};`),r.emitLine(`${t}for (int ${J} = 0; ${J} < ${ee.value}; ${J}++) {`),r.emitLine(`${t} ${z}.data[${J}] = ${O};`),r.emitLine(`${t}}`),z}if(v(e,"::",2))return"";if(v(e,":",2)){let N=e.args[0];if(V(N)&&v(N,A.compt,1))return"";if(!((ve=N.$)!=null&&ve.type))return`// Error: No type information for left-hand side ${T(N)}
165
+ `;let D=N.token.value,q=wt(N.$.type,D,n);return n.emitter.emitLine(`${t}${q};`),""}else if(v(e,":=",2)){let N=e.args[0],D=e.args[1],q=n;if(V(N)&&v(N,A.compt,1))return"";if(q.inStateMachine&&Q(N)&&Q(D)){let K=N.token.value,ee=D.token.value,G=q.stateMachineVariables&&Array.from(q.stateMachineVariables.values()).some(z=>z.name===K),O=q.stateMachineVariables&&Array.from(q.stateMachineVariables.values()).some(z=>z.name===ee);if(K===ee&&(G||O))return""}if((Ee=e.$)!=null&&Ee.runtimeDestructurings){let K=e.$.runtimeDestructurings,ee=P(D,t,n),G=(qe=D.$)==null?void 0:qe.type;return K.forEach(({label:O,type:z,variableName:J})=>{let ce=Te(J,z.isExtern==="c"),ue=wt(z,ce,n);if(G&&we(G)&&G.isNewtype&&G.fields.length===1){let Le=G.fields[0];if(Le&&Le.label===O){n.emitter.emitLine(`${t}${ue} = ${ee}; // Destructuring ${O} (newtype)`);return}}let de=O.match(/^\d+$/)?`_${O}`:Te(O,z.isExtern==="c");if(G&&Ne(G)&&!O.match(/^\d+$/)){let Le=G.fields.findIndex(Ye=>Ye.label===O);de=Le>=0?`_${Le}`:de}let fe=G&&vt(G)?"->":".";n.emitter.emitLine(`${t}${ue} = ${ee}${fe}${de}; // Destructuring ${O}`)}),""}if(Q(N)){let K=N.token.value;if(!((We=N.$)!=null&&We.type))return`// Error: No type information for variable ${K}
166
+ `;if((it=N.$)!=null&&it.env){let z=he(N.$.env,K);if(z.length>0&&z[z.length-1].isCompileTimeOnly)return""}let ee=n,G=!1,O;if(ee.inStateMachine&&ee.stateMachineVariables&&((Vn=N.$)!=null&&Vn.env)){let z=he(N.$.env,K);if(z.length>0){let J=z[z.length-1],ce=J.isOwningTheSameRcValueAs?J.isOwningTheSameRcValueAs.id:J.id;ee.stateMachineVariables.has(ce)&&(G=!0,O=ce)}}if(Oe(N.$.type))if(V(D)&&v(D,A.array)){let z=P(D,t,n);if(G&&O)n.emitter.emitLine(`${t}sm->var_${O} = ${z};`);else if(!De(N.$.type)){let J=wt(N.$.type,K,n);n.emitter.emitLine(`${t}${J} = ${z};`)}}else{let z;if((Wt=D.$)!=null&&Wt.variableName){let J=Pe(D.$.variableName,D.$.env),ce=P(D,t,n);if(!G){let ue=wt(D.$.type,J,n);J!==ce&&n.emitter.emitLine(`${t}${ue} = ${ce};`)}z=J}else z=P(D,t,n);if(G&&O)n.emitter.emitLine(`${t}sm->var_${O} = ${z};`);else if(!De(N.$.type)){let J=wt(N.$.type,K,n);n.emitter.emitLine(`${t}${J} = ${z};`)}}else{let z,J=V(D)&&((cn=D.$)==null?void 0:cn.closureFunctionValue)&&((ii=D.$)==null?void 0:ii.type)&&vn(D.$.type);if((Ts=D.$)!=null&&Ts.variableName){let ce=Pe(D.$.variableName,D.$.env),ue=Pe(K,N.$.env);if(ce===ue){if(z=P(D,t,n),!J&&((Es=D.$)!=null&&Es.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){Ft(D,t,ee);let de=D.$.deferredDupExpressions[0];V(de)&&((Cs=de.$)!=null&&Cs.variableName)&&(z=Pe(de.$.variableName,de.$.env))}}else if(Q(D)&&ce===Pe(D.token.value,D.$.env)){if(z=P(D,t,n),!J&&((ks=D.$)!=null&&ks.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){Ft(D,t,ee);let de=D.$.deferredDupExpressions[0];V(de)&&((bs=de.$)!=null&&bs.variableName)&&(z=Pe(de.$.variableName,de.$.env))}}else{let de=n;if(Q(D)&&de.currentClosureCaptures&&de.currentClosureCaptures.includes(D.token.value)&&((ws=D.$)!=null&&ws.env)&&de.currentClosureCaptureFrameLevel!==void 0&&Jr(D.token.value,D.$.env,de.currentClosureCaptureFrameLevel)){let fe=de.currentClosureType;if(fe&&fe.isClosure){let Le=Object.values(de.types).find(Ye=>Ye.type===fe);Le?z=`((${`${Le.cName}_capture`}*)closure_context->data)->${Pe(D.token.value,D.$.env)}`:z=`closure_context->${Pe(D.token.value,D.$.env)}`}else z=`closure_context->${Pe(D.token.value,D.$.env)}`}else{let fe=P(D,t,n);if(fe.trim()!==ce){let Le=wt(D.$.type,ce,n);n.emitter.emitLine(`${t}${Le} = ${fe};`)}if(!J&&((Fs=D.$)!=null&&Fs.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){Ft(D,t,de);let Le=D.$.deferredDupExpressions[0];V(Le)&&((Vs=Le.$)!=null&&Vs.variableName)?z=Pe(Le.$.variableName,Le.$.env):z=ce}else z=ce}}}else if(z=P(D,t,n),!J&&((xs=D.$)!=null&&xs.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){Ft(D,t,n);let ue=D.$.deferredDupExpressions[0];V(ue)&&((Ms=ue.$)!=null&&Ms.variableName)&&(z=Pe(ue.$.variableName,ue.$.env))}if(ft(N.$.type)){let ce=N.$.type;if(G&&O)n.emitter.emitLine(`${t}sm->var_${O} = ${z};`);else if(!De(ce)){let ue=wt(ce,K,n);n.emitter.emitLine(`${t}${ue} = ${z};`)}}else if(G&&O)n.emitter.emitLine(`${t}sm->var_${O} = ${z};`);else{let ce=It(D.$.env.modulePath,z.trim()),ue;if(ce&&n.tempVarAsyncStructNames){let de=n.tempVarAsyncStructNames.get(z.trim());de?ue=`${de}*`:ue=Z(N.$.type,n)}else ue=Z(N.$.type,n);De(N.$.type)||n.emitter.emitLine(`${t}${ue} ${Pe(K,N.$.env)} = ${z};`)}}return""}}else if(v(e,"=",2)){let N=e.args[0],D=e.args[1],q=!1;if(V(N)&&v(N,":",2)&&(q=!0,N=N.args[0]),V(N)&&v(N,A.compt))return"";if((Ls=N.$)!=null&&Ls.pathCollection&&((Ss=N.$)==null?void 0:Ss.pathCollection.length)>0){let ee=N.$.pathCollection[0];if(ee&&ee.length>=2){let G=ee[0];if(typeof G=="string"&&((As=N.$)!=null&&As.env)){let O=he(N.$.env,G);if(O.length>0&&O[O.length-1].isCompileTimeOnly)return""}}}if(Q(N)&&((Is=N.$)!=null&&Is.env)){let ee=N.token.value,G=he(N.$.env,ee);if(G.length>0&&G[G.length-1].isCompileTimeOnly)return""}if(!((Ns=N.$)!=null&&Ns.type))return`// Error: No type information for left-hand side ${T(N)}
167
+ `;let K=P(N,t,n);if((Ds=e.$)!=null&&Ds.variableName){let ee=e.$.variableName;if(!(n.inStateMachine&&K.startsWith("sm->"))){let z=wt(N.$.type,ee,n);Oe(N.$.type)?n.emitter.emitLine(`${t}${z} = ${K}; // Save old value for later use`):De(N.$.type)||n.emitter.emitLine(`${t}${z} = ${K}; // Save old value for later use`)}}if(Oe(N.$.type)){let ee=P(D,t,n),G=V(D)&&((Os=D.$)==null?void 0:Os.closureFunctionValue)&&((Bs=D.$)==null?void 0:Bs.type)&&vn(D.$.type),O=n,z=ee;if(!G&&((Us=D.$)!=null&&Us.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){if((Rs=D.$)!=null&&Rs.variableName&&((Ps=D.$)!=null&&Ps.type)){let ce=Pe(D.$.variableName,D.$.env);if(ce!==ee.trim()){let ue=Z(D.$.type,n);n.emitter.emitLine(`${t}${ue} ${ce} = ${ee};`)}}Ft(D,t,O);let J=D.$.deferredDupExpressions[0];V(J)&&((zs=J.$)!=null&&zs.variableName)&&(z=Pe(J.$.variableName,J.$.env))}if(q){let J=wt(N.$.type,P(N,t,n),n);n.emitter.emitLine(`${t}${J} = ${z};`)}else n.emitter.emitLine(`${t}${K} = ${z};`)}else{let ee=P(D,t,n),G=V(D)&&((Gs=D.$)==null?void 0:Gs.closureFunctionValue)&&((qs=D.$)==null?void 0:qs.type)&&vn(D.$.type),O=n,z=ee;if(!G&&((Ys=D.$)!=null&&Ys.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){if((js=D.$)!=null&&js.variableName&&((Ws=D.$)!=null&&Ws.type)){let ce=Pe(D.$.variableName,D.$.env);if(ce!==ee.trim()){let ue=Z(D.$.type,n);n.emitter.emitLine(`${t}${ue} ${ce} = ${ee};`)}}Ft(D,t,O);let J=D.$.deferredDupExpressions[0];V(J)&&((Hs=J.$)!=null&&Hs.variableName)&&(z=Pe(J.$.variableName,J.$.env))}if(!De(N.$.type)){let J=N.$.type,ce=(Ks=D.$)==null?void 0:Ks.type,ue,de=It(D.$.env.modulePath,z.trim());de&&n.tempVarAsyncStructNames&&(ue=n.tempVarAsyncStructNames.get(z.trim()));let fe=q&&ce&&je(J)&&je(ce),Le;de&&fe?ue?Le=`${ue}*`:Le=Z(ce,n):fe&&ue?Le=`${ue}*`:Le=Z(fe?ce:J,n),n.emitter.emitLine(`${t}${q?Le+" ":""}${K} = ${z};`)}}return((Qs=e.$)==null?void 0:Qs.variableName)??""}else if((Zs=e.$)!=null&&Zs.value&&!Be((Js=e.$)==null?void 0:Js.value)&&!De(e.$.type)){let N=e.$.value;return Bn(N,n,e)}else{if(v(e,".",2))return mm(e,t,n);if(v(e,A.begin)){let N=(Xs=e.$)==null?void 0:Xs.variableName,D=(el=e.$)==null?void 0:el.type,q=n;if(N&&D){!De(D)&&!((tl=e.$)!=null&&tl.controlFlow)&&n.emitter.emitLine(`${t}${Z(D,n)} ${N};`),n.emitter.emitLine(`${t}{ // begin block`);let K=q.pendingDeferredDrops;q.pendingDeferredDrops=(nl=e.$)==null?void 0:nl.deferredDropExpressions;let ee=[],G=!De(D)&&!((rl=e.$)!=null&&rl.controlFlow);for(let O=0;O<e.args.length;O++){let z=e.args[O],J=P(z,t+" ",n);ee.push(J);let ce=O===e.args.length-1;J&&!(ce&&G)&&(z.$&&It(z.$.env.modulePath,J)||n.emitter.emitLine(`${t} ${J};`))}if(G){let O=e.args[e.args.length-1],z=ee[ee.length-1];if((ol=O.$)!=null&&ol.deferredDupExpressions&&O.$.deferredDupExpressions.length>0){if((il=O.$)!=null&&il.variableName){let ce=O.$.variableName;O.$.variableName=void 0;let ue=P(O,t+" ",n);O.$.variableName=ce;let de=Z(O.$.type,n),fe=Pe(ce,O.$.env);fe!==ue&&n.emitter.emitLine(`${t} ${de} ${fe} = ${ue};`),z=fe}Ft(O,t+" ",n);let J=O.$.deferredDupExpressions[0];V(J)&&((al=J.$)!=null&&al.variableName)&&(z=Pe(J.$.variableName,J.$.env))}n.emitter.emitLine(`${t} ${N} = ${z};`)}if((sl=e.$)!=null&&sl.deferredDropExpressions)for(let O of e.$.deferredDropExpressions){let z=P(O,t+" ",n);z&&n.emitter.emitLine(`${t} ${z};`)}return n.emitter.emitLine(`${t}} // end begin block`),q.pendingDeferredDrops=K,De(D)||(ll=e.$)!=null&&ll.controlFlow?"":N}else{n.emitter.emitLine(`${t}{ // begin block`);let K=q.pendingDeferredDrops;if(q.pendingDeferredDrops=(ul=e.$)==null?void 0:ul.deferredDropExpressions,e.args.map(G=>P(G,t+" ",n)).forEach(G=>{G&&n.emitter.emitLine(`${t} ${G};`)}),(pl=e.$)!=null&&pl.deferredDropExpressions)for(let G of e.$.deferredDropExpressions){let O=P(G,t+" ",n);O&&n.emitter.emitLine(`${t} ${O};`)}return n.emitter.emitLine(`${t}} // end begin block`),q.pendingDeferredDrops=K,""}}else{if(v(e,A.cond))return ym(e,t,n);if(v(e,A.match))return _m(e,t,n);if(v(e,C.__yo_address_of,1)){if(!((cl=e.$)==null?void 0:cl.type))return`// Error: No type information for pointer/reference expression ${T(e)}
168
+ `;let D=e.args[0];if(V(D)){let K=(fl=D.func.$)==null?void 0:fl.type;if(K&&Oe(K)){let ee=D.args[0];if(ee&&V(ee)&&v(ee,":")){let G=P(D.func,t,n),O=P(ee.args[0],t,n),z=P(ee.args[1],t,n),J=`Slice_${Te(Z(K.childType,n))}`;return n.sliceStructTypes.has(J)||n.sliceStructTypes.set(J,{childType:Z(K.childType,n)}),`(${J}){ .data = &${G}.data[${O}], .length = ${z} - ${O} }`}else if(ee&&Q(ee)&&ee.token.value===":"){let G=P(D.func,t,n),O=K,z=O.childType,J=`Slice_${Te(Z(z,n))}`;return n.sliceStructTypes.has(J)||n.sliceStructTypes.set(J,{childType:Z(z,n)}),tt(O.length)?`(${J}){ .data = &${G}.data[0], .length = ${O.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(K&&(ft(K)||ze(K)&&ft(K.childType))){let ee=ft(K)?K:K.childType,G=D.args[0];if(G&&V(G)&&v(G,":")){let O=P(D.func,t,n),z=P(G.args[0],t,n),J=P(G.args[1],t,n),ce=`Slice_${Te(Z(ee.childType,n))}`;return n.sliceStructTypes.has(ce)||n.sliceStructTypes.set(ce,{childType:Z(ee.childType,n)}),`(${ce}){ .data = &${O}.data[${z}], .length = ${J} - ${z} }`}else if(G&&Q(G)&&G.token.value===":"){let O=P(D.func,t,n),z=`Slice_${Te(Z(ee.childType,n))}`;return n.sliceStructTypes.has(z)||n.sliceStructTypes.set(z,{childType:Z(ee.childType,n)}),`(${z}){ .data = ${O}.data, .length = ${O}.length }`}}}return`(&${P(D,t,n)})`}else if(v(e,A.tuple)){let N=(dl=e.$)==null?void 0:dl.runtimeArgExprsInOrder,D=(_l=n.types[((yl=(ml=e.$)==null?void 0:ml.type)==null?void 0:yl.id)??""])==null?void 0:_l.cName,q=(gl=e.$)==null?void 0:gl.variableName;if(N&&D){let K=n,ee=N.map((G,O)=>{var ce,ue;let J=P(G,t,n);if((ce=G.$)!=null&&ce.deferredDupExpressions&&G.$.deferredDupExpressions.length>0){Ft(G,t,K);let de=G.$.deferredDupExpressions[0];V(de)&&((ue=de.$)!=null&&ue.variableName)&&(J=Pe(de.$.variableName,de.$.env))}return`._${O} = ${J}`}).join(", ");if(q&&((hl=e.$)!=null&&hl.type)){let G=`(${D}){ ${ee} }`,O=wt(e.$.type,q,n);return n.emitter.emitLine(`${t}${O} = ${G};`),q}else return`(${D}){ ${ee} }`}else{if(e.args.length===0)return"";{let K=N??e.args;if(!D)return`/* Error: tuple type not found - typeId: ${(($l=(vl=e.$)==null?void 0:vl.type)==null?void 0:$l.id)??"none"} */`;let ee=K.map((G,O)=>{let z=P(G,t,n);return`._${O} = ${z}`}).join(", ");if(q&&((Tl=e.$)!=null&&Tl.type)){let G=`(${D}){ ${ee} }`,O=wt(e.$.type,q,n);return n.emitter.emitLine(`${t}${O} = ${G};`),q}else return`(${D}){ ${ee} }`}}}else if(v(e,A.array)){let N=(El=e.$)==null?void 0:El.runtimeArgExprsInOrder,D=(Cl=e.$)==null?void 0:Cl.type,q=(kl=e.$)==null?void 0:kl.variableName;if(Oe(D)&&N){let K=n,ee=N.map(O=>{var J,ce;let z=P(O,t,n);if((J=O.$)!=null&&J.deferredDupExpressions&&O.$.deferredDupExpressions.length>0){Ft(O,t,K);let ue=O.$.deferredDupExpressions[0];if(V(ue)&&((ce=ue.$)!=null&&ce.variableName))return Pe(ue.$.variableName,ue.$.env)}return z}).join(", "),G=Z(D,n);if(q&&((bl=e.$)!=null&&bl.type)){let O=`(${G}){ .data = { ${ee} } }`,z=wt(e.$.type,q,n);return n.emitter.emitLine(`${t}${z} = ${O};`),q}else return`(${G}){ .data = { ${ee} } }`}}else if(v(e,A.recur)){let N=(wl=e.$)==null?void 0:wl.runtimeArgExprsInOrder;if(N){let D=n,q=N.map(K=>{var G,O;let ee=P(K,t,n);if((G=K.$)!=null&&G.deferredDupExpressions&&K.$.deferredDupExpressions.length>0){Ft(K,t,D);let z=K.$.deferredDupExpressions[0];if(V(z)&&((O=z.$)!=null&&O.variableName))return Pe(z.$.variableName,z.$.env)}return ee}).join(", ");return`${n.currentFunctionName}(${q})`}else return`// Error: No arguments for recur call ${T(e)}
169
+ `}else if(v(e,C.sizeof,1)){let N=e.args[0];return`sizeof(${P(N,t,n)})`}else if(v(e,C.__yo_decr_rc)){let N=e.args[0];return`__yo_decr_rc(${P(N,t,n)})`}else if(v(e,Zr)){let N=((Fl=e.$)==null?void 0:Fl.runtimeArgExprsInOrder)||e.args;if(N){let D=n,q=N.map(K=>{var G,O;let ee=P(K,t,n);if((G=K.$)!=null&&G.deferredDupExpressions&&K.$.deferredDupExpressions.length>0){Ft(K,t,D);let z=K.$.deferredDupExpressions[0];if(V(z)&&((O=z.$)!=null&&O.variableName))return Pe(z.$.variableName,z.$.env)}return ee});return cs(e.func.token.value,q,e,n)}}else{if(v(e,A.while))return hm(e,t,n);if(v(e,"->",2)&&V(e.args[0])&&v(e.args[0],A.fn)){let N=(Vl=e.$)==null?void 0:Vl.value;return xe(N)?Bn(N,n):"// Error: Anonymous function missing function value"}else if(v(e,C.consume)){let N=e.args[0],D=P(N,t,n),q=(xl=N.$)==null?void 0:xl.type;if(q&&D){let K=Xr(D,q,n);K&&n.emitter.emitLine(`${t}${K};`)}return D}else{if(v(e,C.compt_expect_error)||v(e,C.compt_assert)||v(e,C.__yo_var_print_info)||v(e,C.__yo_var_is_owning_the_rc_value)||v(e,C.__yo_var_has_other_aliases))return"";if(v(e,A.open)){if((Ml=e.$)!=null&&Ml.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let N=e.args[0];if(!N||!((Ll=N.$)!=null&&Ll.type))return"// Error: open expression has no argument or type";let D=N.$.type,q=N.$.value;if(we(D)&&q===void 0){let K=P(N,t,n),ee=e.$.runtimeDestructurings;for(let G of ee){let O=Z(G.type,n),z=G.variableName,J=Te(G.label);n.emitter.emitLine(`${t}${O} ${z} = ${K}.${J};`)}}}return""}else{let N=(Sl=e.func.$)==null?void 0:Sl.type,D=(Al=e.func.$)==null?void 0:Al.value;if(me(N)){let q=(Il=e.$)==null?void 0:Il.runtimeArgExprsInOrder;if(q){let K=!1;if(V(e.func)&&v(e.func,".",2)){let O=e.func.args[0],z=(Nl=O==null?void 0:O.$)==null?void 0:Nl.type;z&&Re(z)&&(K=!0)}let ee=q.map((O,z)=>{var J,ce,ue,de,fe,Le,Ye,Et,St;if((J=O.$)!=null&&J.variableName&&((ce=O.$)!=null&&ce.type)){let Vt=n,Zt=Vt.currentClosureCaptures&&Vt.currentClosureCaptures.includes(O.$.variableName)&&Q(O)&&O.$.env&&Vt.currentClosureCaptureFrameLevel!==void 0&&Jr(O.token.value,O.$.env,Vt.currentClosureCaptureFrameLevel),xt=P(O,t,n),fn=Vt.inStateMachine&&xt.startsWith("sm->");if(xt&&xt!==O.$.variableName&&!Zt&&!fn){let rn=Pe(O.$.variableName,O.$.env);if(xt!==rn){let Xt=wt(O.$.type,O.$.variableName,n);n.emitter.emitLine(`${t}${Xt} = ${xt};`)}}let Jt=O.$.variableName;if((ue=O.$)!=null&&ue.deferredDupExpressions&&O.$.deferredDupExpressions.length>0){let rn=new Set;(de=O.$)!=null&&de.variableName&&rn.add(Pe(O.$.variableName,O.$.env)),xt&&rn.add(xt),Q(O)&&rn.add(Pe(O.token.value,O.$.env));let Xt=O.$.deferredDupExpressions.find(_r=>{var ai;let co=hp(_r);return co?rn.has(Pe(co,(ai=_r.$)==null?void 0:ai.env)):!1});Xt&&(Ft(O,t,Vt),V(Xt)&&((fe=Xt.$)!=null&&fe.variableName)&&(Jt=Pe(Xt.$.variableName,Xt.$.env)))}if(K&&z===0){if(V(e.func)&&v(e.func,".",2)){let Xt=e.func.args[0],_r=(Le=Xt==null?void 0:Xt.$)==null?void 0:Le.type,co=e.func.args[1];if(Q(co)&&Re(_r)){let ai=co.token.value;if(_r.module.fields.find(cd=>cd.label===ai))return Te(Jt)}}let rn=(Ye=O.$)==null?void 0:Ye.type;return rn&&ze(rn)?`${Te(Jt)}->data`:`(${Te(Jt)}).data`}else return Zt||fn?xt:Te(Jt)}else if(K&&z===0){let Vt=P(O,t,n);if(V(e.func)&&v(e.func,".",2)){let xt=e.func.args[0],fn=(Et=xt==null?void 0:xt.$)==null?void 0:Et.type,Jt=e.func.args[1];if(Q(Jt)&&Re(fn)){let rn=Jt.token.value;if(fn.module.fields.find(_r=>_r.label===rn))return Vt}}let Zt=(St=O.$)==null?void 0:St.type;return Zt&&ze(Zt)?`(${Vt})->data`:`(${Vt}).data`}else return P(O,t,n)}),G=ee.join(", ");if(N.isExtern==="yo"&&N.externName){let O=N.externName;return Zr.includes(O)?cs(O,ee,e,n):O==="__yo_thread_spawn"?cm(e,t,n):O==="__yo_worker_spawn"?fm(e,t,n):De(N.return.type)?(n.emitter.emitLine(`${t}${O}(${G});`),(Dl=e.$)!=null&&Dl.deferredDropExpressions&&Qt(e,t,n),""):`${O}(${G})`}if(xe(D)){let O=Uo(D);if(O)return cs(O,ee,e,n);let z=D.specializedType??D.type,J=(Ol=n.functions[D.funcId])==null?void 0:Ol.cName;if(J){if(De(z.return.type))return n.emitter.emitLine(`${t}${J}(${G});`),(Bl=e.$)!=null&&Bl.deferredDropExpressions&&Qt(e,t,n),"";{let ce=(Ul=e.$)==null?void 0:Ul.variableName;if(ce){let ue=((Rl=D.specializedType)==null?void 0:Rl.return.type)??z.return.type,de=(Pl=e.$)==null?void 0:Pl.type,fe=de&&je(de),Le=ue&&je(ue),Ye;if(fe&&Le){let Et=D.body;if(Et&&v(Et,"begin")){let St=Et.args;if(St.length>0){let Vt=St[St.length-1];v(Vt,C.async)&&(Et=Vt)}}if(Et&&v(Et,C.async)&&((zl=Et.$)!=null&&zl.asyncStateMachineStructName)){let St=Et.$.asyncStateMachineStructName;Ye=`${St}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(ce,St)}else Ye=Z(ue,n)}else Ye=Z(ue??de,n);return n.emitter.emitLine(`${t}${Ye} ${ce} = ${J}(${G});`),(Gl=e.$)!=null&&Gl.deferredDropExpressions&&Qt(e,t,n),ce}else return`// Error: Regular function call returns ${Z(((ql=D.specializedType)==null?void 0:ql.return.type)??z.return.type,n)} but no temp variable assigned`}}}else{let O=n.externFunctions[N.id];if(O){let z=O.cName;return(Yl=e.$)!=null&&Yl.deferredDropExpressions&&Qt(e,t,n),`${z}(${G})`}else{let z=P(e.func,t,n);if(De(N.return.type))return n.emitter.emitLine(`${t}${z}(${G});`),(jl=e.$)!=null&&jl.deferredDropExpressions&&Qt(e,t,n),"";{let J=(Wl=e.$)==null?void 0:Wl.variableName;if(J){let ce=N.return.type,ue=(Hl=e.$)==null?void 0:Hl.type,de=ue&&ce&&je(ue)&&je(ce)?ce:ue??ce;return n.emitter.emitLine(`${t}${Z(de,n)} ${J} = ${z}(${G});`),(Kl=e.$)!=null&&Kl.deferredDropExpressions&&Qt(e,t,n),J}else return`// Error: Function parameter call returns ${Z(N.return.type,n)} but no temp variable assigned`}}}}}else if(N&&vn(N)){let q=N,K=sn(q),ee=Re(q);{let G=K.isFn.callType,O=(Ql=e.$)==null?void 0:Ql.runtimeArgExprsInOrder;if(O){let z=n;for(let fe of O)if((Zl=fe.$)!=null&&Zl.variableName&&((Jl=fe.$)!=null&&Jl.type)){let Le=z.currentClosureCaptures&&z.currentClosureCaptures.includes(fe.$.variableName)&&Q(fe)&&fe.$.env&&z.currentClosureCaptureFrameLevel!==void 0&&Jr(fe.token.value,fe.$.env,z.currentClosureCaptureFrameLevel),Ye=P(fe,t,n),Et=z.inStateMachine&&Ye.startsWith("sm->");if(Ye&&Ye!==fe.$.variableName&&!Le&&!Et){let St=wt(fe.$.type,fe.$.variableName,n);n.emitter.emitLine(`${t}${St} = ${Ye};`)}}let J=P(e.func,t,n),ce=O.map(fe=>{var Le,Ye,Et,St;if((Le=fe.$)!=null&&Le.variableName&&((Ye=fe.$)!=null&&Ye.type)){if(z.currentClosureCaptures&&z.currentClosureCaptures.includes(fe.$.variableName)&&Q(fe)&&fe.$.env&&z.currentClosureCaptureFrameLevel!==void 0&&Jr(fe.token.value,fe.$.env,z.currentClosureCaptureFrameLevel))return P(fe,t,n);{let Zt=P(fe,t,n),xt=z.inStateMachine&&Zt.startsWith("sm->"),fn=fe.$.variableName;if((Et=fe.$)!=null&&Et.deferredDupExpressions&&fe.$.deferredDupExpressions.length>0){Ft(fe,t,z);let Jt=fe.$.deferredDupExpressions[0];V(Jt)&&((St=Jt.$)!=null&&St.variableName)&&(fn=Pe(Jt.$.variableName,Jt.$.env))}return xt?Zt:fn}}else return P(fe,t,n)}),ue;if(ee){let fe=[`(${J}).data`,...ce];ue=`(${J}).vtable->call(${fe.join(", ")})`}else{let fe;if(q.tag==="SomeType"){let Ye=q;Ye.resolvedConcreteType&&(fe=Ye.resolvedConcreteType.id)}let Le=fe?n.implClosureCallMap.get(fe):void 0;if(Le){let Ye=[`&(${J})`,...ce];ue=`${Le.functionCName}(${Ye.join(", ")})`}else{let Ye=[`(${J}).data`,...ce];ue=`(${J}).call(${Ye.join(", ")})`}}let de=G.return.type;if(De(de))return n.emitter.emitLine(`${t}${ue};`),(Xl=e.$)!=null&&Xl.deferredDropExpressions&&Qt(e,t,n),"";{let fe=(eu=e.$)==null?void 0:eu.variableName;return fe?(n.emitter.emitLine(`${t}${Z(de,n)} ${fe} = ${ue};`),(tu=e.$)!=null&&tu.deferredDropExpressions&&Qt(e,t,n),fe):`// Error: Closure call returns ${Z(de,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(j(D))if(we(D.value)){let q=D.value,K=(nu=e.$)==null?void 0:nu.runtimeArgExprsInOrder,ee=(ru=n.types[q.id])==null?void 0:ru.cName,G=q.fields.map(z=>z.label),O=(ou=e.$)==null?void 0:ou.variableName;if(K&&ee&&G.length===K.length){if(q.isNewtype&&q.fields.length===1){let z=P(K[0],t,n),J=`((${ee})(${z}))`;if(O&&((iu=e.$)!=null&&iu.type)){let ce=wt(e.$.type,O,n);return n.emitter.emitLine(`${t}${ce} = ${J};`),O}else return J}if(q.isReferenceSemantics){let z=n,J=K.map(de=>{var Le,Ye,Et,St;let fe=P(de,t,n);if((Le=de.$)!=null&&Le.deferredDupExpressions&&de.$.deferredDupExpressions.length>0){if((Ye=de.$)!=null&&Ye.variableName&&((Et=de.$)!=null&&Et.type)){let Zt=Pe(de.$.variableName,de.$.env);if(fe!==Zt){let xt=de.$.type,fn=Z(xt,n);n.emitter.emitLine(`${t}${fn} ${Zt} = ${fe};`)}}Ft(de,t,z);let Vt=de.$.deferredDupExpressions[0];if(V(Vt)&&((St=Vt.$)!=null&&St.variableName))return Pe(Vt.$.variableName,Vt.$.env)}return fe}).join(", "),ue=`${`__yo_new_${ee}`}(${J})`;if(O&&((au=e.$)!=null&&au.type)){let de=wt(e.$.type,O,n);return n.emitter.emitLine(`${t}${de} = ${ue};`),O}else return ue}else{let z=n,J=K.map((ue,de)=>{var Et,St,Vt,Zt;let fe=P(ue,t,n),Le=Ne(q)?`_${de}`:Te(G[de],q.isExtern==="c"),Ye=fe;if((Et=ue.$)!=null&&Et.deferredDupExpressions&&ue.$.deferredDupExpressions.length>0){if((St=ue.$)!=null&&St.variableName&&((Vt=ue.$)!=null&&Vt.type)){let fn=Pe(ue.$.variableName,ue.$.env),Jt=ue.$.type,rn=Z(Jt,n);fe!==fn&&n.emitter.emitLine(`${t}${rn} ${fn} = ${fe};`)}Ft(ue,t,z);let xt=ue.$.deferredDupExpressions[0];V(xt)&&((Zt=xt.$)!=null&&Zt.variableName)&&(Ye=Pe(xt.$.variableName,xt.$.env))}return`.${Le} = `+Ye}).join(", "),ce=`(${ee}){ ${J} }`;if(O&&((su=e.$)!=null&&su.type)){let ue=wt(e.$.type,O,n);return n.emitter.emitLine(`${t}${ue} = ${ce};`),O}else return ce}}}else{if(vn(D.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(pt(D.value)){let q=(lu=e.$)==null?void 0:lu.variableName,K=e.args[0];if(K&&V(K)&&v(K,":",2)){let ee=K.args[0],G=K.args[1],O=(uu=n.types[D.value.id])==null?void 0:uu.cName;if(O&&Q(ee)&&G){let z=n,J=ee.token.value,ce=Pe(J,(pu=ee.$)==null?void 0:pu.env),de=P(G,t,n);if((cu=G.$)!=null&&cu.deferredDupExpressions&&G.$.deferredDupExpressions.length>0){Ft(G,t,z);let Le=G.$.deferredDupExpressions[0];V(Le)&&((fu=Le.$)!=null&&fu.variableName)&&(de=Pe(Le.$.variableName,Le.$.env))}let fe=`(${O}){ .${ce} = ${de} }`;if(q&&((du=e.$)!=null&&du.type)){let Le=wt(e.$.type,q,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),q}else return fe}}}else if(Ve(D.value)){let q=D.value,K=(mu=e.$)==null?void 0:mu.runtimeArgExprsInOrder,ee=(yu=n.types[q.id])==null?void 0:yu.cName,G=(_u=e.$)==null?void 0:_u.variableName;if(q.selectedVariantName&&K&&ee){if(un(q)){let ue=q.selectedVariantName,de=q.variants.find(fe=>fe.name===ue);if(de){if(!de.fields||de.fields.length===0){let fe="NULL";if(G&&((gu=e.$)!=null&&gu.type)){let Le=wt(e.$.type,G,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),G}else return fe}else if(de.fields.length===1){let fe=P(K[0],t,n);if(G&&((hu=e.$)!=null&&hu.type)){let Le=wt(e.$.type,G,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),G}else return fe}}}if(lr(q)){let ue=q.selectedVariantName,de=bn(q,ue,n);if(G&&((vu=e.$)!=null&&vu.type)){let fe=wt(e.$.type,G,n);return n.emitter.emitLine(`${t}${fe} = ${de};`),G}else return de}let J=q.selectedVariantName,ce=q.variants.find(ue=>ue.name===J);if(ce){let ue=(($u=ce.fields)==null?void 0:$u.filter(Ye=>!De(Ye.type)))||[],de=n,fe=K.map((Ye,Et)=>{var St,Vt,Zt;if(ce.fields){let xt=ce.fields[Et];if(xt&&!De(xt.type)){let fn=P(Ye,t,n),Jt=Pe(xt.label,(St=Ye.$)==null?void 0:St.env),rn=fn;if((Vt=Ye.$)!=null&&Vt.deferredDupExpressions&&Ye.$.deferredDupExpressions.length>0){Ft(Ye,t,de);let Xt=Ye.$.deferredDupExpressions[0];V(Xt)&&((Zt=Xt.$)!=null&&Zt.variableName)&&(rn=Pe(Xt.$.variableName,Xt.$.env))}return`.${Jt} = `+rn}return""}else return""}).filter(Ye=>Ye).join(", "),Le=ue.length>0?`(${ee}){ .tag = ${bn(q,J,n)}, .data = { .${J} = { ${fe} } } }`:`(${ee}){ .tag = ${bn(q,J,n)} }`;if(G&&((Tu=e.$)!=null&&Tu.type)){let Ye=wt(e.$.type,G,n);return n.emitter.emitLine(`${t}${Ye} = ${Le};`),G}else return Le}}}}else if(Oe(N)){let q=e.args[0];if(q&&V(q)&&v(q,":")){let G=P(e.func,t,n),O=P(q.args[0],t,n),z=P(q.args[1],t,n),J=`Slice_${Te(Z(N.childType,n))}`;return n.sliceStructTypes.has(J)||n.sliceStructTypes.set(J,{childType:Z(N.childType,n)}),`(${J}){ .data = &${G}.data[${O}], .length = (${z}) - (${O}) }`}else if(q&&Q(q)&&q.token.value===":"){let G=P(e.func,t,n),O=N,z=O.childType,J=`Slice_${Te(Z(z,n))}`;return n.sliceStructTypes.has(J)||n.sliceStructTypes.set(J,{childType:Z(z,n)}),tt(O.length)?`(${J}){ .data = &${G}.data[0], .length = ${O.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let K=P(e.func,t,n),ee=P(q,t,n);return`${K}.data[${ee}]`}else if(ft(N)){let q=e.args[0];if(q&&V(q)&&v(q,":")){let G=P(e.func,t,n),O=P(q.args[0],t,n),z=P(q.args[1],t,n),J=`Slice_${Te(Z(N.childType,n))}`;return n.sliceStructTypes.has(J)||n.sliceStructTypes.set(J,{childType:Z(N.childType,n)}),`(${J}){ .data = &${G}.data[${O}], .length = (${z}) - (${O}) }`}else if(q&&Q(q)&&q.token.value===":"){let G=P(e.func,t,n),O=`Slice_${Te(Z(N.childType,n))}`;return n.sliceStructTypes.has(O)||n.sliceStructTypes.set(O,{childType:Z(N.childType,n)}),`(${O}){ .data = ${G}.data, .length = ${G}.length }`}let K=P(e.func,t,n),ee=P(q,t,n);return`${K}.data[${ee}]`}else if(N&&ze(N)&&ft(N.childType)){let q=P(e.func,t,n),K=P(e.args[0],t,n);return`${q}.data[${K}]`}}}}}}if(V(e))throw new Error(`Unhandled function call: ${T(e)}`);return`// Failed to transpile ${T(e)}`}function Xr(e,t,n){let r=X(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Ge(r))return"";if(Oe(r)){let o=r.length;if(!tt(o))return"/* Error: array has non-constant length */";let i=n.emitter;i.emitLine(`for (size_t i = 0; i < ${o.value}; i++) {`);let a=Xr(`(${e}).data[i]`,r.childType,n);return a&&i.emitLine(` ${a};`),i.emitLine("}"),""}if(Ne(r)){let o=n.emitter;for(let i=0;i<r.fields.length;i++){let a=r.fields[i].type,s=X(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Ge(s)){let l=Xr(`(${e})._${i}`,a,n);l&&o.emitLine(`${l};`)}}return""}if(Re(r))return`__yo_decr_rc((void*)(${e}).data)`;if(vt(r))return`__yo_decr_rc((void*)(${e}))`;if(Ct(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(we(r)||Ve(r)){let o=Ta(r,n);if(o)return`${o}(${e})`}return""}function qo(e,t,n){let r=X(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(Oe(r)){let o=r.length;if(!tt(o))return"/* Error: array has non-constant length */";let i=`temp_dup_${ct("")}`,a=`i_${ct("")}`,s=Z(r,n),l=n.emitter;l.emitLine(`${s} ${i} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${o.value}; ${a}++) {`);let u=qo(`${i}.data[${a}]`,r.childType,n);return l.emitLine(` ${i}.data[${a}] = ${u};`),l.emitLine("}"),i}if(Ne(r)){let o=n.emitter,i=`temp_dup_tuple_${ct("")}`,a=Z(r,n);o.emitLine(`${a} ${i} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=X(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Ge(u)){let d=qo(`${i}._${s}`,l,n);o.emitLine(`${i}._${s} = ${d};`)}}return i}if(Re(r))return`((${Z(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(vt(r))return`((${Z(r,n)})__yo_incr_rc((void*)(${e})))`;if(Ct(r))return`((${Z(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(we(r)||Ve(r)){let o=Po(r,n);if(o)return`${o}(${e})`}return e}function Ta(e,t){var n;if(we(e)||Ve(e)||Re(e)||X(e)||Ct(e)){let r=e.module.fields.find(o=>o.label===C.___drop[0]);if(r&&r.assignedValue&&xe(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Po(e,t){var n;if(we(e)||Ve(e)||Re(e)||X(e)||Ct(e)){let r=e.module.fields.find(o=>o.label===C.___dup[0]);if(r&&r.assignedValue&&xe(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function am(e,t,n){var _,g,$,k,b,E,w,F,L,S;let r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let o=(_=e.$)==null?void 0:_.type;if(!o||!je(o))return"/* Error: async block must have Future type */";let i=Kt(o);if(!i)return"/* Error: Could not extract Future module type */";let a=((g=e.$)==null?void 0:g.variableName)||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,d=`${a}_state_dispose`;n.types[o.id]={type:o,cName:s};let c=($=e.$)==null?void 0:$.awaitAnalysis;if(!c)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=i.isFuture.outputType,m=Z(f,n),y=n.emitter;if(y.emitDeclarationLine(`void ${d}(void* sm_ptr); // Dispose function for state machine`),y.emitDeclarationLine(""),y.emitDeclarationLine(`void ${l}(${s}* sm);`),y.emitDeclarationLine(""),(k=e.$)!=null&&k.captureType){let B=e.$.captureType,R=Object.values(n.types).find(W=>W.type===B),Y=R?R.cName:`async_capture_${B.id}`;y.emitDeclarationLine(`${s}* ${u}(${Y} __capture);`)}else y.emitDeclarationLine(`${s}* ${u}();`);y.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:d,futureType:o,futureModuleType:i,resultType:f,resultTypeCName:m,captureType:(b=e.$)==null?void 0:b.captureType,analysis:c});let h=(E=e.$)==null?void 0:E.captureType;if(h){let B=Object.values(n.types).find(pe=>pe.type===h),R=B?B.cName:`async_capture_${h.id}`,Y=n,W=Y.currentClosureCaptures!==void 0||Y.inStateMachine!==void 0,H=h.fields.map(pe=>{var ke,Ae;let _e;if(!W&&((ke=e.$)!=null&&ke.deferredDupExpressions))for(let ge of e.$.deferredDupExpressions){let $e;if(V(ge)&&(ge.args.length>0&&Q(ge.args[0])?$e=ge.args[0].token.value:ge.args.length===0&&V(ge.func)&&v(ge.func,".")&&ge.func.args.length>=2&&Q(ge.func.args[0])&&($e=ge.func.args[0].token.value)),$e===pe.label){_e=ge;break}}if(_e)return(Ae=_e.$)!=null&&Ae.variableName?(P(_e,t,n),`.${pe.label} = ${_e.$.variableName}`):`.${pe.label} = ${P(_e,t,n)}`;let Ie={tag:"Atom",token:pe.exprs.expr.token,$:pe.exprs.expr.$};return`.${pe.label} = ${Ea(Ie,n)}`}).join(", "),se=`(${R}){${H}}`,ye=((w=e.$)==null?void 0:w.variableName)||"async_result",oe=`${u}(${se})`;if(ye&&((F=e.$)!=null&&F.type)){let pe=wt(e.$.type,ye,n);return n.emitter.emitLine(`${t}${pe} = ${oe};`),ye}else return oe}else{let B=((L=e.$)==null?void 0:L.variableName)||"async_result",R=`${u}()`;if(B&&((S=e.$)!=null&&S.type)){let Y=wt(e.$.type,B,n);return n.emitter.emitLine(`${t}${Y} = ${R};`),B}else return R}}function sm(e,t){var c;let n=t.emitter,{asyncBlockId:r,structName:o,resultType:i,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${x(i)})`),n.emitDeclarationLine(`struct ${o}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(` _Atomic int state; // Current state (0 = initial, ${l.awaitPoints.length+1} = done, -1 = completed)`),De(i)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${x(i)}`),n.emitDeclarationLine(" _Atomic(void (*)(void*)) continuation_fn; // Resume function of awaiting task"),n.emitDeclarationLine(" _Atomic(void*) continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),s){let f=Object.values(t.types).find(y=>y.type===s),m=f?f.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${m} __capture;`),n.emitDeclarationLine("")}if(l.capturedVariables.length>0){n.emitDeclarationLine(" // Local variables");for(let f of l.capturedVariables){let m=Z(f.type,t),y=$a(f.id,"local");n.emitDeclarationLine(` ${m} ${y}; // ${f.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let f of l.awaitPoints)if(!De(f.resultType)){let m=f.resultType;if(f.futureType){let h=Kt(f.futureType);h&&(m=h.isFuture.outputType)}let y=Z(m,t);n.emitDeclarationLine(` ${y} await_result_${f.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let f=l.awaitPoints.filter(m=>m.futureVariableId===void 0);if(f.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let m of f){let y=m.expr;if(y.tag!=="FuncCall")continue;let h=y.args[0],_=(c=h==null?void 0:h.$)==null?void 0:c.type;if(!_)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let g=Z(_,t);n.emitDeclarationLine(` ${g} await_future_${m.index};`)}n.emitDeclarationLine("")}}let u=l.awaitPoints.filter(f=>f.isInsideCond);if(u.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let f of u)n.emitDeclarationLine(` int cond_branch_${f.index}; // Which branch was taken in cond with await ${f.index}`);n.emitDeclarationLine("")}let d=l.awaitPoints.filter(f=>f.isInsideWhile);if(d.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");for(let f of d)n.emitDeclarationLine(` _Bool while_loop_${f.index}_active; // Whether while loop ${f.index} should continue`);n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function lm(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,o=new Map;for(let u of t)r.set(u.structName,new Set),o.set(u.structName,0);for(let u of t){let d=c=>{let f=r.get(c);f.has(u.structName)||(f.add(u.structName),o.set(u.structName,(o.get(u.structName)??0)+1))};for(let c of u.analysis.capturedVariables){let f;try{f=Z(c.type,e)}catch{continue}let m=n.get(f);m&&m.structName!==u.structName&&d(m.structName)}for(let c of u.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let f=c.expr;if(f.tag!=="FuncCall")continue;let m=f.args[0],y=(l=m==null?void 0:m.$)==null?void 0:l.type;if(!y)continue;let h;try{h=Z(y,e)}catch{continue}let _=n.get(h);_&&_.structName!==u.structName&&d(_.structName)}}let i=[];for(let[u,d]of o.entries())d===0&&i.push(u);let a=[];for(;i.length>0;){let u=i.shift();a.push(u);let d=r.get(u);if(d)for(let c of d){let f=(o.get(c)??0)-1;o.set(c,f),f===0&&i.push(c)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)sm({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function um(e,t,n,r,o,i,a){var l;let s=a.emitter;if(s.emitLine(`// Dispose function for async block ${e} state machine`),s.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),s.emitLine(`void ${n}(void* sm_ptr) {`),s.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),s.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),s.emitLine(""),o&&Ge(o)){let u=Object.values(a.types).find(d=>d.type===o);if(!u)s.emitLine(" /* Error: capture struct type not found in context */");else{let d=u.cName,c=o.module.fields.find(f=>f.label===C.___drop[0]);if(c&&c.assignedValue&&xe(c.assignedValue)){let f=(l=a.functions[c.assignedValue.funcId])==null?void 0:l.cName;f&&(s.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),s.emitLine(` ${f}(sm->__capture);`))}else s.emitLine(` /* Warning: ___drop function not found for capture struct ${d} */`)}}if(s.emitLine(""),!De(r)&&Ge(r)){let u=Z(r,a);s.emitLine(" // Drop result field if it was set (state == -1 means completed)"),s.emitLine(" int final_state = atomic_load_explicit(&sm->state, memory_order_acquire);"),s.emitLine(" if (final_state == -1) {"),s.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let d=Ta(r,a);d?s.emitLine(` ${d}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${u} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function pm(e,t,n,r,o,i,a,s,l,u){let d=u.emitter;if(l){let c=Object.values(u.types).find(m=>m.type===l),f=c?c.cName:`async_capture_${l.id}`;d.emitLine(`${t}* ${r}(${f} __capture) {`)}else d.emitLine(`${t}* ${r}() {`);d.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),d.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),d.emitLine(` memset(sm, 0, sizeof(${t}));`),d.emitLine(""),d.emitLine(" // Initialize reference counting header"),d.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),d.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),d.emitLine(" sm->header.gc_flags = 0;"),d.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),d.emitLine(" sm->header.gc_next = NULL;"),d.emitLine(" sm->header.gc_prev = NULL;"),d.emitLine(` sm->header.dispose_fn = (void(*)(void*))${o};`),d.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),d.emitLine(""),d.emitLine(" atomic_init(&sm->state, 0);"),d.emitLine(" atomic_init(&sm->continuation_fn, NULL);"),d.emitLine(" atomic_init(&sm->continuation_sm, NULL);"),d.emitLine(""),l&&(d.emitLine(" // Initialize captured variables"),d.emitLine(" sm->__capture = __capture;"),d.emitLine("")),d.emitLine(" // Initialize result (will be set when async block completes)"),De(a)?d.emitLine(" // Result is unit type, no initialization needed"):d.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),d.emitLine(""),d.emitLine(" // Eager execution: start running immediately (C#/C++ style)"),d.emitLine(' // Before running, increment refcount for the "running task" reference'),d.emitLine(" // This ensures the task stays alive until completion, even if user drops early"),d.emitLine(" __yo_incr_rc((void*)sm); // refcount: 1 -> 2"),d.emitLine(` GC_DEBUG("AsyncBlock ${t}: Eager increment ptr=%p RC=2\\n", (void*)sm);`),d.emitLine(` ${n}(sm);`),d.emitLine(""),d.emitLine(" return sm;"),d.emitLine("}"),d.emitLine("")}function cm(e,t,n){var h,_,g,$,k;let r=(h=e.$)==null?void 0:h.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let o=r[0],i=(_=o.$)==null?void 0:_.type;if(!i)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(X(i)){let b=i;b.resolvedConcreteType&&(a=b.resolvedConcreteType.id,s=b.resolvedConcreteType)}else we(i)&&(a=i.id,s=i);if(!a||!s)return"/* Error: __yo_thread_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_thread_spawn could not find closure function for type ${a} */`;let u=l.functionCName,d=Z(s,n),c=P(o,t,n),f=(g=o.$)!=null&&g.variableName?Pe(o.$.variableName,o.$.env):c,m=`_thread_closure_data_${ct((($=e.$)==null?void 0:$.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${d}* ${m} = (${d}*)__yo_malloc(sizeof(${d}));`),n.emitter.emitLine(`${t}*${m} = ${f};`);let y=(k=e.$)==null?void 0:k.variableName;return y?(n.emitter.emitLine(`${t}__yo_thread_t ${y} = __yo_thread_spawn(${u}, ${m});`),y):`__yo_thread_spawn(${u}, ${m})`}function fm(e,t,n){var y,h,_,g;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let o=r[0],i=(h=o.$)==null?void 0:h.type;if(!i)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(X(i)){let $=i;$.resolvedConcreteType&&(a=$.resolvedConcreteType.id,s=$.resolvedConcreteType)}else we(i)&&(a=i.id,s=i);if(!a||!s)return"/* Error: __yo_worker_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_worker_spawn could not find closure function for type ${a} */`;let u=l.functionCName,d=Z(s,n),c=P(o,t,n),f=(_=o.$)!=null&&_.variableName?Pe(o.$.variableName,o.$.env):c,m=`_worker_closure_data_${ct(((g=e.$)==null?void 0:g.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${d}* ${m} = (${d}*)__yo_malloc(sizeof(${d}));`),n.emitter.emitLine(`${t}*${m} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${m});`),""}function dm(e,t,n){var y,h,_,g,$,k,b;if(!((y=e.$)!=null&&y.dynCallModuleValues)||e.$.dynCallModuleValues.length===0)return"/* Error: dyn() call missing module values */";let r=((_=(h=e.$)==null?void 0:h.runtimeArgExprsInOrder)==null?void 0:_[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let o=e.$.type;if(!Re(o))return"/* Error: dyn() result type is not DynType */";let i=(g=r.$)==null?void 0:g.type;if(!i)return"/* Error: dyn() value has no type */";let a=e.$.dynCallModuleValues;if(!a||a.length===0)return"/* Error: dyn() call missing module values */";if(!vt(i)&&!$n(i))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=$n(i)?i.fields[0].type:i,l=(($=n.types[o.id])==null?void 0:$.cName)||`yo_dyn_${o.id}`,d=`${(()=>{var L,S;let E=(L=n.types[s.id])==null?void 0:L.cName;if(E)return E;let w=sn(s);return(w?(S=n.types[w.id])==null?void 0:S.cName:void 0)||`unknown_${s.id}`})()}_${l}`;n.dynImpls.set(d,{dynType:o,concreteType:s,dataType:i,moduleValues:a});let c=P(r,t,n);if((k=r.$)!=null&&k.variableName&&c!==r.$.variableName){let E=wt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${E} = ${c};`),c=r.$.variableName}let f=(b=e.$)==null?void 0:b.variableName;if(!f)return"/* Error: dyn() expression missing temp variable name */";let m=`yo_vtable_${d}`;return n.emitter.emitLine(`${t}${l} ${f} = {`),n.emitter.emitLine(`${t} .data = ${c},`),n.emitter.emitLine(`${t} .vtable = &${m}`),n.emitter.emitLine(`${t}};`),f}function Ea(e,t){var i,a,s,l,u,d,c,f,m,y,h,_,g,$,k,b,E,w,F;let n=t;if(e.token.value==="continue")return n.currentContinueLabel?`goto ${n.currentContinueLabel}`:"continue";if(e.token.value==="break")return"break";if(e.token.value==="return")return"return";if((i=e.$)!=null&&i.type&&De(e.$.type))return"";if(n.inStateMachine&&n.stateMachineVariables){let L=e.token.value;if((a=n.localShadowedVariables)!=null&&a.has(L))return L;let S=!1;if((s=e.$)!=null&&s.env){let B=he(e.$.env,L);if(B.length>0){let R=B[B.length-1],Y=R.isOwningTheSameRcValueAs?R.isOwningTheSameRcValueAs.id:R.id,W=n.stateMachineVariables.get(Y);if(W){let H=W.kind==="outer"?`__capture.${L}`:`var_${Y}`;return S=!0,`sm->${H}`}}}if(!S){for(let[B,R]of n.stateMachineVariables)if(R.name===L){let Y=R.kind==="outer"?`__capture.${L}`:`var_${B}`;return S=!0,`sm->${Y}`}}if((l=e.$)!=null&&l.env){let B=he(e.$.env,L);if(B.length>0){let R=B[B.length-1];if(R.isOwningTheSameRcValueAs){let Y=R.isOwningTheSameRcValueAs.name,W=R.isOwningTheSameRcValueAs.id;for(let[H,se]of n.stateMachineVariables)if(se.name===Y||H===W)return`sm->${se.kind==="outer"?`__capture.${Y}`:`var_${H}`}`}}}if((u=e.$)!=null&&u.variableName)return Pe(e.$.variableName,e.$.env)}if((d=e.$)!=null&&d.variableName){if((c=e.$)!=null&&c.env&&((f=e.$)!=null&&f.value)&&!Be(e.$.value)){let L=he(e.$.env,e.$.variableName);if(L.length>0&&L[L.length-1].isCompileTimeOnly)return Bn(e.$.value,t,e)}if(!(n.currentClosureCaptures&&n.currentClosureCaptures.includes(e.token.value)&&((m=e.$)!=null&&m.env)&&n.currentClosureCaptureFrameLevel!==void 0&&Jr(e.token.value,e.$.env,n.currentClosureCaptureFrameLevel)))return Pe(e.$.variableName,(y=e.$)==null?void 0:y.env)}if((h=e.$)!=null&&h.value&&!Be(e.$.value))return Bn(e.$.value,t,e);let r=(_=e.$)!=null&&_.env&&n.currentClosureCaptureFrameLevel!==void 0?Jr(e.token.value,e.$.env,n.currentClosureCaptureFrameLevel):!1;if(n.currentClosureCaptures&&n.currentClosureCaptures.includes(e.token.value)&&n.currentClosureCaptureFrameLevel!==void 0&&(!((g=e.$)!=null&&g.env)||r)){let L=n.currentClosureCaptureTypeCName;return L?`((${L}*)closure_context)->${Pe(e.token.value,($=e.$)==null?void 0:$.env)}`:`closure_context->${Pe(e.token.value,(k=e.$)==null?void 0:k.env)}`}if(n.currentFunctionName&&!n.currentClosureCaptures){let L=Object.values(n.functions).find(S=>S.cName===n.currentFunctionName);if(L&&L.value.type.isClosure){let S=Object.values(n.types).find(B=>me(B.type)&&B.type.isClosure&&B.type===L.value.type);if(S)return`((${`${S.cName}_capture`}*)closure_context->data)->${Pe(e.token.value,(b=e.$)==null?void 0:b.env)}`}}if((E=e.$)!=null&&E.env){let L=he(e.$.env,e.token.value);if(L.length>0){let S=L[L.length-1];if(S.value&&xe(S.value)){let B=(w=t.functions[S.value.funcId])==null?void 0:w.cName;if(B)return B}else if(me(S.type)&&(Be(S.value)||S.value===void 0)){let B=Object.entries(t.functions).find(([R,Y])=>Y.value.funcName===e.token.value);if(B)return B[1].cName}}}return Pe(e.token.value,(F=e.$)==null?void 0:F.env)}function Bn(e,t,n){var r,o,i,a,s,l;if(tt(e))return He(e);if(nt(e))return e.value?"true":"false";if(Qe(e)){let u=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((o=n==null?void 0:n.$)==null?void 0:o.type);if(u&&ft(u)){let d=Z(u,t),c=JSON.stringify(e.value),f=Buffer.byteLength(e.value,"utf8");return`(${d}){ .data = (uint8_t*)${c}, .length = ${f} }`}return JSON.stringify(e.value)}else if(Ut(e)){let u=e.type;if(un(u)){let y=u.variants.find(h=>h.name===e.variantName);if(!y)return`// Error: Variant ${e.variantName} not found in enum`;if(!y.fields||y.fields.length===0)return"NULL";if(y.fields.length===1&&e.fields.length===1)return Bn(e.fields[0],t)}if(lr(u))return bn(u,e.variantName,t);let f=(i=t.types[u.id])==null?void 0:i.cName;if(!f)return`// Error: No C type name found for enum ${x(u)}`;let m=bn(u,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${f}){ .tag = ${m} }`;{let y=u.variants.find(_=>_.name===e.variantName);if(!y||!y.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((_,g)=>{let $=y.fields[g];if($&&!De($.type)){let k=Te($.label),b=Bn(_,t);return`.${k} = ${b}`}return null}).filter(_=>_!==null);return h.length===0?`(${f}){ .tag = ${m} }`:`(${f}){ .tag = ${m}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(en(e)){let u=e.type,d=(a=t.types[u.id])==null?void 0:a.cName;if(!d)return`// Error: No C type name found for tuple ${x(u)}
170
+ `;let c=e.fields.map((f,m)=>{let y=Bn(f,t);return`._${m} = ${y}`});return`(${d}){ ${c.join(", ")} }`}else if(on(e)){let u=e.type;if(u&&we(u)){let d=(s=t.types[u.id])==null?void 0:s.cName;if(!d)return`// Error: No C type name found for struct ${x(u)}
171
+ `;if(u.isNewtype&&u.fields.length===1&&e.fields.length===1){let c=Bn(e.fields[0],t);return`((${d})(${c}))`}if(u.isReferenceSemantics){let c=e.fields.map(m=>Bn(m,t));return`${`__yo_new_${d}`}(${c.join(", ")})`}else{let c=e.fields.map((f,m)=>{let y=f,h=Ne(u)?`_${m}`:Te(u.fields[m].label),_=Bn(y,t);return`.${h} = ${_}`});return`(${d}){ ${c.join(", ")} }`}}}else if(pr(e)){let u=e.type,d=Z(u,t),c=e.elements.map(f=>Bn(f,t));return`(${d}){ .data = { ${c.join(", ")} } }`}else if(xe(e)){let u=(l=t.functions[e.funcId])==null?void 0:l.cName;return u||`// Error: No C function name found for function value with ID ${e.funcId}
172
+ `}else if(j(e)){let u=e.value;if(u)return t.types[u.id]?t.types[u.id].cName:`/* Error: No C type name found for type ${x(u)} */`}return""}function mm(e,t,n){var l,u,d,c,f,m,y;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],o=e.args[1];if(!r||!o)return"/* ERROR: invalid field access arguments */";let i=P(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(Q(o)){let h=o.token.value;if((d=e.$)!=null&&d.value&&xe(e.$.value)){let _=e.$.value;return((c=n.functions[_.funcId])==null?void 0:c.cName)||_.funcId}if(!((f=e.$)!=null&&f.value)&&(C.___dispose.includes(h)||C.___drop.includes(h)||C.___dup.includes(h))&&a){let _=null;if((we(a)||Ve(a))&&(_=a.module),_){let g=_.fields.find($=>$.label===h&&$.assignedValue&&xe($.assignedValue));if(g&&xe(g.assignedValue)){let $=g.assignedValue;return((m=n.functions[$.funcId])==null?void 0:m.cName)||$.funcId}else return`/* ERROR: Rc method ${h} not found in type module */`}else return`/* ERROR: No module found for Rc method ${h} */`}if(Ka(a)&&a.fields.length===1){let _=a.fields[0];if(_&&_.label===h)return i}if(Ve(a)){let _=a;if(un(_))return i;for(let $ of _.variants)if($.fields){for(let k of $.fields)if(k.label===h){let b=$.name;return`${i}.data.${b}.${Te(h)}`}}return`/* ERROR: field ${h} not found in enum ${_.typeName} */`}else if(j(s)&&Ve(s.value)){let _=s.value,g=_.variants.find(k=>k.name===h),$=(y=n.types[_.id])==null?void 0:y.cName;if(g&&!g.fields&&$){let k=bn(_,g.name,n);return`(${$}){ .tag = ${k}, .data = { } }`}}else{if(ze(a)&&ft(a.childType))return`${i}.${Te(h)}`;if(ze(a)){if(h==="*")return`(*${i})`;{let _=0,g=a;for(;ze(g);)_++,g=g.childType;if(_>0&&we(g)&&g.isReferenceSemantics&&_++,Ka(g)&&g.fields.length===1){let $=g.fields[0];if($&&$.label===h)return _===1?`(*${i})`:`${"*".repeat(_)}(${i})`}return _>0?_===1?`${i}->${Te(h)}`:`${`(${"*".repeat(_-1)}${i})`}->${Te(h)}`:`${i}.${Te(h)}`}}else if(Ne(a)){if(h.match(/^\d+$/))return`${i}._${h}`;{let _=a.fields.findIndex(g=>g.label===h);return`${i}._${_}`}}else return Re(a)?`${i}.vtable->${Te(h)}`:vt(a)?`${i}->${Te(h)}`:`${i}.${Te(h)}`}}return"/* ERROR: field name must be an identifier */"}function ym(e,t,n){var r,o,i,a,s,l,u,d,c;if(e.$){let f=e.$.variableName,m=e.$.type,y=m&&De(m);if(!y&&f){let b=Z(m,n);n.emitter.emitLine(`${t}${b} ${f};`)}let h=-1;for(let b=0;b<e.args.length;b++){let E=e.args[b];if(V(E)&&v(E,"=>",2)){let w=E.args[0];if(w&&!(nt((r=w.$)==null?void 0:r.value)&&w.$.value.value===!1)){h=b;break}}}let _=!1;if(h>=0){let b=e.args[h];if(b&&V(b)&&v(b,"=>",2)){let E=b.args[0];E&&nt((o=E.$)==null?void 0:o.value)&&E.$.value.value===!0&&(_=!0)}}if(_&&h>=0){let b=e.args[h];if(b&&V(b)&&v(b,"=>",2)){let E=b.args[1];if(E){let w=P(E,t,n);f&&!y&&(w&&w!==""&&!w.startsWith("goto")&&w!=="continue"&&w!=="break"&&!w.includes("return")?n.emitter.emitLine(`${t}${f} = ${w};`):w&&(w.startsWith("goto")||w==="continue"||w==="break"||w.includes("return"))&&n.emitter.emitLine(`${t}${w};`))}}return y?"":f??""}let g=t,$=0,k=!1;for(let b=0;b<e.args.length;b++){let E=e.args[b];if(V(E)&&v(E,"=>",2)){let w=E.args[0],F=E.args[1];if(w&&F){if(nt((i=w.$)==null?void 0:i.value)&&w.$.value.value===!1)continue;if(k){if(n.emitter.emitLine(`${g}else {`),$++,g+=" ",!(nt((s=w.$)==null?void 0:s.value)&&w.$.value.value===!0)){let Y=P(w,g,n);n.emitter.emitLine(`${g}if (${Y}) {`)}}else{if(nt((a=w.$)==null?void 0:a.value)&&w.$.value.value===!0)n.emitter.emitLine(`${g}{`);else{let R=P(w,g,n);n.emitter.emitLine(`${g}if (${R}) {`)}k=!0}let L=nt((l=w.$)==null?void 0:l.value)&&w.$.value.value===!0,S=k&&L?g:g+" ";if(V(F)&&v(F,A.begin)){let R=F.args;for(let Y=0;Y<R.length-1;Y++){let W=R[Y],H=P(W,S,n);H&&W.$&&!It(W.$.env.modulePath,H)&&n.emitter.emitLine(`${S}${H};`)}if(R.length>0){let Y=R[R.length-1];(u=Y.$)!=null&&u.deferredDupExpressions&&Ft(Y,S,n);let W=P(Y,S,n);W&&(W==="continue"||W==="break"||W.startsWith("goto")||V(Y)&&v(Y,A.return)||W.includes("return")?n.emitter.emitLine(`${S}${W};`):f&&!y&&n.emitter.emitLine(`${S}${f} = ${W};`))}(d=F.$)!=null&&d.deferredDropExpressions&&Qt(F,S,n)}else{(c=F.$)!=null&&c.deferredDupExpressions&&Ft(F,S,n);let R=P(F,S,n);R==="continue"||R==="break"||R.startsWith("goto")||V(F)&&v(F,A.return)||R.includes("return")?n.emitter.emitLine(`${S}${R};`):R===""||!R||f&&(y||n.emitter.emitLine(`${S}${f} = ${R};`))}!(k&&L)&&n.emitter.emitLine(`${g}}`)}}}for(let b=0;b<$;b++)g=g.slice(0,-2),n.emitter.emitLine(`${g}}`);return y?"":f??""}return'/* "cond" expression is not evaluated */'}function _m(e,t,n){var y,h,_,g,$,k,b,E,w,F,L,S,B;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,o=e.$.type,i=o&&De(o);if(!i&&r){let R=Z(o,n);n.emitter.emitLine(`${t}${R} ${r};`)}let a=P(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires an enum type';let l,u;if(ze(s)?(u=s.childType,l=s.tag):vt(s)?(u=s,l="ref_semantics"):u=s,!Ve(u))return'// Error: "match" expression requires an enum type';if(!((h=n.types[u.id])==null?void 0:h.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let c=un(u);if(c){let R=e.args.slice(1),Y=null,W=null;for(let H of R)if(V(H)&&v(H,"=>",2)){let se=H.args[0],ye=H.args[1];if(se&&ye&&V(se)&&v(se,"."))Y={caseBody:ye};else{let oe=se.func;if(oe&&V(oe)&&v(oe,".")){let pe=oe.args[0];if(pe&&Q(pe)){let _e=pe.token.value;W={caseBody:ye,variantName:_e,casePattern:se}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),W){let H;if(V(W.casePattern)&&W.casePattern.args.length>0){let pe=W.casePattern.args[0];if(pe&&Q(pe)){H=pe.token.value;let _e=c;n.emitter.emitLine(`${t} ${Z(_e,n)} ${H} = ${a};`)}}let se=n;H&&se.inStateMachine&&(se.localShadowedVariables||(se.localShadowedVariables=new Set),se.localShadowedVariables.add(H));let ye=zo(W.caseBody,t+" ",n);H&&se.localShadowedVariables&&se.localShadowedVariables.delete(H);let oe=ye===""||ye==="break"||ye==="continue"||ye.includes("return");if(!i&&r&&!oe){let pe=ye||a;n.emitter.emitLine(`${t} ${r} = ${pe};`)}else ye&&ye!==""&&n.emitter.emitLine(`${t} ${ye};`)}if(n.emitter.emitLine(`${t}} else {`),Y){let H=zo(Y.caseBody,t+" ",n),se=H===""||H==="break"||H==="continue"||H.includes("return");!i&&r&&!se?n.emitter.emitLine(`${t} ${r} = ${H};`):H&&H!==""&&n.emitter.emitLine(`${t} ${H};`)}return n.emitter.emitLine(`${t}}`),i?"":r??""}if(lr(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let R=e.args.slice(1);for(let Y=0;Y<R.length;Y++){let W=R[Y];if(V(W)&&v(W,"=>",2)){let H=W.args[0],se=W.args[1];if(H&&se&&V(H)&&v(H,".",1)){let ye=H.args[0].token.value,oe=bn(u,ye,n);n.emitter.emitLine(`${t}case ${oe}:`);let pe=zo(se,t+" ",n);!i&&r&&pe?n.emitter.emitLine(`${t} ${r} = ${pe};`):pe&&n.emitter.emitLine(`${t} ${pe};`),n.currentLoopLabel&&((_=se.$)==null?void 0:_.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):((g=se.$)==null?void 0:g.controlFlow)==="continue"?(n.emitter.emitLine(`${t} break;`),n.currentContinueLabel&&n.emitter.emitLine(`${t} goto ${n.currentContinueLabel};`)):n.emitter.emitLine(`${t} break;`)}}}return n.emitter.emitLine(`${t}}`),i?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let m=e.args.slice(1);for(let R=0;R<m.length;R++){let Y=m[R];if(V(Y)&&v(Y,"=>",2)){let W=Y.args[0],H=Y.args[1];if(W&&H&&V(W)&&W.func.tag==="Atom"&&W.func.token.value==="."&&W.args.length>=1){let se=W.args[0].token.value,ye=bn(u,se,n);if(n.emitter.emitLine(`${t}case ${ye}:`),W.args.length>1){let pe=u.variants.find(_e=>_e.name===se);if(pe&&pe.fields){let _e=W.args.slice(1);if(_e.some(ke=>V(ke)&&v(ke,":",2))){for(let ke of _e)if(V(ke)&&v(ke,":",2)){let Ae=ke.args[0],ge=ke.args[1];if(!Q(Ae))continue;let $e=Ae.token.value,I=pe.fields.find(U=>U.label===$e);if(!I||De(I.type))continue;if(Q(ge)){let U=ge.token.value;if(U!=="_"){let re=Te($e),ie=Z(I.type,n),ve=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} /* MARKER: Generating labeled destructured variable ${U} from field ${$e} */`),n.emitter.emitLine(`${t} ${ie} ${U} = ${a}${ve}data.${se}.${re};`);let Ee=n;if(Ee!=null&&Ee.inStateMachine&&Ee.stateMachineVariables){let qe;if(($=ge.$)!=null&&$.env){let We=he(ge.$.env,U);We.length>0&&(qe=We[We.length-1].id)}qe&&Ee.stateMachineVariables.has(qe)&&n.emitter.emitLine(`${t} sm->var_${qe} = ${U};`)}}}}}else for(let ke=0;ke<_e.length&&ke<pe.fields.length;ke++){let Ae=_e[ke],ge=pe.fields[ke];if(Q(Ae)&&ge){if(De(ge.type))continue;let $e=Ae.token.value;if($e!=="_"){let I=Te(ge.label),U=Z(ge.type,n),re=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} /* MARKER: Generating destructured variable ${$e} */`),n.emitter.emitLine(`${t} ${U} ${$e} = ${a}${re}data.${se}.${I};`);let ie=n;if(ie!=null&&ie.inStateMachine&&ie.stateMachineVariables){let ve;if((k=Ae.$)!=null&&k.env){let Ee=he(Ae.$.env,$e);Ee.length>0&&(ve=Ee[Ee.length-1].id)}ve&&ie.stateMachineVariables.has(ve)&&n.emitter.emitLine(`${t} sm->var_${ve} = ${$e};`)}}}}}}if(V(H)&&v(H,"=>",2)){let pe=H.args[0];n.emitter.emitLine(`${t} ${Z(s,n)} ${pe.token.value} = ${a};`),H=H.args[1]}let oe=zo(H,t+" ",n);!i&&r&&oe?n.emitter.emitLine(`${t} ${r} = ${oe};`):oe&&n.emitter.emitLine(`${t} ${oe};`),n.currentLoopLabel&&((b=H.$)==null?void 0:b.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):((E=H.$)==null?void 0:E.controlFlow)==="continue"?(n.emitter.emitLine(`${t} break;`),n.currentContinueLabel&&n.emitter.emitLine(`${t} goto ${n.currentContinueLabel};`)):n.emitter.emitLine(`${t} break;`)}else if(W&&H&&V(W)&&V(W.func)&&W.func.func.tag==="Atom"&&W.func.func.token.value==="."&&W.func.args.length===1){let se=W.func.args[0].token.value,ye=bn(u,se,n),oe=W.args;n.emitter.emitLine(`${t}case ${ye}:`);let pe=u.variants.find(Ie=>Ie.name===se);if(pe&&pe.fields&&oe.length>0)if(oe.some(ke=>V(ke)&&v(ke,":",2))){for(let ke of oe)if(V(ke)&&v(ke,":",2)){let Ae=ke.args[0],ge=ke.args[1];if(!Q(Ae))continue;let $e=Ae.token.value,I=pe.fields.find(U=>U.label===$e);if(!I)continue;if(Q(ge)){let U=ge.token.value;if(U!=="_")if(De(I.type))n.emitter.emitLine(`${t} // ${U} is unit type (no value)`);else{let re=Te($e),ie=Z(I.type,n),ve=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ie} ${U} = ${a}${ve}data.${se}.${re};`);let Ee=n;if(Ee!=null&&Ee.inStateMachine&&Ee.stateMachineVariables){let qe;if((w=ge.$)!=null&&w.env){let We=he(ge.$.env,U);We.length>0&&(qe=We[We.length-1].id)}qe&&Ee.stateMachineVariables.has(qe)&&n.emitter.emitLine(`${t} sm->var_${qe} = ${U};`)}}}}}else for(let ke=0;ke<Math.min(oe.length,pe.fields.length);ke++){let Ae=oe[ke],ge=pe.fields[ke];if(Ae.tag==="Atom"&&ge){let $e=Ae.token.value;if($e!=="_")if(De(ge.type))n.emitter.emitLine(`${t} // ${$e} is unit type (no value)`);else{let I=Te(ge.label),U=Z(ge.type,n),re=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${U} ${$e} = ${a}${re}data.${se}.${I};`);let ie=n;if(ie!=null&&ie.inStateMachine&&ie.stateMachineVariables){let ve;if((F=Ae.$)!=null&&F.env){let Ee=he(Ae.$.env,$e);Ee.length>0&&(ve=Ee[Ee.length-1].id)}ve&&ie.stateMachineVariables.has(ve)&&n.emitter.emitLine(`${t} sm->var_${ve} = ${$e};`)}}}}if(V(H)&&v(H,"=>",2)){let Ie=H.args[0];n.emitter.emitLine(`${t} ${Z(s,n)} ${Ie.token.value} = ${a};`),H=H.args[1]}let _e=zo(H,t+" ",n);!i&&r&&_e?n.emitter.emitLine(`${t} ${r} = ${_e};`):_e&&n.emitter.emitLine(`${t} ${_e};`),n.currentLoopLabel&&((L=H.$)==null?void 0:L.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):((S=H.$)==null?void 0:S.controlFlow)==="continue"?(n.emitter.emitLine(`${t} break;`),n.currentContinueLabel&&n.emitter.emitLine(`${t} goto ${n.currentContinueLabel};`)):n.emitter.emitLine(`${t} break;`)}}}return n.emitter.emitLine(`${t}}`),(B=e.$)!=null&&B.deferredDropExpressions&&Qt(e,t,n),i?"":r??""}function vp(e,t,n){var r,o,i,a,s;switch(e.tag){case"Atom":{let l=Ea(e,n);if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ft(e,t,n);let u=e.$.deferredDupExpressions[0];V(u)&&((o=u.$)!=null&&o.variableName)&&(l=Pe(u.$.variableName,u.$.env))}n.emitter.emitLine(`${t}return ${l};`);break}case"FuncCall":{if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((a=e.$)!=null&&a.variableName){let u=e.$.variableName;e.$.variableName=void 0;let d=Go(e,t,n);e.$.variableName=u;let c=Z(e.$.type,n),f=Te(u);f!==d&&n.emitter.emitLine(`${t}${c} ${f} = ${d};`)}else{let u=Go(e,t,n);n.emitter.emitLine(`${t}${u};`)}Ft(e,t,n);let l=e.$.deferredDupExpressions[0];if(V(l)&&((s=l.$)!=null&&s.variableName)){let u=Pe(l.$.variableName,l.$.env);n.emitter.emitLine(`${t}return ${u};`)}else{let u=Go(e,t,n);n.emitter.emitLine(`${t}return ${u};`)}}else{let l=Go(e,t,n);v(e,A.return)?n.emitter.emitLine(`${t}${l};`):n.emitter.emitLine(`${t}return ${l};`)}break}}}function cs(e,t,n,r){var o;return C.__yo_op_add.includes(e)?`((${t[0]}) + (${t[1]}))`:C.__yo_op_sub.includes(e)?`((${t[0]}) - (${t[1]}))`:C.__yo_op_mul.includes(e)?`((${t[0]}) * (${t[1]}))`:C.__yo_op_div.includes(e)?`((${t[0]}) / (${t[1]}))`:C.__yo_op_mod.includes(e)?`((${t[0]}) % (${t[1]}))`:C.__yo_op_neg.includes(e)?`(-(${t[0]}))`:C.__yo_op_eq.includes(e)?`((${t[0]}) == (${t[1]}))`:C.__yo_op_neq.includes(e)?`((${t[0]}) != (${t[1]}))`:C.__yo_op_lt.includes(e)?`((${t[0]}) < (${t[1]}))`:C.__yo_op_lte.includes(e)?`((${t[0]}) <= (${t[1]}))`:C.__yo_op_gt.includes(e)?`((${t[0]}) > (${t[1]}))`:C.__yo_op_gte.includes(e)?`((${t[0]}) >= (${t[1]}))`:C.__yo_op_not.includes(e)?`(!(${t[0]}))`:C.__yo_op_bit_and.includes(e)?`((${t[0]}) & (${t[1]}))`:C.__yo_op_bit_or.includes(e)?`((${t[0]}) | (${t[1]}))`:C.__yo_op_bit_xor.includes(e)?`((${t[0]}) ^ (${t[1]}))`:C.__yo_op_bit_complement.includes(e)?`(~(${t[0]}))`:C.__yo_op_bit_left_shift.includes(e)?`((${t[0]}) << (${t[1]}))`:C.__yo_op_bit_right_shift.includes(e)?`((${t[0]}) >> (${t[1]}))`:C.__yo_noop.includes(e)?"":C.__yo_return_self.includes(e)?`(*${t[0]})`:C.__yo_ms_sleep.includes(e)?`(
170
173
  #ifdef _WIN32
171
174
  Sleep(${t[0]})
172
175
  #else
173
176
  usleep((${t[0]}) * 1000)
174
177
  #endif
175
- )`:C.__yo_decr_rc.includes(e)?`__yo_decr_rc((void*)(${t[0]}))`:C.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)?`((${H(n.$.type,r)})(${t[0]}))`:C.__yo_ptr_add.includes(e)?`(${t[0]} + ${t[1]})`:C.__yo_ptr_sub.includes(e)?`(${t[0]} - ${t[1]})`:C.__yo_ptr_diff.includes(e)?`(${t[0]} - ${t[1]})`:C.__yo_ptr_eq.includes(e)?`(${t[0]} == ${t[1]})`:C.__yo_ptr_neq.includes(e)?`(${t[0]} != ${t[1]})`:C.__yo_ptr_lt.includes(e)?`(${t[0]} < ${t[1]})`:C.__yo_ptr_lte.includes(e)?`(${t[0]} <= ${t[1]})`:C.__yo_ptr_gt.includes(e)?`(${t[0]} > ${t[1]})`:C.__yo_ptr_gte.includes(e)?`(${t[0]} >= ${t[1]})`:C.__yo_slice_len.includes(e)?`(${t[0]}.length)`:`/* Unhandled operator ${e} */`}function Dd(e,t){if(V(e)&&v(e,A.begin)){let n=[];for(let r of e.args)if(V(r)&&v(r,"=",2)){let o=r.args[0],i=r.args[1],a=z(o,"",t),s=z(i,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(V(e)&&v(e,"=",2)){let n=e.args[0],r=e.args[1],o=z(n,"",t),i=z(r,"",t);return`${o} = ${i}`}return z(e,"",t)}function Ou(e,t,n){var r;if(V(e)&&v(e,A.begin)){for(let o of e.args){let i=z(o,t,n);i&&n.emitter.emitLine(`${t}${i};`)}if((r=e.$)!=null&&r.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){let i=z(o,t,n);i&&n.emitter.emitLine(`${t}${i};`)}}else{let o=z(e,t,n);o&&n.emitter.emitLine(`${t}${o};`)}}function Uo(e,t,n){var r,o,i,a;if(V(e)&&v(e,A.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let d=s[u],c=z(d,t,n);c&&n.emitter.emitLine(`${t}${c};`)}let l="";if(s.length>0){let u=s[s.length-1];if((r=u.$)!=null&&r.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){Ft(u,t,n);let d=u.$.deferredDupExpressions[0];V(d)&&((o=d.$)!=null&&o.variableName)?l=Q(d.$.variableName):l=z(u,t,n)}else l=z(u,t,n)}return(i=e.$)!=null&&i.deferredDropExpressions&&Kt(e,t,n),l}else return(a=e.$)!=null&&a.deferredDupExpressions&&Ft(e,t,n),z(e,t,n)}function Od(e,t,n){let r=e.args;if(r.length===2){let o=r[0],i=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s,n.emitter.emitLine(`${t}while (true) {`);let l=z(o,t+" ",n);return n.emitter.emitLine(`${t} if (!(${l})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Ou(i,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),n.currentLoopLabel=a,""}else if(r.length===3){let o=r[0],i=r[1],a=r[2],s=n.currentLoopLabel,l=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=l,n.emitter.emitLine(`${t}while (true) {`);let u=z(o,t+" ",n);n.emitter.emitLine(`${t} if (!(${u})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Ou(a,t+" ",n);let d=Dd(i,n);return n.emitter.emitLine(`${t} ${d};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${l}:;`),n.currentLoopLabel=s,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Kt(e,t,n){var o;let r=n.emitter;if((o=e.$)!=null&&o.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){let a=z(i,t,n);a&&r.emitLine(`${t}${a};`)}}function Ft(e,t,n){var o;let r=n.emitter;if((o=e.$)!=null&&o.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(V(i)){let a=z(i,t,n);a&&r.emitLine(`${t}${a};`)}}}function Pu(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&zu(n.body,e)}}function zu(e,t){var n,r;if(e&&V(e)){let o=e;if(v(e,C.async)){let i=(n=e.$)==null?void 0:n.type;if(i&&Pe(i)&&Ht(i)){let l=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=l),t.types[i.id]={type:i,cName:l},t.emitter.emitDeclarationLine(`typedef struct ${l}_struct ${l}; // Forward declaration for async state machine`)}}for(let i of o.args)zu(i,t)}}function Gu(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;wd(e),t.emitLine("// Deferred async block implementations");for(let n of e.deferredAsyncBlocks){let{bodyExpr:r,asyncBlockId:o,structName:i,resumeFunctionName:a,constructorName:s,disposeFunctionName:l,futureType:u,resultType:d,resultTypeCName:c,captureType:f,analysis:m}=n;Vd(o,i,l,d,f,m,e),t.emitLine(""),Iu(r,o,i,a,m,u,f,e),t.emitLine(""),xd(o,i,a,s,l,u,d,c,f,e),t.emitLine("")}}function Ru(e,t){e.emitLine(`
178
+ )`:C.__yo_decr_rc.includes(e)?`__yo_decr_rc((void*)(${t[0]}))`:C.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)?`((${Z(n.$.type,r)})(${t[0]}))`:C.__yo_ptr_add.includes(e)?`(${t[0]} + ${t[1]})`:C.__yo_ptr_sub.includes(e)?`(${t[0]} - ${t[1]})`:C.__yo_ptr_diff.includes(e)?`(${t[0]} - ${t[1]})`:C.__yo_ptr_eq.includes(e)?`(${t[0]} == ${t[1]})`:C.__yo_ptr_neq.includes(e)?`(${t[0]} != ${t[1]})`:C.__yo_ptr_lt.includes(e)?`(${t[0]} < ${t[1]})`:C.__yo_ptr_lte.includes(e)?`(${t[0]} <= ${t[1]})`:C.__yo_ptr_gt.includes(e)?`(${t[0]} > ${t[1]})`:C.__yo_ptr_gte.includes(e)?`(${t[0]} >= ${t[1]})`:C.__yo_slice_len.includes(e)?`(${t[0]}.length)`:`/* Unhandled operator ${e} */`}function gm(e,t){if(V(e)&&v(e,A.begin)){let n=[];for(let r of e.args)if(V(r)&&v(r,"=",2)){let o=r.args[0],i=r.args[1],a=P(o,"",t),s=P(i,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(V(e)&&v(e,"=",2)){let n=e.args[0],r=e.args[1],o=P(n,"",t),i=P(r,"",t);return`${o} = ${i}`}return P(e,"",t)}function gp(e,t,n){var r;if(V(e)&&v(e,A.begin)){for(let o of e.args){let i=P(o,t,n);i&&n.emitter.emitLine(`${t}${i};`)}if((r=e.$)!=null&&r.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){let i=P(o,t,n);i&&n.emitter.emitLine(`${t}${i};`)}}else{let o=P(e,t,n);o&&n.emitter.emitLine(`${t}${o};`)}}function zo(e,t,n){var r,o,i,a;if(V(e)&&v(e,A.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let d=s[u],c=P(d,t,n);c&&n.emitter.emitLine(`${t}${c};`)}let l="";if(s.length>0){let u=s[s.length-1];if((r=u.$)!=null&&r.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){Ft(u,t,n);let d=u.$.deferredDupExpressions[0];V(d)&&((o=d.$)!=null&&o.variableName)?l=Pe(d.$.variableName,d.$.env):l=P(u,t,n)}else l=P(u,t,n)}return(i=e.$)!=null&&i.deferredDropExpressions&&Qt(e,t,n),l}else return(a=e.$)!=null&&a.deferredDupExpressions&&Ft(e,t,n),P(e,t,n)}function hm(e,t,n){let r=e.args;if(r.length===2){let o=r[0],i=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s,n.emitter.emitLine(`${t}while (true) {`);let l=P(o,t+" ",n);return n.emitter.emitLine(`${t} if (!(${l})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),gp(i,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),n.currentLoopLabel=a,""}else if(r.length===3){let o=r[0],i=r[1],a=r[2],s=n.currentLoopLabel,l=n.currentContinueLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`,d=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u,n.currentContinueLabel=d,n.emitter.emitLine(`${t}while (true) {`);let c=P(o,t+" ",n);n.emitter.emitLine(`${t} if (!(${c})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),gp(a,t+" ",n),n.emitter.emitLine(`${t}${d}:;`);let f=gm(i,n);return n.emitter.emitLine(`${t} ${f};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),n.currentLoopLabel=s,n.currentContinueLabel=l,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Qt(e,t,n){var o;let r=n.emitter;if((o=e.$)!=null&&o.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){let a=P(i,t,n);a&&r.emitLine(`${t}${a};`)}}function Ft(e,t,n){var o;let r=n.emitter;if((o=e.$)!=null&&o.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(V(i)){let a=P(i,t,n);a&&r.emitLine(`${t}${a};`)}}}function $p(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&Tp(n.body,e)}}function Tp(e,t){var n,r;if(e&&V(e)){let o=e;if(v(e,C.async)){let i=(n=e.$)==null?void 0:n.type;if(i&&je(i)&&Kt(i)){let l=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=l),t.types[i.id]={type:i,cName:l},t.emitter.emitDeclarationLine(`typedef struct ${l}_struct ${l}; // Forward declaration for async state machine`)}}for(let i of o.args)Tp(i,t)}}function Ep(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;lm(e),t.emitLine("// Deferred async block implementations");for(let n of e.deferredAsyncBlocks){let{bodyExpr:r,asyncBlockId:o,structName:i,resumeFunctionName:a,constructorName:s,disposeFunctionName:l,futureType:u,resultType:d,resultTypeCName:c,captureType:f,analysis:m}=n;um(o,i,l,d,f,m,e),t.emitLine(""),_p(r,o,i,a,m,u,f,e),t.emitLine(""),pm(o,i,a,s,l,u,d,c,f,e),t.emitLine("")}}function Cp(e,t){e.emitLine(`
176
179
  // ============================================================================
177
180
  // Async/Await Runtime - Single-Threaded Cooperative Scheduler
178
181
  // ============================================================================
@@ -750,7 +753,7 @@ static int64_t __yo_file_size(int32_t fd) {
750
753
  #endif // YO_HAS_LIBURING
751
754
 
752
755
  #endif // __linux__
753
- `)}function qu(e,t){e.emitLine(`
756
+ `)}function kp(e,t){e.emitLine(`
754
757
  // ============================================================================
755
758
  // Parallelism Runtime - Thread and Worker
756
759
  // ============================================================================
@@ -1109,7 +1112,7 @@ void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
1109
1112
  yo_cond_signal(&worker->cond);
1110
1113
  yo_mutex_unlock(&worker->mutex);
1111
1114
  }
1112
- `)}function ju(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:o}=e.externFunctions[n];o.isExtern!=="yo"&&(o.isExtern==="c"&&o.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||Yu(o,r,!0,e))}t.emitDeclarationLine(""),t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("void yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("void yo_future_dispose(void* ptr);"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Object constructors"),Bd(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Pd(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let n in e.functions){let{cName:r,value:o}=e.functions[n];if(Io(o)||No(o)||Do(o))continue;let i=o.specializedType??o.type,a=i.parameters.some(u=>Ye(u.type))||i.forallParameters.length>0,s=Ye(i.return.type),l=ee(i.return.type)&&i.return.type.requiredModules.length>0;a||s&&!l||Yu(i,r,!1,e,o.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function Qr(e,t,n,r){let o=r||H(e.return.type,n),i=e.parameters.filter(u=>!u.isCompileTimeOnly),a=[];e.isClosure&&a.push("void* closure_context");let s=i.map((u,d)=>{let c=Q(u.label||`param${d}`);if(ce(u.type))return Qr(u.type,"(*)",n).replace(" (*)(",` (*${c})(`);{let f;if(ee(u.type)&&Pe(u.type)){if(!u.type.resolvedConcreteType)throw new Error(`Impl(Future) parameter '${u.label}' has no resolvedConcreteType. Function: ${t}. SomeType ID: ${u.type.id}. This indicates the function wasn't properly specialized - generic Impl(Future) functions should not reach codegen.`);f=H(u.type.resolvedConcreteType,n)+"*"}else f=H(u.type,n);return`${f} ${c}`}});a.push(...s);let l=a.join(", ");return`${o} ${t}(${l})`}function Xa(e){if(e){if(v(e,C.async))return e;if(V(e)){let t=e;for(let n of t.args){let r=Xa(n);if(r)return r}}}}function Yu(e,t,n,r,o){var l,u,d;let i;if(o&&Pe(e.return.type)){let c=Xa(o);(l=c==null?void 0:c.$)!=null&&l.asyncStateMachineStructName&&(i=`${c.$.asyncStateMachineStructName}*`)}if(o&&ee(e.return.type)&&!Pe(e.return.type)&&(u=o.$)!=null&&u.type&&(i=H(o.$.type,r)),!i&&o&&((d=o.$)!=null&&d.type)&&!Pe(e.return.type)){let c=H(e.return.type,r),f=H(o.$.type,r);c!==f&&(i=f)}let a=i?Qr(e,t,r,i):Qr(e,t,r),s=x(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function Wu(e){e.emitter.emitLine("// Function implementations"),Ru(e.emitter,e.debugAsyncAwait),qu(e.emitter,e.debugParallelism),zd(e),Rd(e);for(let t in e.functions){let{value:n,cName:r}=e.functions[t];if(Io(n)||No(n)||Do(n))continue;let o=n.specializedType??n.type,i=o.parameters.some(l=>Ye(l.type))||o.forallParameters.length>0,a=Ye(o.return.type),s=ee(o.return.type)&&o.return.type.requiredModules.length>0;i||a&&!s||Qu(n,r,e)}es(e)}function Hu(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Dup/Drop Functions ==="),t.emitLine("");let n=new Set;for(let[,o]of e.dynImpls){let i=((r=e.types[o.dynType.id])==null?void 0:r.cName)||`yo_dyn_${o.dynType.id}`;n.has(i)||(n.add(i),t.emitLine(`${i} __yo_dup_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function Ku(e){let t=e.emitter,n=!1,r=null;for(let a in e.functions){let{cName:s,value:l}=e.functions[a];if(s==="__yo_user_main"){n=!0,r=l;break}}if(!n||!r)return;let o=r.type.return.type;if(!Be(o))throw new Error(`main function must return unit , but it returns ${x(o)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);t.emitLine(`
1115
+ `)}function wp(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:o}=e.externFunctions[n];o.isExtern!=="yo"&&(o.isExtern==="c"&&o.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||bp(o,r,!0,e))}t.emitDeclarationLine(""),t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("void yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("void yo_future_dispose(void* ptr);"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Object constructors"),$m(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Tm(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let n in e.functions){let{cName:r,value:o}=e.functions[n];if(ln(o.type)||Bo(o)||Uo(o))continue;let i=o.specializedType??o.type,a=i.parameters.some(u=>Ke(u.type))||i.forallParameters.length>0,s=Ke(i.return.type),l=X(i.return.type)&&i.return.type.requiredModules.length>0;a||s&&!l||bp(i,r,!1,e,o.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function eo(e,t,n,r){let o=r||Z(e.return.type,n),i=e.parameters.filter(u=>!u.isCompileTimeOnly),a=[];e.isClosure&&a.push("void* closure_context");let s=i.map((u,d)=>{let c=Te(u.label||`param${d}`);if(me(u.type))return eo(u.type,"(*)",n).replace(" (*)(",` (*${c})(`);{let f;if(X(u.type)&&je(u.type)){if(!u.type.resolvedConcreteType)throw new Error(`Impl(Future) parameter '${u.label}' has no resolvedConcreteType. Function: ${t}. SomeType ID: ${u.type.id}. This indicates the function wasn't properly specialized - generic Impl(Future) functions should not reach codegen.`);f=Z(u.type.resolvedConcreteType,n)+"*"}else f=Z(u.type,n);return`${f} ${c}`}});a.push(...s);let l=a.join(", ");return`${o} ${t}(${l})`}function fs(e){if(e){if(v(e,C.async))return e;if(V(e)){let t=e;for(let n of t.args){let r=fs(n);if(r)return r}}}}function bp(e,t,n,r,o){var l,u,d;let i;if(o&&je(e.return.type)){let c=fs(o);(l=c==null?void 0:c.$)!=null&&l.asyncStateMachineStructName&&(i=`${c.$.asyncStateMachineStructName}*`)}if(o&&X(e.return.type)&&!je(e.return.type)&&(u=o.$)!=null&&u.type&&(i=Z(o.$.type,r)),!i&&o&&((d=o.$)!=null&&d.type)&&!je(e.return.type)){let c=Z(e.return.type,r),f=Z(o.$.type,r);c!==f&&(i=f)}let a=i?eo(e,t,r,i):eo(e,t,r),s=x(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function Fp(e){e.emitter.emitLine("// Function implementations"),Cp(e.emitter,e.debugAsyncAwait),kp(e.emitter,e.debugParallelism),Em(e),km(e);for(let t in e.functions){let{value:n,cName:r}=e.functions[t],o=n.specializedType&&!ln(n.type);if(ln(n.type)||n.specializedType&&!o||Bo(n)||Uo(n))continue;let i=n.specializedType??n.type,a=i.parameters.some(u=>Ke(u.type))||i.forallParameters.length>0,s=Ke(i.return.type),l=X(i.return.type)&&i.return.type.requiredModules.length>0;a||s&&!l||Mp(n,r,e)}ds(e)}function Vp(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Dup/Drop Functions ==="),t.emitLine("");let n=new Set;for(let[,o]of e.dynImpls){let i=((r=e.types[o.dynType.id])==null?void 0:r.cName)||`yo_dyn_${o.dynType.id}`;n.has(i)||(n.add(i),t.emitLine(`${i} __yo_dup_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function xp(e){let t=e.emitter,n=!1,r=null;for(let a in e.functions){let{cName:s,value:l}=e.functions[a];if(s==="__yo_user_main"){n=!0,r=l;break}}if(!n||!r)return;let o=r.type.return.type;if(!De(o))throw new Error(`main function must return unit , but it returns ${x(o)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);t.emitLine(`
1113
1116
  // Main wrapper - calls __yo_user_main directly
1114
1117
  int main(void) {
1115
1118
  // Initialize async runtime (in case async blocks are used)
@@ -1124,10 +1127,19 @@ int main(void) {
1124
1127
 
1125
1128
  return 0;
1126
1129
  }
1127
- `)}function Qu(e,t,n){var y,g,h,_;let r=n.emitter,o=t,i=e.specializedType??e.type,a;if(e.body&&Pe(i.return.type)){let E=Xa(e.body);(y=E==null?void 0:E.$)!=null&&y.asyncStateMachineStructName&&(a=`${E.$.asyncStateMachineStructName}*`)}if(e.body&&ee(i.return.type)&&!Pe(i.return.type)&&(g=e.body.$)!=null&&g.type&&(a=H(e.body.$.type,n)),!a&&e.body&&((h=e.body.$)!=null&&h.type)&&e.specializedType){let E=H(i.return.type,n),k=H(e.body.$.type,n);E!==k&&(a=k)}let s=a?Qr(i,t,n,a):Qr(i,t,n);r.emitLine(`${s} {`);let l=n.currentFunctionName,u=n.currentFunctionType;n.currentFunctionName=o,n.currentFunctionType=i;let d=n.currentClosureCaptures,c=n.currentClosureCaptureFrameLevel,f=n.currentClosureType,m=n.currentClosureCaptureTypeCName;if(i.isClosure){let E=e.closureInfo;if(E){let k=E.closureType.isFn,w=E.captureType;if(n.currentClosureType=k.callType,w&&$e(w)&&w.fields.length>0){let $=w.fields.map(F=>F.label);n.currentClosureCaptures=$,n.currentClosureCaptureFrameLevel=e.frameLevel;let b=(_=n.types[w.id])==null?void 0:_.cName;b&&(n.currentClosureCaptureTypeCName=b)}}}Ud(e.body,i," ",n),n.currentFunctionName=l,n.currentFunctionType=u,n.currentClosureCaptures=d,n.currentClosureCaptureFrameLevel=c,n.currentClosureType=f,n.currentClosureCaptureTypeCName=m,r.emitLine("}")}function Ud(e,t,n,r){var i,a,s,l,u,d,c,f;let o=r.emitter;if(V(e)&&v(e,A.begin)){let m=e.args,y=!1;for(let g=0;g<m.length-1;g++){let h=m[g];v(h,A.return)&&(y=!0);let _=z(h,n,r);if(_&&(!h.$||!St(h.$.env.modulePath,_))&&o.emitLine(`${n}${_};`),y)break}if(!y&&m.length>0){let g=m[m.length-1];if(Pe(t.return.type)&&g){let _=v(g,C.async),E=(i=g.$)==null?void 0:i.type,k=E&&Pe(E);if(_||k){let w=z(g,n,r);o.emitLine(`${n}return ${w};`);return}}else if(g&&Be(t.return.type)){let _=z(g,n,r);_&&o.emitLine(`${n}${_};`),Kt(e,n,r)}else if(g){let _=(a=g.$)==null?void 0:a.controlFlow,E=Be((s=g.$)==null?void 0:s.type)||V(g)&&v(g,A.tuple)&&g.args.length===0,k=m.length>1?m[m.length-2]:null,w=(l=k==null?void 0:k.$)==null?void 0:l.controlFlow;if(!(E&&w))if(_){let $=z(g,n,r);$&&o.emitLine(`${n}${$};`)}else{if((u=g.$)!=null&&u.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){if((d=g.$)!=null&&d.variableName){let F=H(g.$.type,r),M=Q(g.$.variableName),L=z(g,n,r);M!==L&&o.emitLine(`${n}${F} ${M} = ${L};`)}Ft(g,n,r);let b=g.$.deferredDupExpressions[0];if(V(b)&&((c=b.$)!=null&&c.variableName)){let F=Q(b.$.variableName);Kt(e,n,r),o.emitLine(`${n}return ${F};`);return}}let $=z(g,n,r);Kt(e,n,r),$&&o.emitLine(`${n}return ${$};`)}}}else if(y&&m.length>0){let g=m[m.length-1];g&&Be((f=g.$)==null?void 0:f.type)}}else if(Kt(e,n,r),Be(t.return.type)){let m=z(e,n,r);m&&o.emitLine(`${n}${m};`)}else Bu(e,n,r)}function Zu(e){let t=new Set;for(let n in e.functions){let{value:r,cName:o}=e.functions[n],i=r.specializedType;No(r)||!i||!Io(r)||Nn(i)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${Qr(i,o,e)}; // specialized function: ${x(r.type)}`))}}function Ju(e){for(let t in e.functions){let{value:n,cName:r}=e.functions[t];No(n)||!n.specializedType||!Io(n)||Nn(n.specializedType)||Qu(n,r,e)}}function Bd(e){let t=e.emitter;t.emitDeclarationLine("void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:o}=e.types[n];if($e(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ye(l.type)))continue;let a=`__yo_new_${o}`,s=r.fields.map(l=>{let u=H(l.type,e),d=Q(l.label);return`${u} ${d}`}).join(", ");t.emitDeclarationLine(`${o}* ${a}(${s}); // Constructor`)}}}function Pd(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}}function zd(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
1130
+ `)}function Mp(e,t,n){var y,h,_;let r=n.emitter,o=t,i=e.specializedType??e.type,a;if(e.body&&je(i.return.type)){let g=fs(e.body);(y=g==null?void 0:g.$)!=null&&y.asyncStateMachineStructName&&(a=`${g.$.asyncStateMachineStructName}*`)}e.body&&X(i.return.type)&&!je(i.return.type)&&!e.specializedType&&(h=e.body.$)!=null&&h.type&&(a=Z(e.body.$.type,n));let s=a?eo(i,t,n,a):eo(i,t,n);r.emitLine(`${s} {`);let l=n.currentFunctionName,u=n.currentFunctionType;n.currentFunctionName=o,n.currentFunctionType=i;let d=n.currentClosureCaptures,c=n.currentClosureCaptureFrameLevel,f=n.currentClosureType,m=n.currentClosureCaptureTypeCName;if(i.isClosure){let g=e.closureInfo;if(g){let $=g.closureType.isFn,k=g.captureType;if(n.currentClosureType=$.callType,k&&we(k)&&k.fields.length>0){let b=k.fields.map(w=>w.label);n.currentClosureCaptures=b,n.currentClosureCaptureFrameLevel=e.frameLevel;let E=(_=n.types[k.id])==null?void 0:_.cName;E&&(n.currentClosureCaptureTypeCName=E)}}}vm(e.body,i," ",n),n.currentFunctionName=l,n.currentFunctionType=u,n.currentClosureCaptures=d,n.currentClosureCaptureFrameLevel=c,n.currentClosureType=f,n.currentClosureCaptureTypeCName=m,r.emitLine("}")}function vm(e,t,n,r){var i,a,s,l,u,d,c,f,m;let o=r.emitter;if(V(e)&&v(e,A.begin)){let y=e.args;r.pendingDeferredDrops=(i=e.$)==null?void 0:i.deferredDropExpressions;let h=!1;for(let _=0;_<y.length-1;_++){let g=y[_];v(g,A.return)&&(h=!0);let $=P(g,n,r);if($&&(!g.$||!It(g.$.env.modulePath,$))&&o.emitLine(`${n}${$};`),h)break}if(!h&&y.length>0){let _=y[y.length-1];if(je(t.return.type)&&_){let $=v(_,C.async),k=(a=_.$)==null?void 0:a.type,b=k&&je(k);if($||b){let E=P(_,n,r);o.emitLine(`${n}return ${E};`);return}}else if(_&&De(t.return.type)){let $=P(_,n,r);$&&o.emitLine(`${n}${$};`),Qt(e,n,r)}else if(_){let $=(s=_.$)==null?void 0:s.controlFlow,k=De((l=_.$)==null?void 0:l.type)||V(_)&&v(_,A.tuple)&&_.args.length===0,b=y.length>1?y[y.length-2]:null,E=(u=b==null?void 0:b.$)==null?void 0:u.controlFlow;if(!(k&&E))if($){let w=P(_,n,r);w&&o.emitLine(`${n}${w};`)}else{if((d=_.$)!=null&&d.deferredDupExpressions&&_.$.deferredDupExpressions.length>0){if((c=_.$)!=null&&c.variableName){let L=Z(t.return.type,r),S=Pe(_.$.variableName,_.$.env),B=P(_,n,r);S!==B&&o.emitLine(`${n}${L} ${S} = ${B};`)}Ft(_,n,r);let F=_.$.deferredDupExpressions[0];if(V(F)&&((f=F.$)!=null&&f.variableName)){let L=Te(F.$.variableName);Qt(e,n,r),o.emitLine(`${n}return ${L};`);return}}let w=P(_,n,r);Qt(e,n,r),w&&o.emitLine(`${n}return ${w};`)}}}else if(h&&y.length>0){let _=y[y.length-1];_&&De((m=_.$)==null?void 0:m.type)}}else if(Qt(e,n,r),De(t.return.type)){let y=P(e,n,r);y&&o.emitLine(`${n}${y};`)}else vp(e,n,r)}function Lp(e){let t=new Set;for(let n in e.functions){let{value:r,cName:o}=e.functions[n],i=r.specializedType;Bo(r)||!i||!ln(r.type)||ln(i)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${eo(i,o,e)}; // specialized function: ${x(r.type)}`))}}function Sp(e){for(let t in e.functions){let{value:n,cName:r}=e.functions[t];Bo(n)||!n.specializedType||!ln(n.type)||ln(n.specializedType)||Mp(n,r,e)}}function $m(e){let t=e.emitter;t.emitDeclarationLine("void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:o}=e.types[n];if(we(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ke(l.type)))continue;let a=`__yo_new_${o}`,s=r.fields.map(l=>{let u=Z(l.type,e),d=Te(l.label);return`${u} ${d}`}).join(", ");t.emitDeclarationLine(`${o}* ${a}(${s}); // Constructor`)}}}function Tm(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}}function Em(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
1128
1131
  void __yo_decr_rc(void* ptr) {
1129
1132
  yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1130
1133
 
1134
+ // Skip if this object is marked as garbage by the GC.
1135
+ // During GC collection, dispose functions may call ___drop on children,
1136
+ // but those children are also being collected by the GC.
1137
+ // The GC is responsible for freeing garbage objects, not the RC system.
1138
+ if ((header->gc_flags & YO_GC_TRACKED) && header->gc_mark == YO_GC_GARBAGE) {
1139
+ GC_DEBUG("Decr: Skipping ptr=%p (marked as GC garbage)\\n", ptr);
1140
+ return;
1141
+ }
1142
+
1131
1143
  GC_DEBUG("Decr: ptr=%p RC=%zu->%zu\\n", ptr, header->ref_count, header->ref_count - 1);
1132
1144
 
1133
1145
  if (header->ref_count == 1) {
@@ -1377,7 +1389,19 @@ void __yo_gc_collect() {
1377
1389
  obj = obj->gc_next;
1378
1390
  }
1379
1391
 
1380
- // Phase 4: Sweep - collect garbage objects
1392
+ // Phase 4a: Call dispose functions on all garbage objects (while memory is still valid)
1393
+ // This must happen before freeing any objects, because dispose functions may try
1394
+ // to access other garbage objects (e.g., to check gc_mark in __yo_decr_rc).
1395
+ obj = head;
1396
+ while (obj != NULL) {
1397
+ if (obj->gc_mark == YO_GC_GARBAGE && obj->dispose_fn) {
1398
+ GC_DEBUG("GC: Disposing garbage: ptr=%p\\n", obj);
1399
+ obj->dispose_fn(obj);
1400
+ }
1401
+ obj = obj->gc_next;
1402
+ }
1403
+
1404
+ // Phase 4b: Free all garbage objects and remove from tracking list
1381
1405
  yo_ref_header_t* current = head;
1382
1406
  yo_ref_header_t* prev = NULL;
1383
1407
 
@@ -1385,7 +1409,7 @@ void __yo_gc_collect() {
1385
1409
  yo_ref_header_t* next = current->gc_next;
1386
1410
 
1387
1411
  if (current->gc_mark == YO_GC_GARBAGE) {
1388
- GC_DEBUG("GC: Collecting garbage: ptr=%p\\n", current);
1412
+ GC_DEBUG("GC: Freeing garbage: ptr=%p\\n", current);
1389
1413
 
1390
1414
  // Remove from tracking list
1391
1415
  if (prev == NULL) {
@@ -1400,10 +1424,7 @@ void __yo_gc_collect() {
1400
1424
  yo_current_thread_gc->tracked_count--;
1401
1425
  collected++;
1402
1426
 
1403
- // Call dispose and free
1404
- if (current->dispose_fn) {
1405
- current->dispose_fn(current);
1406
- }
1427
+ // Free the object (dispose was already called in Phase 4a)
1407
1428
  __yo_free(current);
1408
1429
 
1409
1430
  current = next;
@@ -1500,7 +1521,7 @@ static void yo_init_process_cleanup(void) {
1500
1521
  #endif
1501
1522
 
1502
1523
  atexit(yo_process_cleanup);
1503
- }`)}function Gd(e){var n;let t=e.emitter;for(let r in e.types){let{type:o,cName:i}=e.types[r];if($e(o)&&o.isReferenceSemantics){if(o.fields.some(l=>Ye(l.type)))continue;let s=`__yo_traverse_${i}`;t.emitLine(`void ${s}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let l of o.fields){let u=Q(l.label),d=l.type;if($e(d)&&d.isReferenceSemantics)t.emitLine(` if (obj->${u}) {`),t.emitLine(` visit(obj->${u});`),t.emitLine(" }");else if(Ve(d)){let c=d;if(!rn(c)){t.emitLine(` switch (obj->${u}.tag) {`);for(let m of c.variants||[])if(m.fields&&m.fields.length>0){for(let y of m.fields)if($e(y.type)&&y.type.isReferenceSemantics){let g=`YO_${(n=c.id)==null?void 0:n.toUpperCase()}_${m.name.toUpperCase()}`;t.emitLine(` case ${g}:`),t.emitLine(` if (obj->${u}.data.${m.name}.${Q(y.label)}) {`),t.emitLine(` visit(obj->${u}.data.${m.name}.${Q(y.label)});`),t.emitLine(" }"),t.emitLine(" break;");break}}t.emitLine(" }")}}}t.emitLine("}"),t.emitLine("")}}}function Rd(e){var n;let t=e.emitter;Gd(e);for(let r in e.types){let{type:o,cName:i}=e.types[r];if($e(o)&&o.isReferenceSemantics){if(o.fields.some(c=>Ye(c.type)))continue;let s=`__yo_new_${i}`,l=o.fields.map(c=>{let f=H(c.type,e),m=Q(c.label);return`${f} ${m}`}).join(", ");t.emitLine(`${i}* ${s}(${l}) {`),t.emitLine(` ${i}* obj = (${i}*)__yo_malloc(sizeof(${i}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;");let u=o.module.fields.find(c=>c.label===C.___dispose[0]&&c.assignedValue&&Fe(c.assignedValue));if(u&&Fe(u.assignedValue)){let c=u.assignedValue,f=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let d=`__yo_traverse_${i}`;t.emitLine(` obj->header.traverse_fn = ${d};`),o.fields.forEach(c=>{let f=Q(c.label);t.emitLine(` obj->${f} = ${f};`)}),go(o)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Xu(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let o=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`void ${o}(void* closure_ptr);`)}for(let[r,{closureCName:o,captureType:i,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=i.module.fields.find(c=>c.label===C.___drop[0]);if(!l||!l.assignedValue||!Fe(l.assignedValue))continue;let u=l.assignedValue,d=(n=e.functions[u.funcId])==null?void 0:n.cName;d&&(t.emitLine(`void ${s}(void* closure_ptr) { // Dispose for ${o} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${o}* closure = (${o}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${d}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function ep(e){var r,o,i;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let l=`yo_dyn_box_${((r=e.types[a.concreteType.id])==null?void 0:r.cName)||`unknown_${a.concreteType.id}`}`;if(n.has(l))continue;n.add(l);let u=H(a.concreteType,e);t.emitLine(`${l}* __yo_new_${l}(${u} value) {`),t.emitLine(` ${l}* box = (${l}*)__yo_malloc(sizeof(${l}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${l};`),t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_dispose_${l}(void* ptr) {`),t.emitLine(` ${l}* box = (${l}*)ptr;`);let c=(o=(ee(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).module)==null?void 0:o.fields.find(f=>f.label===C.___drop[0]);if(c&&c.assignedValue&&Fe(c.assignedValue)){let f=(i=e.functions[c.assignedValue.funcId])==null?void 0:i.cName;f&&t.emitLine(` ${f}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function tp(e){var n,r,o,i;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let f of s.dynType.requiredModules){if(!Ut(f))continue;let m=f.isFn.callType,y=H(m.return.type,e),g=`yo_wrap_${a}_call`,h=["void* self_ptr"];for(let _=0;_<m.parameters.length;_++){let E=m.parameters[_],k=H(E.type,e);h.push(`${k} arg${_+1}`)}if(t.emitDeclarationLine(`static ${y} ${g}(${h.join(", ")}) {`),yn(l)){let _=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,E=Q(l.fields[0].label);t.emitDeclarationLine(` ${_}* box = (${_}*)self_ptr;`);let k=l.fields[0].type,w=ee(k)&&k.resolvedConcreteType?k.resolvedConcreteType:k,$=e.implClosureCallMap.get(w.id),b=(()=>{var M;if($)return $.functionCName;for(let[,L]of Object.entries(e.functions)){let B=L.value.closureInfo;if(((M=B==null?void 0:B.captureType)==null?void 0:M.id)===w.id)return L.cName}})(),F=[];if(b){F.push(`(void*)&box->${E}`);for(let M=0;M<m.parameters.length;M++)F.push(`arg${M+1}`);rr(m.return.type)?t.emitDeclarationLine(` ${b}(${F.join(", ")});`):t.emitDeclarationLine(` return ${b}(${F.join(", ")});`)}else{F.push(`box->${E}.data`);for(let M=0;M<m.parameters.length;M++)F.push(`arg${M+1}`);rr(m.return.type)?t.emitDeclarationLine(` box->${E}.call(${F.join(", ")});`):t.emitDeclarationLine(` return box->${E}.call(${F.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let _=0;_<m.parameters.length;_++)t.emitDeclarationLine(` (void)arg${_+1};`);rr(m.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${y} zero = (${y})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}let c=s.moduleValue.type.fields;for(let f=0;f<c.length;f++){let m=c[f];if(m.label==="Self"||u.has(m.label))continue;let y=s.moduleValue.fields[f];if(!y||!Fe(y)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function value */`);continue}let g=m.type;if(!ce(g)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function type */`);continue}let h=y.funcId,_=(r=e.functions[h])==null?void 0:r.cName;if(!_){t.emitDeclarationLine(`/* Warning: Impl function for ${m.label} not found */`);continue}let E=`yo_wrap_${a}_${m.label}`,k=H(g.return.type,e),w=["void* self_ptr"];for(let M=1;M<g.parameters.length;M++){let L=g.parameters[M],O=H(L.type,e);w.push(`${O} arg${M}`)}t.emitDeclarationLine(`static ${k} ${E}(${w.join(", ")}) {`);let $=(o=g.parameters[0])==null?void 0:o.type,b;if(yn(l)){let M=((i=e.types[l.id])==null?void 0:i.cName)||`unknown_${l.id}`,L=Q(l.fields[0].label);t.emitDeclarationLine(` ${M}* box = (${M}*)self_ptr;`),$&&De($)?b=`&box->${L}`:b=`box->${L}`}else{let M=H(s.concreteType,e);t.emitDeclarationLine(` ${M} concrete_value = (${M})self_ptr;`),$&&De($)?b="&concrete_value":b="concrete_value"}let F=[b];for(let M=1;M<g.parameters.length;M++)F.push(`arg${M}`);rr(g.return.type)?t.emitDeclarationLine(` ${_}(${F.join(", ")});`):t.emitDeclarationLine(` return ${_}(${F.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}function np(e){var n,r;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[o,i]of e.dynImpls){let a=((n=e.types[i.dynType.id])==null?void 0:n.cName)||`yo_dyn_${i.dynType.id}`,s=((r=e.types[i.concreteType.id])==null?void 0:r.cName)||`unknown_${i.concreteType.id}`,l=`yo_vtable_${o}`,u=`${a}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${i.dynType.requiredModules.map(f=>f.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`);let d=new Set,c=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let f of i.dynType.requiredModules){if(Ut(f)){let m=`yo_wrap_${o}_call`;t.emitDeclarationLine(` .call = ${m},`),d.add("call");continue}for(let m of f.fields)if(m.label!=="Self"&&!c.has(m.label)&&!d.has(m.label)&&(d.add(m.label),ce(m.type))){let y=m.type;if(y.parameters.length>0){let g=y.parameters[0];if(g&&g.label==="self"){let h=`yo_wrap_${o}_${m.label}`;t.emitDeclarationLine(` .${Q(m.label)} = ${h},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function rp(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];Fe(r)&&(Jr(r.type,t),Zr(r.body,t))}for(let n in t.functions){let r=t.functions[n];Jr(r.value.type,t),r.value.specializedType&&Jr(r.value.specializedType,t),Zr(r.value.body,t)}}function Jr(e,t){for(let n of e.parameters)It(n.type,t);for(let n of e.forallParameters)It(n.type,t);It(e.return.type,t)}function Zr(e,t){var n;if(e.$&&e.$.type&&It(e.$.type,t),e.$&&e.$.value&&Fe(e.$.value)){let r=e.$.value;t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>ee(a)&&Pe(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:r.funcId},Jr(r.type,t),$n(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Zr(r,t);if(e.$&&e.$.macroExpansion&&Zr(e.$.macroExpansion,t),e.$&&e.$.captureType&&$e(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`yo_${r.id}`};for(let o of r.fields)It(o.type,t);for(let o of r.module.fields)if(o.assignedValue&&Fe(o.assignedValue)){let i=o.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},Jr(i.type,t),$n(i.body,t))}}}switch(e.tag){case"FuncCall":if(v(e,A.test))break;Zr(e.func,t);for(let r of e.args)Zr(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&G(e.$.value)&&It(e.$.value.value,t);break}}function It(e,t){if(!t.types[e.id]){if(ee(e)&&mn(e)){if(e.resolvedConcreteType){It(e.resolvedConcreteType,t);return}let n=nn(e);n&&It(n,t);return}if(ee(e)&&Pe(e)){let n=Ht(e);n&&It(n.isFuture.outputType,t);return}if(!Ye(e)){if($e(e)||ot(e)||Ve(e)||He(e)||Ne(e)||Ee(e)||at(e)||gt(e)){let n=at(e)?H(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},$e(e))for(let r of e.fields)It(r.type,t);if(Ve(e)){for(let r of e.variants)if(r.fields)for(let o of r.fields)It(o.type,t)}if(ot(e))for(let r of e.fields)It(r.type,t);if(Ne(e)){let r=e;for(let o of r.requiredModules)It(o,t)}if(gt(e)){let r=e;It(r.childType,t),H(r,t)}if(at(e)&&It(e.childType,t),Ee(e)){for(let r of e.fields)It(r.type,t);for(let r of e.fields)if(r.assignedValue&&Fe(r.assignedValue)){let o=r.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:Q(o.funcId)},Jr(o.type,t),$n(o.body,t))}else if(r.assignedValue&&Ke(r.assignedValue)){let o=r.assignedValue;Po(o,t)}}}else if(Oe(e)){let n=e,r=n.childType,o=n.length;if(ct(o)){It(r,t);let i=H(r,t),a=`Array_${Q(i)}_${o.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:i,length:o.value}),t.types[e.id]={type:e,cName:a}}}else if(De(e)){if(It(e.childType,t),at(e.childType)){let r=e.childType.childType;It(r,t);let o=H(r,t),i=`Slice_${Q(o)}`;t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:o})}t.types[e.id]={type:e,cName:H(e,t)}}else Vu.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.module&&It(e.module,t)}}}function op(e){let t=e.debugGc?"#define YO_DEBUG_GC 1":"// #define YO_DEBUG_GC 1",n=e.debugParallelism?"#define YO_DEBUG_PARALLELISM 1":"// #define YO_DEBUG_PARALLELISM 1",r=e.debugAsyncAwait?"#define YO_DEBUG_ASYNC_AWAIT 1":"// #define YO_DEBUG_ASYNC_AWAIT 1";e.emitter.emitDeclarationLine(`// Non-atomic Reference Counting with Thread-Local Cycle Collection
1524
+ }`)}function Cm(e){var n;let t=e.emitter;for(let r in e.types){let{type:o,cName:i}=e.types[r];if(we(o)&&o.isReferenceSemantics){if(o.fields.some(l=>Ke(l.type)))continue;let s=`__yo_traverse_${i}`;t.emitLine(`void ${s}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let l of o.fields){let u=Te(l.label),d=l.type;if(we(d)&&d.isReferenceSemantics)t.emitLine(` if (obj->${u}) {`),t.emitLine(` visit(obj->${u});`),t.emitLine(" }");else if(Ve(d)){let c=d;if(!un(c)){t.emitLine(` switch (obj->${u}.tag) {`);for(let m of c.variants||[])if(m.fields&&m.fields.length>0){for(let y of m.fields)if(we(y.type)&&y.type.isReferenceSemantics){let h=`YO_${(n=c.id)==null?void 0:n.toUpperCase()}_${m.name.toUpperCase()}`;t.emitLine(` case ${h}:`),t.emitLine(` if (obj->${u}.data.${m.name}.${Te(y.label)}) {`),t.emitLine(` visit(obj->${u}.data.${m.name}.${Te(y.label)});`),t.emitLine(" }"),t.emitLine(" break;");break}}t.emitLine(" }")}}}t.emitLine("}"),t.emitLine("")}}}function km(e){var n;let t=e.emitter;Cm(e);for(let r in e.types){let{type:o,cName:i}=e.types[r];if(we(o)&&o.isReferenceSemantics){if(o.fields.some(c=>Ke(c.type)))continue;let s=`__yo_new_${i}`,l=o.fields.map(c=>{let f=Z(c.type,e),m=Te(c.label);return`${f} ${m}`}).join(", ");t.emitLine(`${i}* ${s}(${l}) {`),t.emitLine(` ${i}* obj = (${i}*)__yo_malloc(sizeof(${i}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;");let u=o.module.fields.find(c=>c.label===C.___dispose[0]&&c.assignedValue&&xe(c.assignedValue));if(u&&xe(u.assignedValue)){let c=u.assignedValue,f=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let d=`__yo_traverse_${i}`;t.emitLine(` obj->header.traverse_fn = ${d};`),o.fields.forEach(c=>{let f=Te(c.label);t.emitLine(` obj->${f} = ${f};`)}),To(o)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Ap(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let o=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`void ${o}(void* closure_ptr);`)}for(let[r,{closureCName:o,captureType:i,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=i.module.fields.find(c=>c.label===C.___drop[0]);if(!l||!l.assignedValue||!xe(l.assignedValue))continue;let u=l.assignedValue,d=(n=e.functions[u.funcId])==null?void 0:n.cName;d&&(t.emitLine(`void ${s}(void* closure_ptr) { // Dispose for ${o} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${o}* closure = (${o}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${d}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function Ip(e){var r,o,i;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let l=`yo_dyn_box_${((r=e.types[a.concreteType.id])==null?void 0:r.cName)||`unknown_${a.concreteType.id}`}`;if(n.has(l))continue;n.add(l);let u=Z(a.concreteType,e);t.emitLine(`${l}* __yo_new_${l}(${u} value) {`),t.emitLine(` ${l}* box = (${l}*)__yo_malloc(sizeof(${l}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${l};`),t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_dispose_${l}(void* ptr) {`),t.emitLine(` ${l}* box = (${l}*)ptr;`);let c=(o=(X(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).module)==null?void 0:o.fields.find(f=>f.label===C.___drop[0]);if(c&&c.assignedValue&&xe(c.assignedValue)){let f=(i=e.functions[c.assignedValue.funcId])==null?void 0:i.cName;f&&t.emitLine(` ${f}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function Np(e){var n,r,o,i;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let d of s.dynType.requiredModules){if(!Bt(d))continue;let c=d.isFn.callType,f=Z(c.return.type,e),m=`yo_wrap_${a}_call`,y=["void* self_ptr"];for(let h=0;h<c.parameters.length;h++){let _=c.parameters[h],g=Z(_.type,e);y.push(`${g} arg${h+1}`)}if(t.emitDeclarationLine(`static ${f} ${m}(${y.join(", ")}) {`),$n(l)){let h=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,_=Te(l.fields[0].label);t.emitDeclarationLine(` ${h}* box = (${h}*)self_ptr;`);let g=l.fields[0].type,$=X(g)&&g.resolvedConcreteType?g.resolvedConcreteType:g,k=e.implClosureCallMap.get($.id),b=(()=>{var w;if(k)return k.functionCName;for(let[,F]of Object.entries(e.functions)){let S=F.value.closureInfo;if(((w=S==null?void 0:S.captureType)==null?void 0:w.id)===$.id)return F.cName}})(),E=[];if(b){E.push(`(void*)&box->${_}`);for(let w=0;w<c.parameters.length;w++)E.push(`arg${w+1}`);ar(c.return.type)?t.emitDeclarationLine(` ${b}(${E.join(", ")});`):t.emitDeclarationLine(` return ${b}(${E.join(", ")});`)}else{E.push(`box->${_}.data`);for(let w=0;w<c.parameters.length;w++)E.push(`arg${w+1}`);ar(c.return.type)?t.emitDeclarationLine(` box->${_}.call(${E.join(", ")});`):t.emitDeclarationLine(` return box->${_}.call(${E.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let h=0;h<c.parameters.length;h++)t.emitDeclarationLine(` (void)arg${h+1};`);ar(c.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${f} zero = (${f})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let d=0;d<s.dynType.requiredModules.length;d++){let c=s.dynType.requiredModules[d];if(Bt(c))continue;let f=s.moduleValues[d];if(!f){t.emitDeclarationLine(`/* Warning: Module value missing for module ${d} */`);continue}let y=f.type.fields;for(let h=0;h<y.length;h++){let _=y[h];if(_.label==="Self"||u.has(_.label))continue;let g=f.fields[h];if(!g||!xe(g)){t.emitDeclarationLine(`/* Warning: Module field ${_.label} is not a function value */`);continue}let $=_.type;if(!me($)){t.emitDeclarationLine(`/* Warning: Module field ${_.label} is not a function type */`);continue}let k=g.funcId,b=(r=e.functions[k])==null?void 0:r.cName;if(!b){t.emitDeclarationLine(`/* Warning: Impl function for ${_.label} not found */`);continue}let E=`yo_wrap_${a}_${_.label}`,w=Z($.return.type,e),F=["void* self_ptr"];for(let R=1;R<$.parameters.length;R++){let Y=$.parameters[R],W=Z(Y.type,e);F.push(`${W} arg${R}`)}t.emitDeclarationLine(`static ${w} ${E}(${F.join(", ")}) {`);let L=(o=$.parameters[0])==null?void 0:o.type,S;if($n(l)){let R=((i=e.types[l.id])==null?void 0:i.cName)||`unknown_${l.id}`,Y=Te(l.fields[0].label);t.emitDeclarationLine(` ${R}* box = (${R}*)self_ptr;`),L&&ze(L)?S=`&box->${Y}`:S=`box->${Y}`}else{let R=Z(s.concreteType,e);t.emitDeclarationLine(` ${R} concrete_value = (${R})self_ptr;`),L&&ze(L)?S="&concrete_value":S="concrete_value"}let B=[S];for(let R=1;R<$.parameters.length;R++)B.push(`arg${R}`);ar($.return.type)?t.emitDeclarationLine(` ${b}(${B.join(", ")});`):t.emitDeclarationLine(` return ${b}(${B.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function Dp(e){var n,r;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[o,i]of e.dynImpls){let a=((n=e.types[i.dynType.id])==null?void 0:n.cName)||`yo_dyn_${i.dynType.id}`,s=((r=e.types[i.concreteType.id])==null?void 0:r.cName)||`unknown_${i.concreteType.id}`,l=`yo_vtable_${o}`,u=`${a}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${i.dynType.requiredModules.map(f=>f.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`);let d=new Set,c=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let f of i.dynType.requiredModules){if(Bt(f)){let m=`yo_wrap_${o}_call`;t.emitDeclarationLine(` .call = ${m},`),d.add("call");continue}for(let m of f.fields)if(m.label!=="Self"&&!c.has(m.label)&&!d.has(m.label)&&(d.add(m.label),me(m.type))){let y=m.type;if(y.parameters.length>0){let h=y.parameters[0];if(h&&h.label==="self"){let _=`yo_wrap_${o}_${m.label}`;t.emitDeclarationLine(` .${Te(m.label)} = ${_},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function Op(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];xe(r)&&(to(r.type,t),Fr(r.body,t))}for(let n in t.functions){let r=t.functions[n];if(to(r.value.type,t),r.value.specializedType&&to(r.value.specializedType,t),Fr(r.value.body,t),r.value.calledComptFunctionCaches)for(let o of r.value.calledComptFunctionCaches)o.value&&o.value.type&&Lt(o.value.type,t),Fr(o.body,t)}}function to(e,t){for(let n of e.parameters)Lt(n.type,t);for(let n of e.forallParameters)Lt(n.type,t);Lt(e.return.type,t)}function Fr(e,t){var n;if(e.$&&e.$.type&&Lt(e.$.type,t),e.$&&e.$.value&&xe(e.$.value)){let r=e.$.value;t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>X(a)&&je(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:Te(r.funcId)},to(r.type,t),wn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Fr(r,t);if(e.$&&e.$.macroExpansion&&Fr(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)Lt(r,t);if(e.$&&e.$.captureType&&we(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`yo_${r.id}`};for(let o of r.fields)Lt(o.type,t);for(let o of r.module.fields)if(o.assignedValue&&xe(o.assignedValue)){let i=o.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},to(i.type,t),wn(i.body,t))}}}switch(e.tag){case"FuncCall":if(v(e,A.test))break;Fr(e.func,t);for(let r of e.args)Fr(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&j(e.$.value)&&Lt(e.$.value.value,t);break}}function Lt(e,t){if(!t.types[e.id]){if(X(e)&&vn(e)){if(e.resolvedConcreteType){Lt(e.resolvedConcreteType,t);return}let n=sn(e);n&&Lt(n,t);return}if(X(e)&&je(e)){let n=Kt(e);n&&Lt(n.isFuture.outputType,t);return}if(!Ke(e)){if(we(e)||pt(e)||Ve(e)||Ne(e)||Re(e)||Fe(e)||ft(e)||Ct(e)){let n=ft(e)?Z(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},we(e))for(let r of e.fields)Lt(r.type,t);if(Ve(e)){for(let r of e.variants)if(r.fields)for(let o of r.fields)Lt(o.type,t)}if(pt(e))for(let r of e.fields)Lt(r.type,t);if(Re(e)){let r=e;for(let o of r.requiredModules)Lt(o,t)}if(Ct(e)){let r=e;Lt(r.childType,t),Z(r,t)}if(ft(e)&&Lt(e.childType,t),Fe(e)){for(let r of e.fields)Lt(r.type,t);for(let r of e.fields)if(r.assignedValue&&xe(r.assignedValue)){let o=r.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:Te(o.funcId)},to(o.type,t),wn(o.body,t))}else if(r.assignedValue&&Je(r.assignedValue)){let o=r.assignedValue;Yo(o,t)}}}else if(Oe(e)){let n=e,r=n.childType,o=n.length;if(tt(o)){Lt(r,t);let i=Z(r,t),a=`Array_${Te(i)}_${o.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:i,length:typeof o.value=="bigint"?Number(o.value):o.value}),t.types[e.id]={type:e,cName:a}}}else if(ze(e)){if(Lt(e.childType,t),ft(e.childType)){let r=e.childType.childType;Lt(r,t);let o=Z(r,t),i=`Slice_${Te(o)}`;t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:o})}t.types[e.id]={type:e,cName:Z(e,t)}}else fp.has(e.tag)&&(t.types[e.id]={type:e,cName:Z(e,t)});e.module&&Lt(e.module,t)}}}function Bp(e){let t=e.debugGc?"#define YO_DEBUG_GC 1":"// #define YO_DEBUG_GC 1",n=e.debugParallelism?"#define YO_DEBUG_PARALLELISM 1":"// #define YO_DEBUG_PARALLELISM 1",r=e.debugAsyncAwait?"#define YO_DEBUG_ASYNC_AWAIT 1":"// #define YO_DEBUG_ASYNC_AWAIT 1";e.emitter.emitDeclarationLine(`// Non-atomic Reference Counting with Thread-Local Cycle Collection
1504
1525
  // Based on QuickJS trial deletion algorithm
1505
1526
  // See CYCLE_COLLECTION.md for design details
1506
1527
 
@@ -1684,7 +1705,7 @@ typedef struct yo_io_future_t {
1684
1705
  } yo_io_future_t;
1685
1706
 
1686
1707
  // Forward declarations will be added here if needed
1687
- `);for(let c in e.types){let{type:f,cName:m}=e.types[c];if(!Ye(f)){if(Wt(f))e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`);else if($e(f)){if(f.isNewtype&&f.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}else if(Ve(f)){let y=rn(f),g=ir(f);!y&&!g&&e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),qd(e),Yd(e),es(e);for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||Ve(f)&&ir(f)&&ts(f,m,e)}let o=[];for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||($e(f)?o.push({typeId:c,type:f,cName:m,kind:"struct"}):Ve(f)&&!ir(f)&&!rn(f)&&o.push({typeId:c,type:f,cName:m,kind:"enum"}))}let i=new Map,a=new Map(o.map(c=>[c.typeId,c])),s=new Map(o.map(c=>[c.cName,c.typeId]));for(let{typeId:c,type:f,kind:m}of o)if(i.set(c,new Set),m==="struct"&&$e(f)){for(let y of f.fields)if(Ve(y.type)){let g=H(y.type,e),h=s.get(g);h&&h!==c&&a.has(h)&&i.get(c).add(h)}else if($e(y.type)&&!y.type.isReferenceSemantics&&!y.type.isNewtype){let g=H(y.type,e),h=s.get(g);h&&h!==c&&a.has(h)&&i.get(c).add(h)}}else if(m==="enum"&&Ve(f)){for(let y of f.variants)if(y.fields){for(let g of y.fields)if(Ve(g.type)){let h=H(g.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}else if($e(g.type)&&g.type.isNewtype){let h=H(g.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}}}let l=new Map;for(let[c,f]of i)l.set(c,f.size);let u=[];for(let[c,f]of l)f===0&&u.push(c);let d=[];for(;u.length>0;){let c=u.shift(),f=a.get(c);d.push({type:f.type,cName:f.cName,kind:f.kind});for(let[m,y]of i)if(y.has(c)){let g=(l.get(m)||1)-1;l.set(m,g),g===0&&u.push(m)}}if(d.length<o.length)for(let c of o)d.find(f=>f.cName===c.cName)||d.push({type:c.type,cName:c.cName,kind:c.kind});for(let{type:c,cName:f,kind:m}of d)m==="struct"&&$e(c)?jd(c,f,e):m==="enum"&&Ve(c)&&ts(c,f,e);for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||Ve(f)&&rn(f)&&ts(f,m,e)}for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||(Ne(f)?Kd(f,m,e):ot(f)?Hd(f,m,e):He(f)&&Wd(f,m,e))}}function qd(e){let t=e.emitter;for(let[n,{childType:r,length:o}]of e.arrayStructTypes)t.emitDeclarationLine("typedef struct { // Array wrapper struct"),t.emitDeclarationLine(` ${r} data[${o}];`),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function Yd(e){let t=e.emitter;for(let[n,{childType:r}]of e.sliceStructTypes)t.emitDeclarationLine("typedef struct { // Slice wrapper struct"),t.emitDeclarationLine(` ${r}* data;`),t.emitDeclarationLine(" size_t length;"),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function es(e){var n;let t=e.emitter;if(e.isoTypes){for(let[r,o]of e.isoTypes){let{childTypeCName:i,structGenerated:a}=o;a||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine(`} ${r}_struct;`),t.emitDeclarationLine(`typedef ${r}_struct* ${r};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_iso_${r}(${i} value);`),t.emitDeclarationLine(""),o.structGenerated=!0)}for(let[r,o]of e.isoTypes){let{optionTypeCName:i,extractGenerated:a}=o;a||!i||t.emitDeclarationLine(`${i} __yo_iso_extract_${r}(${r} iso);`)}for(let[r,o]of e.isoTypes){let{structGenerated:i}=o;i&&(t.emitDeclarationLine(`void __yo_iso_dispose_${r}(${r} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${r}(void* ptr);`))}for(let[r,o]of e.isoTypes){let{childTypeCName:i,createGenerated:a}=o;a||(t.emitLine(`
1708
+ `);for(let c in e.types){let{type:f,cName:m}=e.types[c];if(!Ke(f)){if(an(f))e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`);else if(we(f)){if(f.isNewtype&&f.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}else if(Ve(f)){let y=un(f),h=lr(f);!y&&!h&&e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),bm(e),wm(e),ds(e);for(let c in e.types){let{type:f,cName:m}=e.types[c];Ke(f)||Ve(f)&&lr(f)&&ms(f,m,e)}let o=[];for(let c in e.types){let{type:f,cName:m}=e.types[c];Ke(f)||(we(f)?o.push({typeId:c,type:f,cName:m,kind:"struct"}):Ve(f)&&!lr(f)&&!un(f)?o.push({typeId:c,type:f,cName:m,kind:"enum"}):Ne(f)&&o.push({typeId:c,type:f,cName:m,kind:"tuple"}))}let i=new Map,a=new Map(o.map(c=>[c.typeId,c])),s=new Map(o.map(c=>[c.cName,c.typeId]));for(let{typeId:c,type:f,kind:m}of o)if(i.set(c,new Set),m==="struct"&&we(f))for(let y of f.fields){let h=y.type;if(X(h)&&h.resolvedConcreteType&&(h=h.resolvedConcreteType),Ve(h)){let _=Z(h,e),g=s.get(_);g&&g!==c&&a.has(g)&&i.get(c).add(g)}else if(we(h)&&!h.isReferenceSemantics&&!h.isNewtype){let _=Z(h,e),g=s.get(_);g&&g!==c&&a.has(g)&&i.get(c).add(g)}else if(Ne(h)){let _=Z(h,e),g=s.get(_);g&&g!==c&&a.has(g)&&i.get(c).add(g)}}else if(m==="enum"&&Ve(f)){for(let y of f.variants)if(y.fields){for(let h of y.fields)if(Ve(h.type)){let _=Z(h.type,e),g=s.get(_);g&&g!==c&&a.has(g)&&i.get(c).add(g)}else if(we(h.type)&&h.type.isNewtype){let _=Z(h.type,e),g=s.get(_);g&&g!==c&&a.has(g)&&i.get(c).add(g)}else if(Ne(h.type)){let _=Z(h.type,e),g=s.get(_);g&&g!==c&&a.has(g)&&i.get(c).add(g)}}}else if(m==="tuple"&&Ne(f)){for(let y of f.fields)if(Ne(y.type)){let h=Z(y.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}else if(Ve(y.type)){let h=Z(y.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}else if(we(y.type)&&!y.type.isReferenceSemantics&&!y.type.isNewtype){let h=Z(y.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}}let l=new Map;for(let[c,f]of i)l.set(c,f.size);let u=[];for(let[c,f]of l)f===0&&u.push(c);let d=[];for(;u.length>0;){let c=u.shift(),f=a.get(c);d.push({type:f.type,cName:f.cName,kind:f.kind});for(let[m,y]of i)if(y.has(c)){let h=(l.get(m)||1)-1;l.set(m,h),h===0&&u.push(m)}}if(d.length<o.length)for(let c of o)d.find(f=>f.cName===c.cName)||d.push({type:c.type,cName:c.cName,kind:c.kind});for(let{type:c,cName:f,kind:m}of d)m==="struct"&&we(c)?Fm(c,f,e):m==="enum"&&Ve(c)?ms(c,f,e):m==="tuple"&&Ne(c)&&Vm(c,f,e);for(let c in e.types){let{type:f,cName:m}=e.types[c];Ke(f)||Ve(f)&&un(f)&&ms(f,m,e)}for(let c in e.types){let{type:f,cName:m}=e.types[c];Ke(f)||(Re(f)?Mm(f,m,e):pt(f)&&xm(f,m,e))}}function bm(e){let t=e.emitter;for(let[n,{childType:r,length:o}]of e.arrayStructTypes)t.emitDeclarationLine("typedef struct { // Array wrapper struct"),t.emitDeclarationLine(` ${r} data[${o}];`),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function wm(e){let t=e.emitter;for(let[n,{childType:r}]of e.sliceStructTypes)t.emitDeclarationLine("typedef struct { // Slice wrapper struct"),t.emitDeclarationLine(` ${r}* data;`),t.emitDeclarationLine(" size_t length;"),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function ds(e){var n;let t=e.emitter;if(e.isoTypes){for(let[r,o]of e.isoTypes){let{childTypeCName:i,structGenerated:a}=o;a||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine(`} ${r}_struct;`),t.emitDeclarationLine(`typedef ${r}_struct* ${r};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_iso_${r}(${i} value);`),t.emitDeclarationLine(""),o.structGenerated=!0)}for(let[r,o]of e.isoTypes){let{optionTypeCName:i,extractGenerated:a}=o;a||!i||t.emitDeclarationLine(`${i} __yo_iso_extract_${r}(${r} iso);`)}for(let[r,o]of e.isoTypes){let{structGenerated:i}=o;i&&(t.emitDeclarationLine(`void __yo_iso_dispose_${r}(${r} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${r}(void* ptr);`))}for(let[r,o]of e.isoTypes){let{childTypeCName:i,createGenerated:a}=o;a||(t.emitLine(`
1688
1709
  ${r} __yo_create_iso_${r}(${i} value) {
1689
1710
  ${r} iso = (${r})__yo_malloc(sizeof(${r}_struct));
1690
1711
  iso->header.ref_count = 1;
@@ -1717,87 +1738,99 @@ ${i} __yo_iso_extract_${r}(${r} iso) {
1717
1738
  result.data.Some.value = iso->value;
1718
1739
  }
1719
1740
  return result;
1720
- }`)}o.extractGenerated=!0}}}}function jd(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let o=e.fields[0].type,i=H(o,n);r.emitDeclarationLine(`typedef ${i} ${t}; // ${e.typeName} : ${x(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let o of e.fields){let i=H(o.type,n),a=Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=H(o.type,n),a=Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Wd(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=H(o.type,n),a=o.label.match(/^\d+$/)?`_${o.label}`:Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Hd(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=H(o.type,n),a=Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function ts(e,t,n){let r=n.emitter,o=rn(e);if(o){let l=H(o,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${x(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(ir(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${x(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let d=Tn(e,u.name,n),c=l<e.variants.length-1?",":"";r.emitDeclarationLine(` ${d} = ${l}${c}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let d=Tn(e,u.name,n),c=l<e.variants.length-1?",":"";r.emitDeclarationLine(` ${d} = ${l}${c}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(d=>!Be(d.type));if(u.length>0){let d=l.name;r.emitDeclarationLine(" struct {");for(let c of u){let f=H(c.type,n),m=Q(c.label);r.emitDeclarationLine(` ${f} ${m};`)}r.emitDeclarationLine(` } ${d};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function Kd(e,t,n){let r=n.emitter,o=`${t}_vtable`;r.emitDeclarationLine(`typedef struct { // Vtable for ${x(e)}`);let i=new Set,a=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let s of e.requiredModules){if(Ut(s)){let l=s.isFn.callType,u=H(l.return.type,n),d=l.parameters.map(c=>{let f=H(c.type,n),m=Q(c.label);return`${f} ${m}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${d?", "+d:""}); // Call function pointer`),i.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||i.has(l.label))continue;i.add(l.label);let u=Q(l.label);if(ce(l.type)){let d=l.type;if(d.parameters.length>0){let c=d.parameters[0];if(c&&c.label==="self"){let f=H(d.return.type,n),m=d.parameters.map((y,g)=>{if(g===0)return"void* self";{let h=H(y.type,n),_=Q(y.label);return`${h} ${_}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${m}); // Method pointer for ${l.label}`)}}}else{let d=H(l.type,n);r.emitDeclarationLine(` ${d} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${o};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`typedef struct { // ${e.typeName||"Dyn"} : ${x(e)} (value type - fat pointer)`),r.emitDeclarationLine(" void* data; // Pointer to boxed data (with yo_ref_header_t)"),r.emitDeclarationLine(` const ${o}* vtable; // Pointer to static vtable (no allocation needed)`),r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function ip(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,o]of e.dynImpls){let a=`yo_dyn_box_${((r=e.types[o.concreteType.id])==null?void 0:r.cName)||`unknown_${o.concreteType.id}`}`;if(n.has(a))continue;n.add(a);let s=H(o.concreteType,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" yo_ref_header_t header;"),t.emitDeclarationLine(` ${s} value;`),t.emitDeclarationLine(`} ${a};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${a}* __yo_new_${a}(${s} value);`),t.emitDeclarationLine(`void __yo_dispose_${a}(void* ptr);`),t.emitDeclarationLine("")}}function kr(e){var t,n,r;if(e.$&&e.$.value&&Ue(e.$.value)&&!(ce(e.$.type)&&e.$.type.isExtern)){if(!Be(e.$.type))return!0}if(V(e)){if(kr(e.func))return!0;for(let o of e.args)if(!((t=o.$)!=null&&t.type&&Be(o.$.type))&&kr(o))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&Be(e.$.type))return!1;if(kr(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(kr(o))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let o of e.$.deferredDropExpressions)if(kr(o))return!0}return!1}function Po(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],o=e.type.fields[n];Fe(r)&&(o.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:Q(r.funcId)},$n(r.body,t))}}function $n(e,t){var o,i,a,s,l,u,d,c,f;if(V(e)&&v(e,A.test))return;if(e.$&&e.$.macroExpansion&&$n(e.$.macroExpansion,t),e.$&&e.$.closureFunctionValue){let m=e.$.closureFunctionValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Q(m.funcId)},$n(m.body,t))}if(V(e)&&e.$&&e.$.dynCallModuleValues&&e.$.dynCallModuleValues.length>0){let m=e.$.type,y=e.args[0];if(Ne(m)&&y&&((o=y.$)!=null&&o.type)){let g=y.$.type,h=e.$.dynCallModuleValues[0];if(h&&($t(g)||yn(g))){let _=yn(g)?g.fields[0].type:g,E=`${_.id}_${m.id}`;t.dynImpls.set(E,{dynType:m,concreteType:_,dataType:g,moduleValue:h})}}}if(V(e)){let m=(i=e.func.$)==null?void 0:i.type,y=(a=e.func.$)==null?void 0:a.value;if(e.func.token.value==="?=")return;if(ce(m))if(Fe(y)){if(Nn(y.type)&&!y.specializedType||y.specializedType&&Nn(y.specializedType))return;if(!t.functions[y.funcId]){if(kr(y.body)||y.type.parameters.map(_=>_.type).some(_=>ee(_)&&Pe(_)&&!_.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:Q(y.funcId)},$n(y.body,t)}}else m.isExtern==="c"&&(t.externFunctions[m.id]={type:m,cName:j(e.func)?e.func.token.value:m.id});$n(e.func,t);for(let g of e.args)$n(g,t)}let n=(s=e.$)==null?void 0:s.type,r=(l=e.$)==null?void 0:l.value;if(ce(n)&&Fe(r)){if(Nn(r.type)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(kr(r.body))return;t.functions[r.funcId]={value:r,cName:Q(r.funcId)},$n(r.body,t)}if(G((u=e.$)==null?void 0:u.value)&&It(e.$.value.value,t),(d=e.$)!=null&&d.deferredDupExpressions)for(let m of e.$.deferredDupExpressions)$n(m,t);if((c=e.$)!=null&&c.deferredDropExpressions)for(let m of e.$.deferredDropExpressions)$n(m,t);if((f=e.$)!=null&&f.dynCallModuleValues)for(let m of e.$.dynCallModuleValues)Po(m,t)}function ap(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let o=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`yo_dyn_${r.dynType.id}`,a=`${(()=>{var d,c;let s=(d=e.types[r.concreteType.id])==null?void 0:d.cName;if(s)return s;let l=nn(r.concreteType);return(l?(c=e.types[l.id])==null?void 0:c.cName:void 0)||`unknown_${r.concreteType.id}`})()}_${o}`;t.set(a,r)}e.dynImpls=t}var da=class{constructor(){this.emitter=new ei}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
1721
- // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${ni(t)}`);let o={functions:{},externFunctions:{},types:{},arrayStructTypes:new Map,sliceStructTypes:new Map,spawnedFunctionSignatures:new Map,spawnedClosureSignatures:new Map,closureCaptureMap:new Map,implClosureCallMap:new Map,dynImpls:new Map,currentFunctionName:"",emitter:this.emitter,cIncludes:new Set(["<stdbool.h>","<stdint.h>","<stddef.h>","<stdarg.h>","<stdatomic.h>","<stdlib.h>","<stdio.h>","<string.h>","<fcntl.h>","<unistd.h>","<sys/stat.h>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,deferredAsyncBlocks:[],allocator:r.allocator??"mimalloc"};Po(n,o),rp(n,o),ql(o),Yl(o),this.emitter.emitDeclarationLine(`
1741
+ }`)}o.extractGenerated=!0}}}}function Fm(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let o=e.fields[0].type,i=Z(o,n);r.emitDeclarationLine(`typedef ${i} ${t}; // ${e.typeName} : ${x(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let o of e.fields){let i=Z(o.type,n),a=Te(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=Z(o.type,n),a=Te(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Vm(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${x(e)}`),e.fields.length===0)r.emitDeclarationLine(" uint8_t _dummy; // zero-sized type marker");else for(let o=0;o<e.fields.length;o++){let i=e.fields[o],a=Z(i.type,n),s=`_${o}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function xm(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=Z(o.type,n),a=Te(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function ms(e,t,n){let r=n.emitter,o=un(e);if(o){let l=Z(o,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${x(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(lr(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${x(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let d=bn(e,u.name,n),c=l<e.variants.length-1?",":"";r.emitDeclarationLine(` ${d} = ${l}${c}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let d=bn(e,u.name,n),c=l<e.variants.length-1?",":"";r.emitDeclarationLine(` ${d} = ${l}${c}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(d=>!De(d.type));if(u.length>0){let d=l.name;r.emitDeclarationLine(" struct {");for(let c of u){let f=Z(c.type,n),m=Te(c.label);r.emitDeclarationLine(` ${f} ${m};`)}r.emitDeclarationLine(` } ${d};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function Mm(e,t,n){let r=n.emitter,o=`${t}_vtable`;r.emitDeclarationLine(`typedef struct { // Vtable for ${x(e)}`);let i=new Set,a=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let s of e.requiredModules){if(Bt(s)){let l=s.isFn.callType,u=Z(l.return.type,n),d=l.parameters.map(c=>{let f=Z(c.type,n),m=Te(c.label);return`${f} ${m}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${d?", "+d:""}); // Call function pointer`),i.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||i.has(l.label))continue;i.add(l.label);let u=Te(l.label);if(me(l.type)){let d=l.type;if(d.parameters.length>0){let c=d.parameters[0];if(c&&c.label==="self"){let f=Z(d.return.type,n),m=d.parameters.map((y,h)=>{if(h===0)return"void* self";{let _=Z(y.type,n),g=Te(y.label);return`${_} ${g}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${m}); // Method pointer for ${l.label}`)}}}else{let d=Z(l.type,n);r.emitDeclarationLine(` ${d} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${o};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`typedef struct { // ${e.typeName||"Dyn"} : ${x(e)} (value type - fat pointer)`),r.emitDeclarationLine(" void* data; // Pointer to boxed data (with yo_ref_header_t)"),r.emitDeclarationLine(` const ${o}* vtable; // Pointer to static vtable (no allocation needed)`),r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Up(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,o]of e.dynImpls){let a=`yo_dyn_box_${((r=e.types[o.concreteType.id])==null?void 0:r.cName)||`unknown_${o.concreteType.id}`}`;if(n.has(a))continue;n.add(a);let s=Z(o.concreteType,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" yo_ref_header_t header;"),t.emitDeclarationLine(` ${s} value;`),t.emitDeclarationLine(`} ${a};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${a}* __yo_new_${a}(${s} value);`),t.emitDeclarationLine(`void __yo_dispose_${a}(void* ptr);`),t.emitDeclarationLine("")}}function Vr(e){var t,n,r;if(e.$&&e.$.value&&Be(e.$.value)&&!(me(e.$.type)&&e.$.type.isExtern)){if(!De(e.$.type))return!0}if(V(e)){if(Vr(e.func))return!0;for(let o of e.args)if(!((t=o.$)!=null&&t.type&&De(o.$.type))&&Vr(o))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&De(e.$.type))return!1;if(Vr(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(Vr(o))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let o of e.$.deferredDropExpressions)if(Vr(o))return!0}return!1}function Yo(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],o=e.type.fields[n];xe(r)&&(o.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:Te(r.funcId)},wn(r.body,t))}}function wn(e,t){var o,i,a,s,l,u,d,c,f;if(V(e)&&v(e,A.test))return;if(e.$&&e.$.macroExpansion&&wn(e.$.macroExpansion,t),e.$&&e.$.closureFunctionValue){let m=e.$.closureFunctionValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Te(m.funcId)},wn(m.body,t))}if(V(e)&&e.$&&e.$.dynCallModuleValues&&e.$.dynCallModuleValues.length>0){let m=e.$.type,y=e.args[0];if(Re(m)&&y&&((o=y.$)!=null&&o.type)){let h=y.$.type,_=e.$.dynCallModuleValues;if(_.length>0&&(vt(h)||$n(h))){let g=$n(h)?h.fields[0].type:h,$=`${g.id}_${m.id}`;t.dynImpls.set($,{dynType:m,concreteType:g,dataType:h,moduleValues:_})}}}if(V(e)){let m=(i=e.func.$)==null?void 0:i.type,y=(a=e.func.$)==null?void 0:a.value;if(e.func.token.value==="?=")return;if(me(m))if(xe(y)){if(ln(y.type)&&!y.specializedType||y.specializedType&&ln(y.specializedType))return;if(!t.functions[y.funcId]){if(Vr(y.body)||y.type.parameters.map(g=>g.type).some(g=>X(g)&&je(g)&&!g.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:Te(y.funcId)},wn(y.body,t)}}else m.isExtern==="c"&&(t.externFunctions[m.id]={type:m,cName:Q(e.func)?e.func.token.value:m.id});wn(e.func,t);for(let h of e.args)wn(h,t)}let n=(s=e.$)==null?void 0:s.type,r=(l=e.$)==null?void 0:l.value;if(me(n)&&xe(r)){if(ln(r.type)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(Vr(r.body))return;t.functions[r.funcId]={value:r,cName:Te(r.funcId)},wn(r.body,t)}if(j((u=e.$)==null?void 0:u.value)&&Lt(e.$.value.value,t),(d=e.$)!=null&&d.deferredDupExpressions)for(let m of e.$.deferredDupExpressions)wn(m,t);if((c=e.$)!=null&&c.deferredDropExpressions)for(let m of e.$.deferredDropExpressions)wn(m,t);if((f=e.$)!=null&&f.dynCallModuleValues)for(let m of e.$.dynCallModuleValues)Yo(m,t)}function Rp(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let o=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`yo_dyn_${r.dynType.id}`,a=`${(()=>{var d,c;let s=(d=e.types[r.concreteType.id])==null?void 0:d.cName;if(s)return s;let l=sn(r.concreteType);return(l?(c=e.types[l.id])==null?void 0:c.cName:void 0)||`unknown_${r.concreteType.id}`})()}_${o}`;t.set(a,r)}e.dynImpls=t}var Ca=class{constructor(){this.emitter=new si}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
1742
+ // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${mo(t)}`);let o={functions:{},externFunctions:{},types:{},arrayStructTypes:new Map,sliceStructTypes:new Map,spawnedFunctionSignatures:new Map,spawnedClosureSignatures:new Map,closureCaptureMap:new Map,implClosureCallMap:new Map,dynImpls:new Map,currentFunctionName:"",emitter:this.emitter,cIncludes:new Set(["<stdbool.h>","<stdint.h>","<stddef.h>","<stdarg.h>","<stdatomic.h>","<stdlib.h>","<stdio.h>","<string.h>","<fcntl.h>","<unistd.h>","<sys/stat.h>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,deferredAsyncBlocks:[],allocator:r.allocator??"mimalloc"};Yo(n,o),Op(n,o),Vu(o),xu(o),this.emitter.emitDeclarationLine(`
1722
1743
  // Future state enum - shared by all Future types
1723
1744
  typedef enum {
1724
1745
  YO_FUTURE_RUNNING = 0, // Task is in progress (queued or executing)
1725
1746
  YO_FUTURE_COMPLETED = 1, // Task completed successfully
1726
1747
  YO_FUTURE_ERROR = 2 // Task failed with error
1727
1748
  } yo_future_state_t;
1728
- `),op(o),ap(o),ip(o),Pu(o),ju(o),Wu(o),ep(o),tp(o),np(o),Hu(o),Gu(o),Ku(o),Xu(o),Zu(o),Ju(o)}print(){return this.emitter.print()}};function sp({expr:e,env:t,context:n}){Ce(e,C.alignof,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});t=o.$.env;let i;o.$.value&&G(o.$.value)?i=o.$.value.value:i=o.$.type;let a=Xn(i),s;return a===null?s=re(_t()):s=Dt("Usize",a),e.$={env:t,type:_t(),value:s,pathCollection:[]},e}function lp({expr:e,env:t,context:n}){let r=v(e,A.op_and)?"and":"or",o=e.args;if(o.length===0){let u=it(r==="and");return e.$={env:t,type:Qe(),value:u,pathCollection:[],isAccessingProperty:!1},e}let i=t,a,s=!1,l=!1;for(let u=0;u<o.length;u++){let d=o[u],c=S({expr:d,env:i,context:{...n}});if(!c.$||!vn(c.$.type))throw p({token:d.token,errorMessage:`Expected bool type for "${r}" argument, got:
1729
- ${T(d)}`});i=c.$.env;let f=c.$.value;if(Ue(f)){s=!0;continue}if(et(f)){let m=f.value;if(r==="and"){if(!m){a=it(!1);break}!s&&!l&&(a=it(!0))}else{if(m){a=it(!0);break}!s&&!l&&(a=it(!1))}}else l=!0}return et(a)||(l||s)&&(l?a=void 0:a=re(Qe())),e.$={env:i,type:Qe(),value:a,pathCollection:[],isAccessingProperty:!1},e}function Xr({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:o,calleeEnv:i,context:a}){let s=[...r.forallArgs.map(_=>_.value),...r.args.map(_=>_.value)];if(s.some(_=>!_))throw p({token:(e==null?void 0:e.token)??ke,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=n.funcId,c=n.calledComptFunctionCaches.find(_=>_.argValues.length===l.length&&_.argValues.every((E,k)=>{let w=l[k];return G(E)&&G(w)?ee(E.value)&&!ee(w.value)?!1:W({type:E.value,env:_.env},{type:w.value,env:o},!0):Lt({value:E,env:_.env},{value:w,env:o})}));if(c)return{callerEnv:o,calleeEnv:i,value:c.value};let f=n.body,m={funcId:u,argValues:l,value:re(t.return.type,t.return.label,{functionValue:n,argValues:l}),env:i,body:yt(f)};n.calledComptFunctionCaches.push(m);let y=n.calledComptFunctionCaches.length-1,g=Et({expr:m.body,env:i,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:i},capturedVariables:a.capturedVariables?a.capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[]},variablesToAdd:[]});if(!g.$)throw p({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let h=g.$.value;if(!h)throw p({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(i=g.$.env,G(h)){let _=h.value;!_.typeName&&n.funcName&&(_.typeName=n.funcName+`(${l.map(E=>je(E)).join(", ")})`),($e(_)||Ve(_)||ot(_)||Ee(_))&&(_.functionValue||(_.functionValue=n))}return n.calledComptFunctionCaches[y]={funcId:u,argValues:l,value:h,env:g.$.env,body:g},{value:h,callerEnv:o,calleeEnv:i}}function Qd(e,t,n){let o=me(t,"Option").find(m=>m.value&&Fe(m.value)&&ce(m.type));if(!o||!o.value||!Fe(o.value))throw new Error("Cannot find Option type constructor in environment");let i=o.value,a=i.type,s=a.parameters[0],l=ae(e),u=ut(a.env),{env:d}=we({env:u,variable:{name:s.label,token:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:l,isOwningTheGcValue:!1}}),{value:c,callerEnv:f}=Xr({functionCalleeExpr:void 0,functionType:a,functionValue:i,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:lt()}],variadicArgs:[]},callerEnv:t,calleeEnv:d,context:n});if(!G(c))throw new Error("Option type constructor did not return a type value");return{optionType:c.value,env:f}}function up({expr:e,env:t,context:n}){Ce(e,[C.__yo_decr_rc[0]],1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_decr_rc[0]}":
1730
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function pp({expr:e,env:t,context:n}){Ce(e,[C.__yo_incr_rc[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc[0]}":
1731
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function cp({expr:e,env:t,context:n}){Ce(e,[C.__yo_incr_rc_atomic[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc_atomic[0]}":
1732
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function fp({expr:e,env:t,context:n}){Ce(e,[C.__yo_decr_rc_atomic[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_decr_rc_atomic[0]}":
1733
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function dp({expr:e,env:t,context:n}){Ce(e,[C.__yo_rc_own[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc[0]}":
1734
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}function mp({expr:e,env:t,context:n}){Ce(e,[C.__yo_dyn_drop[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_dyn_drop[0]}":
1735
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function yp({expr:e,env:t,context:n}){Ce(e,[C.__yo_dyn_dup[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_dyn_dup[0]}":
1736
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function _p({expr:e,env:t,context:n}){Ce(e,[C.__yo_sometype_drop[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_sometype_drop[0]}":
1737
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function gp({expr:e,env:t,context:n}){Ce(e,[C.__yo_sometype_dup[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_sometype_dup[0]}":
1738
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function hp({expr:e,env:t,context:n}){Ce(e,[C.__yo_iso_extract[0]],1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_iso_extract[0]}":
1739
- ${T(r)}`});t=o.$.env;let i=o.$.type;if(!gt(i))throw p({token:r.token,errorMessage:`${C.__yo_iso_extract[0]} expects an Iso type, but got: ${x(i)}`});let a=i.childType,{optionType:s,env:l}=Qd(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection||[]},ze(e,!0),e}function vp({expr:e,env:t,context:n}){Ce(e,[C.__yo_iso_dispose[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_iso_dispose[0]}":
1740
- ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function Tp(e){var r;let t=[],n=new Map;if(Hn(e,t,n),(r=e.$)!=null&&r.deferredDropExpressions)for(let o of e.$.deferredDropExpressions)Hn(o,t,n);return t.length===0&&n.clear(),{awaitPoints:t,capturedVariables:Array.from(n.values()),hasAwaits:t.length>0}}function Hn(e,t,n,r){var o;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let i=e.token.value,a=e.$.type,s=me(e.$.env,i);if(s.length>0){let l=s[s.length-1];if(l&&!n.has(l.id)&&!l.isCompileTimeOnly)if(l.isOwningTheSameGcValueAs){let u=l.isOwningTheSameGcValueAs;if(!n.has(u.id)){let d={id:u.id,name:u.name,type:u.type,kind:"local",isOwningTheSameGcValueAs:void 0};n.set(u.id,d)}}else n.set(l.id,{id:l.id,name:i,type:a,kind:"local",isOwningTheSameGcValueAs:void 0})}}break;case"FuncCall":{if(v(e,A.while)){let i=t.length;Hn(e.func,t,n,e);for(let s of e.args)Hn(s,t,n,e);let a=t.length;if(a>i)for(let s=i;s<a;s++)t[s].isInsideWhile=!0;break}if(v(e,A.cond)){let i=t.length;Hn(e.func,t,n,e);for(let s of e.args)Hn(s,t,n,e);let a=t.length;if(a>i){for(let s=i;s<a;s++)t[s].isInsideCond=!0;if(a>i+1){let s=i;for(let l=i+1;l<a;l++)t[l].index=s;t.splice(i+1,a-i-1)}}break}if(v(e,A.match)){let i=t.length;Hn(e.func,t,n,e);for(let s of e.args)Hn(s,t,n,e);let a=t.length;if(a>i){for(let s=i;s<a;s++)t[s].isInsideCond=!0;if(a>i+1){let s=i;for(let l=i+1;l<a;l++)t[l].index=s;t.splice(i+1,a-i-1)}}break}if(Zd(e)){let i=e.args[0];if(!i)break;let a=(o=i.$)==null?void 0:o.type;if(a&&Pe(a)){let s=Ht(a);if(!s)break;let l=s.isFuture.outputType,u;if(i.tag==="Atom"&&i.token.type==="identifier"&&i.$){let c=i.token.value,f=me(i.$.env,c);if(f.length>0){let m=f[f.length-1];m.isOwningTheSameGcValueAs?u=m.isOwningTheSameGcValueAs.id:u=m.id}}let d;if(r&&r.tag==="FuncCall"&&v(r,":=")){let c=r.args[0];if(c&&c.tag==="Atom"&&c.token.type==="identifier"){let f=c.token.value;if(c.$){let m=me(c.$.env,f);m.length>0&&(d=m[m.length-1].id)}}}t.push({index:t.length,expr:e,resultType:l,futureType:s,targetVariableId:d,futureVariableId:u})}}Hn(e.func,t,n,e);for(let i of e.args)Hn(i,t,n,e);break}}}function Zd(e){return v(e,C.await)}function $p({capturedVariables:e,env:t,closureToken:n}){let r=t;for(let[o,i]of e.entries())if(i.frameLevel<t.frames.length&&i.usageType==="own"){let a=me(r,o);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=Xe(r,s,{...s,consumedAtToken:n}))}}return r}function eo(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function to({expectedCaptureType:e,capturedVariablesWithValues:t,env:n,closureToken:r,context:o}){let i=e,a;if(i===void 0)if(t&&t.size>0){let s=gr(n),l=Array.from(t.entries()).map(([d,c])=>({label:d,type:c.type,isCompileTimeOnly:!1,assignedValue:void 0,exprs:{expr:{tag:"Atom",token:c.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,i=s,n=yr({structType:s,env:n,context:{...o}});let u=Array.from(t.values()).map(d=>d.value);u.every(d=>d!==void 0)?a=bn(s,u):a=void 0}else{let s=gr(n);s.fields=[],n=yr({structType:s,env:n,context:{...o}}),i=s,a=bn(s,[])}else if(t&&t.size>0){let s=i,l=Array.from(t.keys()),u=s.fields.map(c=>c.label);for(let c of l)if(!u.includes(c))throw p({token:r,errorMessage:`Captured variable "${c}" does not exist in expected capture struct "${x(s)}"`});for(let c of s.fields)if(!l.includes(c.label))throw p({token:r,errorMessage:`Expected capture struct field "${c.label}" is not captured by this closure`});for(let[c,f]of t.entries()){let m=s.fields.find(y=>y.label===c);if(m&&!W({type:m.type,env:n},{type:f.type,env:n}))throw p({token:f.token,errorMessage:`Captured variable "${c}" has type "${x(f.type)}" but expected struct field has type "${x(m.type)}"`})}let d=Array.from(t.values()).map(c=>c.value);d.every(c=>c!==void 0)?a=bn(i,d):a=void 0}else a=bn(i,[]);return{captureType:i,captureValue:a}}function no({capturedVariables:e,env:t}){let n=new Map;for(let[r,o]of e.entries())if(o.frameLevel<t.frames.length){let a=t.frames[o.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...o,value:a.value,type:a.type})}return n}function ro({capturedVariablesWithValues:e,env:t,context:n}){let r=[],o=t;if(e&&e.size>0){for(let[i,a]of e.entries())if(qe(a.type)){let s=Gt(`${C.___dup[0]}(${i})`),l=S({expr:s,env:o,context:{...n}});r.push(l),l.$&&l.$.env&&(o=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:o}}function Ep({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`async expects exactly 1 argument, got ${e.args.length}.`});if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"async block must be evaluated within a function or another async block."});let r=e.args[0],o,i;if(n.expectedType){let E=n.expectedType.type,k=Ht(E);k&&(o=k.isFuture.outputType,i=k)}let a=new Map,s=t,l=S({expr:r,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:s},isEvaluatingFunctionType:void 0,isEvaluatingLoopBody:void 0,capturedVariables:a,expectedType:o?{type:o,env:t}:void 0}});if(!l.$)throw p({token:r.token,errorMessage:"Failed to evaluate async block body."});t=l.$.env;let u=vt({type:l.$.type,expectedType:void 0,expr:l,env:t}),d;i&&W({type:u,env:t},{type:i.isFuture.outputType,env:n.expectedType.env},!0)?d=i:d=cu(u,t);let c=a.size>0?no({capturedVariables:a,env:s}):void 0,{captureType:f,captureValue:m}=to({expectedCaptureType:void 0,capturedVariablesWithValues:c,env:t,closureToken:e.token,context:{...n}}),{capturedVariableDupExpressions:y,env:g}=ro({capturedVariablesWithValues:c,env:t,context:{...n}});t=g;let h=Tp(l);if(f){let E=new Set(f.fields.map(k=>k.label));h.capturedVariables=h.capturedVariables.filter(k=>!E.has(k.name))}let _=wn(lt(),"",void 0,[d],void 0);return _.resolvedConcreteType=f,e.$={env:t,type:_,value:void 0,pathCollection:[],captureType:f,deferredDupExpressions:y&&y.length>0?y:void 0,awaitAnalysis:h},ze(e,!0),e}function Cp({expr:e,env:t,context:n}){var s;if(n.isValidatingFunctionDefinition||!n.isExecuting)return e.$={env:t,type:J.type,value:J,pathCollection:[]},e;let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$||!et(i.$.value))throw p({token:r.token,errorMessage:`Expected bool value for "compt_assert", got:
1741
- ${T(r)}`,isAssertionError:!0});if(i.$.value.value)return e.$={env:t,type:J.type,value:J,pathCollection:[]},e;if(o){let l=S({expr:o,env:t,context:{...n}});if((s=l.$)!=null&&s.value)throw p({token:e.token,errorMessage:We(l.$.value)?l.$.value.value:je(l.$.value),isAssertionError:!0})}throw p({token:e.token,errorMessage:`Assertion failed for "compt_assert":
1742
- ${T(r)}`,isAssertionError:!0})}function kp({expr:e,env:t,context:n}){if(v(e,C.__yo_compt_boolean_not)||v(e,C.__yo_compt_boolean_to_string)){let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!vn(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
1743
- ${T(r)}`});t=r.$.env;let o;if(v(e,C.__yo_compt_boolean_not))et(r.$.value)?o=it(!r.$.value.value):o=re(Qe());else if(v(e,C.__yo_compt_boolean_to_string))et(r.$.value)?o=un(r.$.value.value.toString()):o=re(Ot());else throw p({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_compt_boolean_not" or "__yo_compt_boolean_to_string" function`});e.$={env:t,type:o.type,value:o,pathCollection:[]}}else{let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!vn(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
1744
- ${T(r)}`});t=r.$.env;let o=S({expr:e.args[1],env:t,context:{...n}});if(!o.$||!vn(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
1745
- ${T(o)}`});t=o.$.env;let i=r.$.value,a=o.$.value,s;if(v(e,C.__yo_compt_boolean_and))et(i)&&et(a)?s=it(i.value&&a.value):s=re(Qe());else if(v(e,C.__yo_compt_boolean_or))et(i)&&et(a)?s=it(i.value||a.value):s=re(Qe());else if(v(e,C.__yo_compt_boolean_eq))et(i)&&et(a)?s=it(i.value===a.value):s=re(Qe());else if(v(e,C.__yo_compt_boolean_neq))et(i)&&et(a)?s=it(i.value!==a.value):s=re(Qe());else throw p({token:e.token,errorMessage:`Unexpected function call for compt_boolean operations: ${T(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function bp({expr:e,env:t,context:n}){var i;let r=e.args[0],o=e.args[1];try{S({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:J.type,value:J,pathCollection:[]},e}if(o){let a=S({expr:o,env:t,context:{...n}});if((i=a.$)!=null&&i.value)throw p({token:e.token,errorMessage:We(a.$.value)?a.$.value.value:je(a.$.value)})}throw p({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
1746
- ${T(r)}`})}function Fp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_car,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1747
- ${T(r)}`});if(!mt(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1749
+ `),Bp(o),Rp(o),Up(o),$p(o),wp(o),Fp(o),Ip(o),Np(o),Dp(o),Vp(o),Ep(o),xp(o),Ap(o),Lp(o),Sp(o)}print(){return this.emitter.print()}};function Pp({expr:e,env:t,context:n}){Ce(e,C.alignof,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});t=o.$.env;let i;o.$.value&&j(o.$.value)?i=o.$.value.value:i=o.$.type;let a=nr(i),s;return a===null?s=ae(yt()):s=Dt("Usize",a),e.$={env:t,type:yt(),value:s,pathCollection:[]},e}function zp({expr:e,env:t,context:n}){let r=v(e,A.op_and)?"and":"or",o=e.args;if(o.length===0){let u=lt(r==="and");return e.$={env:t,type:Xe(),value:u,pathCollection:[],isAccessingProperty:!1},e}let i=t,a,s=!1,l=!1;for(let u=0;u<o.length;u++){let d=o[u],c=M({expr:d,env:i,context:{...n}});if(!c.$||!Cn(c.$.type))throw p({token:d.token,errorMessage:`Expected bool type for "${r}" argument, got:
1750
+ ${T(d)}`});i=c.$.env;let f=c.$.value;if(Be(f)){s=!0;continue}if(nt(f)){let m=f.value;if(r==="and"){if(!m){a=lt(!1);break}!s&&!l&&(a=lt(!0))}else{if(m){a=lt(!0);break}!s&&!l&&(a=lt(!1))}}else l=!0}return nt(a)||(l||s)&&(l?a=void 0:a=ae(Xe())),e.$={env:i,type:Xe(),value:a,pathCollection:[],isAccessingProperty:!1},e}function no({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:o,calleeEnv:i,context:a}){let s=[...r.forallArgs.map(g=>g.value),...r.args.map(g=>g.value)];if(s.some(g=>!g))throw p({token:(e==null?void 0:e.token)??be,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=n.funcId,c=n.calledComptFunctionCaches.find(g=>g.argValues.length===l.length&&g.argValues.every(($,k)=>{let b=l[k];return j($)&&j(b)?X($.value)&&!X(b.value)?!1:te({type:$.value,env:g.env},{type:b.value,env:o},!0):Nt({value:$,env:g.env},{value:b,env:o})}));if(c)return{callerEnv:o,calleeEnv:i,value:c.value};let f=n.body,m={funcId:u,argValues:l,value:ae(t.return.type,t.return.label,{functionValue:n,argValues:l}),env:i,body:dt(f)};n.calledComptFunctionCaches.push(m);let y=n.calledComptFunctionCaches.length-1,h;try{h=kt({expr:m.body,env:i,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:i},capturedVariables:a.capturedVariables?a.capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType},variablesToAdd:[]})}catch(g){throw n.calledComptFunctionCaches.splice(y,1),g}if(!h.$)throw p({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let _=h.$.value;if(!_)throw p({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(i=h.$.env,j(_)){let g=_.value;!g.typeName&&n.funcName&&(g.typeName=n.funcName+`(${l.map($=>He($)).join(", ")})`),(we(g)||Ve(g)||pt(g)||Fe(g))&&(g.functionValue||(g.functionValue=n))}return n.calledComptFunctionCaches[y]={funcId:u,argValues:l,value:_,env:h.$.env,body:h},{value:_,callerEnv:o,calleeEnv:i}}function Lm(e,t,n){let o=he(t,"Option").find(m=>m.value&&xe(m.value)&&me(m.type));if(!o||!o.value||!xe(o.value))throw new Error("Cannot find Option type constructor in environment");let i=o.value,a=i.type,s=a.parameters[0],l=le(e),u=at(a.env),{env:d}=Me({env:u,variable:{name:s.label,token:be,type:l.type,isCompileTimeOnly:!0,initializedAtToken:be,consumedAtToken:void 0,value:l,isOwningTheRcValue:!1}}),{value:c,callerEnv:f}=no({functionCalleeExpr:void 0,functionType:a,functionValue:i,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:ut()}],variadicArgs:[]},callerEnv:t,calleeEnv:d,context:n});if(!j(c))throw new Error("Option type constructor did not return a type value");return{optionType:c.value,env:f}}function Gp({expr:e,env:t,context:n}){Ce(e,[C.__yo_decr_rc[0]],1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_decr_rc[0]}":
1751
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function qp({expr:e,env:t,context:n}){Ce(e,[C.__yo_incr_rc[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc[0]}":
1752
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Yp({expr:e,env:t,context:n}){Ce(e,[C.__yo_incr_rc_atomic[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc_atomic[0]}":
1753
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function jp({expr:e,env:t,context:n}){Ce(e,[C.__yo_decr_rc_atomic[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_decr_rc_atomic[0]}":
1754
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Wp({expr:e,env:t,context:n}){Ce(e,[C.__yo_rc_own[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc[0]}":
1755
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}function Hp({expr:e,env:t,context:n}){Ce(e,[C.__yo_dyn_drop[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_dyn_drop[0]}":
1756
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Kp({expr:e,env:t,context:n}){Ce(e,[C.__yo_dyn_dup[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_dyn_dup[0]}":
1757
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Qp({expr:e,env:t,context:n}){Ce(e,[C.__yo_sometype_drop[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_sometype_drop[0]}":
1758
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Zp({expr:e,env:t,context:n}){Ce(e,[C.__yo_sometype_dup[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_sometype_dup[0]}":
1759
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Jp({expr:e,env:t,context:n}){Ce(e,[C.__yo_iso_extract[0]],1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_iso_extract[0]}":
1760
+ ${T(r)}`});t=o.$.env;let i=o.$.type;if(!Ct(i))throw p({token:r.token,errorMessage:`${C.__yo_iso_extract[0]} expects an Iso type, but got: ${x(i)}`});let a=i.childType,{optionType:s,env:l}=Lm(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection||[]},Ze(e,!0),e}function Xp({expr:e,env:t,context:n}){Ce(e,[C.__yo_iso_dispose[0]]);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_iso_dispose[0]}":
1761
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function ec({expr:e,env:t,context:n}){Ce(e,[C.__yo_drop_array_element[0]],2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the array argument for "${C.__yo_drop_array_element[0]}":
1762
+ ${T(r)}`});t=i.$.env;let a=M({expr:o,env:t,context:{...n}});if(!a.$)throw p({token:o.token,errorMessage:`Failed to evaluate the index argument for "${C.__yo_drop_array_element[0]}":
1763
+ ${T(o)}`});return t=a.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function tc({expr:e,env:t,context:n}){Ce(e,[C.__yo_dup_array_element[0]],2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the array argument for "${C.__yo_dup_array_element[0]}":
1764
+ ${T(r)}`});t=i.$.env;let a=M({expr:o,env:t,context:{...n}});if(!a.$)throw p({token:o.token,errorMessage:`Failed to evaluate the index argument for "${C.__yo_dup_array_element[0]}":
1765
+ ${T(o)}`});t=a.$.env;let s=i.$.type;if(!s||!Oe(s))throw p({token:r.token,errorMessage:`Expected array type for "${C.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function nc({expr:e,env:t,context:n}){Ce(e,[C.__yo_drop_tuple_element[0]],2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${C.__yo_drop_tuple_element[0]}":
1766
+ ${T(r)}`});t=i.$.env;let a=M({expr:o,env:t,context:{...n}});if(!a.$)throw p({token:o.token,errorMessage:`Failed to evaluate the index argument for "${C.__yo_drop_tuple_element[0]}":
1767
+ ${T(o)}`});return t=a.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function rc({expr:e,env:t,context:n}){Ce(e,[C.__yo_dup_tuple_element[0]],2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${C.__yo_dup_tuple_element[0]}":
1768
+ ${T(r)}`});t=i.$.env;let a=M({expr:o,env:t,context:{...n}});if(!a.$)throw p({token:o.token,errorMessage:`Failed to evaluate the index argument for "${C.__yo_dup_tuple_element[0]}":
1769
+ ${T(o)}`});t=a.$.env;let s=i.$.type;if(!s||!Ne(s))throw p({token:r.token,errorMessage:`Expected tuple type for "${C.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!tt(l))throw p({token:o.token,errorMessage:`Expected number value for index in "${C.__yo_dup_tuple_element[0]}"`});let u=Number(l.value);if(u<0||u>=s.fields.length)throw p({token:o.token,errorMessage:`Index out of bounds for tuple in "${C.__yo_dup_tuple_element[0]}"`});let d=s.fields[u].type;return e.$={env:t,type:d,value:void 0,pathCollection:[]},e}function oc({expr:e,env:t,context:n}){var h,_,g,$,k;Ce(e,C.__yo_array_fill,2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});(h=i.$)!=null&&h.env&&(t=i.$.env);let a=(_=i.$)==null?void 0:_.value;if(!j(a)||!Oe(a.value))throw p({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?He(a):"undefined"}`});let s=a.value,l=M({expr:o,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});(g=l.$)!=null&&g.env&&(t=l.$.env);let u=($=l.$)==null?void 0:$.type,d=(k=l.$)==null?void 0:k.value;if(!u)throw p({token:o.token,errorMessage:"Failed to evaluate fill value"});if(!d)throw p({token:o.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!te({type:s.childType,env:t},{type:u,env:t}))throw p({token:o.token,errorMessage:`Fill value type ${x(u)} is not compatible with array element type ${x(s.childType)}`});let c=s.length;if(Be(c)){let b=ae(s);return e.$={env:t,type:s,value:b,pathCollection:[]},e}let f;if(tt(c)){let b=c.value;if(f=typeof b=="bigint"?Number(b):b,!Number.isInteger(f)||f<0)throw p({token:o.token,errorMessage:`Array length must be a non-negative integer, got ${f}`})}else throw p({token:o.token,errorMessage:`Array length must be a compile-time known integer, got ${He(c)}`});let m=[];if(Be(d)){let b=ae(s);return e.$={env:t,type:s,value:b,pathCollection:[]},e}for(let b=0;b<f;b++)m.push(d);let y=Yn(s,m);return e.$={env:t,type:s,value:y,pathCollection:[]},e}function ic(e){var r;let t=[],n=new Map;if(Zn(e,t,n),(r=e.$)!=null&&r.deferredDropExpressions)for(let o of e.$.deferredDropExpressions)Zn(o,t,n);return t.length===0&&n.clear(),{awaitPoints:t,capturedVariables:Array.from(n.values()),hasAwaits:t.length>0}}function Zn(e,t,n,r){var o;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let i=e.token.value,a=e.$.type,s=he(e.$.env,i);if(s.length>0){let l=s[s.length-1];if(l&&!n.has(l.id)&&!l.isCompileTimeOnly)if(l.isOwningTheSameRcValueAs){let u=l.isOwningTheSameRcValueAs;if(!n.has(u.id)){let d={id:u.id,name:u.name,type:u.type,kind:"local",isOwningTheSameRcValueAs:void 0};n.set(u.id,d)}}else n.set(l.id,{id:l.id,name:i,type:a,kind:"local",isOwningTheSameRcValueAs:void 0})}}break;case"FuncCall":{if(v(e,A.while)){let i=t.length;Zn(e.func,t,n,e);for(let s of e.args)Zn(s,t,n,e);let a=t.length;if(a>i)for(let s=i;s<a;s++)t[s].isInsideWhile=!0;break}if(v(e,A.cond)){let i=t.length;Zn(e.func,t,n,e);for(let s of e.args)Zn(s,t,n,e);let a=t.length;if(a>i){for(let s=i;s<a;s++)t[s].isInsideCond=!0;if(a>i+1){let s=i;for(let l=i+1;l<a;l++)t[l].index=s;t.splice(i+1,a-i-1)}}break}if(v(e,A.match)){let i=t.length;Zn(e.func,t,n,e);for(let s of e.args)Zn(s,t,n,e);let a=t.length;if(a>i){for(let s=i;s<a;s++)t[s].isInsideCond=!0;if(a>i+1){let s=i;for(let l=i+1;l<a;l++)t[l].index=s;t.splice(i+1,a-i-1)}}break}if(Sm(e)){let i=e.args[0];if(!i)break;let a=(o=i.$)==null?void 0:o.type;if(a&&je(a)){let s=Kt(a);if(!s)break;let l=s.isFuture.outputType,u;if(i.tag==="Atom"&&i.token.type==="identifier"&&i.$){let c=i.token.value,f=he(i.$.env,c);if(f.length>0){let m=f[f.length-1];m.isOwningTheSameRcValueAs?u=m.isOwningTheSameRcValueAs.id:u=m.id}}let d;if(r&&r.tag==="FuncCall"&&v(r,":=")){let c=r.args[0];if(c&&c.tag==="Atom"&&c.token.type==="identifier"){let f=c.token.value;if(c.$){let m=he(c.$.env,f);m.length>0&&(d=m[m.length-1].id)}}}t.push({index:t.length,expr:e,resultType:l,futureType:s,targetVariableId:d,futureVariableId:u})}}Zn(e.func,t,n,e);for(let i of e.args)Zn(i,t,n,e);break}}}function Sm(e){return v(e,C.await)}function ac({capturedVariables:e,env:t,closureToken:n}){let r=t;for(let[o,i]of e.entries())if(i.frameLevel<t.frames.length&&i.usageType==="own"){let a=he(r,o);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=et(r,s,{...s,consumedAtToken:n}))}}return r}function ro(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function oo({expectedCaptureType:e,capturedVariablesWithValues:t,env:n,closureToken:r,context:o}){let i=e,a;if(i===void 0)if(t&&t.size>0){let s=$r(n),l=Array.from(t.entries()).map(([d,c])=>({label:d,type:c.type,isCompileTimeOnly:!1,assignedValue:void 0,exprs:{expr:{tag:"Atom",token:c.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,i=s,n=hr({structType:s,env:n,context:{...o}});let u=Array.from(t.values()).map(d=>d.value);u.every(d=>d!==void 0)?a=Mn(s,u):a=void 0}else{let s=$r(n);s.fields=[],n=hr({structType:s,env:n,context:{...o}}),i=s,a=Mn(s,[])}else if(t&&t.size>0){let s=i,l=Array.from(t.keys()),u=s.fields.map(c=>c.label);for(let c of l)if(!u.includes(c))throw p({token:r,errorMessage:`Captured variable "${c}" does not exist in expected capture struct "${x(s)}"`});for(let c of s.fields)if(!l.includes(c.label))throw p({token:r,errorMessage:`Expected capture struct field "${c.label}" is not captured by this closure`});for(let[c,f]of t.entries()){let m=s.fields.find(y=>y.label===c);if(m&&!te({type:m.type,env:n},{type:f.type,env:n}))throw p({token:f.token,errorMessage:`Captured variable "${c}" has type "${x(f.type)}" but expected struct field has type "${x(m.type)}"`})}let d=Array.from(t.values()).map(c=>c.value);d.every(c=>c!==void 0)?a=Mn(i,d):a=void 0}else a=Mn(i,[]);return{captureType:i,captureValue:a}}function io({capturedVariables:e,env:t}){let n=new Map;for(let[r,o]of e.entries())if(o.frameLevel<t.frames.length){let a=t.frames[o.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...o,value:a.value,type:a.type})}return n}function ao({capturedVariablesWithValues:e,env:t,context:n}){let r=[],o=t;if(e&&e.size>0){for(let[i,a]of e.entries())if(Ge(a.type)){let s=Yt(`${C.___dup[0]}(${i})`),l=M({expr:s,env:o,context:{...n}});r.push(l),l.$&&l.$.env&&(o=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:o}}function sc({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`async expects exactly 1 argument, got ${e.args.length}.`});if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"async block must be evaluated within a function or another async block."});let r=e.args[0],o,i;if(n.expectedType){let $=n.expectedType.type,k=Kt($);k&&(o=k.isFuture.outputType,i=k)}let a=new Map,s=t,l=M({expr:r,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:s},isEvaluatingFunctionType:void 0,isEvaluatingLoopBody:void 0,capturedVariables:a,expectedType:o?{type:o,env:t}:void 0}});if(!l.$)throw p({token:r.token,errorMessage:"Failed to evaluate async block body."});t=l.$.env;let u=Tt({type:l.$.type,expectedType:void 0,expr:l,env:t}),d;i&&te({type:u,env:t},{type:i.isFuture.outputType,env:n.expectedType.env},!0)?d=i:d=Ku(u,t);let c=a.size>0?io({capturedVariables:a,env:s}):void 0,{captureType:f,captureValue:m}=oo({expectedCaptureType:void 0,capturedVariablesWithValues:c,env:t,closureToken:e.token,context:{...n}}),{capturedVariableDupExpressions:y,env:h}=ao({capturedVariablesWithValues:c,env:t,context:{...n}});t=h;let _=ic(l);if(f){let $=new Set(f.fields.map(k=>k.label));_.capturedVariables=_.capturedVariables.filter(k=>!$.has(k.name))}let g=Sn(ut(),"",void 0,[d],void 0);return g.resolvedConcreteType=f,e.$={env:t,type:g,value:void 0,pathCollection:[],captureType:f,deferredDupExpressions:y&&y.length>0?y:void 0,awaitAnalysis:_},Ze(e,!0),e}function lc({expr:e,env:t,context:n}){var s;if(n.isValidatingFunctionDefinition||!n.isExecuting)return e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e;let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$||!nt(i.$.value))throw p({token:r.token,errorMessage:`Expected bool value for "compt_assert", got:
1770
+ ${T(r)}`,isAssertionError:!0});if(i.$.value.value)return e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e;if(o){let l=M({expr:o,env:t,context:{...n}});if((s=l.$)!=null&&s.value)throw p({token:e.token,errorMessage:Qe(l.$.value)?l.$.value.value:He(l.$.value),isAssertionError:!0})}throw p({token:e.token,errorMessage:`Assertion failed for "compt_assert":
1771
+ ${T(r)}`,isAssertionError:!0})}function uc({expr:e,env:t,context:n}){if(v(e,C.__yo_compt_boolean_not)||v(e,C.__yo_compt_boolean_to_string)){let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Cn(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
1772
+ ${T(r)}`});t=r.$.env;let o;if(v(e,C.__yo_compt_boolean_not))nt(r.$.value)?o=lt(!r.$.value.value):o=ae(Xe());else if(v(e,C.__yo_compt_boolean_to_string))nt(r.$.value)?o=dn(r.$.value.value.toString()):o=ae(Rt());else throw p({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_compt_boolean_not" or "__yo_compt_boolean_to_string" function`});e.$={env:t,type:o.type,value:o,pathCollection:[]}}else{let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Cn(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
1773
+ ${T(r)}`});t=r.$.env;let o=M({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Cn(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
1774
+ ${T(o)}`});t=o.$.env;let i=r.$.value,a=o.$.value,s;if(v(e,C.__yo_compt_boolean_and))nt(i)&&nt(a)?s=lt(i.value&&a.value):s=ae(Xe());else if(v(e,C.__yo_compt_boolean_or))nt(i)&&nt(a)?s=lt(i.value||a.value):s=ae(Xe());else if(v(e,C.__yo_compt_boolean_eq))nt(i)&&nt(a)?s=lt(i.value===a.value):s=ae(Xe());else if(v(e,C.__yo_compt_boolean_neq))nt(i)&&nt(a)?s=lt(i.value!==a.value):s=ae(Xe());else throw p({token:e.token,errorMessage:`Unexpected function call for compt_boolean operations: ${T(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function pc({expr:e,env:t,context:n}){var i;let r=dt(e.args[0]),o=e.args[1]?dt(e.args[1]):void 0;try{M({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}if(o){let a=M({expr:o,env:t,context:{...n}});if((i=a.$)!=null&&i.value)throw p({token:e.token,errorMessage:Qe(a.$.value)?a.$.value.value:He(a.$.value)})}throw p({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
1775
+ ${T(r)}`})}function cc({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_car,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1776
+ ${T(r)}`});if(!$t(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1748
1777
  ${T(r)}`});let i=o.$.type,a=o.$.value;if(!a)throw p({token:r.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" argument, got:
1749
- ${T(r)}`});if(e.$={env:o.$.env,type:i.childType,value:re(i.childType),pathCollection:[],isAccessingProperty:!1},Bn(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw p({token:r.token,errorMessage:`Unexpected empty ComptList for "${e.func.token.value}" argument`})}return e}function wp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_cdr,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1750
- ${T(r)}`});if(!mt(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1778
+ ${T(r)}`});if(e.$={env:o.$.env,type:i.childType,value:ae(i.childType),pathCollection:[],isAccessingProperty:!1},Gn(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw p({token:r.token,errorMessage:`Unexpected empty ComptList for "${e.func.token.value}" argument`})}return e}function fc({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_cdr,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1779
+ ${T(r)}`});if(!$t(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1751
1780
  ${T(r)}`});let i=o.$.type,a=o.$.value;if(!a)throw p({token:r.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" argument, got:
1752
- ${T(r)}`});if(e.$={env:o.$.env,type:i,value:re(i),pathCollection:[],isAccessingProperty:!1},Bn(a)){let s=a.elements;if(s.length>0)e.$.value=kn(i.childType,[...s.slice(1)]);else throw p({token:r.token,errorMessage:`Unexpected empty ComptList for "${e.func.token.value}" argument`})}return e}function Vp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_cons,2);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1781
+ ${T(r)}`});if(e.$={env:o.$.env,type:i,value:ae(i),pathCollection:[],isAccessingProperty:!1},Gn(a)){let s=a.elements;if(s.length>0)e.$.value=xn(i.childType,[...s.slice(1)]);else throw p({token:r.token,errorMessage:`Unexpected empty ComptList for "${e.func.token.value}" argument`})}return e}function dc({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_cons,2);let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1753
1782
  ${T(r)}`});t=r.$.env;let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
1754
- ${T(r)}`});let i=S({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw p({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1755
- ${T(i)}`});if(t=i.$.env,!mt(i.$.type))throw p({token:i.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" second argument, got:
1783
+ ${T(r)}`});let i=M({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw p({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1784
+ ${T(i)}`});if(t=i.$.env,!$t(i.$.type))throw p({token:i.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" second argument, got:
1756
1785
  ${T(i)}`});let a=i.$.value;if(!a)throw p({token:i.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" second argument, got:
1757
- ${T(i)}`});let s=i.$.type,l=r.$.type;if(!W({type:l,env:t},{type:s.childType,env:t}))throw p({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${x(l)}" to ComptList of base type "${x(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:re(s),pathCollection:[],isAccessingProperty:!1},Bn(a)){let u=[o,...a.elements];e.$.value=kn(s.childType,u)}return e}function xp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_append,2);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1758
- ${T(r)}`});if(t=r.$.env,!mt(r.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" first argument, got:
1786
+ ${T(i)}`});let s=i.$.type,l=r.$.type;if(!te({type:l,env:t},{type:s.childType,env:t}))throw p({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${x(l)}" to ComptList of base type "${x(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ae(s),pathCollection:[],isAccessingProperty:!1},Gn(a)){let u=[o,...a.elements];e.$.value=xn(s.childType,u)}return e}function mc({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_append,2);let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1787
+ ${T(r)}`});if(t=r.$.env,!$t(r.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" first argument, got:
1759
1788
  ${T(r)}`});let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
1760
- ${T(r)}`});let i=S({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw p({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1761
- ${T(i)}`});if(t=i.$.env,!mt(i.$.type))throw p({token:i.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" second argument, got:
1789
+ ${T(r)}`});let i=M({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw p({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1790
+ ${T(i)}`});if(t=i.$.env,!$t(i.$.type))throw p({token:i.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" second argument, got:
1762
1791
  ${T(i)}`});let a=i.$.value;if(!a)throw p({token:i.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" second argument, got:
1763
- ${T(i)}`});let s=r.$.type,l=i.$.type;if(!W({type:s,env:t},{type:l,env:t}))throw p({token:e.token,errorMessage:`Type mismatch: cannot append ComptList of base type "${x(l.childType)}" to ComptList of base type "${x(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:re(s),pathCollection:[],isAccessingProperty:!1},Bn(o)&&Bn(a)){let u=[...o.elements,...a.elements];e.$.value=kn(s.childType,u)}return e}function Mp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_length,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1764
- ${T(r)}`});if(!mt(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1792
+ ${T(i)}`});let s=r.$.type,l=i.$.type;if(!te({type:s,env:t},{type:l,env:t}))throw p({token:e.token,errorMessage:`Type mismatch: cannot append ComptList of base type "${x(l.childType)}" to ComptList of base type "${x(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ae(s),pathCollection:[],isAccessingProperty:!1},Gn(o)&&Gn(a)){let u=[...o.elements,...a.elements];e.$.value=xn(s.childType,u)}return e}function yc({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_length,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1793
+ ${T(r)}`});if(!$t(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1765
1794
  ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" argument, got:
1766
- ${T(r)}`});if(e.$={env:o.$.env,type:_t(),value:re(_t()),pathCollection:[],isAccessingProperty:!1},Bn(i)){let a=i.elements.length,s=Dt("Usize",a);e.$.value=s}return e}function Sp({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_compt_list_element_type,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1767
- ${T(r)}`});if(!G((s=o.$)==null?void 0:s.value))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1768
- ${T(r)}`});let i=o.$.value.value;if(!mt(i))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1769
- ${x(i)}`});let a=ae(i.childType);return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Lp({expr:e,env:t,context:n}){if(e.args.length===0)throw p({token:e.token,errorMessage:'Expected at least 1 argument for "compt_print", got 0'});let r=[];for(let o of e.args){let i=S({expr:o,env:t,context:{...n}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate argument for "compt_print": ${T(o)}`});t=i.$.env,We(i.$.value)?r.push(i.$.value.value):r.push(je(i.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function Ap({expr:e,env:t,context:n}){if(v(e,C.__yo_compt_string_length)||v(e,C.__yo_compt_string_to_upper)||v(e,C.__yo_compt_string_to_lower)){let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Pt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" argument, got:
1770
- ${T(r)}`});t=r.$.env;let o;if(v(e,C.__yo_compt_string_length))We(r.$.value)?o=Pn(r.$.value.value.length):o=re(ur());else if(v(e,C.__yo_compt_string_to_upper))We(r.$.value)?o=un(r.$.value.value.toUpperCase()):o=re(Ot());else if(v(e,C.__yo_compt_string_to_lower))We(r.$.value)?o=un(r.$.value.value.toLowerCase()):o=re(Ot());else throw p({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected string unary function`});e.$={env:t,type:o.type,value:o,pathCollection:[]}}else if(v(e,C.__yo_compt_string_slice)){if(e.args.length<2||e.args.length>3)throw p({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Pt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" string argument, got:
1771
- ${T(r)}`});t=r.$.env;let o=S({expr:e.args[1],env:t,context:{...n}});if(!o.$||!kt(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected compt_int type for "${e.func.token.value}" start argument, got:
1772
- ${T(o)}`});t=o.$.env;let i;if(e.args.length===3){if(i=S({expr:e.args[2],env:t,context:{...n}}),!i.$||!kt(i.$.type)||!i.$.value)throw p({token:i.token,errorMessage:`Expected compt_int type for "${e.func.token.value}" end argument, got:
1773
- ${T(i)}`});t=i.$.env}let a;if(We(r.$.value)&&Zn(o.$.value)){let s=r.$.value.value,l=o.$.value.value,u=s.length;i&&i.$&&i.$.value&&Zn(i.$.value)&&(u=i.$.value.value),a=un(s.slice(l,u))}else a=re(Ot());e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Pt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" first argument, got:
1774
- ${T(r)}`});t=r.$.env;let o=S({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Pt(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" second argument, got:
1775
- ${T(o)}`});t=o.$.env;let i=r.$.value,a=o.$.value,s;if(v(e,C.__yo_compt_string_concat))We(i)&&We(a)?s=un(i.value+a.value):s=re(Ot());else if(v(e,C.__yo_compt_string_eq))We(i)&&We(a)?s=it(i.value===a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_neq))We(i)&&We(a)?s=it(i.value!==a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_lt))We(i)&&We(a)?s=it(i.value<a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_lte))We(i)&&We(a)?s=it(i.value<=a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_gt))We(i)&&We(a)?s=it(i.value>a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_gte))We(i)&&We(a)?s=it(i.value>=a.value):s=re(Qe());else throw p({token:e.token,errorMessage:`Unexpected function call for compt_string operations: ${T(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Ip({expr:e,env:t,context:n}){Ce(e,C.consume,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});return t=o.$.env,t=Mn(o,t),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function Np(e){if(e.result.kind!=="function")throw new Error("Expected function call result");return e.result.result}function zo(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Dp(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function Op(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function oo(e,t,n,r,o){var d;if(!o.isEvaluatingFunctionBodyOrAsyncBlock)return;let i;if(o.isEvaluatingFunctionBodyOrAsyncBlock&&(i=o.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!i||t>=i.frames.length)return;let a,s=-1;for(let c=0;c<i.frames.length;c++){let f=(d=i.frames[c])==null?void 0:d.variables.find(m=>m.name===e);if(f){a=f,s=c;break}}if(!a||s<0||a.isCompileTimeOnly)return;o.capturedVariables||(o.capturedVariables=new Map);let l=o.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;o.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function Up({expr:e,arrayType:t,fillValueArg:n,env:r,context:o}){var f,m,y;let i=S({expr:n,env:r,context:{...o,expectedType:{type:t.childType,env:r}}});(f=i.$)!=null&&f.env&&(r=i.$.env);let a=(m=i.$)==null?void 0:m.type,s=(y=i.$)==null?void 0:y.value;if(!a)throw p({token:n.token,errorMessage:"Failed to evaluate fill value"});if(!W({type:t.childType,env:r},{type:a,env:r}))throw p({token:n.token,errorMessage:`Fill value type ${x(a)} is not compatible with array element type ${x(t.childType)}`});let l=t.length;if(Ue(l)){let g=re(t);return e.$={env:r,type:t,value:g,pathCollection:[]},ze(e,!0),{expr:e,env:r}}let u;if(ct(l)){if(u=l.value,!Number.isInteger(u)||u<0)throw p({token:n.token,errorMessage:`Array length must be a non-negative integer, got ${u}`})}else throw p({token:n.token,errorMessage:`Array length must be a compile-time known integer, got ${je(l)}`});let d=[];if(!s||Ue(s)){let g=re(t);return e.$={env:r,type:t,value:g,pathCollection:[]},ze(e,!0),{expr:e,env:r}}for(let g=0;g<u;g++)d.push(s);let c=zn(t,d);return e.$={env:r,type:t,value:c,pathCollection:[]},ze(e,!0),{expr:e,env:r}}function Bp(e,t){var n;return G((n=e.$)==null?void 0:n.value)&&Oe(e.$.value.value)&&j(t)&&t.token.value==="fill"}function Dn({expr:e,tupleFieldIndex:t,env:n,context:r,forType:o}){var E,k,w,$,b,F;let i,a=e,s,l,u,d,c,f,m=!1,y;if(V(e)&&v(e,"?=",2)&&(u=e.args[1],a=e.args[0]),V(a)&&(v(a,"=",2)||v(a,"::",2))){if(v(a,"::",2)){if(m=!0,s=a.args[0],!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}c=a.args[1],a=a.args[0]}if(u&&c)throw p({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(V(a)&&v(a,":",2)){if(s=a.args[0],l=a.args[1],V(s)&&v(s,A.compt,1)){if(m)throw p({token:s.token,errorMessage:'Cannot combine the use of "compt" with ::'});m=!0,s=s.args[0]}if(!j(s)||!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}else if(V(a)&&v(a,A.compt,1)){if(m)throw p({token:a.token,errorMessage:'Cannot combine the use of "compt" with "::"'});if(m=!0,s=a.args[0],!j(s)||!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}else!u&&!c&&(l=a);let g=(E=r.expectedType)==null?void 0:E.type,h;if(g&&(He(g)||$e(g)||Ee(g))){let M=g.fields[t];if(!M)throw p({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=M.type}if(l){let M=S({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});(k=M.$)!=null&&k.env&&(n=(w=M.$)==null?void 0:w.env);let L=($=M.$)==null?void 0:$.value;if(!G(L))throw p({token:l.token,errorMessage:`(1) Expected type for element, got ${T(l)}`});y=L.value}if(c){if(!m)throw p({token:c.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
1776
- Please consider adding "compt" modifier to the field label.`});let M=y?{type:y,env:n}:h?{type:h,env:n}:void 0,L=S({expr:c,env:n,context:{...r,expectedType:M}});if(!L.$)throw p({token:c.token,errorMessage:`Failed to evaluate required value expression: ${T(c)}`});if(n=(b=L.$)==null?void 0:b.env,f=L.$.value,!f)throw p({token:c.token,errorMessage:`Expected compile-time known value for required value, got ${T(c)}`});let O=L.$.type;if(M){if(!W({type:M.type,env:n},{type:O,env:n}))throw p({token:c.token,errorMessage:`Assigned value type mismatch:
1777
- Expected type: ${x(M.type)}
1778
- Given type: ${x(O)}`});y=M.type}else y=O}if(u){let M=y?{type:y,env:n}:h?{type:h,env:n}:void 0,L=S({expr:u,env:n,context:{...r,expectedType:M}});if(!L.$)throw p({token:u.token,errorMessage:`Failed to evaluate default value expression: ${T(u)}`});if(n=L.$.env,d=(F=L.$)==null?void 0:F.value,!d)throw p({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${T(u)}`});let O=L.$.type;if(M){if(!W({type:M.type,env:n},{type:O,env:n}))throw p({token:u.token,errorMessage:`Default value type mismatch:
1779
- Expected type: ${x(M.type)}
1780
- Given type: ${x(O)}`});y=M.type}else y=O}if(!y)throw p({token:e.token,errorMessage:"Failed to infer the element type"});if(hn(y)&&!m)throw p({token:(s==null?void 0:s.token)??e.token,errorMessage:'Expected "compt" modifier for compile-time known value binding.'});if(m&&er(y))throw p({token:(s==null?void 0:s.token)??e.token,errorMessage:`Unexpected "compt" modifier for ${x(y)} which can only be used at runtime.`});if(o!=="tuple"&&!s)throw p({token:e.token,errorMessage:`Expected label for ${o} field, got ${T(a)}`});s&&(s.$={env:n,type:y,value:f??d??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:J,type:J.type,pathCollection:[]}),tr(y,e.token);let _={label:i??`${t}`,type:y,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:c},isCompileTimeOnly:m,defaultValue:d,assignedValue:f};return _.isCompileTimeOnly&&_.assignedValue&&(G(_.assignedValue)&&!_.assignedValue.value.typeName&&_.assignedValue.value!==r.SelfType?_.assignedValue.value.typeName=_.label:Fe(_.assignedValue)&&!_.assignedValue.funcName?(_.assignedValue.funcName=_.label,_.assignedValue.funcId+=`_${_.label}`):Ke(_.assignedValue)&&!_.assignedValue.type.typeName&&_.assignedValue.type!==r.SelfType&&(_.assignedValue.type.typeName=_.label)),{field:_,env:n}}function Pp({expr:e,env:t,context:n}){var m,y;let r=e.func,o=e.args;if(!j(r)||r.token.value!=="_")throw p({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
1781
- ${T(r)}`});let i=gr(t),a=i.fields,s=i.module.fields,l=[],u=[];for(let g=0;g<o.length;g++){let h=o[g],_,E=h,k;if(V(h)&&(v(h,"::",2)||v(h,"=",2)||v(h,"?=",2))){let{field:w,env:$}=Dn({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:i},forType:"struct"});if(s.find(F=>F.label===w.label))throw p({token:h.token,errorMessage:`Duplicate label "${w.label}" in anonymous struct`});if(!w.isCompileTimeOnly)throw p({token:h.token,errorMessage:`Expected compile-time only field for anonymous struct, got:
1782
- ${T(h)}`});if(w.defaultValue)throw p({token:((m=w.exprs.defaultValueExpr)==null?void 0:m.token)??w.exprs.expr.token,errorMessage:"Anonymous struct module field cannot have default value for its fields."});if(!w.assignedValue)throw p({token:w.exprs.assignedValueExpr?w.exprs.assignedValueExpr.token:w.exprs.expr.token,errorMessage:"Anonymous struct module field must have assigned value."});s.push(w),t=$;continue}if(V(h)&&v(h,":",2)){if(_=h.args[0],E=h.args[1],!nt(_))throw p({token:_.token,errorMessage:`Expected identifier for anonymous struct field label, got:
1783
- ${T(_)}`});k=_.token.value}{let w=S({expr:E,env:t,context:{...n,SelfType:i}});if(xt(w,n),!w.$)throw p({token:E.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${T(E)}`});t=w.$.env;let $=w.$.type,b={exprs:{expr:E,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:E},type:$,label:k??`$field_${ht()}`,isCompileTimeOnly:!1};a.push(b),u.push(w),w.$.value?l.push((y=w.$)==null?void 0:y.value):l.push(void 0),_&&(_.$=w.$)}}t=yr({structType:i,env:t,context:n});let d;d=l.some(g=>!g)?void 0:bn(i,l);let c=ae(i);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:f}=we({env:t,variable:{name:i.id,type:c.type,value:c,initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheGcValue:!1}});return t=f,e.$={env:t,type:i,value:d,pathCollection:[],runtimeArgExprsInOrder:u},ze(e,!0),e}function zp({expr:e,arrayType:t,arrayValue:n,argExprs:r,callerEnv:o,context:i}){if(r.length!==1)throw p({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${r.length}.`});if(j(e.args[0])&&en(e.args[0],":")||V(e.args[0])&&v(e.args[0],":")){if(j(e.args[0]))return{value:void 0,type:_r(t.childType),callerEnv:o};{let a=e.args[0].args[0],s=e.args[0].args[1],l=S({expr:a,env:o,context:{...i}});if(!l.$)throw p({token:a.token,errorMessage:`Failed to evaluate start expression:
1784
- ${T(a)}`});o=l.$.env;let u=l.$.type;if(!W({type:_t(),env:o},{type:u,env:o}))throw p({token:a.token,errorMessage:`Expected usize for array start index, got:
1785
- ${x(u)}`});let d=S({expr:s,env:o,context:{...i}});if(!d.$)throw p({token:s.token,errorMessage:`Failed to evaluate end expression:
1786
- ${T(s)}`});o=d.$.env;let c=d.$.type;if(!W({type:_t(),env:o},{type:c,env:o}))throw p({token:s.token,errorMessage:`Expected usize for array end index, got:
1787
- ${x(c)}`});return{value:void 0,type:_r(t.childType),callerEnv:o}}}else{let a=r[0],s=S({expr:a,env:o,context:{...i}});if(!s.$)throw p({token:a.token,errorMessage:`Failed to evaluate argument expression:
1788
- ${T(a)}`});o=s.$.env;let l=s.$.type;if(!W({type:_t(),env:o},{type:l,env:o}))throw p({token:a.token,errorMessage:`Expected usize for array index, got:
1789
- ${x(l)}`});let u=t.childType;if(n)if(s.$.value)if(ct(s.$.value)){let d=s.$.value.value;if(d<0||d>=n.elements.length)throw p({token:a.token,errorMessage:`Array index out of bounds: ${d}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[d],index:d,type:u,callerEnv:o}}else return{value:re(u),type:u,callerEnv:o};else throw p({token:a.token,errorMessage:"Expected compile-time known value for array index, got runtime value."});else return{value:void 0,type:u,callerEnv:o}}}function Gp({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:o}){let i=t.length,a=t,s;if(ct(i)){if(s=Number(i.value),n.length!==s)throw p({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(Ue(i)){s=n.length;let f=Pn(s);a=Gn(t.childType,f)}else throw p({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${i}.`});let l=[],u=r,d=a.childType;for(let f=0;f<n.length;f++){let m=n[f],y=S({expr:m,env:u,context:{...o,expectedType:{type:d,env:u}}});if(!y.$)throw p({token:m.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(xt(y,o),u=y.$.env,f===0&&Oe(d)&&Ue(d.length)&&Oe(y.$.type)&&(d=y.$.type,a=Gn(d,a.length)),!W({type:d,env:u},{type:y.$.type,env:u}))throw p({token:m.token,errorMessage:`Array element at index ${f} has incompatible type:
1795
+ ${T(r)}`});if(e.$={env:o.$.env,type:yt(),value:ae(yt()),pathCollection:[],isAccessingProperty:!1},Gn(i)){let a=i.elements.length,s=Dt("Usize",a);e.$.value=s}return e}function _c({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_compt_list_element_type,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1796
+ ${T(r)}`});if(!j((s=o.$)==null?void 0:s.value))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1797
+ ${T(r)}`});let i=o.$.value.value;if(!$t(i))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1798
+ ${x(i)}`});let a=le(i.childType);return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function gc({expr:e,env:t,context:n}){if(e.args.length===0)throw p({token:e.token,errorMessage:'Expected at least 1 argument for "compt_print", got 0'});let r=[];for(let o of e.args){let i=M({expr:o,env:t,context:{...n}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate argument for "compt_print": ${T(o)}`});t=i.$.env,Qe(i.$.value)?r.push(i.$.value.value):r.push(He(i.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function hc({expr:e,env:t,context:n}){if(v(e,C.__yo_compt_string_length)||v(e,C.__yo_compt_string_to_upper)||v(e,C.__yo_compt_string_to_lower)){let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!zt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" argument, got:
1799
+ ${T(r)}`});t=r.$.env;let o;if(v(e,C.__yo_compt_string_length))Qe(r.$.value)?o=qn(BigInt(r.$.value.value.length)):o=ae(cr());else if(v(e,C.__yo_compt_string_to_upper))Qe(r.$.value)?o=dn(r.$.value.value.toUpperCase()):o=ae(Rt());else if(v(e,C.__yo_compt_string_to_lower))Qe(r.$.value)?o=dn(r.$.value.value.toLowerCase()):o=ae(Rt());else throw p({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected string unary function`});e.$={env:t,type:o.type,value:o,pathCollection:[]}}else if(v(e,C.__yo_compt_string_slice)){if(e.args.length<2||e.args.length>3)throw p({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!zt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" string argument, got:
1800
+ ${T(r)}`});t=r.$.env;let o=M({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Mt(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected compt_int type for "${e.func.token.value}" start argument, got:
1801
+ ${T(o)}`});t=o.$.env;let i;if(e.args.length===3){if(i=M({expr:e.args[2],env:t,context:{...n}}),!i.$||!Mt(i.$.type)||!i.$.value)throw p({token:i.token,errorMessage:`Expected compt_int type for "${e.func.token.value}" end argument, got:
1802
+ ${T(i)}`});t=i.$.env}let a;if(Qe(r.$.value)&&Xn(o.$.value)){let s=r.$.value.value,l=o.$.value.value,u=typeof l=="bigint"?Number(l):l,d=s.length;if(i&&i.$&&i.$.value&&Xn(i.$.value)){let c=i.$.value.value;d=typeof c=="bigint"?Number(c):c}a=dn(s.slice(u,d))}else a=ae(Rt());e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!zt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" first argument, got:
1803
+ ${T(r)}`});t=r.$.env;let o=M({expr:e.args[1],env:t,context:{...n}});if(!o.$||!zt(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" second argument, got:
1804
+ ${T(o)}`});t=o.$.env;let i=r.$.value,a=o.$.value,s;if(v(e,C.__yo_compt_string_concat))Qe(i)&&Qe(a)?s=dn(i.value+a.value):s=ae(Rt());else if(v(e,C.__yo_compt_string_eq))Qe(i)&&Qe(a)?s=lt(i.value===a.value):s=ae(Xe());else if(v(e,C.__yo_compt_string_neq))Qe(i)&&Qe(a)?s=lt(i.value!==a.value):s=ae(Xe());else if(v(e,C.__yo_compt_string_lt))Qe(i)&&Qe(a)?s=lt(i.value<a.value):s=ae(Xe());else if(v(e,C.__yo_compt_string_lte))Qe(i)&&Qe(a)?s=lt(i.value<=a.value):s=ae(Xe());else if(v(e,C.__yo_compt_string_gt))Qe(i)&&Qe(a)?s=lt(i.value>a.value):s=ae(Xe());else if(v(e,C.__yo_compt_string_gte))Qe(i)&&Qe(a)?s=lt(i.value>=a.value):s=ae(Xe());else throw p({token:e.token,errorMessage:`Unexpected function call for compt_string operations: ${T(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function vc({expr:e,env:t,context:n}){Ce(e,C.consume,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});return t=o.$.env,t=kn(o,t),e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function $c(e){if(e.result.kind!=="function")throw new Error("Expected function call result");return e.result.result}function jo(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Tc(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function Ec(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function so(e,t,n,r,o){var d;if(!o.isEvaluatingFunctionBodyOrAsyncBlock)return;let i;if(o.isEvaluatingFunctionBodyOrAsyncBlock&&(i=o.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!i||t>=i.frames.length)return;let a,s=-1;for(let c=0;c<i.frames.length;c++){let f=(d=i.frames[c])==null?void 0:d.variables.find(m=>m.name===e);if(f){a=f,s=c;break}}if(!a||s<0||a.isCompileTimeOnly)return;o.capturedVariables||(o.capturedVariables=new Map);let l=o.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;o.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function Un({expr:e,tupleFieldIndex:t,env:n,context:r,forType:o}){var $,k,b,E,w,F;let i,a=e,s,l,u,d,c,f,m=!1,y;if(V(e)&&v(e,"?=",2)&&(u=e.args[1],a=e.args[0]),V(a)&&(v(a,"=",2)||v(a,"::",2))){if(v(a,"::",2)){if(m=!0,s=a.args[0],!ot(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}c=a.args[1],a=a.args[0]}if(u&&c)throw p({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(V(a)&&v(a,":",2)){if(s=a.args[0],l=a.args[1],V(s)&&v(s,A.compt,1)){if(m)throw p({token:s.token,errorMessage:'Cannot combine the use of "compt" with ::'});m=!0,s=s.args[0]}if(!Q(s)||!ot(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}else if(V(a)&&v(a,A.compt,1)){if(m)throw p({token:a.token,errorMessage:'Cannot combine the use of "compt" with "::"'});if(m=!0,s=a.args[0],!Q(s)||!ot(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}else!u&&!c&&(l=a);let h=($=r.expectedType)==null?void 0:$.type,_;if(h&&(Ne(h)||we(h)||Fe(h))){let L=h.fields[t];if(!L)throw p({token:e.token,errorMessage:`Failed to get the field at index ${t}`});_=L.type}if(l){let L=M({expr:l,env:n,context:{...r,expectedType:_?{type:_,env:n}:void 0}});(k=L.$)!=null&&k.env&&(n=(b=L.$)==null?void 0:b.env);let S=(E=L.$)==null?void 0:E.value;if(!j(S))throw p({token:l.token,errorMessage:`(1) Expected type for element, got ${T(l)}`});y=S.value}if(c){if(!m)throw p({token:c.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
1805
+ Please consider adding "compt" modifier to the field label.`});let L=y?{type:y,env:n}:_?{type:_,env:n}:void 0,S=M({expr:c,env:n,context:{...r,expectedType:L}});if(!S.$)throw p({token:c.token,errorMessage:`Failed to evaluate required value expression: ${T(c)}`});if(n=(w=S.$)==null?void 0:w.env,f=S.$.value,!f)throw p({token:c.token,errorMessage:`Expected compile-time known value for required value, got ${T(c)}`});let B=S.$.type;if(L){if(!te({type:L.type,env:n},{type:B,env:n}))throw p({token:c.token,errorMessage:`Assigned value type mismatch:
1806
+ Expected type: ${x(L.type)}
1807
+ Given type: ${x(B)}`});y=L.type}else y=B}if(u){let L=y?{type:y,env:n}:_?{type:_,env:n}:void 0,S=M({expr:u,env:n,context:{...r,expectedType:L}});if(!S.$)throw p({token:u.token,errorMessage:`Failed to evaluate default value expression: ${T(u)}`});if(n=S.$.env,d=(F=S.$)==null?void 0:F.value,!d)throw p({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${T(u)}`});let B=S.$.type;if(L){if(!te({type:L.type,env:n},{type:B,env:n}))throw p({token:u.token,errorMessage:`Default value type mismatch:
1808
+ Expected type: ${x(L.type)}
1809
+ Given type: ${x(B)}`});y=L.type}else y=B}if(!y)throw p({token:e.token,errorMessage:"Failed to infer the element type"});if(En(y)&&!m)throw p({token:(s==null?void 0:s.token)??e.token,errorMessage:'Expected "compt" modifier for compile-time known value binding.'});if(m&&rr(y))throw p({token:(s==null?void 0:s.token)??e.token,errorMessage:`Unexpected "compt" modifier for ${x(y)} which can only be used at runtime.`});if(o!=="tuple"&&!s)throw p({token:e.token,errorMessage:`Expected label for ${o} field, got ${T(a)}`});s&&(s.$={env:n,type:y,value:f??d??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:ne,type:ne.type,pathCollection:[]}),or(y,e.token);let g={label:i??`${t}`,type:y,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:c},isCompileTimeOnly:m,defaultValue:d,assignedValue:f};return g.isCompileTimeOnly&&g.assignedValue&&(j(g.assignedValue)&&!g.assignedValue.value.typeName&&g.assignedValue.value!==r.SelfType?g.assignedValue.value.typeName=g.label:xe(g.assignedValue)&&!g.assignedValue.funcName?(g.assignedValue.funcName=g.label,g.assignedValue.funcId+=`_${g.label}`):Je(g.assignedValue)&&!g.assignedValue.type.typeName&&g.assignedValue.type!==r.SelfType&&(g.assignedValue.type.typeName=g.label)),{field:g,env:n}}function Cc({expr:e,env:t,context:n}){var m,y;let r=e.func,o=e.args;if(!Q(r)||r.token.value!=="_")throw p({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
1810
+ ${T(r)}`});let i=$r(t),a=i.fields,s=i.module.fields,l=[],u=[];for(let h=0;h<o.length;h++){let _=o[h],g,$=_,k;if(V(_)&&(v(_,"::",2)||v(_,"=",2)||v(_,"?=",2))){let{field:b,env:E}=Un({expr:_,env:t,tupleFieldIndex:h,context:{...n,SelfType:i},forType:"struct"});if(s.find(F=>F.label===b.label))throw p({token:_.token,errorMessage:`Duplicate label "${b.label}" in anonymous struct`});if(!b.isCompileTimeOnly)throw p({token:_.token,errorMessage:`Expected compile-time only field for anonymous struct, got:
1811
+ ${T(_)}`});if(b.defaultValue)throw p({token:((m=b.exprs.defaultValueExpr)==null?void 0:m.token)??b.exprs.expr.token,errorMessage:"Anonymous struct module field cannot have default value for its fields."});if(!b.assignedValue)throw p({token:b.exprs.assignedValueExpr?b.exprs.assignedValueExpr.token:b.exprs.expr.token,errorMessage:"Anonymous struct module field must have assigned value."});s.push(b),t=E;continue}if(V(_)&&v(_,":",2)){if(g=_.args[0],$=_.args[1],!ot(g))throw p({token:g.token,errorMessage:`Expected identifier for anonymous struct field label, got:
1812
+ ${T(g)}`});k=g.token.value}{let b=M({expr:$,env:t,context:{...n,SelfType:i}});if(At(b,n),!b.$)throw p({token:$.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${T($)}`});t=b.$.env;let E=b.$.type,w={exprs:{expr:$,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:$},type:E,label:k??`$field_${ct(t.modulePath)}`,isCompileTimeOnly:!1};a.push(w),u.push(b),b.$.value?l.push((y=b.$)==null?void 0:y.value):l.push(void 0),g&&(g.$=b.$)}}t=hr({structType:i,env:t,context:n});let d;d=l.some(h=>!h)?void 0:Mn(i,l);let c=le(i);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:f}=Me({env:t,variable:{name:i.id,type:c.type,value:c,initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheRcValue:!1}});return t=f,e.$={env:t,type:i,value:d,pathCollection:[],runtimeArgExprsInOrder:u},Ze(e,!0),e}function kc({expr:e,arrayType:t,arrayValue:n,argExprs:r,callerEnv:o,context:i}){if(r.length!==1)throw p({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${r.length}.`});if(Q(e.args[0])&&nn(e.args[0],":")||V(e.args[0])&&v(e.args[0],":")){if(Q(e.args[0]))return{value:void 0,type:vr(t.childType),callerEnv:o};{let a=e.args[0].args[0],s=e.args[0].args[1],l=M({expr:a,env:o,context:{...i,expectedType:{type:yt(),env:o}}});if(!l.$)throw p({token:a.token,errorMessage:`Failed to evaluate start expression:
1813
+ ${T(a)}`});o=l.$.env;let u=l.$.type;if(!te({type:yt(),env:o},{type:u,env:o}))throw p({token:a.token,errorMessage:`Expected usize for array start index, got:
1814
+ ${x(u)}`});let d=M({expr:s,env:o,context:{...i,expectedType:{type:yt(),env:o}}});if(!d.$)throw p({token:s.token,errorMessage:`Failed to evaluate end expression:
1815
+ ${T(s)}`});o=d.$.env;let c=d.$.type;if(!te({type:yt(),env:o},{type:c,env:o}))throw p({token:s.token,errorMessage:`Expected usize for array end index, got:
1816
+ ${x(c)}`});return{value:void 0,type:vr(t.childType),callerEnv:o}}}else{let a=r[0],s=M({expr:a,env:o,context:{...i,expectedType:{type:yt(),env:o}}});if(!s.$)throw p({token:a.token,errorMessage:`Failed to evaluate argument expression:
1817
+ ${T(a)}`});o=s.$.env;let l=s.$.type;if(!te({type:yt(),env:o},{type:l,env:o}))throw p({token:a.token,errorMessage:`Expected usize for array index, got:
1818
+ ${x(l)}`});let u=t.childType;if(n)if(s.$.value)if(tt(s.$.value)){let d=s.$.value.value,c=typeof d=="bigint"?Number(d):d;if(c<0||c>=n.elements.length)throw p({token:a.token,errorMessage:`Array index out of bounds: ${c}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[c],index:c,type:u,callerEnv:o}}else return{value:ae(u),type:u,callerEnv:o};else throw p({token:a.token,errorMessage:"Expected compile-time known value for array index, got runtime value."});else return{value:void 0,type:u,callerEnv:o}}}function bc({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:o}){let i=t.length,a=t,s;if(tt(i)){if(s=Number(i.value),n.length!==s)throw p({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(Be(i)){s=n.length;let f=qn(BigInt(s));a=jn(t.childType,f)}else throw p({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${i}.`});let l=[],u=r,d=a.childType;for(let f=0;f<n.length;f++){let m=n[f],y=M({expr:m,env:u,context:{...o,expectedType:{type:d,env:u}}});if(!y.$)throw p({token:m.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(At(y,o),u=y.$.env,f===0&&Oe(d)&&Be(d.length)&&Oe(y.$.type)&&(d=y.$.type,a=jn(d,a.length)),!te({type:d,env:u},{type:y.$.type,env:u}))throw p({token:m.token,errorMessage:`Array element at index ${f} has incompatible type:
1790
1819
  - Expected: ${x(d)}
1791
- - Given : ${x(y.$.type)}`});y.$.value!==void 0?l.push(y.$.value):l.push(re(d))}let c=zn(a,l);return e.$={env:u,value:c,type:a,pathCollection:[]},e}function Go(e,t,n,r){let o={kind:"function-body",type:t,value:n,evaluationEnv:r},i=e.capturedVariables?e.capturedVariables:new Map;return{evaluationContext:{...e,isExecuting:!1,isValidatingFunctionDefinition:!0,isEvaluatingFunctionBodyOrAsyncBlock:o,isEvaluatingFunctionType:!1,capturedVariables:i,expectedType:{type:t.return.type,env:r},functionReturnImplConcreteType:[]},functionBodyContext:o}}function Rp({expr:e,functionType:t,callerEnv:n,context:r}){var k,w,$;let o=e.func,i=e.args;if(i.length!==1)throw p({token:o.token,errorMessage:`Failed to implement the function. Expected 1 argument for the function body, got ${i.length}.`});let a=i[0],s=!!r.capturedVariables,l=(k=r.expectedType)==null?void 0:k.type,u=l&&ce(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((b,F)=>b.label!==t.parameters[F].label),d=ut(s?n:wu(n));if(u&&l&&ce(l)){for(let b of t.forallParameters){let{env:F}=we({env:d,variable:{name:b.label,type:b.type,isCompileTimeOnly:!0,value:re(b.type,b.label),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1},skipCheckingFunctionOverloading:!0});d=F}for(let b=0;b<t.parameters.length;b++){let F=t.parameters[b],M=l.parameters[b],L=F.label,O=M.label,{env:B}=we({env:d,variable:{name:L,type:F.type,isCompileTimeOnly:F.isCompileTimeOnly,value:F.isCompileTimeOnly?re(F.type,O):void 0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:F.isOwningTheGcValue,parameterAlias:L!==O?O:void 0},skipCheckingFunctionOverloading:!0});d=B}}else d=ut(d,t.parametersFrame);let c=d.frames[d.frames.length-1],f=u&&l&&ce(l)?{...t,parameters:l.parameters.map((b,F)=>({...t.parameters[F],label:b.label})),parametersFrame:c,env:t.env}:{...t,parametersFrame:c,env:t.env},m={tag:"Function",type:f,body:a,frameLevel:d.frames.length-1,funcName:void 0,funcId:`fn_${ht()}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:y}=Go(r,f,m,d),g=Et({expr:a,env:d,context:y,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw p({token:a.token,errorMessage:"Failed to evaluate the function body."});d=g.$.env;let h=y.capturedVariables,_=g.$.type;if(!W({type:f.return.type,env:d},{type:_,env:d}))throw p({token:((w=f.return.expr)==null?void 0:w.token)??ke,errorMessage:`Incompatible function return type for:
1820
+ - Given : ${x(y.$.type)}`});y.$.value!==void 0?l.push(y.$.value):l.push(ae(d))}let c=Yn(a,l);return e.$={env:u,value:c,type:a,pathCollection:[]},e}function Wo(e,t,n,r){let o={kind:"function-body",type:t,value:n,evaluationEnv:r},i=e.capturedVariables?e.capturedVariables:new Map;return{evaluationContext:{...e,isExecuting:!1,isValidatingFunctionDefinition:!0,isEvaluatingFunctionBodyOrAsyncBlock:o,isEvaluatingFunctionType:!1,capturedVariables:i,expectedType:{type:t.return.type,env:r},functionReturnImplConcreteType:[]},functionBodyContext:o}}function wc({expr:e,functionType:t,callerEnv:n,context:r}){var k,b,E;let o=e.func,i=e.args;if(i.length!==1)throw p({token:o.token,errorMessage:`Failed to implement the function. Expected 1 argument for the function body, got ${i.length}.`});let a=i[0],s=!1,l=(k=r.expectedType)==null?void 0:k.type,u=l&&me(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((w,F)=>w.label!==t.parameters[F].label),d=at(s?n:cp(n));if(u&&l&&me(l)){for(let w of t.forallParameters){let{env:F}=Me({env:d,variable:{name:w.label,type:w.type,isCompileTimeOnly:!0,value:ae(w.type,w.label),token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=F}for(let w=0;w<t.parameters.length;w++){let F=t.parameters[w],L=l.parameters[w],S=F.label,B=L.label,{env:R}=Me({env:d,variable:{name:S,type:F.type,isCompileTimeOnly:F.isCompileTimeOnly,value:F.isCompileTimeOnly?ae(F.type,B):void 0,token:be,initializedAtToken:be,consumedAtToken:void 0,isOwningTheRcValue:F.isOwningTheRcValue,parameterAlias:S!==B?B:void 0}});d=R}}else d=at(d,t.parametersFrame);let c=d.frames[d.frames.length-1],f=u&&l&&me(l)?{...t,parameters:l.parameters.map((w,F)=>({...t.parameters[F],label:w.label})),parametersFrame:c,env:t.env}:{...t,parametersFrame:c,env:t.env},m={tag:"Function",type:f,body:a,frameLevel:d.frames.length-1,funcName:void 0,funcId:`fn_${ct(d.modulePath)}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:y}=Wo({...r,capturedVariables:void 0},f,m,d),h=kt({expr:a,env:d,context:y,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!h.$)throw p({token:a.token,errorMessage:"Failed to evaluate the function body."});d=h.$.env;let _=y.capturedVariables,g=h.$.type;if(!te({type:f.return.type,env:d},{type:g,env:d}))throw p({token:((b=f.return.expr)==null?void 0:b.token)??be,errorMessage:`Incompatible function return type for:
1792
1821
  - Expected: ${x(f.return.type)}
1793
- - Given : ${x(_)}`});if(f.return.isCompileTimeOnly&&!g.$.value)throw p({token:(($=f.return.expr)==null?void 0:$.token)??ke,errorMessage:"Expected to return a compile-time value, but got runtime value."});d=Ct(d,!0);let E=n;return s&&h&&h.size>0&&(E=$p({capturedVariables:h,env:n,closureToken:e.token})),e.$={env:E,value:m,type:f,pathCollection:h&&h.size>0?eo(h):[]},e}function qp({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:o}){var w,$;let i=e.func,a=e.args;if(a.length!==1)throw p({token:i.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=ut(r,t.isFn.callType.parametersFrame),u={tag:"Function",type:t.isFn.callType,body:s,frameLevel:l.frames.length-1,funcName:void 0,funcId:`closure_${ht()}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:d}=Go(o,t.isFn.callType,u,l),c=Et({expr:s,env:l,context:d,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!c.$)throw p({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=c.$.env;let f=d.capturedVariables,m=c.$.type;if(!W({type:t.isFn.callType.return.type,env:l},{type:m,env:l}))throw p({token:((w=t.isFn.callType.return.expr)==null?void 0:w.token)??ke,errorMessage:`Incompatible closure return type:
1822
+ - Given : ${x(g)}`});if(X(f.return.type)&&!f.return.type.resolvedConcreteType&&!X(g)&&(f.return.type.resolvedConcreteType=g),f.return.isCompileTimeOnly&&!h.$.value)throw p({token:((E=f.return.expr)==null?void 0:E.token)??be,errorMessage:"Expected to return a compile-time value, but got runtime value."});d=bt(d,!0);let $=n;return s&&_&&_.size>0&&($=ac({capturedVariables:_,env:n,closureToken:e.token})),e.$={env:$,value:m,type:f,pathCollection:_&&_.size>0?ro(_):[]},e}function Fc({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:o}){var b,E;let i=e.func,a=e.args;if(a.length!==1)throw p({token:i.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=at(r,t.isFn.callType.parametersFrame),u={tag:"Function",type:t.isFn.callType,body:s,frameLevel:l.frames.length-1,funcName:void 0,funcId:`closure_${ct(l.modulePath)}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:d}=Wo(o,t.isFn.callType,u,l),c=kt({expr:s,env:l,context:d,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!c.$)throw p({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=c.$.env;let f=d.capturedVariables,m=c.$.type;if(!te({type:t.isFn.callType.return.type,env:l},{type:m,env:l}))throw p({token:((b=t.isFn.callType.return.expr)==null?void 0:b.token)??be,errorMessage:`Incompatible closure return type:
1794
1823
  - Expected: ${x(t.isFn.callType.return.type)}
1795
- - Given : ${x(m)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!c.$.value)throw p({token:(($=t.isFn.callType.return.expr)==null?void 0:$.token)??ke,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Ct(l,!0);let y=f&&f.size>0?no({capturedVariables:f,env:r}):void 0,g=r,{capturedVariableDupExpressions:h,env:_}=ro({capturedVariablesWithValues:y,env:r,context:o});g=_;let{captureType:E}=to({expectedCaptureType:void 0,capturedVariablesWithValues:y,env:g,closureToken:e.token,context:{...o}});u.closureInfo={closureType:t,captureType:E};let k;return ee(n)?(n.resolvedConcreteType=E,k={...n,resolvedConcreteType:E}):Ne(n)?k=n:k=t,e.$={env:g,value:void 0,type:k,pathCollection:f&&f.size>0?eo(f):[],deferredDupExpressions:h&&h.length>0?h:void 0,captureType:E,closureFunctionValue:u},Ne(n)&&ze(e,!0),e}function Yp({expr:e,comptListType:t,argExprs:n,callerEnv:r,context:o}){let i=[],a=r,s=t.childType;for(let u=0;u<n.length;u++){let d=n[u],c=S({expr:d,env:a,context:{...o,expectedType:{type:s,env:a}}});if(!c.$)throw p({token:d.token,errorMessage:`Failed to evaluate ComptList element at index ${u}.`});if(xt(c,o),a=c.$.env,!W({type:s,env:a},{type:c.$.type,env:a}))throw p({token:d.token,errorMessage:`ComptList element at index ${u} has incompatible type:
1824
+ - Given : ${x(m)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!c.$.value)throw p({token:((E=t.isFn.callType.return.expr)==null?void 0:E.token)??be,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=bt(l,!0);let y=f&&f.size>0?io({capturedVariables:f,env:r}):void 0,h=r,{capturedVariableDupExpressions:_,env:g}=ao({capturedVariablesWithValues:y,env:r,context:o});h=g;let{captureType:$}=oo({expectedCaptureType:void 0,capturedVariablesWithValues:y,env:h,closureToken:e.token,context:{...o}});u.closureInfo={closureType:t,captureType:$};let k;return X(n)?(n.resolvedConcreteType=$,k={...n,resolvedConcreteType:$}):Re(n)?k=n:k=t,e.$={env:h,value:void 0,type:k,pathCollection:f&&f.size>0?ro(f):[],deferredDupExpressions:_&&_.length>0?_:void 0,captureType:$,closureFunctionValue:u},Re(n)&&Ze(e,!0),e}function Vc({expr:e,comptListType:t,argExprs:n,callerEnv:r,context:o}){let i=[],a=r,s=t.childType;for(let u=0;u<n.length;u++){let d=n[u],c=M({expr:d,env:a,context:{...o,expectedType:{type:s,env:a}}});if(!c.$)throw p({token:d.token,errorMessage:`Failed to evaluate ComptList element at index ${u}.`});if(At(c,o),a=c.$.env,!te({type:s,env:a},{type:c.$.type,env:a}))throw p({token:d.token,errorMessage:`ComptList element at index ${u} has incompatible type:
1796
1825
  - Expected: ${x(s)}
1797
- - Given : ${x(c.$.type)}`});if(c.$.value!==void 0)i.push(c.$.value);else throw p({token:d.token,errorMessage:`Expected compile-time known value for ComptList element at index ${u}, got ${x(c.$.type)}`})}let l=kn(t.childType,i);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function jp({expr:e,env:t,context:n,isParameterComptByDefault:r}){var w,$,b;let o,i=r,a=!1,s=!1,l,u,d,c,f,m=e,y,g,h,_;if(V(m)&&v(m,"=")){let F=m.args[0];if(F&&V(F)&&v(F,":",2))l=F,u=m.args[1],_=u,m=l;else throw p({token:m.func.token,errorMessage:'Please use "?=" for default parameter value, not "=".'})}if(V(m)&&v(m,":=",2)&&(l=m.args[0],u=m.args[1],_=u,m=l),V(m)&&v(m,"?=",2)&&(u=m.args[1],l=m.args[0],h=u,m=l),V(m)&&v(m,":",2)?(u=m.args[1],l=m.args[0],y=u):_?l=m:h?(y=void 0,l=m):y=m,l){if(V(l)&&v(l,A.compt)){if(r)throw p({token:l.token,errorMessage:'"forall"/"using" parameters are "compt" by default. Not needed to use "compt" modifier.'});if(i=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "compt" , got ${l.args.length}`});l=l.args[0]}if(V(l)&&v(l,"own")){if(s=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "own", got ${l.args.length}`});l=l.args[0]}if(V(l)&&v(l,A.quote)){if(a=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${l.args.length}`});if(i)throw p({token:l.token,errorMessage:'Cannot use "compt" with "quote" (or ":"). "quote" parameters means compile-time only, so "compt" is redundant.'});i=!0,l=l.args[0]}if(!j(l)||!nt(l))throw p({token:l.token,errorMessage:`Expected identifier for parameter label, got ${T(l)}`});o=l.token.value,g=l}if(!o)throw p({token:e.token,errorMessage:`Expected a label for function parameter, got ${T(e)}`});if(o==="Self")throw p({token:(g==null?void 0:g.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(_){let F=S({expr:_,env:t,context:{...n}});if(!F.$)throw p({token:_.token,errorMessage:`Failed to evaluate assigned value expression: ${T(_)}`});t=F.$.env;let M=F.$.value;if(!G(M))throw p({token:_.token,errorMessage:`Expected type value for := assignment, got ${je(M)}`});if(d=lt(),f=M,!i)throw p({token:_.token,errorMessage:`Assigned value (:= or =) is only allowed for compile-time parameters. Use "compt(${o})" or put this in "forall(...)".`})}if(y){let F=S({expr:y,env:t,context:{...n}});if(!F.$)throw p({token:y.token,errorMessage:`(3) Failed to evaluate type expression: ${T(y)}`});t=F.$.env;let M=F.$.value;if(G(M))d=M.value;else throw p({token:y.token,errorMessage:`Expected type for function parameter, got ${je(M)}`})}if(h){let F=S({expr:h,env:t,context:{...n}});if((w=F.$)!=null&&w.env&&(t=($=F.$)==null?void 0:$.env),c=(b=F.$)==null?void 0:b.value,!c)throw p({token:h.token,errorMessage:`Expected a compile-time known value for default parameter, got ${T(h)}`});if(!d)d=c.type;else if(!W({type:d,env:t},{type:c.type,env:t}))throw p({token:h.token,errorMessage:`Incompatible default value type:
1826
+ - Given : ${x(c.$.type)}`});if(c.$.value!==void 0)i.push(c.$.value);else throw p({token:d.token,errorMessage:`Expected compile-time known value for ComptList element at index ${u}, got ${x(c.$.type)}`})}let l=xn(t.childType,i);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function xc({expr:e,env:t,context:n,isParameterComptByDefault:r}){var b,E,w;let o,i=r,a=!1,s=!1,l,u,d,c,f,m=e,y,h,_,g;if(V(m)&&v(m,"=")){let F=m.args[0];if(F&&V(F)&&v(F,":",2))l=F,u=m.args[1],g=u,m=l;else throw p({token:m.func.token,errorMessage:'Please use "?=" for default parameter value, not "=".'})}if(V(m)&&v(m,":=",2)&&(l=m.args[0],u=m.args[1],g=u,m=l),V(m)&&v(m,"?=",2)&&(u=m.args[1],l=m.args[0],_=u,m=l),V(m)&&v(m,":",2)?(u=m.args[1],l=m.args[0],y=u):g?l=m:_?(y=void 0,l=m):y=m,l){if(V(l)&&v(l,A.compt)){if(r)throw p({token:l.token,errorMessage:'"forall"/"using" parameters are "compt" by default. Not needed to use "compt" modifier.'});if(i=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "compt" , got ${l.args.length}`});l=l.args[0]}if(V(l)&&v(l,"own")){if(s=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "own", got ${l.args.length}`});l=l.args[0]}if(V(l)&&v(l,A.quote)){if(a=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${l.args.length}`});if(i)throw p({token:l.token,errorMessage:'Cannot use "compt" with "quote" (or ":"). "quote" parameters means compile-time only, so "compt" is redundant.'});i=!0,l=l.args[0]}if(!Q(l)||!ot(l))throw p({token:l.token,errorMessage:`Expected identifier for parameter label, got ${T(l)}`});o=l.token.value,h=l}if(!o)throw p({token:e.token,errorMessage:`Expected a label for function parameter, got ${T(e)}`});if(o==="Self")throw p({token:(h==null?void 0:h.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(g){let F=M({expr:g,env:t,context:{...n}});if(!F.$)throw p({token:g.token,errorMessage:`Failed to evaluate assigned value expression: ${T(g)}`});t=F.$.env;let L=F.$.value;if(!j(L))throw p({token:g.token,errorMessage:`Expected type value for := assignment, got ${He(L)}`});if(d=ut(),f=L,!i)throw p({token:g.token,errorMessage:`Assigned value (:= or =) is only allowed for compile-time parameters. Use "compt(${o})" or put this in "forall(...)".`})}if(y){let F=M({expr:y,env:t,context:{...n}});if(!F.$)throw p({token:y.token,errorMessage:`(3) Failed to evaluate type expression: ${T(y)}`});t=F.$.env;let L=F.$.value;if(j(L))d=L.value;else throw p({token:y.token,errorMessage:`Expected type for function parameter, got ${He(L)}`})}if(_){let F=M({expr:_,env:t,context:{...n}});if((b=F.$)!=null&&b.env&&(t=(E=F.$)==null?void 0:E.env),c=(w=F.$)==null?void 0:w.value,!c)throw p({token:_.token,errorMessage:`Expected a compile-time known value for default parameter, got ${T(_)}`});if(!d)d=c.type;else if(!te({type:d,env:t},{type:c.type,env:t}))throw p({token:_.token,errorMessage:`Incompatible default value type:
1798
1827
  - Expected: ${x(d)}
1799
- - Got : ${x(c.type)}`})}if(!d)throw p({token:e.token,errorMessage:"Expected type for function parameter}"});if(hn(d)&&!i&&(d=vt({type:d,expectedType:void 0,expr:void 0,env:t}),hn(d)))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Expected a "compt" for parameter to be compile-time only. Given type:
1800
- ${x(d)}`});if(i&&er(d))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Unexpected "compt" for parameter of type ${x(d)} which can only be used at runtime.`})}if(a&&!dt(d)&&!Er(d))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${x(d)}`});let E=i?re(d,o):void 0;if(n.isUnsafeFunctionType||tr(d,(y==null?void 0:y.token)??e.token),Ee(d)&&!d.receiverType)throw p({token:(y==null?void 0:y.token)??e.token,errorMessage:`Module type without receiver type set cannot be used as function parameter type.
1828
+ - Got : ${x(c.type)}`})}if(!d)throw p({token:e.token,errorMessage:"Expected type for function parameter}"});if(En(d)&&!i&&(d=Tt({type:d,expectedType:void 0,expr:void 0,env:t}),En(d)))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Expected a "compt" for parameter to be compile-time only. Given type:
1829
+ ${x(d)}`});if(i&&rr(d))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Unexpected "compt" for parameter of type ${x(d)} which can only be used at runtime.`});if(!i&&me(d)&&(d.forallParameters.length>0||d.parameters.some(F=>F.isCompileTimeOnly)))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Runtime function parameters with generic function types are not allowed:
1830
+ ${x(d)}
1831
+
1832
+ Generic functions must be compile-time known to enable monomorphization. Consider using:
1833
+ compt(${o}) : ${x(d)}`})}if(a&&!ht(d)&&!br(d))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${x(d)}`});let $=i?ae(d,o):void 0;if(n.isUnsafeFunctionType||or(d,(y==null?void 0:y.token)??e.token),Fe(d)&&!d.receiverType)throw p({token:(y==null?void 0:y.token)??e.token,errorMessage:`Module type without receiver type set cannot be used as function parameter type.
1801
1834
 
1802
1835
  Please consider using "<:" to specify the receiver type for a module type, for example:
1803
1836
 
@@ -1811,61 +1844,65 @@ use_id :: (fn(forall(T : Type),
1811
1844
  ) -> T) {
1812
1845
  return IdModule.id(val);
1813
1846
  }
1814
- `});let{env:k}=we({env:t,variable:{name:o,type:d,isCompileTimeOnly:i,value:f??(i?re(d,o):void 0),token:(l==null?void 0:l.token)??e.token,initializedAtToken:(l==null?void 0:l.token)??e.token,consumedAtToken:void 0,isOwningTheGcValue:s,isOwningTheSameGcValueAs:void 0,isReassignable:!1},skipCheckingFunctionOverloading:!0});return t=k,l&&(l.$={env:t,type:d,value:E,pathCollection:[]}),l!==e&&y!==e&&(e.$={env:t,type:J.type,value:J,pathCollection:[]}),Ut(d),{parameter:{label:o,type:d,exprs:uu({expr:e,labelExpr:g,typeExpr:y,defaultValueExpr:h,assignedValueExpr:_}),isCompileTimeOnly:i,isQuote:a,isOwningTheGcValue:s,assignedValue:f},env:t}}function Jd({constraintExprs:e,env:t,context:n}){let r=new Map;for(let o of e){if(!V(o)||!v(o,"<:",2))throw p({token:o.token,errorMessage:`Expected constraint in the form "T <: Module" or "T <: (Module1, Module2)", got: ${T(o)}`});let i=o.args[0],a=o.args[1],s=S({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value||!G(s.$.value))throw p({token:i.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=s.$.env;let l=s.$.value;if(!ee(l.value)){let y=l.value,g=[];if(V(a)&&v(a,A.tuple))for(let h of a.args)V(h)&&v(h,"!")&&h.args.length===1?g.push({expr:h.args[0],isNegated:!0}):g.push({expr:h,isNegated:!1});else V(a)&&v(a,"!")&&a.args.length===1?g.push({expr:a.args[0],isNegated:!0}):g.push({expr:a,isNegated:!1});for(let{expr:h,isNegated:_}of g){let E=S({expr:h,env:t,context:{...n}});if(!E.$||!E.$.value||!G(E.$.value))throw p({token:h.token,errorMessage:"Expected module type for right-hand side of where clause constraint."});t=E.$.env;let k=E.$.value;if(!Ee(k.value))throw p({token:h.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(k.value)}`});let w=k.value,$=jn({targetType:y,moduleType:w,env:t});if(_){if($)throw p({token:o.token,errorMessage:`Type ${x(y)} must NOT implement ${x(w)}, but it does.`})}else if(!$)throw p({token:o.token,errorMessage:`Type ${x(y)} does not implement required module ${x(w)}.`})}continue}let u=l.value,d=[];if(V(a)&&v(a,A.tuple))for(let y of a.args)V(y)&&v(y,"!")&&y.args.length===1?d.push({expr:y.args[0],isNegated:!0}):d.push({expr:y,isNegated:!1});else V(a)&&v(a,"!")&&a.args.length===1?d.push({expr:a.args[0],isNegated:!0}):d.push({expr:a,isNegated:!1});let c=[],f=[];for(let{expr:y,isNegated:g}of d){let h=S({expr:y,env:t,context:{...n}});if(!h.$||!h.$.value||!G(h.$.value))throw p({token:y.token,errorMessage:"Expected module type for right-hand side of where clause constraint."});t=h.$.env;let _=h.$.value;if(!Ee(_.value))throw p({token:y.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(_.value)}`});let E=_.value;if(E.receiverType)throw p({token:y.token,errorMessage:"Module type in where clause already has a receiver type assigned."});g?f.push(E):c.push(E)}let m=r.get(u);m?(m.requiredModules.push(...c),m.negativeModules.push(...f)):r.set(u,{requiredModules:c,negativeModules:f})}return{whereClauseConstraints:r,env:t}}function ns({parameterExprs:e,env:t,context:n}){var l;t=ut(t);let r=[],o=[],i,a,s=!1;for(let u=0;u<e.length;u++){let d=e[u];if(V(d)&&v(d,A.forall)){if(u!==0)throw p({token:d.token,errorMessage:`Expected type parameters to be the first argument, got ${u+1}`});let c=d.args;for(let f=0;f<c.length;f++){let m=c[f],{parameter:y,env:g}=jp({expr:m,env:t,context:{...n},isParameterComptByDefault:!0});if(o.find(_=>_.label===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in type parameter`});o.push(y),t=g}}else if(V(d)&&v(d,A.where)){if(u!==e.length-1)throw p({token:d.token,errorMessage:"The where clause must be the last parameter in the function signature."});let c=d.args;if(c.length===0)throw p({token:d.token,errorMessage:"The where clause must have at least one constraint."});let f=Jd({constraintExprs:c,env:t,context:n});t=f.env,a=f.whereClauseConstraints}else if(j(d)&&en(d,"...")||V(d)&&v(d,"...")){s=!0;let c=!1,f=!1,m="...",y=d,g=J.type;if(V(d)){let h=d.args[0];if(h){if(V(h)&&v(h,A.compt))throw c=!0,h.args.length!==1?p({token:h.token,errorMessage:`Expected one argument for "compt" , got ${h.args.length}`}):(y=h.args[0],m=h.args[0].token.value,g=J.type,p({token:h.token,errorMessage:"...(compt(param_name)) is not supported yet."}));if(V(h)&&v(h,A.quote)){if(c=!0,f=!0,h.args.length!==1)throw p({token:h.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${h.args.length}`});y=h.args[0],m=h.args[0].token.value,g=mo()}else throw nt(h)?(y=h,m=h.token.value,g=J.type,p({token:h.token,errorMessage:"...(param_name) is not supported yet."})):p({token:h.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${T(h)}`})}else throw p({token:d.token,errorMessage:`Expected a name for variadic parameter, got ${T(d)}`})}else g=J.type;if(i={exprs:{expr:d,labelExpr:y},isCompileTimeOnly:c,isQuote:f,label:m,type:g,isOwningTheGcValue:!1},m!=="..."){let{env:h}=we({env:t,variable:{name:m,type:g,isCompileTimeOnly:i.isCompileTimeOnly,value:c?re(g,m):void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheGcValue:i.isOwningTheGcValue,isOwningTheSameGcValueAs:void 0,isReassignable:!1}});t=h,y.$={env:t,type:g,value:c?re(g,m):void 0,pathCollection:[]}}}else{if(s)throw p({token:d.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:c,env:f}=jp({expr:d,env:t,context:{...n},isParameterComptByDefault:!1});if(r.find(y=>y.label===c.label))throw p({token:V(d)?((l=d.args[0])==null?void 0:l.token)??d.token:d.token,errorMessage:`Duplicate label "${c.label}" in function parameter`});r.push(c),t=f}}return r.forEach((u,d)=>{if(u.isQuote&&Er(u.type)&&d!==r.length-1)throw p({token:u.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),{parameters:r,forallParameters:o,variadicParameter:i,env:t,whereClauseConstraints:a}}function ma({expr:e,env:t,context:n}){var k,w;if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> for function type, got:
1847
+ `});let{env:k}=Me({env:t,variable:{name:o,type:d,isCompileTimeOnly:i,value:f??(i?ae(d,o):void 0),token:(l==null?void 0:l.token)??e.token,initializedAtToken:(l==null?void 0:l.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:s,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});return t=k,l&&(l.$={env:t,type:d,value:$,pathCollection:[]}),l!==e&&y!==e&&(e.$={env:t,type:ne.type,value:ne,pathCollection:[]}),Bt(d),{parameter:{label:o,type:d,exprs:Wu({expr:e,labelExpr:h,typeExpr:y,defaultValueExpr:_,assignedValueExpr:g}),isCompileTimeOnly:i,isQuote:a,isOwningTheRcValue:s,assignedValue:f},env:t}}function Am({constraintExprs:e,env:t,context:n}){let r=new Map;for(let o of e){if(!V(o)||!v(o,"<:",2))throw p({token:o.token,errorMessage:`Expected constraint in the form "T <: Module" or "T <: (Module1, Module2)", got: ${T(o)}`});let i=o.args[0],a=o.args[1],s=M({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value||!j(s.$.value))throw p({token:i.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=s.$.env;let l=s.$.value;if(!X(l.value)){let y=l.value,h=[];if(V(a)&&v(a,A.tuple))for(let _ of a.args)V(_)&&v(_,"!")&&_.args.length===1?h.push({expr:_.args[0],isNegated:!0}):h.push({expr:_,isNegated:!1});else V(a)&&v(a,"!")&&a.args.length===1?h.push({expr:a.args[0],isNegated:!0}):h.push({expr:a,isNegated:!1});for(let{expr:_,isNegated:g}of h){let $=M({expr:_,env:t,context:{...n}});if(!$.$||!$.$.value||!j($.$.value))throw p({token:_.token,errorMessage:"Expected module type for right-hand side of where clause constraint."});t=$.$.env;let k=$.$.value;if(!Fe(k.value))throw p({token:_.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(k.value)}`});let b=k.value,E=Qn({targetType:y,moduleType:b,env:t});if(g){if(E)throw p({token:o.token,errorMessage:`Type ${x(y)} must NOT implement ${x(b)}, but it does.`})}else if(!E)throw p({token:o.token,errorMessage:`Type ${x(y)} does not implement required module ${x(b)}.`})}continue}let u=l.value,d=[];if(V(a)&&v(a,A.tuple))for(let y of a.args)V(y)&&v(y,"!")&&y.args.length===1?d.push({expr:y.args[0],isNegated:!0}):d.push({expr:y,isNegated:!1});else V(a)&&v(a,"!")&&a.args.length===1?d.push({expr:a.args[0],isNegated:!0}):d.push({expr:a,isNegated:!1});let c=[],f=[];for(let{expr:y,isNegated:h}of d){let _=M({expr:y,env:t,context:{...n}});if(!_.$||!_.$.value||!j(_.$.value))throw p({token:y.token,errorMessage:"Expected module type for right-hand side of where clause constraint."});t=_.$.env;let g=_.$.value;if(!Fe(g.value))throw p({token:y.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(g.value)}`});let $=g.value;if($.receiverType)throw p({token:y.token,errorMessage:"Module type in where clause already has a receiver type assigned."});h?f.push($):c.push($)}let m=r.get(u);m?(m.requiredModules.push(...c),m.negativeModules.push(...f)):r.set(u,{requiredModules:c,negativeModules:f})}return{whereClauseConstraints:r,env:t}}function ys({parameterExprs:e,env:t,context:n}){var l;t=at(t);let r=[],o=[],i,a,s=!1;for(let u=0;u<e.length;u++){let d=e[u];if(V(d)&&v(d,A.forall)){if(u!==0)throw p({token:d.token,errorMessage:`Expected type parameters to be the first argument, got ${u+1}`});let c=d.args;for(let f=0;f<c.length;f++){let m=c[f],{parameter:y,env:h}=xc({expr:m,env:t,context:{...n},isParameterComptByDefault:!0});if(o.find(g=>g.label===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in type parameter`});o.push(y),t=h}}else if(V(d)&&v(d,A.where)){if(u!==e.length-1)throw p({token:d.token,errorMessage:"The where clause must be the last parameter in the function signature."});let c=d.args;if(c.length===0)throw p({token:d.token,errorMessage:"The where clause must have at least one constraint."});let f=Am({constraintExprs:c,env:t,context:n});t=f.env,a=f.whereClauseConstraints}else if(Q(d)&&nn(d,"...")||V(d)&&v(d,"...")){s=!0;let c=!1,f=!1,m="...",y=d,h=ne.type;if(V(d)){let _=d.args[0];if(_){if(V(_)&&v(_,A.compt))throw c=!0,_.args.length!==1?p({token:_.token,errorMessage:`Expected one argument for "compt" , got ${_.args.length}`}):(y=_.args[0],m=_.args[0].token.value,h=ne.type,p({token:_.token,errorMessage:"...(compt(param_name)) is not supported yet."}));if(V(_)&&v(_,A.quote)){if(c=!0,f=!0,_.args.length!==1)throw p({token:_.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${_.args.length}`});y=_.args[0],m=_.args[0].token.value,h=ho()}else throw ot(_)?(y=_,m=_.token.value,h=ne.type,p({token:_.token,errorMessage:"...(param_name) is not supported yet."})):p({token:_.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${T(_)}`})}else throw p({token:d.token,errorMessage:`Expected a name for variadic parameter, got ${T(d)}`})}else h=ne.type;if(i={exprs:{expr:d,labelExpr:y},isCompileTimeOnly:c,isQuote:f,label:m,type:h,isOwningTheRcValue:!1},m!=="..."){let{env:_}=Me({env:t,variable:{name:m,type:h,isCompileTimeOnly:i.isCompileTimeOnly,value:c?ae(h,m):void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheRcValue:i.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,y.$={env:t,type:h,value:c?ae(h,m):void 0,pathCollection:[]}}}else{if(s)throw p({token:d.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:c,env:f}=xc({expr:d,env:t,context:{...n},isParameterComptByDefault:!1});if(r.find(y=>y.label===c.label))throw p({token:V(d)?((l=d.args[0])==null?void 0:l.token)??d.token:d.token,errorMessage:`Duplicate label "${c.label}" in function parameter`});r.push(c),t=f}}return r.forEach((u,d)=>{if(u.isQuote&&br(u.type)&&d!==r.length-1)throw p({token:u.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),{parameters:r,forallParameters:o,variadicParameter:i,env:t,whereClauseConstraints:a}}function ka({expr:e,env:t,context:n}){var k,b;if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> for function type, got:
1815
1848
  ${T(e)}
1816
1849
 
1817
1850
  Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],o=e.args[1],i=[];if(V(r)&&(v(r,A.fn)||v(r,A.unsafe_fn)))i=r.args;else throw p({token:r.token,errorMessage:`Expected a "fn" call for parameter list, got:
1818
- ${T(r)}`});let{parameters:a,forallParameters:s,variadicParameter:l,env:u,whereClauseConstraints:d}=ns({parameterExprs:i,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=u;let c,f=!1,m=!1,y=o;if(V(o)&&v(o,":",2)){let $=o.args[0];if(y=o.args[1],V($)&&v($,A.compt)){if(f=!0,$.args.length!==1)throw p({token:$.token,errorMessage:`Expected one argument for "compt" , got ${$.args.length}`});$=$.args[0]}if(V($)&&v($,A.unquote)){if(m=!0,$.args.length!==1)throw p({token:$.token,errorMessage:`Expected one argument for "unquote", got ${$.args.length}`});if(f)throw p({token:$.token,errorMessage:'Cannot use "compt" with "unquote". "unquote" return type means compile-time only, so "compt" is redundant.'});f=!0,$=$.args[0]}if(V($)&&v($,A.quote))throw p({token:$.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!nt($))throw p({token:$.token,errorMessage:`Expected a valid variable name for return label, got ${T($)}`});c=$.token.value}else{if(V(y)&&v(y,A.compt)){if(f=!0,y.args.length!==1)throw p({token:y.token,errorMessage:`Expected one argument for "compt" , got ${y.args.length}`});y=y.args[0]}if(V(y)&&v(y,A.unquote)){if(m=!0,y.args.length!==1)throw p({token:y.token,errorMessage:`Expected one argument for "unquote", got ${y.args.length}`});if(f)throw p({token:y.token,errorMessage:'Cannot use "compt" with "unquote". "unquote" return type means compile-time only, so "compt" is redundant.'});f=!0,y=y.args[0]}if(V(y)&&v(y,A.quote))throw p({token:y.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let g=S({expr:y,env:t,context:{...n,isEvaluatingFunctionType:!0}}),h,_=(k=g.$)==null?void 0:k.value;if(G(_))h=_.value;else throw p({token:y.token,errorMessage:`Expected a type for function return type, got:
1819
- ${T(y)}`});if(hn(h)&&!f&&(h=vt({type:h,expectedType:void 0,expr:void 0,env:t}),hn(h)))throw p({token:y.token,errorMessage:`Expected a "compt" for return type, like:
1851
+ ${T(r)}`});let{parameters:a,forallParameters:s,variadicParameter:l,env:u,whereClauseConstraints:d}=ys({parameterExprs:i,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=u;let c,f=!1,m=!1,y=o;if(V(o)&&v(o,":",2)){let E=o.args[0];if(y=o.args[1],V(E)&&v(E,A.compt)){if(f=!0,E.args.length!==1)throw p({token:E.token,errorMessage:`Expected one argument for "compt" , got ${E.args.length}`});E=E.args[0]}if(V(E)&&v(E,A.unquote)){if(m=!0,E.args.length!==1)throw p({token:E.token,errorMessage:`Expected one argument for "unquote", got ${E.args.length}`});if(f)throw p({token:E.token,errorMessage:'Cannot use "compt" with "unquote". "unquote" return type means compile-time only, so "compt" is redundant.'});f=!0,E=E.args[0]}if(V(E)&&v(E,A.quote))throw p({token:E.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!ot(E))throw p({token:E.token,errorMessage:`Expected a valid variable name for return label, got ${T(E)}`});c=E.token.value}else{if(V(y)&&v(y,A.compt)){if(f=!0,y.args.length!==1)throw p({token:y.token,errorMessage:`Expected one argument for "compt" , got ${y.args.length}`});y=y.args[0]}if(V(y)&&v(y,A.unquote)){if(m=!0,y.args.length!==1)throw p({token:y.token,errorMessage:`Expected one argument for "unquote", got ${y.args.length}`});if(f)throw p({token:y.token,errorMessage:'Cannot use "compt" with "unquote". "unquote" return type means compile-time only, so "compt" is redundant.'});f=!0,y=y.args[0]}if(V(y)&&v(y,A.quote))throw p({token:y.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let h=M({expr:y,env:t,context:{...n,isEvaluatingFunctionType:!0}}),_,g=(k=h.$)==null?void 0:k.value;if(j(g))_=g.value;else throw p({token:y.token,errorMessage:`Expected a type for function return type, got:
1852
+ ${T(y)}`});if(En(_)&&!f&&(_=Tt({type:_,expectedType:void 0,expr:void 0,env:t}),En(_)))throw p({token:y.token,errorMessage:`Expected a "compt" for return type, like:
1820
1853
 
1821
1854
  compt(${T(y)})
1822
1855
 
1823
1856
  Given type:
1824
- ${x(h)}`});if(n.isUnsafeFunctionType||tr(h,y.token),f&&er(h))throw p({token:y.token,errorMessage:`Unexpected "compt" for return type of ${x(h)} which can only be used at runtime.`});if(f){for(let $ of a)if(!$.isCompileTimeOnly)throw p({token:hu($),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(m&&!dt(h))throw p({token:y.token,errorMessage:`Expected Expr type for "unquote" return type, got ${x(h)}`});let E=Pr({parameters:a,forallParameters:s,variadicParameter:l,return_:{type:h,expr:y,isCompileTimeOnly:f,isUnquote:m,label:c??`fn_return_${ht()}`},env:Ct(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,ParentFunctionType:((w=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:w.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0});return d&&(E.whereClauseConstraints=d),t=Ct(t,!0),e.$={env:t,value:ae(E),type:At(E),pathCollection:[]},e}function ya({parameter:e,calleeEnv:t,context:n,functionType:r}){var a,s,l,u,d;let o=e.exprs.typeExpr,i=e.exprs.defaultValueExpr;if(o){let c=S({expr:yt(o),env:t,context:{...n,expectedType:void 0,SelfType:r.SelfType,isEvaluatingFunctionBodyOrAsyncBlock:r.ParentFunctionType?{kind:"function-body",type:r.ParentFunctionType,evaluationEnv:t}:void 0}});if(!G((a=c.$)==null?void 0:a.value))throw p({token:o.token,errorMessage:`Expected type for parameter, got:
1825
- ${T(c)}`});return(s=c.$)!=null&&s.env&&(t=(l=c.$)==null?void 0:l.env),{parameterType:(u=c.$)==null?void 0:u.value.value,calleeEnv:t}}else if(i){let c=S({expr:yt(i),env:t,context:{...n,expectedType:void 0,SelfType:r.SelfType}});if(!c.$)throw p({token:i.token,errorMessage:`Failed to evaluate default value expression:
1826
- ${T(i)}`});return t=(d=c.$)==null?void 0:d.env,{parameterType:c.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Ro({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let o=e.return;if(!o.expr)return{returnType:o.type,calleeEnv:t};let i=S({expr:yt(o.expr),env:t,context:{...n,SelfType:e.SelfType}}),a,s=(l=i.$)==null?void 0:l.value;if(G(s))a=s.value;else throw p({token:(r==null?void 0:r.token)??ke,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return ee(a)&&(a=fn(t,a)),{returnType:a,calleeEnv:((u=i.$)==null?void 0:u.env)??t}}function Xd({variablesToDrop:e,env:t,context:n}){var i;let r=[],o=t;for(let a of e){let s=Gt(`${C.___drop[0]}(${a.name})`),l=S({expr:s,env:o,context:{...n,expectedType:void 0}});if(r.push(l),(i=l.$)!=null&&i.env)o=l.$.env;else throw p({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
1827
- ${T(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:o}}function em({functionType:e,parameter:t,argExprs:n,argIndex:r,calleeEnv:o,callerEnv:i,context:a,isMethodCall:s,runtimeArgExprsInOrder:l}){var k,w,$,b,F,M,L;let u=n[r],d;if(u&&V(u)&&v(u,":",2)){if(d=u.args[0],u=u.args[1],!j(d))throw p({token:d.token,errorMessage:`Expected identifier for label, got:
1828
- ${T(d)}`});let O=d.token.value;if(t.label!==O)throw p({token:d.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
1829
- Expected ${t?`label "${t.label}"`:"no label"} at the argument position, but got "${O}".`})}let{parameterType:c,calleeEnv:f}=ya({functionType:e,parameter:t,calleeEnv:o,context:{...a,isEvaluatingFunctionType:!0}});o=f;let m;if(!u||j(u)&&en(u,A.undefined))if(t.exprs.defaultValueExpr)m=S({expr:yt(t.exprs.defaultValueExpr),env:o,context:{...a}}),(k=m.$)!=null&&k.env&&(o=(w=m.$)==null?void 0:w.env),u&&(u.$=m.$),t.isCompileTimeOnly||l.push(m);else throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Expected default value for parameter "${t.label}"`});else if(t.isQuote)if(dt(c))m=yt(u),m.$={type:jt(),value:Fn(u),env:i,pathCollection:[]};else throw p({token:u.token,errorMessage:`Expected "Expr" type for "quote" parameter "${t.label}", got:
1830
- ${x(c)}`});else m=S({expr:u,env:i,context:{...a,expectedType:{type:c,env:o}}}),($=m.$)!=null&&$.env&&(i=(b=m.$)==null?void 0:b.env),t.isCompileTimeOnly||l.push(m),Cr(m,i),t.isOwningTheGcValue&&!t.isCompileTimeOnly&&(xt(m,a),(F=m.$)!=null&&F.env&&(i=(M=m.$)==null?void 0:M.env),i=Mn(m,i));if(!m.$)throw p({token:(u==null?void 0:u.token)??ke,errorMessage:"Failed to evaluate argument expression."});let y=m.$.type;if(!((L=m.$)!=null&&L.value)&&t.isCompileTimeOnly)throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Cannot assign runtime argument to compile-time parameter:
1831
- ${u?T(u):""}`});let g=m.$.value;if(!t.isCompileTimeOnly&&(g=void 0,y=vt({type:y,expectedType:c,expr:m,env:m.$.env}),hn(y)))throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Cannot convert compile-time type to runtime type for argument:
1832
- ${T(m)}`});let{env:h}=we({env:o,variable:{name:t.label,type:y,isCompileTimeOnly:t.isCompileTimeOnly,value:g,token:(u==null?void 0:u.token)??ke,initializedAtToken:(u==null?void 0:u.token)??ke,consumedAtToken:void 0,isOwningTheGcValue:t.isOwningTheGcValue}});o=h;try{let{expectedEnv:O}=pt({type:c,env:o},{type:y,env:i});o=O}catch(O){throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Failed to synthesize types for parameter "${t.label}":
1833
- ${O.message}`})}let{parameterType:_,calleeEnv:E}=ya({functionType:e,parameter:t,calleeEnv:o,context:{...a,isEvaluatingFunctionType:!0}});if(o=E,!W({type:_,env:o},{type:y,env:i},r===0&&s))throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Type mismatch for parameter "${t.label}":
1834
- Expected: ${x(_)}
1835
- Got: ${x(y)}`});return{calleeEnv:o,callerEnv:i,context:{...a},argValue:g,argType:y,parameterType:_}}function qo(e){if(e&&Fe(e))return e}function Yo({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:o,callerEnv:i,context:a,isMethodCall:s,skipSpecialization:l}){var ne,pe,ue,oe,ye,ge,Me,Se,Re;t&&(n=t.specializedType??t.type);let u,d=[],c=[],f=[],m=0;o.length>0&&V(o[0])&&v(o[0],A.forall)&&(u=o[0],m=1);let y=n.parameters.length,g=o.slice(m,m+y),h=o.slice(m+y);o=g,i=ut(i);let _=ut(n.env);if(n.SelfType){let Te=ae(n.SelfType),{env:be}=we({env:_,variable:{name:"Self",token:ke,type:Te.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:Te,isOwningTheGcValue:!1}});_=be}for(let Te=0;Te<n.forallParameters.length;Te++){let be=n.forallParameters[Te],I;if(be.exprs.labelExpr&&be.label){let{env:U,variable:te}=we({env:_,variable:{name:be.label,type:be.type,isCompileTimeOnly:!0,value:re(be.type,be.label),token:be.exprs.labelExpr.token,initializedAtToken:be.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});_=U,I=te}if(u){let U=u.args[Te],te;if(V(U)&&v(U,":",2)){if(te=U.args[0],U=U.args[1],!j(te))throw p({token:te.token,errorMessage:`Expected identifier for type parameter label, got:
1836
- ${T(te)}`});if(be.label!==te.token.value)throw p({token:te.token,errorMessage:`Expected type parameter label "${be.label}", got "${te.token.value}".`})}let se;if(j(U)&&U.token.value==="_")continue;if(!U||j(U)&&en(U,A.undefined))if(be.exprs.defaultValueExpr){let rt=S({expr:yt(be.exprs.defaultValueExpr),env:_,context:{...a}});if((ne=rt.$)!=null&&ne.env&&(i=rt.$.env),U&&(U.$=rt.$),!G((pe=rt.$)==null?void 0:pe.value))throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,errorMessage:U?`Expected type for default value, got:
1837
- ${T(U)}`:"Expected type for default value."});se=(ue=rt.$)==null?void 0:ue.value}else throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,errorMessage:"Type parameter does not have default value."});else{let rt=S({expr:U,env:i,context:{...a,expectedType:{type:be.type,env:_}}});if((oe=rt.$)!=null&&oe.env&&(i=rt.$.env),!G((ye=rt.$)==null?void 0:ye.value))throw p({token:U.token,errorMessage:`Expected type for argument, got:
1838
- ${T(U)}`});se=(ge=rt.$)==null?void 0:ge.value}te&&(te.$={env:_,type:se.type,value:se,pathCollection:[]});let{parameterType:ve,calleeEnv:xe}=ya({parameter:be,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionType:n});_=xe;let{expectedEnv:Ze,givenEnv:Je}=pt({type:ve,env:_},{type:se.type,env:i});if(_=Ze,i=Je,!W({type:ve,env:_},{type:se.type,env:i}))throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,errorMessage:`Type mismatch for type parameter "${be.label}":
1857
+ ${x(_)}`});if(n.isUnsafeFunctionType||or(_,y.token),f&&rr(_))throw p({token:y.token,errorMessage:`Unexpected "compt" for return type of ${x(_)} which can only be used at runtime.`});if(f){for(let E of a)if(!E.isCompileTimeOnly)throw p({token:np(E),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(m&&!ht(_))throw p({token:y.token,errorMessage:`Expected Expr type for "unquote" return type, got ${x(_)}`});let $=Gr({parameters:a,forallParameters:s,variadicParameter:l,return_:{type:_,expr:y,isCompileTimeOnly:f,isUnquote:m,label:c??`fn_return_${ct(t.modulePath)}`},env:bt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,ParentFunctionType:((b=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0});return d&&($.whereClauseConstraints=d),t=bt(t,!0),e.$={env:t,value:le($),type:Ot($),pathCollection:[]},e}function ba({parameter:e,calleeEnv:t,context:n,functionType:r}){var a,s,l,u,d;let o=e.exprs.typeExpr,i=e.exprs.defaultValueExpr;if(o){let c=M({expr:dt(o),env:t,context:{...n,expectedType:void 0,SelfType:r.SelfType,isEvaluatingFunctionBodyOrAsyncBlock:r.ParentFunctionType?{kind:"function-body",type:r.ParentFunctionType,evaluationEnv:t}:void 0}});if(!j((a=c.$)==null?void 0:a.value))throw p({token:o.token,errorMessage:`Expected type for parameter, got:
1858
+ ${T(c)}`});return(s=c.$)!=null&&s.env&&(t=(l=c.$)==null?void 0:l.env),{parameterType:(u=c.$)==null?void 0:u.value.value,calleeEnv:t}}else if(i){let c=M({expr:dt(i),env:t,context:{...n,expectedType:void 0,SelfType:r.SelfType}});if(!c.$)throw p({token:i.token,errorMessage:`Failed to evaluate default value expression:
1859
+ ${T(i)}`});return t=(d=c.$)==null?void 0:d.env,{parameterType:c.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Ho({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let o=e.return;if(!o.expr){let d=o.type;return X(d)&&(d=mn(t,d)),{returnType:d,calleeEnv:t}}let i=M({expr:dt(o.expr),env:t,context:{...n,SelfType:e.SelfType}}),a,s=(l=i.$)==null?void 0:l.value;if(j(s))a=s.value;else throw p({token:(r==null?void 0:r.token)??be,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return X(a)&&(a=mn(t,a)),{returnType:a,calleeEnv:((u=i.$)==null?void 0:u.env)??t}}function Im({variablesToDrop:e,env:t,context:n}){var i;let r=[],o=t;for(let a of e){let s=Yt(`${C.___drop[0]}(${a.name})`),l=M({expr:s,env:o,context:{...n,expectedType:void 0}});if(r.push(l),(i=l.$)!=null&&i.env)o=l.$.env;else throw p({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
1860
+ ${T(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:o}}function Nm({functionType:e,parameter:t,argExprs:n,argIndex:r,calleeEnv:o,callerEnv:i,context:a,isMethodCall:s,runtimeArgExprsInOrder:l}){var k,b,E,w,F,L,S;let u=n[r],d;if(u&&V(u)&&v(u,":",2)){if(d=u.args[0],u=u.args[1],!Q(d))throw p({token:d.token,errorMessage:`Expected identifier for label, got:
1861
+ ${T(d)}`});let B=d.token.value;if(t.label!==B)throw p({token:d.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
1862
+ Expected ${t?`label "${t.label}"`:"no label"} at the argument position, but got "${B}".`})}let{parameterType:c,calleeEnv:f}=ba({functionType:e,parameter:t,calleeEnv:o,context:{...a,isEvaluatingFunctionType:!0}});o=f;let m;if(!u||Q(u)&&nn(u,A.undefined))if(t.exprs.defaultValueExpr)m=M({expr:dt(t.exprs.defaultValueExpr),env:o,context:{...a}}),(k=m.$)!=null&&k.env&&(o=(b=m.$)==null?void 0:b.env),u&&(u.$=m.$),t.isCompileTimeOnly||l.push(m);else throw p({token:(u==null?void 0:u.token)??be,errorMessage:`Expected default value for parameter "${t.label}"`});else if(t.isQuote)if(ht(c))m=dt(u),m.$={type:Ht(),value:Ln(u),env:i,pathCollection:[]};else throw p({token:u.token,errorMessage:`Expected "Expr" type for "quote" parameter "${t.label}", got:
1863
+ ${x(c)}`});else if(m=M({expr:u,env:i,context:{...a,expectedType:{type:c,env:o}}}),(E=m.$)!=null&&E.env&&(i=(w=m.$)==null?void 0:w.env),t.isCompileTimeOnly||l.push(m),wr(m,i),t.isOwningTheRcValue&&!t.isCompileTimeOnly){let B=(F=m.$)==null?void 0:F.variableName,R=B?he(i,B):[],Y=R.length?R[R.length-1]:void 0;Y!=null&&Y.isOwningTheRcValue?i=kn(m,i,!0):(At(m,a),(L=m.$)!=null&&L.env&&(i=m.$.env),i=kn(m,i,!0))}if(!m.$)throw p({token:(u==null?void 0:u.token)??be,errorMessage:"Failed to evaluate argument expression."});let y=m.$.type;if(!((S=m.$)!=null&&S.value)&&t.isCompileTimeOnly)throw p({token:(u==null?void 0:u.token)??be,errorMessage:`Cannot assign runtime argument to compile-time parameter:
1864
+ ${u?T(u):""}`});let h=m.$.value;if(!t.isCompileTimeOnly&&(h=void 0,y=Tt({type:y,expectedType:c,expr:m,env:m.$.env}),En(y)))throw p({token:(u==null?void 0:u.token)??be,errorMessage:`Cannot convert compile-time type to runtime type for argument:
1865
+ ${T(m)}`});let{env:_}=Me({env:o,variable:{name:t.label,type:y,isCompileTimeOnly:t.isCompileTimeOnly,value:h,token:(u==null?void 0:u.token)??be,initializedAtToken:(u==null?void 0:u.token)??be,consumedAtToken:void 0,isOwningTheRcValue:t.isOwningTheRcValue}});o=_;try{let{expectedEnv:B}=mt({type:c,env:o},{type:y,env:i});o=B}catch(B){throw p({token:(u==null?void 0:u.token)??be,errorMessage:`Failed to synthesize types for parameter "${t.label}":
1866
+ ${B.message}`})}let{parameterType:g,calleeEnv:$}=ba({functionType:e,parameter:t,calleeEnv:o,context:{...a,isEvaluatingFunctionType:!0}});if(o=$,!te({type:g,env:o},{type:y,env:i},r===0&&s))throw p({token:(u==null?void 0:u.token)??be,errorMessage:`Type mismatch for parameter "${t.label}":
1867
+ Expected: ${x(g)}
1868
+ Got: ${x(y)}`});return{calleeEnv:o,callerEnv:i,context:{...a},argValue:h,argType:y,parameterType:g}}function Ko(e){if(e&&xe(e))return e}function Qo({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:o,callerEnv:i,context:a,isMethodCall:s,skipSpecialization:l}){var H,se,ye,oe,pe,_e,Ie,ke,Ae;t&&(t.specializedType?n=t.specializedType:n=t.type);let u,d=[],c=[],f=[],m=0;o.length>0&&V(o[0])&&v(o[0],A.forall)&&(u=o[0],m=1);let y=n.parameters.length,h=o.slice(m);if(!n.variadicParameter){if(h.length>y){let ge=n.parameters.at(-1);if(!(ge&&ge.isQuote&&br(ge.type)))throw p({token:(r==null?void 0:r.token)??be,errorMessage:`Too many arguments for function call:
1869
+ Expected: ${y} arguments
1870
+ Got: ${h.length} arguments`})}else if(h.length<y&&!n.parameters.slice(h.length).every($e=>$e.exprs.defaultValueExpr!==void 0))throw p({token:(r==null?void 0:r.token)??be,errorMessage:`Too few arguments for function call:
1871
+ Expected: ${y} arguments
1872
+ Got: ${h.length} arguments`})}let _=o.slice(m,m+y),g=o.slice(m+y);o=_,i=at(i);let $=at(n.env);if(n.SelfType){let ge=le(n.SelfType),{env:$e}=Me({env:$,variable:{name:"Self",token:be,type:ge.type,isCompileTimeOnly:!0,initializedAtToken:be,consumedAtToken:void 0,value:ge,isOwningTheRcValue:!1}});$=$e}for(let ge=0;ge<n.forallParameters.length;ge++){let $e=n.forallParameters[ge],I;if($e.exprs.labelExpr&&$e.label){let{env:U,variable:re}=Me({env:$,variable:{name:$e.label,type:$e.type,isCompileTimeOnly:!0,value:ae($e.type,$e.label),token:$e.exprs.labelExpr.token,initializedAtToken:$e.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});$=U,I=re}if(u){let U=u.args[ge],re;if(V(U)&&v(U,":",2)){if(re=U.args[0],U=U.args[1],!Q(re))throw p({token:re.token,errorMessage:`Expected identifier for type parameter label, got:
1873
+ ${T(re)}`});if($e.label!==re.token.value)throw p({token:re.token,errorMessage:`Expected type parameter label "${$e.label}", got "${re.token.value}".`})}let ie;if(Q(U)&&U.token.value==="_")continue;if(!U||Q(U)&&nn(U,A.undefined))if($e.exprs.defaultValueExpr){let it=M({expr:dt($e.exprs.defaultValueExpr),env:$,context:{...a}});if((H=it.$)!=null&&H.env&&(i=it.$.env),U&&(U.$=it.$),!j((se=it.$)==null?void 0:se.value))throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??be,errorMessage:U?`Expected type for default value, got:
1874
+ ${T(U)}`:"Expected type for default value."});ie=(ye=it.$)==null?void 0:ye.value}else throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??be,errorMessage:"Type parameter does not have default value."});else{let it=M({expr:U,env:i,context:{...a,expectedType:{type:$e.type,env:$}}});if((oe=it.$)!=null&&oe.env&&(i=it.$.env),!j((pe=it.$)==null?void 0:pe.value))throw p({token:U.token,errorMessage:`Expected type for argument, got:
1875
+ ${T(U)}`});ie=(_e=it.$)==null?void 0:_e.value}re&&(re.$={env:$,type:ie.type,value:ie,pathCollection:[]});let{parameterType:ve,calleeEnv:Ee}=ba({parameter:$e,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionType:n});$=Ee;let{expectedEnv:qe,givenEnv:We}=mt({type:ve,env:$},{type:ie.type,env:i});if($=qe,i=We,!te({type:ve,env:$},{type:ie.type,env:i}))throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??be,errorMessage:`Type mismatch for type parameter "${$e.label}":
1839
1876
  Expected: ${x(ve)}
1840
- Got: ${x(se.type)}`});if(be.label)if(I)_=Xe(_,I,{...I,value:se});else{let rt=(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,{env:Cn}=we({env:_,variable:{name:be.label,type:se.type,isCompileTimeOnly:!0,value:se,token:rt,initializedAtToken:rt,consumedAtToken:void 0,isOwningTheGcValue:!1}});_=Cn}d.push({value:se,argType:se.type,parameterType:ve})}}let E=n.parameters.length;if(!n.variadicParameter&&o.length>E){let Te=n.parameters.at(-1);if(!(Te&&Te.isQuote&&Er(Te.type)))throw p({token:(r==null?void 0:r.token)??ke,errorMessage:`Too many arguments for function call:
1841
- Expected: ${E} arguments
1842
- Got: ${o.length} arguments`})}if(a.expectedType&&!u&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:Te,calleeEnv:be}=Ro({functionType:n,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:I}=pt({type:Te,env:be},{type:a.expectedType.type,env:a.expectedType.env});_=I}catch{}let k=n.parameters.length;for(let Te=0;Te<k;Te++){let be=n.parameters[Te],{calleeEnv:I,callerEnv:U,context:te,argValue:se,argType:ve,parameterType:xe}=em({functionType:n,parameter:be,argExprs:o,argIndex:Te,callerEnv:i,calleeEnv:_,context:a,isMethodCall:s,runtimeArgExprsInOrder:f});_=I,i=U,a=te,c.push({value:se,parameterType:xe,argType:ve})}if(!u&&n.forallParameters.length>0){for(let Te of n.forallParameters)if(Te.label){let I=me(_,Te.label).at(-1);I!=null&&I.value&&G(I.value)&&d.push({value:I.value,argType:I.value.type,parameterType:Te.type})}}let{returnType:w,calleeEnv:$}=Ro({functionType:n,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(_=$,a.expectedType&&!n.return.isUnquote){let{expectedEnv:Te}=pt({type:w,env:_},{type:a.expectedType.type,env:a.expectedType.env});_=Te;let be=Ro({functionType:n,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});w=be.returnType,_=be.calleeEnv,W({type:a.expectedType.type,env:a.expectedType.env},{type:w,env:_})&&(w=a.expectedType.type)}let b=[];if(n.variadicParameter){for(let Te=0;Te<h.length;Te++){let be=h[Te],I;if(n.variadicParameter.isQuote)I=yt(be),I.$={type:jt(),value:Fn(be),env:i,pathCollection:[]},b.push({value:I.$.value,argType:I.$.type});else{if(I=S({expr:be,env:i,context:{...a}}),!((Me=I.$)!=null&&Me.env))throw p({token:be.token,errorMessage:`Failed to evaluate the expression:
1843
- ${T(be)}`});i=I.$.env,b.push({value:I.$.value,argType:I.$.type}),n.variadicParameter.isCompileTimeOnly||f.push(be)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let Te=kn(jt(),b.map(I=>I.value)),{env:be}=we({env:_,variable:{name:n.variadicParameter.label,type:Te.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:Te,token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});_=be}}}let F=[],M={args:c,forallArgs:d,variadicArgs:b},L;if(n.return.isCompileTimeOnly)if(Fe(t)){let{value:Te,callerEnv:be,calleeEnv:I}=Xr({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:M,callerEnv:i,calleeEnv:_,context:{...a}});L=Te,w=Te.type,i=be,_=I}else{let Te=ft(w)&&w.level===0,be=`${n.id}_return_sometype`;if(Te)if((Se=a.expectedType)!=null&&Se.type)L=ae(a.expectedType.type);else if(a.isEvaluatingFunctionType){let I=wn(w,n.return.label,be);I.functionApplication=e;let U=fn(_,I);L=ae(U)}else throw p({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??ke,errorMessage:"Cannot infer compt return type. Please provide the expected type."});else L=re(w,n.return.label)}nm({returnType:w,env:i,expr:e,context:a});let O,B=((Re=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Re.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&Fe(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&Fe(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId;!l&&t&&Fe(t)&&Nn(n)&&!B&&(O=tm({originalFunction:t,argValues:M,calleeEnv:_,callerEnv:i,context:a}));let P=Yr(i),q;if(P.length>0){let Te=Xd({variablesToDrop:P,env:i,context:a});q=Te.deferredDropExpressions,i=Te.env}return{returnType:w,calleeEnv:_,callerEnv:i,pathCollection:F,argValues:M,returnValue:L,specializedFunctionValue:O,runtimeArgExprsInOrder:f,deferredDropExpressions:q}}function tm({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:o}){let i=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map($=>$.value)),i.parameters.forEach(($,b)=>{let F=t.args[b];if($.isCompileTimeOnly)F.value&&a.push(F.value);else{let L=ee(F.argType)&&F.argType.resolvedConcreteType&&!Pe(F.argType)?F.argType.resolvedConcreteType:F.argType;s.push({...$,type:L})}});let l=s.map($=>$.type),u=e.specializedFunctionCaches.find($=>$.compileTimeArgValues.length===a.length&&$.compileTimeArgValues.every((M,L)=>{let O=a[L];return Lt({value:M,env:$.env},{value:O,env:r})})?$.runtimeParameterTypes.length===l.length&&$.runtimeParameterTypes.every((M,L)=>{let O=l[L];return W({type:M,env:$.env},{type:O,env:r},!0)}):!1);if(u)return u.specializedFunction;let d=n,c=yt(e.body),{returnType:f,calleeEnv:m}=Ro({functionType:i,calleeEnv:d,context:{...o,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});d=m;let y=Et({expr:c,env:d,context:{...o,expectedType:{type:f,env:d},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:d},capturedVariables:o.capturedVariables?o.capturedVariables:void 0,functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!y.$)throw p({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let g=[],h=$=>{if(G($)){let b=$.value;if(!b.typeName&&b.id)return`${je($)}_id${b.id}`}return je($)};i.forallParameters.forEach(($,b)=>{var F;if(b<t.forallArgs.length){let M=t.forallArgs[b];g.push(Q(h(M.value)))}else{let M=$.label,L=me(n,M);L.length>0&&((F=L[L.length-1])!=null&&F.value)?g.push(Q(h(L[L.length-1].value))):g.push("unknown")}}),i.parameters.forEach(($,b)=>{if($.isCompileTimeOnly&&b<t.args.length){let F=t.args[b];F?g.push(Q(h(F.value))):g.push("unknown")}}),s.forEach(($,b)=>{let F=$.type;(!F.typeName&&F.id||Ye(F))&&g.push(`rtparam${b}_${Q(x(F))}_id${F.id}`)});let _=g.join("_"),E=Pr({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...i.return,type:f},parametersFrame:d.frames[d.frames.length-1],env:i.env,SelfType:i.SelfType}),k={...e,specializedType:E,body:y,funcId:`${e.funcId}_${_}`,funcName:`${e.funcName}_${_}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},w={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:k,env:y.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,w],k}function nm({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let o=Na(e);for(let i of o){if(Pe(i)||mn(i)||i.resolvedConcreteType||i.requiredModules&&i.requiredModules.length>0)continue;if(!me(n,i.name).length){let s=sa(n,()=>!0),l=!1;for(let u of s)if(G(u.value)){let d=u.value.value,c=Na(d);for(let f of c)if(f.name===i.name){l=!0;break}if(l)break}if(l)continue;throw p({token:(t==null?void 0:t.token)??ke,errorMessage:`Failed to infer the function call return type.
1844
- Please consider providing the expected type.`})}}}function Wp({expr:e,env:t,context:n}){let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
1845
- ${T(r)}`});if(t=o.$.env,!G(o.$.value))throw p({token:r.token,errorMessage:`Iso expects a type as argument, but got:
1846
- ${T(r)}`});let a=o.$.value.value,s=lu(a,t);t=eu({isoType:s,env:t,context:n});let l=ae(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Hp({expr:e,env:t,context:n,isoType:r}){var s;let o=e.args[0],i=S({expr:o,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
1847
- ${T(o)}`});t=i.$.env;let a=(s=i.$)==null?void 0:s.variableName;if(a){let l=me(t,a);if(l.length>0){let u=l[l.length-1],c=t.frames.flatMap(f=>f.variables).filter(f=>{var m;return((m=f.isOwningTheSameGcValueAs)==null?void 0:m.id)===u.id&&f.id!==u.id});if(c.length>0){let f=c.map(m=>m.name).join(", ");throw p({token:o.token,errorMessage:`Cannot isolate ${a}, also owned by: ${f}
1848
- Iso requires unique ownership (no aliases). Drop other aliases first.`})}}}return t=Mn(i,t),e.$={env:t,type:r,value:void 0,pathCollection:i.$.pathCollection||[]},ze(e,!0),e}function Kp({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:o}){var c,f,m,y,g;if(n.length>t.fields.length)throw p({token:e.token,errorMessage:"Failed to implement the module. Too many fields provided."});let i=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((h,_)=>({...h,assignedValue:i[_]}))},s=o.ReceiverType,l=o.ReceiverType??a;if(!s)throw p({token:e.token,errorMessage:`Receiver type is undefined when implementing module.
1877
+ Got: ${x(ie.type)}`});if($e.label)if(I)$=et($,I,{...I,value:ie});else{let it=(U==null?void 0:U.token)??(r==null?void 0:r.token)??be,{env:Vn}=Me({env:$,variable:{name:$e.label,type:ie.type,isCompileTimeOnly:!0,value:ie,token:it,initializedAtToken:it,consumedAtToken:void 0,isOwningTheRcValue:!1}});$=Vn}d.push({value:ie,argType:ie.type,parameterType:ve})}}if(a.expectedType&&!u&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:ge,calleeEnv:$e}=Ho({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:I}=mt({type:ge,env:$e},{type:a.expectedType.type,env:a.expectedType.env});$=I}catch{}let k=n.parameters.length;for(let ge=0;ge<k;ge++){let $e=n.parameters[ge],{calleeEnv:I,callerEnv:U,context:re,argValue:ie,argType:ve,parameterType:Ee}=Nm({functionType:n,parameter:$e,argExprs:o,argIndex:ge,callerEnv:i,calleeEnv:$,context:a,isMethodCall:s,runtimeArgExprsInOrder:f});$=I,i=U,a=re,c.push({value:ie,parameterType:Ee,argType:ve})}if(!u&&n.forallParameters.length>0){for(let ge of n.forallParameters)if(ge.label){let I=he($,ge.label).at(-1);I!=null&&I.value&&j(I.value)&&d.push({value:I.value,argType:I.value.type,parameterType:ge.type})}}let{returnType:b,calleeEnv:E}=Ho({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if($=E,a.expectedType&&!n.return.isUnquote){let{expectedEnv:ge}=mt({type:b,env:$},{type:a.expectedType.type,env:a.expectedType.env});$=ge;let $e=Ho({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});b=$e.returnType,$=$e.calleeEnv,te({type:a.expectedType.type,env:a.expectedType.env},{type:b,env:$})&&(b=a.expectedType.type)}let w=[];if(n.variadicParameter){for(let ge=0;ge<g.length;ge++){let $e=g[ge],I;if(n.variadicParameter.isQuote)I=dt($e),I.$={type:Ht(),value:Ln($e),env:i,pathCollection:[]},w.push({value:I.$.value,argType:I.$.type});else{if(I=M({expr:$e,env:i,context:{...a}}),!((Ie=I.$)!=null&&Ie.env))throw p({token:$e.token,errorMessage:`Failed to evaluate the expression:
1878
+ ${T($e)}`});i=I.$.env,w.push({value:I.$.value,argType:I.$.type}),n.variadicParameter.isCompileTimeOnly||f.push($e)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let ge=xn(Ht(),w.map(I=>I.value)),{env:$e}=Me({env:$,variable:{name:n.variadicParameter.label,type:ge.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:ge,token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});$=$e}}}let F=[],L={args:c,forallArgs:d,variadicArgs:w},S;if(n.return.isCompileTimeOnly)if(xe(t)){let{value:ge,callerEnv:$e,calleeEnv:I}=no({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:L,callerEnv:i,calleeEnv:$,context:{...a}});S=ge,b=ge.type,i=$e,$=I}else{let ge=_t(b)&&b.level===0,$e=`${n.id}_return_sometype`;if(ge)if((ke=a.expectedType)!=null&&ke.type)S=le(a.expectedType.type);else if(a.isEvaluatingFunctionType){let I=Sn(b,n.return.label,$e);I.functionApplication=e;let U=mn($,I);S=le(U)}else throw p({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??be,errorMessage:"Cannot infer compt return type. Please provide the expected type."});else S=ae(b,n.return.label)}Om({returnType:b,env:$,expr:e,context:a});let B,R=((Ae=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Ae.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&xe(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&xe(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId;!l&&t&&xe(t)&&ln(n)&&!R&&(B=Dm({originalFunction:t,argValues:L,calleeEnv:$,callerEnv:i,context:a}));let Y=Hr(i),W;if(Y.length>0){let ge=Im({variablesToDrop:Y,env:i,context:a});W=ge.deferredDropExpressions,i=ge.env}return{returnType:b,calleeEnv:$,callerEnv:i,pathCollection:F,argValues:L,returnValue:S,specializedFunctionValue:B,runtimeArgExprsInOrder:f,deferredDropExpressions:W}}function Dm({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:o}){let i=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(E=>E.value)),i.parameters.forEach((E,w)=>{let F=t.args[w];if(E.isCompileTimeOnly)F.value&&a.push(F.value);else{let S=X(F.argType)&&F.argType.resolvedConcreteType&&!je(F.argType)?F.argType.resolvedConcreteType:F.argType;s.push({...E,type:S})}});let l=s.map(E=>E.type),u=e.specializedFunctionCaches.find(E=>E.compileTimeArgValues.length===a.length&&E.compileTimeArgValues.every((L,S)=>{let B=a[S];return Nt({value:L,env:E.env},{value:B,env:r})})?E.runtimeParameterTypes.length===l.length&&E.runtimeParameterTypes.every((L,S)=>{let B=l[S];return te({type:L,env:E.env},{type:B,env:r},!0)}):!1);if(u)return u.specializedFunction;let d=n,c=dt(e.body),{returnType:f,calleeEnv:m}=Ho({functionType:i,calleeEnv:d,context:{...o,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});d=m;let y=kt({expr:c,env:d,context:{...o,expectedType:{type:f,env:d},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:d},capturedVariables:o.capturedVariables?o.capturedVariables:void 0,functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!y.$)throw p({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],_=E=>{if(j(E)){let w=E.value;if(!w.typeName&&w.id)return`${He(E)}_id${w.id}`}return He(E)};i.forallParameters.forEach((E,w)=>{var F;if(w<t.forallArgs.length){let L=t.forallArgs[w];h.push(Te(_(L.value)))}else{let L=E.label,S=he(n,L);S.length>0&&((F=S[S.length-1])!=null&&F.value)?h.push(Te(_(S[S.length-1].value))):h.push("unknown")}}),i.parameters.forEach((E,w)=>{if(E.isCompileTimeOnly&&w<t.args.length){let F=t.args[w];F?h.push(Te(_(F.value))):h.push("unknown")}}),s.forEach((E,w)=>{let F=E.type;(!F.typeName&&F.id||Ke(F))&&h.push(`rtparam${w}_${Te(x(F))}_id${F.id}`)});let g=h.join("_"),$=Gr({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...i.return,type:f},parametersFrame:d.frames[d.frames.length-1],env:i.env,SelfType:i.SelfType}),k={...e,specializedType:$,body:y,funcId:`${e.funcId}_${g}`,funcName:`${e.funcName}_${g}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},b={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:k,env:y.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,b],k}function Om({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let o=Ha(e);for(let i of o){if(je(i)||vn(i)||i.resolvedConcreteType||i.requiredModules&&i.requiredModules.length>0)continue;if(!he(n,i.name).length){let s=_a(n,()=>!0),l=!1;for(let u of s)if(j(u.value)){let d=u.value.value,c=Ha(d);for(let f of c)if(f.name===i.name){l=!0;break}if(l)break}if(l)continue;throw p({token:(t==null?void 0:t.token)??be,errorMessage:`Failed to infer the function call return type.
1879
+ Please consider providing the expected type.`})}}}function Mc({expr:e,env:t,context:n}){let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
1880
+ ${T(r)}`});if(t=o.$.env,!j(o.$.value))throw p({token:r.token,errorMessage:`Iso expects a type as argument, but got:
1881
+ ${T(r)}`});let a=o.$.value.value,s=ju(a,t);t=Bu({isoType:s,env:t,context:n});let l=le(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Lc({expr:e,env:t,context:n,isoType:r}){var s;let o=e.args[0],i=M({expr:o,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
1882
+ ${T(o)}`});t=i.$.env;let a=(s=i.$)==null?void 0:s.variableName;if(a){let l=he(t,a);if(l.length>0){let u=l[l.length-1],c=t.frames.flatMap(f=>f.variables).filter(f=>{var m;return((m=f.isOwningTheSameRcValueAs)==null?void 0:m.id)===u.id&&f.id!==u.id});if(c.length>0){let f=c.map(m=>m.name).join(", ");throw p({token:o.token,errorMessage:`Cannot isolate ${a}, also owned by: ${f}
1883
+ Iso requires unique ownership (no aliases). Drop other aliases first.`})}}}return t=kn(i,t),e.$={env:t,type:r,value:void 0,pathCollection:i.$.pathCollection||[]},Ze(e,!0),e}function Sc({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:o}){var c,f,m,y,h;if(n.length>t.fields.length)throw p({token:e.token,errorMessage:"Failed to implement the module. Too many fields provided."});let i=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((_,g)=>({..._,assignedValue:i[g]}))},s=o.ReceiverType,l=o.ReceiverType??a;if(!s)throw p({token:e.token,errorMessage:`Receiver type is undefined when implementing module.
1849
1884
  Please consider using "impl" to specify the receiver type explicitly, like:
1850
1885
 
1851
1886
  // impl receiverType, moduleImplementation
1852
1887
  impl Point, Id(Point)(
1853
1888
  id : ((p) -> p)
1854
1889
  );
1855
- `});let u=s.module;s.module?s.module={...s.module,fields:[...a.fields,...s.module.fields]}:s.module=a;for(let h=0;h<t.fields.length;h++){let _=t.fields[h],E=!1,k;for(let w=0;w<n.length;w++){let $=n[w],b;if(V($)&&v($,":",2)){if(b=$.args[0],$=$.args[1],!j(b))throw p({token:b.token,errorMessage:`Expected identifier for label, got:
1856
- ${T(b)}`});k=b.token.value}else throw p({token:$.token,errorMessage:`Expected member label, but got:
1857
- ${T($)}`});if(!t.fields.find(F=>F.label===k))throw p({token:b.token,errorMessage:`Module member with label "${k}" does not exist in the module type.`});if(_.label===k){if(E=!0,_.assignedValue)throw p({token:$.token,errorMessage:`Module member "${_.label}" already has a assigned value:
1858
- ${je(_.assignedValue)}`});let F,M=_.exprs.typeExpr,L=_.exprs.defaultValueExpr;if(M){let ne=(c=S({expr:yt(M),env:ut(t.env,r.frames[r.frames.length-1]),context:{...o,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:c.value;if(!G(ne))throw p({token:$.token,errorMessage:`Failed to evaluate the module member "${k}"`});F=ne.value}else if(L){let ne=(f=S({expr:yt(L),env:ut(t.env,r.frames[r.frames.length-1]),context:{...o,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:f.value;if(!ne)throw p({token:$.token,errorMessage:`Failed to evaluate the module member "${k}"`});F=ne.type}else throw p({token:$.token,errorMessage:`Module member "${k}" has no type or default value or assigned value.`});let O=S({expr:$,env:r,context:{...o,expectedType:{type:F,env:r},ReceiverType:void 0,SelfType:l}}),B=(m=O.$)==null?void 0:m.type;if(!B)throw p({token:$.token,errorMessage:`Failed to evaluate the module member "${k}"`});if((y=O.$)!=null&&y.env&&(r=O.$.env),!W({type:F,env:r},{type:B,env:r}))throw p({token:$.token,errorMessage:`Type mismatch for the module member "${k}":
1890
+ `});let u=s.module;s.module?s.module={...s.module,fields:[...a.fields,...s.module.fields]}:s.module=a;for(let _=0;_<t.fields.length;_++){let g=t.fields[_],$=!1,k;for(let b=0;b<n.length;b++){let E=n[b],w;if(V(E)&&v(E,":",2)){if(w=E.args[0],E=E.args[1],!Q(w))throw p({token:w.token,errorMessage:`Expected identifier for label, got:
1891
+ ${T(w)}`});k=w.token.value}else throw p({token:E.token,errorMessage:`Expected member label, but got:
1892
+ ${T(E)}`});if(!t.fields.find(F=>F.label===k))throw p({token:w.token,errorMessage:`Module member with label "${k}" does not exist in the module type.`});if(g.label===k){if($=!0,g.assignedValue)throw p({token:E.token,errorMessage:`Module member "${g.label}" already has a assigned value:
1893
+ ${He(g.assignedValue)}`});let F,L=g.exprs.typeExpr,S=g.exprs.defaultValueExpr;if(L){let H=(c=M({expr:dt(L),env:at(t.env,r.frames[r.frames.length-1]),context:{...o,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:c.value;if(!j(H))throw p({token:E.token,errorMessage:`Failed to evaluate the module member "${k}"`});F=H.value}else if(S){let H=(f=M({expr:dt(S),env:at(t.env,r.frames[r.frames.length-1]),context:{...o,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:f.value;if(!H)throw p({token:E.token,errorMessage:`Failed to evaluate the module member "${k}"`});F=H.type}else throw p({token:E.token,errorMessage:`Module member "${k}" has no type or default value or assigned value.`});let B=M({expr:E,env:r,context:{...o,expectedType:{type:F,env:r},ReceiverType:void 0,SelfType:l}}),R=(m=B.$)==null?void 0:m.type;if(!R)throw p({token:E.token,errorMessage:`Failed to evaluate the module member "${k}"`});if((y=B.$)!=null&&y.env&&(r=B.$.env),!te({type:F,env:r},{type:R,env:r}))throw p({token:E.token,errorMessage:`Type mismatch for the module member "${k}":
1859
1894
  Expected: ${x(F)}
1860
- Got: ${x(B)}`});let P=(g=O.$)==null?void 0:g.value;Fe(P)&&(P.funcId+=`_${_.label}`,!P.specializedType&&F.tag==="Function"&&(P.specializedType=F)),i[h]=P,a.fields[h].assignedValue=P,s&&s.module&&(s.module.fields[h].assignedValue=P),$.$={env:r,type:B,value:P,pathCollection:[]},b&&(b.$=$.$);break}}if(!E){let w=_.defaultValue,$=_.assignedValue,b=$;if(!$&&w&&(b=w),!b)throw p({token:e.token,errorMessage:`Module member "${_.label}" is not provided and has no required/default value.`});i[h]=b,a.fields[h].assignedValue=b}}return s&&u&&(s.module=u),{moduleValue:Vr({...t,receiverType:s},i),callerEnv:r}}function rm(e){switch(e.tag){case"u8":return{min:0,max:255};case"i8":return{min:-128,max:127};case"u16":return{min:0,max:65535};case"i16":return{min:-32768,max:32767};case"u32":return{min:0,max:4294967295};case"i32":return{min:-2147483648,max:2147483647};case"u64":return{min:0,max:Number.MAX_SAFE_INTEGER};case"i64":return{min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER};case"usize":return{min:0,max:Number.MAX_SAFE_INTEGER};case"isize":return{min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER};case"f32":case"f64":return;default:return}}function Qp(e){switch(e.tag){case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"usize":return"Usize";case"isize":return"Isize";case"f32":return"F32";case"f64":return"F64";default:return}}function om(e){return Tr(e)||$r(e)||kt(e)||Bt(e)}function jo(e){return Tr(e)||$r(e)||kt(e)||Bt(e)||In(e)}function im(e){if(e&&ct(e))return e.value}function am(e){return Zn(e)||ri(e)||ct(e)}function Zp(e,t,n){let r=rm(t);if(r&&(e<r.min||e>r.max))throw p({token:n,errorMessage:`Value ${e} is out of range for type ${x(t)} (${r.min} to ${r.max})`});if(kt(t))return Pn(Math.floor(e));if(Bt(t))return oi(e);if($r(t)){let o=Qp(t);if(o)return Dt(o,e)}if(Tr(t)){let o=Qp(t);if(o)return Dt(o,Math.floor(e))}throw p({token:n,errorMessage:`Cannot create compile-time value for type ${x(t)}`})}function Jp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:o}){if(!jo(e))return;let i=S({expr:t,env:r,context:{...o,expectedType:void 0}});if(!i.$)throw p({token:t.token,errorMessage:`Failed to evaluate argument: ${T(t)}`});let a=i.$.env,s=i.$.value,l=i.$.type;if(!jo(l)&&!kt(l)&&!Bt(l))throw p({token:t.token,errorMessage:`Cannot convert ${x(l)} to ${x(e)}. Expected a numeric type.`});let u=im(s);if(u!==void 0&&om(e)){let d=Zp(u,e,n.token);return n.$={env:a,type:e,value:d,pathCollection:[]},{expr:n,env:a}}if((kt(e)||Bt(e))&&u===void 0)throw p({token:t.token,errorMessage:`Cannot convert runtime value to ${x(e)}. Only compile-time values can be converted to ${x(e)}.`});if(In(e)||!am(s)){let d={tag:"FuncCall",func:{tag:"Atom",token:{...n.token,value:C.__yo_as[0],type:"identifier"},$:void 0},args:[i,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:i.$.pathCollection}};return ra(n,d),{expr:n,env:a}}if(u!==void 0){let d=Zp(u,e,n.token);return n.$={env:a,type:e,value:d,pathCollection:[]},{expr:n,env:a}}throw p({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function Xp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:o}){if(!De(e))return;let i=S({expr:t,env:r,context:{...o,expectedType:void 0}});if(!i.$)throw p({token:t.token,errorMessage:`Failed to evaluate argument: ${T(t)}`});let a=i.$.env,s=i.$.type;if(!De(s))throw p({token:t.token,errorMessage:`Cannot cast ${x(s)} to ${x(e)}. Expected a pointer type.`});let l={tag:"FuncCall",func:{tag:"Atom",token:{...n.token,value:C.__yo_as[0],type:"identifier"},$:void 0},args:[i,n.func],token:n.token,$:{env:a,type:e,value:re(e),pathCollection:i.$.pathCollection,runtimeArgExprsInOrder:[i]}};return ra(n,l),{expr:n,env:a}}function _a({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:o,isUnionType:i}){var d;if(n.length>e.length)throw p({token:t.token,errorMessage:`Failed to call the type. Too many members provided. Expected ${e.length} arguments, got ${n.length}.`});if(i&&n.length!==1)throw p({token:t.token,errorMessage:`Failed to call the union type. Expected exactly one argument, got ${n.length}.`});let a=new Set,s=Array(e.length).fill(void 0),l=[];for(let c=0;c<e.length;c++){let f=e[c],m=n[c];if(!m)break;let y;if(V(m)&&v(m,":",2)&&(y=m.args[0],m=m.args[1],!j(y)))throw p({token:y.token,errorMessage:`Expected identifier for label, got:
1861
- ${T(y)}`});if(y){let E=y.token.value,k=e.find(w=>w.label===E);if(k){if(k.assignedValue)throw p({token:m.token,errorMessage:`Cannot use label "${E}" for already assigned value:
1862
- ${zr(k)}`});f=k}else throw p({token:m.token,errorMessage:`Failed to find "${E}" in the type.`})}if(a.has(f))throw p({token:m.token,errorMessage:`Type member "${f.label}" is already implemented.`});let g=e.indexOf(f),h=S({expr:m,env:r,context:{...o,expectedType:{type:f.type,env:r}}});if(!h.$)throw p({token:m.token,errorMessage:`Failed to evaluate argument expression:
1863
- ${T(m)}`});xt(h,o),r=h.$.env;let _=h.$.type;if(y&&(y.$=h.$),!W({type:f.type,env:r},{type:_,env:r}))throw p({token:m.token,errorMessage:`Type mismatch for type member "${f.label}":
1895
+ Got: ${x(R)}`});let Y=(h=B.$)==null?void 0:h.value;xe(Y)&&(Y.funcId+=`_${g.label}`,!Y.specializedType&&F.tag==="Function"&&(Y.specializedType=F)),i[_]=Y,a.fields[_].assignedValue=Y,s&&s.module&&(s.module.fields[_].assignedValue=Y),E.$={env:r,type:R,value:Y,pathCollection:[]},w&&(w.$=E.$);break}}if(!$){let b=g.defaultValue,E=g.assignedValue,w=E;if(!E&&b&&(w=b),!w)throw p({token:e.token,errorMessage:`Module member "${g.label}" is not provided and has no required/default value.`});i[_]=w,a.fields[_].assignedValue=w}}return s&&u&&(s.module=u),{moduleValue:Lr({...t,receiverType:s},i),callerEnv:r}}function wa(e){switch(e.tag){case"u8":return{min:0,max:255};case"i8":return{min:-128,max:127};case"u16":return{min:0,max:65535};case"i16":return{min:-32768,max:32767};case"u32":return{min:0,max:4294967295};case"i32":return{min:-2147483648,max:2147483647};case"u64":return{min:0n,max:18446744073709551615n};case"i64":return{min:-9223372036854775808n,max:9223372036854775807n};case"usize":return{min:0n,max:18446744073709551615n};case"isize":return{min:-9223372036854775808n,max:9223372036854775807n};case"compt_int":return{min:-1/0,max:1/0};case"f32":case"f64":return;default:return}}function Ac(e){switch(e.tag){case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"usize":return"Usize";case"isize":return"Isize";case"f32":return"F32";case"f64":return"F64";default:return}}function Bm(e){return Cr(e)||kr(e)||Mt(e)||Pt(e)}function Zo(e){return Cr(e)||kr(e)||Mt(e)||Pt(e)||On(e)}function Um(e){if(e&&tt(e))return e.value}function Rm(e){return Xn(e)||pi(e)||tt(e)}function Ic(e,t,n){let r=wa(t);if(r){let o=e,i=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),d=typeof l=="bigint"?l:BigInt(Math.floor(l));return u<d}return s<l},a=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),d=typeof l=="bigint"?l:BigInt(Math.floor(l));return u>d}return s>l};if(i(o,r.min)||a(o,r.max))throw p({token:n,errorMessage:`Value ${e} is out of range for type ${x(t)} (${r.min} to ${r.max})`})}if(Mt(t)){let o=typeof e=="bigint"?e:BigInt(Math.floor(e));return qn(o)}if(Pt(t)){let o=typeof e=="bigint"?Number(e):e;return ci(o)}if(kr(t)){let o=Ac(t);if(o){let i=typeof e=="bigint"?Number(e):e;return Dt(o,i)}}if(Cr(t)){let o=Ac(t);if(o)if(o==="U64"||o==="I64"||o==="Usize"||o==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Dt(o,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return Dt(o,a)}}throw p({token:n,errorMessage:`Cannot create compile-time value for type ${x(t)}`})}function Nc({targetType:e,argExpr:t,expr:n,callerEnv:r,context:o}){if(!Zo(e))return;let i=M({expr:t,env:r,context:{...o,expectedType:void 0}});if(!i.$)throw p({token:t.token,errorMessage:`Failed to evaluate argument: ${T(t)}`});let a=i.$.env,s=i.$.value,l=i.$.type;if(!Zo(l)&&!Mt(l)&&!Pt(l))throw p({token:t.token,errorMessage:`Cannot convert ${x(l)} to ${x(e)}. Expected a numeric type.`});let u=Um(s);if(u!==void 0&&Bm(e)){let d=Ic(u,e,n.token);return n.$={env:a,type:e,value:d,pathCollection:[]},{expr:n,env:a}}if((Mt(e)||Pt(e))&&u===void 0)throw p({token:t.token,errorMessage:`Cannot convert runtime value to ${x(e)}. Only compile-time values can be converted to ${x(e)}.`});if(On(e)||!Rm(s)){let d={tag:"FuncCall",func:{tag:"Atom",token:{...n.token,value:C.__yo_as[0],type:"identifier"},$:void 0},args:[i,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:i.$.pathCollection}};return fa(n,d),{expr:n,env:a}}if(u!==void 0){let d=Ic(u,e,n.token);return n.$={env:a,type:e,value:d,pathCollection:[]},{expr:n,env:a}}throw p({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function Dc({targetType:e,argExpr:t,expr:n,callerEnv:r,context:o}){if(!ze(e))return;let i=M({expr:t,env:r,context:{...o,expectedType:void 0}});if(!i.$)throw p({token:t.token,errorMessage:`Failed to evaluate argument: ${T(t)}`});let a=i.$.env,s=i.$.type;if(!ze(s))throw p({token:t.token,errorMessage:`Cannot cast ${x(s)} to ${x(e)}. Expected a pointer type.`});let l={tag:"FuncCall",func:{tag:"Atom",token:{...n.token,value:C.__yo_as[0],type:"identifier"},$:void 0},args:[i,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:i.$.pathCollection,runtimeArgExprsInOrder:[i]}};return fa(n,l),{expr:n,env:a}}function Fa({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:o,isUnionType:i}){var d;if(n.length>e.length)throw p({token:t.token,errorMessage:`Failed to call the type. Too many members provided. Expected ${e.length} arguments, got ${n.length}.`});if(i&&n.length!==1)throw p({token:t.token,errorMessage:`Failed to call the union type. Expected exactly one argument, got ${n.length}.`});let a=new Set,s=Array(e.length).fill(void 0),l=[];for(let c=0;c<e.length;c++){let f=e[c],m=n[c];if(!m)break;let y;if(V(m)&&v(m,":",2)&&(y=m.args[0],m=m.args[1],!Q(y)))throw p({token:y.token,errorMessage:`Expected identifier for label, got:
1896
+ ${T(y)}`});if(y){let $=y.token.value,k=e.find(b=>b.label===$);if(k){if(k.assignedValue)throw p({token:m.token,errorMessage:`Cannot use label "${$}" for already assigned value:
1897
+ ${qr(k)}`});f=k}else throw p({token:m.token,errorMessage:`Failed to find "${$}" in the type.`})}if(a.has(f))throw p({token:m.token,errorMessage:`Type member "${f.label}" is already implemented.`});let h=e.indexOf(f),_=M({expr:m,env:r,context:{...o,expectedType:{type:f.type,env:r}}});if(!_.$)throw p({token:m.token,errorMessage:`Failed to evaluate argument expression:
1898
+ ${T(m)}`});At(_,o),r=_.$.env;let g=_.$.type;if(y&&(y.$=_.$),!te({type:f.type,env:r},{type:g,env:r}))throw p({token:m.token,errorMessage:`Type mismatch for type member "${f.label}":
1864
1899
  Expected: ${x(f.type)}
1865
- Got: ${x(_)}`});s[g]=(d=h.$)==null?void 0:d.value,l[g]=h,a.add(f)}if(!i)for(let c=0;c<e.length;c++){let f=e[c];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw p({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[c]=f.defaultValue??f.assignedValue,l[c]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function sm(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:o}=e.recursiveTypeRef,i=r.calledComptFunctionCaches.find(s=>s.argValues.length===o.length&&s.argValues.every((l,u)=>{let d=o[u];return G(l)&&G(d)?W({type:l.value,env:s.env},{type:d.value,env:t},!0):Lt({value:l,env:s.env},{value:d,env:t})}));if(i&&G(i.value)&&!(ee(i.value.value)&&i.value.value.recursiveTypeRef))return i.value.value;if(n!=null&&n.SelfType&&$t(n.SelfType)||n!=null&&n.SelfType&&$e(n.SelfType))return n.SelfType;let a=r.calledComptFunctionCaches.find(s=>!(!G(s.value)||ee(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&G(a.value))return a.value.value}function En({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:o}){var m,y,g,h,_,E,k,w,$,b,F,M,L,O,B,P,q,ne,pe,ue,oe,ye,ge,Me,Se,Re,Te,be;let i=e.func,a=e.args,s,l=[];if(r)l=[r];else if(V(i)){let I=S({expr:i,env:t,context:{...n}});if(i=I,(m=I.$)!=null&&m.type)l=[{type:I.$.type,value:I.$.value}];else if(V(I)&&v(I,".",2)){let U=I.args[0];s=I.args[1];let te=(y=U.$)==null?void 0:y.type;if(!te)throw p({token:U.token,errorMessage:"Expected to be evaluated."});if(Bp(U,s)){let se=U.$.value;if(a.length!==1)throw p({token:e.token,errorMessage:`Array.fill expects exactly 1 argument (fill value), got ${a.length}`});return Up({expr:e,arrayType:se.value,fillValueArg:a[0],env:t,context:n}).expr}if(j(s)){let se=s.token.value,ve=((g=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:g.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0;l=Ka(t,se,te,!1,ve).map(Ze=>{let Je;if(Ze.needsPointerConversion){let rt={tag:"Atom",token:U.token,$:void 0};rt.token={...U.token,value:"&",type:"identifier"},Je=[{tag:"FuncCall",func:rt,args:[U],token:U.token,$:void 0},...a]}else Je=[U,...a];return{type:Ze.type,value:Ze.value,needsPointerConversion:Ze.needsPointerConversion,args:Je}})}else{let se=S({expr:s,env:t,context:{...n}});(h=se.$)!=null&&h.env&&(t=(_=se.$)==null?void 0:_.env),s=se;let ve=(E=s.$)==null?void 0:E.type,xe=(k=s.$)==null?void 0:k.value;if(!ve)throw p({token:s.token,errorMessage:"Expected to be a function."});l=[{type:ve,value:xe}],a=[U,...a]}}else throw p({token:i.token,errorMessage:`Expected type for function call, got ${T(I)}`})}else{let I=i.token.type==="backtick_identifier"?i.token.value.slice(1,-1):i.token.value;if(I==="_"){let U=n.expectedType;if(!U||ee(U.type))return Pp({expr:e,env:t,context:n});l=[{type:At(U.type),value:ae(U.type)}],i.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Ln(I)&&e.isInfix){let U=a[0];if(!U)throw p({token:i.token,errorMessage:`Expected first argument for operator, got:
1866
- ${T(i)}`});let se=(w=S({expr:U,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:w.type;if(!se)throw p({token:U.token,errorMessage:"Expected to be evaluated."});let ve=I;s=i;let xe=(($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0;l=Ka(t,ve,se,!0,xe).map(Je=>({type:Je.type,value:Je.value,needsPointerConversion:Je.needsPointerConversion}))}else if(I==="Call"&&n.SelfType){let U=ae(n.SelfType);l=[{type:U.type,value:U}]}else{let U=S({expr:i,env:t,context:{...n}});if(i=U,!U.$)throw p({token:i.token,errorMessage:"Failed to evaluate the callee:"});if(Ee(U.$.type)){let te=U.$.type,se=te.fields.findIndex(xe=>xe.label==="Call");if(se<0)throw p({token:i.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let ve=te.fields[se];if(ve.assignedValue){let xe=ve.assignedValue;ln(xe)?l=xe.fields.map(Ze=>({type:Ze.type,value:Ze})):l=[{type:xe.type,value:xe}]}else throw p({token:i.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:U.$.type,value:U.$.value}]}}let u=l.map(I=>{let U=I.args??a;if(ce(I.type))try{let te=Yo({functionValue:qo(I.value),functionType:I.type,expr:yt(e),functionCalleeExpr:i,argExprs:U.map(se=>yt(se)),callerEnv:t,context:n,isMethodCall:!!s,skipSpecialization:!0});return{...I,result:{kind:"function",result:te}}}catch(te){return{...I,result:{kind:"error",error:te}}}else if((ee(I.type)||Ne(I.type))&&nn(I.type)){let te=nn(I.type);try{let se=Yo({functionValue:qo(I.value),functionType:te.isFn.callType,expr:yt(e),functionCalleeExpr:i,argExprs:U.map(ve=>yt(ve)),callerEnv:t,context:n,isMethodCall:!!s,skipSpecialization:!0});return{...I,result:{kind:"function",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}}else{let te=I.value;if(G(te)&&ee(te.value)&&te.value.recursiveTypeRef){let se=sm(te.value,t,n);se&&(te=ae(se),I.value=te,I.type=te.type)}if(G(te)&&$e(te.value))try{let se=_a({typeFields:te.value.fields,functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"type",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}else if(G(te)&&Ve(te.value)){let se=te.value,ve=se.variants.find(xe=>xe.name===se.selectedVariantName);if(ve)try{let xe=_a({typeFields:ve.fields||[],functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"type",result:xe}}}catch(xe){return{...I,result:{kind:"error",error:xe}}}else return{...I,result:{kind:"error",error:p({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(G(te)&&ot(te.value))try{let se=_a({typeFields:te.value.fields,functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n},isUnionType:!0});return{...I,result:{kind:"type",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}else if(G(te)&&Ee(te.value)){let se=te.value;try{let ve=Kp({moduleExpr:i,moduleType:se,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"module-type",result:ve}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&ce(te.value)){let se=te.value;try{return Rp({expr:e,functionType:se,callerEnv:t,context:{...n}}),{...I,result:{kind:"function-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&Oe(te.value)){let se=te.value;try{return Gp({expr:e,arrayType:se,argExprs:U,callerEnv:t,context:{...n}}),{...I,result:{kind:"array-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&mt(te.value)){let se=te.value;try{return Yp({expr:e,comptListType:se,argExprs:U,callerEnv:t,context:{...n}}),{...I,result:{kind:"array-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&(ee(te.value)||Ne(te.value))){let se=te.value,ve=nn(se);if(ve)try{return qp({expr:e,fnModuleType:ve,wrapperType:se,callerEnv:t,context:{...n}}),{...I,result:{kind:"closure-type"}}}catch(xe){return{...I,result:{kind:"error",error:xe}}}else if(ee(se)&&se.recursiveTypeRef)try{let xe=[];for(let Ze of U){let Je=S({expr:Ze,env:t,context:{...n}});if(!Je.$)throw p({token:Ze.token,errorMessage:"Failed to evaluate argument"});t=Je.$.env,xe.push(Je)}return{...I,result:{kind:"type",result:{values:xe.map(Ze=>Ze.$.value),pathCollection:[],runtimeArgExprsInOrder:xe,callerEnv:t}}}}catch(xe){return{...I,result:{kind:"error",error:xe}}}else return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Invalid function call on type:
1867
- ${G(te)?x(te.value):x(I.type)}`})}}}else if(Oe(I.type)||at(I.type))try{let se=zp({expr:e,arrayType:I.type,arrayValue:I.value,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"array",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}else if(G(te)&&jo(te.value)){let se=te.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${U.length}`})}};try{let ve=Jp({targetType:se,argExpr:U[0],expr:e,callerEnv:t,context:{...n}});return ve?{...I,result:{kind:"numeric-type",result:ve}}:{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Failed to convert to numeric type ${x(se)}`})}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&De(te.value)){let se=te.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${U.length}`})}};try{let ve=Xp({targetType:se,argExpr:U[0],expr:e,callerEnv:t,context:{...n}});return ve?{...I,result:{kind:"pointer-type",result:ve}}:{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Failed to cast to pointer type ${x(se)}`})}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&gt(te.value)){let se=te.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${U.length}`})}};try{let ve=Hp({expr:e,env:t,context:{...n},isoType:se});return{...I,result:{kind:"iso-value",result:ve}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Invalid function call on type:
1868
- ${G(te)?x(te.value):x(I.type)}`})}}}}),d=u.filter(I=>I.result.kind!=="error"),c=d.filter(I=>ce(I.type)&&I.type.return.isCompileTimeOnly);if(c.length===1&&(d=c),d.length===0){if(u.length===1&&u[0].result.kind==="error"){let I=u[0].result.error;throw I instanceof Jt?st([{token:e.token,errorMessage:`Failed to call the function:
1900
+ Got: ${x(g)}`});s[h]=(d=_.$)==null?void 0:d.value,l[h]=_,a.add(f)}if(!i)for(let c=0;c<e.length;c++){let f=e[c];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw p({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[c]=f.defaultValue??f.assignedValue,l[c]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function Pm(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:o}=e.recursiveTypeRef,i=r.calledComptFunctionCaches.find(s=>s.argValues.length===o.length&&s.argValues.every((l,u)=>{let d=o[u];return j(l)&&j(d)?te({type:l.value,env:s.env},{type:d.value,env:t},!0):Nt({value:l,env:s.env},{value:d,env:t})}));if(i&&j(i.value)&&!(X(i.value.value)&&i.value.value.recursiveTypeRef))return i.value.value;if(n!=null&&n.SelfType&&vt(n.SelfType)||n!=null&&n.SelfType&&we(n.SelfType))return n.SelfType;let a=r.calledComptFunctionCaches.find(s=>!(!j(s.value)||X(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&j(a.value))return a.value.value}function Fn({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:o}){var m,y,h,_,g,$,k,b,E,w,F,L,S,B,R,Y,W,H,se,ye,oe,pe,_e,Ie,ke,Ae,ge,$e;let i=e.func,a=e.args,s,l=[];if(r)l=[r];else if(V(i)){let I=M({expr:i,env:t,context:{...n}});if(i=I,(m=I.$)!=null&&m.type)l=[{type:I.$.type,value:I.$.value}];else if(V(I)&&v(I,".",2)){let U=I.args[0];s=I.args[1];let re=(y=U.$)==null?void 0:y.type;if(!re)throw p({token:U.token,errorMessage:"Expected to be evaluated."});if(Q(s)){let ie=s.token.value,ve=((h=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:h.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0;l=ls(t,ie,re,!1,ve).map(qe=>{let We;if(qe.needsPointerConversion){let it={tag:"Atom",token:U.token,$:void 0};it.token={...U.token,value:"&",type:"identifier"},We=[{tag:"FuncCall",func:it,args:[U],token:U.token,$:void 0},...a]}else We=[U,...a];return{type:qe.type,value:qe.value,needsPointerConversion:qe.needsPointerConversion,args:We}})}else{let ie=M({expr:s,env:t,context:{...n}});(_=ie.$)!=null&&_.env&&(t=(g=ie.$)==null?void 0:g.env),s=ie;let ve=($=s.$)==null?void 0:$.type,Ee=(k=s.$)==null?void 0:k.value;if(!ve)throw p({token:s.token,errorMessage:"Expected to be a function."});l=[{type:ve,value:Ee}],a=[U,...a]}}else throw p({token:i.token,errorMessage:`Expected type for function call, got ${T(I)}`})}else{let I=i.token.type==="backtick_identifier"?i.token.value.slice(1,-1):i.token.value;if(I==="_"){let U=n.expectedType;if(!U||X(U.type))return Cc({expr:e,env:t,context:n});l=[{type:Ot(U.type),value:le(U.type)}],i.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Nn(I)&&e.isInfix){let U=a[0];if(!U)throw p({token:i.token,errorMessage:`Expected first argument for operator, got:
1901
+ ${T(i)}`});let ie=(b=M({expr:U,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:b.type;if(!ie)throw p({token:U.token,errorMessage:"Expected to be evaluated."});let ve=I;s=i;let Ee=((E=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:E.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0;l=ls(t,ve,ie,!0,Ee).map(We=>({type:We.type,value:We.value,needsPointerConversion:We.needsPointerConversion}))}else if(I==="Call"&&n.SelfType){let U=le(n.SelfType);l=[{type:U.type,value:U}]}else{let U=M({expr:i,env:t,context:{...n}});if(i=U,!U.$)throw p({token:i.token,errorMessage:"Failed to evaluate the callee:"});if(Fe(U.$.type)){let re=U.$.type,ie=re.fields.findIndex(Ee=>Ee.label==="Call");if(ie<0)throw p({token:i.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let ve=re.fields[ie];if(ve.assignedValue){let Ee=ve.assignedValue;en(Ee)?l=Ee.fields.map(qe=>({type:qe.type,value:qe})):l=[{type:Ee.type,value:Ee}]}else throw p({token:i.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:U.$.type,value:U.$.value}]}}let u=l.map(I=>{let U=I.args??a;if(me(I.type))try{let re=Qo({functionValue:Ko(I.value),functionType:I.type,expr:dt(e),functionCalleeExpr:i,argExprs:U.map(ie=>dt(ie)),callerEnv:t,context:n,isMethodCall:!!s,skipSpecialization:!0});return{...I,result:{kind:"function",result:re}}}catch(re){if(re instanceof Gt&&re.kind==="overflow")throw st([{token:e.token,errorMessage:`Failed to call the function:
1902
+ `},...re.tokenAndErrorList],re.isAssertionError);return{...I,result:{kind:"error",error:re}}}else if((X(I.type)||Re(I.type))&&sn(I.type)){let re=sn(I.type);try{let ie=Qo({functionValue:Ko(I.value),functionType:re.isFn.callType,expr:dt(e),functionCalleeExpr:i,argExprs:U.map(ve=>dt(ve)),callerEnv:t,context:n,isMethodCall:!!s,skipSpecialization:!0});return{...I,result:{kind:"function",result:ie}}}catch(ie){if(ie instanceof Gt&&ie.kind==="overflow")throw st([{token:e.token,errorMessage:`Failed to call the function:
1903
+ `},...ie.tokenAndErrorList],ie.isAssertionError);return{...I,result:{kind:"error",error:ie}}}}else{let re=I.value;if(j(re)&&X(re.value)&&re.value.recursiveTypeRef){let ie=Pm(re.value,t,n);ie&&(re=le(ie),I.value=re,I.type=re.type)}if(j(re)&&we(re.value))try{let ie=Fa({typeFields:re.value.fields,functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"type",result:ie}}}catch(ie){return{...I,result:{kind:"error",error:ie}}}else if(j(re)&&Ve(re.value)){let ie=re.value,ve=ie.variants.find(Ee=>Ee.name===ie.selectedVariantName);if(ve)try{let Ee=Fa({typeFields:ve.fields||[],functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"type",result:Ee}}}catch(Ee){return{...I,result:{kind:"error",error:Ee}}}else return{...I,result:{kind:"error",error:p({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(j(re)&&pt(re.value))try{let ie=Fa({typeFields:re.value.fields,functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n},isUnionType:!0});return{...I,result:{kind:"type",result:ie}}}catch(ie){return{...I,result:{kind:"error",error:ie}}}else if(j(re)&&Fe(re.value)){let ie=re.value;try{let ve=Sc({moduleExpr:i,moduleType:ie,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"module-type",result:ve}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(j(re)&&me(re.value)){let ie=re.value;try{return wc({expr:e,functionType:ie,callerEnv:t,context:{...n}}),{...I,result:{kind:"function-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(j(re)&&Oe(re.value)){let ie=re.value;try{return bc({expr:e,arrayType:ie,argExprs:U,callerEnv:t,context:{...n}}),{...I,result:{kind:"array-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(j(re)&&$t(re.value)){let ie=re.value;try{return Vc({expr:e,comptListType:ie,argExprs:U,callerEnv:t,context:{...n}}),{...I,result:{kind:"array-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(j(re)&&(X(re.value)||Re(re.value))){let ie=re.value,ve=sn(ie);if(ve)try{return Fc({expr:e,fnModuleType:ve,wrapperType:ie,callerEnv:t,context:{...n}}),{...I,result:{kind:"closure-type"}}}catch(Ee){return{...I,result:{kind:"error",error:Ee}}}else if(X(ie)&&ie.recursiveTypeRef)try{let Ee=[];for(let qe of U){let We=M({expr:qe,env:t,context:{...n}});if(!We.$)throw p({token:qe.token,errorMessage:"Failed to evaluate argument"});t=We.$.env,Ee.push(We)}return{...I,result:{kind:"type",result:{values:Ee.map(qe=>qe.$.value),pathCollection:[],runtimeArgExprsInOrder:Ee,callerEnv:t}}}}catch(Ee){return{...I,result:{kind:"error",error:Ee}}}else return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Invalid function call on type:
1904
+ ${j(re)?x(re.value):x(I.type)}`})}}}else if(Oe(I.type)||ft(I.type))try{let ie=kc({expr:e,arrayType:I.type,arrayValue:I.value,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"array",result:ie}}}catch(ie){return{...I,result:{kind:"error",error:ie}}}else if(j(re)&&Zo(re.value)){let ie=re.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${U.length}`})}};try{let ve=Nc({targetType:ie,argExpr:U[0],expr:e,callerEnv:t,context:{...n}});return ve?{...I,result:{kind:"numeric-type",result:ve}}:{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Failed to convert to numeric type ${x(ie)}`})}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(j(re)&&ze(re.value)){let ie=re.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${U.length}`})}};try{let ve=Dc({targetType:ie,argExpr:U[0],expr:e,callerEnv:t,context:{...n}});return ve?{...I,result:{kind:"pointer-type",result:ve}}:{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Failed to cast to pointer type ${x(ie)}`})}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(j(re)&&Ct(re.value)){let ie=re.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${U.length}`})}};try{let ve=Lc({expr:e,env:t,context:{...n},isoType:ie});return{...I,result:{kind:"iso-value",result:ve}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Invalid function call on type:
1905
+ ${j(re)?x(re.value):x(I.type)}`})}}}}),d=u.filter(I=>I.result.kind!=="error"),c=d.filter(I=>me(I.type)&&I.type.return.isCompileTimeOnly);if(c.length===1&&(d=c),d.length===0){if(u.length===1&&u[0].result.kind==="error"){let I=u[0].result.error;throw I instanceof Gt?st([{token:e.token,errorMessage:`Failed to call the function:
1869
1906
 
1870
1907
  ${I.tokenAndErrorList.filter(({token:U})=>U.modulePath!==e.token.modulePath).map(({errorMessage:U})=>`- ${U}`).join(`
1871
1908
  `)}`},...I.tokenAndErrorList.filter(({token:U})=>U.modulePath===e.token.modulePath)],I.isAssertionError):st([{token:e.token,errorMessage:`Failed to call the function:
@@ -1873,7 +1910,7 @@ ${I.tokenAndErrorList.filter(({token:U})=>U.modulePath!==e.token.modulePath).map
1873
1910
  ${T(e)}
1874
1911
 
1875
1912
  ${u.length?`Available functions:
1876
- `:""}`},...u.map(I=>{let U=I.result.kind==="error"?I.result.error:void 0;return U?U instanceof Jt?[{token:i.token,errorMessage:`- ${x(I.type)}
1913
+ `:""}`},...u.map(I=>{let U=I.result.kind==="error"?I.result.error:void 0;return U?U instanceof Gt?[{token:i.token,errorMessage:`- ${x(I.type)}
1877
1914
  `},...U.tokenAndErrorList]:{token:i.token,errorMessage:`- ${x(I.type)}
1878
1915
  ${U instanceof Error?U.message:String(U)}`}:{token:i.token,errorMessage:`${x(I.type)}`}}).flat()])}if(d.length>1)throw p({token:i.token,errorMessage:`Ambiguous call with arguments:
1879
1916
  ${T(e)}
@@ -1881,235 +1918,247 @@ ${T(e)}
1881
1918
  Found ${d.length} matching calls:
1882
1919
  ${d.map(I=>`${x(I.type)}`).join(`
1883
1920
  `)}
1884
- `});let f=d[0];if(o)if(ce(f.type)&&f.type.return.isUnquote){let{returnValue:I,callerEnv:U,pathCollection:te,deferredDropExpressions:se}=Yo({functionValue:qo(f.value),functionType:f.type,expr:e,functionCalleeExpr:i,argExprs:f.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=Ct(U),e.$={env:t,type:jt(),value:I,originType:jt(),pathCollection:te,deferredDropExpressions:se},e}else throw p({token:i.token,errorMessage:"Expected macro function call for macro_expand."});if(ce(f.type)){let I=f.type;{let{returnType:U,returnValue:te,callerEnv:se,pathCollection:ve,specializedFunctionValue:xe,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je}=Yo({functionValue:qo(f.value),functionType:f.type,expr:e,functionCalleeExpr:i,argExprs:f.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Ct(se),I.return.isUnquote)if(Rt(te)){let qt=S({expr:te.value,env:t,context:{...n}});return e.$={env:((b=qt.$)==null?void 0:b.env)||t,type:((F=qt.$)==null?void 0:F.type)||U,value:(M=qt.$)==null?void 0:M.value,originType:((L=qt.$)==null?void 0:L.originType)||((O=qt.$)==null?void 0:O.type)||U,pathCollection:((B=qt.$)==null?void 0:B.pathCollection)||[],macroExpansion:qt,variableName:(P=qt.$)==null?void 0:P.variableName},e}else throw p({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
1885
- ${je(te)}`});let rt=(q=e.$)==null?void 0:q.variableName,Cn=U;if(ee(U)&&f.value&&Fe(f.value)){let qt=f.value.body;if((ne=qt.$)!=null&&ne.type){let an=qt.$.type;ee(an)&&an.resolvedConcreteType&&(an=an.resolvedConcreteType),Cn={...U,resolvedConcreteType:an}}}e.$={env:t,type:Cn,value:te,originType:Cn,pathCollection:ve,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je,variableName:rt},ze(e,!0),i.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]},s&&(s.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]})}return e}else if((ee(f.type)||Ne(f.type))&&nn(f.type)){let I=nn(f.type),{returnType:U,returnValue:te,callerEnv:se,pathCollection:ve,specializedFunctionValue:xe,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je}=Np(f);if(t=Ct(se),I.isFn.callType.return.isUnquote)if(Rt(te)){let rt=S({expr:te.value,env:t,context:{...n}});return e.$={env:((pe=rt.$)==null?void 0:pe.env)||t,type:((ue=rt.$)==null?void 0:ue.type)||U,value:(oe=rt.$)==null?void 0:oe.value,originType:((ye=rt.$)==null?void 0:ye.originType)||((ge=rt.$)==null?void 0:ge.type)||U,pathCollection:((Me=rt.$)==null?void 0:Me.pathCollection)||[],macroExpansion:rt},e}else throw p({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
1886
- ${je(te)}`});return e.$={env:t,type:U,value:te,originType:U,pathCollection:ve,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je},ze(e,!0),i.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]},s&&(s.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]}),e}else{let I=f.value;if(G(I)&&$e(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{values:te,pathCollection:se,callerEnv:ve,runtimeArgExprsInOrder:xe}=zo(f);if(t=ve,!te)throw p({token:i.token,errorMessage:"Error evaluating struct call."});let Ze=te.some(Je=>!Je)?void 0:bn(U,te);return e.$.value=$t(U)?void 0:Ze,e.$.pathCollection=se,e.$.env=t,e.$.runtimeArgExprsInOrder=xe,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(G(I)&&Ve(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let te=U.variants.find(Je=>Je.name===U.selectedVariantName);if(!te)throw p({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:se,pathCollection:ve,callerEnv:xe,runtimeArgExprsInOrder:Ze}=zo(f);if(t=xe,se.every(Je=>!!Je)){let Je=Jn(U,te.name,se);e.$.value=Je}return e.$.pathCollection=ve,e.$.env=t,e.$.runtimeArgExprsInOrder=Ze,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(G(I)&&ot(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{pathCollection:te,callerEnv:se,runtimeArgExprsInOrder:ve}=zo(f);return t=se,e.$.value=void 0,e.$.pathCollection=te,e.$.env=t,e.$.runtimeArgExprsInOrder=ve,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(G(I)&&Ee(I.value)){let{moduleValue:U,callerEnv:te}=Dp(f);return t=te,e.$={env:t,type:U.type,value:U,originType:U.type,pathCollection:[]},i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else{if(G(I)&&ce(I.value))return e;if(G(I)&&Oe(I.value))return e;if(G(I)&&mt(I.value))return e;if(G(I)&&(ee(I.value)||Ne(I.value))){if(f.result.kind==="type"&&ee(I.value)&&I.value.recursiveTypeRef){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{pathCollection:te,callerEnv:se,runtimeArgExprsInOrder:ve}=zo(f);return t=se,e.$.value=void 0,e.$.pathCollection=te,e.$.env=t,e.$.runtimeArgExprsInOrder=ve,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}return e}else{if(G(I)&&jo(I.value))return e;if(G(I)&&De(I.value))return e;if(G(I)&&gt(I.value))return e;if(Oe(f.type)||at(f.type)){let{value:U,index:te,type:se,callerEnv:ve}=Op(f),xe=((Se=i.$)==null?void 0:Se.pathCollection)??[];return a.length===1&&typeof te=="number"&&(xe.length>0?xe=xe.map(Ze=>[...Ze,te.toString()]):(Re=i.$)!=null&&Re.variableName&&(xe=[[i.$.variableName,te.toString()]])),e.$={env:ve,type:se,value:U,originType:((Te=i.$)==null?void 0:Te.originType)??f.type,pathCollection:xe,isAccessingProperty:!0},i.$={env:t,type:f.type,value:f.value,pathCollection:((be=i.$)==null?void 0:be.pathCollection)??[],isAccessingProperty:!0},ze(e,!1),e}}}}throw p({token:e.token,errorMessage:`Function call is not implemented yet:
1887
- ${T(e)}`})}function lm(e){var o;if(!((o=e.$)!=null&&o.type)||!He(e.$.type))throw p({token:e.token,errorMessage:`Expected tuple type for drop generation:
1921
+ `});let f=d[0];if(o)if(me(f.type)&&f.type.return.isUnquote){let{returnValue:I,callerEnv:U,pathCollection:re,deferredDropExpressions:ie}=Qo({functionValue:Ko(f.value),functionType:f.type,expr:e,functionCalleeExpr:i,argExprs:f.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=bt(U),e.$={env:t,type:Ht(),value:I,originType:Ht(),pathCollection:re,deferredDropExpressions:ie},e}else throw p({token:i.token,errorMessage:"Expected macro function call for macro_expand."});if(me(f.type)){let I=f.type;{let{returnType:U,returnValue:re,callerEnv:ie,pathCollection:ve,specializedFunctionValue:Ee,runtimeArgExprsInOrder:qe,deferredDropExpressions:We}=Qo({functionValue:Ko(f.value),functionType:f.type,expr:e,functionCalleeExpr:i,argExprs:f.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=bt(ie),I.return.isUnquote)if(jt(re)){let Wt=M({expr:re.value,env:t,context:{...n}});return e.$={env:((w=Wt.$)==null?void 0:w.env)||t,type:((F=Wt.$)==null?void 0:F.type)||U,value:(L=Wt.$)==null?void 0:L.value,originType:((S=Wt.$)==null?void 0:S.originType)||((B=Wt.$)==null?void 0:B.type)||U,pathCollection:((R=Wt.$)==null?void 0:R.pathCollection)||[],macroExpansion:Wt,variableName:(Y=Wt.$)==null?void 0:Y.variableName},e}else throw p({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
1922
+ ${He(re)}`});let it=(W=e.$)==null?void 0:W.variableName,Vn=U;if(X(U)&&f.value&&xe(f.value)){let Wt=f.value.body;if((H=Wt.$)!=null&&H.type){let cn=Wt.$.type;X(cn)&&cn.resolvedConcreteType&&(cn=cn.resolvedConcreteType),Vn={...U,resolvedConcreteType:cn}}}e.$={env:t,type:Vn,value:re,originType:Vn,pathCollection:ve,runtimeArgExprsInOrder:qe,deferredDropExpressions:We,variableName:it},Ze(e,!0),i.$={env:t,type:f.type,value:Ee||f.value,pathCollection:[]},s&&(s.$={env:t,type:f.type,value:Ee||f.value,pathCollection:[]})}return e}else if((X(f.type)||Re(f.type))&&sn(f.type)){let I=sn(f.type),{returnType:U,returnValue:re,callerEnv:ie,pathCollection:ve,specializedFunctionValue:Ee,runtimeArgExprsInOrder:qe,deferredDropExpressions:We}=$c(f);if(t=bt(ie),I.isFn.callType.return.isUnquote)if(jt(re)){let it=M({expr:re.value,env:t,context:{...n}});return e.$={env:((se=it.$)==null?void 0:se.env)||t,type:((ye=it.$)==null?void 0:ye.type)||U,value:(oe=it.$)==null?void 0:oe.value,originType:((pe=it.$)==null?void 0:pe.originType)||((_e=it.$)==null?void 0:_e.type)||U,pathCollection:((Ie=it.$)==null?void 0:Ie.pathCollection)||[],macroExpansion:it},e}else throw p({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
1923
+ ${He(re)}`});return e.$={env:t,type:U,value:re,originType:U,pathCollection:ve,runtimeArgExprsInOrder:qe,deferredDropExpressions:We},Ze(e,!0),i.$={env:t,type:f.type,value:Ee||f.value,pathCollection:[]},s&&(s.$={env:t,type:f.type,value:Ee||f.value,pathCollection:[]}),e}else{let I=f.value;if(j(I)&&we(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{values:re,pathCollection:ie,callerEnv:ve,runtimeArgExprsInOrder:Ee}=jo(f);if(t=ve,!re)throw p({token:i.token,errorMessage:"Error evaluating struct call."});let qe=re.some(We=>!We)?void 0:Mn(U,re);return e.$.value=vt(U)?void 0:qe,e.$.pathCollection=ie,e.$.env=t,e.$.runtimeArgExprsInOrder=Ee,Ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(j(I)&&Ve(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let re=U.variants.find(We=>We.name===U.selectedVariantName);if(!re)throw p({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:ie,pathCollection:ve,callerEnv:Ee,runtimeArgExprsInOrder:qe}=jo(f);if(t=Ee,ie.every(We=>!!We)){let We=er(U,re.name,ie);e.$.value=We}return e.$.pathCollection=ve,e.$.env=t,e.$.runtimeArgExprsInOrder=qe,Ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(j(I)&&pt(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{pathCollection:re,callerEnv:ie,runtimeArgExprsInOrder:ve}=jo(f);return t=ie,e.$.value=void 0,e.$.pathCollection=re,e.$.env=t,e.$.runtimeArgExprsInOrder=ve,Ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(j(I)&&Fe(I.value)){let{moduleValue:U,callerEnv:re}=Tc(f);return t=re,e.$={env:t,type:U.type,value:U,originType:U.type,pathCollection:[]},i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else{if(j(I)&&me(I.value))return e;if(j(I)&&Oe(I.value))return e;if(j(I)&&$t(I.value))return e;if(j(I)&&(X(I.value)||Re(I.value))){if(f.result.kind==="type"&&X(I.value)&&I.value.recursiveTypeRef){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{pathCollection:re,callerEnv:ie,runtimeArgExprsInOrder:ve}=jo(f);return t=ie,e.$.value=void 0,e.$.pathCollection=re,e.$.env=t,e.$.runtimeArgExprsInOrder=ve,Ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}return e}else{if(j(I)&&Zo(I.value))return e;if(j(I)&&ze(I.value))return e;if(j(I)&&Ct(I.value))return e;if(Oe(f.type)||ft(f.type)){let{value:U,index:re,type:ie,callerEnv:ve}=Ec(f),Ee=((ke=i.$)==null?void 0:ke.pathCollection)??[];return a.length===1&&typeof re=="number"&&(Ee.length>0?Ee=Ee.map(qe=>[...qe,re.toString()]):(Ae=i.$)!=null&&Ae.variableName&&(Ee=[[i.$.variableName,re.toString()]])),e.$={env:ve,type:ie,value:U,originType:((ge=i.$)==null?void 0:ge.originType)??f.type,pathCollection:Ee,isAccessingProperty:!0},i.$={env:t,type:f.type,value:f.value,pathCollection:(($e=i.$)==null?void 0:$e.pathCollection)??[],isAccessingProperty:!0},Ze(e,!1),e}}}}throw p({token:e.token,errorMessage:`Function call is not implemented yet:
1924
+ ${T(e)}`})}function zm(e){var o;if(!((o=e.$)!=null&&o.type)||!Ne(e.$.type))throw p({token:e.token,errorMessage:`Expected tuple type for drop generation:
1888
1925
  ${T(e)}`});if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1889
- ${T(e)}`});let n=e.$.type.fields.map((i,a)=>({index:a,element:i,needsDrop:qe(ee(i.type)&&i.type.resolvedConcreteType?i.type.resolvedConcreteType:i.type)})).filter(({needsDrop:i})=>i);return n.length===0?"":`begin(
1890
- ${n.map(({index:i})=>`${C.___drop[0]}(${e.$.variableName}.${i})`).join(`,
1926
+ ${T(e)}`});let n=e.$.type.fields.map((i,a)=>({index:a,element:i,needsDrop:Ge(X(i.type)&&i.type.resolvedConcreteType?i.type.resolvedConcreteType:i.type)})).filter(({needsDrop:i})=>i);return n.length===0?"":`begin(
1927
+ ${n.map(({index:i})=>`${C.__yo_drop_tuple_element[0]}(${e.$.variableName}, ${i})`).join(`,
1891
1928
  `)}
1892
- )`}function um(e){var s;if(!((s=e.$)!=null&&s.type)||!Oe(e.$.type))throw p({token:e.token,errorMessage:`Expected array type for drop generation:
1929
+ )`}function Gm(e){var s;if(!((s=e.$)!=null&&s.type)||!Oe(e.$.type))throw p({token:e.token,errorMessage:`Expected array type for drop generation:
1893
1930
  ${T(e)}`});if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1894
- ${T(e)}`});let t=e.$.type,n=t.childType,r=ee(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!qe(r))return"";let o=t.length;if(!ct(o))return"";let i=o.value,a=[];for(let l=0;l<i;l++)a.push(`${C.___drop[0]}(${e.$.variableName}(${l}))`);return`begin(
1931
+ ${T(e)}`});let t=e.$.type,n=t.childType,r=X(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!Ge(r))return"";let o=t.length;if(!tt(o))return"";let i=o.value,a=[];for(let l=0;l<i;l++)a.push(`${C.__yo_drop_array_element[0]}(${e.$.variableName}, ${l})`);return`begin(
1895
1932
  ${a.join(`,
1896
1933
  `)}
1897
- )`}function ec({expr:e,env:t,context:n}){var u,d;Ce(e,C.___drop,1);let r=e.args[0];if(!j(r))throw p({token:r.token,errorMessage:`Expected variable name as argument to "${C.___drop[0]}":
1898
- ${T(r)}`});let o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.___drop[0]}":
1934
+ )`}function Oc({expr:e,env:t,context:n}){var u,d;Ce(e,C.___drop,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.___drop[0]}":
1899
1935
  ${T(r)}`});t=o.$.env;let i=(u=o.$)==null?void 0:u.variableName;if(!i)throw p({token:r.token,errorMessage:`Expected variable name as argument to "${C.___drop[0]}":
1900
- ${T(r)}`});let a=o.$.type,l=ee(a)&&a.resolvedConcreteType&&!Pe(a)?a.resolvedConcreteType:a;if(qe(l))if(He(l)){let c=lm(o);if(c){let f=Gt(c);t=Mn(o,t,!0);let m=S({expr:f,env:t,context:{...n}});return V(m)?(Yn(e,m),e):m}else return t=Mn(o,t,!0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}else if(Oe(l)){let c=um(o);if(c){let f=Gt(c);t=Mn(o,t,!0);let m=S({expr:f,env:t,context:{...n}});return V(m)?(Yn(e,m),e):m}else return t=Mn(o,t,!0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}else{let c=Gt(`(${T(o)}).___drop()`),f=En({env:t,context:{...n},expr:c});if(!((d=f.$)!=null&&d.env))throw p({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${C.___drop[0]}" method call:
1901
- ${T(c)}`});let y=me(f.$.env,i).at(-1);if(!y)throw p({token:e.token,errorMessage:`Variable "${i}" not found in environment after evaluating "${C.___drop[0]}" method call:
1902
- ${T(c)}`});let g=Xe(f.$.env,y,{...y,consumedAtToken:e.token});return f.$.env=g,f}else return t=Mn(o,t,!0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function pm(e){var o;if(!((o=e.$)!=null&&o.type)||!He(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1903
- ${T(e)}`});let n=e.$.type.fields.map((i,a)=>({index:a,element:i,needsDup:qe(i.type)}));return n.every(({needsDup:i})=>!i)?"":`begin(
1904
- ${n.map(({index:i,needsDup:a})=>{var s;return a?`${C.___dup[0]}(${(s=e.$)==null?void 0:s.variableName}.${i})`:""}).filter(i=>i.length>0).join(`,
1936
+ ${T(o)}
1937
+
1938
+ Original expression:
1939
+ ${T(r)}`});let a=o.$.type,l=X(a)&&a.resolvedConcreteType&&!je(a)?a.resolvedConcreteType:a;if(Ge(l))if(Ne(l)){let c=zm(o);if(c){let f=Yt(c);t=kn(o,t,!0);let m=M({expr:f,env:t,context:{...n}});return V(m)?(Kn(e,m),e):m}else return t=kn(o,t,!0),e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}else if(Oe(l)){let c=Gm(o);if(c){let f=Yt(c);t=kn(o,t,!0);let m=M({expr:f,env:t,context:{...n}});return V(m)?(Kn(e,m),e):m}else return t=kn(o,t,!0),e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}else{let c=Yt(`(${T(o)}).___drop()`),f=Fn({env:t,context:{...n},expr:c});if(!((d=f.$)!=null&&d.env))throw p({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${C.___drop[0]}" method call:
1940
+ ${T(c)}`});let y=he(f.$.env,i).at(-1);if(!y)throw p({token:e.token,errorMessage:`Variable "${i}" not found in environment after evaluating "${C.___drop[0]}" method call:
1941
+ ${T(c)}`});let h=et(f.$.env,y,{...y,consumedAtToken:e.token});return f.$.env=h,f}else return t=kn(o,t,!0),e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function qm(e){var o;if(!((o=e.$)!=null&&o.type)||!Ne(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1942
+ ${T(e)}`});let n=e.$.type.fields.map((i,a)=>({index:a,element:i,needsDup:Ge(i.type)}));return n.every(({needsDup:i})=>!i)?"":`begin(
1943
+ ${n.map(({index:i,needsDup:a})=>{var s;return a?`${C.__yo_dup_tuple_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${i})`:""}).filter(i=>i.length>0).join(`,
1905
1944
  `)}
1906
- )`}function cm(e){var r;if(!((r=e.$)!=null&&r.type)||!Oe(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for dup generation:
1907
- ${T(e)}`});let t=e.$.type,n=t.childType;if(!qe(n))return"";if(ct(t.length)){let o=t.length.value;return`begin(
1908
- ${Array.from({length:Number(o)},(i,a)=>{var s;return`${C.___dup[0]}(${(s=e.$)==null?void 0:s.variableName}(${a}))`}).join(", ")}
1909
- )`}else return""}function tc({expr:e,env:t,context:n}){var s;Ce(e,C.___dup,1);let r=e.args[0];if(!j(r))throw p({token:r.token,errorMessage:`Expected variable name as argument to "${C.___dup[0]}":
1910
- ${T(r)}`});let o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.___dup[0]}":
1911
- ${T(r)}`});t=o.$.env;let i=o.$.type,a=ee(i)&&i.resolvedConcreteType?i.resolvedConcreteType:i;if(qe(a))if(He(a)){let l=pm(o);if(l){let u=Gt(l),d=S({expr:u,env:t,context:{...n}});return V(d)?(Yn(e,d),e):d}else return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}else if(Oe(a)){let l=cm(o);if(l){let u=Gt(l),d=S({expr:u,env:t,context:{...n}});return V(d)?(Yn(e,d),e):d}else return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}else{let l=Gt(`(${T(o)}).___dup()`),u=En({env:t,context:{...n},expr:l}),d=(s=u.$)==null?void 0:s.variableName;if(!d||!u.$)throw p({token:e.token,errorMessage:`Failed to evaluate the "${C.___dup[0]}" method call:
1912
- ${T(l)}`});let c=me(u.$.env,d);if(c.length){let f=c[c.length-1];if(f.isOwningTheGcValue){let m=Xe(u.$.env,f,{...f,isOwningTheGcValue:!1});u.$.env=m}}return u}return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}function nc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_is_atom,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1913
- ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1945
+ )`}function Ym(e){var r;if(!((r=e.$)!=null&&r.type)||!Oe(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for dup generation:
1946
+ ${T(e)}`});let t=e.$.type,n=t.childType;if(!Ge(n))return"";if(tt(t.length)){let o=t.length.value;return`begin(
1947
+ ${Array.from({length:Number(o)},(i,a)=>{var s;return`${C.__yo_dup_array_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${a})`}).join(", ")}
1948
+ )`}else return""}function Bc({expr:e,env:t,context:n}){var s;Ce(e,C.___dup,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.___dup[0]}":
1949
+ ${T(r)}`});t=o.$.env;let i=o.$.type,a=X(i)&&i.resolvedConcreteType?i.resolvedConcreteType:i;if(Ge(a))if(Ne(a)){let l=qm(o);if(l){let u=Yt(l),d=M({expr:u,env:t,context:{...n}});return V(d)?(Kn(e,d),e):d}else return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}else if(Oe(a)){let l=Ym(o);if(l){let u=Yt(l),d=M({expr:u,env:t,context:{...n}});return V(d)?(Kn(e,d),e):d}else return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}else{let l=Yt(`(${T(o)}).___dup()`),u=Fn({env:t,context:{...n},expr:l}),d=(s=u.$)==null?void 0:s.variableName;if(!d||!u.$)throw p({token:e.token,errorMessage:`Failed to evaluate the "${C.___dup[0]}" method call:
1950
+ ${T(l)}`});let c=he(u.$.env,d);if(c.length){let f=c[c.length-1];if(f.isOwningTheRcValue){let m=et(u.$.env,f,{...f,isOwningTheRcValue:!1});u.$.env=m}}return u}return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}function Uc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_is_atom,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1951
+ ${T(r)}`});if(!ht(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1914
1952
  ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1915
- ${T(r)}`});let a=Rt(i)?it(j(i.value)):re(Qe());return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function rc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_is_fn_call,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1916
- ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1953
+ ${T(r)}`});let a=jt(i)?lt(Q(i.value)):ae(Xe());return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Rc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_is_fn_call,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1954
+ ${T(r)}`});if(!ht(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1917
1955
  ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1918
- ${T(r)}`});let a=Rt(i)?it(V(i.value)):re(Qe());return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function oc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_get_callee,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1919
- ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1956
+ ${T(r)}`});let a=jt(i)?lt(V(i.value)):ae(Xe());return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Pc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_get_callee,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1957
+ ${T(r)}`});if(!ht(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1920
1958
  ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1921
- ${T(r)}`});if(e.$={env:o.$.env,type:jt(),value:re(jt()),pathCollection:[],isAccessingProperty:!1},Rt(i))if(V(i.value)){let a=i.value.func,s=Fn(a);e.$.value=s}else throw p({token:r.token,errorMessage:`Expected function call expression for argument, got:
1922
- ${T(e)}`});return e}function ic({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_get_args,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1923
- ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1959
+ ${T(r)}`});if(e.$={env:o.$.env,type:Ht(),value:ae(Ht()),pathCollection:[],isAccessingProperty:!1},jt(i))if(V(i.value)){let a=i.value.func,s=Ln(a);e.$.value=s}else throw p({token:r.token,errorMessage:`Expected function call expression for argument, got:
1960
+ ${T(e)}`});return e}function zc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_get_args,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1961
+ ${T(r)}`});if(!ht(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1924
1962
  ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1925
- ${T(r)}`});if(e.$={env:o.$.env,type:mo(),value:re(mo()),pathCollection:[],isAccessingProperty:!1},Rt(i))if(V(i.value)){let a=i.value.args,s=kn(jt(),a.map(l=>Fn(l)));e.$.value=s}else throw p({token:r.token,errorMessage:`Expected function call expression for argument, got:
1926
- ${T(e)}`});return e}function ac({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_to_string,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1927
- ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1963
+ ${T(r)}`});if(e.$={env:o.$.env,type:ho(),value:ae(ho()),pathCollection:[],isAccessingProperty:!1},jt(i))if(V(i.value)){let a=i.value.args,s=xn(Ht(),a.map(l=>Ln(l)));e.$.value=s}else throw p({token:r.token,errorMessage:`Expected function call expression for argument, got:
1964
+ ${T(e)}`});return e}function Gc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_to_string,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1965
+ ${T(r)}`});if(!ht(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1928
1966
  ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1929
- ${T(r)}`});return e.$={env:o.$.env,type:Ot(),value:re(Ot()),pathCollection:[],isAccessingProperty:!1},Rt(i)&&(e.$.value=un(T(i.value))),e}function sc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_eq,2);let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1930
- ${T(r)}`});if(!dt(i.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
1967
+ ${T(r)}`});return e.$={env:o.$.env,type:Rt(),value:ae(Rt()),pathCollection:[],isAccessingProperty:!1},jt(i)&&(e.$.value=dn(T(i.value))),e}function qc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_eq,2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1968
+ ${T(r)}`});if(!ht(i.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
1931
1969
  ${T(r)}`});let a=i.$.value;if(!a)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" first argument, got:
1932
- ${T(r)}`});t=i.$.env;let s=S({expr:o,env:t,context:{...n}});if(!s.$)throw p({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1933
- ${T(o)}`});if(!dt(s.$.type))throw p({token:o.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
1970
+ ${T(r)}`});t=i.$.env;let s=M({expr:o,env:t,context:{...n}});if(!s.$)throw p({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1971
+ ${T(o)}`});if(!ht(s.$.type))throw p({token:o.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
1934
1972
  ${T(o)}`});let l=s.$.value;if(!l)throw p({token:o.token,errorMessage:`Expected expression value for "${e.func.token.value}" second argument, got:
1935
- ${T(o)}`});t=s.$.env;let u;return Rt(a)&&Rt(l)?u=it(Lt({value:a,env:t},{value:l,env:t})):u=re(Qe()),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function lc({expr:e,env:t,context:n}){var l;if(e.args.length!==1)throw p({token:e.token,errorMessage:`await expects exactly 1 argument, got ${e.args.length}.`});if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)!=="async-block")throw p({token:e.token,errorMessage:'"await" can only be used inside an "async" block.'});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate await argument expression."});t=o.$.env;let i=o.$.type,a=Ht(i);if(!a)throw p({token:r.token,errorMessage:`await expects type that implements Future(T), but got: ${x(i)}`});let s=a.isFuture.outputType;return e.$={env:t,type:s,value:void 0,pathCollection:[]},e}function uc({expr:e,env:t}){return Ce(e,C.__yo_gc_collect,0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function pc({expr:e,env:t,context:n}){let r=e.args[0],o="";if(r){if(e.args.length>1)throw p({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=S({expr:r,env:t,context:{...n}});if(!l.$)throw p({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
1936
- ${T(r)}`});if(!We(l.$.value))throw p({token:r.token,errorMessage:`Expected compt_string for prefix argument, got:
1937
- ${T(r)}`});o=l.$.value.value}let i=o+ht(),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:i}},s=Fn(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function cc({expr:e,env:t,context:n}){if(!v(e,A.Impl))throw p({token:e.token,errorMessage:`Expected "Impl", got:
1938
- ${T(e)}`});if(e.args.length===0)throw p({token:e.token,errorMessage:"Impl requires at least one module argument."});let r=[],o=[],i;for(let l of e.args){let u=V(l)&&v(l,"!")&&l.args.length===1,d=u?l.args[0]:l,c=S({expr:d,env:t,context:{...n}});if(!c.$)throw p({token:d.token,errorMessage:"Failed to evaluate Impl argument."});if(t=c.$.env,!c.$.value||!G(c.$.value)||!Ee(c.$.value.value))throw p({token:d.token,errorMessage:`Impl argument must be a module type, got: ${T(d)}`});let f=c.$.value.value;if(_u(f)){if(i!==void 0)throw p({token:d.token,errorMessage:"Impl can only have one Concrete(T) specifier"});i=f.isConcrete.concreteType;continue}u?o.push(f):r.push(f)}let a=wn(lt(),"Impl",void 0,r,o);i!==void 0&&(a.resolvedConcreteType=i);let s=ae(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function Wo({expr:e,env:t,context:n}){if(j(e))return e;{let r=e.func,o=e.args;if(j(r)&&en(r,A.unquote)&&o.length===1){let i=o[0],a=S({expr:i,env:t,context:{...n}});if(!a.$||!dt(a.$.type)||!a.$.value)throw p({token:i.token,errorMessage:`Expected expression type for "unquote" argument, got:
1939
- ${T(i)}`});let s=a.$.value;if(Ue(s))return e;if(Rt(s))return s.value;throw p({token:i.token,errorMessage:`Expected expression value for "unquote" argument, got:
1940
- ${je(s)}`})}else{let i=Wo({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<o.length;l++){let u=o[l];if(V(u)&&v(u,A.unquote_splicing)){let d;if(u.args.length!==1)throw p({token:u.token,errorMessage:`Expected exactly one argument for "unquote_splicing", got ${u.args.length}`});let c=u.args[0],f=S({expr:c,env:t,context:{...n}});if(!f.$||!Er(f.$.type)||!f.$.value)throw p({token:c.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
1941
- ${T(c)}`});let m=f.$.value;Kl(m)&&m.elements.every(y=>Rt(y))&&(d=m.elements.map(y=>y.value)),d?d.forEach(y=>{a.push(y)}):a.push(u)}else a.push(Wo({expr:u,env:t,context:{...n}}))}return{...e,func:i,args:a}}}}function fc({expr:e,env:t,context:n}){Ce(e,A.quote,1);let r=Wo({expr:e.args[0],env:t,context:{...n}}),o=Fn(r);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}function dc({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw p({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
1942
- ${r.toString()}`});if(t=o.$.env,!dt(o.$.type))throw p({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${x(o.$.type)}`});let i=null;if(e.args.length===2){let s=e.args[1],l=S({expr:s,env:t,context:{...n}});if(!l.$)throw p({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
1943
- ${s.toString()}`});if(!kt(l.$.type))throw p({token:s.token,errorMessage:`The level argument for "macro_expand" must be a compt_int value, but got: ${x(l.$.type)}`});if(!Zn(l.$.value))throw p({token:s.token,errorMessage:'The level argument for "macro_expand" must be a compt_int value'});if(i=l.$.value.value,i<0)throw p({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${i}`})}let a=o.$.value;if(Rt(a)){let s=a.value,l=t,u=0;for(;V(s)&&(i===null||u<i);)try{let d=En({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!d.$)break;if(l=d.$.env,Rt(d.$.value)){let c=d.$.value.value;if(T(c)===T(s))break;s=c,u++}else break}catch(d){if(d instanceof Jt&&d.isAssertionError)throw d;break}s=Wo({expr:s,env:l,context:{...n}}),e.$={env:l,type:jt(),value:Fn(s),pathCollection:o.$.pathCollection}}else e.$={env:t,type:o.$.type,value:o.$.value,pathCollection:o.$.pathCollection};return e}function ar(e){return e&&(Zn(e)||ri(e)||ct(e))?e.value:null}function rs(e,t){if(t.tag==="compt_int")return Pn(e);if(t.tag==="compt_float")return oi(e);if(In(t))return re(t);let n=fm(t),r=dm(e,t);return Dt(n,r)}function fm(e){switch(e.tag){case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"usize":return"Usize";case"isize":return"Isize";case"f32":return"F32";case"f64":return"F64";default:throw new Error(`Unsupported numeric type: ${e.tag}`)}}function dm(e,t){switch(t.tag){case"u8":return Math.floor(Math.abs(e))%256;case"i8":return Math.max(-128,Math.min(127,Math.floor(e)));case"u16":return Math.floor(Math.abs(e))%65536;case"i16":return Math.max(-32768,Math.min(32767,Math.floor(e)));case"u32":return Math.floor(Math.abs(e))%4294967296;case"i32":return Math.max(-2147483648,Math.min(2147483647,Math.floor(e)));case"u64":return Math.max(0,Math.floor(e));case"i64":return Math.floor(e);case"usize":return Math.max(0,Math.floor(e));case"isize":return Math.floor(e);case"f32":case"f64":return e;default:return e}}function Ho(e,t,n,r){let o=ar(e),i=ar(t);return o===null||i===null?re(n):rs(r(o,i),n)??re(n)}function io(e,t,n){let r=ar(e),o=ar(t);return r===null||o===null?re(Qe()):it(n(r,o))}function mm(e,t,n){let r=ar(e);return r===null?re(t):rs(n(r),t)??re(t)}function mc({expr:e,env:t,context:n}){let r=e.func.token.value,o=/^__yo_(u8|i8|u16|i16|u32|i32|u64|i64|usize|isize|f32|f64|compt_int|compt_float|char|short|ushort|int|uint|long|ulong|longlong|ulonglong|longdouble)_(add|sub|mul|div|mod|eq|neq|lt|lte|gt|gte|neg|to_string|as)$/,i=r.match(o);if(!i)throw p({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=i,u=(()=>{switch(a){case"u8":return pr();case"i8":return Sr();case"u16":return Lr();case"i16":return Ar();case"u32":return Ir();case"i32":return cr();case"u64":return Nr();case"i64":return Dr();case"usize":return _t();case"isize":return Mr();case"f32":return Or();case"f64":return fr();case"char":return zi();case"short":return Gi();case"ushort":return Ri();case"int":return qi();case"uint":return Yi();case"long":return ji();case"ulong":return Wi();case"longlong":return Hi();case"ulonglong":return Ki();case"longdouble":return Qi();case"compt_int":return ur();case"compt_float":return xr();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_string"){let h=S({expr:e.args[0],env:t,context:{...n}});if(!h.$||!h.$.value)throw p({token:h.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
1944
- ${T(h)}`});t=h.$.env;let _;if(s==="neg")ct(h.$.value)?_=mm(h.$.value,u,E=>-E):_=re(u);else if(s==="to_string")if(ct(h.$.value)){let E=ar(h.$.value);E!==null?_=un(E.toString()):_=re(Ot())}else _=re(Ot());else throw p({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_string"?Ot():u,value:_,pathCollection:[]},e}if(s==="as"){let h=S({expr:e.args[0],env:t,context:{...n}});if(!h.$)throw p({token:h.token,errorMessage:`Expected numeric value for "${r}" first argument, got:
1945
- ${T(h)}`});t=h.$.env;let _=e.args[1],E=S({expr:_,env:t,context:{...n}});if(!E.$)throw p({token:E.token,errorMessage:`Failed to evaluate the argument ${T(E)}`});if(t=E.$.env,!E.$.value)throw p({token:E.token,errorMessage:`Expected type for "${r}" second argument, got:
1946
- ${T(E)}`});if(!ft(E.$.type))throw p({token:E.token,errorMessage:`Expected type for "${r}" second argument, got:
1947
- ${T(E)}`});let k=E.$.value;if(!G(k))throw p({token:E.token,errorMessage:`Expected type value for "${r}" second argument, got:
1948
- ${T(E)}`});let w=k.value,$=ar(h.$.value),b,F;return $!==null?(b=rs($,w),F=w):(b=re(w),F=w),e.$={env:t,type:F,value:b,pathCollection:[]},e}let d=S({expr:e.args[0],env:t,context:{...n}});if(!d.$||!d.$.value)throw p({token:d.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
1949
- ${T(d)}`});t=d.$.env;let c=S({expr:e.args[1],env:t,context:{...n}});if(!c.$||!c.$.value)throw p({token:c.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
1950
- ${T(c)}`});t=c.$.env;let f=d.$.value,m=c.$.value,y,g;switch(s){case"add":y=Ho(f,m,u,(h,_)=>h+_),g=u;break;case"sub":y=Ho(f,m,u,(h,_)=>h-_),g=u;break;case"mul":y=Ho(f,m,u,(h,_)=>h*_),g=u;break;case"div":{if(ar(m)===0)throw p({token:c.token,errorMessage:`Division by zero in "${r}" operation`});y=Ho(f,m,u,(_,E)=>Tr(u)||u.tag==="compt_int"?Math.trunc(_/E):_/E),g=u;break}case"mod":{if($r(u))throw p({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});if(ar(m)===0)throw p({token:c.token,errorMessage:`Modulo by zero in "${r}" operation`});y=Ho(f,m,u,(_,E)=>_%E),g=u;break}case"eq":y=io(f,m,(h,_)=>h===_),g=Qe();break;case"neq":y=io(f,m,(h,_)=>h!==_),g=Qe();break;case"lt":y=io(f,m,(h,_)=>h<_),g=Qe();break;case"lte":y=io(f,m,(h,_)=>h<=_),g=Qe();break;case"gt":y=io(f,m,(h,_)=>h>_),g=Qe();break;case"gte":y=io(f,m,(h,_)=>h>=_),g=Qe();break;default:throw p({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:g,value:y,pathCollection:[]},e}function yc({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw p({token:e.token,errorMessage:"panic() can only be called inside a function body"});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type;if(e.args.length>0){let i=e.args[0],a=S({expr:i,env:t,context:{...n}});if(!a.$)throw p({token:i.token,errorMessage:"Failed to evaluate panic message"});if(!a.$.value||!We(a.$.value)&&!(Ue(a.$.value)&&Pt(a.$.value.type)))throw p({token:i.token,errorMessage:"panic message must be a compt_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}function _c({expr:e,env:t,context:n}){Ce(e,C.__yo_address_of,1);let r=e.args[0],o=n.expectedType;o&&De(o.type)&&(o={...o,type:o.type.childType});let i=S({expr:r,env:t,context:{...n,expectedType:o}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
1951
- ${T(r)}`});if(t=i.$.env,G(i.$.value))throw p({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
1952
- ${T(r)}`});{let a=i.$.type,s=hr(a);return e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection},ze(e,!1),e}}function gc({expr:e,env:t,context:n}){Ce(e,C.rc,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});return t=o.$.env,Xt(o.$.type)?e.$={env:t,type:_t(),value:void 0,pathCollection:[]}:e.$={env:t,type:_t(),value:Dt("Usize",1),pathCollection:[]},e}function hc({expr:e,env:t,context:n}){Ce(e,C.sizeof,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});t=o.$.env;let i;o.$.value&&G(o.$.value)?i=o.$.value.value:i=o.$.type;let a=dr(i),s;return a===null?s=re(_t()):s=Dt("Usize",Math.ceil(a/8)),e.$={env:t,type:_t(),value:s,pathCollection:[]},e}function sr({expr:e,type:t,env:n,context:r}){var o,i,a,s,l,u,d,c,f,m;if(He(t)&&V(e)&&v(e,A.tuple)){if(t.fields.length!==e.args.length)throw p({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let y=0;y<t.fields.length;y++){let g=t.fields[y].type,h=e.args[y],{env:_}=sr({expr:h,type:g,env:n,context:{...r}});n=_}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(V(e)&&v(e,"_"))if($e(t)||ot(t)||Ee(t)){let y=En({expr:e,env:n,givenFunc:{type:At(t),value:ae(t)},context:{...r}});if(!((o=y.$)!=null&&o.type)||!((i=y.$)!=null&&i.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
1953
- ${T(e)}`});return{expr:y,type:(a=y.$)==null?void 0:a.type,env:(s=y.$)==null?void 0:s.env}}else throw p({token:e.token,errorMessage:`Cannot use _ with type ${x(t)}. Only supported with struct types.`});else if(V(e)&&v(e,".",1))if(Ve(t)){let y=e.args[0];if(!j(y))throw p({token:e.token,errorMessage:`Expected identifier for enum variant, got ${T(y)}`});let g=y.token.value;if(!t.variants.find(E=>E.name===g))throw p({token:e.token,errorMessage:`Enum variant "${g}" not found in ${x(t)}`});let _={...t,selectedVariantName:g};return e.$={type:_,env:n,pathCollection:[]},{expr:e,type:_,env:n}}else throw p({token:e.token,errorMessage:`Cannot use . with type ${x(t)}. Only supported with enum types.`});else if(V(e)&&V(e.func)&&v(e.func,".",1))if(Ve(t)){let y=e.func,g=y.args[0];if(!j(g))throw p({token:y.token,errorMessage:`Expected identifier for enum variant, got ${T(g)}`});let h=g.token.value;if(!t.variants.find(w=>w.name===h))throw p({token:e.token,errorMessage:`Enum variant "${h}" not found in ${x(t)}`});let E={...t,selectedVariantName:h},k=En({expr:e,env:n,givenFunc:{type:At(E),value:ae(E)},context:{...r}});if(!((l=k.$)!=null&&l.type)||!((u=k.$)!=null&&u.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
1954
- ${T(e)}`});return{expr:k,type:(d=k.$)==null?void 0:d.type,env:(c=k.$)==null?void 0:c.env}}else throw p({token:e.token,errorMessage:`Cannot use . with type ${x(t)}. Only supported with enum types.`});else if((f=e.$)!=null&&f.type&&t)try{let{expectedEnv:y}=pt({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:y}}catch{return{expr:e,type:(m=e.$)==null?void 0:m.type,env:n}}else throw p({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${T(e)}`})}function vc({expr:e,env:t,context:n}){var l,u;Ce(e,C.the,2);let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=i.$.env,!i.$.value||!G(i.$.value))throw p({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${i.$.type}`});let a=i.$.value.value,s=S({expr:o,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw p({token:o.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!W({type:a,env:t},{type:s.$.type,env:t})){if(Gr(a))try{let{expr:d,type:c,env:f}=sr({expr:o,type:a,env:t,context:{...n}});if(W({type:a,env:f},{type:c,env:f}))return e.$={env:f,type:a,value:(l=d.$)==null?void 0:l.value,pathCollection:((u=d.$)==null?void 0:u.pathCollection)||[]},e}catch{}throw p({token:o.token,errorMessage:`Type mismatch: expected '${x(a)}', got '${x(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function Tc({expr:e,env:t,context:n}){Ce(e,C.__yo_type_to_string,1);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1955
- ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1973
+ ${T(o)}`});t=s.$.env;let u;return jt(a)&&jt(l)?u=lt(Nt({value:a,env:t},{value:l,env:t})):u=ae(Xe()),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function Yc({expr:e,env:t,context:n}){var l;if(e.args.length!==1)throw p({token:e.token,errorMessage:`await expects exactly 1 argument, got ${e.args.length}.`});if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)!=="async-block")throw p({token:e.token,errorMessage:'"await" can only be used inside an "async" block.'});let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate await argument expression."});t=o.$.env;let i=o.$.type,a=Kt(i);if(!a)throw p({token:r.token,errorMessage:`await expects type that implements Future(T), but got: ${x(i)}`});let s=a.isFuture.outputType;return e.$={env:t,type:s,value:void 0,pathCollection:[]},e}function jc({expr:e,env:t}){return Ce(e,C.__yo_gc_collect,0),e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Wc({expr:e,env:t,context:n}){let r=e.args[0],o="";if(r){if(e.args.length>1)throw p({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=M({expr:r,env:t,context:{...n}});if(!l.$)throw p({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
1974
+ ${T(r)}`});if(!Qe(l.$.value))throw p({token:r.token,errorMessage:`Expected compt_string for prefix argument, got:
1975
+ ${T(r)}`});o=l.$.value.value}let i=o+ct(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:i}},s=Ln(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function Hc({expr:e,env:t,context:n}){if(!v(e,A.Impl))throw p({token:e.token,errorMessage:`Expected "Impl", got:
1976
+ ${T(e)}`});if(e.args.length===0)throw p({token:e.token,errorMessage:"Impl requires at least one module argument."});let r=[],o=[],i;for(let l of e.args){let u=V(l)&&v(l,"!")&&l.args.length===1,d=u?l.args[0]:l,c=M({expr:d,env:t,context:{...n}});if(!c.$)throw p({token:d.token,errorMessage:"Failed to evaluate Impl argument."});if(t=c.$.env,!c.$.value||!j(c.$.value)||!Fe(c.$.value.value))throw p({token:d.token,errorMessage:`Impl argument must be a module type, got: ${T(d)}`});let f=c.$.value.value;if(ep(f)){if(i!==void 0)throw p({token:d.token,errorMessage:"Impl can only have one Concrete(T) specifier"});i=f.isConcrete.concreteType;continue}u?o.push(f):r.push(f)}let a=Sn(ut(),"Impl",void 0,r,o);i!==void 0&&(a.resolvedConcreteType=i);let s=le(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function Jo({expr:e,env:t,context:n}){if(Q(e))return e;{let r=e.func,o=e.args;if(Q(r)&&nn(r,A.unquote)&&o.length===1){let i=o[0],a=M({expr:i,env:t,context:{...n}});if(!a.$||!ht(a.$.type)||!a.$.value)throw p({token:i.token,errorMessage:`Expected expression type for "unquote" argument, got:
1977
+ ${T(i)}`});let s=a.$.value;if(Be(s))return e;if(jt(s))return s.value;throw p({token:i.token,errorMessage:`Expected expression value for "unquote" argument, got:
1978
+ ${He(s)}`})}else{let i=Jo({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<o.length;l++){let u=o[l];if(V(u)&&v(u,A.unquote_splicing)){let d;if(u.args.length!==1)throw p({token:u.token,errorMessage:`Expected exactly one argument for "unquote_splicing", got ${u.args.length}`});let c=u.args[0],f=M({expr:c,env:t,context:{...n}});if(!f.$||!br(f.$.type)||!f.$.value)throw p({token:c.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
1979
+ ${T(c)}`});let m=f.$.value;Au(m)&&m.elements.every(y=>jt(y))&&(d=m.elements.map(y=>y.value)),d?d.forEach(y=>{a.push(y)}):a.push(u)}else a.push(Jo({expr:u,env:t,context:{...n}}))}return{...e,func:i,args:a}}}}function Kc({expr:e,env:t,context:n}){Ce(e,A.quote,1);let r=Jo({expr:e.args[0],env:t,context:{...n}}),o=Ln(r);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}function Qc({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw p({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
1980
+ ${r.toString()}`});if(t=o.$.env,!ht(o.$.type))throw p({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${x(o.$.type)}`});let i=null;if(e.args.length===2){let s=e.args[1],l=M({expr:s,env:t,context:{...n}});if(!l.$)throw p({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
1981
+ ${s.toString()}`});if(!Mt(l.$.type))throw p({token:s.token,errorMessage:`The level argument for "macro_expand" must be a compt_int value, but got: ${x(l.$.type)}`});if(!Xn(l.$.value))throw p({token:s.token,errorMessage:'The level argument for "macro_expand" must be a compt_int value'});let u=l.$.value.value;if(i=typeof u=="bigint"?Number(u):u,i<0)throw p({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${i}`})}let a=o.$.value;if(jt(a)){let s=a.value,l=t,u=0;for(;V(s)&&(i===null||u<i);)try{let d=Fn({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!d.$)break;if(l=d.$.env,jt(d.$.value)){let c=d.$.value.value;if(T(c)===T(s))break;s=c,u++}else break}catch(d){if(d instanceof Gt&&d.isAssertionError)throw d;break}s=Jo({expr:s,env:l,context:{...n}}),e.$={env:l,type:Ht(),value:Ln(s),pathCollection:o.$.pathCollection}}else e.$={env:t,type:o.$.type,value:o.$.value,pathCollection:o.$.pathCollection};return e}function _n(e){return e&&(Xn(e)||pi(e)||tt(e))?e.value:null}function gs(e,t){if(t.tag==="compt_int"){let o=typeof e=="bigint"?e:BigInt(Math.floor(e));return qn(o)}if(t.tag==="compt_float"){let o=typeof e=="bigint"?Number(e):e;return ci(o)}if(On(t))return ae(t);let n=jm(t),r=Wm(e,t);return Dt(n,r)}function jm(e){switch(e.tag){case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"usize":return"Usize";case"isize":return"Isize";case"f32":return"F32";case"f64":return"F64";default:throw new Error(`Unsupported numeric type: ${e.tag}`)}}function _s(e,t,n,r,o,i){let a=wa(t);if(a===void 0||a.min===-1/0&&a.max===1/0)return;let s=(u,d)=>{if(typeof u=="bigint"||typeof d=="bigint"){let c=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof d=="bigint"?d:BigInt(Math.floor(d));return c<f}return u<d},l=(u,d)=>{if(typeof u=="bigint"||typeof d=="bigint"){let c=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof d=="bigint"?d:BigInt(Math.floor(d));return c>f}return u>d};if(s(e,a.min)||l(e,a.max))throw p({token:i,errorMessage:`Integer overflow in compile-time evaluation
1982
+ ${r} ${n==="multiply"?"*":n==="add"?"+":"-"} ${o} = ${e}
1983
+ Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function Wm(e,t){if(t.tag==="u64"||t.tag==="i64"||t.tag==="usize"||t.tag==="isize"){let r=typeof e=="bigint"?e:BigInt(Math.floor(e)),o=wa(t),i=typeof o.min=="bigint"?o.min:BigInt(o.min),a=typeof o.max=="bigint"?o.max:BigInt(o.max);return r<i?i:r>a?a:r}let n=typeof e=="bigint"?Number(e):e;switch(t.tag){case"u8":return Math.floor(Math.abs(n))%256;case"i8":return Math.max(-128,Math.min(127,Math.floor(n)));case"u16":return Math.floor(Math.abs(n))%65536;case"i16":return Math.max(-32768,Math.min(32767,Math.floor(n)));case"u32":return Math.floor(Math.abs(n))%4294967296;case"i32":return Math.max(-2147483648,Math.min(2147483647,Math.floor(n)));case"f32":case"f64":return n;default:return n}}function Xo(e,t,n,r){let o=_n(e),i=_n(t);return o===null||i===null?ae(n):gs(r(o,i),n)??ae(n)}function lo(e,t,n){let r=_n(e),o=_n(t);if(r===null||o===null)return ae(Xe());if(typeof r=="bigint"||typeof o=="bigint"){let i=typeof r=="bigint"?r:BigInt(Math.floor(r)),a=typeof o=="bigint"?o:BigInt(Math.floor(o));return lt(n(i,a))}return lt(n(r,o))}function Hm(e,t,n){let r=_n(e);return r===null?ae(t):gs(n(r),t)??ae(t)}function Zc({expr:e,env:t,context:n}){let r=e.func.token.value,o=/^__yo_(u8|i8|u16|i16|u32|i32|u64|i64|usize|isize|f32|f64|compt_int|compt_float|char|short|ushort|int|uint|long|ulong|longlong|ulonglong|longdouble)_(add|sub|mul|div|mod|eq|neq|lt|lte|gt|gte|neg|to_string|as)$/,i=r.match(o);if(!i)throw p({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=i,u=(()=>{switch(a){case"u8":return fr();case"i8":return Ir();case"u16":return Nr();case"i16":return Dr();case"u32":return Or();case"i32":return dr();case"u64":return Br();case"i64":return Ur();case"usize":return yt();case"isize":return Ar();case"f32":return Rr();case"f64":return mr();case"char":return Qi();case"short":return Zi();case"ushort":return Ji();case"int":return Xi();case"uint":return ea();case"long":return ta();case"ulong":return na();case"longlong":return ra();case"ulonglong":return oa();case"longdouble":return ia();case"compt_int":return cr();case"compt_float":return Sr();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_string"){let _=M({expr:e.args[0],env:t,context:{...n}});if(!_.$||!_.$.value)throw p({token:_.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
1984
+ ${T(_)}`});t=_.$.env;let g;if(s==="neg")tt(_.$.value)?g=Hm(_.$.value,u,$=>-$):g=ae(u);else if(s==="to_string")if(tt(_.$.value)){let $=_n(_.$.value);$!==null?g=dn($.toString()):g=ae(Rt())}else g=ae(Rt());else throw p({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_string"?Rt():u,value:g,pathCollection:[]},e}if(s==="as"){let _=M({expr:e.args[0],env:t,context:{...n}});if(!_.$)throw p({token:_.token,errorMessage:`Expected numeric value for "${r}" first argument, got:
1985
+ ${T(_)}`});t=_.$.env;let g=e.args[1],$=M({expr:g,env:t,context:{...n}});if(!$.$)throw p({token:$.token,errorMessage:`Failed to evaluate the argument ${T($)}`});if(t=$.$.env,!$.$.value)throw p({token:$.token,errorMessage:`Expected type for "${r}" second argument, got:
1986
+ ${T($)}`});if(!_t($.$.type))throw p({token:$.token,errorMessage:`Expected type for "${r}" second argument, got:
1987
+ ${T($)}`});let k=$.$.value;if(!j(k))throw p({token:$.token,errorMessage:`Expected type value for "${r}" second argument, got:
1988
+ ${T($)}`});let b=k.value,E=_n(_.$.value),w,F;return E!==null?(w=gs(E,b),F=b):(w=ae(b),F=b),e.$={env:t,type:F,value:w,pathCollection:[]},e}let d=M({expr:e.args[0],env:t,context:{...n}});if(!d.$||!d.$.value)throw p({token:d.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
1989
+ ${T(d)}`});t=d.$.env;let c=M({expr:e.args[1],env:t,context:{...n}});if(!c.$||!c.$.value)throw p({token:c.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
1990
+ ${T(c)}`});t=c.$.env;let f=d.$.value,m=c.$.value,y,h;switch(s){case"add":{let _=_n(f),g=_n(m);if(_!==null&&g!==null){let $=typeof _=="bigint"||typeof g=="bigint"?(typeof _=="bigint"?_:BigInt(_))+(typeof g=="bigint"?g:BigInt(g)):_+g;_s($,u,"add",_,g,e.token)}y=Xo(f,m,u,($,k)=>{if(typeof $=="bigint"||typeof k=="bigint"){let b=typeof $=="bigint"?$:BigInt($),E=typeof k=="bigint"?k:BigInt(k);return b+E}return $+k}),h=u;break}case"sub":{let _=_n(f),g=_n(m);if(_!==null&&g!==null){let $=typeof _=="bigint"||typeof g=="bigint"?(typeof _=="bigint"?_:BigInt(_))-(typeof g=="bigint"?g:BigInt(g)):_-g;_s($,u,"subtract",_,g,e.token)}y=Xo(f,m,u,($,k)=>{if(typeof $=="bigint"||typeof k=="bigint"){let b=typeof $=="bigint"?$:BigInt($),E=typeof k=="bigint"?k:BigInt(k);return b-E}return $-k}),h=u;break}case"mul":{let _=_n(f),g=_n(m);if(_!==null&&g!==null){let $=typeof _=="bigint"||typeof g=="bigint"?(typeof _=="bigint"?_:BigInt(_))*(typeof g=="bigint"?g:BigInt(g)):_*g;_s($,u,"multiply",_,g,e.token)}y=Xo(f,m,u,($,k)=>{if(typeof $=="bigint"||typeof k=="bigint"){let b=typeof $=="bigint"?$:BigInt($),E=typeof k=="bigint"?k:BigInt(k);return b*E}return $*k}),h=u;break}case"div":{let _=_n(m);if(_===0||_===0n)throw p({token:c.token,errorMessage:`Division by zero in "${r}" operation`});y=Xo(f,m,u,(g,$)=>{if(typeof g=="bigint"||typeof $=="bigint"){let k=typeof g=="bigint"?g:BigInt(g),b=typeof $=="bigint"?$:BigInt($);return k/b}return Cr(u)||u.tag==="compt_int"?Math.trunc(g/$):g/$}),h=u;break}case"mod":{if(kr(u))throw p({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let _=_n(m);if(_===0||_===0n)throw p({token:c.token,errorMessage:`Modulo by zero in "${r}" operation`});y=Xo(f,m,u,(g,$)=>{if(typeof g=="bigint"||typeof $=="bigint"){let k=typeof g=="bigint"?g:BigInt(g),b=typeof $=="bigint"?$:BigInt($);return k%b}return g%$}),h=u;break}case"eq":y=lo(f,m,(_,g)=>_===g),h=Xe();break;case"neq":y=lo(f,m,(_,g)=>_!==g),h=Xe();break;case"lt":y=lo(f,m,(_,g)=>_<g),h=Xe();break;case"lte":y=lo(f,m,(_,g)=>_<=g),h=Xe();break;case"gt":y=lo(f,m,(_,g)=>_>g),h=Xe();break;case"gte":y=lo(f,m,(_,g)=>_>=g),h=Xe();break;default:throw p({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:h,value:y,pathCollection:[]},e}function Jc({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw p({token:e.token,errorMessage:"panic() can only be called inside a function body"});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type;if(e.args.length>0){let i=e.args[0],a=M({expr:i,env:t,context:{...n}});if(!a.$)throw p({token:i.token,errorMessage:"Failed to evaluate panic message"});if(!a.$.value||!Qe(a.$.value)&&!(Be(a.$.value)&&zt(a.$.value.type)))throw p({token:i.token,errorMessage:"panic message must be a compt_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}function Xc({expr:e,env:t,context:n}){Ce(e,C.__yo_address_of,1);let r=e.args[0],o=n.expectedType;o&&ze(o.type)&&(o={...o,type:o.type.childType});let i=M({expr:r,env:t,context:{...n,expectedType:o}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
1991
+ ${T(r)}`});if(t=i.$.env,j(i.$.value))throw p({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
1992
+ ${T(r)}`});{let a=i.$.type,s=Tr(a);return e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection},Ze(e,!1),e}}function ef({expr:e,env:t,context:n}){Ce(e,C.rc,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});return t=o.$.env,tn(o.$.type)?e.$={env:t,type:yt(),value:void 0,pathCollection:[]}:e.$={env:t,type:yt(),value:Dt("Usize",1),pathCollection:[]},e}function tf({expr:e,env:t,context:n}){Ce(e,C.sizeof,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});t=o.$.env;let i;o.$.value&&j(o.$.value)?i=o.$.value.value:i=o.$.type;let a=yr(i),s;return a===null?s=ae(yt()):s=Dt("Usize",Math.ceil(a/8)),e.$={env:t,type:yt(),value:s,pathCollection:[]},e}function ur({expr:e,type:t,env:n,context:r}){var o,i,a,s,l,u,d,c,f,m;if(Ne(t)&&V(e)&&v(e,A.tuple)){if(t.fields.length!==e.args.length)throw p({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let y=0;y<t.fields.length;y++){let h=t.fields[y].type,_=e.args[y],{env:g}=ur({expr:_,type:h,env:n,context:{...r}});n=g}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(V(e)&&v(e,"_"))if(we(t)||pt(t)||Fe(t)){let y=Fn({expr:e,env:n,givenFunc:{type:Ot(t),value:le(t)},context:{...r}});if(!((o=y.$)!=null&&o.type)||!((i=y.$)!=null&&i.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
1993
+ ${T(e)}`});return{expr:y,type:(a=y.$)==null?void 0:a.type,env:(s=y.$)==null?void 0:s.env}}else throw p({token:e.token,errorMessage:`Cannot use _ with type ${x(t)}. Only supported with struct types.`});else if(V(e)&&v(e,".",1))if(Ve(t)){let y=e.args[0];if(!Q(y))throw p({token:e.token,errorMessage:`Expected identifier for enum variant, got ${T(y)}`});let h=y.token.value;if(!t.variants.find($=>$.name===h))throw p({token:e.token,errorMessage:`Enum variant "${h}" not found in ${x(t)}`});let g={...t,selectedVariantName:h};return e.$={type:g,env:n,pathCollection:[]},{expr:e,type:g,env:n}}else throw p({token:e.token,errorMessage:`Cannot use . with type ${x(t)}. Only supported with enum types.`});else if(V(e)&&V(e.func)&&v(e.func,".",1))if(Ve(t)){let y=e.func,h=y.args[0];if(!Q(h))throw p({token:y.token,errorMessage:`Expected identifier for enum variant, got ${T(h)}`});let _=h.token.value;if(!t.variants.find(b=>b.name===_))throw p({token:e.token,errorMessage:`Enum variant "${_}" not found in ${x(t)}`});let $={...t,selectedVariantName:_},k=Fn({expr:e,env:n,givenFunc:{type:Ot($),value:le($)},context:{...r}});if(!((l=k.$)!=null&&l.type)||!((u=k.$)!=null&&u.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
1994
+ ${T(e)}`});return{expr:k,type:(d=k.$)==null?void 0:d.type,env:(c=k.$)==null?void 0:c.env}}else throw p({token:e.token,errorMessage:`Cannot use . with type ${x(t)}. Only supported with enum types.`});else if((f=e.$)!=null&&f.type&&t)try{let{expectedEnv:y}=mt({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:y}}catch{return{expr:e,type:(m=e.$)==null?void 0:m.type,env:n}}else throw p({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${T(e)}`})}function nf({expr:e,env:t,context:n}){var l,u;Ce(e,C.the,2);let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=i.$.env,!i.$.value||!j(i.$.value))throw p({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${i.$.type}`});let a=i.$.value.value,s=M({expr:o,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw p({token:o.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!te({type:a,env:t},{type:s.$.type,env:t})){if(Yr(a))try{let{expr:d,type:c,env:f}=ur({expr:o,type:a,env:t,context:{...n}});if(te({type:a,env:f},{type:c,env:f}))return e.$={env:f,type:a,value:(l=d.$)==null?void 0:l.value,pathCollection:((u=d.$)==null?void 0:u.pathCollection)||[]},e}catch{}throw p({token:o.token,errorMessage:`Type mismatch: expected '${x(a)}', got '${x(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function rf({expr:e,env:t,context:n}){Ce(e,C.__yo_type_to_string,1);let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1995
+ ${T(r)}`});if(!_t(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1956
1996
  ${T(r)}`});let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1957
- ${T(r)}`});return e.$={env:r.$.env,type:Ot(),value:re(Ot()),pathCollection:[],isAccessingProperty:!1},G(o)&&(e.$.value=un(x(o.value))),e}function $c({expr:e,env:t,context:n}){var f,m;let r=e.args,o=r[0],i=r[1],a=S({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!G((f=a.$)==null?void 0:f.value))throw p({token:o.token,errorMessage:`Expected type, got:
1958
- ${T(o)}`});let s=a.$.value.value;t=a.$.env;let l=S({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!G((m=l.$)==null?void 0:m.value))throw p({token:i.token,errorMessage:`Expected type, got:
1959
- ${T(i)}`});let u=l.$.value.value;t=l.$.env;let d=W({type:s,env:t},{type:u,env:t}),c=it(d);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}function Ec({expr:e,env:t,context:n}){Ce(e,C.__yo_type_contains_gc_type,1);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1960
- ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1961
- ${T(r)}`});let o=r.$.value;if(!o||!G(o))throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1962
- ${T(r)}`});let i=qe(o.value),a=it(i);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Cc({expr:e,env:t,context:n}){Ce(e,C.__yo_type_can_form_gc_cycle,1);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1963
- ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1964
- ${T(r)}`});let o=r.$.value;if(!o||!G(o))throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1965
- ${T(r)}`});let i=go(o.value),a=it(i);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function kc({expr:e,env:t,context:n}){Ce(e,C.__yo_type_impls,2);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
1966
- ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
1967
- ${T(r)}`});let o=r.$.value;if(!o||!G(o))throw p({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
1968
- ${T(r)}`});t=r.$.env;let i=o.value,a=S({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw p({token:a.token,errorMessage:`Failed to evaluate the module argument for "${e.func.token.value}":
1969
- ${T(a)}`});let s;if(G(a.$.value)){let f=a.$.value;if(!Ee(f.value))throw p({token:a.token,errorMessage:`Expected module type for second argument of "${e.func.token.value}", got a non-module type`});s=f.value}else if(Ee(a.$.type))s=a.$.type;else{if(ft(a.$.type))return e.$={env:a.$.env,type:Qe(),value:re(Qe()),pathCollection:[],isAccessingProperty:!1},e;throw p({token:a.token,errorMessage:`Expected module type for second argument of "${e.func.token.value}", got:
1970
- ${T(a)}`})}t=a.$.env;let l={...s,receiverType:i},u=!1,d=i.module;if(d)for(let f of d.fields){if(!f.assignedValue||!Ke(f.assignedValue))continue;let y=f.assignedValue.type;if(W({type:l,env:t},{type:y,env:t})){u=!0;break}}u||oa({concreteType:i,moduleType:s,env:t})&&(u=!0);let c=it(u);return e.$={env:t,type:c.type,value:c,pathCollection:[],isAccessingProperty:!1},e}function bc({expr:e,env:t}){Ce(e,C.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!j(r)||!nt(r))throw p({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
1971
- ${T(r)}`});if(n===0){let o=r.token.value,i=me(t,o);if(i.length===0)throw p({token:r.token,errorMessage:`Variable '${o}' not found in the environment.`});let a=i[i.length-1];t=Xe(t,a,{...a,initializedAtToken:r.token})}if(n===1){let o=r.token.value;if(me(t,o).length===0)throw p({token:r.token,errorMessage:`Variable '${o}' not found in the environment.`})}}return e.$={type:J.type,value:J,env:t,pathCollection:[]},e}function Fc({expr:e,env:t,context:n}){var a;Ce(e,C.__yo_var_print_info,1);let r=e.args[0],o=S({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(a=o.$)==null?void 0:a.variableName;if(i){let s=me(t,i);if(s.length>0){let l=s.at(-1);console.log(Fu(l))}}return e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function wc({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_var_is_owning_the_gc_value,1);let r=e.args[0],o=S({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(s=o.$)==null?void 0:s.variableName,a=!1;if(i){let l=me(t,i);l.length>0&&(a=l.at(-1).isOwningTheGcValue)}return e.$={env:t,type:Qe(),value:it(a),pathCollection:[]},e}function Vc({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_var_has_other_aliases,1);let r=e.args[0],o=S({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(s=o.$)==null?void 0:s.variableName,a=!1;if(i){let l=me(t,i);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameGcValueAs)a=!0;else{let c=u.id;for(let f=t.frames.length-1;f>=0;f--){let m=t.frames[f];for(let y=0;y<m.variables.length;y++){let g=m.variables[y];if(g.isOwningTheSameGcValueAs&&g.isOwningTheSameGcValueAs.id===c){a=!0;break}}}}}}return e.$={env:t,type:Qe(),value:it(a),pathCollection:[]},e}function xc({expr:e,env:t,context:n}){let r=e.args[0],o=n.expectedType;o&&De(o.type)&&(o={...o,type:o.type.childType});let i=S({expr:r,env:t,context:{...n,expectedType:o}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
1972
- ${T(r)}`});if(t=i.$.env,G(i.$.value)){let s=i.$.value.value,l=hr(s),u=ae(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw p({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
1973
- ${T(r)}`})}function Mc({expr:e,env:t,context:n}){if(!v(e,A.Array,2))throw p({token:e.token,errorMessage:`Expected "Array(compt(Type), compt(usize))" with 2 arguments, like "Array(i32, 10)"
1997
+ ${T(r)}`});return e.$={env:r.$.env,type:Rt(),value:ae(Rt()),pathCollection:[],isAccessingProperty:!1},j(o)&&(e.$.value=dn(x(o.value))),e}function of({expr:e,env:t,context:n}){var f,m;let r=e.args,o=r[0],i=r[1],a=M({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!j((f=a.$)==null?void 0:f.value))throw p({token:o.token,errorMessage:`Expected type, got:
1998
+ ${T(o)}`});let s=a.$.value.value;t=a.$.env;let l=M({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!j((m=l.$)==null?void 0:m.value))throw p({token:i.token,errorMessage:`Expected type, got:
1999
+ ${T(i)}`});let u=l.$.value.value;t=l.$.env;let d=te({type:s,env:t},{type:u,env:t}),c=lt(d);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}function af({expr:e,env:t,context:n}){Ce(e,C.__yo_type_contains_rc_type,1);let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
2000
+ ${T(r)}`});if(!_t(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
2001
+ ${T(r)}`});let o=r.$.value;if(!o||!j(o))throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
2002
+ ${T(r)}`});let i=Ge(o.value),a=lt(i);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function sf({expr:e,env:t,context:n}){Ce(e,C.__yo_type_can_form_rc_cycle,1);let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
2003
+ ${T(r)}`});if(!_t(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
2004
+ ${T(r)}`});let o=r.$.value;if(!o||!j(o))throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
2005
+ ${T(r)}`});let i=To(o.value),a=lt(i);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function lf({expr:e,env:t,context:n}){Ce(e,C.__yo_type_impls,2);let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
2006
+ ${T(r)}`});if(!_t(r.$.type))throw p({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
2007
+ ${T(r)}`});let o=r.$.value;if(!o||!j(o))throw p({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
2008
+ ${T(r)}`});t=r.$.env;let i=o.value,a=M({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw p({token:a.token,errorMessage:`Failed to evaluate the module argument for "${e.func.token.value}":
2009
+ ${T(a)}`});let s;if(j(a.$.value)){let f=a.$.value;if(!Fe(f.value))throw p({token:a.token,errorMessage:`Expected module type for second argument of "${e.func.token.value}", got a non-module type`});s=f.value}else if(Fe(a.$.type))s=a.$.type;else{if(_t(a.$.type))return e.$={env:a.$.env,type:Xe(),value:ae(Xe()),pathCollection:[],isAccessingProperty:!1},e;throw p({token:a.token,errorMessage:`Expected module type for second argument of "${e.func.token.value}", got:
2010
+ ${T(a)}`})}t=a.$.env;let l={...s,receiverType:i},u=!1,d=i.module;if(d)for(let f of d.fields){if(!f.assignedValue||!Je(f.assignedValue))continue;let y=f.assignedValue.type;if(te({type:l,env:t},{type:y,env:t})){u=!0;break}}u||da({concreteType:i,moduleType:s,env:t})&&(u=!0);let c=lt(u);return e.$={env:t,type:c.type,value:c,pathCollection:[],isAccessingProperty:!1},e}function uf({expr:e,env:t}){Ce(e,C.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!Q(r)||!ot(r))throw p({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
2011
+ ${T(r)}`});if(n===0){let o=r.token.value,i=he(t,o);if(i.length===0)throw p({token:r.token,errorMessage:`Variable '${o}' not found in the environment.`});let a=i[i.length-1];t=et(t,a,{...a,initializedAtToken:r.token})}if(n===1){let o=r.token.value;if(he(t,o).length===0)throw p({token:r.token,errorMessage:`Variable '${o}' not found in the environment.`})}}return e.$={type:ne.type,value:ne,env:t,pathCollection:[]},e}function pf({expr:e,env:t,context:n}){var a;Ce(e,C.__yo_var_print_info,1);let r=e.args[0],o=M({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(a=o.$)==null?void 0:a.variableName;if(i){let s=he(t,i);if(s.length>0){let l=s.at(-1);console.log(pp(l))}}return e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function cf({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],o=M({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(s=o.$)==null?void 0:s.variableName,a=!1;if(i){let l=he(t,i);l.length>0&&(a=l.at(-1).isOwningTheRcValue)}return e.$={env:t,type:Xe(),value:lt(a),pathCollection:[]},e}function ff({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_var_has_other_aliases,1);let r=e.args[0],o=M({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(s=o.$)==null?void 0:s.variableName,a=!1;if(i){let l=he(t,i);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameRcValueAs)a=!0;else{let c=u.id;for(let f=t.frames.length-1;f>=0;f--){let m=t.frames[f];for(let y=0;y<m.variables.length;y++){let h=m.variables[y];if(h.isOwningTheSameRcValueAs&&h.isOwningTheSameRcValueAs.id===c){a=!0;break}}}}}}return e.$={env:t,type:Xe(),value:lt(a),pathCollection:[]},e}function df({expr:e,env:t,context:n}){let r=e.args[0],o=n.expectedType;o&&ze(o.type)&&(o={...o,type:o.type.childType});let i=M({expr:r,env:t,context:{...n,expectedType:o}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
2012
+ ${T(r)}`});if(t=i.$.env,j(i.$.value)){let s=i.$.value.value,l=Tr(s),u=le(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw p({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
2013
+ ${T(r)}`})}function mf({expr:e,env:t,context:n}){if(!v(e,A.Array,2))throw p({token:e.token,errorMessage:`Expected "Array(compt(Type), compt(usize))" with 2 arguments, like "Array(i32, 10)"
1974
2014
  Got:
1975
- ${T(e)}`});let r=e.args[0],o=e.args[1],i=j(o)&&o.token.value==="_",a=S({expr:r,env:t,context:{...n}});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
1976
- ${T(r)}`});if(!G(a.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2015
+ ${T(e)}`});let r=e.args[0],o=e.args[1],i=Q(o)&&o.token.value==="_",a=M({expr:r,env:t,context:{...n}});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
2016
+ ${T(r)}`});if(!j(a.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
1977
2017
  ${T(r)}
1978
2018
 
1979
- If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let s=a.$.value.value;if(i){let f=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,m=re(_t(),f),{env:y}=we({env:a.$.env,variable:{name:f,value:m,type:_t(),isCompileTimeOnly:!0,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheGcValue:!1}}),g=Gn(s,m),h=ae(g);return e.$={env:y,type:h.type,value:h,pathCollection:[]},e}let l=S({expr:o,env:t,context:{...n,expectedType:{type:_t(),env:t}}});if(!l.$)throw p({token:o.token,errorMessage:`Failed to evaluate the length expression:
1980
- ${T(o)}`});if(!W({type:_t(),env:t},{type:l.$.type,env:t}))throw p({token:o.token,errorMessage:`Expected usize for length, got:
2019
+ If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let s=a.$.value.value;if(i){let f=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,m=ae(yt(),f),{env:y}=Me({env:a.$.env,variable:{name:f,value:m,type:yt(),isCompileTimeOnly:!0,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),h=jn(s,m),_=le(h);return e.$={env:y,type:_.type,value:_,pathCollection:[]},e}let l=M({expr:o,env:t,context:{...n,expectedType:{type:yt(),env:t}}});if(!l.$)throw p({token:o.token,errorMessage:`Failed to evaluate the length expression:
2020
+ ${T(o)}`});if(!te({type:yt(),env:t},{type:l.$.type,env:t}))throw p({token:o.token,errorMessage:`Expected usize for length, got:
1981
2021
  ${T(o)}`});let u=l.$.value;if(!u)throw p({token:o.token,errorMessage:`Expected compile-time known value for length, got:
1982
- ${T(o)}`});Ue(u)&&(u.type=_t());let d=Gn(s,u),c=ae(d);return e.$={env:l.$.env,type:c.type,value:c,pathCollection:[]},e}function Sc({expr:e,env:t,context:n}){return ma({expr:e,env:t,context:n})}function Lc({expr:e,env:t,context:n}){Ce(e,A.ComptList,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
1983
- ${T(r)}`});if(!G(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
1984
- ${T(r)}`});let i=o.$.value.value,a=po(i),s=ae(a);return e.$={env:o.$.env,type:s.type,value:s,pathCollection:[]},e}function Ac({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
1985
- ${T(r)}`});if(t=o.$.env,!G(o.$.value))throw p({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
1986
- ${T(r)}`});let i=o.$.value.value,a=Ie(t);return a.isConcrete={concreteType:i},a.id=`concrete_module_${i.id}`,e.$={env:t,type:At(a),value:ae(a),pathCollection:[]},e}function Ic({expr:e,env:t,context:n}){Ce(e,A.Dyn);let r=e.args,o=[],i=[];for(let u=0;u<r.length;u++){let d=r[u],c=V(d)&&v(d,"!")&&d.args.length===1,f=c?d.args[0]:d,m=S({expr:f,env:t,context:{...n}});if(!m.$||!m.$.value||!G(m.$.value)||!Ee(m.$.value.value))throw new Error(`Expected a module type for argument ${u+1} of 'dyn' expression.`);t=m.$.env;let y=m.$.value.value;if(c){if(i.some(g=>g.id===y.id))throw p({token:f.token,errorMessage:`Module type ${x(y)} is already included in negative constraints of '${A.Dyn}' expression.`});i.push(y)}else{if(o.some(g=>g.id===y.id))throw p({token:f.token,errorMessage:`Module type ${x(y)} is already included in '${A.Dyn}' expression.`});o.push(y)}}for(let u=0;u<o.length;u++){let d=o[u];for(let c=u+1;c<o.length;c++){let f=o[c];for(let m of d.fields)throw p({token:e.token,errorMessage:`Module types ${x(d)} and ${x(f)} have conflicting function name '${m.label}' in 'dyn' expression.`})}}let a=[C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]];for(let u of o)for(let d of u.fields)if(a.includes(d.label)&&ce(d.type))throw p({token:e.token,errorMessage:`Module type ${x(u)} cannot have function '${d.label}' as it is reserved in 'dyn' expression.`});let s=yo(o,t,i);t=co({dynType:s,env:t,context:n});let l=ae(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function Nc({expr:e,env:t,context:n}){var s,l,u,d;if(!v(e,A.enum))throw p({token:e.token,errorMessage:`Expected "enum", got:
1987
- ${T(e)}`});let r=au(t);Ma({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.module.definedInModulePath=n.currentModulePath);let o=r.variants,i=r.module.fields;for(let c=0;c<e.args.length;c++){let f=e.args[c];if(V(f)&&(v(f,"::",2)||v(f,"=",2)||v(f,"?=",2))){let m=f,{field:y,env:g}=Dn({expr:m,env:t,tupleFieldIndex:c,context:{...n,SelfType:r},forType:"enum"});if(i.find(_=>_.label===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in enum`});if(o.some(_=>_.name===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in enum variants`});if(!y.isCompileTimeOnly)throw p({token:m.token,errorMessage:`Expected compile-time only field, got:
1988
- ${T(y.exprs.expr)}`});if(y.defaultValue)throw p({token:((s=y.exprs.defaultValueExpr)==null?void 0:s.token)??y.exprs.expr.token,errorMessage:"Enum module field cannot have default value."});if(!y.assignedValue)throw p({token:((l=y.exprs.assignedValueExpr)==null?void 0:l.token)??y.exprs.expr.token,errorMessage:"Enum module field must have assigned value."});i.push(y),t=g}else if(j(f)){let m=f.token.value;if(!nt(f))throw p({token:f.token,errorMessage:`Expected identifier for enum variant, got:
1989
- ${T(f)}`});o.push({name:m})}else{if(v(f,":"))throw p({token:f.token,errorMessage:"Enum variant with : is not implemented yet"});if(!nt(f.func))throw p({token:f.func.token,errorMessage:`Expected identifier for enum variant, got:
1990
- ${T(f.func)}`});let m=f.func.token.value,y=[];for(let g=0;g<f.args.length;g++){let h=f.args[g],{field:_,env:E}=Dn({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:r},forType:"enum"});if(y.find(w=>w.label===_.label))throw p({token:V(h)?((u=h.args[0])==null?void 0:u.token)??h.token:h.token,errorMessage:`Duplicate field label "${_.label}" in enum variant`});if(_.assignedValue)throw p({token:((d=_.exprs.assignedValueExpr)==null?void 0:d.token)??_.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});y.push(_),t=E}o.push({name:m,fields:y})}}t=nu({enumType:r,env:t,context:n}),t=Jl({enumType:r,env:t,context:n});let a=ae(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Dc({expr:e,env:t,context:n}){if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> operator for Fn module type, got:
2022
+ ${T(o)}`});Be(u)&&(u.type=yt());let d=jn(s,u),c=le(d);return e.$={env:l.$.env,type:c.type,value:c,pathCollection:[]},e}function yf({expr:e,env:t,context:n}){return ka({expr:e,env:t,context:n})}function _f({expr:e,env:t,context:n}){Ce(e,A.ComptList,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
2023
+ ${T(r)}`});if(!j(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2024
+ ${T(r)}`});let i=o.$.value.value,a=yo(i),s=le(a);return e.$={env:o.$.env,type:s.type,value:s,pathCollection:[]},e}function gf({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
2025
+ ${T(r)}`});if(t=o.$.env,!j(o.$.value))throw p({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
2026
+ ${T(r)}`});let i=o.$.value.value,a=Ue(t);return a.isConcrete={concreteType:i},a.id=`concrete_module_${i.id}`,e.$={env:t,type:Ot(a),value:le(a),pathCollection:[]},e}function hf({expr:e,env:t,context:n}){Ce(e,A.Dyn);let r=e.args,o=[],i=[];for(let u=0;u<r.length;u++){let d=r[u],c=V(d)&&v(d,"!")&&d.args.length===1,f=c?d.args[0]:d,m=M({expr:f,env:t,context:{...n}});if(!m.$||!m.$.value||!j(m.$.value)||!Fe(m.$.value.value))throw new Error(`Expected a module type for argument ${u+1} of 'dyn' expression.`);t=m.$.env;let y=m.$.value.value;if(c){if(i.some(h=>h.id===y.id))throw p({token:f.token,errorMessage:`Module type ${x(y)} is already included in negative constraints of '${A.Dyn}' expression.`});i.push(y)}else{if(o.some(h=>h.id===y.id))throw p({token:f.token,errorMessage:`Module type ${x(y)} is already included in '${A.Dyn}' expression.`});o.push(y)}}for(let u=0;u<o.length;u++){let d=o[u];for(let c=u+1;c<o.length;c++){let f=o[c];for(let m of d.fields)for(let y of f.fields)if(m.label===y.label)throw p({token:e.token,errorMessage:`Module types ${x(d)} and ${x(f)} have conflicting function name '${m.label}' in 'dyn' expression.`})}}let a=[C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]];for(let u of o)for(let d of u.fields)if(a.includes(d.label)&&me(d.type))throw p({token:e.token,errorMessage:`Module type ${x(u)} cannot have function '${d.label}' as it is reserved in 'dyn' expression.`});let s=vo(o,t,i);t=_o({dynType:s,env:t,context:n});let l=le(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function vf({expr:e,env:t,context:n}){var s,l,u,d;if(!v(e,A.enum))throw p({token:e.token,errorMessage:`Expected "enum", got:
2027
+ ${T(e)}`});let r=qu(t);Ya({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.module.definedInModulePath=n.currentModulePath);let o=r.variants,i=r.module.fields;for(let c=0;c<e.args.length;c++){let f=e.args[c];if(V(f)&&(v(f,"::",2)||v(f,"=",2)||v(f,"?=",2))){let m=f,{field:y,env:h}=Un({expr:m,env:t,tupleFieldIndex:c,context:{...n,SelfType:r},forType:"enum"});if(i.find(g=>g.label===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in enum`});if(o.some(g=>g.name===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in enum variants`});if(!y.isCompileTimeOnly)throw p({token:m.token,errorMessage:`Expected compile-time only field, got:
2028
+ ${T(y.exprs.expr)}`});if(y.defaultValue)throw p({token:((s=y.exprs.defaultValueExpr)==null?void 0:s.token)??y.exprs.expr.token,errorMessage:"Enum module field cannot have default value."});if(!y.assignedValue)throw p({token:((l=y.exprs.assignedValueExpr)==null?void 0:l.token)??y.exprs.expr.token,errorMessage:"Enum module field must have assigned value."});i.push(y),t=h}else if(Q(f)){let m=f.token.value;if(!ot(f))throw p({token:f.token,errorMessage:`Expected identifier for enum variant, got:
2029
+ ${T(f)}`});o.push({name:m})}else{if(v(f,":"))throw p({token:f.token,errorMessage:"Enum variant with : is not implemented yet"});if(!ot(f.func))throw p({token:f.func.token,errorMessage:`Expected identifier for enum variant, got:
2030
+ ${T(f.func)}`});let m=f.func.token.value,y=[];for(let h=0;h<f.args.length;h++){let _=f.args[h],{field:g,env:$}=Un({expr:_,env:t,tupleFieldIndex:h,context:{...n,SelfType:r},forType:"enum"});if(y.find(b=>b.label===g.label))throw p({token:V(_)?((u=_.args[0])==null?void 0:u.token)??_.token:_.token,errorMessage:`Duplicate field label "${g.label}" in enum variant`});if(g.assignedValue)throw p({token:((d=g.exprs.assignedValueExpr)==null?void 0:d.token)??g.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});y.push(g),t=$}o.push({name:m,fields:y})}}t=Ru({enumType:r,env:t,context:n}),t=Du({enumType:r,env:t,context:n});let a=le(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function $f({expr:e,env:t,context:n}){if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> operator for Fn module type, got:
1991
2031
  ${T(e)}`});let r=e.args[0],o=e.args[1];if(!V(r)||!v(r,A.Fn))throw p({token:r.token,errorMessage:`Expected Fn(...) for function trait, got:
1992
- ${T(r)}`});let i=r.args,{parameters:a,forallParameters:s,variadicParameter:l,env:u}=ns({parameterExprs:i,env:t,context:{...n,isEvaluatingFunctionType:!0}}),d=S({expr:o,env:u,context:{...n,isEvaluatingFunctionType:!0}});if(!d.$)throw p({token:o.token,errorMessage:"Failed to evaluate return type for Fn module."});let c=d.$.value,f;if(G(c))f=c.value;else throw p({token:o.token,errorMessage:`Expected a type for Fn return type, got:
1993
- ${T(o)}`});let m=Pr({parameters:a,forallParameters:s,variadicParameter:l,return_:{type:f,expr:o,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${ht()}`},env:Ct(u,!0),parametersFrame:u.frames[u.frames.length-1],isClosure:!0}),y=Ie(Ct(u,!0));return y.isFn={callType:m},t=Ct(u,!0),e.$={env:t,type:At(y),value:ae(y),pathCollection:[]},e}function Oc({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`Future type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Future(T)`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
1994
- ${T(r)}`});if(t=o.$.env,!G(o.$.value))throw p({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
1995
- ${T(r)}`});let i=o.$.value.value,a=Ie(t);return a.isFuture={outputType:i},a.id=`future_module_${i.id}`,e.$={env:t,type:At(a),value:ae(a),pathCollection:[]},e}function Ko({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:o}){var h,_,E,k,w,$;let i,a=e,s,l,u,d,c,f,m;if(V(e)&&v(e,"?=",2)&&(u=e.args[1],a=e.args[0]),V(a)&&(v(a,"=",2)||v(a,"::",2)||v(a,":=",2))){if(v(a,"::",2))throw p({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
1996
- All module fields are compile-time only by default.`});c=a.args[1],a=a.args[0]}if(u&&c)throw p({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(V(a)&&v(a,":",2)){if(s=a.args[0],l=a.args[1],V(s)&&v(s,A.compt,1))throw p({token:s.token,errorMessage:'No need to use "compt" modifier. All module fields are compile-time only by default.'});if(!j(s)&&!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${T(s)}`});i=s.token.value}else{if(V(a)&&v(a,A.compt,1))throw p({token:a.token,errorMessage:'No need to use "compt" modifier. All module fields are compile-time only by default.'});if(!u&&!c)throw p({token:e.token,errorMessage:`Expected label for module field, got ${T(a)}`});if(s=a,!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for module field label, got ${T(s)}`});if(!j(s)&&!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for module field label, got ${T(s)}`});i=s.token.value}let y=(h=r.expectedType)==null?void 0:h.type,g;if(y&&Ee(y)){let b=y.fields[t];if(!b)throw p({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=b.type}if(l){let b=S({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});(_=b.$)!=null&&_.env&&(n=(E=b.$)==null?void 0:E.env);let F=(k=b.$)==null?void 0:k.value;if(!G(F))throw p({token:l.token,errorMessage:`(1) Expected type for module field, got ${T(l)}`});m=F.value}if(c){let b=m?{type:m,env:n}:g?{type:g,env:n}:void 0,F=S({expr:c,env:n,context:{...r,expectedType:b}});if(!F.$)throw p({token:c.token,errorMessage:`Failed to evaluate required value expression: ${T(c)}`});if(n=(w=F.$)==null?void 0:w.env,f=F.$.value,!f)throw p({token:c.token,errorMessage:`Expected compile-time known value for required value, got ${T(c)}`});let M=F.$.type;if(b){if(!W({type:b.type,env:n},{type:M,env:n}))throw p({token:c.token,errorMessage:`Assigned value type mismatch:
1997
- Expected type: ${x(b.type)}
1998
- Given type: ${x(M)}`});m=b.type}else m=M}if(u){let b=m?{type:m,env:n}:g?{type:g,env:n}:void 0,F=S({expr:u,env:n,context:{...r,expectedType:b}});if(!F.$)throw p({token:u.token,errorMessage:`Failed to evaluate default value expression: ${T(u)}`});if(n=F.$.env,d=($=F.$)==null?void 0:$.value,!d)throw p({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${T(u)}`});let M=F.$.type;if(b){if(!W({type:b.type,env:n},{type:M,env:n}))throw p({token:u.token,errorMessage:`Default value type mismatch:
1999
- Expected type: ${x(b.type)}
2000
- Given type: ${x(M)}`});m=b.type}else m=M}if(!m)throw p({token:e.token,errorMessage:"Failed to infer the field type"});if(o&&u&&!ce(m))throw p({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elemen
2032
+ ${T(r)}`});let i=r.args,{parameters:a,forallParameters:s,variadicParameter:l,env:u}=ys({parameterExprs:i,env:t,context:{...n,isEvaluatingFunctionType:!0}}),d=M({expr:o,env:u,context:{...n,isEvaluatingFunctionType:!0}});if(!d.$)throw p({token:o.token,errorMessage:"Failed to evaluate return type for Fn module."});let c=d.$.value,f;if(j(c))f=c.value;else throw p({token:o.token,errorMessage:`Expected a type for Fn return type, got:
2033
+ ${T(o)}`});let m=Gr({parameters:a,forallParameters:s,variadicParameter:l,return_:{type:f,expr:o,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${ct(t.modulePath)}`},env:bt(u,!0),parametersFrame:u.frames[u.frames.length-1],isClosure:!0}),y=Ue(bt(u,!0));return y.isFn={callType:m},t=bt(u,!0),e.$={env:t,type:Ot(y),value:le(y),pathCollection:[]},e}function Tf({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`Future type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Future(T)`});let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
2034
+ ${T(r)}`});if(t=o.$.env,!j(o.$.value))throw p({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
2035
+ ${T(r)}`});let i=o.$.value.value,a=Ue(t);return a.isFuture={outputType:i},a.id=`future_module_${i.id}`,e.$={env:t,type:Ot(a),value:le(a),pathCollection:[]},e}function ei({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:o}){var _,g,$,k,b,E;let i,a=e,s,l,u,d,c,f,m;if(V(e)&&v(e,"?=",2)&&(u=e.args[1],a=e.args[0]),V(a)&&(v(a,"=",2)||v(a,"::",2)||v(a,":=",2))){if(v(a,"::",2))throw p({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
2036
+ All module fields are compile-time only by default.`});c=a.args[1],a=a.args[0]}if(u&&c)throw p({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(V(a)&&v(a,":",2)){if(s=a.args[0],l=a.args[1],V(s)&&v(s,A.compt,1))throw p({token:s.token,errorMessage:'No need to use "compt" modifier. All module fields are compile-time only by default.'});if(!Q(s)&&!ot(s))throw p({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${T(s)}`});i=s.token.value}else{if(V(a)&&v(a,A.compt,1))throw p({token:a.token,errorMessage:'No need to use "compt" modifier. All module fields are compile-time only by default.'});if(!u&&!c)throw p({token:e.token,errorMessage:`Expected label for module field, got ${T(a)}`});if(s=a,!ot(s))throw p({token:s.token,errorMessage:`Expected identifier for module field label, got ${T(s)}`});if(!Q(s)&&!ot(s))throw p({token:s.token,errorMessage:`Expected identifier for module field label, got ${T(s)}`});i=s.token.value}let y=(_=r.expectedType)==null?void 0:_.type,h;if(y&&Fe(y)){let w=y.fields[t];if(!w)throw p({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=w.type}if(l){let w=M({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});(g=w.$)!=null&&g.env&&(n=($=w.$)==null?void 0:$.env);let F=(k=w.$)==null?void 0:k.value;if(!j(F))throw p({token:l.token,errorMessage:`(1) Expected type for module field, got ${T(l)}`});m=F.value}if(c){let w=m?{type:m,env:n}:h?{type:h,env:n}:void 0,F=M({expr:c,env:n,context:{...r,expectedType:w}});if(!F.$)throw p({token:c.token,errorMessage:`Failed to evaluate required value expression: ${T(c)}`});if(n=(b=F.$)==null?void 0:b.env,f=F.$.value,!f)throw p({token:c.token,errorMessage:`Expected compile-time known value for required value, got ${T(c)}`});let L=F.$.type;if(w){if(!te({type:w.type,env:n},{type:L,env:n}))throw p({token:c.token,errorMessage:`Assigned value type mismatch:
2037
+ Expected type: ${x(w.type)}
2038
+ Given type: ${x(L)}`});m=w.type}else m=L}if(u){let w=m?{type:m,env:n}:h?{type:h,env:n}:void 0,F=M({expr:u,env:n,context:{...r,expectedType:w}});if(!F.$)throw p({token:u.token,errorMessage:`Failed to evaluate default value expression: ${T(u)}`});if(n=F.$.env,d=(E=F.$)==null?void 0:E.value,!d)throw p({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${T(u)}`});let L=F.$.type;if(w){if(!te({type:w.type,env:n},{type:L,env:n}))throw p({token:u.token,errorMessage:`Default value type mismatch:
2039
+ Expected type: ${x(w.type)}
2040
+ Given type: ${x(L)}`});m=w.type}else m=L}if(!m)throw p({token:e.token,errorMessage:"Failed to infer the field type"});if(o&&me(m)){if(m.variadicParameter)throw p({token:e.token,errorMessage:`Variadic function parameters are not allowed in module field "${i??"unnamed"}".
2041
+ Type expressions are required for all function parameters in module fields to support proper type specialization.`});for(let w of m.forallParameters)if(!w.exprs.typeExpr)throw p({token:e.token,errorMessage:`Function forall parameter "${w.label}" in module field "${i??"unnamed"}" must have an explicit type annotation.
2042
+ Type expressions are required for all function parameters in module fields to support proper type specialization.`});for(let w of m.parameters)if(!w.exprs.typeExpr)throw p({token:e.token,errorMessage:`Function parameter "${w.label}" in module field "${i??"unnamed"}" must have an explicit type annotation.
2043
+ Type expressions are required for all function parameters in module fields to support proper type specialization.`});if(!m.return.expr)throw p({token:e.token,errorMessage:`Function in module field "${i??"unnamed"}" must have an explicit return type annotation.
2044
+ Type expressions are required for return types in module fields to support proper type specialization.`})}if(o&&u&&!me(m))throw p({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elemen
2001
2045
  ts (excluding closures).
2002
2046
  Module field "${i??"unnamed"}" has type: ${x(m)}
2003
2047
 
2004
- To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:m,value:f??re(m,i),pathCollection:[]}),e!==l&&(e.$={env:n,value:J,type:J.type,pathCollection:[]}),{field:{label:i??`$field_${ht()}`,type:m,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:c},isCompileTimeOnly:!0,defaultValue:d,assignedValue:f},env:n}}function Uc({expr:e,env:t,context:n}){var l,u,d,c;if(!v(e,A.module))throw p({token:e.token,errorMessage:`Expected "module", got:
2005
- ${T(e)}`});let r=Ie(t),o=[];r.fields=o,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let i=e.args,a=wn(lt(),"Self");a.module=r;for(let f=0;f<i.length;f++){let m=i[f];if(V(m)&&v(m,"...",1)){let y=m.args[0],g=S({expr:y,env:t,context:{...n,SelfType:a}});if(!g.$)throw p({token:y.token,errorMessage:`Failed to evaluate the extended struct expression: ${T(y)}`});let h=g.$.value;if(G(h)&&Ee(h.value)||Ue(h)&&Ee(h.type)){let _;G(h)&&Ee(h.value)?_=h.value:_=h.type;for(let E of _.fields){let k=o.findIndex(w=>w.label===E.label);if(k>=0){if(o[k].assignedValue&&E.assignedValue&&Lt({value:o[k].assignedValue,env:t},{value:E.assignedValue,env:t})||!o[k].assignedValue&&!E.assignedValue&&W({type:o[k].type,env:t},{type:E.type,env:t}))continue;throw console.log(!!o[k].assignedValue,!!E.assignedValue),console.log(x(o[k].type),`
2006
- `,x(E.type),`
2007
- `,W({type:o[k].type,env:t},{type:E.type,env:t})),p({token:y.token,errorMessage:`Duplicate label 1 "${E.label}" in module`})}else o.push(E)}}else if(Ke(h)){let _=h;for(let E=0;E<_.fields.length;E++){let k=_.fields[E],w=_.type.fields[E],$=o.findIndex(b=>b.label===w.label);if($>=0){if(o[$].assignedValue&&w.assignedValue&&Lt({value:o[$].assignedValue,env:t},{value:w.assignedValue,env:t})||!o[$].assignedValue&&!w.assignedValue&&W({type:o[$].type,env:t},{type:w.type,env:t}))continue;throw p({token:y.token,errorMessage:`Duplicate label 2 "${w.label}" in module`})}else o.push({..._.type.fields[E],assignedValue:k})}}else throw p({token:y.token,errorMessage:`Expected a Module type or value for extending, got ${T(y)}`})}else if(V(m)&&v(m,A.where)){if(f!==0)throw p({token:m.token,errorMessage:"The where clause must be the first argument in a module definition."});let y=m.args;if(y.length===0)throw p({token:m.token,errorMessage:"The where clause must have at least one constraint."});r.selfConstraints||(r.selfConstraints=[]);for(let g of y){if(!V(g)||!v(g,"<:",2))throw p({token:g.token,errorMessage:`Expected constraint in the form "Self <: Module" or "Self <: (Module1, Module2)", got: ${T(g)}`});let h=g.args[0];if(!j(h)||h.token.value!=="Self")throw p({token:h.token,errorMessage:`In a module's where clause, the left-hand side of <: must be "Self", got: ${T(h)}`});let _=g.args[1],E=[];if(V(_)&&v(_,A.tuple))for(let w of _.args)V(w)&&v(w,"!")&&w.args.length===1?E.push({expr:w.args[0],isNegated:!0}):E.push({expr:w,isNegated:!1});else V(_)&&v(_,"!")&&_.args.length===1?E.push({expr:_.args[0],isNegated:!0}):E.push({expr:_,isNegated:!1});r.negativeSelfConstraints||(r.negativeSelfConstraints=[]);for(let{expr:w,isNegated:$}of E){let b=S({expr:w,env:t,context:{...n,SelfType:a}});(l=b.$)!=null&&l.env&&(t=b.$.env),(u=b.$)!=null&&u.value&&G(b.$.value)&&Ee(b.$.value.value)&&($?r.negativeSelfConstraints.push(b.$.value.value):r.selfConstraints.push(b.$.value.value))}let k=S({expr:g,env:t,context:{...n,SelfType:a,isInsideWhereClause:!0}});(d=k.$)!=null&&d.env&&(t=k.$.env)}}else{let{field:y,env:g}=Ko({expr:m,env:t,moduleFieldIndex:f,context:{...n,SelfType:a},isForEvaluatingModuleType:!0});if(o.find(_=>_.label===y.label))throw p({token:V(m)?((c=m.args[0])==null?void 0:c.token)??m.token:m.token,errorMessage:`Duplicate label 3 "${y.label}" in module`});if(o.push(y),t=g,!y.isCompileTimeOnly)throw p({token:m.token,errorMessage:`Expected compile-time only field for extern module, got ${T(m)}`})}}let s=ae(r);return e.$={env:t,value:s,type:s.type,pathCollection:[]},e.func.$=e.$,e}function Bc(e,t){if(e.label===C.dispose[0])if(ce(e.type)){let n=e.type;if(n.parameters.length!==1||n.forallParameters.length!==0)throw p({token:t,errorMessage:'The "dispose" function must have exactly one parameter of type "Self".'});if(!Be(n.return.type))throw p({token:t,errorMessage:'The "dispose" function must return "unit".'})}else throw p({token:t,errorMessage:'The "dispose" must be a function.'})}function ao({expr:e,env:t,context:n}){var c,f,m,y;let r=v(e,A.object),o=v(e,A.struct),i=v(e,A.newtype);if(!o&&!r&&!i)throw p({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
2008
- ${T(e)}`});let a=r,s=i,l=gr(t,a,s);xa({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.module.definedInModulePath=n.currentModulePath);let u=l.fields;for(let g=0;g<e.args.length;g++){let h=e.args[g];{let{field:_,env:E}=Dn({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:l},forType:"struct"});if(u.find(w=>w.label===_.label))throw p({token:V(h)?((c=h.args[0])==null?void 0:c.token)??h.token:h.token,errorMessage:`Duplicate label "${_.label}" in struct`});if(_.isCompileTimeOnly){if(_.label===C.___drop[0])throw p({token:V(h)?((f=h.args[0])==null?void 0:f.token)??h.token:h.token,errorMessage:`The label "${C.___drop[0]}()" is reserved for the auto-generated function. You cannot define it as a compile-time-only field.`});if(_.label===C.___dup[0])throw p({token:V(h)?((m=h.args[0])==null?void 0:m.token)??h.token:h.token,errorMessage:`The label "${C.___dup[0]}()" is reserved for the auto-generated function. You cannot define it as a compile-time-only field.`})}_.isCompileTimeOnly&&_.assignedValue?(_.label===C.dispose[0]&&Bc(_,V(h)?((y=h.args[0])==null?void 0:y.token)??h.token:h.token),l.module.fields.push(_)):u.push(_),t=E}}if(s&&u.length!==1)throw p({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=tu({structType:l,env:t,context:n}),t=yr({structType:l,env:t,context:n});let d=ae(l);return e.$={env:t,type:d.type,value:d,pathCollection:[]},e.func.$=e.$,e}function Pc({expr:e,env:t,context:n}){return Ce(e,A.newtype),ao({expr:e,env:t,context:n})}function zc({expr:e,env:t,context:n}){if(!v(e,A.object))throw p({token:e.token,errorMessage:`Expected "object", got:
2009
- ${T(e)}`});return ao({expr:e,env:t,context:n})}function Gc({expr:e,env:t,context:n}){Ce(e,A.Slice,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
2010
- ${T(r)}`});if(!G(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2048
+ To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:m,value:f??ae(m,i),pathCollection:[]}),e!==l&&(e.$={env:n,value:ne,type:ne.type,pathCollection:[]}),{field:{label:i??`$field_${ct(n.modulePath)}`,type:m,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:c},isCompileTimeOnly:!0,defaultValue:d,assignedValue:f},env:n}}function Ef({expr:e,env:t,context:n}){var l,u,d,c;if(!v(e,A.module))throw p({token:e.token,errorMessage:`Expected "module", got:
2049
+ ${T(e)}`});let r=Ue(t),o=[];r.fields=o,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let i=e.args,a=Sn(ut(),"Self");a.module=r;for(let f=0;f<i.length;f++){let m=i[f];if(V(m)&&v(m,"...",1)){let y=m.args[0],h=M({expr:y,env:t,context:{...n,SelfType:a}});if(!h.$)throw p({token:y.token,errorMessage:`Failed to evaluate the extended struct expression: ${T(y)}`});let _=h.$.value;if(j(_)&&Fe(_.value)||Be(_)&&Fe(_.type)){let g;j(_)&&Fe(_.value)?g=_.value:g=_.type;for(let $ of g.fields){let k=o.findIndex(b=>b.label===$.label);if(k>=0){if(o[k].assignedValue&&$.assignedValue&&Nt({value:o[k].assignedValue,env:t},{value:$.assignedValue,env:t})||!o[k].assignedValue&&!$.assignedValue&&te({type:o[k].type,env:t},{type:$.type,env:t}))continue;throw console.log(!!o[k].assignedValue,!!$.assignedValue),console.log(x(o[k].type),`
2050
+ `,x($.type),`
2051
+ `,te({type:o[k].type,env:t},{type:$.type,env:t})),p({token:y.token,errorMessage:`Duplicate label 1 "${$.label}" in module`})}else o.push($)}}else if(Je(_)){let g=_;for(let $=0;$<g.fields.length;$++){let k=g.fields[$],b=g.type.fields[$],E=o.findIndex(w=>w.label===b.label);if(E>=0){if(o[E].assignedValue&&b.assignedValue&&Nt({value:o[E].assignedValue,env:t},{value:b.assignedValue,env:t})||!o[E].assignedValue&&!b.assignedValue&&te({type:o[E].type,env:t},{type:b.type,env:t}))continue;throw p({token:y.token,errorMessage:`Duplicate label 2 "${b.label}" in module`})}else o.push({...g.type.fields[$],assignedValue:k})}}else throw p({token:y.token,errorMessage:`Expected a Module type or value for extending, got ${T(y)}`})}else if(V(m)&&v(m,A.where)){if(f!==0)throw p({token:m.token,errorMessage:"The where clause must be the first argument in a module definition."});let y=m.args;if(y.length===0)throw p({token:m.token,errorMessage:"The where clause must have at least one constraint."});r.selfConstraints||(r.selfConstraints=[]);for(let h of y){if(!V(h)||!v(h,"<:",2))throw p({token:h.token,errorMessage:`Expected constraint in the form "Self <: Module" or "Self <: (Module1, Module2)", got: ${T(h)}`});let _=h.args[0];if(!Q(_)||_.token.value!=="Self")throw p({token:_.token,errorMessage:`In a module's where clause, the left-hand side of <: must be "Self", got: ${T(_)}`});let g=h.args[1],$=[];if(V(g)&&v(g,A.tuple))for(let b of g.args)V(b)&&v(b,"!")&&b.args.length===1?$.push({expr:b.args[0],isNegated:!0}):$.push({expr:b,isNegated:!1});else V(g)&&v(g,"!")&&g.args.length===1?$.push({expr:g.args[0],isNegated:!0}):$.push({expr:g,isNegated:!1});r.negativeSelfConstraints||(r.negativeSelfConstraints=[]);for(let{expr:b,isNegated:E}of $){let w=M({expr:b,env:t,context:{...n,SelfType:a}});(l=w.$)!=null&&l.env&&(t=w.$.env),(u=w.$)!=null&&u.value&&j(w.$.value)&&Fe(w.$.value.value)&&(E?r.negativeSelfConstraints.push(w.$.value.value):r.selfConstraints.push(w.$.value.value))}let k=M({expr:h,env:t,context:{...n,SelfType:a,isInsideWhereClause:!0}});(d=k.$)!=null&&d.env&&(t=k.$.env)}}else{let{field:y,env:h}=ei({expr:m,env:t,moduleFieldIndex:f,context:{...n,SelfType:a},isForEvaluatingModuleType:!0});if(o.find(g=>g.label===y.label))throw p({token:V(m)?((c=m.args[0])==null?void 0:c.token)??m.token:m.token,errorMessage:`Duplicate label 3 "${y.label}" in module`});if(o.push(y),t=h,!y.isCompileTimeOnly)throw p({token:m.token,errorMessage:`Expected compile-time only field for extern module, got ${T(m)}`})}}let s=le(r);return e.$={env:t,value:s,type:s.type,pathCollection:[]},e.func.$=e.$,e}function Cf(e,t){if(e.label===C.dispose[0])if(me(e.type)){let n=e.type;if(n.parameters.length!==1||n.forallParameters.length!==0)throw p({token:t,errorMessage:'The "dispose" function must have exactly one parameter of type "Self".'});if(!De(n.return.type))throw p({token:t,errorMessage:'The "dispose" function must return "unit".'})}else throw p({token:t,errorMessage:'The "dispose" must be a function.'})}function uo({expr:e,env:t,context:n}){var c,f,m,y;let r=v(e,A.object),o=v(e,A.struct),i=v(e,A.newtype);if(!o&&!r&&!i)throw p({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
2052
+ ${T(e)}`});let a=r,s=i,l=$r(t,a,s);qa({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.module.definedInModulePath=n.currentModulePath);let u=l.fields;for(let h=0;h<e.args.length;h++){let _=e.args[h];{let{field:g,env:$}=Un({expr:_,env:t,tupleFieldIndex:h,context:{...n,SelfType:l},forType:"struct"});if(u.find(b=>b.label===g.label))throw p({token:V(_)?((c=_.args[0])==null?void 0:c.token)??_.token:_.token,errorMessage:`Duplicate label "${g.label}" in struct`});if(g.isCompileTimeOnly){if(g.label===C.___drop[0])throw p({token:V(_)?((f=_.args[0])==null?void 0:f.token)??_.token:_.token,errorMessage:`The label "${C.___drop[0]}()" is reserved for the auto-generated function. You cannot define it as a compile-time-only field.`});if(g.label===C.___dup[0])throw p({token:V(_)?((m=_.args[0])==null?void 0:m.token)??_.token:_.token,errorMessage:`The label "${C.___dup[0]}()" is reserved for the auto-generated function. You cannot define it as a compile-time-only field.`})}g.isCompileTimeOnly&&g.assignedValue?(g.label===C.dispose[0]&&Cf(g,V(_)?((y=_.args[0])==null?void 0:y.token)??_.token:_.token),l.module.fields.push(g)):u.push(g),t=$}}if(s&&u.length!==1)throw p({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=Uu({structType:l,env:t,context:n}),t=hr({structType:l,env:t,context:n});let d=le(l);return e.$={env:t,type:d.type,value:d,pathCollection:[]},e.func.$=e.$,e}function kf({expr:e,env:t,context:n}){return Ce(e,A.newtype),uo({expr:e,env:t,context:n})}function bf({expr:e,env:t,context:n}){if(!v(e,A.object))throw p({token:e.token,errorMessage:`Expected "object", got:
2053
+ ${T(e)}`});return uo({expr:e,env:t,context:n})}function wf({expr:e,env:t,context:n}){Ce(e,A.Slice,1);let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
2054
+ ${T(r)}`});if(!j(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2011
2055
  ${T(r)}
2012
2056
 
2013
- If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let i=o.$.value.value,a=_r(i),s=ae(a);return e.$={env:o.$.env,type:s.type,value:s,pathCollection:[]},e}function ym({args:e,env:t,context:n,forType:r}){var a,s;let o=[];for(let l=0;l<e.length;l++){let u=e[l],{field:d,env:c}=Dn({expr:u,env:t,tupleFieldIndex:l,context:{...n},forType:r});if(d.label&&o.find(m=>m.label===d.label))throw p({token:V(u)?((a=u.args[0])==null?void 0:a.token)??u.token:u.token,errorMessage:`Duplicate label "${d.label}" in tuple`});if(d.isCompileTimeOnly&&d.assignedValue)throw p({token:V(u)?((s=u.args[0])==null?void 0:s.token)??u.token:u.token,errorMessage:"Tuple cannot have module fields."});o.push(d),t=c}return{type:Zi(o),env:t}}function Rc({expr:e,env:t,context:n}){if(e.args.length===0){let i=ae(Br());return e.$={env:t,value:i,type:i.type,pathCollection:[]},e}let{type:r,env:o}=ym({args:e.args,env:t,context:{...n},forType:"tuple"});return t=o,r.fields.forEach(i=>{if(i.exprs.defaultValueExpr)throw p({token:i.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),e.$={env:t,value:ae(r),type:At(r),pathCollection:[]},e}function qc({expr:e,env:t,context:n}){var s,l;if(!v(e,A.union))throw p({token:e.token,errorMessage:`Expected "union", got:
2014
- ${T(e)}`});let r=su(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.module.definedInModulePath=n.currentModulePath);let o=[];r.fields=o;let i=e.args;for(let u=0;u<i.length;u++){let d=i[u],{field:c,env:f}=Dn({expr:d,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(o.find(y=>y.label===c.label))throw p({token:V(d)?((s=d.args[0])==null?void 0:s.token)??d.token:d.token,errorMessage:`Duplicate label "${c.label}" in union field.`});if(c.defaultValue)throw p({token:((l=c.exprs.defaultValueExpr)==null?void 0:l.token)??c.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(qe(c.type))throw p({token:c.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});if(c.isCompileTimeOnly){if(!c.assignedValue)throw p({token:c.exprs.expr.token,errorMessage:"Module field in union type must have assigned value."});r.module.fields.push(c)}else o.push(c);t=f}t=ru({unionType:r,env:t,context:n});let a=ae(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function ga({expr:e,env:t,context:n}){var q,ne,pe,ue;let r=(q=n.expectedType)==null?void 0:q.type;if(!r)throw p({token:e.token,errorMessage:`Expected a function type, got:
2015
- ${T(e)}`});let o,i=!1,a,s;if(ce(r))o=r;else if(ee(r)){let oe=nn(r);if(oe)a=oe,o=oe.isFn.callType,i=!0,s=r;else throw p({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
2057
+ If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let i=o.$.value.value,a=vr(i),s=le(a);return e.$={env:o.$.env,type:s.type,value:s,pathCollection:[]},e}function Km({args:e,env:t,context:n,forType:r}){var a,s;let o=[];for(let l=0;l<e.length;l++){let u=e[l],{field:d,env:c}=Un({expr:u,env:t,tupleFieldIndex:l,context:{...n},forType:r});if(d.label&&o.find(m=>m.label===d.label))throw p({token:V(u)?((a=u.args[0])==null?void 0:a.token)??u.token:u.token,errorMessage:`Duplicate label "${d.label}" in tuple`});if(d.isCompileTimeOnly&&d.assignedValue)throw p({token:V(u)?((s=u.args[0])==null?void 0:s.token)??u.token:u.token,errorMessage:"Tuple cannot have module fields."});o.push(d),t=c}return{type:aa(o),env:t}}function Ff({expr:e,env:t,context:n}){if(e.args.length===0){let i=le(zr());return e.$={env:t,value:i,type:i.type,pathCollection:[]},e}let{type:r,env:o}=Km({args:e.args,env:t,context:{...n},forType:"tuple"});return t=o,r.fields.forEach(i=>{if(i.exprs.defaultValueExpr)throw p({token:i.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),e.$={env:t,value:le(r),type:Ot(r),pathCollection:[]},e}function Vf({expr:e,env:t,context:n}){var s,l;if(!v(e,A.union))throw p({token:e.token,errorMessage:`Expected "union", got:
2058
+ ${T(e)}`});let r=Yu(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.module.definedInModulePath=n.currentModulePath);let o=[];r.fields=o;let i=e.args;for(let u=0;u<i.length;u++){let d=i[u],{field:c,env:f}=Un({expr:d,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(o.find(y=>y.label===c.label))throw p({token:V(d)?((s=d.args[0])==null?void 0:s.token)??d.token:d.token,errorMessage:`Duplicate label "${c.label}" in union field.`});if(c.defaultValue)throw p({token:((l=c.exprs.defaultValueExpr)==null?void 0:l.token)??c.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(Ge(c.type))throw p({token:c.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});if(c.isCompileTimeOnly){if(!c.assignedValue)throw p({token:c.exprs.expr.token,errorMessage:"Module field in union type must have assigned value."});r.module.fields.push(c)}else o.push(c);t=f}t=Pu({unionType:r,env:t,context:n});let a=le(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Va({expr:e,env:t,context:n}){var W,H,se,ye;let r=(W=n.expectedType)==null?void 0:W.type;if(!r)throw p({token:e.token,errorMessage:`Expected a function type, got:
2059
+ ${T(e)}`});let o,i=!1,a,s;if(me(r))o=r;else if(X(r)){let oe=sn(r);if(oe)a=oe,o=oe.isFn.callType,i=!0,s=r;else throw p({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
2016
2060
  ${x(r)}`})}else throw p({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
2017
- ${x(r)}${Ne(r)?`
2061
+ ${x(r)}${Re(r)?`
2018
2062
  Use 'dyn((x) => expr)' for dynamic dispatch`:""}`});let l=i?"=>":"->",u=i?"closure":"function";if(!v(e,l,2))throw p({token:e.token,errorMessage:`Expected ${l} for anonymous ${u}, got:
2019
- ${T(e)}`});let d=e.args[0],c=e.args[1],f=[];V(d)&&v(d,A.tuple)?f=d.args:f=[d];let m=[],y=[];for(let oe=0;oe<f.length;oe++){let ye=f[oe];if(V(ye)&&v(ye,A.forall)){if(oe!==0)throw p({token:ye.token,errorMessage:"forall(...) must be the first parameter expression"});m=ye.args}else y.push(ye)}if(y.length!==o.parameters.length)throw p({token:e.token,errorMessage:`Expected ${o.parameters.length} regular parameters, got ${y.length}`});let g=t;t=ut(t);for(let oe=0;oe<m.length;oe++){let ye=m[oe],ge=o.forallParameters[oe];if(!j(ye))throw p({token:ye.token,errorMessage:`Expected parameter name for forall parameter, got ${T(ye)}`});let Me=ye.token.value;if(Me!==ge.label)throw p({token:ye.token,errorMessage:`Forall parameter name must match expected name.
2020
- Expected: "${ge.label}"
2021
- Got: "${Me}"`})}for(let oe=0;oe<o.forallParameters.length;oe++){let ye=m[oe],ge=o.forallParameters[oe],{env:Me}=we({env:t,variable:{name:ge.label,type:ge.type,isCompileTimeOnly:ge.isCompileTimeOnly,value:re(ge.type,ge.label),token:(ye==null?void 0:ye.token)??ke,initializedAtToken:(ye==null?void 0:ye.token)??ke,consumedAtToken:void 0,isOwningTheGcValue:!1},skipCheckingFunctionOverloading:!0});t=Me,ye&&(ye.$={env:t,type:ge.type,value:re(ge.type,ge.label),pathCollection:[]})}for(let oe=0;oe<y.length;oe++){let ye=y[oe],ge=o.parameters[oe];if(ge.isCompileTimeOnly){if(!j(ye))throw p({token:ye.token,errorMessage:`Expected parameter name for compile-time parameter, got ${T(ye)}`});let Te=ye.token.value;if(Te!==ge.label)throw p({token:ye.token,errorMessage:`Compile-time parameter name must match expected name.
2022
- Expected: "${ge.label}"
2023
- Got: "${Te}"`})}let Me=ye.token.value,Se=ge.label,{env:Re}=we({env:t,variable:{name:Me,type:ge.type,isCompileTimeOnly:ge.isCompileTimeOnly,value:ge.isCompileTimeOnly?re(ge.type,ge.label):void 0,token:ye.token,initializedAtToken:ye.token,consumedAtToken:void 0,isOwningTheGcValue:ge.isOwningTheGcValue,parameterAlias:Me!==Se?Se:void 0},skipCheckingFunctionOverloading:!0});t=Re,ye.$={env:t,type:ge.type,value:ge.isCompileTimeOnly?re(ge.type,ge.label):void 0,pathCollection:[]}}let h=t.frames[t.frames.length-1],_={...o,forallParameters:o.forallParameters,parameters:o.parameters.map((oe,ye)=>{if(oe.isCompileTimeOnly)return oe;{let ge=y[ye];return{...oe,label:j(ge)?ge.token.value:oe.label,exprs:{...oe.exprs,expr:ge,labelExpr:ge,typeExpr:void 0,defaultValueExpr:void 0}}}}),return:{...o.return,expr:void 0},parametersFrame:h,env:g},E={tag:"Function",type:_,body:c,frameLevel:t.frames.length-1,funcId:`fn_${ht()}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},k=!!a,{evaluationContext:w}=Go({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},o,E,t),$=Et({expr:c,env:t,context:w,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!$.$)throw p({token:c.token,errorMessage:"Failed to evaluate the function body."});t=$.$.env;let b=w.capturedVariables,F=(ne=$.$)==null?void 0:ne.type;if(F&&!W({type:o.return.type,env:t},{type:F,env:t}))throw p({token:c.token,errorMessage:`Incompatible return type:
2063
+ ${T(e)}`});let d=e.args[0],c=e.args[1],f=[];V(d)&&v(d,A.tuple)?f=d.args:f=[d];let m=[],y=[];for(let oe=0;oe<f.length;oe++){let pe=f[oe];if(V(pe)&&v(pe,A.forall)){if(oe!==0)throw p({token:pe.token,errorMessage:"forall(...) must be the first parameter expression"});m=pe.args}else y.push(pe)}if(y.length!==o.parameters.length)throw p({token:e.token,errorMessage:`Expected ${o.parameters.length} regular parameters, got ${y.length}`});let h=t;t=at(t);for(let oe=0;oe<m.length;oe++){let pe=m[oe],_e=o.forallParameters[oe];if(!Q(pe))throw p({token:pe.token,errorMessage:`Expected parameter name for forall parameter, got ${T(pe)}`});let Ie=pe.token.value;if(Ie!==_e.label)throw p({token:pe.token,errorMessage:`Forall parameter name must match expected name.
2064
+ Expected: "${_e.label}"
2065
+ Got: "${Ie}"`})}for(let oe=0;oe<o.forallParameters.length;oe++){let pe=m[oe],_e=o.forallParameters[oe],{env:Ie}=Me({env:t,variable:{name:_e.label,type:_e.type,isCompileTimeOnly:_e.isCompileTimeOnly,value:ae(_e.type,_e.label),token:(pe==null?void 0:pe.token)??be,initializedAtToken:(pe==null?void 0:pe.token)??be,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=Ie,pe&&(pe.$={env:t,type:_e.type,value:ae(_e.type,_e.label),pathCollection:[]})}for(let oe=0;oe<y.length;oe++){let pe=y[oe],_e=o.parameters[oe];if(_e.isCompileTimeOnly){if(!Q(pe))throw p({token:pe.token,errorMessage:`Expected parameter name for compile-time parameter, got ${T(pe)}`});let ge=pe.token.value;if(ge!==_e.label)throw p({token:pe.token,errorMessage:`Compile-time parameter name must match expected name.
2066
+ Expected: "${_e.label}"
2067
+ Got: "${ge}"`})}let Ie=pe.token.value,ke=_e.label,{env:Ae}=Me({env:t,variable:{name:Ie,type:_e.type,isCompileTimeOnly:_e.isCompileTimeOnly,value:_e.isCompileTimeOnly?ae(_e.type,_e.label):void 0,token:pe.token,initializedAtToken:pe.token,consumedAtToken:void 0,isOwningTheRcValue:_e.isOwningTheRcValue,parameterAlias:Ie!==ke?ke:void 0}});t=Ae,pe.$={env:t,type:_e.type,value:_e.isCompileTimeOnly?ae(_e.type,_e.label):void 0,pathCollection:[]}}let _=t.frames[t.frames.length-1],g={...o,forallParameters:o.forallParameters,parameters:o.parameters.map((oe,pe)=>{if(oe.isCompileTimeOnly)return oe;{let _e=y[pe];return{...oe,label:Q(_e)?_e.token.value:oe.label,exprs:{...oe.exprs,expr:_e,labelExpr:_e,typeExpr:void 0,defaultValueExpr:void 0}}}}),return:{...o.return,expr:void 0},parametersFrame:_,env:h},$={tag:"Function",type:g,body:c,frameLevel:t.frames.length-1,funcId:`fn_${ct(t.modulePath)}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},k=!!a,{evaluationContext:b}=Wo({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},o,$,t),E=kt({expr:c,env:t,context:b,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!E.$)throw p({token:c.token,errorMessage:"Failed to evaluate the function body."});t=E.$.env;let w=b.capturedVariables,F=(H=E.$)==null?void 0:H.type;if(F&&!te({type:o.return.type,env:t},{type:F,env:t}))throw p({token:c.token,errorMessage:`Incompatible return type:
2024
2068
  - Expected: ${x(o.return.type)}
2025
- - Got : ${x(F)}`});(pe=$.$)!=null&&pe.env&&(t=(ue=$.$)==null?void 0:ue.env),t=Ct(t,!0);let M;k&&b&&b.size>0&&(M=no({capturedVariables:b,env:t}));let L,O,B,P;if(i&&a&&s){P=to({expectedCaptureType:void 0,capturedVariablesWithValues:M,env:t,closureToken:e.token,context:{...n}}).captureType;let ye=pu(_,t),{capturedVariableDupExpressions:ge,env:Me}=ro({capturedVariablesWithValues:M,env:t,context:n});B=ge,t=Me,E.funcId=`closure_${ht()}`,E.closureInfo={closureType:ye,captureType:P},s.resolvedConcreteType=P,L={...s,resolvedConcreteType:P},O=void 0}else L=_,O=E;return e.$={env:t,type:L,value:O,pathCollection:k&&b?eo(b):[],deferredDupExpressions:i&&B?B:void 0,captureType:i?P:void 0,closureFunctionValue:i?E:void 0},k&&ze(e,!0),e}function Yc({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw p({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let o=r.length,i,a;n.expectedType&&Oe(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let c=0;c<r.length;c++){let f=r[c],m=S({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(xt(m,n),!m.$)throw p({token:f.token,errorMessage:`Failed to evaluate array element: ${T(f)}`});if(t=m.$.env,s.push(m.$.value),!i)i=a||m.$.type;else if(!W({type:i,env:t},{type:m.$.type,env:t}))if(W({type:vt({type:i,expectedType:void 0,expr:void 0,env:t}),env:t},{type:m.$.type,env:t}))i=m.$.type;else throw p({token:f.token,errorMessage:`Array element type mismatch:
2069
+ - Got : ${x(F)}`});(se=E.$)!=null&&se.env&&(t=(ye=E.$)==null?void 0:ye.env),t=bt(t,!0);let L;k&&w&&w.size>0&&(L=io({capturedVariables:w,env:t}));let S,B,R,Y;if(i&&a&&s){Y=oo({expectedCaptureType:void 0,capturedVariablesWithValues:L,env:t,closureToken:e.token,context:{...n}}).captureType;let pe=Hu(g,t),{capturedVariableDupExpressions:_e,env:Ie}=ao({capturedVariablesWithValues:L,env:t,context:n});R=_e,t=Ie,$.funcId=`closure_${ct(t.modulePath)}`,$.closureInfo={closureType:pe,captureType:Y},s.resolvedConcreteType=Y,S={...s,resolvedConcreteType:Y},B=void 0}else S=g,B=$;return e.$={env:t,type:S,value:B,pathCollection:k&&w?ro(w):[],deferredDupExpressions:i&&R?R:void 0,captureType:i?Y:void 0,closureFunctionValue:i?$:void 0},k&&Ze(e,!0),e}function xf({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw p({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let o=r.length,i,a;n.expectedType&&Oe(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let c=0;c<r.length;c++){let f=r[c],m=M({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(At(m,n),!m.$)throw p({token:f.token,errorMessage:`Failed to evaluate array element: ${T(f)}`});if(t=m.$.env,s.push(m.$.value),!i)i=a||m.$.type;else if(!te({type:i,env:t},{type:m.$.type,env:t}))if(te({type:Tt({type:i,expectedType:void 0,expr:void 0,env:t}),env:t},{type:m.$.type,env:t}))i=m.$.type;else throw p({token:f.token,errorMessage:`Array element type mismatch:
2026
2070
  Expected type: ${x(i)}
2027
- Given type: ${x(m.$.type)}`});l.push(m)}let u=Gn(i,Dt("Usize",o)),d=s.every(c=>!!c)?zn(u,s):void 0;return e.$={env:t,type:u,value:d,pathCollection:[],runtimeArgExprsInOrder:l},ze(e,!0),e}function jc(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=it(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function Wc(e,t){if(e.token.type==="char"){let n=_m(e.token.value),r=Pn(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function _m(e){let t=e.slice(1,-1);if(t.length===1)return t.charCodeAt(0);if(t.length===2&&t[0]==="\\"){let n=t[1];switch(n){case"n":return 10;case"t":return 9;case"r":return 13;case"\\":return 92;case"'":return 39;case'"':return 34;case"0":return 0;case"a":return 7;case"b":return 8;case"f":return 12;case"v":return 11;default:throw new Error(`Unknown escape sequence: \\${n}`)}}else throw new Error(`Invalid char literal: ${e}`)}function Hc({expr:e,env:t,context:n}){let r=[],o=e.args;if(o.length===0)throw p({token:e.token,errorMessage:`Expected at least one element in compt_list, got ${o.length}`});let i;n.expectedType&&mt(n.expectedType.type)&&(i=n.expectedType.type.childType);for(let s=0;s<o.length;s++){let l=o[s],u=S({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw p({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
2028
- ${T(l)}`});t=u.$.env;let d=u.$.value;if(r.push(d),!i)i=u.$.type;else if(!W({type:i,env:t},{type:u.$.type,env:t}))throw p({token:l.token,errorMessage:`Mismatched element types in compt_list. Expected element of type ${x(i)}, got ${x(u.$.type)}`})}let a=kn(i,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Kc(e,t,n){let o=me(t,"Box").find(m=>m.value&&Fe(m.value)&&ce(m.type));if(!o||!o.value||!Fe(o.value))throw new Error("Cannot find Box type constructor in environment");let i=o.value,a=i.type,s=a.parameters[0],l=ae(e),u=ut(a.env),{env:d}=we({env:u,variable:{name:s.label,token:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:l,isOwningTheGcValue:!1}}),{value:c,callerEnv:f}=Xr({functionCalleeExpr:void 0,functionType:a,functionValue:i,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:lt()}],variadicArgs:[]},callerEnv:t,calleeEnv:d,context:n});if(!G(c)||!$t(c.value))throw new Error("Box type constructor did not return a type value");return{boxType:c.value,env:f}}function gm(e,t,n){var r;try{let o=S({expr:e,env:t,context:n});if(!o.$)return!1;let i=o.$.value;if(Fe(i))return!!me(t,"box").find(l=>l.value&&Fe(l.value)&&l.value===i);if(G(i)){let s=i.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function Qc({expr:e,env:t,context:n}){Ce(e,A.dyn,1);let r=e.args[0],o=n.expectedType,i;if(n.expectedType&&Ne(n.expectedType.type)){let g=n.expectedType.type;if(i=wn(lt(),"",void 0,g.requiredModules,g.negativeModules),V(r)&&gm(r.func,t,{...n})&&v(r.args[0],"=>")){let{boxType:h,env:_}=Kc(i,t,n);t=_,o={type:h,env:t}}else o={type:i,env:n.expectedType.env}}else o=void 0;let a=S({expr:r,env:t,context:{...n,expectedType:o}});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
2029
- ${T(r)}`});let s=a.$.type,l=a;if(!$t(s)&&!(ee(s)&&Pe(s))){let{boxType:g,env:h}=Kc(s,t,{...n});t=h;let _={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},E={tag:"FuncCall",func:_,args:[a],token:r.token,$:void 0},k=S({expr:E,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!k.$)throw p({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
2030
- ${T(r)}`});t=k.$.env,s=k.$.type,l=k,e.args[0]=k}else t=a.$.env;xt(l,n),t=l.$.env;let u=[],d=[],c=new Set,f;if(n.expectedType&&Ne(n.expectedType.type))f=n.expectedType.type;else if(yn(s)){let g=s.fields[0].type;if(g.module){let h=[];for(let _ of g.module.fields)_.assignedValue&&Ke(_.assignedValue)&&h.push(_.assignedValue.type);f=yo(h,t,[]),t=co({dynType:f,env:t,context:n})}else throw p({token:e.token,errorMessage:`'${A.dyn}' with Box(T) requires T to have a module. Got boxed type: ${x(g)}`})}else if(s.module){let g=[];for(let h of s.module.fields)h.assignedValue&&Ke(h.assignedValue)&&g.push(h.assignedValue.type);f=yo(g,t,[]),t=co({dynType:f,env:t,context:n})}else throw p({token:e.token,errorMessage:`'${A.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a module. Got value type: ${x(s)}`});let m=[];if(yn(s)){let g=s.fields[0].type;(ee(g)||Ne(g))&&m.push(...g.negativeModules??[])}for(let g of f.requiredModules)for(let h of m)if(W({type:g,env:t},{type:h,env:t}))throw p({token:e.token,errorMessage:`Required module ${x(g)} is in the negative modules list and cannot be used.`});for(let g of f.requiredModules)if(!c.has(g))if(yn(s)&&(ee(s.fields[0].type)||Ne(s.fields[0].type))){let h=s.fields[0].type,_=!1;for(let E of h.requiredModules)if(W({type:g,env:t},{type:E,env:t})){let k=[];for(let $=0;$<g.fields.length;$++){let b=g.fields[$],F=E.fields.findIndex(M=>M.label===b.label);F===-1?k.push(void 0):k.push(E.fields[F].assignedValue)}let w=Vr(g,k);d.push(w),u.push(w.type),c.add(g),_=!0;break}if(!_)throw p({token:e.token,errorMessage:`Required module ${x(g)} not found in SomeType's requiredModules.`})}else{let h=yn(s)?s.fields[0].type:s;if(h.module){let _=!1;for(let E of h.module.fields)if(E.assignedValue&&Ke(E.assignedValue)&&W({type:g,env:t},{type:E.assignedValue.type,env:t})){d.push(E.assignedValue),u.push(E.assignedValue.type),c.add(g),_=!0;break}if(!_)throw p({token:e.token,errorMessage:`Required module ${x(g)} is not implemented by type ${x(s)}.`})}else throw p({token:e.token,errorMessage:`Cannot find module ${x(g)} for value type ${x(s)}.`})}let y=[];for(let g of f.requiredModules){let h=u.findIndex(_=>W({type:g,env:t},{type:_,env:t}));if(h===-1)throw p({token:e.token,errorMessage:`No module value found for expected module type ${x(g)}.`});y.push(d[h])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallModuleValues:y},ze(e,!0),e}function Zc(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),o="ComptFloat";if(n.expectedType){let a=n.expectedType.type;wo(a)?o="F32":Vo(a)&&(o="F64")}let i=Dt(o,r);return e.$={env:t,value:i,type:i.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function Jc(e,t,n){if(e.token.type==="integer"){let r=e.token.value.replace(/_/g,""),o=10;r.match(/^0x/i)?(o=16,r=r.slice(2)):r.match(/^0b/i)?(o=2,r=r.slice(2)):r.match(/^0o/i)&&(o=8,r=r.slice(2));let i="ComptInt";if(n.expectedType){let l=n.expectedType.type;ho(l)?i="Usize":vo(l)?i="Isize":nr(l)?i="U8":To(l)?i="I8":$o(l)?i="U16":Eo(l)?i="I16":Co(l)?i="U32":ko(l)?i="I32":bo(l)?i="U64":Fo(l)&&(i="I64")}let a=parseInt(r,o),s=Dt(i,a);return e.$={env:t,value:s,type:s.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function Xc(e,t){if(e.token.type==="string"){let n=un(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function hm({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:o,runtimeArgExprsInOrder:i}){var m;let a=e,s=e,l;if(V(a)&&v(a,":",2)){let y=a.args[0];throw p({token:y.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(m=r.expectedType)==null?void 0:m.type,d;if(u){if(!He(u))throw p({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
2031
- ${x(u)}`});let y=u.fields[t];if(!y)throw p({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});d=y.type}let c=S({expr:s,env:n,context:{...r,expectedType:d?{type:d,env:n}:void 0}});if(xt(c,r),!c.$)throw p({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${T(s)}`});n=c.$.env;let f=c.$.value;if(f&&G(c.$.value))throw p({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
2032
- ${T(s)}`});return l=vt({type:c.$.type,expectedType:void 0,expr:void 0,env:n}),i.push(c),e!==s&&(e.$={env:n,type:l,value:f,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},isCompileTimeOnly:!1,type:l,label:o.toString()},value:f,env:n}}function vm({args:e,env:t,context:n}){let r=[],o=[],i=[];for(let l=0;l<e.length;l++){let u=e[l],{type:d,value:c,env:f}=hm({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:i});r.push(d),o.push(c),t=f}let a=Zi(r),s=o.some(l=>!l)?void 0:ii(a,o);return{type:a,value:s,env:t,runtimeArgExprsInOrder:i}}function ef({expr:e,env:t,context:n}){if(!v(e,A.tuple))throw p({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:J,type:J.type,pathCollection:[]},e;let{type:r,value:o,env:i,runtimeArgExprsInOrder:a}=vm({args:e.args,env:t,context:n});return t=i,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw p({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw p({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:o,type:r,pathCollection:[],runtimeArgExprsInOrder:a},ze(e,!0),e}function ha({expr:e,env:t,context:n}){var c,f;if(!v(e,":",2))throw p({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],o=e.args[1],i=S({expr:o,env:t,context:{...n}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate rhs expression:
2033
- ${T(o)}`});t=i.$.env;let a=i.$.value;if(!G(a))throw p({token:o.token,errorMessage:`Expected type for rhs, got ${T(o)}`});let s=a.value;tr(s,i.token);let l=!1;if(V(r)&&v(r,A.compt)){if(l=!0,r.args.length!==1)throw p({token:r.token,errorMessage:`Expected one argument for "compt" , got ${r.args.length}`});r=r.args[0]}if(!l&&((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&((f=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&f.type.return.isCompileTimeOnly))throw p({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!nt(r))throw p({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(hn(s)&&!l)throw p({token:r.token,errorMessage:`Expected "compt" for compile-time known value binding:
2034
- ${x(s)}`});if(er(s)&&l)throw p({token:r.token,errorMessage:`Unexpected "compt" for ${x(s)} which can only be used at runtime.`});let u=r.token.value,{env:d}=we({env:t,variable:{name:u,type:s,isCompileTimeOnly:l,value:l?re(s,u):void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheGcValue:qe(s)}});return t=d,r.$={env:t,type:s,pathCollection:[[u]]},e.$={env:t,type:J.type,value:J,pathCollection:[]},{expr:e,variableExpr:r,variableName:u}}function va({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var i;let o=e.token.type==="backtick_identifier"?e.token.value.slice(1,-1):e.token.value;if(o==="Type"){let a=ae(lt());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Module"){let a=ae(dn(1));return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="unit"){let a=ae(Br());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_int"){let a=ae(ur());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_float"){let a=ae(xr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_string"){let a=ae(Ot());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="bool"){let a=ae(Qe());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="usize"){let a=ae(_t());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="isize"){let a=ae(Mr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u8"){let a=ae(pr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i8"){let a=ae(Sr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u16"){let a=ae(Lr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i16"){let a=ae(Ar());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u32"){let a=ae(Ir());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i32"){let a=ae(cr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u64"){let a=ae(Nr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i64"){let a=ae(Dr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="f32"){let a=ae(Or());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="f64"){let a=ae(fr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="char"){let a=ae(zi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="short"){let a=ae(Gi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ushort"){let a=ae(Ri());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="int"){let a=ae(qi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="uint"){let a=ae(Yi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="long"){let a=ae(ji());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ulong"){let a=ae(Wi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="longlong"){let a=ae(Hi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ulonglong"){let a=ae(Ki());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="longdouble"){let a=ae(Qi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="void"){let a=ae(iu());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Expr"){let a=ae(jt());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Self"&&n.SelfType){let a=ae(n.SelfType);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else{let a=me(t,o);if(a.length){let s=a[a.length-1];if(!s.initializedAtToken&&r&&!ce(s.type)&&!G(s.value))throw p({token:e.token,errorMessage:`Variable "${o}" is not initialized`});if(e.$={env:t,type:s.type,value:s.value,originType:s.type,variableName:s.name,pathCollection:[[s.name]]},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<l&&oo(s.name,s.frameLevel,"own",e.token,n)}if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)==="async-block"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<l&&oo(s.name,s.frameLevel,"own",e.token,n)}return e}else throw p({token:e.token,errorMessage:`Variable "${o}" not found.`})}}function os(e,t){let n=`Right-hand side contains "${t}" from function.`;throw V(e)&&v(e,A.cond)?n=`Cannot assign "cond" expression to variable when all cases contain "${t}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:V(e)&&v(e,A.match)?n=`Cannot assign "match" expression to variable when all cases contain "${t}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:V(e)&&v(e,A.begin)&&(n=`Cannot assign "begin" expression to variable when it contains "${t}" statement.`),p({token:e.token,errorMessage:n})}function Tm(e,t){if(Oe(e)&&Ue(e.length)){let n=e.length;if(n.variableName){let r=me(t,n.variableName);if(r.length>0){let o=r[r.length-1];if(o.value&&!Ue(o.value))return Gn(e.childType,o.value)}}}return e}function tf({expr:e,env:t,context:n}){var i,a,s,l,u,d,c,f,m,y,g,h;if(!v(e,"=",2))throw p({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],o=e.args[1];if(j(r)||V(r)&&v(r,":",2)){let _;if(j(r)){let q=va({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!q.$)throw p({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${T(r)}`});t=q.$.env,r=q,_=r.token.value}else{let{expr:q,variableExpr:ne,variableName:pe}=ha({expr:r,env:t,context:{...n}});(i=q.$)!=null&&i.env&&(t=(a=q.$)==null?void 0:a.env),r=ne,_=pe}let E=me(t,_);if(!E.length)throw p({token:r.token,errorMessage:`Variable ${_} not found in the environment`});let k=E[E.length-1];if(!k.isReassignable)throw p({token:r.token,errorMessage:`Cannot reassign "${_}".
2035
- You can mutate fields (e.g., ${_}.field = value) but cannot reassign itself.`});if(o=S({expr:o,env:t,context:{...n,expectedType:{type:k.type,env:t}}}),!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${T(o)}`});t=o.$.env,Cr(o,t),xt(o,n),t=o.$.env,(s=o.$)!=null&&s.controlFlow&&os(o,o.$.controlFlow);let w=(l=o.$)==null?void 0:l.type;if(!w)try{let{expr:q,type:ne,env:pe}=sr({expr:o,type:k.type,env:t,context:{...n}});o=q,w=ne,t=pe}catch(q){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2036
- ${q}`})}if(k.isCompileTimeOnly||(w=vt({type:w,expectedType:k.type,expr:o,env:t})),!W({type:k.type,env:t},{type:w,env:t}))if(Gr(k.type))try{let{expr:q,type:ne,env:pe}=sr({expr:o,type:k.type,env:t,context:{...n}});if(W({type:k.type,env:pe},{type:ne,env:pe})){o=q,w=ne,t=pe;let ue=Tm(k.type,t);t=Xe(t,k,{...k,type:ue})}else throw p({token:r.token,errorMessage:`Incompatible types:
2071
+ Given type: ${x(m.$.type)}`});l.push(m)}let u=jn(i,Dt("Usize",o)),d=s.every(c=>!!c)?Yn(u,s):void 0;return e.$={env:t,type:u,value:d,pathCollection:[],runtimeArgExprsInOrder:l},Ze(e,!0),e}function Mf(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=lt(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function Lf(e,t){if(e.token.type==="char"){let n=Qm(e.token.value),r=qn(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function Qm(e){let t=e.slice(1,-1);if(t.length===1)return t.charCodeAt(0);if(t.length===2&&t[0]==="\\"){let n=t[1];switch(n){case"n":return 10;case"t":return 9;case"r":return 13;case"\\":return 92;case"'":return 39;case'"':return 34;case"0":return 0;case"a":return 7;case"b":return 8;case"f":return 12;case"v":return 11;default:throw new Error(`Unknown escape sequence: \\${n}`)}}else throw new Error(`Invalid char literal: ${e}`)}function Sf({expr:e,env:t,context:n}){let r=[],o=e.args;if(o.length===0)throw p({token:e.token,errorMessage:`Expected at least one element in compt_list, got ${o.length}`});let i;n.expectedType&&$t(n.expectedType.type)&&(i=n.expectedType.type.childType);for(let s=0;s<o.length;s++){let l=o[s],u=M({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw p({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
2072
+ ${T(l)}`});t=u.$.env;let d=u.$.value;if(r.push(d),!i)i=u.$.type;else if(!te({type:i,env:t},{type:u.$.type,env:t}))throw p({token:l.token,errorMessage:`Mismatched element types in compt_list. Expected element of type ${x(i)}, got ${x(u.$.type)}`})}let a=xn(i,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Af(e,t,n){let o=he(t,"Box").find(m=>m.value&&xe(m.value)&&me(m.type));if(!o||!o.value||!xe(o.value))throw new Error("Cannot find Box type constructor in environment");let i=o.value,a=i.type,s=a.parameters[0],l=le(e),u=at(a.env),{env:d}=Me({env:u,variable:{name:s.label,token:be,type:l.type,isCompileTimeOnly:!0,initializedAtToken:be,consumedAtToken:void 0,value:l,isOwningTheRcValue:!1}}),{value:c,callerEnv:f}=no({functionCalleeExpr:void 0,functionType:a,functionValue:i,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:ut()}],variadicArgs:[]},callerEnv:t,calleeEnv:d,context:n});if(!j(c)||!vt(c.value))throw new Error("Box type constructor did not return a type value");return{boxType:c.value,env:f}}function Zm(e,t,n){var r;try{let o=M({expr:e,env:t,context:n});if(!o.$)return!1;let i=o.$.value;if(xe(i))return!!he(t,"box").find(l=>l.value&&xe(l.value)&&l.value===i);if(j(i)){let s=i.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function If({expr:e,env:t,context:n}){Ce(e,A.dyn,1);let r=e.args[0],o=n.expectedType,i;if(n.expectedType&&Re(n.expectedType.type)){let h=n.expectedType.type;if(i=Sn(ut(),"",void 0,h.requiredModules,h.negativeModules),V(r)&&Zm(r.func,t,{...n})&&v(r.args[0],"=>")){let{boxType:_,env:g}=Af(i,t,n);t=g,o={type:_,env:t}}else o={type:i,env:n.expectedType.env}}else o=void 0;let a=M({expr:r,env:t,context:{...n,expectedType:o}});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
2073
+ ${T(r)}`});let s=a.$.type,l=a;if(!vt(s)&&!(X(s)&&je(s))){let{boxType:h,env:_}=Af(s,t,{...n});t=_;let g={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},$={tag:"FuncCall",func:g,args:[a],token:r.token,$:void 0},k=M({expr:$,env:t,context:{...n,expectedType:{type:h,env:t}}});if(!k.$)throw p({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
2074
+ ${T(r)}`});t=k.$.env,s=k.$.type,l=k,e.args[0]=k}else t=a.$.env;At(l,n),t=l.$.env;let u=[],d=[],c=new Set,f;if(n.expectedType&&Re(n.expectedType.type))f=n.expectedType.type;else if($n(s)){let h=s.fields[0].type;if(h.module){let _=[];for(let g of h.module.fields)g.assignedValue&&Je(g.assignedValue)&&_.push(g.assignedValue.type);f=vo(_,t,[]),t=_o({dynType:f,env:t,context:n})}else throw p({token:e.token,errorMessage:`'${A.dyn}' with Box(T) requires T to have a module. Got boxed type: ${x(h)}`})}else if(s.module){let h=[];for(let _ of s.module.fields)_.assignedValue&&Je(_.assignedValue)&&h.push(_.assignedValue.type);f=vo(h,t,[]),t=_o({dynType:f,env:t,context:n})}else throw p({token:e.token,errorMessage:`'${A.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a module. Got value type: ${x(s)}`});let m=[];if($n(s)){let h=s.fields[0].type;(X(h)||Re(h))&&m.push(...h.negativeModules??[])}for(let h of f.requiredModules)for(let _ of m)if(te({type:h,env:t},{type:_,env:t}))throw p({token:e.token,errorMessage:`Required module ${x(h)} is in the negative modules list and cannot be used.`});for(let h of f.requiredModules)if(!c.has(h))if($n(s)&&(X(s.fields[0].type)||Re(s.fields[0].type))){let _=s.fields[0].type,g=!1;for(let $ of _.requiredModules)if(te({type:h,env:t},{type:$,env:t})){let k=[];for(let E=0;E<h.fields.length;E++){let w=h.fields[E],F=$.fields.findIndex(L=>L.label===w.label);F===-1?k.push(void 0):k.push($.fields[F].assignedValue)}let b=Lr(h,k);d.push(b),u.push(b.type),c.add(h),g=!0;break}if(!g)throw p({token:e.token,errorMessage:`Required module ${x(h)} not found in SomeType's requiredModules.`})}else{let _=$n(s)?s.fields[0].type:s;if(_.module){let g=!1;for(let $ of _.module.fields)if($.assignedValue&&Je($.assignedValue)&&te({type:h,env:t},{type:$.assignedValue.type,env:t})){d.push($.assignedValue),u.push($.assignedValue.type),c.add(h),g=!0;break}if(!g)throw p({token:e.token,errorMessage:`Required module ${x(h)} is not implemented by type ${x(s)}.`})}else throw p({token:e.token,errorMessage:`Cannot find module ${x(h)} for value type ${x(s)}.`})}let y=[];for(let h of f.requiredModules){let _=u.findIndex(g=>te({type:h,env:t},{type:g,env:t}));if(_===-1)throw p({token:e.token,errorMessage:`No module value found for expected module type ${x(h)}.`});y.push(d[_])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallModuleValues:y},Ze(e,!0),e}function Nf(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),o="ComptFloat";if(n.expectedType){let a=n.expectedType.type;Lo(a)?o="F32":So(a)&&(o="F64")}let i=Dt(o,r);return e.$={env:t,value:i,type:i.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function Df(e,t,n){if(e.token.type==="integer"){let r=e.token.value.replace(/_/g,""),o=10;r.match(/^0x/i)?(o=16,r=r.slice(2)):r.match(/^0b/i)?(o=2,r=r.slice(2)):r.match(/^0o/i)&&(o=8,r=r.slice(2));let i="ComptInt";if(n.expectedType){let u=n.expectedType.type;Eo(u)?i="Usize":Co(u)?i="Isize":ir(u)?i="U8":ko(u)?i="I8":bo(u)?i="U16":wo(u)?i="I16":Fo(u)?i="U32":Vo(u)?i="I32":xo(u)?i="U64":Mo(u)&&(i="I64")}let a=i==="U64"||i==="I64"||i==="Usize"||i==="Isize",s;a||i==="ComptInt"?o===16?s=BigInt("0x"+r):o===8?s=BigInt("0o"+r):o===2?s=BigInt("0b"+r):s=BigInt(r):s=parseInt(r,o);let l=Dt(i,s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function Of(e,t){if(e.token.type==="string"){let n=dn(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function Jm({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:o,runtimeArgExprsInOrder:i}){var m;let a=e,s=e,l;if(V(a)&&v(a,":",2)){let y=a.args[0];throw p({token:y.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(m=r.expectedType)==null?void 0:m.type,d;if(u){if(!Ne(u))throw p({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
2075
+ ${x(u)}`});let y=u.fields[t];if(!y)throw p({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});d=y.type}let c=M({expr:s,env:n,context:{...r,expectedType:d?{type:d,env:n}:void 0}});if(At(c,r),!c.$)throw p({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${T(s)}`});n=c.$.env;let f=c.$.value;if(f&&j(c.$.value))throw p({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
2076
+ ${T(s)}`});return l=Tt({type:c.$.type,expectedType:void 0,expr:void 0,env:n}),i.push(c),e!==s&&(e.$={env:n,type:l,value:f,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},isCompileTimeOnly:!1,type:l,label:o.toString()},value:f,env:n}}function Xm({args:e,env:t,context:n}){let r=[],o=[],i=[];for(let l=0;l<e.length;l++){let u=e[l],{type:d,value:c,env:f}=Jm({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:i});r.push(d),o.push(c),t=f}let a=aa(r),s=o.some(l=>!l)?void 0:fi(a,o);return{type:a,value:s,env:t,runtimeArgExprsInOrder:i}}function Bf({expr:e,env:t,context:n}){if(!v(e,A.tuple))throw p({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:ne,type:ne.type,pathCollection:[]},e;let{type:r,value:o,env:i,runtimeArgExprsInOrder:a}=Xm({args:e.args,env:t,context:n});return t=i,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw p({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw p({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:o,type:r,pathCollection:[],runtimeArgExprsInOrder:a},Ze(e,!0),e}function xa({expr:e,env:t,context:n}){var c,f;if(!v(e,":",2))throw p({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],o=e.args[1],i=M({expr:o,env:t,context:{...n}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate rhs expression:
2077
+ ${T(o)}`});t=i.$.env;let a=i.$.value;if(!j(a))throw p({token:o.token,errorMessage:`Expected type for rhs, got ${T(o)}`});let s=a.value;if(Oe(s)&&Be(s.length))throw p({token:o.token,errorMessage:`Array type with inferred length '_' is not allowed in type annotations.
2078
+ Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});or(s,i.token);let l=!1;if(V(r)&&v(r,A.compt)){if(l=!0,r.args.length!==1)throw p({token:r.token,errorMessage:`Expected one argument for "compt" , got ${r.args.length}`});r=r.args[0]}if(!l&&((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&((f=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&f.type.return.isCompileTimeOnly))throw p({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!ot(r))throw p({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(En(s)&&!l)throw p({token:r.token,errorMessage:`Expected "compt" for compile-time known value binding:
2079
+ ${x(s)}`});if(rr(s)&&l)throw p({token:r.token,errorMessage:`Unexpected "compt" for ${x(s)} which can only be used at runtime.`});let u=r.token.value;if(!l&&me(s)&&ln(s))throw p({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
2080
+ ${x(s)}
2081
+
2082
+ Generic functions must be compile-time known to enable monomorphization. Consider using:
2083
+ compt(${u}) : ${x(s)}`});let{env:d}=Me({env:t,variable:{name:u,type:s,isCompileTimeOnly:l,value:l?ae(s,u):void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Ge(s)}});return t=d,r.$={env:t,type:s,pathCollection:[[u]]},e.$={env:t,type:ne.type,value:ne,pathCollection:[]},{expr:e,variableExpr:r,variableName:u}}function Ma({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var i;let o=e.token.type==="backtick_identifier"?e.token.value.slice(1,-1):e.token.value;if(o==="Type"){let a=le(ut());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Module"){let a=le(hn(1));return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="unit"){let a=le(zr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_int"){let a=le(cr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_float"){let a=le(Sr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_string"){let a=le(Rt());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="bool"){let a=le(Xe());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="usize"){let a=le(yt());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="isize"){let a=le(Ar());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u8"){let a=le(fr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i8"){let a=le(Ir());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u16"){let a=le(Nr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i16"){let a=le(Dr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u32"){let a=le(Or());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i32"){let a=le(dr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u64"){let a=le(Br());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i64"){let a=le(Ur());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="f32"){let a=le(Rr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="f64"){let a=le(mr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="char"){let a=le(Qi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="short"){let a=le(Zi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ushort"){let a=le(Ji());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="int"){let a=le(Xi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="uint"){let a=le(ea());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="long"){let a=le(ta());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ulong"){let a=le(na());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="longlong"){let a=le(ra());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ulonglong"){let a=le(oa());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="longdouble"){let a=le(ia());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="void"){let a=le(Gu());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Expr"){let a=le(Ht());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Self"&&n.SelfType){let a=le(n.SelfType);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else{let a=he(t,o);if(a.length){let s=a[a.length-1];if(!s.initializedAtToken&&r&&!me(s.type)&&!j(s.value))throw p({token:e.token,errorMessage:`Variable "${o}" is not initialized`});if(e.$={env:t,type:s.type,value:s.value,originType:s.type,variableName:s.name,pathCollection:[[s.name]]},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<l&&so(s.name,s.frameLevel,"own",e.token,n)}if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)==="async-block"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<l&&so(s.name,s.frameLevel,"own",e.token,n)}return e}else throw p({token:e.token,errorMessage:`Variable "${o}" not found.`})}}function hs(e,t){let n=`Right-hand side contains "${t}" from function.`;throw V(e)&&v(e,A.cond)?n=`Cannot assign "cond" expression to variable when all cases contain "${t}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:V(e)&&v(e,A.match)?n=`Cannot assign "match" expression to variable when all cases contain "${t}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:V(e)&&v(e,A.begin)&&(n=`Cannot assign "begin" expression to variable when it contains "${t}" statement.`),p({token:e.token,errorMessage:n})}function ey(e,t){if(Oe(e)&&Be(e.length)){let n=e.length;if(n.variableName){let r=he(t,n.variableName);if(r.length>0){let o=r[r.length-1];if(o.value&&!Be(o.value))return jn(e.childType,o.value)}}}return e}function Uf({expr:e,env:t,context:n}){var i,a,s,l,u,d,c,f,m,y,h,_;if(!v(e,"=",2))throw p({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],o=e.args[1];if(Q(r)||V(r)&&v(r,":",2)){let g;if(Q(r)){let W=Ma({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!W.$)throw p({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${T(r)}`});t=W.$.env,r=W,g=r.token.value}else{let{expr:W,variableExpr:H,variableName:se}=xa({expr:r,env:t,context:{...n}});(i=W.$)!=null&&i.env&&(t=(a=W.$)==null?void 0:a.env),r=H,g=se}let $=he(t,g);if(!$.length)throw p({token:r.token,errorMessage:`Variable ${g} not found in the environment`});let k=$[$.length-1];if(!k.isReassignable)throw p({token:r.token,errorMessage:`Cannot reassign "${g}".
2084
+ You can mutate fields (e.g., ${g}.field = value) but cannot reassign itself.`});if(o=M({expr:o,env:t,context:{...n,expectedType:{type:k.type,env:t}}}),!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${T(o)}`});t=o.$.env,wr(o,t),At(o,n),t=o.$.env,(s=o.$)!=null&&s.controlFlow&&hs(o,o.$.controlFlow);let b=(l=o.$)==null?void 0:l.type;if(!b)try{let{expr:W,type:H,env:se}=ur({expr:o,type:k.type,env:t,context:{...n}});o=W,b=H,t=se}catch(W){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2085
+ ${W}`})}if(k.isCompileTimeOnly||(b=Tt({type:b,expectedType:k.type,expr:o,env:t})),!te({type:k.type,env:t},{type:b,env:t}))if(Yr(k.type))try{let{expr:W,type:H,env:se}=ur({expr:o,type:k.type,env:t,context:{...n}});if(te({type:k.type,env:se},{type:H,env:se})){o=W,b=H,t=se;let ye=ey(k.type,t);t=et(t,k,{...k,type:ye})}else throw p({token:r.token,errorMessage:`Incompatible types:
2037
2086
  - Expected: ${x(k.type)}
2038
- - Given : ${x(w)}`})}catch{throw p({token:r.token,errorMessage:`Incompatible types:
2087
+ - Given : ${x(b)}`})}catch{throw p({token:r.token,errorMessage:`Incompatible types:
2039
2088
  - Expected: ${x(k.type)}
2040
- - Given : ${x(w)}`})}else throw p({token:r.token,errorMessage:`Incompatible types:
2089
+ - Given : ${x(b)}`})}else throw p({token:r.token,errorMessage:`Incompatible types:
2041
2090
  - Expected: ${x(k.type)}
2042
- - Given : ${x(w)}`});let $=me(t,_),b=$[$.length-1],F=(u=o.$)==null?void 0:u.value;G(F)&&!F.value.typeName?(F.value!==n.SelfType&&(F.value.typeName=_),ft(b.type)&&!b.type.baseType&&(b.type.baseType=F.value)):Fe(F)&&!F.funcName?(F.funcName=_,F.funcId+=`_${r.token.value}`):Ke(F)&&!F.type.typeName&&F.type!==n.SelfType&&(F.type.typeName=_);let M=b.type;Ve(M)&&Ve(w)&&M.selectedVariantName!==w.selectedVariantName&&(M={...M,selectedVariantName:w.selectedVariantName}),ee(M)&&ee(w)&&w.resolvedConcreteType&&(M={...M,resolvedConcreteType:w.resolvedConcreteType});let L=!1,O=k.isOwningTheSameGcValueAs;if(k.initializedAtToken){if(ee(M))throw st([{token:r.token,errorMessage:`Cannot reassign variable "${_}" of type Impl(...).
2091
+ - Given : ${x(b)}`});let E=he(t,g),w=E[E.length-1],F=(u=o.$)==null?void 0:u.value;j(F)&&!F.value.typeName?(F.value!==n.SelfType&&(F.value.typeName=g),_t(w.type)&&!w.type.baseType&&(w.type.baseType=F.value)):xe(F)&&!F.funcName?(F.funcName=g,F.funcId+=`_${r.token.value}`):Je(F)&&!F.type.typeName&&F.type!==n.SelfType&&(F.type.typeName=g);let L=w.type;Ve(L)&&Ve(b)&&L.selectedVariantName!==b.selectedVariantName&&(L={...L,selectedVariantName:b.selectedVariantName}),X(L)&&X(b)&&b.resolvedConcreteType&&(L={...L,resolvedConcreteType:b.resolvedConcreteType});let S=!1,B=k.isOwningTheSameRcValueAs;if(k.initializedAtToken){if(X(L))throw st([{token:r.token,errorMessage:`Cannot reassign variable "${g}" of type Impl(...).
2043
2092
  Impl(...) uses static dispatch and the concrete type is fixed at first assignment.
2044
- Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:k.initializedAtToken??k.token,errorMessage:"First assigned here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let oe=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;k.frameLevel<oe&&oo(k.name,k.frameLevel,"own",r.token,n)}let q=k.isCompileTimeOnly?F:void 0;if(q&&lr(q)){let oe=k.type;q=zn(oe,[...q.elements])}else if(q&&Nt(q)){let oe=k.type;q=Jn(oe,q.variantName,[...q.fields])}let ne=mr(t.modulePath,_),pe=Lo(o,t,t.modulePath),ue=pe;pe!=null&&pe.consumedAtToken&&(ue=void 0),t=Xe(t,k,{...k,id:ne,value:q,type:M,isOwningTheGcValue:qe(M),isOwningTheSameGcValueAs:ue}),L=!0}else{if(n.isEvaluatingLoopBody&&k.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:k.token,errorMessage:"Defined here:"}]);if(((d=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)==="function-body"&&k.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:k.token,errorMessage:"Defined here:"}]);let q=k.isCompileTimeOnly?F:void 0;if(q&&lr(q)){let ue=k.type;q=zn(ue,[...q.elements])}else if(q&&Nt(q)){let ue=k.type;q=Jn(ue,q.variantName,[...q.fields])}let ne=Lo(o,t,t.modulePath),pe=ne;ne!=null&&ne.consumedAtToken&&(pe=void 0),t=Xe(t,k,{...k,initializedAtToken:r.token,value:q,type:M,isOwningTheGcValue:qe(M),isOwningTheSameGcValueAs:pe})}let B=me(t,_),P=B[B.length-1];return r.$={env:t,type:P.type,value:P.isCompileTimeOnly?F:void 0,pathCollection:[[_]]},L?(e.$={env:t,value:k.value,type:k.type,pathCollection:[]},ze(e,!0,(O==null?void 0:O.frameLevel)===t.frames.length-1?O:void 0)):e.$={env:t,value:J,type:J.type,pathCollection:[]},e}else{let _=S({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!_.$)throw p({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${T(r)}`});if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&_.$.pathCollection){for(let w of _.$.pathCollection)if(w.length>0){let $=w[0];if(typeof $=="string"){let b=me(t,$);if(b.length>0){let F=b[b.length-1];oo($,F.frameLevel,"write",r.token,n)}}}}let E=_.$.type;if(o=S({expr:o,env:t,context:{...n,expectedType:{type:E,env:t}}}),!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${T(o)}`});t=o.$.env,Cr(o,t),xt(o,n),t=o.$.env;let k=(m=o.$)==null?void 0:m.type;if(!k)try{let{expr:w,type:$,env:b}=sr({expr:o,type:E,env:t,context:{...n}});o=w,k=$,t=b}catch(w){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2045
- ${w}`})}if(!W({type:E,env:t},{type:k,env:t}))throw p({token:r.token,errorMessage:`Incompatible types:
2046
- - Expected: ${x(E)}
2047
- - Given : ${x(k)}`});if(_.$.pathCollection&&_.$.pathCollection.length>0){let w=_.$.pathCollection[0];if(w&&w.length>=2){let $=w[0],b=w[1],F=me(t,$);if(F.length>0){let M=F[F.length-1];if(M.isCompileTimeOnly&&M.value){let L=M.value;if(tn(L)||ln(L)){let O=M.type,B=O.fields.findIndex(P=>P.label===b);if(B>=0&&((y=o.$)!=null&&y.value))if($e(M.type)&&M.type.isReferenceSemantics){let P=[...L.fields];P[B]=o.$.value;let q=bn(M.type,P),ne=sa(t,pe=>pe.isCompileTimeOnly&&pe.value===L);for(let pe of ne)t=Xe(t,pe,{...pe,value:q})}else{let P=[...L.fields];P[B]=o.$.value;let q;tn(L)?q=bn(O,P):q=ii(O,P),t=Xe(t,M,{...M,value:q})}}else if(lr(L)){let O=parseInt(b,10);if(!isNaN(O)&&O>=0&&O<L.elements.length&&((g=o.$)!=null&&g.value)){let B=[...L.elements];B[O]=o.$.value;let P=M.type,q=zn(P,B);t=Xe(t,M,{...M,value:q})}}else if(Nt(L)){let O=M.type,B=O.variants.find(P=>P.name===L.variantName);if(B){let P=(B.fields??[]).findIndex(q=>q.label===b);if(P>=0&&((h=o.$)!=null&&h.value)){let q=[...L.fields];q[P]=o.$.value;let ne=Jn(O,L.variantName,q);t=Xe(t,M,{...M,value:ne})}}}}}}}return e.$={env:t,value:_.$.value,type:_.$.type,pathCollection:[]},ze(e,!0),e}}function nf({expr:e,env:t,context:n}){var a;if(!v(e,A.c_include))throw p({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,o=e.args;if(e.args[0]&&j(e.args[0])){let s=e.args[0];o=e.args.slice(1);let l=S({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw p({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${T(s)}`});t=l.$.env;let u=l.$.value;if(!We(u))throw p({token:s.token,errorMessage:`Expected string for C header file argument, got ${T(s)}`});r=u.value}if(!r)throw p({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
2093
+ Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:k.initializedAtToken??k.token,errorMessage:"First assigned here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let oe=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;k.frameLevel<oe&&so(k.name,k.frameLevel,"own",r.token,n)}let W=k.isCompileTimeOnly?F:void 0;if(W&&pr(W)){let oe=k.type;W=Yn(oe,[...W.elements])}else if(W&&Ut(W)){let oe=k.type;W=er(oe,W.variantName,[...W.fields])}let H=gr(t.modulePath,g),se=Do(o,t,t.modulePath),ye=se;se!=null&&se.consumedAtToken&&(ye=void 0),t=et(t,k,{...k,id:H,value:W,type:L,isOwningTheRcValue:Ge(L),isOwningTheSameRcValueAs:ye}),S=!0}else{if(n.isEvaluatingLoopBody&&k.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:k.token,errorMessage:"Defined here:"}]);if(((d=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)==="function-body"&&k.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:k.token,errorMessage:"Defined here:"}]);let W=k.isCompileTimeOnly?F:void 0;if(W&&pr(W)){let ye=k.type;W=Yn(ye,[...W.elements])}else if(W&&Ut(W)){let ye=k.type;W=er(ye,W.variantName,[...W.fields])}let H=Do(o,t,t.modulePath),se=H;H!=null&&H.consumedAtToken&&(se=void 0),t=et(t,k,{...k,initializedAtToken:r.token,value:W,type:L,isOwningTheRcValue:Ge(L),isOwningTheSameRcValueAs:se})}let R=he(t,g),Y=R[R.length-1];return r.$={env:t,type:Y.type,value:Y.isCompileTimeOnly?F:void 0,pathCollection:[[g]]},S?(e.$={env:t,value:k.value,type:k.type,pathCollection:[]},Ze(e,!0,(B==null?void 0:B.frameLevel)===t.frames.length-1?B:void 0)):e.$={env:t,value:ne,type:ne.type,pathCollection:[]},e}else{let g=M({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!g.$)throw p({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${T(r)}`});if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&g.$.pathCollection){for(let b of g.$.pathCollection)if(b.length>0){let E=b[0];if(typeof E=="string"){let w=he(t,E);if(w.length>0){let F=w[w.length-1];so(E,F.frameLevel,"write",r.token,n)}}}}let $=g.$.type;if(o=M({expr:o,env:t,context:{...n,expectedType:{type:$,env:t}}}),!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${T(o)}`});t=o.$.env,wr(o,t),At(o,n),t=o.$.env;let k=(m=o.$)==null?void 0:m.type;if(!k)try{let{expr:b,type:E,env:w}=ur({expr:o,type:$,env:t,context:{...n}});o=b,k=E,t=w}catch(b){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2094
+ ${b}`})}if(!te({type:$,env:t},{type:k,env:t}))throw p({token:r.token,errorMessage:`Incompatible types:
2095
+ - Expected: ${x($)}
2096
+ - Given : ${x(k)}`});if(g.$.pathCollection&&g.$.pathCollection.length>0){let b=g.$.pathCollection[0];if(b&&b.length>=2){let E=b[0],w=b[1],F=he(t,E);if(F.length>0){let L=F[F.length-1];if(L.isCompileTimeOnly&&L.value){let S=L.value;if(on(S)||en(S)){let B=L.type,R=B.fields.findIndex(Y=>Y.label===w);if(R>=0&&((y=o.$)!=null&&y.value))if(we(L.type)&&L.type.isReferenceSemantics){let Y=[...S.fields];Y[R]=o.$.value;let W=Mn(L.type,Y),H=_a(t,se=>se.isCompileTimeOnly&&se.value===S);for(let se of H)t=et(t,se,{...se,value:W})}else{let Y=[...S.fields];Y[R]=o.$.value;let W;on(S)?W=Mn(B,Y):W=fi(B,Y),t=et(t,L,{...L,value:W})}}else if(pr(S)){let B=parseInt(w,10);if(!isNaN(B)&&B>=0&&B<S.elements.length&&((h=o.$)!=null&&h.value)){let R=[...S.elements];R[B]=o.$.value;let Y=L.type,W=Yn(Y,R);t=et(t,L,{...L,value:W})}}else if(Ut(S)){let B=L.type,R=B.variants.find(Y=>Y.name===S.variantName);if(R){let Y=(R.fields??[]).findIndex(W=>W.label===w);if(Y>=0&&((_=o.$)!=null&&_.value)){let W=[...S.fields];W[Y]=o.$.value;let H=er(B,S.variantName,W);t=et(t,L,{...L,value:H})}}}}}}}return e.$={env:t,value:g.$.value,type:g.$.type,pathCollection:[]},Ze(e,!0),e}}function Rf({expr:e,env:t,context:n}){var a;if(!v(e,A.c_include))throw p({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,o=e.args;if(e.args[0]&&Q(e.args[0])){let s=e.args[0];o=e.args.slice(1);let l=M({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw p({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${T(s)}`});t=l.$.env;let u=l.$.value;if(!Qe(u))throw p({token:s.token,errorMessage:`Expected string for C header file argument, got ${T(s)}`});r=u.value}if(!r)throw p({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
2048
2097
 
2049
- c_include "<stdio.h>" ...;`});let i=[];for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:d}=Ko({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(i.find(m=>m.label===u.label))throw p({token:V(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(u.type={...u.type,isExtern:"c",cInclude:r},!u.isCompileTimeOnly)throw p({token:l.token,errorMessage:`Expected compile-time only field for extern module, got ${T(l)}`});i.push(u),t=d;let{env:f}=we({env:t,variable:{name:u.label,type:u.type,value:u.assignedValue??re(u.type,u.label),isCompileTimeOnly:u.isCompileTimeOnly,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});t=f}return e.$={env:t,value:J,type:J.type,pathCollection:[]},e.func.$={env:t,value:J,type:J.type,pathCollection:[]},e}function rf({expr:e,env:t,context:n}){var d,c,f,m,y,g,h;if(!v(e,A.cond))throw p({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw p({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let o=[];for(let _=0;_<r.length;_++){let E=r[_];if(!V(E)||!v(E,"=>",2))throw p({token:E.token,errorMessage:`Expected => for cond statement, got ${E.tag}`});let k=E.args[0],w=E.args[1],$=t;o.push({condExpr:k,caseBodyExpr:w,caseEnv:$})}let i=[];for(let _=0;_<o.length;_++){let{condExpr:E,caseBodyExpr:k,caseEnv:w}=o[_],$=Et({expr:E,env:w,context:{...n,expectedType:{type:Qe(),env:w}},variablesToAdd:[]});if(!$.$)throw p({token:$.token,errorMessage:`Failed to evaluate condition expression: ${T($)}`});if(!vn($.$.type))throw p({token:$.token,errorMessage:`Expected bool for cond statement, got ${T($)}`});let b=$.$.value,F=$.$.env;if(_===o.length-1&&!(et(b)&&b.value===!0))throw p({token:$.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(i.push({condExpr:$,caseBodyExpr:k,caseEnv:F,condValue:b}),et(b)&&b.value===!0)break}let a=-1;for(let _=0;_<i.length;_++){let{condValue:E}=i[_];if(et(E)&&E.value===!0&&i.slice(0,_).every(({condValue:k})=>et(k)&&k.value===!1)){a=_;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:_,caseEnv:E,condExpr:k}=i[a];k.$&&(k.$.caseExecuted=!0);let w=Et({expr:_,env:E,context:{...n},variablesToAdd:[]});if((d=w.$)!=null&&d.controlFlow)return e.$={env:w.$.env,type:((c=n.expectedType)==null?void 0:c.type)??w.$.type,value:w.$.value,pathCollection:w.$.pathCollection,controlFlow:w.$.controlFlow},e;{if(!((f=w.$)!=null&&f.type))throw p({token:w.token,errorMessage:`Expected type for cond statement, got ${T(w)}`});s.push(w),l.push(w.$.value),u={type:w.$.type,env:w.$.env},t=Mo(t,s.filter(b=>b.$&&b.$.controlFlow!=="return"));let $;return $=l[0],e.$={env:t,type:((m=n.expectedType)==null?void 0:m.type)??u.type,value:$,pathCollection:[]},ze(e,!0),e}}else{let _=!1,E=[],k=[];for(let{condExpr:$,condValue:b,caseBodyExpr:F,caseEnv:M}of i){if(et(b)&&b.value===!1)continue;$.$&&($.$.caseExecuted=!0);let L=Et({expr:F,env:M,context:{...n,isExecuting:!1},variablesToAdd:[]});if((y=L.$)!=null&&y.controlFlow){E.push(L.$.controlFlow),L.$.controlFlow==="return"&&k.push(L);continue}else _=!0;if(!((g=L.$)!=null&&g.type))throw p({token:L.token,errorMessage:`Expected type for cond statement, got ${T(L)}`});if(s.push(L),l.push(L.$.value),n.expectedType&&!W(n.expectedType,{type:L.$.type,env:L.$.env}))throw p({token:L.token,errorMessage:`Incompatible type with expected type:
2098
+ c_include "<stdio.h>" ...;`});let i=[];for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:d}=ei({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(i.find(m=>m.label===u.label))throw p({token:V(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(u.type={...u.type,isExtern:"c",cInclude:r},!u.isCompileTimeOnly)throw p({token:l.token,errorMessage:`Expected compile-time only field for extern module, got ${T(l)}`});i.push(u),t=d;let{env:f}=Me({env:t,variable:{name:u.label,type:u.type,value:u.assignedValue??ae(u.type,u.label),isCompileTimeOnly:u.isCompileTimeOnly,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=f}return e.$={env:t,value:ne,type:ne.type,pathCollection:[]},e.func.$={env:t,value:ne,type:ne.type,pathCollection:[]},e}function Pf({expr:e,env:t,context:n}){var d,c,f,m,y,h,_;if(!v(e,A.cond))throw p({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw p({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let o=[];for(let g=0;g<r.length;g++){let $=r[g];if(!V($)||!v($,"=>",2))throw p({token:$.token,errorMessage:`Expected => for cond statement, got ${$.tag}`});let k=$.args[0],b=$.args[1],E=t;o.push({condExpr:k,caseBodyExpr:b,caseEnv:E})}let i=[];for(let g=0;g<o.length;g++){let{condExpr:$,caseBodyExpr:k,caseEnv:b}=o[g],E=Q($)?M({expr:$,env:b,context:{...n,expectedType:{type:Xe(),env:b}}}):kt({expr:$,env:b,context:{...n,expectedType:{type:Xe(),env:b}},variablesToAdd:[]});if(!E.$)throw p({token:E.token,errorMessage:`Failed to evaluate condition expression: ${T(E)}`});if(!Cn(E.$.type))throw p({token:E.token,errorMessage:`Expected bool for cond statement, got ${T(E)}`});let w=E.$.value,F=E.$.env;if(g===o.length-1&&!(nt(w)&&w.value===!0))throw p({token:E.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(i.push({condExpr:E,caseBodyExpr:k,caseEnv:F,condValue:w}),nt(w)&&w.value===!0)break}let a=-1;for(let g=0;g<i.length;g++){let{condValue:$}=i[g];if(nt($)&&$.value===!0&&i.slice(0,g).every(({condValue:k})=>nt(k)&&k.value===!1)){a=g;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:g,caseEnv:$,condExpr:k}=i[a];k.$&&(k.$.caseExecuted=!0);let b=kt({expr:g,env:$,context:{...n},variablesToAdd:[]});if((d=b.$)!=null&&d.controlFlow)return e.$={env:b.$.env,type:((c=n.expectedType)==null?void 0:c.type)??b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow},e;{if(!((f=b.$)!=null&&f.type))throw p({token:b.token,errorMessage:`Expected type for cond statement, got ${T(b)}`});s.push(b),l.push(b.$.value),u={type:b.$.type,env:b.$.env},t=Io(t,s.filter(w=>w.$&&w.$.controlFlow!=="return"));let E;return E=l[0],e.$={env:t,type:((m=n.expectedType)==null?void 0:m.type)??u.type,value:E,pathCollection:[]},Ze(e,!0),e}}else{let g=!1,$=[],k=[];for(let{condExpr:E,condValue:w,caseBodyExpr:F,caseEnv:L}of i){if(nt(w)&&w.value===!1)continue;E.$&&(E.$.caseExecuted=!0);let S=kt({expr:F,env:L,context:{...n,isExecuting:!1},variablesToAdd:[]});if((y=S.$)!=null&&y.controlFlow){$.push(S.$.controlFlow),S.$.controlFlow==="return"&&k.push(S);continue}else g=!0;if(!((h=S.$)!=null&&h.type))throw p({token:S.token,errorMessage:`Expected type for cond statement, got ${T(S)}`});if(s.push(S),l.push(S.$.value),n.expectedType&&!te(n.expectedType,{type:S.$.type,env:S.$.env}))throw p({token:S.token,errorMessage:`Incompatible type with expected type:
2050
2099
  - Expected: ${x(n.expectedType.type)}
2051
- - Actual : ${x(L.$.type)}`});if(!L.$.controlFlow){if(!u)u={type:L.$.type,env:L.$.env};else if(!W({type:u.type,env:u.env},{type:L.$.type,env:L.$.env}))if(W({type:vt({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:L.$.type,env:L.$.env}))u={type:L.$.type,env:L.$.env};else throw p({token:L.token,errorMessage:`Incompatible types:
2100
+ - Actual : ${x(S.$.type)}`});if(!S.$.controlFlow){if(!u)u={type:S.$.type,env:S.$.env};else if(!te({type:u.type,env:u.env},{type:S.$.type,env:S.$.env}))if(te({type:Tt({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:S.$.type,env:S.$.env}))u={type:S.$.type,env:S.$.env};else throw p({token:S.token,errorMessage:`Incompatible types:
2052
2101
  - Previous: ${x(u.type)}
2053
- - Current : ${x(L.$.type)}`})}}let w;if(E.every($=>$==="return")?w="return":E.every($=>$==="break")?w="break":E.every($=>$==="continue")?w="continue":n.isEvaluatingLoopBody?E.find($=>$==="continue")?w="continue":E.find($=>$==="break")?w="break":E.find($=>$==="return")&&(w="return"):w=void 0,_||!w){if(_&&!u)throw p({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:J.type,env:t}),t=Mo(t,s.filter(b=>b.$&&b.$.controlFlow!=="return"));let $;return l.some(b=>b===void 0)?$=void 0:$=re(u.type),e.$={env:t,type:((h=n.expectedType)==null?void 0:h.type)??u.type,value:$,pathCollection:[]},ze(e,!0),e}else{if(E.length===0)throw p({token:e.token,errorMessage:"No control flows found but expected some."});if(w==="return"){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let $;if(n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?$=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&($=n.expectedType.type),!$)throw p({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:$,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&ta(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?re($):void 0,pathCollection:[],controlFlow:"return"}}else if(w==="break"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"break"}}else if(w==="continue"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"continue"}}return e}}}function of({expr:e,env:t,context:n}){var a;if(!v(e,A.extern))throw p({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",o=e.args;if(e.args[0]&&j(e.args[0])){let s=e.args[0];o=e.args.slice(1);let l=S({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw p({token:s.token,errorMessage:`Failed to evaluate language argument: ${T(s)}`});t=l.$.env;let u=l.$.value;if(!We(u))throw p({token:s.token,errorMessage:`Expected string for language argument, got ${T(s)}`});if(u.value.toLocaleLowerCase()==="yo")r="yo";else if(u.value.toLocaleLowerCase()==="c")r="c";else throw p({token:s.token,errorMessage:`Unsupported language "${u.value}" for extern, expected "c" or "yo"`})}let i=[];for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:d}=Ko({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(i.find(m=>m.label===u.label))throw p({token:V(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(u.type={...u.type,isExtern:r,externName:u.label},!u.isCompileTimeOnly)throw p({token:l.token,errorMessage:`Expected compile-time only field for extern module, got ${T(l)}`});i.push(u),t=d;let{env:f}=we({env:t,variable:{name:u.label,type:u.type,value:u.assignedValue??re(u.type,u.label),isCompileTimeOnly:u.isCompileTimeOnly,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});t=f}return e.$={env:t,value:J,type:J.type,pathCollection:[]},e.func.$={env:t,value:J,type:J.type,pathCollection:[]},e}var is=require("fs"),On=Kn(require("path"));function af({expr:e,env:t,context:n,stdPath:r}){var d;if(!v(e,A.import,1))throw p({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
2054
- ${T(e)}`});let o=e.args[0],a=(d=S({expr:o,env:t,context:{...n}}).$)==null?void 0:d.value;if(!We(a))throw p({token:o.token,errorMessage:`Expected compt_string for module path, got:
2055
- ${T(o)}`});let s=a.value;if(s.startsWith("std/")?s=On.default.relative(On.default.dirname(t.modulePath.replace(/^file:\/\//,"")),On.default.resolve(r,s.replace("std/","./"))):s==="std"&&(s=On.default.relative(On.default.dirname(t.modulePath.replace(/^file:\/\//,"")),On.default.resolve(r,"./index.yo"))),!s.startsWith("."))throw p({token:o.token,errorMessage:`Only local relative path is supported for now:
2102
+ - Current : ${x(S.$.type)}`})}}let b;if($.every(E=>E==="return")?b="return":$.every(E=>E==="break")?b="break":$.every(E=>E==="continue")?b="continue":n.isEvaluatingLoopBody?$.find(E=>E==="continue")?b="continue":$.find(E=>E==="break")?b="break":$.find(E=>E==="return")&&(b="return"):b=void 0,g||!b){if(g&&!u)throw p({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:ne.type,env:t}),t=Io(t,s.filter(w=>w.$&&w.$.controlFlow!=="return"));let E;return l.some(w=>w===void 0)?E=void 0:E=ae(u.type),e.$={env:t,type:((_=n.expectedType)==null?void 0:_.type)??u.type,value:E,pathCollection:[]},Ze(e,!0),e}else{if($.length===0)throw p({token:e.token,errorMessage:"No control flows found but expected some."});if(b==="return"){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let E;if(n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?E=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(E=n.expectedType.type),!E)throw p({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:E,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&pa(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ae(E):void 0,pathCollection:[],controlFlow:"return"}}else if(b==="break"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"break"}}else if(b==="continue"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"continue"}}return e}}}function zf({expr:e,env:t,context:n}){var a;if(!v(e,A.extern))throw p({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",o=e.args;if(e.args[0]&&Q(e.args[0])){let s=e.args[0];o=e.args.slice(1);let l=M({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw p({token:s.token,errorMessage:`Failed to evaluate language argument: ${T(s)}`});t=l.$.env;let u=l.$.value;if(!Qe(u))throw p({token:s.token,errorMessage:`Expected string for language argument, got ${T(s)}`});if(u.value.toLocaleLowerCase()==="yo")r="yo";else if(u.value.toLocaleLowerCase()==="c")r="c";else throw p({token:s.token,errorMessage:`Unsupported language "${u.value}" for extern, expected "c" or "yo"`})}let i=[];for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:d}=ei({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(i.find(m=>m.label===u.label))throw p({token:V(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(u.type={...u.type,isExtern:r,externName:u.label},!u.isCompileTimeOnly)throw p({token:l.token,errorMessage:`Expected compile-time only field for extern module, got ${T(l)}`});i.push(u),t=d;let{env:f}=Me({env:t,variable:{name:u.label,type:u.type,value:u.assignedValue??ae(u.type,u.label),isCompileTimeOnly:u.isCompileTimeOnly,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=f}return e.$={env:t,value:ne,type:ne.type,pathCollection:[]},e.func.$={env:t,value:ne,type:ne.type,pathCollection:[]},e}var vs=require("fs"),Rn=zn(require("path"));function Gf({expr:e,env:t,context:n,stdPath:r}){var d;if(!v(e,A.import,1))throw p({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
2103
+ ${T(e)}`});let o=e.args[0],a=(d=M({expr:o,env:t,context:{...n}}).$)==null?void 0:d.value;if(!Qe(a))throw p({token:o.token,errorMessage:`Expected compt_string for module path, got:
2104
+ ${T(o)}`});let s=a.value;if(s.startsWith("std/")?s=Rn.default.relative(Rn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Rn.default.resolve(r,s.replace("std/","./"))):s==="std"&&(s=Rn.default.relative(Rn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Rn.default.resolve(r,"./index.yo"))),!s.startsWith("."))throw p({token:o.token,errorMessage:`Only local relative path is supported for now:
2056
2105
  ${T(e)}
2057
- ${s}`});let l="file://"+On.default.resolve(On.default.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!On.default.extname(l)&&(l=l+".yo",!(0,is.existsSync)(l.replace(/^file:\/\//,"")))){let c=On.default.join(l.replace(/^file:\/\//,"").replace(/\.yo$/,""),"index.yo");if((0,is.existsSync)(c))l="file://"+c;else throw p({token:o.token,errorMessage:`Module not found: tried "${l}" and "${c}"`})}if(!n.loadModule)throw p({token:o.token,errorMessage:"Module loader is not provided in the context."});try{let{moduleValue:c}=n.loadModule(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}catch(c){throw p({token:o.token,errorMessage:`Failed to import module "${s}":
2058
- ${c instanceof Jt?c.toString():c instanceof Error?c.message:String(c)}`})}}function as({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:o,lhs:i,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!He(o),d=e.token.value;if(u&&d!=="_")throw p({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${d}"`});if(ot(o)&&t.length!==1)throw p({token:i.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw p({token:i.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let c={};for(let m=0;m<t.length;m++){let y=t[m],g=m,h,_=n[g],E,k,w,$;if(V(y)&&v(y,":",2)&&y.args[0].token.value==="..."&&y.args[1].token.value==="..."||j(y)&&y.token.value==="..."){if(ot(o))throw p({token:y.token,errorMessage:`Cannot destructure union type with _, got ${x(o)}`});for(let b=0;b<n.length;b++){let F=n[b];if(c[F.label])continue;c[F.label]={label:F.label,variableName:F.label,type:F.type};let M=ln(r)||tn(r)||Ke(r)||Nt(r)?r.fields[b]:void 0;if(!M&&s)throw p({token:y.token,errorMessage:`Destructuring field "${F.label}" is not defined in compile-time only context.`});let{env:L}=we({env:a,variable:{name:F.label,value:M,type:F.type,isCompileTimeOnly:s,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheGcValue:!1}});a=L}y.$={env:a,type:o,value:r,pathCollection:[]};continue}else if(V(y)&&v(y,":",2)){let b=y.args[0],F=y.args[1];if(!j(b)||!nt(b))throw p({token:b.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${T(b)}`});w=b;let M=w.token.value,L=n.findIndex(B=>B.label===M);if(L===-1)throw p({token:y.token,errorMessage:`Label "${M}" being destructured not found.`});g=L,_=n[g];let O;if((ln(r)||tn(r)||Ke(r)||Nt(r))&&(O=r.fields[g]),h=O,j(F)&&nt(F))$=F,E=F.token.value,k=F.token;else throw p({token:F.token,errorMessage:`Nested destructuring is not supported:
2106
+ ${s}`});let l="file://"+Rn.default.resolve(Rn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!Rn.default.extname(l)&&(l=l+".yo",!(0,vs.existsSync)(l.replace(/^file:\/\//,"")))){let c=Rn.default.join(l.replace(/^file:\/\//,"").replace(/\.yo$/,""),"index.yo");if((0,vs.existsSync)(c))l="file://"+c;else throw p({token:o.token,errorMessage:`Module not found: tried "${l}" and "${c}"`})}if(!n.loadModule)throw p({token:o.token,errorMessage:"Module loader is not provided in the context."});try{let{moduleValue:c}=n.loadModule(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}catch(c){throw p({token:o.token,errorMessage:`Failed to import module "${s}":
2107
+ ${c instanceof Gt?c.toString():c instanceof Error?c.message:String(c)}`})}}function $s({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:o,lhs:i,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!Ne(o),d=e.token.value;if(u&&d!=="_")throw p({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${d}"`});if(pt(o)&&t.length!==1)throw p({token:i.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw p({token:i.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let c={};for(let m=0;m<t.length;m++){let y=t[m],h=m,_,g=n[h],$,k,b,E;if(V(y)&&v(y,":",2)&&y.args[0].token.value==="..."&&y.args[1].token.value==="..."||Q(y)&&y.token.value==="..."){if(pt(o))throw p({token:y.token,errorMessage:`Cannot destructure union type with _, got ${x(o)}`});for(let w=0;w<n.length;w++){let F=n[w];if(c[F.label])continue;c[F.label]={label:F.label,variableName:F.label,type:F.type};let L=en(r)||on(r)||Je(r)||Ut(r)?r.fields[w]:void 0;if(!L&&s)throw p({token:y.token,errorMessage:`Destructuring field "${F.label}" is not defined in compile-time only context.`});let{env:S}=Me({env:a,variable:{name:F.label,value:L,type:F.type,isCompileTimeOnly:s,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=S}y.$={env:a,type:o,value:r,pathCollection:[]};continue}else if(V(y)&&v(y,":",2)){let w=y.args[0],F=y.args[1];if(!Q(w)||!ot(w))throw p({token:w.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${T(w)}`});b=w;let L=b.token.value,S=n.findIndex(R=>R.label===L);if(S===-1)throw p({token:y.token,errorMessage:`Label "${L}" being destructured not found.`});h=S,g=n[h];let B;if((en(r)||on(r)||Je(r)||Ut(r))&&(B=r.fields[h]),_=B,Q(F)&&ot(F))E=F,$=F.token.value,k=F.token;else throw p({token:F.token,errorMessage:`Nested destructuring is not supported:
2059
2108
 
2060
- ${T(F)}`});if(c[_.label])throw p({token:y.token,errorMessage:`Label "${M}" being destructured already exists.`});c[_.label]={label:_.label,variableName:E,type:_.type}}else{if(V(y))throw p({token:y.token,errorMessage:`Nested destructuring is not supported:
2109
+ ${T(F)}`});if(c[g.label])throw p({token:y.token,errorMessage:`Label "${L}" being destructured already exists.`});c[g.label]={label:g.label,variableName:$,type:g.type}}else{if(V(y))throw p({token:y.token,errorMessage:`Nested destructuring is not supported:
2061
2110
 
2062
- ${T(y)}`});if(j(y)&&nt(y)){if(ot(o))throw p({token:y.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${x(o)}`});if(c[_.label])throw p({token:y.token,errorMessage:`Label "${_.label}" being destructured already exists.`});c[_.label]={label:_.label,variableName:y.token.value,type:_.type},(ln(r)||tn(r)||Nt(r)||Ke(r))&&(h=r.fields[g]),E=y.token.value,k=y.token}else throw p({token:y.token,errorMessage:`Unsupported destructuring pattern for: ${T(y)}`})}if(E&&k){if(!h&&s)throw p({token:y.token,errorMessage:`Destructuring field "${E}" is not defined in compile-time only context.`});let{env:b}=we({env:a,variable:{name:E,type:_.type,isCompileTimeOnly:s,value:h,token:k,initializedAtToken:k,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheGcValue:!1}});a=b,y.$={env:a,type:_.type,value:h,pathCollection:[]},w&&(w.$={env:a,type:_.type,value:h,pathCollection:[]}),$&&($.$={env:a,type:_.type,value:h,pathCollection:[]})}}let f=[];for(let m in c){let y=c[m];f.push({label:y.label,type:y.type,variableName:y.variableName})}return{env:a,runtimeDestructurings:f}}function sf({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:o}){var s;if(!((s=t.$)!=null&&s.type))throw p({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${T(t)}`});let i=t.$.type,a=t.$.value;if(($e(i)||ot(i)||Ee(i))&&V(e))return as({lhsFunc:e.func,lhsFields:e.args,rhsFields:i.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:j(t)});if(He(i)&&V(e)&&v(e,A.tuple))return as({lhsFunc:e.func,lhsFields:e.args,rhsFields:i.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:j(t)});if(Ve(i)&&V(e)){let l=i.selectedVariantName;if(!l)throw p({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${x(i)}`});let u=i.variants.find(d=>d.name===l);if(!u)throw p({token:t.token,errorMessage:`Expected enum variant "${l}" to be defined, got ${x(i)}`});if(!u.fields)throw p({token:t.token,errorMessage:`Cannot destructure enum variant "${l}" without fields, got ${x(i)}`});return as({lhsFunc:e.func,lhsFields:e.args,rhsFields:u.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:j(t)})}throw He(i)||$e(i)||ot(i)||Ee(i)?p({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
2111
+ ${T(y)}`});if(Q(y)&&ot(y)){if(pt(o))throw p({token:y.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${x(o)}`});if(c[g.label])throw p({token:y.token,errorMessage:`Label "${g.label}" being destructured already exists.`});c[g.label]={label:g.label,variableName:y.token.value,type:g.type},(en(r)||on(r)||Ut(r)||Je(r))&&(_=r.fields[h]),$=y.token.value,k=y.token}else throw p({token:y.token,errorMessage:`Unsupported destructuring pattern for: ${T(y)}`})}if($&&k){if(!_&&s)throw p({token:y.token,errorMessage:`Destructuring field "${$}" is not defined in compile-time only context.`});let{env:w}=Me({env:a,variable:{name:$,type:g.type,isCompileTimeOnly:s,value:_,token:k,initializedAtToken:k,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=w,y.$={env:a,type:g.type,value:_,pathCollection:[]},b&&(b.$={env:a,type:g.type,value:_,pathCollection:[]}),E&&(E.$={env:a,type:g.type,value:_,pathCollection:[]})}}let f=[];for(let m in c){let y=c[m];f.push({label:y.label,type:y.type,variableName:y.variableName})}return{env:a,runtimeDestructurings:f}}function qf({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:o}){var s;if(!((s=t.$)!=null&&s.type))throw p({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${T(t)}`});let i=t.$.type,a=t.$.value;if((we(i)||pt(i)||Fe(i))&&V(e))return $s({lhsFunc:e.func,lhsFields:e.args,rhsFields:i.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:Q(t)});if(Ne(i)&&V(e)&&v(e,A.tuple))return $s({lhsFunc:e.func,lhsFields:e.args,rhsFields:i.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:Q(t)});if(Ve(i)&&V(e)){let l=i.selectedVariantName;if(!l)throw p({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${x(i)}`});let u=i.variants.find(d=>d.name===l);if(!u)throw p({token:t.token,errorMessage:`Expected enum variant "${l}" to be defined, got ${x(i)}`});if(!u.fields)throw p({token:t.token,errorMessage:`Cannot destructure enum variant "${l}" without fields, got ${x(i)}`});return $s({lhsFunc:e.func,lhsFields:e.args,rhsFields:u.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:Q(t)})}throw Ne(i)||we(i)||pt(i)||Fe(i)?p({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
2063
2112
 
2064
2113
  ${T(e)}`}):p({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
2065
2114
 
2066
- ${x(i)}`})}function lf({expr:e,env:t,context:n}){var a,s,l,u,d,c,f,m,y,g,h;if(!v(e,":=",2)&&!v(e,"::",2))throw p({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=v(e,"::");if(!r&&((a=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:a.kind)==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw p({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],i=e.args[1];if(V(o)&&v(o,":"))throw p({token:o.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
2067
- (${T(o)}) = ${T(i)}`});if(i=S({expr:i,env:t,context:{...n,expectedType:void 0}}),(s=i.$)!=null&&s.env&&(t=(l=i.$)==null?void 0:l.env),(u=i.$)!=null&&u.type&&tr(i.$.type,i.token),(d=i.$)!=null&&d.controlFlow&&os(i,i.$.controlFlow),j(o)){if(Cr(i,t),xt(i,{...n}),(c=i.$)!=null&&c.env&&(t=(f=i.$)==null?void 0:f.env),!nt(o))throw p({token:o.token,errorMessage:`Invalid assignment to ${o.token.value}, expected identifier or operator`});let _=(m=i.$)==null?void 0:m.type;if((y=o.$)!=null&&y.type){try{let{expr:F,type:M,env:L}=sr({expr:i,type:(g=o.$)==null?void 0:g.type,env:t,context:{...n}});i=F,_=M,t=L}catch(F){throw p({token:i.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${T(i)}
2068
- ${F}`})}if(!W({type:o.$.type,env:t},{type:_,env:t}))throw p({token:o.token,errorMessage:`Incompatible types:
2115
+ ${x(i)}`})}function Yf({expr:e,env:t,context:n}){var a,s,l,u,d,c,f,m,y,h,_;if(!v(e,":=",2)&&!v(e,"::",2))throw p({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=v(e,"::");if(!r&&((a=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:a.kind)==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw p({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],i=e.args[1];if(V(o)&&v(o,":"))throw p({token:o.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
2116
+ (${T(o)}) = ${T(i)}`});if(i=M({expr:i,env:t,context:{...n,expectedType:void 0}}),(s=i.$)!=null&&s.env&&(t=(l=i.$)==null?void 0:l.env),(u=i.$)!=null&&u.type&&or(i.$.type,i.token),(d=i.$)!=null&&d.controlFlow&&hs(i,i.$.controlFlow),Q(o)){if(wr(i,t),At(i,{...n}),(c=i.$)!=null&&c.env&&(t=(f=i.$)==null?void 0:f.env),!ot(o))throw p({token:o.token,errorMessage:`Invalid assignment to ${o.token.value}, expected identifier or operator`});let g=(m=i.$)==null?void 0:m.type;if((y=o.$)!=null&&y.type){try{let{expr:F,type:L,env:S}=ur({expr:i,type:(h=o.$)==null?void 0:h.type,env:t,context:{...n}});i=F,g=L,t=S}catch(F){throw p({token:i.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${T(i)}
2117
+ ${F}`})}if(!te({type:o.$.type,env:t},{type:g,env:t}))throw p({token:o.token,errorMessage:`Incompatible types:
2069
2118
  - Defined: ${x(o.$.type)}
2070
- - Given : ${x(_)}`})}else{if(!_)throw p({token:i.token,errorMessage:`Failed to evaluate, got ${T(i)}`});let F=_;r||(F=vt({type:_,expectedType:void 0,expr:i,env:t})),o.$={...o.$,env:t,type:F,pathCollection:[]}}if(!r&&hn(o.$.type))throw p({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
2071
- ${T(e)}`});if(r&&er(o.$.type))throw p({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${x(o.$.type)}" which can only be used at the runtime:
2072
- ${T(e)}`});let E=(h=i.$)==null?void 0:h.value;if(G(E)&&!E.value.typeName&&E.value!==n.SelfType?E.value.typeName=o.token.value:Fe(E)&&!E.funcName?(E.funcName=o.token.value,E.funcId+=`_${o.token.value}`):Ke(E)&&!E.type.typeName&&E.type!==n.SelfType&&(E.type.typeName=o.token.value),!E&&r)throw p({token:o.token,errorMessage:`Expected compile-time value for "${o.token.value}".
2119
+ - Given : ${x(g)}`})}else{if(!g)throw p({token:i.token,errorMessage:`Failed to evaluate, got ${T(i)}`});let F=g;r||(F=Tt({type:g,expectedType:void 0,expr:i,env:t})),o.$={...o.$,env:t,type:F,pathCollection:[]}}if(!r&&En(o.$.type))throw p({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
2120
+ ${T(e)}`});if(r&&rr(o.$.type))throw p({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${x(o.$.type)}" which can only be used at the runtime:
2121
+ ${T(e)}`});let $=(_=i.$)==null?void 0:_.value;if(j($)&&!$.value.typeName&&$.value!==n.SelfType?$.value.typeName=o.token.value:xe($)&&!$.funcName?($.funcName=o.token.value,$.funcId+=`_${o.token.value}`):Je($)&&!$.type.typeName&&$.type!==n.SelfType&&($.type.typeName=o.token.value),!$&&r)throw p({token:o.token,errorMessage:`Expected compile-time value for "${o.token.value}".
2073
2122
  Got runtime value. Please consider using ":=" instead of "::":
2074
- ${T(i)}`});o.$={...o.$,env:t,type:o.$.type,value:r?E??re(o.$.type,o.token.value):void 0,pathCollection:[]};let k=o.$.type;ee(k)&&_&&ee(_)&&_.resolvedConcreteType&&(k={...k,resolvedConcreteType:_.resolvedConcreteType},o.$.type=k);let w=Lo(i,t,t.modulePath),$=w;w!=null&&w.consumedAtToken&&($=void 0);let{env:b}=we({env:t,variable:{name:o.token.value,type:k,isCompileTimeOnly:r,value:o.$.value,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheGcValue:qe(k),isOwningTheSameGcValueAs:$,isReassignable:!0}});return t=b,o.$.env=t,e.$={env:t,value:J,type:J.type,pathCollection:[]},e}else{let{env:_,runtimeDestructurings:E}=sf({lhs:o,rhs:i,env:t,isCompileTimeOnly:r,context:{...n}});return t=_,e.$={env:t,value:J,type:J.type,pathCollection:[],runtimeDestructurings:E},e}}function uf({expr:e,env:t,context:n}){var k,w,$,b,F,M,L,O,B,P,q;if(!v(e,A.match))throw p({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw p({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let o=r[0],i=Et({expr:o,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${T(o)}`});t=i.$.env;let a=i.$.type,s=i.$.value,l,u;if(De(a)?(u=a.childType,l=a.tag):u=a,!Ve(u))throw p({token:o.token,errorMessage:`Expected enum type for match expression, got ${a?x(a):"unknown type"}`});let d=r.slice(1),c=[],f,m=new Set,y=!1,g=!1,h=[],_=[];for(let ne=0;ne<d.length;ne++){let pe=d[ne],ue=t;if(!V(pe)||!v(pe,"=>",2))throw p({token:pe.token,errorMessage:`Expected ":" for match pattern, got ${T(pe)}`});let oe=pe.args[0],ye=pe.args[1];if(V(oe)&&v(oe,".",1)||en(oe,"_")){if(g)throw p({token:oe.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ge;if(V(oe)){if(ge=oe.args[0],!j(ge))throw p({token:oe.token,errorMessage:`Expected identifier for enum variant, got ${T(ge)}`})}else g=!0,ge=oe;let Me=ge.token.value,Se=u.variants.find(te=>te.name===Me);if(!Se&&Me!=="_")throw p({token:oe.token,errorMessage:`Enum variant "${Me}" not found in ${x(u)}`});if(Se&&Se.fields&&Se.fields.length>0)throw p({token:oe.token,errorMessage:`Enum variant "${Me}" has ${Se.fields.length} field(s) and must be destructured. Use .${Me}(...) instead of .${Me}`});if(m.add(Me),Me!=="_"&&Nt(s)&&s.variantName!==Me)continue;let Re={...u,selectedVariantName:Me==="_"?void 0:Me};ge.$={env:ue,type:Re,value:void 0,pathCollection:[]};let Te=Re;l&&l==="Ptr"&&(Te=hr(Re));let be=ye;if(ue=ut(ue),i.$.variableName){let te=i.$.variableName;if(me(ue,te).length===0){let{env:ve}=we({env:ue,variable:{name:te,type:Te,isCompileTimeOnly:!1,value:i.$.value,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=ve}}oe.$={env:ue,type:Te,value:void 0,pathCollection:[],caseExecuted:!0};let I=Et({expr:be,env:ue,context:{...n,isExecuting:Nt(s)&&s.variantName===Me},variablesToAdd:[]});if(!((k=I.$)!=null&&k.type))throw p({token:be.token,errorMessage:`Expected type for match result expression, got ${T(be)}`});let U=Ct(I.$.env,!0);if(ue=U,I.$={...I.$,env:U},s===void 0&&I.$&&(I.$.value=void 0),I.$.controlFlow?(h.push(I.$.controlFlow),I.$.controlFlow==="return"&&_.push(I),s&&Nt(s)?e.$={env:I.$.env,type:((w=n.expectedType)==null?void 0:w.type)??I.$.type,value:I.$.value,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow}:s===void 0&&(e.$={env:I.$.env,type:(($=n.expectedType)==null?void 0:$.type)??I.$.type,value:void 0,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow})):y=!0,ue=I.$.env,c.push(I),n.expectedType&&!W(n.expectedType,{type:I.$.type,env:I.$.env}))throw p({token:I.token,errorMessage:`Incompatible type with expected type:
2123
+ ${T(i)}`});o.$={...o.$,env:t,type:o.$.type,value:r?$??ae(o.$.type,o.token.value):void 0,pathCollection:[]};let k=o.$.type;X(k)&&g&&X(g)&&g.resolvedConcreteType&&(k={...k,resolvedConcreteType:g.resolvedConcreteType},o.$.type=k);let b=Do(i,t,t.modulePath),E=b;b!=null&&b.consumedAtToken&&(E=void 0);let{env:w}=Me({env:t,variable:{name:o.token.value,type:k,isCompileTimeOnly:r,value:o.$.value,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:Ge(k),isOwningTheSameRcValueAs:E,isReassignable:!0}});return t=w,o.$.env=t,e.$={env:t,value:ne,type:ne.type,pathCollection:[]},e}else{let{env:g,runtimeDestructurings:$}=qf({lhs:o,rhs:i,env:t,isCompileTimeOnly:r,context:{...n}});return t=g,e.$={env:t,value:ne,type:ne.type,pathCollection:[],runtimeDestructurings:$},e}}function jf({expr:e,env:t,context:n}){var k,b,E,w,F,L,S,B,R,Y,W;if(!v(e,A.match))throw p({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw p({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let o=r[0],i=Q(o)?M({expr:o,env:t,context:{...n,expectedType:void 0}}):kt({expr:o,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!i.$||!i.$.variableName)throw p({token:o.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${T(o)}`});t=i.$.env;let a=i.$.type,s=i.$.value,l,u;if(ze(a)?(u=a.childType,l=a.tag):u=a,!Ve(u))throw p({token:o.token,errorMessage:`Expected enum type for match expression, got ${a?x(a):"unknown type"}`});let d=r.slice(1),c=[],f,m=new Set,y=!1,h=!1,_=[],g=[];for(let H=0;H<d.length;H++){let se=d[H],ye=t;if(!V(se)||!v(se,"=>",2))throw p({token:se.token,errorMessage:`Expected ":" for match pattern, got ${T(se)}`});let oe=se.args[0],pe=se.args[1];if(V(oe)&&v(oe,".",1)||nn(oe,"_")){if(h)throw p({token:oe.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let _e;if(V(oe)){if(_e=oe.args[0],!Q(_e))throw p({token:oe.token,errorMessage:`Expected identifier for enum variant, got ${T(_e)}`})}else h=!0,_e=oe;let Ie=_e.token.value,ke=u.variants.find(re=>re.name===Ie);if(!ke&&Ie!=="_")throw p({token:oe.token,errorMessage:`Enum variant "${Ie}" not found in ${x(u)}`});if(ke&&ke.fields&&ke.fields.length>0)throw p({token:oe.token,errorMessage:`Enum variant "${Ie}" has ${ke.fields.length} field(s) and must be destructured. Use .${Ie}(...) instead of .${Ie}`});if(m.add(Ie),Ie!=="_"&&Ut(s)&&s.variantName!==Ie)continue;let Ae={...u,selectedVariantName:Ie==="_"?void 0:Ie};_e.$={env:ye,type:Ae,value:void 0,pathCollection:[]};let ge=Ae;l&&l==="Ptr"&&(ge=Tr(Ae));let $e=pe;ye=at(ye),oe.$={env:ye,type:ge,value:void 0,pathCollection:[],caseExecuted:!0};let I=kt({expr:$e,env:ye,context:{...n,isExecuting:Ut(s)&&s.variantName===Ie},variablesToAdd:[]});if(!((k=I.$)!=null&&k.type))throw p({token:$e.token,errorMessage:`Expected type for match result expression, got ${T($e)}`});let U=bt(I.$.env,!0);if(ye=U,I.$={...I.$,env:U},s===void 0&&I.$&&(I.$.value=void 0),I.$.controlFlow?(_.push(I.$.controlFlow),I.$.controlFlow==="return"&&g.push(I),s&&Ut(s)?e.$={env:I.$.env,type:((b=n.expectedType)==null?void 0:b.type)??I.$.type,value:I.$.value,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow}:s===void 0&&(e.$={env:I.$.env,type:((E=n.expectedType)==null?void 0:E.type)??I.$.type,value:void 0,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow})):y=!0,ye=I.$.env,c.push(I),n.expectedType&&!te(n.expectedType,{type:I.$.type,env:I.$.env}))throw p({token:I.token,errorMessage:`Incompatible type with expected type:
2075
2124
  - Expected: ${x(n.expectedType.type)}
2076
- - Actual : ${x(I.$.type)}`});if(!I.$.controlFlow){if(!f)f={type:(b=I.$)==null?void 0:b.type,env:ue};else if(!W({type:f.type,env:ue},{type:(F=I.$)==null?void 0:F.type,env:t}))if(W({type:vt({type:f.type,expectedType:void 0,expr:void 0,env:f.env}),env:f.env},{type:I.$.type,env:ue}))f={type:I.$.type,env:ue};else throw p({token:I.token,errorMessage:`Incompatible types:
2125
+ - Actual : ${x(I.$.type)}`});if(!I.$.controlFlow){if(!f)f={type:(w=I.$)==null?void 0:w.type,env:ye};else if(!te({type:f.type,env:ye},{type:(F=I.$)==null?void 0:F.type,env:t}))if(te({type:Tt({type:f.type,expectedType:void 0,expr:void 0,env:f.env}),env:f.env},{type:I.$.type,env:ye}))f={type:I.$.type,env:ye};else throw p({token:I.token,errorMessage:`Incompatible types:
2077
2126
  - Previous: ${x(f.type)}
2078
- - Current : ${x(I.$.type)}`})}}else if(V(oe)&&V(oe.func)&&v(oe.func,".",1)){if(g)throw p({token:oe.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ge=oe.func.args[0];if(!j(ge))throw p({token:oe.token,errorMessage:`Expected identifier for enum variant, got ${T(ge)}`});let Me=ge.token.value,Se=u.variants.find(se=>se.name===Me);if(!Se)throw p({token:oe.token,errorMessage:`Enum variant "${Me}" not found in ${x(u)}`});if(m.add(Me),Nt(s)&&s.variantName!==Me)continue;let Re=oe.args;if(Se.fields&&Se.fields.length>0){if(!Re.some(ve=>V(ve)&&v(ve,":",2))&&Re.length!==Se.fields.length)throw p({token:oe.token,errorMessage:`Variant "${Me}" expects ${Se.fields.length} parameters, got ${Re.length}`})}else if(Re.length>0)throw p({token:oe.token,errorMessage:`Variant "${Me}" has no fields, but destructuring parameters were provided`});let Te={...u,selectedVariantName:Me};ge.$={env:ue,type:Te,value:void 0,pathCollection:[]};let be=Te;if(l&&l==="Ptr"&&(be=hr(Te)),ue=ut(ue),Se.fields&&Se.fields.length>0){let se=new Set;for(let ve=0;ve<Re.length;ve++){let xe=Re[ve];if(V(xe)&&v(xe,":",2)){let Ze=xe.args[0],Je=xe.args[1];if(!j(Ze))throw p({token:Ze.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${T(Ze)}`});let rt=Ze.token.value,Cn=Se.fields.findIndex(an=>an.label===rt);if(Cn===-1)throw p({token:Ze.token,errorMessage:`Label "${rt}" not found in variant "${Me}". Available labels: ${Se.fields.map(an=>an.label).join(", ")}`});if(se.has(rt))throw p({token:Ze.token,errorMessage:`Label "${rt}" is already destructured`});se.add(rt);let qt=Se.fields[Cn];if(j(Je)){let an=Je.token.value;if(an!=="_"){let{env:Xo}=we({env:ue,variable:{name:an,type:qt.type,isCompileTimeOnly:!1,value:void 0,token:Je.token,initializedAtToken:Je.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=Xo}Je.$={env:ue,type:qt.type,value:void 0,pathCollection:[]},Ze.$={env:ue,type:qt.type,value:void 0,pathCollection:[]}}else throw p({token:Je.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${T(Je)}`})}else if(j(xe)){let Ze=xe.token.value,Je=Se.fields[ve];if(Ze!=="_"){let{env:rt}=we({env:ue,variable:{name:Ze,type:Je.type,isCompileTimeOnly:!1,value:void 0,token:xe.token,initializedAtToken:xe.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=rt}xe.$={env:ue,type:Je.type,value:void 0,pathCollection:[]}}else throw p({token:xe.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${T(xe)}`})}}if(i.$.variableName){let se=i.$.variableName;if(me(ue,se).length===0){let{env:xe}=we({env:ue,variable:{name:se,type:be,isCompileTimeOnly:!1,value:i.$.value,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=xe}}oe.$={env:ue,type:be,value:void 0,pathCollection:[],caseExecuted:!0};let I=ye,U=Et({expr:I,env:ue,context:{...n,isExecuting:Nt(s)&&s.variantName===Me},variablesToAdd:[]});if(!((M=U.$)!=null&&M.type))throw p({token:I.token,errorMessage:`Expected type for match result expression, got ${T(I)}`});let te=Ct(U.$.env,!0);if(ue=te,U.$={...U.$,env:te},s===void 0&&U.$&&(U.$.value=void 0),U.$.controlFlow?(h.push(U.$.controlFlow),U.$.controlFlow==="return"&&_.push(U),s&&Nt(s)?e.$={env:U.$.env,type:((L=n.expectedType)==null?void 0:L.type)??U.$.type,value:U.$.value,pathCollection:U.$.pathCollection,controlFlow:U.$.controlFlow}:s===void 0&&(e.$={env:U.$.env,type:((O=n.expectedType)==null?void 0:O.type)??U.$.type,value:void 0,pathCollection:U.$.pathCollection,controlFlow:U.$.controlFlow})):y=!0,ue=U.$.env,c.push(U),!U.$.controlFlow){if(!f)f={type:(B=U.$)==null?void 0:B.type,env:ue};else if(!W({type:f.type,env:ue},{type:(P=U.$)==null?void 0:P.type,env:t}))if(W({type:vt({type:f.type,expectedType:void 0,expr:void 0,env:f.env}),env:f.env},{type:U.$.type,env:ue}))f={type:U.$.type,env:ue};else throw p({token:U.token,errorMessage:`Incompatible types:
2127
+ - Current : ${x(I.$.type)}`})}}else if(V(oe)&&V(oe.func)&&v(oe.func,".",1)){if(h)throw p({token:oe.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let _e=oe.func.args[0];if(!Q(_e))throw p({token:oe.token,errorMessage:`Expected identifier for enum variant, got ${T(_e)}`});let Ie=_e.token.value,ke=u.variants.find(ie=>ie.name===Ie);if(!ke)throw p({token:oe.token,errorMessage:`Enum variant "${Ie}" not found in ${x(u)}`});if(m.add(Ie),Ut(s)&&s.variantName!==Ie)continue;let Ae=oe.args;if(ke.fields&&ke.fields.length>0){if(!Ae.some(ve=>V(ve)&&v(ve,":",2))&&Ae.length!==ke.fields.length)throw p({token:oe.token,errorMessage:`Variant "${Ie}" expects ${ke.fields.length} parameters, got ${Ae.length}`})}else if(Ae.length>0)throw p({token:oe.token,errorMessage:`Variant "${Ie}" has no fields, but destructuring parameters were provided`});let ge={...u,selectedVariantName:Ie};_e.$={env:ye,type:ge,value:void 0,pathCollection:[]};let $e=ge;if(l&&l==="Ptr"&&($e=Tr(ge)),ye=at(ye),ke.fields&&ke.fields.length>0){let ie=new Set;for(let ve=0;ve<Ae.length;ve++){let Ee=Ae[ve];if(V(Ee)&&v(Ee,":",2)){let qe=Ee.args[0],We=Ee.args[1];if(!Q(qe))throw p({token:qe.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${T(qe)}`});let it=qe.token.value,Vn=ke.fields.findIndex(cn=>cn.label===it);if(Vn===-1)throw p({token:qe.token,errorMessage:`Label "${it}" not found in variant "${Ie}". Available labels: ${ke.fields.map(cn=>cn.label).join(", ")}`});if(ie.has(it))throw p({token:qe.token,errorMessage:`Label "${it}" is already destructured`});ie.add(it);let Wt=ke.fields[Vn];if(Q(We)){let cn=We.token.value;if(cn!=="_"){let{env:ii}=Me({env:ye,variable:{name:cn,type:Wt.type,isCompileTimeOnly:!1,value:void 0,token:We.token,initializedAtToken:We.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});ye=ii}We.$={env:ye,type:Wt.type,value:void 0,pathCollection:[]},qe.$={env:ye,type:Wt.type,value:void 0,pathCollection:[]}}else throw p({token:We.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${T(We)}`})}else if(Q(Ee)){let qe=Ee.token.value,We=ke.fields[ve];if(qe!=="_"){let{env:it}=Me({env:ye,variable:{name:qe,type:We.type,isCompileTimeOnly:!1,value:void 0,token:Ee.token,initializedAtToken:Ee.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});ye=it}Ee.$={env:ye,type:We.type,value:void 0,pathCollection:[]}}else throw p({token:Ee.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${T(Ee)}`})}}oe.$={env:ye,type:$e,value:void 0,pathCollection:[],caseExecuted:!0};let I=pe,U=kt({expr:I,env:ye,context:{...n,isExecuting:Ut(s)&&s.variantName===Ie},variablesToAdd:[]});if(!((L=U.$)!=null&&L.type))throw p({token:I.token,errorMessage:`Expected type for match result expression, got ${T(I)}`});let re=bt(U.$.env,!0);if(ye=re,U.$={...U.$,env:re},s===void 0&&U.$&&(U.$.value=void 0),U.$.controlFlow?(_.push(U.$.controlFlow),U.$.controlFlow==="return"&&g.push(U),s&&Ut(s)?e.$={env:U.$.env,type:((S=n.expectedType)==null?void 0:S.type)??U.$.type,value:U.$.value,pathCollection:U.$.pathCollection,controlFlow:U.$.controlFlow}:s===void 0&&(e.$={env:U.$.env,type:((B=n.expectedType)==null?void 0:B.type)??U.$.type,value:void 0,pathCollection:U.$.pathCollection,controlFlow:U.$.controlFlow})):y=!0,ye=U.$.env,c.push(U),!U.$.controlFlow){if(!f)f={type:(R=U.$)==null?void 0:R.type,env:ye};else if(!te({type:f.type,env:ye},{type:(Y=U.$)==null?void 0:Y.type,env:t}))if(te({type:Tt({type:f.type,expectedType:void 0,expr:void 0,env:f.env}),env:f.env},{type:U.$.type,env:ye}))f={type:U.$.type,env:ye};else throw p({token:U.token,errorMessage:`Incompatible types:
2079
2128
  - Previous: ${x(f.type)}
2080
2129
  - Current : ${x(U.$.type)}`})}}else throw p({token:oe.token,errorMessage:`Invalid pattern in match expression: ${T(oe)}
2081
2130
  Supported patterns:
2082
2131
  - .VariantName (for variants without fields)
2083
2132
  - .VariantName(param1, param2, ...) (for variants with fields)
2084
- - _ (wildcard pattern)`})}let E;if(h.every(ne=>ne==="return")?E="return":h.every(ne=>ne==="break")?E="break":h.every(ne=>ne==="continue")?E="continue":n.isEvaluatingLoopBody?h.find(ne=>ne==="continue")?E="continue":h.find(ne=>ne==="break")?E="break":h.find(ne=>ne==="return")&&(E="return"):E=void 0,y||!E){if(y&&!f)throw p({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(f||(f={type:J.type,env:t}),!m.has("_")){let ne=u.variants.filter(pe=>!m.has(pe.name));if(ne.length>0)throw p({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
2133
+ - _ (wildcard pattern)`})}let $;if(_.every(H=>H==="return")?$="return":_.every(H=>H==="break")?$="break":_.every(H=>H==="continue")?$="continue":n.isEvaluatingLoopBody?_.find(H=>H==="continue")?$="continue":_.find(H=>H==="break")?$="break":_.find(H=>H==="return")&&($="return"):$=void 0,y||!$){if(y&&!f)throw p({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(f||(f={type:ne.type,env:t}),!m.has("_")){let H=u.variants.filter(se=>!m.has(se.name));if(H.length>0)throw p({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
2085
2134
 
2086
- - ${ne.map(pe=>pe.name).join(`
2087
- - `)}`})}t=Mo(t,c.filter(ne=>ne.$&&ne.$.controlFlow!=="return")),e.$={env:t,type:((q=n.expectedType)==null?void 0:q.type)??f.type,value:s===void 0?void 0:re(f.type),pathCollection:[]},ze(e,!0)}else{if(h.length===0)throw p({token:e.token,errorMessage:"No control flows found but expected some."});if(E==="return"){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let ne;if(n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?ne=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(ne=n.expectedType.type),!ne)throw p({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:ne,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&ta(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?re(ne):void 0,pathCollection:[],controlFlow:"return"}}else if(E==="break"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"break"}}else if(E==="continue"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"continue"}}return e}return e}function pf({expr:e,env:t,context:n}){var l,u,d,c;let r=e.args[0];if(!r)throw p({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
2088
- ${T(e)}`});let o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate the module argument:
2089
- ${T(o)}`});let i=o.$.type,a=o.$.value,s;if(Ke(a)){let f=a,m=f.type;for(let y=0;y<m.fields.length;y++){let g=f.fields[y],h=m.fields[y],{env:_}=we({env:t,variable:{name:h.label,type:h.type,isCompileTimeOnly:h.isCompileTimeOnly,value:g,token:((l=h.exprs.labelExpr)==null?void 0:l.token)??h.exprs.expr.token,initializedAtToken:((u=h.exprs.labelExpr)==null?void 0:u.token)??h.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});t=_}}else if($e(i)){let f=a,m=i;s=[];for(let y=0;y<m.fields.length;y++){let g;tn(f)&&(g=f.fields[y]);let h=m.fields[y];try{let{env:_}=we({env:t,variable:{name:h.label,type:h.type,isCompileTimeOnly:h.isCompileTimeOnly,value:g,token:((d=h.exprs.labelExpr)==null?void 0:d.token)??h.exprs.expr.token,initializedAtToken:((c=h.exprs.labelExpr)==null?void 0:c.token)??h.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});t=_,s.push({label:h.label,variableName:h.label,type:h.type})}catch(_){throw st([{token:r.token,errorMessage:`Failed to import struct field "${h.label}"`},..._ instanceof Jt?_.tokenAndErrorList:[{token:r.token,errorMessage:_.toString()}]])}}}else throw p({token:r.token,errorMessage:`Expected module/struct for "${A.open}", got:
2090
- ${T(r)}`});return e.$={env:t,value:J,type:J.type,pathCollection:[],runtimeDestructurings:s},e}function cf({expr:e,env:t,context:n}){var s,l,u,d,c,f,m,y,g,h,_,E,k,w;if(!v(e,"."))throw p({token:e.token,errorMessage:`Expected "." for property access, got:
2091
- ${T(e)}`});if(v(e,".",1)){let $=e.args[0];if(!j($)&&!nt($))throw p({token:$.token,errorMessage:`Expected identifier for enum variant access, got:
2092
- ${T($)}`});let b=(s=n.expectedType)==null?void 0:s.type;if(!Ve(b))throw p({token:e.token,errorMessage:"Failed to infer enum variant type."});let F=$.token.value,M=b,L=M.variants.find(B=>B.name===F);if(!L)throw p({token:$.token,errorMessage:`Enum variant "${F}" not found in enum`});let O={...M,selectedVariantName:F};if(!L.fields)e.$={env:t,type:O,value:Jn(O,F,[]),pathCollection:[]},$.$={env:t,type:O,pathCollection:[]};else{let B=ae(O);e.$={env:t,value:B,type:B.type,pathCollection:[]},$.$=e.$}return e}if(!v(e,".",2))throw p({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
2093
- ${T(e)}`});let r=e.args[0],o=e.args[1];if(r=S({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),j(o)&&o.token.value==="*"&&De((d=r.$)==null?void 0:d.type)){let $=r.$.type,b=$.childType;return ee(b)&&(b=fn(t,b)),e.$={env:t,type:b,value:void 0,originType:$,isAccessingProperty:!0,pathCollection:[]},o.$=e.$,e}if(G((c=r.$)==null?void 0:c.value)){let $=r.$.value;if(Ve($.value)){if(!j(o))throw p({token:o.token,errorMessage:`Expected identifier for enum variant, got:
2094
- ${T(o)}`});{let O=o.token.value,B=$.value.module.fields.find(P=>P.label===O);if(B)return e.$={env:t,type:B.type,value:B.assignedValue,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}let b=o.token.value,F=$.value,M=F.variants.find(O=>O.name===b);if(!M)throw p({token:o.token,errorMessage:`Enum variant "${b}" not found in enum`});let L={...F,selectedVariantName:b};if(!M.fields)e.$={env:t,type:L,value:Jn(L,b,[]),isAccessingProperty:!0,pathCollection:[]},o.$=e.$;else{let O=ae(L);e.$={env:t,type:O.type,value:O,isAccessingProperty:!0,pathCollection:[]},o.$=e.$}return e}else if($.value.module){if(!nt(o))throw p({token:o.token,errorMessage:`Expected identifier for type method, got:
2095
- ${T(o)}`});let b=o.token.value,F=$.value.module.fields.findLast(M=>M.label===b);if(F){let M=((f=F.assignedValue)==null?void 0:f.type)??F.type;return e.$={env:t,type:M,value:F.assignedValue,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}else{let M=Wr({concreteType:$.value,methodName:b,env:t});if(M.length>0){let L=M[0];return e.$={env:t,type:L.type,value:L.value,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}return e.$=void 0,e}}else if(Ee($.value)){if(!nt(o))throw p({token:o.token,errorMessage:`Expected identifier for type method, got:
2096
- ${T(o)}`});let b=o.token.value,F=$.value;if(F.receiverType&&F.receiverType.module){for(let O of F.receiverType.module.fields)if(O.label===""&&O.assignedValue&&Ke(O.assignedValue)){let B=O.assignedValue,P=B.type;if(!W({type:F,env:t},{type:P,env:t}))continue;let q=P.fields.findIndex(ne=>ne.label===b&&ce(ne.type));if(q>=0){let ne=P.fields[q];if(ce(ne.type)){let pe=B.fields[q];if(pe){let ue=ne.type;return Fe(pe)&&pe.specializedType&&(ue=pe.specializedType),e.$={env:t,type:ue,value:pe,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}}}}let L=Cu({concreteType:F.receiverType,moduleType:F,methodName:b,env:t});if(L)return e.$={env:t,type:L.type,value:L.value,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}let M=F.fields.find(L=>L.label===b);return M?(e.$={env:t,type:M.type,value:M.assignedValue??re(M.type,M.label),pathCollection:[],isAccessingProperty:!0},o.$=e.$,e):(e.$=void 0,e)}}let i=(m=r.$)==null?void 0:m.type,a=(y=r.$)==null?void 0:y.type;for(;i&&De(i);)i=i.childType;if(He(i)||$e(i)||ot(i)){let $=i.fields,b=r.$.value;if(j(o)){if(o.token.type==="integer"){if(!He((g=r.$)==null?void 0:g.type))throw p({token:o.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let F=parseInt(o.token.value,10);if(isNaN(F))throw p({token:o.token,errorMessage:`Expected integer for tuple index, got:
2097
- ${T(o)}`});let M=$.filter(B=>!B.isCompileTimeOnly).length;if(F<0||F>=M)throw p({token:o.token,errorMessage:`Index out of bounds: ${F} for accessing field in:
2098
- ${x((h=r.$)==null?void 0:h.type)}`});let L=$[F],O=r.$.originType||a;if(e.$={env:t,type:L.type,originType:O,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,b){let B=[];(ln(b)||tn(b))&&(B=b.fields),e.$.value=B==null?void 0:B[F]}return ze(e,!1),e}else if(nt(o)){let F=o.token.value;{let M=$.findIndex(B=>B.label===F);if(M<0){if(Ee((_=r.$)==null?void 0:_.type))throw p({token:o.token,errorMessage:`Module field "${F}" not found in module type`});return e.$=void 0,e}let L=$[M],O=((E=r.$)==null?void 0:E.originType)||a;if(e.$={env:t,type:L.type,originType:O,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,b)if(Ue(b))e.$.value=re(L.type);else{let B=[];(ln(b)||tn(b))&&(B=b.fields);let P=B==null?void 0:B[M];P||(P=re(L.type)),e.$.value=P}return ze(e,!1),e}}}}else if(Ee(i)){let $=i.fields,b=r.$.value;if(j(o)){if(o.token.type==="integer")throw p({token:o.token,errorMessage:`Accessomg module field by index is not allowed, got:
2099
- ${T(o)}`});if(nt(o)){let F=o.token.value;{let M=$.findIndex(O=>O.label===F);if(M<0){if(Ee((k=r.$)==null?void 0:k.type))throw p({token:o.token,errorMessage:`Module field "${F}" not found in module type`});return e.$=void 0,e}let L=$[M];if(e.$={env:t,type:L.type,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,b)if(Ue(b))e.$.value=re(L.type);else{let O=[];Ke(b)&&(O=b.fields);let B=O==null?void 0:O[M];!B&&L.isCompileTimeOnly&&(B=re(L.type)),e.$.value=B}return e}}}}else if(Ve(i)&&j(o)){if(!nt(o))throw p({token:o.token,errorMessage:`Expected identifier for enum variant property, got:
2100
- ${T(o)}`});let $=o.token.value,b=i.variants.find(F=>F.name===i.selectedVariantName);if(b){let F=(b.fields??[]).findIndex(O=>O.label===$);if(F<0)return e.$=void 0,e;let M=(b.fields??[])[F];e.$={env:t,type:M.type,value:void 0,pathCollection:[[r.$.variableName??"?",o.token.value]],isAccessingProperty:!0};let L=(w=r.$)==null?void 0:w.value;return L&&Nt(L)&&L.variantName===b.name&&(e.$.value=L.fields[F]),o.$=e.$,e}}return e.$=void 0,e}function ff({expr:e,env:t,context:n}){var i;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body")throw p({token:e.token,errorMessage:`Expected a function type for recur, got:
2135
+ - ${H.map(se=>se.name).join(`
2136
+ - `)}`})}t=Io(t,c.filter(H=>H.$&&H.$.controlFlow!=="return")),e.$={env:t,type:((W=n.expectedType)==null?void 0:W.type)??f.type,value:s===void 0?void 0:ae(f.type),pathCollection:[]},Ze(e,!0)}else{if(_.length===0)throw p({token:e.token,errorMessage:"No control flows found but expected some."});if($==="return"){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let H;if(n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?H=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(H=n.expectedType.type),!H)throw p({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:H,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&pa(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ae(H):void 0,pathCollection:[],controlFlow:"return"}}else if($==="break"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"break"}}else if($==="continue"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:ne.type,value:ne,pathCollection:[],controlFlow:"continue"}}return e}return e}function Wf({expr:e,env:t,context:n}){var l,u,d,c;let r=e.args[0];if(!r)throw p({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
2137
+ ${T(e)}`});let o=M({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate the module argument:
2138
+ ${T(o)}`});let i=o.$.type,a=o.$.value,s;if(Je(a)){let f=a,m=f.type;for(let y=0;y<m.fields.length;y++){let h=f.fields[y],_=m.fields[y],{env:g}=Me({env:t,variable:{name:_.label,type:_.type,isCompileTimeOnly:_.isCompileTimeOnly,value:h,token:((l=_.exprs.labelExpr)==null?void 0:l.token)??_.exprs.expr.token,initializedAtToken:((u=_.exprs.labelExpr)==null?void 0:u.token)??_.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=g}}else if(we(i)){let f=a,m=i;s=[];for(let y=0;y<m.fields.length;y++){let h;on(f)&&(h=f.fields[y]);let _=m.fields[y];try{let{env:g}=Me({env:t,variable:{name:_.label,type:_.type,isCompileTimeOnly:_.isCompileTimeOnly,value:h,token:((d=_.exprs.labelExpr)==null?void 0:d.token)??_.exprs.expr.token,initializedAtToken:((c=_.exprs.labelExpr)==null?void 0:c.token)??_.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=g,s.push({label:_.label,variableName:_.label,type:_.type})}catch(g){throw st([{token:r.token,errorMessage:`Failed to import struct field "${_.label}"`},...g instanceof Gt?g.tokenAndErrorList:[{token:r.token,errorMessage:g.toString()}]])}}}else throw p({token:r.token,errorMessage:`Expected module/struct for "${A.open}", got:
2139
+ ${T(r)}`});return e.$={env:t,value:ne,type:ne.type,pathCollection:[],runtimeDestructurings:s},e}function Hf({expr:e,env:t,context:n}){var s,l,u,d,c,f,m,y,h,_,g,$,k,b;if(!v(e,"."))throw p({token:e.token,errorMessage:`Expected "." for property access, got:
2140
+ ${T(e)}`});if(v(e,".",1)){let E=e.args[0];if(!Q(E)&&!ot(E))throw p({token:E.token,errorMessage:`Expected identifier for enum variant access, got:
2141
+ ${T(E)}`});let w=(s=n.expectedType)==null?void 0:s.type;if(!Ve(w))throw p({token:e.token,errorMessage:"Failed to infer enum variant type."});let F=E.token.value,L=w,S=L.variants.find(R=>R.name===F);if(!S)throw p({token:E.token,errorMessage:`Enum variant "${F}" not found in enum`});let B={...L,selectedVariantName:F};if(!S.fields)e.$={env:t,type:B,value:er(B,F,[]),pathCollection:[]},E.$={env:t,type:B,pathCollection:[]};else{let R=le(B);e.$={env:t,value:R,type:R.type,pathCollection:[]},E.$=e.$}return e}if(!v(e,".",2))throw p({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
2142
+ ${T(e)}`});let r=e.args[0],o=e.args[1];if(r=M({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),Q(o)&&o.token.value==="*"&&ze((d=r.$)==null?void 0:d.type)){let E=r.$.type,w=E.childType;return X(w)&&(w=mn(t,w)),e.$={env:t,type:w,value:void 0,originType:E,isAccessingProperty:!0,pathCollection:[]},o.$=e.$,e}if(j((c=r.$)==null?void 0:c.value)){let E=r.$.value;if(Ve(E.value)){if(!Q(o))throw p({token:o.token,errorMessage:`Expected identifier for enum variant, got:
2143
+ ${T(o)}`});{let B=o.token.value,R=E.value.module.fields.find(Y=>Y.label===B);if(R)return e.$={env:t,type:R.type,value:R.assignedValue,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}let w=o.token.value,F=E.value,L=F.variants.find(B=>B.name===w);if(!L)throw p({token:o.token,errorMessage:`Enum variant "${w}" not found in enum`});let S={...F,selectedVariantName:w};if(!L.fields)e.$={env:t,type:S,value:er(S,w,[]),isAccessingProperty:!0,pathCollection:[]},o.$=e.$;else{let B=le(S);e.$={env:t,type:B.type,value:B,isAccessingProperty:!0,pathCollection:[]},o.$=e.$}return e}else if(E.value.module){if(!ot(o))throw p({token:o.token,errorMessage:`Expected identifier for type method, got:
2144
+ ${T(o)}`});let w=o.token.value,F=E.value.module.fields.findLast(L=>L.label===w);if(F){let L=((f=F.assignedValue)==null?void 0:f.type)??F.type;return e.$={env:t,type:L,value:F.assignedValue,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}else{let L=Qr({concreteType:E.value,methodName:w,env:t});if(L.length>0){let S=L[0];return e.$={env:t,type:S.type,value:S.value,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}return e.$=void 0,e}}else if(Fe(E.value)){if(!ot(o))throw p({token:o.token,errorMessage:`Expected identifier for type method, got:
2145
+ ${T(o)}`});let w=o.token.value,F=E.value;if(F.receiverType&&F.receiverType.module){for(let B of F.receiverType.module.fields)if(B.label===""&&B.assignedValue&&Je(B.assignedValue)){let R=B.assignedValue,Y=R.type;if(!te({type:F,env:t},{type:Y,env:t}))continue;let W=Y.fields.findIndex(H=>H.label===w&&me(H.type));if(W>=0){let H=Y.fields[W];if(me(H.type)){let se=R.fields[W];if(se){let ye=H.type;return xe(se)&&se.specializedType&&(ye=se.specializedType),e.$={env:t,type:ye,value:se,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}}}}let S=sp({concreteType:F.receiverType,moduleType:F,methodName:w,env:t});if(S)return e.$={env:t,type:S.type,value:S.value,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}let L=F.fields.find(S=>S.label===w);return L?(e.$={env:t,type:L.type,value:L.assignedValue??ae(L.type,L.label),pathCollection:[],isAccessingProperty:!0},o.$=e.$,e):(e.$=void 0,e)}}let i=(m=r.$)==null?void 0:m.type,a=(y=r.$)==null?void 0:y.type;for(;i&&ze(i);)i=i.childType;if(Ne(i)||we(i)||pt(i)){let E=i.fields,w=r.$.value;if(Q(o)){if(o.token.type==="integer"){if(!Ne((h=r.$)==null?void 0:h.type))throw p({token:o.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let F=parseInt(o.token.value,10);if(isNaN(F))throw p({token:o.token,errorMessage:`Expected integer for tuple index, got:
2146
+ ${T(o)}`});let L=E.filter(R=>!R.isCompileTimeOnly).length;if(F<0||F>=L)throw p({token:o.token,errorMessage:`Index out of bounds: ${F} for accessing field in:
2147
+ ${x((_=r.$)==null?void 0:_.type)}`});let S=E[F],B=r.$.originType||a;if(e.$={env:t,type:S.type,originType:B,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,w){let R=[];(en(w)||on(w))&&(R=w.fields),e.$.value=R==null?void 0:R[F]}return Ze(e,!1),e}else if(ot(o)){let F=o.token.value;{let L=E.findIndex(R=>R.label===F);if(L<0){if(Fe((g=r.$)==null?void 0:g.type))throw p({token:o.token,errorMessage:`Module field "${F}" not found in module type`});return e.$=void 0,e}let S=E[L],B=(($=r.$)==null?void 0:$.originType)||a;if(e.$={env:t,type:S.type,originType:B,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,w)if(Be(w))e.$.value=ae(S.type);else{let R=[];(en(w)||on(w))&&(R=w.fields);let Y=R==null?void 0:R[L];Y||(Y=ae(S.type)),e.$.value=Y}return Ze(e,!1),e}}}}else if(Fe(i)){let E=i.fields,w=r.$.value;if(Q(o)){if(o.token.type==="integer")throw p({token:o.token,errorMessage:`Accessomg module field by index is not allowed, got:
2148
+ ${T(o)}`});if(ot(o)){let F=o.token.value;{let L=E.findIndex(B=>B.label===F);if(L<0){if(Fe((k=r.$)==null?void 0:k.type))throw p({token:o.token,errorMessage:`Module field "${F}" not found in module type`});return e.$=void 0,e}let S=E[L];if(e.$={env:t,type:S.type,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,w)if(Be(w))e.$.value=ae(S.type);else{let B=[];Je(w)&&(B=w.fields);let R=B==null?void 0:B[L];!R&&S.isCompileTimeOnly&&(R=ae(S.type)),e.$.value=R}return e}}}}else if(Ve(i)&&Q(o)){if(!ot(o))throw p({token:o.token,errorMessage:`Expected identifier for enum variant property, got:
2149
+ ${T(o)}`});let E=o.token.value,w=i.variants.find(F=>F.name===i.selectedVariantName);if(w){let F=(w.fields??[]).findIndex(B=>B.label===E);if(F<0)return e.$=void 0,e;let L=(w.fields??[])[F];e.$={env:t,type:L.type,value:void 0,pathCollection:[[r.$.variableName??"?",o.token.value]],isAccessingProperty:!0};let S=(b=r.$)==null?void 0:b.value;return S&&Ut(S)&&S.variantName===w.name&&(e.$.value=S.fields[F]),o.$=e.$,e}}return e.$=void 0,e}function Kf({expr:e,env:t,context:n}){var i;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body")throw p({token:e.token,errorMessage:`Expected a function type for recur, got:
2101
2150
  ${T(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!v(e,A.recur))throw p({token:e.token,errorMessage:`Expected recur, got:
2102
- ${T(e)}`});return En({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function df({expr:e,env:t,context:n}){if(!v(e,A.test))throw p({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2)throw p({token:e.token,errorMessage:`test expects 2 arguments (name, body), got ${e.args.length}`});let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$||!i.$.value)throw p({token:r.token,errorMessage:`Failed to evaluate test name: ${T(r)}`});if(t=i.$.env,!We(i.$.value))throw p({token:r.token,errorMessage:`Expected string for test name, got ${T(r)}`});let a=yt(o),s=S({expr:o,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!s.$)throw p({token:o.token,errorMessage:`Failed to evaluate test body: ${T(o)}`});if(!Be(s.$.type))throw p({token:o.token,errorMessage:`Test body must have 'unit' type, got ${x(s.$.type)}`});return s.$.originalExpr=a,t=s.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function mf({expr:e,env:t,context:n}){var s,l;if(!v(e,C.typeof,1))throw p({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
2103
- ${T(e)}`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if((s=o.$)!=null&&s.env&&(t=o.$.env),!((l=o.$)!=null&&l.type))throw p({token:r.token,errorMessage:`Expected type for expression, got:
2104
- ${T(r)}`});let i=o.$.type,a=ae(i);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Ta({expr:e,env:t,context:n}){if(e.args.length!==2&&e.args.length!==3)throw p({token:e.token,errorMessage:`Expected 2 or 3 arguments for while loop, got ${e.args.length}`});let r=e.args[0],o,i;e.args.length===3?(o=e.args[1],i=e.args[2]):i=e.args[1];let a=Et({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the condition expression:
2105
- ${T(r)}`});if(!vn(a.$.type))throw p({token:r.token,errorMessage:`Expected bool type for condition expression, got:
2106
- ${T(r)}`});let s=a.$.value,l=s!==void 0;if(et(s)&&s.value===!1)return e.$={env:t,pathCollection:[],type:J.type,value:l?J:void 0},e;{let u=Et({expr:i,env:t,context:{...n,isEvaluatingLoopBody:{kind:"while",env:t}},variablesToAdd:[]});if(!u.$)throw p({token:i.token,errorMessage:`Failed to evaluate the body expression:
2107
- ${T(i)}`});if(u.$.controlFlow){if(u.$.controlFlow==="return")et(s)&&s.value===!0?e.$={env:u.$.env,pathCollection:u.$.pathCollection,type:u.$.type,value:u.$.value,controlFlow:u.$.controlFlow}:e.$={env:t,pathCollection:[],type:J.type,value:l?J:void 0};else if(u.$.controlFlow==="break")e.$={env:u.$.env,pathCollection:[],type:J.type,value:l?J:void 0};else if(u.$.controlFlow==="continue"){let c=u.$.env;if(o){let f=S({expr:o,env:c,context:{...n}});if(!f.$)throw p({token:o.token,errorMessage:`Failed to evaluate the step expression:
2108
- ${T(o)}`});c=f.$.env}if(et(s))return Ta({expr:e,env:c,context:{...n}});e.$={env:c,pathCollection:[],type:J.type,value:l?J:void 0}}return e}if(!Be(u.$.type))throw p({token:i.token,errorMessage:`Expected the while loop body to return unit, but got:
2109
- ${x(u.$.type)}`});let d=u.$.value===void 0;if(t=u.$.env,o){let c=S({expr:o,env:t,context:{...n}});if(!c.$)throw p({token:o.token,errorMessage:`Failed to evaluate the step expression:
2110
- ${T(o)}`});t=c.$.env}return et(s)&&s.value===!0&&d?(e.$={env:t,pathCollection:[],type:J.type,value:void 0},e):et(s)&&s.value===!0?Ta({expr:e,env:t,context:{...n}}):(e.$={env:t,pathCollection:[],type:J.type,value:l?J:void 0},e)}}function yf({expr:e,env:t,context:n}){if(j(e))switch(e.token.type){case"identifier":case"operator":case"backtick_identifier":return va({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return Jc(e,t,{...n});case"float":return Zc(e,t,{...n});case"string":return Xc(e,t);case"char":return Wc(e,t);case"bool":return jc(e,t);default:throw p({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
2111
- ${T(e)}`})}else if(v(e,":",2)){let{expr:r}=ha({expr:e,env:t,context:n});return r}else return v(e,":=",2)||v(e,"::",2)?lf({expr:e,env:t,context:n}):v(e,"=",2)?tf({expr:e,env:t,context:n}):v(e,"->",2)?V(e.args[0])&&(v(e.args[0],A.fn)||v(e.args[0],A.unsafe_fn))?ma({expr:e,env:t,context:{...n,isUnsafeFunctionType:v(e.args[0],A.unsafe_fn)}}):V(e.args[0])&&v(e.args[0],A.Fn)?Dc({expr:e,env:t,context:{...n}}):ga({expr:e,env:t,context:{...n}}):v(e,"=>",2)?V(e.args[0])&&v(e.args[0],A.fn)?Sc({expr:e,env:t,context:{...n}}):ga({expr:e,env:t,context:{...n}}):v(e,"=>>",2)?ga({expr:e,env:t,context:{...n}}):v(e,A.recur)?ff({expr:e,env:t,context:{...n}}):v(e,A.extern)?of({expr:e,env:t,context:{...n}}):v(e,A.c_include)?nf({expr:e,env:t,context:{...n}}):v(e,A.test)?df({expr:e,env:t,context:{...n}}):v(e,A.cond)?rf({expr:e,env:t,context:{...n}}):v(e,A.match)?uf({expr:e,env:t,context:{...n}}):v(e,A.tuple)?ef({expr:e,env:t,context:{...n}}):v(e,A.array)?Yc({expr:e,env:t,context:{...n}}):v(e,A.compt_list)?Hc({expr:e,env:t,context:{...n}}):v(e,A.dyn)?Qc({expr:e,env:t,context:{...n}}):v(e,A.struct)?ao({expr:e,env:t,context:{...n}}):v(e,A.object)?zc({expr:e,env:t,context:{...n}}):v(e,A.newtype)?Pc({expr:e,env:t,context:{...n}}):v(e,A.enum)?Nc({expr:e,env:t,context:{...n}}):v(e,A.union)?qc({expr:e,env:t,context:{...n}}):v(e,".")?cf({expr:e,env:t,context:{...n}}):v(e,A.begin)?Et({expr:e,env:t,context:{...n},variablesToAdd:[]}):v(e,A.module)?Uc({expr:e,env:t,context:{...n}}):v(e,A.Impl)?cc({expr:e,env:t,context:{...n}}):v(e,A.impl)?ku({expr:e,env:t,context:{...n}}):v(e,C.typeof)?mf({expr:e,env:t,context:{...n}}):v(e,C.sizeof)?hc({expr:e,env:t,context:{...n}}):v(e,C.alignof)?sp({expr:e,env:t,context:{...n}}):v(e,C.rc)?gc({expr:e,env:t,context:{...n}}):v(e,"<:")?Tu({expr:e,env:t,context:{...n}}):v(e,C.the)?vc({expr:e,env:t,context:{...n}}):v(e,C.async)?Ep({expr:e,env:t,context:{...n}}):v(e,C.await)?lc({expr:e,env:t,context:{...n}}):v(e,A.import)?af({expr:e,env:t,context:{...n},stdPath:n.stdPath}):v(e,A.open)?pf({expr:e,env:t,context:{...n}}):v(e,A.Ptr,1)?xc({expr:e,env:t,context:{...n}}):v(e,A.Iso,1)?Wp({expr:e,env:t,context:{...n}}):v(e,C.__yo_address_of,1)?_c({expr:e,env:t,context:{...n}}):v(e,A.Tuple)?Rc({expr:e,env:t,context:{...n}}):v(e,A.Array)?Mc({expr:e,env:t,context:{...n}}):v(e,A.Slice)?Gc({expr:e,env:t,context:{...n}}):v(e,A.ComptList)?Lc({expr:e,env:t,context:{...n}}):v(e,A.Future)?Oc({expr:e,env:t,context:{...n}}):v(e,A.Concrete)?Ac({expr:e,env:t,context:{...n}}):v(e,A.Dyn)?Ic({expr:e,env:t,context:{...n}}):v(e,C.compt_expect_error)?bp({expr:e,env:t,context:{...n}}):v(e,C.compt_assert)?Cp({expr:e,env:t,context:{...n}}):v(e,C.compt_print)?Lp({expr:e,env:t,context:{...n}}):v(e,C.panic)?yc({expr:e,env:t,context:{...n}}):v(e,C.macro_expand)?dc({expr:e,env:t,context:{...n}}):v(e,A.op_and)||v(e,A.op_or)?lp({expr:e,env:t,context:{...n}}):v(e,C.consume)?Ip({expr:e,env:t,context:{...n}}):v(e,C.___drop)?ec({expr:e,env:t,context:{...n}}):v(e,C.___dup)?tc({expr:e,env:t,context:{...n}}):v(e,C.__yo_decr_rc)?up({expr:e,env:t,context:{...n}}):v(e,C.__yo_incr_rc)?pp({expr:e,env:t,context:{...n}}):v(e,C.__yo_decr_rc_atomic)?fp({expr:e,env:t,context:{...n}}):v(e,C.__yo_incr_rc_atomic)?cp({expr:e,env:t,context:{...n}}):v(e,C.__yo_iso_extract)?hp({expr:e,env:t,context:{...n}}):v(e,C.__yo_iso_dispose)?vp({expr:e,env:t,context:{...n}}):v(e,C.__yo_rc_own)?dp({expr:e,env:t,context:{...n}}):v(e,C.__yo_dyn_drop)?mp({expr:e,env:t,context:{...n}}):v(e,C.__yo_dyn_dup)?yp({expr:e,env:t,context:{...n}}):v(e,C.__yo_sometype_drop)?_p({expr:e,env:t,context:{...n}}):v(e,C.__yo_sometype_dup)?gp({expr:e,env:t,context:{...n}}):v(e,C.__yo_gc_collect)?uc({expr:e,env:t,context:{...n}}):v(e,A.quote)?fc({expr:e,env:t,context:{...n}}):v(e,A.gensym)?pc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_is_atom)?nc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_is_fn_call)?rc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_get_callee)?oc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_get_args)?ic({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_to_string)?ac({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_eq)?sc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_car)?Fp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_cdr)?wp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_cons)?Vp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_append)?xp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_length)?Mp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_element_type)?Sp({expr:e,env:t,context:{...n}}):V(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_u8_")||e.func.token.value.startsWith("__yo_i8_")||e.func.token.value.startsWith("__yo_u16_")||e.func.token.value.startsWith("__yo_i16_")||e.func.token.value.startsWith("__yo_u32_")||e.func.token.value.startsWith("__yo_i32_")||e.func.token.value.startsWith("__yo_u64_")||e.func.token.value.startsWith("__yo_i64_")||e.func.token.value.startsWith("__yo_usize_")||e.func.token.value.startsWith("__yo_isize_")||e.func.token.value.startsWith("__yo_f32_")||e.func.token.value.startsWith("__yo_f64_")||e.func.token.value.startsWith("__yo_compt_int_")||e.func.token.value.startsWith("__yo_compt_float_")||e.func.token.value.startsWith("__yo_char")||e.func.token.value.startsWith("__yo_short_")||e.func.token.value.startsWith("__yo_ushort_")||e.func.token.value.startsWith("__yo_int_")||e.func.token.value.startsWith("__yo_uint_")||e.func.token.value.startsWith("__yo_long_")||e.func.token.value.startsWith("__yo_ulong_")||e.func.token.value.startsWith("__yo_longlong_")||e.func.token.value.startsWith("__yo_ulonglong_")||e.func.token.value.startsWith("__yo_longdouble_"))?mc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_boolean_and,2)||v(e,C.__yo_compt_boolean_or,2)||v(e,C.__yo_compt_boolean_eq,2)||v(e,C.__yo_compt_boolean_neq,2)||v(e,C.__yo_compt_boolean_not,1)||v(e,C.__yo_compt_boolean_to_string,1)?kp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_string_concat,2)||v(e,C.__yo_compt_string_eq,2)||v(e,C.__yo_compt_string_neq,2)||v(e,C.__yo_compt_string_lt,2)||v(e,C.__yo_compt_string_lte,2)||v(e,C.__yo_compt_string_gt,2)||v(e,C.__yo_compt_string_gte,2)||v(e,C.__yo_compt_string_length,1)||v(e,C.__yo_compt_string_to_upper,1)||v(e,C.__yo_compt_string_to_lower,1)||v(e,C.__yo_compt_string_slice)?Ap({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_to_string,1)?Tc({expr:e,env:t,context:{...n}}):v(e,C.__yo_are_types_compatible,2)?$c({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_contains_gc_type,1)?Ec({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_can_form_gc_cycle,1)?Cc({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_impls,2)?kc({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_print_info,1)?Fc({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_is_owning_the_gc_value)?wc({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_has_other_aliases)?Vc({expr:e,env:t,context:{...n}}):v(e,A.while)?Ta({expr:e,env:t,context:{...n}}):v(e,C.va_start)?bc({expr:e,env:t,context:{...n}}):En({expr:e,env:t,context:{...n}})}var _f=require("node:fs"),gf=Kn(require("path"));var $m=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true",Qo=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:o}){if(this.modulePath=t,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{this.inputString=o??(0,_f.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new wr({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),this.evaluateProgram(n,r)}catch(i){throw new Error(`Failed to import module "${t}":
2112
- ${i instanceof Jt?i.toString():i instanceof Error?i.message:String(i)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var u,d;let r=ja({modulePath:this.modulePath,inputString:this.inputString}),o="file://"+gf.default.join(t,"prelude.yo");if(!(this.modulePath===o)&&!$m){let{moduleValue:c,moduleError:f}=n(o);if(f)throw f;if(c&&Ee(c.type)){r=ut(r);for(let m=0;m<c.type.fields.length;m++){let y=c.type.fields[m],g=c.fields[m],{env:h}=we({env:r,variable:{name:y.label,type:y.type,value:g,isCompileTimeOnly:!0,initializedAtToken:((u=y.exprs.labelExpr)==null?void 0:u.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((d=y.exprs.labelExpr)==null?void 0:d.token)??y.exprs.expr.token,isOwningTheGcValue:!1}});r=h}}bu(r)}let{moduleValue:a,env:s,partialModuleError:l}=jr({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:!0});r=s,this.moduleValue=a,this.moduleError=l}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};var br=class{constructor(){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.stdPath=hf.default.join(__dirname,"../std");this.codeGenratorC=new da,Wl(yf)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let o=r.pop(),i=this.dependents.get(o);if(i)for(let a of i)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let o=this.dependents.get(r);o&&o.delete(t)}this.dependencies.delete(t)}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let o=this.modules.get(t);if(o)return{moduleValue:o.moduleValue,moduleError:o.moduleError};let i=t,a=new Qo({modulePath:t,stdPath:this.stdPath,loadModule:u=>this.loadModule(u,void 0,i),inputString:n}),s=a.getModuleValue(),l=a.getModuleError();return this.modules.set(t,{moduleValue:s,moduleError:l,evaluator:a}),{moduleValue:s,moduleError:l}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=this.getDependentModules(t),r=[t,...n];for(let o of r)Ya(o),Ga(o),this.clearDependencies(o),this.modules.delete(o)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:o,debugAsyncAwait:i,allocator:a}={}){let{moduleValue:s,moduleError:l}=this.loadModule(t);if(l)throw l;if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);this.codeGenratorC.compileModule(t,s,{debugGc:r,debugParallelism:o,debugAsyncAwait:i,allocator:a}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}};var $a=class{constructor(){this.moduleManager=new br}compileModule(t,n){if(n.skipCodegen){let r=this.moduleManager.loadModule(t);if(r.moduleError)throw r.moduleError}else{this.moduleManager.compileModule(t,{emitC:n.emitC,debugGc:n.debugGc,debugParallelism:n.debugParallelism,debugAsyncAwait:n.debugAsyncAwait,allocator:n.allocator??"mimalloc"});let r=this.moduleManager.getGeneratedCode(),o=n.output,i=o+".c";if(Jo.writeFileSync(i,r),console.log(`Generated C code written to ${i}`),n.skipCCompiler)console.log("Skipping C compiler (--skip-c-compiler flag set)");else{let a=n.cCompiler,s;if(n.optimize!==void 0){let f=n.optimize;f==="0"?s=["-Wall","-Wextra","-O0"]:s=["-w",`-O${f}`]}else n.release?s=["-w","-O2"]:s=["-Wall","-Wextra","-O0"];let l=["-std=c11",...s,i,"-o",o];if(n.sanitize&&(n.sanitize==="address"?(l.splice(-2,0,"-fsanitize=address"),l.splice(-2,0,"-fno-omit-frame-pointer"),console.log("AddressSanitizer enabled (memory errors + leak detection)")):n.sanitize==="leak"&&(l.splice(-2,0,"-fsanitize=leak"),console.log("LeakSanitizer enabled (leak detection only)"))),n.extern.forEach(f=>{Jo.existsSync(f)?l.splice(-2,0,f):console.warn(`External file ${f} does not exist and will be ignored`)}),(n.allocator??"mimalloc")==="mimalloc"){let f="vendor/mimalloc/src/static.c";Jo.existsSync(f)?(l.splice(-2,0,f),l.splice(-2,0,"-Ivendor/mimalloc/include"),console.log("Using bundled mimalloc")):console.warn("Bundled mimalloc not found, falling back to standard malloc")}else console.log("Using libc allocator");if(process.platform==="linux")try{(0,Zo.execSync)("command -v pkg-config",{stdio:"ignore"}),(0,Zo.execSync)("pkg-config --exists liburing",{stdio:"ignore"}),l.splice(-2,0,"-luring"),console.log("Using system liburing for async I/O")}catch{console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions.")}console.log(`Compiling with: ${a} ${l.join(" ")}`);let c=(0,Zo.spawnSync)(a,l,{stdio:"inherit"});c.status===0?console.log(`Successfully compiled to ${o}`):(console.error(`Compilation failed with exit code ${c.status}`),process.exit(c.status||1))}}}};var so=require("child_process"),on=Kn(require("fs")),Tf=Kn(require("os")),Un=Kn(require("path"));var Ae={reset:"\x1B[0m",green:"\x1B[32m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",bold:"\x1B[1m",dim:"\x1B[2m"};function $f(e){let t=Un.resolve(e);if(!on.existsSync(t))return console.error(`${Ae.red}Error: Path does not exist: ${t}${Ae.reset}`),[];let n=on.statSync(t);return n.isFile()?t.endsWith(".yo")?[t]:(console.error(`${Ae.red}Error: File is not a .yo file: ${t}${Ae.reset}`),[]):n.isDirectory()?Ef(t):[]}function Ef(e){let t=[],n=on.readdirSync(e,{withFileTypes:!0});for(let r of n){let o=Un.join(e,r.name);r.isDirectory()?["node_modules","vendor",".git","vscode-extension"].includes(r.name)||t.push(...Ef(o)):r.isFile()&&r.name.endsWith(".test.yo")&&t.push(o)}return t}function Em(e){let t=[];try{aa(),Ha(),Ia();let n=new br,r=`file://${e}`,{moduleError:o}=n.loadModule(r);if(o)return console.error(`${Ae.red}Error evaluating ${e}: ${o}${Ae.reset}`),t;let i=n.modules.get(r);if(!i)return console.error(`${Ae.red}Error: Module not found after loading: ${e}${Ae.reset}`),t;let a=i.evaluator.getProgram();for(let s of a)if(V(s)&&v(s,A.test)&&s.args.length>=2){let l=s.args[0],u=s.args[1],d="unnamed_test";l.$&&We(l.$.value)?d=l.$.value.value:j(l)&&l.token.type==="string"&&(d=l.token.value),t.push({name:d,bodyExpr:u,filePath:e,lineNumber:l.token.position.row+1})}}catch(n){console.error(`${Ae.red}Error parsing ${e}: ${n}${Ae.reset}`)}return t}function Cm(e,t){var r;let n=T(((r=e.bodyExpr.$)==null?void 0:r.originalExpr)??e.bodyExpr);return`${t}
2151
+ ${T(e)}`});return Fn({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function Qf({expr:e,env:t,context:n}){if(!v(e,A.test))throw p({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2)throw p({token:e.token,errorMessage:`test expects 2 arguments (name, body), got ${e.args.length}`});let r=e.args[0],o=e.args[1],i=M({expr:r,env:t,context:{...n}});if(!i.$||!i.$.value)throw p({token:r.token,errorMessage:`Failed to evaluate test name: ${T(r)}`});if(t=i.$.env,!Qe(i.$.value))throw p({token:r.token,errorMessage:`Expected string for test name, got ${T(r)}`});let a=dt(o),s=M({expr:o,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!s.$)throw p({token:o.token,errorMessage:`Failed to evaluate test body: ${T(o)}`});if(!De(s.$.type))throw p({token:o.token,errorMessage:`Test body must have 'unit' type, got ${x(s.$.type)}`});return s.$.originalExpr=a,t=s.$.env,e.$={env:t,type:ne.type,value:ne,pathCollection:[]},e}function Zf({expr:e,env:t,context:n}){var s,l;if(!v(e,C.typeof,1))throw p({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
2152
+ ${T(e)}`});let r=e.args[0],o=M({expr:r,env:t,context:{...n}});if((s=o.$)!=null&&s.env&&(t=o.$.env),!((l=o.$)!=null&&l.type))throw p({token:r.token,errorMessage:`Expected type for expression, got:
2153
+ ${T(r)}`});let i=o.$.type,a=le(i);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function La({expr:e,env:t,context:n}){if(e.args.length!==2&&e.args.length!==3)throw p({token:e.token,errorMessage:`Expected 2 or 3 arguments for while loop, got ${e.args.length}`});let r=e.args[0],o,i;e.args.length===3?(o=e.args[1],i=e.args[2]):i=e.args[1];let a=kt({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the condition expression:
2154
+ ${T(r)}`});if(!Cn(a.$.type))throw p({token:r.token,errorMessage:`Expected bool type for condition expression, got:
2155
+ ${T(r)}`});let s=a.$.value,l=s!==void 0;if(nt(s)&&s.value===!1)return e.$={env:t,pathCollection:[],type:ne.type,value:l?ne:void 0},e;{let u=kt({expr:i,env:t,context:{...n,isEvaluatingLoopBody:{kind:"while",env:t}},variablesToAdd:[]});if(!u.$)throw p({token:i.token,errorMessage:`Failed to evaluate the body expression:
2156
+ ${T(i)}`});if(u.$.controlFlow){if(u.$.controlFlow==="return")nt(s)&&s.value===!0?e.$={env:u.$.env,pathCollection:u.$.pathCollection,type:u.$.type,value:u.$.value,controlFlow:u.$.controlFlow}:e.$={env:t,pathCollection:[],type:ne.type,value:l?ne:void 0};else if(u.$.controlFlow==="break")e.$={env:u.$.env,pathCollection:[],type:ne.type,value:l?ne:void 0};else if(u.$.controlFlow==="continue"){let c=u.$.env;if(o){let f=M({expr:o,env:c,context:{...n}});if(!f.$)throw p({token:o.token,errorMessage:`Failed to evaluate the step expression:
2157
+ ${T(o)}`});c=f.$.env}if(nt(s))return La({expr:e,env:c,context:{...n}});e.$={env:c,pathCollection:[],type:ne.type,value:l?ne:void 0}}return e}if(!De(u.$.type))throw p({token:i.token,errorMessage:`Expected the while loop body to return unit, but got:
2158
+ ${x(u.$.type)}`});let d=u.$.value===void 0;if(t=u.$.env,o){let c=M({expr:o,env:t,context:{...n}});if(!c.$)throw p({token:o.token,errorMessage:`Failed to evaluate the step expression:
2159
+ ${T(o)}`});t=c.$.env}return nt(s)&&s.value===!0&&d?(e.$={env:t,pathCollection:[],type:ne.type,value:void 0},e):nt(s)&&s.value===!0?La({expr:e,env:t,context:{...n}}):(e.$={env:t,pathCollection:[],type:ne.type,value:l?ne:void 0},e)}}function Jf({expr:e,env:t,context:n}){if(Q(e))switch(e.token.type){case"identifier":case"operator":case"backtick_identifier":return Ma({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return Df(e,t,{...n});case"float":return Nf(e,t,{...n});case"string":return Of(e,t);case"char":return Lf(e,t);case"bool":return Mf(e,t);default:throw p({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
2160
+ ${T(e)}`})}else if(v(e,":",2)){let{expr:r}=xa({expr:e,env:t,context:n});return r}else return v(e,":=",2)||v(e,"::",2)?Yf({expr:e,env:t,context:n}):v(e,"=",2)?Uf({expr:e,env:t,context:n}):v(e,"->",2)?V(e.args[0])&&(v(e.args[0],A.fn)||v(e.args[0],A.unsafe_fn))?ka({expr:e,env:t,context:{...n,isUnsafeFunctionType:v(e.args[0],A.unsafe_fn)}}):V(e.args[0])&&v(e.args[0],A.Fn)?$f({expr:e,env:t,context:{...n}}):Va({expr:e,env:t,context:{...n}}):v(e,"=>",2)?V(e.args[0])&&v(e.args[0],A.fn)?yf({expr:e,env:t,context:{...n}}):Va({expr:e,env:t,context:{...n}}):v(e,"=>>",2)?Va({expr:e,env:t,context:{...n}}):v(e,A.recur)?Kf({expr:e,env:t,context:{...n}}):v(e,A.extern)?zf({expr:e,env:t,context:{...n}}):v(e,A.c_include)?Rf({expr:e,env:t,context:{...n}}):v(e,A.test)?Qf({expr:e,env:t,context:{...n}}):v(e,A.cond)?Pf({expr:e,env:t,context:{...n}}):v(e,A.match)?jf({expr:e,env:t,context:{...n}}):v(e,A.tuple)?Bf({expr:e,env:t,context:{...n}}):v(e,A.array)?xf({expr:e,env:t,context:{...n}}):v(e,A.compt_list)?Sf({expr:e,env:t,context:{...n}}):v(e,A.dyn)?If({expr:e,env:t,context:{...n}}):v(e,A.struct)?uo({expr:e,env:t,context:{...n}}):v(e,A.object)?bf({expr:e,env:t,context:{...n}}):v(e,A.newtype)?kf({expr:e,env:t,context:{...n}}):v(e,A.enum)?vf({expr:e,env:t,context:{...n}}):v(e,A.union)?Vf({expr:e,env:t,context:{...n}}):v(e,".")?Hf({expr:e,env:t,context:{...n}}):v(e,A.begin)?kt({expr:e,env:t,context:{...n},variablesToAdd:[]}):v(e,A.module)?Ef({expr:e,env:t,context:{...n}}):v(e,A.Impl)?Hc({expr:e,env:t,context:{...n}}):v(e,A.impl)?lp({expr:e,env:t,context:{...n}}):v(e,C.typeof)?Zf({expr:e,env:t,context:{...n}}):v(e,C.sizeof)?tf({expr:e,env:t,context:{...n}}):v(e,C.alignof)?Pp({expr:e,env:t,context:{...n}}):v(e,C.rc)?ef({expr:e,env:t,context:{...n}}):v(e,"<:")?op({expr:e,env:t,context:{...n}}):v(e,C.the)?nf({expr:e,env:t,context:{...n}}):v(e,C.async)?sc({expr:e,env:t,context:{...n}}):v(e,C.await)?Yc({expr:e,env:t,context:{...n}}):v(e,A.import)?Gf({expr:e,env:t,context:{...n},stdPath:n.stdPath}):v(e,A.open)?Wf({expr:e,env:t,context:{...n}}):v(e,A.Ptr,1)?df({expr:e,env:t,context:{...n}}):v(e,A.Iso,1)?Mc({expr:e,env:t,context:{...n}}):v(e,C.__yo_address_of,1)?Xc({expr:e,env:t,context:{...n}}):v(e,A.Tuple)?Ff({expr:e,env:t,context:{...n}}):v(e,A.Array)?mf({expr:e,env:t,context:{...n}}):v(e,C.__yo_array_fill,2)?oc({expr:e,env:t,context:{...n}}):v(e,A.Slice)?wf({expr:e,env:t,context:{...n}}):v(e,A.ComptList)?_f({expr:e,env:t,context:{...n}}):v(e,A.Future)?Tf({expr:e,env:t,context:{...n}}):v(e,A.Concrete)?gf({expr:e,env:t,context:{...n}}):v(e,A.Dyn)?hf({expr:e,env:t,context:{...n}}):v(e,C.compt_expect_error)?pc({expr:e,env:t,context:{...n}}):v(e,C.compt_assert)?lc({expr:e,env:t,context:{...n}}):v(e,C.compt_print)?gc({expr:e,env:t,context:{...n}}):v(e,C.panic)?Jc({expr:e,env:t,context:{...n}}):v(e,C.macro_expand)?Qc({expr:e,env:t,context:{...n}}):v(e,A.op_and)||v(e,A.op_or)?zp({expr:e,env:t,context:{...n}}):v(e,C.consume)?vc({expr:e,env:t,context:{...n}}):v(e,C.___drop)?Oc({expr:e,env:t,context:{...n}}):v(e,C.___dup)?Bc({expr:e,env:t,context:{...n}}):v(e,C.__yo_decr_rc)?Gp({expr:e,env:t,context:{...n}}):v(e,C.__yo_incr_rc)?qp({expr:e,env:t,context:{...n}}):v(e,C.__yo_decr_rc_atomic)?jp({expr:e,env:t,context:{...n}}):v(e,C.__yo_incr_rc_atomic)?Yp({expr:e,env:t,context:{...n}}):v(e,C.__yo_iso_extract)?Jp({expr:e,env:t,context:{...n}}):v(e,C.__yo_iso_dispose)?Xp({expr:e,env:t,context:{...n}}):v(e,C.__yo_drop_array_element)?ec({expr:e,env:t,context:{...n}}):v(e,C.__yo_dup_array_element)?tc({expr:e,env:t,context:{...n}}):v(e,C.__yo_drop_tuple_element)?nc({expr:e,env:t,context:{...n}}):v(e,C.__yo_dup_tuple_element)?rc({expr:e,env:t,context:{...n}}):v(e,C.__yo_rc_own)?Wp({expr:e,env:t,context:{...n}}):v(e,C.__yo_dyn_drop)?Hp({expr:e,env:t,context:{...n}}):v(e,C.__yo_dyn_dup)?Kp({expr:e,env:t,context:{...n}}):v(e,C.__yo_sometype_drop)?Qp({expr:e,env:t,context:{...n}}):v(e,C.__yo_sometype_dup)?Zp({expr:e,env:t,context:{...n}}):v(e,C.__yo_gc_collect)?jc({expr:e,env:t,context:{...n}}):v(e,A.quote)?Kc({expr:e,env:t,context:{...n}}):v(e,A.gensym)?Wc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_is_atom)?Uc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_is_fn_call)?Rc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_get_callee)?Pc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_get_args)?zc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_to_string)?Gc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_eq)?qc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_car)?cc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_cdr)?fc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_cons)?dc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_append)?mc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_length)?yc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_element_type)?_c({expr:e,env:t,context:{...n}}):V(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_u8_")||e.func.token.value.startsWith("__yo_i8_")||e.func.token.value.startsWith("__yo_u16_")||e.func.token.value.startsWith("__yo_i16_")||e.func.token.value.startsWith("__yo_u32_")||e.func.token.value.startsWith("__yo_i32_")||e.func.token.value.startsWith("__yo_u64_")||e.func.token.value.startsWith("__yo_i64_")||e.func.token.value.startsWith("__yo_usize_")||e.func.token.value.startsWith("__yo_isize_")||e.func.token.value.startsWith("__yo_f32_")||e.func.token.value.startsWith("__yo_f64_")||e.func.token.value.startsWith("__yo_compt_int_")||e.func.token.value.startsWith("__yo_compt_float_")||e.func.token.value.startsWith("__yo_char")||e.func.token.value.startsWith("__yo_short_")||e.func.token.value.startsWith("__yo_ushort_")||e.func.token.value.startsWith("__yo_int_")||e.func.token.value.startsWith("__yo_uint_")||e.func.token.value.startsWith("__yo_long_")||e.func.token.value.startsWith("__yo_ulong_")||e.func.token.value.startsWith("__yo_longlong_")||e.func.token.value.startsWith("__yo_ulonglong_")||e.func.token.value.startsWith("__yo_longdouble_"))?Zc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_boolean_and,2)||v(e,C.__yo_compt_boolean_or,2)||v(e,C.__yo_compt_boolean_eq,2)||v(e,C.__yo_compt_boolean_neq,2)||v(e,C.__yo_compt_boolean_not,1)||v(e,C.__yo_compt_boolean_to_string,1)?uc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_string_concat,2)||v(e,C.__yo_compt_string_eq,2)||v(e,C.__yo_compt_string_neq,2)||v(e,C.__yo_compt_string_lt,2)||v(e,C.__yo_compt_string_lte,2)||v(e,C.__yo_compt_string_gt,2)||v(e,C.__yo_compt_string_gte,2)||v(e,C.__yo_compt_string_length,1)||v(e,C.__yo_compt_string_to_upper,1)||v(e,C.__yo_compt_string_to_lower,1)||v(e,C.__yo_compt_string_slice)?hc({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_to_string,1)?rf({expr:e,env:t,context:{...n}}):v(e,C.__yo_are_types_compatible,2)?of({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_contains_rc_type,1)?af({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_can_form_rc_cycle,1)?sf({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_impls,2)?lf({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_print_info,1)?pf({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_is_owning_the_rc_value)?cf({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_has_other_aliases)?ff({expr:e,env:t,context:{...n}}):v(e,A.while)?La({expr:e,env:t,context:{...n}}):v(e,C.va_start)?uf({expr:e,env:t,context:{...n}}):Fn({expr:e,env:t,context:{...n}})}var Xf=require("node:fs"),ed=zn(require("path"));var ty=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true",ti=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:o}){if(this.modulePath=t,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{this.inputString=o??(0,Xf.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new Mr({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),this.evaluateProgram(n,r)}catch(i){throw new Error(`Failed to import module "${t}":
2161
+ ${i instanceof Gt?i.toString():i instanceof Error?i.message:String(i)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var u,d;let r=is({modulePath:this.modulePath,inputString:this.inputString}),o="file://"+ed.default.join(t,"prelude.yo");if(!(this.modulePath===o)&&!ty){let{moduleValue:c,moduleError:f}=n(o);if(f)throw f;if(c&&Fe(c.type)){r=at(r);for(let m=0;m<c.type.fields.length;m++){let y=c.type.fields[m],h=c.fields[m],{env:_}=Me({env:r,variable:{name:y.label,type:y.type,value:h,isCompileTimeOnly:!0,initializedAtToken:((u=y.exprs.labelExpr)==null?void 0:u.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((d=y.exprs.labelExpr)==null?void 0:d.token)??y.exprs.expr.token,isOwningTheRcValue:!1}});r=_}}up(r)}let{moduleValue:a,env:s,partialModuleError:l}=Kr({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:!0});r=s,this.moduleValue=a,this.moduleError=l}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};function ny(e){let t=e;for(;;){let n=Sa.default.join(t,"std");if((0,td.existsSync)(n))return n;let r=Sa.default.dirname(t);if(r===t)break;t=r}return Sa.default.join(__dirname,"../std")}var xr=class{constructor(){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.stdPath=ny(__dirname);this.codeGenratorC=new Ca,Lu(Jf)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let o=r.pop(),i=this.dependents.get(o);if(i)for(let a of i)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let o=this.dependents.get(r);o&&o.delete(t)}this.dependencies.delete(t)}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let o=this.modules.get(t);if(o)return{moduleValue:o.moduleValue,moduleError:o.moduleError};let i=t,a=new ti({modulePath:t,stdPath:this.stdPath,loadModule:u=>this.loadModule(u,void 0,i),inputString:n}),s=a.getModuleValue(),l=a.getModuleError();return this.modules.set(t,{moduleValue:s,moduleError:l,evaluator:a}),{moduleValue:s,moduleError:l}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=this.getDependentModules(t),r=[t,...n];for(let o of r)os(o),ns(o),this.clearDependencies(o),ku(o),this.modules.delete(o)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:o,debugAsyncAwait:i,allocator:a}={}){let{moduleValue:s,moduleError:l}=this.loadModule(t);if(l)throw l;if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);this.codeGenratorC.compileModule(t,s,{debugGc:r,debugParallelism:o,debugAsyncAwait:i,allocator:a}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}};var Aa=class{constructor(){this.moduleManager=new xr}compileModule(t,n){if(n.skipCodegen){let r=this.moduleManager.loadModule(t);if(r.moduleError)throw r.moduleError}else{this.moduleManager.compileModule(t,{emitC:n.emitC,debugGc:n.debugGc,debugParallelism:n.debugParallelism,debugAsyncAwait:n.debugAsyncAwait,allocator:n.allocator??"mimalloc"});let r=this.moduleManager.getGeneratedCode(),o=n.output,i=o+".c";if(oi.writeFileSync(i,r),console.log(`Generated C code written to ${i}`),n.skipCCompiler)console.log("Skipping C compiler (--skip-c-compiler flag set)");else{let a=n.cCompiler;a==="zig"&&(a="zig");let s=a==="cl",l;if(n.optimize!==void 0){let m=n.optimize;m==="0"?l=s?["/Od","/W4"]:["-Wall","-Wextra","-O0"]:l=s?["/w",`/O${m}`]:["-w",`-O${m}`]}else n.release?l=s?["/w","/O2"]:["-w","-O2"]:l=s?["/Od","/W4"]:["-Wall","-Wextra","-O0"];let u=s?[...l,i,`/Fe${o}`]:[...n.cCompiler==="zig"?["cc"]:[],"-std=c11",...l,i,"-o",o];if(n.sanitize&&(n.sanitize==="address"?s?(u.splice(s?-1:-2,0,"/fsanitize=address"),console.log("AddressSanitizer enabled (memory errors + leak detection)")):(u.splice(-2,0,"-fsanitize=address"),u.splice(-2,0,"-fno-omit-frame-pointer"),console.log("AddressSanitizer enabled (memory errors + leak detection)")):n.sanitize==="leak"&&(s?console.warn("LeakSanitizer is not supported by MSVC, use AddressSanitizer instead"):(u.splice(-2,0,"-fsanitize=leak"),console.log("LeakSanitizer enabled (leak detection only)")))),n.extern.forEach(m=>{oi.existsSync(m)?u.splice(s?-1:-2,0,m):console.warn(`External file ${m} does not exist and will be ignored`)}),(n.allocator??"mimalloc")==="mimalloc"){let m=this.moduleManager.stdPath,y=ni.default.join(ni.default.dirname(m),"vendor"),h=ni.default.join(y,"mimalloc/src/static.c"),_=ni.default.join(y,"mimalloc/include");if(oi.existsSync(h)){u.splice(s?-1:-2,0,h);let g=s?`/I${_}`:`-I${_}`;u.splice(s?-1:-2,0,g),console.log("Using bundled mimalloc")}else console.warn("Bundled mimalloc not found, falling back to standard malloc")}else console.log("Using libc allocator");if(process.platform==="linux"&&!s)try{(0,ri.execSync)("command -v pkg-config",{stdio:"ignore"}),(0,ri.execSync)("pkg-config --exists liburing",{stdio:"ignore"}),u.splice(-2,0,"-luring"),console.log("Using system liburing for async I/O")}catch{console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions.")}console.log(`Compiling with: ${a} ${u.join(" ")}`);let f=(0,ri.spawnSync)(a,u,{stdio:"inherit"});f.status===0?console.log(`Successfully compiled to ${o}`):(console.error(`Compilation failed with exit code ${f.status}`),process.exit(f.status||1))}}}};var po=require("child_process"),pn=zn(require("fs")),rd=zn(require("os")),Pn=zn(require("path"));var Se={reset:"\x1B[0m",green:"\x1B[32m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",bold:"\x1B[1m",dim:"\x1B[2m"};function ry(){typeof global.gc=="function"&&global.gc()}function od(e){let t=Pn.resolve(e);if(!pn.existsSync(t))return console.error(`${Se.red}Error: Path does not exist: ${t}${Se.reset}`),[];let n=pn.statSync(t);return n.isFile()?t.endsWith(".yo")?[t]:(console.error(`${Se.red}Error: File is not a .yo file: ${t}${Se.reset}`),[]):n.isDirectory()?id(t):[]}function id(e){let t=[],n=pn.readdirSync(e,{withFileTypes:!0});for(let r of n){let o=Pn.join(e,r.name);r.isDirectory()?["node_modules","vendor",".git","vscode-extension"].includes(r.name)||t.push(...id(o)):r.isFile()&&r.name.endsWith(".test.yo")&&t.push(o)}return t}function oy(e){let t=[],n=null;try{ya(),ss(),Wa(),Ra(),n=new xr;let r=`file://${e}`,{moduleError:o}=n.loadModule(r);if(o)throw n=null,new Error(`Error evaluating module: ${o}`);let i=n.modules.get(r);if(!i)return console.error(`${Se.red}Error: Module not found after loading: ${e}${Se.reset}`),n=null,t;let a=i.evaluator.getProgram();for(let s of a)if(V(s)&&v(s,A.test)&&s.args.length>=2){let l=s.args[0],u=s.args[1],d="unnamed_test";l.$&&Qe(l.$.value)?d=l.$.value.value:Q(l)&&l.token.type==="string"&&(d=l.token.value),t.push({name:d,bodyExpr:u,filePath:e,lineNumber:l.token.position.row+1})}n=null}catch(r){throw n=null,console.error(`${Se.red}Error parsing ${e}: ${r}${Se.reset}`),r}return t}function iy(e,t){var r;let n=T(((r=e.bodyExpr.$)==null?void 0:r.originalExpr)??e.bodyExpr);return`${t}
2113
2162
 
2114
2163
  // Auto-generated main function for test: ${e.name}
2115
2164
  main :: (fn() -> unit) {
@@ -2117,22 +2166,23 @@ main :: (fn() -> unit) {
2117
2166
  };
2118
2167
 
2119
2168
  export main;
2120
- `}function vf(e,t,n){let r=Date.now(),o=e.name.replace(/[^a-zA-Z0-9_]/g,"_"),i=`${Date.now()}_${Math.random().toString(36).substring(2,8)}`,a=Un.dirname(e.filePath),s=`.yo_test_${o}_${i}`,l=Un.join(a,`${s}.yo`),u=Un.join(a,s),d=Un.join(a,`${s}.c`),c=()=>{for(let f of[l,u,d])on.existsSync(f)&&on.unlinkSync(f)};try{aa(),Ha(),Ia();let f=Cm(e,t);on.writeFileSync(l,f);let m=new br;try{m.compileModule(`file://${l}`,{emitC:!1,debugGc:!1,debugParallelism:!1,debugAsyncAwait:!1,allocator:"libc"})}catch(b){return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Compilation error: ${b instanceof Jt?b.toString():b instanceof Error?b.message:String(b)}`,duration:Date.now()-r}}let y=m.getGeneratedCode();on.writeFileSync(d,y),on.existsSync(l)&&on.unlinkSync(l);let g=["-std=c11","-Wall","-Wextra","-O0","-fsanitize=address","-fno-omit-frame-pointer",d,"-o",u];if(process.platform==="linux")try{(0,so.execSync)("command -v pkg-config",{stdio:"ignore"}),(0,so.execSync)("pkg-config --exists liburing",{stdio:"ignore"}),g.splice(-2,0,"-luring")}catch{console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions.")}let h=(0,so.spawnSync)(n,g,{stdio:"pipe",encoding:"utf-8"});if(h.status!==0)return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`C compilation failed:
2121
- ${h.stderr||h.stdout}`,duration:Date.now()-r};let _=(0,so.spawnSync)(u,[],{stdio:"pipe",encoding:"utf-8",timeout:3e4,env:{...process.env,ASAN_OPTIONS:"detect_leaks=1"}}),E=`${_.stdout||""}${_.stderr||""}`,k=E.includes("LeakSanitizer")||E.includes("detected memory leaks")||E.includes("Direct leak")||E.includes("Indirect leak"),w=_.status===0&&!k;c();let $;if(!w)if(k){let b=E.match(/=+\n([\s\S]*?SUMMARY[\s\S]*?)(\n=+|$)/);$=`Memory leak detected:
2122
- ${b?b[1]:E}`}else $=`Test failed with exit code ${_.status}
2123
- ${_.stdout}
2124
- ${_.stderr}`;return{testName:e.name,filePath:e.filePath,passed:w,errorMessage:$,duration:Date.now()-r}}catch(f){return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Error running test: ${f instanceof Error?f.message:String(f)}`,duration:Date.now()-r}}}async function km(e,t,n,r){let o=[],i=0,a=0,s=!1;if(n===1)for(let{test:l,originalContent:u}of e){if(s)break;let d=vf(l,u,t);if(o.push(d),d.passed)i++,console.log(` ${Ae.green}\u2713${Ae.reset} ${l.name} ${Ae.dim}(${d.duration}ms)${Ae.reset}`);else{if(a++,console.log(` ${Ae.red}\u2717${Ae.reset} ${l.name} ${Ae.dim}(${d.duration}ms)${Ae.reset}`),d.errorMessage&&r.verbose){let c=d.errorMessage.split(`
2169
+ `}function nd(e,t,n){let r=Date.now(),o=e.name.replace(/[^a-zA-Z0-9_]/g,"_"),i=`${Date.now()}_${Math.random().toString(36).substring(2,8)}`,a=Pn.dirname(e.filePath),s=`.yo_test_${o}_${i}`,l=Pn.join(a,`${s}.yo`),u=Pn.join(a,s),d=Pn.join(a,`${s}.c`),c=()=>{for(let m of[l,u,d])pn.existsSync(m)&&pn.unlinkSync(m)},f=null;try{ya(),ss(),Wa(),Ra();let m=iy(e,t);pn.writeFileSync(l,m),f=new xr;try{f.compileModule(`file://${l}`,{emitC:!1,debugGc:!1,debugParallelism:!1,debugAsyncAwait:!1,allocator:"libc"})}catch(F){return f=null,c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Compilation error: ${F instanceof Gt?F.toString():F instanceof Error?F.message:String(F)}`,duration:Date.now()-r}}let y=f.getGeneratedCode();f=null,pn.writeFileSync(d,y),pn.existsSync(l)&&pn.unlinkSync(l);let h=n==="cl",_=h?["/Od","/W4","/fsanitize=address",d,`/Fe${u}`]:[...n==="zig"?["cc"]:[],"-std=c11","-Wall","-Wextra","-O0","-fsanitize=address","-fno-omit-frame-pointer",d,"-o",u];if(process.platform==="linux"&&!h)try{(0,po.execSync)("command -v pkg-config",{stdio:"ignore"}),(0,po.execSync)("pkg-config --exists liburing",{stdio:"ignore"}),_.splice(-2,0,"-luring")}catch{console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions.")}let g=(0,po.spawnSync)(n,_,{stdio:"pipe",encoding:"utf-8"});if(g.status!==0)return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`C compilation failed:
2170
+ ${g.stderr||g.stdout}`,duration:Date.now()-r};let $=(0,po.spawnSync)(u,[],{stdio:"pipe",encoding:"utf-8",timeout:6e4,env:{...process.env,ASAN_OPTIONS:"detect_leaks=1"}}),k=`${$.stdout||""}${$.stderr||""}`,b=k.includes("LeakSanitizer")||k.includes("detected memory leaks")||k.includes("Direct leak")||k.includes("Indirect leak"),E=$.status===0&&!b;c();let w;if(!E)if(b){let F=k.match(/=+\n([\s\S]*?SUMMARY[\s\S]*?)(\n=+|$)/);w=`Memory leak detected:
2171
+ ${F?F[1]:k}`}else w=`Test failed with exit code ${$.status}
2172
+ ${$.stdout}
2173
+ ${$.stderr}`;return{testName:e.name,filePath:e.filePath,passed:E,errorMessage:w,duration:Date.now()-r}}catch(m){return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Error running test: ${m instanceof Error?m.message:String(m)}`,duration:Date.now()-r}}}async function ay(e,t,n,r){let o=[],i=0,a=0,s=!1;if(n===1)for(let{test:l,originalContent:u}of e){if(s)break;let d=nd(l,u,t);if(o.push(d),d.passed)i++,console.log(` ${Se.green}\u2713${Se.reset} ${l.name} ${Se.dim}(${d.duration}ms)${Se.reset}`);else{if(a++,console.log(` ${Se.red}\u2717${Se.reset} ${l.name} ${Se.dim}(${d.duration}ms)${Se.reset}`),d.errorMessage&&r.verbose){let c=d.errorMessage.split(`
2125
2174
  `).map(f=>` ${f}`).join(`
2126
- `);console.log(`${Ae.red}${c}${Ae.reset}`)}else if(d.errorMessage){let c=d.errorMessage.split(`
2127
- `)[0];console.log(` ${Ae.red}${c}${Ae.reset}`)}r.bail&&(s=!0)}}else{let l=0,u=[],d=new Map,c=async()=>{for(;l<e.length&&!s;){let f=l++,{test:m,originalContent:y}=e[f],g=vf(m,y,t);d.set(f,g),g.passed?i++:(a++,r.bail&&(s=!0))}};for(let f=0;f<n&&f<e.length;f++)u.push(c());await Promise.all(u);for(let f=0;f<e.length;f++){let m=d.get(f);if(!m)break;let{test:y}=e[f];if(o.push(m),m.passed)console.log(` ${Ae.green}\u2713${Ae.reset} ${y.name} ${Ae.dim}(${m.duration}ms)${Ae.reset}`);else if(console.log(` ${Ae.red}\u2717${Ae.reset} ${y.name} ${Ae.dim}(${m.duration}ms)${Ae.reset}`),m.errorMessage&&r.verbose){let g=m.errorMessage.split(`
2128
- `).map(h=>` ${h}`).join(`
2129
- `);console.log(`${Ae.red}${g}${Ae.reset}`)}else if(m.errorMessage){let g=m.errorMessage.split(`
2130
- `)[0];console.log(` ${Ae.red}${g}${Ae.reset}`)}}}return{results:o,passedTests:i,failedTests:a,bailed:s}}async function Cf(e,t={}){let n=Date.now(),r=t.cCompiler??"cc",o=Tf.cpus().length,i;t.parallel===void 0||t.parallel===0?i=o:t.parallel===1?i=1:i=Math.min(t.parallel,o);let a;if(t.testNamePattern)try{a=new RegExp(t.testNamePattern)}catch{return console.error(`${Ae.red}Error: Invalid regex pattern: ${t.testNamePattern}${Ae.reset}`),{totalTests:0,passed:0,failed:0,results:[],duration:0}}console.log(`
2131
- ${Ae.bold}${Ae.cyan}Running Yo Tests${Ae.reset}${i>1?` ${Ae.dim}(${i} workers)${Ae.reset}`:""}
2132
- `),a&&console.log(`${Ae.dim}Filtering tests matching: ${t.testNamePattern}${Ae.reset}
2133
- `);let s=new Map,l=0;for(let y of e){let g=Un.relative(process.cwd(),y),h=on.readFileSync(y,"utf-8"),_=Em(y);if(a&&(_=_.filter(E=>a.test(E.name))),_.length>0){let E=_.map(k=>({test:k,originalContent:h,relativePath:g}));s.set(g,E),l+=_.length}}let u=[],d=0,c=0,f=!1;for(let[y,g]of s){if(f)break;if(console.log(`${Ae.dim}${y}${Ae.reset}`),g.length===0){console.log(` ${Ae.yellow}(no tests found)${Ae.reset}`),console.log();continue}let h=await km(g,r,i,{verbose:t.verbose,bail:t.bail});u.push(...h.results),d+=h.passedTests,c+=h.failedTests,f=h.bailed,f&&console.log(`
2134
- ${Ae.yellow}Bailing out early due to test failure (--bail)${Ae.reset}
2135
- `),console.log()}let m=Date.now()-n;return console.log(`${Ae.bold}Test Summary${Ae.reset}`),console.log("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),d>0&&console.log(`${Ae.green}${d} passed${Ae.reset}`),c>0&&console.log(`${Ae.red}${c} failed${Ae.reset}`),console.log(`${Ae.dim}${d+c} total (${m}ms)${Ae.reset}`),console.log(),{totalTests:d+c,passed:d,failed:c,results:u,duration:m}}(0,kf.default)((0,bf.hideBin)(process.argv)).wrap(null).usage(`Usage:
2175
+ `);console.log(`${Se.red}${c}${Se.reset}`)}else if(d.errorMessage){let c=d.errorMessage.split(`
2176
+ `)[0];console.log(` ${Se.red}${c}${Se.reset}`)}r.bail&&(s=!0)}}else{let l=0,u=[],d=new Map,c=async()=>{for(;l<e.length&&!s;){let f=l++,{test:m,originalContent:y}=e[f],h=nd(m,y,t);d.set(f,h),h.passed?i++:(a++,r.bail&&(s=!0))}};for(let f=0;f<n&&f<e.length;f++)u.push(c());await Promise.all(u);for(let f=0;f<e.length;f++){let m=d.get(f);if(!m)break;let{test:y}=e[f];if(o.push(m),m.passed)console.log(` ${Se.green}\u2713${Se.reset} ${y.name} ${Se.dim}(${m.duration}ms)${Se.reset}`);else if(console.log(` ${Se.red}\u2717${Se.reset} ${y.name} ${Se.dim}(${m.duration}ms)${Se.reset}`),m.errorMessage&&r.verbose){let h=m.errorMessage.split(`
2177
+ `).map(_=>` ${_}`).join(`
2178
+ `);console.log(`${Se.red}${h}${Se.reset}`)}else if(m.errorMessage){let h=m.errorMessage.split(`
2179
+ `)[0];console.log(` ${Se.red}${h}${Se.reset}`)}}}return{results:o,passedTests:i,failedTests:a,bailed:s}}async function ad(e,t={}){let n=Date.now(),r=t.cCompiler??"cc",o=rd.cpus().length,i;t.parallel===void 0||t.parallel===0?i=o:t.parallel===1?i=1:i=Math.min(t.parallel,o);let a;if(t.testNamePattern)try{a=new RegExp(t.testNamePattern)}catch{return console.error(`${Se.red}Error: Invalid regex pattern: ${t.testNamePattern}${Se.reset}`),{totalTests:0,passed:0,failed:0,results:[],duration:0}}console.log(`
2180
+ ${Se.bold}${Se.cyan}Running Yo Tests${Se.reset}${i>1?` ${Se.dim}(${i} workers)${Se.reset}`:""}
2181
+ `),a&&console.log(`${Se.dim}Filtering tests matching: ${t.testNamePattern}${Se.reset}
2182
+ `);let s=new Map,l=0,u=[],d=0,c=0,f=!1;for(let y of e){let h=Pn.relative(process.cwd(),y),_=pn.readFileSync(y,"utf-8"),g;try{g=oy(y)}catch($){console.log(`${Se.dim}${h}${Se.reset}`),console.log(` ${Se.red}\u2717${Se.reset} Module evaluation failed`);let k=$ instanceof Error?$.message:String($);console.log(` ${Se.red}${k}${Se.reset}`),console.log(),u.push({testName:"Module evaluation",filePath:y,passed:!1,errorMessage:k,duration:0}),c++;continue}if(a&&(g=g.filter($=>a.test($.name))),g.length>0){let $=g.map(k=>({test:k,originalContent:_,relativePath:h}));s.set(h,$),l+=g.length}}for(let[y,h]of s){if(f)break;if(console.log(`${Se.dim}${y}${Se.reset}`),h.length===0){console.log(` ${Se.yellow}(no tests found)${Se.reset}`),console.log();continue}let _=await ay(h,r,i,{verbose:t.verbose,bail:t.bail});u.push(..._.results),d+=_.passedTests,c+=_.failedTests,f=_.bailed,f&&console.log(`
2183
+ ${Se.yellow}Bailing out early due to test failure (--bail)${Se.reset}
2184
+ `),console.log(),ry()}let m=Date.now()-n;return console.log(`${Se.bold}Test Summary${Se.reset}`),console.log("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),d>0&&console.log(`${Se.green}${d} passed${Se.reset}`),c>0&&console.log(`${Se.red}${c} failed${Se.reset}`),console.log(`${Se.dim}${d+c} total (${m}ms)${Se.reset}`),console.log(),{totalTests:d+c,passed:d,failed:c,results:u,duration:m}}function sy(e){try{return(0,ld.execSync)(`${e} --version`,{stdio:"ignore"}),!0}catch{return!1}}function sd(){let e=["cc","gcc","clang","zig","cl"];for(let t of e)if(sy(t))return t;return null}(0,ud.default)((0,pd.hideBin)(process.argv)).wrap(null).usage(`The Yo Programming Language ${Na.version}
2185
+ Usage:
2136
2186
 
2137
2187
  yo compile <file> [options] Compile a '.yo' file
2138
2188
  Example:
@@ -2155,4 +2205,4 @@ yo add <package>@<version> Install a specific version of a package
2155
2205
  yo remove <package> Uninstall a package
2156
2206
 
2157
2207
  yo run <script> Run a script defined in 'yo.json'
2158
- `).option("o",{alias:"output",describe:"Output file",type:"string",demandOption:!1,default:"a.out"}).option("cc",{alias:"c-compiler",describe:"C Compiler to use",type:"string",demandOption:!1,default:"cc"}).option("t",{alias:"target",describe:"Target language",type:"string",demandOption:!1,default:"c"}).option("emit-c",{describe:"Print C code generated.",type:"boolean",demandOption:!1,default:!1}).option("skip-codegen",{describe:"Do not compile the code.",type:"boolean",demandOption:!1,default:!1}).option("skip-c-compiler",{describe:"Generate C code but skip running the C compiler.",type:"boolean",demandOption:!1,default:!1}).option("debug-gc",{describe:"Enable debug logging for GC and reference counting operations.",type:"boolean",demandOption:!1,default:!1}).option("debug-parallelism",{describe:"Enable debug logging for parallel worker thread operations.",type:"boolean",demandOption:!1,default:!1}).option("debug-async-await",{describe:"Enable debug logging for async/await state machine operations.",type:"boolean",demandOption:!1,default:!1}).option("allocator",{describe:"Memory allocator to use: 'libc' (default) or 'mimalloc'.",type:"string",demandOption:!1,default:"libc",choices:["mimalloc","libc"]}).option("release",{describe:"Build in release mode with optimizations (-O2, no warnings).",type:"boolean",demandOption:!1,default:!1}).option("optimize",{describe:"Set optimization level (0, 1, 2, 3). Overrides --release.",type:"string",demandOption:!1,choices:["0","1","2","3"]}).option("extern",{describe:"External C files to link with. eg: --extern extern1.c extern2.c",type:"array",demandOption:!1,default:[]}).option("sanitize",{describe:"Enable AddressSanitizer for memory leak and error detection. Use 'address' for full sanitizer or 'leak' for leak detection only.",type:"string",demandOption:!1,choices:["address","leak"]}).command("compile <file>","Compile a '.yo' file",e=>{e.positional("file",{describe:"File to compile",type:"string",demandOption:!0})},e=>{let t=e.file;if(!Ea.existsSync(t)){console.log(`File ${t} does not exist`);return}let n="file://"+Ea.realpathSync(t);new $a().compileModule(n,{output:e.o,cCompiler:e.cc,target:e.t,extern:e.extern??[],emitC:e.emitC,skipCodegen:e.skipCodegen,skipCCompiler:e.skipCCompiler,debugGc:e.debugGc,debugParallelism:e.debugParallelism,debugAsyncAwait:e.debugAsyncAwait,release:e.release,optimize:e.optimize,allocator:e.allocator,sanitize:e.sanitize})}).command("test [path]","Run tests in .test.yo files",e=>{e.positional("path",{describe:"Path to test file or directory (default: current directory)",type:"string",default:"."}).option("verbose",{alias:"v",describe:"Show detailed error messages",type:"boolean",default:!1}).option("bail",{alias:"b",describe:"Stop running tests after the first failure",type:"boolean",default:!1}).option("test-name-pattern",{describe:"Only run tests with names matching this regex pattern",type:"string"}).option("parallel",{alias:"p",describe:"Number of tests to run in parallel (0 = auto/max CPUs, 1 = sequential)",type:"number",default:0})},async e=>{let t=e.path,n=$f(t);n.length===0&&(console.log("No test files found."),process.exit(0));let r=e.parallel;r<0&&(console.error("Error: --parallel value cannot be negative"),process.exit(1));let o=await Cf(n,{cCompiler:e.cc,verbose:e.verbose,bail:e.bail,testNamePattern:e.testNamePattern,parallel:r});process.exit(o.failed>0?1:0)}).demandCommand(1,"You need to specify a command (e.g., 'compile')").strict().help().version("version","Show version number",`yo ${Bl.version}`).argv;
2208
+ `).option("o",{alias:"output",describe:"Output file",type:"string",demandOption:!1,default:"a.out"}).option("cc",{alias:"c-compiler",describe:"C Compiler to use: 'cc', 'gcc', 'clang', 'zig', or 'cl' (MSVC)",type:"string",demandOption:!1,choices:["cc","gcc","clang","zig","cl"]}).option("t",{alias:"target",describe:"Target language",type:"string",demandOption:!1,default:"c"}).option("emit-c",{describe:"Print C code generated.",type:"boolean",demandOption:!1,default:!1}).option("skip-codegen",{describe:"Do not compile the code.",type:"boolean",demandOption:!1,default:!1}).option("skip-c-compiler",{describe:"Generate C code but skip running the C compiler.",type:"boolean",demandOption:!1,default:!1}).option("debug-gc",{describe:"Enable debug logging for GC and reference counting operations.",type:"boolean",demandOption:!1,default:!1}).option("debug-parallelism",{describe:"Enable debug logging for parallel worker thread operations.",type:"boolean",demandOption:!1,default:!1}).option("debug-async-await",{describe:"Enable debug logging for async/await state machine operations.",type:"boolean",demandOption:!1,default:!1}).option("allocator",{describe:"Memory allocator to use: 'libc' (default) or 'mimalloc'.",type:"string",demandOption:!1,default:"libc",choices:["mimalloc","libc"]}).option("release",{describe:"Build in release mode with optimizations (-O2, no warnings).",type:"boolean",demandOption:!1,default:!1}).option("optimize",{describe:"Set optimization level (0, 1, 2, 3). Overrides --release.",type:"string",demandOption:!1,choices:["0","1","2","3"]}).option("extern",{describe:"External C files to link with. eg: --extern extern1.c extern2.c",type:"array",demandOption:!1,default:[]}).option("sanitize",{describe:"Enable AddressSanitizer for memory leak and error detection. Use 'address' for full sanitizer or 'leak' for leak detection only.",type:"string",demandOption:!1,choices:["address","leak"]}).command("compile <file>","Compile a '.yo' file",e=>{e.positional("file",{describe:"File to compile",type:"string",demandOption:!0})},e=>{let t=e.file;if(!Ia.existsSync(t)){console.log(`File ${t} does not exist`);return}let n=e.cc;if(!n){let i=sd();i||(console.error("Error: No C compiler found. Please install a C compiler (cc, gcc, clang, zig, or cl) or specify one using the -cc/--c-compiler flag."),process.exit(1)),n=i}let r="file://"+Ia.realpathSync(t);new Aa().compileModule(r,{output:e.o,cCompiler:n,target:e.t,extern:e.extern??[],emitC:e.emitC,skipCodegen:e.skipCodegen,skipCCompiler:e.skipCCompiler,debugGc:e.debugGc,debugParallelism:e.debugParallelism,debugAsyncAwait:e.debugAsyncAwait,release:e.release,optimize:e.optimize,allocator:e.allocator,sanitize:e.sanitize})}).command("test [path]","Run tests in .test.yo files",e=>{e.positional("path",{describe:"Path to test file or directory (default: current directory)",type:"string",default:"."}).option("verbose",{alias:"v",describe:"Show detailed error messages",type:"boolean",default:!1}).option("bail",{alias:"b",describe:"Stop running tests after the first failure",type:"boolean",default:!1}).option("test-name-pattern",{describe:"Only run tests with names matching this regex pattern",type:"string"}).option("parallel",{alias:"p",describe:"Number of tests to run in parallel (0 = auto/max CPUs, 1 = sequential)",type:"number",default:1})},async e=>{let t=e.path,n=od(t);n.length===0&&(console.log("No test files found."),process.exit(0));let r=e.parallel;r<0&&(console.error("Error: --parallel value cannot be negative"),process.exit(1));let o=e.cc;if(!o){let a=sd();a||(console.error("Error: No C compiler found. Please install a C compiler (cc, gcc, clang, zig, or cl) or specify one using the -cc/--c-compiler flag."),process.exit(1)),o=a}let i=await ad(n,{cCompiler:o,verbose:e.verbose,bail:e.bail,testNamePattern:e.testNamePattern,parallel:r});process.exit(i.failed>0?1:0)}).demandCommand(1,"You need to specify a command (e.g., 'compile')").strict().help().version("version","Show version number",`yo ${Na.version}`).argv;