@shd101wyy/yo 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- 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.6",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
+ 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.7",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+`
3
3
  `,this.code}emitHeaderLine(t,n=""){return this.headers+=n+t+`
4
4
  `,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
5
5
  `,this.declarations}print(){return this.headers+`
6
6
  `+this.declarations+`
7
- `+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
+ `+this.code.trim()}};var Ba=require("crypto");var ke={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 bu(e){ui.delete(e)}var ku=1;function wu(e){return`_${mo(e)}_temp_`}function Fu(e){return`${wu(e)}${ku++}`}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(),ku=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}
8
8
  ${Mu({token:n})}`).join(`
9
9
 
10
10
  `)}};function Mu({token:e}){let{position:t,modulePath:n,inputString:r}=e,{row:o,column:i}=t,s=r.split(`
@@ -18,7 +18,7 @@ ${Mu({token:e})}`;return new Gt([{token:e,errorMessage:i+(n!=null&&n.message?`
18
18
  `||e[f]==="\r";)c+=e[f],e[f]===`
19
19
  `&&(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]!==`
20
20
  `&&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]===`
21
- `&&(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
+ `&&(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: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(`
22
22
  `))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.
23
23
  Please use parentheses to clarify:
24
24
 
@@ -27,9 +27,9 @@ ${T(t)} ${s.value} (${T(h)})
27
27
  (${T(t)} ${s.value} ${T(h.args[0])}) ${T(h.func)} ${T(h.args[1])}
28
28
 
29
29
  Or use newline after "${s.value}" to confirm the right-associativity.
30
- `,k=n.slice(r+1,y).some(L=>L.type==="whitespace"&&L.value.includes(`
31
- `)),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(`
32
- `));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
30
+ `,b=n.slice(r+1,y).some(L=>L.type==="whitespace"&&L.value.includes(`
31
+ `)),k=n.slice(0,r),E=this.isOperatorAtLineStart(k,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(`
32
+ `));if(!(b&&!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
33
33
  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(`;
34
34
  `)}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://
35
35
  // === START auto-generated code ===
@@ -38,7 +38,7 @@ ${e}
38
38
  `,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}"
39
39
  ${n.map(r=>T(r)).join(`
40
40
  `)}
41
- `);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
+ `);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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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:
42
42
  Expected: "${x(e.type)}"
43
43
  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(`
44
44
  `)}}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?`
@@ -64,7 +64,7 @@ Given: "${x(t.type)}"`)}return{expectedEnv:e.env,givenEnv:t.env}}var gt="__yo_se
64
64
  ${o}
65
65
  ${r}
66
66
  return ${C.__yo_rc_own[0]}(${gt});
67
- })`}}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
+ })`}}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 bd(e){let t=mi,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>Ge(a.type))),r=tn(e)?`
68
68
  ${C.__yo_decr_rc[0]}(${gt});`:"",o=tn(e)?"":n.length?`
69
69
  match(${gt},
70
70
  ${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(`
@@ -77,7 +77,7 @@ ${l}
77
77
  ${o}
78
78
  ${r}
79
79
  return ();
80
- })`}}function bd(e){let t=yi,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>Ge(a.type))),r=tn(e)?`
80
+ })`}}function kd(e){let t=yi,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>Ge(a.type))),r=tn(e)?`
81
81
  ${C.__yo_incr_rc[0]}(${gt});`:"",o=tn(e)?"":n.length?`
82
82
  match(${gt},
83
83
  ${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(`
@@ -90,7 +90,7 @@ ${l}
90
90
  ${o}
91
91
  ${r}
92
92
  return ${C.__yo_rc_own[0]}(${gt});
93
- })`}}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
+ })`}}function Du({enumType:e,env:t,context:n}){Ot(e);let r=Ke(e),{code:o}=bd(e),{code:i}=kd(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)}
94
94
  ${C.__yo_dyn_drop[0]}(${gt});
95
95
  })`}function Fd(e){return`((fn(${gt} : Self) -> Self) { // ___dup for ${x(e)}
96
96
  ${C.__yo_dyn_dup[0]}(${gt});
@@ -109,9 +109,9 @@ ${l}
109
109
  })`}function Sd(e){return`((fn(${gt} : Self) -> Self) { // ___dup for Iso
110
110
  ${C.__yo_incr_rc_atomic[0]}(${gt});
111
111
  return ${C.__yo_rc_own[0]}(${gt});
112
- })`}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.
112
+ })`}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 bi=null;function Ar(){if(bi)return bi;let e=rt(),t=Ue(e),n={id:"isize",tag:"isize",module:t};return t.receiverType=n,bi=n,n}var ki=null;function fr(){if(ki)return ki;let e=rt(),t=Ue(e),n={id:"u8",tag:"u8",module:t};return t.receiverType=n,ki=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,bi=null,ki=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)||bo(e))return 1;if(ko(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)||bo(e)?8:ko(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.
113
113
  Please consider use 'unit' type instead.
114
- `}])}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
+ `}])}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 kr(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 bo(e){return(e==null?void 0:e.tag)==="i8"}function ko(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 br(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}"
115
115
  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:
116
116
  ${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:
117
117
  ${T(e)}`});if(n!==void 0&&e.args.length!==n)throw p({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
@@ -137,40 +137,40 @@ Impl(...) uses static dispatch and requires the same concrete type in all branch
137
137
  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:
138
138
  `:"")+(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:
139
139
  `:"")+(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:
140
- `:"")+(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:
141
- ${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:
140
+ `:"")+(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,b=[];for(let E=1;E<u;E++){let L=r[E-1].frames[i].variables[c];b.push(L.id)}if(b.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 bn(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:
141
+ ${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 bt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:o=!1}){var g,$,b,k,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:
142
142
  ${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(...).
143
143
  Impl(...) uses static dispatch and requires the same concrete type across all returns.
144
- 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:
145
- ${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:
146
- ${T(_)}`});let k=$.$.type;if(!Fe(k))throw p({token:_.token,errorMessage:`Expected struct type for export, got:
147
- ${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:
148
- ${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:
149
- ${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:
144
+ 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=(b=R.$)==null?void 0:b.env),(k=R.$)!=null&&k.controlFlow){s=R;break}}}if(!s.$)throw p({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
145
+ ${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=kt(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},k={label:"",type:hn(1),isCompileTimeOnly:!0,assignedValue:le($),exprs:{expr:h}};m.module.fields.push(k)}else{let b={label:"",type:hn(1),isCompileTimeOnly:!0,assignedValue:le(g),exprs:{expr:h}};m.module.fields.push(b)}}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:
146
+ ${T(_)}`});let b=$.$.type;if(!Fe(b))throw p({token:_.token,errorMessage:`Expected struct type for export, got:
147
+ ${x(b)}`});let k=$.$.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=b.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:
148
+ ${T(w)}`});let F=w.token.value,L=b.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:
149
+ ${T(g)}`});for(let w=0;w<b.fields.length;w++){let F=b.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}}),k?a.push(k.fields[w]):a.push(void 0),h.$={env:t,type:F.type,value:k?k.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:
150
150
  ${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:
151
151
  ${T(E)}`});if(!ot(E))throw p({token:E.token,errorMessage:`Expected identifier for export, got:
152
152
  ${T(E)}`});if(_=E.token.value,!Q(w))throw p({token:w.token,errorMessage:`Expected identifier for export, got:
153
153
  ${T(w)}`});if(!ot(w))throw p({token:w.token,errorMessage:`Expected identifier for export, got:
154
- ${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
+ ${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 b=$[$.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(!b.isCompileTimeOnly)throw p({token:h.token,errorMessage:`Variable "${g}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:_,type:b.type,isCompileTimeOnly:b.isCompileTimeOnly,assignedValue:b.isCompileTimeOnly?b.value:void 0,defaultValue:void 0,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),a.push(b.value),h.$={env:t,type:b.type,value:b.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=kt(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)}".
155
155
  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)}".
156
156
  At least one of the module or the type must be defined in this module.
157
157
  Module defined in: ${t.definedInModulePath||"unknown"}
158
158
  Type defined in: ${e.definedInModulePath||"unknown"}
159
- 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
+ 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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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),b=bt({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}),k={...f,specializedType:g,body:b,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:k})}else if(m){let h=a.definitionEnv,_=at(h);for(let[$,b]of s.substitutions){let{env:k}=Me({env:_,variable:{name:$,type:ut(),isCompileTimeOnly:!0,value:le(b),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=k}for(let[$,b]of s.valueSubstitutions){let{env:k}=Me({env:_,variable:{name:$,type:b.type,isCompileTimeOnly:!0,value:b,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=k}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[b,k]of s.substitutions){let{env:E}=Me({env:y,variable:{name:b,type:ut(),isCompileTimeOnly:!0,value:le(k),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}for(let[b,k]of s.valueSubstitutions){let{env:E}=Me({env:y,variable:{name:b,type:k.type,isCompileTimeOnly:!0,value:k,token:ke,initializedAtToken:ke,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=bt({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(([b,k])=>`${b}_${x(k)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([b,k])=>`${b}_${He(k)}`).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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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)}".
160
160
  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.
161
161
  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:
162
- ${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:
163
- ${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.
164
- 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(`
165
- 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)}
162
+ ${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 b=e.args[1];if(!V(b)||!v(b,A.where))throw p({token:b.token,errorMessage:`Expected where(...) as second argument in 4-argument generic impl, got: ${T(b)}`});a=!0,s=b,l=e.args[2],u=e.args[3]}else{let b=e.args[1];if(V(b)&&v(b,A.where))throw p({token:b.token,errorMessage:"impl with where clause requires 4 arguments: impl(forall(...), where(...), ReceiverType, Module(...))"});l=b,u=e.args[2]}let d=i.args,c=[];t=at(t);for(let b of d){let k,E;if(V(b)&&v(b,":",2)){let R=b.args[0];if(!Q(R))throw p({token:R.token,errorMessage:`Expected identifier for forall parameter name, got: ${T(R)}`});k=R.token.value,E=b.args[1]}else if(Q(b))k=b.token.value;else throw p({token:b.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${T(b)}`});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,k),{env:B}=Me({env:t,variable:{name:k,type:L,isCompileTimeOnly:!0,value:S,token:b.token,initializedAtToken:b.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=B,F){let R=S.value;c.push({kind:"type",name:k,someType:R})}else c.push({kind:"value",name:k,type:L,unknownValue:S})}if(a&&s)for(let b of s.args){if(!V(b)||!v(b,"<:",2))throw p({token:b.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${T(b)}`});let k=M({expr:b,env:t,context:{...n,isInsideWhereClause:!0}});(o=k.$)!=null&&o.env&&(t=k.$.env)}let f=[];for(let b of c){if(b.kind!=="type")continue;let{someType:k}=b;for(let E of k.module.fields)E.assignedValue&&j(E.assignedValue)&&Fe(E.assignedValue.value)&&f.push({someType:k,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 b=u.args,k=Kr({beginExprs:b,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:y});t=k.env,_=k.moduleType,h=k.moduleValue}else{let b=M({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:y}});if(!b.$||!Je(b.$.value))throw p({token:u.token,errorMessage:"Expected module value for module call argument."});t=b.$.env,h=b.$.value,_=h.type}Kd({receiverTypePattern:y,moduleType:_,whereConstraints:f,env:t,errorToken:e.token}),t=kt(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:
163
+ ${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 kt(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.
164
+ 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 b=h.type.parameters[0];if(b){let k=b.type;if(!vt(k)&&!Re(k)&&!ze(k))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 b=h.fields[g],k=$.type;xe(b)&&b.specializedType&&(k=b.specializedType),i.push({type:k,value:b})}}}}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 b=h.fields[g],k=$.type;xe(b)&&b.specializedType&&(k=b.specializedType),i.push({type:k,value:b})}}}}}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,b=$.fields.findIndex(k=>k.label===t&&me(k.type));if(b>=0){let k=$.fields[b];if(me(k.type)){let E=g.fields[b],w=k.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},b=ae($,g.label);i.push({type:$,value:b})}}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 kn(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 b=g[$],k=P(b,`${n} `,r);if(k==="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=k==="break"||k==="continue"||(k==null?void 0:k.includes("return"));k&&(E||b.$&&!It(b.$.env.modulePath,k))&&i.emitLine(`${n} ${k};`)}}if((d=y.$)!=null&&d.deferredDropExpressions)for(let $ of y.$.deferredDropExpressions){let b=P($,`${n} `,r);b&&i.emitLine(`${n} ${b};`)}}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,b;for(let k=0;k<a.length;k++){let E=a[k];if(V(E)&&v(E,"=>",2)){let w=E.args[0];if(w&&V(w)&&v(w,"."))g=k;else if(w&&V(w)){let F=w.func;F&&V(F)&&v(F,".")&&($=k,w.args.length>0&&Q(w.args[0])&&(b=w.args[0].token.value))}}}if(o.emitLine(`${n}if (${s} != NULL) {`),$>=0){let k=a[$];if(!V(k))o.emitLine(`${n} // Error: Expected => in case`);else{let E=k.args[1];if(b){let F=r,L=!1,S;if(F.stateMachineVariables){for(let[B,R]of F.stateMachineVariables)if(R.name===b){L=!0,S=B;break}}L&&S?o.emitLine(`${n} sm->var_${S} = ${s};`):o.emitLine(`${n} ${Z(c,r)} ${b} = ${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 k=a[g];if(!V(k))o.emitLine(`${n} // Error: Expected => in case`);else{let E=k.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 b=$.args[0],k=$.args[1],E;if(V(b)&&v(b,".",1))E=b.args[0].token.value;else if(V(b)){let F=b.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(b)&&b.args.length>=1){let F=b.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(b.args.length,L.fields.length);S++){let B=b.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(k)){let F=ga(k,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:k,hasAwait:!0,remainingExprs:F,deferredDropExpressions:(_=k.$)==null?void 0:_.deferredDropExpressions}),L.condBranchInfo.set(t.index,S)}}else{let F=P(k,n+" ",r);F&&k.$&&!It(k.$.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 b=0;b<f.length;b++){let k=f[b];if(!k)continue;let E=k.stateNumber,w=b===f.length-1;if(l.emitLine(`
165
+ 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 be of o.capturedVariables)Ie.set(be.id,be);if(a)for(let be of a.fields)Ie.set(be.label,{id:be.label,name:be.label,type:be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ie;for(let be of oe.remainingExprs){let Ae=P(be," ",s);!Ae||!be.$||It(be.$.env.modulePath,Ae)||l.emitLine(` ${Ae};`)}if(oe.deferredDropExpressions)for(let be of oe.deferredDropExpressions){let Ae=P(be," ",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 be=Y.index;l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${be};`),l.emitLine(` goto while_loop_${be}_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&&k.expressions.length>0;if(mp(k," ",s,R),s.pendingDeferredDrops=B,l.emitLine(""),k.awaitPoint){s.inStateMachine=F,s.stateMachineVariables=L;let Y=E+1,W=yp(k.awaitPoint,o),H=(g=k.awaitPoint)==null?void 0:g.isInsideWhile;if(H){let se=k.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=k.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(!k.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 $,b;let h,_=y.exprs.expr;if((b=($=_.$)==null?void 0:$.deferredDupExpressions)!=null&&b.length&&(h=_.$.deferredDupExpressions[0]),!h){let k=[y.label];Q(_)&&k.push(_.token.value);for(let E of k){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,$,b,k,E,w,F,L,S,B,R,Y,W,H,se,ye,oe,pe,_e,Ie,be,Ae,ge,$e,I,U,re,ie,ve,Ee,qe,We,it,Vn,Wt,cn,ii,Ts,Es,Cs,bs,ks,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,bl,kl,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)??((b=e.$)==null?void 0:b.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=(k=N.$)==null?void 0:k.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((be=N.$)!=null&&be.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)}
166
166
  `;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}
167
- `;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
+ `;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&&((bs=D.$)!=null&&bs.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){Ft(D,t,ee);let de=D.$.deferredDupExpressions[0];V(de)&&((ks=de.$)!=null&&ks.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)}
168
168
  `;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)}
169
- `;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)}
170
- `}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)}
169
+ `;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=(bl=e.$)==null?void 0:bl.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&&((kl=e.$)!=null&&kl.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)}
170
+ `}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=kn(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 = ${kn(q,J,n)}, .data = { .${J} = { ${fe} } } }`:`(${ee}){ .tag = ${kn(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,$,b,k,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(""),(b=e.$)!=null&&b.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:(k=e.$)==null?void 0:k.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 be,Ae;let _e;if(!W&&((be=e.$)!=null&&be.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,$,b;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 k=i;k.resolvedConcreteType&&(a=k.resolvedConcreteType.id,s=k.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=(b=e.$)==null?void 0:b.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,$,b,k;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((b=r.$)!=null&&b.variableName&&c!==r.$.variableName){let E=wt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${E} = ${c};`),c=r.$.variableName}let f=(k=e.$)==null?void 0:k.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,$,b,k,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,(b=e.$)==null?void 0:b.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,(k=e.$)==null?void 0:k.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 kn(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=kn(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 b=Te($.label),k=Bn(_,t);return`.${b} = ${k}`}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)}
171
171
  `;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)}
172
172
  `;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}
173
- `}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)?`(
173
+ `}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 b of $.fields)if(b.label===h){let k=$.name;return`${i}.data.${k}.${Te(h)}`}}return`/* ERROR: field ${h} not found in enum ${_.typeName} */`}else if(j(s)&&Ve(s.value)){let _=s.value,g=_.variants.find(b=>b.name===h),$=(y=n.types[_.id])==null?void 0:y.cName;if(g&&!g.fields&&$){let b=kn(_,g.name,n);return`(${$}){ .tag = ${b}, .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 k=Z(m,n);n.emitter.emitLine(`${t}${k} ${f};`)}let h=-1;for(let k=0;k<e.args.length;k++){let E=e.args[k];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=k;break}}}let _=!1;if(h>=0){let k=e.args[h];if(k&&V(k)&&v(k,"=>",2)){let E=k.args[0];E&&nt((o=E.$)==null?void 0:o.value)&&E.$.value.value===!0&&(_=!0)}}if(_&&h>=0){let k=e.args[h];if(k&&V(k)&&v(k,"=>",2)){let E=k.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,b=!1;for(let k=0;k<e.args.length;k++){let E=e.args[k];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(b){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}) {`)}b=!0}let L=nt((l=w.$)==null?void 0:l.value)&&w.$.value.value===!0,S=b&&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};`))}!(b&&L)&&n.emitter.emitLine(`${g}}`)}}}for(let k=0;k<$;k++)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,$,b,k,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=kn(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=kn(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(be=>V(be)&&v(be,":",2))){for(let be of _e)if(V(be)&&v(be,":",2)){let Ae=be.args[0],ge=be.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 be=0;be<_e.length&&be<pe.fields.length;be++){let Ae=_e[be],ge=pe.fields[be];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((b=Ae.$)!=null&&b.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&&((k=H.$)==null?void 0:k.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=kn(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(be=>V(be)&&v(be,":",2))){for(let be of oe)if(V(be)&&v(be,":",2)){let Ae=be.args[0],ge=be.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 be=0;be<Math.min(oe.length,pe.fields.length);be++){let Ae=oe[be],ge=pe.fields[be];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)?`(
174
174
  #ifdef _WIN32
175
175
  Sleep(${t[0]})
176
176
  #else
@@ -754,7 +754,7 @@ static int64_t __yo_file_size(int32_t fd) {
754
754
  #endif // YO_HAS_LIBURING
755
755
 
756
756
  #endif // __linux__
757
- `)}function kp(e,t){e.emitLine(`
757
+ `)}function bp(e,t){e.emitLine(`
758
758
  // ============================================================================
759
759
  // Parallelism Runtime - Thread and Worker
760
760
  // ============================================================================
@@ -1113,7 +1113,7 @@ void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
1113
1113
  yo_cond_signal(&worker->cond);
1114
1114
  yo_mutex_unlock(&worker->mutex);
1115
1115
  }
1116
- `)}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(`
1116
+ `)}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_")||kp(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||kp(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 kp(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),bp(e.emitter,e.debugParallelism),Em(e),bm(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(`
1117
1117
  // Main wrapper - calls __yo_user_main directly
1118
1118
  int main(void) {
1119
1119
  // Initialize async runtime (in case async blocks are used)
@@ -1128,7 +1128,7 @@ int main(void) {
1128
1128
 
1129
1129
  return 0;
1130
1130
  }
1131
- `)}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)
1131
+ `)}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,b=g.captureType;if(n.currentClosureType=$.callType,b&&we(b)&&b.fields.length>0){let k=b.fields.map(w=>w.label);n.currentClosureCaptures=k,n.currentClosureCaptureFrameLevel=e.frameLevel;let E=(_=n.types[b.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),b=(a=_.$)==null?void 0:a.type,k=b&&je(b);if($||k){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,b=De((l=_.$)==null?void 0:l.type)||V(_)&&v(_,A.tuple)&&_.args.length===0,k=y.length>1?y[y.length-2]:null,E=(u=k==null?void 0:k.$)==null?void 0:u.controlFlow;if(!(b&&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)
1132
1132
  void __yo_decr_rc(void* ptr) {
1133
1133
  yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1134
1134
 
@@ -1522,7 +1522,7 @@ static void yo_init_process_cleanup(void) {
1522
1522
  #endif
1523
1523
 
1524
1524
  atexit(yo_process_cleanup);
1525
- }`)}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
1525
+ }`)}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 bm(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,b=e.implClosureCallMap.get($.id),k=(()=>{var w;if(b)return b.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(k){E.push(`(void*)&box->${_}`);for(let w=0;w<c.parameters.length;w++)E.push(`arg${w+1}`);ar(c.return.type)?t.emitDeclarationLine(` ${k}(${E.join(", ")});`):t.emitDeclarationLine(` return ${k}(${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 b=g.funcId,k=(r=e.functions[b])==null?void 0:r.cName;if(!k){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(` ${k}(${B.join(", ")});`):t.emitDeclarationLine(` return ${k}(${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
1526
1526
  // Based on QuickJS trial deletion algorithm
1527
1527
  // See CYCLE_COLLECTION.md for design details
1528
1528
 
@@ -1706,7 +1706,7 @@ typedef struct yo_io_future_t {
1706
1706
  } yo_io_future_t;
1707
1707
 
1708
1708
  // Forward declarations will be added here if needed
1709
- `);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(`
1709
+ `);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(""),km(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 km(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(`
1710
1710
  ${r} __yo_create_iso_${r}(${i} value) {
1711
1711
  ${r} iso = (${r})__yo_malloc(sizeof(${r}_struct));
1712
1712
  iso->header.ref_count = 1;
@@ -1739,7 +1739,7 @@ ${i} __yo_iso_extract_${r}(${r} iso) {
1739
1739
  result.data.Some.value = iso->value;
1740
1740
  }
1741
1741
  return result;
1742
- }`)}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
+ }`)}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=kn(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=kn(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(`
1743
1743
  // 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(`
1744
1744
  // Future state enum - shared by all Future types
1745
1745
  typedef enum {
@@ -1748,7 +1748,7 @@ typedef enum {
1748
1748
  YO_FUTURE_ERROR = 2 // Task failed with error
1749
1749
  } yo_future_state_t;
1750
1750
  `),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:
1751
- ${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(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)??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(g=>g.argValues.length===l.length&&g.argValues.every(($,b)=>{let k=l[b];return j($)&&j(k)?X($.value)&&!X(k.value)?!1:te({type:$.value,env:g.env},{type:k.value,env:o},!0):Nt({value:$,env:g.env},{value:k,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=bt({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:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,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]}":
1752
1752
  ${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]}":
1753
1753
  ${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]}":
1754
1754
  ${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]}":
@@ -1767,7 +1767,7 @@ ${T(o)}`});t=a.$.env;let s=i.$.type;if(!s||!Oe(s))throw p({token:r.token,errorMe
1767
1767
  ${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]}":
1768
1768
  ${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]}":
1769
1769
  ${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]}":
1770
- ${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(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,$,b;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=(b=l.$)==null?void 0:b.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 k=ae(s);return e.$={env:t,type:s,value:k,pathCollection:[]},e}let f;if(tt(c)){let k=c.value;if(f=typeof k=="bigint"?Number(k):k,!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 k=ae(s);return e.$={env:t,type:s,value:k,pathCollection:[]},e}for(let k=0;k<f;k++)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,b=Kt($);b&&(o=b.isFuture.outputType,i=b)}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(b=>b.label));_.capturedVariables=_.capturedVariables.filter(b=>!$.has(b.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:
1771
1771
  ${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":
1772
1772
  ${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:
1773
1773
  ${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:
@@ -1802,36 +1802,36 @@ ${T(r)}`});t=r.$.env;let o=M({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Mt
1802
1802
  ${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:
1803
1803
  ${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:
1804
1804
  ${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:
1805
- ${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
+ ${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=bn(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 $,b,k,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}});(b=L.$)!=null&&b.env&&(n=(k=L.$)==null?void 0:k.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.
1806
1806
  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:
1807
1807
  Expected type: ${x(L.type)}
1808
1808
  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:
1809
1809
  Expected type: ${x(L.type)}
1810
1810
  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:
1811
- ${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:
1812
- ${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:
1813
- ${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:
1811
+ ${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,$=_,b;if(V(_)&&(v(_,"::",2)||v(_,"=",2)||v(_,"?=",2))){let{field:k,env:E}=Un({expr:_,env:t,tupleFieldIndex:h,context:{...n,SelfType:i},forType:"struct"});if(s.find(F=>F.label===k.label))throw p({token:_.token,errorMessage:`Duplicate label "${k.label}" in anonymous struct`});if(!k.isCompileTimeOnly)throw p({token:_.token,errorMessage:`Expected compile-time only field for anonymous struct, got:
1812
+ ${T(_)}`});if(k.defaultValue)throw p({token:((m=k.exprs.defaultValueExpr)==null?void 0:m.token)??k.exprs.expr.token,errorMessage:"Anonymous struct module field cannot have default value for its fields."});if(!k.assignedValue)throw p({token:k.exprs.assignedValueExpr?k.exprs.assignedValueExpr.token:k.exprs.expr.token,errorMessage:"Anonymous struct module field must have assigned value."});s.push(k),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:
1813
+ ${T(g)}`});b=g.token.value}{let k=M({expr:$,env:t,context:{...n,SelfType:i}});if(At(k,n),!k.$)throw p({token:$.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${T($)}`});t=k.$.env;let E=k.$.type,w={exprs:{expr:$,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:$},type:E,label:b??`$field_${ct(t.modulePath)}`,isCompileTimeOnly:!1};a.push(w),u.push(k),k.$.value?l.push((y=k.$)==null?void 0:y.value):l.push(void 0),g&&(g.$=k.$)}}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 bc({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:
1814
1814
  ${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:
1815
1815
  ${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:
1816
1816
  ${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:
1817
1817
  ${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:
1818
1818
  ${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:
1819
- ${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:
1819
+ ${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 kc({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:
1820
1820
  - Expected: ${x(d)}
1821
- - 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:
1821
+ - 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 b,k,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=(b=r.expectedType)==null?void 0:b.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:ke,initializedAtToken:ke,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:ke,initializedAtToken:ke,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=bt({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:((k=f.return.expr)==null?void 0:k.token)??ke,errorMessage:`Incompatible function return type for:
1822
1822
  - Expected: ${x(f.return.type)}
1823
- - 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:
1823
+ - 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)??ke,errorMessage:"Expected to return a compile-time value, but got runtime value."});d=kt(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 k,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=bt({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:((k=t.isFn.callType.return.expr)==null?void 0:k.token)??ke,errorMessage:`Incompatible closure return type:
1824
1824
  - Expected: ${x(t.isFn.callType.return.type)}
1825
- - 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:
1825
+ - 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)??ke,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=kt(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 b;return X(n)?(n.resolvedConcreteType=$,b={...n,resolvedConcreteType:$}):Re(n)?b=n:b=t,e.$={env:h,value:void 0,type:b,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:
1826
1826
  - Expected: ${x(s)}
1827
- - 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:
1827
+ - 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 k,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((k=F.$)!=null&&k.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:
1828
1828
  - Expected: ${x(d)}
1829
1829
  - 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:
1830
1830
  ${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:
1831
1831
  ${x(d)}
1832
1832
 
1833
1833
  Generic functions must be compile-time known to enable monomorphization. Consider using:
1834
- 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.
1834
+ compt(${o}) : ${x(d)}`})}if(a&&!ht(d)&&!kr(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.
1835
1835
 
1836
1836
  Please consider using "<:" to specify the receiver type for a module type, for example:
1837
1837
 
@@ -1845,64 +1845,64 @@ use_id :: (fn(forall(T : Type),
1845
1845
  ) -> T) {
1846
1846
  return IdModule.id(val);
1847
1847
  }
1848
- `});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:
1848
+ `});let{env:b}=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=b,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 b=$.$.value;if(!Fe(b.value))throw p({token:_.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(b.value)}`});let k=b.value,E=Qn({targetType:y,moduleType:k,env:t});if(g){if(E)throw p({token:o.token,errorMessage:`Type ${x(y)} must NOT implement ${x(k)}, but it does.`})}else if(!E)throw p({token:o.token,errorMessage:`Type ${x(y)} does not implement required module ${x(k)}.`})}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&&kr(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 ba({expr:e,env:t,context:n}){var b,k;if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> for function type, got:
1849
1849
  ${T(e)}
1850
1850
 
1851
1851
  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:
1852
- ${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(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=(b=h.$)==null?void 0:b.value;if(j(g))_=g.value;else throw p({token:y.token,errorMessage:`Expected a type for function return type, got:
1853
1853
  ${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:
1854
1854
 
1855
1855
  compt(${T(y)})
1856
1856
 
1857
1857
  Given type:
1858
- ${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
+ ${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:kt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,ParentFunctionType:((k=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:k.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0});return d&&($.whereClauseConstraints=d),t=kt(t,!0),e.$={env:t,value:le($),type:Ot($),pathCollection:[]},e}function ka({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:
1859
1859
  ${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:
1860
- ${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}":
1861
- ${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:
1860
+ ${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)??ke,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}":
1861
+ ${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 b,k,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:
1862
1862
  ${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.
1863
- 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:
1864
- ${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:
1865
- ${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:
1866
- ${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}":
1867
- ${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}":
1863
+ Expected ${t?`label "${t.label}"`:"no label"} at the argument position, but got "${B}".`})}let{parameterType:c,calleeEnv:f}=ka({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}}),(b=m.$)!=null&&b.env&&(o=(k=m.$)==null?void 0:k.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(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:
1864
+ ${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=bn(m,i,!0):(At(m,a),(L=m.$)!=null&&L.env&&(i=m.$.env),i=bn(m,i,!0))}if(!m.$)throw p({token:(u==null?void 0:u.token)??ke,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)??ke,errorMessage:`Cannot assign runtime argument to compile-time parameter:
1865
+ ${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)??ke,errorMessage:`Cannot convert compile-time type to runtime type for argument:
1866
+ ${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)??ke,initializedAtToken:(u==null?void 0:u.token)??ke,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)??ke,errorMessage:`Failed to synthesize types for parameter "${t.label}":
1867
+ ${B.message}`})}let{parameterType:g,calleeEnv:$}=ka({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)??ke,errorMessage:`Type mismatch for parameter "${t.label}":
1868
1868
  Expected: ${x(g)}
1869
- 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
+ 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,be,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&&kr(ge.type)))throw p({token:(r==null?void 0:r.token)??ke,errorMessage:`Too many arguments for function call:
1870
1870
  Expected: ${y} arguments
1871
- 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
+ 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)??ke,errorMessage:`Too few arguments for function call:
1872
1872
  Expected: ${y} arguments
1873
- 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:
1874
- ${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:
1875
- ${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:
1876
- ${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}":
1873
+ 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:ke,type:ge.type,isCompileTimeOnly:!0,initializedAtToken:ke,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:
1874
+ ${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)??ke,errorMessage:U?`Expected type for default value, got:
1875
+ ${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)??ke,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:
1876
+ ${T(U)}`});ie=(_e=it.$)==null?void 0:_e.value}re&&(re.$={env:$,type:ie.type,value:ie,pathCollection:[]});let{parameterType:ve,calleeEnv:Ee}=ka({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)??ke,errorMessage:`Type mismatch for type parameter "${$e.label}":
1877
1877
  Expected: ${x(ve)}
1878
- 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:
1879
- ${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.
1878
+ 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)??ke,{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 b=n.parameters.length;for(let ge=0;ge<b;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:k,calleeEnv:E}=Ho({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if($=E,a.expectedType&&!n.return.isUnquote){let{expectedEnv:ge}=mt({type:k,env:$},{type:a.expectedType.type,env:a.expectedType.env});$=ge;let $e=Ho({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});k=$e.returnType,$=$e.calleeEnv,te({type:a.expectedType.type,env:a.expectedType.env},{type:k,env:$})&&(k=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:
1879
+ ${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,k=ge.type,i=$e,$=I}else{let ge=_t(k)&&k.level===0,$e=`${n.id}_return_sometype`;if(ge)if((be=a.expectedType)!=null&&be.type)S=le(a.expectedType.type);else if(a.isEvaluatingFunctionType){let I=Sn(k,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)??ke,errorMessage:"Cannot infer compt return type. Please provide the expected type."});else S=ae(k,n.return.label)}Om({returnType:k,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:k,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=bt({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}),b={...e,specializedType:$,body:y,funcId:`${e.funcId}_${g}`,funcName:`${e.funcName}_${g}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},k={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:b,env:y.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,k],b}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)??ke,errorMessage:`Failed to infer the function call return type.
1880
1880
  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:
1881
1881
  ${T(r)}`});if(t=o.$.env,!j(o.$.value))throw p({token:r.token,errorMessage:`Iso expects a type as argument, but got:
1882
1882
  ${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:
1883
1883
  ${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}
1884
- 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.
1884
+ Iso requires unique ownership (no aliases). Drop other aliases first.`})}}}return t=bn(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.
1885
1885
  Please consider using "impl" to specify the receiver type explicitly, like:
1886
1886
 
1887
1887
  // impl receiverType, moduleImplementation
1888
1888
  impl Point, Id(Point)(
1889
1889
  id : ((p) -> p)
1890
1890
  );
1891
- `});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:
1892
- ${T(w)}`});k=w.token.value}else throw p({token:E.token,errorMessage:`Expected member label, but got:
1893
- ${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:
1894
- ${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}":
1891
+ `});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,b;for(let k=0;k<n.length;k++){let E=n[k],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:
1892
+ ${T(w)}`});b=w.token.value}else throw p({token:E.token,errorMessage:`Expected member label, but got:
1893
+ ${T(E)}`});if(!t.fields.find(F=>F.label===b))throw p({token:w.token,errorMessage:`Module member with label "${b}" does not exist in the module type.`});if(g.label===b){if($=!0,g.assignedValue)throw p({token:E.token,errorMessage:`Module member "${g.label}" already has a assigned value:
1894
+ ${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 "${b}"`});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 "${b}"`});F=H.type}else throw p({token:E.token,errorMessage:`Module member "${b}" 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 "${b}"`});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 "${b}":
1895
1895
  Expected: ${x(F)}
1896
- 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:
1897
- ${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:
1898
- ${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:
1896
+ 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 k=g.defaultValue,E=g.assignedValue,w=E;if(!E&&k&&(w=k),!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)||br(e)||Mt(e)||Pt(e)}function Zo(e){return Cr(e)||br(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(br(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:
1897
+ ${T(y)}`});if(y){let $=y.token.value,b=e.find(k=>k.label===$);if(b){if(b.assignedValue)throw p({token:m.token,errorMessage:`Cannot use label "${$}" for already assigned value:
1898
+ ${qr(b)}`});f=b}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:
1899
1899
  ${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}":
1900
1900
  Expected: ${x(f.type)}
1901
- 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:
1902
- ${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:
1901
+ 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,$,b,k,E,w,F,L,S,B,R,Y,W,H,se,ye,oe,pe,_e,Ie,be,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=(b=s.$)==null?void 0:b.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:
1902
+ ${T(i)}`});let ie=(k=M({expr:U,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:k.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:
1903
1903
  `},...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:
1904
- `},...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:
1905
- ${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:
1904
+ `},...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 kc({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:
1905
+ ${j(re)?x(re.value):x(I.type)}`})}}}else if(Oe(I.type)||ft(I.type))try{let ie=bc({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:
1906
1906
  ${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:
1907
1907
 
1908
1908
  ${I.tokenAndErrorList.filter(({token:U})=>U.modulePath!==e.token.modulePath).map(({errorMessage:U})=>`- ${U}`).join(`
@@ -1919,9 +1919,9 @@ ${T(e)}
1919
1919
  Found ${d.length} matching calls:
1920
1920
  ${d.map(I=>`${x(I.type)}`).join(`
1921
1921
  `)}
1922
- `});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:
1923
- ${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:
1924
- ${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:
1922
+ `});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=kt(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=kt(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:
1923
+ ${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=kt(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:
1924
+ ${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=((be=i.$)==null?void 0:be.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:
1925
1925
  ${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:
1926
1926
  ${T(e)}`});if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1927
1927
  ${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(
@@ -1937,9 +1937,9 @@ ${T(r)}`});t=o.$.env;let i=(u=o.$)==null?void 0:u.variableName;if(!i)throw p({to
1937
1937
  ${T(o)}
1938
1938
 
1939
1939
  Original expression:
1940
- ${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(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=bn(o,t,!0);let m=M({expr:f,env:t,context:{...n}});return V(m)?(Kn(e,m),e):m}else return t=bn(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=bn(o,t,!0);let m=M({expr:f,env:t,context:{...n}});return V(m)?(Kn(e,m),e):m}else return t=bn(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:
1941
1941
  ${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:
1942
- ${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(c)}`});let h=et(f.$.env,y,{...y,consumedAtToken:e.token});return f.$.env=h,f}else return t=bn(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:
1943
1943
  ${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(
1944
1944
  ${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(`,
1945
1945
  `)}
@@ -1976,7 +1976,7 @@ ${T(r)}`});if(!Qe(l.$.value))throw p({token:r.token,errorMessage:`Expected compt
1976
1976
  ${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:
1977
1977
  ${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:
1978
1978
  ${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:
1979
- ${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
+ ${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.$||!kr(f.$.type)||!f.$.value)throw p({token:c.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
1980
1980
  ${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":
1981
1981
  ${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":
1982
1982
  ${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
@@ -1985,14 +1985,14 @@ ${s.toString()}`});if(!Mt(l.$.type))throw p({token:s.token,errorMessage:`The lev
1985
1985
  ${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:
1986
1986
  ${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:
1987
1987
  ${T($)}`});if(!_t($.$.type))throw p({token:$.token,errorMessage:`Expected type for "${r}" second argument, got:
1988
- ${T($)}`});let k=$.$.value;if(!j(k))throw p({token:$.token,errorMessage:`Expected type value for "${r}" second argument, got:
1989
- ${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:
1988
+ ${T($)}`});let b=$.$.value;if(!j(b))throw p({token:$.token,errorMessage:`Expected type value for "${r}" second argument, got:
1989
+ ${T($)}`});let k=b.value,E=_n(_.$.value),w,F;return E!==null?(w=gs(E,k),F=k):(w=ae(k),F=k),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:
1990
1990
  ${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:
1991
- ${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(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,($,b)=>{if(typeof $=="bigint"||typeof b=="bigint"){let k=typeof $=="bigint"?$:BigInt($),E=typeof b=="bigint"?b:BigInt(b);return k+E}return $+b}),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,($,b)=>{if(typeof $=="bigint"||typeof b=="bigint"){let k=typeof $=="bigint"?$:BigInt($),E=typeof b=="bigint"?b:BigInt(b);return k-E}return $-b}),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,($,b)=>{if(typeof $=="bigint"||typeof b=="bigint"){let k=typeof $=="bigint"?$:BigInt($),E=typeof b=="bigint"?b:BigInt(b);return k*E}return $*b}),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 b=typeof g=="bigint"?g:BigInt(g),k=typeof $=="bigint"?$:BigInt($);return b/k}return Cr(u)||u.tag==="compt_int"?Math.trunc(g/$):g/$}),h=u;break}case"mod":{if(br(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 b=typeof g=="bigint"?g:BigInt(g),k=typeof $=="bigint"?$:BigInt($);return b%k}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:
1992
1992
  ${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 "*"?
1993
1993
  ${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:
1994
- ${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:
1995
- ${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}":
1994
+ ${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(k=>k.name===_))throw p({token:e.token,errorMessage:`Enum variant "${_}" not found in ${x(t)}`});let $={...t,selectedVariantName:_},b=Fn({expr:e,env:n,givenFunc:{type:Ot($),value:le($)},context:{...r}});if(!((l=b.$)!=null&&l.type)||!((u=b.$)!=null&&u.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
1995
+ ${T(e)}`});return{expr:b,type:(d=b.$)==null?void 0:d.type,env:(c=b.$)==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}":
1996
1996
  ${T(r)}`});if(!_t(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1997
1997
  ${T(r)}`});let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1998
1998
  ${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:
@@ -2020,7 +2020,7 @@ ${T(r)}
2020
2020
  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:
2021
2021
  ${T(o)}`});if(!te({type:yt(),env:t},{type:l.$.type,env:t}))throw p({token:o.token,errorMessage:`Expected usize for length, got:
2022
2022
  ${T(o)}`});let u=l.$.value;if(!u)throw p({token:o.token,errorMessage:`Expected compile-time known value for length, got:
2023
- ${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(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 ba({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:
2024
2024
  ${T(r)}`});if(!j(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2025
2025
  ${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:
2026
2026
  ${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:
@@ -2028,13 +2028,13 @@ ${T(r)}`});let i=o.$.value.value,a=Ue(t);return a.isConcrete={concreteType:i},a.
2028
2028
  ${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:
2029
2029
  ${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:
2030
2030
  ${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:
2031
- ${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:
2031
+ ${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(k=>k.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:
2032
2032
  ${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:
2033
2033
  ${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:
2034
- ${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(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:kt(u,!0),parametersFrame:u.frames[u.frames.length-1],isClosure:!0}),y=Ue(kt(u,!0));return y.isFn={callType:m},t=kt(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:
2035
2035
  ${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:
2036
- ${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.
2037
- 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:
2036
+ ${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,$,b,k,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.
2037
+ 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=(b=w.$)==null?void 0:b.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=(k=F.$)==null?void 0:k.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:
2038
2038
  Expected type: ${x(w.type)}
2039
2039
  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:
2040
2040
  Expected type: ${x(w.type)}
@@ -2047,10 +2047,10 @@ ts (excluding closures).
2047
2047
  Module field "${i??"unnamed"}" has type: ${x(m)}
2048
2048
 
2049
2049
  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:
2050
- ${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
+ ${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 b=o.findIndex(k=>k.label===$.label);if(b>=0){if(o[b].assignedValue&&$.assignedValue&&Nt({value:o[b].assignedValue,env:t},{value:$.assignedValue,env:t})||!o[b].assignedValue&&!$.assignedValue&&te({type:o[b].type,env:t},{type:$.type,env:t}))continue;throw console.log(!!o[b].assignedValue,!!$.assignedValue),console.log(x(o[b].type),`
2051
2051
  `,x($.type),`
2052
- `,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:
2053
- ${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:
2052
+ `,te({type:o[b].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 b=g.fields[$],k=g.type.fields[$],E=o.findIndex(w=>w.label===k.label);if(E>=0){if(o[E].assignedValue&&k.assignedValue&&Nt({value:o[E].assignedValue,env:t},{value:k.assignedValue,env:t})||!o[E].assignedValue&&!k.assignedValue&&te({type:o[E].type,env:t},{type:k.type,env:t}))continue;throw p({token:y.token,errorMessage:`Duplicate label 2 "${k.label}" in module`})}else o.push({...g.type.fields[$],assignedValue:b})}}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 k of g.args)V(k)&&v(k,"!")&&k.args.length===1?$.push({expr:k.args[0],isNegated:!0}):$.push({expr:k,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:k,isNegated:E}of $){let w=M({expr:k,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 b=M({expr:h,env:t,context:{...n,SelfType:a,isInsideWhereClause:!0}});(d=b.$)!=null&&d.env&&(t=b.$.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:
2053
+ ${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(k=>k.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 bf({expr:e,env:t,context:n}){return Ce(e,A.newtype),uo({expr:e,env:t,context:n})}function kf({expr:e,env:t,context:n}){if(!v(e,A.object))throw p({token:e.token,errorMessage:`Expected "object", got:
2054
2054
  ${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:
2055
2055
  ${T(r)}`});if(!j(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2056
2056
  ${T(r)}
@@ -2063,16 +2063,16 @@ ${x(r)}${Re(r)?`
2063
2063
  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:
2064
2064
  ${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.
2065
2065
  Expected: "${_e.label}"
2066
- 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
+ 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)??ke,initializedAtToken:(pe==null?void 0:pe.token)??ke,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.
2067
2067
  Expected: "${_e.label}"
2068
- 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:
2068
+ Got: "${ge}"`})}let Ie=pe.token.value,be=_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!==be?be: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:[]},b=!!a,{evaluationContext:k}=Wo({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},o,$,t),E=bt({expr:c,env:t,context:k,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!E.$)throw p({token:c.token,errorMessage:"Failed to evaluate the function body."});t=E.$.env;let w=k.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:
2069
2069
  - Expected: ${x(o.return.type)}
2070
- - 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:
2070
+ - Got : ${x(F)}`});(se=E.$)!=null&&se.env&&(t=(ye=E.$)==null?void 0:ye.env),t=kt(t,!0);let L;b&&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:b&&w?ro(w):[],deferredDupExpressions:i&&R?R:void 0,captureType:i?Y:void 0,closureFunctionValue:i?$:void 0},b&&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:
2071
2071
  Expected type: ${x(i)}
2072
2072
  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:
2073
- ${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':
2074
- ${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':
2075
- ${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:
2073
+ ${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:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,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':
2074
+ ${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},b=M({expr:$,env:t,context:{...n,expectedType:{type:h,env:t}}});if(!b.$)throw p({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
2075
+ ${T(r)}`});t=b.$.env,s=b.$.type,l=b,e.args[0]=b}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 b=[];for(let E=0;E<h.fields.length;E++){let w=h.fields[E],F=$.fields.findIndex(L=>L.label===w.label);F===-1?b.push(void 0):b.push($.fields[F].assignedValue)}let k=Lr(h,b);d.push(k),u.push(k.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":bo(u)?i="I8":ko(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:
2076
2076
  ${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:
2077
2077
  ${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:
2078
2078
  ${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.
@@ -2081,35 +2081,35 @@ ${x(s)}`});if(rr(s)&&l)throw p({token:r.token,errorMessage:`Unexpected "compt"
2081
2081
  ${x(s)}
2082
2082
 
2083
2083
  Generic functions must be compile-time known to enable monomorphization. Consider using:
2084
- 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}".
2085
- 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)}
2086
- ${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:
2087
- - Expected: ${x(k.type)}
2088
- - Given : ${x(b)}`})}catch{throw p({token:r.token,errorMessage:`Incompatible types:
2089
- - Expected: ${x(k.type)}
2090
- - Given : ${x(b)}`})}else throw p({token:r.token,errorMessage:`Incompatible types:
2091
- - Expected: ${x(k.type)}
2092
- - 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(...).
2084
+ 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 b=$[$.length-1];if(!b.isReassignable)throw p({token:r.token,errorMessage:`Cannot reassign "${g}".
2085
+ You can mutate fields (e.g., ${g}.field = value) but cannot reassign itself.`});if(o=M({expr:o,env:t,context:{...n,expectedType:{type:b.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 k=(l=o.$)==null?void 0:l.type;if(!k)try{let{expr:W,type:H,env:se}=ur({expr:o,type:b.type,env:t,context:{...n}});o=W,k=H,t=se}catch(W){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2086
+ ${W}`})}if(b.isCompileTimeOnly||(k=Tt({type:k,expectedType:b.type,expr:o,env:t})),!te({type:b.type,env:t},{type:k,env:t}))if(Yr(b.type))try{let{expr:W,type:H,env:se}=ur({expr:o,type:b.type,env:t,context:{...n}});if(te({type:b.type,env:se},{type:H,env:se})){o=W,k=H,t=se;let ye=ey(b.type,t);t=et(t,b,{...b,type:ye})}else throw p({token:r.token,errorMessage:`Incompatible types:
2087
+ - Expected: ${x(b.type)}
2088
+ - Given : ${x(k)}`})}catch{throw p({token:r.token,errorMessage:`Incompatible types:
2089
+ - Expected: ${x(b.type)}
2090
+ - Given : ${x(k)}`})}else throw p({token:r.token,errorMessage:`Incompatible types:
2091
+ - Expected: ${x(b.type)}
2092
+ - Given : ${x(k)}`});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(k)&&L.selectedVariantName!==k.selectedVariantName&&(L={...L,selectedVariantName:k.selectedVariantName}),X(L)&&X(k)&&k.resolvedConcreteType&&(L={...L,resolvedConcreteType:k.resolvedConcreteType});let S=!1,B=b.isOwningTheSameRcValueAs;if(b.initializedAtToken){if(X(L))throw st([{token:r.token,errorMessage:`Cannot reassign variable "${g}" of type Impl(...).
2093
2093
  Impl(...) uses static dispatch and the concrete type is fixed at first assignment.
2094
- 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)}
2095
- ${b}`})}if(!te({type:$,env:t},{type:k,env:t}))throw p({token:r.token,errorMessage:`Incompatible types:
2094
+ Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:b.initializedAtToken??b.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;b.frameLevel<oe&&so(b.name,b.frameLevel,"own",r.token,n)}let W=b.isCompileTimeOnly?F:void 0;if(W&&pr(W)){let oe=b.type;W=Yn(oe,[...W.elements])}else if(W&&Ut(W)){let oe=b.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,b,{...b,id:H,value:W,type:L,isOwningTheRcValue:Ge(L),isOwningTheSameRcValueAs:ye}),S=!0}else{if(n.isEvaluatingLoopBody&&b.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:b.token,errorMessage:"Defined here:"}]);if(((d=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)==="function-body"&&b.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:b.token,errorMessage:"Defined here:"}]);let W=b.isCompileTimeOnly?F:void 0;if(W&&pr(W)){let ye=b.type;W=Yn(ye,[...W.elements])}else if(W&&Ut(W)){let ye=b.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,b,{...b,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:b.value,type:b.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 k of g.$.pathCollection)if(k.length>0){let E=k[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 b=(m=o.$)==null?void 0:m.type;if(!b)try{let{expr:k,type:E,env:w}=ur({expr:o,type:$,env:t,context:{...n}});o=k,b=E,t=w}catch(k){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2095
+ ${k}`})}if(!te({type:$,env:t},{type:b,env:t}))throw p({token:r.token,errorMessage:`Incompatible types:
2096
2096
  - Expected: ${x($)}
2097
- - 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:
2097
+ - Given : ${x(b)}`});if(g.$.pathCollection&&g.$.pathCollection.length>0){let k=g.$.pathCollection[0];if(k&&k.length>=2){let E=k[0],w=k[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:
2098
2098
 
2099
- 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:
2099
+ 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 b=$.args[0],k=$.args[1],E=t;o.push({condExpr:b,caseBodyExpr:k,caseEnv:E})}let i=[];for(let g=0;g<o.length;g++){let{condExpr:$,caseBodyExpr:b,caseEnv:k}=o[g],E=Q($)?M({expr:$,env:k,context:{...n,expectedType:{type:Xe(),env:k}}}):bt({expr:$,env:k,context:{...n,expectedType:{type:Xe(),env:k}},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:b,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:b})=>nt(b)&&b.value===!1)){a=g;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:g,caseEnv:$,condExpr:b}=i[a];b.$&&(b.$.caseExecuted=!0);let k=bt({expr:g,env:$,context:{...n},variablesToAdd:[]});if((d=k.$)!=null&&d.controlFlow)return e.$={env:k.$.env,type:((c=n.expectedType)==null?void 0:c.type)??k.$.type,value:k.$.value,pathCollection:k.$.pathCollection,controlFlow:k.$.controlFlow},e;{if(!((f=k.$)!=null&&f.type))throw p({token:k.token,errorMessage:`Expected type for cond statement, got ${T(k)}`});s.push(k),l.push(k.$.value),u={type:k.$.type,env:k.$.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,$=[],b=[];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=bt({expr:F,env:L,context:{...n,isExecuting:!1},variablesToAdd:[]});if((y=S.$)!=null&&y.controlFlow){$.push(S.$.controlFlow),S.$.controlFlow==="return"&&b.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:
2100
2100
  - Expected: ${x(n.expectedType.type)}
2101
2101
  - 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:
2102
2102
  - Previous: ${x(u.type)}
2103
- - 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
+ - Current : ${x(S.$.type)}`})}}let k;if($.every(E=>E==="return")?k="return":$.every(E=>E==="break")?k="break":$.every(E=>E==="continue")?k="continue":n.isEvaluatingLoopBody?$.find(E=>E==="continue")?k="continue":$.find(E=>E==="break")?k="break":$.find(E=>E==="return")&&(k="return"):k=void 0,g||!k){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(k==="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(k==="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(k==="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:
2104
2104
  ${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:
2105
2105
  ${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:
2106
2106
  ${T(e)}
2107
2107
  ${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}":
2108
- ${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:
2108
+ ${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],$,b,k,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)}`});k=w;let L=k.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,b=F.token;else throw p({token:F.token,errorMessage:`Nested destructuring is not supported:
2109
2109
 
2110
2110
  ${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:
2111
2111
 
2112
- ${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:
2112
+ ${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,b=y.token}else throw p({token:y.token,errorMessage:`Unsupported destructuring pattern for: ${T(y)}`})}if($&&b){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:b,initializedAtToken:b,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=w,y.$={env:a,type:g.type,value:_,pathCollection:[]},k&&(k.$={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:
2113
2113
 
2114
2114
  ${T(e)}`}):p({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
2115
2115
 
@@ -2121,11 +2121,11 @@ ${F}`})}if(!te({type:o.$.type,env:t},{type:g,env:t}))throw p({token:o.token,erro
2121
2121
  ${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:
2122
2122
  ${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}".
2123
2123
  Got runtime value. Please consider using ":=" instead of "::":
2124
- ${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:
2124
+ ${T(i)}`});o.$={...o.$,env:t,type:o.$.type,value:r?$??ae(o.$.type,o.token.value):void 0,pathCollection:[]};let b=o.$.type;X(b)&&g&&X(g)&&g.resolvedConcreteType&&(b={...b,resolvedConcreteType:g.resolvedConcreteType},o.$.type=b);let k=Do(i,t,t.modulePath),E=k;k!=null&&k.consumedAtToken&&(E=void 0);let{env:w}=Me({env:t,variable:{name:o.token.value,type:b,isCompileTimeOnly:r,value:o.$.value,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:Ge(b),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 b,k,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}}):bt({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,be=u.variants.find(re=>re.name===Ie);if(!be&&Ie!=="_")throw p({token:oe.token,errorMessage:`Enum variant "${Ie}" not found in ${x(u)}`});if(be&&be.fields&&be.fields.length>0)throw p({token:oe.token,errorMessage:`Enum variant "${Ie}" has ${be.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=bt({expr:$e,env:ye,context:{...n,isExecuting:Ut(s)&&s.variantName===Ie},variablesToAdd:[]});if(!((b=I.$)!=null&&b.type))throw p({token:$e.token,errorMessage:`Expected type for match result expression, got ${T($e)}`});let U=kt(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:((k=n.expectedType)==null?void 0:k.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:
2125
2125
  - Expected: ${x(n.expectedType.type)}
2126
2126
  - 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:
2127
2127
  - Previous: ${x(f.type)}
2128
- - 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:
2128
+ - 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,be=u.variants.find(ie=>ie.name===Ie);if(!be)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(be.fields&&be.fields.length>0){if(!Ae.some(ve=>V(ve)&&v(ve,":",2))&&Ae.length!==be.fields.length)throw p({token:oe.token,errorMessage:`Variant "${Ie}" expects ${be.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),be.fields&&be.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=be.fields.findIndex(cn=>cn.label===it);if(Vn===-1)throw p({token:qe.token,errorMessage:`Label "${it}" not found in variant "${Ie}". Available labels: ${be.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=be.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=be.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=bt({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=kt(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:
2129
2129
  - Previous: ${x(f.type)}
2130
2130
  - Current : ${x(U.$.type)}`})}}else throw p({token:oe.token,errorMessage:`Invalid pattern in match expression: ${T(oe)}
2131
2131
  Supported patterns:
@@ -2137,7 +2137,7 @@ Supported patterns:
2137
2137
  - `)}`})}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:
2138
2138
  ${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:
2139
2139
  ${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:
2140
- ${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(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,$,b,k;if(!v(e,"."))throw p({token:e.token,errorMessage:`Expected "." for property access, got:
2141
2141
  ${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:
2142
2142
  ${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:
2143
2143
  ${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:
@@ -2146,20 +2146,20 @@ ${T(o)}`});let w=o.token.value,F=E.value.module.fields.findLast(L=>L.label===w);
2146
2146
  ${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:
2147
2147
  ${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:
2148
2148
  ${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:
2149
- ${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:
2150
- ${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:
2149
+ ${T(o)}`});if(ot(o)){let F=o.token.value;{let L=E.findIndex(B=>B.label===F);if(L<0){if(Fe((b=r.$)==null?void 0:b.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:
2150
+ ${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=(k=r.$)==null?void 0:k.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:
2151
2151
  ${T(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!v(e,A.recur))throw p({token:e.token,errorMessage:`Expected recur, got:
2152
2152
  ${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:
2153
2153
  ${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:
2154
- ${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)}`});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=bt({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the condition expression:
2155
2155
  ${T(r)}`});if(!Cn(a.$.type))throw p({token:r.token,errorMessage:`Expected bool type for condition expression, got:
2156
- ${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(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=bt({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:
2157
2157
  ${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:
2158
2158
  ${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:
2159
2159
  ${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:
2160
2160
  ${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:
2161
- ${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}":
2162
- ${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}
2161
+ ${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))?ba({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)?kf({expr:e,env:t,context:{...n}}):v(e,A.newtype)?bf({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)?bt({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}":
2162
+ ${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),bu(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.toString();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 g=n.optimize;g==="0"?l=s?["/Od","/W4"]:["-Wall","-Wextra","-O0"]:l=s?["/w",`/O${g}`]:["-w",`-O${g}`]}else n.release?l=s?["/w","/O2"]:["-w","-O2"]:l=s?["/Od","/W4"]:["-Wall","-Wextra","-O0"];let u=s?["/std:c11",...l,i,`/Fe${o}`]:[...n.cCompiler==="zig"?["cc"]:[],"-std=c11",...l,i,"-o",o];if(n.debugSymbols&&(s?u.splice(-1,0,"/Zi"):u.splice(-2,0,"-g"),console.log("Debug symbols enabled")),n.strip&&(n.debugSymbols&&console.warn("Warning: --strip and -g conflict; debug symbols will be stripped"),s?console.warn("Symbol stripping (-s) is not supported with MSVC"):(u.splice(-2,0,"-s"),console.log("Symbol stripping enabled"))),n.static&&(s?(u.splice(-1,0,"/MT"),console.log("Static linking enabled")):(u.splice(-2,0,"-static"),console.log("Static linking enabled"))),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(g=>{oi.existsSync(g)?u.splice(s?-1:-2,0,g):console.warn(`External file ${g} does not exist and will be ignored`)}),(n.includePaths??[]).forEach(g=>{let $=s?`/I${g}`:`-I${g}`;u.splice(s?-1:-2,0,$)}),(n.defines??[]).forEach(g=>{let $=s?`/D${g}`:`-D${g}`;u.splice(s?-1:-2,0,$)}),(n.libraryPaths??[]).forEach(g=>{s?u.splice(-1,0,`/LIBPATH:${g}`):u.splice(-2,0,`-L${g}`)}),(n.libraries??[]).forEach(g=>{s?u.splice(-1,0,`${g}.lib`):u.splice(-2,0,`-l${g}`)}),(n.allocator??"mimalloc")==="mimalloc"){let g=this.moduleManager.stdPath,$=ni.default.join(ni.default.dirname(g),"vendor"),b=ni.default.join($,"mimalloc/src/static.c"),k=ni.default.join($,"mimalloc/include");if(oi.existsSync(b)){u.splice(s?-1:-2,0,b);let E=s?`/I${k}`:`-I${k}`;u.splice(s?-1:-2,0,E),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.")}n.cflags&&(n.cflags.trim().split(/\s+/).forEach($=>{u.splice(s?-1:-2,0,$)}),console.log(`Custom compiler flags added: ${n.cflags}`)),console.log(`Compiling with: ${a} ${u.join(" ")}`);let _=(0,ri.spawnSync)(a,u,{stdio:"inherit"});_.status===0?console.log(`Successfully compiled to ${o}`):(console.error(`Compilation failed with exit code ${_.status}`),process.exit(_.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}
2163
2163
 
2164
2164
  // Auto-generated main function for test: ${e.name}
2165
2165
  main :: (fn() -> unit) {
@@ -2168,8 +2168,8 @@ main :: (fn() -> unit) {
2168
2168
 
2169
2169
  export main;
2170
2170
  `}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:
2171
- ${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:
2172
- ${F?F[1]:k}`}else w=`Test failed with exit code ${$.status}
2171
+ ${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"}}),b=`${$.stdout||""}${$.stderr||""}`,k=b.includes("LeakSanitizer")||b.includes("detected memory leaks")||b.includes("Direct leak")||b.includes("Indirect leak"),E=$.status===0&&!k;c();let w;if(!E)if(k){let F=b.match(/=+\n([\s\S]*?SUMMARY[\s\S]*?)(\n=+|$)/);w=`Memory leak detected:
2172
+ ${F?F[1]:b}`}else w=`Test failed with exit code ${$.status}
2173
2173
  ${$.stdout}
2174
2174
  ${$.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(`
2175
2175
  `).map(f=>` ${f}`).join(`
@@ -2180,16 +2180,20 @@ ${$.stderr}`;return{testName:e.name,filePath:e.filePath,passed:E,errorMessage:w,
2180
2180
  `)[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(`
2181
2181
  ${Se.bold}${Se.cyan}Running Yo Tests${Se.reset}${i>1?` ${Se.dim}(${i} workers)${Se.reset}`:""}
2182
2182
  `),a&&console.log(`${Se.dim}Filtering tests matching: ${t.testNamePattern}${Se.reset}
2183
- `);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
+ `);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 b=$ instanceof Error?$.message:String($);console.log(` ${Se.red}${b}${Se.reset}`),console.log(),u.push({testName:"Module evaluation",filePath:y,passed:!1,errorMessage:b,duration:0}),c++;continue}if(a&&(g=g.filter($=>a.test($.name))),g.length>0){let $=g.map(b=>({test:b,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(`
2184
2184
  ${Se.yellow}Bailing out early due to test failure (--bail)${Se.reset}
2185
2185
  `),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}
2186
2186
  Usage:
2187
2187
 
2188
2188
  yo compile <file> [options] Compile a '.yo' file
2189
- Example:
2190
- $ yo compile hello.yo -o hello
2191
- $ yo compile hello.yo -cc clang -o hello
2192
- $ yo compile hello.yo -t wasm -o hello.wasm
2189
+ Examples:
2190
+ $ yo compile main.yo -o app
2191
+ $ yo compile main.yo -cc clang -o app
2192
+ $ yo compile main.yo -l m -o app
2193
+ $ yo compile main.yo -I./include -L./lib -l mylib -o app
2194
+ $ yo compile main.yo --release -D NDEBUG -o app
2195
+ $ yo compile main.yo -g -o app_debug
2196
+ $ yo compile main.yo --release -s --cflags='-march=native' -o app
2193
2197
 
2194
2198
  yo test [path] [options] Run tests
2195
2199
  Example:
@@ -2199,11 +2203,4 @@ Example:
2199
2203
 
2200
2204
  yo --help Show this help message
2201
2205
  yo --version Show version number
2202
-
2203
- yo install Install all packages
2204
- yo add <package> Install a package
2205
- yo add <package>@<version> Install a specific version of a package
2206
- yo remove <package> Uninstall a package
2207
-
2208
- yo run <script> Run a script defined in 'yo.json'
2209
- `).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;
2206
+ `).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("I",{alias:"include-path",describe:"Add directory to include search path (like gcc -I). Can be specified multiple times.",type:"array",demandOption:!1,default:[]}).option("L",{alias:"library-path",describe:"Add directory to library search path (like gcc -L). Can be specified multiple times.",type:"array",demandOption:!1,default:[]}).option("l",{alias:"library",describe:"Link against library (like gcc -l). Can be specified multiple times. Example: -l m",type:"array",demandOption:!1,default:[]}).option("D",{alias:"define",describe:"Define preprocessor macro (like gcc -D). Can be specified multiple times. Example: -D DEBUG -D VERSION=1",type:"array",demandOption:!1,default:[]}).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"]}).option("g",{alias:"debug-symbols",describe:"Include debug symbols in the binary (like gcc -g).",type:"boolean",demandOption:!1,default:!1}).option("s",{alias:"strip",describe:"Strip symbols from the binary to reduce size (like gcc -s).",type:"boolean",demandOption:!1,default:!1}).option("static",{describe:"Produce a statically linked binary.",type:"boolean",demandOption:!1,default:!1}).option("cflags",{describe:"Pass arbitrary flags directly to the C compiler. Example: --cflags '-march=native -mtune=native'",type:"string",demandOption:!1}).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??[],includePaths:e.I??[],libraryPaths:e.L??[],libraries:e.l??[],defines:e.D??[],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,debugSymbols:e.g,strip:e.s,static:e.static,cflags:e.cflags})}).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;