@shd101wyy/yo 0.0.24 → 0.0.25

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.
package/out/esm/index.mjs CHANGED
@@ -3,23 +3,23 @@ var Ro=class{constructor(){this.headers="";this.declarations="";this.code=""}emi
3
3
  `,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
4
4
  `,this.declarations}print(){return this.headers+`
5
5
  `+this.declarations+`
6
- `+this.code.trim()}};import{readFileSync as tm}from"node:fs";import nm from"path";var Tn=class{constructor({characterIndex:t,message:n,row:r}){this.characterIndex=t,this.message=n,this.row=r}toString(){return`Lexer Error at row ${this.row+1}: ${this.message}`}},rn=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
- ${_l({token:n})}`).join(`
6
+ `+this.code.trim()}};import{readFileSync as im}from"node:fs";import om from"path";var Tn=class{constructor({characterIndex:t,message:n,row:r}){this.characterIndex=t,this.message=n,this.row=r}toString(){return`Lexer Error at row ${this.row+1}: ${this.message}`}},rn=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
+ ${dl({token:n})}`).join(`
8
8
 
9
- `)}};function _l({token:e}){let{position:t,modulePath:n,inputString:r}=e,{row:i,column:o}=t,s=r.split(`
9
+ `)}};function dl({token:e}){let{position:t,modulePath:n,inputString:r}=e,{row:i,column:o}=t,s=r.split(`
10
10
  `)[i];return`${n}:${i+1}:${o+1}:
11
11
  ${s}
12
12
  ${" ".repeat(o+Math.floor(e.value.length/2))}^`}function m({token:e,errorMessage:t,cause:n,isAssertionError:r,kind:i}){let o=`${t.trim()}
13
13
 
14
- ${_l({token:e})}`;return new rn([{token:e,errorMessage:o+(n?.message?`
15
- `+n.message:"")}],r,i)}function nt(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new rn(e,t,n)}var Ht=($=>($.Operator="operator",$.Dot=".",$.LParen="(",$.RParen=")",$.LBracket="[",$.RBracket="]",$.LCurlyBracket="{",$.RCurlyBracket="}",$.Char="char",$.String="string",$.Identifier="identifier",$.Integer="integer",$.Float="float",$.Bool="bool",$.Semicolon=";",$.Comma=",",$.SingleLineComment="single_line_comment",$.MultiLineComment="multi_line_comment",$.Whitespace="whitespace",$.TemplateString="template_string",$))(Ht||{}),se={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}},zy={modulePath:"drop",inputString:"drop",type:"identifier",value:"drop",position:{row:0,column:0,character:0}},Da=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function Ki(e){return Da.includes(e)}function Gn(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!Ki(r)){t=!1;break}}return t}var Ma=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function dl(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 new Error("Expected '{', '(' or '['");t=t+1;let i=1,o=-1;for(;;){let a=e[t];if(!a)return-1;if(a.type===n){if(i=i-1,i===0){o=t;break}}else a.type===r&&(i=i+1);t=t+1}return o}var Oa;function ml(e){Oa=e}function x({expr:e,env:t,context:n}){if(!Oa)throw new Error("Internal Error: evaluateExpression function is not set.");return Oa({expr:e,env:t,context:n})}function yl(e,t){let n=[],r=0,i=0;for(let o=0;o<e.length;o++){let a=e[o],s=o-i,l=o,u="",c=o;if(e[c]===".")for(;e[c]===".";)u+=e[c],c=c+1;else for(;Ki(e[c])&&e[c]!==".";)u+=e[c],c=c+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=c-1;continue}switch(a){case" ":case" ":case`
14
+ ${dl({token:e})}`;return new rn([{token:e,errorMessage:o+(n?.message?`
15
+ `+n.message:"")}],r,i)}function nt(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new rn(e,t,n)}var qt=($=>($.Operator="operator",$.Dot=".",$.LParen="(",$.RParen=")",$.LBracket="[",$.RBracket="]",$.LCurlyBracket="{",$.RCurlyBracket="}",$.Char="char",$.String="string",$.Identifier="identifier",$.Integer="integer",$.Float="float",$.Bool="bool",$.Semicolon=";",$.Comma=",",$.SingleLineComment="single_line_comment",$.MultiLineComment="multi_line_comment",$.Whitespace="whitespace",$.TemplateString="template_string",$))(qt||{}),ae={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}},Wy={modulePath:"drop",inputString:"drop",type:"identifier",value:"drop",position:{row:0,column:0,character:0}},Oa=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function Ki(e){return Oa.includes(e)}function Gn(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!Ki(r)){t=!1;break}}return t}var Ra=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function ml(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 new Error("Expected '{', '(' or '['");t=t+1;let i=1,o=-1;for(;;){let a=e[t];if(!a)return-1;if(a.type===n){if(i=i-1,i===0){o=t;break}}else a.type===r&&(i=i+1);t=t+1}return o}var Pa;function yl(e){Pa=e}function x({expr:e,env:t,context:n}){if(!Pa)throw new Error("Internal Error: evaluateExpression function is not set.");return Pa({expr:e,env:t,context:n})}function gl(e,t){let n=[],r=0,i=0;for(let o=0;o<e.length;o++){let a=e[o],s=o-i,l=o,u="",c=o;if(e[c]===".")for(;e[c]===".";)u+=e[c],c=c+1;else for(;Ki(e[c])&&e[c]!==".";)u+=e[c],c=c+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=c-1;continue}switch(a){case" ":case" ":case`
16
16
  `:case"\r":{let p="",f=o,_=r;for(;e[f]===" "||e[f]===" "||e[f]===`
17
17
  `||e[f]==="\r";)p+=e[f],e[f]===`
18
18
  `&&(r++,i=f+1),f=f+1;n.push({type:"whitespace",value:p,position:{row:_,column:s,character:l},modulePath:t,inputString:e}),o=f-1;break}case"/":if(e[o+1]==="/"){let p="",f=o;for(;e[f]!==`
19
19
  `&&f<e.length;)p+=e[f],f=f+1;n.push({type:"single_line_comment",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=f-1}else if(e[o+1]==="*"){let p=o,f="",_=r,d=1;for(f+=e[p],p++,f+=e[p],p++;d>0&&p<e.length;){if(e[p]===`
20
20
  `&&(i=p+1,r++),e[p]==="/"&&e[p+1]==="*"){d++,f+="/*",p+=2;continue}if(e[p]==="*"&&e[p+1]==="/"){d--,f+="*/",p+=2;continue}f+=e[p],p++}if(d>0)throw new Tn({message:"Unterminated multi-line comment",characterIndex:e.length-1,row:r});n.push({type:"multi_line_comment",value:f,position:{row:_,column:s,character:l},modulePath:t,inputString:e}),o=p-1}else throw new Tn({message:`Unexpected character ${a}`,characterIndex:o+1,row:r});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 p="";for(let f=o+1;f<e.length;f++){if(e[f]==="\\"){p+=e[f],f=f+1,p+=e[f];continue}if(e[f]==="'"){o=f;break}p+=e[f]}if(p.length===1||p.length===2&&p[0]==="\\")n.push({type:"char",value:`'${p}'`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});else throw new Tn({message:`Invalid char '${p}', expected char to have length 1.`,characterIndex:o,row:r});break}case'"':{let p="";for(let f=o+1;f<e.length;f++){if(e[f]==="\\"){p+=e[f],f=f+1,p+=e[f];continue}if(e[f]==='"'){o=f;break}p+=e[f]}n.push({type:"string",value:`"${p}"`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case"`":{let p="",f=0,_=o+1;for(;_<e.length;){if(e[_]==="\\"&&_+1<e.length){let d=e[_+1];if(d==="$"){p+="\\$",_=_+2;continue}else{switch(_=_+1,d){case"n":p+=`
21
21
  `;break;case"t":p+=" ";break;case"r":p+="\r";break;case"\\":p+="\\";break;case'"':p+='"';break;case"'":p+="'";break;case"`":p+="`";break;case"0":p+="\0";break;case"b":p+="\b";break;case"f":p+="\f";break;case"v":p+="\v";break;default:p+="\\",p+=d;break}_=_+1;continue}}if(f===0&&e[_]==="$"&&e[_+1]==="{"){p+="${",_=_+2,f=1;continue}if(f>0){e[_]==="{"?f=f+1:e[_]==="}"&&(f=f-1),p+=e[_],_=_+1;continue}if(e[_]==="`"){o=_;break}e[_]===`
22
- `&&(r++,i=_+1),p+=e[_],_=_+1}if(_>=e.length&&e[_]!=="`")throw new Tn({message:"Unterminated template string",characterIndex:o,row:r});n.push({type:"template_string",value:p,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 p=o,f=a;o=o+1;let _=/[0-9_]/;for(e[o-1]==="0"&&typeof e[o]=="string"&&(e[o]==="x"||e[o]==="X"?(f+=e[o],o=o+1,_=/[0-9A-Fa-f]/):e[o]==="b"||e[o]==="B"?(f+=e[o],o=o+1,_=/[01]/):(e[o]==="o"||e[o]==="O")&&(f+=e[o],o=o+1,_=/[0-7]/));typeof e[o]=="string"&&_.test(e[o]);)f+=e[o],o=o+1;if(e[o]==="."&&e[p-1]!=="."&&(e[o+1]??"").match(/[0-9]/)){for(f+=e[o],o=o+1;typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)f+=e[o],o=o+1;if((e[o]==="e"||e[o]==="E")&&typeof e[o+1]=="string"&&(e[o+1]==="+"||e[o+1]==="-"||/[0-9]/.test(e[o+1])))for(f+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(f+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)f+=e[o],o=o+1;n.push({type:"float",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=o-1}else{if((e[o]==="e"||e[o]==="E")&&typeof e[o+1]=="string"&&(e[o+1]==="+"||e[o+1]==="-"||/[0-9]/.test(e[o+1])))for(f+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(f+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)f+=e[o],o=o+1;n.push({type:"integer",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=o-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let p=a,f=o;for(o=o+1;typeof e[o]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[o]);)p+=e[o],o=o+1;if(o=o-1,(e[o+1]==="!"||e[o+1]==="?")&&Ma.test(p+e[o+1])&&(o=o+1,p+=e[o]),Ma.test(p))switch(p){case"true":case"false":n.push({type:"bool",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new Tn({message:`Invalid identifier ${p}`,characterIndex:f,row:r})}else throw new Tn({message:`Unexpected character ${a}`,characterIndex:o,row:r});break}}return n}var ui=class e{constructor({modulePath:t,inputString:n}){this.hasTemplateString=!1;this.modulePath=t,this.inputString=n,this.tokens=yl(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===")"&&dl(t,n)===r}parseTemplateString({token:t,index:n}){this.hasTemplateString=!0;let r=t.value,i=[],o="",a=0;for(;a<r.length;){if(r[a]==="\\"&&r[a+1]==="$"){o+="$",a+=2;continue}if(r[a]==="$"&&r[a+1]==="{"){o.length>0&&(i.push({type:"string",value:o}),o="");let l=1,u=a+2,c=u;for(;c<r.length&&l>0;)r[c]==="{"?l++:r[c]==="}"&&l--,l>0&&c++;let p=r.substring(u,c);i.push({type:"expr",value:p}),a=c+1;continue}o+=r[a],a++}o.length>0&&i.push({type:"string",value:o}),i.length===0&&i.push({type:"string",value:""});let s=null;for(let l of i){let u;if(l.type==="string"){let c={type:"string",value:JSON.stringify(l.value),position:t.position,modulePath:t.modulePath,inputString:t.inputString},p={tag:"Atom",token:c},f={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[p,{tag:"Atom",token:{type:"identifier",value:"to_string",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};u={tag:"FnCall",func:f,args:[],token:t}}else{let p=new e({modulePath:t.modulePath,inputString:l.value}).getProgram();if(p.length===0)throw m({token:t,errorMessage:"Empty expression in template string interpolation"});let f=p[0],_={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[f,{tag:"Atom",token:{type:"identifier",value:"to_string",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};u={tag:"FnCall",func:_,args:[],token:t}}if(s===null)s=u;else{let c={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[s,{tag:"Atom",token:{type:"operator",value:"+",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};s={tag:"FnCall",func:c,args:[u],token:t}}}return{expr:s,index:n+1}}parseParenExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="(")throw m({token:t[n],errorMessage:"Expected left paren"});if(t[n+1]?.type===")")return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:I.tuple[0],position:t[n].position,modulePath:this.modulePath,inputString:this.inputString}},args:[],token:t[n]},index:n+2};let i=this.parseExpression({tokens:t,index:n+1}),o=i.expr;if(n=i.index,t[n].type===")")return{expr:o,index:n+1};{let a,s=[o];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!a||a===",")a=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!a||a===";")a=";";else throw m({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:u,index:c}=this.parseExpression({tokens:t,index:n});s.push(u),n=c}let l=a===";"||!a;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:l?I.Tuple[0]:I.tuple[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:s,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw m({token:t[n],errorMessage:"Expected left bracket"});n=n+1;let i,o=[];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ] or , for array"});if(t[n].type===","){if(!i||i===",")i=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in [...]'});n=n+1}else if(t[n].type===";"){if(!i||i===";")i=";";else throw m({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in [...]'});n=n+1}if(t[n].type==="]")break;let{expr:u,index:c}=this.parseExpression({tokens:t,index:n});o.push(u),n=c}let a=i===";"||!i;if(a&&o.length>2)throw m({token:t[r],errorMessage:`Expected at 2 arguments for Array type, or 1 argument for Slice type, got ${o.length}`});let s=a&&o.length===2,l=a&&o.length===1;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:s?I.Array[0]:l?I.Slice[0]:I.array[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}parseCurlyBracketExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="{")throw m({token:t[n],errorMessage:"Expected left curly bracket"});let i=[],o;for(n=n+1;;){if(n=this.skipWhitespace(t,n),!t[n])throw m({token:t[n-1],errorMessage:'Unexpected end of curly bracket. Expected "}" or "," or ";"'});if(t[n].type===","){if(!o||o===",")o=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in {...}'});n=n+1}else if(t[n].type===";"){if(!o||o===";")o=";";else throw m({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(o===";"&&l&&(l.type===";"||l.type==="{")){let u={type:"identifier",value:I.tuple[0],position:l.position,modulePath:this.modulePath,inputString:this.inputString};i.push({tag:"FnCall",func:{tag:"Atom",token:u},args:[],token:u})}break}let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});i.push(a),n=s}if(o===","||!o){for(let s=0;s<i.length;s++){let l=i[s];if(U(l)){let u={type:"operator",value:":",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString},c={tag:"FnCall",func:{tag:"Atom",token:u},isInfix:!0,args:[l,l],token:u};i[s]=c}}return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:"_",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}else return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:I.begin[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}parsePrimary({tokens:t,index:n}){n=this.skipWhitespace(t,n);let r=t[n];if(!r)throw m({token:se,errorMessage:"Unexpected end of input"});let i=null;switch(r.type){case"identifier":case"operator":case"bool":case"integer":case"float":case"string":case"char":{i={expr:{tag:"Atom",token:r},index:n+1};break}case"(":{i=this.parseParenExpr({tokens:t,index:n});break}case"[":{i=this.parseArrayExpr({tokens:t,index:n});break}case"{":{i=this.parseCurlyBracketExpr({tokens:t,index:n});break}case".":{i={expr:{tag:"Atom",token:r},index:n+1};break}case"template_string":{i=this.parseTemplateString({token:r,index:n});break}default:throw m({token:r,errorMessage:`Unexpected token "${r.type}"`})}return i}isOperatorAtLineStart(t,n){for(let r=t.length-1;r>=0;r--){let i=t[r];if(i.type==="whitespace"&&i.value.includes(`
22
+ `&&(r++,i=_+1),p+=e[_],_=_+1}if(_>=e.length&&e[_]!=="`")throw new Tn({message:"Unterminated template string",characterIndex:o,row:r});n.push({type:"template_string",value:p,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 p=o,f=a;o=o+1;let _=/[0-9_]/;for(e[o-1]==="0"&&typeof e[o]=="string"&&(e[o]==="x"||e[o]==="X"?(f+=e[o],o=o+1,_=/[0-9A-Fa-f]/):e[o]==="b"||e[o]==="B"?(f+=e[o],o=o+1,_=/[01]/):(e[o]==="o"||e[o]==="O")&&(f+=e[o],o=o+1,_=/[0-7]/));typeof e[o]=="string"&&_.test(e[o]);)f+=e[o],o=o+1;if(e[o]==="."&&e[p-1]!=="."&&(e[o+1]??"").match(/[0-9]/)){for(f+=e[o],o=o+1;typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)f+=e[o],o=o+1;if((e[o]==="e"||e[o]==="E")&&typeof e[o+1]=="string"&&(e[o+1]==="+"||e[o+1]==="-"||/[0-9]/.test(e[o+1])))for(f+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(f+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)f+=e[o],o=o+1;n.push({type:"float",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=o-1}else{if((e[o]==="e"||e[o]==="E")&&typeof e[o+1]=="string"&&(e[o+1]==="+"||e[o+1]==="-"||/[0-9]/.test(e[o+1])))for(f+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(f+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)f+=e[o],o=o+1;n.push({type:"integer",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=o-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let p=a,f=o;for(o=o+1;typeof e[o]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[o]);)p+=e[o],o=o+1;if(o=o-1,(e[o+1]==="!"||e[o+1]==="?")&&Ra.test(p+e[o+1])&&(o=o+1,p+=e[o]),Ra.test(p))switch(p){case"true":case"false":n.push({type:"bool",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new Tn({message:`Invalid identifier ${p}`,characterIndex:f,row:r})}else throw new Tn({message:`Unexpected character ${a}`,characterIndex:o,row:r});break}}return n}var ui=class e{constructor({modulePath:t,inputString:n}){this.hasTemplateString=!1;this.modulePath=t,this.inputString=n,this.tokens=gl(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===")"&&ml(t,n)===r}parseTemplateString({token:t,index:n}){this.hasTemplateString=!0;let r=t.value,i=[],o="",a=0;for(;a<r.length;){if(r[a]==="\\"&&r[a+1]==="$"){o+="$",a+=2;continue}if(r[a]==="$"&&r[a+1]==="{"){o.length>0&&(i.push({type:"string",value:o}),o="");let l=1,u=a+2,c=u;for(;c<r.length&&l>0;)r[c]==="{"?l++:r[c]==="}"&&l--,l>0&&c++;let p=r.substring(u,c);i.push({type:"expr",value:p}),a=c+1;continue}o+=r[a],a++}o.length>0&&i.push({type:"string",value:o}),i.length===0&&i.push({type:"string",value:""});let s=null;for(let l of i){let u;if(l.type==="string"){let c={type:"string",value:JSON.stringify(l.value),position:t.position,modulePath:t.modulePath,inputString:t.inputString},p={tag:"Atom",token:c},f={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[p,{tag:"Atom",token:{type:"identifier",value:"to_string",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};u={tag:"FnCall",func:f,args:[],token:t}}else{let p=new e({modulePath:t.modulePath,inputString:l.value}).getProgram();if(p.length===0)throw m({token:t,errorMessage:"Empty expression in template string interpolation"});let f=p[0],_={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[f,{tag:"Atom",token:{type:"identifier",value:"to_string",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};u={tag:"FnCall",func:_,args:[],token:t}}if(s===null)s=u;else{let c={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[s,{tag:"Atom",token:{type:"operator",value:"+",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};s={tag:"FnCall",func:c,args:[u],token:t}}}return{expr:s,index:n+1}}parseParenExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="(")throw m({token:t[n],errorMessage:"Expected left paren"});if(t[n+1]?.type===")")return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:I.tuple[0],position:t[n].position,modulePath:this.modulePath,inputString:this.inputString}},args:[],token:t[n]},index:n+2};let i=this.parseExpression({tokens:t,index:n+1}),o=i.expr;if(n=i.index,t[n].type===")")return{expr:o,index:n+1};{let a,s=[o];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!a||a===",")a=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!a||a===";")a=";";else throw m({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:u,index:c}=this.parseExpression({tokens:t,index:n});s.push(u),n=c}let l=a===";"||!a;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:l?I.Tuple[0]:I.tuple[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:s,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw m({token:t[n],errorMessage:"Expected left bracket"});n=n+1;let i,o=[];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ] or , for array"});if(t[n].type===","){if(!i||i===",")i=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in [...]'});n=n+1}else if(t[n].type===";"){if(!i||i===";")i=";";else throw m({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in [...]'});n=n+1}if(t[n].type==="]")break;let{expr:u,index:c}=this.parseExpression({tokens:t,index:n});o.push(u),n=c}let a=i===";"||!i;if(a&&o.length>2)throw m({token:t[r],errorMessage:`Expected at 2 arguments for Array type, or 1 argument for Slice type, got ${o.length}`});let s=a&&o.length===2,l=a&&o.length===1;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:s?I.Array[0]:l?I.Slice[0]:I.array[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}parseCurlyBracketExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="{")throw m({token:t[n],errorMessage:"Expected left curly bracket"});let i=[],o;for(n=n+1;;){if(n=this.skipWhitespace(t,n),!t[n])throw m({token:t[n-1],errorMessage:'Unexpected end of curly bracket. Expected "}" or "," or ";"'});if(t[n].type===","){if(!o||o===",")o=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in {...}'});n=n+1}else if(t[n].type===";"){if(!o||o===";")o=";";else throw m({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(o===";"&&l&&(l.type===";"||l.type==="{")){let u={type:"identifier",value:I.tuple[0],position:l.position,modulePath:this.modulePath,inputString:this.inputString};i.push({tag:"FnCall",func:{tag:"Atom",token:u},args:[],token:u})}break}let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});i.push(a),n=s}if(o===","||!o){for(let s=0;s<i.length;s++){let l=i[s];if(U(l)){let u={type:"operator",value:":",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString},c={tag:"FnCall",func:{tag:"Atom",token:u},isInfix:!0,args:[l,l],token:u};i[s]=c}}return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:"_",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}else return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:I.begin[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}parsePrimary({tokens:t,index:n}){n=this.skipWhitespace(t,n);let r=t[n];if(!r)throw m({token:ae,errorMessage:"Unexpected end of input"});let i=null;switch(r.type){case"identifier":case"operator":case"bool":case"integer":case"float":case"string":case"char":{i={expr:{tag:"Atom",token:r},index:n+1};break}case"(":{i=this.parseParenExpr({tokens:t,index:n});break}case"[":{i=this.parseArrayExpr({tokens:t,index:n});break}case"{":{i=this.parseCurlyBracketExpr({tokens:t,index:n});break}case".":{i={expr:{tag:"Atom",token:r},index:n+1};break}case"template_string":{i=this.parseTemplateString({token:r,index:n});break}default:throw m({token:r,errorMessage:`Unexpected token "${r.type}"`})}return i}isOperatorAtLineStart(t,n){for(let r=t.length-1;r>=0;r--){let i=t[r];if(i.type==="whitespace"&&i.value.includes(`
23
23
  `))return t.slice(r+1).every(s=>s.type==="whitespace");if(i.type!=="whitespace")return!1}return t.every(r=>r.type==="whitespace")}parseLeftAssociativeOperator({primaryExpr:t,operatorToken:n,rhs:r,tokens:i,index:o}){if(r.tag==="FnCall"&&r.isInfix&&r.func.tag==="Atom"&&r.func.token.type!=="."){let a=r.args[0],s=r.args[1],l=r.func,u={tag:"FnCall",func:{tag:"Atom",token:n},args:[t,a],isInfix:!0,token:n};return this.parsePrimaryEnd({primaryExpr:{tag:"FnCall",func:l,args:[u,s],isInfix:!0,token:l.token},tokens:i,index:o})}else return this.parsePrimaryEnd({primaryExpr:{tag:"FnCall",func:{tag:"Atom",token:n},args:[t,r],isInfix:!0,token:n},tokens:i,index:o})}getExprMinimumColumnNumber(t){return U(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}){let i=this.skipWhitespace(n,r),o=i!==r,a=n[r-1]?.type==="whitespace";r=i;let s=n[i];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==="."&&!o&&!a&&n[i+1]?.type!=="whitespace"){let{expr:u,index:c}=this.parsePrimary({tokens:n,index:l?r:r+1});r=c;let p={expr:{tag:"FnCall",func:{tag:"Atom",token:l?t.token:s},args:l?[u]:[t,u],isInfix:!l,token:l?t.token:s},index:r};for(;n[r]&&n[r].type===".";){let{expr:f,index:_}=this.parsePrimary({tokens:n,index:r+1});p={expr:{tag:"FnCall",func:{tag:"Atom",token:s},args:[p.expr,f],isInfix:!0,token:s},index:_},r=_}return this.parsePrimaryEnd({primaryExpr:p.expr,tokens:n,index:p.index})}else if((s.type==="operator"||s.type==="."&&!o)&&n[r+1]?.type!=="("){let u=this.skipWhitespace(n,r+1),{expr:c,index:p}=this.parseExpression({tokens:n,index:u});if(c.tag==="FnCall"&&c.isInfix&&c.func.tag==="Atom"&&c.func.token.type!=="."&&!this.isParenthesizedExpression(n,u,p-1)){let f=`Ambiguous operator precedence.
24
24
  Please use parentheses to clarify:
25
25
 
@@ -32,17 +32,17 @@ Or use newline after "${s.value}" to confirm the right-associativity.
32
32
  `)),g=n.slice(0,r),h=this.isOperatorAtLineStart(g,r),y=n.slice(r+1,u),v=h&&y.length>0&&y[0]?.type==="whitespace"&&y[0]?.value.includes(`
33
33
  `);if(!(d&&!h)){if(!v){if(h)return this.parseLeftAssociativeOperator({primaryExpr:t,operatorToken:s,rhs:c,tokens:n,index:p});throw m({token:s,errorMessage:f})}}}return this.parsePrimaryEnd({primaryExpr:{tag:"FnCall",func:{tag:"Atom",token:s},args:[t,c],isInfix:!0,token:s},tokens:n,index:p})}else if(!o&&s.type==="("){let u=this.parseFunctionCall({func:t,tokens:n,index:r+1,hasWhitespace:!1});return this.parsePrimaryEnd({primaryExpr:u.expr,tokens:n,index:u.index})}else{let u=this.parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:!0});return this.parsePrimaryEnd({primaryExpr:u.expr,tokens:n,index:u.index})}}parseFunctionArguments({tokens:t,index:n,hasWhitespace:r}){let i=[];if(n=this.skipWhitespace(t,n),!r&&t[n]?.type===")")return{args:i,index:n+1};for(;;){let{expr:o,index:a}=this.parseExpression({tokens:t,index:n});i.push(o),n=a;let s=t[n];if(s?.type===",")n=n+1;else{if(!s||s.type===";"||s.type==="]"||s.type==="}")return{args:i,index:n};if(s.type===")")return{args:i,index:r?n:n+1};throw m({token:s,errorMessage:r?"Expected ; to end the function call":`Expected , to separate arguments
34
34
  or ) to end the function call`})}}}parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:i}){let{args:o,index:a}=this.parseFunctionArguments({tokens:n,index:r,hasWhitespace:i});return r=a,{expr:{tag:"FnCall",func:t,args:o,token:t.token},index:r}}parseExpression({tokens:t,index:n}){n=this.skipWhitespace(t,n);let{expr:r,index:i}=this.parsePrimary({tokens:t,index:n});return this.parsePrimaryEnd({primaryExpr:r,tokens:t,index:i})}programToString(){return this.program.map(n=>k(n)).join(`;
35
- `)}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 i=t[this.skipWhitespaceBackward(t,t.length-1)];if(i&&i.type===";"){let o={type:"identifier",value:I.tuple[0],position:i.position,modulePath:this.modulePath,inputString:this.inputString};r.push({tag:"FnCall",func:{tag:"Atom",token:o},args:[],token:o})}this.program=r}getProgram(){return this.hasTemplateString?[{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:I.import[0],position:{row:0,column:0,character:0},modulePath:this.modulePath,inputString:this.inputString}},args:[{tag:"Atom",token:{type:"string",value:JSON.stringify("std/fmt/to_string"),position:{row:0,column:0,character:0},modulePath:this.modulePath,inputString:this.inputString}}],token:{type:"identifier",value:I.import[0],position:{row:0,column:0,character:0},modulePath:this.modulePath,inputString:this.inputString}},...this.program]:this.program}getParserError(){return this.parserError}getTokens(){return this.tokens}};function qt(e){let t=new ui({modulePath:`auto-generated://
35
+ `)}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 i=t[this.skipWhitespaceBackward(t,t.length-1)];if(i&&i.type===";"){let o={type:"identifier",value:I.tuple[0],position:i.position,modulePath:this.modulePath,inputString:this.inputString};r.push({tag:"FnCall",func:{tag:"Atom",token:o},args:[],token:o})}this.program=r}getProgram(){return this.hasTemplateString?[{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:I.import[0],position:{row:0,column:0,character:0},modulePath:this.modulePath,inputString:this.inputString}},args:[{tag:"Atom",token:{type:"string",value:JSON.stringify("std/fmt/to_string"),position:{row:0,column:0,character:0},modulePath:this.modulePath,inputString:this.inputString}}],token:{type:"identifier",value:I.import[0],position:{row:0,column:0,character:0},modulePath:this.modulePath,inputString:this.inputString}},...this.program]:this.program}getParserError(){return this.parserError}getTokens(){return this.tokens}};function Ht(e){let t=new ui({modulePath:`auto-generated://
36
36
  // === START auto-generated code ===
37
37
  ${e}
38
38
  // === END auto-generated code ===
39
39
  `,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}"
40
40
  ${n.map(r=>k(r)).join(`
41
41
  `)}
42
- `);return n[0]}function Xi(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 pe(e){return e?.tag==="unit"}function pt(e){return e?.tag==="comptime_int"}function Ft(e){return e?.tag==="comptime_float"}function $t(e){return e?.tag==="comptime_string"}function Lt(e){return e?.tag==="ComptimeList"}function Rr(e){return Lt(e)&&Ct(e.childType)}function cn(e){return e?.tag==="bool"}function Qi(e){return e?.tag==="usize"}function Zi(e){return e?.tag==="isize"}function Dn(e){return e?.tag==="u8"}function Ji(e){return e?.tag==="i8"}function eo(e){return e?.tag==="u16"}function to(e){return e?.tag==="i16"}function no(e){return e?.tag==="u32"}function ro(e){return e?.tag==="i32"}function io(e){return e?.tag==="u64"}function oo(e){return e?.tag==="i64"}function ao(e){return e?.tag==="f32"}function so(e){return e?.tag==="f64"}function Ct(e){return e?.tag==="Expr"}function be(e){return e?.tag==="Array"}function je(e){return e?.tag==="Slice"}function ke(e){return e?.tag==="Tuple"}function lt(e){return e?.tag==="Union"}function ye(e){return e?.tag==="Enum"}function ue(e){return e?.tag==="Struct"}function dt(e){return e?.tag==="Struct"&&e.isReferenceSemantics}function lo(e){return e?.tag==="Struct"&&e.isNewtype}function Fe(e){return e?.tag==="Module"}function xe(e){return e?.tag==="Trait"}function Et(e){return xe(e)&&e.isFn!==void 0}function H(e){return e?.tag==="Function"}function uo(e){return e?.tag==="Function"&&e.return.isCompileTimeOnly}function He(e){return e?.tag==="Type"}function gl(e){return He(e)&&e.tag==="Type"&&e.level===0}function M(e){return e?.tag==="SomeType"}function Ie(e){return e?.tag==="Ptr"}function kt(e){return e?.tag==="Iso"}function bt(e){return e?.tag==="Arc"}function Ne(e){return e?.tag==="Dyn"}function on(e){if(M(e)){let t=e;if(we(t))return!0;if(t.resolvedConcreteType)return on(t.resolvedConcreteType)}return dt(e)||Ne(e)||kt(e)||bt(e)}function vr(e){return 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==="usize"||e?.tag==="isize"}function Er(e){return e?.tag==="f32"||e?.tag==="f64"}function hl(e){return e?.tag==="i8"||e?.tag==="i16"||e?.tag==="i32"||e?.tag==="i64"||e?.tag==="isize"}function ci(e){return e?.tag==="char"}function ir(e){return e?.tag==="void"}function zt(e){return xe(e)&&e.isFuture!==void 0}function Po(e){return xe(e)&&e.isConcrete!==void 0}function Mn(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 dn(e){if(!e||e.return?.isCompileTimeOnly)return!1;let t=e.parameters.some(r=>r.isCompileTimeOnly)||e.forallParameters.length>0||e.implicitParameters.length>0,n=e.parameters.some(r=>!r.isCompileTimeOnly&&M(r.type)&&!we(r.type));return t||n}function pi(e){if(!e||e.return?.isCompileTimeOnly)return!1;let t=e.parameters.some(r=>r.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(r=>!r.isCompileTimeOnly&&M(r.type)&&!we(r.type));return t||n}function Ra(e){let t=e.type;return t?dn(t)&&(e.specializedFunctionCaches?.length??0)>0:!1}function hn(e){return dt(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!e.typeName?.startsWith("Box("):!1}function _t(e){return e?.tag==="EffectsRow"}function Uo(e,t,n){let r=!1,i=0;for(let o of t){let a=o.type;if(n.includes(o))throw m({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
43
- Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(dt(a))continue;let s=[...n,o],l=Tt(a,s);He(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?an(i):r?et(e):et(e)}function Tt(e,t=[]){if(Ne(e))return et(e);if(Xi(e))return et(e);if(He(e))return an(e.level+1);if(pt(e)||Ft(e)||$t(e)||Lt(e))return et(e);if(Ct(e))return et(e);if(H(e))return et(e);if(Et(e))return et(e);if(be(e))return Tt(e.childType,t);if(je(e))return et(e);if(ke(e))return Uo(e,e.fields,t);if(ue(e))return Uo(e,e.fields,t);if(ye(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Uo(e,n,t)}else{if(lt(e))return Uo(e,e.fields,t);if(Fe(e))return an(1,e);if(xe(e))return an(1,e);if(M(e))return e.parentType;if(Ie(e))return et(e);if(kt(e))return et(e);if(bt(e))return et(e);if(zt(e))return et(e);if(ir(e))return et(e);if(_t(e))return an(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function vl(e){if(e.exprs.labelExpr?.token)return e.exprs.labelExpr.token;if(e.exprs.typeExpr?.token)return e.exprs.typeExpr.token;if(e.exprs.defaultValueExpr?.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function Se(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return A(e.value);case"ComptimeInt":case"ComptimeFloat":return e.value.toString();case"ComptimeString":return JSON.stringify(e.value);case"ComptimeList":return`comptime_list(${e.elements.map(Se).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(Se).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(Se).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(Se).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Gn(r)&&(r=`(${r})`),`${r}: ${Se(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 i=t?.fields[r].label??"_";return Gn(i)&&(i=`(${i})`),`${i}: ${Se(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 Gn(r)&&(r=`(${r})`),`${r}: ${Se(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Gn(r)&&(r=`(${r})`),`${r}: ${Se(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${k(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${A(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return Ln(t)?`<ptr to ${Se(t.elements[e.targetIndex])}>`:`<ptr to ${Se(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function R(e){return e?.tag==="Type"}function vn(e){return e?.tag==="ComptimeInt"}function Bo(e){return e?.tag==="ComptimeFloat"}function qe(e){return e?.tag==="ComptimeString"}function Wn(e){return e?.tag==="ComptimeList"}function El(e){return Wn(e)&&Ct(e.type.childType)}function Oe(e){return e?.tag==="ComptimeInt"||e?.tag==="ComptimeFloat"||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==="Usize"||e?.tag==="Isize"}function Re(e){return e?.tag==="Bool"}function ie(e){return e?.tag==="Function"}function fe(e){return e?.tag==="Unknown"}function sn(e){return e?.tag==="Tuple"}function pn(e){return e?.tag==="Struct"}function Ln(e){return e?.tag==="Array"}function zo(e){return e?.tag==="Slice"}function xt(e){return e?.tag==="Enum"}function ft(e){return e?.tag==="Module"}function mt(e){return e?.tag==="Trait"}function fi(e){return e?.tag==="Ptr"}function Qt(e){return e?.tag==="Expr"}function J(e){return{tag:"Type",type:Tt(e),value:e}}function en(e){return{tag:"ComptimeString",type:Dt(),value:e}}function An(e,t){return{tag:"ComptimeList",type:co(e),elements:t}}function Bt(e,t){let n;if(e==="ComptimeInt")n=$r();else if(e==="ComptimeFloat")n=di();else if(e==="U8")n=yi();else if(e==="I8")n=gi();else if(e==="U16")n=hi();else if(e==="I16")n=vi();else if(e==="U32")n=Ei();else if(e==="I32")n=Cr();else if(e==="U64")n=Ti();else if(e==="I64")n=$i();else if(e==="F32")n=Ci();else if(e==="F64")n=br();else if(e==="Usize")n=yt();else if(e==="Isize")n=mi();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Hn(e){return Bt("ComptimeInt",e)}function Go(e){return Bt("ComptimeFloat",e)}function at(e){return{tag:"Bool",type:Xe(),value:e}}function q(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(He(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${A(e)}`);let o=mn(e,t,{recursiveTypeRef:n,env:r,context:i});return J(o)}return{tag:"Unknown",type:e,variableName:t}}function In(e,t){return{tag:"Struct",type:e,fields:t}}function Wo(e,t){return{tag:"Module",type:e,fields:t}}function _i(e,t){return{tag:"Trait",type:e,fields:t}}function Ho(e,t){return{tag:"Tuple",type:e,fields:t}}function Pr(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Tr(e,t){return{tag:"Array",type:e,elements:t}}function qo(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function xn(e){return{tag:"Expr",type:tn(),value:e}}function Pa(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function wt(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return W({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(qe(n)&&qe(r))return n.value===r.value;if(Wn(n)&&Wn(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!wt({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Oe(n)&&Oe(r)){let i=n.value,o=r.value;if(typeof i==typeof o)return i===o;let a=typeof i=="bigint"?i:BigInt(i),s=typeof o=="bigint"?o:BigInt(o);return a===s}else{if(Re(n)&&Re(r))return n.value===r.value;if(Ln(n)&&Ln(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!wt({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(zo(n)&&zo(r)){let i=n.endIndex-n.startIndex,o=r.endIndex-r.startIndex;if(i!==o)return!1;for(let a=0;a<i;a++){let s=n.sourceArray[0].elements[n.startIndex+a],l=r.sourceArray[0].elements[r.startIndex+a];if(!wt({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(sn(n)&&sn(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(pn(n)&&pn(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(xt(n)&&xt(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(ft(n)&&ft(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(mt(n)&&mt(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Qt(n)&&Qt(r))return n.value===r.value||Yo(n.value,r.value);if(fe(n)&&fe(r)){let i,o;if(n.variableName){let a=j(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!fe(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=j(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!fe(s.value[0])&&(o=s.value[0])}}return i&&o?wt({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(fe(n)&&!fe(r)){if(n.variableName){let i=j(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!fe(o.value[0]))return wt({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!fe(n)&&fe(r)){if(r.variableName){let i=j(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!fe(o.value[0]))return wt({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return fi(n)&&fi(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Yn(e,t){return e?zr(e,t):!1}function jn(e,t){return e?td(e,t):!1}function zr(e,t){return On(e,t)&&!ur(e,t)}function td(e,t){let n=On(e,t),r=ur(e,t);return!n&&r}function Te(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(on(e))return!0;switch(e.tag){case"Array":return Te(e.childType,t);case"Tuple":return e.fields.some(n=>Te(n.type,t));case"Union":return e.fields.some(n=>Te(n.type,t));case"Struct":return e.fields.some(n=>Te(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>Te(r.type,t)));case"Iso":return Te(e.childType,t);case"Arc":return Te(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return we(n)?!0:n.resolvedConcreteType?Te(n.resolvedConcreteType,t):!0}default:return!1}}function Ae(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),M(e))return e.isExtern?!1:e.resolvedConcreteType?Ae(e.resolvedConcreteType,t):!(Gt(e)||we(e));switch(e.tag){case"Array":return Ae(e.childType,t);case"Tuple":return e.fields.some(n=>Ae(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Ae(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>Ae(r.type,t)));case"Union":return e.fields.some(n=>Ae(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ae(r.type,t))||Ae(n.return.type,t)}case"Module":return e.fields.some(n=>Ae(n.type,t));case"Ptr":return Ae(e.childType,t);default:return!1}}function or(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),be(e)?fe(e.length)?!0:or(e.childType,t):Ie(e)||je(e)?or(e.childType,t):ke(e)?e.fields.some(n=>or(n.type,t)):ue(e)?e.fields.some(n=>or(n.type,t)):ye(e)?e.variants.some(n=>n.fields?.some(r=>or(r.type,t))):lt(e)?e.fields.some(n=>or(n.type,t)):!1)}function za(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),M(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{o.fields?.forEach(a=>r(a.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function ki(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return fe(t.length)||ki(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?ki(t.isFn.callType):!1}default:return!1}}function ut({type:e,expectedType:t,expr:n,env:r}){let i;if(pt(e))i=Cr();else if(Ft(e))i=br();else if($t(e))t&&(Ie(t)&&(Dn(t.childType)||ci(t.childType))||je(t))&&(i=t),i||(i=bl(r));else return e;return i&&n?.$&&(n.$.convertedRuntimeType=i),i??e}function Ua(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=A(e.type,t),i=e.exprs.defaultValueExpr?k(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function bi(e,t=new Set){let n=e.label;Gn(n)&&(n=`(${n})`);let r=e.defaultValue?Se(e.defaultValue):"",i=e.assignedValue?Se(e.assignedValue):"";return r?`(${n}: ${A(e.type,t)}) ?= ${r}`:i?`(${n}: ${A(e.type,t)}) = ${i}`:`${n}: ${A(e.type,t)}`}function Tl(e,t=new Set){let n=e.label;Gn(n)&&(n=`(${n})`);let r=e.defaultValue?Se(e.defaultValue):"",i=e.assignedValue?Se(e.assignedValue):"";return r?`(${n} : ${A(e.type,t)}) ?= ${r}`:i?`(${n} : ${A(e.type,t)}) = ${i}`:`${n} : ${A(e.type,t)}`}function $l(e,t=new Set){let n=e.parameters.map(p=>Ua(p,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(p=>Ua(p,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=A(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(p=>p.isEffectRowSpread?`...(${p.label})`:Ua(p,t)).join(", ")})`:"",l=[r,n,s,i].filter(p=>!!p).join(", "),u=e.SelfType?.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function A(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 nd(e,t)}finally{e.id&&t.delete(e.id)}}function nd(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`[${A(e.childType,t)}; ${Se(e.length)}]`;case"Slice":return`[${A(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>bi(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=>bi(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(i=>`.${i}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(i=>bi(i,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(i=>bi(i,t)).join(", ")})`}case"Module":{let n=e,r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(i=>Tl(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(Et(n))return`Fn${$l(n.isFn.callType,t).slice(2)}`;if(zt(n)){let i=[A(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(A(o.type,t));return`Future(${i.join(", ")})`}let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}trait(${n.fields.map(i=>Tl(i,t)).join(", ")})`,n.receiverType&&(r=`(${A(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:$l(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return k(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(A(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${A(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${A(e.childType,t)})`;case"Iso":return`Iso(${A(e.childType,t)})`;case"Arc":return`Arc(${A(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${A(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${A(r.type,t)}`).join(", ")})`}case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let{traitType:i}of n.requiredTraits)r.push(A(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${A(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var Cl=64;function jo(){return Cl}function Ko(){return Cl/8}function rd(e){let t=kr(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(Oe(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function id(e){let t=0;for(let n of e.fields){let r=kr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function od(e){let t=0;for(let n of e.fields){let r=kr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function ad(e){let t=0,n=0;for(let d of e.variants){let g=0;if(d.fields)for(let h of d.fields){let y=kr(h.type);if(y===null)return null;if(y===-1)return-1;g+=y;let v=ar(h.type);if(v===null)return null;n=Math.max(n,v*8)}t=Math.max(t,g)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,i=32,o=Math.max(n,8),a=Math.max(i,o),s=r/8,l=o/8,u=(l-s%l)%l*8,c=r+u+t,p=c/8,f=a/8,_=(f-p%f)%f*8;return c+_}function sd(e){let t=0;for(let n of e.fields){let r=kr(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function ar(e){if(M(e))return null;if(pe(e)||He(e)||pt(e)||Ft(e)||$t(e)||Lt(e)||Fe(e)||xe(e)||Ct(e))return 1;if(cn(e))return 1;if(Qi(e)||Zi(e))return Ko();if(Dn(e)||Ji(e))return 1;if(eo(e)||to(e))return 2;if(no(e)||ro(e))return 4;if(io(e)||oo(e))return 8;if(ao(e))return 4;if(so(e))return 8;if(be(e))return ar(e.childType);if(ke(e)){let t=1;for(let n of e.fields){let r=ar(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ue(e)){if(e.isReferenceSemantics)return Ko();if(e.isNewtype)return ar(e.fields[0].type);let t=1;for(let n of e.fields){let r=ar(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ye(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=ar(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(lt(e)){let t=1;for(let n of e.fields){let r=ar(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(H(e))return Ko();if(Ie(e))return Ko()}return null}function kr(e){return M(e)?null:pe(e)||He(e)||pt(e)||Ft(e)||$t(e)||Lt(e)||Fe(e)||xe(e)||Ct(e)?0:cn(e)?8:Qi(e)||Zi(e)?jo():Dn(e)||Ji(e)?8:eo(e)||to(e)?16:no(e)||ro(e)?32:io(e)||oo(e)?64:ao(e)?32:so(e)?64:be(e)?rd(e):ke(e)?id(e):ue(e)?e.isReferenceSemantics?jo():e.isNewtype?kr(e.fields[0].type):od(e):ye(e)?ad(e):lt(e)?sd(e):H(e)||Ie(e)?jo():null}function sr(e,t){if(ir(e))throw nt([{token:t,errorMessage:`Cannot use 'void' type here.
42
+ `);return n[0]}function Xi(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 pe(e){return e?.tag==="unit"}function pt(e){return e?.tag==="comptime_int"}function Lt(e){return e?.tag==="comptime_float"}function $t(e){return e?.tag==="comptime_string"}function At(e){return e?.tag==="ComptimeList"}function Rr(e){return At(e)&&Ct(e.childType)}function cn(e){return e?.tag==="bool"}function Qi(e){return e?.tag==="usize"}function Zi(e){return e?.tag==="isize"}function Dn(e){return e?.tag==="u8"}function Ji(e){return e?.tag==="i8"}function eo(e){return e?.tag==="u16"}function to(e){return e?.tag==="i16"}function no(e){return e?.tag==="u32"}function ro(e){return e?.tag==="i32"}function io(e){return e?.tag==="u64"}function oo(e){return e?.tag==="i64"}function ao(e){return e?.tag==="f32"}function so(e){return e?.tag==="f64"}function Ct(e){return e?.tag==="Expr"}function be(e){return e?.tag==="Array"}function je(e){return e?.tag==="Slice"}function ke(e){return e?.tag==="Tuple"}function lt(e){return e?.tag==="Union"}function ye(e){return e?.tag==="Enum"}function ue(e){return e?.tag==="Struct"}function mt(e){return e?.tag==="Struct"&&e.isReferenceSemantics}function lo(e){return e?.tag==="Struct"&&e.isNewtype}function Le(e){return e?.tag==="Module"}function xe(e){return e?.tag==="Trait"}function Et(e){return xe(e)&&e.isFn!==void 0}function q(e){return e?.tag==="Function"}function uo(e){return e?.tag==="Function"&&e.return.isCompileTimeOnly}function We(e){return e?.tag==="Type"}function hl(e){return We(e)&&e.tag==="Type"&&e.level===0}function D(e){return e?.tag==="SomeType"}function Ie(e){return e?.tag==="Ptr"}function kt(e){return e?.tag==="Iso"}function bt(e){return e?.tag==="Arc"}function Ne(e){return e?.tag==="Dyn"}function on(e){if(D(e)){let t=e;if(we(t))return!0;if(t.resolvedConcreteType)return on(t.resolvedConcreteType)}return mt(e)||Ne(e)||kt(e)||bt(e)}function vr(e){return 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==="usize"||e?.tag==="isize"}function Er(e){return e?.tag==="f32"||e?.tag==="f64"}function vl(e){return e?.tag==="i8"||e?.tag==="i16"||e?.tag==="i32"||e?.tag==="i64"||e?.tag==="isize"}function ci(e){return e?.tag==="char"}function or(e){return e?.tag==="void"}function zt(e){return xe(e)&&e.isFuture!==void 0}function Po(e){return xe(e)&&e.isConcrete!==void 0}function Mn(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 dn(e){if(!e||e.return?.isCompileTimeOnly)return!1;let t=e.parameters.some(r=>r.isCompileTimeOnly)||e.forallParameters.length>0||e.implicitParameters.length>0,n=e.parameters.some(r=>!r.isCompileTimeOnly&&D(r.type)&&!we(r.type));return t||n}function pi(e){if(!e||e.return?.isCompileTimeOnly)return!1;let t=e.parameters.some(r=>r.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(r=>!r.isCompileTimeOnly&&D(r.type)&&!we(r.type));return t||n}function Ua(e){let t=e.type;return t?dn(t)&&(e.specializedFunctionCaches?.length??0)>0:!1}function hn(e){return mt(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!e.typeName?.startsWith("Box("):!1}function _t(e){return e?.tag==="EffectsRow"}function Uo(e,t,n){let r=!1,i=0;for(let o of t){let a=o.type;if(n.includes(o))throw m({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
43
+ Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(mt(a))continue;let s=[...n,o],l=Tt(a,s);We(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?an(i):r?Je(e):Je(e)}function Tt(e,t=[]){if(Ne(e))return Je(e);if(Xi(e))return Je(e);if(We(e))return an(e.level+1);if(pt(e)||Lt(e)||$t(e)||At(e))return Je(e);if(Ct(e))return Je(e);if(q(e))return Je(e);if(Et(e))return Je(e);if(be(e))return Tt(e.childType,t);if(je(e))return Je(e);if(ke(e))return Uo(e,e.fields,t);if(ue(e))return Uo(e,e.fields,t);if(ye(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Uo(e,n,t)}else{if(lt(e))return Uo(e,e.fields,t);if(Le(e))return an(1,e);if(xe(e))return an(1,e);if(D(e))return e.parentType;if(Ie(e))return Je(e);if(kt(e))return Je(e);if(bt(e))return Je(e);if(zt(e))return Je(e);if(or(e))return Je(e);if(_t(e))return an(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function El(e){if(e.exprs.labelExpr?.token)return e.exprs.labelExpr.token;if(e.exprs.typeExpr?.token)return e.exprs.typeExpr.token;if(e.exprs.defaultValueExpr?.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function Se(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return A(e.value);case"ComptimeInt":case"ComptimeFloat":return e.value.toString();case"ComptimeString":return JSON.stringify(e.value);case"ComptimeList":return`comptime_list(${e.elements.map(Se).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(Se).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(Se).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(Se).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Gn(r)&&(r=`(${r})`),`${r}: ${Se(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 i=t?.fields[r].label??"_";return Gn(i)&&(i=`(${i})`),`${i}: ${Se(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 Gn(r)&&(r=`(${r})`),`${r}: ${Se(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Gn(r)&&(r=`(${r})`),`${r}: ${Se(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${k(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${A(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return Ln(t)?`<ptr to ${Se(t.elements[e.targetIndex])}>`:`<ptr to ${Se(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function R(e){return e?.tag==="Type"}function vn(e){return e?.tag==="ComptimeInt"}function Bo(e){return e?.tag==="ComptimeFloat"}function He(e){return e?.tag==="ComptimeString"}function Wn(e){return e?.tag==="ComptimeList"}function Tl(e){return Wn(e)&&Ct(e.type.childType)}function Oe(e){return e?.tag==="ComptimeInt"||e?.tag==="ComptimeFloat"||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==="Usize"||e?.tag==="Isize"}function Re(e){return e?.tag==="Bool"}function ie(e){return e?.tag==="Function"}function _e(e){return e?.tag==="Unknown"}function sn(e){return e?.tag==="Tuple"}function pn(e){return e?.tag==="Struct"}function Ln(e){return e?.tag==="Array"}function zo(e){return e?.tag==="Slice"}function Nt(e){return e?.tag==="Enum"}function ft(e){return e?.tag==="Module"}function dt(e){return e?.tag==="Trait"}function fi(e){return e?.tag==="Ptr"}function Qt(e){return e?.tag==="Expr"}function Q(e){return{tag:"Type",type:Tt(e),value:e}}function en(e){return{tag:"ComptimeString",type:Mt(),value:e}}function An(e,t){return{tag:"ComptimeList",type:co(e),elements:t}}function Bt(e,t){let n;if(e==="ComptimeInt")n=$r();else if(e==="ComptimeFloat")n=di();else if(e==="U8")n=yi();else if(e==="I8")n=gi();else if(e==="U16")n=hi();else if(e==="I16")n=vi();else if(e==="U32")n=Ei();else if(e==="I32")n=Cr();else if(e==="U64")n=Ti();else if(e==="I64")n=$i();else if(e==="F32")n=Ci();else if(e==="F64")n=br();else if(e==="Usize")n=yt();else if(e==="Isize")n=mi();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function qn(e){return Bt("ComptimeInt",e)}function Go(e){return Bt("ComptimeFloat",e)}function at(e){return{tag:"Bool",type:Xe(),value:e}}function H(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(We(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${A(e)}`);let o=mn(e,t,{recursiveTypeRef:n,env:r,context:i});return Q(o)}return{tag:"Unknown",type:e,variableName:t}}function In(e,t){return{tag:"Struct",type:e,fields:t}}function Wo(e,t){return{tag:"Module",type:e,fields:t}}function _i(e,t){return{tag:"Trait",type:e,fields:t}}function qo(e,t){return{tag:"Tuple",type:e,fields:t}}function Pr(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Tr(e,t){return{tag:"Array",type:e,elements:t}}function Ho(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function xn(e){return{tag:"Expr",type:tn(),value:e}}function za(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function wt(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return W({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(He(n)&&He(r))return n.value===r.value;if(Wn(n)&&Wn(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!wt({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Oe(n)&&Oe(r)){let i=n.value,o=r.value;if(typeof i==typeof o)return i===o;let a=typeof i=="bigint"?i:BigInt(i),s=typeof o=="bigint"?o:BigInt(o);return a===s}else{if(Re(n)&&Re(r))return n.value===r.value;if(Ln(n)&&Ln(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!wt({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(zo(n)&&zo(r)){let i=n.endIndex-n.startIndex,o=r.endIndex-r.startIndex;if(i!==o)return!1;for(let a=0;a<i;a++){let s=n.sourceArray[0].elements[n.startIndex+a],l=r.sourceArray[0].elements[r.startIndex+a];if(!wt({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(sn(n)&&sn(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(pn(n)&&pn(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Nt(n)&&Nt(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(ft(n)&&ft(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(dt(n)&&dt(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!wt({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Qt(n)&&Qt(r))return n.value===r.value||Yo(n.value,r.value);if(_e(n)&&_e(r)){let i,o;if(n.variableName){let a=j(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!_e(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=j(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!_e(s.value[0])&&(o=s.value[0])}}return i&&o?wt({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(_e(n)&&!_e(r)){if(n.variableName){let i=j(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!_e(o.value[0]))return wt({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!_e(n)&&_e(r)){if(r.variableName){let i=j(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!_e(o.value[0]))return wt({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return fi(n)&&fi(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Yn(e,t){return e?zr(e,t):!1}function jn(e,t){return e?id(e,t):!1}function zr(e,t){return On(e,t)&&!cr(e,t)}function id(e,t){let n=On(e,t),r=cr(e,t);return!n&&r}function Te(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(on(e))return!0;switch(e.tag){case"Array":return Te(e.childType,t);case"Tuple":return e.fields.some(n=>Te(n.type,t));case"Union":return e.fields.some(n=>Te(n.type,t));case"Struct":return e.fields.some(n=>Te(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>Te(r.type,t)));case"Iso":return Te(e.childType,t);case"Arc":return Te(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return we(n)?!0:n.resolvedConcreteType?Te(n.resolvedConcreteType,t):!0}default:return!1}}function Fe(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),D(e))return e.isExtern?!1:e.resolvedConcreteType?Fe(e.resolvedConcreteType,t):!(Gt(e)||we(e));switch(e.tag){case"Array":return Fe(e.childType,t);case"Tuple":return e.fields.some(n=>Fe(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Fe(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>Fe(r.type,t)));case"Union":return e.fields.some(n=>Fe(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Fe(r.type,t))||Fe(n.return.type,t)}case"Module":return e.fields.some(n=>Fe(n.type,t));case"Ptr":return Fe(e.childType,t);default:return!1}}function ar(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),be(e)?_e(e.length)?!0:ar(e.childType,t):Ie(e)||je(e)?ar(e.childType,t):ke(e)?e.fields.some(n=>ar(n.type,t)):ue(e)?e.fields.some(n=>ar(n.type,t)):ye(e)?e.variants.some(n=>n.fields?.some(r=>ar(r.type,t))):lt(e)?e.fields.some(n=>ar(n.type,t)):!1)}function Ga(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),D(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{o.fields?.forEach(a=>r(a.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function ki(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return _e(t.length)||ki(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?ki(t.isFn.callType):!1}default:return!1}}function ut({type:e,expectedType:t,expr:n,env:r}){let i;if(pt(e))i=Cr();else if(Lt(e))i=br();else if($t(e))t&&(Ie(t)&&(Dn(t.childType)||ci(t.childType))||je(t))&&(i=t),i||(i=kl(r));else return e;return i&&n?.$&&(n.$.convertedRuntimeType=i),i??e}function Ba(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=A(e.type,t),i=e.exprs.defaultValueExpr?k(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function bi(e,t=new Set){let n=e.label;Gn(n)&&(n=`(${n})`);let r=e.defaultValue?Se(e.defaultValue):"",i=e.assignedValue?Se(e.assignedValue):"";return r?`(${n}: ${A(e.type,t)}) ?= ${r}`:i?`(${n}: ${A(e.type,t)}) = ${i}`:`${n}: ${A(e.type,t)}`}function $l(e,t=new Set){let n=e.label;Gn(n)&&(n=`(${n})`);let r=e.defaultValue?Se(e.defaultValue):"",i=e.assignedValue?Se(e.assignedValue):"";return r?`(${n} : ${A(e.type,t)}) ?= ${r}`:i?`(${n} : ${A(e.type,t)}) = ${i}`:`${n} : ${A(e.type,t)}`}function Cl(e,t=new Set){let n=e.parameters.map(p=>Ba(p,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(p=>Ba(p,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=A(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(p=>p.isEffectRowSpread?`...(${p.label})`:Ba(p,t)).join(", ")})`:"",l=[r,n,s,i].filter(p=>!!p).join(", "),u=e.SelfType?.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function A(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 od(e,t)}finally{e.id&&t.delete(e.id)}}function od(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`[${A(e.childType,t)}; ${Se(e.length)}]`;case"Slice":return`[${A(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>bi(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=>bi(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(i=>`.${i}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(i=>bi(i,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(i=>bi(i,t)).join(", ")})`}case"Module":{let n=e,r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(i=>$l(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(Et(n))return`Fn${Cl(n.isFn.callType,t).slice(2)}`;if(zt(n)){let i=[A(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(A(o.type,t));return`Future(${i.join(", ")})`}let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}trait(${n.fields.map(i=>$l(i,t)).join(", ")})`,n.receiverType&&(r=`(${A(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:Cl(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return k(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(A(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${A(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${A(e.childType,t)})`;case"Iso":return`Iso(${A(e.childType,t)})`;case"Arc":return`Arc(${A(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${A(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${A(r.type,t)}`).join(", ")})`}case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let{traitType:i}of n.requiredTraits)r.push(A(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${A(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var bl=64;function jo(){return bl}function Ko(){return bl/8}function ad(e){let t=kr(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(Oe(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function sd(e){let t=0;for(let n of e.fields){let r=kr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function ld(e){let t=0;for(let n of e.fields){let r=kr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function ud(e){let t=0,n=0;for(let d of e.variants){let g=0;if(d.fields)for(let h of d.fields){let y=kr(h.type);if(y===null)return null;if(y===-1)return-1;g+=y;let v=sr(h.type);if(v===null)return null;n=Math.max(n,v*8)}t=Math.max(t,g)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,i=32,o=Math.max(n,8),a=Math.max(i,o),s=r/8,l=o/8,u=(l-s%l)%l*8,c=r+u+t,p=c/8,f=a/8,_=(f-p%f)%f*8;return c+_}function cd(e){let t=0;for(let n of e.fields){let r=kr(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function sr(e){if(D(e))return null;if(pe(e)||We(e)||pt(e)||Lt(e)||$t(e)||At(e)||Le(e)||xe(e)||Ct(e))return 1;if(cn(e))return 1;if(Qi(e)||Zi(e))return Ko();if(Dn(e)||Ji(e))return 1;if(eo(e)||to(e))return 2;if(no(e)||ro(e))return 4;if(io(e)||oo(e))return 8;if(ao(e))return 4;if(so(e))return 8;if(be(e))return sr(e.childType);if(ke(e)){let t=1;for(let n of e.fields){let r=sr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ue(e)){if(e.isReferenceSemantics)return Ko();if(e.isNewtype)return sr(e.fields[0].type);let t=1;for(let n of e.fields){let r=sr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ye(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=sr(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(lt(e)){let t=1;for(let n of e.fields){let r=sr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(q(e))return Ko();if(Ie(e))return Ko()}return null}function kr(e){return D(e)?null:pe(e)||We(e)||pt(e)||Lt(e)||$t(e)||At(e)||Le(e)||xe(e)||Ct(e)?0:cn(e)?8:Qi(e)||Zi(e)?jo():Dn(e)||Ji(e)?8:eo(e)||to(e)?16:no(e)||ro(e)?32:io(e)||oo(e)?64:ao(e)?32:so(e)?64:be(e)?ad(e):ke(e)?sd(e):ue(e)?e.isReferenceSemantics?jo():e.isNewtype?kr(e.fields[0].type):ld(e):ye(e)?ud(e):lt(e)?cd(e):q(e)||Ie(e)?jo():null}function lr(e,t){if(or(e))throw nt([{token:t,errorMessage:`Cannot use 'void' type here.
44
44
  Please consider use 'unit' type instead.
45
- `}])}function lr(e,t,n){if(!dt(e)||Br(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(Ur(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function Ur(e,t,n,r){if(ue(e)&&e.id===t.id)return!0;if(ue(e)&&e.isReferenceSemantics)return lr(e,new Set(n),r);if(ye(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(Ur(o.type,t,n,r))return!0}}if(M(e))return Br(e,r)?!1:e.resolvedConcreteType?Ur(e.resolvedConcreteType,t,n,r):!0;if(be(e)||je(e))return Ur(e.childType,t,n,r);if(ke(e)){for(let i of e.fields)if(Ur(i.type,t,n,r))return!0}if(lt(e)){for(let i of e.fields)if(Ur(i.type,t,n,r))return!0}return Ne(e)?!0:(Ie(e),!1)}function qn(e,t){return t?e.id===t.id?!0:be(e)||je(e)||Ie(e)?qn(e.childType,t):ke(e)?e.fields.some(n=>qn(n.type,t)):ue(e)?e.fields.some(n=>qn(n.type,t)):lt(e)?e.fields.some(n=>qn(n.type,t)):ye(e)?e.variants.some(n=>n.fields?.some(r=>qn(r.type,t))):H(e)?qn(e.return.type,t):!1:!1}import{createHash as kl}from"crypto";function po(e){return"yo"+kl("sha1").update(e).digest("hex").slice(0,8)}var Xo=new Map;function Be(e){let t=Xo.get(e);return t===void 0&&(t=0),Xo.set(e,t+1),`${po(e)}_id_${t}`}function Qo(e){Xo.delete(e)}var wl=1;function Fl(e){return`_${po(e)}_temp_`}function Ll(e){return`${Fl(e)}${wl++}`}function Qe(e,t){return t.startsWith(Fl(e))}var Ba=new Map;function Gr(e,t){let n="";for(let o=0;o<t.length;o++)if(Ki(t[o])){let a=Da.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=po(e)+"_"+n,i=Ba.get(r);return i===void 0?i=0:i++,Ba.set(r,i),r+(i==0?"":`_${i}`)}function Ga(e){return kl("sha1").update(e).digest("hex").slice(0,10)}function Al(){Xo.clear(),Ba.clear(),wl=1}function wr(e){return{[e]:!0}}function Je(e,t){return e?.[t]===!0}function ct(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function fo(e){let t={};for(let n of e)n.return&&(t.return=!0),n.escape&&(t.escape=!0),n.break&&(t.break=!0),n.continue&&(t.continue=!0);return t}function Il(e){let t=[];return e.return&&t.push("return"),e.escape&&t.push("escape"),e.break&&t.push("break"),e.continue&&t.push("continue"),t.join("+")}function Ve(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:Ve(e.func),args:e.args.map(Ve),$:void 0}}}function F(e){return e?.tag==="FnCall"}function U(e){return e?.tag==="Atom"}function ht(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function wi(e){return e.tag==="Atom"&&e.token.type==="operator"}function T(e,t,n){if(e.tag!=="FnCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.tag==="FnCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function ge(e,t,n){if(!F(e))throw m({token:e.token,errorMessage:`Expected function call, got atom:
45
+ `}])}function ur(e,t,n){if(!mt(e)||Br(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(Ur(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function Ur(e,t,n,r){if(ue(e)&&e.id===t.id)return!0;if(ue(e)&&e.isReferenceSemantics)return ur(e,new Set(n),r);if(ye(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(Ur(o.type,t,n,r))return!0}}if(D(e))return Br(e,r)?!1:e.resolvedConcreteType?Ur(e.resolvedConcreteType,t,n,r):!0;if(be(e)||je(e))return Ur(e.childType,t,n,r);if(ke(e)){for(let i of e.fields)if(Ur(i.type,t,n,r))return!0}if(lt(e)){for(let i of e.fields)if(Ur(i.type,t,n,r))return!0}return Ne(e)?!0:(Ie(e),!1)}function Hn(e,t){return t?e.id===t.id?!0:be(e)||je(e)||Ie(e)?Hn(e.childType,t):ke(e)?e.fields.some(n=>Hn(n.type,t)):ue(e)?e.fields.some(n=>Hn(n.type,t)):lt(e)?e.fields.some(n=>Hn(n.type,t)):ye(e)?e.variants.some(n=>n.fields?.some(r=>Hn(r.type,t))):q(e)?Hn(e.return.type,t):!1:!1}import{createHash as wl}from"crypto";function po(e){return"yo"+wl("sha1").update(e).digest("hex").slice(0,8)}var Xo=new Map;function Be(e){let t=Xo.get(e);return t===void 0&&(t=0),Xo.set(e,t+1),`${po(e)}_id_${t}`}function Qo(e){Xo.delete(e)}var Fl=1;function Ll(e){return`_${po(e)}_temp_`}function Al(e){return`${Ll(e)}${Fl++}`}function Qe(e,t){return t.startsWith(Ll(e))}var Wa=new Map;function Gr(e,t){let n="";for(let o=0;o<t.length;o++)if(Ki(t[o])){let a=Oa.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=po(e)+"_"+n,i=Wa.get(r);return i===void 0?i=0:i++,Wa.set(r,i),r+(i==0?"":`_${i}`)}function qa(e){return wl("sha1").update(e).digest("hex").slice(0,10)}function Il(){Xo.clear(),Wa.clear(),Fl=1}function wr(e){return{[e]:!0}}function et(e,t){return e?.[t]===!0}function ct(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function fo(e){let t={};for(let n of e)n.return&&(t.return=!0),n.escape&&(t.escape=!0),n.break&&(t.break=!0),n.continue&&(t.continue=!0);return t}function xl(e){let t=[];return e.return&&t.push("return"),e.escape&&t.push("escape"),e.break&&t.push("break"),e.continue&&t.push("continue"),t.join("+")}function Ve(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:Ve(e.func),args:e.args.map(Ve),$:void 0}}}function F(e){return e?.tag==="FnCall"}function U(e){return e?.tag==="Atom"}function ht(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function wi(e){return e.tag==="Atom"&&e.token.type==="operator"}function T(e,t,n){if(e.tag!=="FnCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.tag==="FnCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function ge(e,t,n){if(!F(e))throw m({token:e.token,errorMessage:`Expected function call, got atom:
46
46
  ${k(e)}`});if(!T(e,t))throw m({token:e.token,errorMessage:`Expected function call of ${Array.isArray(t)?t.map(r=>`"${r}"`).join(" or "):`"${t}"`}, got:
47
47
  ${k(e)}`});if(n!==void 0&&e.args.length!==n)throw m({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
48
48
  ${k(e)}`})}function Yo(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FnCall"&&t.tag==="FnCall"){if(!Yo(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!Yo(e.args[n],t.args[n]))return!1;return!0}return!1}var I={comptime:["comptime"],runtime:["runtime"],ref:["ref"],forall:["forall","\u2200"],using:["using"],given:["given"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],escape:["escape"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],trait:["trait"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],not:["not"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Arc:["Arc"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],Trait:["Trait"],ComptimeList:["ComptimeList"],tuple:["tuple"],array:["array"],comptime_list:["comptime_list"]},w={comptime_expect_error:["comptime_expect_error"],comptime_assert:["comptime_assert"],comptime_print:["comptime_print"],comptime_fn:["comptime_fn"],va_start:["va_start"],__yo_array_fill:["__yo_array_fill"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_slice_new:["__yo_slice_new"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_comptime_list_car:["__yo_comptime_list_car"],__yo_comptime_list_cdr:["__yo_comptime_list_cdr"],__yo_comptime_list_cons:["__yo_comptime_list_cons"],__yo_comptime_list_append:["__yo_comptime_list_append"],__yo_comptime_list_length:["__yo_comptime_list_length"],__yo_comptime_list_element_type:["__yo_comptime_list_element_type"],__yo_comptime_int_add:["__yo_comptime_int_add"],__yo_comptime_int_sub:["__yo_comptime_int_sub"],__yo_comptime_int_mul:["__yo_comptime_int_mul"],__yo_comptime_int_div:["__yo_comptime_int_div"],__yo_comptime_int_mod:["__yo_comptime_int_mod"],__yo_comptime_int_eq:["__yo_comptime_int_eq"],__yo_comptime_int_neq:["__yo_comptime_int_neq"],__yo_comptime_int_lt:["__yo_comptime_int_lt"],__yo_comptime_int_lte:["__yo_comptime_int_lte"],__yo_comptime_int_gt:["__yo_comptime_int_gt"],__yo_comptime_int_gte:["__yo_comptime_int_gte"],__yo_comptime_int_bit_and:["__yo_comptime_int_bit_and"],__yo_comptime_int_bit_or:["__yo_comptime_int_bit_or"],__yo_comptime_int_bit_xor:["__yo_comptime_int_bit_xor"],__yo_comptime_int_shl:["__yo_comptime_int_shl"],__yo_comptime_int_shr:["__yo_comptime_int_shr"],__yo_comptime_int_neg:["__yo_comptime_int_neg"],__yo_comptime_int_bit_not:["__yo_comptime_int_bit_not"],__yo_comptime_int_to_comptime_string:["__yo_comptime_int_to_comptime_string"],__yo_comptime_float_add:["__yo_comptime_float_add"],__yo_comptime_float_sub:["__yo_comptime_float_sub"],__yo_comptime_float_mul:["__yo_comptime_float_mul"],__yo_comptime_float_div:["__yo_comptime_float_div"],__yo_comptime_float_eq:["__yo_comptime_float_eq"],__yo_comptime_float_neq:["__yo_comptime_float_neq"],__yo_comptime_float_lt:["__yo_comptime_float_lt"],__yo_comptime_float_lte:["__yo_comptime_float_lte"],__yo_comptime_float_gt:["__yo_comptime_float_gt"],__yo_comptime_float_gte:["__yo_comptime_float_gte"],__yo_comptime_float_neg:["__yo_comptime_float_neg"],__yo_comptime_float_to_comptime_string:["__yo_comptime_float_to_comptime_string"],__yo_comptime_u8_add:["__yo_comptime_u8_add"],__yo_comptime_u8_sub:["__yo_comptime_u8_sub"],__yo_comptime_u8_mul:["__yo_comptime_u8_mul"],__yo_comptime_u8_div:["__yo_comptime_u8_div"],__yo_comptime_u8_mod:["__yo_comptime_u8_mod"],__yo_comptime_u8_eq:["__yo_comptime_u8_eq"],__yo_comptime_u8_neq:["__yo_comptime_u8_neq"],__yo_comptime_u8_lt:["__yo_comptime_u8_lt"],__yo_comptime_u8_lte:["__yo_comptime_u8_lte"],__yo_comptime_u8_gt:["__yo_comptime_u8_gt"],__yo_comptime_u8_gte:["__yo_comptime_u8_gte"],__yo_comptime_u8_neg:["__yo_comptime_u8_neg"],__yo_comptime_u8_bit_and:["__yo_comptime_u8_bit_and"],__yo_comptime_u8_bit_or:["__yo_comptime_u8_bit_or"],__yo_comptime_u8_bit_xor:["__yo_comptime_u8_bit_xor"],__yo_comptime_u8_bit_not:["__yo_comptime_u8_bit_not"],__yo_comptime_u8_shl:["__yo_comptime_u8_shl"],__yo_comptime_u8_shr:["__yo_comptime_u8_shr"],__yo_comptime_u8_to_comptime_string:["__yo_comptime_u8_to_comptime_string"],__yo_comptime_i8_add:["__yo_comptime_i8_add"],__yo_comptime_i8_sub:["__yo_comptime_i8_sub"],__yo_comptime_i8_mul:["__yo_comptime_i8_mul"],__yo_comptime_i8_div:["__yo_comptime_i8_div"],__yo_comptime_i8_mod:["__yo_comptime_i8_mod"],__yo_comptime_i8_eq:["__yo_comptime_i8_eq"],__yo_comptime_i8_neq:["__yo_comptime_i8_neq"],__yo_comptime_i8_lt:["__yo_comptime_i8_lt"],__yo_comptime_i8_lte:["__yo_comptime_i8_lte"],__yo_comptime_i8_gt:["__yo_comptime_i8_gt"],__yo_comptime_i8_gte:["__yo_comptime_i8_gte"],__yo_comptime_i8_neg:["__yo_comptime_i8_neg"],__yo_comptime_i8_bit_and:["__yo_comptime_i8_bit_and"],__yo_comptime_i8_bit_or:["__yo_comptime_i8_bit_or"],__yo_comptime_i8_bit_xor:["__yo_comptime_i8_bit_xor"],__yo_comptime_i8_bit_not:["__yo_comptime_i8_bit_not"],__yo_comptime_i8_shl:["__yo_comptime_i8_shl"],__yo_comptime_i8_shr:["__yo_comptime_i8_shr"],__yo_comptime_i8_to_comptime_string:["__yo_comptime_i8_to_comptime_string"],__yo_comptime_u16_add:["__yo_comptime_u16_add"],__yo_comptime_u16_sub:["__yo_comptime_u16_sub"],__yo_comptime_u16_mul:["__yo_comptime_u16_mul"],__yo_comptime_u16_div:["__yo_comptime_u16_div"],__yo_comptime_u16_mod:["__yo_comptime_u16_mod"],__yo_comptime_u16_eq:["__yo_comptime_u16_eq"],__yo_comptime_u16_neq:["__yo_comptime_u16_neq"],__yo_comptime_u16_lt:["__yo_comptime_u16_lt"],__yo_comptime_u16_lte:["__yo_comptime_u16_lte"],__yo_comptime_u16_gt:["__yo_comptime_u16_gt"],__yo_comptime_u16_gte:["__yo_comptime_u16_gte"],__yo_comptime_u16_neg:["__yo_comptime_u16_neg"],__yo_comptime_u16_bit_and:["__yo_comptime_u16_bit_and"],__yo_comptime_u16_bit_or:["__yo_comptime_u16_bit_or"],__yo_comptime_u16_bit_xor:["__yo_comptime_u16_bit_xor"],__yo_comptime_u16_bit_not:["__yo_comptime_u16_bit_not"],__yo_comptime_u16_shl:["__yo_comptime_u16_shl"],__yo_comptime_u16_shr:["__yo_comptime_u16_shr"],__yo_comptime_u16_to_comptime_string:["__yo_comptime_u16_to_comptime_string"],__yo_comptime_i16_add:["__yo_comptime_i16_add"],__yo_comptime_i16_sub:["__yo_comptime_i16_sub"],__yo_comptime_i16_mul:["__yo_comptime_i16_mul"],__yo_comptime_i16_div:["__yo_comptime_i16_div"],__yo_comptime_i16_mod:["__yo_comptime_i16_mod"],__yo_comptime_i16_eq:["__yo_comptime_i16_eq"],__yo_comptime_i16_neq:["__yo_comptime_i16_neq"],__yo_comptime_i16_lt:["__yo_comptime_i16_lt"],__yo_comptime_i16_lte:["__yo_comptime_i16_lte"],__yo_comptime_i16_gt:["__yo_comptime_i16_gt"],__yo_comptime_i16_gte:["__yo_comptime_i16_gte"],__yo_comptime_i16_neg:["__yo_comptime_i16_neg"],__yo_comptime_i16_bit_and:["__yo_comptime_i16_bit_and"],__yo_comptime_i16_bit_or:["__yo_comptime_i16_bit_or"],__yo_comptime_i16_bit_xor:["__yo_comptime_i16_bit_xor"],__yo_comptime_i16_bit_not:["__yo_comptime_i16_bit_not"],__yo_comptime_i16_shl:["__yo_comptime_i16_shl"],__yo_comptime_i16_shr:["__yo_comptime_i16_shr"],__yo_comptime_i16_to_comptime_string:["__yo_comptime_i16_to_comptime_string"],__yo_comptime_u32_add:["__yo_comptime_u32_add"],__yo_comptime_u32_sub:["__yo_comptime_u32_sub"],__yo_comptime_u32_mul:["__yo_comptime_u32_mul"],__yo_comptime_u32_div:["__yo_comptime_u32_div"],__yo_comptime_u32_mod:["__yo_comptime_u32_mod"],__yo_comptime_u32_eq:["__yo_comptime_u32_eq"],__yo_comptime_u32_neq:["__yo_comptime_u32_neq"],__yo_comptime_u32_lt:["__yo_comptime_u32_lt"],__yo_comptime_u32_lte:["__yo_comptime_u32_lte"],__yo_comptime_u32_gt:["__yo_comptime_u32_gt"],__yo_comptime_u32_gte:["__yo_comptime_u32_gte"],__yo_comptime_u32_neg:["__yo_comptime_u32_neg"],__yo_comptime_u32_bit_and:["__yo_comptime_u32_bit_and"],__yo_comptime_u32_bit_or:["__yo_comptime_u32_bit_or"],__yo_comptime_u32_bit_xor:["__yo_comptime_u32_bit_xor"],__yo_comptime_u32_bit_not:["__yo_comptime_u32_bit_not"],__yo_comptime_u32_shl:["__yo_comptime_u32_shl"],__yo_comptime_u32_shr:["__yo_comptime_u32_shr"],__yo_comptime_u32_to_comptime_string:["__yo_comptime_u32_to_comptime_string"],__yo_comptime_i32_add:["__yo_comptime_i32_add"],__yo_comptime_i32_sub:["__yo_comptime_i32_sub"],__yo_comptime_i32_mul:["__yo_comptime_i32_mul"],__yo_comptime_i32_div:["__yo_comptime_i32_div"],__yo_comptime_i32_mod:["__yo_comptime_i32_mod"],__yo_comptime_i32_eq:["__yo_comptime_i32_eq"],__yo_comptime_i32_neq:["__yo_comptime_i32_neq"],__yo_comptime_i32_lt:["__yo_comptime_i32_lt"],__yo_comptime_i32_lte:["__yo_comptime_i32_lte"],__yo_comptime_i32_gt:["__yo_comptime_i32_gt"],__yo_comptime_i32_gte:["__yo_comptime_i32_gte"],__yo_comptime_i32_neg:["__yo_comptime_i32_neg"],__yo_comptime_i32_bit_and:["__yo_comptime_i32_bit_and"],__yo_comptime_i32_bit_or:["__yo_comptime_i32_bit_or"],__yo_comptime_i32_bit_xor:["__yo_comptime_i32_bit_xor"],__yo_comptime_i32_bit_not:["__yo_comptime_i32_bit_not"],__yo_comptime_i32_shl:["__yo_comptime_i32_shl"],__yo_comptime_i32_shr:["__yo_comptime_i32_shr"],__yo_comptime_i32_to_comptime_string:["__yo_comptime_i32_to_comptime_string"],__yo_comptime_u64_add:["__yo_comptime_u64_add"],__yo_comptime_u64_sub:["__yo_comptime_u64_sub"],__yo_comptime_u64_mul:["__yo_comptime_u64_mul"],__yo_comptime_u64_div:["__yo_comptime_u64_div"],__yo_comptime_u64_mod:["__yo_comptime_u64_mod"],__yo_comptime_u64_eq:["__yo_comptime_u64_eq"],__yo_comptime_u64_neq:["__yo_comptime_u64_neq"],__yo_comptime_u64_lt:["__yo_comptime_u64_lt"],__yo_comptime_u64_lte:["__yo_comptime_u64_lte"],__yo_comptime_u64_gt:["__yo_comptime_u64_gt"],__yo_comptime_u64_gte:["__yo_comptime_u64_gte"],__yo_comptime_u64_neg:["__yo_comptime_u64_neg"],__yo_comptime_u64_bit_and:["__yo_comptime_u64_bit_and"],__yo_comptime_u64_bit_or:["__yo_comptime_u64_bit_or"],__yo_comptime_u64_bit_xor:["__yo_comptime_u64_bit_xor"],__yo_comptime_u64_bit_not:["__yo_comptime_u64_bit_not"],__yo_comptime_u64_shl:["__yo_comptime_u64_shl"],__yo_comptime_u64_shr:["__yo_comptime_u64_shr"],__yo_comptime_u64_to_comptime_string:["__yo_comptime_u64_to_comptime_string"],__yo_comptime_i64_add:["__yo_comptime_i64_add"],__yo_comptime_i64_sub:["__yo_comptime_i64_sub"],__yo_comptime_i64_mul:["__yo_comptime_i64_mul"],__yo_comptime_i64_div:["__yo_comptime_i64_div"],__yo_comptime_i64_mod:["__yo_comptime_i64_mod"],__yo_comptime_i64_eq:["__yo_comptime_i64_eq"],__yo_comptime_i64_neq:["__yo_comptime_i64_neq"],__yo_comptime_i64_lt:["__yo_comptime_i64_lt"],__yo_comptime_i64_lte:["__yo_comptime_i64_lte"],__yo_comptime_i64_gt:["__yo_comptime_i64_gt"],__yo_comptime_i64_gte:["__yo_comptime_i64_gte"],__yo_comptime_i64_neg:["__yo_comptime_i64_neg"],__yo_comptime_i64_bit_and:["__yo_comptime_i64_bit_and"],__yo_comptime_i64_bit_or:["__yo_comptime_i64_bit_or"],__yo_comptime_i64_bit_xor:["__yo_comptime_i64_bit_xor"],__yo_comptime_i64_bit_not:["__yo_comptime_i64_bit_not"],__yo_comptime_i64_shl:["__yo_comptime_i64_shl"],__yo_comptime_i64_shr:["__yo_comptime_i64_shr"],__yo_comptime_i64_to_comptime_string:["__yo_comptime_i64_to_comptime_string"],__yo_comptime_usize_add:["__yo_comptime_usize_add"],__yo_comptime_usize_sub:["__yo_comptime_usize_sub"],__yo_comptime_usize_mul:["__yo_comptime_usize_mul"],__yo_comptime_usize_div:["__yo_comptime_usize_div"],__yo_comptime_usize_mod:["__yo_comptime_usize_mod"],__yo_comptime_usize_eq:["__yo_comptime_usize_eq"],__yo_comptime_usize_neq:["__yo_comptime_usize_neq"],__yo_comptime_usize_lt:["__yo_comptime_usize_lt"],__yo_comptime_usize_lte:["__yo_comptime_usize_lte"],__yo_comptime_usize_gt:["__yo_comptime_usize_gt"],__yo_comptime_usize_gte:["__yo_comptime_usize_gte"],__yo_comptime_usize_neg:["__yo_comptime_usize_neg"],__yo_comptime_usize_bit_and:["__yo_comptime_usize_bit_and"],__yo_comptime_usize_bit_or:["__yo_comptime_usize_bit_or"],__yo_comptime_usize_bit_xor:["__yo_comptime_usize_bit_xor"],__yo_comptime_usize_bit_not:["__yo_comptime_usize_bit_not"],__yo_comptime_usize_shl:["__yo_comptime_usize_shl"],__yo_comptime_usize_shr:["__yo_comptime_usize_shr"],__yo_comptime_usize_to_comptime_string:["__yo_comptime_usize_to_comptime_string"],__yo_comptime_isize_add:["__yo_comptime_isize_add"],__yo_comptime_isize_sub:["__yo_comptime_isize_sub"],__yo_comptime_isize_mul:["__yo_comptime_isize_mul"],__yo_comptime_isize_div:["__yo_comptime_isize_div"],__yo_comptime_isize_mod:["__yo_comptime_isize_mod"],__yo_comptime_isize_eq:["__yo_comptime_isize_eq"],__yo_comptime_isize_neq:["__yo_comptime_isize_neq"],__yo_comptime_isize_lt:["__yo_comptime_isize_lt"],__yo_comptime_isize_lte:["__yo_comptime_isize_lte"],__yo_comptime_isize_gt:["__yo_comptime_isize_gt"],__yo_comptime_isize_gte:["__yo_comptime_isize_gte"],__yo_comptime_isize_neg:["__yo_comptime_isize_neg"],__yo_comptime_isize_bit_and:["__yo_comptime_isize_bit_and"],__yo_comptime_isize_bit_or:["__yo_comptime_isize_bit_or"],__yo_comptime_isize_bit_xor:["__yo_comptime_isize_bit_xor"],__yo_comptime_isize_bit_not:["__yo_comptime_isize_bit_not"],__yo_comptime_isize_shl:["__yo_comptime_isize_shl"],__yo_comptime_isize_shr:["__yo_comptime_isize_shr"],__yo_comptime_isize_to_comptime_string:["__yo_comptime_isize_to_comptime_string"],__yo_comptime_f32_add:["__yo_comptime_f32_add"],__yo_comptime_f32_sub:["__yo_comptime_f32_sub"],__yo_comptime_f32_mul:["__yo_comptime_f32_mul"],__yo_comptime_f32_div:["__yo_comptime_f32_div"],__yo_comptime_f32_eq:["__yo_comptime_f32_eq"],__yo_comptime_f32_neq:["__yo_comptime_f32_neq"],__yo_comptime_f32_lt:["__yo_comptime_f32_lt"],__yo_comptime_f32_lte:["__yo_comptime_f32_lte"],__yo_comptime_f32_gt:["__yo_comptime_f32_gt"],__yo_comptime_f32_gte:["__yo_comptime_f32_gte"],__yo_comptime_f32_neg:["__yo_comptime_f32_neg"],__yo_comptime_f32_to_comptime_string:["__yo_comptime_f32_to_comptime_string"],__yo_comptime_f64_add:["__yo_comptime_f64_add"],__yo_comptime_f64_sub:["__yo_comptime_f64_sub"],__yo_comptime_f64_mul:["__yo_comptime_f64_mul"],__yo_comptime_f64_div:["__yo_comptime_f64_div"],__yo_comptime_f64_eq:["__yo_comptime_f64_eq"],__yo_comptime_f64_neq:["__yo_comptime_f64_neq"],__yo_comptime_f64_lt:["__yo_comptime_f64_lt"],__yo_comptime_f64_lte:["__yo_comptime_f64_lte"],__yo_comptime_f64_gt:["__yo_comptime_f64_gt"],__yo_comptime_f64_gte:["__yo_comptime_f64_gte"],__yo_comptime_f64_neg:["__yo_comptime_f64_neg"],__yo_comptime_f64_to_comptime_string:["__yo_comptime_f64_to_comptime_string"],__yo_comptime_bool_and:["__yo_comptime_bool_and"],__yo_comptime_bool_or:["__yo_comptime_bool_or"],__yo_comptime_bool_eq:["__yo_comptime_bool_eq"],__yo_comptime_bool_neq:["__yo_comptime_bool_neq"],__yo_comptime_bool_not:["__yo_comptime_bool_not"],__yo_comptime_bool_to_comptime_string:["__yo_comptime_bool_to_comptime_string"],__yo_comptime_string_concat:["__yo_comptime_string_concat"],__yo_comptime_string_eq:["__yo_comptime_string_eq"],__yo_comptime_string_neq:["__yo_comptime_string_neq"],__yo_comptime_string_lt:["__yo_comptime_string_lt"],__yo_comptime_string_lte:["__yo_comptime_string_lte"],__yo_comptime_string_gt:["__yo_comptime_string_gt"],__yo_comptime_string_gte:["__yo_comptime_string_gte"],__yo_comptime_string_length:["__yo_comptime_string_length"],__yo_comptime_string_to_upper:["__yo_comptime_string_to_upper"],__yo_comptime_string_to_lower:["__yo_comptime_string_to_lower"],__yo_comptime_string_slice:["__yo_comptime_string_slice"],__yo_type_to_comptime_string:["__yo_type_to_comptime_string"],__yo_type_contains_rc_type:["__yo_type_contains_rc_type"],__yo_type_can_form_rc_cycle:["__yo_type_can_form_rc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_type_impls:["__yo_type_impls"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_rc_value:["__yo_var_is_owning_the_rc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_arc_dispose:["__yo_arc_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_drop_array_element:["__yo_drop_array_element"],__yo_dup_array_element:["__yo_dup_array_element"],__yo_drop_tuple_element:["__yo_drop_tuple_element"],__yo_dup_tuple_element:["__yo_dup_tuple_element"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"],__yo_getrandom:["__yo_getrandom"],__yo_arc4random_buf:["__yo_arc4random_buf"],__yo_bcrypt_gen_random:["__yo_bcrypt_gen_random"],__yo_maybe_uninit_new:["__yo_maybe_uninit_new"],__yo_maybe_uninit_as_ptr:["__yo_maybe_uninit_as_ptr"],__yo_maybe_uninit_assume_init:["__yo_maybe_uninit_assume_init"],__yo_process_platform:["__yo_process_platform"],__yo_process_arch:["__yo_process_arch"]};function Fi(e){return!!(e.tag==="FnCall"&&e.isInfix&&e.func.tag==="Atom"&&e.func.token.type==="operator"&&e.args.length===2)}function k(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?yn(e,r):Kn(e)}function Kn(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){e.func.token.value==="."?t=`${e.func.token.value}${Kn(e.args[0])}`:t=`${e.func.token.value}(${Kn(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let i=Kn(e.args[0]),o=Kn(e.args[1]);i=Fi(e.args[0])||wi(e.args[0])?`(${i})`:i,o=Fi(e.args[1])||wi(e.args[1])?`(${o})`:o,e.func.token.value==="."?t=`(${i}.${o})`:t=`${i} ${e.func.token.value} ${o}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===I.tuple[0]){e.args.length===1?t=`(${Kn(e.args[0])},)`:t=`(${e.args.map(i=>Kn(i)).join(", ").trim()})`;break}let n=Kn(e.func);n=Fi(e.func)||wi(e.func)?`(${n})`:n;let r=e.args.map(i=>Kn(i)).join(", ").trim();t=`${n}(${r})`;break}}return t}function yn(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},i=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){if(e.func.token.value===".")return`${e.func.token.value}${yn(e.args[0],t)}`;{let u=yn(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=yn(e.args[0],t),c=yn(e.args[1],t);return u=Fi(e.args[0])||wi(e.args[0])?`(${u})`:u,c=Fi(e.args[1])||wi(e.args[1])?`(${c})`:c,e.func.token.value==="."?`(${u}.${c})`:`${u} ${e.func.token.value} ${c}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===I.tuple[0]){if(e.args.length===0)return"()";if(e.args.length===1)return`(${yn(e.args[0],t)},)`;{let u=e.args.map(p=>yn(p,t)),c=`(${u.join(", ")})`;return c.length<=t.maxLineLength?c:`(
@@ -62,36 +62,36 @@ ${n})`}}let l=e.args.map(u=>yn(u,r));return`${s}(
62
62
  ${i}${l.join(`,
63
63
  ${i}`)}
64
64
  ${n})`}}return Kn(e)}function Pe(e,t,n){if(!e.$)throw new Error(`Expected expression to be evaluated, but it is not:
65
- ${k(e)}`);let{env:r,type:i,value:o,originType:a}=e.$,s=r.modulePath,l=t&&Te(i);if(e.$.variableName){let p=j(r,e.$.variableName);if(p.length>0){let _=p[p.length-1],d=_.isOwningTheRcValue?l:!1,g={..._,type:i,value:d?void 0:o?[o]:void 0,isCompileTimeOnly:d?!1:!!o,isOwningTheRcValue:d,isOwningTheSameRcValueAs:n};e.$.env=Ue(r,_,g),a||(e.$.originType=i);return}let{env:f}=_e({env:r,variable:{name:e.$.variableName,type:i,value:l?void 0:o?[o]:void 0,isCompileTimeOnly:l?!1:!!o,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});a||(e.$.originType=i),e.$.env=f;return}let u=Ll(s),{env:c}=_e({env:r,variable:{name:u,type:i,value:l?void 0:o?[o]:void 0,isCompileTimeOnly:l?!1:!!o,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});e.$.variableName=u,a||(e.$.originType=i),e.$.env=c}function Li(e,t){let n=e.frames.length-1,r=[];for(let i=0;i<t.length;i++){let o=t[i];if(!o.$)throw nt([{token:o.token,errorMessage:"Expected the body of the case to be evaluated, but it is not."}]);let a=o.$.env;r.push(a)}for(let i=0;i<r.length;i++)if(r[i].frames.length-1!==n)throw nt([{token:t[i].token,errorMessage:"Frame level is different for different cases."}]);for(let i=0;i<=n;i++){let o=i,a=e.frames[i],s=[...a.variables],l=[[]];s.forEach(p=>{l[0].push({consumedAtToken:p.consumedAtToken,initializedAtToken:p.initializedAtToken,type:p.type,isOwningTheRcValue:p.isOwningTheRcValue??!1})});for(let p=0;p<r.length;p++){let d=r[p].frames[i].variables;if(i!==n&&s.length!==d.length)if(d.length>s.length){let g=[...d].slice(s.length);if(g.every(y=>Qe(e.modulePath,y.name))){for(let v of g)s.push(v),l[0].push({consumedAtToken:void 0,initializedAtToken:v.initializedAtToken,type:v.type,isOwningTheRcValue:v.isOwningTheRcValue??!1});let y={...a,variables:[...s]};e={...e,frames:e.frames.map((v,E)=>E===i?y:v)}}else throw nt([{token:t[p].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}])}else throw nt([{token:t[p].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}]);for(let g=0;g<s.length;g++){let h=s[g],y=d[g];if(h.name!==y.name){if(Qe(e.modulePath,h.name)&&Qe(e.modulePath,y.name))continue;throw nt([{token:t[p].token,errorMessage:`Frame level ${i} has different variable names for different cases.`}])}}l.push([]),d.forEach(g=>{l[l.length-1].push({consumedAtToken:g.consumedAtToken,initializedAtToken:g.initializedAtToken,type:g.type,isOwningTheRcValue:g.isOwningTheRcValue??!1})})}let u=l.length,c=l[0].length;for(let p=0;p<c;p++){let f=s[p].name,_=[],d=[],g=[],h=[];for(let C=1;C<u;C++){let b=r[C-1].frames[o].variables;_.push(l[C][p].initializedAtToken),d.push(l[C][p].isOwningTheRcValue?b[p].token:void 0),g.push(l[C][p].consumedAtToken),h.push(l[C][p].type)}let y=_.map((C,L)=>({token:C,index:L})).filter(({token:C})=>!!C);if(y.length>1){let C=h[y[0].index],L=r[y[0].index];for(let b=1;b<y.length;b++){let O=h[y[b].index],N=r[y[b].index];if(M(C)&&M(O)){let D=C.resolvedConcreteType,V=O.resolvedConcreteType;if(D&&V&&!W({type:D,env:L},{type:V,env:N}))throw nt([{token:t[y[0].index].token,errorMessage:`Variable "${f}" has type Impl(...) but different concrete types across branches.
65
+ ${k(e)}`);let{env:r,type:i,value:o,originType:a}=e.$,s=r.modulePath,l=t&&Te(i);if(e.$.variableName){let p=j(r,e.$.variableName);if(p.length>0){let _=p[p.length-1],d=_.isOwningTheRcValue?l:!1,g={..._,type:i,value:d?void 0:o?[o]:void 0,isCompileTimeOnly:d?!1:!!o,isOwningTheRcValue:d,isOwningTheSameRcValueAs:n};e.$.env=ze(r,_,g),a||(e.$.originType=i);return}let{env:f}=fe({env:r,variable:{name:e.$.variableName,type:i,value:l?void 0:o?[o]:void 0,isCompileTimeOnly:l?!1:!!o,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});a||(e.$.originType=i),e.$.env=f;return}let u=Al(s),{env:c}=fe({env:r,variable:{name:u,type:i,value:l?void 0:o?[o]:void 0,isCompileTimeOnly:l?!1:!!o,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});e.$.variableName=u,a||(e.$.originType=i),e.$.env=c}function Li(e,t){let n=e.frames.length-1,r=[];for(let i=0;i<t.length;i++){let o=t[i];if(!o.$)throw nt([{token:o.token,errorMessage:"Expected the body of the case to be evaluated, but it is not."}]);let a=o.$.env;r.push(a)}for(let i=0;i<r.length;i++)if(r[i].frames.length-1!==n)throw nt([{token:t[i].token,errorMessage:"Frame level is different for different cases."}]);for(let i=0;i<=n;i++){let o=i,a=e.frames[i],s=[...a.variables],l=[[]];s.forEach(p=>{l[0].push({consumedAtToken:p.consumedAtToken,initializedAtToken:p.initializedAtToken,type:p.type,isOwningTheRcValue:p.isOwningTheRcValue??!1})});for(let p=0;p<r.length;p++){let d=r[p].frames[i].variables;if(i!==n&&s.length!==d.length)if(d.length>s.length){let g=[...d].slice(s.length);if(g.every(y=>Qe(e.modulePath,y.name))){for(let v of g)s.push(v),l[0].push({consumedAtToken:void 0,initializedAtToken:v.initializedAtToken,type:v.type,isOwningTheRcValue:v.isOwningTheRcValue??!1});let y={...a,variables:[...s]};e={...e,frames:e.frames.map((v,E)=>E===i?y:v)}}else throw nt([{token:t[p].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}])}else throw nt([{token:t[p].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}]);for(let g=0;g<s.length;g++){let h=s[g],y=d[g];if(h.name!==y.name){if(Qe(e.modulePath,h.name)&&Qe(e.modulePath,y.name))continue;throw nt([{token:t[p].token,errorMessage:`Frame level ${i} has different variable names for different cases.`}])}}l.push([]),d.forEach(g=>{l[l.length-1].push({consumedAtToken:g.consumedAtToken,initializedAtToken:g.initializedAtToken,type:g.type,isOwningTheRcValue:g.isOwningTheRcValue??!1})})}let u=l.length,c=l[0].length;for(let p=0;p<c;p++){let f=s[p].name,_=[],d=[],g=[],h=[];for(let C=1;C<u;C++){let b=r[C-1].frames[o].variables;_.push(l[C][p].initializedAtToken),d.push(l[C][p].isOwningTheRcValue?b[p].token:void 0),g.push(l[C][p].consumedAtToken),h.push(l[C][p].type)}let y=_.map((C,L)=>({token:C,index:L})).filter(({token:C})=>!!C);if(y.length>1){let C=h[y[0].index],L=r[y[0].index];for(let b=1;b<y.length;b++){let O=h[y[b].index],N=r[y[b].index];if(D(C)&&D(O)){let M=C.resolvedConcreteType,V=O.resolvedConcreteType;if(M&&V&&!W({type:M,env:L},{type:V,env:N}))throw nt([{token:t[y[0].index].token,errorMessage:`Variable "${f}" has type Impl(...) but different concrete types across branches.
66
66
  Impl(...) uses static dispatch and requires the same concrete type in all branches.
67
- Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:_[y[0].index],errorMessage:`First branch has concrete type: ${A(D)}`},{token:_[y[b].index],errorMessage:`Conflicting branch has concrete type: ${A(V)}`}])}if(C!==O&&!W({type:C,env:L},{type:O,env:N}))throw nt([{token:t[y[0].index].token,errorMessage:`Variable "${f}" has incompatible types across different cases:`},{token:_[y[0].index],errorMessage:`First initialization: ${A(C)}`},{token:_[y[b].index],errorMessage:`Conflicting initialization: ${A(O)}`}])}}if(_.length===1){if(_[0]&&!s[p].initializedAtToken)throw nt([{token:s[p].token,errorMessage:`Variable "${s[p].name}" might not be initialized in all cases.`},{token:_[0],errorMessage:"Might be initialized here:"}])}else if(!s[p].initializedAtToken&&_.every(C=>C)){let C={...s[p],initializedAtToken:_[0]};e=Ue(e,s[p],C),s[p]=C}else{let C=_.filter(b=>!!b),L=_.filter(b=>!b);if(C.length>0&&L.length>0)throw nt(_.map((b,O)=>({errorMessage:(O===0?`Variable "${f}" might be initialized in some cases but not initialized in other cases:
68
- `:"")+(b?"Might be initialized here:":"Not initialized here:"),token:b??t[O].token})))}if(g.length===1){if(g[0]&&!s[p].consumedAtToken){let C={...s[p],consumedAtToken:g[0]};e=Ue(e,s[p],C),s[p]=C}}else if(!s[p].consumedAtToken&&g.every(C=>C)){let C={...s[p],consumedAtToken:g[0]};e=Ue(e,s[p],C),s[p]=C}else{let C=g.filter(b=>!!b),L=g.filter(b=>!b);if(C.length>0&&L.length>0)throw nt(g.map((b,O)=>({errorMessage:(O===0?`Variable "${f}" is consumed in some cases but not in other cases:
69
- `:"")+(b?"Consumed here:":"Not consumed here:"),token:b??t[O].token})))}if(!s[p].isOwningTheRcValue&&d.every(C=>C)){let C={...s[p],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=Ue(e,s[p],C),s[p]=C}else{let C=d.filter(b=>!!b),L=d.filter(b=>!b);if(C.length>0&&L.length>0)throw nt(d.map((b,O)=>({errorMessage:(O===0?`Variable "${f}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
70
- `:"")+(b?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:b??t[O].token})))}let v=s[p].id,E=[];for(let C=1;C<u;C++){let O=r[C-1].frames[o].variables[p];E.push(O.id)}if(E.some(C=>C!==v)){let C=Gr(e.modulePath,f),L={...s[p],id:C,isOwningTheSameRcValueAs:void 0};e=Ue(e,s[p],L),s[p]=L}}}return e}function Xn(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 Zo(e,t){F(e)||(e.tag=t.tag),Xn(e,t)}function un(e,t,n=!1){if(e.$?.value&&R(e.$?.value))return t;let r=e.$?.variableName;if(!r)return t;let i=j(t,r);if(i.length===0)throw nt([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let o=i[i.length-1];if(o.consumedAtToken&&!n){let a=`use of moved value: \`${r}\``;throw nt([{token:e.token,errorMessage:a},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=Ue(t,o,{...o,consumedAtToken:e.token});return t}function Rt(e,t){if(!e.$||!e.$.variableName)return;if(e.$.value){let r=e.$.variableName;if(r&&Qe(e.$.env.modulePath,r)&&Te(e.$.type)){let i=j(e.$.env,r);if(i.length>0){let o=i[i.length-1];o.isOwningTheRcValue&&!o.consumedAtToken&&(e.$.env=Ue(e.$.env,o,{...o,consumedAtToken:e.token}))}}return}let n=e.$.variableName;if(!n)throw m({token:e.token,errorMessage:`Expression does not have a variable name to call ${w.___dup} on:
71
- ${k(e)}`});if(Te(e.$.type)){if(Qe(e.$.env.modulePath,n)&&!(U(e)&&e.token.value!==n)){let o=j(e.$.env,n);if(o.length>0){let a=o[o.length-1];if(a.isOwningTheRcValue){a.consumedAtToken||(e.$.env=Ue(e.$.env,a,{...a,consumedAtToken:e.token}));return}}}let r=qt(`${w.___dup[0]}(${n})`),i=x({expr:r,env:e.$.env,context:{...t,expectedType:void 0}});if(i.$?.variableName){let o=j(i.$.env,i.$.variableName);if(o.length>0){let a=o[o.length-1];a.consumedAtToken||(i.$.env=Ue(i.$.env,a,{...a,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function Wr(e,t){let n=e.$?.variableName;if(!n)return;let r=j(t,n);if(r.length===0)throw nt([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let o=`use of moved value: \`${n}\``;throw nt([{token:e.token,errorMessage:o},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var st="__yo_self";function Hr(e,t,n){if(ue(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hr(i.type,t,n));return n.delete(e.id),r}if(ke(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hr(i.type,t,n));return n.delete(e.id),r}if(ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Hr(o.type,t,n)));return n.delete(e.id),r}return be(e)||je(e)||Ie(e)?Hr(e.childType,t,n):On(e,t)}function qr(e,t,n){if(ue(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>qr(i.type,t,n));return n.delete(e.id),r}if(ke(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>qr(i.type,t,n));return n.delete(e.id),r}if(ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>qr(o.type,t,n)));return n.delete(e.id),r}return be(e)||je(e)||Ie(e)?qr(e.childType,t,n):ur(e,t)}function xl(e,t,n,r){let i=qt(e),o=x({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${k(i)}`);return{expr:o,env:o.$.env}}function Ai({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=xl(t,n,r,i);if(F(o)&&o.$&&o.$.value&&R(o.$.value)&&H(o.$.value.value)){let s=o.$.value.value,l={label:e,type:s,assignedValue:void 0,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.trait){let u=n.trait.fields.findIndex(c=>c.label===e);u>=0?n.trait.fields[u]=l:n.trait.fields.push(l)}}return a}function gn({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=xl(t,n,r,i);if(F(o)&&o.$&&o.$.value&&ie(o.$.value)){o.$.value.funcId+=e,o.$.value.funcName=e;let s={label:e,type:o.$.type,assignedValue:o.$.value,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:o}};if(n.trait){let l=n.trait.fields.findIndex(u=>u.label===e);l>=0?n.trait.fields[l]=s:n.trait.fields.push(s)}}return a}var Wa=`(fn(${st} : Self) -> unit)`,Jo=`(fn(${st} : Self) -> unit)`,ea=`(fn(${st} : Self) -> Self)`;function ld(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function ud(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Ha(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(ud(i)){let o=Be("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=Be("field_"+ld(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${st};`,callsExpr:r.join(`
72
- `)}}function cd(e){let t=Wa;if(!on(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>Te(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=Ha(n,w.___drop[0]),o=`
67
+ Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:_[y[0].index],errorMessage:`First branch has concrete type: ${A(M)}`},{token:_[y[b].index],errorMessage:`Conflicting branch has concrete type: ${A(V)}`}])}if(C!==O&&!W({type:C,env:L},{type:O,env:N}))throw nt([{token:t[y[0].index].token,errorMessage:`Variable "${f}" has incompatible types across different cases:`},{token:_[y[0].index],errorMessage:`First initialization: ${A(C)}`},{token:_[y[b].index],errorMessage:`Conflicting initialization: ${A(O)}`}])}}if(_.length===1){if(_[0]&&!s[p].initializedAtToken)throw nt([{token:s[p].token,errorMessage:`Variable "${s[p].name}" might not be initialized in all cases.`},{token:_[0],errorMessage:"Might be initialized here:"}])}else if(!s[p].initializedAtToken&&_.every(C=>C)){let C={...s[p],initializedAtToken:_[0]};e=ze(e,s[p],C),s[p]=C}else{let C=_.filter(b=>!!b),L=_.filter(b=>!b);if(C.length>0&&L.length>0)throw nt(_.map((b,O)=>({errorMessage:(O===0?`Variable "${f}" might be initialized in some cases but not initialized in other cases:
68
+ `:"")+(b?"Might be initialized here:":"Not initialized here:"),token:b??t[O].token})))}if(g.length===1){if(g[0]&&!s[p].consumedAtToken){let C={...s[p],consumedAtToken:g[0]};e=ze(e,s[p],C),s[p]=C}}else if(!s[p].consumedAtToken&&g.every(C=>C)){let C={...s[p],consumedAtToken:g[0]};e=ze(e,s[p],C),s[p]=C}else{let C=g.filter(b=>!!b),L=g.filter(b=>!b);if(C.length>0&&L.length>0)throw nt(g.map((b,O)=>({errorMessage:(O===0?`Variable "${f}" is consumed in some cases but not in other cases:
69
+ `:"")+(b?"Consumed here:":"Not consumed here:"),token:b??t[O].token})))}if(!s[p].isOwningTheRcValue&&d.every(C=>C)){let C={...s[p],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=ze(e,s[p],C),s[p]=C}else{let C=d.filter(b=>!!b),L=d.filter(b=>!b);if(C.length>0&&L.length>0)throw nt(d.map((b,O)=>({errorMessage:(O===0?`Variable "${f}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
70
+ `:"")+(b?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:b??t[O].token})))}let v=s[p].id,E=[];for(let C=1;C<u;C++){let O=r[C-1].frames[o].variables[p];E.push(O.id)}if(E.some(C=>C!==v)){let C=Gr(e.modulePath,f),L={...s[p],id:C,isOwningTheSameRcValueAs:void 0};e=ze(e,s[p],L),s[p]=L}}}return e}function Xn(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 Zo(e,t){F(e)||(e.tag=t.tag),Xn(e,t)}function un(e,t,n=!1){if(e.$?.value&&R(e.$?.value))return t;let r=e.$?.variableName;if(!r)return t;let i=j(t,r);if(i.length===0)throw nt([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let o=i[i.length-1];if(o.consumedAtToken&&!n){let a=`use of moved value: \`${r}\``;throw nt([{token:e.token,errorMessage:a},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=ze(t,o,{...o,consumedAtToken:e.token});return t}function Rt(e,t){if(!e.$||!e.$.variableName)return;if(e.$.value){let r=e.$.variableName;if(r&&Qe(e.$.env.modulePath,r)&&Te(e.$.type)){let i=j(e.$.env,r);if(i.length>0){let o=i[i.length-1];o.isOwningTheRcValue&&!o.consumedAtToken&&(e.$.env=ze(e.$.env,o,{...o,consumedAtToken:e.token}))}}return}let n=e.$.variableName;if(!n)throw m({token:e.token,errorMessage:`Expression does not have a variable name to call ${w.___dup} on:
71
+ ${k(e)}`});if(Te(e.$.type)){if(Qe(e.$.env.modulePath,n)&&!(U(e)&&e.token.value!==n)){let o=j(e.$.env,n);if(o.length>0){let a=o[o.length-1];if(a.isOwningTheRcValue){a.consumedAtToken||(e.$.env=ze(e.$.env,a,{...a,consumedAtToken:e.token}));return}}}let r=Ht(`${w.___dup[0]}(${n})`),i=x({expr:r,env:e.$.env,context:{...t,expectedType:void 0}});if(i.$?.variableName){let o=j(i.$.env,i.$.variableName);if(o.length>0){let a=o[o.length-1];a.consumedAtToken||(i.$.env=ze(i.$.env,a,{...a,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function Wr(e,t){let n=e.$?.variableName;if(!n)return;let r=j(t,n);if(r.length===0)throw nt([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let o=`use of moved value: \`${n}\``;throw nt([{token:e.token,errorMessage:o},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var st="__yo_self";function qr(e,t,n){if(ue(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>qr(i.type,t,n));return n.delete(e.id),r}if(ke(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>qr(i.type,t,n));return n.delete(e.id),r}if(ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>qr(o.type,t,n)));return n.delete(e.id),r}return be(e)||je(e)||Ie(e)?qr(e.childType,t,n):On(e,t)}function Hr(e,t,n){if(ue(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hr(i.type,t,n));return n.delete(e.id),r}if(ke(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hr(i.type,t,n));return n.delete(e.id),r}if(ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Hr(o.type,t,n)));return n.delete(e.id),r}return be(e)||je(e)||Ie(e)?Hr(e.childType,t,n):cr(e,t)}function Nl(e,t,n,r){let i=Ht(e),o=x({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${k(i)}`);return{expr:o,env:o.$.env}}function Ai({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=Nl(t,n,r,i);if(F(o)&&o.$&&o.$.value&&R(o.$.value)&&q(o.$.value.value)){let s=o.$.value.value,l={label:e,type:s,assignedValue:void 0,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.trait){let u=n.trait.fields.findIndex(c=>c.label===e);u>=0?n.trait.fields[u]=l:n.trait.fields.push(l)}}return a}function gn({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=Nl(t,n,r,i);if(F(o)&&o.$&&o.$.value&&ie(o.$.value)){o.$.value.funcId+=e,o.$.value.funcName=e;let s={label:e,type:o.$.type,assignedValue:o.$.value,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:o}};if(n.trait){let l=n.trait.fields.findIndex(u=>u.label===e);l>=0?n.trait.fields[l]=s:n.trait.fields.push(s)}}return a}var Ha=`(fn(${st} : Self) -> unit)`,Jo=`(fn(${st} : Self) -> unit)`,ea=`(fn(${st} : Self) -> Self)`;function pd(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function fd(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Ya(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(fd(i)){let o=Be("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=Be("field_"+pd(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${st};`,callsExpr:r.join(`
72
+ `)}}function _d(e){let t=Ha;if(!on(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>Te(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=Ya(n,w.___drop[0]),o=`
73
73
  ${r}
74
74
  ${i}
75
75
  `;return{signature:t,code:`(${t} { // ___dispose
76
76
  ${o}
77
77
  return ();
78
- })`}}function pd(e){let t=Jo,n=e.fields.filter(a=>Te(a.type)).map(a=>a.label),r=on(e)?`
79
- ${w.__yo_decr_rc[0]}(${st});`:"",i="";if(!on(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=Ha(n,w.___drop[0]);i=`
78
+ })`}}function dd(e){let t=Jo,n=e.fields.filter(a=>Te(a.type)).map(a=>a.label),r=on(e)?`
79
+ ${w.__yo_decr_rc[0]}(${st});`:"",i="";if(!on(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=Ya(n,w.___drop[0]);i=`
80
80
  ${a}
81
81
  ${s}
82
82
  `}let o=`(${t} { // ___drop
83
83
  ${i}
84
84
  ${r}
85
85
  return ();
86
- })`;return{signature:t,code:o}}function fd(e){let t=ea,n=e.fields.filter(o=>Te(o.type)).map(o=>o.label),r=on(e)?`
87
- ${w.__yo_incr_rc[0]}(${st});`:"",i="";if(!on(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=Ha(n,w.___dup[0]);i=`
86
+ })`;return{signature:t,code:o}}function md(e){let t=ea,n=e.fields.filter(o=>Te(o.type)).map(o=>o.label),r=on(e)?`
87
+ ${w.__yo_incr_rc[0]}(${st});`:"",i="";if(!on(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=Ya(n,w.___dup[0]);i=`
88
88
  ${o}
89
89
  ${a}
90
90
  `}return{signature:t,code:`(${t} { // ___dup
91
91
  ${i}
92
92
  ${r}
93
93
  return ${w.__yo_rc_own[0]}(${st});
94
- })`}}function _d({structType:e,env:t,context:n}){if(jr(e,t))return t;Tt(e);let r=Ae(e),{code:i}=cd(e),{code:o}=pd(e),{code:a}=fd(e);return qa({structType:e,env:t,context:n}),r||(t=gn({label:w.___dispose[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function qa({structType:e,env:t,context:n}){jr(e,t)||(Ai({label:w.___dispose[0],functionSignature:Wa,SelfType:e,env:t,context:n}),Ai({label:w.___drop[0],functionSignature:Jo,SelfType:e,env:t,context:n}),Ai({label:w.___dup[0],functionSignature:ea,SelfType:e,env:t,context:n}))}function dd(e){let t=Jo,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Te(a.type))),r=on(e)?`
94
+ })`}}function yd({structType:e,env:t,context:n}){if(jr(e,t))return t;Tt(e);let r=Fe(e),{code:i}=_d(e),{code:o}=dd(e),{code:a}=md(e);return ja({structType:e,env:t,context:n}),r||(t=gn({label:w.___dispose[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function ja({structType:e,env:t,context:n}){jr(e,t)||(Ai({label:w.___dispose[0],functionSignature:Ha,SelfType:e,env:t,context:n}),Ai({label:w.___drop[0],functionSignature:Jo,SelfType:e,env:t,context:n}),Ai({label:w.___dup[0],functionSignature:ea,SelfType:e,env:t,context:n}))}function gd(e){let t=Jo,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Te(a.type))),r=on(e)?`
95
95
  ${w.__yo_decr_rc[0]}(${st});`:"",i=on(e)?"":n.length?`
96
96
  match(${st},
97
97
  ${n.map(o=>{let a=o.fields.filter(u=>Te(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${w.___drop[0]})(${u});`).join(`
@@ -104,7 +104,7 @@ ${l}
104
104
  ${i}
105
105
  ${r}
106
106
  return ();
107
- })`}}function md(e){let t=ea,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Te(a.type))),r=on(e)?`
107
+ })`}}function hd(e){let t=ea,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Te(a.type))),r=on(e)?`
108
108
  ${w.__yo_incr_rc[0]}(${st});`:"",i=on(e)?"":n.length?`
109
109
  match(${st},
110
110
  ${n.map(o=>{let a=o.fields.filter(u=>Te(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${w.___dup[0]})(${u});`).join(`
@@ -117,77 +117,77 @@ ${l}
117
117
  ${i}
118
118
  ${r}
119
119
  return ${w.__yo_rc_own[0]}(${st});
120
- })`}}function yd({enumType:e,env:t,context:n}){if(jr(e,t))return t;Tt(e);let r=Ae(e),{code:i}=dd(e),{code:o}=md(e);return Ya({enumType:e,env:t,context:n}),r||(t=gn({label:w.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),t}function Ya({enumType:e,env:t,context:n}){if(jr(e,t))return t;Ai({label:w.___dispose[0],functionSignature:Wa,SelfType:e,env:t,context:n}),Ai({label:w.___drop[0],functionSignature:Jo,SelfType:e,env:t,context:n}),Ai({label:w.___dup[0],functionSignature:ea,SelfType:e,env:t,context:n})}function _o({dynType:e,env:t,context:n}){let r=gd(e),i=hd(e);return i&&(t=gn({label:w.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),r&&(t=gn({label:w.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function gd(e){return`((fn(${st} : Self) -> unit) { // ___drop for ${A(e)}
120
+ })`}}function vd({enumType:e,env:t,context:n}){if(jr(e,t))return t;Tt(e);let r=Fe(e),{code:i}=gd(e),{code:o}=hd(e);return Ka({enumType:e,env:t,context:n}),r||(t=gn({label:w.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),t}function Ka({enumType:e,env:t,context:n}){if(jr(e,t))return t;Ai({label:w.___dispose[0],functionSignature:Ha,SelfType:e,env:t,context:n}),Ai({label:w.___drop[0],functionSignature:Jo,SelfType:e,env:t,context:n}),Ai({label:w.___dup[0],functionSignature:ea,SelfType:e,env:t,context:n})}function _o({dynType:e,env:t,context:n}){let r=Ed(e),i=Td(e);return i&&(t=gn({label:w.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),r&&(t=gn({label:w.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function Ed(e){return`((fn(${st} : Self) -> unit) { // ___drop for ${A(e)}
121
121
  ${w.__yo_dyn_drop[0]}(${st});
122
- })`}function hd(e){return`((fn(${st} : Self) -> Self) { // ___dup for ${A(e)}
122
+ })`}function Td(e){return`((fn(${st} : Self) -> Self) { // ___dup for ${A(e)}
123
123
  ${w.__yo_dyn_dup[0]}(${st});
124
124
  return ${w.__yo_rc_own[0]}(${st});
125
- })`}function vd(e){return`((fn(${st} : Self) -> unit) { // ___drop for ${A(e)}
125
+ })`}function $d(e){return`((fn(${st} : Self) -> unit) { // ___drop for ${A(e)}
126
126
  ${w.__yo_sometype_drop[0]}(${st});
127
- })`}function Ed(e){return`((fn(${st} : Self) -> Self) { // ___dup for ${A(e)}
127
+ })`}function Cd(e){return`((fn(${st} : Self) -> Self) { // ___dup for ${A(e)}
128
128
  ${w.__yo_sometype_dup[0]}(${st});
129
129
  return ${w.__yo_rc_own[0]}(${st});
130
- })`}function Nl({someType:e,env:t,context:n}){let r=vd(e),i=Ed(e);return t=gn({label:w.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function Td(e){return`((fn(${st} : Self) -> unit) { // ___dispose for Iso
130
+ })`}function Sl({someType:e,env:t,context:n}){let r=$d(e),i=Cd(e);return t=gn({label:w.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function bd(e){return`((fn(${st} : Self) -> unit) { // ___dispose for Iso
131
131
  ${w.__yo_iso_dispose[0]}(${st});
132
132
  return ();
133
- })`}function $d(e){return`((fn(${st} : Self) -> unit) { // ___drop for Iso
133
+ })`}function kd(e){return`((fn(${st} : Self) -> unit) { // ___drop for Iso
134
134
  ${w.__yo_decr_rc_atomic[0]}(${st});
135
135
  return ();
136
- })`}function Cd(e){return`((fn(${st} : Self) -> Self) { // ___dup for Iso
136
+ })`}function wd(e){return`((fn(${st} : Self) -> Self) { // ___dup for Iso
137
137
  ${w.__yo_incr_rc_atomic[0]}(${st});
138
138
  return ${w.__yo_rc_own[0]}(${st});
139
- })`}function Sl({isoType:e,env:t,context:n}){let r=Td(e),i=$d(e),o=Cd(e);return t=gn({label:w.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=gn({label:w.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function bd(e){return`((fn(${st} : Self) -> unit) { // ___dispose for Arc
139
+ })`}function Vl({isoType:e,env:t,context:n}){let r=bd(e),i=kd(e),o=wd(e);return t=gn({label:w.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=gn({label:w.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Fd(e){return`((fn(${st} : Self) -> unit) { // ___dispose for Arc
140
140
  ${w.__yo_arc_dispose[0]}(${st});
141
141
  return ();
142
- })`}function kd(e){return`((fn(${st} : Self) -> unit) { // ___drop for Arc
142
+ })`}function Ld(e){return`((fn(${st} : Self) -> unit) { // ___drop for Arc
143
143
  ${w.__yo_decr_rc_atomic[0]}(${st});
144
144
  return ();
145
- })`}function wd(e){return`((fn(${st} : Self) -> Self) { // ___dup for Arc
145
+ })`}function Ad(e){return`((fn(${st} : Self) -> Self) { // ___dup for Arc
146
146
  ${w.__yo_incr_rc_atomic[0]}(${st});
147
147
  return ${w.__yo_rc_own[0]}(${st});
148
- })`}function Vl({arcType:e,env:t,context:n}){let r=bd(e),i=kd(e),o=wd(e);return t=gn({label:w.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=gn({label:w.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Yt(e,t,n,r){let i=`${e}()`,o=qt(i),a=x({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!mt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:an(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function Fd({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>mo(i.type,t))&&(t=Yt("Send",e,t,n)),t}function Ld({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=Yt("Rc",e,t,n)),t}function Ad({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>mo(o.type,t)))&&(t=Yt("Send",e,t,n)),t}function Dl({unionType:e,env:t,context:n}){return e.fields.every(i=>mo(i.type,t))&&(t=Yt("Send",e,t,n)),t}function Id({structType:e,env:t,context:n}){return e.isReferenceSemantics?lr(e,new Set,t)||(t=Yt("Acyclic",e,t,n)):e.fields.every(i=>Br(i.type,t))&&(t=Yt("Acyclic",e,t,n)),t}function xd({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Br(o.type,t)))&&(t=Yt("Acyclic",e,t,n)),t}function Ml({unionType:e,env:t,context:n}){return e.fields.every(i=>Br(i.type,t))&&(t=Yt("Acyclic",e,t,n)),t}function Nd({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Hr(i.type,t,new Set([e.id])))&&(t=Yt("Comptime",e,t,n)),t}function Sd({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Hr(o.type,t,new Set([e.id]))))&&(t=Yt("Comptime",e,t,n)),t}function Vd({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=Yt("Runtime",e,t,n),t):(e.fields.every(i=>qr(i.type,t,new Set([e.id])))&&(t=Yt("Runtime",e,t,n)),t)}function Dd({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>qr(o.type,t,new Set([e.id]))))&&(t=Yt("Runtime",e,t,n)),t}function Ol({unionType:e,env:t,context:n}){return t=Yt("Runtime",e,t,n),t}function Md({tupleType:e,env:t,context:n}){return e.fields.every(i=>mo(i.type,t))&&(t=Yt("Send",e,t,n)),t}function Od({tupleType:e,env:t,context:n}){return e.fields.every(i=>Hr(i.type,t,new Set([e.id])))&&(t=Yt("Comptime",e,t,n)),t}function Rd({tupleType:e,env:t,context:n}){return e.fields.every(i=>qr(i.type,t,new Set([e.id])))&&(t=Yt("Runtime",e,t,n)),t}function Yr({structType:e,env:t,context:n,errorToken:r}){return t=Fd({structType:e,env:t,context:n}),t=Ld({structType:e,env:t,context:n}),t=Id({structType:e,env:t,context:n}),t=Nd({structType:e,env:t,context:n}),t=Vd({structType:e,env:t,context:n}),t=_d({structType:e,env:t,context:n}),ta(e,t,r,n),t}function Rl({enumType:e,env:t,context:n,errorToken:r}){return t=Ad({enumType:e,env:t,context:n}),t=xd({enumType:e,env:t,context:n}),t=Sd({enumType:e,env:t,context:n}),t=Dd({enumType:e,env:t,context:n}),t=yd({enumType:e,env:t,context:n}),ta(e,t,r,n),t}function Pl({tupleType:e,env:t,context:n,errorToken:r}){return t=Md({tupleType:e,env:t,context:n}),t=Od({tupleType:e,env:t,context:n}),t=Rd({tupleType:e,env:t,context:n}),ta(e,t,r,n),t}function Cn(e,t){let n=j(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&R(r.value[0])){let i=r.value[0];if(xe(i.value))return i.value}}function Mt(e,t){let n=t.definitionFrameLevel;if(n!==void 0&&n>=0){let o=e.frames[n];if(o){let a=o.variables.find(s=>s.name===t.name&&s.value?.[0]?.tag==="Type");if(a&&a.value){let s=a.value[0];if(s.value===t||M(s.value)&&s.value.id===t.id)return t;M(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=j(e,t.name,a=>a.value?.[0]?.tag==="Type");if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(M(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"){let p=c;if(p.value===t){a=!0;break}if(M(p.value)&&p.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(M(t));return r.value}var ja=null;function $r(){if(ja)return ja;let e=tt(),t=De(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,ja=n,n}var Ka=null;function di(){if(Ka)return Ka;let e=tt(),t=De(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,Ka=n,n}var Xa=null;function Dt(){if(Xa)return Xa;let e=tt(),t=De(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,Xa=n,n}var Qa=null;function tn(){if(Qa)return Qa;let e=tt(),t=De(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,Qa=n,n}var Za=new Map;function co(e){if(Za.has(e))return Za.get(e);let t=tt(),n=De(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,Za.set(e,i),i}function yo(){return co(tn())}var Ja=null;function Xe(){if(Ja)return Ja;let e=tt(),t=De(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,Ja=n,n}var es=null;function yt(){if(es)return es;let e=tt(),t=De(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,es=n,n}var ts=null;function mi(){if(ts)return ts;let e=tt(),t=De(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,ts=n,n}var ns=null;function yi(){if(ns)return ns;let e=tt(),t=De(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,ns=n,n}var rs=null;function gi(){if(rs)return rs;let e=tt(),t=De(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,rs=n,n}var is=null;function hi(){if(is)return is;let e=tt(),t=De(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,is=n,n}var os=null;function vi(){if(os)return os;let e=tt(),t=De(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,os=n,n}var as=null;function Ei(){if(as)return as;let e=tt(),t=De(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,as=n,n}var ss=null;function Cr(){if(ss)return ss;let e=tt(),t=De(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,ss=n,n}var ls=null;function Ti(){if(ls)return ls;let e=tt(),t=De(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,ls=n,n}var us=null;function $i(){if(us)return us;let e=tt(),t=De(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,us=n,n}var cs=null;function Ci(){if(cs)return cs;let e=tt(),t=De(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,cs=n,n}var ps=null;function br(){if(ps)return ps;let e=tt(),t=De(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,ps=n,n}var fs=null;function Rn(){if(fs)return fs;let e=tt(),t=De(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,fs=n,n}var _s=null;function zl(){if(_s)return _s;let e=tt(),t=De(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,_s=n,n}var ds=null;function Bl(){if(ds)return ds;let e=tt(),t=De(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,ds=n,n}var ms=null;function Gl(){if(ms)return ms;let e=tt(),t=De(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,ms=n,n}var ys=null;function Wl(){if(ys)return ys;let e=tt(),t=De(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,ys=n,n}var gs=null;function Hl(){if(gs)return gs;let e=tt(),t=De(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,gs=n,n}var hs=null;function ql(){if(hs)return hs;let e=tt(),t=De(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,hs=n,n}var vs=null;function Yl(){if(vs)return vs;let e=tt(),t=De(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,vs=n,n}var Es=null;function jl(){if(Es)return Es;let e=tt(),t=De(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,Es=n,n}var Ts=null;function Kl(){if(Ts)return Ts;let e=tt(),t=De(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,Ts=n,n}var $s=null;function Xl(){if($s)return $s;let e=tt(),t=De(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,$s=n,n}function et(e){return an(0,e)}function Qn(e,t){let n=tt(),r=De(n),i={id:`array_${e.id+"_"+Ga(Se(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var Cs=new Map;function ra(e){if(Cs.has(e))return Cs.get(e);let t=tt(),n=De(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,Cs.set(e,r),r}function bl(e){let n=j(e,"str").find(r=>R(r.value?.[0])&&r.value[0].type);if(!n||!R(n.value?.[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var bs;function Ql(){if(bs)return bs;let e=tt(),t=De(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,bs=n,n}function ia(e){let t=tt(),n=De(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Kr(e,t=!1,n=!1){let r=De(e),i={id:`struct_${Be(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function oa(e){return{id:`module_${Be(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function De(e){return{id:`trait_${Be(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function Zl(e){let t=De(e),n={id:`enum_${Be(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function Jl(e){let t=De(e),n={id:`union_${Be(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function Ii({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,isClosure:u}){let c=tt(),p=De(c),f={id:`fn_${Be(a.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,implicitParameters:n??[],variadicParameter:r,whereClauseExprs:i,return:o,env:a,parametersFrame:s,SelfType:l,trait:p,isClosure:u};return p.receiverType=f,f}var ks=new Map;function Xr(e){if(ks.has(e))return ks.get(e);let t=tt(),n=De(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,ks.set(e,r),r}var ws=new Map;function eu(e,t){if(ws.has(e))return ws.get(e);let n=De(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,ws.set(e,r),r}var Fs=new Map;function tu(e,t){if(Fs.has(e))return Fs.get(e);let n=De(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,Fs.set(e,r),r}function mn(e,t,{id:n,requiredTraits:r,negativeTraits:i,recursiveTypeRef:o,env:a,context:s}){if(e.level!==0)throw console.trace(),new Error(`createSomeType expects a type with level 0, got level ${e.level}`);let l=De(a),u=r?.map(f=>({traitType:f,frameLevel:-1}))??[],c=i?.map(f=>({traitType:f,frameLevel:-1}))??[],p={id:n??`sometype_${Be(a.modulePath)}`,tag:"SomeType",name:t,definitionFrameLevel:a.frames.length>0?a.frames.length-1:void 0,parentType:e,size:void 0,requiredTraits:u,negativeTraits:c,trait:l,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:o};return l.receiverType=p,Cn(a,"Runtime")&&Yt("Runtime",p,a,s),Nl({someType:p,env:a,context:{SelfType:p,stdPath:""}}),p}var na=new Map;function Qr(e,t){let n=De(t),r=an(1),i={id:`effects_row_sometype_${Be(t.modulePath)}`,tag:"SomeType",name:e,definitionFrameLevel:t.frames.length>0?t.frames.length-1:void 0,parentType:r,size:void 0,requiredTraits:[],negativeTraits:[],trait:n,isEffectsRow:!0};return n.receiverType=i,i}function cr(e){let t=tt(),n=De(t),r={id:`EffectsRow_${Be(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function an(e,t){if(na.has(e)){let i=na.get(e);if(i.has(t))return i.get(t)}else na.set(e,new Map);let n=De(tt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,na.get(e).set(t,r),r}function Zr({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function nu(e,t){let n=`fn_trait_${e.id}`,r=De(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function Ul(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${A(a.type)}`).join(","),o=A(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${A(n.type)}`}).join(";")}function go({requiredTraits:e,env:t,negativeTraits:n}){let r=De(t),i=e.map(c=>Ul(c)).join("__"),o=n?n.map(c=>Ul(c)).join("__"):"",a=`dyn_${Ga(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=n?.map(c=>({traitType:c,frameLevel:-1}))??[],u={id:a,tag:"Dyn",requiredTraits:s,negativeTraits:l,trait:r,env:t};return r.receiverType=u,u}function ru(e,t){return!He(e)||!He(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function bn(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),M(t))return e===t.id;if(ue(t))return t.fields.some(r=>bn(e,r.type,n));if(ye(t))return t.variants.some(r=>r.fields?r.fields.some(i=>bn(e,i.type,n)):!1);if(ke(t))return t.fields.some(r=>bn(e,r.type,n));if(be(t)||je(t)||Lt(t))return bn(e,t.childType,n);if(Ie(t))return!1;if(kt(t)||bt(t))return bn(e,t.childType,n);if(H(t))return t.parameters.some(r=>bn(e,r.type,n))||bn(e,t.return.type,n);if(zt(t)){if(bn(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(bn(e,r.type,n))return!0;return!1}return Et(t)?bn(e,t.isFn.callType,n):!1}function Ke(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}),M(e.type)&&M(t.type)){let r=Mt(e.env,e.type),i=Mt(t.env,t.type);if(M(r))if(M(i)){if(r!==i){let o=J(t.type);{let a=j(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Ue(e.env,s,{...s,value:[o]});else{let{env:l}=_e({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=j(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Ue(t.env,s,{...s,value:[o]});else{let{env:l}=_e({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=J(i),a=j(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Ue(e.env,s,{...s,value:[o]});else{let{env:l}=_e({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=J(r),a=j(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Ue(t.env,s,{...s,value:[o]});else{let{env:l}=_e({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}if(e.type.id!==t.type.id&&e.type.requiredTraits&&t.type.requiredTraits){let o=e.type.requiredTraits,a=t.type.requiredTraits;for(let s=0;s<o.length;s++){let l=o[s].traitType;if(Et(l)){let u=a.find(c=>Et(c.traitType));if(u&&Et(u.traitType)){let{expectedEnv:c,givenEnv:p}=Ke({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=p}}else if(zt(l)){let u=a.find(c=>zt(c.traitType));if(u&&zt(u.traitType)){let{expectedEnv:c,givenEnv:p}=Ke({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=p,Ls(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(M(e.type)){let r=Mt(e.env,e.type);if(M(r)&&(r.id===e.type.id||r.name===e.type.name)){if(bn(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${A(t.type)}" because it would create an infinite type.`);let i=J(t.type),o=j(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=Ue(e.env,a,{...a,value:[i]}));else{let{env:s}=_e({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(Et(s)&&H(t.type)){let l=s.isFn.callType,{expectedEnv:u,givenEnv:c}=Ke({type:l,env:e.env},{type:t.type,env:t.env},n);e.env=u,t.env=c}else if(zt(s)&&zt(t.type)){let{expectedEnv:l,givenEnv:u}=Ke({type:s.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=l,t.env=u,Ls(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!M(r)){let{expectedEnv:i,givenEnv:o}=Ke({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=i,t.env=o}}else if(M(t.type)){let r=Mt(t.env,t.type);if(M(r)){if(bn(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${A(e.type)}" because it would create an infinite type.`);let i=J(e.type),o=j(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=Ue(t.env,a,{...a,value:[i]}));else{let{env:s}=_e({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:i,givenEnv:o}=Ke({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=i,t.env=o}}else if(ke(e.type)&&ke(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:i,givenEnv:o}=Ke({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=i,t.env=o}else{if(ke(e.type)&&ke(t.type))throw new Error(`Cannot unify incompatible tuple types: "${A(e.type)}" and "${A(t.type)}"`);if(ue(e.type)&&ue(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: "${A(e.type)}" and "${A(t.type)}"`);for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=Ke({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&R(i.assignedValue)&&R(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=Ke({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(ye(e.type)&&ye(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 i=e.type.variants[r],o=t.type.variants[r],a=i.fields??[],s=o.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:c}=Ke({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=c}}else{if(ye(e.type)&&ye(t.type))throw new Error(`Cannot unify incompatible enum types: "${A(e.type)}" and "${A(t.type)}"`);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 i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=Ke({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&R(i.assignedValue)&&R(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=Ke({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(xe(e.type)&&xe(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 i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=Ke({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&R(i.assignedValue)&&R(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=Ke({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(Ie(e.type)&&Ie(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(kt(e.type)&&kt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(bt(e.type)&&bt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(be(e.type)&&be(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=i,fe(e.type.length)&&e.type.length.variableName&&!fe(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=j(e.env,o),l=s[s.length-1];if(l)l&&(e.env=Ue(e.env,l,{...l,value:[a]}));else{let{env:u}=_e({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(je(e.type)&&je(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(Lt(e.type)&&Lt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(zt(e.type)&&zt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=i,Ls(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(Et(e.type)&&Et(t.type)){let r=e.type,i=t.type,{expectedEnv:o,givenEnv:a}=Ke({type:r.isFn.callType,env:e.env},{type:i.isFn.callType,env:t.env},n);e.env=o,t.env=a}else if(H(e.type)&&H(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,i=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=i.forallParameters[s],{expectedEnv:c,givenEnv:p}=Ke({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=p}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=Ke({type:r.parameters[s].type,env:e.env},{type:i.parameters[s].type,env:t.env},n);e.env=l,t.env=u}{let s=r.implicitParameters,l=[];for(let _ of i.implicitParameters)_.isEffectRowSpread?_t(_.type)&&l.push(..._.type.implicitParameters):l.push(_);let u=[],c=[],p=[];for(let _ of s)_.isEffectRowSpread?_t(_.type)?c.push(_):M(_.type)&&_.type.isEffectsRow&&p.push(_):u.push(_);if(p.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${p.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let f=new Set;for(let _ of u)for(let d=0;d<l.length;d++)if(!f.has(d)&&_.type.id===l[d].type.id){let{expectedEnv:g,givenEnv:h}=Ke({type:_.type,env:e.env},{type:l[d].type,env:t.env},n);e.env=g,t.env=h,f.add(d);break}for(let _ of c){let d=_.type.implicitParameters;for(let g of d)for(let h=0;h<l.length;h++)if(!f.has(h)&&g.type.id===l[h].type.id){let{expectedEnv:y,givenEnv:v}=Ke({type:g.type,env:e.env},{type:l[h].type,env:t.env},n);e.env=y,t.env=v,f.add(h);break}}if(p.length===1){let _=p[0],d=[];for(let g=0;g<l.length;g++)f.has(g)||d.push(l[g]);if(M(_.type)&&_.type.isEffectsRow){let g=cr(d),h=J(g),y=j(e.env,_.type.name),v=y[y.length-1];if(v)e.env=Ue(e.env,v,{...v,value:[h]});else{let{env:E}=_e({env:e.env,variable:{name:_.type.name,value:[h],type:h.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=E}}}}let{expectedEnv:o,givenEnv:a}=Ke({type:r.return.type,env:e.env},{type:i.return.type,env:t.env},n);e.env=o,t.env=a}else if(!(He(e.type)&&!He(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
148
+ })`}function Dl({arcType:e,env:t,context:n}){let r=Fd(e),i=Ld(e),o=Ad(e);return t=gn({label:w.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=gn({label:w.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=gn({label:w.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Yt(e,t,n,r){let i=`${e}()`,o=Ht(i),a=x({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!dt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:an(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function Id({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>mo(i.type,t))&&(t=Yt("Send",e,t,n)),t}function xd({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=Yt("Rc",e,t,n)),t}function Nd({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>mo(o.type,t)))&&(t=Yt("Send",e,t,n)),t}function Ml({unionType:e,env:t,context:n}){return e.fields.every(i=>mo(i.type,t))&&(t=Yt("Send",e,t,n)),t}function Sd({structType:e,env:t,context:n}){return e.isReferenceSemantics?ur(e,new Set,t)||(t=Yt("Acyclic",e,t,n)):e.fields.every(i=>Br(i.type,t))&&(t=Yt("Acyclic",e,t,n)),t}function Vd({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Br(o.type,t)))&&(t=Yt("Acyclic",e,t,n)),t}function Ol({unionType:e,env:t,context:n}){return e.fields.every(i=>Br(i.type,t))&&(t=Yt("Acyclic",e,t,n)),t}function Dd({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>qr(i.type,t,new Set([e.id])))&&(t=Yt("Comptime",e,t,n)),t}function Md({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>qr(o.type,t,new Set([e.id]))))&&(t=Yt("Comptime",e,t,n)),t}function Od({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=Yt("Runtime",e,t,n),t):(e.fields.every(i=>Hr(i.type,t,new Set([e.id])))&&(t=Yt("Runtime",e,t,n)),t)}function Rd({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Hr(o.type,t,new Set([e.id]))))&&(t=Yt("Runtime",e,t,n)),t}function Rl({unionType:e,env:t,context:n}){return t=Yt("Runtime",e,t,n),t}function Pd({tupleType:e,env:t,context:n}){return e.fields.every(i=>mo(i.type,t))&&(t=Yt("Send",e,t,n)),t}function Ud({tupleType:e,env:t,context:n}){return e.fields.every(i=>qr(i.type,t,new Set([e.id])))&&(t=Yt("Comptime",e,t,n)),t}function zd({tupleType:e,env:t,context:n}){return e.fields.every(i=>Hr(i.type,t,new Set([e.id])))&&(t=Yt("Runtime",e,t,n)),t}function Yr({structType:e,env:t,context:n,errorToken:r}){return t=Id({structType:e,env:t,context:n}),t=xd({structType:e,env:t,context:n}),t=Sd({structType:e,env:t,context:n}),t=Dd({structType:e,env:t,context:n}),t=Od({structType:e,env:t,context:n}),t=yd({structType:e,env:t,context:n}),ta(e,t,r,n),t}function Pl({enumType:e,env:t,context:n,errorToken:r}){return t=Nd({enumType:e,env:t,context:n}),t=Vd({enumType:e,env:t,context:n}),t=Md({enumType:e,env:t,context:n}),t=Rd({enumType:e,env:t,context:n}),t=vd({enumType:e,env:t,context:n}),ta(e,t,r,n),t}function Ul({tupleType:e,env:t,context:n,errorToken:r}){return t=Pd({tupleType:e,env:t,context:n}),t=Ud({tupleType:e,env:t,context:n}),t=zd({tupleType:e,env:t,context:n}),ta(e,t,r,n),t}function Cn(e,t){let n=j(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&R(r.value[0])){let i=r.value[0];if(xe(i.value))return i.value}}function St(e,t){let n=t.definitionFrameLevel;if(n!==void 0&&n>=0){let o=e.frames[n];if(o){let a=o.variables.find(s=>s.name===t.name&&s.value?.[0]?.tag==="Type");if(a&&a.value){let s=a.value[0];if(s.value===t||D(s.value)&&s.value.id===t.id)return t;D(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=j(e,t.name,a=>a.value?.[0]?.tag==="Type");if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(D(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"){let p=c;if(p.value===t){a=!0;break}if(D(p.value)&&p.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(D(t));return r.value}var Xa=null;function $r(){if(Xa)return Xa;let e=tt(),t=De(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Xa=n,n}var Qa=null;function di(){if(Qa)return Qa;let e=tt(),t=De(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,Qa=n,n}var Za=null;function Mt(){if(Za)return Za;let e=tt(),t=De(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,Za=n,n}var Ja=null;function tn(){if(Ja)return Ja;let e=tt(),t=De(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,Ja=n,n}var es=new Map;function co(e){if(es.has(e))return es.get(e);let t=tt(),n=De(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,es.set(e,i),i}function yo(){return co(tn())}var ts=null;function Xe(){if(ts)return ts;let e=tt(),t=De(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,ts=n,n}var ns=null;function yt(){if(ns)return ns;let e=tt(),t=De(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,ns=n,n}var rs=null;function mi(){if(rs)return rs;let e=tt(),t=De(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,rs=n,n}var is=null;function yi(){if(is)return is;let e=tt(),t=De(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,is=n,n}var os=null;function gi(){if(os)return os;let e=tt(),t=De(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,os=n,n}var as=null;function hi(){if(as)return as;let e=tt(),t=De(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,as=n,n}var ss=null;function vi(){if(ss)return ss;let e=tt(),t=De(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,ss=n,n}var ls=null;function Ei(){if(ls)return ls;let e=tt(),t=De(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,ls=n,n}var us=null;function Cr(){if(us)return us;let e=tt(),t=De(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,us=n,n}var cs=null;function Ti(){if(cs)return cs;let e=tt(),t=De(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,cs=n,n}var ps=null;function $i(){if(ps)return ps;let e=tt(),t=De(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,ps=n,n}var fs=null;function Ci(){if(fs)return fs;let e=tt(),t=De(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,fs=n,n}var _s=null;function br(){if(_s)return _s;let e=tt(),t=De(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,_s=n,n}var ds=null;function Rn(){if(ds)return ds;let e=tt(),t=De(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,ds=n,n}var ms=null;function Bl(){if(ms)return ms;let e=tt(),t=De(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,ms=n,n}var ys=null;function Gl(){if(ys)return ys;let e=tt(),t=De(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,ys=n,n}var gs=null;function Wl(){if(gs)return gs;let e=tt(),t=De(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,gs=n,n}var hs=null;function ql(){if(hs)return hs;let e=tt(),t=De(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,hs=n,n}var vs=null;function Hl(){if(vs)return vs;let e=tt(),t=De(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,vs=n,n}var Es=null;function Yl(){if(Es)return Es;let e=tt(),t=De(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,Es=n,n}var Ts=null;function jl(){if(Ts)return Ts;let e=tt(),t=De(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,Ts=n,n}var $s=null;function Kl(){if($s)return $s;let e=tt(),t=De(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,$s=n,n}var Cs=null;function Xl(){if(Cs)return Cs;let e=tt(),t=De(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,Cs=n,n}var bs=null;function Ql(){if(bs)return bs;let e=tt(),t=De(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,bs=n,n}function Je(e){return an(0,e)}function Qn(e,t){let n=tt(),r=De(n),i={id:`array_${e.id+"_"+qa(Se(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var ks=new Map;function ra(e){if(ks.has(e))return ks.get(e);let t=tt(),n=De(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,ks.set(e,r),r}function kl(e){let n=j(e,"str").find(r=>R(r.value?.[0])&&r.value[0].type);if(!n||!R(n.value?.[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var ws;function Zl(){if(ws)return ws;let e=tt(),t=De(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,ws=n,n}function ia(e){let t=tt(),n=De(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Kr(e,t=!1,n=!1){let r=De(e),i={id:`struct_${Be(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function oa(e){return{id:`module_${Be(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function De(e){return{id:`trait_${Be(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function Jl(e){let t=De(e),n={id:`enum_${Be(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function eu(e){let t=De(e),n={id:`union_${Be(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function Ii({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,isClosure:u}){let c=tt(),p=De(c),f={id:`fn_${Be(a.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,implicitParameters:n??[],variadicParameter:r,whereClauseExprs:i,return:o,env:a,parametersFrame:s,SelfType:l,trait:p,isClosure:u};return p.receiverType=f,f}var Fs=new Map;function Xr(e){if(Fs.has(e))return Fs.get(e);let t=tt(),n=De(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,Fs.set(e,r),r}var Ls=new Map;function tu(e,t){if(Ls.has(e))return Ls.get(e);let n=De(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,Ls.set(e,r),r}var As=new Map;function nu(e,t){if(As.has(e))return As.get(e);let n=De(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,As.set(e,r),r}function mn(e,t,{id:n,requiredTraits:r,negativeTraits:i,recursiveTypeRef:o,env:a,context:s}){if(e.level!==0)throw console.trace(),new Error(`createSomeType expects a type with level 0, got level ${e.level}`);let l=De(a),u=r?.map(f=>({traitType:f,frameLevel:-1}))??[],c=i?.map(f=>({traitType:f,frameLevel:-1}))??[],p={id:n??`sometype_${Be(a.modulePath)}`,tag:"SomeType",name:t,definitionFrameLevel:a.frames.length>0?a.frames.length-1:void 0,parentType:e,size:void 0,requiredTraits:u,negativeTraits:c,trait:l,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:o};return l.receiverType=p,Cn(a,"Runtime")&&Yt("Runtime",p,a,s),Sl({someType:p,env:a,context:{SelfType:p,stdPath:""}}),p}var na=new Map;function Qr(e,t){let n=De(t),r=an(1),i={id:`effects_row_sometype_${Be(t.modulePath)}`,tag:"SomeType",name:e,definitionFrameLevel:t.frames.length>0?t.frames.length-1:void 0,parentType:r,size:void 0,requiredTraits:[],negativeTraits:[],trait:n,isEffectsRow:!0};return n.receiverType=i,i}function pr(e){let t=tt(),n=De(t),r={id:`EffectsRow_${Be(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function an(e,t){if(na.has(e)){let i=na.get(e);if(i.has(t))return i.get(t)}else na.set(e,new Map);let n=De(tt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,na.get(e).set(t,r),r}function Zr({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function ru(e,t){let n=`fn_trait_${e.id}`,r=De(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function zl(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${A(a.type)}`).join(","),o=A(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${A(n.type)}`}).join(";")}function go({requiredTraits:e,env:t,negativeTraits:n}){let r=De(t),i=e.map(c=>zl(c)).join("__"),o=n?n.map(c=>zl(c)).join("__"):"",a=`dyn_${qa(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=n?.map(c=>({traitType:c,frameLevel:-1}))??[],u={id:a,tag:"Dyn",requiredTraits:s,negativeTraits:l,trait:r,env:t};return r.receiverType=u,u}function iu(e,t){return!We(e)||!We(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function bn(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),D(t))return e===t.id;if(ue(t))return t.fields.some(r=>bn(e,r.type,n));if(ye(t))return t.variants.some(r=>r.fields?r.fields.some(i=>bn(e,i.type,n)):!1);if(ke(t))return t.fields.some(r=>bn(e,r.type,n));if(be(t)||je(t)||At(t))return bn(e,t.childType,n);if(Ie(t))return!1;if(kt(t)||bt(t))return bn(e,t.childType,n);if(q(t))return t.parameters.some(r=>bn(e,r.type,n))||bn(e,t.return.type,n);if(zt(t)){if(bn(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(bn(e,r.type,n))return!0;return!1}return Et(t)?bn(e,t.isFn.callType,n):!1}function Ke(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}),D(e.type)&&D(t.type)){let r=St(e.env,e.type),i=St(t.env,t.type);if(D(r))if(D(i)){if(r!==i){let o=Q(t.type);{let a=j(e.env,e.type.name),s=a[a.length-1];if(s)e.env=ze(e.env,s,{...s,value:[o]});else{let{env:l}=fe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=j(t.env,t.type.name),s=a[a.length-1];if(s)t.env=ze(t.env,s,{...s,value:[o]});else{let{env:l}=fe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=Q(i),a=j(e.env,e.type.name),s=a[a.length-1];if(s)e.env=ze(e.env,s,{...s,value:[o]});else{let{env:l}=fe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=Q(r),a=j(t.env,t.type.name),s=a[a.length-1];if(s)t.env=ze(t.env,s,{...s,value:[o]});else{let{env:l}=fe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}if(e.type.id!==t.type.id&&e.type.requiredTraits&&t.type.requiredTraits){let o=e.type.requiredTraits,a=t.type.requiredTraits;for(let s=0;s<o.length;s++){let l=o[s].traitType;if(Et(l)){let u=a.find(c=>Et(c.traitType));if(u&&Et(u.traitType)){let{expectedEnv:c,givenEnv:p}=Ke({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=p}}else if(zt(l)){let u=a.find(c=>zt(c.traitType));if(u&&zt(u.traitType)){let{expectedEnv:c,givenEnv:p}=Ke({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=p,Is(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(D(e.type)){let r=St(e.env,e.type);if(D(r)&&(r.id===e.type.id||r.name===e.type.name)){if(bn(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${A(t.type)}" because it would create an infinite type.`);let i=Q(t.type),o=j(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=ze(e.env,a,{...a,value:[i]}));else{let{env:s}=fe({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(Et(s)&&q(t.type)){let l=s.isFn.callType,{expectedEnv:u,givenEnv:c}=Ke({type:l,env:e.env},{type:t.type,env:t.env},n);e.env=u,t.env=c}else if(zt(s)&&zt(t.type)){let{expectedEnv:l,givenEnv:u}=Ke({type:s.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=l,t.env=u,Is(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!D(r)){let{expectedEnv:i,givenEnv:o}=Ke({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=i,t.env=o}}else if(D(t.type)){let r=St(t.env,t.type);if(D(r)){if(bn(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${A(e.type)}" because it would create an infinite type.`);let i=Q(e.type),o=j(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=ze(t.env,a,{...a,value:[i]}));else{let{env:s}=fe({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:i,givenEnv:o}=Ke({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=i,t.env=o}}else if(ke(e.type)&&ke(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:i,givenEnv:o}=Ke({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=i,t.env=o}else{if(ke(e.type)&&ke(t.type))throw new Error(`Cannot unify incompatible tuple types: "${A(e.type)}" and "${A(t.type)}"`);if(ue(e.type)&&ue(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: "${A(e.type)}" and "${A(t.type)}"`);for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=Ke({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&R(i.assignedValue)&&R(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=Ke({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(ye(e.type)&&ye(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 i=e.type.variants[r],o=t.type.variants[r],a=i.fields??[],s=o.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:c}=Ke({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=c}}else{if(ye(e.type)&&ye(t.type))throw new Error(`Cannot unify incompatible enum types: "${A(e.type)}" and "${A(t.type)}"`);if(Le(e.type)&&Le(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 i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=Ke({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&R(i.assignedValue)&&R(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=Ke({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(xe(e.type)&&xe(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 i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=Ke({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&R(i.assignedValue)&&R(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=Ke({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(Ie(e.type)&&Ie(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(kt(e.type)&&kt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(bt(e.type)&&bt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(be(e.type)&&be(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=i,_e(e.type.length)&&e.type.length.variableName&&!_e(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=j(e.env,o),l=s[s.length-1];if(l)l&&(e.env=ze(e.env,l,{...l,value:[a]}));else{let{env:u}=fe({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(je(e.type)&&je(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(At(e.type)&&At(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(zt(e.type)&&zt(t.type)){let{expectedEnv:r,givenEnv:i}=Ke({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=i,Is(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(Et(e.type)&&Et(t.type)){let r=e.type,i=t.type,{expectedEnv:o,givenEnv:a}=Ke({type:r.isFn.callType,env:e.env},{type:i.isFn.callType,env:t.env},n);e.env=o,t.env=a}else if(q(e.type)&&q(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,i=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=i.forallParameters[s],{expectedEnv:c,givenEnv:p}=Ke({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=p}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=Ke({type:r.parameters[s].type,env:e.env},{type:i.parameters[s].type,env:t.env},n);e.env=l,t.env=u}{let s=r.implicitParameters,l=[];for(let _ of i.implicitParameters)_.isEffectRowSpread?_t(_.type)&&l.push(..._.type.implicitParameters):l.push(_);let u=[],c=[],p=[];for(let _ of s)_.isEffectRowSpread?_t(_.type)?c.push(_):D(_.type)&&_.type.isEffectsRow&&p.push(_):u.push(_);if(p.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${p.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let f=new Set;for(let _ of u)for(let d=0;d<l.length;d++)if(!f.has(d)&&_.type.id===l[d].type.id){let{expectedEnv:g,givenEnv:h}=Ke({type:_.type,env:e.env},{type:l[d].type,env:t.env},n);e.env=g,t.env=h,f.add(d);break}for(let _ of c){let d=_.type.implicitParameters;for(let g of d)for(let h=0;h<l.length;h++)if(!f.has(h)&&g.type.id===l[h].type.id){let{expectedEnv:y,givenEnv:v}=Ke({type:g.type,env:e.env},{type:l[h].type,env:t.env},n);e.env=y,t.env=v,f.add(h);break}}if(p.length===1){let _=p[0],d=[];for(let g=0;g<l.length;g++)f.has(g)||d.push(l[g]);if(D(_.type)&&_.type.isEffectsRow){let g=pr(d),h=Q(g),y=j(e.env,_.type.name),v=y[y.length-1];if(v)e.env=ze(e.env,v,{...v,value:[h]});else{let{env:E}=fe({env:e.env,variable:{name:_.type.name,value:[h],type:h.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=E}}}}let{expectedEnv:o,givenEnv:a}=Ke({type:r.return.type,env:e.env},{type:i.return.type,env:t.env},n);e.env=o,t.env=a}else if(!(We(e.type)&&!We(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
149
149
  Expected: "${A(e.type)}"
150
- Given: "${A(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function Ls(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?_t(c.type)?a.push(c):M(c.type)&&c.type.isEffectsRow&&s.push(c):o.push(c);if(s.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${s.map(c=>c.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let l=[];for(let c of t)c.isEffectRowSpread?_t(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let p=0;p<l.length;p++)if(!u.has(p)&&c.type.id===l[p].type.id){let{expectedEnv:f,givenEnv:_}=Ke({type:c.type,env:n.env},{type:l[p].type,env:r.env},i);n.env=f,r.env=_,u.add(p);break}for(let c of a){let p=c.type.implicitParameters;for(let f of p)for(let _=0;_<l.length;_++)if(!u.has(_)&&f.type.id===l[_].type.id){let{expectedEnv:d,givenEnv:g}=Ke({type:f.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=d,r.env=g,u.add(_);break}}if(s.length===1){let c=s[0],p=[];for(let f=0;f<l.length;f++)u.has(f)||p.push(l[f]);if(M(c.type)&&c.type.isEffectsRow){let f=cr(p),_=J(f),d=j(n.env,c.type.name),g=d[d.length-1];if(g)n.env=Ue(n.env,g,{...g,value:[_]});else{let{env:h}=_e({env:n.env,variable:{name:c.type.name,value:[_],type:_.type,isCompileTimeOnly:!0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=h}}}}function As(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Nn(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function iu(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=Nn(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function Is(e){let t=[];for(let n of e)n.isEffectRowSpread&&_t(n.type)?t.push(...Is(n.type.implicitParameters)):(n.isEffectRowSpread&&M(n.type)&&n.type.isEffectsRow,t.push(n));return t}function W(e,t,n=!1,r=new Set){let i=e.type.id,o=t.type.id;if(i&&o&&(ue(e.type)||ye(e.type)||lt(e.type))&&(ue(t.type)||ye(t.type)||lt(t.type))){let a=`${i}:${o}`;if(r.has(a))return!0;r.add(a)}if(Xi(e.type)&&Xi(t.type))return e.type.tag===t.type.tag;if((pt(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"||Mn(e.type))&&pt(t.type))return!(n&&!pt(e.type));if((Ft(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Ft(t.type))return!(n&&!Ft(e.type));if(($t(e.type)||je(e.type)&&Dn(e.type.childType)||Ie(e.type)&&(Dn(e.type.childType)||ci(e.type.childType)))&&$t(t.type))return!0;if(Mn(e.type)&&Mn(t.type))return e.type.tag===t.type.tag;if(Ct(e.type)&&Ct(t.type))return!0;if(Lt(e.type)&&Lt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(be(e.type)&&be(t.type))return wt({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(je(e.type)&&je(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(ke(e.type)&&ke(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(!W({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(ue(e.type)&&ue(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ae(e.type)&&!Ae(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!W({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(ye(e.type)&&ye(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let a=0;a<e.type.variants.length;a++){let s=e.type.variants[a],l=t.type.variants[a];if(s.name!==l.name||s.fields?.length!==l.fields?.length)return!1;if(s.fields)for(let u=0;u<s.fields.length;u++){let c=s.fields[u],p=l.fields[u];if(c.label!==p.label||!W({type:c.type,env:e.env},{type:p.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(lt(e.type)&&lt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ae(e.type)&&!Ae(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!W({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(Fe(e.type)&&Fe(t.type)){for(let a of e.type.fields){let s=t.type.fields.find(l=>l.label===a.label);if(!s||!W({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}return!0}if(xe(e.type)){if(xe(t.type)){if(Et(e.type))return!(!Et(t.type)||!ou({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(zt(e.type)){if(!zt(t.type)||!W({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let a=Is(e.type.isFuture.effects),s=Is(t.type.isFuture.effects);if(a.length>0&&s.length>0){if(a.length!==s.length)return!1;let l=new Set;for(let u of a){let c=!1;for(let p=0;p<s.length;p++)if(!l.has(p)&&W({type:u.type,env:e.env},{type:s[p].type,env:t.env},n,r)){l.add(p),c=!0;break}if(!c)return!1}}return!0}return e.type.id===t.type.id}return He(t.type)&&t.type.baseType&&t.type.baseType.trait&&xe(e.type)?W({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(H(e.type)&&H(t.type))return ou({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(He(e.type)&&He(t.type))return ru(e.type,t.type);if(Ie(e.type)&&Ie(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(kt(e.type)&&kt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(bt(e.type)&&bt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.type.tag==="void"&&t.type.tag==="void")return!0;if(Ne(e.type)&&Ne(t.type)){for(let{traitType:a}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:l})=>W({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:a}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:l})=>W({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1}return!0}if(M(e.type)){if(Ne(t.type))return!0;if(M(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let a=As(e.env,e.type),s=As(t.env,t.type);if(n&&a.length!==s.length)return!1;for(let u of a)if(!s.find(p=>W({type:u,env:e.env},{type:p,env:t.env},n,r)))return!1;let l=iu(e.env,e.type);if(l.length>0){for(let u of l)if(s.find(p=>W({type:u,env:e.env},{type:p,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r))return!1}else if(n&&(e.type.resolvedConcreteType||t.type.resolvedConcreteType))return!1;return!0}else{if(e.type.resolvedConcreteType)return W({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let a=As(e.env,e.type);if(a.length===0)return!n;if(a.length>0){for(let c of a)if(!Nt({targetType:t.type,traitType:c,env:e.env}))break;let l=iu(e.env,e.type);if(l.length>0){for(let c of l)if(Nt({targetType:t.type,traitType:c,env:e.env}))return!1}let u=!0;for(let c of a)if(!Nt({targetType:t.type,traitType:c,env:e.env})){u=!1;break}if(u)return!0}let s=Mt(e.env,e.type);return e.type===s?!1:W({type:s,env:e.env},t,n,r)}}else if(M(t.type)){if(t.type.resolvedConcreteType&&W(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let a=Mt(t.env,t.type);return t.type===a?!1:W(e,{type:a,env:t.env},n,r)}return!1}function ou(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:i,givenEnv:o}=Ke({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=i,t.env=o}catch{return!1}for(let i=0;i<e.type.forallParameters.length;i++){let o=e.type.forallParameters[i],a=t.type.forallParameters[i];if(!W({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let i=0;i<e.type.parameters.length;i++){let o=e.type.parameters[i],a=t.type.parameters[i];if(o.isCompileTimeOnly!==a.isCompileTimeOnly||!W({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return W({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function xs(e){return T(e,["->","=>"])?!!(e.$?.isAnonymousFunctionDefinition===!0||F(e)&&F(e.func)&&(T(e.func,I.fn)||T(e.func,I.unsafe_fn)||T(e.func,I.Fn))||!e.$):!1}function Ns(e,t){if(!F(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(F(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Pn(e){if(U(e))return ht(e,I.escape);if(F(e)){if(e.$?.macroExpansion)return Pn(e.$.macroExpansion);if(T(e,I.cond)||T(e,I.match))return Ns(e,Pn);if(xs(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&H(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Gt(e.func.$.value.value))return!1;if(Pn(e.func))return!0;for(let t of e.args)if(Pn(t))return!0}return!1}function xi(e){if(U(e))return ht(e,I.return)||ht(e,I.escape);if(F(e)){if(T(e,I.return)||T(e,I.escape))return!0;if(e.$?.macroExpansion)return xi(e.$.macroExpansion);if(T(e,I.cond)||T(e,I.match))return Ns(e,xi);if(xs(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&H(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Gt(e.func.$.value.value))return!1;if(xi(e.func))return!0;for(let t of e.args)if(xi(t))return!0}return!1}function Zt(e){if(F(e)){if(e.func.$?.type?.ioBuiltin==="io_await")return!0;if(e.$?.macroExpansion)return Zt(e.$.macroExpansion);if(T(e,I.cond)||T(e,I.match))return Ns(e,Zt);if(e.func.$?.type?.ioBuiltin==="io_async"||xs(e)||R(e.func.$?.value)&&H(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Gt(e.func.$.value.value))return!1;if(Zt(e.func))return!0;for(let t of e.args)if(Zt(t))return!0}return!1}var Y={tag:"Unit",type:Rn()};function ho(e){if(e&&e.tag==="FnCall"&&T(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=j(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function aa(e,t){let n=[],r=new Map,i=new Map,o=new Map;if(Zn(e,n,r,i,o,t),e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)Zn(a,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function Zn(e,t,n,r,i,o,a){switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let s=e.token.value,l=e.$.type,u=j(e.$.env,s);if(u.length>0){let c=u[u.length-1];if(c&&!n.has(c.id)&&!c.isCompileTimeOnly){let p=`${c.name}:${c.frameLevel}`,f=r.get(p);if(f&&f!==c.id)i.set(c.id,f);else if(c.isOwningTheSameRcValueAs){let _=c.isOwningTheSameRcValueAs;if(!n.has(_.id)){let d={id:_.id,name:_.name,type:_.type,isOwningTheSameRcValueAs:void 0};n.set(_.id,d);let g=`${_.name}:${_.frameLevel}`;r.has(g)||r.set(g,_.id)}}else n.set(c.id,{id:c.id,name:s,type:l,isOwningTheSameRcValueAs:void 0}),r.has(p)||r.set(p,c.id)}}}break;case"FnCall":{if(T(e,I.while)){let s=t.length;Zn(e.func,t,n,r,i,o,e);for(let u of e.args)Zn(u,t,n,r,i,o,e);let l=t.length;if(l>s)for(let u=s;u<l;u++)t[u].isInsideWhile=!0,t[u].whileNestingDepth=(t[u].whileNestingDepth??0)+1,t[u].enclosingWhileExpr||(t[u].enclosingWhileExpr=e);break}if(T(e,I.cond)){au(e,t,n,r,i,o);break}if(T(e,I.match)){au(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Zn(s,t,n,r,i,o,e);break}Zn(e.func,t,n,r,i,o,e);for(let s of e.args)Zn(s,t,n,r,i,o,e);if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)Zn(s,t,n,r,i,o,e);break}}}function au(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;Zn(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let p=t.length;Zn(c,t,n,r,i,o,e),l.push(t.slice(p))}r.clear();for(let[c,p]of s)r.set(c,p);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let p=0;p<u;p++){let f;for(let _ of l)if(p<_.length){f=_[p];break}f&&(f.index=t.length,f.isInsideCond=!0,p===0&&(f.needsOwnCondBranchField=!0),p>0&&(f.condBranchSourceIndex=c),t.push(f))}}}function su(e){let n=aa(e,{detect(i,o,a){if(i.tag==="FnCall"&&fn(i)){let s=i.args[0];if(!s)return;let l=s.$?.type;if(l&&we(l)){let u=At(l);if(!u)return;let c=u.isFuture.outputType,p;if(s.tag==="Atom"&&s.token.type==="identifier"&&s.$){let _=s.token.value,d=j(s.$.env,_);if(d.length>0){let g=d[d.length-1];g.isOwningTheSameRcValueAs?p=g.isOwningTheSameRcValueAs.id:p=g.id}}let f=ho(o);a.push({index:a.length,expr:i,resultType:c,futureType:u,targetVariableId:f,futureVariableId:p})}}},shouldSkipBody(i){return Pt(i)}}),r=n.capturedVariables.map(i=>({id:i.id,name:i.name,type:i.type,kind:"local",isOwningTheSameRcValueAs:void 0}));return{awaitPoints:n.suspensionPoints,capturedVariables:r,hasAwaits:n.hasSuspensions,variableIdRemapping:n.variableIdRemapping}}function Pt(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_async"}function fn(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_await"}function lu(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_state"}function uu(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_spawn"}function We(e){return U(e)&&e.token.type==="identifier"||e.token.type==="operator"}function vo(e,t,n){if(!e.$?.variableName)return;let r=j(t,e.$.variableName);if(!r.length)return;let i=r[r.length-1],o=new Set;for(;i&&i.isOwningTheSameRcValueAs;){if(o.has(i.id))return;o.add(i.id),i=i.isOwningTheSameRcValueAs}if(i&&i.isOwningTheRcValue)return i}function Fr(e){let t=e.$?.env;if(!t)return;let n;if(e.$?.pathCollection)for(let r of e.$.pathCollection)r.length>0&&typeof r[0]=="string"&&(n=r[0]);else U(e)&&(n=e.token.value);if(n){let r=j(t,n),i=r[r.length-1];if(i?.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${i.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Ss=!0;function Pd({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=qt(`${w.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:{env:i,type:Y.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Eo(e,t,n){if(F(e)&&Pt(e))return;if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Eo(s,t,n);if(F(e)&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[0])&&U(e.func.args[1])&&e.func.args[1].token.value===w.___dup[0]&&e.args.length===0&&e.$?.env){let s=e.func.args[0].token.value,l=j(e.$.env,s);if(l.length>0){let u=l[l.length-1];t.has(u.id)||t.set(u.id,[]),t.get(u.id).push(e)}return}if(F(e)&&T(e,I.while))return;function i(s){if(ct(s.$?.controlFlow))return!0;if(F(s)&&T(s,I.begin)){let l=s.args[s.args.length-1];if(ct(l?.$?.controlFlow)||F(l)&&T(l,I.return))return!0}return!!(F(s)&&T(s,I.return))}function o(s){if(F(s)&&T(s,I.tuple,0))return!0;if(F(s)&&T(s,I.begin)){if(s.args.length===0)return!0;if(s.args.length===1){let l=s.args[0];if(F(l)&&T(l,I.tuple,0))return!0}}return!1}function a(s,l){let u=[],c=[],p=[];for(let _=l;_<s.args.length;_++){let d=s.args[_];if(F(d)&&T(d,"=>",2)){let g=d.args[1],h=cu(g);u.push(h),c.push(i(g)),p.push(o(g))}}let f=new Set;for(let _ of u){for(let d of _.dupCalls.keys())f.add(d);for(let d of _.varsWithPartialBranchDups)n.add(d)}if(u.length>0)for(let _ of f){let d=[],g=[];for(let h=0;h<u.length;h++){let y=u[h],v=y.dupCalls.has(_),E=c[h];if(v){let $=y.dupCalls.get(_);E?d.push(...$):g.push(...$)}}for(let h of d)t.has(_)||t.set(_,[]),h.__isEarlyReturnDup=!0,t.get(_).push(h);if(g.length>0){let h=0,y=0;for(let v=0;v<u.length;v++)c[v]||(h++,u[v].dupCalls.has(_)&&y++);if(y===h){t.has(_)||t.set(_,[]);for(let v of g)t.get(_).push(v)}else n.add(_)}}}if(F(e)&&T(e,I.cond)){a(e,0);return}if(F(e)&&T(e,I.match)){e.args[0]&&Eo(e.args[0],t,n),a(e,1);return}if(F(e)){Eo(e.func,t,n);for(let s of e.args)Eo(s,t,n)}}function cu(e){let t=new Map,n=new Set;return Eo(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function sa(e){return F(e)&&T(e,I.tuple,0)}function Vs(e,t){if(e.$?.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(n=>!t.has(n)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),F(e)){Vs(e.func,t);for(let n of e.args)Vs(n,t)}}function gt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){if(!F(e)||!T(e,I.begin)){let v={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:I.begin[0]}},args:[Ve(e)],token:{...e.token,value:I.begin[0]}};Xn(e,v),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e;t=ze(t,void 0,!0);for(let v=0;v<r.length;v++){let E=r[v],{env:$}=_e({env:t,variable:E});t=$}let s=o[o.length-1],l,u=!1;for(let v=0;v<o.length;v++){let E=o[v];if(U(E)&&ht(E,I.return)||F(E)&&T(E,I.return)){if(v!==o.length-1&&!(v===o.length-2&&sa(o[o.length-1])))throw m({token:E.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(F(E)&&ge(E,I.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:E.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=E,U(E)){E.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:wr("return")},s=E;break}else{ge(E,I.return,1);let $=E.args[0],C=x({expr:$,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!C.$)throw m({token:$.token,errorMessage:`Return expression is not evaluated correctly:
151
- ${k($)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&M(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let L=C.$.type;if(n.functionReturnImplConcreteType.length>0){let b=n.functionReturnImplConcreteType[0];if(!W({type:b.concreteType,env:b.env},{type:L,env:t}))throw nt([{token:E.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
150
+ Given: "${A(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function Is(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?_t(c.type)?a.push(c):D(c.type)&&c.type.isEffectsRow&&s.push(c):o.push(c);if(s.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${s.map(c=>c.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let l=[];for(let c of t)c.isEffectRowSpread?_t(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let p=0;p<l.length;p++)if(!u.has(p)&&c.type.id===l[p].type.id){let{expectedEnv:f,givenEnv:_}=Ke({type:c.type,env:n.env},{type:l[p].type,env:r.env},i);n.env=f,r.env=_,u.add(p);break}for(let c of a){let p=c.type.implicitParameters;for(let f of p)for(let _=0;_<l.length;_++)if(!u.has(_)&&f.type.id===l[_].type.id){let{expectedEnv:d,givenEnv:g}=Ke({type:f.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=d,r.env=g,u.add(_);break}}if(s.length===1){let c=s[0],p=[];for(let f=0;f<l.length;f++)u.has(f)||p.push(l[f]);if(D(c.type)&&c.type.isEffectsRow){let f=pr(p),_=Q(f),d=j(n.env,c.type.name),g=d[d.length-1];if(g)n.env=ze(n.env,g,{...g,value:[_]});else{let{env:h}=fe({env:n.env,variable:{name:c.type.name,value:[_],type:_.type,isCompileTimeOnly:!0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=h}}}}function xs(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Nn(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function ou(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=Nn(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function Ns(e){let t=[];for(let n of e)n.isEffectRowSpread&&_t(n.type)?t.push(...Ns(n.type.implicitParameters)):(n.isEffectRowSpread&&D(n.type)&&n.type.isEffectsRow,t.push(n));return t}function W(e,t,n=!1,r=new Set){let i=e.type.id,o=t.type.id;if(i&&o&&(ue(e.type)||ye(e.type)||lt(e.type))&&(ue(t.type)||ye(t.type)||lt(t.type))){let a=`${i}:${o}`;if(r.has(a))return!0;r.add(a)}if(Xi(e.type)&&Xi(t.type))return e.type.tag===t.type.tag;if((pt(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"||Mn(e.type))&&pt(t.type))return!(n&&!pt(e.type));if((Lt(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Lt(t.type))return!(n&&!Lt(e.type));if(($t(e.type)||je(e.type)&&Dn(e.type.childType)||Ie(e.type)&&(Dn(e.type.childType)||ci(e.type.childType)))&&$t(t.type))return!0;if(Mn(e.type)&&Mn(t.type))return e.type.tag===t.type.tag;if(Ct(e.type)&&Ct(t.type))return!0;if(At(e.type)&&At(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(be(e.type)&&be(t.type))return wt({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(je(e.type)&&je(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(ke(e.type)&&ke(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(!W({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(ue(e.type)&&ue(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Fe(e.type)&&!Fe(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!W({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(ye(e.type)&&ye(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let a=0;a<e.type.variants.length;a++){let s=e.type.variants[a],l=t.type.variants[a];if(s.name!==l.name||s.fields?.length!==l.fields?.length)return!1;if(s.fields)for(let u=0;u<s.fields.length;u++){let c=s.fields[u],p=l.fields[u];if(c.label!==p.label||!W({type:c.type,env:e.env},{type:p.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(lt(e.type)&&lt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Fe(e.type)&&!Fe(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!W({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(Le(e.type)&&Le(t.type)){for(let a of e.type.fields){let s=t.type.fields.find(l=>l.label===a.label);if(!s||!W({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}return!0}if(xe(e.type)){if(xe(t.type)){if(Et(e.type))return!(!Et(t.type)||!au({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(zt(e.type)){if(!zt(t.type)||!W({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let a=Ns(e.type.isFuture.effects),s=Ns(t.type.isFuture.effects);if(a.length>0&&s.length>0){if(a.length!==s.length)return!1;let l=new Set;for(let u of a){let c=!1;for(let p=0;p<s.length;p++)if(!l.has(p)&&W({type:u.type,env:e.env},{type:s[p].type,env:t.env},n,r)){l.add(p),c=!0;break}if(!c)return!1}}return!0}return e.type.id===t.type.id}return We(t.type)&&t.type.baseType&&t.type.baseType.trait&&xe(e.type)?W({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(q(e.type)&&q(t.type))return au({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(We(e.type)&&We(t.type))return iu(e.type,t.type);if(Ie(e.type)&&Ie(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(kt(e.type)&&kt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(bt(e.type)&&bt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.type.tag==="void"&&t.type.tag==="void")return!0;if(Ne(e.type)&&Ne(t.type)){for(let{traitType:a}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:l})=>W({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:a}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:l})=>W({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1}return!0}if(D(e.type)){if(Ne(t.type))return!0;if(D(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let a=xs(e.env,e.type),s=xs(t.env,t.type);if(n&&a.length!==s.length)return!1;for(let u of a)if(!s.find(p=>W({type:u,env:e.env},{type:p,env:t.env},n,r)))return!1;let l=ou(e.env,e.type);if(l.length>0){for(let u of l)if(s.find(p=>W({type:u,env:e.env},{type:p,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r))return!1}else if(n&&(e.type.resolvedConcreteType||t.type.resolvedConcreteType))return!1;return!0}else{if(e.type.resolvedConcreteType)return W({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let a=xs(e.env,e.type);if(a.length===0)return!n;if(a.length>0){for(let c of a)if(!Ft({targetType:t.type,traitType:c,env:e.env}))break;let l=ou(e.env,e.type);if(l.length>0){for(let c of l)if(Ft({targetType:t.type,traitType:c,env:e.env}))return!1}let u=!0;for(let c of a)if(!Ft({targetType:t.type,traitType:c,env:e.env})){u=!1;break}if(u)return!0}let s=St(e.env,e.type);return e.type===s?!1:W({type:s,env:e.env},t,n,r)}}else if(D(t.type)){if(t.type.resolvedConcreteType&&W(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let a=St(t.env,t.type);return t.type===a?!1:W(e,{type:a,env:t.env},n,r)}return!1}function au(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:i,givenEnv:o}=Ke({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=i,t.env=o}catch{return!1}for(let i=0;i<e.type.forallParameters.length;i++){let o=e.type.forallParameters[i],a=t.type.forallParameters[i];if(!W({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let i=0;i<e.type.parameters.length;i++){let o=e.type.parameters[i],a=t.type.parameters[i];if(o.isCompileTimeOnly!==a.isCompileTimeOnly||!W({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return W({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function Ss(e){return T(e,["->","=>"])?!!(e.$?.isAnonymousFunctionDefinition===!0||F(e)&&F(e.func)&&(T(e.func,I.fn)||T(e.func,I.unsafe_fn)||T(e.func,I.Fn))||!e.$):!1}function Vs(e,t){if(!F(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(F(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Pn(e){if(U(e))return ht(e,I.escape);if(F(e)){if(e.$?.macroExpansion)return Pn(e.$.macroExpansion);if(T(e,I.cond)||T(e,I.match))return Vs(e,Pn);if(Ss(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&q(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Gt(e.func.$.value.value))return!1;if(Pn(e.func))return!0;for(let t of e.args)if(Pn(t))return!0}return!1}function xi(e){if(U(e))return ht(e,I.return)||ht(e,I.escape);if(F(e)){if(T(e,I.return)||T(e,I.escape))return!0;if(e.$?.macroExpansion)return xi(e.$.macroExpansion);if(T(e,I.cond)||T(e,I.match))return Vs(e,xi);if(Ss(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&q(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Gt(e.func.$.value.value))return!1;if(xi(e.func))return!0;for(let t of e.args)if(xi(t))return!0}return!1}function Zt(e){if(F(e)){if(e.func.$?.type?.ioBuiltin==="io_await")return!0;if(e.$?.macroExpansion)return Zt(e.$.macroExpansion);if(T(e,I.cond)||T(e,I.match))return Vs(e,Zt);if(e.func.$?.type?.ioBuiltin==="io_async"||Ss(e)||R(e.func.$?.value)&&q(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Gt(e.func.$.value.value))return!1;if(Zt(e.func))return!0;for(let t of e.args)if(Zt(t))return!0}return!1}var Y={tag:"Unit",type:Rn()};function ho(e){if(e&&e.tag==="FnCall"&&T(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=j(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function aa(e,t){let n=[],r=new Map,i=new Map,o=new Map;if(Zn(e,n,r,i,o,t),e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)Zn(a,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function Zn(e,t,n,r,i,o,a){switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let s=e.token.value,l=e.$.type,u=j(e.$.env,s);if(u.length>0){let c=u[u.length-1];if(c&&!n.has(c.id)&&!c.isCompileTimeOnly){let p=`${c.name}:${c.frameLevel}`,f=r.get(p);if(f&&f!==c.id)i.set(c.id,f);else if(c.isOwningTheSameRcValueAs){let _=c.isOwningTheSameRcValueAs;if(!n.has(_.id)){let d={id:_.id,name:_.name,type:_.type,isOwningTheSameRcValueAs:void 0};n.set(_.id,d);let g=`${_.name}:${_.frameLevel}`;r.has(g)||r.set(g,_.id)}}else n.set(c.id,{id:c.id,name:s,type:l,isOwningTheSameRcValueAs:void 0}),r.has(p)||r.set(p,c.id)}}}break;case"FnCall":{if(T(e,I.while)){let s=t.length;Zn(e.func,t,n,r,i,o,e);for(let u of e.args)Zn(u,t,n,r,i,o,e);let l=t.length;if(l>s)for(let u=s;u<l;u++)t[u].isInsideWhile=!0,t[u].whileNestingDepth=(t[u].whileNestingDepth??0)+1,t[u].enclosingWhileExpr||(t[u].enclosingWhileExpr=e);break}if(T(e,I.cond)){su(e,t,n,r,i,o);break}if(T(e,I.match)){su(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Zn(s,t,n,r,i,o,e);break}Zn(e.func,t,n,r,i,o,e);for(let s of e.args)Zn(s,t,n,r,i,o,e);if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)Zn(s,t,n,r,i,o,e);break}}}function su(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;Zn(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let p=t.length;Zn(c,t,n,r,i,o,e),l.push(t.slice(p))}r.clear();for(let[c,p]of s)r.set(c,p);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let p=0;p<u;p++){let f;for(let _ of l)if(p<_.length){f=_[p];break}f&&(f.index=t.length,f.isInsideCond=!0,p===0&&(f.needsOwnCondBranchField=!0),p>0&&(f.condBranchSourceIndex=c),t.push(f))}}}function lu(e){let n=aa(e,{detect(i,o,a){if(i.tag==="FnCall"&&fn(i)){let s=i.args[0];if(!s)return;let l=s.$?.type;if(l&&we(l)){let u=It(l);if(!u)return;let c=u.isFuture.outputType,p;if(s.tag==="Atom"&&s.token.type==="identifier"&&s.$){let _=s.token.value,d=j(s.$.env,_);if(d.length>0){let g=d[d.length-1];g.isOwningTheSameRcValueAs?p=g.isOwningTheSameRcValueAs.id:p=g.id}}let f=ho(o);a.push({index:a.length,expr:i,resultType:c,futureType:u,targetVariableId:f,futureVariableId:p})}}},shouldSkipBody(i){return Pt(i)}}),r=n.capturedVariables.map(i=>({id:i.id,name:i.name,type:i.type,kind:"local",isOwningTheSameRcValueAs:void 0}));return{awaitPoints:n.suspensionPoints,capturedVariables:r,hasAwaits:n.hasSuspensions,variableIdRemapping:n.variableIdRemapping}}function Pt(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_async"}function fn(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_await"}function uu(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_state"}function cu(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_spawn"}function qe(e){return U(e)&&e.token.type==="identifier"||e.token.type==="operator"}function vo(e,t,n){if(!e.$?.variableName)return;let r=j(t,e.$.variableName);if(!r.length)return;let i=r[r.length-1],o=new Set;for(;i&&i.isOwningTheSameRcValueAs;){if(o.has(i.id))return;o.add(i.id),i=i.isOwningTheSameRcValueAs}if(i&&i.isOwningTheRcValue)return i}function Fr(e){let t=e.$?.env;if(!t)return;let n;if(e.$?.pathCollection)for(let r of e.$.pathCollection)r.length>0&&typeof r[0]=="string"&&(n=r[0]);else U(e)&&(n=e.token.value);if(n){let r=j(t,n),i=r[r.length-1];if(i?.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${i.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Ds=!0;function Bd({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Ht(`${w.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:{env:i,type:Y.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Eo(e,t,n){if(F(e)&&Pt(e))return;if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Eo(s,t,n);if(F(e)&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[0])&&U(e.func.args[1])&&e.func.args[1].token.value===w.___dup[0]&&e.args.length===0&&e.$?.env){let s=e.func.args[0].token.value,l=j(e.$.env,s);if(l.length>0){let u=l[l.length-1];t.has(u.id)||t.set(u.id,[]),t.get(u.id).push(e)}return}if(F(e)&&T(e,I.while))return;function i(s){if(ct(s.$?.controlFlow))return!0;if(F(s)&&T(s,I.begin)){let l=s.args[s.args.length-1];if(ct(l?.$?.controlFlow)||F(l)&&T(l,I.return))return!0}return!!(F(s)&&T(s,I.return))}function o(s){if(F(s)&&T(s,I.tuple,0))return!0;if(F(s)&&T(s,I.begin)){if(s.args.length===0)return!0;if(s.args.length===1){let l=s.args[0];if(F(l)&&T(l,I.tuple,0))return!0}}return!1}function a(s,l){let u=[],c=[],p=[];for(let _=l;_<s.args.length;_++){let d=s.args[_];if(F(d)&&T(d,"=>",2)){let g=d.args[1],h=pu(g);u.push(h),c.push(i(g)),p.push(o(g))}}let f=new Set;for(let _ of u){for(let d of _.dupCalls.keys())f.add(d);for(let d of _.varsWithPartialBranchDups)n.add(d)}if(u.length>0)for(let _ of f){let d=[],g=[];for(let h=0;h<u.length;h++){let y=u[h],v=y.dupCalls.has(_),E=c[h];if(v){let $=y.dupCalls.get(_);E?d.push(...$):g.push(...$)}}for(let h of d)t.has(_)||t.set(_,[]),h.__isEarlyReturnDup=!0,t.get(_).push(h);if(g.length>0){let h=0,y=0;for(let v=0;v<u.length;v++)c[v]||(h++,u[v].dupCalls.has(_)&&y++);if(y===h){t.has(_)||t.set(_,[]);for(let v of g)t.get(_).push(v)}else n.add(_)}}}if(F(e)&&T(e,I.cond)){a(e,0);return}if(F(e)&&T(e,I.match)){e.args[0]&&Eo(e.args[0],t,n),a(e,1);return}if(F(e)){Eo(e.func,t,n);for(let s of e.args)Eo(s,t,n)}}function pu(e){let t=new Map,n=new Set;return Eo(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function sa(e){return F(e)&&T(e,I.tuple,0)}function Ms(e,t){if(e.$?.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(n=>!t.has(n)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),F(e)){Ms(e.func,t);for(let n of e.args)Ms(n,t)}}function gt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){if(!F(e)||!T(e,I.begin)){let v={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:I.begin[0]}},args:[Ve(e)],token:{...e.token,value:I.begin[0]}};Xn(e,v),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e;t=Ue(t,void 0,!0);for(let v=0;v<r.length;v++){let E=r[v],{env:$}=fe({env:t,variable:E});t=$}let s=o[o.length-1],l,u=!1;for(let v=0;v<o.length;v++){let E=o[v];if(U(E)&&ht(E,I.return)||F(E)&&T(E,I.return)){if(v!==o.length-1&&!(v===o.length-2&&sa(o[o.length-1])))throw m({token:E.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(F(E)&&ge(E,I.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:E.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=E,U(E)){E.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:wr("return")},s=E;break}else{ge(E,I.return,1);let $=E.args[0],C=x({expr:$,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!C.$)throw m({token:$.token,errorMessage:`Return expression is not evaluated correctly:
151
+ ${k($)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&D(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let L=C.$.type;if(n.functionReturnImplConcreteType.length>0){let b=n.functionReturnImplConcreteType[0];if(!W({type:b.concreteType,env:b.env},{type:L,env:t}))throw nt([{token:E.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
152
152
  Impl(...) uses static dispatch and requires the same concrete type across all returns.
153
153
  Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:b.token,errorMessage:`First return has concrete type: ${A(b.concreteType)}`},{token:E.token,errorMessage:`Conflicting return has concrete type: ${A(L)}`}])}else n.functionReturnImplConcreteType.push({concreteType:L,env:t,token:E.token})}Pe(C,!0),t=C.$.env,E.$={env:t,type:C.$.type,value:C.$.value,pathCollection:C.$.pathCollection,variableName:C.$.variableName,controlFlow:wr("return")},s=E;break}}else if(U(E)&&ht(E,I.break)){if(v!==o.length-1&&!(v===o.length-2&&sa(o[o.length-1])))throw m({token:E.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:E.token,errorMessage:'The "break" keyword can only be used inside a loop.'});E.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:wr("break")},s=E;break}else if(U(E)&&ht(E,I.continue)){if(v!==o.length-1&&!(v===o.length-2&&sa(o[o.length-1])))throw m({token:E.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:E.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});E.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:wr("continue")},s=E;break}else if(F(E)&&T(E,I.escape)){if(v!==o.length-1&&!(v===o.length-2&&sa(o[o.length-1])))throw m({token:E.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw m({token:E.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=E,ge(E,I.escape,1);let $=E.args[0],C=x({expr:$,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!C.$)throw m({token:$.token,errorMessage:`Escape expression is not evaluated correctly:
154
- ${k($)}`});if(E.args[0]=C,!M(n.enclosingFunctionReturnType)&&!W({type:n.enclosingFunctionReturnType,env:t},{type:C.$.type,env:t}))throw m({token:$.token,errorMessage:`Incompatible type for \`escape\` argument:
154
+ ${k($)}`});if(E.args[0]=C,!D(n.enclosingFunctionReturnType)&&!W({type:n.enclosingFunctionReturnType,env:t},{type:C.$.type,env:t}))throw m({token:$.token,errorMessage:`Incompatible type for \`escape\` argument:
155
155
  - Expected (enclosing function return type): ${A(n.enclosingFunctionReturnType)}
156
156
  - Got: ${A(C.$.type)}`});Pe(C,!0),t=C.$.env,E.$={env:t,type:C.$.type,value:C.$.value,pathCollection:C.$.pathCollection,variableName:C.$.variableName,controlFlow:wr("escape")},s=E;break}else{let $=x({expr:E,env:t,context:{...n,expectedType:v===o.length-1?a:void 0}});if($.$?.env&&(t=$.$?.env),v<o.length-1&&!u&&($.$?.value===void 0||F($)&&(T($,"=")||T($,":="))&&!$.$.isCompileTimeOnlyAssignment)&&(u=!0),ct($.$?.controlFlow)){s=$;break}}}if(!s.$)throw m({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
157
- ${k(s)}`});let c=s.$.type;if(Je(s.$.controlFlow,"return")){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body")try{Ke({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!W({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${A(c)}".`})}else if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"&&n.expectedType)try{Ke({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!W({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.expectedType.type)}", but got "${A(c)}".`})}}if(l){let v=F(l)&&T(l,I.return,1)?l.args[0]:l;Fr(v)}else Fr(s);let p,f=s;F(s)&&T(s,I.return,1)&&(f=s.args[0]);let _=f?f.$?.variableName:void 0;if(_){let v=j(t,_);v.length&&(p=v[v.length-1])}p?.isOwningTheRcValue&&p.frameLevel===t.frames.length-1&&!p.consumedAtToken?t=Ue(t,p,{...p,consumedAtToken:s.token}):p&&f&&(Rt(f,n),t=f.$.env);let d=Ni(t),g=[];if(Ss){if(i&&t.frames.length>=2){let b={...t,frames:t.frames.slice(0,-1)},O=Ni(b);d=[...d,...O]}let v=new Map,E=new Set,$=new Map,C=-1;if(F(e))for(let b=0;b<e.args.length;b++){let O=e.args[b];C<0&&xi(O)&&(C=b);let N=cu(O);for(let[D,V]of N.dupCalls){v.has(D)||v.set(D,[]);let z=v.get(D);for(let ee of V)z.includes(ee)||(z.push(ee),$.set(ee,b))}for(let D of N.varsWithPartialBranchDups)E.add(D)}let L=new Set;for(let b of d){let O=b;for(;O.isOwningTheSameRcValueAs;)O=O.isOwningTheSameRcValueAs;let N=O.id,D=v.get(N),V=!dt(O.type)&&Te(O.type),z=E.has(N),ee=!1;if(C>=0&&D&&D.length>0)for(let ne of D){if(ne.__isEarlyReturnDup)continue;let Z=$.get(ne);if(Z!==void 0&&Z>C){ee=!0;break}}if(D&&D.length>0&&!V&&!z&&!ee){let ne=0,G=[],Z=[];for(let de of D){let he=de;he.__isEarlyReturnDup?G.push(de):he.__branchGroup?(ne++,Z.push(he.__branchGroup)):(ne++,G.push(de))}if(ne<=1){for(let de of Z)for(let he of de)L.add(he);for(let de of G)L.add(de);D.length=0,t=Ue(t,b,{...b,consumedAtToken:s.token})}else g.push(b)}else g.push(b)}if(F(e))for(let b of e.args)Vs(b,L)}let h;if((Ss?g:d).length>0){let v=Pd({variablesToDrop:Ss?g:d,env:t,context:{...n,expectedType:void 0}});h=v.deferredDropExpressions,t=v.env}l&&l.$&&(l.$.deferredDropExpressions=h);let y=t.frames[t.frames.length-1];return t=rt(t),e.$={env:t,type:s.$.type,value:u?void 0:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:h,poppedEnvFrame:y},p&&f?.$?.deferredDupExpressions&&f.$.deferredDupExpressions.length>0?Pe(e,!0,p):p?.consumedAtToken?Pe(e,!0,p):Pe(e,!0),e}function la({beginExprs:e,env:t,context:n,allowPartialModule:r=!1}){let i=oa(t),o=[],a;t=ze(t);for(let l=0;l<e.length;l++){let u=e[l];try{if(F(u)&&T(u,I.export)){let c=u.args;for(let p=0;p<c.length;p++){let f=c[p];if(F(f)&&T(f,"...")){let _=f.args[0],d=f.args[1],g=x({expr:_,env:t,context:{...n}});if(!g.$)throw m({token:_.token,errorMessage:`Failed to evaluate the extended struct expression:
158
- ${k(_)}`});let h=g.$.type;if(!Fe(h))throw m({token:_.token,errorMessage:`Expected struct type for export, got:
157
+ ${k(s)}`});let c=s.$.type;if(et(s.$.controlFlow,"return")){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body")try{Ke({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!W({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${A(c)}".`})}else if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"&&n.expectedType)try{Ke({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!W({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.expectedType.type)}", but got "${A(c)}".`})}}if(l){let v=F(l)&&T(l,I.return,1)?l.args[0]:l;Fr(v)}else Fr(s);let p,f=s;F(s)&&T(s,I.return,1)&&(f=s.args[0]);let _=f?f.$?.variableName:void 0;if(_){let v=j(t,_);v.length&&(p=v[v.length-1])}p?.isOwningTheRcValue&&p.frameLevel===t.frames.length-1&&!p.consumedAtToken?t=ze(t,p,{...p,consumedAtToken:s.token}):p&&f&&(Rt(f,n),t=f.$.env);let d=Ni(t),g=[];if(Ds){if(i&&t.frames.length>=2){let b={...t,frames:t.frames.slice(0,-1)},O=Ni(b);d=[...d,...O]}let v=new Map,E=new Set,$=new Map,C=-1;if(F(e))for(let b=0;b<e.args.length;b++){let O=e.args[b];C<0&&xi(O)&&(C=b);let N=pu(O);for(let[M,V]of N.dupCalls){v.has(M)||v.set(M,[]);let z=v.get(M);for(let ee of V)z.includes(ee)||(z.push(ee),$.set(ee,b))}for(let M of N.varsWithPartialBranchDups)E.add(M)}let L=new Set;for(let b of d){let O=b;for(;O.isOwningTheSameRcValueAs;)O=O.isOwningTheSameRcValueAs;let N=O.id,M=v.get(N),V=!mt(O.type)&&Te(O.type),z=E.has(N),ee=!1;if(C>=0&&M&&M.length>0)for(let ne of M){if(ne.__isEarlyReturnDup)continue;let J=$.get(ne);if(J!==void 0&&J>C){ee=!0;break}}if(M&&M.length>0&&!V&&!z&&!ee){let ne=0,G=[],J=[];for(let de of M){let he=de;he.__isEarlyReturnDup?G.push(de):he.__branchGroup?(ne++,J.push(he.__branchGroup)):(ne++,G.push(de))}if(ne<=1){for(let de of J)for(let he of de)L.add(he);for(let de of G)L.add(de);M.length=0,t=ze(t,b,{...b,consumedAtToken:s.token})}else g.push(b)}else g.push(b)}if(F(e))for(let b of e.args)Ms(b,L)}let h;if((Ds?g:d).length>0){let v=Bd({variablesToDrop:Ds?g:d,env:t,context:{...n,expectedType:void 0}});h=v.deferredDropExpressions,t=v.env}l&&l.$&&(l.$.deferredDropExpressions=h);let y=t.frames[t.frames.length-1];return t=rt(t),e.$={env:t,type:s.$.type,value:u?void 0:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:h,poppedEnvFrame:y},p&&f?.$?.deferredDupExpressions&&f.$.deferredDupExpressions.length>0?Pe(e,!0,p):p?.consumedAtToken?Pe(e,!0,p):Pe(e,!0),e}function la({beginExprs:e,env:t,context:n,allowPartialModule:r=!1}){let i=oa(t),o=[],a;t=Ue(t);for(let l=0;l<e.length;l++){let u=e[l];try{if(F(u)&&T(u,I.export)){let c=u.args;for(let p=0;p<c.length;p++){let f=c[p];if(F(f)&&T(f,"...")){let _=f.args[0],d=f.args[1],g=x({expr:_,env:t,context:{...n}});if(!g.$)throw m({token:_.token,errorMessage:`Failed to evaluate the extended struct expression:
158
+ ${k(_)}`});let h=g.$.type;if(!Le(h))throw m({token:_.token,errorMessage:`Expected struct type for export, got:
159
159
  ${A(h)}`});let y=g.$.value,v=new Set;if(d)if(F(d)&&T(d,":",2)&&ht(d.args[0],"exclude")&&(d=d.args[1]),U(d)){let E=d.token.value,$=h.fields.find(C=>C.label===E);if(!$)throw m({token:d.token,errorMessage:`Label "${E}" is not found in the extended module type.`});v.add(E),d.$={env:t,type:$.type,value:$.assignedValue,pathCollection:[]}}else if(F(d)&&T(d,I.tuple))for(let E of d.args){if(!U(E))throw m({token:E.token,errorMessage:`Expected identifier for excluded label, got:
160
160
  ${k(E)}`});let $=E.token.value,C=h.fields.find(L=>L.label===$);if(!C)throw m({token:E.token,errorMessage:`Label "${$}" is not found in the extended module type.`});v.add($),E.$={env:t,type:C.type,value:C.assignedValue,pathCollection:[]}}else throw m({token:d.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
161
- ${k(d)}`});for(let E=0;E<h.fields.length;E++){let $=h.fields[E];if(v.has($.label))continue;if(i.fields.findIndex(L=>L.label===$.label)>=0)throw m({token:f.token,errorMessage:`Element "${$.label}" is already exported in the module.`});i.fields.push({label:$.label,type:$.type,assignedValue:$.assignedValue,defaultValue:$.defaultValue,exprs:{expr:f,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),y?o.push(y.fields[E]):o.push(void 0),f.$={env:t,type:$.type,value:y?y.fields[E]:void 0,pathCollection:[]}}}else{let _="",d="";if(U(f)){if(!We(f))throw m({token:f.token,errorMessage:`Expected identifier for export, got:
161
+ ${k(d)}`});for(let E=0;E<h.fields.length;E++){let $=h.fields[E];if(v.has($.label))continue;if(i.fields.findIndex(L=>L.label===$.label)>=0)throw m({token:f.token,errorMessage:`Element "${$.label}" is already exported in the module.`});i.fields.push({label:$.label,type:$.type,assignedValue:$.assignedValue,defaultValue:$.defaultValue,exprs:{expr:f,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),y?o.push(y.fields[E]):o.push(void 0),f.$={env:t,type:$.type,value:y?y.fields[E]:void 0,pathCollection:[]}}}else{let _="",d="";if(U(f)){if(!qe(f))throw m({token:f.token,errorMessage:`Expected identifier for export, got:
162
162
  ${k(f)}`});_=f.token.value,d=_}else if(F(f)&&T(f,":",2)){let v=f.args[0],E=f.args[1];if(!U(v))throw m({token:v.token,errorMessage:`Expected identifier for export, got:
163
- ${k(v)}`});if(!We(v))throw m({token:v.token,errorMessage:`Expected identifier for export, got:
163
+ ${k(v)}`});if(!qe(v))throw m({token:v.token,errorMessage:`Expected identifier for export, got:
164
164
  ${k(v)}`});if(_=v.token.value,!U(E))throw m({token:E.token,errorMessage:`Expected identifier for export, got:
165
- ${k(E)}`});if(!We(E))throw m({token:E.token,errorMessage:`Expected identifier for export, got:
166
- ${k(E)}`});d=E.token.value}let g=j(t,d);if(g.length===0)throw m({token:f.token,errorMessage:`Variable "${d}" is not defined in the module.`});let h=g[g.length-1];if(i.fields.findIndex(v=>v.label===d)>=0)throw m({token:f.token,errorMessage:`Variable "${d}" is already exported in the module.`});if(!h.isCompileTimeOnly)throw m({token:f.token,errorMessage:`Variable "${d}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:_,type:h.type,assignedValue:h.isCompileTimeOnly?h.value?.[0]:void 0,defaultValue:void 0,exprs:{expr:f,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),o.push(h.value?.[0]),f.$={env:t,type:h.type,value:h.value?.[0],pathCollection:[]}}}}else{let c=x({expr:u,env:t,context:{...n,expectedType:void 0}});c.$?.env&&(t=c.$?.env)}}catch(c){if(r){a=c;break}else throw c}}try{a||(t=rt(t))}catch(l){if(r)a=l;else throw l}return{moduleValue:Wo({...i},o),moduleType:i,env:t,partialModuleError:a}}function Ds({functionType:e,specializedEnv:t,SelfType:n}){let r=e.parameters.map(u=>{if(!u.exprs.typeExpr)return u;let c=Ve(u.exprs.typeExpr),p=x({expr:c,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return R(p.$?.value)?{...u,type:p.$.value.value,exprs:{...u.exprs}}:u}),i=e.return.type,o=Ve(e.return.typeExpr),a=x({expr:o,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});R(a.$?.value)&&(i=a.$.value.value);let s=e.SelfType;n&&(s=n);let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(u=>{let c=r.find(f=>f.label===u.name),p=c?c.type:u.type;return p!==u.type?{...u,type:p}:u})};return{...e,env:t,forallParameters:[],parameters:r,parametersFrame:l,return:{...e.return,type:i},SelfType:s}}var To=new Map;function Ud({traitExpr:e,traitType:t}){if(!e||!F(e))return{};let n=e.func;if(!F(n))return{};let r=n.args.map(o=>Ve(o)),i;if(t.functionValue&&H(t.functionValue.type)){let o=t.functionValue.type;o.parameters.length>0?i=o.parameters.map(a=>a.label):o.forallParameters.length>0&&(i=o.forallParameters.map(a=>a.label))}return{traitTypeArgExprs:r,traitFunctionParamNames:i}}function pu({fieldExprs:e,env:t,context:n,receiverType:r}){let i=[],o=De(t),a=[],s=!1,l=r?.trait;r?.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=ze(t);for(let u of e){if(F(u)&&T(u,I.begin))throw m({token:u.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(F(u)&&(T(u,"::",2)||T(u,":=",2)))throw m({token:u.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(F(u)&&T(u,":",2)){let p=u.args[0],f=u.args[1];if(!U(p)||!We(p))throw m({token:p.token,errorMessage:`Expected identifier for impl field name, got:
167
- ${k(p)}`});let _=p.token.value,d=x({expr:f,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!d.$?.type)throw m({token:f.token,errorMessage:`Failed to evaluate impl field value for "${_}".`});t=d.$.env;let g=d.$.type,h=d.$.value;if(!h)throw m({token:f.token,errorMessage:`impl field "${_}" must be a compile-time value.`});ie(h)&&!h.funcName&&(h.funcName=_,h.funcId+=`_${_}`);let{env:y}=_e({env:t,variable:{name:_,type:g,isCompileTimeOnly:!0,value:[h],token:p.token,initializedAtToken:p.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=y,o.fields.push({label:_,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:u}}),a.push(h),s=!0,r?.trait&&r.trait.fields.push({label:_,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:u}});continue}let c=x({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!c.$||!mt(c.$.value))throw m({token:u.token,errorMessage:`Expected trait value in impl field list, got:
168
- ${k(u)}`});t=c.$.env,i.push({traitValue:c.$.value,sourceExpr:u,isAnonymousTrait:!1})}if(t=rt(t),r&&(r.trait=l),s){let u=_i({...o,receiverType:r},a);i.unshift({traitValue:u,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var pr=new Map,Jr=new Map;function $o(e){for(let[t,n]of pr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?pr.delete(t):pr.set(t,r)}}function zd(e){for(let[t,n]of Jr.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?Jr.delete(t):Jr.set(t,r)}}function Ms(){To.clear(),pr.clear(),Jr.clear()}function ua(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function fu(e,t){let n=pr.get(e);n||(n=[],pr.set(e,n)),n.push(t)}function Bd({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(Jr.get(i)||[]).find(s=>s.traitTypeId===t.id);if(a)throw m({token:r.token,errorMessage:`Trait "${t.typeName??t.id}" is already implemented for type "${A(e)}".
169
- First implementation was in: ${a.modulePath||"unknown"}`})}function Gd({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=Jr.get(i);o||(o=[],Jr.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function Wd({receiverType:e,traitType:t,currentModulePath:n,expr:r}){if(!n)return;let i=t.definedInModulePath===n,o=e.definedInModulePath===n;if(!(n.includes("prelude.yo")||n.includes("std/"))&&!i&&!o)throw m({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign trait "${t.typeName??t.id}" for foreign type "${A(e)}".
165
+ ${k(E)}`});if(!qe(E))throw m({token:E.token,errorMessage:`Expected identifier for export, got:
166
+ ${k(E)}`});d=E.token.value}let g=j(t,d);if(g.length===0)throw m({token:f.token,errorMessage:`Variable "${d}" is not defined in the module.`});let h=g[g.length-1];if(i.fields.findIndex(v=>v.label===d)>=0)throw m({token:f.token,errorMessage:`Variable "${d}" is already exported in the module.`});if(!h.isCompileTimeOnly)throw m({token:f.token,errorMessage:`Variable "${d}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:_,type:h.type,assignedValue:h.isCompileTimeOnly?h.value?.[0]:void 0,defaultValue:void 0,exprs:{expr:f,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),o.push(h.value?.[0]),f.$={env:t,type:h.type,value:h.value?.[0],pathCollection:[]}}}}else{let c=x({expr:u,env:t,context:{...n,expectedType:void 0}});c.$?.env&&(t=c.$?.env)}}catch(c){if(r){a=c;break}else throw c}}try{a||(t=rt(t))}catch(l){if(r)a=l;else throw l}return{moduleValue:Wo({...i},o),moduleType:i,env:t,partialModuleError:a}}function Os({functionType:e,specializedEnv:t,SelfType:n}){let r=e.parameters.map(u=>{if(!u.exprs.typeExpr)return u;let c=Ve(u.exprs.typeExpr),p=x({expr:c,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return R(p.$?.value)?{...u,type:p.$.value.value,exprs:{...u.exprs}}:u}),i=e.return.type,o=Ve(e.return.typeExpr),a=x({expr:o,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});R(a.$?.value)&&(i=a.$.value.value);let s=e.SelfType;n&&(s=n);let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(u=>{let c=r.find(f=>f.label===u.name),p=c?c.type:u.type;return p!==u.type?{...u,type:p}:u})};return{...e,env:t,forallParameters:[],parameters:r,parametersFrame:l,return:{...e.return,type:i},SelfType:s}}var To=new Map;function Gd({traitExpr:e,traitType:t}){if(!e||!F(e))return{};let n=e.func;if(F(n)){let r=n.args.map(o=>Ve(o)),i;if(t.functionValue&&q(t.functionValue.type)){let o=t.functionValue.type;o.parameters.length>0?i=o.parameters.map(a=>a.label):o.forallParameters.length>0&&(i=o.forallParameters.map(a=>a.label))}return{traitTypeArgExprs:r,traitFunctionParamNames:i}}if(!t.functionValue){let r=[],i=[];for(let o of e.args)if(F(o)&&T(o,":",2)){let a=o.args[0],s=o.args[1];if(U(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!q(u.type)&&(r.push(Ve(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function fu({fieldExprs:e,env:t,context:n,receiverType:r}){let i=[],o=De(t),a=[],s=!1,l=r?.trait;r?.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=Ue(t);for(let u of e){if(F(u)&&T(u,I.begin))throw m({token:u.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(F(u)&&(T(u,"::",2)||T(u,":=",2)))throw m({token:u.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(F(u)&&T(u,":",2)){let p=u.args[0],f=u.args[1];if(!U(p)||!qe(p))throw m({token:p.token,errorMessage:`Expected identifier for impl field name, got:
167
+ ${k(p)}`});let _=p.token.value,d=x({expr:f,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!d.$?.type)throw m({token:f.token,errorMessage:`Failed to evaluate impl field value for "${_}".`});t=d.$.env;let g=d.$.type,h=d.$.value;if(!h)throw m({token:f.token,errorMessage:`impl field "${_}" must be a compile-time value.`});ie(h)&&!h.funcName&&(h.funcName=_,h.funcId+=`_${_}`);let{env:y}=fe({env:t,variable:{name:_,type:g,isCompileTimeOnly:!0,value:[h],token:p.token,initializedAtToken:p.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=y,o.fields.push({label:_,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:u}}),a.push(h),s=!0,r?.trait&&r.trait.fields.push({label:_,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:u}});continue}let c=x({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!c.$||!dt(c.$.value))throw m({token:u.token,errorMessage:`Expected trait value in impl field list, got:
168
+ ${k(u)}`});t=c.$.env,i.push({traitValue:c.$.value,sourceExpr:u,isAnonymousTrait:!1})}if(t=rt(t),r&&(r.trait=l),s){let u=_i({...o,receiverType:r},a);i.unshift({traitValue:u,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var Jn=new Map,Jr=new Map;function $o(e){for(let[t,n]of Jn.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?Jn.delete(t):Jn.set(t,r)}}function Wd(e){for(let[t,n]of Jr.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?Jr.delete(t):Jr.set(t,r)}}function Rs(){To.clear(),Jn.clear(),Jr.clear()}function ua(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function _u(e,t){let n=Jn.get(e);n||(n=[],Jn.set(e,n)),n.push(t)}function qd({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(Jr.get(i)||[]).find(s=>s.traitTypeId===t.id);if(a)throw m({token:r.token,errorMessage:`Trait "${t.typeName??t.id}" is already implemented for type "${A(e)}".
169
+ First implementation was in: ${a.modulePath||"unknown"}`})}function Hd({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=Jr.get(i);o||(o=[],Jr.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function Yd({receiverType:e,traitType:t,currentModulePath:n,expr:r}){if(!n)return;let i=t.definedInModulePath===n,o=e.definedInModulePath===n;if(!(n.includes("prelude.yo")||n.includes("std/"))&&!i&&!o)throw m({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign trait "${t.typeName??t.id}" for foreign type "${A(e)}".
170
170
  At least one of the trait or the type must be defined in this module.
171
171
  Trait defined in: ${t.definedInModulePath||"unknown"}
172
172
  Type defined in: ${e.definedInModulePath||"unknown"}
173
- Current module: ${n}`})}function ca({concreteType:e,traitType:t,env:n}){let r=ua(t),i=pr.get(r);if(!(!i||i.length===0)){for(let o of i)if(Os({concreteType:e,impl:o,env:n}).matched)return o}}function Jn({concreteType:e,methodName:t,env:n}){if(M(e)){let i=Mt(n,e);M(i)||(e=i)}let r=[];for(let[i,o]of pr.entries())for(let a of o){let s=Os({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(p=>p.label===t&&H(p.type));if(c>=0){let p=l.fields[c];if(H(p.type)){let f=u.fields[c],_=or(e);if(ie(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!_){let g=a.definitionEnv,h=ze(g);for(let[C,L]of s.substitutions){let{env:b}=_e({env:h,variable:{name:C,type:et(),isCompileTimeOnly:!0,value:[J(L)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=b}for(let[C,L]of s.valueSubstitutions){let{env:b}=_e({env:h,variable:{name:C,type:L.type,isCompileTimeOnly:!0,value:[L],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=b}if(a.traitTypeArgExprs&&a.traitFunctionParamNames&&a.traitTypeArgExprs.length===a.traitFunctionParamNames.length)for(let C=0;C<a.traitTypeArgExprs.length;C++){let L=a.traitTypeArgExprs[C],b=a.traitFunctionParamNames[C],O=x({expr:Ve(L),env:h,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(O.$&&R(O.$.value)){let{env:N}=_e({env:h,variable:{name:b,type:et(),isCompileTimeOnly:!0,value:[O.$.value],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});h=N}}let y=Ds({functionType:p.type,specializedEnv:h,SelfType:s.substitutions.get("Self")});h=ze(h,y.parametersFrame);let v=Ve(f.body),E=gt({expr:v,env:h,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:h},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:f,evaluationEnv:h},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),$={...f,specializedType:y,body:E,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([C,L])=>`${C}_${A(L)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([C,L])=>`${C}_${Se(L)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};r.push({type:y,value:$})}else if(_){let g=a.definitionEnv,h=ze(g);for(let[v,E]of s.substitutions){let{env:$}=_e({env:h,variable:{name:v,type:et(),isCompileTimeOnly:!0,value:[J(E)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=$}for(let[v,E]of s.valueSubstitutions){let{env:$}=_e({env:h,variable:{name:v,type:E.type,isCompileTimeOnly:!0,value:[E],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=$}let y=Ds({functionType:p.type,specializedEnv:h,SelfType:s.substitutions.get("Self")});r.push({type:y,value:void 0})}else if(ie(f)){let g={...f,specializedType:p.type};r.push({type:p.type,value:g})}else r.push({type:p.type,value:f})}}}return r}function du({concreteType:e,traitType:t,methodName:n,env:r}){let i=ua(t),o=pr.get(i);if(!(!o||o.length===0))for(let a of o){let s=Os({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(p=>p.label===n&&H(p.type));if(c>=0){let p=l.fields[c];if(H(p.type)){let f=u.fields[c];if(ie(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let _=a.definitionEnv,d=ze(_);for(let[E,$]of s.substitutions){let{env:C}=_e({env:d,variable:{name:E,type:et(),isCompileTimeOnly:!0,value:[J($)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=C}for(let[E,$]of s.valueSubstitutions){let{env:C}=_e({env:d,variable:{name:E,type:$.type,isCompileTimeOnly:!0,value:[$],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=C}let g=Ds({functionType:p.type,specializedEnv:d,SelfType:s.substitutions.get("Self")});d=ze(d,g.parametersFrame);let h=Ve(f.body),y=gt({expr:h,env:d,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:g.return.type,env:d},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:g,value:f,evaluationEnv:d},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...f,specializedType:g,body:y,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([E,$])=>`${E}_${A($)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([E,$])=>`${E}_${Se($)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};return{type:g,value:v}}else if(ie(f)){let _={...f,specializedType:p.type};return{type:p.type,value:_}}else return{type:p.type,value:f}}}}}function Os({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(M(e)){let o=Mt(n,e);if(M(o))return r;e=o}let i=ze(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=_e({env:i,variable:{name:o.name,type:et(),isCompileTimeOnly:!0,value:[J(o.someType)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=_e({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=Ke({type:t.receiverTypePattern,env:i},{type:e,env:n});for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let p=_u(o,l);if(!p)return r;let f=u;if(c)try{let _=Ve(c),d=x({expr:_,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});d.$&&R(d.$.value)&&xe(d.$.value.value)&&(f=d.$.value.value)}catch{}if(f.isNegatedConstraint){if(M(p)){if(!qd(p,f,n))return r;continue}if(Nt({targetType:p,traitType:f,env:n}))return r;continue}if(M(p)){if(!Hd(p,f,n))return r;continue}if(!Nt({targetType:p,traitType:f,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=_u(o,l.someType);u&&!M(u)&&a.set(l.name,u)}else{let u=j(o,l.name),c=u[u.length-1];if(c&&c.value&&!fe(c.value[0])){let p={...c.value[0],type:l.type};s.set(l.name,p)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function Hd(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=Nn(n,e);if(i){for(let o of i.requiredTraits)if(o.id===t.id)return!0}for(let o of e.trait.fields)if(mt(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function qd(e,t,n){if(!t.typeName)return!1;if(e.negativeTraits){for(let o of e.negativeTraits)if(o.traitType.id===t.id)return!0}let i=Nn(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function Yd({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(Nt({targetType:e,traitType:o,env:r}))continue;let a=new Set;for(let s of n)s.traitType.typeName===o.typeName&&!s.traitType.isNegatedConstraint&&a.add(s.someType.name);throw m({token:i,errorMessage:`Generic impl receiver type "${A(e)}" does not satisfy constraint "${o.typeName??A(o)}" required by trait "${t.typeName??A(t)}".
174
- Consider adding "where(T <: ${o.typeName??A(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(Nt({targetType:e,traitType:o,env:r}))throw m({token:i,errorMessage:`Generic impl receiver type "${A(e)}" implements "${o.typeName??A(o)}" but trait "${t.typeName??A(t)}" requires it to NOT implement this trait.
175
- Consider adding "where(T <: !(${o.typeName??A(o)}))" to the impl.`})}}function _u(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let i of r.variables)if(i.name===t.name&&i.value&&R(i.value[0]))return i.value[0].value}return t}function Co(e){let t=To.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);To.delete(e),zd(e)}}function jd(e,t){let n=To.get(e);n||(n=new Set,To.set(e,n)),n.add(t)}function Kd(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(Wd({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Bd({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Gd({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&jd(n,r.trait),e.type.typeName){let i={label:"",type:an(1),assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(i)}else for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=e.fields[i],s={label:o.label,type:o.type,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(s)}}function mu({expr:e,env:t,context:n}){if(!T(e,I.impl))throw m({token:e.token,errorMessage:`Expected "impl", got:
176
- ${k(e)}`});if(e.args.length===1&&F(e.args[0])&&T(e.args[0],I.begin)){let $=e.args[0].args,{moduleType:C,moduleValue:L,env:b}=la({beginExprs:$,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=b,e.$={env:t,type:C,value:L,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&F(r[i])&&T(r[i],I.forall)&&(o=r[i],i++),r[i]&&F(r[i])&&T(r[i],I.where)){if(!o)throw m({token:r[i].token,errorMessage:"impl where(...) requires forall(...) and may appear before or after the receiver type."});a=r[i],i++}if(!r[i])throw m({token:e.token,errorMessage:"impl requires a receiver type and at least one field."});let s=r[i];if(i++,r[i]&&F(r[i])&&T(r[i],I.where)){if(!o)throw m({token:r[i].token,errorMessage:"impl where(...) requires forall(...) and may appear before or after the receiver type."});if(a)throw m({token:r[i].token,errorMessage:"impl supports only a single where(...) clause."});a=r[i],i++}let l=r.slice(i);if(l.length===0)throw m({token:e.token,errorMessage:"impl requires at least one field after the receiver type."});if(!o){let $=x({expr:s,env:t,context:{...n}});if(!$.$||!$.$.value||!R($.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type argument."});t=$.$.env;let C=$.$.value.value,L=je(C)||be(C),{env:b,traitEntries:O}=pu({fieldExprs:l,env:t,context:{...n},receiverType:C});if(t=b,O.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let D of O){let V=D.traitValue,z=V.type;if(D.isAnonymousTrait||yu({targetType:C,traitType:z,env:t,errorToken:e.token}),L){let ee=ua(z),ne={forallParameters:[],whereConstraints:[],receiverTypePattern:C,traitType:z,traitValue:V,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};fu(ee,ne)}else Kd(V,e,n.currentModulePath)}let N=O[0].traitValue;return e.$={env:t,type:N.type,value:N,pathCollection:[]},e}let c=o.args,p=[];t=ze(t);for(let $ of c){let C,L;if(F($)&&T($,":",2)){let z=$.args[0];if(!U(z))throw m({token:z.token,errorMessage:`Expected identifier for forall parameter name, got: ${k(z)}`});C=z.token.value,L=$.args[1]}else if(U($))C=$.token.value;else throw m({token:$.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${k($)}`});let b;if(L){let z=x({expr:L,env:t,context:{...n}});if(z.$?.env&&(t=z.$.env),!z.$||!z.$.value||!R(z.$.value))throw m({token:L.token,errorMessage:`Expected type for forall parameter type, got: ${k(L)}`});b=z.$.value.value}let O=!b||gl(b),N=b||et(),D=q(N,{variableName:C,env:t,context:n}),{env:V}=_e({env:t,variable:{name:C,type:N,isCompileTimeOnly:!0,value:[D],token:$.token,initializedAtToken:$.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=V,O){let z=D.value;p.push({kind:"type",name:C,someType:z})}else p.push({kind:"value",name:C,type:N,unknownValue:D})}let f=new Map;if(a)for(let $ of a.args){if(!F($)||!T($,"<:",2))throw m({token:$.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${k($)}`});let C=x({expr:$,env:t,context:{...n,isInsideWhereClause:!0}});C.$?.env&&(t=C.$.env);let L=$.args[0],b=$.args[1],O=x({expr:L,env:t,context:{...n}});if(!O.$||!O.$.value||!R(O.$.value)||!M(O.$.value.value))throw m({token:L.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${k(L)}`});t=O.$.env;let N=[];if(F(b)&&T(b,I.tuple))for(let D of b.args)F(D)&&T(D,"!")&&D.args.length===1?N.push({expr:D.args[0],isNegated:!0}):N.push({expr:D,isNegated:!1});else F(b)&&T(b,"!")&&b.args.length===1?N.push({expr:b.args[0],isNegated:!0}):N.push({expr:b,isNegated:!1});for(let{expr:D}of N){let V=x({expr:D,env:t,context:{...n}});if(!V.$||!V.$.value||!R(V.$.value)||!xe(V.$.value.value))throw m({token:D.token,errorMessage:"Expected trait type for right-hand side expression."});t=V.$.env;let z=V.$.value.value;f.set(z.id,Ve(D))}}let _=[];for(let $ of p){if($.kind!=="type")continue;let{someType:C}=$,L=Nn(t,C);if(L){for(let b of L.requiredTraits)_.push({someType:C,traitType:b,traitExpr:f.get(b.id)});for(let b of L.negativeTraits){let O={...b,isNegatedConstraint:!0};_.push({someType:C,traitType:O,traitExpr:f.get(b.id)})}}}let d=x({expr:s,env:t,context:{...n}});if(!d.$||!d.$.value||!R(d.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=d.$.env;let g=d.$.value.value,{env:h,traitEntries:y}=pu({fieldExprs:l,env:t,context:{...n},receiverType:g});if(t=h,y.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let $ of y){let C=$.traitValue,L=C.type;Yd({receiverTypePattern:g,traitType:L,whereConstraints:_,env:t,errorToken:e.token});let{traitTypeArgExprs:b,traitFunctionParamNames:O}=$.isAnonymousTrait?{}:Ud({traitExpr:$.sourceExpr,traitType:L});v.push({traitType:L,traitValue:C,traitTypeArgExprs:b,traitFunctionParamNames:O})}t=rt(t);for(let $ of v){let C=ua($.traitType),L={forallParameters:p,whereConstraints:_,receiverTypePattern:g,traitType:$.traitType,traitValue:$.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:$.traitTypeArgExprs,traitFunctionParamNames:$.traitFunctionParamNames};fu(C,L)}let E=v[0].traitValue;return e.$={env:t,type:E.type,value:E,pathCollection:[]},e}var Rs=new Set;function gu(e){if(!e||ue(e)&&e.isReferenceSemantics)return!1;switch(e.tag){case"comptime_int":case"comptime_float":case"comptime_string":case"Type":case"Module":case"Trait":case"Expr":case"ComptimeList":return!0;case"Iso":case"Arc":case"Dyn":case"void":case"Union":case"char":case"short":case"ushort":case"int":case"uint":case"long":case"ulong":case"longlong":case"ulonglong":case"longdouble":return!1;case"unit":case"bool":case"usize":case"isize":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"u64":case"i64":case"f32":case"f64":case"Function":return!0}if(He(e))return!0}function hu(e){if(!e)return!1;if(ue(e)&&e.isReferenceSemantics)return!0;switch(e.tag){case"comptime_int":case"comptime_float":case"comptime_string":case"Type":case"Module":case"Trait":case"Expr":case"ComptimeList":return!1;case"Iso":case"Arc":case"Dyn":case"void":case"char":case"short":case"ushort":case"int":case"uint":case"long":case"ulong":case"longlong":case"ulonglong":case"longdouble":return!0;case"unit":case"bool":case"usize":case"isize":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"u64":case"i64":case"f32":case"f64":case"Function":case"Union":return!0}}function Nt({targetType:e,traitType:t,env:n}){let r=Cn(n,"Comptime");if(r&&t.id===r.id){let l=gu(e);if(l!==void 0)return l}let i=Cn(n,"Runtime");if(i&&t.id===i.id){let l=hu(e);if(l!==void 0)return l}let o={...t,receiverType:e},a=e.trait;if(a)for(let l of a.fields){if(!l.assignedValue||!mt(l.assignedValue))continue;let c=l.assignedValue.type;if(W({type:o,env:n},{type:c,env:n}))return!0}if(M(e)){let l=!1,u=!1;for(let p of e.requiredTraits)p.traitType.id===t.id&&(l=!0);let c=Nn(n,e);if(c){for(let p of c.requiredTraits)p.id===t.id&&(l=!0);for(let p of c.negativeTraits)p.id===t.id&&(u=!0)}if(e.negativeTraits)for(let p of e.negativeTraits)p.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(M(e)){let l=Mt(n,e);if(M(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(Rs.has(s))return!1;Rs.add(s);try{return ca({concreteType:e,traitType:t,env:n})!==void 0}finally{Rs.delete(s)}}function yu({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!Nt({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" does not implement required constraint "${i.typeName??A(i)}" from trait "${t.typeName??A(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(Nt({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" implements "${i.typeName??A(i)}" but the trait "${t.typeName??A(t)}"'s where clause requires it to NOT implement this trait.`})}}function On(e,t){let n=gu(e);if(n!==void 0)return n;let r=Cn(t,"Comptime");return r?Nt({targetType:e,traitType:r,env:t}):!1}function ur(e,t){let n=hu(e);if(n!==void 0)return n;let r=Cn(t,"Runtime");return r?Nt({targetType:e,traitType:r,env:t}):!1}function mo(e,t){if(!e)return!1;let n=Cn(t,"Send");return n?Nt({targetType:e,traitType:n,env:t}):!1}function Br(e,t){if(!e)return!1;let n=Cn(t,"Acyclic");return n?Nt({targetType:e,traitType:n,env:t}):!1}function jr(e,t){return On(e,t)&&!ur(e,t)}function Gt(e){if(!e)return!1;if(M(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(Et(t))return!0}return!1}function jt(e){if(Et(e))return e;if(M(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(Et(t))return t}}function we(e){if(!e)return!1;if(M(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(zt(t))return!0}return!1}function At(e){if(zt(e))return e;if(M(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(zt(t))return t}}function ta(e,t,n,r){if(!Ae(e)&&!On(e,t)&&!ur(e,t))throw m({token:n,errorMessage:`Type ${A(e)} has incompatible field contexts and cannot be used in any evaluation context.
173
+ Current module: ${n}`})}function ca({concreteType:e,traitType:t,env:n}){let r=ua(t),i=Jn.get(r);if(!(!i||i.length===0)){for(let o of i)if(fa({concreteType:e,impl:o,env:n}).matched)return o}}function er({concreteType:e,methodName:t,env:n}){if(D(e)){let i=St(n,e);D(i)||(e=i)}let r=[];for(let[i,o]of Jn.entries())for(let a of o){let s=fa({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(p=>p.label===t&&q(p.type));if(c>=0){let p=l.fields[c];if(q(p.type)){let f=u.fields[c],_=ar(e);if(ie(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!_){let g=a.definitionEnv,h=Ue(g);for(let[C,L]of s.substitutions){let{env:b}=fe({env:h,variable:{name:C,type:Je(),isCompileTimeOnly:!0,value:[Q(L)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=b}for(let[C,L]of s.valueSubstitutions){let{env:b}=fe({env:h,variable:{name:C,type:L.type,isCompileTimeOnly:!0,value:[L],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=b}if(a.traitTypeArgExprs&&a.traitFunctionParamNames&&a.traitTypeArgExprs.length===a.traitFunctionParamNames.length)for(let C=0;C<a.traitTypeArgExprs.length;C++){let L=a.traitTypeArgExprs[C],b=a.traitFunctionParamNames[C],O=x({expr:Ve(L),env:h,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(O.$&&R(O.$.value)){let{env:N}=fe({env:h,variable:{name:b,type:Je(),isCompileTimeOnly:!0,value:[O.$.value],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});h=N}}let y=Os({functionType:p.type,specializedEnv:h,SelfType:s.substitutions.get("Self")});h=Ue(h,y.parametersFrame);let v=Ve(f.body),E=gt({expr:v,env:h,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:h},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:f,evaluationEnv:h},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),$={...f,specializedType:y,body:E,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([C,L])=>`${C}_${A(L)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([C,L])=>`${C}_${Se(L)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};r.push({type:y,value:$})}else if(_){let g=a.definitionEnv,h=Ue(g);for(let[v,E]of s.substitutions){let{env:$}=fe({env:h,variable:{name:v,type:Je(),isCompileTimeOnly:!0,value:[Q(E)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=$}for(let[v,E]of s.valueSubstitutions){let{env:$}=fe({env:h,variable:{name:v,type:E.type,isCompileTimeOnly:!0,value:[E],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});h=$}let y=Os({functionType:p.type,specializedEnv:h,SelfType:s.substitutions.get("Self")});r.push({type:y,value:void 0})}else if(ie(f)){let g={...f,specializedType:p.type};r.push({type:p.type,value:g})}else r.push({type:p.type,value:f})}}}return r}function pa({concreteType:e,propertyName:t,env:n}){if(D(e)){let r=St(n,e);D(r)||(e=r)}for(let[r,i]of Jn.entries())for(let o of i){let a;try{a=fa({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(p=>p.label===t&&!q(p.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let p=o.definitionEnv,f=Ue(p);for(let[_,d]of a.substitutions){let{env:g}=fe({env:f,variable:{name:_,type:Je(),isCompileTimeOnly:!0,value:[Q(d)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});f=g}for(let _=0;_<o.traitTypeArgExprs.length;_++){let d=o.traitTypeArgExprs[_];if(o.traitFunctionParamNames[_]===t)try{let h=Ve(d),y=x({expr:h,env:f,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(y.$&&R(y.$.value))return{type:y.$.value.type,value:y.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!R(c))){if(!D(c.value))return{type:c.type,value:c};for(let p of o.forallParameters)if(p.kind==="type"&&p.someType===c.value){let f=a.substitutions.get(p.name);if(f){let _=Q(f);return{type:_.type,value:_}}}}}}function mu({concreteType:e,traitType:t,methodName:n,env:r}){let i=ua(t),o=Jn.get(i);if(!(!o||o.length===0))for(let a of o){let s=fa({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(p=>p.label===n&&q(p.type));if(c>=0){let p=l.fields[c];if(q(p.type)){let f=u.fields[c];if(ie(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let _=a.definitionEnv,d=Ue(_);for(let[E,$]of s.substitutions){let{env:C}=fe({env:d,variable:{name:E,type:Je(),isCompileTimeOnly:!0,value:[Q($)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=C}for(let[E,$]of s.valueSubstitutions){let{env:C}=fe({env:d,variable:{name:E,type:$.type,isCompileTimeOnly:!0,value:[$],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=C}let g=Os({functionType:p.type,specializedEnv:d,SelfType:s.substitutions.get("Self")});d=Ue(d,g.parametersFrame);let h=Ve(f.body),y=gt({expr:h,env:d,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:g.return.type,env:d},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:g,value:f,evaluationEnv:d},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...f,specializedType:g,body:y,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([E,$])=>`${E}_${A($)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([E,$])=>`${E}_${Se($)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};return{type:g,value:v}}else if(ie(f)){let _={...f,specializedType:p.type};return{type:p.type,value:_}}else return{type:p.type,value:f}}}}}function fa({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(D(e)){let o=St(n,e);if(D(o))return r;e=o}let i=Ue(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=fe({env:i,variable:{name:o.name,type:Je(),isCompileTimeOnly:!0,value:[Q(o.someType)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=fe({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=Ke({type:t.receiverTypePattern,env:i},{type:e,env:n});for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let p=du(o,l);if(!p)return r;let f=u;if(c)try{let _=Ve(c),d=x({expr:_,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});d.$&&R(d.$.value)&&xe(d.$.value.value)&&(f=d.$.value.value)}catch{}if(f.isNegatedConstraint){if(D(p)){if(!Kd(p,f,n))return r;continue}if(Ft({targetType:p,traitType:f,env:n}))return r;continue}if(D(p)){if(!jd(p,f,n))return r;continue}if(!Ft({targetType:p,traitType:f,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=du(o,l.someType);u&&!D(u)&&a.set(l.name,u)}else{let u=j(o,l.name),c=u[u.length-1];if(c&&c.value&&!_e(c.value[0])){let p={...c.value[0],type:l.type};s.set(l.name,p)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function jd(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=Nn(n,e);if(i){for(let o of i.requiredTraits)if(o.id===t.id)return!0}for(let o of e.trait.fields)if(dt(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function Kd(e,t,n){if(!t.typeName)return!1;if(e.negativeTraits){for(let o of e.negativeTraits)if(o.traitType.id===t.id)return!0}let i=Nn(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function Xd({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(Ft({targetType:e,traitType:o,env:r}))continue;let a=new Set;for(let s of n)s.traitType.typeName===o.typeName&&!s.traitType.isNegatedConstraint&&a.add(s.someType.name);throw m({token:i,errorMessage:`Generic impl receiver type "${A(e)}" does not satisfy constraint "${o.typeName??A(o)}" required by trait "${t.typeName??A(t)}".
174
+ Consider adding "where(T <: ${o.typeName??A(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(Ft({targetType:e,traitType:o,env:r}))throw m({token:i,errorMessage:`Generic impl receiver type "${A(e)}" implements "${o.typeName??A(o)}" but trait "${t.typeName??A(t)}" requires it to NOT implement this trait.
175
+ Consider adding "where(T <: !(${o.typeName??A(o)}))" to the impl.`})}}function du(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let i of r.variables)if(i.name===t.name&&i.value&&R(i.value[0]))return i.value[0].value}return t}function Co(e){let t=To.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);To.delete(e),Wd(e)}}function Qd(e,t){let n=To.get(e);n||(n=new Set,To.set(e,n)),n.add(t)}function Zd(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(Yd({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),qd({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Hd({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&Qd(n,r.trait),e.type.typeName){let i={label:"",type:an(1),assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(i)}else for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=e.fields[i],s={label:o.label,type:o.type,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(s)}}function yu({expr:e,env:t,context:n}){if(!T(e,I.impl))throw m({token:e.token,errorMessage:`Expected "impl", got:
176
+ ${k(e)}`});if(e.args.length===1&&F(e.args[0])&&T(e.args[0],I.begin)){let $=e.args[0].args,{moduleType:C,moduleValue:L,env:b}=la({beginExprs:$,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=b,e.$={env:t,type:C,value:L,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&F(r[i])&&T(r[i],I.forall)&&(o=r[i],i++),r[i]&&F(r[i])&&T(r[i],I.where)){if(!o)throw m({token:r[i].token,errorMessage:"impl where(...) requires forall(...) and may appear before or after the receiver type."});a=r[i],i++}if(!r[i])throw m({token:e.token,errorMessage:"impl requires a receiver type and at least one field."});let s=r[i];if(i++,r[i]&&F(r[i])&&T(r[i],I.where)){if(!o)throw m({token:r[i].token,errorMessage:"impl where(...) requires forall(...) and may appear before or after the receiver type."});if(a)throw m({token:r[i].token,errorMessage:"impl supports only a single where(...) clause."});a=r[i],i++}let l=r.slice(i);if(l.length===0)throw m({token:e.token,errorMessage:"impl requires at least one field after the receiver type."});if(!o){let $=x({expr:s,env:t,context:{...n}});if(!$.$||!$.$.value||!R($.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type argument."});t=$.$.env;let C=$.$.value.value,L=je(C)||be(C),{env:b,traitEntries:O}=fu({fieldExprs:l,env:t,context:{...n},receiverType:C});if(t=b,O.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let M of O){let V=M.traitValue,z=V.type;if(M.isAnonymousTrait||gu({targetType:C,traitType:z,env:t,errorToken:e.token}),L){let ee=ua(z),ne={forallParameters:[],whereConstraints:[],receiverTypePattern:C,traitType:z,traitValue:V,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};_u(ee,ne)}else Zd(V,e,n.currentModulePath)}let N=O[0].traitValue;return e.$={env:t,type:N.type,value:N,pathCollection:[]},e}let c=o.args,p=[];t=Ue(t);for(let $ of c){let C,L;if(F($)&&T($,":",2)){let z=$.args[0];if(!U(z))throw m({token:z.token,errorMessage:`Expected identifier for forall parameter name, got: ${k(z)}`});C=z.token.value,L=$.args[1]}else if(U($))C=$.token.value;else throw m({token:$.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${k($)}`});let b;if(L){let z=x({expr:L,env:t,context:{...n}});if(z.$?.env&&(t=z.$.env),!z.$||!z.$.value||!R(z.$.value))throw m({token:L.token,errorMessage:`Expected type for forall parameter type, got: ${k(L)}`});b=z.$.value.value}let O=!b||hl(b),N=b||Je(),M=H(N,{variableName:C,env:t,context:n}),{env:V}=fe({env:t,variable:{name:C,type:N,isCompileTimeOnly:!0,value:[M],token:$.token,initializedAtToken:$.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=V,O){let z=M.value;p.push({kind:"type",name:C,someType:z})}else p.push({kind:"value",name:C,type:N,unknownValue:M})}let f=new Map;if(a)for(let $ of a.args){if(!F($)||!T($,"<:",2))throw m({token:$.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${k($)}`});let C=x({expr:$,env:t,context:{...n,isInsideWhereClause:!0}});C.$?.env&&(t=C.$.env);let L=$.args[0],b=$.args[1],O=x({expr:L,env:t,context:{...n}});if(!O.$||!O.$.value||!R(O.$.value)||!D(O.$.value.value))throw m({token:L.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${k(L)}`});t=O.$.env;let N=[];if(F(b)&&T(b,I.tuple))for(let M of b.args)F(M)&&T(M,"!")&&M.args.length===1?N.push({expr:M.args[0],isNegated:!0}):N.push({expr:M,isNegated:!1});else F(b)&&T(b,"!")&&b.args.length===1?N.push({expr:b.args[0],isNegated:!0}):N.push({expr:b,isNegated:!1});for(let{expr:M}of N){let V=x({expr:M,env:t,context:{...n}});if(!V.$||!V.$.value||!R(V.$.value)||!xe(V.$.value.value))throw m({token:M.token,errorMessage:"Expected trait type for right-hand side expression."});t=V.$.env;let z=V.$.value.value;f.set(z.id,Ve(M))}}let _=[];for(let $ of p){if($.kind!=="type")continue;let{someType:C}=$,L=Nn(t,C);if(L){for(let b of L.requiredTraits)_.push({someType:C,traitType:b,traitExpr:f.get(b.id)});for(let b of L.negativeTraits){let O={...b,isNegatedConstraint:!0};_.push({someType:C,traitType:O,traitExpr:f.get(b.id)})}}}let d=x({expr:s,env:t,context:{...n}});if(!d.$||!d.$.value||!R(d.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=d.$.env;let g=d.$.value.value,{env:h,traitEntries:y}=fu({fieldExprs:l,env:t,context:{...n},receiverType:g});if(t=h,y.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let $ of y){let C=$.traitValue,L=C.type;Xd({receiverTypePattern:g,traitType:L,whereConstraints:_,env:t,errorToken:e.token});let{traitTypeArgExprs:b,traitFunctionParamNames:O}=$.isAnonymousTrait?{}:Gd({traitExpr:$.sourceExpr,traitType:L});v.push({traitType:L,traitValue:C,traitTypeArgExprs:b,traitFunctionParamNames:O})}t=rt(t);for(let $ of v){let C=ua($.traitType),L={forallParameters:p,whereConstraints:_,receiverTypePattern:g,traitType:$.traitType,traitValue:$.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:$.traitTypeArgExprs,traitFunctionParamNames:$.traitFunctionParamNames};_u(C,L)}let E=v[0].traitValue;return e.$={env:t,type:E.type,value:E,pathCollection:[]},e}var Ps=new Set;function vu(e){if(!e||ue(e)&&e.isReferenceSemantics)return!1;switch(e.tag){case"comptime_int":case"comptime_float":case"comptime_string":case"Type":case"Module":case"Trait":case"Expr":case"ComptimeList":return!0;case"Iso":case"Arc":case"Dyn":case"void":case"Union":case"char":case"short":case"ushort":case"int":case"uint":case"long":case"ulong":case"longlong":case"ulonglong":case"longdouble":return!1;case"unit":case"bool":case"usize":case"isize":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"u64":case"i64":case"f32":case"f64":case"Function":return!0}if(We(e))return!0}function Eu(e){if(!e)return!1;if(ue(e)&&e.isReferenceSemantics)return!0;switch(e.tag){case"comptime_int":case"comptime_float":case"comptime_string":case"Type":case"Module":case"Trait":case"Expr":case"ComptimeList":return!1;case"Iso":case"Arc":case"Dyn":case"void":case"char":case"short":case"ushort":case"int":case"uint":case"long":case"ulong":case"longlong":case"ulonglong":case"longdouble":return!0;case"unit":case"bool":case"usize":case"isize":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"u64":case"i64":case"f32":case"f64":case"Function":case"Union":return!0}}function hu(e,t,n){if(!t.associatedTypeConstraints||t.associatedTypeConstraints.length===0)return!0;for(let r of t.associatedTypeConstraints){let i;if(e.trait)for(let o of e.trait.fields){if(o.label===r.label&&o.assignedValue&&R(o.assignedValue)){i=o.assignedValue.value;break}if(o.assignedValue&&dt(o.assignedValue)){let a=o.assignedValue;if(a.type.id===t.id){for(let s=0;s<a.type.fields.length;s++)if(a.type.fields[s].label===r.label){let u=a.fields[s];u&&R(u)&&(i=u.value);break}}if(i)break}}if(!i){let o=pa({concreteType:e,propertyName:r.label,env:n});o&&R(o.value)&&(i=o.value.value)}if(!i||!W({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function Ft({targetType:e,traitType:t,env:n}){let r=Cn(n,"Comptime");if(r&&t.id===r.id){let l=vu(e);if(l!==void 0)return l}let i=Cn(n,"Runtime");if(i&&t.id===i.id){let l=Eu(e);if(l!==void 0)return l}let o={...t,receiverType:e},a=e.trait;if(a)for(let l of a.fields){if(!l.assignedValue||!dt(l.assignedValue))continue;let c=l.assignedValue.type;if(W({type:o,env:n},{type:c,env:n})&&hu(e,t,n))return!0}if(D(e)){let l=!1,u=!1;for(let p of e.requiredTraits)p.traitType.id===t.id&&(l=!0);let c=Nn(n,e);if(c){for(let p of c.requiredTraits)p.id===t.id&&(l=!0);for(let p of c.negativeTraits)p.id===t.id&&(u=!0)}if(e.negativeTraits)for(let p of e.negativeTraits)p.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(D(e)){let l=St(n,e);if(D(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(Ps.has(s))return!1;Ps.add(s);try{return ca({concreteType:e,traitType:t,env:n})===void 0?!1:hu(e,t,n)}finally{Ps.delete(s)}}function gu({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!Ft({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" does not implement required constraint "${i.typeName??A(i)}" from trait "${t.typeName??A(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(Ft({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" implements "${i.typeName??A(i)}" but the trait "${t.typeName??A(t)}"'s where clause requires it to NOT implement this trait.`})}}function On(e,t){let n=vu(e);if(n!==void 0)return n;let r=Cn(t,"Comptime");return r?Ft({targetType:e,traitType:r,env:t}):!1}function cr(e,t){let n=Eu(e);if(n!==void 0)return n;let r=Cn(t,"Runtime");return r?Ft({targetType:e,traitType:r,env:t}):!1}function mo(e,t){if(!e)return!1;let n=Cn(t,"Send");return n?Ft({targetType:e,traitType:n,env:t}):!1}function Br(e,t){if(!e)return!1;let n=Cn(t,"Acyclic");return n?Ft({targetType:e,traitType:n,env:t}):!1}function jr(e,t){return On(e,t)&&!cr(e,t)}function Gt(e){if(!e)return!1;if(D(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(Et(t))return!0}return!1}function jt(e){if(Et(e))return e;if(D(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(Et(t))return t}}function we(e){if(!e)return!1;if(D(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(zt(t))return!0}return!1}function It(e){if(zt(e))return e;if(D(e)||Ne(e)){for(let{traitType:t}of e.requiredTraits)if(zt(t))return t}}function ta(e,t,n,r){if(!Fe(e)&&!On(e,t)&&!cr(e,t))throw m({token:n,errorMessage:`Type ${A(e)} has incompatible field contexts and cannot be used in any evaluation context.
177
177
 
178
178
  This typically happens when a struct/enum/array/tuple contains fields with conflicting availability:
179
179
  - Compile-time only fields (e.g., comptime_int, Type, Module)
180
180
  - Runtime only fields (e.g., *(T), [T], void, C-compatible types)
181
181
 
182
- Consider restructuring the type to avoid mixing incompatible field types.`})}function Xt(e,t=!0,n){switch(e.tag){case"ComptimeInt":case"ComptimeFloat":case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return e;case"Bool":return e;case"Unit":return e;case"ComptimeString":return e;case"Type":return e;case"Function":return e;case"Expr":return e;case"Unknown":return e;case"Ptr":{if(t)return e;let r=e;if(n){let a=n.get(r.targetValue);if(a)return{...r,targetValue:a,targetIndex:r.targetIndex}}let o=[Xt(r.targetValue[0],t,n)];return n&&n.set(r.targetValue,o),{...r,targetValue:o,targetIndex:r.targetIndex}}case"Tuple":{let r=e;return{...r,fields:r.fields.map(i=>Xt(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Xt(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Xt(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Xt(i,t,n))}}case"Slice":{if(t)return e;let r=e;if(n){let a=n.get(r.sourceArray);if(a)return{...r,sourceArray:a}}let o=[Xt(r.sourceArray[0],t,n)];return n&&n.set(r.sourceArray,o),{...r,sourceArray:o}}case"ComptimeList":{let r=e;return{...r,elements:r.elements.map(i=>Xt(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Xt(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Xt(i,t,n):void 0)}}default:return e}}function Ps({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function tt(){let e=Ps({modulePath:"",inputString:""});return ze(e)}function Us(e){let t=new Map,n=[...e.frames.flatMap(o=>o.variables)];for(let o of n)if(o.value&&!t.has(o.value)){let a=Xt(o.value[0],!1,t);t.has(o.value)||t.set(o.value,[a])}let r=o=>{if(!o.value)return{...o};let a=t.get(o.value);if(a)return{...o,value:a};let s=Xt(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:Xd(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function Xd(e){let t=new Map;for(let[n,r]of e)t.set(n,{someType:r.someType,requiredTraits:[...r.requiredTraits],negativeTraits:[...r.negativeTraits]});return t}function Un({env:e,someType:t,traitType:n,isNegated:r}){let i=e.frames.length-1,o=e.frames[i];if(!o)return e;let a=t.id,s=o.whereClauseConstraints.get(a);s||(s={someType:t,requiredTraits:[],negativeTraits:[]},o.whereClauseConstraints.set(a,s));let l=r?s.negativeTraits:s.requiredTraits;return l.some(u=>u.id===n.id)||l.push(n),e}function Nn(e,t){let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let l of e.frames)for(let u of l.variables){let c=u.value?.[0];R(c)&&M(c.value)&&c.value.id===t.id&&s.add(u.name)}for(let l of e.frames)for(let u of l.whereClauseConstraints.values())if(!(u.someType.id!==t.id&&!s.has(u.someType.name))){a=!0;for(let c of u.requiredTraits)i.has(c.id)||(i.add(c.id),n.push(c));for(let c of u.negativeTraits)o.has(c.id)||(o.add(c.id),r.push(c))}if(a)return{requiredTraits:n,negativeTraits:r}}var vu=null;function Eu(e){vu=e}function Tu(){vu=null}var Qd="__yo_self";function _e({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0);if(i){let _=em(e);_>=0&&(a=_)}if(t.name!==Qd){let _=j(e,t.name);if(_.length>0&&!o){let d=_[_.length-1];throw nt([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:d.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=Qe(e.modulePath,t.name)?t.name:r??Gr(e.modulePath,t.name),u={...t,frameLevel:a,id:l},c=Zd({frame:s,variable:u}),p=e.frames.slice();return p[a]=c,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:p,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function Zd({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw nt([{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,whereClauseConstraints:new Map(e.whereClauseConstraints)}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:new Map(e.whereClauseConstraints)}}function Jd(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function j(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=Jd(o,t,n);r.push(...a)}return n?r.filter(n):r}function er(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let o=e.frames[r].variables.filter(t);n.push(...o)}return n}function $u(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function ze(e,t={id:Gr(e.modulePath,"frame"),variables:[],isBeginBlockFrame:!1,whereClauseConstraints:new Map},n){let r=n?{...t,isBeginBlockFrame:!0}:t;return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:[...e.frames,r],modulePath:e.modulePath,inputString:e.inputString}}function rt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=Ni(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw nt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
183
- Typeof "${a.name}": ${A(a.type)}`})));if(o.length>0)throw nt(o.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function Ue(e,t,n){let r=e.frames.map(i=>{let o=i.variables.map(a=>a.id===t.id?n:a);return{...i,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function Cu(e){return{id:e.id,name:e.name,type:A(e.type),typeId:e.type.id,value:Se(e.value?.[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:e.isOwningTheSameRcValueAs?.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function bu({env:e,context:t,methodName:n,type:r}){let i=[];if(!r.trait)return i;let o=r.trait.fields.find(a=>a.label===n&&H(a.type));if(o&&H(o.type)){let a=o.assignedValue;fe(a)&&(a=q(o.type,{variableName:o.label,env:e,context:t})),i.push({type:o.type,value:a})}for(let a of r.trait.fields)if(a.label===""&&a.assignedValue&&mt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&H(c.type));if(u>=0){let c=l.fields[u];if(H(c.type)){let p=s.fields[u],f=c.type;ie(p)&&p.specializedType&&(f=p.specializedType),i.push({type:f,value:p})}}}if(i.length===0){let a=Jn({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function zs({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){let o=[],a=r;for(;Ie(a);)a=a.childType;function s(f,_){let d=f.fields.find(g=>g.label===n&&(H(g.type)||xe(g.type)));if(d){let g;if(H(d.type)){if(fe(_))g=q(d.type,{variableName:d.label,env:e,context:t});else if(mt(_)){let h=f.fields.findIndex(y=>y.label===d.label);g=_.fields[h]}o.push({type:d.type,value:g})}else if(Fe(d.type)){let h=d.assignedValue;ft(h)&&l(h)}}if(!d)for(let g of f.fields)xe(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}function l(f){let _=f.type.fields.findIndex(d=>d.label==="Call");if(_>=0){let d=f.type.fields[_];if(d.assignedValue){let g=d.assignedValue;sn(g)?g.fields.forEach(h=>{o.push({type:h.type,value:h})}):o.push({type:g.type,value:g})}}}function u(f){return f.filter(d=>{if(H(d.type)){if(d.type.parameters.length===0)return!1;let h=d.type.parameters[0].type;if(!i&&Ie(h)){let v=h.childType,E=r;if((pt(r)||Ft(r)||$t(r))&&(E=ut({type:r,expectedType:void 0,expr:void 0,env:e})),W({type:v,env:d.type.env},{type:E,env:e},!0))return d.needsPointerConversion=!0,!0}if(Ae(h)||Ae(h)&&!Ae(r)||M(r)&&r.resolvedConcreteType&&!we(r)&&!Ae(h)&&W({type:h,env:d.type.env},{type:r.resolvedConcreteType,env:e},!0))return!0;if(!Ae(h)&&Ae(r))return!1;if(pt(r)||Ft(r)||$t(r)){let v=ut({type:r,expectedType:void 0,expr:void 0,env:e});if(W({type:h,env:d.type.env},{type:v,env:e},!0))return!0}if(Ne(r)&&d.value===void 0){if(d.type.parameters.length>0&&d.type.SelfType){let E=d.type.parameters[0];if(E){let $=E.type;if(!dt($)&&!Ne($)&&!Ie($))return!1}}let v=d.type.return.type;if(qn(v,d.type.SelfType))return!1}return W({type:h,env:d.type.env},{type:r,env:e},!0)}return!0})}function c(f,_,d=new Set){if(d.has(f.id))return;d.add(f.id);let g=f.fields.find(h=>h.label===_&&H(h.type));if(g&&H(g.type)){let h=g.assignedValue;fe(h)&&(h=q(g.type,{variableName:g.label,env:e,context:t})),o.push({type:g.type,value:h});return}for(let h of f.fields)xe(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}if(r!==a&&r.trait){let f=r.trait.fields.find(_=>_.label===n&&H(_.type));if(f&&H(f.type)){let _=f.assignedValue;fe(_)&&(_=q(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:_})}else c(r.trait,n);for(let _ of r.trait.fields)if(_.label===""&&_.assignedValue&&mt(_.assignedValue)){let d=_.assignedValue,g=d.type,h=g.fields.findIndex(y=>y.label===n&&H(y.type));if(h>=0){let y=g.fields[h];if(H(y.type)){let v=d.fields[h],E=y.type;ie(v)&&v.specializedType&&(E=v.specializedType),o.push({type:E,value:v})}}}}if(o.length===0&&r!==a){let f=Jn({concreteType:r,methodName:n,env:e});o.push(...f)}let p=M(a)&&a.resolvedConcreteType&&!we(a);if(a.trait&&!Ne(a)&&!p){let f=a.trait.fields.find(_=>_.label===n&&(H(_.type)||Fe(_.type)));if(f&&H(f.type)){let _=f.assignedValue;fe(_)&&(_=q(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:_})}else if(f&&Fe(f.type)){let _=f.assignedValue;ft(_)&&l(_)}else c(a.trait,n);for(let _ of a.trait.fields)if(_.label===""&&_.assignedValue&&mt(_.assignedValue)){let d=_.assignedValue,g=d.type,h=g.fields.findIndex(y=>y.label===n&&H(y.type));if(h>=0){let y=g.fields[h];if(H(y.type)){let v=d.fields[h],E=y.type;ie(v)&&v.specializedType&&(E=v.specializedType),o.push({type:E,value:v})}}}if(o.length===0){let _=Jn({concreteType:a,methodName:n,env:e});o.push(..._)}}if(pt(a)||Ft(a)||$t(a)){let f=ut({type:a,expectedType:void 0,expr:void 0,env:e});if(f.trait){let _=f.trait.fields.find(d=>d.label===n&&H(d.type));if(_&&H(_.type)){let d=_.assignedValue;fe(d)&&(d=q(_.type,{variableName:_.label,env:e,context:t})),o.push({type:_.type,value:d})}else c(f.trait,n);for(let d of f.trait.fields)if(d.label===""&&d.assignedValue&&mt(d.assignedValue)){let g=d.assignedValue,h=g.type,y=h.fields.findIndex(v=>v.label===n&&H(v.type));if(y>=0){let v=h.fields[y];if(H(v.type)){let E=g.fields[y],$=v.type;ie(E)&&E.specializedType&&($=E.specializedType),o.push({type:$,value:E})}}}if(o.length===0){let d=Jn({concreteType:f,methodName:n,env:e});o.push(...d)}}}if(M(a)){if(a.resolvedConcreteType?.trait&&!we(a)){let f=a.resolvedConcreteType,_=f.trait,d=_?.fields.find(g=>g.label===n&&H(g.type));if(d&&H(d.type)){let g=d.assignedValue||q(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:g})}if(o.length===0){for(let g of _?.fields??[])if(g.label===""&&g.assignedValue&&mt(g.assignedValue)){let h=g.assignedValue,y=h.type,v=y.fields.findIndex(E=>E.label===n&&H(E.type));if(v>=0){let E=y.fields[v];if(H(E.type)){let $=h.fields[v],C=E.type;ie($)&&$.specializedType&&(C=$.specializedType),o.push({type:C,value:$});break}}}}if(o.length===0){let g=Jn({concreteType:f,methodName:n,env:e});o.push(...g)}}if(!(o.length>0)){let f=[],_=new Set;for(let g of a.requiredTraits??[])_.has(g.traitType.id)||(_.add(g.traitType.id),f.push(g.traitType));let d=Nn(e,a);if(d)for(let g of d.requiredTraits)_.has(g.id)||(_.add(g.id),f.push(g));if(M(a))for(let g=e.frames.length-1;g>=0;g--){let h=e.frames[g];for(let y of h.whereClauseConstraints.values())if(W({type:y.someType,env:e},{type:a,env:e},!1))for(let v of y.requiredTraits)_.has(v.id)||(_.add(v.id),f.push(v))}for(let g of f){let h=g.fields.find(y=>y.label===n&&H(y.type));if(h&&H(h.type)){let y={...h.type,SelfType:a},v=!1;if(y.parameters.length>0&&Ie(y.parameters[0].type)){let $=y.parameters[0].type.childType;(M($)&&$.name==="Self"||W({type:$,env:y.env},{type:r,env:e},!0))&&(v=!0)}let E=q(y,{variableName:h.label,env:e,context:t});o.push({type:y,value:E,needsPointerConversion:v})}}if(o.length===0){for(let g of a.trait.fields)if(g.label===""&&g.assignedValue&&R(g.assignedValue)&&xe(g.assignedValue.value)){let y=g.assignedValue.value.fields.find(v=>v.label===n&&H(v.type));if(y&&H(y.type)){let v=q(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:v})}}}}}if(Ne(a)){let f=a.trait.fields.find(d=>d.label===n&&(H(d.type)||xe(d.type)));if(f&&H(f.type)){let d=f.assignedValue||q(f.type,{variableName:f.label,env:e,context:t});o.push({type:f.type,value:d})}let _=a.requiredTraits;for(let{traitType:d}of _){let g=d.fields.find(h=>h.label===n&&(H(h.type)||xe(h.type)));g&&H(g.type)&&g.type.parameters.length>0&&(Ae(g.type.parameters[0].type)||Ae(r)||W({type:g.type.parameters[0].type,env:g.type.env},{type:r,env:e},!0))&&o.push({type:g.type,value:void 0})}}return o.length>0,u(o)}function ku(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function pa(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let i=n.variables.filter(o=>!(!o.isCompileTimeOnly||o.isImplicit));return{...n,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Ni(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Te(r.type))return!1;let i=r.type;return!(M(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function em(e){for(let t=e.frames.length-1;t>=0;t--)if(e.frames[t]?.isBeginBlockFrame)return t;return-1}var rm=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function im(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var bo=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1}){if(this.modulePath=t,this.allowPartialModule=o,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??tm(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new ui({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(a){throw new Error(`Failed to import module "${t}":
184
- ${a instanceof rn||a instanceof Tn?a.toString():a instanceof Error?a.message:String(a)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=Ps({modulePath:this.modulePath,inputString:this.inputString});if(!im(this.tokens,"@skip_prelude")&&!rm){let l="file://"+nm.join(t,"prelude.yo"),{moduleValue:u,moduleError:c}=n(l);if(c)throw c;if(u&&Fe(u.type)){r=ze(r);for(let p=0;p<u.type.fields.length;p++){let f=u.type.fields[p],_=u.fields[p],{env:d}=_e({env:r,variable:{name:f.label,type:f.type,value:_?[_]:void 0,isCompileTimeOnly:!0,initializedAtToken:f.exprs.labelExpr?.token??f.exprs.expr.token,consumedAtToken:void 0,token:f.exprs.labelExpr?.token??f.exprs.expr.token,isOwningTheRcValue:!1}});r=d}}Eu(r)}let{moduleValue:o,env:a,partialModuleError:s}=la({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:this.allowPartialModule});r=a,this.moduleValue=o,this.moduleError=s}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};function yE(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as Oy}from"fs";import*as Oo from"path";function wu(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 Fu(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("#else"),e.emitter.emitHeaderLine("#ifndef WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#define WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#ifndef _WINSOCKAPI_"),e.emitter.emitHeaderLine("#define _WINSOCKAPI_"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("");for(let t of e.cIncludes)e.emitter.emitHeaderLine(`#include ${t}`);e.emitter.emitHeaderLine("#ifdef _WIN32"),e.emitter.emitHeaderLine(" #include <windows.h>"),e.emitter.emitHeaderLine(" #include <bcrypt.h>"),e.emitter.emitHeaderLine(" #include <io.h>"),e.emitter.emitHeaderLine(" #include <sys/stat.h>"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" #include <unistd.h>"),e.emitter.emitHeaderLine(" #include <sys/stat.h>"),e.emitter.emitHeaderLine(" #include <sys/random.h>"),e.emitter.emitHeaderLine("#endif"),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("")}function fr(e){let{emitter:t,indent:n,resultCode:r,debugLabel:i}=e;r!==void 0&&t.emitLine(`${n}sm->result = ${r};`),i&&t.emitLine(`${n}ASYNC_DEBUG("${i}: Setting state to COMPLETED\\n");`),t.emitLine(`${n}sm->state = -1; // -1 = completed`),t.emitLine(""),t.emitLine(`${n}void (*continuation_fn)(void*) = (void (*)(void*))sm->continuation_fn;`),t.emitLine(`${n}void* continuation_sm = sm->continuation_sm;`),t.emitLine(""),t.emitLine(`${n}if (continuation_fn != NULL) {`),i&&t.emitLine(`${n} ASYNC_DEBUG("${i}: Spawning continuation: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),t.emitLine(""),t.emitLine(`${n} sm->continuation_fn = NULL;`),t.emitLine(`${n} sm->continuation_sm = NULL;`),t.emitLine(""),t.emitLine(`${n} yo_async_spawn_task(continuation_fn, continuation_sm);`),t.emitLine(`${n}}`),t.emitLine(""),t.emitLine(`${n}__yo_decr_rc((void*)sm);`),t.emitLine(""),t.emitLine(`${n}return;`)}function Lu(e){let{emitter:t,indent:n,resultCode:r,debugLabel:i}=e;r!==void 0&&t.emitLine(`${n}sm->result = ${r};`),i&&t.emitLine(`${n}ASYNC_DEBUG("${i}: Setting state to ESCAPED (effect handler escape)\\n");`),t.emitLine(`${n}sm->state = -2; // -2 = escaped`),t.emitLine(""),t.emitLine(`${n}void (*continuation_fn)(void*) = (void (*)(void*))sm->continuation_fn;`),t.emitLine(`${n}void* continuation_sm = sm->continuation_sm;`),t.emitLine(""),t.emitLine(`${n}if (continuation_fn != NULL) {`),i&&t.emitLine(`${n} ASYNC_DEBUG("${i}: Spawning continuation for escaped future: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),t.emitLine(""),t.emitLine(`${n} sm->continuation_fn = NULL;`),t.emitLine(`${n} sm->continuation_sm = NULL;`),t.emitLine(""),t.emitLine(`${n} yo_async_spawn_task(continuation_fn, continuation_sm);`),t.emitLine(`${n}}`),t.emitLine(""),t.emitLine(`${n}__yo_decr_rc((void*)sm);`),t.emitLine(""),t.emitLine(`${n}return;`)}var ei=[...w.__yo_op_add,...w.__yo_op_sub,...w.__yo_op_mul,...w.__yo_op_div,...w.__yo_op_mod,...w.__yo_op_neg,...w.__yo_op_eq,...w.__yo_op_neq,...w.__yo_op_lt,...w.__yo_op_lte,...w.__yo_op_gt,...w.__yo_op_gte,...w.__yo_op_not,...w.__yo_op_bit_and,...w.__yo_op_bit_or,...w.__yo_op_bit_xor,...w.__yo_op_bit_complement,...w.__yo_op_bit_left_shift,...w.__yo_op_bit_right_shift,...w.__yo_ptr_add,...w.__yo_ptr_sub,...w.__yo_ptr_diff,...w.__yo_ptr_eq,...w.__yo_ptr_neq,...w.__yo_ptr_lt,...w.__yo_ptr_lte,...w.__yo_ptr_gt,...w.__yo_ptr_gte,...w.__yo_slice_len,...w.__yo_slice_new,...w.__yo_as,...w.__yo_getrandom,...w.__yo_arc4random_buf,...w.__yo_bcrypt_gen_random,...w.__yo_maybe_uninit_new,...w.__yo_maybe_uninit_as_ptr,...w.__yo_maybe_uninit_assume_init,...w.__yo_noop,...w.__yo_return_self,...w.__yo_ms_sleep],Au=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 K(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,i=>`_u${i.charCodeAt(0)}_`);return!t&&n.has(r)&&(r="__yo_c_reserved_"+r),r}function P(e,t){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"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_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 i=Kt(e);if(i)return P(i,t)}let n;switch(e.tag){case"Tuple":n="tuple";break;case"Struct":n="struct";break;case"Union":n="union";break;case"Enum":n="enum";break;default:throw new Error("Unreachable")}let r=t.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for ${n} ${A(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&ue(e)&&e.isReferenceSemantics?`${r}*`:r}case"Function":return"void*";case"Dyn":{let n=t.types[e.id]?.cName;if(!n)throw new Error(`No C type name found for dynamic dispatch type ${A(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(Oe(i)){let o=P(r,t),a=`Array_${K(o)}_${i.value}`;return t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),a}break}case"Slice":{let n=e,i=`Slice_${K(P(n.childType,t))}`;return t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:P(n.childType,t)}),i}case"SomeType":{let n=e;if(we(n)){if(n.resolvedConcreteType?.isExtern)return`${P(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&M(n.resolvedConcreteType)&&we(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&ue(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(M(s.type)&&we(s.type)&&s.type.resolvedConcreteType&&ue(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=At(n);if(i){let o=t.types[i.id]?.cName;if(o)return`${o}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${n.id}, FutureModule: ${i?.id??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
182
+ Consider restructuring the type to avoid mixing incompatible field types.`})}function Xt(e,t=!0,n){switch(e.tag){case"ComptimeInt":case"ComptimeFloat":case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return e;case"Bool":return e;case"Unit":return e;case"ComptimeString":return e;case"Type":return e;case"Function":return e;case"Expr":return e;case"Unknown":return e;case"Ptr":{if(t)return e;let r=e;if(n){let a=n.get(r.targetValue);if(a)return{...r,targetValue:a,targetIndex:r.targetIndex}}let o=[Xt(r.targetValue[0],t,n)];return n&&n.set(r.targetValue,o),{...r,targetValue:o,targetIndex:r.targetIndex}}case"Tuple":{let r=e;return{...r,fields:r.fields.map(i=>Xt(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Xt(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Xt(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Xt(i,t,n))}}case"Slice":{if(t)return e;let r=e;if(n){let a=n.get(r.sourceArray);if(a)return{...r,sourceArray:a}}let o=[Xt(r.sourceArray[0],t,n)];return n&&n.set(r.sourceArray,o),{...r,sourceArray:o}}case"ComptimeList":{let r=e;return{...r,elements:r.elements.map(i=>Xt(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Xt(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Xt(i,t,n):void 0)}}default:return e}}function Us({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function tt(){let e=Us({modulePath:"",inputString:""});return Ue(e)}function zs(e){let t=new Map,n=[...e.frames.flatMap(o=>o.variables)];for(let o of n)if(o.value&&!t.has(o.value)){let a=Xt(o.value[0],!1,t);t.has(o.value)||t.set(o.value,[a])}let r=o=>{if(!o.value)return{...o};let a=t.get(o.value);if(a)return{...o,value:a};let s=Xt(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:Jd(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function Jd(e){let t=new Map;for(let[n,r]of e)t.set(n,{someType:r.someType,requiredTraits:[...r.requiredTraits],negativeTraits:[...r.negativeTraits]});return t}function Un({env:e,someType:t,traitType:n,isNegated:r}){let i=e.frames.length-1,o=e.frames[i];if(!o)return e;let a=t.id,s=o.whereClauseConstraints.get(a);s||(s={someType:t,requiredTraits:[],negativeTraits:[]},o.whereClauseConstraints.set(a,s));let l=r?s.negativeTraits:s.requiredTraits;return l.some(u=>u.id===n.id)||l.push(n),e}function Nn(e,t){let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let l of e.frames)for(let u of l.variables){let c=u.value?.[0];R(c)&&D(c.value)&&c.value.id===t.id&&s.add(u.name)}for(let l of e.frames)for(let u of l.whereClauseConstraints.values())if(!(u.someType.id!==t.id&&!s.has(u.someType.name))){a=!0;for(let c of u.requiredTraits)i.has(c.id)||(i.add(c.id),n.push(c));for(let c of u.negativeTraits)o.has(c.id)||(o.add(c.id),r.push(c))}if(a)return{requiredTraits:n,negativeTraits:r}}var Tu=null;function $u(e){Tu=e}function Cu(){Tu=null}var em="__yo_self";function fe({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0);if(i){let _=rm(e);_>=0&&(a=_)}if(t.name!==em){let _=j(e,t.name);if(_.length>0&&!o){let d=_[_.length-1];throw nt([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:d.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=Qe(e.modulePath,t.name)?t.name:r??Gr(e.modulePath,t.name),u={...t,frameLevel:a,id:l},c=tm({frame:s,variable:u}),p=e.frames.slice();return p[a]=c,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:p,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function tm({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw nt([{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,whereClauseConstraints:new Map(e.whereClauseConstraints)}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:new Map(e.whereClauseConstraints)}}function nm(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function j(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=nm(o,t,n);r.push(...a)}return n?r.filter(n):r}function tr(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let o=e.frames[r].variables.filter(t);n.push(...o)}return n}function bu(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function Ue(e,t={id:Gr(e.modulePath,"frame"),variables:[],isBeginBlockFrame:!1,whereClauseConstraints:new Map},n){let r=n?{...t,isBeginBlockFrame:!0}:t;return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:[...e.frames,r],modulePath:e.modulePath,inputString:e.inputString}}function rt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=Ni(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw nt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
183
+ Typeof "${a.name}": ${A(a.type)}`})));if(o.length>0)throw nt(o.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function ze(e,t,n){let r=e.frames.map(i=>{let o=i.variables.map(a=>a.id===t.id?n:a);return{...i,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function ku(e){return{id:e.id,name:e.name,type:A(e.type),typeId:e.type.id,value:Se(e.value?.[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:e.isOwningTheSameRcValueAs?.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function wu({env:e,context:t,methodName:n,type:r}){let i=[];if(!r.trait)return i;let o=r.trait.fields.find(a=>a.label===n&&q(a.type));if(o&&q(o.type)){let a=o.assignedValue;_e(a)&&(a=H(o.type,{variableName:o.label,env:e,context:t})),i.push({type:o.type,value:a})}for(let a of r.trait.fields)if(a.label===""&&a.assignedValue&&dt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&q(c.type));if(u>=0){let c=l.fields[u];if(q(c.type)){let p=s.fields[u],f=c.type;ie(p)&&p.specializedType&&(f=p.specializedType),i.push({type:f,value:p})}}}if(i.length===0){let a=er({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Bs({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){let o=[],a=r;for(;Ie(a);)a=a.childType;function s(f,_){let d=f.fields.find(g=>g.label===n&&(q(g.type)||xe(g.type)));if(d){let g;if(q(d.type)){if(_e(_))g=H(d.type,{variableName:d.label,env:e,context:t});else if(dt(_)){let h=f.fields.findIndex(y=>y.label===d.label);g=_.fields[h]}o.push({type:d.type,value:g})}else if(Le(d.type)){let h=d.assignedValue;ft(h)&&l(h)}}if(!d)for(let g of f.fields)xe(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}function l(f){let _=f.type.fields.findIndex(d=>d.label==="Call");if(_>=0){let d=f.type.fields[_];if(d.assignedValue){let g=d.assignedValue;sn(g)?g.fields.forEach(h=>{o.push({type:h.type,value:h})}):o.push({type:g.type,value:g})}}}function u(f){return f.filter(d=>{if(q(d.type)){if(d.type.parameters.length===0)return!1;let h=d.type.parameters[0].type;if(!i&&Ie(h)){let v=h.childType,E=r;if((pt(r)||Lt(r)||$t(r))&&(E=ut({type:r,expectedType:void 0,expr:void 0,env:e})),W({type:v,env:d.type.env},{type:E,env:e},!0))return d.needsPointerConversion=!0,!0}if(Fe(h)||Fe(h)&&!Fe(r)||D(r)&&r.resolvedConcreteType&&!we(r)&&!Fe(h)&&W({type:h,env:d.type.env},{type:r.resolvedConcreteType,env:e},!0))return!0;if(!Fe(h)&&Fe(r))return!1;if(pt(r)||Lt(r)||$t(r)){let v=ut({type:r,expectedType:void 0,expr:void 0,env:e});if(W({type:h,env:d.type.env},{type:v,env:e},!0))return!0}if(Ne(r)&&d.value===void 0){if(d.type.parameters.length>0&&d.type.SelfType){let E=d.type.parameters[0];if(E){let $=E.type;if(!mt($)&&!Ne($)&&!Ie($))return!1}}let v=d.type.return.type;if(Hn(v,d.type.SelfType))return!1}return W({type:h,env:d.type.env},{type:r,env:e},!0)}return!0})}function c(f,_,d=new Set){if(d.has(f.id))return;d.add(f.id);let g=f.fields.find(h=>h.label===_&&q(h.type));if(g&&q(g.type)){let h=g.assignedValue;_e(h)&&(h=H(g.type,{variableName:g.label,env:e,context:t})),o.push({type:g.type,value:h});return}for(let h of f.fields)xe(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}if(r!==a&&r.trait){let f=r.trait.fields.find(_=>_.label===n&&q(_.type));if(f&&q(f.type)){let _=f.assignedValue;_e(_)&&(_=H(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:_})}else c(r.trait,n);for(let _ of r.trait.fields)if(_.label===""&&_.assignedValue&&dt(_.assignedValue)){let d=_.assignedValue,g=d.type,h=g.fields.findIndex(y=>y.label===n&&q(y.type));if(h>=0){let y=g.fields[h];if(q(y.type)){let v=d.fields[h],E=y.type;ie(v)&&v.specializedType&&(E=v.specializedType),o.push({type:E,value:v})}}}}if(o.length===0&&r!==a){let f=er({concreteType:r,methodName:n,env:e});o.push(...f)}let p=D(a)&&a.resolvedConcreteType&&!we(a);if(a.trait&&!Ne(a)&&!p){let f=a.trait.fields.find(_=>_.label===n&&(q(_.type)||Le(_.type)));if(f&&q(f.type)){let _=f.assignedValue;_e(_)&&(_=H(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:_})}else if(f&&Le(f.type)){let _=f.assignedValue;ft(_)&&l(_)}else c(a.trait,n);for(let _ of a.trait.fields)if(_.label===""&&_.assignedValue&&dt(_.assignedValue)){let d=_.assignedValue,g=d.type,h=g.fields.findIndex(y=>y.label===n&&q(y.type));if(h>=0){let y=g.fields[h];if(q(y.type)){let v=d.fields[h],E=y.type;ie(v)&&v.specializedType&&(E=v.specializedType),o.push({type:E,value:v})}}}if(o.length===0){let _=er({concreteType:a,methodName:n,env:e});o.push(..._)}}if(pt(a)||Lt(a)||$t(a)){let f=ut({type:a,expectedType:void 0,expr:void 0,env:e});if(f.trait){let _=f.trait.fields.find(d=>d.label===n&&q(d.type));if(_&&q(_.type)){let d=_.assignedValue;_e(d)&&(d=H(_.type,{variableName:_.label,env:e,context:t})),o.push({type:_.type,value:d})}else c(f.trait,n);for(let d of f.trait.fields)if(d.label===""&&d.assignedValue&&dt(d.assignedValue)){let g=d.assignedValue,h=g.type,y=h.fields.findIndex(v=>v.label===n&&q(v.type));if(y>=0){let v=h.fields[y];if(q(v.type)){let E=g.fields[y],$=v.type;ie(E)&&E.specializedType&&($=E.specializedType),o.push({type:$,value:E})}}}if(o.length===0){let d=er({concreteType:f,methodName:n,env:e});o.push(...d)}}}if(D(a)){if(a.resolvedConcreteType?.trait&&!we(a)){let f=a.resolvedConcreteType,_=f.trait,d=_?.fields.find(g=>g.label===n&&q(g.type));if(d&&q(d.type)){let g=d.assignedValue||H(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:g})}if(o.length===0){for(let g of _?.fields??[])if(g.label===""&&g.assignedValue&&dt(g.assignedValue)){let h=g.assignedValue,y=h.type,v=y.fields.findIndex(E=>E.label===n&&q(E.type));if(v>=0){let E=y.fields[v];if(q(E.type)){let $=h.fields[v],C=E.type;ie($)&&$.specializedType&&(C=$.specializedType),o.push({type:C,value:$});break}}}}if(o.length===0){let g=er({concreteType:f,methodName:n,env:e});o.push(...g)}}if(!(o.length>0)){let f=[],_=new Set;for(let g of a.requiredTraits??[])_.has(g.traitType.id)||(_.add(g.traitType.id),f.push(g.traitType));let d=Nn(e,a);if(d)for(let g of d.requiredTraits)_.has(g.id)||(_.add(g.id),f.push(g));if(D(a))for(let g=e.frames.length-1;g>=0;g--){let h=e.frames[g];for(let y of h.whereClauseConstraints.values())if(W({type:y.someType,env:e},{type:a,env:e},!1))for(let v of y.requiredTraits)_.has(v.id)||(_.add(v.id),f.push(v))}for(let g of f){let h=g.fields.find(y=>y.label===n&&q(y.type));if(h&&q(h.type)){let y={...h.type,SelfType:a},v=!1;if(y.parameters.length>0&&Ie(y.parameters[0].type)){let $=y.parameters[0].type.childType;(D($)&&$.name==="Self"||W({type:$,env:y.env},{type:r,env:e},!0))&&(v=!0)}let E=H(y,{variableName:h.label,env:e,context:t});o.push({type:y,value:E,needsPointerConversion:v})}}if(o.length===0){for(let g of a.trait.fields)if(g.label===""&&g.assignedValue&&R(g.assignedValue)&&xe(g.assignedValue.value)){let y=g.assignedValue.value.fields.find(v=>v.label===n&&q(v.type));if(y&&q(y.type)){let v=H(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:v})}}}}}if(Ne(a)){let f=a.trait.fields.find(d=>d.label===n&&(q(d.type)||xe(d.type)));if(f&&q(f.type)){let d=f.assignedValue||H(f.type,{variableName:f.label,env:e,context:t});o.push({type:f.type,value:d})}let _=a.requiredTraits;for(let{traitType:d}of _){let g=d.fields.find(h=>h.label===n&&(q(h.type)||xe(h.type)));g&&q(g.type)&&g.type.parameters.length>0&&(Fe(g.type.parameters[0].type)||Fe(r)||W({type:g.type.parameters[0].type,env:g.type.env},{type:r,env:e},!0))&&o.push({type:g.type,value:void 0})}}return o.length>0,u(o)}function Fu(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function _a(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let i=n.variables.filter(o=>!(!o.isCompileTimeOnly||o.isImplicit));return{...n,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Ni(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Te(r.type))return!1;let i=r.type;return!(D(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function rm(e){for(let t=e.frames.length-1;t>=0;t--)if(e.frames[t]?.isBeginBlockFrame)return t;return-1}var am=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function sm(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var bo=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1}){if(this.modulePath=t,this.allowPartialModule=o,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??im(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new ui({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(a){throw new Error(`Failed to import module "${t}":
184
+ ${a instanceof rn||a instanceof Tn?a.toString():a instanceof Error?a.message:String(a)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=Us({modulePath:this.modulePath,inputString:this.inputString});if(!sm(this.tokens,"@skip_prelude")&&!am){let l="file://"+om.join(t,"prelude.yo"),{moduleValue:u,moduleError:c}=n(l);if(c)throw c;if(u&&Le(u.type)){r=Ue(r);for(let p=0;p<u.type.fields.length;p++){let f=u.type.fields[p],_=u.fields[p],{env:d}=fe({env:r,variable:{name:f.label,type:f.type,value:_?[_]:void 0,isCompileTimeOnly:!0,initializedAtToken:f.exprs.labelExpr?.token??f.exprs.expr.token,consumedAtToken:void 0,token:f.exprs.labelExpr?.token??f.exprs.expr.token,isOwningTheRcValue:!1}});r=d}}$u(r)}let{moduleValue:o,env:a,partialModuleError:s}=la({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:this.allowPartialModule});r=a,this.moduleValue=o,this.moduleError=s}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};function vE(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as Uy}from"fs";import*as Oo from"path";function Lu(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 Au(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("#else"),e.emitter.emitHeaderLine("#ifndef WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#define WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#ifndef _WINSOCKAPI_"),e.emitter.emitHeaderLine("#define _WINSOCKAPI_"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("");for(let t of e.cIncludes)e.emitter.emitHeaderLine(`#include ${t}`);e.emitter.emitHeaderLine("#ifdef _WIN32"),e.emitter.emitHeaderLine(" #include <windows.h>"),e.emitter.emitHeaderLine(" #include <bcrypt.h>"),e.emitter.emitHeaderLine(" #include <io.h>"),e.emitter.emitHeaderLine(" #include <sys/stat.h>"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" #include <unistd.h>"),e.emitter.emitHeaderLine(" #include <sys/stat.h>"),e.emitter.emitHeaderLine(" #include <sys/random.h>"),e.emitter.emitHeaderLine("#endif"),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("")}function fr(e){let{emitter:t,indent:n,resultCode:r,debugLabel:i}=e;r!==void 0&&t.emitLine(`${n}sm->result = ${r};`),i&&t.emitLine(`${n}ASYNC_DEBUG("${i}: Setting state to COMPLETED\\n");`),t.emitLine(`${n}sm->state = -1; // -1 = completed`),t.emitLine(""),t.emitLine(`${n}void (*continuation_fn)(void*) = (void (*)(void*))sm->continuation_fn;`),t.emitLine(`${n}void* continuation_sm = sm->continuation_sm;`),t.emitLine(""),t.emitLine(`${n}if (continuation_fn != NULL) {`),i&&t.emitLine(`${n} ASYNC_DEBUG("${i}: Spawning continuation: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),t.emitLine(""),t.emitLine(`${n} sm->continuation_fn = NULL;`),t.emitLine(`${n} sm->continuation_sm = NULL;`),t.emitLine(""),t.emitLine(`${n} yo_async_spawn_task(continuation_fn, continuation_sm);`),t.emitLine(`${n}}`),t.emitLine(""),t.emitLine(`${n}__yo_decr_rc((void*)sm);`),t.emitLine(""),t.emitLine(`${n}return;`)}function Iu(e){let{emitter:t,indent:n,resultCode:r,debugLabel:i}=e;r!==void 0&&t.emitLine(`${n}sm->result = ${r};`),i&&t.emitLine(`${n}ASYNC_DEBUG("${i}: Setting state to ESCAPED (effect handler escape)\\n");`),t.emitLine(`${n}sm->state = -2; // -2 = escaped`),t.emitLine(""),t.emitLine(`${n}void (*continuation_fn)(void*) = (void (*)(void*))sm->continuation_fn;`),t.emitLine(`${n}void* continuation_sm = sm->continuation_sm;`),t.emitLine(""),t.emitLine(`${n}if (continuation_fn != NULL) {`),i&&t.emitLine(`${n} ASYNC_DEBUG("${i}: Spawning continuation for escaped future: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),t.emitLine(""),t.emitLine(`${n} sm->continuation_fn = NULL;`),t.emitLine(`${n} sm->continuation_sm = NULL;`),t.emitLine(""),t.emitLine(`${n} yo_async_spawn_task(continuation_fn, continuation_sm);`),t.emitLine(`${n}}`),t.emitLine(""),t.emitLine(`${n}__yo_decr_rc((void*)sm);`),t.emitLine(""),t.emitLine(`${n}return;`)}var ei=[...w.__yo_op_add,...w.__yo_op_sub,...w.__yo_op_mul,...w.__yo_op_div,...w.__yo_op_mod,...w.__yo_op_neg,...w.__yo_op_eq,...w.__yo_op_neq,...w.__yo_op_lt,...w.__yo_op_lte,...w.__yo_op_gt,...w.__yo_op_gte,...w.__yo_op_not,...w.__yo_op_bit_and,...w.__yo_op_bit_or,...w.__yo_op_bit_xor,...w.__yo_op_bit_complement,...w.__yo_op_bit_left_shift,...w.__yo_op_bit_right_shift,...w.__yo_ptr_add,...w.__yo_ptr_sub,...w.__yo_ptr_diff,...w.__yo_ptr_eq,...w.__yo_ptr_neq,...w.__yo_ptr_lt,...w.__yo_ptr_lte,...w.__yo_ptr_gt,...w.__yo_ptr_gte,...w.__yo_slice_len,...w.__yo_slice_new,...w.__yo_as,...w.__yo_getrandom,...w.__yo_arc4random_buf,...w.__yo_bcrypt_gen_random,...w.__yo_maybe_uninit_new,...w.__yo_maybe_uninit_as_ptr,...w.__yo_maybe_uninit_assume_init,...w.__yo_noop,...w.__yo_return_self,...w.__yo_ms_sleep],xu=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 K(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,i=>`_u${i.charCodeAt(0)}_`);return!t&&n.has(r)&&(r="__yo_c_reserved_"+r),r}function P(e,t){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"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_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 i=Kt(e);if(i)return P(i,t)}let n;switch(e.tag){case"Tuple":n="tuple";break;case"Struct":n="struct";break;case"Union":n="union";break;case"Enum":n="enum";break;default:throw new Error("Unreachable")}let r=t.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for ${n} ${A(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&ue(e)&&e.isReferenceSemantics?`${r}*`:r}case"Function":return"void*";case"Dyn":{let n=t.types[e.id]?.cName;if(!n)throw new Error(`No C type name found for dynamic dispatch type ${A(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(Oe(i)){let o=P(r,t),a=`Array_${K(o)}_${i.value}`;return t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),a}break}case"Slice":{let n=e,i=`Slice_${K(P(n.childType,t))}`;return t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:P(n.childType,t)}),i}case"SomeType":{let n=e;if(we(n)){if(n.resolvedConcreteType?.isExtern)return`${P(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&D(n.resolvedConcreteType)&&we(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&ue(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(D(s.type)&&we(s.type)&&s.type.resolvedConcreteType&&ue(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=It(n);if(i){let o=t.types[i.id]?.cName;if(o)return`${o}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${n.id}, FutureModule: ${i?.id??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
185
185
  resolvedConcreteType: ${n.resolvedConcreteType?.id??"none"}
186
- registered type IDs: ${Object.keys(t.types).filter(o=>o.startsWith("sometype")).join(", ")}`)}return Gt(n)&&n.resolvedConcreteType||n.resolvedConcreteType?P(n.resolvedConcreteType,t):"void*"}case"Ptr":{let r=e.childType;if(je(r)){let a=P(r.childType,t),s=`Slice_${K(a)}`;return t.sliceStructTypes.has(s)||t.sliceStructTypes.set(s,{childType:a}),`${s}*`}let i=P(r,t);return dt(r)?`${i}*`:ye(r)&&Kt(r)?`${i}*`:`${i}*`}case"Iso":{let n=e,r=n.childType,i=P(r,t),o=i.replace(/\*/g,"").trim(),a=`Iso_${K(o)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(a)||t.isoTypes.set(a,{childTypeCName:i,isoType:n}),a}case"Arc":{let n=e,r=n.childType,i=P(r,t),o=i.replace(/\*/g,"").trim(),a=`Arc_${K(o)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(a)||t.arcTypes.set(a,{childTypeCName:i,arcType:n}),a}}return`// Unknown type: ${A(e)}`}function it(e,t,n){let r=K(t);return`${P(e,n)} ${r}`}function _n(e,t,n){let r=n.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${A(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function ti(e){return e.type.return.isCompileTimeOnly}function Si(e){let t=e.body,n=null;return F(t)&&T(t,"begin")&&t.args.length===1&&F(t.args[0])&&T(t.args[0],ei)?n=t.args[0].func.token.value:F(t)&&T(t,ei)&&(n=t.func.token.value),n&&w.__yo_as.includes(n)?null:n}function Kt(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 i=r.fields[0].type;if(Ie(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function kn(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function ve(e,t){if(!t)return K(e);let n=j(t,e);if(n.length>0){let r=n[n.length-1];return K(r.name,r.type.isExtern==="c")}return K(e)}function fa(e){if(F(e)&&e.args.length>=1){let t=e.args[0];if(t&&U(t))return t.token.value}if(F(e)&&e.args.length===0&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[0])&&U(e.func.args[1])&&e.func.args[1].token.value===w.___dup[0])return e.func.args[0].token.value}function _r(e){if(F(e)&&e.args.length===0&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[1])&&e.func.args[1].token.value===w.___drop[0]&&U(e.func.args[0]))return e.func.args[0].token.value;if(!F(e)||!T(e,w.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!U(t)))return t.token.value}function ko(e){if(e){if(Pt(e))return e;if(F(e)){let t=e;for(let n of t.args){let r=ko(n);if(r)return r}}}}var Bs;function Iu(e){Bs=e}function S(e,t,n){if(!Bs)throw new Error("Internal Error: generateExpr function is not set.");return Bs(e,t,n)}function wn(e,t,n){let r=M(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Te(r))return"";if(be(r)){let i=r.length;if(!Oe(i))return"/* Error: array has non-constant length */";let o=n.emitter;o.emitLine(`for (size_t i = 0; i < ${i.value}; i++) {`);let a=wn(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(ke(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=M(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Te(s)){let l=wn(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Ne(r))return`__yo_decr_rc((void*)(${e}).data)`;if(dt(r))return`__yo_decr_rc((void*)(${e}))`;if(kt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(bt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(ue(r)||ye(r)){let i=Ar(r,n);if(i)return`${i}(${e})`}return""}function Lr(e,t,n){let r=M(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(be(r)){let i=r.length;if(!Oe(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Be("")}`,a=`i_${Be("")}`,s=P(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=Lr(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(ke(r)){let i=n.emitter,o=`temp_dup_tuple_${Be("")}`,a=P(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=M(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Te(u)){let c=Lr(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Ne(r))return`((${P(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(dt(r))return`((${P(r,n)})__yo_incr_rc((void*)(${e})))`;if(kt(r))return`((${P(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(bt(r))return`((${P(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(ue(r)||ye(r)){let i=Sn(r,n);if(i)return`${i}(${e})`}return e}function Ar(e,t){if(ue(e)||ye(e)||Ne(e)||M(e)||kt(e)||bt(e)){let n=e.trait.fields.find(r=>r.label===w.___drop[0]);if(n&&n.assignedValue&&ie(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function Sn(e,t){if(ue(e)||ye(e)||Ne(e)||M(e)||kt(e)||bt(e)){let n=e.trait.fields.find(r=>r.label===w.___dup[0]);if(n&&n.assignedValue&&ie(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function vt(e,t,n){let r=n.emitter;if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){let o=S(i,t,n);o&&r.emitLine(`${t}${o};`)}}function Ze(e,t,n){let r=n.emitter;if(e.$?.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(F(i)){let o=S(i,t,n);o&&r.emitLine(`${t}${o};`)}}}function Wt(e,t,n){if(Oe(e)){let r=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(r.includes(".")?r:r+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?r.includes(".")?r:r+".0":e.tag==="U64"||e.tag==="Usize"?r+"ULL":e.tag==="I64"||e.tag==="Isize"?r+"LL":e.tag==="U32"?r+"U":r}else{if(Re(e))return e.value?"true":"false";if(qe(e)){let r=n?.$?.convertedRuntimeType||n?.$?.type;if(r&&lo(r)&&r.fields.length===1){let i=r.fields[0].type;if(je(i)){let o=P(r,t),a=JSON.stringify(e.value),s=Buffer.byteLength(e.value,"utf8");return`(${o}){ .data = (uint8_t*)${a}, .length = ${s} }`}}if(r&&je(r)){let i=P(r,t),o=JSON.stringify(e.value),a=Buffer.byteLength(e.value,"utf8");return`(${i}){ .data = (uint8_t*)${o}, .length = ${a} }`}return JSON.stringify(e.value)}else if(xt(e)){let r=e.type;if(Kt(r)){let l=r.variants.find(u=>u.name===e.variantName);if(!l)return`// Error: Variant ${e.variantName} not found in enum`;if(!l.fields||l.fields.length===0)return"NULL";if(l.fields.length===1&&e.fields.length===1)return Wt(e.fields[0],t)}if(kn(r))return _n(r,e.variantName,t);let a=t.types[r.id]?.cName;if(!a)return`// Error: No C type name found for enum ${A(r)}`;let s=_n(r,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${a}){ .tag = ${s} }`;{let l=r.variants.find(c=>c.name===e.variantName);if(!l||!l.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let u=e.fields.map((c,p)=>{let f=l.fields[p];if(f&&!pe(f.type)){let _=K(f.label),d=Wt(c,t);return`.${_} = ${d}`}return null}).filter(c=>c!==null);return u.length===0?`(${a}){ .tag = ${s} }`:`(${a}){ .tag = ${s}, .data = { .${e.variantName} = { ${u.join(", ")} } } }`}}else if(sn(e)){let r=e.type,i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for tuple ${A(r)}
186
+ registered type IDs: ${Object.keys(t.types).filter(o=>o.startsWith("sometype")).join(", ")}`)}return Gt(n)&&n.resolvedConcreteType||n.resolvedConcreteType?P(n.resolvedConcreteType,t):"void*"}case"Ptr":{let r=e.childType;if(je(r)){let a=P(r.childType,t),s=`Slice_${K(a)}`;return t.sliceStructTypes.has(s)||t.sliceStructTypes.set(s,{childType:a}),`${s}*`}let i=P(r,t);return mt(r)?`${i}*`:ye(r)&&Kt(r)?`${i}*`:`${i}*`}case"Iso":{let n=e,r=n.childType,i=P(r,t),o=i.replace(/\*/g,"").trim(),a=`Iso_${K(o)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(a)||t.isoTypes.set(a,{childTypeCName:i,isoType:n}),a}case"Arc":{let n=e,r=n.childType,i=P(r,t),o=i.replace(/\*/g,"").trim(),a=`Arc_${K(o)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(a)||t.arcTypes.set(a,{childTypeCName:i,arcType:n}),a}}return`// Unknown type: ${A(e)}`}function it(e,t,n){let r=K(t);return`${P(e,n)} ${r}`}function _n(e,t,n){let r=n.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${A(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function ti(e){return e.type.return.isCompileTimeOnly}function Si(e){let t=e.body,n=null;return F(t)&&T(t,"begin")&&t.args.length===1&&F(t.args[0])&&T(t.args[0],ei)?n=t.args[0].func.token.value:F(t)&&T(t,ei)&&(n=t.func.token.value),n&&w.__yo_as.includes(n)?null:n}function Kt(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 i=r.fields[0].type;if(Ie(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function kn(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function ve(e,t){if(!t)return K(e);let n=j(t,e);if(n.length>0){let r=n[n.length-1];return K(r.name,r.type.isExtern==="c")}return K(e)}function da(e){if(F(e)&&e.args.length>=1){let t=e.args[0];if(t&&U(t))return t.token.value}if(F(e)&&e.args.length===0&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[0])&&U(e.func.args[1])&&e.func.args[1].token.value===w.___dup[0])return e.func.args[0].token.value}function _r(e){if(F(e)&&e.args.length===0&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[1])&&e.func.args[1].token.value===w.___drop[0]&&U(e.func.args[0]))return e.func.args[0].token.value;if(!F(e)||!T(e,w.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!U(t)))return t.token.value}function ko(e){if(e){if(Pt(e))return e;if(F(e)){let t=e;for(let n of t.args){let r=ko(n);if(r)return r}}}}var Gs;function Nu(e){Gs=e}function S(e,t,n){if(!Gs)throw new Error("Internal Error: generateExpr function is not set.");return Gs(e,t,n)}function wn(e,t,n){let r=D(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Te(r))return"";if(be(r)){let i=r.length;if(!Oe(i))return"/* Error: array has non-constant length */";let o=n.emitter;o.emitLine(`for (size_t i = 0; i < ${i.value}; i++) {`);let a=wn(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(ke(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=D(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Te(s)){let l=wn(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Ne(r))return`__yo_decr_rc((void*)(${e}).data)`;if(mt(r))return`__yo_decr_rc((void*)(${e}))`;if(kt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(bt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(ue(r)||ye(r)){let i=Ar(r,n);if(i)return`${i}(${e})`}return""}function Lr(e,t,n){let r=D(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(be(r)){let i=r.length;if(!Oe(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Be("")}`,a=`i_${Be("")}`,s=P(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=Lr(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(ke(r)){let i=n.emitter,o=`temp_dup_tuple_${Be("")}`,a=P(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Te(u)){let c=Lr(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Ne(r))return`((${P(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(mt(r))return`((${P(r,n)})__yo_incr_rc((void*)(${e})))`;if(kt(r))return`((${P(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(bt(r))return`((${P(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(ue(r)||ye(r)){let i=Sn(r,n);if(i)return`${i}(${e})`}return e}function Ar(e,t){if(ue(e)||ye(e)||Ne(e)||D(e)||kt(e)||bt(e)){let n=e.trait.fields.find(r=>r.label===w.___drop[0]);if(n&&n.assignedValue&&ie(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function Sn(e,t){if(ue(e)||ye(e)||Ne(e)||D(e)||kt(e)||bt(e)){let n=e.trait.fields.find(r=>r.label===w.___dup[0]);if(n&&n.assignedValue&&ie(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function vt(e,t,n){let r=n.emitter;if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){let o=S(i,t,n);o&&r.emitLine(`${t}${o};`)}}function Ze(e,t,n){let r=n.emitter;if(e.$?.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(F(i)){let o=S(i,t,n);o&&r.emitLine(`${t}${o};`)}}}function Wt(e,t,n){if(Oe(e)){let r=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(r.includes(".")?r:r+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?r.includes(".")?r:r+".0":e.tag==="U64"||e.tag==="Usize"?r+"ULL":e.tag==="I64"||e.tag==="Isize"?r+"LL":e.tag==="U32"?r+"U":r}else{if(Re(e))return e.value?"true":"false";if(He(e)){let r=n?.$?.convertedRuntimeType||n?.$?.type;if(r&&lo(r)&&r.fields.length===1){let i=r.fields[0].type;if(je(i)){let o=P(r,t),a=JSON.stringify(e.value),s=Buffer.byteLength(e.value,"utf8");return`(${o}){ .data = (uint8_t*)${a}, .length = ${s} }`}}if(r&&je(r)){let i=P(r,t),o=JSON.stringify(e.value),a=Buffer.byteLength(e.value,"utf8");return`(${i}){ .data = (uint8_t*)${o}, .length = ${a} }`}return JSON.stringify(e.value)}else if(Nt(e)){let r=e.type;if(Kt(r)){let l=r.variants.find(u=>u.name===e.variantName);if(!l)return`// Error: Variant ${e.variantName} not found in enum`;if(!l.fields||l.fields.length===0)return"NULL";if(l.fields.length===1&&e.fields.length===1)return Wt(e.fields[0],t)}if(kn(r))return _n(r,e.variantName,t);let a=t.types[r.id]?.cName;if(!a)return`// Error: No C type name found for enum ${A(r)}`;let s=_n(r,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${a}){ .tag = ${s} }`;{let l=r.variants.find(c=>c.name===e.variantName);if(!l||!l.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let u=e.fields.map((c,p)=>{let f=l.fields[p];if(f&&!pe(f.type)){let _=K(f.label),d=Wt(c,t);return`.${_} = ${d}`}return null}).filter(c=>c!==null);return u.length===0?`(${a}){ .tag = ${s} }`:`(${a}){ .tag = ${s}, .data = { .${e.variantName} = { ${u.join(", ")} } } }`}}else if(sn(e)){let r=e.type,i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for tuple ${A(r)}
187
187
  `;let o=e.fields.map((a,s)=>{let l=Wt(a,t);return`._${s} = ${l}`});return`(${i}){ ${o.join(", ")} }`}else if(pn(e)){let r=e.type;if(r&&ue(r)){let i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for struct ${A(r)}
188
188
  `;if(r.isNewtype&&r.fields.length===1&&e.fields.length===1){let o=Wt(e.fields[0],t);return`((${i})(${o}))`}if(r.isReferenceSemantics){let o=e.fields.map(s=>Wt(s,t));return`${`__yo_new_${i}`}(${o.join(", ")})`}else{let o=e.fields.map((a,s)=>{let l=a,u=ke(r)?`_${s}`:K(r.fields[s].label),c=Wt(l,t);return`.${u} = ${c}`});return`(${i}){ ${o.join(", ")} }`}}}else if(Ln(e)){let r=e.type,i=P(r,t),o=e.elements.map(a=>Wt(a,t));return`(${i}){ .data = { ${o.join(", ")} } }`}else if(ie(e)){let r=t.functions[e.funcId]?.cName;return r||`// Error: No C function name found for function value with ID ${e.funcId}
189
- `}else if(R(e)){let r=e.value;if(r)return t.types[r.id]?t.types[r.id].cName:`/* Error: No C type name found for type ${A(r)} */`}else if(fi(e)){let r=e.targetValue[0];if(r){let i=n?.$?.convertedRuntimeType||n?.$?.type;if(i&&Ie(i)){let o=i.childType,a=Wt(r,t,{$:{type:o,convertedRuntimeType:o}});if(a&&!a.startsWith("/*")&&!a.startsWith("//"))return`(&${a})`}}return`/* Error: Cannot generate pointer value ${Se(e)} */`}}return`/* skip generating: ${Se(e)} */`}function Ir(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(Ir(e.func,t,n))return!0;for(let r of e.args)if(Ir(r,t,n))return!0}return!1}function om(e,t,n){for(let r=0;r<t.length;r++)if(Ir(e,t[r].expr,n))return r;return-1}function _a(e,t,n){let r=[],i=n?.shouldSkipBody;if(e.tag!=="FnCall"||!T(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],suspensionPoint:null}]:[{stateNumber:0,expressions:[e],suspensionPoint:t[0]??null}];let o=e.args,a=[],s=[];for(let l of o){let u=om(l,t,i),c=n?.handleReturnStatements&&(ht(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n?.handleSequentialSuspensions)for(let p=u+1;p<t.length&&Ir(l,t[p].expr,i);p++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}function xu(e,t){let r=_a(e,t,{shouldSkipBody:Pt,handleReturnStatements:!0,handleSequentialSuspensions:!0}).map(i=>({stateNumber:i.stateNumber,expressions:i.expressions,awaitPoint:i.suspensionPoint}));return r.length>0&&r[r.length-1].awaitPoint!==null&&r.push({stateNumber:r.length,expressions:[],awaitPoint:null}),r}function am(e,t){return Ir(e,t,Pt)}function Nu(e,t,n,r=!1){let i=n.emitter;for(let o=0;o<e.expressions.length;o++){let a=e.expressions[o],s=o===e.expressions.length-1,l=e.awaitPoint&&am(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,I.while)||T(a,I.cond)||T(a,I.match))&&Zt(a);if((l||u)&&e.awaitPoint)Oi(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=S(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=S(a,t,n);!c||!a.$||Qe(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Oi(e,t,n,r,i){let o=i.emitter;if(e.tag==="FnCall"&&fn(e)){let a=e.args[0];if(!a){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let s=S(a,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${s};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&T(e,":=")){let a=e.args[0],s=e.args[1];if(!a||!s){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(s.tag==="FnCall"&&fn(s)){let l=s.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}let u=a.token?.value;if(!u||!a.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let c=S(l,r,i);o.emitLine(`${r}// Store Future for await (variable: ${u})`),o.emitLine(`${r}sm->await_future_${t.index} = ${c};`)}else o.emitLine(`${r}// Store Future for await (variable: ${u}) - future already in state machine`);return}if(s.tag==="FnCall"&&T(s,I.cond)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=j(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}wo(s,t,r,i,l);return}if(s.tag==="FnCall"&&T(s,I.match)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=j(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}Fo(s,t,r,i,l);return}}if(e.tag==="FnCall"&&T(e,"=")){let a=e.args[0],s=e.args[1];if(a&&s){if(s.tag==="FnCall"&&T(s,I.cond)){let l=S(a,r,i);wo(s,t,r,i,void 0,l||void 0);return}if(s.tag==="FnCall"&&T(s,I.match)){let l=S(a,r,i);Fo(s,t,r,i,void 0,l||void 0);return}}}if(e.tag==="FnCall"&&T(e,I.cond)){wo(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,I.match)){Fo(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,I.while)){Ws(e,t,r,i);return}o.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),o.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FnCall"?e.func.tag==="Atom"?e.func.token?.value:e.func.tag:"N/A"}`)}function wo(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!T(e,I.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let h=0;h<s.length;h++){let y=s[h];if(y.tag==="FnCall"&&T(y,"=>")){let v=y.args[0];if(v&&!(Re(v.$?.value)&&v.$.value.value===!1)){u=h;break}}}let c=!1;if(u>=0){let h=s[u];if(h.tag==="FnCall"&&T(h,"=>")){let y=h.args[0];y&&Re(y.$?.value)&&y.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let h=s[u],y=F(h)?h.args[1]:void 0;if(y)if(xr(y)){let C=Mi(y,t,n,r),L=r.asyncWhileLoopInfo?.get(t.index);if(L&&C.length>0){let O=r.asyncCondBranchInfo?.get(t.index)?.branches.some(N=>N.hasAwait&&N.remainingExprs&&N.remainingExprs.length>0)??!1;L.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:C,deferredDropExpressions:y.$?.deferredDropExpressions,skipCondBranchCheck:O},l.push({index:u,value:y,hasAwait:!0,remainingExprs:[],deferredDropExpressions:y.$?.deferredDropExpressions})}else l.push({index:u,value:y,hasAwait:!0,remainingExprs:C,deferredDropExpressions:y.$?.deferredDropExpressions})}else{if(Vi(e,y,r,i,o))Di(y,n,r);else if(F(y)&&T(y,I.begin)){let C=y.args;for(let L=0;L<C.length;L++){let b=C[L],O=S(b,n,r);if(O==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let N=O==="break"||O==="continue"||O?.includes("return");O&&(N||b.$&&!Qe(b.$.env.modulePath,O))&&a.emitLine(`${n}${O};`)}}if(y.$?.deferredDropExpressions)for(let L of y.$.deferredDropExpressions){let b=S(L,n,r);b&&a.emitLine(`${n}${b};`)}}else{let C=S(y,n,r);if(C==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let L=C==="break"||C==="continue"||C?.includes("return");C&&(L||y.$&&!Qe(y.$.env.modulePath,C))&&a.emitLine(`${n}${C};`)}}l.push({index:u,value:y,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some($=>$.hasAwait&&$.remainingExprs&&$.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let p=!1,f=0,_=n;for(let h=0;h<s.length;h++){let y=s[h];if(y.tag!=="FnCall"||!T(y,"=>")){a.emitLine(`${_}// Error: Expected => pair in cond`);continue}let v=y.args[0],E=y.args[1];if(!v||!E){a.emitLine(`${_}// Error: Invalid pair in cond`);continue}if(Re(v.$?.value)&&v.$.value.value===!1)continue;p&&(a.emitLine(`${_}else {`),f++,_+=" ");let $=h===s.length-1&&v.tag==="Atom"&&v.token?.value==="true"?null:S(v,_,r);$?a.emitLine(`${_}if (${$}) {`):a.emitLine(`${_}{`),p=!0;let C=`${_} `;if(xr(E)){a.emitLine(`${C}sm->cond_branch_${t.index} = ${h};`);let b=Mi(E,t,C,r),O=r.asyncWhileLoopInfo?.get(t.index);if(O&&b.length>0){let D=r.asyncCondBranchInfo?.get(t.index)?.branches.some(V=>V.hasAwait&&V.remainingExprs&&V.remainingExprs.length>0)??!1;O.condBranchPostWhileExprs={branchIndex:h,condBranchFieldIndex:t.index,exprs:b,deferredDropExpressions:E.$?.deferredDropExpressions,skipCondBranchCheck:D},l.push({index:h,value:E,hasAwait:!0,remainingExprs:[],deferredDropExpressions:E.$?.deferredDropExpressions})}else l.push({index:h,value:E,hasAwait:!0,remainingExprs:b,deferredDropExpressions:E.$?.deferredDropExpressions})}else{if(Vi(e,E,r,i,o))Di(E,C,r);else if(F(E)&&T(E,I.begin)){let b=E.args;for(let O=0;O<b.length;O++){let N=b[O],D=S(N,C,r);if(D==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let V=D==="break"||D==="continue"||D?.includes("return");D&&(V||N.$&&!Qe(N.$.env.modulePath,D))&&a.emitLine(`${C}${D};`)}}if(E.$?.deferredDropExpressions)for(let O of E.$.deferredDropExpressions){let N=S(O,C,r);N&&a.emitLine(`${C}${N};`)}}else{let b=S(E,C,r);if(b==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let O=b==="break"||b==="continue"||b?.includes("return");b&&(O||E.$&&!Qe(E.$.env.modulePath,b))&&a.emitLine(`${C}${b};`)}}l.push({index:h,value:E,hasAwait:!1})}a.emitLine(`${_}}`)}for(let h=0;h<f;h++)_=_.slice(0,-2),a.emitLine(`${_}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some(h=>h.hasAwait&&h.remainingExprs&&h.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function Vi(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!Su(t)}function Di(e,t,n){let r=n.emitter,i=pe(e.$?.type);if(F(e)&&T(e,I.begin)){let o=e.args;for(let s=0;s<o.length-1;s++){let l=o[s],u=S(l,t,n);u&&l.$&&!Qe(l.$.env.modulePath,u)&&r.emitLine(`${t}${u};`)}let a=o[o.length-1];if(a&&!i){let s=S(a,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions){let l=S(s,t,n);l&&r.emitLine(`${t}${l};`)}}else if(!i){let o=S(e,t,n);o&&r.emitLine(`${t}sm->result = ${o};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let o of n.pendingDeferredDrops){let a=S(o,t,n);a&&a.includes("sm->")&&r.emitLine(`${t}${a};`)}fr({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function xr(e){if(e.tag==="FnCall"&&fn(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(xr(t))return!0}return!1}function Su(e){if(ht(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Su(t))return!0}return!1}function Fo(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!T(e,I.match)){a.emitLine(`${n}// Error: Expected match expression`);return}let s=e.args[0],l=e.args.slice(1);if(!s||l.length===0){a.emitLine(`${n}// Error: match must have a value and at least one case`);return}let u=S(s,n,r),c=s.$?.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if(e.$?.isPrimitiveMatch){lm(e,l,u,t,n,r,i,o);return}if(!ye(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let p=c,f=r.types[p.id]?.cName;if(!f){a.emitLine(`${n}// Error: enum type has no C name`);return}let _=Kt(p);if(_){let d=-1,g=-1,h;for(let y=0;y<l.length;y++){let v=l[y];if(F(v)&&T(v,"=>",2)){let E=v.args[0];if(E&&F(E)&&T(E,"."))d=y;else if(E&&F(E)){let $=E.func;$&&F($)&&T($,".")&&(g=y,E.args.length>0&&U(E.args[0])&&(h=E.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),g>=0){let y=l[g];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(h){let E=r,$=!1,C;if(E.stateMachineVariables){for(let[L,b]of E.stateMachineVariables)if(b.name===h){$=!0,C=L;break}}$&&C?a.emitLine(`${n} sm->var_${C} = ${u};`):a.emitLine(`${n} ${P(_,r)} ${h} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${g};`),xr(v)){let E=Mi(v,t,n+" ",r);if(E.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:g,value:v,hasAwait:!0,remainingExprs:E,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(Vi(e,v,r,i,o))Di(v,n+" ",r);else{let E=S(v,n+" ",r);if(i){let $=K(`var_${i}`);E&&a.emitLine(`${n} sm->${$} = ${E};`)}else o?E&&a.emitLine(`${n} ${o} = ${E};`):E&&v.$&&!Qe(v.$.env.modulePath,E)&&a.emitLine(`${n} ${E};`)}}}if(a.emitLine(`${n}} else {`),d>=0){let y=l[d];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${d};`),xr(v)){let E=Mi(v,t,n+" ",r);if(E.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:d,value:v,hasAwait:!0,remainingExprs:E,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(Vi(e,v,r,i,o))Di(v,n+" ",r);else{let E=S(v,n+" ",r);if(i){let $=K(`var_${i}`);E&&a.emitLine(`${n} sm->${$} = ${E};`)}else o?E&&a.emitLine(`${n} ${o} = ${E};`):E&&v.$&&!Qe(v.$.env.modulePath,E)&&a.emitLine(`${n} ${E};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let d=!1;for(let g=0;g<l.length;g++){let h=l[g];if(!F(h)||!T(h,"=>",2))continue;let y=h.args[0],v=h.args[1],E=U(y)&&y.token.value==="_",$;if(!E){if(F(y)&&T(y,".",1))$=y.args[0].token.value;else if(F(y)){let C=y.func;C&&F(C)&&T(C,".",1)&&($=C.args[0].token.value)}}if(!E&&!$){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(E)d=!0,a.emitLine(`${n} default: {`);else{let C=`${f.toUpperCase()}_${$.toUpperCase()}`;a.emitLine(`${n} case ${C}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${g};`),F(y)&&y.args.length>=1){let C=y.func;if(C&&F(C)&&T(C,".")){let L=p.variants.find(b=>b.name===$);if(L&&L.fields)for(let b=0;b<Math.min(y.args.length,L.fields.length);b++){let O=y.args[b],N=L.fields[b];if(U(O)&&N){let D=O.token.value,V=K(D),z=r,ee=!1,ne;if(z.stateMachineVariables){for(let[de,he]of z.stateMachineVariables)if(he.name===D){ee=!0,ne=de;break}}let G=K(N.label,N.type.isExtern==="c"),Z=`${u}.data.${$}.${G}`;if(ee&&ne)a.emitLine(`${n} sm->var_${ne} = ${Z};`);else{let de=P(N.type,r);a.emitLine(`${n} ${de} ${V} = ${Z};`)}}}}}if(xr(v)){let C=Mi(v,t,n+" ",r);if(C.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let b=L.asyncCondBranchInfo.get(t.index)||{branches:[]};b.branches.push({index:g,value:v,hasAwait:!0,remainingExprs:C,deferredDropExpressions:v.$?.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,b)}}else if(Vi(e,v,r,i,o))Di(v,n+" ",r);else{let C=S(v,n+" ",r);if(i){let L=K(`var_${i}`);C&&a.emitLine(`${n} sm->${L} = ${C};`)}else o?C&&a.emitLine(`${n} ${o} = ${C};`):C&&v.$&&!Qe(v.$.env.modulePath,C)&&a.emitLine(`${n} ${C};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}d||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function sm(e){return F(e)?T(e,"|",2):!1}function Gs(e){if(!sm(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Gs(t),...Gs(n)]}function lm(e,t,n,r,i,o,a,s){let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let c=0;c<t.length;c++){let p=t[c];if(!F(p)||!T(p,"=>",2))continue;let f=p.args[0],_=p.args[1];if(ht(f,"_"))l.emitLine(`${i} default:`);else{let d=f.$?.primitivePatternValues;if(d&&d.length>0){for(let g of d)if(g!==void 0){let h=Wt(g,o);l.emitLine(`${i} case ${h}:`)}}else{let g=Gs(f);for(let h of g){let y=h.$?.value;if(y!==void 0){let v=Wt(y,o);l.emitLine(`${i} case ${v}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${c};`),xr(_)){let d=Mi(_,r,i+" ",o);u.push({index:c,value:_,hasAwait:!0,remainingExprs:d,deferredDropExpressions:_.$?.deferredDropExpressions})}else{if(Vi(e,_,o,a,s))Di(_,i+" ",o);else{let d=S(_,i+" ",o);if(a){let g=K(`var_${a}`);d&&l.emitLine(`${i} sm->${g} = ${d};`)}else s?d&&l.emitLine(`${i} ${s} = ${d};`):d&&_.$&&!Qe(_.$.env.modulePath,d)&&l.emitLine(`${i} ${d};`)}u.push({index:c,value:_,hasAwait:!1})}l.emitLine(`${i} break;`)}l.emitLine(`${i}}`),o.asyncCondBranchInfo||(o.asyncCondBranchInfo=new Map),o.asyncCondBranchInfo.set(r.index,{branches:u,targetVariableId:a,targetAssignmentCode:s})}function Mi(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!T(e,"begin"))return i.emitLine(`${n}// Error: Expected begin block in cond branch with await`),o;let a=e.args,s=!1;for(let l of a){if(s){o.push(l);continue}if(xr(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&fn(u)){let c=u.args[0];if(c){let p=S(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${p};`)}}}else if(l.tag==="FnCall"&&fn(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=S(u,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}else i.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else if(l.tag==="FnCall"&&T(l,I.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),wo(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,I.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),Fo(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&T(l,I.while)&&Ws(l,t,n,r);else{let u=S(l,n,r);u&&l.$&&!Qe(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Ws(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!T(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length!==2){i.emitLine(`${n}// Error: while must have exactly 2 arguments (condition, body)`);return}let a=o[0],s=o[1],l=cm(s),u;l?(u=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=u+1):u=t.index,i.emitLine(`${n}sm->while_loop_${u}_active = true;`),i.emitLine(`${n}while_loop_${u}_start:`);let c=S(a,n,r);i.emitLine(`${n}if (!(${c})) {`),i.emitLine(`${n} sm->while_loop_${u}_active = false;`),i.emitLine(`${n} goto while_loop_${u}_end;`),i.emitLine(`${n}}`);let p=um(s,t,n,r,u);if(i.emitLine(`${n}while_loop_${u}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),l){let f=r.asyncWhileLoopInfo.get(t.index);f&&(f.outerWhileLoop={whileLoopIndex:u,conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:p})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:p})}function um(e,t,n,r,i){let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let _=0;_<s.length;_++){let d=s[_];if(Zt(d)){l=_;break}}if(l===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),a;let u=r.smWhileBreakInfo,c=r.smWhileContinueInfo,p=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...e.$?.deferredDropExpressions??[]];for(let _=0;_<l;_++){let d=s[_],g=S(d,n,r);g&&d.$&&!Qe(d.$.env.modulePath,g)&&o.emitLine(`${n}${g};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=p;let f=s[l];if(F(f)&&T(f,I.while)&&Zt(f)){Ws(f,t,n,r);for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}if(F(f)&&T(f,":=")){let _=f.args[1];if(_&&_.tag==="FnCall"&&fn(_)){let d=_.args[0];if(d){let g=S(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${g};`)}}}else if(f.tag==="FnCall"&&fn(f)){let _=f.args[0];if(_&&t.futureVariableId===void 0){let d=S(_,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(F(f)&&T(f,I.cond)){wo(f,t,n,r,void 0);for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}else if(F(f)&&T(f,I.match)){Fo(f,t,n,r);for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}function cm(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,I.while)&&Zt(n))return!0;return!1}function qs(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 Lo(e){return!e||!M(e)?!1:e.resolvedConcreteType&&M(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Po(t.traitType))}function da(e,t){return t==="outer"?`__capture.${K(e)}`:K(`var_${e}`)}function Vu(e,t,n,r,i,o,a,s){let l=s.emitter,c=At(o).isFuture.outputType,p=pe(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let f=xu(e,i.awaitPoints),_=e.tag==="FnCall"&&T(e,"begin")?e.args:[e],d=_.length>0?_[_.length-1]:void 0;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 g=0;g<f.length;g++){let h=f[g];if(!h)continue;let y=h.stateNumber,v=g===f.length-1;if(l.emitLine(`
190
- state_${y}:`),l.emitLine(` case ${y}: { // State ${y}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${y}\\n");`),y>0&&i.awaitPoints[y-1]){let V=i.awaitPoints[y-1],z=qs(V,i);V.isInsideCond&&l.emitLine(` if (sm->${z} != NULL) {`);let ee=pe(V.resultType)||M(V.resultType)&&!V.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${z}->state == -2) {`),l.emitLine(' fprintf(stderr, "panic: attempted to await an aborted Future\\n");'),l.emitLine(" abort();"),l.emitLine(" }"),V&&!ee){if(l.emitLine(` // Extract result from await ${y-1}`),l.emitLine(` int state_before_read = sm->${z}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${y-1}, state=%d\\n", state_before_read);`),Te(V.resultType)){let G=Sn(V.resultType,s);G?l.emitLine(` sm->await_result_${y-1} = ${G}(sm->${z}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${y-1} = sm->${z}->result;`))}else l.emitLine(` sm->await_result_${y-1} = sm->${z}->result;`);if(V.targetVariableId){let G=da(V.targetVariableId,"local");l.emitLine(` sm->${G} = sm->await_result_${y-1};`)}l.emitLine("")}if(!V.futureVariableId){let G=V.expr;if(G.tag==="FnCall"){let de=G.args[0]?.$?.type;de&&(M(de)||Ne(de))&&(l.emitLine(` if (sm->${z} != NULL) { __yo_decr_rc((void*)sm->${z}); sm->${z} = NULL; }`),l.emitLine(""))}}let ne=s;if(V){let G=ne.asyncCondBranchInfo?.get(V.index);if(G&&G.branches.some(de=>de.hasAwait)){let de=G.condBranchFieldIndex??V.index,he=de===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),he||l.emitLine(` switch (sm->cond_branch_${de}) {`);let $e=h.awaitPoint?.isInsideCond??!1;for(let B of G.branches)if(B.hasAwait){if(he||l.emitLine(` case ${B.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${B.index}\\n");`),B.remainingExprs&&B.remainingExprs.length>0){let oe=s.inAsyncStateMachine,ae=s.stateMachineVariables,le=s.variableIdRemapping,Ce=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Me=ne.asyncWhileLoopInfo?.get(V.index);s.pendingDeferredDrops=[...B.deferredDropExpressions??[],...Me?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let X=new Map;for(let me of i.capturedVariables)X.set(me.id,me);if(a)for(let me of a.fields)X.set(me.label,{id:me.label,name:me.label,type:me.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=X;let Q=!1,re=[],ce=G.targetAssignmentCode;for(let me=0;me<B.remainingExprs.length;me++){let te=B.remainingExprs[me],Le=me===B.remainingExprs.length-1;if(Q){re.push(te);continue}if($e&&Zt(te)){Q=!0,Hs(te,h.awaitPoint,i," ",s);continue}let Ee=S(te," ",s);!Ee||!te.$||Qe(te.$.env.modulePath,Ee)||(Le&&ce?l.emitLine(` ${ce} = ${Ee};`):l.emitLine(` ${Ee};`))}if(B.remainingExprs.length===0&&ce&&l.emitLine(` ${ce} = sm->await_result_${V.index};`),Q&&h.awaitPoint){let me=h.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let te=ne.asyncCondBranchInfo.get(me);if(te)te.chainedBranches||(te.chainedBranches=[]),te.chainedBranches.push({branches:[{index:B.index,value:B.value,hasAwait:re.length>0||re.some(Le=>Zt(Le)),remainingExprs:re,deferredDropExpressions:B.deferredDropExpressions}],condBranchFieldIndex:de});else{let Le={branches:[{index:B.index,value:B.value,hasAwait:re.length>0||re.some(Ee=>Zt(Ee)),remainingExprs:re,deferredDropExpressions:B.deferredDropExpressions}],condBranchFieldIndex:de};ne.asyncCondBranchInfo.set(me,Le)}}else if(B.deferredDropExpressions)for(let me of B.deferredDropExpressions){let te=S(me," ",s);te&&te.includes("sm->")&&l.emitLine(` ${te};`)}s.inAsyncStateMachine=oe,s.stateMachineVariables=ae,s.variableIdRemapping=le,s.pendingDeferredDrops=Ce}he||(l.emitLine(" break;"),l.emitLine(" }"))}if(he||l.emitLine(" }"),G.chainedBranches){for(let B of G.chainedBranches)for(let oe of B.branches)if(oe.hasAwait&&oe.remainingExprs&&oe.remainingExprs.length>0){let ae=s.inAsyncStateMachine,le=s.stateMachineVariables,Ce=s.variableIdRemapping,Me=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let X=ne.asyncWhileLoopInfo?.get(V.index);s.pendingDeferredDrops=[...oe.deferredDropExpressions??[],...X?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let Q=new Map;for(let te of i.capturedVariables)Q.set(te.id,te);if(a)for(let te of a.fields)Q.set(te.label,{id:te.label,name:te.label,type:te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Q;let re=h.awaitPoint?.isInsideCond??!1,ce=!1,me=[];for(let te of oe.remainingExprs){if(ce){me.push(te);continue}if(re&&Zt(te)){ce=!0,Hs(te,h.awaitPoint,i," ",s);continue}let Le=S(te," ",s);!Le||!te.$||Qe(te.$.env.modulePath,Le)||l.emitLine(` ${Le};`)}if(ce&&h.awaitPoint){let te=h.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let Le=ne.asyncCondBranchInfo.get(te);Le?(Le.chainedBranches||(Le.chainedBranches=[]),Le.chainedBranches.push({branches:[{index:oe.index,value:oe.value,hasAwait:me.length>0||me.some(Ee=>Zt(Ee)),remainingExprs:me,deferredDropExpressions:oe.deferredDropExpressions}],condBranchFieldIndex:B.condBranchFieldIndex})):ne.asyncCondBranchInfo.set(te,{branches:[{index:oe.index,value:oe.value,hasAwait:me.length>0||me.some(Ee=>Zt(Ee)),remainingExprs:me,deferredDropExpressions:oe.deferredDropExpressions}],condBranchFieldIndex:B.condBranchFieldIndex})}else if(oe.deferredDropExpressions)for(let te of oe.deferredDropExpressions){let Le=S(te," ",s);Le&&Le.includes("sm->")&&l.emitLine(` ${Le};`)}s.inAsyncStateMachine=ae,s.stateMachineVariables=le,s.variableIdRemapping=Ce,s.pendingDeferredDrops=Me}}if(G.targetVariableId){let B=da(G.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${B} = sm->await_result_${V.index};`)}l.emitLine("")}V.isInsideCond&&l.emitLine(" }");let Z=ne.asyncWhileLoopInfo?.get(V.index);if(Z){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${V.index}_active) {`),Z.bodyExprsAfterAwait&&Z.bodyExprsAfterAwait.length>0){let le=s.inAsyncStateMachine,Ce=s.stateMachineVariables,Me=s.variableIdRemapping,X=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...Z.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let Q=new Map;for(let te of i.capturedVariables)Q.set(te.id,te);if(a)for(let te of a.fields)Q.set(te.label,{id:te.label,name:te.label,type:te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Q;let re=s.smWhileBreakInfo,ce=s.smWhileContinueInfo,me=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${V.index}`,activeIndex:V.index},s.smWhileContinueInfo={label:`while_loop_${V.index}_continue`},s.smWhileBodyDrops=[...Z.bodyExpr.$?.deferredDropExpressions??[]];for(let te of Z.bodyExprsAfterAwait){let Le=S(te," ",s);!Le||!te.$||Qe(te.$.env.modulePath,Le)||l.emitLine(` ${Le};`)}s.smWhileBreakInfo=re,s.smWhileContinueInfo=ce,s.smWhileBodyDrops=me,s.inAsyncStateMachine=le,s.stateMachineVariables=Ce,s.variableIdRemapping=Me,s.pendingDeferredDrops=X}l.emitLine(` while_loop_${V.index}_continue:`);{let le=Z.bodyExpr.$?.deferredDropExpressions??[];if(le.length>0){let Ce=s.inAsyncStateMachine,Me=s.stateMachineVariables,X=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Q=new Map;for(let re of i.capturedVariables)Q.set(re.id,re);if(a)for(let re of a.fields)Q.set(re.label,{id:re.label,name:re.label,type:re.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Q;for(let re of le){let ce=S(re," ",s);ce&&ce.includes("sm->")&&l.emitLine(` ${ce};`)}s.inAsyncStateMachine=Ce,s.stateMachineVariables=Me,s.variableIdRemapping=X}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let de=s.inAsyncStateMachine,he=s.stateMachineVariables,$e=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let B=new Map;for(let le of i.capturedVariables)B.set(le.id,le);if(a)for(let le of a.fields)B.set(le.label,{id:le.label,name:le.label,type:le.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=B;let oe=S(Z.conditionExpr," ",s);s.inAsyncStateMachine=de,s.stateMachineVariables=he,s.variableIdRemapping=$e,l.emitLine(` if (!(${oe})) {`),l.emitLine(` sm->while_loop_${V.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 ae=V.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${ae};`),l.emitLine(` goto while_loop_${ae}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${V.index}:`),Z.condBranchPostWhileExprs){let le=Z.condBranchPostWhileExprs,Ce=le.condBranchFieldIndex,Me=le.branchIndex;le.skipCondBranchCheck?(l.emitLine(" // Execute post-while-loop code from cond branch (unconditional)"),l.emitLine(" {")):(l.emitLine(" // Execute post-while-loop code from cond branch"),l.emitLine(` if (sm->cond_branch_${Ce} == ${Me}) {`));let X=s.inAsyncStateMachine,Q=s.stateMachineVariables,re=s.variableIdRemapping,ce=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let me=new Map;for(let Ye of i.capturedVariables)me.set(Ye.id,Ye);if(a)for(let Ye of a.fields)me.set(Ye.label,{id:Ye.label,name:Ye.label,type:Ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=me;let te=h.awaitPoint!=null,Le=!1,Ee=[];for(let Ye=0;Ye<le.exprs.length;Ye++){let ot=le.exprs[Ye];if(Le){Ee.push(ot);continue}if(te&&Zt(ot)){Le=!0,Hs(ot,h.awaitPoint,i," ",s);continue}let Ge=S(ot," ",s);!Ge||!ot.$||Qe(ot.$.env.modulePath,Ge)||l.emitLine(` ${Ge};`)}if(Le&&h.awaitPoint){let Ye=h.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let ot=le.skipCondBranchCheck?-1:le.condBranchFieldIndex,Ge=ne.asyncCondBranchInfo.get(Ye);Ge?(Ge.chainedBranches||(Ge.chainedBranches=[]),Ge.chainedBranches.push({branches:[{index:le.branchIndex,value:le.exprs[0],hasAwait:Ee.length>0||Ee.some(Ot=>Zt(Ot)),remainingExprs:Ee,deferredDropExpressions:le.deferredDropExpressions}],condBranchFieldIndex:ot})):ne.asyncCondBranchInfo.set(Ye,{branches:[{index:le.branchIndex,value:le.exprs[0],hasAwait:Ee.length>0||Ee.some(Ot=>Zt(Ot)),remainingExprs:Ee,deferredDropExpressions:le.deferredDropExpressions}],condBranchFieldIndex:ot})}if(!Le&&le.deferredDropExpressions)for(let Ye of le.deferredDropExpressions){let ot=S(Ye," ",s);ot&&ot.includes("sm->")&&l.emitLine(` ${ot};`)}l.emitLine(" }"),s.inAsyncStateMachine=X,s.stateMachineVariables=Q,s.variableIdRemapping=re,s.pendingDeferredDrops=ce}if(Z.outerWhileLoop){let le=Z.outerWhileLoop,Ce=le.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ce}_active) {`),le.bodyExprsAfterAwait.length>0){let Me=s.inAsyncStateMachine,X=s.stateMachineVariables,Q=s.variableIdRemapping,re=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...le.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let ce=new Map;for(let Ee of i.capturedVariables)ce.set(Ee.id,Ee);if(a)for(let Ee of a.fields)ce.set(Ee.label,{id:Ee.label,name:Ee.label,type:Ee.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ce;let me=s.smWhileBreakInfo,te=s.smWhileContinueInfo,Le=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ce}`,activeIndex:Ce},s.smWhileContinueInfo={label:`while_loop_${Ce}_continue`},s.smWhileBodyDrops=[...le.bodyExpr.$?.deferredDropExpressions??[]];for(let Ee of le.bodyExprsAfterAwait){let Ye=S(Ee," ",s);!Ye||!Ee.$||Qe(Ee.$.env.modulePath,Ye)||l.emitLine(` ${Ye};`)}s.smWhileBreakInfo=me,s.smWhileContinueInfo=te,s.smWhileBodyDrops=Le,s.inAsyncStateMachine=Me,s.stateMachineVariables=X,s.variableIdRemapping=Q,s.pendingDeferredDrops=re}l.emitLine(` while_loop_${Ce}_continue:`);{let Me=le.bodyExpr.$?.deferredDropExpressions??[];if(Me.length>0){let X=s.inAsyncStateMachine,Q=s.stateMachineVariables,re=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ce=new Map;for(let me of i.capturedVariables)ce.set(me.id,me);if(a)for(let me of a.fields)ce.set(me.label,{id:me.label,name:me.label,type:me.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ce;for(let me of Me){let te=S(me," ",s);te&&te.includes("sm->")&&l.emitLine(` ${te};`)}s.inAsyncStateMachine=X,s.stateMachineVariables=Q,s.variableIdRemapping=re}}{let Me=s.inAsyncStateMachine,X=s.stateMachineVariables,Q=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let re=new Map;for(let me of i.capturedVariables)re.set(me.id,me);if(a)for(let me of a.fields)re.set(me.label,{id:me.label,name:me.label,type:me.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=re;let ce=S(le.conditionExpr," ",s);s.inAsyncStateMachine=Me,s.stateMachineVariables=X,s.variableIdRemapping=Q,l.emitLine(` if (!(${ce})) {`),l.emitLine(` sm->while_loop_${Ce}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${V.index};`),l.emitLine(` goto while_loop_${Ce}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ce}:`)}}}}let E=s.inAsyncStateMachine,$=s.stateMachineVariables,C=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let L=new Map;for(let V of i.capturedVariables)L.set(V.id,V);if(a)for(let V of a.fields)L.set(V.label,{id:V.label,name:V.label,type:V.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=L;let b=s.pendingDeferredDrops;s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let O=v&&!p&&h.expressions.length>0,N=h.expressions.length>0?h.expressions[h.expressions.length-1]:void 0,D=s.asyncBodyReturnExpr;if(!p&&N&&d&&N===d&&h.awaitPoint?s.asyncBodyReturnExpr=N:s.asyncBodyReturnExpr=void 0,Nu(h," ",s,O),s.asyncBodyReturnExpr=D,s.pendingDeferredDrops=b,l.emitLine(""),h.awaitPoint){s.inAsyncStateMachine=E,s.stateMachineVariables=$,s.variableIdRemapping=C;let V=y+1;{let z=qs(h.awaitPoint,i),ne=h.awaitPoint.expr.args?.[0],G=Lo(ne?.$?.type),Z=h.awaitPoint?.isInsideCond;Z&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${z} != NULL) {`));let de=h.awaitPoint?.isInsideWhile,he=de?s.asyncWhileLoopInfo?.get(h.awaitPoint.index):void 0;if(de&&he){let $e=h.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${$e}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${V};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${z}->state;`),l.emitLine(" if (future_state == -1 || future_state == -2) { // -1 = completed, -2 = aborted"),l.emitLine(" // Already complete or aborted \u2014 yield once for fairness"),l.emitLine(" // Yield once to event loop for fairness (microtask yield)"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" }"),l.emitLine(""),G?l.emitLine(" // IO future: no extra ref needed (completion handler does not decr_rc)"):(l.emitLine(" // Future not complete \u2014 take event loop reference and start if cold"),l.emitLine(` __yo_incr_rc((void*)sm->${z}); // event loop reference`)),G||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),fm(h.awaitPoint.expr,`sm->${z}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${z}->__yo_resume_fn((void*)sm->${z});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${z}->state;`),l.emitLine(" if (future_state == -1 || future_state == -2) {"),l.emitLine(" // Completed or aborted synchronously \u2014 yield for fairness"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" }"),l.emitLine(" }")),l.emitLine(""),l.emitLine(" // Still pending \u2014 register continuation and suspend"),l.emitLine(` sm->${z}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${z}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),de&&he){let $e=h.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${$e};`),l.emitLine(" }")}Z&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${V};`),l.emitLine(` goto state_${V};`),l.emitLine(" }"))}}else if(v){if(!h.expressions.some(z=>Du(z))){if(e.$?.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let z of e.$.deferredDropExpressions){let ee=S(z," ",s);ee&&l.emitLine(` ${ee};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),fr({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=E,s.stateMachineVariables=$,s.variableIdRemapping=C}else s.inAsyncStateMachine=E,s.stateMachineVariables=$,s.variableIdRemapping=C;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function Hs(e,t,n,r,i){let o=i.emitter,a=qs(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&fn(s)){let l=s.args[0];if(l){let u=S(l,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${u};`)}}return}if(e.tag==="FnCall"&&fn(e)){let s=e.args[0];if(s){let l=S(s,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${l};`)}return}if(e.tag==="FnCall"&&T(e,I.cond)){Oi(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,I.match)){Oi(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,I.while)){Oi(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,I.begin)){Oi(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Du(e){if(ht(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Du(t))return!0}return!1}function pm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;M(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),_t(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function fm(e,t,n,r){let i=e.args?.[0];if(!i?.$?.type)return;let o=e.args?.find(c=>F(c)&&T(c,I.using));if(!o)return;let a=At(i.$.type);if(!a?.isFuture.effects?.length)return;let s=pm(a.isFuture.effects),l=o.args,u=r.emitter;for(let c=0;c<s.length&&c<l.length;c++){let p=s[c],f=l[c];if(!H(p.type)||p.type.forallParameters.length>0)continue;let _=S(f,n,r),d=p.label;u.emitLine(`${n}${t}->__capture.${d} = (void*)${_};`)}}function tr(e,t,n){let r=j(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function Mu(e){return!!(e.$?.closureFunctionValue&&e.$?.type&&Gt(e.$.type))}function _m(e,t,n,r,i,o=!1){let a=Object.values(i.types).find(_=>_.type===e);if(!a)return i.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if(n.$?.deferredDupExpressions)for(let _ of n.$.deferredDupExpressions){let d=fa(_);d&&l.set(d,_)}let u=e.fields.map(_=>{if(_.isEffectParam)return"NULL";let d,g=_.exprs.expr;if(g.$?.deferredDupExpressions?.length&&(d=g.$.deferredDupExpressions[0]),!d){let y=[_.label];U(g)&&y.push(g.token.value);for(let v of y){let E=l.get(v);if(E){d=E;break}}}if(d)return S(d,r,i);let h={tag:"Atom",token:g.token,$:g.$};return S(h,r,i)}),c=`(${s}){ ${u.map((_,d)=>{let g=e.fields[d];return g?`.${g.label} = ${_}`:`/* Error: missing field at index ${d} */`}).join(", ")} }`,p=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${p}`;return o?i.emitter.emitLine(`${r}${s} ${f} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${f} = ${c};`)),{captureTempVar:f,captureCName:s}}function Ou(e,t,n){if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=jt(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=n.functions[o.funcId]?.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=Ne(e.$.type),u;if(l){let d=n.types[e.$.type.id];if(!d)return"// Error: Dyn closure type not found in context";u=d.cName}let c=a&&ue(a)&&a.fields.length>0,p=P(i.return.type,n),f=i.parameters.map(d=>P(d.type,n)).join(", "),_=`(${p} (*)(void*${f?", "+f:""}))${s}`;if(c&&a&&ue(a)){let d=!l,g=_m(a,i.id,e,t,n,d);if(!g)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=g;if(l){let y=`__yo_create_${u}`,v=`__yo_dispose_${u}`;return`${y}(${h}, ${v}, ${_})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let d=`__yo_create_${u}`,g=`__yo_dispose_${u}`;return`${d}(NULL, ${g}, ${_})`}else{if(e.$.type.tag==="SomeType"){let d=e.$.type;if(d.resolvedConcreteType)return n.implClosureCallMap.set(d.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${P(d.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function Ys(e,t,n){if(e.pendingDeferredDrops&&e.loopBodyDropsBaselineCount!==void 0){let r=e.loopBodyDropsBaselineCount,i=e.pendingDeferredDrops.length,o=e.pendingDeferredDrops.slice(0,i-r);for(let a of o){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function Ri(e,t,n=""){let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return Ys(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return Ys(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let a=t.emitter;for(let s of r.smWhileBodyDrops){let l=S(s,n,t);l&&l.includes("sm->")&&a.emitLine(`${n}${l};`)}}if(r.smWhileContinueInfo.stepExpr){let a=t.emitter,s=S(r.smWhileContinueInfo.stepExpr,n,t);s&&a.emitLine(`${n}${s};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return Ys(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:a,activeIndex:s}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let l=t.emitter;for(let u of r.smWhileBodyDrops){let c=S(u,n,t);c&&c.includes("sm->")&&l.emitLine(`${n}${c};`)}}return s!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${s}_active = false;`),`goto ${a}`):`goto ${a}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let a=t.emitter,s=r.inAsyncStateMachine.futureType,u=At(s).isFuture.outputType,c=pe(u);if(e.$?.deferredDropExpressions)for(let f of e.$.deferredDropExpressions){let _=S(f,n,t);_&&_.includes("sm->")&&a.emitLine(`${n}${_};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){a.emitLine(`${n}// Drop local variables before early completion`);for(let f of r.pendingDeferredDrops){let _=S(f,n,t);_&&_.includes("sm->")&&a.emitLine(`${n}${_};`)}}a.emitLine(`${n}// Early return - complete the result Future`);let p=c?void 0:`(${P(u,t)}){0}`;return fr({emitter:a,indent:n,resultCode:p,debugLabel:t.currentFunctionName}),""}return"return"}if(e.$?.type&&pe(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let a=e.token.value;if(r.localShadowedVariables?.has(a))return K(a);let s=!1;if(e.$?.env){let l=j(e.$.env,a);if(l.length>0){let u=l[l.length-1],c=u.isOwningTheSameRcValueAs?u.isOwningTheSameRcValueAs.id:u.id;r.variableIdRemapping?.has(c)&&(c=r.variableIdRemapping.get(c));let p=r.stateMachineVariables.get(c);if(p){let f=p.kind==="outer"?`__capture.${a}`:`var_${p.id}`;return s=!0,`sm->${f}`}}}if(!s){for(let[l,u]of r.stateMachineVariables)if(u.name===a){let c=u.kind==="outer"?`__capture.${a}`:`var_${l}`;return s=!0,`sm->${c}`}}if(e.$?.env){let l=j(e.$.env,a);if(l.length>0){let u=l[l.length-1];if(u.isOwningTheSameRcValueAs){let c=u.isOwningTheSameRcValueAs.name,p=u.isOwningTheSameRcValueAs.id;for(let[f,_]of r.stateMachineVariables)if(_.name===c||f===p)return`sm->${_.kind==="outer"?`__capture.${c}`:`var_${f}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(a)&&r.currentClosureCaptureFrameLevel!==void 0){let l=r.currentClosureCaptureTypeCName;return l?`((${l}*)closure_context)->${ve(a,e.$?.env)}`:`closure_context->${ve(a,e.$?.env)}`}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!fe(e.$.value)){let l=j(e.$.env,e.$.variableName);if(l.length>0&&l[l.length-1].isCompileTimeOnly)return Wt(e.$.value,t,e)}return ve(e.$.variableName,e.$.env)}}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!fe(e.$.value)){let a=j(e.$.env,e.$.variableName);if(a.length>0&&a[a.length-1].isCompileTimeOnly)return Wt(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0&&tr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return ve(e.$.variableName,e.$?.env)}if(e.$?.value&&!fe(e.$.value))return Wt(e.$.value,t,e);let i=e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0?tr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!e.$?.env||i)){let a=r.currentClosureCaptureTypeCName;return a?`((${a}*)closure_context)->${ve(e.token.value,e.$?.env)}`:`closure_context->${ve(e.token.value,e.$?.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let a=Object.values(r.functions).find(s=>s.cName===r.currentFunctionName);if(a&&a.value.type.isClosure){let s=Object.values(r.types).find(l=>H(l.type)&&l.type.isClosure&&l.type===a.value.type);if(s)return`((${`${s.cName}_capture`}*)closure_context->data)->${ve(e.token.value,e.$?.env)}`}}if(e.$?.env){let a=j(e.$.env,e.token.value);if(a.length>0){let s=a[a.length-1];if(s.value?.[0]&&ie(s.value[0])){let l=t.functions[s.value[0].funcId]?.cName;if(l)return l}else if(H(s.type)&&(fe(s.value?.[0])||s.value===void 0)){let l=Object.entries(t.functions).find(([u,c])=>c.value.funcName===e.token.value);if(l)return l[1].cName}}}return ve(e.token.value,e.$?.env)}function Ru(e,t,n){let r;if(Pt(e)){let y=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;y&&ie(y)&&(r=y.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=e.$?.type;if(!i||!we(i))return"/* Error: async block must have Future type */";let o=At(i);if(!o)return"/* Error: Could not extract Future module type */";let a=e.$?.variableName||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,c=`${a}_state_dispose`;n.types[i.id]={type:i,cName:s};let p=e.$?.awaitAnalysis;if(!p)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=o.isFuture.outputType,_=P(f,n),d=n.emitter;if(d.emitDeclarationLine(`void ${c}(void* sm_ptr); // Dispose function for state machine`),d.emitDeclarationLine(""),d.emitDeclarationLine(`void ${l}(${s}* sm);`),d.emitDeclarationLine(""),e.$?.captureType){let h=e.$.captureType,y=Object.values(n.types).find(E=>E.type===h),v=y?y.cName:`async_capture_${h.id}`;d.emitDeclarationLine(`${s}* ${u}(${v} __capture);`)}else d.emitDeclarationLine(`${s}* ${u}();`);d.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:f,resultTypeCName:_,captureType:e.$?.captureType,analysis:p});let g=e.$?.captureType;if(g){let h=Object.values(n.types).find(N=>N.type===g),y=h?h.cName:`async_capture_${g.id}`,v=n,E=v.currentClosureCaptures!==void 0||v.inAsyncStateMachine!==void 0||v.inEffectStateMachine!==void 0,$=!1,C=g.fields.map(N=>{if(N.isEffectParam)return`.${N.label} = NULL`;let D;if(!E&&e.$?.deferredDupExpressions)for(let z of e.$.deferredDupExpressions){let ee;if(F(z)&&(z.args.length>0&&U(z.args[0])?ee=z.args[0].token.value:z.args.length===0&&F(z.func)&&T(z.func,".")&&z.func.args.length>=2&&U(z.func.args[0])&&(ee=z.func.args[0].token.value)),ee===N.label){D=z;break}}if(D)return $=!0,D.$?.variableName?(S(D,t,n),`.${N.label} = ${D.$.variableName}`):`.${N.label} = ${S(D,t,n)}`;let V={tag:"Atom",token:N.exprs.expr.token,$:N.exprs.expr.$};return`.${N.label} = ${Ri(V,n)}`}).join(", "),L=`(${y}){${C}}`;if(!$){let N=Sn(g,n);N&&(L=`${N}(${L})`)}let b=e.$?.variableName||"async_result",O=`${u}(${L})`;if(b&&e.$?.type){let N=it(e.$.type,b,n);return n.emitter.emitLine(`${t}${N} = ${O};`),b}else return O}else{let h=e.$?.variableName||"async_result",y=`${u}()`;if(h&&e.$?.type){let v=it(e.$.type,h,n);return n.emitter.emitLine(`${t}${v} = ${y};`),h}else return y}}function Pu(e,t){let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${A(o)})`),n.emitDeclarationLine(`struct ${i}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(" int state; // Current state (0 = cold, 1..N = intermediate, -1 = completed, -2 = aborted)"),pe(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${A(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let f=Object.values(t.types).find(d=>d.type===s),_=f?f.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${_} __capture;`),n.emitDeclarationLine("")}let u=l.capturedVariables.filter(f=>f.kind!=="outer");if(u.length>0){n.emitDeclarationLine(" // Local variables");for(let f of u){let _=P(f.type,t),d=da(f.id,"local");n.emitDeclarationLine(` ${_} ${d}; // ${f.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let f of l.awaitPoints)if(!(pe(f.resultType)||M(f.resultType)&&!f.resultType.resolvedConcreteType)){let d=f.resultType;if(f.futureType){let h=At(f.futureType);h&&(d=h.isFuture.outputType)}let g=P(d,t);n.emitDeclarationLine(` ${g} await_result_${f.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let f=l.awaitPoints.filter(_=>_.futureVariableId===void 0);if(f.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let _ of f){let d=_.expr;if(d.tag!=="FnCall")continue;let h=d.args[0]?.$?.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let y=P(h,t);n.emitDeclarationLine(` ${y} await_future_${_.index};`)}n.emitDeclarationLine("")}}let c=l.awaitPoints.filter(f=>f.needsOwnCondBranchField);if(c.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let f of c)n.emitDeclarationLine(` int cond_branch_${f.index}; // Which branch was taken in cond with await ${f.index}`);n.emitDeclarationLine("")}let p=l.awaitPoints.filter(f=>f.isInsideWhile);if(p.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let f=l.awaitPoints.length;for(let _ of p){n.emitDeclarationLine(` _Bool while_loop_${_.index}_active; // Whether while loop ${_.index} should continue`);let d=(_.whileNestingDepth??1)-1;for(let g=0;g<d;g++)n.emitDeclarationLine(` _Bool while_loop_${f}_active; // Whether outer while loop ${f} should continue`),f++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function dm(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let l of t)n.set(l.structName,l);let r=new Map,i=new Map;for(let l of t)r.set(l.structName,new Set),i.set(l.structName,0);for(let l of t){let u=c=>{let p=r.get(c);p.has(l.structName)||(p.add(l.structName),i.set(l.structName,(i.get(l.structName)??0)+1))};for(let c of l.analysis.capturedVariables){let p;try{p=P(c.type,e)}catch{continue}let f=n.get(p);f&&f.structName!==l.structName&&u(f.structName)}for(let c of l.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let p=c.expr;if(p.tag!=="FnCall")continue;let _=p.args[0]?.$?.type;if(!_)continue;let d;try{d=P(_,e)}catch{continue}let g=n.get(d);g&&g.structName!==l.structName&&u(g.structName)}}let o=[];for(let[l,u]of i.entries())u===0&&o.push(l);let a=[];for(;o.length>0;){let l=o.shift();a.push(l);let u=r.get(l);if(u)for(let c of u){let p=(i.get(c)??0)-1;i.set(c,p),p===0&&o.push(c)}}let s=a.length===t.length?a.map(l=>n.get(l)).filter(Boolean):t;for(let l of s)Pu({asyncBlockId:l.asyncBlockId,structName:l.structName,resultType:l.resultType,resultTypeCName:l.resultTypeCName,captureType:l.captureType,analysis:l.analysis},e)}function mm(e,t,n,r,i,o,a){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(""),i&&Te(i)){let l=Object.values(a.types).find(u=>u.type===i);if(!l)s.emitLine(" /* Error: capture struct type not found in context */");else{let u=l.cName,c=i.trait.fields.find(p=>p.label===w.___drop[0]);if(c&&c.assignedValue&&ie(c.assignedValue)){let p=a.functions[c.assignedValue.funcId]?.cName;p&&(s.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),s.emitLine(` ${p}(sm->__capture);`))}else s.emitLine(` /* Warning: ___drop function not found for capture struct ${u} */`)}}if(s.emitLine(""),!pe(r)&&Te(r)){let l=P(r,a);s.emitLine(" // Drop result field if it was set (state == -1 means completed)"),s.emitLine(" int final_state = sm->state;"),s.emitLine(" if (final_state == -1) {"),s.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let u=Ar(r,a);u?s.emitLine(` ${u}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${l} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function ym(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let p=Object.values(u.types).find(_=>_.type===l),f=p?p.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${f} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;"),c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`),c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),pe(a)?c.emitLine(" // Result is unit type, no initialization needed"):c.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),c.emitLine(""),c.emitLine(` sm->__yo_resume_fn = (void(*)(void*))${n};`),c.emitLine(""),c.emitLine(" return sm;"),c.emitLine("}"),c.emitLine("")}function Uu(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;dm(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:p,resultType:f,resultTypeCName:_,captureType:d,analysis:g}=r;if(mm(a,s,c,f,d,g,e),t.emitLine(""),Vu(o,a,s,l,g,p,d,e),t.emitLine(""),ym(a,s,l,u,c,p,f,_,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let h=e.deferredAsyncBlocks.slice(i);for(let y of h)Pu({asyncBlockId:y.asyncBlockId,structName:y.structName,resultType:y.resultType,resultTypeCName:y.resultTypeCName,captureType:y.captureType,analysis:y.analysis},e)}n++}}function zu(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&Bu(n.body,e)}}function Bu(e,t){if(e&&F(e)){let n=e;if(Pt(e)){let r=e.$?.type;if(r&&we(r)&&At(r)){let a=`${e.$?.variableName||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=a),t.types[r.id]={type:r,cName:a},t.emitter.emitDeclarationLine(`typedef struct ${a}_struct ${a}; // Forward declaration for async state machine`)}}if(Pt(e)){let r=e.$?.type;if(r&&we(r)&&At(r)){let o=e.$?.variableName||`io_async_block_${Date.now()}`,a=!!e.$?.awaitAnalysis,s=a?`${o}_state_t`:`${o}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=s),t.types[r.id]={type:r,cName:s},t.emitter.emitDeclarationLine(`typedef struct ${s}_struct ${s}; // Forward declaration for io.async ${a?"state machine":"sync future"}`)}}for(let r of n.args)Bu(r,t)}}function Gu(e,t,n){let r=e.$?.type;if(!r||!we(r))return"/* Error: io.async must return a Future type */";let i=At(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType,a=P(o,n),s=e.$?.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,p=e.$?.runtimeArgExprsInOrder?.[0];if(!p?.$)return"/* Error: Missing closure argument for io.async */";let f=S(p,t,n),_=p.$.type,d,g;if(M(_)&&_.resolvedConcreteType){let b=_.resolvedConcreteType,O=n.implClosureCallMap.get(b.id);O&&(d=O.functionCName);let N=n.types[b.id];N&&(g=N.cName)}if(!d||!g)return"/* Error: no closure function or capture type for io.async sync path */";let h;for(let b in n.functions){let O=n.functions[b];if(O.cName===d&&O.effectStateMachineInfo){h=O.effectStateMachineInfo;break}}if(c.emitDeclarationLine(`struct ${s}_struct {`),c.emitDeclarationLine(" yo_ref_header_t header;"),c.emitDeclarationLine(" int state;"),pe(o)?c.emitDeclarationLine(" uint8_t result;"):c.emitDeclarationLine(` ${a} result;`),c.emitDeclarationLine(" void (*continuation_fn)(void*);"),c.emitDeclarationLine(" void* continuation_sm;"),c.emitDeclarationLine(" void (*__yo_resume_fn)(void*);"),c.emitDeclarationLine(` ${g} __capture;`),h&&c.emitDeclarationLine(` ${h.structName} __effect_sm;`),c.emitDeclarationLine("};"),c.emitDeclarationLine(""),h){c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),c.emitDeclarationLine(" sm->__effect_sm.closure_context = &sm->__capture;"),c.emitDeclarationLine(` ${h.resumeFunctionName}(&sm->__effect_sm);`),c.emitDeclarationLine(" if (sm->__effect_sm.completed) {"),pe(o)||c.emitDeclarationLine(" sm->result = sm->__effect_sm.result;"),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" } else {");let b=h.analysis;for(let O of b.effectCallPoints){for(let N=0;N<O.operationArgTypes.length;N++){let D=O.operationArgTypes[N];if(Te(D)){let V=wn(`sm->__effect_sm.yield_${N}`,D,n);V&&c.emitDeclarationLine(` ${V};`)}}break}c.emitDeclarationLine(" sm->state = -2;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine("}")}else c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),pe(o)?c.emitDeclarationLine(` ${d}(&sm->__capture);`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture);`),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine("}");c.emitDeclarationLine("");let y=p.$.captureType,v=y&&Te(y)?Ar(y,n):void 0,E=y&&Te(y)?Sn(y,n):void 0,$=Ar(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||$)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),$&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${$}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let C=e.$?.variableName||"__io_async_result",L=it(r,C,n);return c.emitLine(`${t}${L} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${C}, 0, sizeof(${s}));`),c.emitLine(`${t}${C}->header.ref_count = 1;`),c.emitLine(`${t}${C}->header.gc_flags = 0;`),c.emitLine(`${t}${C}->header.gc_mark = YO_GC_UNMARKED;`),c.emitLine(`${t}${C}->header.gc_next = NULL;`),c.emitLine(`${t}${C}->header.gc_prev = NULL;`),c.emitLine(`${t}${C}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${C}->header.traverse_fn = NULL;`),c.emitLine(`${t}${C}->__capture = ${f};`),E&&c.emitLine(`${t}${C}->__capture = ${E}(${C}->__capture);`),c.emitLine(`${t}${C}->state = 0;`),c.emitLine(`${t}${C}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${C}->continuation_fn = NULL;`),c.emitLine(`${t}${C}->continuation_sm = NULL;`),C}function Wu(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];ie(o)&&(dr(o.type,t),ni(o.body,t))}let n=new Set,r=!0;for(;r;){r=!1;for(let i in t.functions){if(n.has(i))continue;n.add(i),r=!0;let o=t.functions[i];if(dr(o.value.type,t),o.value.specializedType&&dr(o.value.specializedType,t),ni(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&It(a.value.type,t),ni(a.body,t)}}}function dr(e,t){for(let n of e.parameters)It(n.type,t);for(let n of e.forallParameters)It(n.type,t);It(e.return.type,t)}function ni(e,t){if(e.$&&e.$.type&&It(e.$.type,t),e.$&&e.$.value&&ie(e.$.value)){let n=e.$.value;n.isControlFunction?(dr(n.type,t),Jt(n.body,t)):t.functions[n.funcId]||n.type.parameters.map(o=>o.type).some(o=>M(o)&&we(o)&&!o.resolvedConcreteType)||(t.functions[n.funcId]={value:n,cName:K(n.funcId)},dr(n.type,t),Jt(n.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let n of e.$.deferredDropExpressions)ni(n,t);if(e.$&&e.$.macroExpansion&&ni(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:n}of e.$.runtimeDestructurings)It(n,t);if(e.$&&e.$.captureType&&ue(e.$.captureType)){let n=e.$.captureType;if(!t.types[n.id]){t.types[n.id]={type:n,cName:`yo_${n.id}`};for(let r of n.fields)It(r.type,t);for(let r of n.trait.fields)if(r.assignedValue&&ie(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},dr(i.type,t),Jt(i.body,t))}}}switch(e.tag){case"FnCall":if(T(e,I.test))break;ni(e.func,t);for(let n of e.args)ni(n,t);break;case"Atom":e.$?.value&&R(e.$.value)&&It(e.$.value.value,t);break}}function It(e,t){if(!t.types[e.id]){if(M(e)&&Gt(e)){if(e.resolvedConcreteType){It(e.resolvedConcreteType,t);return}let n=jt(e);n&&It(n,t);return}if(M(e)&&we(e)){let n=At(e);n&&It(n.isFuture.outputType,t);return}if(M(e)&&e.resolvedConcreteType){It(e.resolvedConcreteType,t);return}if(!Ae(e)){if(ue(e)||lt(e)||ye(e)||ke(e)||Ne(e)||Fe(e)||xe(e)||je(e)||kt(e)||bt(e)){let n=je(e)?P(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},ue(e))for(let r of e.fields)It(r.type,t);if(ye(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)It(i.type,t)}if(lt(e))for(let r of e.fields)It(r.type,t);if(Ne(e)){let r=e;for(let i of r.requiredTraits)It(i.traitType,t)}if(kt(e)){let r=e;It(r.childType,t),P(r,t)}if(bt(e)){let r=e;It(r.childType,t),P(r,t)}if(je(e)&&It(e.childType,t),Fe(e)||xe(e)){for(let r of e.fields)It(r.type,t);for(let r of e.fields)if(r.assignedValue&&ie(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:K(i.funcId)},dr(i.type,t),Jt(i.body,t))}else if(r.assignedValue&&(ft(r.assignedValue)||mt(r.assignedValue))){let i=r.assignedValue;Ao(i,t)}}}else if(be(e)){let n=e,r=n.childType,i=n.length;if(Oe(i)){It(r,t);let o=P(r,t),a=`Array_${K(o)}_${i.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),t.types[e.id]={type:e,cName:a}}}else if(Ie(e)){if(It(e.childType,t),je(e.childType)){let r=e.childType.childType;It(r,t);let i=P(r,t),o=`Slice_${K(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:P(e,t)}}else Au.has(e.tag)&&(t.types[e.id]={type:e,cName:P(e,t)});e.trait&&It(e.trait,t)}}}function ri(e){if(e.$&&e.$.value&&fe(e.$.value)&&!(H(e.$.type)&&e.$.type.isExtern)){if(!pe(e.$.type))return!0}if(F(e)){if(ri(e.func))return!0;for(let t of e.args)if(!(t.$?.type&&pe(t.$.type))&&ri(t))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&pe(e.$.type))return!1;if(ri(e.$.macroExpansion))return!0}if(e.$?.deferredDupExpressions){for(let t of e.$.deferredDupExpressions)if(ri(t))return!0}if(e.$?.deferredDropExpressions){for(let t of e.$.deferredDropExpressions)if(ri(t))return!0}return!1}function Ao(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];ie(r)&&(i.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:K(r.funcId)},Jt(r.body,t))}}function Jt(e,t){if(F(e)&&T(e,I.test)||F(e)&&T(e,w.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Jt(e.$.macroExpansion,t),e.$?.effectAnalysis){let i=e.$.effectAnalysis.handlerValue;i&&ie(i)&&Jt(i.body,t)}if(e.$&&e.$.closureFunctionValue){let i=e.$.closureFunctionValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:K(i.funcId)},Jt(i.body,t))}if(F(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let i=e.$.type,o=e.args[0];if(Ne(i)&&o&&o.$?.type){let a=o.$.type,s=e.$.dynCallTraitValues;if(s.length>0&&(dt(a)||hn(a))){let l=hn(a)?a.fields[0].type:a,u=`${l.id}_${i.id}`;t.dynImpls.set(u,{dynType:i,concreteType:l,dataType:a,traitValues:s})}}}if(F(e)){let i=e.func.$?.type,o=e.func.$?.value;if(e.func.token.value==="?=")return;if(H(i)){if(ie(o)&&o.isControlFunction){Jt(o.body,t);for(let a of e.args)Jt(a,t);return}if(ie(o)){if(o.type.return.isCompileTimeOnly||Ra(o)&&!o.specializedType||o.specializedType&&dn(o.specializedType))return;if(!t.functions[o.funcId]){let a=!1;if(ri(o.body)&&(a=!pi(o.type)&&o.type.implicitParameters.length>0,!a)||!a&&o.type.parameters.map(u=>u.type).some(u=>M(u)&&we(u)&&!u.resolvedConcreteType))return;t.functions[o.funcId]={value:o,cName:K(o.funcId)},Jt(o.body,t)}}else if(i.isExtern==="c"){let a=i.externName?i.externName:U(e.func)?e.func.token.value:i.id;t.externFunctions[i.id]={type:i,cName:a}}}Jt(e.func,t);for(let a of e.args)Jt(a,t)}let n=e.$?.type,r=e.$?.value;if(H(n)){if(ie(r)&&r.isControlFunction){Jt(r.body,t);return}if(ie(r)){if(Ra(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(ri(r.body))return;t.functions[r.funcId]={value:r,cName:K(r.funcId)},Jt(r.body,t)}}if(R(e.$?.value)&&It(e.$.value.value,t),e.$?.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)Jt(i,t);if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions)Jt(i,t);if(e.$?.dynCallTraitValues)for(let i of e.$.dynCallTraitValues)Ao(i,t)}function Hu(e){let t=w.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!ue(r)||!r.isReferenceSemantics)continue;let i=Jn({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&ie(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:K(a.funcId)},dr(a.type,e),Jt(a.body,e)}}}function Yu(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:i}=e.externFunctions[n];i.isExtern!=="yo"&&(i.isExtern==="c"&&i.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||qu(i,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"),gm(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),hm(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let n in e.functions){let{cName:r,value:i}=e.functions[n],o=r==="__yo_user_main",a=i.body?.$?.effectAnalysis,s=a&&a.hasEffects;if(!o&&!i.type.isClosure&&i.specializedFunctionCaches?.length>0||!o&&!s&&!i.type.isClosure&&!i.specializedType&&(i.specializedFunctionCaches?.length??0)===0&&[...i.type.implicitParameters,...i.type.parameters.filter(_=>_.isImplicit)].some(_=>H(_.type))||!o&&!s&&(pi(i.type)&&!i.type.isClosure||i.specializedFunctionCaches?.length>0&&!i.type.isClosure||ti(i)||Si(i)||i.isIoAsyncStateMachineClosure))continue;let u=i.specializedType??i.type,c=!s&&(u.parameters.some(_=>Ae(_.type))||u.forallParameters.length>0),p=Ae(u.return.type),f=M(u.return.type)&&u.return.type.requiredTraits.length>0;c||p&&!f||qu(u,r,!1,e,i.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function ii(e,t,n,r){let i=r||P(e.return.type,n),o=e.parameters.filter(u=>!u.isCompileTimeOnly),a=[];e.isClosure&&a.push("void* closure_context");let s=o.map((u,c)=>{let p=K(u.label||`param${c}`);if(H(u.type))return ii(u.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let f;return M(u.type)&&we(u.type)?u.type.resolvedConcreteType?f=P(u.type.resolvedConcreteType,n)+"*":f=P(u.type,n):f=P(u.type,n),`${f} ${p}`}});a.push(...s);let l=a.join(", ");return`${i} ${t}(${l})`}function qu(e,t,n,r,i){let o;if(i&&we(e.return.type)){let l=ko(i);l?.$?.asyncStateMachineStructName?o=`${l.$.asyncStateMachineStructName}*`:i.$?.type&&M(i.$.type)&&we(i.$.type)&&(o=P(i.$.type,r))}if(i&&M(e.return.type)&&!we(e.return.type)&&i.$?.type&&(o=P(i.$.type,r)),!o&&i&&i.$?.type&&!we(e.return.type)){let l=P(e.return.type,r),u=P(i.$.type,r);l!==u&&(o=u)}let a=o?ii(e,t,r,o):ii(e,t,r),s=A(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function gm(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:i}=e.types[n];if(ue(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ae(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=P(l.type,e),c=K(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`${i}* ${a}(${s}); // Constructor`)}}}function hm(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 ju(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(ti(r)||!o||!dn(r.type)||dn(o))continue;let a=o.parameters.some(l=>Ae(l.type)),s=Ae(o.return.type);a||s||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${ii(o,i,e)}; // specialized function: ${A(r.type)}`))}}function Ku(e){let t=e.emitter,n=new Set;for(let[,r]of e.dynImpls){let i=e.types[r.dynType.id]?.cName||`yo_dyn_${r.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 Xu(e){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[,r]of e.dynImpls){let o=`yo_dyn_box_${e.types[r.concreteType.id]?.cName||`unknown_${r.concreteType.id}`}`;if(n.has(o))continue;n.add(o);let a=P(r.concreteType,e);t.emitLine(`${o}* __yo_new_${o}(${a} value) {`),t.emitLine(` ${o}* box = (${o}*)__yo_malloc(sizeof(${o}));`),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_${o};`),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_${o}(void* ptr) {`),t.emitLine(` ${o}* box = (${o}*)ptr;`);let l=(M(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType).trait?.fields.find(u=>u.label===w.___drop[0]);if(l&&l.assignedValue&&ie(l.assignedValue)){let u=e.functions[l.assignedValue.funcId]?.cName;u&&t.emitLine(` ${u}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function Qu(e){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[n,r]of e.dynImpls){let i=r.dataType,o=new Set([w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]]);for(let{traitType:a}of r.dynType.requiredTraits){if(!Et(a))continue;let s=a.isFn.callType,l=P(s.return.type,e),u=`yo_wrap_${n}_call`,c=["void* self_ptr"];for(let p=0;p<s.parameters.length;p++){let f=s.parameters[p],_=P(f.type,e);c.push(`${_} arg${p+1}`)}if(t.emitDeclarationLine(`static ${l} ${u}(${c.join(", ")}) {`),hn(i)){let p=e.types[i.id]?.cName||`unknown_${i.id}`,f=K(i.fields[0].label);t.emitDeclarationLine(` ${p}* box = (${p}*)self_ptr;`);let _=i.fields[0].type,d=M(_)&&_.resolvedConcreteType?_.resolvedConcreteType:_,g=e.implClosureCallMap.get(d.id),h=(()=>{if(g)return g.functionCName;for(let[,v]of Object.entries(e.functions))if(v.value.closureInfo?.captureType?.id===d.id)return v.cName})(),y=[];if(h){y.push(`(void*)&box->${f}`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);ir(s.return.type)?t.emitDeclarationLine(` ${h}(${y.join(", ")});`):t.emitDeclarationLine(` return ${h}(${y.join(", ")});`)}else{y.push(`box->${f}.data`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);ir(s.return.type)?t.emitDeclarationLine(` box->${f}.call(${y.join(", ")});`):t.emitDeclarationLine(` return box->${f}.call(${y.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let p=0;p<s.parameters.length;p++)t.emitDeclarationLine(` (void)arg${p+1};`);ir(s.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${l} zero = (${l})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let a=0;a<r.dynType.requiredTraits.length;a++){let{traitType:s}=r.dynType.requiredTraits[a];if(Et(s))continue;let l=r.traitValues[a];if(!l){t.emitDeclarationLine(`/* Warning: Module value missing for module ${a} */`);continue}let c=l.type.fields;for(let p=0;p<c.length;p++){let f=c[p];if(f.label==="Self"||o.has(f.label))continue;let _=l.fields[p];if(!_||!ie(_)){t.emitDeclarationLine(`/* Warning: Module field ${f.label} is not a function value */`);continue}let d=f.type;if(!H(d)){t.emitDeclarationLine(`/* Warning: Module field ${f.label} is not a function type */`);continue}let g=_.funcId,h=e.functions[g]?.cName;if(!h){t.emitDeclarationLine(`/* Warning: Impl function for ${f.label} not found */`);continue}let y=`yo_wrap_${n}_${f.label}`,v=P(d.return.type,e),E=["void* self_ptr"];for(let b=1;b<d.parameters.length;b++){let O=d.parameters[b],N=P(O.type,e);E.push(`${N} arg${b}`)}t.emitDeclarationLine(`static ${v} ${y}(${E.join(", ")}) {`);let $=d.parameters[0]?.type,C;if(hn(i)){let b=e.types[i.id]?.cName||`unknown_${i.id}`,O=K(i.fields[0].label);t.emitDeclarationLine(` ${b}* box = (${b}*)self_ptr;`),$&&Ie($)?C=`&box->${O}`:C=`box->${O}`}else{let b=P(r.concreteType,e);t.emitDeclarationLine(` ${b} concrete_value = (${b})self_ptr;`),$&&Ie($)?C="&concrete_value":C="concrete_value"}let L=[C];for(let b=1;b<d.parameters.length;b++)L.push(`arg${b}`);ir(d.return.type)?t.emitDeclarationLine(` ${h}(${L.join(", ")});`):t.emitDeclarationLine(` return ${h}(${L.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function Zu(e){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[n,r]of e.dynImpls){let i=e.types[r.dynType.id]?.cName||`yo_dyn_${r.dynType.id}`,o=e.types[r.concreteType.id]?.cName||`unknown_${r.concreteType.id}`,a=`yo_vtable_${n}`,s=`${i}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${o}, ${r.dynType.requiredTraits.map(({traitType:c})=>c.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${s} ${a} = {`);let l=new Set,u=new Set([w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]]);for(let{traitType:c}of r.dynType.requiredTraits){if(Et(c)){let p=`yo_wrap_${n}_call`;t.emitDeclarationLine(` .call = ${p},`),l.add("call");continue}for(let p of c.fields)if(p.label!=="Self"&&!u.has(p.label)&&!l.has(p.label)&&(l.add(p.label),H(p.type))){let f=p.type;if(f.parameters.length>0){let _=f.parameters[0];if(_&&_.label==="self"){let d=`yo_wrap_${n}_${p.label}`;t.emitDeclarationLine(` .${K(p.label)} = ${d},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function ma(e,t,n,r=!1,i){let o=H(n)?n:void 0,s=aa(e,{detect(u,c,p){if(u.tag!=="FnCall")return;if(Ju(u,t,i,!0)){let _=[];for(let g of u.args)g.$?.type&&_.push(g.$.type);if(_.length===0&&o)for(let g of o.parameters)g.isCompileTimeOnly||_.push(g.type);let d=u.$?.type??o?.return.type;if(_.length>0&&d){let g=ho(c);p.push({index:p.length,expr:u,operationArgTypes:_,operationResultType:d,targetVariableId:g})}}if(r&&!Ju(u,t,i)){let _=vm(u,t);if(_){let d=n,g=d.parameters.filter(y=>!y.isCompileTimeOnly).map(y=>y.type),h=_.viaClosure?d.return.type:u.$?.type;if(g.length>0&&h){let y=ho(c);p.push({index:p.length,expr:u,operationArgTypes:g,operationResultType:h,targetVariableId:y,isTransitiveEffectCall:!0,isTransitiveClosureCall:_.viaClosure})}}}},shouldSkipBody(u){return Pt(u)}}),l=s.capturedVariables.map(u=>({id:u.id,name:u.name,type:u.type,isOwningTheSameRcValueAs:void 0}));return{effectCallPoints:s.suspensionPoints,capturedVariables:l,hasEffects:s.hasSuspensions,variableIdRemapping:s.variableIdRemapping,effectParameterName:t,effectParameterType:n,effectFieldPath:i}}function Ju(e,t,n,r=!1){if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let l=i.$?.type;return!(!r&&(!l||!H(l))||r&&l&&!H(l))}let o=[],a=i;for(;a.tag==="FnCall"&&T(a,".")&&a.args.length>=2;){let l=a.args[1];if(!l||l.tag!=="Atom")return!1;o.unshift(l.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let l=0;l<o.length;l++)if(o[l]!==n[l])return!1;let s=i.$?.type;return!(!r&&(!s||!H(s))||r&&s&&!H(s))}function vm(e,t){if(e.tag!=="FnCall")return;let n=e.func.$?.type;if(!n)return;if(H(n)){if(!n.implicitParameters)return;for(let i of n.implicitParameters){if(i.label===t&&(H(i.type)||Fe(i.type)))return{matched:!0,viaClosure:!1};if(i.isEffectRowSpread&&ec(i,t,e.func.$?.env))return{matched:!0,viaClosure:!1}}return}let r=jt(n);if(r){let i=r.isFn.callType;if(i.implicitParameters)for(let o of i.implicitParameters){if(o.label===t&&(H(o.type)||Fe(o.type)))return{matched:!0,viaClosure:!0};if(o.isEffectRowSpread&&ec(o,t,e.func.$?.env))return{matched:!0,viaClosure:!0}}}}function ec(e,t,n){if(!n)return!1;let r=e.type,i;if(M(r)&&r.isEffectsRow){let a=j(n,e.label).at(-1)?.value?.[0];if(a&&R(a)&&_t(a.value))i=a.value;else{let s=Mt(n,r);_t(s)&&(i=s)}}else _t(r)&&(i=r);if(i){for(let o of i.implicitParameters)if(o.label===t&&(H(o.type)||Fe(o.type)))return!0}return!1}function tc(e){e.emitLine(`
189
+ `}else if(R(e)){let r=e.value;if(r)return t.types[r.id]?t.types[r.id].cName:`/* Error: No C type name found for type ${A(r)} */`}else if(fi(e)){let r=e.targetValue[0];if(r){let i=n?.$?.convertedRuntimeType||n?.$?.type;if(i&&Ie(i)){let o=i.childType,a=Wt(r,t,{$:{type:o,convertedRuntimeType:o}});if(a&&!a.startsWith("/*")&&!a.startsWith("//"))return`(&${a})`}}return`/* Error: Cannot generate pointer value ${Se(e)} */`}}return`/* skip generating: ${Se(e)} */`}function Ir(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(Ir(e.func,t,n))return!0;for(let r of e.args)if(Ir(r,t,n))return!0}return!1}function lm(e,t,n){for(let r=0;r<t.length;r++)if(Ir(e,t[r].expr,n))return r;return-1}function ma(e,t,n){let r=[],i=n?.shouldSkipBody;if(e.tag!=="FnCall"||!T(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],suspensionPoint:null}]:[{stateNumber:0,expressions:[e],suspensionPoint:t[0]??null}];let o=e.args,a=[],s=[];for(let l of o){let u=lm(l,t,i),c=n?.handleReturnStatements&&(ht(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n?.handleSequentialSuspensions)for(let p=u+1;p<t.length&&Ir(l,t[p].expr,i);p++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}function Su(e,t){let r=ma(e,t,{shouldSkipBody:Pt,handleReturnStatements:!0,handleSequentialSuspensions:!0}).map(i=>({stateNumber:i.stateNumber,expressions:i.expressions,awaitPoint:i.suspensionPoint}));return r.length>0&&r[r.length-1].awaitPoint!==null&&r.push({stateNumber:r.length,expressions:[],awaitPoint:null}),r}function um(e,t){return Ir(e,t,Pt)}function Vu(e,t,n,r=!1){let i=n.emitter;for(let o=0;o<e.expressions.length;o++){let a=e.expressions[o],s=o===e.expressions.length-1,l=e.awaitPoint&&um(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,I.while)||T(a,I.cond)||T(a,I.match))&&Zt(a);if((l||u)&&e.awaitPoint)Oi(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=S(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=S(a,t,n);!c||!a.$||Qe(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Oi(e,t,n,r,i){let o=i.emitter;if(e.tag==="FnCall"&&fn(e)){let a=e.args[0];if(!a){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let s=S(a,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${s};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&T(e,":=")){let a=e.args[0],s=e.args[1];if(!a||!s){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(s.tag==="FnCall"&&fn(s)){let l=s.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}let u=a.token?.value;if(!u||!a.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let c=S(l,r,i);o.emitLine(`${r}// Store Future for await (variable: ${u})`),o.emitLine(`${r}sm->await_future_${t.index} = ${c};`)}else o.emitLine(`${r}// Store Future for await (variable: ${u}) - future already in state machine`);return}if(s.tag==="FnCall"&&T(s,I.cond)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=j(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}wo(s,t,r,i,l);return}if(s.tag==="FnCall"&&T(s,I.match)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=j(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}Fo(s,t,r,i,l);return}}if(e.tag==="FnCall"&&T(e,"=")){let a=e.args[0],s=e.args[1];if(a&&s){if(s.tag==="FnCall"&&T(s,I.cond)){let l=S(a,r,i);wo(s,t,r,i,void 0,l||void 0);return}if(s.tag==="FnCall"&&T(s,I.match)){let l=S(a,r,i);Fo(s,t,r,i,void 0,l||void 0);return}}}if(e.tag==="FnCall"&&T(e,I.cond)){wo(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,I.match)){Fo(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,I.while)){qs(e,t,r,i);return}o.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),o.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FnCall"?e.func.tag==="Atom"?e.func.token?.value:e.func.tag:"N/A"}`)}function wo(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!T(e,I.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let h=0;h<s.length;h++){let y=s[h];if(y.tag==="FnCall"&&T(y,"=>")){let v=y.args[0];if(v&&!(Re(v.$?.value)&&v.$.value.value===!1)){u=h;break}}}let c=!1;if(u>=0){let h=s[u];if(h.tag==="FnCall"&&T(h,"=>")){let y=h.args[0];y&&Re(y.$?.value)&&y.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let h=s[u],y=F(h)?h.args[1]:void 0;if(y)if(xr(y)){let C=Mi(y,t,n,r),L=r.asyncWhileLoopInfo?.get(t.index);if(L&&C.length>0){let O=r.asyncCondBranchInfo?.get(t.index)?.branches.some(N=>N.hasAwait&&N.remainingExprs&&N.remainingExprs.length>0)??!1;L.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:C,deferredDropExpressions:y.$?.deferredDropExpressions,skipCondBranchCheck:O},l.push({index:u,value:y,hasAwait:!0,remainingExprs:[],deferredDropExpressions:y.$?.deferredDropExpressions})}else l.push({index:u,value:y,hasAwait:!0,remainingExprs:C,deferredDropExpressions:y.$?.deferredDropExpressions})}else{if(Vi(e,y,r,i,o))Di(y,n,r);else if(F(y)&&T(y,I.begin)){let C=y.args;for(let L=0;L<C.length;L++){let b=C[L],O=S(b,n,r);if(O==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let N=O==="break"||O==="continue"||O?.includes("return");O&&(N||b.$&&!Qe(b.$.env.modulePath,O))&&a.emitLine(`${n}${O};`)}}if(y.$?.deferredDropExpressions)for(let L of y.$.deferredDropExpressions){let b=S(L,n,r);b&&a.emitLine(`${n}${b};`)}}else{let C=S(y,n,r);if(C==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let L=C==="break"||C==="continue"||C?.includes("return");C&&(L||y.$&&!Qe(y.$.env.modulePath,C))&&a.emitLine(`${n}${C};`)}}l.push({index:u,value:y,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some($=>$.hasAwait&&$.remainingExprs&&$.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let p=!1,f=0,_=n;for(let h=0;h<s.length;h++){let y=s[h];if(y.tag!=="FnCall"||!T(y,"=>")){a.emitLine(`${_}// Error: Expected => pair in cond`);continue}let v=y.args[0],E=y.args[1];if(!v||!E){a.emitLine(`${_}// Error: Invalid pair in cond`);continue}if(Re(v.$?.value)&&v.$.value.value===!1)continue;p&&(a.emitLine(`${_}else {`),f++,_+=" ");let $=h===s.length-1&&v.tag==="Atom"&&v.token?.value==="true"?null:S(v,_,r);$?a.emitLine(`${_}if (${$}) {`):a.emitLine(`${_}{`),p=!0;let C=`${_} `;if(xr(E)){a.emitLine(`${C}sm->cond_branch_${t.index} = ${h};`);let b=Mi(E,t,C,r),O=r.asyncWhileLoopInfo?.get(t.index);if(O&&b.length>0){let M=r.asyncCondBranchInfo?.get(t.index)?.branches.some(V=>V.hasAwait&&V.remainingExprs&&V.remainingExprs.length>0)??!1;O.condBranchPostWhileExprs={branchIndex:h,condBranchFieldIndex:t.index,exprs:b,deferredDropExpressions:E.$?.deferredDropExpressions,skipCondBranchCheck:M},l.push({index:h,value:E,hasAwait:!0,remainingExprs:[],deferredDropExpressions:E.$?.deferredDropExpressions})}else l.push({index:h,value:E,hasAwait:!0,remainingExprs:b,deferredDropExpressions:E.$?.deferredDropExpressions})}else{if(Vi(e,E,r,i,o))Di(E,C,r);else if(F(E)&&T(E,I.begin)){let b=E.args;for(let O=0;O<b.length;O++){let N=b[O],M=S(N,C,r);if(M==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let V=M==="break"||M==="continue"||M?.includes("return");M&&(V||N.$&&!Qe(N.$.env.modulePath,M))&&a.emitLine(`${C}${M};`)}}if(E.$?.deferredDropExpressions)for(let O of E.$.deferredDropExpressions){let N=S(O,C,r);N&&a.emitLine(`${C}${N};`)}}else{let b=S(E,C,r);if(b==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let O=b==="break"||b==="continue"||b?.includes("return");b&&(O||E.$&&!Qe(E.$.env.modulePath,b))&&a.emitLine(`${C}${b};`)}}l.push({index:h,value:E,hasAwait:!1})}a.emitLine(`${_}}`)}for(let h=0;h<f;h++)_=_.slice(0,-2),a.emitLine(`${_}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some(h=>h.hasAwait&&h.remainingExprs&&h.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function Vi(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!Du(t)}function Di(e,t,n){let r=n.emitter,i=pe(e.$?.type);if(F(e)&&T(e,I.begin)){let o=e.args;for(let s=0;s<o.length-1;s++){let l=o[s],u=S(l,t,n);u&&l.$&&!Qe(l.$.env.modulePath,u)&&r.emitLine(`${t}${u};`)}let a=o[o.length-1];if(a&&!i){let s=S(a,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions){let l=S(s,t,n);l&&r.emitLine(`${t}${l};`)}}else if(!i){let o=S(e,t,n);o&&r.emitLine(`${t}sm->result = ${o};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let o of n.pendingDeferredDrops){let a=S(o,t,n);a&&a.includes("sm->")&&r.emitLine(`${t}${a};`)}fr({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function xr(e){if(e.tag==="FnCall"&&fn(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(xr(t))return!0}return!1}function Du(e){if(ht(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Du(t))return!0}return!1}function Fo(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!T(e,I.match)){a.emitLine(`${n}// Error: Expected match expression`);return}let s=e.args[0],l=e.args.slice(1);if(!s||l.length===0){a.emitLine(`${n}// Error: match must have a value and at least one case`);return}let u=S(s,n,r),c=s.$?.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if(e.$?.isPrimitiveMatch){pm(e,l,u,t,n,r,i,o);return}if(!ye(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let p=c,f=r.types[p.id]?.cName;if(!f){a.emitLine(`${n}// Error: enum type has no C name`);return}let _=Kt(p);if(_){let d=-1,g=-1,h;for(let y=0;y<l.length;y++){let v=l[y];if(F(v)&&T(v,"=>",2)){let E=v.args[0];if(E&&F(E)&&T(E,"."))d=y;else if(E&&F(E)){let $=E.func;$&&F($)&&T($,".")&&(g=y,E.args.length>0&&U(E.args[0])&&(h=E.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),g>=0){let y=l[g];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(h){let E=r,$=!1,C;if(E.stateMachineVariables){for(let[L,b]of E.stateMachineVariables)if(b.name===h){$=!0,C=L;break}}$&&C?a.emitLine(`${n} sm->var_${C} = ${u};`):a.emitLine(`${n} ${P(_,r)} ${h} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${g};`),xr(v)){let E=Mi(v,t,n+" ",r);if(E.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:g,value:v,hasAwait:!0,remainingExprs:E,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(Vi(e,v,r,i,o))Di(v,n+" ",r);else{let E=S(v,n+" ",r);if(i){let $=K(`var_${i}`);E&&a.emitLine(`${n} sm->${$} = ${E};`)}else o?E&&a.emitLine(`${n} ${o} = ${E};`):E&&v.$&&!Qe(v.$.env.modulePath,E)&&a.emitLine(`${n} ${E};`)}}}if(a.emitLine(`${n}} else {`),d>=0){let y=l[d];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${d};`),xr(v)){let E=Mi(v,t,n+" ",r);if(E.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:d,value:v,hasAwait:!0,remainingExprs:E,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(Vi(e,v,r,i,o))Di(v,n+" ",r);else{let E=S(v,n+" ",r);if(i){let $=K(`var_${i}`);E&&a.emitLine(`${n} sm->${$} = ${E};`)}else o?E&&a.emitLine(`${n} ${o} = ${E};`):E&&v.$&&!Qe(v.$.env.modulePath,E)&&a.emitLine(`${n} ${E};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let d=!1;for(let g=0;g<l.length;g++){let h=l[g];if(!F(h)||!T(h,"=>",2))continue;let y=h.args[0],v=h.args[1],E=U(y)&&y.token.value==="_",$;if(!E){if(F(y)&&T(y,".",1))$=y.args[0].token.value;else if(F(y)){let C=y.func;C&&F(C)&&T(C,".",1)&&($=C.args[0].token.value)}}if(!E&&!$){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(E)d=!0,a.emitLine(`${n} default: {`);else{let C=`${f.toUpperCase()}_${$.toUpperCase()}`;a.emitLine(`${n} case ${C}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${g};`),F(y)&&y.args.length>=1){let C=y.func;if(C&&F(C)&&T(C,".")){let L=p.variants.find(b=>b.name===$);if(L&&L.fields)for(let b=0;b<Math.min(y.args.length,L.fields.length);b++){let O=y.args[b],N=L.fields[b];if(U(O)&&N){let M=O.token.value,V=K(M),z=r,ee=!1,ne;if(z.stateMachineVariables){for(let[de,he]of z.stateMachineVariables)if(he.name===M){ee=!0,ne=de;break}}let G=K(N.label,N.type.isExtern==="c"),J=`${u}.data.${$}.${G}`;if(ee&&ne)a.emitLine(`${n} sm->var_${ne} = ${J};`);else{let de=P(N.type,r);a.emitLine(`${n} ${de} ${V} = ${J};`)}}}}}if(xr(v)){let C=Mi(v,t,n+" ",r);if(C.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let b=L.asyncCondBranchInfo.get(t.index)||{branches:[]};b.branches.push({index:g,value:v,hasAwait:!0,remainingExprs:C,deferredDropExpressions:v.$?.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,b)}}else if(Vi(e,v,r,i,o))Di(v,n+" ",r);else{let C=S(v,n+" ",r);if(i){let L=K(`var_${i}`);C&&a.emitLine(`${n} sm->${L} = ${C};`)}else o?C&&a.emitLine(`${n} ${o} = ${C};`):C&&v.$&&!Qe(v.$.env.modulePath,C)&&a.emitLine(`${n} ${C};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}d||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function cm(e){return F(e)?T(e,"|",2):!1}function Ws(e){if(!cm(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Ws(t),...Ws(n)]}function pm(e,t,n,r,i,o,a,s){let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let c=0;c<t.length;c++){let p=t[c];if(!F(p)||!T(p,"=>",2))continue;let f=p.args[0],_=p.args[1];if(ht(f,"_"))l.emitLine(`${i} default:`);else{let d=f.$?.primitivePatternValues;if(d&&d.length>0){for(let g of d)if(g!==void 0){let h=Wt(g,o);l.emitLine(`${i} case ${h}:`)}}else{let g=Ws(f);for(let h of g){let y=h.$?.value;if(y!==void 0){let v=Wt(y,o);l.emitLine(`${i} case ${v}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${c};`),xr(_)){let d=Mi(_,r,i+" ",o);u.push({index:c,value:_,hasAwait:!0,remainingExprs:d,deferredDropExpressions:_.$?.deferredDropExpressions})}else{if(Vi(e,_,o,a,s))Di(_,i+" ",o);else{let d=S(_,i+" ",o);if(a){let g=K(`var_${a}`);d&&l.emitLine(`${i} sm->${g} = ${d};`)}else s?d&&l.emitLine(`${i} ${s} = ${d};`):d&&_.$&&!Qe(_.$.env.modulePath,d)&&l.emitLine(`${i} ${d};`)}u.push({index:c,value:_,hasAwait:!1})}l.emitLine(`${i} break;`)}l.emitLine(`${i}}`),o.asyncCondBranchInfo||(o.asyncCondBranchInfo=new Map),o.asyncCondBranchInfo.set(r.index,{branches:u,targetVariableId:a,targetAssignmentCode:s})}function Mi(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!T(e,"begin"))return i.emitLine(`${n}// Error: Expected begin block in cond branch with await`),o;let a=e.args,s=!1;for(let l of a){if(s){o.push(l);continue}if(xr(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&fn(u)){let c=u.args[0];if(c){let p=S(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${p};`)}}}else if(l.tag==="FnCall"&&fn(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=S(u,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}else i.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else if(l.tag==="FnCall"&&T(l,I.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),wo(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,I.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),Fo(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&T(l,I.while)&&qs(l,t,n,r);else{let u=S(l,n,r);u&&l.$&&!Qe(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function qs(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!T(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length!==2){i.emitLine(`${n}// Error: while must have exactly 2 arguments (condition, body)`);return}let a=o[0],s=o[1],l=_m(s),u;l?(u=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=u+1):u=t.index,i.emitLine(`${n}sm->while_loop_${u}_active = true;`),i.emitLine(`${n}while_loop_${u}_start:`);let c=S(a,n,r);i.emitLine(`${n}if (!(${c})) {`),i.emitLine(`${n} sm->while_loop_${u}_active = false;`),i.emitLine(`${n} goto while_loop_${u}_end;`),i.emitLine(`${n}}`);let p=fm(s,t,n,r,u);if(i.emitLine(`${n}while_loop_${u}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),l){let f=r.asyncWhileLoopInfo.get(t.index);f&&(f.outerWhileLoop={whileLoopIndex:u,conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:p})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:p})}function fm(e,t,n,r,i){let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let _=0;_<s.length;_++){let d=s[_];if(Zt(d)){l=_;break}}if(l===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),a;let u=r.smWhileBreakInfo,c=r.smWhileContinueInfo,p=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...e.$?.deferredDropExpressions??[]];for(let _=0;_<l;_++){let d=s[_],g=S(d,n,r);g&&d.$&&!Qe(d.$.env.modulePath,g)&&o.emitLine(`${n}${g};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=p;let f=s[l];if(F(f)&&T(f,I.while)&&Zt(f)){qs(f,t,n,r);for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}if(F(f)&&T(f,":=")){let _=f.args[1];if(_&&_.tag==="FnCall"&&fn(_)){let d=_.args[0];if(d){let g=S(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${g};`)}}}else if(f.tag==="FnCall"&&fn(f)){let _=f.args[0];if(_&&t.futureVariableId===void 0){let d=S(_,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(F(f)&&T(f,I.cond)){wo(f,t,n,r,void 0);for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}else if(F(f)&&T(f,I.match)){Fo(f,t,n,r);for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}for(let _=l+1;_<s.length;_++)a.push(s[_]);return a}function _m(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,I.while)&&Zt(n))return!0;return!1}function Ys(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 Lo(e){return!e||!D(e)?!1:e.resolvedConcreteType&&D(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Po(t.traitType))}function ya(e,t){return t==="outer"?`__capture.${K(e)}`:K(`var_${e}`)}function Mu(e,t,n,r,i,o,a,s){let l=s.emitter,c=It(o).isFuture.outputType,p=pe(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let f=Su(e,i.awaitPoints),_=e.tag==="FnCall"&&T(e,"begin")?e.args:[e],d=_.length>0?_[_.length-1]:void 0;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 g=0;g<f.length;g++){let h=f[g];if(!h)continue;let y=h.stateNumber,v=g===f.length-1;if(l.emitLine(`
190
+ state_${y}:`),l.emitLine(` case ${y}: { // State ${y}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${y}\\n");`),y>0&&i.awaitPoints[y-1]){let V=i.awaitPoints[y-1],z=Ys(V,i);V.isInsideCond&&l.emitLine(` if (sm->${z} != NULL) {`);let ee=pe(V.resultType)||D(V.resultType)&&!V.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${z}->state == -2) {`),l.emitLine(' fprintf(stderr, "panic: attempted to await an aborted Future\\n");'),l.emitLine(" abort();"),l.emitLine(" }"),V&&!ee){if(l.emitLine(` // Extract result from await ${y-1}`),l.emitLine(` int state_before_read = sm->${z}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${y-1}, state=%d\\n", state_before_read);`),Te(V.resultType)){let G=Sn(V.resultType,s);G?l.emitLine(` sm->await_result_${y-1} = ${G}(sm->${z}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${y-1} = sm->${z}->result;`))}else l.emitLine(` sm->await_result_${y-1} = sm->${z}->result;`);if(V.targetVariableId){let G=ya(V.targetVariableId,"local");l.emitLine(` sm->${G} = sm->await_result_${y-1};`)}l.emitLine("")}if(!V.futureVariableId){let G=V.expr;if(G.tag==="FnCall"){let de=G.args[0]?.$?.type;de&&(D(de)||Ne(de))&&(l.emitLine(` if (sm->${z} != NULL) { __yo_decr_rc((void*)sm->${z}); sm->${z} = NULL; }`),l.emitLine(""))}}let ne=s;if(V){let G=ne.asyncCondBranchInfo?.get(V.index);if(G&&G.branches.some(de=>de.hasAwait)){let de=G.condBranchFieldIndex??V.index,he=de===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),he||l.emitLine(` switch (sm->cond_branch_${de}) {`);let $e=h.awaitPoint?.isInsideCond??!1;for(let B of G.branches)if(B.hasAwait){if(he||l.emitLine(` case ${B.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${B.index}\\n");`),B.remainingExprs&&B.remainingExprs.length>0){let oe=s.inAsyncStateMachine,se=s.stateMachineVariables,le=s.variableIdRemapping,Ce=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Me=ne.asyncWhileLoopInfo?.get(V.index);s.pendingDeferredDrops=[...B.deferredDropExpressions??[],...Me?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let X=new Map;for(let me of i.capturedVariables)X.set(me.id,me);if(a)for(let me of a.fields)X.set(me.label,{id:me.label,name:me.label,type:me.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=X;let Z=!1,re=[],ce=G.targetAssignmentCode;for(let me=0;me<B.remainingExprs.length;me++){let te=B.remainingExprs[me],Ae=me===B.remainingExprs.length-1;if(Z){re.push(te);continue}if($e&&Zt(te)){Z=!0,Hs(te,h.awaitPoint,i," ",s);continue}let Ee=S(te," ",s);!Ee||!te.$||Qe(te.$.env.modulePath,Ee)||(Ae&&ce?l.emitLine(` ${ce} = ${Ee};`):l.emitLine(` ${Ee};`))}if(B.remainingExprs.length===0&&ce&&l.emitLine(` ${ce} = sm->await_result_${V.index};`),Z&&h.awaitPoint){let me=h.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let te=ne.asyncCondBranchInfo.get(me);if(te)te.chainedBranches||(te.chainedBranches=[]),te.chainedBranches.push({branches:[{index:B.index,value:B.value,hasAwait:re.length>0||re.some(Ae=>Zt(Ae)),remainingExprs:re,deferredDropExpressions:B.deferredDropExpressions}],condBranchFieldIndex:de});else{let Ae={branches:[{index:B.index,value:B.value,hasAwait:re.length>0||re.some(Ee=>Zt(Ee)),remainingExprs:re,deferredDropExpressions:B.deferredDropExpressions}],condBranchFieldIndex:de};ne.asyncCondBranchInfo.set(me,Ae)}}else if(B.deferredDropExpressions)for(let me of B.deferredDropExpressions){let te=S(me," ",s);te&&te.includes("sm->")&&l.emitLine(` ${te};`)}s.inAsyncStateMachine=oe,s.stateMachineVariables=se,s.variableIdRemapping=le,s.pendingDeferredDrops=Ce}he||(l.emitLine(" break;"),l.emitLine(" }"))}if(he||l.emitLine(" }"),G.chainedBranches){for(let B of G.chainedBranches)for(let oe of B.branches)if(oe.hasAwait&&oe.remainingExprs&&oe.remainingExprs.length>0){let se=s.inAsyncStateMachine,le=s.stateMachineVariables,Ce=s.variableIdRemapping,Me=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let X=ne.asyncWhileLoopInfo?.get(V.index);s.pendingDeferredDrops=[...oe.deferredDropExpressions??[],...X?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let Z=new Map;for(let te of i.capturedVariables)Z.set(te.id,te);if(a)for(let te of a.fields)Z.set(te.label,{id:te.label,name:te.label,type:te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;let re=h.awaitPoint?.isInsideCond??!1,ce=!1,me=[];for(let te of oe.remainingExprs){if(ce){me.push(te);continue}if(re&&Zt(te)){ce=!0,Hs(te,h.awaitPoint,i," ",s);continue}let Ae=S(te," ",s);!Ae||!te.$||Qe(te.$.env.modulePath,Ae)||l.emitLine(` ${Ae};`)}if(ce&&h.awaitPoint){let te=h.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let Ae=ne.asyncCondBranchInfo.get(te);Ae?(Ae.chainedBranches||(Ae.chainedBranches=[]),Ae.chainedBranches.push({branches:[{index:oe.index,value:oe.value,hasAwait:me.length>0||me.some(Ee=>Zt(Ee)),remainingExprs:me,deferredDropExpressions:oe.deferredDropExpressions}],condBranchFieldIndex:B.condBranchFieldIndex})):ne.asyncCondBranchInfo.set(te,{branches:[{index:oe.index,value:oe.value,hasAwait:me.length>0||me.some(Ee=>Zt(Ee)),remainingExprs:me,deferredDropExpressions:oe.deferredDropExpressions}],condBranchFieldIndex:B.condBranchFieldIndex})}else if(oe.deferredDropExpressions)for(let te of oe.deferredDropExpressions){let Ae=S(te," ",s);Ae&&Ae.includes("sm->")&&l.emitLine(` ${Ae};`)}s.inAsyncStateMachine=se,s.stateMachineVariables=le,s.variableIdRemapping=Ce,s.pendingDeferredDrops=Me}}if(G.targetVariableId){let B=ya(G.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${B} = sm->await_result_${V.index};`)}l.emitLine("")}V.isInsideCond&&l.emitLine(" }");let J=ne.asyncWhileLoopInfo?.get(V.index);if(J){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${V.index}_active) {`),J.bodyExprsAfterAwait&&J.bodyExprsAfterAwait.length>0){let le=s.inAsyncStateMachine,Ce=s.stateMachineVariables,Me=s.variableIdRemapping,X=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...J.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let Z=new Map;for(let te of i.capturedVariables)Z.set(te.id,te);if(a)for(let te of a.fields)Z.set(te.label,{id:te.label,name:te.label,type:te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;let re=s.smWhileBreakInfo,ce=s.smWhileContinueInfo,me=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${V.index}`,activeIndex:V.index},s.smWhileContinueInfo={label:`while_loop_${V.index}_continue`},s.smWhileBodyDrops=[...J.bodyExpr.$?.deferredDropExpressions??[]];for(let te of J.bodyExprsAfterAwait){let Ae=S(te," ",s);!Ae||!te.$||Qe(te.$.env.modulePath,Ae)||l.emitLine(` ${Ae};`)}s.smWhileBreakInfo=re,s.smWhileContinueInfo=ce,s.smWhileBodyDrops=me,s.inAsyncStateMachine=le,s.stateMachineVariables=Ce,s.variableIdRemapping=Me,s.pendingDeferredDrops=X}l.emitLine(` while_loop_${V.index}_continue:`);{let le=J.bodyExpr.$?.deferredDropExpressions??[];if(le.length>0){let Ce=s.inAsyncStateMachine,Me=s.stateMachineVariables,X=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Z=new Map;for(let re of i.capturedVariables)Z.set(re.id,re);if(a)for(let re of a.fields)Z.set(re.label,{id:re.label,name:re.label,type:re.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;for(let re of le){let ce=S(re," ",s);ce&&ce.includes("sm->")&&l.emitLine(` ${ce};`)}s.inAsyncStateMachine=Ce,s.stateMachineVariables=Me,s.variableIdRemapping=X}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let de=s.inAsyncStateMachine,he=s.stateMachineVariables,$e=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let B=new Map;for(let le of i.capturedVariables)B.set(le.id,le);if(a)for(let le of a.fields)B.set(le.label,{id:le.label,name:le.label,type:le.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=B;let oe=S(J.conditionExpr," ",s);s.inAsyncStateMachine=de,s.stateMachineVariables=he,s.variableIdRemapping=$e,l.emitLine(` if (!(${oe})) {`),l.emitLine(` sm->while_loop_${V.index}_active = false;`),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition false, exiting loop\\n");`),l.emitLine(" } else {"),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition true, continuing iteration\\n");`);let se=V.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${se};`),l.emitLine(` goto while_loop_${se}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${V.index}:`),J.condBranchPostWhileExprs){let le=J.condBranchPostWhileExprs,Ce=le.condBranchFieldIndex,Me=le.branchIndex;le.skipCondBranchCheck?(l.emitLine(" // Execute post-while-loop code from cond branch (unconditional)"),l.emitLine(" {")):(l.emitLine(" // Execute post-while-loop code from cond branch"),l.emitLine(` if (sm->cond_branch_${Ce} == ${Me}) {`));let X=s.inAsyncStateMachine,Z=s.stateMachineVariables,re=s.variableIdRemapping,ce=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let me=new Map;for(let Ye of i.capturedVariables)me.set(Ye.id,Ye);if(a)for(let Ye of a.fields)me.set(Ye.label,{id:Ye.label,name:Ye.label,type:Ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=me;let te=h.awaitPoint!=null,Ae=!1,Ee=[];for(let Ye=0;Ye<le.exprs.length;Ye++){let ot=le.exprs[Ye];if(Ae){Ee.push(ot);continue}if(te&&Zt(ot)){Ae=!0,Hs(ot,h.awaitPoint,i," ",s);continue}let Ge=S(ot," ",s);!Ge||!ot.$||Qe(ot.$.env.modulePath,Ge)||l.emitLine(` ${Ge};`)}if(Ae&&h.awaitPoint){let Ye=h.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let ot=le.skipCondBranchCheck?-1:le.condBranchFieldIndex,Ge=ne.asyncCondBranchInfo.get(Ye);Ge?(Ge.chainedBranches||(Ge.chainedBranches=[]),Ge.chainedBranches.push({branches:[{index:le.branchIndex,value:le.exprs[0],hasAwait:Ee.length>0||Ee.some(Ot=>Zt(Ot)),remainingExprs:Ee,deferredDropExpressions:le.deferredDropExpressions}],condBranchFieldIndex:ot})):ne.asyncCondBranchInfo.set(Ye,{branches:[{index:le.branchIndex,value:le.exprs[0],hasAwait:Ee.length>0||Ee.some(Ot=>Zt(Ot)),remainingExprs:Ee,deferredDropExpressions:le.deferredDropExpressions}],condBranchFieldIndex:ot})}if(!Ae&&le.deferredDropExpressions)for(let Ye of le.deferredDropExpressions){let ot=S(Ye," ",s);ot&&ot.includes("sm->")&&l.emitLine(` ${ot};`)}l.emitLine(" }"),s.inAsyncStateMachine=X,s.stateMachineVariables=Z,s.variableIdRemapping=re,s.pendingDeferredDrops=ce}if(J.outerWhileLoop){let le=J.outerWhileLoop,Ce=le.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ce}_active) {`),le.bodyExprsAfterAwait.length>0){let Me=s.inAsyncStateMachine,X=s.stateMachineVariables,Z=s.variableIdRemapping,re=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...le.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let ce=new Map;for(let Ee of i.capturedVariables)ce.set(Ee.id,Ee);if(a)for(let Ee of a.fields)ce.set(Ee.label,{id:Ee.label,name:Ee.label,type:Ee.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ce;let me=s.smWhileBreakInfo,te=s.smWhileContinueInfo,Ae=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ce}`,activeIndex:Ce},s.smWhileContinueInfo={label:`while_loop_${Ce}_continue`},s.smWhileBodyDrops=[...le.bodyExpr.$?.deferredDropExpressions??[]];for(let Ee of le.bodyExprsAfterAwait){let Ye=S(Ee," ",s);!Ye||!Ee.$||Qe(Ee.$.env.modulePath,Ye)||l.emitLine(` ${Ye};`)}s.smWhileBreakInfo=me,s.smWhileContinueInfo=te,s.smWhileBodyDrops=Ae,s.inAsyncStateMachine=Me,s.stateMachineVariables=X,s.variableIdRemapping=Z,s.pendingDeferredDrops=re}l.emitLine(` while_loop_${Ce}_continue:`);{let Me=le.bodyExpr.$?.deferredDropExpressions??[];if(Me.length>0){let X=s.inAsyncStateMachine,Z=s.stateMachineVariables,re=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ce=new Map;for(let me of i.capturedVariables)ce.set(me.id,me);if(a)for(let me of a.fields)ce.set(me.label,{id:me.label,name:me.label,type:me.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ce;for(let me of Me){let te=S(me," ",s);te&&te.includes("sm->")&&l.emitLine(` ${te};`)}s.inAsyncStateMachine=X,s.stateMachineVariables=Z,s.variableIdRemapping=re}}{let Me=s.inAsyncStateMachine,X=s.stateMachineVariables,Z=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let re=new Map;for(let me of i.capturedVariables)re.set(me.id,me);if(a)for(let me of a.fields)re.set(me.label,{id:me.label,name:me.label,type:me.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=re;let ce=S(le.conditionExpr," ",s);s.inAsyncStateMachine=Me,s.stateMachineVariables=X,s.variableIdRemapping=Z,l.emitLine(` if (!(${ce})) {`),l.emitLine(` sm->while_loop_${Ce}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${V.index};`),l.emitLine(` goto while_loop_${Ce}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ce}:`)}}}}let E=s.inAsyncStateMachine,$=s.stateMachineVariables,C=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let L=new Map;for(let V of i.capturedVariables)L.set(V.id,V);if(a)for(let V of a.fields)L.set(V.label,{id:V.label,name:V.label,type:V.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=L;let b=s.pendingDeferredDrops;s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let O=v&&!p&&h.expressions.length>0,N=h.expressions.length>0?h.expressions[h.expressions.length-1]:void 0,M=s.asyncBodyReturnExpr;if(!p&&N&&d&&N===d&&h.awaitPoint?s.asyncBodyReturnExpr=N:s.asyncBodyReturnExpr=void 0,Vu(h," ",s,O),s.asyncBodyReturnExpr=M,s.pendingDeferredDrops=b,l.emitLine(""),h.awaitPoint){s.inAsyncStateMachine=E,s.stateMachineVariables=$,s.variableIdRemapping=C;let V=y+1;{let z=Ys(h.awaitPoint,i),ne=h.awaitPoint.expr.args?.[0],G=Lo(ne?.$?.type),J=h.awaitPoint?.isInsideCond;J&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${z} != NULL) {`));let de=h.awaitPoint?.isInsideWhile,he=de?s.asyncWhileLoopInfo?.get(h.awaitPoint.index):void 0;if(de&&he){let $e=h.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${$e}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${V};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${z}->state;`),l.emitLine(" if (future_state == -1 || future_state == -2) { // -1 = completed, -2 = aborted"),l.emitLine(" // Already complete or aborted \u2014 yield once for fairness"),l.emitLine(" // Yield once to event loop for fairness (microtask yield)"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" }"),l.emitLine(""),G?l.emitLine(" // IO future: no extra ref needed (completion handler does not decr_rc)"):(l.emitLine(" // Future not complete \u2014 take event loop reference and start if cold"),l.emitLine(` __yo_incr_rc((void*)sm->${z}); // event loop reference`)),G||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),mm(h.awaitPoint.expr,`sm->${z}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${z}->__yo_resume_fn((void*)sm->${z});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${z}->state;`),l.emitLine(" if (future_state == -1 || future_state == -2) {"),l.emitLine(" // Completed or aborted synchronously \u2014 yield for fairness"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" }"),l.emitLine(" }")),l.emitLine(""),l.emitLine(" // Still pending \u2014 register continuation and suspend"),l.emitLine(` sm->${z}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${z}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),de&&he){let $e=h.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${$e};`),l.emitLine(" }")}J&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${V};`),l.emitLine(` goto state_${V};`),l.emitLine(" }"))}}else if(v){if(!h.expressions.some(z=>Ou(z))){if(e.$?.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let z of e.$.deferredDropExpressions){let ee=S(z," ",s);ee&&l.emitLine(` ${ee};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),fr({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=E,s.stateMachineVariables=$,s.variableIdRemapping=C}else s.inAsyncStateMachine=E,s.stateMachineVariables=$,s.variableIdRemapping=C;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function Hs(e,t,n,r,i){let o=i.emitter,a=Ys(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&fn(s)){let l=s.args[0];if(l){let u=S(l,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${u};`)}}return}if(e.tag==="FnCall"&&fn(e)){let s=e.args[0];if(s){let l=S(s,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${l};`)}return}if(e.tag==="FnCall"&&T(e,I.cond)){Oi(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,I.match)){Oi(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,I.while)){Oi(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,I.begin)){Oi(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Ou(e){if(ht(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Ou(t))return!0}return!1}function dm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),_t(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function mm(e,t,n,r){let i=e.args?.[0];if(!i?.$?.type)return;let o=e.args?.find(c=>F(c)&&T(c,I.using));if(!o)return;let a=It(i.$.type);if(!a?.isFuture.effects?.length)return;let s=dm(a.isFuture.effects),l=o.args,u=r.emitter;for(let c=0;c<s.length&&c<l.length;c++){let p=s[c],f=l[c];if(!q(p.type)||p.type.forallParameters.length>0)continue;let _=S(f,n,r),d=p.label;u.emitLine(`${n}${t}->__capture.${d} = (void*)${_};`)}}function nr(e,t,n){let r=j(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function Ru(e){return!!(e.$?.closureFunctionValue&&e.$?.type&&Gt(e.$.type))}function ym(e,t,n,r,i,o=!1){let a=Object.values(i.types).find(_=>_.type===e);if(!a)return i.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if(n.$?.deferredDupExpressions)for(let _ of n.$.deferredDupExpressions){let d=da(_);d&&l.set(d,_)}let u=e.fields.map(_=>{if(_.isEffectParam)return"NULL";let d,g=_.exprs.expr;if(g.$?.deferredDupExpressions?.length&&(d=g.$.deferredDupExpressions[0]),!d){let y=[_.label];U(g)&&y.push(g.token.value);for(let v of y){let E=l.get(v);if(E){d=E;break}}}if(d)return S(d,r,i);let h={tag:"Atom",token:g.token,$:g.$};return S(h,r,i)}),c=`(${s}){ ${u.map((_,d)=>{let g=e.fields[d];return g?`.${g.label} = ${_}`:`/* Error: missing field at index ${d} */`}).join(", ")} }`,p=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${p}`;return o?i.emitter.emitLine(`${r}${s} ${f} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${f} = ${c};`)),{captureTempVar:f,captureCName:s}}function Pu(e,t,n){if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=jt(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=n.functions[o.funcId]?.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=Ne(e.$.type),u;if(l){let d=n.types[e.$.type.id];if(!d)return"// Error: Dyn closure type not found in context";u=d.cName}let c=a&&ue(a)&&a.fields.length>0,p=P(i.return.type,n),f=i.parameters.map(d=>P(d.type,n)).join(", "),_=`(${p} (*)(void*${f?", "+f:""}))${s}`;if(c&&a&&ue(a)){let d=!l,g=ym(a,i.id,e,t,n,d);if(!g)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=g;if(l){let y=`__yo_create_${u}`,v=`__yo_dispose_${u}`;return`${y}(${h}, ${v}, ${_})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let d=`__yo_create_${u}`,g=`__yo_dispose_${u}`;return`${d}(NULL, ${g}, ${_})`}else{if(e.$.type.tag==="SomeType"){let d=e.$.type;if(d.resolvedConcreteType)return n.implClosureCallMap.set(d.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${P(d.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function js(e,t,n){if(e.pendingDeferredDrops&&e.loopBodyDropsBaselineCount!==void 0){let r=e.loopBodyDropsBaselineCount,i=e.pendingDeferredDrops.length,o=e.pendingDeferredDrops.slice(0,i-r);for(let a of o){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function Ri(e,t,n=""){let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return js(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return js(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let a=t.emitter;for(let s of r.smWhileBodyDrops){let l=S(s,n,t);l&&l.includes("sm->")&&a.emitLine(`${n}${l};`)}}if(r.smWhileContinueInfo.stepExpr){let a=t.emitter,s=S(r.smWhileContinueInfo.stepExpr,n,t);s&&a.emitLine(`${n}${s};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return js(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:a,activeIndex:s}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let l=t.emitter;for(let u of r.smWhileBodyDrops){let c=S(u,n,t);c&&c.includes("sm->")&&l.emitLine(`${n}${c};`)}}return s!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${s}_active = false;`),`goto ${a}`):`goto ${a}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let a=t.emitter,s=r.inAsyncStateMachine.futureType,u=It(s).isFuture.outputType,c=pe(u);if(e.$?.deferredDropExpressions)for(let f of e.$.deferredDropExpressions){let _=S(f,n,t);_&&_.includes("sm->")&&a.emitLine(`${n}${_};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){a.emitLine(`${n}// Drop local variables before early completion`);for(let f of r.pendingDeferredDrops){let _=S(f,n,t);_&&_.includes("sm->")&&a.emitLine(`${n}${_};`)}}a.emitLine(`${n}// Early return - complete the result Future`);let p=c?void 0:`(${P(u,t)}){0}`;return fr({emitter:a,indent:n,resultCode:p,debugLabel:t.currentFunctionName}),""}return"return"}if(e.$?.type&&pe(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let a=e.token.value;if(r.localShadowedVariables?.has(a))return K(a);let s=!1;if(e.$?.env){let l=j(e.$.env,a);if(l.length>0){let u=l[l.length-1],c=u.isOwningTheSameRcValueAs?u.isOwningTheSameRcValueAs.id:u.id;r.variableIdRemapping?.has(c)&&(c=r.variableIdRemapping.get(c));let p=r.stateMachineVariables.get(c);if(p){let f=p.kind==="outer"?`__capture.${a}`:`var_${p.id}`;return s=!0,`sm->${f}`}}}if(!s){for(let[l,u]of r.stateMachineVariables)if(u.name===a){let c=u.kind==="outer"?`__capture.${a}`:`var_${l}`;return s=!0,`sm->${c}`}}if(e.$?.env){let l=j(e.$.env,a);if(l.length>0){let u=l[l.length-1];if(u.isOwningTheSameRcValueAs){let c=u.isOwningTheSameRcValueAs.name,p=u.isOwningTheSameRcValueAs.id;for(let[f,_]of r.stateMachineVariables)if(_.name===c||f===p)return`sm->${_.kind==="outer"?`__capture.${c}`:`var_${f}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(a)&&r.currentClosureCaptureFrameLevel!==void 0){let l=r.currentClosureCaptureTypeCName;return l?`((${l}*)closure_context)->${ve(a,e.$?.env)}`:`closure_context->${ve(a,e.$?.env)}`}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!_e(e.$.value)){let l=j(e.$.env,e.$.variableName);if(l.length>0&&l[l.length-1].isCompileTimeOnly)return Wt(e.$.value,t,e)}return ve(e.$.variableName,e.$.env)}}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!_e(e.$.value)){let a=j(e.$.env,e.$.variableName);if(a.length>0&&a[a.length-1].isCompileTimeOnly)return Wt(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0&&nr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return ve(e.$.variableName,e.$?.env)}if(e.$?.value&&!_e(e.$.value))return Wt(e.$.value,t,e);let i=e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0?nr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!e.$?.env||i)){let a=r.currentClosureCaptureTypeCName;return a?`((${a}*)closure_context)->${ve(e.token.value,e.$?.env)}`:`closure_context->${ve(e.token.value,e.$?.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let a=Object.values(r.functions).find(s=>s.cName===r.currentFunctionName);if(a&&a.value.type.isClosure){let s=Object.values(r.types).find(l=>q(l.type)&&l.type.isClosure&&l.type===a.value.type);if(s)return`((${`${s.cName}_capture`}*)closure_context->data)->${ve(e.token.value,e.$?.env)}`}}if(e.$?.env){let a=j(e.$.env,e.token.value);if(a.length>0){let s=a[a.length-1];if(s.value?.[0]&&ie(s.value[0])){let l=t.functions[s.value[0].funcId]?.cName;if(l)return l}else if(q(s.type)&&(_e(s.value?.[0])||s.value===void 0)){let l=Object.entries(t.functions).find(([u,c])=>c.value.funcName===e.token.value);if(l)return l[1].cName}}}return ve(e.token.value,e.$?.env)}function Uu(e,t,n){let r;if(Pt(e)){let y=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;y&&ie(y)&&(r=y.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=e.$?.type;if(!i||!we(i))return"/* Error: async block must have Future type */";let o=It(i);if(!o)return"/* Error: Could not extract Future module type */";let a=e.$?.variableName||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,c=`${a}_state_dispose`;n.types[i.id]={type:i,cName:s};let p=e.$?.awaitAnalysis;if(!p)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=o.isFuture.outputType,_=P(f,n),d=n.emitter;if(d.emitDeclarationLine(`void ${c}(void* sm_ptr); // Dispose function for state machine`),d.emitDeclarationLine(""),d.emitDeclarationLine(`void ${l}(${s}* sm);`),d.emitDeclarationLine(""),e.$?.captureType){let h=e.$.captureType,y=Object.values(n.types).find(E=>E.type===h),v=y?y.cName:`async_capture_${h.id}`;d.emitDeclarationLine(`${s}* ${u}(${v} __capture);`)}else d.emitDeclarationLine(`${s}* ${u}();`);d.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:f,resultTypeCName:_,captureType:e.$?.captureType,analysis:p});let g=e.$?.captureType;if(g){let h=Object.values(n.types).find(N=>N.type===g),y=h?h.cName:`async_capture_${g.id}`,v=n,E=v.currentClosureCaptures!==void 0||v.inAsyncStateMachine!==void 0||v.inEffectStateMachine!==void 0,$=!1,C=g.fields.map(N=>{if(N.isEffectParam)return`.${N.label} = NULL`;let M;if(!E&&e.$?.deferredDupExpressions)for(let z of e.$.deferredDupExpressions){let ee;if(F(z)&&(z.args.length>0&&U(z.args[0])?ee=z.args[0].token.value:z.args.length===0&&F(z.func)&&T(z.func,".")&&z.func.args.length>=2&&U(z.func.args[0])&&(ee=z.func.args[0].token.value)),ee===N.label){M=z;break}}if(M)return $=!0,M.$?.variableName?(S(M,t,n),`.${N.label} = ${M.$.variableName}`):`.${N.label} = ${S(M,t,n)}`;let V={tag:"Atom",token:N.exprs.expr.token,$:N.exprs.expr.$};return`.${N.label} = ${Ri(V,n)}`}).join(", "),L=`(${y}){${C}}`;if(!$){let N=Sn(g,n);N&&(L=`${N}(${L})`)}let b=e.$?.variableName||"async_result",O=`${u}(${L})`;if(b&&e.$?.type){let N=it(e.$.type,b,n);return n.emitter.emitLine(`${t}${N} = ${O};`),b}else return O}else{let h=e.$?.variableName||"async_result",y=`${u}()`;if(h&&e.$?.type){let v=it(e.$.type,h,n);return n.emitter.emitLine(`${t}${v} = ${y};`),h}else return y}}function zu(e,t){let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${A(o)})`),n.emitDeclarationLine(`struct ${i}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(" int state; // Current state (0 = cold, 1..N = intermediate, -1 = completed, -2 = aborted)"),pe(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${A(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let f=Object.values(t.types).find(d=>d.type===s),_=f?f.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${_} __capture;`),n.emitDeclarationLine("")}let u=l.capturedVariables.filter(f=>f.kind!=="outer");if(u.length>0){n.emitDeclarationLine(" // Local variables");for(let f of u){let _=P(f.type,t),d=ya(f.id,"local");n.emitDeclarationLine(` ${_} ${d}; // ${f.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let f of l.awaitPoints)if(!(pe(f.resultType)||D(f.resultType)&&!f.resultType.resolvedConcreteType)){let d=f.resultType;if(f.futureType){let h=It(f.futureType);h&&(d=h.isFuture.outputType)}let g=P(d,t);n.emitDeclarationLine(` ${g} await_result_${f.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let f=l.awaitPoints.filter(_=>_.futureVariableId===void 0);if(f.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let _ of f){let d=_.expr;if(d.tag!=="FnCall")continue;let h=d.args[0]?.$?.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let y=P(h,t);n.emitDeclarationLine(` ${y} await_future_${_.index};`)}n.emitDeclarationLine("")}}let c=l.awaitPoints.filter(f=>f.needsOwnCondBranchField);if(c.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let f of c)n.emitDeclarationLine(` int cond_branch_${f.index}; // Which branch was taken in cond with await ${f.index}`);n.emitDeclarationLine("")}let p=l.awaitPoints.filter(f=>f.isInsideWhile);if(p.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let f=l.awaitPoints.length;for(let _ of p){n.emitDeclarationLine(` _Bool while_loop_${_.index}_active; // Whether while loop ${_.index} should continue`);let d=(_.whileNestingDepth??1)-1;for(let g=0;g<d;g++)n.emitDeclarationLine(` _Bool while_loop_${f}_active; // Whether outer while loop ${f} should continue`),f++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function gm(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let l of t)n.set(l.structName,l);let r=new Map,i=new Map;for(let l of t)r.set(l.structName,new Set),i.set(l.structName,0);for(let l of t){let u=c=>{let p=r.get(c);p.has(l.structName)||(p.add(l.structName),i.set(l.structName,(i.get(l.structName)??0)+1))};for(let c of l.analysis.capturedVariables){let p;try{p=P(c.type,e)}catch{continue}let f=n.get(p);f&&f.structName!==l.structName&&u(f.structName)}for(let c of l.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let p=c.expr;if(p.tag!=="FnCall")continue;let _=p.args[0]?.$?.type;if(!_)continue;let d;try{d=P(_,e)}catch{continue}let g=n.get(d);g&&g.structName!==l.structName&&u(g.structName)}}let o=[];for(let[l,u]of i.entries())u===0&&o.push(l);let a=[];for(;o.length>0;){let l=o.shift();a.push(l);let u=r.get(l);if(u)for(let c of u){let p=(i.get(c)??0)-1;i.set(c,p),p===0&&o.push(c)}}let s=a.length===t.length?a.map(l=>n.get(l)).filter(Boolean):t;for(let l of s)zu({asyncBlockId:l.asyncBlockId,structName:l.structName,resultType:l.resultType,resultTypeCName:l.resultTypeCName,captureType:l.captureType,analysis:l.analysis},e)}function hm(e,t,n,r,i,o,a){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(""),i&&Te(i)){let l=Object.values(a.types).find(u=>u.type===i);if(!l)s.emitLine(" /* Error: capture struct type not found in context */");else{let u=l.cName,c=i.trait.fields.find(p=>p.label===w.___drop[0]);if(c&&c.assignedValue&&ie(c.assignedValue)){let p=a.functions[c.assignedValue.funcId]?.cName;p&&(s.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),s.emitLine(` ${p}(sm->__capture);`))}else s.emitLine(` /* Warning: ___drop function not found for capture struct ${u} */`)}}if(s.emitLine(""),!pe(r)&&Te(r)){let l=P(r,a);s.emitLine(" // Drop result field if it was set (state == -1 means completed)"),s.emitLine(" int final_state = sm->state;"),s.emitLine(" if (final_state == -1) {"),s.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let u=Ar(r,a);u?s.emitLine(` ${u}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${l} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function vm(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let p=Object.values(u.types).find(_=>_.type===l),f=p?p.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${f} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;"),c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`),c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),pe(a)?c.emitLine(" // Result is unit type, no initialization needed"):c.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),c.emitLine(""),c.emitLine(` sm->__yo_resume_fn = (void(*)(void*))${n};`),c.emitLine(""),c.emitLine(" return sm;"),c.emitLine("}"),c.emitLine("")}function Bu(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;gm(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:p,resultType:f,resultTypeCName:_,captureType:d,analysis:g}=r;if(hm(a,s,c,f,d,g,e),t.emitLine(""),Mu(o,a,s,l,g,p,d,e),t.emitLine(""),vm(a,s,l,u,c,p,f,_,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let h=e.deferredAsyncBlocks.slice(i);for(let y of h)zu({asyncBlockId:y.asyncBlockId,structName:y.structName,resultType:y.resultType,resultTypeCName:y.resultTypeCName,captureType:y.captureType,analysis:y.analysis},e)}n++}}function Gu(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&Wu(n.body,e)}}function Wu(e,t){if(e&&F(e)){let n=e;if(Pt(e)){let r=e.$?.type;if(r&&we(r)&&It(r)){let a=`${e.$?.variableName||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=a),t.types[r.id]={type:r,cName:a},t.emitter.emitDeclarationLine(`typedef struct ${a}_struct ${a}; // Forward declaration for async state machine`)}}if(Pt(e)){let r=e.$?.type;if(r&&we(r)&&It(r)){let o=e.$?.variableName||`io_async_block_${Date.now()}`,a=!!e.$?.awaitAnalysis,s=a?`${o}_state_t`:`${o}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=s),t.types[r.id]={type:r,cName:s},t.emitter.emitDeclarationLine(`typedef struct ${s}_struct ${s}; // Forward declaration for io.async ${a?"state machine":"sync future"}`)}}for(let r of n.args)Wu(r,t)}}function qu(e,t,n){let r=e.$?.type;if(!r||!we(r))return"/* Error: io.async must return a Future type */";let i=It(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType,a=P(o,n),s=e.$?.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,p=e.$?.runtimeArgExprsInOrder?.[0];if(!p?.$)return"/* Error: Missing closure argument for io.async */";let f=S(p,t,n),_=p.$.type,d,g;if(D(_)&&_.resolvedConcreteType){let b=_.resolvedConcreteType,O=n.implClosureCallMap.get(b.id);O&&(d=O.functionCName);let N=n.types[b.id];N&&(g=N.cName)}if(!d||!g)return"/* Error: no closure function or capture type for io.async sync path */";let h;for(let b in n.functions){let O=n.functions[b];if(O.cName===d&&O.effectStateMachineInfo){h=O.effectStateMachineInfo;break}}if(c.emitDeclarationLine(`struct ${s}_struct {`),c.emitDeclarationLine(" yo_ref_header_t header;"),c.emitDeclarationLine(" int state;"),pe(o)?c.emitDeclarationLine(" uint8_t result;"):c.emitDeclarationLine(` ${a} result;`),c.emitDeclarationLine(" void (*continuation_fn)(void*);"),c.emitDeclarationLine(" void* continuation_sm;"),c.emitDeclarationLine(" void (*__yo_resume_fn)(void*);"),c.emitDeclarationLine(` ${g} __capture;`),h&&c.emitDeclarationLine(` ${h.structName} __effect_sm;`),c.emitDeclarationLine("};"),c.emitDeclarationLine(""),h){c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),c.emitDeclarationLine(" sm->__effect_sm.closure_context = &sm->__capture;"),c.emitDeclarationLine(` ${h.resumeFunctionName}(&sm->__effect_sm);`),c.emitDeclarationLine(" if (sm->__effect_sm.completed) {"),pe(o)||c.emitDeclarationLine(" sm->result = sm->__effect_sm.result;"),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" } else {");let b=h.analysis;for(let O of b.effectCallPoints){for(let N=0;N<O.operationArgTypes.length;N++){let M=O.operationArgTypes[N];if(Te(M)){let V=wn(`sm->__effect_sm.yield_${N}`,M,n);V&&c.emitDeclarationLine(` ${V};`)}}break}c.emitDeclarationLine(" sm->state = -2;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine("}")}else c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),pe(o)?c.emitDeclarationLine(` ${d}(&sm->__capture);`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture);`),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine("}");c.emitDeclarationLine("");let y=p.$.captureType,v=y&&Te(y)?Ar(y,n):void 0,E=y&&Te(y)?Sn(y,n):void 0,$=Ar(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||$)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),$&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${$}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let C=e.$?.variableName||"__io_async_result",L=it(r,C,n);return c.emitLine(`${t}${L} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${C}, 0, sizeof(${s}));`),c.emitLine(`${t}${C}->header.ref_count = 1;`),c.emitLine(`${t}${C}->header.gc_flags = 0;`),c.emitLine(`${t}${C}->header.gc_mark = YO_GC_UNMARKED;`),c.emitLine(`${t}${C}->header.gc_next = NULL;`),c.emitLine(`${t}${C}->header.gc_prev = NULL;`),c.emitLine(`${t}${C}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${C}->header.traverse_fn = NULL;`),c.emitLine(`${t}${C}->__capture = ${f};`),E&&c.emitLine(`${t}${C}->__capture = ${E}(${C}->__capture);`),c.emitLine(`${t}${C}->state = 0;`),c.emitLine(`${t}${C}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${C}->continuation_fn = NULL;`),c.emitLine(`${t}${C}->continuation_sm = NULL;`),C}function Hu(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];ie(o)&&(dr(o.type,t),ni(o.body,t))}let n=new Set,r=!0;for(;r;){r=!1;for(let i in t.functions){if(n.has(i))continue;n.add(i),r=!0;let o=t.functions[i];if(dr(o.value.type,t),o.value.specializedType&&dr(o.value.specializedType,t),ni(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&xt(a.value.type,t),ni(a.body,t)}}}function dr(e,t){for(let n of e.parameters)xt(n.type,t);for(let n of e.forallParameters)xt(n.type,t);xt(e.return.type,t)}function ni(e,t){if(e.$&&e.$.type&&xt(e.$.type,t),e.$&&e.$.value&&ie(e.$.value)){let n=e.$.value;n.isControlFunction?(dr(n.type,t),Jt(n.body,t)):t.functions[n.funcId]||n.type.parameters.map(o=>o.type).some(o=>D(o)&&we(o)&&!o.resolvedConcreteType)||(t.functions[n.funcId]={value:n,cName:K(n.funcId)},dr(n.type,t),Jt(n.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let n of e.$.deferredDropExpressions)ni(n,t);if(e.$&&e.$.macroExpansion&&ni(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:n}of e.$.runtimeDestructurings)xt(n,t);if(e.$&&e.$.captureType&&ue(e.$.captureType)){let n=e.$.captureType;if(!t.types[n.id]){t.types[n.id]={type:n,cName:`yo_${n.id}`};for(let r of n.fields)xt(r.type,t);for(let r of n.trait.fields)if(r.assignedValue&&ie(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},dr(i.type,t),Jt(i.body,t))}}}switch(e.tag){case"FnCall":if(T(e,I.test))break;ni(e.func,t);for(let n of e.args)ni(n,t);break;case"Atom":e.$?.value&&R(e.$.value)&&xt(e.$.value.value,t);break}}function xt(e,t){if(!t.types[e.id]){if(D(e)&&Gt(e)){if(e.resolvedConcreteType){xt(e.resolvedConcreteType,t);return}let n=jt(e);n&&xt(n,t);return}if(D(e)&&we(e)){let n=It(e);n&&xt(n.isFuture.outputType,t);return}if(D(e)&&e.resolvedConcreteType){xt(e.resolvedConcreteType,t);return}if(!Fe(e)){if(ue(e)||lt(e)||ye(e)||ke(e)||Ne(e)||Le(e)||xe(e)||je(e)||kt(e)||bt(e)){let n=je(e)?P(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},ue(e))for(let r of e.fields)xt(r.type,t);if(ye(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)xt(i.type,t)}if(lt(e))for(let r of e.fields)xt(r.type,t);if(Ne(e)){let r=e;for(let i of r.requiredTraits)xt(i.traitType,t)}if(kt(e)){let r=e;xt(r.childType,t),P(r,t)}if(bt(e)){let r=e;xt(r.childType,t),P(r,t)}if(je(e)&&xt(e.childType,t),Le(e)||xe(e)){for(let r of e.fields)xt(r.type,t);for(let r of e.fields)if(r.assignedValue&&ie(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:K(i.funcId)},dr(i.type,t),Jt(i.body,t))}else if(r.assignedValue&&(ft(r.assignedValue)||dt(r.assignedValue))){let i=r.assignedValue;Ao(i,t)}}}else if(be(e)){let n=e,r=n.childType,i=n.length;if(Oe(i)){xt(r,t);let o=P(r,t),a=`Array_${K(o)}_${i.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),t.types[e.id]={type:e,cName:a}}}else if(Ie(e)){if(xt(e.childType,t),je(e.childType)){let r=e.childType.childType;xt(r,t);let i=P(r,t),o=`Slice_${K(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:P(e,t)}}else xu.has(e.tag)&&(t.types[e.id]={type:e,cName:P(e,t)});e.trait&&xt(e.trait,t)}}}function ri(e){if(e.$&&e.$.value&&_e(e.$.value)&&!(q(e.$.type)&&e.$.type.isExtern)){if(!pe(e.$.type))return!0}if(F(e)){if(ri(e.func))return!0;for(let t of e.args)if(!(t.$?.type&&pe(t.$.type))&&ri(t))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&pe(e.$.type))return!1;if(ri(e.$.macroExpansion))return!0}if(e.$?.deferredDupExpressions){for(let t of e.$.deferredDupExpressions)if(ri(t))return!0}if(e.$?.deferredDropExpressions){for(let t of e.$.deferredDropExpressions)if(ri(t))return!0}return!1}function Ao(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];ie(r)&&(i.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:K(r.funcId)},Jt(r.body,t))}}function Jt(e,t){if(F(e)&&T(e,I.test)||F(e)&&T(e,w.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Jt(e.$.macroExpansion,t),e.$?.effectAnalysis){let i=e.$.effectAnalysis.handlerValue;i&&ie(i)&&Jt(i.body,t)}if(e.$&&e.$.closureFunctionValue){let i=e.$.closureFunctionValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:K(i.funcId)},Jt(i.body,t))}if(F(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let i=e.$.type,o=e.args[0];if(Ne(i)&&o&&o.$?.type){let a=o.$.type,s=e.$.dynCallTraitValues;if(s.length>0&&(mt(a)||hn(a))){let l=hn(a)?a.fields[0].type:a,u=`${l.id}_${i.id}`;t.dynImpls.set(u,{dynType:i,concreteType:l,dataType:a,traitValues:s})}}}if(F(e)){let i=e.func.$?.type,o=e.func.$?.value;if(e.func.token.value==="?=")return;if(q(i)){if(ie(o)&&o.isControlFunction){Jt(o.body,t);for(let a of e.args)Jt(a,t);return}if(ie(o)){if(o.type.return.isCompileTimeOnly||Ua(o)&&!o.specializedType||o.specializedType&&dn(o.specializedType))return;if(!t.functions[o.funcId]){let a=!1;if(ri(o.body)&&(a=!pi(o.type)&&o.type.implicitParameters.length>0,!a)||!a&&o.type.parameters.map(u=>u.type).some(u=>D(u)&&we(u)&&!u.resolvedConcreteType))return;t.functions[o.funcId]={value:o,cName:K(o.funcId)},Jt(o.body,t)}}else if(i.isExtern==="c"){let a=i.externName?i.externName:U(e.func)?e.func.token.value:i.id;t.externFunctions[i.id]={type:i,cName:a}}}Jt(e.func,t);for(let a of e.args)Jt(a,t)}let n=e.$?.type,r=e.$?.value;if(q(n)){if(ie(r)&&r.isControlFunction){Jt(r.body,t);return}if(ie(r)){if(Ua(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(ri(r.body))return;t.functions[r.funcId]={value:r,cName:K(r.funcId)},Jt(r.body,t)}}if(R(e.$?.value)&&xt(e.$.value.value,t),e.$?.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)Jt(i,t);if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions)Jt(i,t);if(e.$?.dynCallTraitValues)for(let i of e.$.dynCallTraitValues)Ao(i,t)}function Yu(e){let t=w.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!ue(r)||!r.isReferenceSemantics)continue;let i=er({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&ie(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:K(a.funcId)},dr(a.type,e),Jt(a.body,e)}}}function Ku(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:i}=e.externFunctions[n];i.isExtern!=="yo"&&(i.isExtern==="c"&&i.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||ju(i,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"),Em(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:i}=e.functions[n],o=r==="__yo_user_main",a=i.body?.$?.effectAnalysis,s=a&&a.hasEffects;if(!o&&!i.type.isClosure&&i.specializedFunctionCaches?.length>0||!o&&!s&&!i.type.isClosure&&!i.specializedType&&(i.specializedFunctionCaches?.length??0)===0&&[...i.type.implicitParameters,...i.type.parameters.filter(_=>_.isImplicit)].some(_=>q(_.type))||!o&&!s&&(pi(i.type)&&!i.type.isClosure||i.specializedFunctionCaches?.length>0&&!i.type.isClosure||ti(i)||Si(i)||i.isIoAsyncStateMachineClosure))continue;let u=i.specializedType??i.type,c=!s&&(u.parameters.some(_=>Fe(_.type))||u.forallParameters.length>0),p=Fe(u.return.type),f=D(u.return.type)&&u.return.type.requiredTraits.length>0;c||p&&!f||ju(u,r,!1,e,i.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function ii(e,t,n,r){let i=r||P(e.return.type,n),o=e.parameters.filter(u=>!u.isCompileTimeOnly),a=[];e.isClosure&&a.push("void* closure_context");let s=o.map((u,c)=>{let p=K(u.label||`param${c}`);if(q(u.type))return ii(u.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let f;return D(u.type)&&we(u.type)?u.type.resolvedConcreteType?f=P(u.type.resolvedConcreteType,n)+"*":f=P(u.type,n):f=P(u.type,n),`${f} ${p}`}});a.push(...s);let l=a.join(", ");return`${i} ${t}(${l})`}function ju(e,t,n,r,i){let o;if(i&&we(e.return.type)){let l=ko(i);l?.$?.asyncStateMachineStructName?o=`${l.$.asyncStateMachineStructName}*`:i.$?.type&&D(i.$.type)&&we(i.$.type)&&(o=P(i.$.type,r))}if(i&&D(e.return.type)&&!we(e.return.type)&&i.$?.type&&(o=P(i.$.type,r)),!o&&i&&i.$?.type&&!we(e.return.type)){let l=P(e.return.type,r),u=P(i.$.type,r);l!==u&&(o=u)}let a=o?ii(e,t,r,o):ii(e,t,r),s=A(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function Em(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:i}=e.types[n];if(ue(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Fe(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=P(l.type,e),c=K(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`${i}* ${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 Xu(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(ti(r)||!o||!dn(r.type)||dn(o))continue;let a=o.parameters.some(l=>Fe(l.type)),s=Fe(o.return.type);a||s||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${ii(o,i,e)}; // specialized function: ${A(r.type)}`))}}function Qu(e){let t=e.emitter,n=new Set;for(let[,r]of e.dynImpls){let i=e.types[r.dynType.id]?.cName||`yo_dyn_${r.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 Zu(e){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[,r]of e.dynImpls){let o=`yo_dyn_box_${e.types[r.concreteType.id]?.cName||`unknown_${r.concreteType.id}`}`;if(n.has(o))continue;n.add(o);let a=P(r.concreteType,e);t.emitLine(`${o}* __yo_new_${o}(${a} value) {`),t.emitLine(` ${o}* box = (${o}*)__yo_malloc(sizeof(${o}));`),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_${o};`),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_${o}(void* ptr) {`),t.emitLine(` ${o}* box = (${o}*)ptr;`);let l=(D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType).trait?.fields.find(u=>u.label===w.___drop[0]);if(l&&l.assignedValue&&ie(l.assignedValue)){let u=e.functions[l.assignedValue.funcId]?.cName;u&&t.emitLine(` ${u}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function Ju(e){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[n,r]of e.dynImpls){let i=r.dataType,o=new Set([w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]]);for(let{traitType:a}of r.dynType.requiredTraits){if(!Et(a))continue;let s=a.isFn.callType,l=P(s.return.type,e),u=`yo_wrap_${n}_call`,c=["void* self_ptr"];for(let p=0;p<s.parameters.length;p++){let f=s.parameters[p],_=P(f.type,e);c.push(`${_} arg${p+1}`)}if(t.emitDeclarationLine(`static ${l} ${u}(${c.join(", ")}) {`),hn(i)){let p=e.types[i.id]?.cName||`unknown_${i.id}`,f=K(i.fields[0].label);t.emitDeclarationLine(` ${p}* box = (${p}*)self_ptr;`);let _=i.fields[0].type,d=D(_)&&_.resolvedConcreteType?_.resolvedConcreteType:_,g=e.implClosureCallMap.get(d.id),h=(()=>{if(g)return g.functionCName;for(let[,v]of Object.entries(e.functions))if(v.value.closureInfo?.captureType?.id===d.id)return v.cName})(),y=[];if(h){y.push(`(void*)&box->${f}`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);or(s.return.type)?t.emitDeclarationLine(` ${h}(${y.join(", ")});`):t.emitDeclarationLine(` return ${h}(${y.join(", ")});`)}else{y.push(`box->${f}.data`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);or(s.return.type)?t.emitDeclarationLine(` box->${f}.call(${y.join(", ")});`):t.emitDeclarationLine(` return box->${f}.call(${y.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let p=0;p<s.parameters.length;p++)t.emitDeclarationLine(` (void)arg${p+1};`);or(s.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${l} zero = (${l})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let a=0;a<r.dynType.requiredTraits.length;a++){let{traitType:s}=r.dynType.requiredTraits[a];if(Et(s))continue;let l=r.traitValues[a];if(!l){t.emitDeclarationLine(`/* Warning: Module value missing for module ${a} */`);continue}let c=l.type.fields;for(let p=0;p<c.length;p++){let f=c[p];if(f.label==="Self"||o.has(f.label))continue;let _=l.fields[p];if(!_||!ie(_)){t.emitDeclarationLine(`/* Warning: Module field ${f.label} is not a function value */`);continue}let d=f.type;if(!q(d)){t.emitDeclarationLine(`/* Warning: Module field ${f.label} is not a function type */`);continue}let g=_.funcId,h=e.functions[g]?.cName;if(!h){t.emitDeclarationLine(`/* Warning: Impl function for ${f.label} not found */`);continue}let y=`yo_wrap_${n}_${f.label}`,v=P(d.return.type,e),E=["void* self_ptr"];for(let b=1;b<d.parameters.length;b++){let O=d.parameters[b],N=P(O.type,e);E.push(`${N} arg${b}`)}t.emitDeclarationLine(`static ${v} ${y}(${E.join(", ")}) {`);let $=d.parameters[0]?.type,C;if(hn(i)){let b=e.types[i.id]?.cName||`unknown_${i.id}`,O=K(i.fields[0].label);t.emitDeclarationLine(` ${b}* box = (${b}*)self_ptr;`),$&&Ie($)?C=`&box->${O}`:C=`box->${O}`}else{let b=P(r.concreteType,e);t.emitDeclarationLine(` ${b} concrete_value = (${b})self_ptr;`),$&&Ie($)?C="&concrete_value":C="concrete_value"}let L=[C];for(let b=1;b<d.parameters.length;b++)L.push(`arg${b}`);or(d.return.type)?t.emitDeclarationLine(` ${h}(${L.join(", ")});`):t.emitDeclarationLine(` return ${h}(${L.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function ec(e){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[n,r]of e.dynImpls){let i=e.types[r.dynType.id]?.cName||`yo_dyn_${r.dynType.id}`,o=e.types[r.concreteType.id]?.cName||`unknown_${r.concreteType.id}`,a=`yo_vtable_${n}`,s=`${i}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${o}, ${r.dynType.requiredTraits.map(({traitType:c})=>c.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${s} ${a} = {`);let l=new Set,u=new Set([w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]]);for(let{traitType:c}of r.dynType.requiredTraits){if(Et(c)){let p=`yo_wrap_${n}_call`;t.emitDeclarationLine(` .call = ${p},`),l.add("call");continue}for(let p of c.fields)if(p.label!=="Self"&&!u.has(p.label)&&!l.has(p.label)&&(l.add(p.label),q(p.type))){let f=p.type;if(f.parameters.length>0){let _=f.parameters[0];if(_&&_.label==="self"){let d=`yo_wrap_${n}_${p.label}`;t.emitDeclarationLine(` .${K(p.label)} = ${d},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function ga(e,t,n,r=!1,i){let o=q(n)?n:void 0,s=aa(e,{detect(u,c,p){if(u.tag!=="FnCall")return;if(tc(u,t,i,!0)){let _=[];for(let g of u.args)g.$?.type&&_.push(g.$.type);if(_.length===0&&o)for(let g of o.parameters)g.isCompileTimeOnly||_.push(g.type);let d=u.$?.type??o?.return.type;if(_.length>0&&d){let g=ho(c);p.push({index:p.length,expr:u,operationArgTypes:_,operationResultType:d,targetVariableId:g})}}if(r&&!tc(u,t,i)){let _=$m(u,t);if(_){let d=n,g=d.parameters.filter(y=>!y.isCompileTimeOnly).map(y=>y.type),h=_.viaClosure?d.return.type:u.$?.type;if(g.length>0&&h){let y=ho(c);p.push({index:p.length,expr:u,operationArgTypes:g,operationResultType:h,targetVariableId:y,isTransitiveEffectCall:!0,isTransitiveClosureCall:_.viaClosure})}}}},shouldSkipBody(u){return Pt(u)}}),l=s.capturedVariables.map(u=>({id:u.id,name:u.name,type:u.type,isOwningTheSameRcValueAs:void 0}));return{effectCallPoints:s.suspensionPoints,capturedVariables:l,hasEffects:s.hasSuspensions,variableIdRemapping:s.variableIdRemapping,effectParameterName:t,effectParameterType:n,effectFieldPath:i}}function tc(e,t,n,r=!1){if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let l=i.$?.type;return!(!r&&(!l||!q(l))||r&&l&&!q(l))}let o=[],a=i;for(;a.tag==="FnCall"&&T(a,".")&&a.args.length>=2;){let l=a.args[1];if(!l||l.tag!=="Atom")return!1;o.unshift(l.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let l=0;l<o.length;l++)if(o[l]!==n[l])return!1;let s=i.$?.type;return!(!r&&(!s||!q(s))||r&&s&&!q(s))}function $m(e,t){if(e.tag!=="FnCall")return;let n=e.func.$?.type;if(!n)return;if(q(n)){if(!n.implicitParameters)return;for(let i of n.implicitParameters){if(i.label===t&&(q(i.type)||Le(i.type)))return{matched:!0,viaClosure:!1};if(i.isEffectRowSpread&&nc(i,t,e.func.$?.env))return{matched:!0,viaClosure:!1}}return}let r=jt(n);if(r){let i=r.isFn.callType;if(i.implicitParameters)for(let o of i.implicitParameters){if(o.label===t&&(q(o.type)||Le(o.type)))return{matched:!0,viaClosure:!0};if(o.isEffectRowSpread&&nc(o,t,e.func.$?.env))return{matched:!0,viaClosure:!0}}}}function nc(e,t,n){if(!n)return!1;let r=e.type,i;if(D(r)&&r.isEffectsRow){let a=j(n,e.label).at(-1)?.value?.[0];if(a&&R(a)&&_t(a.value))i=a.value;else{let s=St(n,r);_t(s)&&(i=s)}}else _t(r)&&(i=r);if(i){for(let o of i.implicitParameters)if(o.label===t&&(q(o.type)||Le(o.type)))return!0}return!1}function rc(e){e.emitLine(`
191
191
  // ============================================================================
192
192
  // Async/Await Runtime - Single-Threaded Cooperative Scheduler
193
193
  // ============================================================================
@@ -547,7 +547,7 @@ __yo_yield_future_t __yo_async_yield(void) {
547
547
  future.continuation_sm = NULL;
548
548
  return future;
549
549
  }
550
- `)}function nc(e){e.emitLine(`
550
+ `)}function ic(e){e.emitLine(`
551
551
  // ============================================================================
552
552
  // File System Helper Functions
553
553
  // ============================================================================
@@ -2002,7 +2002,7 @@ static int __yo_poll_and_fs_event_tick(void) {
2002
2002
  }
2003
2003
 
2004
2004
  #endif // !defined(_WIN32) - End of POSIX-only File Extra Operations
2005
- `)}function rc(e){e.emitLine(`
2005
+ `)}function oc(e){e.emitLine(`
2006
2006
  // ============================================================================
2007
2007
  // Async I/O Runtime (Linux - io_uring via liburing)
2008
2008
  // ============================================================================
@@ -3749,7 +3749,7 @@ static int32_t __yo_sync_readlinkat(int32_t dirfd, const char* path, char* buf,
3749
3749
 
3750
3750
  #endif // __linux__
3751
3751
 
3752
- `)}function ic(e){e.emitLine(`
3752
+ `)}function ac(e){e.emitLine(`
3753
3753
  // ============================================================================
3754
3754
  // Async I/O Runtime (macOS - dispatch_io via Grand Central Dispatch)
3755
3755
  // ============================================================================
@@ -5448,7 +5448,7 @@ static uint64_t __yo_statx_blocks(void* statxbuf) {
5448
5448
  }
5449
5449
 
5450
5450
  #endif // __APPLE__
5451
- `)}function oc(e){e.emitLine(`
5451
+ `)}function sc(e){e.emitLine(`
5452
5452
  // ============================================================================
5453
5453
  // Async I/O Runtime (Windows - IOCP)
5454
5454
  // ============================================================================
@@ -9527,7 +9527,7 @@ static int __yo_poll_and_fs_event_tick(void) {
9527
9527
  }
9528
9528
 
9529
9529
  #endif // _WIN32
9530
- `)}function ac(e,t){tc(e),rc(e),ic(e),oc(e),nc(e)}function ai(e){return!!e.effectInfos&&e.effectInfos.length>1}function Nr(e){if(T(e,I.return))return!0;if(e.tag==="FnCall"){let t=e;if(T(e,"->"))return!1;for(let n of t.args)if(Nr(n))return!0;if(t.func&&Nr(t.func))return!0}return!1}function ga(e,t,n){return ai(e)&&t.effectIndex!==void 0?`yield_${t.effectIndex}_${n}`:`yield_${n}`}function ya(e,t){return ai(e)&&t.effectIndex!==void 0?`resume_value_${t.effectIndex}`:"resume_value"}function sc(e,t){return ai(e)&&t.effectIndex!==void 0?e.effectInfos[t.effectIndex].resumeTypeCName:e.resumeTypeCName}function fc(e,t){let n=t.emitter,{structName:r,analysis:i,functionType:o,returnTypeCName:a,yieldTypeCNames:s,resumeTypeCName:l}=e;if(n.emitDeclarationLine(`typedef struct ${r} {`),n.emitDeclarationLine(" int state;"),n.emitDeclarationLine(" int completed;"),pe(o.return.type)||n.emitDeclarationLine(` ${a} result;`),e.effectInfos){n.emitDeclarationLine(" int effect_tag;");for(let c=0;c<e.effectInfos.length;c++){let p=e.effectInfos[c];for(let f=0;f<p.yieldTypeCNames.length;f++)n.emitDeclarationLine(` ${p.yieldTypeCNames[f]} yield_${c}_${f};`);p.resumeTypeCName!=="void"&&n.emitDeclarationLine(` ${p.resumeTypeCName} resume_value_${c};`)}}else{for(let c=0;c<s.length;c++)n.emitDeclarationLine(` ${s[c]} yield_${c};`);l!=="void"&&n.emitDeclarationLine(` ${l} resume_value;`)}e.isClosure&&n.emitDeclarationLine(" void* closure_context;");let u=new Set;for(let c of o.parameters){if(c.isCompileTimeOnly||c.isImplicit)continue;let p=P(c.type,t);n.emitDeclarationLine(` ${p} ${K(c.label)};`),u.add(c.label)}for(let c of i.capturedVariables){if(e.closureCapturedVarNames?.has(c.name))continue;let p=P(c.type,t),f=K(`var_${c.id}`);n.emitDeclarationLine(` ${p} ${f};`)}for(let c of i.effectCallPoints)if(c.isTransitiveEffectCall){let p=ha(c,t);p&&n.emitDeclarationLine(` ${p.structName} _inner_sm_${c.index};`)}n.emitDeclarationLine(`} ${r};`),n.emitDeclarationLine("")}function _c(e,t){t.emitter.emitDeclarationLine(`void ${e.resumeFunctionName}(${e.structName}* sm);`)}function ha(e,t){let n=e.expr,r=n.func.$?.value;if(r&&ie(r)){let i=r.funcId,o=t.functions[i];return o?o.effectStateMachineInfo:void 0}if(e.isTransitiveClosureCall){let i=n.func.$?.type;if(i&&M(i)){let a=i.resolvedConcreteType?.id;if(a){let s=t.implClosureCallMap.get(a);if(s){let l=Object.values(t.functions).find(u=>u.cName===s.functionCName);if(l?.effectStateMachineInfo)return l.effectStateMachineInfo}for(let l in t.functions){let u=t.functions[l];if(u.value.type.isClosure&&u.value.closureInfo?.captureType?.id===a&&u.effectStateMachineInfo)return u.effectStateMachineInfo}}}}}function Em(e){let t=new Map;for(let n of e.capturedVariables)t.set(n.id,{id:n.id,name:n.name,type:n.type,kind:"local",isOwningTheSameRcValueAs:n.isOwningTheSameRcValueAs?{id:n.isOwningTheSameRcValueAs.id,name:n.isOwningTheSameRcValueAs.name,type:n.isOwningTheSameRcValueAs.type,kind:"local",isOwningTheSameRcValueAs:void 0}:void 0});return t}function Tm(e,t){return _a(e,t).map(r=>({stateNumber:r.stateNumber,expressions:r.expressions,effectCallPoint:r.suspensionPoint}))}function oi(e,t){return Ir(e,t)}function dc(e,t,n,r){let i=n.emitter,{structName:o,resumeFunctionName:a,analysis:s}=t,l=n.inEffectStateMachine,u=n.stateMachineVariables,c=n.variableIdRemapping,p=n.currentClosureCaptures,f=n.currentClosureCaptureFrameLevel,_=n.currentClosureCaptureTypeCName;if(t.isClosure&&r?.closureInfo){let v=r.closureInfo.captureType;v&&ue(v)&&v.fields.length>0&&(n.currentClosureCaptures=v.fields.map(E=>E.label),n.currentClosureCaptureFrameLevel=r.frameLevel,t.closureCaptureTypeCName&&(n.currentClosureCaptureTypeCName=t.closureCaptureTypeCName))}let d=t.closureCapturedVarNames??new Set,g=Em(s);if(d.size>0)for(let[v,E]of g)d.has(E.name)&&g.delete(v);n.inEffectStateMachine=t,n.stateMachineVariables=g,n.variableIdRemapping=s.variableIdRemapping;let h=Tm(e,s.effectCallPoints);i.emitLine(`void ${a}(${o}* sm) {`),t.isClosure&&i.emitLine(" void* closure_context = sm->closure_context;"),i.emitLine(" switch (sm->state) {");for(let v=0;v<h.length;v++){let E=h[v],$=v===h.length-1;if(i.emitLine(` case ${E.stateNumber}: {`),E.stateNumber===0){let C=t.functionType.parameters.filter(L=>!L.isCompileTimeOnly&&!L.isImplicit);for(let L of C){let b=s.capturedVariables.find(O=>O.name===L.label);if(b){let O=K(`var_${b.id}`),N=K(L.label);i.emitLine(` sm->${O} = sm->${N};`)}}}if(E.stateNumber>0&&s.effectCallPoints[E.stateNumber-1]){let C=s.effectCallPoints[E.stateNumber-1];if(C.isTransitiveEffectCall){let L=ha(C,n);if(L){let b=`sm->_inner_sm_${C.index}`,O=ya(t,C);L.resumeTypeCName!=="void"&&i.emitLine(` ${b}.resume_value = sm->${O};`),i.emitLine(` ${L.resumeFunctionName}(&${b});`),i.emitLine(` if (!${b}.completed) {`);for(let D=0;D<L.yieldTypeCNames.length;D++){let V=ga(t,C,D);i.emitLine(` sm->${V} = ${b}.yield_${D};`)}ai(t)&&C.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${C.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let N=L.returnTypeCName==="void";if(C.targetVariableId&&!N){let D=K(`var_${C.targetVariableId}`);i.emitLine(` sm->${D} = ${b}.result;`)}}}else{let L=ya(t,C),b=sc(t,C);if(C.targetVariableId&&b!=="void"){let O=K(`var_${C.targetVariableId}`);i.emitLine(` sm->${O} = sm->${L};`)}}if(C.isInsideWhile&&C.enclosingWhileExpr){let b=C.enclosingWhileExpr.args,O,N;b.length===3?(O=b[1],N=b[2]):N=b[1];let D=`while_loop_${C.index}`,V=`while_done_${C.index}_s${E.stateNumber}`,{remainingExprs:z,bodyDropExprs:ee}=cc(N,C);js(z,ee,D,O,V," ",n),i.emitLine(` ${V}:;`),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;"),i.emitLine(" }");continue}}for(let C=0;C<E.expressions.length;C++){let L=E.expressions[C],b=C===E.expressions.length-1;if(E.effectCallPoint&&oi(L,E.effectCallPoint.expr)&&E.effectCallPoint)Pi(L,E.effectCallPoint,E.stateNumber," ",n,t);else if(b&&$&&!pe(t.functionType.return.type)){let N=S(L," ",n);N&&i.emitLine(` sm->result = ${N};`)}else{let N=S(L," ",n);N&&L.$&&!Qe(L.$.env.modulePath,N)&&i.emitLine(` ${N};`)}}$&&!E.effectCallPoint&&(e.$?.deferredDropExpressions?vt(e," ",n):pc(s," ",n),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;")),i.emitLine(" }")}let y=h.length>0?h[h.length-1].stateNumber:-1;for(let v of s.effectCallPoints){let E=v.index+1;if(E>y){if(i.emitLine(` case ${E}: {`),v.isTransitiveEffectCall){let $=ha(v,n);if($){let C=`sm->_inner_sm_${v.index}`,L=ya(t,v);$.resumeTypeCName!=="void"&&i.emitLine(` ${C}.resume_value = sm->${L};`),i.emitLine(` ${$.resumeFunctionName}(&${C});`),i.emitLine(` if (!${C}.completed) {`);for(let O=0;O<$.yieldTypeCNames.length;O++){let N=ga(t,v,O);i.emitLine(` sm->${N} = ${C}.yield_${O};`)}ai(t)&&v.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${v.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let b=$.returnTypeCName==="void";if(v.targetVariableId&&!b){let O=K(`var_${v.targetVariableId}`);i.emitLine(` sm->${O} = ${C}.result;`)}!pe(t.functionType.return.type)&&!b&&i.emitLine(` sm->result = ${C}.result;`)}}else{let $=ya(t,v),C=sc(t,v);if(v.targetVariableId&&C!=="void"){let L=K(`var_${v.targetVariableId}`);i.emitLine(` sm->${L} = sm->${$};`)}!pe(t.functionType.return.type)&&C!=="void"&&i.emitLine(` sm->result = sm->${$};`),e.$?.deferredDropExpressions?vt(e," ",n):pc(s," ",n)}if(v.isInsideWhile&&v.enclosingWhileExpr){let C=v.enclosingWhileExpr.args,L,b;C.length===3?(L=C[1],b=C[2]):b=C[1];let O=`while_loop_${v.index}`,N=`while_done_${v.index}_r${E}`,{remainingExprs:D,bodyDropExprs:V}=cc(b,v);js(D,V,O,L,N," ",n),i.emitLine(` ${N}:;`),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;")}else i.emitLine(" sm->completed = 1;"),i.emitLine(" return;");i.emitLine(" }")}}i.emitLine(" }"),i.emitLine("}"),i.emitLine(""),n.inEffectStateMachine=l,n.stateMachineVariables=u,n.variableIdRemapping=c,n.currentClosureCaptures=p,n.currentClosureCaptureFrameLevel=f,n.currentClosureCaptureTypeCName=_}function Pi(e,t,n,r,i,o){let a=i.emitter,s=t.expr;if(T(e,":=")){let u=e.args[1];if(u===s){t.isTransitiveEffectCall?uc(s,t,n,r,i,o):lc(s,t,n,r,i,o);return}if(oi(u,s)){Pi(u,t,n,r,i,o);return}let c=S(e,r,i);c&&a.emitLine(`${r}${c};`);return}if(e===s){t.isTransitiveEffectCall?uc(s,t,n,r,i,o):lc(s,t,n,r,i,o);return}if(T(e,I.cond)){Cm(e,t,n,r,i,o);return}if(T(e,I.match)){bm(e,t,n,r,i,o);return}if(T(e,I.while)){$m(e,t,n,r,i,o);return}if(e.tag==="FnCall"){if(oi(e.func,s)){Pi(e.func,t,n,r,i,o);return}for(let u of e.args)if(oi(u,s)){Pi(u,t,n,r,i,o);return}}let l=S(e,r,i);l&&a.emitLine(`${r}${l};`)}function lc(e,t,n,r,i,o){let a=i.emitter,s=t.index+1,l=e.args;for(let u=0;u<l.length;u++){let c=l[u],p=S(c,r,i);a.emitLine(`${r}sm->${ga(o,t,u)} = ${p};`)}ai(o)&&t.effectIndex!==void 0&&a.emitLine(`${r}sm->effect_tag = ${t.effectIndex};`),a.emitLine(`${r}sm->state = ${s};`),a.emitLine(`${r}return;`)}function uc(e,t,n,r,i,o){let a=i.emitter,s=ha(t,i);if(!s){a.emitLine(`${r}// ERROR: Could not find inner SM info for transitive effect call`);return}let l=t.index+1,u=`sm->_inner_sm_${t.index}`;if(a.emitLine(`${r}${u} = (${s.structName}){0};`),s.isClosure&&t.isTransitiveClosureCall){let g=S(e.func,r,i);a.emitLine(`${r}${u}.closure_context = &(${g});`)}let p=s.functionType.parameters.filter(g=>!g.isCompileTimeOnly&&!g.isImplicit),f=e.args;for(let g=0;g<p.length&&g<f.length;g++){let h=p[g],y=S(f[g],r,i);a.emitLine(`${r}${u}.${K(h.label)} = ${y};`)}a.emitLine(`${r}${s.resumeFunctionName}(&${u});`),a.emitLine(`${r}if (!${u}.completed) {`);for(let g=0;g<s.yieldTypeCNames.length;g++){let h=ga(o,t,g);a.emitLine(`${r} sm->${h} = ${u}.yield_${g};`)}ai(o)&&t.effectIndex!==void 0&&a.emitLine(`${r} sm->effect_tag = ${t.effectIndex};`),a.emitLine(`${r} sm->state = ${l};`),a.emitLine(`${r} return;`),a.emitLine(`${r}}`);let _=s.returnTypeCName==="void";if(!pe(o.functionType.return.type)&&!_){if(t.targetVariableId){let g=K(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${g} = ${u}.result;`)}a.emitLine(`${r}sm->result = ${u}.result;`)}else if(t.targetVariableId&&!_){let g=K(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${g} = ${u}.result;`)}let d=i.effectWhileLoopContinuation;d?(js(d.remainingExprs,d.bodyDropExprs,d.label,d.stepExpr,d.whileDoneLabel,r,i),a.emitLine(`${r}${d.whileDoneLabel}:;`),a.emitLine(`${r}sm->completed = 1;`),a.emitLine(`${r}return;`)):(a.emitLine(`${r}sm->completed = 1;`),a.emitLine(`${r}return;`))}function cc(e,t){let n=t.expr,r=e.$?.deferredDropExpressions??[],i;e.tag==="FnCall"&&T(e,"begin")?i=e.args:i=[e];let o=[],a=-1;for(let s=0;s<i.length;s++)if(oi(i[s],n)){a=s;break}if(a!==-1)for(let s=a+1;s<i.length;s++)o.push(i[s]);return{remainingExprs:o,bodyDropExprs:r}}function js(e,t,n,r,i,o,a){let s=a.emitter;if(e.length>0){let l=a.smWhileBreakInfo,u=a.smWhileContinueInfo,c=a.smWhileBodyDrops;a.smWhileBreakInfo={label:i},a.smWhileContinueInfo={label:n,stepExpr:r,emitDropsBeforeGoto:!0},a.smWhileBodyDrops=[...t];for(let p of e){let f=S(p,o,a);f&&p.$&&!Qe(p.$.env.modulePath,f)&&s.emitLine(`${o}${f};`)}a.smWhileBreakInfo=l,a.smWhileContinueInfo=u,a.smWhileBodyDrops=c}if(r){let l=S(r,o,a);l&&s.emitLine(`${o}${l};`)}s.emitLine(`${o}goto ${n};`)}function $m(e,t,n,r,i,o){let a=i.emitter,s=e.args,l=s[0],u,c;s.length===3?(u=s[1],c=s[2]):c=s[1];let p=`while_loop_${t.index}`,f=`while_done_${t.index}`;a.emitLine(`${r}${p}:;`);let _=S(l,r,i);a.emitLine(`${r}if (!(${_})) {`),a.emitLine(`${r} sm->completed = 1;`),a.emitLine(`${r} return;`),a.emitLine(`${r}}`);let d;c.tag==="FnCall"&&T(c,"begin")?d=c.args:d=[c];let g=t.expr,h=-1;for(let b=0;b<d.length;b++)if(oi(d[b],g)){h=b;break}let y=[];if(h!==-1)for(let b=h+1;b<d.length;b++)y.push(d[b]);let v=c.$?.deferredDropExpressions??[],E=i.smWhileBreakInfo,$=i.smWhileContinueInfo,C=i.smWhileBodyDrops;i.smWhileBreakInfo={label:f},i.smWhileContinueInfo={label:p,stepExpr:u,emitDropsBeforeGoto:!0},i.smWhileBodyDrops=[...v];for(let b=0;b<h;b++){let O=d[b],N=S(O,r,i);N&&O.$&&!Qe(O.$.env.modulePath,N)&&a.emitLine(`${r}${N};`)}i.smWhileBreakInfo=E,i.smWhileContinueInfo=$,i.smWhileBodyDrops=C;let L=i.effectWhileLoopContinuation;i.effectWhileLoopContinuation={label:p,stepExpr:u,whileDoneLabel:f,remainingExprs:y,bodyDropExprs:v},h!==-1&&Pi(d[h],t,n,r,i,o),i.effectWhileLoopContinuation=L}function Cm(e,t,n,r,i,o){let a=i.emitter,s=t.expr,l=e.args;for(let u=0;u<l.length;u++){let c=l[u];if(!T(c,"=>"))continue;let p=c.args[0],f=c.args[1];if(p.tag==="Atom"&&p.token.value==="true")a.emitLine(`${r}} else {`);else{let g=S(p,r,i);u===0?a.emitLine(`${r}if (${g}) {`):a.emitLine(`${r}} else if (${g}) {`)}if(oi(f,s))Pi(f,t,n,`${r} `,i,o);else{let g=S(f,`${r} `,i);g&&!pe(o.functionType.return.type)?a.emitLine(`${r} sm->result = ${g};`):g&&a.emitLine(`${r} ${g};`),e.$?.deferredDropExpressions&&vt(e,`${r} `,i),a.emitLine(`${r} sm->completed = 1;`),a.emitLine(`${r} return;`)}}a.emitLine(`${r}}`)}function bm(e,t,n,r,i,o){let a=S(e,r,i);a&&i.emitter.emitLine(`${r}${a};`)}function Ks(e,t,n,r,i,o,a,s,l,u,c){let p=u.emitter,{structName:f,resumeFunctionName:_}=e,d=s?`_eff_sm_${K(s)}`:"_eff_sm";p.emitLine(`${l}${f} ${d} = {0};`),c&&p.emitLine(`${l}${d}.closure_context = ${c};`);let g=n.parameters.filter(y=>!y.isCompileTimeOnly&&!y.isImplicit);for(let y=0;y<g.length&&y<t.length;y++){let v=g[y];p.emitLine(`${l}${d}.${K(v.label)} = ${t[y]};`)}p.emitLine(`${l}${_}(&${d});`);let h=u.effectSmConsumedArgCNames;if(!o){let y=new Set;for(let v=0;v<g.length&&v<t.length;v++){let E=g[v];Te(E.type)&&y.add(t[v])}y.size>0&&(u.effectSmConsumedArgCNames=y)}if(p.emitLine(`${l}while (!${d}.completed) {`),yc(r,i,d,e,`${l} `,u,o),p.emitLine(`${l}}`),u.effectSmConsumedArgCNames=h,s&&!pe(n.return.type)){let y=e.returnTypeCName;return p.emitLine(`${l}${y} ${s} = ${d}.result;`),s}return""}function mc(e,t,n,r,i,o,a){let s=a.emitter,{structName:l,resumeFunctionName:u}=e,c=i?`_eff_sm_${K(i)}`:"_eff_sm";s.emitLine(`${o}${l} ${c} = {0};`);let p=n.parameters.filter(d=>!d.isCompileTimeOnly&&!d.isImplicit);for(let d=0;d<p.length&&d<t.length;d++){let g=p[d];s.emitLine(`${o}${c}.${K(g.label)} = ${t[d]};`)}s.emitLine(`${o}${u}(&${c});`);let f=r.some(d=>!d.hasResume),_=a.effectSmConsumedArgCNames;if(f){let d=new Set;for(let g=0;g<p.length&&g<t.length;g++){let h=p[g];Te(h.type)&&d.add(t[g])}d.size>0&&(a.effectSmConsumedArgCNames=d)}s.emitLine(`${o}while (!${c}.completed) {`),s.emitLine(`${o} switch (${c}.effect_tag) {`);for(let d of r)s.emitLine(`${o} case ${d.effectIndex}: {`),yc(d.handlerBody,d.handlerType,c,e,`${o} `,a,d.hasResume,d.effectIndex),s.emitLine(`${o} break;`),s.emitLine(`${o} }`);if(s.emitLine(`${o} }`),s.emitLine(`${o}}`),a.effectSmConsumedArgCNames=_,i&&!pe(n.return.type)){let d=e.returnTypeCName;return s.emitLine(`${o}${d} ${i} = ${c}.result;`),i}return""}function pc(e,t,n){let r=n.emitter,i=e.effectHandlerInfos&&e.effectHandlerInfos.length>1;for(let o of e.effectCallPoints)for(let a=0;a<o.operationArgTypes.length;a++){let s=o.operationArgTypes[a];if(Te(s)){let l=i&&o.effectIndex!==void 0?`yield_${o.effectIndex}_${a}`:`yield_${a}`,u=wn(`sm->${l}`,s,n);u&&r.emitLine(`${t}${u};`)}}}function yc(e,t,n,r,i,o,a,s){let l=o.emitter,u=t.parameters.filter(p=>!p.isCompileTimeOnly),c=[];for(let p=0;p<u.length;p++){let f=u[p],_=P(f.type,o),d=K(f.label),g=s!==void 0?`${n}.yield_${s}_${p}`:`${n}.yield_${p}`;if(a&&Te(f.type)){let h=Lr(g,f.type,o);h?l.emitLine(`${i}${_} ${d} = ${h};`):l.emitLine(`${i}${_} ${d} = ${g};`)}else l.emitLine(`${i}${_} ${d} = ${g};`);if(Te(f.type)){let h=wn(d,f.type,o);h&&c.push(h)}}if(a){let p=o.continuationVariables,f=new Map(p);f.set("resume",{smVar:n,smInfo:r,effectIndex:s}),o.continuationVariables=f;let _=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let d=o.localShadowedVariables,g=new Set(d);for(let y of u)g.add(K(y.label));o.localShadowedVariables=g;let h=S(e,i,o);if(h&&l.emitLine(`${i}${h};`),o.localShadowedVariables=d,!Nr(e)){l.emitLine(`${i}if (!${n}.completed) {`);for(let E of c)l.emitLine(`${i} ${E};`);let y=s!==void 0&&r.effectInfos&&r.effectInfos.length>1?`resume_value_${s}`:"resume_value",v=s!==void 0&&r.effectInfos&&r.effectInfos.length>1?r.effectInfos[s].resumeTypeCName:r.resumeTypeCName;v!=="void"&&l.emitLine(`${i} ${n}.${y} = (${v}){0};`),l.emitLine(`${i} ${r.resumeFunctionName}(&${n});`),l.emitLine(`${i}}`)}o.effectHandlerParamDrops=_,o.continuationVariables=p}else{let p=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let f=o.localShadowedVariables,_=new Set(f);for(let g of u)_.add(K(g.label));o.localShadowedVariables=_;let d=S(e,i,o);d&&l.emitLine(`${i}${d};`),o.localShadowedVariables=f,o.effectHandlerParamDrops=p}}function km(e,t,n,r){if(e.$?.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ze(e,n,r);let i=e.$.deferredDupExpressions[0];if(F(i)&&i.$?.variableName)return ve(i.$.variableName,i.$.env)}return t}function wm(e,t,n){if(e.$?.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if(e.$?.variableName){let i=e.$.variableName;e.$.variableName=void 0;let o=S(e,t,n);e.$.variableName=i;let a=P(e.$.type,n),s=K(i);s!==o&&n.emitter.emitLine(`${t}${a} ${s} = ${o};`)}else{let i=S(e,t,n);n.emitter.emitLine(`${t}${i};`)}Ze(e,t,n);let r=e.$.deferredDupExpressions[0];if(F(r)&&r.$?.variableName)return ve(r.$.variableName,r.$.env)}return S(e,t,n)}function Fm(e){if(F(e)&&T(e,w.___drop)&&e.args.length>=1){let t=e.args[0];if(t&&U(t))return ve(t.token.value,t.$?.env)}if(F(e)&&e.args.length===0&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[1])&&e.func.args[1].token.value===w.___drop[0]&&U(e.func.args[0])){let t=e.func.args[0];return ve(t.token.value,t.$?.env)}}function zn(e,t,n,r=!1,i=!1,o=!1){if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let a=new Set;if(!i&&n.$?.deferredDropExpressions)for(let u of n.$.deferredDropExpressions){let c=_r(u);c&&a.add(c)}let s=t.effectSmConsumedArgCNames,l=n.$?.env&&!o?t.pendingDeferredDrops.filter(u=>{let c=_r(u);return!c||a.has(c)?!1:j(n.$.env,c).length>0}):t.pendingDeferredDrops.filter(u=>{let c=_r(u);if(!c||a.has(c))return!1;if(s&&s.size>0){let p=Fm(u);if(p&&s.has(p))return!1}return!0});if(l.length>0){let u=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${u}`);for(let c of l){let p=S(c,e,t);p&&t.emitter.emitLine(`${e}${p};`)}}}}function Lm(e,t,n,r){let{smVar:i,smInfo:o,effectIndex:a}=r,s=n.emitter,l=n,u=e.args[0],c=a!==void 0&&o.effectInfos&&o.effectInfos.length>1?`resume_value_${a}`:"resume_value",p=a!==void 0&&o.effectInfos&&o.effectInfos.length>1?o.effectInfos[a].resumeTypeCName:o.resumeTypeCName;if(u&&p!=="void"){let f=S(u,t,n);s.emitLine(`${t}${i}.${c} = ${f};`)}if(l.effectHandlerParamDrops)for(let f of l.effectHandlerParamDrops)s.emitLine(`${t}${f};`);return s.emitLine(`${t}${o.resumeFunctionName}(&${i});`),""}function gc(e,t,n){let r=n;if(r.continuationVariables){let o=r.continuationVariables.get("resume");if(o){if("directReturnVar"in o){if(!o.isUnitReturn){let a=e.args[0];if(a){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${o.directReturnVar} = ${s};`)}}return zn(t,r,e,!1,!0),o.directExitLabel&&n.emitter.emitLine(`${t}goto ${o.directExitLabel};`),""}return Lm(e,t,n,o)}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!pe(e.$.type))return"// Error: return expression missing temporary variable name";let o,a=!1;if((r.inAsyncStateMachine||r.inEffectStateMachine)&&i.$?.variableName){let p=i.$.variableName;i.$.variableName=void 0,o=S(i,t,n),i.$.variableName=p,a=!0}else if(i.$?.variableName&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){let p=i.$.variableName;i.$.variableName=void 0;let f=S(i,t,n);i.$.variableName=p;let _=P(i.$.type,n),d=ve(p,i.$.env);d!==f&&n.emitter.emitLine(`${t}${_} ${d} = ${f};`),o=d}else o=S(i,t,n);let s=!1;if(i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,r);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(o=ve(p.$.variableName,p.$.env),s=!0)}let l=P(e.$.type,n),u=e.$.variableName?ve(e.$.variableName,e.$.env):void 0;if(!s&&!pe(e.$.type)&&u&&u!==o&&n.emitter.emitLine(`${t}${l} ${u} = ${o};`),e.$.deferredDropExpressions&&vt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine){zn(t,r,e,!0);let h=s?o:u??o;return pe(e.$.type)||n.emitter.emitLine(`${t}sm->result = ${h};`),n.emitter.emitLine(`${t}sm->completed = 1;`),"return"}let p=r.inAsyncStateMachine.futureType,_=At(p).isFuture.outputType,d=pe(_);zn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let g;return d||(g=e.$.variableName&&a?e.$.variableName:e.$.variableName||o),fr({emitter:n.emitter,indent:t,resultCode:g,debugLabel:n.currentFunctionName}),""}return zn(t,r,e),pe(e.$.type)?"return":`return ${s?o:u??o}`}else{if(e.$?.deferredDropExpressions&&vt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine)return zn(t,r,e,!0),n.emitter.emitLine(`${t}sm->completed = 1;`),"return";let o=r.inAsyncStateMachine.futureType,s=At(o).isFuture.outputType,l=pe(s);zn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let u=l?void 0:`(${P(s,n)}){0}`;return fr({emitter:n.emitter,indent:t,resultCode:u,debugLabel:n.currentFunctionName}),""}return zn(t,r,e),"return"}}function hc(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=Ri(e,n),o=km(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,I.return)){let i=S(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=wm(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function vc(e,t){e.emitLine(`
9530
+ `)}function lc(e,t){rc(e),oc(e),ac(e),sc(e),ic(e)}function ai(e){return!!e.effectInfos&&e.effectInfos.length>1}function Nr(e){if(T(e,I.return))return!0;if(e.tag==="FnCall"){let t=e;if(T(e,"->"))return!1;for(let n of t.args)if(Nr(n))return!0;if(t.func&&Nr(t.func))return!0}return!1}function va(e,t,n){return ai(e)&&t.effectIndex!==void 0?`yield_${t.effectIndex}_${n}`:`yield_${n}`}function ha(e,t){return ai(e)&&t.effectIndex!==void 0?`resume_value_${t.effectIndex}`:"resume_value"}function uc(e,t){return ai(e)&&t.effectIndex!==void 0?e.effectInfos[t.effectIndex].resumeTypeCName:e.resumeTypeCName}function dc(e,t){let n=t.emitter,{structName:r,analysis:i,functionType:o,returnTypeCName:a,yieldTypeCNames:s,resumeTypeCName:l}=e;if(n.emitDeclarationLine(`typedef struct ${r} {`),n.emitDeclarationLine(" int state;"),n.emitDeclarationLine(" int completed;"),pe(o.return.type)||n.emitDeclarationLine(` ${a} result;`),e.effectInfos){n.emitDeclarationLine(" int effect_tag;");for(let c=0;c<e.effectInfos.length;c++){let p=e.effectInfos[c];for(let f=0;f<p.yieldTypeCNames.length;f++)n.emitDeclarationLine(` ${p.yieldTypeCNames[f]} yield_${c}_${f};`);p.resumeTypeCName!=="void"&&n.emitDeclarationLine(` ${p.resumeTypeCName} resume_value_${c};`)}}else{for(let c=0;c<s.length;c++)n.emitDeclarationLine(` ${s[c]} yield_${c};`);l!=="void"&&n.emitDeclarationLine(` ${l} resume_value;`)}e.isClosure&&n.emitDeclarationLine(" void* closure_context;");let u=new Set;for(let c of o.parameters){if(c.isCompileTimeOnly||c.isImplicit)continue;let p=P(c.type,t);n.emitDeclarationLine(` ${p} ${K(c.label)};`),u.add(c.label)}for(let c of i.capturedVariables){if(e.closureCapturedVarNames?.has(c.name))continue;let p=P(c.type,t),f=K(`var_${c.id}`);n.emitDeclarationLine(` ${p} ${f};`)}for(let c of i.effectCallPoints)if(c.isTransitiveEffectCall){let p=Ea(c,t);p&&n.emitDeclarationLine(` ${p.structName} _inner_sm_${c.index};`)}n.emitDeclarationLine(`} ${r};`),n.emitDeclarationLine("")}function mc(e,t){t.emitter.emitDeclarationLine(`void ${e.resumeFunctionName}(${e.structName}* sm);`)}function Ea(e,t){let n=e.expr,r=n.func.$?.value;if(r&&ie(r)){let i=r.funcId,o=t.functions[i];return o?o.effectStateMachineInfo:void 0}if(e.isTransitiveClosureCall){let i=n.func.$?.type;if(i&&D(i)){let a=i.resolvedConcreteType?.id;if(a){let s=t.implClosureCallMap.get(a);if(s){let l=Object.values(t.functions).find(u=>u.cName===s.functionCName);if(l?.effectStateMachineInfo)return l.effectStateMachineInfo}for(let l in t.functions){let u=t.functions[l];if(u.value.type.isClosure&&u.value.closureInfo?.captureType?.id===a&&u.effectStateMachineInfo)return u.effectStateMachineInfo}}}}}function Cm(e){let t=new Map;for(let n of e.capturedVariables)t.set(n.id,{id:n.id,name:n.name,type:n.type,kind:"local",isOwningTheSameRcValueAs:n.isOwningTheSameRcValueAs?{id:n.isOwningTheSameRcValueAs.id,name:n.isOwningTheSameRcValueAs.name,type:n.isOwningTheSameRcValueAs.type,kind:"local",isOwningTheSameRcValueAs:void 0}:void 0});return t}function bm(e,t){return ma(e,t).map(r=>({stateNumber:r.stateNumber,expressions:r.expressions,effectCallPoint:r.suspensionPoint}))}function oi(e,t){return Ir(e,t)}function yc(e,t,n,r){let i=n.emitter,{structName:o,resumeFunctionName:a,analysis:s}=t,l=n.inEffectStateMachine,u=n.stateMachineVariables,c=n.variableIdRemapping,p=n.currentClosureCaptures,f=n.currentClosureCaptureFrameLevel,_=n.currentClosureCaptureTypeCName;if(t.isClosure&&r?.closureInfo){let v=r.closureInfo.captureType;v&&ue(v)&&v.fields.length>0&&(n.currentClosureCaptures=v.fields.map(E=>E.label),n.currentClosureCaptureFrameLevel=r.frameLevel,t.closureCaptureTypeCName&&(n.currentClosureCaptureTypeCName=t.closureCaptureTypeCName))}let d=t.closureCapturedVarNames??new Set,g=Cm(s);if(d.size>0)for(let[v,E]of g)d.has(E.name)&&g.delete(v);n.inEffectStateMachine=t,n.stateMachineVariables=g,n.variableIdRemapping=s.variableIdRemapping;let h=bm(e,s.effectCallPoints);i.emitLine(`void ${a}(${o}* sm) {`),t.isClosure&&i.emitLine(" void* closure_context = sm->closure_context;"),i.emitLine(" switch (sm->state) {");for(let v=0;v<h.length;v++){let E=h[v],$=v===h.length-1;if(i.emitLine(` case ${E.stateNumber}: {`),E.stateNumber===0){let C=t.functionType.parameters.filter(L=>!L.isCompileTimeOnly&&!L.isImplicit);for(let L of C){let b=s.capturedVariables.find(O=>O.name===L.label);if(b){let O=K(`var_${b.id}`),N=K(L.label);i.emitLine(` sm->${O} = sm->${N};`)}}}if(E.stateNumber>0&&s.effectCallPoints[E.stateNumber-1]){let C=s.effectCallPoints[E.stateNumber-1];if(C.isTransitiveEffectCall){let L=Ea(C,n);if(L){let b=`sm->_inner_sm_${C.index}`,O=ha(t,C);L.resumeTypeCName!=="void"&&i.emitLine(` ${b}.resume_value = sm->${O};`),i.emitLine(` ${L.resumeFunctionName}(&${b});`),i.emitLine(` if (!${b}.completed) {`);for(let M=0;M<L.yieldTypeCNames.length;M++){let V=va(t,C,M);i.emitLine(` sm->${V} = ${b}.yield_${M};`)}ai(t)&&C.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${C.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let N=L.returnTypeCName==="void";if(C.targetVariableId&&!N){let M=K(`var_${C.targetVariableId}`);i.emitLine(` sm->${M} = ${b}.result;`)}}}else{let L=ha(t,C),b=uc(t,C);if(C.targetVariableId&&b!=="void"){let O=K(`var_${C.targetVariableId}`);i.emitLine(` sm->${O} = sm->${L};`)}}if(C.isInsideWhile&&C.enclosingWhileExpr){let b=C.enclosingWhileExpr.args,O,N;b.length===3?(O=b[1],N=b[2]):N=b[1];let M=`while_loop_${C.index}`,V=`while_done_${C.index}_s${E.stateNumber}`,{remainingExprs:z,bodyDropExprs:ee}=fc(N,C);Ks(z,ee,M,O,V," ",n),i.emitLine(` ${V}:;`),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;"),i.emitLine(" }");continue}}for(let C=0;C<E.expressions.length;C++){let L=E.expressions[C],b=C===E.expressions.length-1;if(E.effectCallPoint&&oi(L,E.effectCallPoint.expr)&&E.effectCallPoint)Pi(L,E.effectCallPoint,E.stateNumber," ",n,t);else if(b&&$&&!pe(t.functionType.return.type)){let N=S(L," ",n);N&&i.emitLine(` sm->result = ${N};`)}else{let N=S(L," ",n);N&&L.$&&!Qe(L.$.env.modulePath,N)&&i.emitLine(` ${N};`)}}$&&!E.effectCallPoint&&(e.$?.deferredDropExpressions?vt(e," ",n):_c(s," ",n),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;")),i.emitLine(" }")}let y=h.length>0?h[h.length-1].stateNumber:-1;for(let v of s.effectCallPoints){let E=v.index+1;if(E>y){if(i.emitLine(` case ${E}: {`),v.isTransitiveEffectCall){let $=Ea(v,n);if($){let C=`sm->_inner_sm_${v.index}`,L=ha(t,v);$.resumeTypeCName!=="void"&&i.emitLine(` ${C}.resume_value = sm->${L};`),i.emitLine(` ${$.resumeFunctionName}(&${C});`),i.emitLine(` if (!${C}.completed) {`);for(let O=0;O<$.yieldTypeCNames.length;O++){let N=va(t,v,O);i.emitLine(` sm->${N} = ${C}.yield_${O};`)}ai(t)&&v.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${v.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let b=$.returnTypeCName==="void";if(v.targetVariableId&&!b){let O=K(`var_${v.targetVariableId}`);i.emitLine(` sm->${O} = ${C}.result;`)}!pe(t.functionType.return.type)&&!b&&i.emitLine(` sm->result = ${C}.result;`)}}else{let $=ha(t,v),C=uc(t,v);if(v.targetVariableId&&C!=="void"){let L=K(`var_${v.targetVariableId}`);i.emitLine(` sm->${L} = sm->${$};`)}!pe(t.functionType.return.type)&&C!=="void"&&i.emitLine(` sm->result = sm->${$};`),e.$?.deferredDropExpressions?vt(e," ",n):_c(s," ",n)}if(v.isInsideWhile&&v.enclosingWhileExpr){let C=v.enclosingWhileExpr.args,L,b;C.length===3?(L=C[1],b=C[2]):b=C[1];let O=`while_loop_${v.index}`,N=`while_done_${v.index}_r${E}`,{remainingExprs:M,bodyDropExprs:V}=fc(b,v);Ks(M,V,O,L,N," ",n),i.emitLine(` ${N}:;`),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;")}else i.emitLine(" sm->completed = 1;"),i.emitLine(" return;");i.emitLine(" }")}}i.emitLine(" }"),i.emitLine("}"),i.emitLine(""),n.inEffectStateMachine=l,n.stateMachineVariables=u,n.variableIdRemapping=c,n.currentClosureCaptures=p,n.currentClosureCaptureFrameLevel=f,n.currentClosureCaptureTypeCName=_}function Pi(e,t,n,r,i,o){let a=i.emitter,s=t.expr;if(T(e,":=")){let u=e.args[1];if(u===s){t.isTransitiveEffectCall?pc(s,t,n,r,i,o):cc(s,t,n,r,i,o);return}if(oi(u,s)){Pi(u,t,n,r,i,o);return}let c=S(e,r,i);c&&a.emitLine(`${r}${c};`);return}if(e===s){t.isTransitiveEffectCall?pc(s,t,n,r,i,o):cc(s,t,n,r,i,o);return}if(T(e,I.cond)){wm(e,t,n,r,i,o);return}if(T(e,I.match)){Fm(e,t,n,r,i,o);return}if(T(e,I.while)){km(e,t,n,r,i,o);return}if(e.tag==="FnCall"){if(oi(e.func,s)){Pi(e.func,t,n,r,i,o);return}for(let u of e.args)if(oi(u,s)){Pi(u,t,n,r,i,o);return}}let l=S(e,r,i);l&&a.emitLine(`${r}${l};`)}function cc(e,t,n,r,i,o){let a=i.emitter,s=t.index+1,l=e.args;for(let u=0;u<l.length;u++){let c=l[u],p=S(c,r,i);a.emitLine(`${r}sm->${va(o,t,u)} = ${p};`)}ai(o)&&t.effectIndex!==void 0&&a.emitLine(`${r}sm->effect_tag = ${t.effectIndex};`),a.emitLine(`${r}sm->state = ${s};`),a.emitLine(`${r}return;`)}function pc(e,t,n,r,i,o){let a=i.emitter,s=Ea(t,i);if(!s){a.emitLine(`${r}// ERROR: Could not find inner SM info for transitive effect call`);return}let l=t.index+1,u=`sm->_inner_sm_${t.index}`;if(a.emitLine(`${r}${u} = (${s.structName}){0};`),s.isClosure&&t.isTransitiveClosureCall){let g=S(e.func,r,i);a.emitLine(`${r}${u}.closure_context = &(${g});`)}let p=s.functionType.parameters.filter(g=>!g.isCompileTimeOnly&&!g.isImplicit),f=e.args;for(let g=0;g<p.length&&g<f.length;g++){let h=p[g],y=S(f[g],r,i);a.emitLine(`${r}${u}.${K(h.label)} = ${y};`)}a.emitLine(`${r}${s.resumeFunctionName}(&${u});`),a.emitLine(`${r}if (!${u}.completed) {`);for(let g=0;g<s.yieldTypeCNames.length;g++){let h=va(o,t,g);a.emitLine(`${r} sm->${h} = ${u}.yield_${g};`)}ai(o)&&t.effectIndex!==void 0&&a.emitLine(`${r} sm->effect_tag = ${t.effectIndex};`),a.emitLine(`${r} sm->state = ${l};`),a.emitLine(`${r} return;`),a.emitLine(`${r}}`);let _=s.returnTypeCName==="void";if(!pe(o.functionType.return.type)&&!_){if(t.targetVariableId){let g=K(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${g} = ${u}.result;`)}a.emitLine(`${r}sm->result = ${u}.result;`)}else if(t.targetVariableId&&!_){let g=K(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${g} = ${u}.result;`)}let d=i.effectWhileLoopContinuation;d?(Ks(d.remainingExprs,d.bodyDropExprs,d.label,d.stepExpr,d.whileDoneLabel,r,i),a.emitLine(`${r}${d.whileDoneLabel}:;`),a.emitLine(`${r}sm->completed = 1;`),a.emitLine(`${r}return;`)):(a.emitLine(`${r}sm->completed = 1;`),a.emitLine(`${r}return;`))}function fc(e,t){let n=t.expr,r=e.$?.deferredDropExpressions??[],i;e.tag==="FnCall"&&T(e,"begin")?i=e.args:i=[e];let o=[],a=-1;for(let s=0;s<i.length;s++)if(oi(i[s],n)){a=s;break}if(a!==-1)for(let s=a+1;s<i.length;s++)o.push(i[s]);return{remainingExprs:o,bodyDropExprs:r}}function Ks(e,t,n,r,i,o,a){let s=a.emitter;if(e.length>0){let l=a.smWhileBreakInfo,u=a.smWhileContinueInfo,c=a.smWhileBodyDrops;a.smWhileBreakInfo={label:i},a.smWhileContinueInfo={label:n,stepExpr:r,emitDropsBeforeGoto:!0},a.smWhileBodyDrops=[...t];for(let p of e){let f=S(p,o,a);f&&p.$&&!Qe(p.$.env.modulePath,f)&&s.emitLine(`${o}${f};`)}a.smWhileBreakInfo=l,a.smWhileContinueInfo=u,a.smWhileBodyDrops=c}if(r){let l=S(r,o,a);l&&s.emitLine(`${o}${l};`)}s.emitLine(`${o}goto ${n};`)}function km(e,t,n,r,i,o){let a=i.emitter,s=e.args,l=s[0],u,c;s.length===3?(u=s[1],c=s[2]):c=s[1];let p=`while_loop_${t.index}`,f=`while_done_${t.index}`;a.emitLine(`${r}${p}:;`);let _=S(l,r,i);a.emitLine(`${r}if (!(${_})) {`),a.emitLine(`${r} sm->completed = 1;`),a.emitLine(`${r} return;`),a.emitLine(`${r}}`);let d;c.tag==="FnCall"&&T(c,"begin")?d=c.args:d=[c];let g=t.expr,h=-1;for(let b=0;b<d.length;b++)if(oi(d[b],g)){h=b;break}let y=[];if(h!==-1)for(let b=h+1;b<d.length;b++)y.push(d[b]);let v=c.$?.deferredDropExpressions??[],E=i.smWhileBreakInfo,$=i.smWhileContinueInfo,C=i.smWhileBodyDrops;i.smWhileBreakInfo={label:f},i.smWhileContinueInfo={label:p,stepExpr:u,emitDropsBeforeGoto:!0},i.smWhileBodyDrops=[...v];for(let b=0;b<h;b++){let O=d[b],N=S(O,r,i);N&&O.$&&!Qe(O.$.env.modulePath,N)&&a.emitLine(`${r}${N};`)}i.smWhileBreakInfo=E,i.smWhileContinueInfo=$,i.smWhileBodyDrops=C;let L=i.effectWhileLoopContinuation;i.effectWhileLoopContinuation={label:p,stepExpr:u,whileDoneLabel:f,remainingExprs:y,bodyDropExprs:v},h!==-1&&Pi(d[h],t,n,r,i,o),i.effectWhileLoopContinuation=L}function wm(e,t,n,r,i,o){let a=i.emitter,s=t.expr,l=e.args;for(let u=0;u<l.length;u++){let c=l[u];if(!T(c,"=>"))continue;let p=c.args[0],f=c.args[1];if(p.tag==="Atom"&&p.token.value==="true")a.emitLine(`${r}} else {`);else{let g=S(p,r,i);u===0?a.emitLine(`${r}if (${g}) {`):a.emitLine(`${r}} else if (${g}) {`)}if(oi(f,s))Pi(f,t,n,`${r} `,i,o);else{let g=S(f,`${r} `,i);g&&!pe(o.functionType.return.type)?a.emitLine(`${r} sm->result = ${g};`):g&&a.emitLine(`${r} ${g};`),e.$?.deferredDropExpressions&&vt(e,`${r} `,i),a.emitLine(`${r} sm->completed = 1;`),a.emitLine(`${r} return;`)}}a.emitLine(`${r}}`)}function Fm(e,t,n,r,i,o){let a=S(e,r,i);a&&i.emitter.emitLine(`${r}${a};`)}function Xs(e,t,n,r,i,o,a,s,l,u,c){let p=u.emitter,{structName:f,resumeFunctionName:_}=e,d=s?`_eff_sm_${K(s)}`:"_eff_sm";p.emitLine(`${l}${f} ${d} = {0};`),c&&p.emitLine(`${l}${d}.closure_context = ${c};`);let g=n.parameters.filter(y=>!y.isCompileTimeOnly&&!y.isImplicit);for(let y=0;y<g.length&&y<t.length;y++){let v=g[y];p.emitLine(`${l}${d}.${K(v.label)} = ${t[y]};`)}p.emitLine(`${l}${_}(&${d});`);let h=u.effectSmConsumedArgCNames;if(!o){let y=new Set;for(let v=0;v<g.length&&v<t.length;v++){let E=g[v];Te(E.type)&&y.add(t[v])}y.size>0&&(u.effectSmConsumedArgCNames=y)}if(p.emitLine(`${l}while (!${d}.completed) {`),hc(r,i,d,e,`${l} `,u,o),p.emitLine(`${l}}`),u.effectSmConsumedArgCNames=h,s&&!pe(n.return.type)){let y=e.returnTypeCName;return p.emitLine(`${l}${y} ${s} = ${d}.result;`),s}return""}function gc(e,t,n,r,i,o,a){let s=a.emitter,{structName:l,resumeFunctionName:u}=e,c=i?`_eff_sm_${K(i)}`:"_eff_sm";s.emitLine(`${o}${l} ${c} = {0};`);let p=n.parameters.filter(d=>!d.isCompileTimeOnly&&!d.isImplicit);for(let d=0;d<p.length&&d<t.length;d++){let g=p[d];s.emitLine(`${o}${c}.${K(g.label)} = ${t[d]};`)}s.emitLine(`${o}${u}(&${c});`);let f=r.some(d=>!d.hasResume),_=a.effectSmConsumedArgCNames;if(f){let d=new Set;for(let g=0;g<p.length&&g<t.length;g++){let h=p[g];Te(h.type)&&d.add(t[g])}d.size>0&&(a.effectSmConsumedArgCNames=d)}s.emitLine(`${o}while (!${c}.completed) {`),s.emitLine(`${o} switch (${c}.effect_tag) {`);for(let d of r)s.emitLine(`${o} case ${d.effectIndex}: {`),hc(d.handlerBody,d.handlerType,c,e,`${o} `,a,d.hasResume,d.effectIndex),s.emitLine(`${o} break;`),s.emitLine(`${o} }`);if(s.emitLine(`${o} }`),s.emitLine(`${o}}`),a.effectSmConsumedArgCNames=_,i&&!pe(n.return.type)){let d=e.returnTypeCName;return s.emitLine(`${o}${d} ${i} = ${c}.result;`),i}return""}function _c(e,t,n){let r=n.emitter,i=e.effectHandlerInfos&&e.effectHandlerInfos.length>1;for(let o of e.effectCallPoints)for(let a=0;a<o.operationArgTypes.length;a++){let s=o.operationArgTypes[a];if(Te(s)){let l=i&&o.effectIndex!==void 0?`yield_${o.effectIndex}_${a}`:`yield_${a}`,u=wn(`sm->${l}`,s,n);u&&r.emitLine(`${t}${u};`)}}}function hc(e,t,n,r,i,o,a,s){let l=o.emitter,u=t.parameters.filter(p=>!p.isCompileTimeOnly),c=[];for(let p=0;p<u.length;p++){let f=u[p],_=P(f.type,o),d=K(f.label),g=s!==void 0?`${n}.yield_${s}_${p}`:`${n}.yield_${p}`;if(a&&Te(f.type)){let h=Lr(g,f.type,o);h?l.emitLine(`${i}${_} ${d} = ${h};`):l.emitLine(`${i}${_} ${d} = ${g};`)}else l.emitLine(`${i}${_} ${d} = ${g};`);if(Te(f.type)){let h=wn(d,f.type,o);h&&c.push(h)}}if(a){let p=o.continuationVariables,f=new Map(p);f.set("resume",{smVar:n,smInfo:r,effectIndex:s}),o.continuationVariables=f;let _=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let d=o.localShadowedVariables,g=new Set(d);for(let y of u)g.add(K(y.label));o.localShadowedVariables=g;let h=S(e,i,o);if(h&&l.emitLine(`${i}${h};`),o.localShadowedVariables=d,!Nr(e)){l.emitLine(`${i}if (!${n}.completed) {`);for(let E of c)l.emitLine(`${i} ${E};`);let y=s!==void 0&&r.effectInfos&&r.effectInfos.length>1?`resume_value_${s}`:"resume_value",v=s!==void 0&&r.effectInfos&&r.effectInfos.length>1?r.effectInfos[s].resumeTypeCName:r.resumeTypeCName;v!=="void"&&l.emitLine(`${i} ${n}.${y} = (${v}){0};`),l.emitLine(`${i} ${r.resumeFunctionName}(&${n});`),l.emitLine(`${i}}`)}o.effectHandlerParamDrops=_,o.continuationVariables=p}else{let p=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let f=o.localShadowedVariables,_=new Set(f);for(let g of u)_.add(K(g.label));o.localShadowedVariables=_;let d=S(e,i,o);d&&l.emitLine(`${i}${d};`),o.localShadowedVariables=f,o.effectHandlerParamDrops=p}}function Lm(e,t,n,r){if(e.$?.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ze(e,n,r);let i=e.$.deferredDupExpressions[0];if(F(i)&&i.$?.variableName)return ve(i.$.variableName,i.$.env)}return t}function Am(e,t,n){if(e.$?.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if(e.$?.variableName){let i=e.$.variableName;e.$.variableName=void 0;let o=S(e,t,n);e.$.variableName=i;let a=P(e.$.type,n),s=K(i);s!==o&&n.emitter.emitLine(`${t}${a} ${s} = ${o};`)}else{let i=S(e,t,n);n.emitter.emitLine(`${t}${i};`)}Ze(e,t,n);let r=e.$.deferredDupExpressions[0];if(F(r)&&r.$?.variableName)return ve(r.$.variableName,r.$.env)}return S(e,t,n)}function Im(e){if(F(e)&&T(e,w.___drop)&&e.args.length>=1){let t=e.args[0];if(t&&U(t))return ve(t.token.value,t.$?.env)}if(F(e)&&e.args.length===0&&F(e.func)&&T(e.func,".",2)&&U(e.func.args[1])&&e.func.args[1].token.value===w.___drop[0]&&U(e.func.args[0])){let t=e.func.args[0];return ve(t.token.value,t.$?.env)}}function zn(e,t,n,r=!1,i=!1,o=!1){if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let a=new Set;if(!i&&n.$?.deferredDropExpressions)for(let u of n.$.deferredDropExpressions){let c=_r(u);c&&a.add(c)}let s=t.effectSmConsumedArgCNames,l=n.$?.env&&!o?t.pendingDeferredDrops.filter(u=>{let c=_r(u);return!c||a.has(c)?!1:j(n.$.env,c).length>0}):t.pendingDeferredDrops.filter(u=>{let c=_r(u);if(!c||a.has(c))return!1;if(s&&s.size>0){let p=Im(u);if(p&&s.has(p))return!1}return!0});if(l.length>0){let u=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${u}`);for(let c of l){let p=S(c,e,t);p&&t.emitter.emitLine(`${e}${p};`)}}}}function xm(e,t,n,r){let{smVar:i,smInfo:o,effectIndex:a}=r,s=n.emitter,l=n,u=e.args[0],c=a!==void 0&&o.effectInfos&&o.effectInfos.length>1?`resume_value_${a}`:"resume_value",p=a!==void 0&&o.effectInfos&&o.effectInfos.length>1?o.effectInfos[a].resumeTypeCName:o.resumeTypeCName;if(u&&p!=="void"){let f=S(u,t,n);s.emitLine(`${t}${i}.${c} = ${f};`)}if(l.effectHandlerParamDrops)for(let f of l.effectHandlerParamDrops)s.emitLine(`${t}${f};`);return s.emitLine(`${t}${o.resumeFunctionName}(&${i});`),""}function vc(e,t,n){let r=n;if(r.continuationVariables){let o=r.continuationVariables.get("resume");if(o){if("directReturnVar"in o){if(!o.isUnitReturn){let a=e.args[0];if(a){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${o.directReturnVar} = ${s};`)}}return zn(t,r,e,!1,!0),o.directExitLabel&&n.emitter.emitLine(`${t}goto ${o.directExitLabel};`),""}return xm(e,t,n,o)}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!pe(e.$.type))return"// Error: return expression missing temporary variable name";let o,a=!1;if((r.inAsyncStateMachine||r.inEffectStateMachine)&&i.$?.variableName){let p=i.$.variableName;i.$.variableName=void 0,o=S(i,t,n),i.$.variableName=p,a=!0}else if(i.$?.variableName&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){let p=i.$.variableName;i.$.variableName=void 0;let f=S(i,t,n);i.$.variableName=p;let _=P(i.$.type,n),d=ve(p,i.$.env);d!==f&&n.emitter.emitLine(`${t}${_} ${d} = ${f};`),o=d}else o=S(i,t,n);let s=!1;if(i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,r);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(o=ve(p.$.variableName,p.$.env),s=!0)}let l=P(e.$.type,n),u=e.$.variableName?ve(e.$.variableName,e.$.env):void 0;if(!s&&!pe(e.$.type)&&u&&u!==o&&n.emitter.emitLine(`${t}${l} ${u} = ${o};`),e.$.deferredDropExpressions&&vt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine){zn(t,r,e,!0);let h=s?o:u??o;return pe(e.$.type)||n.emitter.emitLine(`${t}sm->result = ${h};`),n.emitter.emitLine(`${t}sm->completed = 1;`),"return"}let p=r.inAsyncStateMachine.futureType,_=It(p).isFuture.outputType,d=pe(_);zn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let g;return d||(g=e.$.variableName&&a?e.$.variableName:e.$.variableName||o),fr({emitter:n.emitter,indent:t,resultCode:g,debugLabel:n.currentFunctionName}),""}return zn(t,r,e),pe(e.$.type)?"return":`return ${s?o:u??o}`}else{if(e.$?.deferredDropExpressions&&vt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine)return zn(t,r,e,!0),n.emitter.emitLine(`${t}sm->completed = 1;`),"return";let o=r.inAsyncStateMachine.futureType,s=It(o).isFuture.outputType,l=pe(s);zn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let u=l?void 0:`(${P(s,n)}){0}`;return fr({emitter:n.emitter,indent:t,resultCode:u,debugLabel:n.currentFunctionName}),""}return zn(t,r,e),"return"}}function Ec(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=Ri(e,n),o=Lm(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,I.return)){let i=S(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=Am(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function Tc(e,t){e.emitLine(`
9531
9531
  // ============================================================================
9532
9532
  // Parallelism Runtime - Thread and Worker
9533
9533
  // ============================================================================
@@ -9949,7 +9949,7 @@ void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
9949
9949
  yo_cond_signal(&worker->cond);
9950
9950
  yo_mutex_unlock(&worker->mutex);
9951
9951
  }
9952
- `)}function Xs(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct { // Vtable for ${A(e)}`);let o=new Set,a=new Set([w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(Et(s)){let l=s.isFn.callType,u=P(l.return.type,n),c=l.parameters.map(p=>{let f=P(p.type,n),_=K(p.label);return`${f} ${_}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=K(l.label);if(H(l.type)){let c=l.type;if(c.parameters.length>0){let p=c.parameters[0];if(p&&p.label==="self"){let f=P(c.return.type,n),_=c.parameters.map((d,g)=>{if(g===0)return"void* self";{let h=P(d.type,n),y=K(d.label);return`${h} ${y}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${_}); // Method pointer for ${l.label}`)}}}else{let c=P(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`typedef struct { // ${e.typeName||"Dyn"} : ${A(e)} (value type - fat pointer)`),r.emitDeclarationLine(" void* data; // Pointer to boxed data (with yo_ref_header_t)"),r.emitDeclarationLine(` const ${i}* vtable; // Pointer to static vtable (no allocation needed)`),r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Qs(e){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[,r]of e.dynImpls){let o=`yo_dyn_box_${e.types[r.concreteType.id]?.cName||`unknown_${r.concreteType.id}`}`;if(n.has(o))continue;n.add(o);let a=P(r.concreteType,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" yo_ref_header_t header;"),t.emitDeclarationLine(` ${a} value;`),t.emitDeclarationLine(`} ${o};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${o}* __yo_new_${o}(${a} value);`),t.emitDeclarationLine(`void __yo_dispose_${o}(void* ptr);`),t.emitDeclarationLine("")}}function Ec(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
9952
+ `)}function Qs(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct { // Vtable for ${A(e)}`);let o=new Set,a=new Set([w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(Et(s)){let l=s.isFn.callType,u=P(l.return.type,n),c=l.parameters.map(p=>{let f=P(p.type,n),_=K(p.label);return`${f} ${_}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=K(l.label);if(q(l.type)){let c=l.type;if(c.parameters.length>0){let p=c.parameters[0];if(p&&p.label==="self"){let f=P(c.return.type,n),_=c.parameters.map((d,g)=>{if(g===0)return"void* self";{let h=P(d.type,n),y=K(d.label);return`${h} ${y}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${_}); // Method pointer for ${l.label}`)}}}else{let c=P(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`typedef struct { // ${e.typeName||"Dyn"} : ${A(e)} (value type - fat pointer)`),r.emitDeclarationLine(" void* data; // Pointer to boxed data (with yo_ref_header_t)"),r.emitDeclarationLine(` const ${i}* vtable; // Pointer to static vtable (no allocation needed)`),r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Zs(e){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[,r]of e.dynImpls){let o=`yo_dyn_box_${e.types[r.concreteType.id]?.cName||`unknown_${r.concreteType.id}`}`;if(n.has(o))continue;n.add(o);let a=P(r.concreteType,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" yo_ref_header_t header;"),t.emitDeclarationLine(` ${a} value;`),t.emitDeclarationLine(`} ${o};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${o}* __yo_new_${o}(${a} value);`),t.emitDeclarationLine(`void __yo_dispose_${o}(void* ptr);`),t.emitDeclarationLine("")}}function $c(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
9953
9953
  // Based on QuickJS trial deletion algorithm
9954
9954
  // See CYCLE_COLLECTION.md for design details
9955
9955
 
@@ -10143,7 +10143,7 @@ typedef struct yo_io_future_t {
10143
10143
  } yo_io_future_t;
10144
10144
 
10145
10145
  // Forward declarations will be added here if needed
10146
- `);for(let f in e.types){let{type:_,cName:d}=e.types[f];if(!Ae(_)){if(zt(_))e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`);else if(ue(_)){if(_.isNewtype&&_.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}else if(ye(_)){let g=Kt(_),h=kn(_);!g&&!h&&e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),Am(e),Im(e),Js(e),xm(e);for(let f in e.types){let{type:_,cName:d}=e.types[f];Ae(_)||ye(_)&&kn(_)&&Zs(_,d,e)}let i=[];for(let f in e.types){let{type:_,cName:d}=e.types[f];Ae(_)||(ue(_)?i.push({typeId:f,type:_,cName:d,kind:"struct"}):ye(_)&&!kn(_)&&!Kt(_)?i.push({typeId:f,type:_,cName:d,kind:"enum"}):ke(_)&&i.push({typeId:f,type:_,cName:d,kind:"tuple"}))}let o=new Map,a=new Map(i.map(f=>[f.typeId,f])),s=new Map(i.map(f=>[f.cName,f.typeId]));function l(f){if(Ie(f)){let d=f.childType;if(ue(d)&&d.isNewtype)return d}else if(ye(f)){let _=Kt(f);if(_&&Ie(_)){let g=_.childType;if(ue(g)&&g.isNewtype)return g}}return null}for(let{typeId:f,type:_,kind:d}of i)if(o.set(f,new Set),d==="struct"&&ue(_))for(let g of _.fields){let h=g.type;M(h)&&h.resolvedConcreteType&&(h=h.resolvedConcreteType);let y=l(h);if(y){let v=P(y,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}if(ye(h)){if(!Kt(h)){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}}else if(ue(h)&&h.isNewtype){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}else if(ue(h)&&!h.isReferenceSemantics&&!h.isNewtype){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}else if(ke(h)){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}}else if(d==="enum"&&ye(_)){for(let g of _.variants)if(g.fields){for(let h of g.fields)if(ye(h.type)){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(ue(h.type)&&h.type.isNewtype){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(ke(h.type)){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(ue(h.type)&&!h.type.isReferenceSemantics&&!h.type.isNewtype){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}}}else if(d==="tuple"&&ke(_)){for(let g of _.fields)if(ke(g.type)){let h=P(g.type,e),y=s.get(h);y&&y!==f&&a.has(y)&&o.get(f).add(y)}else if(ye(g.type)){let h=P(g.type,e),y=s.get(h);y&&y!==f&&a.has(y)&&o.get(f).add(y)}else if(ue(g.type)&&!g.type.isReferenceSemantics&&!g.type.isNewtype){let h=P(g.type,e),y=s.get(h);y&&y!==f&&a.has(y)&&o.get(f).add(y)}}let u=new Map;for(let[f,_]of o)u.set(f,_.size);let c=[];for(let[f,_]of u)_===0&&c.push(f);let p=[];for(;c.length>0;){let f=c.shift(),_=a.get(f);p.push({type:_.type,cName:_.cName,kind:_.kind});for(let[d,g]of o)if(g.has(f)){let h=(u.get(d)||1)-1;u.set(d,h),h===0&&c.push(d)}}if(p.length<i.length)for(let f of i)p.find(_=>_.cName===f.cName)||p.push({type:f.type,cName:f.cName,kind:f.kind});for(let{type:f,cName:_,kind:d}of p)d==="struct"&&ue(f)?Sm(f,_,e):d==="enum"&&ye(f)?Zs(f,_,e):d==="tuple"&&ke(f)&&Vm(f,_,e);for(let f in e.types){let{type:_,cName:d}=e.types[f];Ae(_)||ye(_)&&Kt(_)&&Zs(_,d,e)}for(let f in e.types){let{type:_,cName:d}=e.types[f];Ae(_)||(Ne(_)?Xs(_,d,e):lt(_)&&Dm(_,d,e))}Nm(e)}function Am(e){let t=e.emitter;for(let[n,{childType:r,length:i}]of e.arrayStructTypes)t.emitDeclarationLine("typedef struct { // Array wrapper struct"),t.emitDeclarationLine(` ${r} data[${i}];`),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function Im(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 Js(e){let t=e.emitter;if(e.isoTypes){for(let[n,r]of e.isoTypes){let{childTypeCName:i,structGenerated:o}=r;o||(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(`} ${n}_struct;`),t.emitDeclarationLine(`typedef ${n}_struct* ${n};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${n} __yo_create_iso_${n}(${i} value);`),t.emitDeclarationLine(""),r.structGenerated=!0)}for(let[n,r]of e.isoTypes){let{optionTypeCName:i,extractGenerated:o}=r;o||!i||t.emitDeclarationLine(`${i} __yo_iso_extract_${n}(${n} iso);`)}for(let[n,r]of e.isoTypes){let{structGenerated:i}=r;i&&(t.emitDeclarationLine(`void __yo_iso_dispose_${n}(${n} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${n}(void* ptr);`))}for(let[n,r]of e.isoTypes){let{childTypeCName:i,createGenerated:o}=r;o||(t.emitLine(`
10146
+ `);for(let f in e.types){let{type:_,cName:d}=e.types[f];if(!Fe(_)){if(zt(_))e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`);else if(ue(_)){if(_.isNewtype&&_.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}else if(ye(_)){let g=Kt(_),h=kn(_);!g&&!h&&e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),Nm(e),Sm(e),el(e),Vm(e);for(let f in e.types){let{type:_,cName:d}=e.types[f];Fe(_)||ye(_)&&kn(_)&&Js(_,d,e)}let i=[];for(let f in e.types){let{type:_,cName:d}=e.types[f];Fe(_)||(ue(_)?i.push({typeId:f,type:_,cName:d,kind:"struct"}):ye(_)&&!kn(_)&&!Kt(_)?i.push({typeId:f,type:_,cName:d,kind:"enum"}):ke(_)&&i.push({typeId:f,type:_,cName:d,kind:"tuple"}))}let o=new Map,a=new Map(i.map(f=>[f.typeId,f])),s=new Map(i.map(f=>[f.cName,f.typeId]));function l(f){if(Ie(f)){let d=f.childType;if(ue(d)&&d.isNewtype)return d}else if(ye(f)){let _=Kt(f);if(_&&Ie(_)){let g=_.childType;if(ue(g)&&g.isNewtype)return g}}return null}for(let{typeId:f,type:_,kind:d}of i)if(o.set(f,new Set),d==="struct"&&ue(_))for(let g of _.fields){let h=g.type;D(h)&&h.resolvedConcreteType&&(h=h.resolvedConcreteType);let y=l(h);if(y){let v=P(y,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}if(ye(h)){if(!Kt(h)){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}}else if(ue(h)&&h.isNewtype){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}else if(ue(h)&&!h.isReferenceSemantics&&!h.isNewtype){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}else if(ke(h)){let v=P(h,e),E=s.get(v);E&&E!==f&&a.has(E)&&o.get(f).add(E)}}else if(d==="enum"&&ye(_)){for(let g of _.variants)if(g.fields){for(let h of g.fields)if(ye(h.type)){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(ue(h.type)&&h.type.isNewtype){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(ke(h.type)){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(ue(h.type)&&!h.type.isReferenceSemantics&&!h.type.isNewtype){let y=P(h.type,e),v=s.get(y);v&&v!==f&&a.has(v)&&o.get(f).add(v)}}}else if(d==="tuple"&&ke(_)){for(let g of _.fields)if(ke(g.type)){let h=P(g.type,e),y=s.get(h);y&&y!==f&&a.has(y)&&o.get(f).add(y)}else if(ye(g.type)){let h=P(g.type,e),y=s.get(h);y&&y!==f&&a.has(y)&&o.get(f).add(y)}else if(ue(g.type)&&!g.type.isReferenceSemantics&&!g.type.isNewtype){let h=P(g.type,e),y=s.get(h);y&&y!==f&&a.has(y)&&o.get(f).add(y)}}let u=new Map;for(let[f,_]of o)u.set(f,_.size);let c=[];for(let[f,_]of u)_===0&&c.push(f);let p=[];for(;c.length>0;){let f=c.shift(),_=a.get(f);p.push({type:_.type,cName:_.cName,kind:_.kind});for(let[d,g]of o)if(g.has(f)){let h=(u.get(d)||1)-1;u.set(d,h),h===0&&c.push(d)}}if(p.length<i.length)for(let f of i)p.find(_=>_.cName===f.cName)||p.push({type:f.type,cName:f.cName,kind:f.kind});for(let{type:f,cName:_,kind:d}of p)d==="struct"&&ue(f)?Mm(f,_,e):d==="enum"&&ye(f)?Js(f,_,e):d==="tuple"&&ke(f)&&Om(f,_,e);for(let f in e.types){let{type:_,cName:d}=e.types[f];Fe(_)||ye(_)&&Kt(_)&&Js(_,d,e)}for(let f in e.types){let{type:_,cName:d}=e.types[f];Fe(_)||(Ne(_)?Qs(_,d,e):lt(_)&&Rm(_,d,e))}Dm(e)}function Nm(e){let t=e.emitter;for(let[n,{childType:r,length:i}]of e.arrayStructTypes)t.emitDeclarationLine("typedef struct { // Array wrapper struct"),t.emitDeclarationLine(` ${r} data[${i}];`),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function Sm(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 el(e){let t=e.emitter;if(e.isoTypes){for(let[n,r]of e.isoTypes){let{childTypeCName:i,structGenerated:o}=r;o||(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(`} ${n}_struct;`),t.emitDeclarationLine(`typedef ${n}_struct* ${n};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${n} __yo_create_iso_${n}(${i} value);`),t.emitDeclarationLine(""),r.structGenerated=!0)}for(let[n,r]of e.isoTypes){let{optionTypeCName:i,extractGenerated:o}=r;o||!i||t.emitDeclarationLine(`${i} __yo_iso_extract_${n}(${n} iso);`)}for(let[n,r]of e.isoTypes){let{structGenerated:i}=r;i&&(t.emitDeclarationLine(`void __yo_iso_dispose_${n}(${n} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${n}(void* ptr);`))}for(let[n,r]of e.isoTypes){let{childTypeCName:i,createGenerated:o}=r;o||(t.emitLine(`
10147
10147
  ${n} __yo_create_iso_${n}(${i} value) {
10148
10148
  ${n} iso = (${n})__yo_malloc(sizeof(${n}_struct));
10149
10149
  iso->header.ref_count = 1;
@@ -10176,7 +10176,7 @@ ${i} __yo_iso_extract_${n}(${n} iso) {
10176
10176
  result.data.Some.value = iso->value;
10177
10177
  }
10178
10178
  return result;
10179
- }`)}r.extractGenerated=!0}}}}function xm(e){let t=e.emitter;if(e.arcTypes)for(let[n,r]of e.arcTypes)r.structGenerated||(t.emitDeclarationLine(`typedef struct ${n}_struct ${n}_struct;`),t.emitDeclarationLine(`typedef ${n}_struct* ${n};`),t.emitDeclarationLine(""))}function Nm(e){let t=e.emitter;if(e.arcTypes){for(let[n,r]of e.arcTypes){let{childTypeCName:i}=r;r.structGenerated||(t.emitDeclarationLine(`struct ${n}_struct { // Arc wrapper`),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine("};"),t.emitDeclarationLine(""),t.emitDeclarationLine(`${n} __yo_create_arc_${n}(${i} value);`),t.emitDeclarationLine(""),r.structGenerated=!0)}for(let[n,r]of e.arcTypes)r.structGenerated&&(t.emitDeclarationLine(`void __yo_arc_dispose_${n}(${n} arc);`),t.emitDeclarationLine(`static void __yo_dispose_arc_${n}(void* ptr);`));for(let[n,r]of e.arcTypes){let{childTypeCName:i,createGenerated:o}=r;o||(t.emitLine(`
10179
+ }`)}r.extractGenerated=!0}}}}function Vm(e){let t=e.emitter;if(e.arcTypes)for(let[n,r]of e.arcTypes)r.structGenerated||(t.emitDeclarationLine(`typedef struct ${n}_struct ${n}_struct;`),t.emitDeclarationLine(`typedef ${n}_struct* ${n};`),t.emitDeclarationLine(""))}function Dm(e){let t=e.emitter;if(e.arcTypes){for(let[n,r]of e.arcTypes){let{childTypeCName:i}=r;r.structGenerated||(t.emitDeclarationLine(`struct ${n}_struct { // Arc wrapper`),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine("};"),t.emitDeclarationLine(""),t.emitDeclarationLine(`${n} __yo_create_arc_${n}(${i} value);`),t.emitDeclarationLine(""),r.structGenerated=!0)}for(let[n,r]of e.arcTypes)r.structGenerated&&(t.emitDeclarationLine(`void __yo_arc_dispose_${n}(${n} arc);`),t.emitDeclarationLine(`static void __yo_dispose_arc_${n}(void* ptr);`));for(let[n,r]of e.arcTypes){let{childTypeCName:i,createGenerated:o}=r;o||(t.emitLine(`
10180
10180
  ${n} __yo_create_arc_${n}(${i} value) {
10181
10181
  ${n} arc = (${n})__yo_malloc(sizeof(${n}_struct));
10182
10182
  arc->header.ref_count = 1;
@@ -10191,7 +10191,7 @@ void __yo_arc_dispose_${n}(${n} arc) {
10191
10191
  }`),t.emitLine(`
10192
10192
  static void __yo_dispose_arc_${n}(void* ptr) {
10193
10193
  __yo_arc_dispose_${n}((${n})ptr);
10194
- }`),r.disposeGenerated=!0}}}function Sm(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=P(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${A(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=P(i.type,n),a=K(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)}`);for(let i of e.fields){let o=P(i.type,n),a=K(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Vm(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${A(e)}`),e.fields.length===0)r.emitDeclarationLine(" uint8_t _dummy; // zero-sized type marker");else for(let i=0;i<e.fields.length;i++){let o=e.fields[i],a=P(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Dm(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${A(e)}`);for(let i of e.fields){let o=P(i.type,n),a=K(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Zs(e,t,n){let r=n.emitter,i=Kt(e);if(i){let l=P(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${A(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(kn(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${A(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=_n(e,u.name,n),p=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${p}`)}}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 c=_n(e,u.name,n),p=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${p}`)}}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(c=>!pe(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let p of u){let f=P(p.type,n),_=K(p.label);r.emitDeclarationLine(` ${f} ${_};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function Mm(e,t){let n=Cn(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!mt(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(W({type:r,env:t},{type:s,env:t}))return a}let i=ca({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function Om(e,t,n){let r=Mm(e,t);if(!r)return;let i=r.type.fields.findIndex(s=>s.label===w.dispose[0]);if(i<0)return;let o=r.fields[i];if(!ie(o))return;let a=n.functions[o.funcId]?.cName;if(a)return a;for(let s in n.functions){let l=n.functions[s],u=l.value,c=u.specializedType??u.type;if(u.funcName===w.dispose[0]&&c.SelfType&&W({type:c.SelfType,env:t},{type:e,env:t}))return l.cName}}function Tc(e){e.emitter.emitLine("// Function implementations"),ac(e.emitter,e.debugAsyncAwait),vc(e.emitter,e.debugParallelism),Pm(e),zm(e);for(let t in e.functions){let{value:n,cName:r}=e.functions[t],i=r==="__yo_user_main",o=n.body?.$?.effectAnalysis,a=o&&o.hasEffects;if(!i&&!n.type.isClosure&&n.specializedFunctionCaches?.length>0||!i&&!a&&!n.type.isClosure&&!n.specializedType&&(n.specializedFunctionCaches?.length??0)===0&&[...n.type.implicitParameters,...n.type.parameters.filter(d=>d.isImplicit)].some(d=>H(d.type)))continue;let l=n.specializedType&&!dn(n.type);if(!i&&!a&&(pi(n.type)&&!n.type.isClosure||n.specializedFunctionCaches?.length>0&&!n.type.isClosure||n.specializedType&&!l||ti(n)||Si(n)||n.isIoAsyncStateMachineClosure))continue;let u=n.specializedType??n.type,c=!a&&(u.parameters.some(d=>Ae(d.type))||u.forallParameters.length>0),p=Ae(u.return.type),f=M(u.return.type)&&u.return.type.requiredTraits.length>0;if(c||p&&!f)continue;let _=n.body?.$?.effectAnalysis;if(_&&_.hasEffects){continue}bc(n,r,e)}if(e.deferredEffectfulFunctions)for(let t of e.deferredEffectfulFunctions){let{functionValue:n,info:r}=t;n.body&&dc(n.body,r,e,n)}Js(e)}function $c(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 i=r.type.return.type;if(!pe(i))throw new Error(`main function must return unit , but it returns ${A(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);t.emitLine(`
10194
+ }`),r.disposeGenerated=!0}}}function Mm(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=P(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${A(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=P(i.type,n),a=K(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)}`);for(let i of e.fields){let o=P(i.type,n),a=K(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Om(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${A(e)}`),e.fields.length===0)r.emitDeclarationLine(" uint8_t _dummy; // zero-sized type marker");else for(let i=0;i<e.fields.length;i++){let o=e.fields[i],a=P(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Rm(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${A(e)}`);for(let i of e.fields){let o=P(i.type,n),a=K(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Js(e,t,n){let r=n.emitter,i=Kt(e);if(i){let l=P(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${A(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(kn(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${A(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=_n(e,u.name,n),p=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${p}`)}}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 c=_n(e,u.name,n),p=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${p}`)}}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(c=>!pe(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let p of u){let f=P(p.type,n),_=K(p.label);r.emitDeclarationLine(` ${f} ${_};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function Pm(e,t){let n=Cn(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!dt(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(W({type:r,env:t},{type:s,env:t}))return a}let i=ca({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function Um(e,t,n){let r=Pm(e,t);if(!r)return;let i=r.type.fields.findIndex(s=>s.label===w.dispose[0]);if(i<0)return;let o=r.fields[i];if(!ie(o))return;let a=n.functions[o.funcId]?.cName;if(a)return a;for(let s in n.functions){let l=n.functions[s],u=l.value,c=u.specializedType??u.type;if(u.funcName===w.dispose[0]&&c.SelfType&&W({type:c.SelfType,env:t},{type:e,env:t}))return l.cName}}function Cc(e){e.emitter.emitLine("// Function implementations"),lc(e.emitter,e.debugAsyncAwait),Tc(e.emitter,e.debugParallelism),Bm(e),Wm(e);for(let t in e.functions){let{value:n,cName:r}=e.functions[t],i=r==="__yo_user_main",o=n.body?.$?.effectAnalysis,a=o&&o.hasEffects;if(!i&&!n.type.isClosure&&n.specializedFunctionCaches?.length>0||!i&&!a&&!n.type.isClosure&&!n.specializedType&&(n.specializedFunctionCaches?.length??0)===0&&[...n.type.implicitParameters,...n.type.parameters.filter(d=>d.isImplicit)].some(d=>q(d.type)))continue;let l=n.specializedType&&!dn(n.type);if(!i&&!a&&(pi(n.type)&&!n.type.isClosure||n.specializedFunctionCaches?.length>0&&!n.type.isClosure||n.specializedType&&!l||ti(n)||Si(n)||n.isIoAsyncStateMachineClosure))continue;let u=n.specializedType??n.type,c=!a&&(u.parameters.some(d=>Fe(d.type))||u.forallParameters.length>0),p=Fe(u.return.type),f=D(u.return.type)&&u.return.type.requiredTraits.length>0;if(c||p&&!f)continue;let _=n.body?.$?.effectAnalysis;if(_&&_.hasEffects){continue}wc(n,r,e)}if(e.deferredEffectfulFunctions)for(let t of e.deferredEffectfulFunctions){let{functionValue:n,info:r}=t;n.body&&yc(n.body,r,e,n)}el(e)}function bc(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 i=r.type.return.type;if(!pe(i))throw new Error(`main function must return unit , but it returns ${A(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);t.emitLine(`
10195
10195
  // Main wrapper - calls __yo_user_main directly
10196
10196
  int main(int argc, char** argv) {
10197
10197
  // Store command-line arguments
@@ -10211,7 +10211,7 @@ int main(int argc, char** argv) {
10211
10211
 
10212
10212
  return 0;
10213
10213
  }
10214
- `)}function Cc(e){let t=[],n=[];for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(ti(i))continue;let a=i.body?.$?.effectAnalysis;if(!a||!a.hasEffects)continue;let s=i.specializedType??i.type;if(i.specializedType){if(dn(i.specializedType))continue;let c=i.specializedType.parameters.some(f=>Ae(f.type)),p=Ae(i.specializedType.return.type);if(c||p)continue}let l=a.effectCallPoints.some(c=>c.isTransitiveEffectCall);a.effectCallPoints.some(c=>!c.isTransitiveEffectCall)||!l?t.push({functionValue:i,cFunctionName:o,functionType:s,effectAnalysis:a}):n.push({functionValue:i,cFunctionName:o,functionType:s,effectAnalysis:a})}for(let r of t)el(r.functionValue,r.cFunctionName,r.functionType,r.effectAnalysis,e);for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(!i.body?.$||i.body.$.effectAnalysis?.hasEffects||!i.type.isClosure&&i.specializedFunctionCaches?.length>0)continue;let a=i.type,s=a.implicitParameters;for(let l of s){if(!H(l.type))continue;let u=ma(i.body,l.label,l.type);if(!u.hasEffects)continue;let c=u.effectCallPoints[0],p=!1;if(c){let g=c.expr;if(g&&"func"in g){let h=g.func.$?.value;h&&ie(h)&&(u.handlerValue=h,p=!!h.isControlFunction)}}if(!p){let g=l.type;g.forallParameters&&g.forallParameters.length>0&&(p=!0)}let f=s.some(g=>g.isEffectRowSpread);if(!p&&(i.type.isClosure||!f))continue;i.body.$.effectAnalysis=u;let _,d=i.closureInfo;d?.captureType&&ue(d.captureType)&&(_=e.types[d.captureType.id]?.cName),el(i,o,a,u,e,!0,_);break}}for(let r of n)el(r.functionValue,r.cFunctionName,r.functionType,r.effectAnalysis,e)}function el(e,t,n,r,i,o=!1,a){let s=pe(n.return.type)?"void":P(n.return.type,i),l=r.effectCallPoints.length>0?r.effectCallPoints[0].operationArgTypes.map(h=>P(h,i)):[],u=r.effectCallPoints.length>0?P(r.effectCallPoints[0].operationResultType,i):"void",c=`${K(t)}_sm`,p=`${K(t)}_resume`,f;r.effectHandlerInfos&&r.effectHandlerInfos.length>1&&(f=r.effectHandlerInfos.map(h=>({yieldTypeCNames:h.operationArgTypes.map(y=>P(y,i)),resumeTypeCName:P(h.operationResultType,i)})));let _;if(o&&e.closureInfo?.captureType){let h=e.closureInfo.captureType;ue(h)&&h.fields.length>0&&(_=new Set(h.fields.map(y=>y.label)))}let d={structName:c,resumeFunctionName:p,analysis:r,functionType:n,returnTypeCName:s,yieldTypeCNames:l,resumeTypeCName:u,effectInfos:f,isClosure:o,closureCaptureTypeCName:a,closureCapturedVarNames:_};fc(d,i),_c(d,i),i.deferredEffectfulFunctions||(i.deferredEffectfulFunctions=[]),i.deferredEffectfulFunctions.push({functionValue:e,cFunctionName:t,info:d});let g=i.functions[e.funcId];g&&(g.effectStateMachineInfo=d)}function bc(e,t,n){let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&we(o.return.type)){let g=ko(e.body);g?.$?.asyncStateMachineStructName?a=`${g.$.asyncStateMachineStructName}*`:e.body.$?.type&&M(e.body.$.type)&&we(e.body.$.type)&&(a=P(e.body.$.type,n))}e.body&&M(o.return.type)&&!we(o.return.type)&&!e.specializedType&&e.body.$?.type&&(a=P(e.body.$.type,n));let s=a?ii(o,t,n,a):ii(o,t,n);r.emitLine(`${s} {`);let l=n.currentFunctionName,u=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let c=n.currentClosureCaptures,p=n.currentClosureCaptureFrameLevel,f=n.currentClosureType,_=n.currentClosureCaptureTypeCName;if(o.isClosure){let g=e.closureInfo;if(g){let h=g.closureType.isFn,y=g.captureType;if(n.currentClosureType=h.callType,y&&ue(y)&&y.fields.length>0){let v=y.fields.map($=>$.label);n.currentClosureCaptures=v,n.currentClosureCaptureFrameLevel=e.frameLevel;let E=n.types[y.id]?.cName;E&&(n.currentClosureCaptureTypeCName=E)}}}if(e.funcName===w.___dispose[0]&&o.SelfType){let g=Om(o.SelfType,e.type.env,n);if(g){let h=o.parameters[0]?.label==="__yo_self"?"__yo_self":o.parameters[0]?.label??"__yo_self";r.emitLine(` ${g}(${h}); // Call user's dispose method`)}}Rm(e.body,o," ",n),n.currentFunctionName=l,n.currentFunctionType=u,n.currentClosureCaptures=c,n.currentClosureCaptureFrameLevel=p,n.currentClosureType=f,n.currentClosureCaptureTypeCName=_,r.emitLine("}")}function Rm(e,t,n,r){let i=r.emitter;if(F(e)&&T(e,I.begin)){let o=e.args;r.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let a=!1;for(let s=0;s<o.length-1;s++){let l=o[s];T(l,I.return)&&(a=!0);let u=S(l,n,r);if(u&&(!l.$||!Qe(l.$.env.modulePath,u))&&i.emitLine(`${n}${u};`),a)break}if(!a&&o.length>0){let s=o[o.length-1];if(we(t.return.type)&&s){let u=Pt(s),c=s.$?.type,p=c&&we(c);if(u||p){let f=S(s,n,r);if(e.$?.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&c){let _=P(c,r),d=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${_} ${d} = ${f};`),vt(e,n,r),i.emitLine(`${n}return ${d};`)}else i.emitLine(`${n}return ${f};`);return}}else if(s&&pe(t.return.type)){let u=S(s,n,r);u&&i.emitLine(`${n}${u};`),vt(e,n,r)}else if(s){let u=ct(s.$?.controlFlow),c=pe(s.$?.type)||F(s)&&T(s,I.tuple)&&s.args.length===0,p=o.length>1?o[o.length-2]:null,f=ct(p?.$?.controlFlow);if(!(c&&f))if(u){let _=S(s,n,r);_&&i.emitLine(`${n}${_};`)}else{if(s.$?.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){if(s.$?.variableName){let g=P(t.return.type,r),h=ve(s.$.variableName,s.$.env),y=S(s,n,r);h!==y&&i.emitLine(`${n}${g} ${h} = ${y};`)}Ze(s,n,r);let d=s.$.deferredDupExpressions[0];if(F(d)&&d.$?.variableName){let g=K(d.$.variableName);vt(e,n,r),i.emitLine(`${n}return ${g};`);return}}let _=S(s,n,r);vt(e,n,r),_&&i.emitLine(`${n}return ${_};`)}}}else if(a&&o.length>0){let s=o[o.length-1];s&&pe(s.$?.type)}}else if(vt(e,n,r),pe(t.return.type)){let o=S(e,n,r);o&&i.emitLine(`${n}${o};`)}else hc(e,n,r)}function kc(e){for(let t in e.functions){let{value:n,cName:r}=e.functions[t];if(ti(n)||!n.specializedType||!dn(n.type)||dn(n.specializedType))continue;let i=n.specializedType.parameters.some(s=>Ae(s.type)),o=Ae(n.specializedType.return.type);if(i||o)continue;let a=n.body?.$?.effectAnalysis;if(a&&a.hasEffects){continue}bc(n,r,e)}}function Pm(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
10214
+ `)}function kc(e){let t=[],n=[];for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(ti(i))continue;let a=i.body?.$?.effectAnalysis;if(!a||!a.hasEffects)continue;let s=i.specializedType??i.type;if(i.specializedType){if(dn(i.specializedType))continue;let c=i.specializedType.parameters.some(f=>Fe(f.type)),p=Fe(i.specializedType.return.type);if(c||p)continue}let l=a.effectCallPoints.some(c=>c.isTransitiveEffectCall);a.effectCallPoints.some(c=>!c.isTransitiveEffectCall)||!l?t.push({functionValue:i,cFunctionName:o,functionType:s,effectAnalysis:a}):n.push({functionValue:i,cFunctionName:o,functionType:s,effectAnalysis:a})}for(let r of t)tl(r.functionValue,r.cFunctionName,r.functionType,r.effectAnalysis,e);for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(!i.body?.$||i.body.$.effectAnalysis?.hasEffects||!i.type.isClosure&&i.specializedFunctionCaches?.length>0)continue;let a=i.type,s=a.implicitParameters;for(let l of s){if(!q(l.type))continue;let u=ga(i.body,l.label,l.type);if(!u.hasEffects)continue;let c=u.effectCallPoints[0],p=!1;if(c){let g=c.expr;if(g&&"func"in g){let h=g.func.$?.value;h&&ie(h)&&(u.handlerValue=h,p=!!h.isControlFunction)}}if(!p){let g=l.type;g.forallParameters&&g.forallParameters.length>0&&(p=!0)}let f=s.some(g=>g.isEffectRowSpread);if(!p&&(i.type.isClosure||!f))continue;i.body.$.effectAnalysis=u;let _,d=i.closureInfo;d?.captureType&&ue(d.captureType)&&(_=e.types[d.captureType.id]?.cName),tl(i,o,a,u,e,!0,_);break}}for(let r of n)tl(r.functionValue,r.cFunctionName,r.functionType,r.effectAnalysis,e)}function tl(e,t,n,r,i,o=!1,a){let s=pe(n.return.type)?"void":P(n.return.type,i),l=r.effectCallPoints.length>0?r.effectCallPoints[0].operationArgTypes.map(h=>P(h,i)):[],u=r.effectCallPoints.length>0?P(r.effectCallPoints[0].operationResultType,i):"void",c=`${K(t)}_sm`,p=`${K(t)}_resume`,f;r.effectHandlerInfos&&r.effectHandlerInfos.length>1&&(f=r.effectHandlerInfos.map(h=>({yieldTypeCNames:h.operationArgTypes.map(y=>P(y,i)),resumeTypeCName:P(h.operationResultType,i)})));let _;if(o&&e.closureInfo?.captureType){let h=e.closureInfo.captureType;ue(h)&&h.fields.length>0&&(_=new Set(h.fields.map(y=>y.label)))}let d={structName:c,resumeFunctionName:p,analysis:r,functionType:n,returnTypeCName:s,yieldTypeCNames:l,resumeTypeCName:u,effectInfos:f,isClosure:o,closureCaptureTypeCName:a,closureCapturedVarNames:_};dc(d,i),mc(d,i),i.deferredEffectfulFunctions||(i.deferredEffectfulFunctions=[]),i.deferredEffectfulFunctions.push({functionValue:e,cFunctionName:t,info:d});let g=i.functions[e.funcId];g&&(g.effectStateMachineInfo=d)}function wc(e,t,n){let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&we(o.return.type)){let g=ko(e.body);g?.$?.asyncStateMachineStructName?a=`${g.$.asyncStateMachineStructName}*`:e.body.$?.type&&D(e.body.$.type)&&we(e.body.$.type)&&(a=P(e.body.$.type,n))}e.body&&D(o.return.type)&&!we(o.return.type)&&!e.specializedType&&e.body.$?.type&&(a=P(e.body.$.type,n));let s=a?ii(o,t,n,a):ii(o,t,n);r.emitLine(`${s} {`);let l=n.currentFunctionName,u=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let c=n.currentClosureCaptures,p=n.currentClosureCaptureFrameLevel,f=n.currentClosureType,_=n.currentClosureCaptureTypeCName;if(o.isClosure){let g=e.closureInfo;if(g){let h=g.closureType.isFn,y=g.captureType;if(n.currentClosureType=h.callType,y&&ue(y)&&y.fields.length>0){let v=y.fields.map($=>$.label);n.currentClosureCaptures=v,n.currentClosureCaptureFrameLevel=e.frameLevel;let E=n.types[y.id]?.cName;E&&(n.currentClosureCaptureTypeCName=E)}}}if(e.funcName===w.___dispose[0]&&o.SelfType){let g=Um(o.SelfType,e.type.env,n);if(g){let h=o.parameters[0]?.label==="__yo_self"?"__yo_self":o.parameters[0]?.label??"__yo_self";r.emitLine(` ${g}(${h}); // Call user's dispose method`)}}zm(e.body,o," ",n),n.currentFunctionName=l,n.currentFunctionType=u,n.currentClosureCaptures=c,n.currentClosureCaptureFrameLevel=p,n.currentClosureType=f,n.currentClosureCaptureTypeCName=_,r.emitLine("}")}function zm(e,t,n,r){let i=r.emitter;if(F(e)&&T(e,I.begin)){let o=e.args;r.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let a=!1;for(let s=0;s<o.length-1;s++){let l=o[s];T(l,I.return)&&(a=!0);let u=S(l,n,r);if(u&&(!l.$||!Qe(l.$.env.modulePath,u))&&i.emitLine(`${n}${u};`),a)break}if(!a&&o.length>0){let s=o[o.length-1];if(we(t.return.type)&&s){let u=Pt(s),c=s.$?.type,p=c&&we(c);if(u||p){let f=S(s,n,r);if(e.$?.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&c){let _=P(c,r),d=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${_} ${d} = ${f};`),vt(e,n,r),i.emitLine(`${n}return ${d};`)}else i.emitLine(`${n}return ${f};`);return}}else if(s&&pe(t.return.type)){let u=S(s,n,r);u&&i.emitLine(`${n}${u};`),vt(e,n,r)}else if(s){let u=ct(s.$?.controlFlow),c=pe(s.$?.type)||F(s)&&T(s,I.tuple)&&s.args.length===0,p=o.length>1?o[o.length-2]:null,f=ct(p?.$?.controlFlow);if(!(c&&f))if(u){let _=S(s,n,r);_&&i.emitLine(`${n}${_};`)}else{if(s.$?.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){if(s.$?.variableName){let g=P(t.return.type,r),h=ve(s.$.variableName,s.$.env),y=S(s,n,r);h!==y&&i.emitLine(`${n}${g} ${h} = ${y};`)}Ze(s,n,r);let d=s.$.deferredDupExpressions[0];if(F(d)&&d.$?.variableName){let g=K(d.$.variableName);vt(e,n,r),i.emitLine(`${n}return ${g};`);return}}let _=S(s,n,r);vt(e,n,r),_&&i.emitLine(`${n}return ${_};`)}}}else if(a&&o.length>0){let s=o[o.length-1];s&&pe(s.$?.type)}}else if(vt(e,n,r),pe(t.return.type)){let o=S(e,n,r);o&&i.emitLine(`${n}${o};`)}else Ec(e,n,r)}function Fc(e){for(let t in e.functions){let{value:n,cName:r}=e.functions[t];if(ti(n)||!n.specializedType||!dn(n.type)||dn(n.specializedType))continue;let i=n.specializedType.parameters.some(s=>Fe(s.type)),o=Fe(n.specializedType.return.type);if(i||o)continue;let a=n.body?.$?.effectAnalysis;if(a&&a.hasEffects){continue}wc(n,r,e)}}function Bm(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
10215
10215
  void __yo_decr_rc(void* ptr) {
10216
10216
  yo_ref_header_t* header = (yo_ref_header_t*)ptr;
10217
10217
 
@@ -10624,83 +10624,83 @@ static void yo_init_process_cleanup(void) {
10624
10624
  cleanup_initialized = true;
10625
10625
  atexit(yo_process_cleanup);
10626
10626
  #endif
10627
- }`)}function Um(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(ue(r)&&r.isReferenceSemantics){if(r.fields.some(s=>Ae(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=K(s.label),u=s.type;if(ue(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(ye(u)){let c=u;if(!Kt(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let f of c.variants||[])if(f.fields&&f.fields.length>0){for(let _ of f.fields)if(ue(_.type)&&_.type.isReferenceSemantics){let d=`YO_${c.id?.toUpperCase()}_${f.name.toUpperCase()}`;t.emitLine(` case ${d}:`),t.emitLine(` if (obj->${l}.data.${f.name}.${K(_.label)}) {`),t.emitLine(` visit(obj->${l}.data.${f.name}.${K(_.label)});`),t.emitLine(" }"),t.emitLine(" break;");break}}t.emitLine(" }")}}}t.emitLine("}"),t.emitLine("")}}}function zm(e){let t=e.emitter;Um(e);for(let n in e.types){let{type:r,cName:i}=e.types[n];if(ue(r)&&r.isReferenceSemantics){if(r.fields.some(c=>Ae(c.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(c=>{let p=P(c.type,e),f=K(c.label);return`${p} ${f}`}).join(", ");t.emitLine(`${i}* ${a}(${s}) {`),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 l=r.trait.fields.find(c=>c.label===w.___dispose[0]&&c.assignedValue&&ie(c.assignedValue));if(l&&ie(l.assignedValue)){let c=l.assignedValue,p=e.functions[c.funcId]?.cName||c.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${p};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let u=`__yo_traverse_${i}`;t.emitLine(` obj->header.traverse_fn = ${u};`),r.fields.forEach(c=>{let p=K(c.label);t.emitLine(` obj->${p} = ${p};`)}),lr(r,new Set,r.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function wc(e){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[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}for(let[n,{closureCName:r,captureType:i,captureCName:o}]of e.closureCaptureMap){let a=`__yo_dispose_closure_${n}`,s=i.trait.fields.find(c=>c.label===w.___drop[0]);if(!s||!s.assignedValue||!ie(s.assignedValue))continue;let l=s.assignedValue,u=e.functions[l.funcId]?.cName;u&&(t.emitLine(`void ${a}(void* closure_ptr) { // Dispose for ${r} with ${o} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${r}* closure = (${r}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${u}(*(${o}*)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 Fc(e){let t=new Map;for(let[,n]of e.dynImpls){let r=e.types[n.dynType.id]?.cName||`yo_dyn_${n.dynType.id}`,o=`${(()=>{let a=e.types[n.concreteType.id]?.cName;if(a)return a;let s=jt(n.concreteType);return(s?e.types[s.id]?.cName:void 0)||`unknown_${n.concreteType.id}`})()}_${r}`;t.set(o,n)}e.dynImpls=t}var va=class{constructor(){this.emitter=new Ro}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
10628
- // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${po(t)}`);let i={functions:{},externFunctions:{},types:{},arrayStructTypes:new Map,sliceStructTypes:new Map([["Slice_uint8_t_u42_",{childType:"uint8_t*"}]]),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>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,deferredAsyncBlocks:[],allocator:r.allocator??"mimalloc"};Ao(n,i),Wu(n,i),Hu(i),wu(i),Fu(i),this.emitter.emitDeclarationLine(`
10627
+ }`)}function Gm(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(ue(r)&&r.isReferenceSemantics){if(r.fields.some(s=>Fe(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=K(s.label),u=s.type;if(ue(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(ye(u)){let c=u;if(!Kt(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let f of c.variants||[])if(f.fields&&f.fields.length>0){for(let _ of f.fields)if(ue(_.type)&&_.type.isReferenceSemantics){let d=`YO_${c.id?.toUpperCase()}_${f.name.toUpperCase()}`;t.emitLine(` case ${d}:`),t.emitLine(` if (obj->${l}.data.${f.name}.${K(_.label)}) {`),t.emitLine(` visit(obj->${l}.data.${f.name}.${K(_.label)});`),t.emitLine(" }"),t.emitLine(" break;");break}}t.emitLine(" }")}}}t.emitLine("}"),t.emitLine("")}}}function Wm(e){let t=e.emitter;Gm(e);for(let n in e.types){let{type:r,cName:i}=e.types[n];if(ue(r)&&r.isReferenceSemantics){if(r.fields.some(c=>Fe(c.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(c=>{let p=P(c.type,e),f=K(c.label);return`${p} ${f}`}).join(", ");t.emitLine(`${i}* ${a}(${s}) {`),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 l=r.trait.fields.find(c=>c.label===w.___dispose[0]&&c.assignedValue&&ie(c.assignedValue));if(l&&ie(l.assignedValue)){let c=l.assignedValue,p=e.functions[c.funcId]?.cName||c.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${p};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let u=`__yo_traverse_${i}`;t.emitLine(` obj->header.traverse_fn = ${u};`),r.fields.forEach(c=>{let p=K(c.label);t.emitLine(` obj->${p} = ${p};`)}),ur(r,new Set,r.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Lc(e){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[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}for(let[n,{closureCName:r,captureType:i,captureCName:o}]of e.closureCaptureMap){let a=`__yo_dispose_closure_${n}`,s=i.trait.fields.find(c=>c.label===w.___drop[0]);if(!s||!s.assignedValue||!ie(s.assignedValue))continue;let l=s.assignedValue,u=e.functions[l.funcId]?.cName;u&&(t.emitLine(`void ${a}(void* closure_ptr) { // Dispose for ${r} with ${o} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${r}* closure = (${r}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${u}(*(${o}*)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 Ac(e){let t=new Map;for(let[,n]of e.dynImpls){let r=e.types[n.dynType.id]?.cName||`yo_dyn_${n.dynType.id}`,o=`${(()=>{let a=e.types[n.concreteType.id]?.cName;if(a)return a;let s=jt(n.concreteType);return(s?e.types[s.id]?.cName:void 0)||`unknown_${n.concreteType.id}`})()}_${r}`;t.set(o,n)}e.dynImpls=t}var Ta=class{constructor(){this.emitter=new Ro}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
10628
+ // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${po(t)}`);let i={functions:{},externFunctions:{},types:{},arrayStructTypes:new Map,sliceStructTypes:new Map([["Slice_uint8_t_u42_",{childType:"uint8_t*"}]]),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>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,deferredAsyncBlocks:[],allocator:r.allocator??"mimalloc"};Ao(n,i),Hu(n,i),Yu(i),Lu(i),Au(i),this.emitter.emitDeclarationLine(`
10629
10629
  // Future state enum - shared by all Future types
10630
10630
  typedef enum {
10631
10631
  YO_FUTURE_RUNNING = 0, // Task is in progress (queued or executing)
10632
10632
  YO_FUTURE_COMPLETED = 1, // Task completed successfully
10633
10633
  YO_FUTURE_ERROR = 2 // Task failed with error
10634
10634
  } yo_future_state_t;
10635
- `),Ec(i),this.emitter.emitDeclarationLine(`
10635
+ `),$c(i),this.emitter.emitDeclarationLine(`
10636
10636
  // Command-line arguments (initialized in main)
10637
10637
  static int32_t __yo_argc;
10638
10638
  static uint8_t** __yo_argv;
10639
10639
  static Slice_uint8_t_u42_ __yo_args;
10640
- `),Fc(i),Qs(i),zu(i),Yu(i),Cc(i),Tc(i),Xu(i),Qu(i),Zu(i),Ku(i),Uu(i),$c(i),wc(i),ju(i),kc(i)}print(){return this.emitter.print()}};var Lc=0;function Ac(e){return e.$?.variableName?!0:(e.$?.value!==void 0,!1)}function Ea(e,t){if(F(e)){e.$?.variableName&&t.add(e.$.variableName);for(let n of e.args)Ea(n,t);e.func&&Ea(e.func,t)}}function Ic(e,t,n){let r=n,i=r.pendingDeferredDrops;if(!(!i||e.size===0)){r.shortCircuitHandledDropVarNames||(r.shortCircuitHandledDropVarNames=new Set);for(let o of i){let a=_r(o);if(a&&e.has(a)){let s=S(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function xc(e,t,n){if(e.args.length===0)return"true";if(e.args.length===1)return S(e.args[0],t,n);let r=[];for(let l of e.args){let u=l.$?.value;if(Re(u)){if(u.value===!1)return"false";continue}r.push(l)}if(r.length===0)return"true";if(r.length===1)return S(r[0],t,n);if(!r.slice(1).some(l=>Ac(l)))return`(${r.map(u=>S(u,t,n)).join(" && ")})`;let o=`__yo_sc_${Lc++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let l=0;l<r.length;l++){let u=S(r[l],a,n);l<r.length-1?(n.emitter.emitLine(`${a}if (${u}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${u};`)}for(let l=s-1;l>=0;l--){let u=r[l+1],c=new Set;Ea(u,c),Ic(c,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Nc(e,t,n){if(e.args.length===0)return"false";if(e.args.length===1)return S(e.args[0],t,n);let r=[];for(let l of e.args){let u=l.$?.value;if(Re(u)){if(u.value===!0)return"true";continue}r.push(l)}if(r.length===0)return"false";if(r.length===1)return S(r[0],t,n);if(!r.slice(1).some(l=>Ac(l)))return`(${r.map(u=>S(u,t,n)).join(" || ")})`;let o=`__yo_sc_${Lc++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let l=0;l<r.length;l++){let u=S(r[l],a,n);l<r.length-1?(n.emitter.emitLine(`${a}if (!(${u})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${u};`)}for(let l=s-1;l>=0;l--){let u=r[l+1],c=new Set;Ea(u,c),Ic(c,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Sc(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type;return!o||!bt(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${P(o,n)}(${i})`}function tl(e){let t=e.func.$?.value;return R(t)&&bt(t.value)&&e.args.length===1}function Vc(e,t,n){if(!tl(e))return"/* Error: generateArcTypeCall called on non-Arc type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=S(a,t,n),l=P(i,n),u=P(o,n);return n.arcTypes||(n.arcTypes=new Map),n.arcTypes.has(l)||n.arcTypes.set(l,{childTypeCName:u,arcType:i}),`__yo_create_arc_${l}(${s})`}function Dc(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=e.$?.type,o=e.$?.variableName;if(be(i)&&r){let a=n,s=r.map(u=>{let c=S(u,t,n);if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){Ze(u,t,a);let p=u.$.deferredDupExpressions[0];if(F(p)&&p.$?.variableName)return ve(p.$.variableName,p.$.env)}return c}).join(", "),l=P(i,n);if(o&&e.$?.type){let u=`(${l}){ .data = { ${s} } }`,c=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${c} = ${u};`),o}else return`(${l}){ .data = { ${s} } }`}}function Mc(e,t,n){let r=n.emitter,i=e.args[0],o=e.args[1],a=i.$?.value;if(!a||!R(a)||!be(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!Oe(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=P(s,n),c=S(o,t,n),p=e.$?.variableName||`temp_array_${Date.now()}`,f=`i_${Be(e.$?.env.modulePath??"")}`;return r.emitLine(`${t}${u} ${p};`),r.emitLine(`${t}for (int ${f} = 0; ${f} < ${l.value}; ${f}++) {`),r.emitLine(`${t} ${p}.data[${f}] = ${c};`),r.emitLine(`${t}}`),p}function Oc(e,t,n){if(e.$?.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(F(r)&&T(r,":",2)&&(o=!0,r=r.args[0]),F(r)&&T(r,I.comptime)||F(r)&&T(r,I.given))return"";if(r.$?.pathCollection&&r.$?.pathCollection.length>0){let l=r.$.pathCollection[0];if(l&&l.length>=2){let u=l[0];if(typeof u=="string"&&r.$?.env){let c=j(r.$.env,u);if(c.length>0&&c[c.length-1].isCompileTimeOnly)return""}}}if(U(r)&&r.$?.env){let l=r.token.value,u=j(r.$.env,l);if(u.length>0&&u[u.length-1].isCompileTimeOnly)return""}if(!r.$?.type)return`// Error: No type information for left-hand side ${k(r)}
10641
- `;let a=S(r,t,n),s=!1;if(e.$?.variableName){let l=e.$.variableName,u=n;if((u.inAsyncStateMachine||u.inEffectStateMachine)&&a.startsWith("sm->")){let p=u.stateMachineVariables?.get(l);if(!p&&u.stateMachineVariables){for(let[,f]of u.stateMachineVariables)if(f.name===l){p=f;break}}if(p&&p.kind!=="outer"){let f=`var_${p.id}`;pe(r.$.type)||n.emitter.emitLine(`${t}sm->${f} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let p=it(r.$.type,l,n);be(r.$.type)?n.emitter.emitLine(`${t}${p} = ${a}; // Save old value for later use`):pe(r.$.type)||n.emitter.emitLine(`${t}${p} = ${a}; // Save old value for later use`)}}if(be(r.$.type)){let l=S(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Gt(i.$.type),c=n,p=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let _=ve(i.$.variableName,i.$.env);if(_!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,g=P(d,n);n.emitter.emitLine(`${t}${g} ${_} = ${l};`)}}Ze(i,t,c);let f=i.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}if(o){let f=it(r.$.type,S(r,t,n),n);n.emitter.emitLine(`${t}${f} = ${p};`)}else n.emitter.emitLine(`${t}${a} = ${p};`)}else{let l=S(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Gt(i.$.type),c=n,p=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let _=ve(i.$.variableName,i.$.env);if(_!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,g=P(d,n);n.emitter.emitLine(`${t}${g} ${_} = ${l};`)}}Ze(i,t,c);let f=i.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}if(!pe(r.$.type)){let f=r.$.type,_=i.$?.type,d,g=Qe(i.$.env.modulePath,p.trim());g&&n.tempVarAsyncStructNames&&(d=n.tempVarAsyncStructNames.get(p.trim()));let h=o&&_&&we(f)&&we(_),y;g&&h?d?y=`${d}*`:y=P(_,n):h&&d?y=`${d}*`:y=P(h?_:f,n);let v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!v?y+" ":""}${a} = ${p};`)}}return s?"":e.$?.variableName??""}function Rc(e,t,n){let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=r.$?.type;if(!i||!we(i))return"// Error: await argument must be a Future type";let o=At(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(fn(e)){let s=S(r,t,n),l=P(i,n),u=o.isFuture.outputType,c=a.emitter,p=pe(u)||M(u)&&pe(e.$?.type??u),f=e.$?.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",_=e.$?.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";c.emitLine(`${t}// Synchronous await (io.await outside state machine)`),c.emitLine(`${t}${l} ${f} = ${s};`),c.emitLine(`${t}int ${_} = ${f}->state;`),Lo(r.$?.type)||(c.emitLine(`${t}if (${_} == 0 && ${f}->__yo_resume_fn) {`),Gm(e,f,t,n),c.emitLine(`${t} __yo_incr_rc((void*)${f}); // event loop reference`),c.emitLine(`${t} ${f}->__yo_resume_fn((void*)${f});`),c.emitLine(`${t}}`)),c.emitLine(`${t}{`),c.emitLine(`${t} int __await_state = ${f}->state;`),c.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),c.emitLine(`${t} yo_async_poll_step();`),c.emitLine(`${t} __await_state = ${f}->state;`),c.emitLine(`${t} }`),c.emitLine(`${t} if (__await_state == -2) {`);let h=At(i)?.isFuture.effects?.some(y=>H(y.type)||y.isEffectRowSpread)??!1;if(h?(c.emitLine(`${t} if (${_} == -2) {`),c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`),c.emitLine(`${t} }`)):(c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`)),c.emitLine(`${t} }`),c.emitLine(`${t}}`),p)return"";{let y=e.$?.variableName||"__sync_await_result",v=P(u,n),E=it(u,y,n);if(h){if(c.emitLine(`${t}${E};`),c.emitLine(`${t}if (${f}->state == -1) {`),Te(u)){let $=Sn(u,n);$?c.emitLine(`${t} ${y} = ${$}(${f}->result);`):c.emitLine(`${t} ${y} = ${f}->result;`)}else c.emitLine(`${t} ${y} = ${f}->result;`);c.emitLine(`${t}} else {`),c.emitLine(`${t} ${y} = (${v}){0};`),c.emitLine(`${t}}`)}else if(Te(u)){let $=Sn(u,n);$?c.emitLine(`${t}${E} = ${$}(${f}->result);`):c.emitLine(`${t}${E} = ${f}->result;`)}else c.emitLine(`${t}${E} = ${f}->result;`);return y}}return"// Error: await should only be used inside async blocks"}function Pc(e,t,n){let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=r.$?.type;if(!i||!we(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=S(r,t,n),l=e.$?.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=e.$?.variableName||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Bm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;M(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),_t(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Gm(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=e.args.find(p=>F(p)&&T(p,I.using));if(!o)return;let a=At(i.$.type);if(!a?.isFuture.effects?.length)return;let s=Bm(a.isFuture.effects),l=o.args,c=r.emitter;for(let p=0;p<s.length&&p<l.length;p++){let f=s[p],_=l[p];if(!H(f.type)||f.type.forallParameters.length>0)continue;let d=S(_,n,r),g=f.label;c.emitLine(`${n} ${t}->__capture.${g} = (void*)${d};`)}}function Uc(e,t,n){let r=e.$?.variableName,i=e.$?.type,o=n;if(r&&i){!pe(i)&&!ct(e.$?.controlFlow)&&n.emitter.emitLine(`${t}${P(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];o.pendingDeferredDrops=[...s,...a??[]];let l=[],u=!pe(i)&&!ct(e.$?.controlFlow);for(let c=0;c<e.args.length;c++){let p=e.args[c],f=S(p,t+" ",n);l.push(f);let _=c===e.args.length-1;f&&!(_&&u)&&(p.$&&Qe(p.$.env.modulePath,f)||n.emitter.emitLine(`${t} ${f};`))}if(u){let c=e.args[e.args.length-1],p=l[l.length-1];if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){if(c.$?.variableName){let _=c.$.variableName;c.$.variableName=void 0;let d=S(c,t+" ",n);c.$.variableName=_;let g=P(c.$.type,n),h=ve(_,c.$.env);h!==d&&n.emitter.emitLine(`${t} ${g} ${h} = ${d};`),p=h}Ze(c,t+" ",n);let f=c.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}n.emitter.emitLine(`${t} ${r} = ${p};`)}if(e.$?.deferredDropExpressions)for(let c of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let f=_r(c);if(f&&o.shortCircuitHandledDropVarNames.has(f)){o.shortCircuitHandledDropVarNames.delete(f);continue}}let p=S(c,t+" ",n);p&&n.emitter.emitLine(`${t} ${p};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,pe(i)||ct(e.$?.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];if(o.pendingDeferredDrops=[...s,...a??[]],e.args.map(u=>S(u,t+" ",n)).forEach(u=>{u&&n.emitter.emitLine(`${t} ${u};`)}),e.$?.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let p=_r(u);if(p&&o.shortCircuitHandledDropVarNames.has(p)){o.shortCircuitHandledDropVarNames.delete(p);continue}}let c=S(u,t+" ",n);c&&n.emitter.emitLine(`${t} ${c};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,""}}function zc(e,t,n){let r=e.args[0];if(F(r)&&T(r,I.comptime,1)||F(r)&&T(r,I.given,1))return"";if(!r.$?.type)return`// Error: No type information for left-hand side ${k(r)}
10642
- `;let i=r.token.value,o=it(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function Bc(e,t,n){if(e.$){let r=e.$.variableName,i=e.$.type,o=i&&pe(i),a=-1;for(let p=0;p<e.args.length;p++){let f=e.args[p];if(F(f)&&T(f,"=>",2)){let _=f.args[0];if(_&&!(Re(_.$?.value)&&_.$.value.value===!1)){a=p;break}}}let s=!1;if(a>=0){let p=e.args[a];if(p&&F(p)&&T(p,"=>",2)){let f=p.args[0];f&&Re(f.$?.value)&&f.$.value.value===!0&&(s=!0)}}if(!o&&r&&!s){let p=P(i,n);n.emitter.emitLine(`${t}${p} ${r};`)}if(s&&a>=0){let p=e.args[a];if(p&&F(p)&&T(p,"=>",2)){let f=p.args[1];if(f){let _=S(f,t,n);r&&!o&&(_&&_!==""&&!_.startsWith("goto")&&_!=="continue"&&_!=="break"&&!_.includes("return")?n.emitter.emitLine(`${t}${r} = ${_};`):_&&(_.startsWith("goto")||_==="continue"||_==="break"||_.includes("return"))&&n.emitter.emitLine(`${t}${_};`))}}return o?"":r??""}let l=t,u=0,c=!1;for(let p=0;p<e.args.length;p++){let f=e.args[p];if(F(f)&&T(f,"=>",2)){let _=f.args[0],d=f.args[1];if(_&&d){if(Re(_.$?.value)&&_.$.value.value===!1)continue;if(c){if(n.emitter.emitLine(`${l}else {`),u++,l+=" ",!(Re(_.$?.value)&&_.$.value.value===!0)){let E=S(_,l,n);n.emitter.emitLine(`${l}if (${E}) {`)}}else{if(Re(_.$?.value)&&_.$.value.value===!0)n.emitter.emitLine(`${l}{`);else{let v=S(_,l,n);n.emitter.emitLine(`${l}if (${v}) {`)}c=!0}let g=Re(_.$?.value)&&_.$.value.value===!0,h=c&&g?l:l+" ";if(F(d)&&T(d,I.begin)){let v=d.args,E=n,$=E.pendingDeferredDrops,C=d.$?.deferredDropExpressions??[];E.pendingDeferredDrops=[...C,...$??[]];for(let L=0;L<v.length-1;L++){let b=v[L],O=S(b,h,n);O&&b.$&&!Qe(b.$.env.modulePath,O)&&n.emitter.emitLine(`${h}${O};`)}if(v.length>0){let L=v[v.length-1];L.$?.deferredDupExpressions&&Ze(L,h,n);let b=S(L,h,n);b&&(b==="continue"||b==="break"||b.startsWith("goto")||F(L)&&T(L,I.return)||b.includes("return")?n.emitter.emitLine(`${h}${b};`):r&&!o&&n.emitter.emitLine(`${h}${r} = ${b};`))}d.$?.deferredDropExpressions&&vt(d,h,n),E.pendingDeferredDrops=$}else{d.$?.deferredDupExpressions&&Ze(d,h,n);let v=S(d,h,n);v==="continue"||v==="break"||v.startsWith("goto")||F(d)&&T(d,I.return)||v.includes("return")?n.emitter.emitLine(`${h}${v};`):v===""||!v||r&&(o||n.emitter.emitLine(`${h}${r} = ${v};`))}!(c&&g)&&n.emitter.emitLine(`${l}}`)}}}for(let p=0;p<u;p++)l=l.slice(0,-2),n.emitter.emitLine(`${l}}`);return o?"":r??""}return'/* "cond" expression is not evaluated */'}function Gc(e,t,n){let r=e.args[0];return S(r,t,n)}function Wc(e,t,n){if(!e.$?.dynCallTraitValues||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=e.$?.runtimeArgExprsInOrder?.[0]??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!Ne(i))return"/* Error: dyn() result type is not DynType */";let o=r.$?.type;if(!o)return"/* Error: dyn() value has no type */";let a=e.$.dynCallTraitValues;if(!a||a.length===0)return"/* Error: dyn() call missing trait values */";if(!dt(o)&&!hn(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=hn(o)?o.fields[0].type:o,l=n.types[i.id]?.cName||`yo_dyn_${i.id}`,c=`${(()=>{let d=n.types[s.id]?.cName;if(d)return d;let g=jt(s);return(g?n.types[g.id]?.cName:void 0)||`unknown_${s.id}`})()}_${l}`;n.dynImpls.set(c,{dynType:i,concreteType:s,dataType:o,traitValues:a});let p=S(r,t,n);if(r.$?.variableName&&p!==r.$.variableName){let d=it(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${d} = ${p};`),p=r.$.variableName}if(r.$?.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Ze(r,t,n);let d=r.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(p=ve(d.$.variableName,d.$.env))}let f=e.$?.variableName;if(!f)return"/* Error: dyn() expression missing temp variable name */";let _=`yo_vtable_${c}`;return n.emitter.emitLine(`${t}${l} ${f} = {`),n.emitter.emitLine(`${t} .data = ${p},`),n.emitter.emitLine(`${t} .vtable = &${_}`),n.emitter.emitLine(`${t}};`),f}function Hc(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function qc(e,t,n){let r=e.args[0],i=e.args[1],o=n;if(F(r)&&T(r,I.comptime,1)||F(r)&&T(r,I.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&U(r)&&U(i)){let a=r.token.value,s=i.token.value,l=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(c=>c.name===a),u=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(c=>c.name===s);if(a===s&&(l||u))return""}if(e.$?.runtimeDestructurings){let a=e.$.runtimeDestructurings,s=S(i,t,n),l=i.$?.type;return a.forEach(({label:u,type:c,variableName:p})=>{let f=K(p,c.isExtern==="c"),_=it(c,f,n);if(l&&ue(l)&&l.isNewtype&&l.fields.length===1){let h=l.fields[0];if(h&&h.label===u){n.emitter.emitLine(`${t}${_} = ${s}; // Destructuring ${u} (newtype)`);return}}let d=u.match(/^\d+$/)?`_${u}`:K(u,c.isExtern==="c");if(l&&ke(l)&&!u.match(/^\d+$/)){let h=l.fields.findIndex(y=>y.label===u);d=h>=0?`_${h}`:d}let g=l&&dt(l)?"->":".";n.emitter.emitLine(`${t}${_} = ${s}${g}${d}; // Destructuring ${u}`)}),""}if(U(r)){let a=r.token.value;if(!r.$?.type)return`// Error: No type information for variable ${a}
10643
- `;if(r.$?.env){let u=j(r.$.env,a);if(u.length>0&&u[u.length-1].isCompileTimeOnly)return""}let s=!1,l;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&r.$?.env){let u=j(r.$.env,a);if(u.length>0){let c=u[u.length-1],p=c.isOwningTheSameRcValueAs?c.isOwningTheSameRcValueAs.id:c.id;o.stateMachineVariables.has(p)&&(s=!0,l=p)}}if(be(r.$.type))if(F(i)&&T(i,I.array)){let u=S(i,t,n);if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else if(!pe(r.$.type)){let c=it(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u;if(i.$?.variableName){let c=ve(i.$.variableName,i.$.env),p=S(i,t,n);if(!s){let f=it(i.$.type,c,n);c!==p&&n.emitter.emitLine(`${t}${f} = ${p};`)}u=c}else u=S(i,t,n);if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else if(!pe(r.$.type)){let c=it(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u,c=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Gt(i.$.type),p=F(i)&&Pt(i);if(i.$?.variableName){let f=ve(i.$.variableName,i.$.env),_=ve(a,r.$.env);if(f===_){if(u=S(i,t,n),!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=ve(d.$.variableName,d.$.env))}}else if(U(i)&&f===ve(i.token.value,i.$.env)){if(u=S(i,t,n),!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=ve(d.$.variableName,d.$.env))}}else if(U(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&i.$?.env&&o.currentClosureCaptureFrameLevel!==void 0&&tr(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let d=o.currentClosureType;if(d&&d.isClosure){let g=Object.values(o.types).find(h=>h.type===d);g?u=`((${`${g.cName}_capture`}*)closure_context->data)->${ve(i.token.value,i.$.env)}`:u=`closure_context->${ve(i.token.value,i.$.env)}`}else u=`closure_context->${ve(i.token.value,i.$.env)}`}else{let d=S(i,t,n);if(d.trim()!==f){let g=i.$.convertedRuntimeType||i.$.type,h=it(g,f,n);n.emitter.emitLine(`${t}${h} = ${d};`)}if(!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let g=i.$.deferredDupExpressions[0];F(g)&&g.$?.variableName?u=ve(g.$.variableName,g.$.env):u=f}else u=f}}else if(u=S(i,t,n),!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let f=i.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(u=ve(f.$.variableName,f.$.env))}if(je(r.$.type)){let f=r.$.type;if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else if(!pe(f)){let _=it(f,a,n);n.emitter.emitLine(`${t}${_} = ${u};`)}}else if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else{let f=Qe(i.$.env.modulePath,u.trim()),_;if(f&&n.tempVarAsyncStructNames){let d=n.tempVarAsyncStructNames.get(u.trim());d?_=`${d}*`:_=P(r.$.type,n)}else _=P(r.$.type,n);pe(r.$.type)||n.emitter.emitLine(`${t}${_} ${ve(a,r.$.env)} = ${u};`)}}return""}}var Wm=0;function Io(e,t,n,r,i=" "){if(w.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(w.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(w.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(w.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(w.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(w.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(w.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(w.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(w.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(w.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(w.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(w.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(w.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(w.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(w.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(w.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(w.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(w.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(w.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(w.__yo_noop.includes(e))return"";if(w.__yo_return_self.includes(e))return`(*${t[0]})`;if(w.__yo_ms_sleep.includes(e))return`(
10640
+ `),Ac(i),Zs(i),Gu(i),Ku(i),kc(i),Cc(i),Zu(i),Ju(i),ec(i),Qu(i),Bu(i),bc(i),Lc(i),Xu(i),Fc(i)}print(){return this.emitter.print()}};var Ic=0;function xc(e){return e.$?.variableName?!0:(e.$?.value!==void 0,!1)}function $a(e,t){if(F(e)){e.$?.variableName&&t.add(e.$.variableName);for(let n of e.args)$a(n,t);e.func&&$a(e.func,t)}}function Nc(e,t,n){let r=n,i=r.pendingDeferredDrops;if(!(!i||e.size===0)){r.shortCircuitHandledDropVarNames||(r.shortCircuitHandledDropVarNames=new Set);for(let o of i){let a=_r(o);if(a&&e.has(a)){let s=S(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function Sc(e,t,n){if(e.args.length===0)return"true";if(e.args.length===1)return S(e.args[0],t,n);let r=[];for(let l of e.args){let u=l.$?.value;if(Re(u)){if(u.value===!1)return"false";continue}r.push(l)}if(r.length===0)return"true";if(r.length===1)return S(r[0],t,n);if(!r.slice(1).some(l=>xc(l)))return`(${r.map(u=>S(u,t,n)).join(" && ")})`;let o=`__yo_sc_${Ic++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let l=0;l<r.length;l++){let u=S(r[l],a,n);l<r.length-1?(n.emitter.emitLine(`${a}if (${u}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${u};`)}for(let l=s-1;l>=0;l--){let u=r[l+1],c=new Set;$a(u,c),Nc(c,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Vc(e,t,n){if(e.args.length===0)return"false";if(e.args.length===1)return S(e.args[0],t,n);let r=[];for(let l of e.args){let u=l.$?.value;if(Re(u)){if(u.value===!0)return"true";continue}r.push(l)}if(r.length===0)return"false";if(r.length===1)return S(r[0],t,n);if(!r.slice(1).some(l=>xc(l)))return`(${r.map(u=>S(u,t,n)).join(" || ")})`;let o=`__yo_sc_${Ic++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let l=0;l<r.length;l++){let u=S(r[l],a,n);l<r.length-1?(n.emitter.emitLine(`${a}if (!(${u})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${u};`)}for(let l=s-1;l>=0;l--){let u=r[l+1],c=new Set;$a(u,c),Nc(c,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Dc(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type;return!o||!bt(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${P(o,n)}(${i})`}function nl(e){let t=e.func.$?.value;return R(t)&&bt(t.value)&&e.args.length===1}function Mc(e,t,n){if(!nl(e))return"/* Error: generateArcTypeCall called on non-Arc type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=S(a,t,n),l=P(i,n),u=P(o,n);return n.arcTypes||(n.arcTypes=new Map),n.arcTypes.has(l)||n.arcTypes.set(l,{childTypeCName:u,arcType:i}),`__yo_create_arc_${l}(${s})`}function Oc(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=e.$?.type,o=e.$?.variableName;if(be(i)&&r){let a=n,s=r.map(u=>{let c=S(u,t,n);if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){Ze(u,t,a);let p=u.$.deferredDupExpressions[0];if(F(p)&&p.$?.variableName)return ve(p.$.variableName,p.$.env)}return c}).join(", "),l=P(i,n);if(o&&e.$?.type){let u=`(${l}){ .data = { ${s} } }`,c=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${c} = ${u};`),o}else return`(${l}){ .data = { ${s} } }`}}function Rc(e,t,n){let r=n.emitter,i=e.args[0],o=e.args[1],a=i.$?.value;if(!a||!R(a)||!be(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!Oe(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=P(s,n),c=S(o,t,n),p=e.$?.variableName||`temp_array_${Date.now()}`,f=`i_${Be(e.$?.env.modulePath??"")}`;return r.emitLine(`${t}${u} ${p};`),r.emitLine(`${t}for (int ${f} = 0; ${f} < ${l.value}; ${f}++) {`),r.emitLine(`${t} ${p}.data[${f}] = ${c};`),r.emitLine(`${t}}`),p}function Pc(e,t,n){if(e.$?.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(F(r)&&T(r,":",2)&&(o=!0,r=r.args[0]),F(r)&&T(r,I.comptime)||F(r)&&T(r,I.given))return"";if(r.$?.pathCollection&&r.$?.pathCollection.length>0){let l=r.$.pathCollection[0];if(l&&l.length>=2){let u=l[0];if(typeof u=="string"&&r.$?.env){let c=j(r.$.env,u);if(c.length>0&&c[c.length-1].isCompileTimeOnly)return""}}}if(U(r)&&r.$?.env){let l=r.token.value,u=j(r.$.env,l);if(u.length>0&&u[u.length-1].isCompileTimeOnly)return""}if(!r.$?.type)return`// Error: No type information for left-hand side ${k(r)}
10641
+ `;let a=S(r,t,n),s=!1;if(e.$?.variableName){let l=e.$.variableName,u=n;if((u.inAsyncStateMachine||u.inEffectStateMachine)&&a.startsWith("sm->")){let p=u.stateMachineVariables?.get(l);if(!p&&u.stateMachineVariables){for(let[,f]of u.stateMachineVariables)if(f.name===l){p=f;break}}if(p&&p.kind!=="outer"){let f=`var_${p.id}`;pe(r.$.type)||n.emitter.emitLine(`${t}sm->${f} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let p=it(r.$.type,l,n);be(r.$.type)?n.emitter.emitLine(`${t}${p} = ${a}; // Save old value for later use`):pe(r.$.type)||n.emitter.emitLine(`${t}${p} = ${a}; // Save old value for later use`)}}if(be(r.$.type)){let l=S(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Gt(i.$.type),c=n,p=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let _=ve(i.$.variableName,i.$.env);if(_!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,g=P(d,n);n.emitter.emitLine(`${t}${g} ${_} = ${l};`)}}Ze(i,t,c);let f=i.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}if(o){let f=it(r.$.type,S(r,t,n),n);n.emitter.emitLine(`${t}${f} = ${p};`)}else n.emitter.emitLine(`${t}${a} = ${p};`)}else{let l=S(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Gt(i.$.type),c=n,p=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let _=ve(i.$.variableName,i.$.env);if(_!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,g=P(d,n);n.emitter.emitLine(`${t}${g} ${_} = ${l};`)}}Ze(i,t,c);let f=i.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}if(!pe(r.$.type)){let f=r.$.type,_=i.$?.type,d,g=Qe(i.$.env.modulePath,p.trim());g&&n.tempVarAsyncStructNames&&(d=n.tempVarAsyncStructNames.get(p.trim()));let h=o&&_&&we(f)&&we(_),y;g&&h?d?y=`${d}*`:y=P(_,n):h&&d?y=`${d}*`:y=P(h?_:f,n);let v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!v?y+" ":""}${a} = ${p};`)}}return s?"":e.$?.variableName??""}function Uc(e,t,n){let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=r.$?.type;if(!i||!we(i))return"// Error: await argument must be a Future type";let o=It(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(fn(e)){let s=S(r,t,n),l=P(i,n),u=o.isFuture.outputType,c=a.emitter,p=pe(u)||D(u)&&pe(e.$?.type??u),f=e.$?.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",_=e.$?.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";c.emitLine(`${t}// Synchronous await (io.await outside state machine)`),c.emitLine(`${t}${l} ${f} = ${s};`),c.emitLine(`${t}int ${_} = ${f}->state;`),Lo(r.$?.type)||(c.emitLine(`${t}if (${_} == 0 && ${f}->__yo_resume_fn) {`),Hm(e,f,t,n),c.emitLine(`${t} __yo_incr_rc((void*)${f}); // event loop reference`),c.emitLine(`${t} ${f}->__yo_resume_fn((void*)${f});`),c.emitLine(`${t}}`)),c.emitLine(`${t}{`),c.emitLine(`${t} int __await_state = ${f}->state;`),c.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),c.emitLine(`${t} yo_async_poll_step();`),c.emitLine(`${t} __await_state = ${f}->state;`),c.emitLine(`${t} }`),c.emitLine(`${t} if (__await_state == -2) {`);let h=It(i)?.isFuture.effects?.some(y=>q(y.type)||y.isEffectRowSpread)??!1;if(h?(c.emitLine(`${t} if (${_} == -2) {`),c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`),c.emitLine(`${t} }`)):(c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`)),c.emitLine(`${t} }`),c.emitLine(`${t}}`),p)return"";{let y=e.$?.variableName||"__sync_await_result",v=P(u,n),E=it(u,y,n);if(h){if(c.emitLine(`${t}${E};`),c.emitLine(`${t}if (${f}->state == -1) {`),Te(u)){let $=Sn(u,n);$?c.emitLine(`${t} ${y} = ${$}(${f}->result);`):c.emitLine(`${t} ${y} = ${f}->result;`)}else c.emitLine(`${t} ${y} = ${f}->result;`);c.emitLine(`${t}} else {`),c.emitLine(`${t} ${y} = (${v}){0};`),c.emitLine(`${t}}`)}else if(Te(u)){let $=Sn(u,n);$?c.emitLine(`${t}${E} = ${$}(${f}->result);`):c.emitLine(`${t}${E} = ${f}->result;`)}else c.emitLine(`${t}${E} = ${f}->result;`);return y}}return"// Error: await should only be used inside async blocks"}function zc(e,t,n){let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=r.$?.type;if(!i||!we(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=S(r,t,n),l=e.$?.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=e.$?.variableName||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function qm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),_t(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Hm(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=e.args.find(p=>F(p)&&T(p,I.using));if(!o)return;let a=It(i.$.type);if(!a?.isFuture.effects?.length)return;let s=qm(a.isFuture.effects),l=o.args,c=r.emitter;for(let p=0;p<s.length&&p<l.length;p++){let f=s[p],_=l[p];if(!q(f.type)||f.type.forallParameters.length>0)continue;let d=S(_,n,r),g=f.label;c.emitLine(`${n} ${t}->__capture.${g} = (void*)${d};`)}}function Bc(e,t,n){let r=e.$?.variableName,i=e.$?.type,o=n;if(r&&i){!pe(i)&&!ct(e.$?.controlFlow)&&n.emitter.emitLine(`${t}${P(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];o.pendingDeferredDrops=[...s,...a??[]];let l=[],u=!pe(i)&&!ct(e.$?.controlFlow);for(let c=0;c<e.args.length;c++){let p=e.args[c],f=S(p,t+" ",n);l.push(f);let _=c===e.args.length-1;f&&!(_&&u)&&(p.$&&Qe(p.$.env.modulePath,f)||n.emitter.emitLine(`${t} ${f};`))}if(u){let c=e.args[e.args.length-1],p=l[l.length-1];if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){if(c.$?.variableName){let _=c.$.variableName;c.$.variableName=void 0;let d=S(c,t+" ",n);c.$.variableName=_;let g=P(c.$.type,n),h=ve(_,c.$.env);h!==d&&n.emitter.emitLine(`${t} ${g} ${h} = ${d};`),p=h}Ze(c,t+" ",n);let f=c.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}n.emitter.emitLine(`${t} ${r} = ${p};`)}if(e.$?.deferredDropExpressions)for(let c of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let f=_r(c);if(f&&o.shortCircuitHandledDropVarNames.has(f)){o.shortCircuitHandledDropVarNames.delete(f);continue}}let p=S(c,t+" ",n);p&&n.emitter.emitLine(`${t} ${p};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,pe(i)||ct(e.$?.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];if(o.pendingDeferredDrops=[...s,...a??[]],e.args.map(u=>S(u,t+" ",n)).forEach(u=>{u&&n.emitter.emitLine(`${t} ${u};`)}),e.$?.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let p=_r(u);if(p&&o.shortCircuitHandledDropVarNames.has(p)){o.shortCircuitHandledDropVarNames.delete(p);continue}}let c=S(u,t+" ",n);c&&n.emitter.emitLine(`${t} ${c};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,""}}function Gc(e,t,n){let r=e.args[0];if(F(r)&&T(r,I.comptime,1)||F(r)&&T(r,I.given,1))return"";if(!r.$?.type)return`// Error: No type information for left-hand side ${k(r)}
10642
+ `;let i=r.token.value,o=it(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function Wc(e,t,n){if(e.$){let r=e.$.variableName,i=e.$.type,o=i&&pe(i),a=-1;for(let p=0;p<e.args.length;p++){let f=e.args[p];if(F(f)&&T(f,"=>",2)){let _=f.args[0];if(_&&!(Re(_.$?.value)&&_.$.value.value===!1)){a=p;break}}}let s=!1;if(a>=0){let p=e.args[a];if(p&&F(p)&&T(p,"=>",2)){let f=p.args[0];f&&Re(f.$?.value)&&f.$.value.value===!0&&(s=!0)}}if(!o&&r&&!s){let p=P(i,n);n.emitter.emitLine(`${t}${p} ${r};`)}if(s&&a>=0){let p=e.args[a];if(p&&F(p)&&T(p,"=>",2)){let f=p.args[1];if(f){let _=S(f,t,n);r&&!o&&(_&&_!==""&&!_.startsWith("goto")&&_!=="continue"&&_!=="break"&&!_.includes("return")?n.emitter.emitLine(`${t}${r} = ${_};`):_&&(_.startsWith("goto")||_==="continue"||_==="break"||_.includes("return"))&&n.emitter.emitLine(`${t}${_};`))}}return o?"":r??""}let l=t,u=0,c=!1;for(let p=0;p<e.args.length;p++){let f=e.args[p];if(F(f)&&T(f,"=>",2)){let _=f.args[0],d=f.args[1];if(_&&d){if(Re(_.$?.value)&&_.$.value.value===!1)continue;if(c){if(n.emitter.emitLine(`${l}else {`),u++,l+=" ",!(Re(_.$?.value)&&_.$.value.value===!0)){let E=S(_,l,n);n.emitter.emitLine(`${l}if (${E}) {`)}}else{if(Re(_.$?.value)&&_.$.value.value===!0)n.emitter.emitLine(`${l}{`);else{let v=S(_,l,n);n.emitter.emitLine(`${l}if (${v}) {`)}c=!0}let g=Re(_.$?.value)&&_.$.value.value===!0,h=c&&g?l:l+" ";if(F(d)&&T(d,I.begin)){let v=d.args,E=n,$=E.pendingDeferredDrops,C=d.$?.deferredDropExpressions??[];E.pendingDeferredDrops=[...C,...$??[]];for(let L=0;L<v.length-1;L++){let b=v[L],O=S(b,h,n);O&&b.$&&!Qe(b.$.env.modulePath,O)&&n.emitter.emitLine(`${h}${O};`)}if(v.length>0){let L=v[v.length-1];L.$?.deferredDupExpressions&&Ze(L,h,n);let b=S(L,h,n);b&&(b==="continue"||b==="break"||b.startsWith("goto")||F(L)&&T(L,I.return)||b.includes("return")?n.emitter.emitLine(`${h}${b};`):r&&!o&&n.emitter.emitLine(`${h}${r} = ${b};`))}d.$?.deferredDropExpressions&&vt(d,h,n),E.pendingDeferredDrops=$}else{d.$?.deferredDupExpressions&&Ze(d,h,n);let v=S(d,h,n);v==="continue"||v==="break"||v.startsWith("goto")||F(d)&&T(d,I.return)||v.includes("return")?n.emitter.emitLine(`${h}${v};`):v===""||!v||r&&(o||n.emitter.emitLine(`${h}${r} = ${v};`))}!(c&&g)&&n.emitter.emitLine(`${l}}`)}}}for(let p=0;p<u;p++)l=l.slice(0,-2),n.emitter.emitLine(`${l}}`);return o?"":r??""}return'/* "cond" expression is not evaluated */'}function qc(e,t,n){let r=e.args[0];return S(r,t,n)}function Hc(e,t,n){if(!e.$?.dynCallTraitValues||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=e.$?.runtimeArgExprsInOrder?.[0]??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!Ne(i))return"/* Error: dyn() result type is not DynType */";let o=r.$?.type;if(!o)return"/* Error: dyn() value has no type */";let a=e.$.dynCallTraitValues;if(!a||a.length===0)return"/* Error: dyn() call missing trait values */";if(!mt(o)&&!hn(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=hn(o)?o.fields[0].type:o,l=n.types[i.id]?.cName||`yo_dyn_${i.id}`,c=`${(()=>{let d=n.types[s.id]?.cName;if(d)return d;let g=jt(s);return(g?n.types[g.id]?.cName:void 0)||`unknown_${s.id}`})()}_${l}`;n.dynImpls.set(c,{dynType:i,concreteType:s,dataType:o,traitValues:a});let p=S(r,t,n);if(r.$?.variableName&&p!==r.$.variableName){let d=it(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${d} = ${p};`),p=r.$.variableName}if(r.$?.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Ze(r,t,n);let d=r.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(p=ve(d.$.variableName,d.$.env))}let f=e.$?.variableName;if(!f)return"/* Error: dyn() expression missing temp variable name */";let _=`yo_vtable_${c}`;return n.emitter.emitLine(`${t}${l} ${f} = {`),n.emitter.emitLine(`${t} .data = ${p},`),n.emitter.emitLine(`${t} .vtable = &${_}`),n.emitter.emitLine(`${t}};`),f}function Yc(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function jc(e,t,n){let r=e.args[0],i=e.args[1],o=n;if(F(r)&&T(r,I.comptime,1)||F(r)&&T(r,I.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&U(r)&&U(i)){let a=r.token.value,s=i.token.value,l=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(c=>c.name===a),u=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(c=>c.name===s);if(a===s&&(l||u))return""}if(e.$?.runtimeDestructurings){let a=e.$.runtimeDestructurings,s=S(i,t,n),l=i.$?.type;return a.forEach(({label:u,type:c,variableName:p})=>{let f=K(p,c.isExtern==="c"),_=it(c,f,n);if(l&&ue(l)&&l.isNewtype&&l.fields.length===1){let h=l.fields[0];if(h&&h.label===u){n.emitter.emitLine(`${t}${_} = ${s}; // Destructuring ${u} (newtype)`);return}}let d=u.match(/^\d+$/)?`_${u}`:K(u,c.isExtern==="c");if(l&&ke(l)&&!u.match(/^\d+$/)){let h=l.fields.findIndex(y=>y.label===u);d=h>=0?`_${h}`:d}let g=l&&mt(l)?"->":".";n.emitter.emitLine(`${t}${_} = ${s}${g}${d}; // Destructuring ${u}`)}),""}if(U(r)){let a=r.token.value;if(!r.$?.type)return`// Error: No type information for variable ${a}
10643
+ `;if(r.$?.env){let u=j(r.$.env,a);if(u.length>0&&u[u.length-1].isCompileTimeOnly)return""}let s=!1,l;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&r.$?.env){let u=j(r.$.env,a);if(u.length>0){let c=u[u.length-1],p=c.isOwningTheSameRcValueAs?c.isOwningTheSameRcValueAs.id:c.id;o.stateMachineVariables.has(p)&&(s=!0,l=p)}}if(be(r.$.type))if(F(i)&&T(i,I.array)){let u=S(i,t,n);if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else if(!pe(r.$.type)){let c=it(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u;if(i.$?.variableName){let c=ve(i.$.variableName,i.$.env),p=S(i,t,n);if(!s){let f=it(i.$.type,c,n);c!==p&&n.emitter.emitLine(`${t}${f} = ${p};`)}u=c}else u=S(i,t,n);if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else if(!pe(r.$.type)){let c=it(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u,c=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Gt(i.$.type),p=F(i)&&Pt(i);if(i.$?.variableName){let f=ve(i.$.variableName,i.$.env),_=ve(a,r.$.env);if(f===_){if(u=S(i,t,n),!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=ve(d.$.variableName,d.$.env))}}else if(U(i)&&f===ve(i.token.value,i.$.env)){if(u=S(i,t,n),!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=ve(d.$.variableName,d.$.env))}}else if(U(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&i.$?.env&&o.currentClosureCaptureFrameLevel!==void 0&&nr(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let d=o.currentClosureType;if(d&&d.isClosure){let g=Object.values(o.types).find(h=>h.type===d);g?u=`((${`${g.cName}_capture`}*)closure_context->data)->${ve(i.token.value,i.$.env)}`:u=`closure_context->${ve(i.token.value,i.$.env)}`}else u=`closure_context->${ve(i.token.value,i.$.env)}`}else{let d=S(i,t,n);if(d.trim()!==f){let g=i.$.convertedRuntimeType||i.$.type,h=it(g,f,n);n.emitter.emitLine(`${t}${h} = ${d};`)}if(!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let g=i.$.deferredDupExpressions[0];F(g)&&g.$?.variableName?u=ve(g.$.variableName,g.$.env):u=f}else u=f}}else if(u=S(i,t,n),!c&&!p&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ze(i,t,o);let f=i.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(u=ve(f.$.variableName,f.$.env))}if(je(r.$.type)){let f=r.$.type;if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else if(!pe(f)){let _=it(f,a,n);n.emitter.emitLine(`${t}${_} = ${u};`)}}else if(s&&l)n.emitter.emitLine(`${t}sm->var_${l} = ${u};`);else{let f=Qe(i.$.env.modulePath,u.trim()),_;if(f&&n.tempVarAsyncStructNames){let d=n.tempVarAsyncStructNames.get(u.trim());d?_=`${d}*`:_=P(r.$.type,n)}else _=P(r.$.type,n);pe(r.$.type)||n.emitter.emitLine(`${t}${_} ${ve(a,r.$.env)} = ${u};`)}}return""}}var Ym=0;function Io(e,t,n,r,i=" "){if(w.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(w.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(w.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(w.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(w.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(w.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(w.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(w.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(w.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(w.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(w.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(w.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(w.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(w.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(w.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(w.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(w.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(w.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(w.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(w.__yo_noop.includes(e))return"";if(w.__yo_return_self.includes(e))return`(*${t[0]})`;if(w.__yo_ms_sleep.includes(e))return`(
10644
10644
  #ifdef _WIN32
10645
10645
  Sleep(${t[0]})
10646
10646
  #else
10647
10647
  usleep((${t[0]}) * 1000)
10648
10648
  #endif
10649
- )`;if(w.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(w.__yo_as.includes(e)&&n.$?.type){let o=P(n.$.type,r),a=n.args[0]?.$?.type;return a&&ye(a)&&!kn(a)?`((${o})((${t[0]}).tag))`:`((${o})(${t[0]}))`}else{if(w.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(w.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(w.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(w.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(w.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(w.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(w.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(w.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(w.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(w.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(w.__yo_slice_new.includes(e)&&n.$?.type)return`(${P(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(w.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(w.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(w.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(w.__yo_maybe_uninit_new.includes(e)&&n.$?.type){let o=P(n.$.type,r),a=`__yo_uninit_${Wm++}`;return r.emitter.emitLine(`${i}${o} ${a};`),a}else return w.__yo_maybe_uninit_as_ptr.includes(e)&&n.$?.type?`((${P(n.$.type,r)})(${t[0]}))`:w.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function Yc(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type;if(!o||!kt(o))return"// Error: __yo_iso_extract requires an Iso type";let a=P(o,n),s=e.$?.type;if(s&&n.isoTypes?.has(a)){let c=n.isoTypes.get(a);c.optionTypeCName||(c.optionTypeCName=P(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=e.$?.variableName;return u&&s?(n.emitter.emitLine(`${t}${P(s,n)} ${u} = ${l};`),u):l}function jc(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type;return!o||!kt(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${P(o,n)}(${i})`}function nl(e){let t=e.func.$?.value;return R(t)&&kt(t.value)&&e.args.length===1}function Kc(e,t,n){if(!nl(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=S(a,t,n),l=P(i,n),u=P(o,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(l)||n.isoTypes.set(l,{childTypeCName:u,isoType:i}),`__yo_create_iso_${l}(${s})`}function mr(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function yr(e,t,n){if(F(e)&&T(e,I.begin)){let r=e.args,i=n,o=i.pendingDeferredDrops,a=e.$?.deferredDropExpressions??[];i.pendingDeferredDrops=[...a,...o??[]];for(let l=0;l<r.length-1;l++){let u=r[l],c=S(u,t,n);c&&n.emitter.emitLine(`${t}${c};`)}let s="";if(r.length>0){let l=r[r.length-1];if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){if(l.$?.variableName){let c=l.$.variableName;l.$.variableName=void 0;let p=S(l,t,n);l.$.variableName=c;let f=P(l.$.type,n),_=ve(c,l.$.env);_!==p&&n.emitter.emitLine(`${t}${f} ${_} = ${p};`)}Ze(l,t,n);let u=l.$.deferredDupExpressions[0];F(u)&&u.$?.variableName?s=ve(u.$.variableName,u.$.env):s=S(l,t,n)}else s=S(l,t,n)}return e.$?.deferredDropExpressions&&vt(e,t,n),i.pendingDeferredDrops=o,s}else return e.$?.deferredDupExpressions&&Ze(e,t,n),S(e,t,n)}function Qc(e,t,n){if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&pe(i);if(!o&&r){let g=P(i,n);n.emitter.emitLine(`${t}${g} ${r};`)}let a=S(e.args[0],t,n),s=e.args[0].$?.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return qm(e,t,n,a,s,r,o);let l,u;if(Ie(s)?(u=s.childType,l=s.tag):dt(s)?(u=s,l="ref_semantics"):u=s,!ye(u))return'// Error: "match" expression requires an enum type';if(!n.types[u.id]?.cName)return`// Error: "match" expression enum type ${u.typeName} has no C name`;let p=Kt(u);if(p){let g=e.args.slice(1),h=null,y=null;for(let v of g)if(F(v)&&T(v,"=>",2)){let E=v.args[0],$=v.args[1];if(E&&$&&F(E)&&T(E,"."))h={caseBody:$};else{let C=E.func;if(C&&F(C)&&T(C,".")){let L=C.args[0];if(L&&U(L)){let b=L.token.value;y={caseBody:$,variantName:b,casePattern:E}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),y){let v;if(F(y.casePattern)&&y.casePattern.args.length>0){let L=y.casePattern.args[0];if(L&&U(L)){v=K(L.token.value);let b=p;n.emitter.emitLine(`${t} ${P(b,n)} ${v} = ${a};`)}}let E=n;v&&(E.inAsyncStateMachine||E.inEffectStateMachine)&&(E.localShadowedVariables||(E.localShadowedVariables=new Set),E.localShadowedVariables.add(v));let $=yr(y.caseBody,t+" ",n);v&&E.localShadowedVariables&&E.localShadowedVariables.delete(v);let C=mr($);if(!o&&r&&!C){let L=$||a;n.emitter.emitLine(`${t} ${r} = ${L};`)}else $&&$!==""&&n.emitter.emitLine(`${t} ${$};`)}if(n.emitter.emitLine(`${t}} else {`),h){let v=yr(h.caseBody,t+" ",n),E=mr(v);!o&&r&&!E?n.emitter.emitLine(`${t} ${r} = ${v};`):v&&v!==""&&n.emitter.emitLine(`${t} ${v};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(kn(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let g=n.insideMatch;n.insideMatch=!0;let h=e.args.slice(1);for(let y=0;y<h.length;y++){let v=h[y];if(F(v)&&T(v,"=>",2)){let E=v.args[0],$=v.args[1];if(E&&$&&U(E)&&E.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let C=yr($,t+" ",n);!o&&r&&C&&!mr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(E&&$&&F(E)&&T(E,".",1)){let C=E.args[0].token.value,L=_n(u,C,n);n.emitter.emitLine(`${t}case ${L}: {`);let b=yr($,t+" ",n);!o&&r&&b&&!mr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=g,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let _=n.insideMatch;n.insideMatch=!0;let d=e.args.slice(1);for(let g=0;g<d.length;g++){let h=d[g];if(F(h)&&T(h,"=>",2)){let y=h.args[0],v=h.args[1];if(y&&v&&U(y)&&y.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let E=yr(v,t+" ",n);!o&&r&&E&&!mr(E)?n.emitter.emitLine(`${t} ${r} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&y.func.tag==="Atom"&&y.func.token.value==="."&&y.args.length>=1){let E=y.args[0].token.value,$=_n(u,E,n);if(n.emitter.emitLine(`${t}case ${$}: {`),y.args.length>1){let L=u.variants.find(b=>b.name===E);if(L&&L.fields){let b=y.args.slice(1);if(b.some(N=>F(N)&&T(N,":",2))){for(let N of b)if(F(N)&&T(N,":",2)){let D=N.args[0],V=N.args[1];if(!U(D))continue;let z=D.token.value,ee=L.fields.find(ne=>ne.label===z);if(!ee||pe(ee.type))continue;if(U(V)){let ne=V.token.value;if(ne!=="_"){let G=K(ne),Z=K(z),de=P(ee.type,n),he=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${de} ${G} = ${a}${he}data.${E}.${Z};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let B;if(V.$?.env){let oe=j(V.$.env,ne);oe.length>0&&(B=oe[oe.length-1].id)}B&&$e.stateMachineVariables.has(B)&&n.emitter.emitLine(`${t} sm->var_${B} = ${G};`)}}}}}else for(let N=0;N<b.length&&N<L.fields.length;N++){let D=b[N],V=L.fields[N];if(U(D)&&V){if(pe(V.type))continue;let z=D.token.value;if(z!=="_"){let ee=K(z),ne=K(V.label),G=P(V.type,n),Z=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${G} ${ee} = ${a}${Z}data.${E}.${ne};`);let de=n;if((de?.inAsyncStateMachine||de?.inEffectStateMachine)&&de.stateMachineVariables){let he;if(D.$?.env){let $e=j(D.$.env,z);$e.length>0&&(he=$e[$e.length-1].id)}he&&de.stateMachineVariables.has(he)&&n.emitter.emitLine(`${t} sm->var_${he} = ${ee};`)}}}}}}if(F(v)&&T(v,"=>",2)){let L=v.args[0];n.emitter.emitLine(`${t} ${P(s,n)} ${K(L.token.value)} = ${a};`),v=v.args[1]}let C=yr(v,t+" ",n);!o&&r&&C&&!mr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&F(y.func)&&y.func.func.tag==="Atom"&&y.func.func.token.value==="."&&y.func.args.length===1){let E=y.func.args[0].token.value,$=_n(u,E,n),C=y.args;n.emitter.emitLine(`${t}case ${$}: {`);let L=u.variants.find(O=>O.name===E);if(L&&L.fields&&C.length>0)if(C.some(N=>F(N)&&T(N,":",2))){for(let N of C)if(F(N)&&T(N,":",2)){let D=N.args[0],V=N.args[1];if(!U(D))continue;let z=D.token.value,ee=L.fields.find(ne=>ne.label===z);if(!ee)continue;if(U(V)){let ne=V.token.value;if(ne!=="_"){let G=K(ne);if(pe(ee.type))n.emitter.emitLine(`${t} // ${G} is unit type (no value)`);else{let Z=K(z),de=P(ee.type,n),he=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${de} ${G} = ${a}${he}data.${E}.${Z};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let B;if(V.$?.env){let oe=j(V.$.env,G);oe.length>0&&(B=oe[oe.length-1].id)}B&&$e.stateMachineVariables.has(B)&&n.emitter.emitLine(`${t} sm->var_${B} = ${G};`)}}}}}}else for(let N=0;N<Math.min(C.length,L.fields.length);N++){let D=C[N],V=L.fields[N];if(D.tag==="Atom"&&V){let z=D.token.value;if(z!=="_"){let ee=K(z);if(pe(V.type))n.emitter.emitLine(`${t} // ${ee} is unit type (no value)`);else{let ne=K(V.label),G=P(V.type,n),Z=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${G} ${ee} = ${a}${Z}data.${E}.${ne};`);let de=n;if((de?.inAsyncStateMachine||de?.inEffectStateMachine)&&de.stateMachineVariables){let he;if(D.$?.env){let $e=j(D.$.env,z);$e.length>0&&(he=$e[$e.length-1].id)}he&&de.stateMachineVariables.has(he)&&n.emitter.emitLine(`${t} sm->var_${he} = ${ee};`)}}}}}if(F(v)&&T(v,"=>",2)){let O=v.args[0];n.emitter.emitLine(`${t} ${P(s,n)} ${K(O.token.value)} = ${a};`),v=v.args[1]}let b=yr(v,t+" ",n);!o&&r&&b&&!mr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=_,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&vt(e,t,n),o?"":r??""}function Hm(e){return F(e)?T(e,"|",2):!1}function rl(e){if(!Hm(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...rl(n),...rl(r)]}function Xc(e){if(e!==void 0){if(Oe(e))return String(e.value);if(Re(e))return e.value?"true":"false"}}function qm(e,t,n,r,i,o,a){let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let u=0;u<l.length;u++){let c=l[u];if(F(c)&&T(c,"=>",2)){let p=c.args[0],f=c.args[1];if(!p||!f)continue;if(U(p)&&p.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let h=yr(f,t+" ",n);!a&&o&&h&&!mr(h)?n.emitter.emitLine(`${t} ${o} = ${h};`):h&&n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let _=rl(p),d=p.$?.primitivePatternValues;if(d&&d.length>0)for(let h of d){let y=Xc(h);y!==void 0&&n.emitter.emitLine(`${t}case ${y}:`)}else for(let h of _){let y=h.$?.value,v=Xc(y);v!==void 0&&n.emitter.emitLine(`${t}case ${v}:`)}n.emitter.emitLine(`${t}{`);let g=yr(f,t+" ",n);!a&&o&&g&&!mr(g)?n.emitter.emitLine(`${t} ${o} = ${g};`):g&&n.emitter.emitLine(`${t} ${g};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&vt(e,t,n),a?"":o??""}function Zc(e,t,n){if(e.$?.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let r=e.args[0];if(!r||!r.$?.type)return"// Error: open expression has no argument or type";let i=r.$.type,o=r.$.value;if(ue(i)&&o===void 0){let a=S(r,t,n),s=e.$.runtimeDestructurings;for(let l of s){let u=P(l.type,n),c=K(l.variableName),p=K(l.label);n.emitter.emitLine(`${t}${u} ${c} = ${a}.${p};`)}}}return""}function Jc(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(M(o)){let g=o;g.resolvedConcreteType&&(a=g.resolvedConcreteType.id,s=g.resolvedConcreteType)}else ue(o)&&(a=o.id,s=o);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,c=P(s,n),p=S(i,t,n),f=i.$?.variableName?ve(i.$.variableName,i.$.env):p,_=`_thread_closure_data_${Be(e.$?.env.modulePath??"")}`;n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${f};`);let d=e.$?.variableName;return d?(n.emitter.emitLine(`${t}__yo_thread_t ${d} = __yo_thread_spawn(${u}, ${_});`),d):`__yo_thread_spawn(${u}, ${_})`}function ep(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(M(o)){let d=o;d.resolvedConcreteType&&(a=d.resolvedConcreteType.id,s=d.resolvedConcreteType)}else ue(o)&&(a=o.id,s=o);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,c=P(s,n),p=S(i,t,n),f=i.$?.variableName?ve(i.$.variableName,i.$.env):p,_=`_worker_closure_data_${Be(e.$?.env.modulePath??"")}`;return n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${_});`),""}function tp(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${S(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function En(e,t,n){let r=n;if(!(r.inAsyncStateMachine||r.inEffectStateMachine)||!r.stateMachineVariables)return;let i=r.stateMachineVariables.get(e);if(!i){for(let[,o]of r.stateMachineVariables)if(o.name===e){i=o;break}}if(i&&i.kind!=="outer"){if(i.type&&we(i.type))return;let o=`var_${i.id}`,a=K(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function np(e,t,n){if(e.$?.value!==void 0&&!fe(e.$.value))return e.$?.deferredDropExpressions&&vt(e,t,n),pe(e.$.type)?"":Wt(e.$.value,n,e);let r=e.func.$?.type,i=e.func.$?.value;if(H(r)){let o=e.$?.runtimeArgExprsInOrder;if(o){let a=!1;if(F(e.func)&&T(e.func,".",2)){let c=e.func.args[0]?.$?.type;c&&Ne(c)&&(a=!0)}let s=o.map((u,c)=>{if(u.$?.variableName&&u.$?.type){let p=n,f=p.currentClosureCaptures&&p.currentClosureCaptures.includes(u.$.variableName)&&U(u)&&u.$.env&&p.currentClosureCaptureFrameLevel!==void 0&&tr(u.token.value,u.$.env,p.currentClosureCaptureFrameLevel),_=S(u,t,n),d=!1;if(U(u)&&u.$.env&&u.$.variableName){let v=j(u.$.env,u.$.variableName);v.length>0&&v[v.length-1].isCompileTimeOnly&&(d=!0)}let g=(p.inAsyncStateMachine||p.inEffectStateMachine)&&_.startsWith("sm->"),h=!1;if(_&&_!==u.$.variableName&&!f&&!g&&!d){let v=ve(u.$.variableName,u.$.env);if(_!==v){let E=u.$.convertedRuntimeType||u.$.type,$=it(E,u.$.variableName,n);n.emitter.emitLine(`${t}${$} = ${_};`),h=!0,En(u.$.variableName,t,n)}}let y=h?u.$.variableName:_;if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){let v=new Set;u.$?.variableName&&v.add(ve(u.$.variableName,u.$.env)),_&&v.add(_),U(u)&&v.add(ve(u.token.value,u.$.env));let E=u.$.deferredDupExpressions.find($=>{let C=fa($);return C?v.has(ve(C,$.$?.env)):!1});E&&(Ze(u,t,p),F(E)&&E.$?.variableName&&(y=ve(E.$.variableName,E.$.env)))}if(a&&c===0){if(F(e.func)&&T(e.func,".",2)){let $=e.func.args[0]?.$?.type,C=e.func.args[1];if(U(C)&&Ne($)){let L=C.token.value;if($.trait.fields.find(O=>O.label===L))return K(y,u.$.type.isExtern==="c")}}let v=u.$?.type;return v&&Ie(v)?`${K(y,u.$.type.isExtern==="c")}->data`:`(${K(y,u.$.type.isExtern==="c")}).data`}else return f||g||d?_:K(y,u.$.type.isExtern==="c")}else if(a&&c===0){let p=S(u,t,n);if(F(e.func)&&T(e.func,".",2)){let d=e.func.args[0]?.$?.type,g=e.func.args[1];if(U(g)&&Ne(d)){let h=g.token.value;if(d.trait.fields.find(v=>v.label===h))return p}}let f=u.$?.type;return f&&Ie(f)?`(${p})->data`:`(${p}).data`}else return S(u,t,n)}),l=s.join(", ");if(r.isExtern==="yo"&&r.externName){let u=r.externName;return ei.includes(u)?Io(u,s,e,n,t):u==="__yo_thread_spawn"?Jc(e,t,n):u==="__yo_worker_spawn"?ep(e,t,n):pe(r.return.type)?(n.emitter.emitLine(`${t}${u}(${l});`),e.$?.deferredDropExpressions&&vt(e,t,n),""):`${u}(${l})`}if(ie(i)){let u=Si(i);if(u)return Io(u,s,e,n,t);let c=i.specializedType??i.type;if(i.isControlFunction&&i.body)return jm(i,c,s,t,n);let p=n.functions[i.funcId]?.cName;if(p){let _=n.functions[i.funcId]?.effectStateMachineInfo;if(_){let d=i.body?.$?.effectAnalysis;if(d?.effectHandlerInfos&&d.effectHandlerInfos.length>1){let h=[];for(let y=0;y<d.effectHandlerInfos.length;y++){let E=d.effectHandlerInfos[y].handlerValue;if(E&&ie(E)){let $=E.specializedType??E.type,C=E.body,L=C?!E.isControlFunction||Nr(C):!1;h.push({handlerBody:C,handlerType:$,hasResume:L,effectIndex:y})}}if(h.length>0){let y=e.$?.variableName;return mc(_,s,c,h,y,t,n)}}let g=d?.handlerValue;if(g&&ie(g)){let h=g.specializedType??g.type,y=g.body,v=y?!g.isControlFunction||Nr(y):!1,E=e.$?.variableName,$=e.$?.type;return Ks(_,s,c,y,h,v,$,E,t,n)}}if(pe(c.return.type))return n.emitter.emitLine(`${t}${p}(${l});`),e.$?.deferredDropExpressions&&vt(e,t,n),"";{let d=e.$?.variableName;if(d){let g=i.specializedType?.return.type??c.return.type,h=e.$?.type,y=h&&we(h),v=g&&we(g),E;if(y&&v){let $=i.body;if($&&T($,"begin")){let C=$.args;if(C.length>0){let L=C[C.length-1];Pt(L)&&($=L)}}if($&&Pt($)&&$.$?.asyncStateMachineStructName){let C=$.$.asyncStateMachineStructName;E=`${C}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(d,C)}else h&&M(h)&&h.resolvedConcreteType?E=P(h,n):E=P(g,n)}else E=P(g??h,n);return n.emitter.emitLine(`${t}${E} ${d} = ${p}(${l});`),En(d,t,n),e.$?.deferredDropExpressions&&vt(e,t,n),d}else return`// Error: Regular function call returns ${P(i.specializedType?.return.type??c.return.type,n)} but no temp variable assigned`}}}else{let u=n.externFunctions[r.id];if(u){let c=u.cName;return e.$?.deferredDropExpressions&&vt(e,t,n),`${c}(${l})`}else{let c=S(e.func,t,n),p=P(r.return.type,n),f=r.parameters.filter(d=>!d.isCompileTimeOnly).map(d=>P(d.type,n)),_=`((${p} (*)(${f.join(", ")}))${c})`;if(pe(r.return.type))return n.emitter.emitLine(`${t}${_}(${l});`),e.$?.deferredDropExpressions&&vt(e,t,n),"";{let d=e.$?.variableName;if(d){let g=r.return.type,h=e.$?.type,y=h&&g&&we(h)&&we(g)?g:h??g;return n.emitter.emitLine(`${t}${P(y,n)} ${d} = ${_}(${l});`),En(d,t,n),e.$?.deferredDropExpressions&&vt(e,t,n),d}else return`// Error: Function parameter call returns ${P(r.return.type,n)} but no temp variable assigned`}}}}}else if(r&&Gt(r)){let o=r,a=jt(o),s=Ne(o);{let l=a.isFn.callType,u=e.$?.runtimeArgExprsInOrder;if(u){let c=n;for(let g of u)if(g.$?.variableName&&g.$?.type){let h=c.currentClosureCaptures&&c.currentClosureCaptures.includes(g.$.variableName)&&U(g)&&g.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&tr(g.token.value,g.$.env,c.currentClosureCaptureFrameLevel),y=S(g,t,n),v=!1;if(U(g)&&g.$.env&&g.$.variableName){let $=j(g.$.env,g.$.variableName);$.length>0&&$[$.length-1].isCompileTimeOnly&&(v=!0)}let E=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->");if(y&&y!==g.$.variableName&&!h&&!E&&!v){let $=g.$.convertedRuntimeType||g.$.type,C=it($,g.$.variableName,n);n.emitter.emitLine(`${t}${C} = ${y};`),En(g.$.variableName,t,n)}}let p=S(e.func,t,n),f=u.map(g=>{if(g.$?.variableName&&g.$?.type){if(c.currentClosureCaptures&&c.currentClosureCaptures.includes(g.$.variableName)&&U(g)&&g.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&tr(g.token.value,g.$.env,c.currentClosureCaptureFrameLevel))return S(g,t,n);{let y=ve(g.$.variableName,g.$.env),v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->"),E=y;if(g.$?.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){Ze(g,t,c);let $=g.$.deferredDupExpressions[0];F($)&&$.$?.variableName&&(E=ve($.$.variableName,$.$.env))}return v?y:E}}else return S(g,t,n)}),_;if(s){let g=[`(${p}).data`,...f];_=`(${p}).vtable->call(${g.join(", ")})`}else{let g;if(M(o)){let y=o;y.resolvedConcreteType&&(g=y.resolvedConcreteType.id)}let h=g?n.implClosureCallMap.get(g):void 0;if(h){let y=Object.values(c.functions).find(E=>E.cName===h.functionCName),v=y?.effectStateMachineInfo;if(v&&y){let $=v.analysis.effectParameterName,C=e.func.$?.env??e.$?.env;if($&&C){let L=j(C,$),O=L[L.length-1]?.value?.[0];if(O&&ie(O)){let N=O.specializedType??O.type,D=O.body?!O.isControlFunction||Nr(O.body):!1,V=e.$?.variableName,z=`&(${p})`,ee=Ks(v,f,v.functionType,O.body,N,D,c.currentFunctionType?.return.type,V,t,c,z);return e.$?.deferredDropExpressions&&vt(e,t,c),ee}}}}if(h){let y=[`&(${p})`,...f];_=`${h.functionCName}(${y.join(", ")})`}else{let y=[`(${p}).data`,...f];_=`(${p}).call(${y.join(", ")})`}}let d=l.return.type;if(pe(d))return n.emitter.emitLine(`${t}${_};`),e.$?.deferredDropExpressions&&vt(e,t,n),"";{let g=e.$?.variableName;return g?(n.emitter.emitLine(`${t}${P(d,n)} ${g} = ${_};`),En(g,t,n),e.$?.deferredDropExpressions&&vt(e,t,n),g):`// Error: Closure call returns ${P(d,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(R(i))if(ue(i.value)){let o=i.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=o.fields.map(c=>c.label),u=e.$?.variableName;if(a&&s&&l.length===a.length){if(o.isNewtype&&o.fields.length===1){let c=a[0],p=S(c,t,n),f=p;if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){let d=n;if(c.$?.variableName&&c.$?.type){let h=ve(c.$.variableName,c.$.env);if(p!==h){let y=c.$.type,v=P(y,n);n.emitter.emitLine(`${t}${v} ${h} = ${p};`)}}Ze(c,t,d);let g=c.$.deferredDupExpressions[0];F(g)&&g.$?.variableName&&(f=ve(g.$.variableName,g.$.env))}let _=`((${s})(${f}))`;if(u&&e.$?.type){let d=it(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${_};`),En(u,t,n),u}else return _}if(o.isReferenceSemantics){let c=n,p=a.map(d=>{let g=S(d,t,n);if(d.$?.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if(d.$?.variableName&&d.$?.type){let y=ve(d.$.variableName,d.$.env);if(g!==y){let v=d.$.type,E=P(v,n);n.emitter.emitLine(`${t}${E} ${y} = ${g};`)}}Ze(d,t,c);let h=d.$.deferredDupExpressions[0];if(F(h)&&h.$?.variableName)return ve(h.$.variableName,h.$.env)}return g}).join(", "),_=`${`__yo_new_${s}`}(${p})`;if(u&&e.$?.type){let d=it(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${_};`),En(u,t,n),u}else return _}else{let c=n,p=a.map((_,d)=>{let g=S(_,t,n),h=ke(o)?`_${d}`:K(l[d],o.isExtern==="c"),y=g;if(_.$?.deferredDupExpressions&&_.$.deferredDupExpressions.length>0){if(_.$?.variableName&&_.$?.type){let E=ve(_.$.variableName,_.$.env),$=_.$.type,C=P($,n);g!==E&&n.emitter.emitLine(`${t}${C} ${E} = ${g};`)}Ze(_,t,c);let v=_.$.deferredDupExpressions[0];F(v)&&v.$?.variableName&&(y=ve(v.$.variableName,v.$.env))}return`.${h} = `+y}).join(", "),f=`(${s}){ ${p} }`;if(u&&e.$?.type){let _=it(e.$.type,u,n);return n.emitter.emitLine(`${t}${_} = ${f};`),En(u,t,n),u}else return f}}}else{if(Gt(i.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(lt(i.value)){let o=e.$?.variableName,a=e.args[0];if(a&&F(a)&&T(a,":",2)){let s=a.args[0],l=a.args[1],u=n.types[i.value.id]?.cName;if(u&&U(s)&&l){let c=n,p=s.token.value,f=ve(p,s.$?.env),d=S(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){Ze(l,t,c);let h=l.$.deferredDupExpressions[0];F(h)&&h.$?.variableName&&(d=ve(h.$.variableName,h.$.env))}let g=`(${u}){ .${f} = ${d} }`;if(o&&e.$?.type){let h=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${h} = ${g};`),En(o,t,n),o}else return g}}}else if(ye(i.value)){let o=i.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=e.$?.variableName;if(o.selectedVariantName&&a&&s){if(Kt(o)){let _=o.selectedVariantName,d=o.variants.find(g=>g.name===_);if(d){if(!d.fields||d.fields.length===0){let g="NULL";if(l&&e.$?.type){let h=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${h} = ${g};`),En(l,t,n),l}else return g}else if(d.fields.length===1){let g=S(a[0],t,n);if(l&&e.$?.type){let h=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${h} = ${g};`),En(l,t,n),l}else return g}}}if(kn(o)){let _=o.selectedVariantName,d=_n(o,_,n);if(l&&e.$?.type){let g=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${g} = ${d};`),En(l,t,n),l}else return d}let p=o.selectedVariantName,f=o.variants.find(_=>_.name===p);if(f){let _=f.fields?.filter(y=>!pe(y.type))||[],d=n,g=a.map((y,v)=>{if(f.fields){let E=f.fields[v];if(E&&!pe(E.type)){let $=S(y,t,n),C=ve(E.label,y.$?.env),L=$;if(y.$?.variableName&&y.$?.type){let b=d.currentClosureCaptures&&d.currentClosureCaptures.includes(y.$.variableName)&&U(y)&&y.$.env&&d.currentClosureCaptureFrameLevel!==void 0&&tr(y.token.value,y.$.env,d.currentClosureCaptureFrameLevel),O=(d.inAsyncStateMachine||d.inEffectStateMachine)&&$.startsWith("sm->"),N=!1;if(U(y)&&y.$.env&&y.$.variableName){let V=j(y.$.env,y.$.variableName);V.length>0&&V[V.length-1].isCompileTimeOnly&&(N=!0)}let D=!1;if($&&$!==y.$.variableName&&!b&&!O&&!N){let V=ve(y.$.variableName,y.$.env);if($!==V){let z=it(y.$.type,y.$.variableName,n);n.emitter.emitLine(`${t}${z} = ${$};`),D=!0,En(y.$.variableName,t,n)}}D&&(L=ve(y.$.variableName,y.$.env))}if(y.$?.deferredDupExpressions&&y.$.deferredDupExpressions.length>0){Ze(y,t,d);let b=y.$.deferredDupExpressions[0];F(b)&&b.$?.variableName&&(L=ve(b.$.variableName,b.$.env))}return`.${C} = `+L}return""}else return""}).filter(y=>y).join(", "),h=_.length>0?`(${s}){ .tag = ${_n(o,p,n)}, .data = { .${p} = { ${g} } } }`:`(${s}){ .tag = ${_n(o,p,n)} }`;if(l&&e.$?.type){let y=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${y} = ${h};`),En(l,t,n),l}else return h}}}}else if(be(r)){let o=e.args[0];if(o&&F(o)&&T(o,":")){let l=S(e.func,t,n),u=S(o.args[0],t,n),c=S(o.args[1],t,n),p=`Slice_${K(P(r.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:P(r.childType,n)}),`(${p}){ .data = &${l}.data[${u}], .length = (${c}) - (${u}) }`}else if(o&&U(o)&&o.token.value===":"){let l=S(e.func,t,n),u=r,c=u.childType,p=`Slice_${K(P(c,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:P(c,n)}),Oe(u.length)?`(${p}){ .data = &${l}.data[0], .length = ${u.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let a=S(e.func,t,n),s=S(o,t,n);return`${a}.data[${s}]`}else if(je(r)){let o=e.args[0];if(o&&F(o)&&T(o,":")){let l=S(e.func,t,n),u=S(o.args[0],t,n),c=S(o.args[1],t,n),p=`Slice_${K(P(r.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:P(r.childType,n)}),`(${p}){ .data = &${l}.data[${u}], .length = (${c}) - (${u}) }`}else if(o&&U(o)&&o.token.value===":"){let l=S(e.func,t,n),u=`Slice_${K(P(r.childType,n))}`;return n.sliceStructTypes.has(u)||n.sliceStructTypes.set(u,{childType:P(r.childType,n)}),`(${u}){ .data = ${l}.data, .length = ${l}.length }`}let a=S(e.func,t,n),s=S(o,t,n);return`${a}.data[${s}]`}else if(r&&Ie(r)&&je(r.childType)){let o=S(e.func,t,n),a=S(e.args[0],t,n);return`${o}.data[${a}]`}}var Ym=0;function jm(e,t,n,r,i){let o=i.emitter,a=Ym++,s=t.parameters.filter(d=>!d.isCompileTimeOnly),l=e.body?!e.isControlFunction||Nr(e.body):!1,u=l?e.body.$?.type:void 0,c=!u||pe(u),p=`__ctl_direct_result_${a}`;if(l&&!c){let d=P(u,i);o.emitLine(`${r}${d} ${p};`)}let f=`${r} `;o.emitLine(`${r}{`);let _=[];for(let d=0;d<s.length&&d<n.length;d++){let g=s[d],h=P(g.type,i),y=K(g.label);if(o.emitLine(`${f}${h} ${y} = ${n[d]};`),Te(g.type)){let v=wn(y,g.type,i);v&&_.push(v)}}if(l){let d=`__ctl_direct_exit_${a}`,g=i.continuationVariables,h=new Map(g);h.set("resume",{directReturnVar:c?"":p,directExitLabel:d,isUnitReturn:c}),i.continuationVariables=h;let y=i.pendingDeferredDrops;i.pendingDeferredDrops=void 0;let v=S(e.body,f,i);return v&&o.emitLine(`${f}${v};`),i.pendingDeferredDrops=y,i.continuationVariables=g,o.emitLine(`${r}}`),o.emitLine(`${r}${d}:;`),c?"":p}else{let d=i.effectHandlerParamDrops;i.effectHandlerParamDrops=_;let g=i.effectSmConsumedArgCNames,h=new Set;for(let v=0;v<s.length&&v<n.length;v++){let E=s[v];Te(E.type)&&h.add(n[v])}h.size>0&&(i.effectSmConsumedArgCNames=h);let y=S(e.body,f,i);y&&o.emitLine(`${f}${y};`),i.effectSmConsumedArgCNames=g,i.effectHandlerParamDrops=d}return o.emitLine(`${r}}`),""}function rp(e,t,n){let r=n.emitter,i=e.$?.type;if(!i)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let a=e.args[0];if(a.$?.value&&qe(a.$.value)){let s=a.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(s)});`),r.emitLine(`${t}abort();`)}else{let s=S(a,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${s});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${P(i,n)}*)NULL))`}function ip(e,t,n){if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=S(r,t,n),a=r.$?.type,s=r.$?.value;if(U(i)){let l=i.token.value;if(e.$?.value&&ie(e.$.value)){let u=e.$.value;return n.functions[u.funcId]?.cName||u.funcId}if(!e.$?.value&&(w.___dispose.includes(l)||w.___drop.includes(l)||w.___dup.includes(l))&&a){let u=null;if((ue(a)||ye(a))&&(u=a.trait),u){let c=u.fields.find(p=>p.label===l&&p.assignedValue&&ie(p.assignedValue));if(c&&ie(c.assignedValue)){let p=c.assignedValue;return n.functions[p.funcId]?.cName||p.funcId}else return`/* ERROR: Rc method ${l} not found in type module */`}else return`/* ERROR: No module found for Rc method ${l} */`}if(Fe(a)||ft(s)){let u=e.$?.value;if(u){if(fe(u)){if(u.variableName)return ve(u.variableName,e.$?.env)}else if(!ft(u))return Wt(u,n,e)}return ve(l,e.$?.env)}if(lo(a)&&a.fields.length===1){let u=a.fields[0];if(u&&u.label===l)return o}if(ye(a)){let u=a;if(Kt(u))return o;for(let p of u.variants)if(p.fields){for(let f of p.fields)if(f.label===l){let _=p.name;return`${o}.data.${_}.${K(l)}`}}return`/* ERROR: field ${l} not found in enum ${u.typeName} */`}else if(R(s)&&ye(s.value)){let u=s.value,c=u.variants.find(f=>f.name===l),p=n.types[u.id]?.cName;if(c&&!c.fields&&p){let f=_n(u,c.name,n);return`(${p}){ .tag = ${f}, .data = { } }`}}else{if(bt(a)&&l==="*")return`${o}->value`;if(Ie(a)){if(l==="*")return`(*${o})`;if(je(a.childType))return`${o}->${K(l)}`;{let u=0,c=a;for(;Ie(c);)u++,c=c.childType;if(u>0&&ue(c)&&c.isReferenceSemantics&&u++,lo(c)&&c.fields.length===1){let p=c.fields[0];if(p&&p.label===l)return u===1?`(*${o})`:`${"*".repeat(u)}(${o})`}return u>0?u===1?`${o}->${K(l)}`:`${`(${"*".repeat(u-1)}${o})`}->${K(l)}`:`${o}.${K(l)}`}}else if(ke(a)){if(l.match(/^\d+$/))return`${o}._${l}`;{let u=a.fields.findIndex(c=>c.label===l);return`${o}._${u}`}}else return Ne(a)?`${o}.vtable->${K(l)}`:dt(a)?`${o}->${K(l)}`:`${o}.${K(l)}`}}return"/* ERROR: field name must be an identifier */"}function op(e,t,n){if(!e.$?.type)return`// Error: No type information for pointer/reference expression ${k(e)}
10650
- `;let i=e.args[0];if(F(i)){let l=i.func.$?.type;if(l&&be(l)){let u=i.args[0];if(u&&F(u)&&T(u,":")){let c=S(i.func,t,n),p=S(u.args[0],t,n),f=S(u.args[1],t,n),_=`Slice_${K(P(l.childType,n))}`;return n.sliceStructTypes.has(_)||n.sliceStructTypes.set(_,{childType:P(l.childType,n)}),`(${_}){ .data = &${c}.data[${p}], .length = ${f} - ${p} }`}else if(u&&U(u)&&u.token.value===":"){let c=S(i.func,t,n),p=l,f=p.childType,_=`Slice_${K(P(f,n))}`;return n.sliceStructTypes.has(_)||n.sliceStructTypes.set(_,{childType:P(f,n)}),Oe(p.length)?`(${_}){ .data = &${c}.data[0], .length = ${p.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(l&&(je(l)||Ie(l)&&je(l.childType))){let u=je(l)?l:l.childType,c=i.args[0];if(c&&F(c)&&T(c,":")){let p=S(i.func,t,n),f=S(c.args[0],t,n),_=S(c.args[1],t,n),d=`Slice_${K(P(u.childType,n))}`;return n.sliceStructTypes.has(d)||n.sliceStructTypes.set(d,{childType:P(u.childType,n)}),`(${d}){ .data = &${p}.data[${f}], .length = ${_} - ${f} }`}else if(c&&U(c)&&c.token.value===":"){let p=S(i.func,t,n),f=`Slice_${K(P(u.childType,n))}`;return n.sliceStructTypes.has(f)||n.sliceStructTypes.set(f,{childType:P(u.childType,n)}),`(${f}){ .data = ${p}.data, .length = ${p}.length }`}}}let o=i.$?.value,a=i.$?.type;if(o!==void 0&&a){if(Oe(o)||Re(o)){let l=S(i,t,n);return`(&(${P(a,n)}){${l}})`}if(qe(o)&&i.$?.convertedRuntimeType)return`(&${S(i,t,n)})`}return`(&${S(i,t,n)})`}function ap(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${S(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function sp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${S(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function lp(e,t,n){let r=e.args[0];return r?S(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function up(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=S(r,t,n),a=S(i,t,n),s=r.$?.type;if(!s||!be(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=M(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(be(u)){let p=u.length;if(!Oe(p))return"// Error: array element has non-constant length";let f=`i_${Math.floor(Math.random()*1e6)}`,_=n.emitter;_.emitLine(`for (size_t ${f} = 0; ${f} < ${p.value}; ${f}++) {`);let d=`(${o}).data[${a}].data[${f}]`;_.emitLine(" { // drop nested array element");let g=wn(d,u.childType,n);return g&&_.emitLine(` ${g};`),_.emitLine(" }"),_.emitLine("}"),""}let c=Ar(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function cp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=S(r,t,n),a=S(i,t,n),s=r.$?.type;if(!s||!be(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=M(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(be(u)){let p=u.length;if(!Oe(p))return"// Error: array element has non-constant length";let f=`temp_array_${Math.floor(Math.random()*1e6)}`,_=`i_${Math.floor(Math.random()*1e6)}`,d=P(u,n),g=n.emitter;g.emitLine(`${d} ${f} = (${o}).data[${a}];`),g.emitLine(`for (size_t ${_} = 0; ${_} < ${p.value}; ${_}++) {`);let h=Lr(`${f}.data[${_}]`,u.childType,n);return g.emitLine(` ${f}.data[${_}] = ${h};`),g.emitLine("}"),f}let c=Sn(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function pp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=S(r,t,n);S(i,t,n);let a=r.$?.type;if(!a||!ke(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=i.$?.value;if(!Oe(s))return"// Error: __yo_drop_tuple_element requires a constant index";let l=Number(s.value);if(l<0||l>=a.fields.length)return"// Error: __yo_drop_tuple_element index out of bounds";let u=a.fields[l].type,c=M(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(ke(c)){let f=`(${o})._${l}`;return wn(f,c,n)}let p=Ar(c,n);return p?`${p}((${o})._${l})`:"// No drop function for tuple element type"}function fp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=S(r,t,n);S(i,t,n);let a=r.$?.type;if(!a||!ke(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=i.$?.value;if(!Oe(s))return"// Error: __yo_dup_tuple_element requires a constant index";let l=Number(s.value);if(l<0||l>=a.fields.length)return"// Error: __yo_dup_tuple_element index out of bounds";let u=a.fields[l].type,c=M(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(ke(c)){let f=`(${o})._${l}`;return Lr(f,c,n)}let p=Sn(c,n);return p?`${p}((${o})._${l})`:"// No dup function for tuple element type"}function _p(e,t,n){let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type??e.$?.type;return o?Lr(i,o,n):i}function dp(e,t,n){let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type??e.$?.type;return o?wn(i,o,n):""}function mp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${S(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function yp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${S(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function gp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${S(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function hp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${S(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function vp(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_sometype_drop requires exactly 1 argument";let i=r.$?.type;if(i&&M(i)&&we(i)){let o=S(r,t,n);return`if (${o} != NULL) { __yo_decr_rc((void*)${o}); }`}if(i&&M(i)&&i.resolvedConcreteType){let a=i.resolvedConcreteType.trait?.fields.find(s=>s.label===w.___drop[0]);if(a&&a.assignedValue&&ie(a.assignedValue)){let s=n.functions[a.assignedValue.funcId]?.cName;if(s){let l=S(r,t,n);return`${s}(${l})`}}}return"/* __yo_sometype_drop: no-op */"}function Ep(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_sometype_dup requires exactly 1 argument";let i=r.$?.type;if(i&&M(i)&&we(i))return`__yo_incr_rc((void*)${S(r,t,n)})`;if(i&&M(i)&&i.resolvedConcreteType){let a=i.resolvedConcreteType.trait?.fields.find(s=>s.label===w.___dup[0]);if(a&&a.assignedValue&&ie(a.assignedValue)){let s=n.functions[a.assignedValue.funcId]?.cName;if(s){let l=S(r,t,n);return`${s}(${l})`}}}return"/* __yo_sometype_dup: no-op */"}function Tp(e,t,n){if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let r=e.args[0],i=r.$?.type;if(!i)return"// Error: rc argument missing type information";let o=S(r,t,n);return on(i)?`((yo_ref_header_t*)(${o}))->ref_count`:"1"}function $p(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(r){let i=n,o=r.map(a=>{let s=S(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){Ze(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return ve(l.$.variableName,l.$.env)}return s}).join(", ");return`${n.currentFunctionName}(${o})`}else return`// Error: No arguments for recur call ${k(e)}
10651
- `}function Cp(e,t,n){let r=e.args[0];return`sizeof(${S(r,t,n)})`}function bp(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=n.types[e.$?.type?.id??""]?.cName,o=e.$?.variableName;if(r&&i){let a=n,s=r.map((l,u)=>{let p=S(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){Ze(l,t,a);let f=l.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}return`._${u} = ${p}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}else{if(e.args.length===0)return"";{let a=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${e.$?.type?.id??"none"} */`;let s=a.map((l,u)=>{let c=S(l,t,n);return`._${u} = ${c}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}}}function Km(e,t){if(F(e)&&T(e,I.begin)){let n=[];for(let r of e.args)if(F(r)&&T(r,"=",2)){let i=r.args[0],o=r.args[1],a=S(i,"",t),s=S(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(F(e)&&T(e,"=",2)){let n=e.args[0],r=e.args[1],i=S(n,"",t),o=S(r,"",t);return`${i} = ${o}`}return S(e,"",t)}function kp(e,t,n){if(F(e)&&T(e,I.begin)){let r=n,i=r.pendingDeferredDrops,o=e.$?.deferredDropExpressions??[];r.pendingDeferredDrops=[...o,...i??[]];for(let a of e.args){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}if(e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}r.pendingDeferredDrops=i}else{let r=S(e,t,n);r&&n.emitter.emitLine(`${t}${r};`)}}function wp(e,t,n){let r=e.args;if(r.length===2){let i=r[0],o=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s;let l=n,u=l.loopBodyDropsBaselineCount;l.loopBodyDropsBaselineCount=l.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let c=S(i,t+" ",n);return n.emitter.emitLine(`${t} if (!(${c})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),kp(o,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),l.loopBodyDropsBaselineCount=u,n.currentLoopLabel=a,""}else if(r.length===3){let i=r[0],o=r[1],a=r[2],s=n.currentLoopLabel,l=n.currentContinueLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`,c=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u,n.currentContinueLabel=c;let p=n,f=p.loopBodyDropsBaselineCount;p.loopBodyDropsBaselineCount=p.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let _=S(i,t+" ",n);n.emitter.emitLine(`${t} if (!(${_})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),kp(a,t+" ",n),n.emitter.emitLine(`${t}${c}:;`);let d=Km(o,n);return n.emitter.emitLine(`${t} ${d};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),p.loopBodyDropsBaselineCount=f,n.currentLoopLabel=s,n.currentContinueLabel=l,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Xm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;M(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),_t(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Qm(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=e.args.find(p=>F(p)&&T(p,I.using));if(!o)return;let a=At(i.$.type);if(!a?.isFuture.effects?.length)return;let s=Xm(a.isFuture.effects),l=o.args,c=r.emitter;for(let p=0;p<s.length&&p<l.length;p++){let f=s[p],_=l[p];if(!H(f.type)||f.type.forallParameters.length>0)continue;let d=S(_,n,r),g=f.label;c.emitLine(`${n} ${t}->__capture.${g} = (void*)${d};`)}}function Zm(e,t,n){let r=n,i=e.args[0],o=r.continuationVariables?.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let l=S(i,t,n);if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${l};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let l=r.emitter;if(i){let u=S(i,t,n);u&&u!=="(void)0"&&l.emitLine(`${t}(void)${u};`)}if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)l.emitLine(`${t}${u};`);return zn(t,r,e,!1,!1,!0),Lu({emitter:l,indent:t,debugLabel:r.currentFunctionName}),""}if(!i){if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);return zn(t,r,e,!1,!1,!0),"return"}let s=S(i,t,n);if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);return zn(t,r,e,!1,!1,!0),`return ${s}`}function Fp(e,t,n){let r;switch(e.tag){case"FnCall":r=Jm(e,t,n);break;case"Atom":r=Ri(e,n,t);break}return r}function Jm(e,t,n){if(e.$?.macroExpansion)return S(e.$.macroExpansion,t,n);if(F(e.func)&&T(e.func,".",2)&&e.func.args[1]&&U(e.func.args[1])){let r=e.func.args[1].token.value,i=e.func.args[0],o=i?.$?.type;if(o&&M(o)&&we(o)){if(r===w.___drop[0]){let a=S(i,t,n);return`if (${a} != NULL) { __yo_decr_rc((void*)${a}); }`}if(r===w.___dup[0])return`__yo_incr_rc((void*)${S(i,t,n)})`}}if(Mu(e))return Ou(e,t,n);if(T(e,w.__yo_decr_rc))return ap(e,t,n);if(T(e,w.__yo_incr_rc))return sp(e,t,n);if(T(e,w.__yo_rc_own))return lp(e,t,n);if(T(e,w.__yo_drop_array_element))return up(e,t,n);if(T(e,w.__yo_dup_array_element))return cp(e,t,n);if(T(e,w.__yo_drop_tuple_element))return pp(e,t,n);if(T(e,w.__yo_dup_tuple_element))return fp(e,t,n);if(T(e,w.___dup))return _p(e,t,n);if(T(e,w.___drop))return dp(e,t,n);if(T(e,w.__yo_dyn_drop))return mp(e,t,n);if(T(e,w.__yo_dyn_dup))return yp(e,t,n);if(T(e,w.__yo_incr_rc_atomic))return gp(e,t,n);if(T(e,w.__yo_decr_rc_atomic))return hp(e,t,n);if(T(e,w.__yo_iso_extract))return Yc(e,t,n);if(T(e,w.__yo_iso_dispose))return jc(e,t,n);if(T(e,w.__yo_arc_dispose))return Sc(e,t,n);if(nl(e))return Kc(e,t,n);if(tl(e))return Vc(e,t,n);if(T(e,w.__yo_sometype_drop))return vp(e,t,n);if(T(e,w.__yo_sometype_dup))return Ep(e,t,n);if(T(e,w.__yo_gc_collect))return Hc(e,t,n);if(T(e,w.rc))return Tp(e,t,n);if(T(e,w.panic))return rp(e,t,n);if(T(e,I.test))return"/* test declaration skipped */";if(T(e,w.__yo_thread_set_maximum_threads))return tp(e,t,n);if(T(e,I.op_and))return xc(e,t,n);if(T(e,I.op_or))return Nc(e,t,n);if(Pt(e))return e.$?.awaitAnalysis?Ru(e,t,n):Gu(e,t,n);if(T(e,I.dyn))return Wc(e,t,n);if(fn(e))return Rc(e,t,n);if(lu(e))return Pc(e,t,n);if(uu(e)){let r=e.args[0];if(!r)return"// Error: spawn requires a Future argument";let o=n.emitter,a=S(r,t,n),s=r.$?.type,l=s?P(s,n):"void*",u="__spawn_future";return o.emitLine(`${t}// io.spawn \u2014 start cold Future without waiting`),o.emitLine(`${t}{`),o.emitLine(`${t} ${l} ${u} = ${a};`),o.emitLine(`${t} int __spawn_state = ${u}->state;`),o.emitLine(`${t} if (__spawn_state == -2) {`),o.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),o.emitLine(`${t} abort();`),o.emitLine(`${t} }`),Lo(r.$?.type)||(o.emitLine(`${t} if (__spawn_state == 0 && ${u}->__yo_resume_fn) {`),Qm(e,u,`${t} `,n),o.emitLine(`${t} __yo_incr_rc((void*)${u});`),o.emitLine(`${t} ${u}->__yo_resume_fn((void*)${u});`),o.emitLine(`${t} }`)),o.emitLine(`${t}}`),""}if(T(e,I.return))return gc(e,t,n);if(T(e,I.escape))return Zm(e,t,n);if(T(e,w.__yo_array_fill,2))return Mc(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return zc(e,t,n);if(T(e,":=",2)){let r=qc(e,t,n);if(r!==void 0)return r}else{if(T(e,"=",2))return Oc(e,t,n);if(e.$?.value&&!fe(e.$?.value)&&!pe(e.$.type)&&!ct(e.$?.controlFlow)){let r=e.$.value;return Wt(r,n,e)}else{if(T(e,".",2))return ip(e,t,n);if(T(e,I.begin))return Uc(e,t,n);if(T(e,I.cond))return Bc(e,t,n);if(T(e,I.match))return Qc(e,t,n);if(T(e,w.__yo_address_of,1))return op(e,t,n);if(T(e,I.tuple))return bp(e,t,n);if(T(e,I.array)){let r=Dc(e,t,n);if(r!==void 0)return r}else{if(T(e,I.recur))return $p(e,t,n);if(T(e,I.runtime,1))return S(e.args[0],t,n);if(T(e,w.sizeof,1))return Cp(e,t,n);if(T(e,ei)){let r=e.$?.runtimeArgExprsInOrder||e.args;if(r){let i=n,o=r.map(a=>{let s=S(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){Ze(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return ve(l.$.variableName,l.$.env)}return s});return Io(e.func.token.value,o,e,n,t)}}else{if(T(e,I.while))return wp(e,t,n);if(T(e,"->",2)&&F(e.args[0])&&T(e.args[0],I.fn)){let r=e.$?.value;return ie(r)?Wt(r,n):"// Error: Anonymous function missing function value"}else{if(T(e,w.consume))return Gc(e,t,n);if(T(e,w.comptime_expect_error)||T(e,w.comptime_assert)||T(e,w.__yo_var_print_info)||T(e,w.__yo_var_is_owning_the_rc_value)||T(e,w.__yo_var_has_other_aliases))return"";if(T(e,I.open))return Zc(e,t,n);{let r=np(e,t,n);if(r!==void 0)return r}}}}}}if(F(e))throw new Error(`Unhandled function call: ${k(e)}`);return`// Failed to transpile ${k(e)}`}function Lp({expr:e,env:t,context:n}){ge(e,w.alignof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=ar(o),s;return a===null?s=q(yt(),{env:t,context:n}):s=Bt("Usize",a),e.$={env:t,type:yt(),value:s,pathCollection:[]},e}function Ap({expr:e,env:t,context:n}){let r=T(e,I.op_and)?"and":"or",i=e.args;if(i.length===0){let u=at(r==="and");return e.$={env:t,type:Xe(),value:u,pathCollection:[],isAccessingProperty:!1},e}let o=t,a,s=!1,l=!1;for(let u=0;u<i.length;u++){let c=i[u],p=x({expr:c,env:o,context:{...n}});if(!p.$||!cn(p.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
10652
- ${k(c)}`});o=p.$.env;let f=p.$.value;if(fe(f)){s=!0;continue}if(Re(f)){let _=f.value;if(r==="and"){if(!_){a=at(!1);break}!s&&!l&&(a=at(!0))}else{if(_){a=at(!0);break}!s&&!l&&(a=at(!1))}}else l=!0}return Re(a)||(l||s)&&(l?a=void 0:a=q(Xe(),{env:o,context:n})),e.$={env:o,type:Xe(),value:a,pathCollection:[],isAccessingProperty:!1},e}function Ip({expr:e,env:t,context:n}){ge(e,w.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});o.$?.env&&(t=o.$.env);let a=o.$?.value;if(!R(a)||!be(a.value))throw m({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?Se(a):"undefined"}`});let s=a.value,l=x({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});l.$?.env&&(t=l.$.env);let u=l.$?.type,c=l.$?.value;if(!u)throw m({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw m({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!W({type:s.childType,env:t},{type:u,env:t}))throw m({token:i.token,errorMessage:`Fill value type ${A(u)} is not compatible with array element type ${A(s.childType)}`});let p=s.length;if(fe(p)){let g=q(s,{env:t,context:n});return e.$={env:t,type:s,value:g,pathCollection:[]},e}let f;if(Oe(p)){let g=p.value;if(f=typeof g=="bigint"?Number(g):g,!Number.isInteger(f)||f<0)throw m({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${f}`})}else throw m({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${Se(p)}`});let _=[];if(fe(c)){let g=q(s,{env:t,context:n});return e.$={env:t,type:s,value:g,pathCollection:[]},e}for(let g=0;g<f;g++)_.push(c);let d=Tr(s,_);return e.$={env:t,type:s,value:d,pathCollection:[]},e}function xp({expr:e,env:t,context:n}){if(n.isValidatingFunctionDefinition||!n.isExecuting){let s=n.expectedType?.type??Y.type;return e.$={env:t,type:s,value:pe(s)?Y:q(s,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!Re(o.$.value))throw m({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
10649
+ )`;if(w.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(w.__yo_as.includes(e)&&n.$?.type){let o=P(n.$.type,r),a=n.args[0]?.$?.type;return a&&ye(a)&&!kn(a)?`((${o})((${t[0]}).tag))`:`((${o})(${t[0]}))`}else{if(w.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(w.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(w.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(w.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(w.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(w.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(w.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(w.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(w.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(w.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(w.__yo_slice_new.includes(e)&&n.$?.type)return`(${P(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(w.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(w.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(w.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(w.__yo_maybe_uninit_new.includes(e)&&n.$?.type){let o=P(n.$.type,r),a=`__yo_uninit_${Ym++}`;return r.emitter.emitLine(`${i}${o} ${a};`),a}else return w.__yo_maybe_uninit_as_ptr.includes(e)&&n.$?.type?`((${P(n.$.type,r)})(${t[0]}))`:w.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function Kc(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type;if(!o||!kt(o))return"// Error: __yo_iso_extract requires an Iso type";let a=P(o,n),s=e.$?.type;if(s&&n.isoTypes?.has(a)){let c=n.isoTypes.get(a);c.optionTypeCName||(c.optionTypeCName=P(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=e.$?.variableName;return u&&s?(n.emitter.emitLine(`${t}${P(s,n)} ${u} = ${l};`),u):l}function Xc(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type;return!o||!kt(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${P(o,n)}(${i})`}function rl(e){let t=e.func.$?.value;return R(t)&&kt(t.value)&&e.args.length===1}function Qc(e,t,n){if(!rl(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=S(a,t,n),l=P(i,n),u=P(o,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(l)||n.isoTypes.set(l,{childTypeCName:u,isoType:i}),`__yo_create_iso_${l}(${s})`}function mr(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function yr(e,t,n){if(F(e)&&T(e,I.begin)){let r=e.args,i=n,o=i.pendingDeferredDrops,a=e.$?.deferredDropExpressions??[];i.pendingDeferredDrops=[...a,...o??[]];for(let l=0;l<r.length-1;l++){let u=r[l],c=S(u,t,n);c&&n.emitter.emitLine(`${t}${c};`)}let s="";if(r.length>0){let l=r[r.length-1];if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){if(l.$?.variableName){let c=l.$.variableName;l.$.variableName=void 0;let p=S(l,t,n);l.$.variableName=c;let f=P(l.$.type,n),_=ve(c,l.$.env);_!==p&&n.emitter.emitLine(`${t}${f} ${_} = ${p};`)}Ze(l,t,n);let u=l.$.deferredDupExpressions[0];F(u)&&u.$?.variableName?s=ve(u.$.variableName,u.$.env):s=S(l,t,n)}else s=S(l,t,n)}return e.$?.deferredDropExpressions&&vt(e,t,n),i.pendingDeferredDrops=o,s}else return e.$?.deferredDupExpressions&&Ze(e,t,n),S(e,t,n)}function Jc(e,t,n){if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&pe(i);if(!o&&r){let g=P(i,n);n.emitter.emitLine(`${t}${g} ${r};`)}let a=S(e.args[0],t,n),s=e.args[0].$?.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return Km(e,t,n,a,s,r,o);let l,u;if(Ie(s)?(u=s.childType,l=s.tag):mt(s)?(u=s,l="ref_semantics"):u=s,!ye(u))return'// Error: "match" expression requires an enum type';if(!n.types[u.id]?.cName)return`// Error: "match" expression enum type ${u.typeName} has no C name`;let p=Kt(u);if(p){let g=e.args.slice(1),h=null,y=null;for(let v of g)if(F(v)&&T(v,"=>",2)){let E=v.args[0],$=v.args[1];if(E&&$&&F(E)&&T(E,"."))h={caseBody:$};else{let C=E.func;if(C&&F(C)&&T(C,".")){let L=C.args[0];if(L&&U(L)){let b=L.token.value;y={caseBody:$,variantName:b,casePattern:E}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),y){let v;if(F(y.casePattern)&&y.casePattern.args.length>0){let L=y.casePattern.args[0];if(L&&U(L)){v=K(L.token.value);let b=p;n.emitter.emitLine(`${t} ${P(b,n)} ${v} = ${a};`)}}let E=n;v&&(E.inAsyncStateMachine||E.inEffectStateMachine)&&(E.localShadowedVariables||(E.localShadowedVariables=new Set),E.localShadowedVariables.add(v));let $=yr(y.caseBody,t+" ",n);v&&E.localShadowedVariables&&E.localShadowedVariables.delete(v);let C=mr($);if(!o&&r&&!C){let L=$||a;n.emitter.emitLine(`${t} ${r} = ${L};`)}else $&&$!==""&&n.emitter.emitLine(`${t} ${$};`)}if(n.emitter.emitLine(`${t}} else {`),h){let v=yr(h.caseBody,t+" ",n),E=mr(v);!o&&r&&!E?n.emitter.emitLine(`${t} ${r} = ${v};`):v&&v!==""&&n.emitter.emitLine(`${t} ${v};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(kn(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let g=n.insideMatch;n.insideMatch=!0;let h=e.args.slice(1);for(let y=0;y<h.length;y++){let v=h[y];if(F(v)&&T(v,"=>",2)){let E=v.args[0],$=v.args[1];if(E&&$&&U(E)&&E.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let C=yr($,t+" ",n);!o&&r&&C&&!mr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(E&&$&&F(E)&&T(E,".",1)){let C=E.args[0].token.value,L=_n(u,C,n);n.emitter.emitLine(`${t}case ${L}: {`);let b=yr($,t+" ",n);!o&&r&&b&&!mr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=g,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let _=n.insideMatch;n.insideMatch=!0;let d=e.args.slice(1);for(let g=0;g<d.length;g++){let h=d[g];if(F(h)&&T(h,"=>",2)){let y=h.args[0],v=h.args[1];if(y&&v&&U(y)&&y.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let E=yr(v,t+" ",n);!o&&r&&E&&!mr(E)?n.emitter.emitLine(`${t} ${r} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&y.func.tag==="Atom"&&y.func.token.value==="."&&y.args.length>=1){let E=y.args[0].token.value,$=_n(u,E,n);if(n.emitter.emitLine(`${t}case ${$}: {`),y.args.length>1){let L=u.variants.find(b=>b.name===E);if(L&&L.fields){let b=y.args.slice(1);if(b.some(N=>F(N)&&T(N,":",2))){for(let N of b)if(F(N)&&T(N,":",2)){let M=N.args[0],V=N.args[1];if(!U(M))continue;let z=M.token.value,ee=L.fields.find(ne=>ne.label===z);if(!ee||pe(ee.type))continue;if(U(V)){let ne=V.token.value;if(ne!=="_"){let G=K(ne),J=K(z),de=P(ee.type,n),he=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${de} ${G} = ${a}${he}data.${E}.${J};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let B;if(V.$?.env){let oe=j(V.$.env,ne);oe.length>0&&(B=oe[oe.length-1].id)}B&&$e.stateMachineVariables.has(B)&&n.emitter.emitLine(`${t} sm->var_${B} = ${G};`)}}}}}else for(let N=0;N<b.length&&N<L.fields.length;N++){let M=b[N],V=L.fields[N];if(U(M)&&V){if(pe(V.type))continue;let z=M.token.value;if(z!=="_"){let ee=K(z),ne=K(V.label),G=P(V.type,n),J=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${G} ${ee} = ${a}${J}data.${E}.${ne};`);let de=n;if((de?.inAsyncStateMachine||de?.inEffectStateMachine)&&de.stateMachineVariables){let he;if(M.$?.env){let $e=j(M.$.env,z);$e.length>0&&(he=$e[$e.length-1].id)}he&&de.stateMachineVariables.has(he)&&n.emitter.emitLine(`${t} sm->var_${he} = ${ee};`)}}}}}}if(F(v)&&T(v,"=>",2)){let L=v.args[0];n.emitter.emitLine(`${t} ${P(s,n)} ${K(L.token.value)} = ${a};`),v=v.args[1]}let C=yr(v,t+" ",n);!o&&r&&C&&!mr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&F(y.func)&&y.func.func.tag==="Atom"&&y.func.func.token.value==="."&&y.func.args.length===1){let E=y.func.args[0].token.value,$=_n(u,E,n),C=y.args;n.emitter.emitLine(`${t}case ${$}: {`);let L=u.variants.find(O=>O.name===E);if(L&&L.fields&&C.length>0)if(C.some(N=>F(N)&&T(N,":",2))){for(let N of C)if(F(N)&&T(N,":",2)){let M=N.args[0],V=N.args[1];if(!U(M))continue;let z=M.token.value,ee=L.fields.find(ne=>ne.label===z);if(!ee)continue;if(U(V)){let ne=V.token.value;if(ne!=="_"){let G=K(ne);if(pe(ee.type))n.emitter.emitLine(`${t} // ${G} is unit type (no value)`);else{let J=K(z),de=P(ee.type,n),he=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${de} ${G} = ${a}${he}data.${E}.${J};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let B;if(V.$?.env){let oe=j(V.$.env,G);oe.length>0&&(B=oe[oe.length-1].id)}B&&$e.stateMachineVariables.has(B)&&n.emitter.emitLine(`${t} sm->var_${B} = ${G};`)}}}}}}else for(let N=0;N<Math.min(C.length,L.fields.length);N++){let M=C[N],V=L.fields[N];if(M.tag==="Atom"&&V){let z=M.token.value;if(z!=="_"){let ee=K(z);if(pe(V.type))n.emitter.emitLine(`${t} // ${ee} is unit type (no value)`);else{let ne=K(V.label),G=P(V.type,n),J=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${G} ${ee} = ${a}${J}data.${E}.${ne};`);let de=n;if((de?.inAsyncStateMachine||de?.inEffectStateMachine)&&de.stateMachineVariables){let he;if(M.$?.env){let $e=j(M.$.env,z);$e.length>0&&(he=$e[$e.length-1].id)}he&&de.stateMachineVariables.has(he)&&n.emitter.emitLine(`${t} sm->var_${he} = ${ee};`)}}}}}if(F(v)&&T(v,"=>",2)){let O=v.args[0];n.emitter.emitLine(`${t} ${P(s,n)} ${K(O.token.value)} = ${a};`),v=v.args[1]}let b=yr(v,t+" ",n);!o&&r&&b&&!mr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=_,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&vt(e,t,n),o?"":r??""}function jm(e){return F(e)?T(e,"|",2):!1}function il(e){if(!jm(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...il(n),...il(r)]}function Zc(e){if(e!==void 0){if(Oe(e))return String(e.value);if(Re(e))return e.value?"true":"false"}}function Km(e,t,n,r,i,o,a){let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let u=0;u<l.length;u++){let c=l[u];if(F(c)&&T(c,"=>",2)){let p=c.args[0],f=c.args[1];if(!p||!f)continue;if(U(p)&&p.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let h=yr(f,t+" ",n);!a&&o&&h&&!mr(h)?n.emitter.emitLine(`${t} ${o} = ${h};`):h&&n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let _=il(p),d=p.$?.primitivePatternValues;if(d&&d.length>0)for(let h of d){let y=Zc(h);y!==void 0&&n.emitter.emitLine(`${t}case ${y}:`)}else for(let h of _){let y=h.$?.value,v=Zc(y);v!==void 0&&n.emitter.emitLine(`${t}case ${v}:`)}n.emitter.emitLine(`${t}{`);let g=yr(f,t+" ",n);!a&&o&&g&&!mr(g)?n.emitter.emitLine(`${t} ${o} = ${g};`):g&&n.emitter.emitLine(`${t} ${g};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&vt(e,t,n),a?"":o??""}function ep(e,t,n){if(e.$?.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let r=e.args[0];if(!r||!r.$?.type)return"// Error: open expression has no argument or type";let i=r.$.type,o=r.$.value;if(ue(i)&&o===void 0){let a=S(r,t,n),s=e.$.runtimeDestructurings;for(let l of s){let u=P(l.type,n),c=K(l.variableName),p=K(l.label);n.emitter.emitLine(`${t}${u} ${c} = ${a}.${p};`)}}}return""}function tp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(D(o)){let g=o;g.resolvedConcreteType&&(a=g.resolvedConcreteType.id,s=g.resolvedConcreteType)}else ue(o)&&(a=o.id,s=o);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,c=P(s,n),p=S(i,t,n),f=i.$?.variableName?ve(i.$.variableName,i.$.env):p,_=`_thread_closure_data_${Be(e.$?.env.modulePath??"")}`;n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${f};`);let d=e.$?.variableName;return d?(n.emitter.emitLine(`${t}__yo_thread_t ${d} = __yo_thread_spawn(${u}, ${_});`),d):`__yo_thread_spawn(${u}, ${_})`}function np(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(D(o)){let d=o;d.resolvedConcreteType&&(a=d.resolvedConcreteType.id,s=d.resolvedConcreteType)}else ue(o)&&(a=o.id,s=o);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,c=P(s,n),p=S(i,t,n),f=i.$?.variableName?ve(i.$.variableName,i.$.env):p,_=`_worker_closure_data_${Be(e.$?.env.modulePath??"")}`;return n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${_});`),""}function rp(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${S(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function En(e,t,n){let r=n;if(!(r.inAsyncStateMachine||r.inEffectStateMachine)||!r.stateMachineVariables)return;let i=r.stateMachineVariables.get(e);if(!i){for(let[,o]of r.stateMachineVariables)if(o.name===e){i=o;break}}if(i&&i.kind!=="outer"){if(i.type&&we(i.type))return;let o=`var_${i.id}`,a=K(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function ip(e,t,n){if(e.$?.value!==void 0&&!_e(e.$.value))return e.$?.deferredDropExpressions&&vt(e,t,n),pe(e.$.type)?"":Wt(e.$.value,n,e);let r=e.func.$?.type,i=e.func.$?.value;if(q(r)){let o=e.$?.runtimeArgExprsInOrder;if(o){let a=!1;if(F(e.func)&&T(e.func,".",2)){let c=e.func.args[0]?.$?.type;c&&Ne(c)&&(a=!0)}let s=o.map((u,c)=>{if(u.$?.variableName&&u.$?.type){let p=n,f=p.currentClosureCaptures&&p.currentClosureCaptures.includes(u.$.variableName)&&U(u)&&u.$.env&&p.currentClosureCaptureFrameLevel!==void 0&&nr(u.token.value,u.$.env,p.currentClosureCaptureFrameLevel),_=S(u,t,n),d=!1;if(U(u)&&u.$.env&&u.$.variableName){let v=j(u.$.env,u.$.variableName);v.length>0&&v[v.length-1].isCompileTimeOnly&&(d=!0)}let g=(p.inAsyncStateMachine||p.inEffectStateMachine)&&_.startsWith("sm->"),h=!1;if(_&&_!==u.$.variableName&&!f&&!g&&!d){let v=ve(u.$.variableName,u.$.env);if(_!==v){let E=u.$.convertedRuntimeType||u.$.type,$=it(E,u.$.variableName,n);n.emitter.emitLine(`${t}${$} = ${_};`),h=!0,En(u.$.variableName,t,n)}}let y=h?u.$.variableName:_;if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){let v=new Set;u.$?.variableName&&v.add(ve(u.$.variableName,u.$.env)),_&&v.add(_),U(u)&&v.add(ve(u.token.value,u.$.env));let E=u.$.deferredDupExpressions.find($=>{let C=da($);return C?v.has(ve(C,$.$?.env)):!1});E&&(Ze(u,t,p),F(E)&&E.$?.variableName&&(y=ve(E.$.variableName,E.$.env)))}if(a&&c===0){if(F(e.func)&&T(e.func,".",2)){let $=e.func.args[0]?.$?.type,C=e.func.args[1];if(U(C)&&Ne($)){let L=C.token.value;if($.trait.fields.find(O=>O.label===L))return K(y,u.$.type.isExtern==="c")}}let v=u.$?.type;return v&&Ie(v)?`${K(y,u.$.type.isExtern==="c")}->data`:`(${K(y,u.$.type.isExtern==="c")}).data`}else return f||g||d?_:K(y,u.$.type.isExtern==="c")}else if(a&&c===0){let p=S(u,t,n);if(F(e.func)&&T(e.func,".",2)){let d=e.func.args[0]?.$?.type,g=e.func.args[1];if(U(g)&&Ne(d)){let h=g.token.value;if(d.trait.fields.find(v=>v.label===h))return p}}let f=u.$?.type;return f&&Ie(f)?`(${p})->data`:`(${p}).data`}else return S(u,t,n)}),l=s.join(", ");if(r.isExtern==="yo"&&r.externName){let u=r.externName;return ei.includes(u)?Io(u,s,e,n,t):u==="__yo_thread_spawn"?tp(e,t,n):u==="__yo_worker_spawn"?np(e,t,n):pe(r.return.type)?(n.emitter.emitLine(`${t}${u}(${l});`),e.$?.deferredDropExpressions&&vt(e,t,n),""):`${u}(${l})`}if(ie(i)){let u=Si(i);if(u)return Io(u,s,e,n,t);let c=i.specializedType??i.type;if(i.isControlFunction&&i.body)return Qm(i,c,s,t,n);let p=n.functions[i.funcId]?.cName;if(p){let _=n.functions[i.funcId]?.effectStateMachineInfo;if(_){let d=i.body?.$?.effectAnalysis;if(d?.effectHandlerInfos&&d.effectHandlerInfos.length>1){let h=[];for(let y=0;y<d.effectHandlerInfos.length;y++){let E=d.effectHandlerInfos[y].handlerValue;if(E&&ie(E)){let $=E.specializedType??E.type,C=E.body,L=C?!E.isControlFunction||Nr(C):!1;h.push({handlerBody:C,handlerType:$,hasResume:L,effectIndex:y})}}if(h.length>0){let y=e.$?.variableName;return gc(_,s,c,h,y,t,n)}}let g=d?.handlerValue;if(g&&ie(g)){let h=g.specializedType??g.type,y=g.body,v=y?!g.isControlFunction||Nr(y):!1,E=e.$?.variableName,$=e.$?.type;return Xs(_,s,c,y,h,v,$,E,t,n)}}if(pe(c.return.type))return n.emitter.emitLine(`${t}${p}(${l});`),e.$?.deferredDropExpressions&&vt(e,t,n),"";{let d=e.$?.variableName;if(d){let g=i.specializedType?.return.type??c.return.type,h=e.$?.type,y=h&&we(h),v=g&&we(g),E;if(y&&v){let $=i.body;if($&&T($,"begin")){let C=$.args;if(C.length>0){let L=C[C.length-1];Pt(L)&&($=L)}}if($&&Pt($)&&$.$?.asyncStateMachineStructName){let C=$.$.asyncStateMachineStructName;E=`${C}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(d,C)}else h&&D(h)&&h.resolvedConcreteType?E=P(h,n):E=P(g,n)}else E=P(g??h,n);return n.emitter.emitLine(`${t}${E} ${d} = ${p}(${l});`),En(d,t,n),e.$?.deferredDropExpressions&&vt(e,t,n),d}else return`// Error: Regular function call returns ${P(i.specializedType?.return.type??c.return.type,n)} but no temp variable assigned`}}}else{let u=n.externFunctions[r.id];if(u){let c=u.cName;return e.$?.deferredDropExpressions&&vt(e,t,n),`${c}(${l})`}else{let c=S(e.func,t,n),p=P(r.return.type,n),f=r.parameters.filter(d=>!d.isCompileTimeOnly).map(d=>P(d.type,n)),_=`((${p} (*)(${f.join(", ")}))${c})`;if(pe(r.return.type))return n.emitter.emitLine(`${t}${_}(${l});`),e.$?.deferredDropExpressions&&vt(e,t,n),"";{let d=e.$?.variableName;if(d){let g=r.return.type,h=e.$?.type,y=h&&g&&we(h)&&we(g)?g:h??g;return n.emitter.emitLine(`${t}${P(y,n)} ${d} = ${_}(${l});`),En(d,t,n),e.$?.deferredDropExpressions&&vt(e,t,n),d}else return`// Error: Function parameter call returns ${P(r.return.type,n)} but no temp variable assigned`}}}}}else if(r&&Gt(r)){let o=r,a=jt(o),s=Ne(o);{let l=a.isFn.callType,u=e.$?.runtimeArgExprsInOrder;if(u){let c=n;for(let g of u)if(g.$?.variableName&&g.$?.type){let h=c.currentClosureCaptures&&c.currentClosureCaptures.includes(g.$.variableName)&&U(g)&&g.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&nr(g.token.value,g.$.env,c.currentClosureCaptureFrameLevel),y=S(g,t,n),v=!1;if(U(g)&&g.$.env&&g.$.variableName){let $=j(g.$.env,g.$.variableName);$.length>0&&$[$.length-1].isCompileTimeOnly&&(v=!0)}let E=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->");if(y&&y!==g.$.variableName&&!h&&!E&&!v){let $=g.$.convertedRuntimeType||g.$.type,C=it($,g.$.variableName,n);n.emitter.emitLine(`${t}${C} = ${y};`),En(g.$.variableName,t,n)}}let p=S(e.func,t,n),f=u.map(g=>{if(g.$?.variableName&&g.$?.type){if(c.currentClosureCaptures&&c.currentClosureCaptures.includes(g.$.variableName)&&U(g)&&g.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&nr(g.token.value,g.$.env,c.currentClosureCaptureFrameLevel))return S(g,t,n);{let y=ve(g.$.variableName,g.$.env),v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->"),E=y;if(g.$?.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){Ze(g,t,c);let $=g.$.deferredDupExpressions[0];F($)&&$.$?.variableName&&(E=ve($.$.variableName,$.$.env))}return v?y:E}}else return S(g,t,n)}),_;if(s){let g=[`(${p}).data`,...f];_=`(${p}).vtable->call(${g.join(", ")})`}else{let g;if(D(o)){let y=o;y.resolvedConcreteType&&(g=y.resolvedConcreteType.id)}let h=g?n.implClosureCallMap.get(g):void 0;if(h){let y=Object.values(c.functions).find(E=>E.cName===h.functionCName),v=y?.effectStateMachineInfo;if(v&&y){let $=v.analysis.effectParameterName,C=e.func.$?.env??e.$?.env;if($&&C){let L=j(C,$),O=L[L.length-1]?.value?.[0];if(O&&ie(O)){let N=O.specializedType??O.type,M=O.body?!O.isControlFunction||Nr(O.body):!1,V=e.$?.variableName,z=`&(${p})`,ee=Xs(v,f,v.functionType,O.body,N,M,c.currentFunctionType?.return.type,V,t,c,z);return e.$?.deferredDropExpressions&&vt(e,t,c),ee}}}}if(h){let y=[`&(${p})`,...f];_=`${h.functionCName}(${y.join(", ")})`}else{let y=[`(${p}).data`,...f];_=`(${p}).call(${y.join(", ")})`}}let d=l.return.type;if(pe(d))return n.emitter.emitLine(`${t}${_};`),e.$?.deferredDropExpressions&&vt(e,t,n),"";{let g=e.$?.variableName;return g?(n.emitter.emitLine(`${t}${P(d,n)} ${g} = ${_};`),En(g,t,n),e.$?.deferredDropExpressions&&vt(e,t,n),g):`// Error: Closure call returns ${P(d,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(R(i))if(ue(i.value)){let o=i.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=o.fields.map(c=>c.label),u=e.$?.variableName;if(a&&s&&l.length===a.length){if(o.isNewtype&&o.fields.length===1){let c=a[0],p=S(c,t,n),f=p;if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){let d=n;if(c.$?.variableName&&c.$?.type){let h=ve(c.$.variableName,c.$.env);if(p!==h){let y=c.$.type,v=P(y,n);n.emitter.emitLine(`${t}${v} ${h} = ${p};`)}}Ze(c,t,d);let g=c.$.deferredDupExpressions[0];F(g)&&g.$?.variableName&&(f=ve(g.$.variableName,g.$.env))}let _=`((${s})(${f}))`;if(u&&e.$?.type){let d=it(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${_};`),En(u,t,n),u}else return _}if(o.isReferenceSemantics){let c=n,p=a.map(d=>{let g=S(d,t,n);if(d.$?.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if(d.$?.variableName&&d.$?.type){let y=ve(d.$.variableName,d.$.env);if(g!==y){let v=d.$.type,E=P(v,n);n.emitter.emitLine(`${t}${E} ${y} = ${g};`)}}Ze(d,t,c);let h=d.$.deferredDupExpressions[0];if(F(h)&&h.$?.variableName)return ve(h.$.variableName,h.$.env)}return g}).join(", "),_=`${`__yo_new_${s}`}(${p})`;if(u&&e.$?.type){let d=it(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${_};`),En(u,t,n),u}else return _}else{let c=n,p=a.map((_,d)=>{let g=S(_,t,n),h=ke(o)?`_${d}`:K(l[d],o.isExtern==="c"),y=g;if(_.$?.deferredDupExpressions&&_.$.deferredDupExpressions.length>0){if(_.$?.variableName&&_.$?.type){let E=ve(_.$.variableName,_.$.env),$=_.$.type,C=P($,n);g!==E&&n.emitter.emitLine(`${t}${C} ${E} = ${g};`)}Ze(_,t,c);let v=_.$.deferredDupExpressions[0];F(v)&&v.$?.variableName&&(y=ve(v.$.variableName,v.$.env))}return`.${h} = `+y}).join(", "),f=`(${s}){ ${p} }`;if(u&&e.$?.type){let _=it(e.$.type,u,n);return n.emitter.emitLine(`${t}${_} = ${f};`),En(u,t,n),u}else return f}}}else{if(Gt(i.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(lt(i.value)){let o=e.$?.variableName,a=e.args[0];if(a&&F(a)&&T(a,":",2)){let s=a.args[0],l=a.args[1],u=n.types[i.value.id]?.cName;if(u&&U(s)&&l){let c=n,p=s.token.value,f=ve(p,s.$?.env),d=S(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){Ze(l,t,c);let h=l.$.deferredDupExpressions[0];F(h)&&h.$?.variableName&&(d=ve(h.$.variableName,h.$.env))}let g=`(${u}){ .${f} = ${d} }`;if(o&&e.$?.type){let h=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${h} = ${g};`),En(o,t,n),o}else return g}}}else if(ye(i.value)){let o=i.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=e.$?.variableName;if(o.selectedVariantName&&a&&s){if(Kt(o)){let _=o.selectedVariantName,d=o.variants.find(g=>g.name===_);if(d){if(!d.fields||d.fields.length===0){let g="NULL";if(l&&e.$?.type){let h=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${h} = ${g};`),En(l,t,n),l}else return g}else if(d.fields.length===1){let g=S(a[0],t,n);if(l&&e.$?.type){let h=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${h} = ${g};`),En(l,t,n),l}else return g}}}if(kn(o)){let _=o.selectedVariantName,d=_n(o,_,n);if(l&&e.$?.type){let g=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${g} = ${d};`),En(l,t,n),l}else return d}let p=o.selectedVariantName,f=o.variants.find(_=>_.name===p);if(f){let _=f.fields?.filter(y=>!pe(y.type))||[],d=n,g=a.map((y,v)=>{if(f.fields){let E=f.fields[v];if(E&&!pe(E.type)){let $=S(y,t,n),C=ve(E.label,y.$?.env),L=$;if(y.$?.variableName&&y.$?.type){let b=d.currentClosureCaptures&&d.currentClosureCaptures.includes(y.$.variableName)&&U(y)&&y.$.env&&d.currentClosureCaptureFrameLevel!==void 0&&nr(y.token.value,y.$.env,d.currentClosureCaptureFrameLevel),O=(d.inAsyncStateMachine||d.inEffectStateMachine)&&$.startsWith("sm->"),N=!1;if(U(y)&&y.$.env&&y.$.variableName){let V=j(y.$.env,y.$.variableName);V.length>0&&V[V.length-1].isCompileTimeOnly&&(N=!0)}let M=!1;if($&&$!==y.$.variableName&&!b&&!O&&!N){let V=ve(y.$.variableName,y.$.env);if($!==V){let z=it(y.$.type,y.$.variableName,n);n.emitter.emitLine(`${t}${z} = ${$};`),M=!0,En(y.$.variableName,t,n)}}M&&(L=ve(y.$.variableName,y.$.env))}if(y.$?.deferredDupExpressions&&y.$.deferredDupExpressions.length>0){Ze(y,t,d);let b=y.$.deferredDupExpressions[0];F(b)&&b.$?.variableName&&(L=ve(b.$.variableName,b.$.env))}return`.${C} = `+L}return""}else return""}).filter(y=>y).join(", "),h=_.length>0?`(${s}){ .tag = ${_n(o,p,n)}, .data = { .${p} = { ${g} } } }`:`(${s}){ .tag = ${_n(o,p,n)} }`;if(l&&e.$?.type){let y=it(e.$.type,l,n);return n.emitter.emitLine(`${t}${y} = ${h};`),En(l,t,n),l}else return h}}}}else if(be(r)){let o=e.args[0];if(o&&F(o)&&T(o,":")){let l=S(e.func,t,n),u=S(o.args[0],t,n),c=S(o.args[1],t,n),p=`Slice_${K(P(r.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:P(r.childType,n)}),`(${p}){ .data = &${l}.data[${u}], .length = (${c}) - (${u}) }`}else if(o&&U(o)&&o.token.value===":"){let l=S(e.func,t,n),u=r,c=u.childType,p=`Slice_${K(P(c,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:P(c,n)}),Oe(u.length)?`(${p}){ .data = &${l}.data[0], .length = ${u.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let a=S(e.func,t,n),s=S(o,t,n);return`${a}.data[${s}]`}else if(je(r)){let o=e.args[0];if(o&&F(o)&&T(o,":")){let l=S(e.func,t,n),u=S(o.args[0],t,n),c=S(o.args[1],t,n),p=`Slice_${K(P(r.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:P(r.childType,n)}),`(${p}){ .data = &${l}.data[${u}], .length = (${c}) - (${u}) }`}else if(o&&U(o)&&o.token.value===":"){let l=S(e.func,t,n),u=`Slice_${K(P(r.childType,n))}`;return n.sliceStructTypes.has(u)||n.sliceStructTypes.set(u,{childType:P(r.childType,n)}),`(${u}){ .data = ${l}.data, .length = ${l}.length }`}let a=S(e.func,t,n),s=S(o,t,n);return`${a}.data[${s}]`}else if(r&&Ie(r)&&je(r.childType)){let o=S(e.func,t,n),a=S(e.args[0],t,n);return`${o}.data[${a}]`}}var Xm=0;function Qm(e,t,n,r,i){let o=i.emitter,a=Xm++,s=t.parameters.filter(d=>!d.isCompileTimeOnly),l=e.body?!e.isControlFunction||Nr(e.body):!1,u=l?e.body.$?.type:void 0,c=!u||pe(u),p=`__ctl_direct_result_${a}`;if(l&&!c){let d=P(u,i);o.emitLine(`${r}${d} ${p};`)}let f=`${r} `;o.emitLine(`${r}{`);let _=[];for(let d=0;d<s.length&&d<n.length;d++){let g=s[d],h=P(g.type,i),y=K(g.label);if(o.emitLine(`${f}${h} ${y} = ${n[d]};`),Te(g.type)){let v=wn(y,g.type,i);v&&_.push(v)}}if(l){let d=`__ctl_direct_exit_${a}`,g=i.continuationVariables,h=new Map(g);h.set("resume",{directReturnVar:c?"":p,directExitLabel:d,isUnitReturn:c}),i.continuationVariables=h;let y=i.pendingDeferredDrops;i.pendingDeferredDrops=void 0;let v=S(e.body,f,i);return v&&o.emitLine(`${f}${v};`),i.pendingDeferredDrops=y,i.continuationVariables=g,o.emitLine(`${r}}`),o.emitLine(`${r}${d}:;`),c?"":p}else{let d=i.effectHandlerParamDrops;i.effectHandlerParamDrops=_;let g=i.effectSmConsumedArgCNames,h=new Set;for(let v=0;v<s.length&&v<n.length;v++){let E=s[v];Te(E.type)&&h.add(n[v])}h.size>0&&(i.effectSmConsumedArgCNames=h);let y=S(e.body,f,i);y&&o.emitLine(`${f}${y};`),i.effectSmConsumedArgCNames=g,i.effectHandlerParamDrops=d}return o.emitLine(`${r}}`),""}function op(e,t,n){let r=n.emitter,i=e.$?.type;if(!i)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let a=e.args[0];if(a.$?.value&&He(a.$.value)){let s=a.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(s)});`),r.emitLine(`${t}abort();`)}else{let s=S(a,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${s});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${P(i,n)}*)NULL))`}function ap(e,t,n){if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=S(r,t,n),a=r.$?.type,s=r.$?.value;if(U(i)){let l=i.token.value;if(e.$?.value&&ie(e.$.value)){let u=e.$.value;return n.functions[u.funcId]?.cName||u.funcId}if(!e.$?.value&&(w.___dispose.includes(l)||w.___drop.includes(l)||w.___dup.includes(l))&&a){let u=null;if((ue(a)||ye(a))&&(u=a.trait),u){let c=u.fields.find(p=>p.label===l&&p.assignedValue&&ie(p.assignedValue));if(c&&ie(c.assignedValue)){let p=c.assignedValue;return n.functions[p.funcId]?.cName||p.funcId}else return`/* ERROR: Rc method ${l} not found in type module */`}else return`/* ERROR: No module found for Rc method ${l} */`}if(Le(a)||ft(s)){let u=e.$?.value;if(u){if(_e(u)){if(u.variableName)return ve(u.variableName,e.$?.env)}else if(!ft(u))return Wt(u,n,e)}return ve(l,e.$?.env)}if(lo(a)&&a.fields.length===1){let u=a.fields[0];if(u&&u.label===l)return o}if(ye(a)){let u=a;if(Kt(u))return o;for(let p of u.variants)if(p.fields){for(let f of p.fields)if(f.label===l){let _=p.name;return`${o}.data.${_}.${K(l)}`}}return`/* ERROR: field ${l} not found in enum ${u.typeName} */`}else if(R(s)&&ye(s.value)){let u=s.value,c=u.variants.find(f=>f.name===l),p=n.types[u.id]?.cName;if(c&&!c.fields&&p){let f=_n(u,c.name,n);return`(${p}){ .tag = ${f}, .data = { } }`}}else{if(bt(a)&&l==="*")return`${o}->value`;if(Ie(a)){if(l==="*")return`(*${o})`;if(je(a.childType))return`${o}->${K(l)}`;{let u=0,c=a;for(;Ie(c);)u++,c=c.childType;if(u>0&&ue(c)&&c.isReferenceSemantics&&u++,lo(c)&&c.fields.length===1){let p=c.fields[0];if(p&&p.label===l)return u===1?`(*${o})`:`${"*".repeat(u)}(${o})`}return u>0?u===1?`${o}->${K(l)}`:`${`(${"*".repeat(u-1)}${o})`}->${K(l)}`:`${o}.${K(l)}`}}else if(ke(a)){if(l.match(/^\d+$/))return`${o}._${l}`;{let u=a.fields.findIndex(c=>c.label===l);return`${o}._${u}`}}else return Ne(a)?`${o}.vtable->${K(l)}`:mt(a)?`${o}->${K(l)}`:`${o}.${K(l)}`}}return"/* ERROR: field name must be an identifier */"}function sp(e,t,n){if(!e.$?.type)return`// Error: No type information for pointer/reference expression ${k(e)}
10650
+ `;let i=e.args[0];if(F(i)){let l=i.func.$?.type;if(l&&be(l)){let u=i.args[0];if(u&&F(u)&&T(u,":")){let c=S(i.func,t,n),p=S(u.args[0],t,n),f=S(u.args[1],t,n),_=`Slice_${K(P(l.childType,n))}`;return n.sliceStructTypes.has(_)||n.sliceStructTypes.set(_,{childType:P(l.childType,n)}),`(${_}){ .data = &${c}.data[${p}], .length = ${f} - ${p} }`}else if(u&&U(u)&&u.token.value===":"){let c=S(i.func,t,n),p=l,f=p.childType,_=`Slice_${K(P(f,n))}`;return n.sliceStructTypes.has(_)||n.sliceStructTypes.set(_,{childType:P(f,n)}),Oe(p.length)?`(${_}){ .data = &${c}.data[0], .length = ${p.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(l&&(je(l)||Ie(l)&&je(l.childType))){let u=je(l)?l:l.childType,c=i.args[0];if(c&&F(c)&&T(c,":")){let p=S(i.func,t,n),f=S(c.args[0],t,n),_=S(c.args[1],t,n),d=`Slice_${K(P(u.childType,n))}`;return n.sliceStructTypes.has(d)||n.sliceStructTypes.set(d,{childType:P(u.childType,n)}),`(${d}){ .data = &${p}.data[${f}], .length = ${_} - ${f} }`}else if(c&&U(c)&&c.token.value===":"){let p=S(i.func,t,n),f=`Slice_${K(P(u.childType,n))}`;return n.sliceStructTypes.has(f)||n.sliceStructTypes.set(f,{childType:P(u.childType,n)}),`(${f}){ .data = ${p}.data, .length = ${p}.length }`}}}let o=i.$?.value,a=i.$?.type;if(o!==void 0&&a){if(Oe(o)||Re(o)){let l=S(i,t,n);return`(&(${P(a,n)}){${l}})`}if(He(o)&&i.$?.convertedRuntimeType)return`(&${S(i,t,n)})`}return`(&${S(i,t,n)})`}function lp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${S(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function up(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${S(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function cp(e,t,n){let r=e.args[0];return r?S(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function pp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=S(r,t,n),a=S(i,t,n),s=r.$?.type;if(!s||!be(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(be(u)){let p=u.length;if(!Oe(p))return"// Error: array element has non-constant length";let f=`i_${Math.floor(Math.random()*1e6)}`,_=n.emitter;_.emitLine(`for (size_t ${f} = 0; ${f} < ${p.value}; ${f}++) {`);let d=`(${o}).data[${a}].data[${f}]`;_.emitLine(" { // drop nested array element");let g=wn(d,u.childType,n);return g&&_.emitLine(` ${g};`),_.emitLine(" }"),_.emitLine("}"),""}let c=Ar(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function fp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=S(r,t,n),a=S(i,t,n),s=r.$?.type;if(!s||!be(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(be(u)){let p=u.length;if(!Oe(p))return"// Error: array element has non-constant length";let f=`temp_array_${Math.floor(Math.random()*1e6)}`,_=`i_${Math.floor(Math.random()*1e6)}`,d=P(u,n),g=n.emitter;g.emitLine(`${d} ${f} = (${o}).data[${a}];`),g.emitLine(`for (size_t ${_} = 0; ${_} < ${p.value}; ${_}++) {`);let h=Lr(`${f}.data[${_}]`,u.childType,n);return g.emitLine(` ${f}.data[${_}] = ${h};`),g.emitLine("}"),f}let c=Sn(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function _p(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=S(r,t,n);S(i,t,n);let a=r.$?.type;if(!a||!ke(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=i.$?.value;if(!Oe(s))return"// Error: __yo_drop_tuple_element requires a constant index";let l=Number(s.value);if(l<0||l>=a.fields.length)return"// Error: __yo_drop_tuple_element index out of bounds";let u=a.fields[l].type,c=D(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(ke(c)){let f=`(${o})._${l}`;return wn(f,c,n)}let p=Ar(c,n);return p?`${p}((${o})._${l})`:"// No drop function for tuple element type"}function dp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=S(r,t,n);S(i,t,n);let a=r.$?.type;if(!a||!ke(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=i.$?.value;if(!Oe(s))return"// Error: __yo_dup_tuple_element requires a constant index";let l=Number(s.value);if(l<0||l>=a.fields.length)return"// Error: __yo_dup_tuple_element index out of bounds";let u=a.fields[l].type,c=D(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(ke(c)){let f=`(${o})._${l}`;return Lr(f,c,n)}let p=Sn(c,n);return p?`${p}((${o})._${l})`:"// No dup function for tuple element type"}function mp(e,t,n){let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type??e.$?.type;return o?Lr(i,o,n):i}function yp(e,t,n){let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=S(r,t,n),o=r.$?.type??e.$?.type;return o?wn(i,o,n):""}function gp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${S(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function hp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${S(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function vp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${S(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function Ep(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${S(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function Tp(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_sometype_drop requires exactly 1 argument";let i=r.$?.type;if(i&&D(i)&&we(i)){let o=S(r,t,n);return`if (${o} != NULL) { __yo_decr_rc((void*)${o}); }`}if(i&&D(i)&&i.resolvedConcreteType){let a=i.resolvedConcreteType.trait?.fields.find(s=>s.label===w.___drop[0]);if(a&&a.assignedValue&&ie(a.assignedValue)){let s=n.functions[a.assignedValue.funcId]?.cName;if(s){let l=S(r,t,n);return`${s}(${l})`}}}return"/* __yo_sometype_drop: no-op */"}function $p(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_sometype_dup requires exactly 1 argument";let i=r.$?.type;if(i&&D(i)&&we(i))return`__yo_incr_rc((void*)${S(r,t,n)})`;if(i&&D(i)&&i.resolvedConcreteType){let a=i.resolvedConcreteType.trait?.fields.find(s=>s.label===w.___dup[0]);if(a&&a.assignedValue&&ie(a.assignedValue)){let s=n.functions[a.assignedValue.funcId]?.cName;if(s){let l=S(r,t,n);return`${s}(${l})`}}}return"/* __yo_sometype_dup: no-op */"}function Cp(e,t,n){if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let r=e.args[0],i=r.$?.type;if(!i)return"// Error: rc argument missing type information";let o=S(r,t,n);return on(i)?`((yo_ref_header_t*)(${o}))->ref_count`:"1"}function bp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(r){let i=n,o=r.map(a=>{let s=S(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){Ze(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return ve(l.$.variableName,l.$.env)}return s}).join(", ");return`${n.currentFunctionName}(${o})`}else return`// Error: No arguments for recur call ${k(e)}
10651
+ `}function kp(e,t,n){let r=e.args[0];return`sizeof(${S(r,t,n)})`}function wp(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=n.types[e.$?.type?.id??""]?.cName,o=e.$?.variableName;if(r&&i){let a=n,s=r.map((l,u)=>{let p=S(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){Ze(l,t,a);let f=l.$.deferredDupExpressions[0];F(f)&&f.$?.variableName&&(p=ve(f.$.variableName,f.$.env))}return`._${u} = ${p}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}else{if(e.args.length===0)return"";{let a=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${e.$?.type?.id??"none"} */`;let s=a.map((l,u)=>{let c=S(l,t,n);return`._${u} = ${c}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=it(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}}}function Zm(e,t){if(F(e)&&T(e,I.begin)){let n=[];for(let r of e.args)if(F(r)&&T(r,"=",2)){let i=r.args[0],o=r.args[1],a=S(i,"",t),s=S(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(F(e)&&T(e,"=",2)){let n=e.args[0],r=e.args[1],i=S(n,"",t),o=S(r,"",t);return`${i} = ${o}`}return S(e,"",t)}function Fp(e,t,n){if(F(e)&&T(e,I.begin)){let r=n,i=r.pendingDeferredDrops,o=e.$?.deferredDropExpressions??[];r.pendingDeferredDrops=[...o,...i??[]];for(let a of e.args){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}if(e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions){let s=S(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}r.pendingDeferredDrops=i}else{let r=S(e,t,n);r&&n.emitter.emitLine(`${t}${r};`)}}function Lp(e,t,n){let r=e.args;if(r.length===2){let i=r[0],o=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s;let l=n,u=l.loopBodyDropsBaselineCount;l.loopBodyDropsBaselineCount=l.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let c=S(i,t+" ",n);return n.emitter.emitLine(`${t} if (!(${c})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Fp(o,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),l.loopBodyDropsBaselineCount=u,n.currentLoopLabel=a,""}else if(r.length===3){let i=r[0],o=r[1],a=r[2],s=n.currentLoopLabel,l=n.currentContinueLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`,c=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u,n.currentContinueLabel=c;let p=n,f=p.loopBodyDropsBaselineCount;p.loopBodyDropsBaselineCount=p.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let _=S(i,t+" ",n);n.emitter.emitLine(`${t} if (!(${_})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Fp(a,t+" ",n),n.emitter.emitLine(`${t}${c}:;`);let d=Zm(o,n);return n.emitter.emitLine(`${t} ${d};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),p.loopBodyDropsBaselineCount=f,n.currentLoopLabel=s,n.currentContinueLabel=l,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Jm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),_t(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function ey(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=e.args.find(p=>F(p)&&T(p,I.using));if(!o)return;let a=It(i.$.type);if(!a?.isFuture.effects?.length)return;let s=Jm(a.isFuture.effects),l=o.args,c=r.emitter;for(let p=0;p<s.length&&p<l.length;p++){let f=s[p],_=l[p];if(!q(f.type)||f.type.forallParameters.length>0)continue;let d=S(_,n,r),g=f.label;c.emitLine(`${n} ${t}->__capture.${g} = (void*)${d};`)}}function ty(e,t,n){let r=n,i=e.args[0],o=r.continuationVariables?.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let l=S(i,t,n);if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${l};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let l=r.emitter;if(i){let u=S(i,t,n);u&&u!=="(void)0"&&l.emitLine(`${t}(void)${u};`)}if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)l.emitLine(`${t}${u};`);return zn(t,r,e,!1,!1,!0),Iu({emitter:l,indent:t,debugLabel:r.currentFunctionName}),""}if(!i){if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);return zn(t,r,e,!1,!1,!0),"return"}let s=S(i,t,n);if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);return zn(t,r,e,!1,!1,!0),`return ${s}`}function Ap(e,t,n){let r;switch(e.tag){case"FnCall":r=ny(e,t,n);break;case"Atom":r=Ri(e,n,t);break}return r}function ny(e,t,n){if(e.$?.macroExpansion)return S(e.$.macroExpansion,t,n);if(F(e.func)&&T(e.func,".",2)&&e.func.args[1]&&U(e.func.args[1])){let r=e.func.args[1].token.value,i=e.func.args[0],o=i?.$?.type;if(o&&D(o)&&we(o)){if(r===w.___drop[0]){let a=S(i,t,n);return`if (${a} != NULL) { __yo_decr_rc((void*)${a}); }`}if(r===w.___dup[0])return`__yo_incr_rc((void*)${S(i,t,n)})`}}if(Ru(e))return Pu(e,t,n);if(T(e,w.__yo_decr_rc))return lp(e,t,n);if(T(e,w.__yo_incr_rc))return up(e,t,n);if(T(e,w.__yo_rc_own))return cp(e,t,n);if(T(e,w.__yo_drop_array_element))return pp(e,t,n);if(T(e,w.__yo_dup_array_element))return fp(e,t,n);if(T(e,w.__yo_drop_tuple_element))return _p(e,t,n);if(T(e,w.__yo_dup_tuple_element))return dp(e,t,n);if(T(e,w.___dup))return mp(e,t,n);if(T(e,w.___drop))return yp(e,t,n);if(T(e,w.__yo_dyn_drop))return gp(e,t,n);if(T(e,w.__yo_dyn_dup))return hp(e,t,n);if(T(e,w.__yo_incr_rc_atomic))return vp(e,t,n);if(T(e,w.__yo_decr_rc_atomic))return Ep(e,t,n);if(T(e,w.__yo_iso_extract))return Kc(e,t,n);if(T(e,w.__yo_iso_dispose))return Xc(e,t,n);if(T(e,w.__yo_arc_dispose))return Dc(e,t,n);if(rl(e))return Qc(e,t,n);if(nl(e))return Mc(e,t,n);if(T(e,w.__yo_sometype_drop))return Tp(e,t,n);if(T(e,w.__yo_sometype_dup))return $p(e,t,n);if(T(e,w.__yo_gc_collect))return Yc(e,t,n);if(T(e,w.rc))return Cp(e,t,n);if(T(e,w.panic))return op(e,t,n);if(T(e,I.test))return"/* test declaration skipped */";if(T(e,w.__yo_thread_set_maximum_threads))return rp(e,t,n);if(T(e,I.op_and))return Sc(e,t,n);if(T(e,I.op_or))return Vc(e,t,n);if(Pt(e))return e.$?.awaitAnalysis?Uu(e,t,n):qu(e,t,n);if(T(e,I.dyn))return Hc(e,t,n);if(fn(e))return Uc(e,t,n);if(uu(e))return zc(e,t,n);if(cu(e)){let r=e.args[0];if(!r)return"// Error: spawn requires a Future argument";let o=n.emitter,a=S(r,t,n),s=r.$?.type,l=s?P(s,n):"void*",u="__spawn_future";return o.emitLine(`${t}// io.spawn \u2014 start cold Future without waiting`),o.emitLine(`${t}{`),o.emitLine(`${t} ${l} ${u} = ${a};`),o.emitLine(`${t} int __spawn_state = ${u}->state;`),o.emitLine(`${t} if (__spawn_state == -2) {`),o.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),o.emitLine(`${t} abort();`),o.emitLine(`${t} }`),Lo(r.$?.type)||(o.emitLine(`${t} if (__spawn_state == 0 && ${u}->__yo_resume_fn) {`),ey(e,u,`${t} `,n),o.emitLine(`${t} __yo_incr_rc((void*)${u});`),o.emitLine(`${t} ${u}->__yo_resume_fn((void*)${u});`),o.emitLine(`${t} }`)),o.emitLine(`${t}}`),""}if(T(e,I.return))return vc(e,t,n);if(T(e,I.escape))return ty(e,t,n);if(T(e,w.__yo_array_fill,2))return Rc(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return Gc(e,t,n);if(T(e,":=",2)){let r=jc(e,t,n);if(r!==void 0)return r}else{if(T(e,"=",2))return Pc(e,t,n);if(e.$?.value&&!_e(e.$?.value)&&!pe(e.$.type)&&!ct(e.$?.controlFlow)){let r=e.$.value;return Wt(r,n,e)}else{if(T(e,".",2))return ap(e,t,n);if(T(e,I.begin))return Bc(e,t,n);if(T(e,I.cond))return Wc(e,t,n);if(T(e,I.match))return Jc(e,t,n);if(T(e,w.__yo_address_of,1))return sp(e,t,n);if(T(e,I.tuple))return wp(e,t,n);if(T(e,I.array)){let r=Oc(e,t,n);if(r!==void 0)return r}else{if(T(e,I.recur))return bp(e,t,n);if(T(e,I.runtime,1))return S(e.args[0],t,n);if(T(e,w.sizeof,1))return kp(e,t,n);if(T(e,ei)){let r=e.$?.runtimeArgExprsInOrder||e.args;if(r){let i=n,o=r.map(a=>{let s=S(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){Ze(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return ve(l.$.variableName,l.$.env)}return s});return Io(e.func.token.value,o,e,n,t)}}else{if(T(e,I.while))return Lp(e,t,n);if(T(e,"->",2)&&F(e.args[0])&&T(e.args[0],I.fn)){let r=e.$?.value;return ie(r)?Wt(r,n):"// Error: Anonymous function missing function value"}else{if(T(e,w.consume))return qc(e,t,n);if(T(e,w.comptime_expect_error)||T(e,w.comptime_assert)||T(e,w.__yo_var_print_info)||T(e,w.__yo_var_is_owning_the_rc_value)||T(e,w.__yo_var_has_other_aliases))return"";if(T(e,I.open))return ep(e,t,n);{let r=ip(e,t,n);if(r!==void 0)return r}}}}}}if(F(e))throw new Error(`Unhandled function call: ${k(e)}`);return`// Failed to transpile ${k(e)}`}function Ip({expr:e,env:t,context:n}){ge(e,w.alignof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=sr(o),s;return a===null?s=H(yt(),{env:t,context:n}):s=Bt("Usize",a),e.$={env:t,type:yt(),value:s,pathCollection:[]},e}function xp({expr:e,env:t,context:n}){let r=T(e,I.op_and)?"and":"or",i=e.args;if(i.length===0){let u=at(r==="and");return e.$={env:t,type:Xe(),value:u,pathCollection:[],isAccessingProperty:!1},e}let o=t,a,s=!1,l=!1;for(let u=0;u<i.length;u++){let c=i[u],p=x({expr:c,env:o,context:{...n}});if(!p.$||!cn(p.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
10652
+ ${k(c)}`});o=p.$.env;let f=p.$.value;if(_e(f)){s=!0;continue}if(Re(f)){let _=f.value;if(r==="and"){if(!_){a=at(!1);break}!s&&!l&&(a=at(!0))}else{if(_){a=at(!0);break}!s&&!l&&(a=at(!1))}}else l=!0}return Re(a)||(l||s)&&(l?a=void 0:a=H(Xe(),{env:o,context:n})),e.$={env:o,type:Xe(),value:a,pathCollection:[],isAccessingProperty:!1},e}function Np({expr:e,env:t,context:n}){ge(e,w.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});o.$?.env&&(t=o.$.env);let a=o.$?.value;if(!R(a)||!be(a.value))throw m({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?Se(a):"undefined"}`});let s=a.value,l=x({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});l.$?.env&&(t=l.$.env);let u=l.$?.type,c=l.$?.value;if(!u)throw m({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw m({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!W({type:s.childType,env:t},{type:u,env:t}))throw m({token:i.token,errorMessage:`Fill value type ${A(u)} is not compatible with array element type ${A(s.childType)}`});let p=s.length;if(_e(p)){let g=H(s,{env:t,context:n});return e.$={env:t,type:s,value:g,pathCollection:[]},e}let f;if(Oe(p)){let g=p.value;if(f=typeof g=="bigint"?Number(g):g,!Number.isInteger(f)||f<0)throw m({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${f}`})}else throw m({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${Se(p)}`});let _=[];if(_e(c)){let g=H(s,{env:t,context:n});return e.$={env:t,type:s,value:g,pathCollection:[]},e}for(let g=0;g<f;g++)_.push(c);let d=Tr(s,_);return e.$={env:t,type:s,value:d,pathCollection:[]},e}function Sp({expr:e,env:t,context:n}){if(n.isValidatingFunctionDefinition||!n.isExecuting){let s=n.expectedType?.type??Y.type;return e.$={env:t,type:s,value:pe(s)?Y:H(s,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!Re(o.$.value))throw m({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
10653
10653
  ${k(r)}
10654
10654
 
10655
10655
  Value:
10656
- ${Se(o.$?.value)}`,isAssertionError:!0});if(o.$.value.value)return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e;if(i){let s=x({expr:i,env:t,context:{...n}});if(s.$?.value)throw m({token:e.token,errorMessage:qe(s.$.value)?s.$.value.value:Se(s.$.value),isAssertionError:!0})}throw m({token:e.token,errorMessage:`Assertion failed for "comptime_assert":
10657
- ${k(r)}`,isAssertionError:!0})}function Np({expr:e,env:t,context:n}){if(T(e,w.__yo_comptime_bool_not)||T(e,w.__yo_comptime_bool_to_comptime_string)){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!cn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
10658
- ${k(r)}`});t=r.$.env;let i;if(T(e,w.__yo_comptime_bool_not))Re(r.$.value)?i=at(!r.$.value.value):i=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_to_comptime_string))Re(r.$.value)?i=en(r.$.value.value.toString()):i=q(Dt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_comptime_bool_not" or "__yo_comptime_bool_to_comptime_string" function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else{let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!cn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
10656
+ ${Se(o.$?.value)}`,isAssertionError:!0});if(o.$.value.value)return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e;if(i){let s=x({expr:i,env:t,context:{...n}});if(s.$?.value)throw m({token:e.token,errorMessage:He(s.$.value)?s.$.value.value:Se(s.$.value),isAssertionError:!0})}throw m({token:e.token,errorMessage:`Assertion failed for "comptime_assert":
10657
+ ${k(r)}`,isAssertionError:!0})}function Vp({expr:e,env:t,context:n}){if(T(e,w.__yo_comptime_bool_not)||T(e,w.__yo_comptime_bool_to_comptime_string)){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!cn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
10658
+ ${k(r)}`});t=r.$.env;let i;if(T(e,w.__yo_comptime_bool_not))Re(r.$.value)?i=at(!r.$.value.value):i=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_to_comptime_string))Re(r.$.value)?i=en(r.$.value.value.toString()):i=H(Mt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_comptime_bool_not" or "__yo_comptime_bool_to_comptime_string" function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else{let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!cn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
10659
10659
  ${k(r)}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$||!cn(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
10660
- ${k(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,w.__yo_comptime_bool_and))Re(o)&&Re(a)?s=at(o.value&&a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_or))Re(o)&&Re(a)?s=at(o.value||a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_eq))Re(o)&&Re(a)?s=at(o.value===a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_neq))Re(o)&&Re(a)?s=at(o.value!==a.value):s=q(Xe(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${k(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Sp({expr:e,env:t,context:n}){let r=Ve(e.args[0]),i=e.args[1]?Ve(e.args[1]):void 0;try{x({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}if(i){let o=x({expr:i,env:t,context:{...n}});if(o.$?.value)throw m({token:e.token,errorMessage:qe(o.$.value)?o.$.value.value:Se(o.$.value)})}throw m({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
10661
- ${k(r)}`})}function ey(e){return{...e,forallParameters:e.forallParameters.map(t=>({...t,isCompileTimeOnly:!0})),parameters:e.parameters.map(t=>({...t,isCompileTimeOnly:!0})),return:{...e.return,isCompileTimeOnly:!0}}}function Ui(e,t,n){if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let i of e.type.parameters)if(jn(i.type,t))return;if(jn(e.type.return.type,t))return;let r=ey(e.type);try{let i=Ve(e.body),o=ze(r.env);for(let l of r.parameters){let{env:u}=_e({env:o,variable:{name:l.label,type:l.type,isCompileTimeOnly:!0,value:[q(l.type,{variableName:l.label,env:o,context:n})],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});o=u}let a={tag:"Function",type:r,body:i,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},s=gt({expr:i,env:o,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:a,evaluationEnv:o},expectedType:{type:r.return.type,env:o}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(s.$?.value!==void 0)return a.body=s,rt(o,!0),a;rt(o,!0);return}catch{return}}function Vp({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=x({expr:r,env:t,context:n});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!ie(o))throw m({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${Se(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=Ui(o,t,n);if(a)return e.$={env:t,type:a.type,value:a,pathCollection:[]},e;throw m({token:r.token,errorMessage:"comptime_fn: Failed to create compile-time version of function. The function body cannot be evaluated at compile time."})}function Dp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_car,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10662
- ${k(r)}`});if(!Lt(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10660
+ ${k(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,w.__yo_comptime_bool_and))Re(o)&&Re(a)?s=at(o.value&&a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_or))Re(o)&&Re(a)?s=at(o.value||a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_eq))Re(o)&&Re(a)?s=at(o.value===a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_bool_neq))Re(o)&&Re(a)?s=at(o.value!==a.value):s=H(Xe(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${k(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Dp({expr:e,env:t,context:n}){let r=Ve(e.args[0]),i=e.args[1]?Ve(e.args[1]):void 0;try{x({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}if(i){let o=x({expr:i,env:t,context:{...n}});if(o.$?.value)throw m({token:e.token,errorMessage:He(o.$.value)?o.$.value.value:Se(o.$.value)})}throw m({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
10661
+ ${k(r)}`})}function ry(e){return{...e,forallParameters:e.forallParameters.map(t=>({...t,isCompileTimeOnly:!0})),parameters:e.parameters.map(t=>({...t,isCompileTimeOnly:!0})),return:{...e.return,isCompileTimeOnly:!0}}}function Ui(e,t,n){if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let i of e.type.parameters)if(jn(i.type,t))return;if(jn(e.type.return.type,t))return;let r=ry(e.type);try{let i=Ve(e.body),o=Ue(r.env);for(let l of r.parameters){let{env:u}=fe({env:o,variable:{name:l.label,type:l.type,isCompileTimeOnly:!0,value:[H(l.type,{variableName:l.label,env:o,context:n})],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});o=u}let a={tag:"Function",type:r,body:i,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},s=gt({expr:i,env:o,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:a,evaluationEnv:o},expectedType:{type:r.return.type,env:o}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(s.$?.value!==void 0)return a.body=s,rt(o,!0),a;rt(o,!0);return}catch{return}}function Mp({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=x({expr:r,env:t,context:n});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!ie(o))throw m({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${Se(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=Ui(o,t,n);if(a)return e.$={env:t,type:a.type,value:a,pathCollection:[]},e;throw m({token:r.token,errorMessage:"comptime_fn: Failed to create compile-time version of function. The function body cannot be evaluated at compile time."})}function Op({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_car,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10662
+ ${k(r)}`});if(!At(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10663
10663
  ${k(r)}`});let o=i.$.type,a=i.$.value;if(!a)throw m({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
10664
- ${k(r)}`});if(e.$={env:i.$.env,type:o.childType,value:q(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function Mp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_cdr,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10665
- ${k(r)}`});if(!Lt(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10664
+ ${k(r)}`});if(e.$={env:i.$.env,type:o.childType,value:H(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function Rp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_cdr,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10665
+ ${k(r)}`});if(!At(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10666
10666
  ${k(r)}`});let o=i.$.type,a=i.$.value;if(!a)throw m({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
10667
- ${k(r)}`});if(e.$={env:i.$.env,type:o,value:q(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(a)){let s=a.elements;if(s.length>0)e.$.value=An(o.childType,[...s.slice(1)]);else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function Op({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_cons,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10667
+ ${k(r)}`});if(e.$={env:i.$.env,type:o,value:H(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(a)){let s=a.elements;if(s.length>0)e.$.value=An(o.childType,[...s.slice(1)]);else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function Pp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_cons,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10668
10668
  ${k(r)}`});t=r.$.env;let i=r.$.value;if(!i)throw m({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
10669
10669
  ${k(r)}`});let o=x({expr:e.args[1],env:t,context:{...n}});if(!o.$)throw m({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
10670
- ${k(o)}`});if(t=o.$.env,!Lt(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
10670
+ ${k(o)}`});if(t=o.$.env,!At(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
10671
10671
  ${k(o)}`});let a=o.$.value;if(!a)throw m({token:o.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" second argument, got:
10672
- ${k(o)}`});let s=o.$.type,l=r.$.type;if(!W({type:l,env:t},{type:s.childType,env:t}))throw m({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${A(l)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:q(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(a)){let u=[i,...a.elements];e.$.value=An(s.childType,u)}return e}function Rp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_append,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10673
- ${k(r)}`});if(t=r.$.env,!Lt(r.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" first argument, got:
10672
+ ${k(o)}`});let s=o.$.type,l=r.$.type;if(!W({type:l,env:t},{type:s.childType,env:t}))throw m({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${A(l)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:H(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(a)){let u=[i,...a.elements];e.$.value=An(s.childType,u)}return e}function Up({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_append,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10673
+ ${k(r)}`});if(t=r.$.env,!At(r.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" first argument, got:
10674
10674
  ${k(r)}`});let i=r.$.value;if(!i)throw m({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
10675
10675
  ${k(r)}`});let o=x({expr:e.args[1],env:t,context:{...n}});if(!o.$)throw m({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
10676
- ${k(o)}`});if(t=o.$.env,!Lt(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
10676
+ ${k(o)}`});if(t=o.$.env,!At(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
10677
10677
  ${k(o)}`});let a=o.$.value;if(!a)throw m({token:o.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" second argument, got:
10678
- ${k(o)}`});let s=r.$.type,l=o.$.type;if(!W({type:s,env:t},{type:l,env:t}))throw m({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${A(l.childType)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:q(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(i)&&Wn(a)){let u=[...i.elements,...a.elements];e.$.value=An(s.childType,u)}return e}function Pp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_length,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10679
- ${k(r)}`});if(!Lt(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10678
+ ${k(o)}`});let s=r.$.type,l=o.$.type;if(!W({type:s,env:t},{type:l,env:t}))throw m({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${A(l.childType)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:H(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(i)&&Wn(a)){let u=[...i.elements,...a.elements];e.$.value=An(s.childType,u)}return e}function zp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_length,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10679
+ ${k(r)}`});if(!At(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10680
10680
  ${k(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
10681
- ${k(r)}`});if(e.$={env:i.$.env,type:yt(),value:q(yt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(o)){let a=o.elements.length,s=Bt("Usize",a);e.$.value=s}return e}function Up({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_element_type,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10681
+ ${k(r)}`});if(e.$={env:i.$.env,type:yt(),value:H(yt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Wn(o)){let a=o.elements.length,s=Bt("Usize",a);e.$.value=s}return e}function Bp({expr:e,env:t,context:n}){ge(e,w.__yo_comptime_list_element_type,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10682
10682
  ${k(r)}`});if(!R(i.$?.value))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10683
- ${k(r)}`});let o=i.$.value.value;if(!Lt(o))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10684
- ${A(o)}`});let a=J(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function $a(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"comptime_int":return{min:-1/0,max:1/0};case"f32":case"f64":return;default:return}}function zp(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 xo(e){return vr(e)||Er(e)||pt(e)||Ft(e)||Mn(e)||e.isExtern==="c"&&M(e)}function ty(e){return e.type.variants.find(r=>r.name===e.variantName)?.discriminant}function ny(e){if(e&&Oe(e))return e.value}function ry(e){return vn(e)||Bo(e)||Oe(e)}function Ta(e,t,n){let r=$a(t);if(r){let i=e,o=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),c=typeof l=="bigint"?l:BigInt(Math.floor(l));return u<c}return s<l},a=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),c=typeof l=="bigint"?l:BigInt(Math.floor(l));return u>c}return s>l};if(o(i,r.min)||a(i,r.max))throw m({token:n,errorMessage:`Value ${e} is out of range for type ${A(t)} (${r.min} to ${r.max})`})}if(pt(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return Hn(i)}if(Ft(t)){let i=typeof e=="bigint"?Number(e):e;return Go(i)}if(Er(t)){let i=zp(t);if(i){let o=typeof e=="bigint"?Number(e):e;return Bt(i,o)}}if(vr(t)){let i=zp(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Bt(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return Bt(i,a)}}throw m({token:n,errorMessage:`Cannot create compile-time value for type ${A(t)}`})}function Bp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!xo(e))return;let o=x({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${k(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(ye(l)&&xt(s)){let c=ty(s);if(c===void 0)throw m({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(On(e,a)){let p=Ta(c,e,n.token);return n.$={env:a,type:e,value:p,pathCollection:[]},{expr:n,env:a}}}if(!xo(l)&&!pt(l)&&!Ft(l)&&!ye(l))throw m({token:t.token,errorMessage:`Cannot convert ${A(l)} to ${A(e)}. Expected a numeric type.`});let u=ny(s);if(u!==void 0&&On(e,a)){let c=Ta(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((pt(e)||Ft(e))&&u===void 0)throw m({token:t.token,errorMessage:`Cannot convert runtime value to ${A(e)}. Only compile-time values can be converted to ${A(e)}.`});if((pt(l)||Ft(l))&&On(e,a))if(u!==void 0){let c=Ta(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}else return n.$={env:a,type:e,value:q(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(Mn(e)||!ry(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:w.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection}};return Zo(n,c),{expr:n,env:a}}if(u!==void 0){let c=Ta(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}throw m({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function St(e){return e&&(vn(e)||Bo(e)||Oe(e))?e.value:null}function Sr(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Hn(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return Go(a)}if(Mn(t))return q(t,{env:n,context:r});let i=iy(t),o=ay(e,t);return Bt(i,o)}function iy(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";case"comptime_int":return"ComptimeFloat";case"comptime_float":return"ComptimeFloat";default:throw new Error(`Unsupported numeric type: ${e.tag}`)}}function il(e,t,n,r,i,o){let a=$a(t);if(a===void 0||a.min===-1/0&&a.max===1/0)return;let s=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let p=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return p<f}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let p=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return p>f}return u>c};if(s(e,a.min)||l(e,a.max))throw m({token:o,errorMessage:`Integer overflow in compile-time evaluation
10683
+ ${k(r)}`});let o=i.$.value.value;if(!At(o))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10684
+ ${A(o)}`});let a=Q(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function ba(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"comptime_int":return{min:-1/0,max:1/0};case"f32":case"f64":return;default:return}}function Gp(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 xo(e){return vr(e)||Er(e)||pt(e)||Lt(e)||Mn(e)||e.isExtern==="c"&&D(e)}function iy(e){return e.type.variants.find(r=>r.name===e.variantName)?.discriminant}function oy(e){if(e&&Oe(e))return e.value}function ay(e){return vn(e)||Bo(e)||Oe(e)}function Ca(e,t,n){let r=ba(t);if(r){let i=e,o=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),c=typeof l=="bigint"?l:BigInt(Math.floor(l));return u<c}return s<l},a=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),c=typeof l=="bigint"?l:BigInt(Math.floor(l));return u>c}return s>l};if(o(i,r.min)||a(i,r.max))throw m({token:n,errorMessage:`Value ${e} is out of range for type ${A(t)} (${r.min} to ${r.max})`})}if(pt(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return qn(i)}if(Lt(t)){let i=typeof e=="bigint"?Number(e):e;return Go(i)}if(Er(t)){let i=Gp(t);if(i){let o=typeof e=="bigint"?Number(e):e;return Bt(i,o)}}if(vr(t)){let i=Gp(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Bt(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return Bt(i,a)}}throw m({token:n,errorMessage:`Cannot create compile-time value for type ${A(t)}`})}function Wp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!xo(e))return;let o=x({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${k(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(ye(l)&&Nt(s)){let c=iy(s);if(c===void 0)throw m({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(On(e,a)){let p=Ca(c,e,n.token);return n.$={env:a,type:e,value:p,pathCollection:[]},{expr:n,env:a}}}if(!xo(l)&&!pt(l)&&!Lt(l)&&!ye(l))throw m({token:t.token,errorMessage:`Cannot convert ${A(l)} to ${A(e)}. Expected a numeric type.`});let u=oy(s);if(u!==void 0&&On(e,a)){let c=Ca(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((pt(e)||Lt(e))&&u===void 0)throw m({token:t.token,errorMessage:`Cannot convert runtime value to ${A(e)}. Only compile-time values can be converted to ${A(e)}.`});if((pt(l)||Lt(l))&&On(e,a))if(u!==void 0){let c=Ca(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}else return n.$={env:a,type:e,value:H(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(Mn(e)||!ay(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:w.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection}};return Zo(n,c),{expr:n,env:a}}if(u!==void 0){let c=Ca(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}throw m({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function Vt(e){return e&&(vn(e)||Bo(e)||Oe(e))?e.value:null}function Sr(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return qn(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return Go(a)}if(Mn(t))return H(t,{env:n,context:r});let i=sy(t),o=uy(e,t);return Bt(i,o)}function sy(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";case"comptime_int":return"ComptimeFloat";case"comptime_float":return"ComptimeFloat";default:throw new Error(`Unsupported numeric type: ${e.tag}`)}}function ol(e,t,n,r,i,o){let a=ba(t);if(a===void 0||a.min===-1/0&&a.max===1/0)return;let s=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let p=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return p<f}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let p=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return p>f}return u>c};if(s(e,a.min)||l(e,a.max))throw m({token:o,errorMessage:`Integer overflow in compile-time evaluation
10685
10685
  ${r} ${n==="multiply"?"*":n==="add"?"+":"-"} ${i} = ${e}
10686
- Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function oy(e){switch(e.tag){case"u8":case"i8":return 8;case"u16":case"i16":return 16;case"u32":case"i32":return 32;case"u64":case"i64":return 64;case"usize":case"isize":return 64;default:return null}}function ay(e,t){if(t.tag==="u64"||t.tag==="i64"||t.tag==="usize"||t.tag==="isize"){let r=typeof e=="bigint"?e:BigInt(Math.floor(e)),i=$a(t),o=typeof i.min=="bigint"?i.min:BigInt(i.min),a=typeof i.max=="bigint"?i.max:BigInt(i.max);return r<o?o:r>a?a:r}let n=typeof e=="bigint"?Number(e):e;switch(t.tag){case"u8":return Math.floor(Math.abs(n))%256;case"i8":return Math.max(-128,Math.min(127,Math.floor(n)));case"u16":return Math.floor(Math.abs(n))%65536;case"i16":return Math.max(-32768,Math.min(32767,Math.floor(n)));case"u32":return Math.floor(Math.abs(n))%4294967296;case"i32":return Math.max(-2147483648,Math.min(2147483647,Math.floor(n)));case"f32":case"f64":return n;default:return n}}function No(e,t,n,r,i,o){let a=St(e),s=St(t);return a===null||s===null?q(n,{env:i,context:o}):Sr(r(a,s),n,i,o)??q(n,{env:i,context:o})}function zi(e,t,n,r,i){let o=St(e),a=St(t);if(o===null||a===null)return q(Xe(),{env:r,context:i});if(typeof o=="bigint"||typeof a=="bigint"){let s=typeof o=="bigint"?o:BigInt(Math.floor(o)),l=typeof a=="bigint"?a:BigInt(Math.floor(a));return at(n(s,l))}return at(n(o,a))}function sy(e,t,n,r,i){let o=St(e);return o===null?q(t,{env:r,context:i}):Sr(n(o),t,r,i)??q(t,{env:r,context:i})}function Gp({expr:e,env:t,context:n}){let r=e.func.token.value,i=/^__yo_comptime_(u8|i8|u16|i16|u32|i32|u64|i64|usize|isize|f32|f64|int|float)_(add|sub|mul|div|mod|eq|neq|lt|lte|gt|gte|neg|to_comptime_string|bit_and|bit_or|bit_xor|bit_not|shl|shr)$/,o=r.match(i);if(!o)throw m({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=o,u=(()=>{switch(a){case"u8":return yi();case"i8":return gi();case"u16":return hi();case"i16":return vi();case"u32":return Ei();case"i32":return Cr();case"u64":return Ti();case"i64":return $i();case"usize":return yt();case"isize":return mi();case"f32":return Ci();case"f64":return br();case"int":case"comptime_int":return $r();case"float":case"comptime_float":return di();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let h=x({expr:e.args[0],env:t,context:{...n}});if(!h.$||!h.$.value)throw m({token:h.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
10687
- ${k(h)}`});t=h.$.env;let y;if(s==="neg")if(Oe(h.$.value)){if(u.tag==="u8"||u.tag==="u16"||u.tag==="u32"||u.tag==="u64"||u.tag==="usize")throw m({token:e.token,errorMessage:`Cannot apply negation to unsigned type: ${a}`});y=sy(h.$.value,u,v=>-v,t,n)}else y=q(u,{env:t,context:n});else if(s==="bit_not")if(Oe(h.$.value)||vn(h.$.value)){let v=St(h.$.value);if(v!==null){let E=typeof v=="bigint"?v:BigInt(Math.floor(v)),$=oy(u),C;if($!==null){let b=(1n<<BigInt($))-1n;if(C=E^b,hl(u)){let O=1n<<BigInt($-1);C>=O&&(C=C-(1n<<BigInt($)))}}else C=~E;y=Sr(C,u,t,n)??q(u,{env:t,context:n})}else y=q(u,{env:t,context:n})}else y=q(u,{env:t,context:n});else if(s==="to_comptime_string")if(Oe(h.$.value)){let v=St(h.$.value);v!==null?y=en(v.toString()):y=q(Dt(),{env:t,context:n})}else y=q(Dt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?Dt():u,value:y,pathCollection:[]},e}let c=x({expr:e.args[0],env:t,context:{...n}});if(!c.$||!c.$.value)throw m({token:c.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
10686
+ Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function ly(e){switch(e.tag){case"u8":case"i8":return 8;case"u16":case"i16":return 16;case"u32":case"i32":return 32;case"u64":case"i64":return 64;case"usize":case"isize":return 64;default:return null}}function uy(e,t){if(t.tag==="u64"||t.tag==="i64"||t.tag==="usize"||t.tag==="isize"){let r=typeof e=="bigint"?e:BigInt(Math.floor(e)),i=ba(t),o=typeof i.min=="bigint"?i.min:BigInt(i.min),a=typeof i.max=="bigint"?i.max:BigInt(i.max);return r<o?o:r>a?a:r}let n=typeof e=="bigint"?Number(e):e;switch(t.tag){case"u8":return Math.floor(Math.abs(n))%256;case"i8":return Math.max(-128,Math.min(127,Math.floor(n)));case"u16":return Math.floor(Math.abs(n))%65536;case"i16":return Math.max(-32768,Math.min(32767,Math.floor(n)));case"u32":return Math.floor(Math.abs(n))%4294967296;case"i32":return Math.max(-2147483648,Math.min(2147483647,Math.floor(n)));case"f32":case"f64":return n;default:return n}}function No(e,t,n,r,i,o){let a=Vt(e),s=Vt(t);return a===null||s===null?H(n,{env:i,context:o}):Sr(r(a,s),n,i,o)??H(n,{env:i,context:o})}function zi(e,t,n,r,i){let o=Vt(e),a=Vt(t);if(o===null||a===null)return H(Xe(),{env:r,context:i});if(typeof o=="bigint"||typeof a=="bigint"){let s=typeof o=="bigint"?o:BigInt(Math.floor(o)),l=typeof a=="bigint"?a:BigInt(Math.floor(a));return at(n(s,l))}return at(n(o,a))}function cy(e,t,n,r,i){let o=Vt(e);return o===null?H(t,{env:r,context:i}):Sr(n(o),t,r,i)??H(t,{env:r,context:i})}function qp({expr:e,env:t,context:n}){let r=e.func.token.value,i=/^__yo_comptime_(u8|i8|u16|i16|u32|i32|u64|i64|usize|isize|f32|f64|int|float)_(add|sub|mul|div|mod|eq|neq|lt|lte|gt|gte|neg|to_comptime_string|bit_and|bit_or|bit_xor|bit_not|shl|shr)$/,o=r.match(i);if(!o)throw m({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=o,u=(()=>{switch(a){case"u8":return yi();case"i8":return gi();case"u16":return hi();case"i16":return vi();case"u32":return Ei();case"i32":return Cr();case"u64":return Ti();case"i64":return $i();case"usize":return yt();case"isize":return mi();case"f32":return Ci();case"f64":return br();case"int":case"comptime_int":return $r();case"float":case"comptime_float":return di();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let h=x({expr:e.args[0],env:t,context:{...n}});if(!h.$||!h.$.value)throw m({token:h.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
10687
+ ${k(h)}`});t=h.$.env;let y;if(s==="neg")if(Oe(h.$.value)){if(u.tag==="u8"||u.tag==="u16"||u.tag==="u32"||u.tag==="u64"||u.tag==="usize")throw m({token:e.token,errorMessage:`Cannot apply negation to unsigned type: ${a}`});y=cy(h.$.value,u,v=>-v,t,n)}else y=H(u,{env:t,context:n});else if(s==="bit_not")if(Oe(h.$.value)||vn(h.$.value)){let v=Vt(h.$.value);if(v!==null){let E=typeof v=="bigint"?v:BigInt(Math.floor(v)),$=ly(u),C;if($!==null){let b=(1n<<BigInt($))-1n;if(C=E^b,vl(u)){let O=1n<<BigInt($-1);C>=O&&(C=C-(1n<<BigInt($)))}}else C=~E;y=Sr(C,u,t,n)??H(u,{env:t,context:n})}else y=H(u,{env:t,context:n})}else y=H(u,{env:t,context:n});else if(s==="to_comptime_string")if(Oe(h.$.value)){let v=Vt(h.$.value);v!==null?y=en(v.toString()):y=H(Mt(),{env:t,context:n})}else y=H(Mt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?Mt():u,value:y,pathCollection:[]},e}let c=x({expr:e.args[0],env:t,context:{...n}});if(!c.$||!c.$.value)throw m({token:c.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
10688
10688
  ${k(c)}`});t=c.$.env;let p=x({expr:e.args[1],env:t,context:{...n}});if(!p.$||!p.$.value)throw m({token:p.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
10689
- ${k(p)}`});t=p.$.env;let f=c.$.value,_=p.$.value,d,g;switch(s){case"add":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"||typeof y=="bigint"?(typeof h=="bigint"?h:BigInt(h))+(typeof y=="bigint"?y:BigInt(y)):h+y;il(v,u,"add",h,y,e.token)}d=No(f,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof E=="bigint"?E:BigInt(E);return $+C}return v+E},t,n),g=u;break}case"sub":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"||typeof y=="bigint"?(typeof h=="bigint"?h:BigInt(h))-(typeof y=="bigint"?y:BigInt(y)):h-y;il(v,u,"subtract",h,y,e.token)}d=No(f,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof E=="bigint"?E:BigInt(E);return $-C}return v-E},t,n),g=u;break}case"mul":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"||typeof y=="bigint"?(typeof h=="bigint"?h:BigInt(h))*(typeof y=="bigint"?y:BigInt(y)):h*y;il(v,u,"multiply",h,y,e.token)}d=No(f,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof E=="bigint"?E:BigInt(E);return $*C}return v*E},t,n),g=u;break}case"div":{let h=St(_);if(h===0||h===0n)throw m({token:p.token,errorMessage:`Division by zero in "${r}" operation`});d=No(f,_,u,(y,v)=>{if(typeof y=="bigint"||typeof v=="bigint"){let E=typeof y=="bigint"?y:BigInt(y),$=typeof v=="bigint"?v:BigInt(v);return E/$}return vr(u)||u.tag==="comptime_int"?Math.trunc(y/v):y/v},t,n),g=u;break}case"mod":{if(Er(u))throw m({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let h=St(_);if(h===0||h===0n)throw m({token:p.token,errorMessage:`Modulo by zero in "${r}" operation`});d=No(f,_,u,(y,v)=>{if(typeof y=="bigint"||typeof v=="bigint"){let E=typeof y=="bigint"?y:BigInt(y),$=typeof v=="bigint"?v:BigInt(v);return E%$}return y%v},t,n),g=u;break}case"eq":d=zi(f,_,(h,y)=>h===y,t,n),g=Xe();break;case"neq":d=zi(f,_,(h,y)=>h!==y,t,n),g=Xe();break;case"lt":d=zi(f,_,(h,y)=>h<y,t,n),g=Xe();break;case"lte":d=zi(f,_,(h,y)=>h<=y,t,n),g=Xe();break;case"gt":d=zi(f,_,(h,y)=>h>y,t,n),g=Xe();break;case"gte":d=zi(f,_,(h,y)=>h>=y,t,n),g=Xe();break;case"bit_and":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?y:BigInt(Math.floor(y));d=Sr(v&E,u,t,n)??q(u,{env:t,context:n})}else d=q(u,{env:t,context:n});g=u;break}case"bit_or":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?y:BigInt(Math.floor(y));d=Sr(v|E,u,t,n)??q(u,{env:t,context:n})}else d=q(u,{env:t,context:n});g=u;break}case"bit_xor":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?y:BigInt(Math.floor(y));d=Sr(v^E,u,t,n)??q(u,{env:t,context:n})}else d=q(u,{env:t,context:n});g=u;break}case"shl":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?Number(y):Math.floor(y);d=Sr(v<<BigInt(E),u,t,n)??q(u,{env:t,context:n})}else d=q(u,{env:t,context:n});g=u;break}case"shr":{let h=St(f),y=St(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?Number(y):Math.floor(y);d=Sr(v>>BigInt(E),u,t,n)??q(u,{env:t,context:n})}else d=q(u,{env:t,context:n});g=u;break}default:throw m({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:g,value:d,pathCollection:[]},e}function Wp({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:'Expected at least 1 argument for "comptime_print", got 0'});let r=[];for(let i of e.args){let o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${k(i)}`});t=o.$.env,qe(o.$.value)?r.push(o.$.value.value):r.push(Se(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Hp({expr:e,env:t,context:n}){if(T(e,w.__yo_comptime_string_length)||T(e,w.__yo_comptime_string_to_upper)||T(e,w.__yo_comptime_string_to_lower)){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!$t(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
10690
- ${k(r)}`});t=r.$.env;let i;if(T(e,w.__yo_comptime_string_length))qe(r.$.value)?i=Hn(BigInt(r.$.value.value.length)):i=q($r(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_to_upper))qe(r.$.value)?i=en(r.$.value.value.toUpperCase()):i=q(Dt(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_to_lower))qe(r.$.value)?i=en(r.$.value.value.toLowerCase()):i=q(Dt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected string unary function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else if(T(e,w.__yo_comptime_string_slice)){if(e.args.length<2||e.args.length>3)throw m({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!$t(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" string argument, got:
10689
+ ${k(p)}`});t=p.$.env;let f=c.$.value,_=p.$.value,d,g;switch(s){case"add":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"||typeof y=="bigint"?(typeof h=="bigint"?h:BigInt(h))+(typeof y=="bigint"?y:BigInt(y)):h+y;ol(v,u,"add",h,y,e.token)}d=No(f,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof E=="bigint"?E:BigInt(E);return $+C}return v+E},t,n),g=u;break}case"sub":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"||typeof y=="bigint"?(typeof h=="bigint"?h:BigInt(h))-(typeof y=="bigint"?y:BigInt(y)):h-y;ol(v,u,"subtract",h,y,e.token)}d=No(f,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof E=="bigint"?E:BigInt(E);return $-C}return v-E},t,n),g=u;break}case"mul":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"||typeof y=="bigint"?(typeof h=="bigint"?h:BigInt(h))*(typeof y=="bigint"?y:BigInt(y)):h*y;ol(v,u,"multiply",h,y,e.token)}d=No(f,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof E=="bigint"?E:BigInt(E);return $*C}return v*E},t,n),g=u;break}case"div":{let h=Vt(_);if(h===0||h===0n)throw m({token:p.token,errorMessage:`Division by zero in "${r}" operation`});d=No(f,_,u,(y,v)=>{if(typeof y=="bigint"||typeof v=="bigint"){let E=typeof y=="bigint"?y:BigInt(y),$=typeof v=="bigint"?v:BigInt(v);return E/$}return vr(u)||u.tag==="comptime_int"?Math.trunc(y/v):y/v},t,n),g=u;break}case"mod":{if(Er(u))throw m({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let h=Vt(_);if(h===0||h===0n)throw m({token:p.token,errorMessage:`Modulo by zero in "${r}" operation`});d=No(f,_,u,(y,v)=>{if(typeof y=="bigint"||typeof v=="bigint"){let E=typeof y=="bigint"?y:BigInt(y),$=typeof v=="bigint"?v:BigInt(v);return E%$}return y%v},t,n),g=u;break}case"eq":d=zi(f,_,(h,y)=>h===y,t,n),g=Xe();break;case"neq":d=zi(f,_,(h,y)=>h!==y,t,n),g=Xe();break;case"lt":d=zi(f,_,(h,y)=>h<y,t,n),g=Xe();break;case"lte":d=zi(f,_,(h,y)=>h<=y,t,n),g=Xe();break;case"gt":d=zi(f,_,(h,y)=>h>y,t,n),g=Xe();break;case"gte":d=zi(f,_,(h,y)=>h>=y,t,n),g=Xe();break;case"bit_and":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?y:BigInt(Math.floor(y));d=Sr(v&E,u,t,n)??H(u,{env:t,context:n})}else d=H(u,{env:t,context:n});g=u;break}case"bit_or":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?y:BigInt(Math.floor(y));d=Sr(v|E,u,t,n)??H(u,{env:t,context:n})}else d=H(u,{env:t,context:n});g=u;break}case"bit_xor":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?y:BigInt(Math.floor(y));d=Sr(v^E,u,t,n)??H(u,{env:t,context:n})}else d=H(u,{env:t,context:n});g=u;break}case"shl":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?Number(y):Math.floor(y);d=Sr(v<<BigInt(E),u,t,n)??H(u,{env:t,context:n})}else d=H(u,{env:t,context:n});g=u;break}case"shr":{let h=Vt(f),y=Vt(_);if(h!==null&&y!==null){let v=typeof h=="bigint"?h:BigInt(Math.floor(h)),E=typeof y=="bigint"?Number(y):Math.floor(y);d=Sr(v>>BigInt(E),u,t,n)??H(u,{env:t,context:n})}else d=H(u,{env:t,context:n});g=u;break}default:throw m({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:g,value:d,pathCollection:[]},e}function Hp({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:'Expected at least 1 argument for "comptime_print", got 0'});let r=[];for(let i of e.args){let o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${k(i)}`});t=o.$.env,He(o.$.value)?r.push(o.$.value.value):r.push(Se(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Yp({expr:e,env:t,context:n}){if(T(e,w.__yo_comptime_string_length)||T(e,w.__yo_comptime_string_to_upper)||T(e,w.__yo_comptime_string_to_lower)){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!$t(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
10690
+ ${k(r)}`});t=r.$.env;let i;if(T(e,w.__yo_comptime_string_length))He(r.$.value)?i=qn(BigInt(r.$.value.value.length)):i=H($r(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_to_upper))He(r.$.value)?i=en(r.$.value.value.toUpperCase()):i=H(Mt(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_to_lower))He(r.$.value)?i=en(r.$.value.value.toLowerCase()):i=H(Mt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected string unary function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else if(T(e,w.__yo_comptime_string_slice)){if(e.args.length<2||e.args.length>3)throw m({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!$t(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" string argument, got:
10691
10691
  ${k(r)}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$||!pt(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" start argument, got:
10692
10692
  ${k(i)}`});t=i.$.env;let o;if(e.args.length===3){if(o=x({expr:e.args[2],env:t,context:{...n}}),!o.$||!pt(o.$.type)||!o.$.value)throw m({token:o.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" end argument, got:
10693
- ${k(o)}`});t=o.$.env}let a;if(qe(r.$.value)&&vn(i.$.value)){let s=r.$.value.value,l=i.$.value.value,u=typeof l=="bigint"?Number(l):l,c=s.length;if(o&&o.$&&o.$.value&&vn(o.$.value)){let p=o.$.value.value;c=typeof p=="bigint"?Number(p):p}a=en(s.slice(u,c))}else a=q(Dt(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!$t(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
10693
+ ${k(o)}`});t=o.$.env}let a;if(He(r.$.value)&&vn(i.$.value)){let s=r.$.value.value,l=i.$.value.value,u=typeof l=="bigint"?Number(l):l,c=s.length;if(o&&o.$&&o.$.value&&vn(o.$.value)){let p=o.$.value.value;c=typeof p=="bigint"?Number(p):p}a=en(s.slice(u,c))}else a=H(Mt(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!$t(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
10694
10694
  ${k(r)}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$||!$t(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" second argument, got:
10695
- ${k(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,w.__yo_comptime_string_concat))qe(o)&&qe(a)?s=en(o.value+a.value):s=q(Dt(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_eq))qe(o)&&qe(a)?s=at(o.value===a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_neq))qe(o)&&qe(a)?s=at(o.value!==a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_lt))qe(o)&&qe(a)?s=at(o.value<a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_lte))qe(o)&&qe(a)?s=at(o.value<=a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_gt))qe(o)&&qe(a)?s=at(o.value>a.value):s=q(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_gte))qe(o)&&qe(a)?s=at(o.value>=a.value):s=q(Xe(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${k(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function qp({expr:e,env:t,context:n}){ge(e,w.consume,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=un(i,t),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function So(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Yp(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function jp(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function Kp(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function Bi(e,t,n,r,i){if(!i.isEvaluatingFunctionBodyOrAsyncBlock)return;let o;if(i.isEvaluatingFunctionBodyOrAsyncBlock&&(o=i.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!o||t>=o.frames.length)return;let a,s=-1;for(let c=0;c<o.frames.length;c++){let p=o.frames[c]?.variables.find(f=>f.name===e);if(p){a=p,s=c;break}}if(!a||s<0||a.isCompileTimeOnly)return;i.capturedVariables||(i.capturedVariables=new Map);let l=i.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;i.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function ly(e){let t=e;if(F(t)&&T(t,"?=",2)&&(t=t.args[0]),F(t)&&T(t,"=",2)&&(t=t.args[0]),!F(t)||!T(t,":",2))return;let n=t.args[0],r=t.args[1];if(!F(n)||!T(n,I.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!U(i)||!We(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function ol({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){let o,a=r,s=!1,l=!1,u,c,p,f,_,d=e,g,h,y,v;if(F(d)&&T(d,"=")){let N=d.args[0];if(N&&F(N)&&T(N,":",2))u=N,c=d.args[1],v=c,d=u;else throw m({token:d.func.token,errorMessage:'Use "?=" for default parameter values. Assigned values require an explicit type: (name : Type) = value.'})}if(F(d)&&T(d,":=",2))throw m({token:d.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(F(d)&&T(d,"?=",2)&&(c=d.args[1],u=d.args[0],y=c,d=u),F(d)&&T(d,":",2)?(c=d.args[1],u=d.args[0],g=c):v?u=d:y?(g=void 0,u=d):g=d,!g)throw m({token:e.token,errorMessage:y?"Default parameters must specify a type: (name : Type) ?= value.":'Expected an explicit type annotation for function parameter. Use "(name : Type)".'});if(u){if(F(u)&&T(u,I.comptime)){if(r)throw m({token:u.token,errorMessage:'"forall"/"using" parameters are "comptime" by default. Not needed to use "comptime" modifier.'});if(a=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "comptime" , got ${u.args.length}`});u=u.args[0]}if(F(u)&&T(u,"own")){if(l=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "own", got ${u.args.length}`});u=u.args[0]}if(F(u)&&T(u,I.quote)){if(s=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${u.args.length}`});if(a)throw m({token:u.token,errorMessage:'Cannot use "comptime" with "quote" (or ":"). "quote" parameters means compile-time only, so "comptime" is redundant.'});a=!0,u=u.args[0]}if(!U(u)||!We(u))throw m({token:u.token,errorMessage:`Expected identifier for parameter label, got ${k(u)}`});o=u.token.value,h=u}if(!o)throw m({token:e.token,errorMessage:`Expected a label for function parameter, got ${k(e)}`});if(o==="Self")throw m({token:h?.token??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let N=x({expr:v,env:t,context:{...n}});if(!N.$)throw m({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${k(v)}`});t=N.$.env;let D=N.$.value;if(!R(D))throw m({token:v.token,errorMessage:`Expected type value for = assignment, got ${Se(D)}`});if(p=et(),_=D,!a)throw m({token:v.token,errorMessage:`Assigned value (=) is only allowed for compile-time parameters. Use "comptime(${o})" or put this in "forall(...)".`})}if(g){let N=x({expr:g,env:t,context:{...n}});if(!N.$)throw m({token:g.token,errorMessage:`(3) Failed to evaluate type expression: ${k(g)}`});t=N.$.env;let D=N.$.value;if(R(D))p=D.value;else throw m({token:g.token,errorMessage:`Expected type for function parameter, got ${Se(D)}`})}if(y){let N=x({expr:y,env:t,context:{...n}});if(N.$?.env&&(t=N.$?.env),f=N.$?.value,!f)throw m({token:y.token,errorMessage:`Expected a compile-time known value for default parameter, got ${k(y)}`});if(!p)p=f.type;else if(!W({type:p,env:t},{type:f.type,env:t}))throw m({token:y.token,errorMessage:`Incompatible default value type:
10695
+ ${k(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,w.__yo_comptime_string_concat))He(o)&&He(a)?s=en(o.value+a.value):s=H(Mt(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_eq))He(o)&&He(a)?s=at(o.value===a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_neq))He(o)&&He(a)?s=at(o.value!==a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_lt))He(o)&&He(a)?s=at(o.value<a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_lte))He(o)&&He(a)?s=at(o.value<=a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_gt))He(o)&&He(a)?s=at(o.value>a.value):s=H(Xe(),{env:t,context:n});else if(T(e,w.__yo_comptime_string_gte))He(o)&&He(a)?s=at(o.value>=a.value):s=H(Xe(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${k(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function jp({expr:e,env:t,context:n}){ge(e,w.consume,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=un(i,t),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function So(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Kp(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function Xp(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function Qp(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function Bi(e,t,n,r,i){if(!i.isEvaluatingFunctionBodyOrAsyncBlock)return;let o;if(i.isEvaluatingFunctionBodyOrAsyncBlock&&(o=i.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!o||t>=o.frames.length)return;let a,s=-1;for(let c=0;c<o.frames.length;c++){let p=o.frames[c]?.variables.find(f=>f.name===e);if(p){a=p,s=c;break}}if(!a||s<0||a.isCompileTimeOnly)return;i.capturedVariables||(i.capturedVariables=new Map);let l=i.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;i.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function py(e){let t=e;if(F(t)&&T(t,"?=",2)&&(t=t.args[0]),F(t)&&T(t,"=",2)&&(t=t.args[0]),!F(t)||!T(t,":",2))return;let n=t.args[0],r=t.args[1];if(!F(n)||!T(n,I.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!U(i)||!qe(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function al({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){let o,a=r,s=!1,l=!1,u,c,p,f,_,d=e,g,h,y,v;if(F(d)&&T(d,"=")){let N=d.args[0];if(N&&F(N)&&T(N,":",2))u=N,c=d.args[1],v=c,d=u;else throw m({token:d.func.token,errorMessage:'Use "?=" for default parameter values. Assigned values require an explicit type: (name : Type) = value.'})}if(F(d)&&T(d,":=",2))throw m({token:d.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(F(d)&&T(d,"?=",2)&&(c=d.args[1],u=d.args[0],y=c,d=u),F(d)&&T(d,":",2)?(c=d.args[1],u=d.args[0],g=c):v?u=d:y?(g=void 0,u=d):g=d,!g)throw m({token:e.token,errorMessage:y?"Default parameters must specify a type: (name : Type) ?= value.":'Expected an explicit type annotation for function parameter. Use "(name : Type)".'});if(u){if(F(u)&&T(u,I.comptime)){if(r)throw m({token:u.token,errorMessage:'"forall"/"using" parameters are "comptime" by default. Not needed to use "comptime" modifier.'});if(a=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "comptime" , got ${u.args.length}`});u=u.args[0]}if(F(u)&&T(u,"own")){if(l=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "own", got ${u.args.length}`});u=u.args[0]}if(F(u)&&T(u,I.quote)){if(s=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${u.args.length}`});if(a)throw m({token:u.token,errorMessage:'Cannot use "comptime" with "quote" (or ":"). "quote" parameters means compile-time only, so "comptime" is redundant.'});a=!0,u=u.args[0]}if(!U(u)||!qe(u))throw m({token:u.token,errorMessage:`Expected identifier for parameter label, got ${k(u)}`});o=u.token.value,h=u}if(!o)throw m({token:e.token,errorMessage:`Expected a label for function parameter, got ${k(e)}`});if(o==="Self")throw m({token:h?.token??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let N=x({expr:v,env:t,context:{...n}});if(!N.$)throw m({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${k(v)}`});t=N.$.env;let M=N.$.value;if(!R(M))throw m({token:v.token,errorMessage:`Expected type value for = assignment, got ${Se(M)}`});if(p=Je(),_=M,!a)throw m({token:v.token,errorMessage:`Assigned value (=) is only allowed for compile-time parameters. Use "comptime(${o})" or put this in "forall(...)".`})}if(g){let N=x({expr:g,env:t,context:{...n}});if(!N.$)throw m({token:g.token,errorMessage:`(3) Failed to evaluate type expression: ${k(g)}`});t=N.$.env;let M=N.$.value;if(R(M))p=M.value;else throw m({token:g.token,errorMessage:`Expected type for function parameter, got ${Se(M)}`})}if(y){let N=x({expr:y,env:t,context:{...n}});if(N.$?.env&&(t=N.$?.env),f=N.$?.value,!f)throw m({token:y.token,errorMessage:`Expected a compile-time known value for default parameter, got ${k(y)}`});if(!p)p=f.type;else if(!W({type:p,env:t},{type:f.type,env:t}))throw m({token:y.token,errorMessage:`Incompatible default value type:
10696
10696
  - Expected: ${A(p)}
10697
10697
  - Got : ${A(f.type)}`})}if(!p)throw m({token:e.token,errorMessage:"Expected type for function parameter}"});if(a&&jn(p,t))throw m({token:u?.token??e.token,errorMessage:`Parameter marked as "comptime" but type is not available at compile-time:
10698
10698
  ${A(p)}`});if(!a&&Yn(p,t))throw m({token:u?.token??e.token,errorMessage:`Parameter marked as runtime but type is not available at runtime:
10699
- ${A(p)}`});if(!a&&H(p)&&(p.forallParameters.length>0||p.parameters.some(N=>N.isCompileTimeOnly)))throw m({token:u?.token??e.token,errorMessage:`Runtime function parameters with generic function types are not allowed:
10699
+ ${A(p)}`});if(!a&&q(p)&&(p.forallParameters.length>0||p.parameters.some(N=>N.isCompileTimeOnly)))throw m({token:u?.token??e.token,errorMessage:`Runtime function parameters with generic function types are not allowed:
10700
10700
  ${A(p)}
10701
10701
 
10702
10702
  Generic functions must be compile-time known to enable monomorphization. Consider using:
10703
- comptime(${o}) : ${A(p)}`})}if(s&&!Ct(p)&&!Rr(p))throw m({token:u?.token??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${A(p)}`});let E=a?q(p,{variableName:o,env:t,context:n}):void 0;if(n.isUnsafeFunctionType||sr(p,g?.token??e.token),xe(p)&&!p.receiverType)throw m({token:g?.token??e.token,errorMessage:`Trait type without receiver type set cannot be used as function parameter type.
10703
+ comptime(${o}) : ${A(p)}`})}if(s&&!Ct(p)&&!Rr(p))throw m({token:u?.token??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${A(p)}`});let E=a?H(p,{variableName:o,env:t,context:n}):void 0;if(n.isUnsafeFunctionType||lr(p,g?.token??e.token),xe(p)&&!p.receiverType)throw m({token:g?.token??e.token,errorMessage:`Trait type without receiver type set cannot be used as function parameter type.
10704
10704
 
10705
10705
  Please consider using "<:" to specify the receiver type for a trait type, for example:
10706
10706
 
@@ -10714,82 +10714,85 @@ use_id :: (fn(forall(T : Type),
10714
10714
  ) -> T) {
10715
10715
  return val.id();
10716
10716
  }
10717
- `});let $=j(t,o),C=$.length>0?$[$.length-1]:void 0,L=$.find(N=>{if(N.value&&R(N.value[0])){let D=N.value[0];if(M(D.value))return!0}return!1}),b=E,O=p;if(L){let N=L.value[0],D=N.value;if(_&&R(_)&&M(_.value)){let V=_.value,z=[...D.requiredTraits];for(let ne of V.requiredTraits)z.some(G=>G.traitType.id===ne.traitType.id)||z.push(ne);let ee=[...D.negativeTraits??[]];if(V.negativeTraits)for(let ne of V.negativeTraits)ee.some(G=>G.traitType.id===ne.traitType.id)||ee.push(ne);D.requiredTraits=z,D.negativeTraits=ee}b=N,O=Tt(D)}else if(C&&C.isCompileTimeOnly&&C.value&&C.frameLevel===t.frames.length-1)b=C.value[0],O=C.type;else{let{env:N}=_e({env:t,variable:{name:o,type:p,isCompileTimeOnly:a,value:_?[_]:a?[q(p,{variableName:o,env:t,context:n})]:void 0,token:u?.token??e.token,initializedAtToken:u?.token??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=N}return u&&(u.$={env:t,type:O,value:b,pathCollection:[]}),u!==e&&g!==e&&(e.$={env:t,type:Y.type,value:Y,pathCollection:[]}),Et(p),{parameter:{label:o,type:p,exprs:Zr({expr:e,labelExpr:h,typeExpr:g,defaultValueExpr:y,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:_},env:t}}function uy({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!F(i)||!T(i,"<:",2))continue;let o=i.args[0];if(U(o)){let s=o.token.value;if(j(t,s).length===0){let u=mn(et(),s,{env:t,context:n}),c=J(u),{env:p}=_e({env:t,variable:{name:s,type:Tt(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=p,o.$={env:t,type:Tt(u),value:c,pathCollection:[]}}}let a=al({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function Xp({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=cy({lhsExpr:i.lhsExpr,traitExpr:i.traitExpr,originalConstraintExpr:i.originalConstraintExpr,env:t,context:n});t=o.env,o.success||r.push(i)}return{env:t,pendingConstraints:r}}function Qp({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=x({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!R(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!xe(s.value))throw m({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(s.value)}`});let l=s.value,u=Nt({targetType:e,traitType:l,env:i});if(n){if(u)throw m({token:r.token,errorMessage:`Type ${A(e)} must NOT implement ${A(l)}, but it does.`})}else if(!u)throw m({token:r.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(l)}.`});return{env:i,success:!0}}function cy({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;F(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(U(e)){let p=e.token.value,f=j(r,p);if(f.length===0)return{env:r,success:!1};let _=f[f.length-1];if(_.value&&R(_.value[0])&&M(_.value[0].value))s=_.value[0].value;else if(_.value&&R(_.value[0]))try{return Qp({concreteType:_.value[0].value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}else return{env:r,success:!1}}else{let p;try{p=x({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!p.$||!p.$.value||!R(p.$.value))return{env:r,success:!1};r=p.$.env;let f=p.$.value;if(!M(f.value))try{return Qp({concreteType:f.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=f.value}let l;try{l=x({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!R(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!xe(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value;if(c.receiverType)throw m({token:a.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return r=Un({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function al({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!F(o)||!T(o,"<:",2))throw m({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${k(o)}`});let a=o.args[0],s=o.args[1],l;if(U(a)){let c=a.token.value,p=j(t,c);if(p.length>0){let f=p[p.length-1];if(f.value&&R(f.value[0])&&M(f.value[0].value))l=f.value[0].value;else if(f.value&&R(f.value[0])){let _=f.value[0].value;t=Zp({concreteType:_,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}else throw m({token:a.token,errorMessage:`Expected type for left-hand side of where clause constraint, got variable "${c}".`})}else{l=mn(et(),c,{env:t,context:n});let f=J(l),{env:_}=_e({env:t,variable:{name:c,type:Tt(l),isCompileTimeOnly:!0,value:[f],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,a.$={env:t,type:Tt(l),value:f,pathCollection:[]}}}else{let c=x({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!R(c.$.value))throw m({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let p=c.$.value;if(!M(p.value)){t=Zp({concreteType:p.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=p.value}let u=[];F(s)&&T(s,I.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let p=u[c],f=!1,_=p;F(p)&&T(p,"!")&&p.args.length===1&&(f=!0,_=p.args[0]);let d;try{d=x({expr:_,env:t,context:{...n}})}catch(y){if(r){i.push({lhsExpr:a,traitExpr:p,originalConstraintExpr:o});continue}throw y}if(!d.$||!d.$.value||!R(d.$.value)){if(r){i.push({lhsExpr:a,traitExpr:p,originalConstraintExpr:o});continue}throw m({token:_.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=d.$.env;let g=d.$.value;if(!xe(g.value))throw m({token:_.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(g.value)}`});let h=g.value;if(h.receiverType)throw m({token:_.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Un({env:t,someType:l,traitType:h,isNegated:f})}}return{env:t,pendingTraits:i}}function Vr({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:al({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function Zp({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(F(t)&&T(t,I.tuple))for(let a of t.args)F(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else F(t)&&T(t,"!")&&t.args.length===1?o.push({expr:t.args[0],isNegated:!0}):o.push({expr:t,isNegated:!1});for(let{expr:a,isNegated:s}of o){let l=x({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!R(l.$.value))throw m({token:a.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."});r=l.$.env;let u=l.$.value;if(!xe(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value,p=Nt({targetType:e,traitType:c,env:r});if(s){if(p)throw m({token:n.token,errorMessage:`Type ${A(e)} must NOT implement ${A(c)}, but it does.`})}else if(!p)throw m({token:n.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(c)}.`})}return r}function sl({parameterExprs:e,env:t,context:n}){t=ze(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let f=e[0];if(F(f)&&T(f,I.forall)){let _=f.args;for(let d=0;d<_.length;d++){let g=_[d];if(F(g)&&T(g,"...")&&g.args.length===1&&U(g.args[0])){let E=g.args[0].token.value;if(i.find(N=>N.label===E))throw m({token:g.token,errorMessage:`Duplicate label "${E}" in type parameter`});let C=Qr(E,t),L=an(1),{env:b}=_e({env:t,variable:{name:E,type:L,isCompileTimeOnly:!0,value:[J(C)],token:g.args[0].token,initializedAtToken:g.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=b,g.$={env:t,type:L,value:J(C),pathCollection:[]};let O={label:E,type:L,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:Zr({expr:g,labelExpr:g.args[0],typeExpr:g.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(O);continue}let{parameter:h,env:y}=ol({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(E=>E.label===h.label))throw m({token:g.token,errorMessage:`Duplicate label "${h.label}" in type parameter`});i.push(h),t=y}}}let u=0;for(let f=0;f<e.length;f++){let _=e[f];if(F(_)&&T(_,I.using)){if(u++,u>1)throw m({token:_.token,errorMessage:'Only one "using(...)" clause is allowed per function signature. Combine all implicit parameters into a single using(), e.g.: using(a : TypeA, b : TypeB)'});let d=_.args;for(let g=0;g<d.length;g++){let h=d[g];if(F(h)&&T(h,"...")&&h.args.length===1&&U(h.args[0])){let N=h.args[0].token.value,V=j(t,N).at(-1);if(!V)throw m({token:h.token,errorMessage:`Effect row variable "${N}" not found in scope. Declare it with forall(..., ...(${N}))`});let z,ee=V.value?.[0];if(ee&&R(ee)&&_t(ee.value)){let G=ee.value;for(let Z of G.implicitParameters)o.push({...Z,isEffectRowSpread:!1});continue}else if(ee&&R(ee)){if(!(M(ee.value)&&ee.value.isEffectsRow||_t(ee.value)))throw m({token:h.token,errorMessage:`"...(${N})" requires "${N}" to be a forall-declared effect row variable, but it resolves to a concrete type. Use individual effect types directly in using(), e.g. using(name : ${N}) instead of using(...(${N}))`});z=ee.value}else if(ee&&fe(ee)&&_t(ee.type)){let G=ee.type;for(let Z of G.implicitParameters)o.push({...Z,isEffectRowSpread:!1});continue}else if(ee&&fe(ee))z=Qr(N,t);else throw m({token:h.token,errorMessage:`Effect row variable "${N}" has invalid value. Expected a type.`});let ne={label:N,type:z,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Zr({expr:h,labelExpr:h.args[0],typeExpr:h.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(ne);continue}if(!(F(h)&&(T(h,":")||T(h,"=")||T(h,"?=")||T(h,":="))))throw m({token:h.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:v,env:E}=ol({expr:h,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(N=>N.label===v.label))throw m({token:h.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter (already in forall)`});if(o.find(N=>N.label===v.label))throw m({token:h.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter`});let L={...v,isCompileTimeOnly:!0,isImplicit:!0};o.push(L);let O=E.frames[E.frames.length-1].variables.find(N=>N.name===v.label);O&&(O.isImplicit=!0),t=E}}}let c=new Set;for(let f=0;f<e.length;f++){let _=e[f];if(F(_)&&(T(_,I.forall)||T(_,I.using)||T(_,I.where)||T(_,"...")))continue;let d=ly(_);if(d){let g=x({expr:d.typeExpr,env:t,context:{...n}});if(g.$?.env&&(t=g.$.env),!g.$||!g.$.value||!R(g.$.value))continue;let h=g.$.value.value,y=q(h,{variableName:d.name,env:t,context:n}),{env:v}=_e({env:t,variable:{name:d.name,type:h,isCompileTimeOnly:!0,value:[y],token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=v,c.add(f)}}let p=[];if(e.length>0){let f=e[e.length-1];if(F(f)&&T(f,I.where)){if(s=f.args,s.length===0)throw m({token:f.token,errorMessage:"The where clause must have at least one constraint."});let _=uy({constraintExprs:s,env:t,context:n});t=_.env,p=_.pendingConstraints}}for(let f=0;f<e.length;f++){let _=e[f];if(F(_)&&T(_,I.forall)){if(f!==0)throw m({token:_.token,errorMessage:`Expected type parameters to be the first argument, got ${f+1}`});continue}else{if(F(_)&&T(_,I.using))continue;if(F(_)&&T(_,I.where)){if(f!==e.length-1)throw m({token:_.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(U(_)&&ht(_,"...")||F(_)&&T(_,"...")){l=!0;let d=!1,g=!1,h="...",y=_,v=Y.type;if(F(_)){let C=_.args[0];if(C){if(F(C)&&T(C,I.comptime))throw d=!0,C.args.length!==1?m({token:C.token,errorMessage:`Expected one argument for "comptime" , got ${C.args.length}`}):(y=C.args[0],h=C.args[0].token.value,v=Y.type,m({token:C.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(F(C)&&T(C,I.quote)){if(d=!0,g=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});y=C.args[0],h=C.args[0].token.value,v=yo()}else throw We(C)?(y=C,h=C.token.value,v=Y.type,m({token:C.token,errorMessage:"...(param_name) is not supported yet."})):m({token:C.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${k(C)}`})}else throw m({token:_.token,errorMessage:`Expected a name for variadic parameter, got ${k(_)}`})}else v=Y.type;let E=qt(A(v)),$={exprs:{expr:_,labelExpr:y,typeExpr:E},isCompileTimeOnly:d,isQuote:g,label:h,type:v,isOwningTheRcValue:!1,isImplicit:!1};if(a=$,h!=="..."){let{env:C}=_e({env:t,variable:{name:h,type:v,isCompileTimeOnly:$.isCompileTimeOnly,value:d?[q(v,{variableName:h,env:t,context:n})]:void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheRcValue:$.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,y.$={env:t,type:v,value:d?q(v,{variableName:h,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw m({token:_.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:d,env:g}=ol({expr:_,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(y=>y.label===d.label))throw m({token:F(_)?_.args[0]?.token??_.token:_.token,errorMessage:`Duplicate label "${d.label}" in function parameter`});if(r.push(d),t=g,p.length>0){let y=Xp({pendingConstraints:p,env:t,context:n});t=y.env,p=y.pendingConstraints}}}}if(r.forEach((f,_)=>{if(f.isQuote&&Rr(f.type)&&_!==r.length-1)throw m({token:f.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),p.length>0){let f=Xp({pendingConstraints:p,env:t,context:n});if(t=f.env,f.pendingConstraints.length>0){let _=f.pendingConstraints[0];al({constraintExprs:[_.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function Ca({expr:e,env:t,context:n}){if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> for function type, got:
10717
+ `});let $=j(t,o),C=$.length>0?$[$.length-1]:void 0,L=$.find(N=>{if(N.value&&R(N.value[0])){let M=N.value[0];if(D(M.value))return!0}return!1}),b=E,O=p;if(L){let N=L.value[0],M=N.value;if(_&&R(_)&&D(_.value)){let V=_.value,z=[...M.requiredTraits];for(let ne of V.requiredTraits)z.some(G=>G.traitType.id===ne.traitType.id)||z.push(ne);let ee=[...M.negativeTraits??[]];if(V.negativeTraits)for(let ne of V.negativeTraits)ee.some(G=>G.traitType.id===ne.traitType.id)||ee.push(ne);M.requiredTraits=z,M.negativeTraits=ee}b=N,O=Tt(M)}else if(C&&C.isCompileTimeOnly&&C.value&&C.frameLevel===t.frames.length-1)b=C.value[0],O=C.type;else{let{env:N}=fe({env:t,variable:{name:o,type:p,isCompileTimeOnly:a,value:_?[_]:a?[H(p,{variableName:o,env:t,context:n})]:void 0,token:u?.token??e.token,initializedAtToken:u?.token??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=N}return u&&(u.$={env:t,type:O,value:b,pathCollection:[]}),u!==e&&g!==e&&(e.$={env:t,type:Y.type,value:Y,pathCollection:[]}),Et(p),{parameter:{label:o,type:p,exprs:Zr({expr:e,labelExpr:h,typeExpr:g,defaultValueExpr:y,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:_},env:t}}function fy({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!F(i)||!T(i,"<:",2))continue;let o=i.args[0];if(U(o)){let s=o.token.value;if(j(t,s).length===0){let u=mn(Je(),s,{env:t,context:n}),c=Q(u),{env:p}=fe({env:t,variable:{name:s,type:Tt(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=p,o.$={env:t,type:Tt(u),value:c,pathCollection:[]}}}let a=sl({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function Zp({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=_y({lhsExpr:i.lhsExpr,traitExpr:i.traitExpr,originalConstraintExpr:i.originalConstraintExpr,env:t,context:n});t=o.env,o.success||r.push(i)}return{env:t,pendingConstraints:r}}function Jp({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=x({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!R(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!xe(s.value))throw m({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(s.value)}`});let l=s.value,u=Ft({targetType:e,traitType:l,env:i});if(n){if(u)throw m({token:r.token,errorMessage:`Type ${A(e)} must NOT implement ${A(l)}, but it does.`})}else if(!u)throw m({token:r.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(l)}.`});return{env:i,success:!0}}function _y({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;F(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(U(e)){let p=e.token.value,f=j(r,p);if(f.length===0)return{env:r,success:!1};let _=f[f.length-1];if(_.value&&R(_.value[0])&&D(_.value[0].value))s=_.value[0].value;else if(_.value&&R(_.value[0]))try{return Jp({concreteType:_.value[0].value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}else return{env:r,success:!1}}else{let p;try{p=x({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!p.$||!p.$.value||!R(p.$.value))return{env:r,success:!1};r=p.$.env;let f=p.$.value;if(!D(f.value))try{return Jp({concreteType:f.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=f.value}let l;try{l=x({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!R(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!xe(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value;if(c.receiverType)throw m({token:a.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return r=Un({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function sl({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!F(o)||!T(o,"<:",2))throw m({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${k(o)}`});let a=o.args[0],s=o.args[1],l;if(U(a)){let c=a.token.value,p=j(t,c);if(p.length>0){let f=p[p.length-1];if(f.value&&R(f.value[0])&&D(f.value[0].value))l=f.value[0].value;else if(f.value&&R(f.value[0])){let _=f.value[0].value;t=ef({concreteType:_,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}else throw m({token:a.token,errorMessage:`Expected type for left-hand side of where clause constraint, got variable "${c}".`})}else{l=mn(Je(),c,{env:t,context:n});let f=Q(l),{env:_}=fe({env:t,variable:{name:c,type:Tt(l),isCompileTimeOnly:!0,value:[f],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,a.$={env:t,type:Tt(l),value:f,pathCollection:[]}}}else{let c=x({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!R(c.$.value))throw m({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let p=c.$.value;if(!D(p.value)){t=ef({concreteType:p.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=p.value}let u=[];F(s)&&T(s,I.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let p=u[c],f=!1,_=p;F(p)&&T(p,"!")&&p.args.length===1&&(f=!0,_=p.args[0]);let d;try{d=x({expr:_,env:t,context:{...n}})}catch(y){if(r){i.push({lhsExpr:a,traitExpr:p,originalConstraintExpr:o});continue}throw y}if(!d.$||!d.$.value||!R(d.$.value)){if(r){i.push({lhsExpr:a,traitExpr:p,originalConstraintExpr:o});continue}throw m({token:_.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=d.$.env;let g=d.$.value;if(!xe(g.value))throw m({token:_.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(g.value)}`});let h=g.value;if(h.receiverType)throw m({token:_.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Un({env:t,someType:l,traitType:h,isNegated:f})}}return{env:t,pendingTraits:i}}function Vr({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:sl({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function ef({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(F(t)&&T(t,I.tuple))for(let a of t.args)F(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else F(t)&&T(t,"!")&&t.args.length===1?o.push({expr:t.args[0],isNegated:!0}):o.push({expr:t,isNegated:!1});for(let{expr:a,isNegated:s}of o){let l=x({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!R(l.$.value))throw m({token:a.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."});r=l.$.env;let u=l.$.value;if(!xe(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value,p=Ft({targetType:e,traitType:c,env:r});if(s){if(p)throw m({token:n.token,errorMessage:`Type ${A(e)} must NOT implement ${A(c)}, but it does.`})}else if(!p)throw m({token:n.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(c)}.`})}return r}function ll({parameterExprs:e,env:t,context:n}){t=Ue(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let f=e[0];if(F(f)&&T(f,I.forall)){let _=f.args;for(let d=0;d<_.length;d++){let g=_[d];if(F(g)&&T(g,"...")&&g.args.length===1&&U(g.args[0])){let E=g.args[0].token.value;if(i.find(N=>N.label===E))throw m({token:g.token,errorMessage:`Duplicate label "${E}" in type parameter`});let C=Qr(E,t),L=an(1),{env:b}=fe({env:t,variable:{name:E,type:L,isCompileTimeOnly:!0,value:[Q(C)],token:g.args[0].token,initializedAtToken:g.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=b,g.$={env:t,type:L,value:Q(C),pathCollection:[]};let O={label:E,type:L,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:Zr({expr:g,labelExpr:g.args[0],typeExpr:g.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(O);continue}let{parameter:h,env:y}=al({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(E=>E.label===h.label))throw m({token:g.token,errorMessage:`Duplicate label "${h.label}" in type parameter`});i.push(h),t=y}}}let u=0;for(let f=0;f<e.length;f++){let _=e[f];if(F(_)&&T(_,I.using)){if(u++,u>1)throw m({token:_.token,errorMessage:'Only one "using(...)" clause is allowed per function signature. Combine all implicit parameters into a single using(), e.g.: using(a : TypeA, b : TypeB)'});let d=_.args;for(let g=0;g<d.length;g++){let h=d[g];if(F(h)&&T(h,"...")&&h.args.length===1&&U(h.args[0])){let N=h.args[0].token.value,V=j(t,N).at(-1);if(!V)throw m({token:h.token,errorMessage:`Effect row variable "${N}" not found in scope. Declare it with forall(..., ...(${N}))`});let z,ee=V.value?.[0];if(ee&&R(ee)&&_t(ee.value)){let G=ee.value;for(let J of G.implicitParameters)o.push({...J,isEffectRowSpread:!1});continue}else if(ee&&R(ee)){if(!(D(ee.value)&&ee.value.isEffectsRow||_t(ee.value)))throw m({token:h.token,errorMessage:`"...(${N})" requires "${N}" to be a forall-declared effect row variable, but it resolves to a concrete type. Use individual effect types directly in using(), e.g. using(name : ${N}) instead of using(...(${N}))`});z=ee.value}else if(ee&&_e(ee)&&_t(ee.type)){let G=ee.type;for(let J of G.implicitParameters)o.push({...J,isEffectRowSpread:!1});continue}else if(ee&&_e(ee))z=Qr(N,t);else throw m({token:h.token,errorMessage:`Effect row variable "${N}" has invalid value. Expected a type.`});let ne={label:N,type:z,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Zr({expr:h,labelExpr:h.args[0],typeExpr:h.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(ne);continue}if(!(F(h)&&(T(h,":")||T(h,"=")||T(h,"?=")||T(h,":="))))throw m({token:h.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:v,env:E}=al({expr:h,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(N=>N.label===v.label))throw m({token:h.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter (already in forall)`});if(o.find(N=>N.label===v.label))throw m({token:h.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter`});let L={...v,isCompileTimeOnly:!0,isImplicit:!0};o.push(L);let O=E.frames[E.frames.length-1].variables.find(N=>N.name===v.label);O&&(O.isImplicit=!0),t=E}}}let c=new Set;for(let f=0;f<e.length;f++){let _=e[f];if(F(_)&&(T(_,I.forall)||T(_,I.using)||T(_,I.where)||T(_,"...")))continue;let d=py(_);if(d){let g=x({expr:d.typeExpr,env:t,context:{...n}});if(g.$?.env&&(t=g.$.env),!g.$||!g.$.value||!R(g.$.value))continue;let h=g.$.value.value,y=H(h,{variableName:d.name,env:t,context:n}),{env:v}=fe({env:t,variable:{name:d.name,type:h,isCompileTimeOnly:!0,value:[y],token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=v,c.add(f)}}let p=[];if(e.length>0){let f=e[e.length-1];if(F(f)&&T(f,I.where)){if(s=f.args,s.length===0)throw m({token:f.token,errorMessage:"The where clause must have at least one constraint."});let _=fy({constraintExprs:s,env:t,context:n});t=_.env,p=_.pendingConstraints}}for(let f=0;f<e.length;f++){let _=e[f];if(F(_)&&T(_,I.forall)){if(f!==0)throw m({token:_.token,errorMessage:`Expected type parameters to be the first argument, got ${f+1}`});continue}else{if(F(_)&&T(_,I.using))continue;if(F(_)&&T(_,I.where)){if(f!==e.length-1)throw m({token:_.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(U(_)&&ht(_,"...")||F(_)&&T(_,"...")){l=!0;let d=!1,g=!1,h="...",y=_,v=Y.type;if(F(_)){let C=_.args[0];if(C){if(F(C)&&T(C,I.comptime))throw d=!0,C.args.length!==1?m({token:C.token,errorMessage:`Expected one argument for "comptime" , got ${C.args.length}`}):(y=C.args[0],h=C.args[0].token.value,v=Y.type,m({token:C.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(F(C)&&T(C,I.quote)){if(d=!0,g=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});y=C.args[0],h=C.args[0].token.value,v=yo()}else throw qe(C)?(y=C,h=C.token.value,v=Y.type,m({token:C.token,errorMessage:"...(param_name) is not supported yet."})):m({token:C.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${k(C)}`})}else throw m({token:_.token,errorMessage:`Expected a name for variadic parameter, got ${k(_)}`})}else v=Y.type;let E=Ht(A(v)),$={exprs:{expr:_,labelExpr:y,typeExpr:E},isCompileTimeOnly:d,isQuote:g,label:h,type:v,isOwningTheRcValue:!1,isImplicit:!1};if(a=$,h!=="..."){let{env:C}=fe({env:t,variable:{name:h,type:v,isCompileTimeOnly:$.isCompileTimeOnly,value:d?[H(v,{variableName:h,env:t,context:n})]:void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheRcValue:$.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,y.$={env:t,type:v,value:d?H(v,{variableName:h,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw m({token:_.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:d,env:g}=al({expr:_,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(y=>y.label===d.label))throw m({token:F(_)?_.args[0]?.token??_.token:_.token,errorMessage:`Duplicate label "${d.label}" in function parameter`});if(r.push(d),t=g,p.length>0){let y=Zp({pendingConstraints:p,env:t,context:n});t=y.env,p=y.pendingConstraints}}}}if(r.forEach((f,_)=>{if(f.isQuote&&Rr(f.type)&&_!==r.length-1)throw m({token:f.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),p.length>0){let f=Zp({pendingConstraints:p,env:t,context:n});if(t=f.env,f.pendingConstraints.length>0){let _=f.pendingConstraints[0];sl({constraintExprs:[_.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function ka({expr:e,env:t,context:n}){if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> for function type, got:
10718
10718
  ${k(e)}
10719
10719
 
10720
10720
  Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],i=e.args[1],o=[];if(F(r)&&(T(r,I.fn)||T(r,I.unsafe_fn)))o=r.args;else throw m({token:r.token,errorMessage:`Expected a "fn" or "unsafe_fn" call for parameter list, got:
10721
- ${k(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:p}=sl({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=p;let f,_=!1,d=!1,g=i;if(F(i)&&T(i,":",2)){let $=i.args[0];if(g=i.args[1],F($)&&T($,I.comptime)){if(_=!0,$.args.length!==1)throw m({token:$.token,errorMessage:`Expected one argument for "comptime" , got ${$.args.length}`});$=$.args[0]}if(F($)&&T($,I.unquote)){if(d=!0,$.args.length!==1)throw m({token:$.token,errorMessage:`Expected one argument for "unquote", got ${$.args.length}`});if(_)throw m({token:$.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,$=$.args[0]}if(F($)&&T($,I.quote))throw m({token:$.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!We($))throw m({token:$.token,errorMessage:`Expected a valid variable name for return label, got ${k($)}`});f=$.token.value}else{if(F(g)&&T(g,I.comptime)){if(_=!0,g.args.length!==1)throw m({token:g.token,errorMessage:`Expected one argument for "comptime" , got ${g.args.length}`});g=g.args[0]}if(F(g)&&T(g,I.unquote)){if(d=!0,g.args.length!==1)throw m({token:g.token,errorMessage:`Expected one argument for "unquote", got ${g.args.length}`});if(_)throw m({token:g.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,g=g.args[0]}if(F(g)&&T(g,I.quote))throw m({token:g.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let h=x({expr:g,env:t,context:{...n,isEvaluatingFunctionType:!0}}),y,v=h.$?.value;if(R(v))y=v.value;else throw m({token:g.token,errorMessage:`Expected a type for function return type, got:
10721
+ ${k(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:p}=ll({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=p;let f,_=!1,d=!1,g=i;if(F(i)&&T(i,":",2)){let $=i.args[0];if(g=i.args[1],F($)&&T($,I.comptime)){if(_=!0,$.args.length!==1)throw m({token:$.token,errorMessage:`Expected one argument for "comptime" , got ${$.args.length}`});$=$.args[0]}if(F($)&&T($,I.unquote)){if(d=!0,$.args.length!==1)throw m({token:$.token,errorMessage:`Expected one argument for "unquote", got ${$.args.length}`});if(_)throw m({token:$.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,$=$.args[0]}if(F($)&&T($,I.quote))throw m({token:$.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!qe($))throw m({token:$.token,errorMessage:`Expected a valid variable name for return label, got ${k($)}`});f=$.token.value}else{if(F(g)&&T(g,I.comptime)){if(_=!0,g.args.length!==1)throw m({token:g.token,errorMessage:`Expected one argument for "comptime" , got ${g.args.length}`});g=g.args[0]}if(F(g)&&T(g,I.unquote)){if(d=!0,g.args.length!==1)throw m({token:g.token,errorMessage:`Expected one argument for "unquote", got ${g.args.length}`});if(_)throw m({token:g.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,g=g.args[0]}if(F(g)&&T(g,I.quote))throw m({token:g.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let h=x({expr:g,env:t,context:{...n,isEvaluatingFunctionType:!0}}),y,v=h.$?.value;if(R(v))y=v.value;else throw m({token:g.token,errorMessage:`Expected a type for function return type, got:
10722
10722
  ${k(g)}`});if(Yn(y,t)&&!_&&(y=ut({type:y,expectedType:void 0,expr:void 0,env:t}),Yn(y,t)))throw m({token:g.token,errorMessage:`Expected a "comptime" for return type, like:
10723
10723
 
10724
10724
  comptime(${k(g)})
10725
10725
 
10726
10726
  Given type:
10727
- ${A(y)}`});if(n.isUnsafeFunctionType||sr(y,g.token),_&&jn(y,t))throw m({token:g.token,errorMessage:`Unexpected "comptime" for return type of ${A(y)} which can only be used at runtime.`});if(_){for(let $ of a)if(!$.isCompileTimeOnly)throw m({token:vl($),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(d&&!Ct(y))throw m({token:g.token,errorMessage:`Expected Expr type for "unquote" return type, got ${A(y)}`});let E=Ii({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:y,typeExpr:g,isCompileTimeOnly:_,isUnquote:d,label:f??`fn_return_${Be(t.modulePath)}`},env:rt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType});return t=rt(t,!0),e.$={env:t,value:J(E),type:Tt(E),pathCollection:[]},e}function Vo({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let s=r??(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),l=x({expr:Ve(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,isEvaluatingFunctionBodyOrAsyncBlock:s?{kind:"function-body",type:s,evaluationEnv:t}:void 0}});if(!R(l.$?.value))throw m({token:o.token,errorMessage:`Expected type for parameter, got:
10727
+ ${A(y)}`});if(n.isUnsafeFunctionType||lr(y,g.token),_&&jn(y,t))throw m({token:g.token,errorMessage:`Unexpected "comptime" for return type of ${A(y)} which can only be used at runtime.`});if(_){for(let $ of a)if(!$.isCompileTimeOnly)throw m({token:El($),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(d&&!Ct(y))throw m({token:g.token,errorMessage:`Expected Expr type for "unquote" return type, got ${A(y)}`});let E=Ii({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:y,typeExpr:g,isCompileTimeOnly:_,isUnquote:d,label:f??`fn_return_${Be(t.modulePath)}`},env:rt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType});return t=rt(t,!0),e.$={env:t,value:Q(E),type:Tt(E),pathCollection:[]},e}function Vo({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let s=r??(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),l=x({expr:Ve(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,isEvaluatingFunctionBodyOrAsyncBlock:s?{kind:"function-body",type:s,evaluationEnv:t}:void 0}});if(!R(l.$?.value))throw m({token:o.token,errorMessage:`Expected type for parameter, got:
10728
10728
  ${k(l)}`});return l.$?.env&&(t=l.$?.env),{parameterType:l.$?.value.value,calleeEnv:t}}else if(a){let s=x({expr:Ve(a),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType}});if(!s.$)throw m({token:a.token,errorMessage:`Failed to evaluate default value expression:
10729
- ${k(a)}`});return t=s.$?.env,{parameterType:s.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function si({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){let i=e.return,o=x({expr:Ve(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType}}),a,s=o.$?.value;if(R(s))a=s.value;else throw m({token:r?.token??se,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return M(a)&&(a=Mt(t,a)),{returnType:a,calleeEnv:o.$?.env??t}}function Jp({expr:e,env:t,context:n}){let r=e.func,i=e.args;if(!U(r)||r.token.value!=="_")throw m({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
10730
- ${k(r)}`});let o=Kr(t),a=o.fields,s=[],l=[];for(let f=0;f<i.length;f++){let _=i[f],d,g=_,h;if(F(_)&&T(_,":",2)){if(d=_.args[0],g=_.args[1],!We(d))throw m({token:d.token,errorMessage:`Expected identifier for anonymous struct field label, got:
10731
- ${k(d)}`});h=d.token.value}{let y=x({expr:g,env:t,context:{...n,SelfType:o}});if(Rt(y,n),!y.$)throw m({token:g.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${k(g)}`});t=y.$.env;let v=y.$.type,E={exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:g},type:v,label:h??`__field_${Be(t.modulePath)}`};a.push(E),l.push(y),y.$.value?s.push(y.$?.value):s.push(void 0),d&&(d.$=y.$)}}t=Yr({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(f=>!f)?void 0:In(o,s);let c=J(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:p}=_e({env:t,variable:{name:o.id,type:c.type,value:[c],initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheRcValue:!1}});return t=p,e.$={env:t,type:o,value:u,pathCollection:[],runtimeArgExprsInOrder:l},Pe(e,!0),e}function ef({expr:e,env:t,context:n}){let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Arc:
10729
+ ${k(a)}`});return t=s.$?.env,{parameterType:s.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function si({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){let i=e.return,o=x({expr:Ve(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType}}),a,s=o.$?.value;if(R(s))a=s.value;else throw m({token:r?.token??ae,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return D(a)&&(a=St(t,a)),{returnType:a,calleeEnv:o.$?.env??t}}function tf({expr:e,env:t,context:n}){let r=e.func,i=e.args;if(!U(r)||r.token.value!=="_")throw m({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
10730
+ ${k(r)}`});let o=Kr(t),a=o.fields,s=[],l=[];for(let f=0;f<i.length;f++){let _=i[f],d,g=_,h;if(F(_)&&T(_,":",2)){if(d=_.args[0],g=_.args[1],!qe(d))throw m({token:d.token,errorMessage:`Expected identifier for anonymous struct field label, got:
10731
+ ${k(d)}`});h=d.token.value}{let y=x({expr:g,env:t,context:{...n,SelfType:o}});if(Rt(y,n),!y.$)throw m({token:g.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${k(g)}`});t=y.$.env;let v=y.$.type,E={exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:g},type:v,label:h??`__field_${Be(t.modulePath)}`};a.push(E),l.push(y),y.$.value?s.push(y.$?.value):s.push(void 0),d&&(d.$=y.$)}}t=Yr({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(f=>!f)?void 0:In(o,s);let c=Q(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:p}=fe({env:t,variable:{name:o.id,type:c.type,value:[c],initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheRcValue:!1}});return t=p,e.$={env:t,type:o,value:u,pathCollection:[],runtimeArgExprsInOrder:l},Pe(e,!0),e}function nf({expr:e,env:t,context:n}){let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Arc:
10732
10732
  ${k(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Arc expects a type as argument, but got:
10733
- ${k(r)}`});let a=i.$.value.value,s=tu(a,t);t=Vl({arcType:s,env:t,context:n});let l=J(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function tf({expr:e,env:t,context:n,arcType:r}){let i=e.args[0],o=x({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Arc value constructor:
10734
- ${k(i)}`});return t=o.$.env,t=un(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Pe(e,!0),e}function nf({expr:e,arrayType:t,arrayValue:n,sliceValue:r,argExprs:i,callerEnv:o,context:a}){if(i.length!==1)throw m({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${i.length}.`});if(U(e.args[0])&&ht(e.args[0],":")||F(e.args[0])&&T(e.args[0],":")){let s=ra(t.childType);if(U(e.args[0]))return n?{value:qo(s,[n],0,n.elements.length),type:s,callerEnv:o}:r?{value:r,type:s,callerEnv:o}:{value:void 0,type:s,callerEnv:o};{let l=e.args[0].args[0],u=e.args[0].args[1],c=x({expr:l,env:o,context:{...a,expectedType:{type:yt(),env:o}}});if(!c.$)throw m({token:l.token,errorMessage:`Failed to evaluate start expression:
10733
+ ${k(r)}`});let a=i.$.value.value,s=nu(a,t);t=Dl({arcType:s,env:t,context:n});let l=Q(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function rf({expr:e,env:t,context:n,arcType:r}){let i=e.args[0],o=x({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Arc value constructor:
10734
+ ${k(i)}`});return t=o.$.env,t=un(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Pe(e,!0),e}function of({expr:e,arrayType:t,arrayValue:n,sliceValue:r,argExprs:i,callerEnv:o,context:a}){if(i.length!==1)throw m({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${i.length}.`});if(U(e.args[0])&&ht(e.args[0],":")||F(e.args[0])&&T(e.args[0],":")){let s=ra(t.childType);if(U(e.args[0]))return n?{value:Ho(s,[n],0,n.elements.length),type:s,callerEnv:o}:r?{value:r,type:s,callerEnv:o}:{value:void 0,type:s,callerEnv:o};{let l=e.args[0].args[0],u=e.args[0].args[1],c=x({expr:l,env:o,context:{...a,expectedType:{type:yt(),env:o}}});if(!c.$)throw m({token:l.token,errorMessage:`Failed to evaluate start expression:
10735
10735
  ${k(l)}`});o=c.$.env;let p=c.$.type;if(!W({type:yt(),env:o},{type:p,env:o}))throw m({token:l.token,errorMessage:`Expected usize for array start index, got:
10736
10736
  ${A(p)}`});let f=x({expr:u,env:o,context:{...a,expectedType:{type:yt(),env:o}}});if(!f.$)throw m({token:u.token,errorMessage:`Failed to evaluate end expression:
10737
10737
  ${k(u)}`});o=f.$.env;let _=f.$.type;if(!W({type:yt(),env:o},{type:_,env:o}))throw m({token:u.token,errorMessage:`Expected usize for array end index, got:
10738
- ${A(_)}`});if(n&&Oe(c.$.value)&&Oe(f.$.value)){let d=c.$.value.value,g=f.$.value.value,h=typeof d=="bigint"?Number(d):d,y=typeof g=="bigint"?Number(g):g;if(h<0||h>n.elements.length)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${h}. Expected index in range [0, ${n.elements.length}].`});if(y<h||y>n.elements.length)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${y}. Expected index in range [${h}, ${n.elements.length}].`});return{value:qo(s,[n],h,y),type:s,callerEnv:o}}if(r&&Oe(c.$.value)&&Oe(f.$.value)){let d=c.$.value.value,g=f.$.value.value,h=typeof d=="bigint"?Number(d):d,y=typeof g=="bigint"?Number(g):g,v=r.endIndex-r.startIndex;if(h<0||h>v)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${h}. Expected index in range [0, ${v}].`});if(y<h||y>v)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${y}. Expected index in range [${h}, ${v}].`});let E=r.startIndex+h,$=r.startIndex+y;return{value:qo(s,r.sourceArray,E,$),type:s,callerEnv:o}}return{value:void 0,type:s,callerEnv:o}}}else{let s=i[0],l=x({expr:s,env:o,context:{...a,expectedType:{type:yt(),env:o}}});if(!l.$)throw m({token:s.token,errorMessage:`Failed to evaluate argument expression:
10738
+ ${A(_)}`});if(n&&Oe(c.$.value)&&Oe(f.$.value)){let d=c.$.value.value,g=f.$.value.value,h=typeof d=="bigint"?Number(d):d,y=typeof g=="bigint"?Number(g):g;if(h<0||h>n.elements.length)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${h}. Expected index in range [0, ${n.elements.length}].`});if(y<h||y>n.elements.length)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${y}. Expected index in range [${h}, ${n.elements.length}].`});return{value:Ho(s,[n],h,y),type:s,callerEnv:o}}if(r&&Oe(c.$.value)&&Oe(f.$.value)){let d=c.$.value.value,g=f.$.value.value,h=typeof d=="bigint"?Number(d):d,y=typeof g=="bigint"?Number(g):g,v=r.endIndex-r.startIndex;if(h<0||h>v)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${h}. Expected index in range [0, ${v}].`});if(y<h||y>v)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${y}. Expected index in range [${h}, ${v}].`});let E=r.startIndex+h,$=r.startIndex+y;return{value:Ho(s,r.sourceArray,E,$),type:s,callerEnv:o}}return{value:void 0,type:s,callerEnv:o}}}else{let s=i[0],l=x({expr:s,env:o,context:{...a,expectedType:{type:yt(),env:o}}});if(!l.$)throw m({token:s.token,errorMessage:`Failed to evaluate argument expression:
10739
10739
  ${k(s)}`});o=l.$.env;let u=l.$.type;if(!W({type:yt(),env:o},{type:u,env:o}))throw m({token:s.token,errorMessage:`Expected usize for array index, got:
10740
- ${A(u)}`});let c=t.childType;if(r)if(l.$.value)if(Oe(l.$.value)){let p=l.$.value.value,f=typeof p=="bigint"?Number(p):p,_=r.endIndex-r.startIndex;if(f<0||f>=_)throw m({token:s.token,errorMessage:`Slice index out of bounds: ${f}. Expected index in range [0, ${_-1}].`});let d=r.startIndex+f,g=r.sourceArray[0];return{value:g.elements[d],index:f,arrayElementRef:{arrayValue:g,index:d},type:c,callerEnv:o}}else return{value:q(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:ut({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(Oe(l.$.value)){let p=l.$.value.value,f=typeof p=="bigint"?Number(p):p;if(f<0||f>=n.elements.length)throw m({token:s.token,errorMessage:`Array index out of bounds: ${f}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[f],index:f,arrayElementRef:{arrayValue:n,index:f},type:c,callerEnv:o}}else return{value:q(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:ut({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function rf({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(Oe(o)){if(s=Number(o.value),n.length!==s)throw m({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(fe(o)){s=n.length;let f=Hn(BigInt(s));a=Qn(t.childType,f)}else throw m({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${o}.`});let l=[],u=r,c=a.childType;for(let f=0;f<n.length;f++){let _=n[f],d=x({expr:_,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!d.$)throw m({token:_.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(Rt(d,i),u=d.$.env,f===0&&be(c)&&fe(c.length)&&be(d.$.type)&&(c=d.$.type,a=Qn(c,a.length)),!W({type:c,env:u},{type:d.$.type,env:u}))throw m({token:_.token,errorMessage:`Array element at index ${f} has incompatible type:
10740
+ ${A(u)}`});let c=t.childType;if(r)if(l.$.value)if(Oe(l.$.value)){let p=l.$.value.value,f=typeof p=="bigint"?Number(p):p,_=r.endIndex-r.startIndex;if(f<0||f>=_)throw m({token:s.token,errorMessage:`Slice index out of bounds: ${f}. Expected index in range [0, ${_-1}].`});let d=r.startIndex+f,g=r.sourceArray[0];return{value:g.elements[d],index:f,arrayElementRef:{arrayValue:g,index:d},type:c,callerEnv:o}}else return{value:H(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:ut({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(Oe(l.$.value)){let p=l.$.value.value,f=typeof p=="bigint"?Number(p):p;if(f<0||f>=n.elements.length)throw m({token:s.token,errorMessage:`Array index out of bounds: ${f}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[f],index:f,arrayElementRef:{arrayValue:n,index:f},type:c,callerEnv:o}}else return{value:H(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:ut({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function af({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(Oe(o)){if(s=Number(o.value),n.length!==s)throw m({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(_e(o)){s=n.length;let f=qn(BigInt(s));a=Qn(t.childType,f)}else throw m({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${o}.`});let l=[],u=r,c=a.childType;for(let f=0;f<n.length;f++){let _=n[f],d=x({expr:_,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!d.$)throw m({token:_.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(Rt(d,i),u=d.$.env,f===0&&be(c)&&_e(c.length)&&be(d.$.type)&&(c=d.$.type,a=Qn(c,a.length)),!W({type:c,env:u},{type:d.$.type,env:u}))throw m({token:_.token,errorMessage:`Array element at index ${f} has incompatible type:
10741
10741
  - Expected: ${A(c)}
10742
- - Given : ${A(d.$.type)}`});d.$.value!==void 0?l.push(d.$.value):l.push(q(c,{env:u,context:i}))}let p=Tr(a,l);return e.$={env:u,value:p,type:a,pathCollection:[]},e}function of({capturedVariables:e,env:t,closureToken:n}){let r=t;for(let[i,o]of e.entries())if(o.frameLevel<t.frames.length&&o.usageType==="own"){let a=j(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=Ue(r,s,{...s,consumedAtToken:n}))}}return r}function Gi(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function ba({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!Et(i)&&!Nt({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!Nt({targetType:l.type,traitType:i,env:n})),a=A(i),s=o.map(l=>`\`${l.label}\` has type \`${A(l.type)}\` which does not implement \`${a}\``).join(`
10743
- `);throw m({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function ka({expectedCaptureType:e,capturedVariablesWithValues:t,env:n,closureToken:r,context:i}){let o=e,a;if(o===void 0)if(t&&t.size>0){let s=Kr(n),l=Array.from(t.entries()).map(([c,p])=>({label:c,type:p.type,isCompileTimeOnly:!1,assignedValue:void 0,isEffectParam:p.isEffectParam||void 0,exprs:{expr:{tag:"Atom",token:p.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,o=s,n=Yr({structType:s,env:n,context:{...i},errorToken:r});let u=Array.from(t.values()).map(c=>c.value);u.every(c=>c!==void 0)?a=In(s,u):a=void 0}else{let s=Kr(n);s.fields=[],n=Yr({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=In(s,[])}else if(t&&t.size>0){let s=o,l=Array.from(t.keys()),u=s.fields.map(p=>p.label);for(let p of l)if(!u.includes(p))throw m({token:r,errorMessage:`Captured variable "${p}" does not exist in expected capture struct "${A(s)}"`});for(let p of s.fields)if(!l.includes(p.label))throw m({token:r,errorMessage:`Expected capture struct field "${p.label}" is not captured by this closure`});for(let[p,f]of t.entries()){let _=s.fields.find(d=>d.label===p);if(_&&!W({type:_.type,env:n},{type:f.type,env:n}))throw m({token:f.token,errorMessage:`Captured variable "${p}" has type "${A(f.type)}" but expected struct field has type "${A(_.type)}"`})}let c=Array.from(t.values()).map(p=>p.value);c.every(p=>p!==void 0)?a=In(o,c):a=void 0}else a=In(o,[]);return{captureType:o,captureValue:a}}function wa({capturedVariables:e,env:t}){let n=new Map;for(let[r,i]of e.entries())if(i.frameLevel<t.frames.length){let a=t.frames[i.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...i,value:a.value?.[0],type:a.type})}return n}function Fa({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(Te(a.type)){let s=qt(`${w.___dup[0]}(${o})`),l=x({expr:s,env:i,context:{...n}});r.push(l),l.$&&l.$.env&&(i=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:i}}function ll({functionBodyExpr:e,functionType:t,functionValue:n,env:r,context:i}){if(!Ae(t.return.type))return;let o;try{let a=Ve(e),s=Wi({...i,capturedVariables:void 0},t,{...n},r),l=gt({expr:a,env:r,context:s.evaluationContext,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(o=l.$?.type,Je(l.$?.controlFlow,"escape")&&!Je(l.$?.controlFlow,"return"))return}catch{return}if(o&&!W({type:t.return.type,env:r},{type:o,env:r},!0))throw m({token:t.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10742
+ - Given : ${A(d.$.type)}`});d.$.value!==void 0?l.push(d.$.value):l.push(H(c,{env:u,context:i}))}let p=Tr(a,l);return e.$={env:u,value:p,type:a,pathCollection:[]},e}function sf({capturedVariables:e,env:t,closureToken:n}){let r=t;for(let[i,o]of e.entries())if(o.frameLevel<t.frames.length&&o.usageType==="own"){let a=j(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=ze(r,s,{...s,consumedAtToken:n}))}}return r}function Gi(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function wa({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!Et(i)&&!Ft({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!Ft({targetType:l.type,traitType:i,env:n})),a=A(i),s=o.map(l=>`\`${l.label}\` has type \`${A(l.type)}\` which does not implement \`${a}\``).join(`
10743
+ `);throw m({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function Fa({expectedCaptureType:e,capturedVariablesWithValues:t,env:n,closureToken:r,context:i}){let o=e,a;if(o===void 0)if(t&&t.size>0){let s=Kr(n),l=Array.from(t.entries()).map(([c,p])=>({label:c,type:p.type,isCompileTimeOnly:!1,assignedValue:void 0,isEffectParam:p.isEffectParam||void 0,exprs:{expr:{tag:"Atom",token:p.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,o=s,n=Yr({structType:s,env:n,context:{...i},errorToken:r});let u=Array.from(t.values()).map(c=>c.value);u.every(c=>c!==void 0)?a=In(s,u):a=void 0}else{let s=Kr(n);s.fields=[],n=Yr({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=In(s,[])}else if(t&&t.size>0){let s=o,l=Array.from(t.keys()),u=s.fields.map(p=>p.label);for(let p of l)if(!u.includes(p))throw m({token:r,errorMessage:`Captured variable "${p}" does not exist in expected capture struct "${A(s)}"`});for(let p of s.fields)if(!l.includes(p.label))throw m({token:r,errorMessage:`Expected capture struct field "${p.label}" is not captured by this closure`});for(let[p,f]of t.entries()){let _=s.fields.find(d=>d.label===p);if(_&&!W({type:_.type,env:n},{type:f.type,env:n}))throw m({token:f.token,errorMessage:`Captured variable "${p}" has type "${A(f.type)}" but expected struct field has type "${A(_.type)}"`})}let c=Array.from(t.values()).map(p=>p.value);c.every(p=>p!==void 0)?a=In(o,c):a=void 0}else a=In(o,[]);return{captureType:o,captureValue:a}}function La({capturedVariables:e,env:t}){let n=new Map;for(let[r,i]of e.entries())if(i.frameLevel<t.frames.length){let a=t.frames[i.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...i,value:a.value?.[0],type:a.type})}return n}function Aa({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(Te(a.type)){let s=Ht(`${w.___dup[0]}(${o})`),l=x({expr:s,env:i,context:{...n}});r.push(l),l.$&&l.$.env&&(i=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:i}}function ul({functionBodyExpr:e,functionType:t,functionValue:n,env:r,context:i}){if(!Fe(t.return.type))return;let o;try{let a=Ve(e),s=Wi({...i,capturedVariables:void 0},t,{...n},r),l=gt({expr:a,env:r,context:s.evaluationContext,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(o=l.$?.type,et(l.$?.controlFlow,"escape")&&!et(l.$?.controlFlow,"return"))return}catch{return}if(o&&!W({type:t.return.type,env:r},{type:o,env:r},!0))throw m({token:t.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10744
10744
  - Expected: ${A(t.return.type)}
10745
- - Given : ${A(o)}`})}function Wi(e,t,n,r){let i={kind:"function-body",type:t,value:n,evaluationEnv:r},o=new Map,a;if(e.isEvaluatingFunctionBodyOrAsyncBlock){let l=e.isEvaluatingFunctionBodyOrAsyncBlock;l.kind==="function-body"?a=l.type.return.type:a=Rn()}return{evaluationContext:{...e,isExecuting:!1,isValidatingFunctionDefinition:!0,isEvaluatingFunctionBodyOrAsyncBlock:i,isEvaluatingFunctionType:!1,isEvaluatingLoopBody:void 0,capturedVariables:o,expectedType:{type:t.return.type,env:r},functionReturnImplConcreteType:[],enclosingFunctionReturnType:a,isInsideGivenHandler:e.isInsideGivenHandler,forceCompileTimeBindings:!1,isAnalyzingCtfeCapability:!1},functionBodyContext:i}}function af({expr:e,functionType:t,callerEnv:n,context:r}){let i=e.func,o=e.args;if(o.length!==1)throw m({token:i.token,errorMessage:`Failed to implement the function. Expected 1 argument for the function body, got ${o.length}.`});let a=o[0],s=!1,l=r.expectedType?.type,u=l&&H(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((L,b)=>L.label!==t.parameters[b].label),c=ze(s?n:pa(n));if(u&&l&&H(l)){for(let L of t.forallParameters){let{env:b}=_e({env:c,variable:{name:L.label,type:L.type,isCompileTimeOnly:!0,value:[q(L.type,{variableName:L.label,env:c,context:r})],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=b}for(let L=0;L<t.parameters.length;L++){let b=t.parameters[L],O=l.parameters[L],N=b.label,D=O.label,{env:V}=_e({env:c,variable:{name:N,type:b.type,isCompileTimeOnly:b.isCompileTimeOnly,value:b.isCompileTimeOnly?[q(b.type,{variableName:D,env:c,context:r})]:void 0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:b.isOwningTheRcValue,parameterAlias:N!==D?D:void 0}});c=V}}else c=ze(c,t.parametersFrame);let p=c.frames[c.frames.length-1],f={...t,parametersFrame:p,env:t.env},_={tag:"Function",type:f,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${Be(c.modulePath)}`,definitionSiteEnclosingFunctionType:r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if(f.whereClauseExprs?.length){let L=f.whereClauseExprs.map(O=>Ve(O));c=Vr({constraintExprs:L,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let d=f.forallParameters.length>0||f.parameters.some(L=>Ae(L.type))||f.SelfType&&Ae(f.SelfType),g,h;if(d)ll({functionBodyExpr:a,functionType:f,functionValue:_,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?q(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},h={...r,capturedVariables:void 0},g=a;else{if(h=Wi({...r,capturedVariables:void 0},f,_,c).evaluationContext,g=gt({expr:a,env:c,context:h,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!g.$)throw m({token:a.token,errorMessage:"Failed to evaluate the function body."});c=g.$.env}let y=h.capturedVariables,v=g.$?.type;if(Pn(g)&&(_.isControlFunction=!0),!_.isControlFunction&&v&&!W({type:f.return.type,env:c},{type:v,env:c}))throw m({token:f.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10745
+ - Given : ${A(o)}`})}function Wi(e,t,n,r){let i={kind:"function-body",type:t,value:n,evaluationEnv:r},o=new Map,a;if(e.isEvaluatingFunctionBodyOrAsyncBlock){let l=e.isEvaluatingFunctionBodyOrAsyncBlock;l.kind==="function-body"?a=l.type.return.type:a=Rn()}return{evaluationContext:{...e,isExecuting:!1,isValidatingFunctionDefinition:!0,isEvaluatingFunctionBodyOrAsyncBlock:i,isEvaluatingFunctionType:!1,isEvaluatingLoopBody:void 0,capturedVariables:o,expectedType:{type:t.return.type,env:r},functionReturnImplConcreteType:[],enclosingFunctionReturnType:a,isInsideGivenHandler:e.isInsideGivenHandler,forceCompileTimeBindings:!1,isAnalyzingCtfeCapability:!1},functionBodyContext:i}}function lf({expr:e,functionType:t,callerEnv:n,context:r}){let i=e.func,o=e.args;if(o.length!==1)throw m({token:i.token,errorMessage:`Failed to implement the function. Expected 1 argument for the function body, got ${o.length}.`});let a=o[0],s=!1,l=r.expectedType?.type,u=l&&q(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((L,b)=>L.label!==t.parameters[b].label),c=Ue(s?n:_a(n));if(u&&l&&q(l)){for(let L of t.forallParameters){let{env:b}=fe({env:c,variable:{name:L.label,type:L.type,isCompileTimeOnly:!0,value:[H(L.type,{variableName:L.label,env:c,context:r})],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=b}for(let L=0;L<t.parameters.length;L++){let b=t.parameters[L],O=l.parameters[L],N=b.label,M=O.label,{env:V}=fe({env:c,variable:{name:N,type:b.type,isCompileTimeOnly:b.isCompileTimeOnly,value:b.isCompileTimeOnly?[H(b.type,{variableName:M,env:c,context:r})]:void 0,token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:b.isOwningTheRcValue,parameterAlias:N!==M?M:void 0}});c=V}}else c=Ue(c,t.parametersFrame);let p=c.frames[c.frames.length-1],f={...t,parametersFrame:p,env:t.env},_={tag:"Function",type:f,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${Be(c.modulePath)}`,definitionSiteEnclosingFunctionType:r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if(f.whereClauseExprs?.length){let L=f.whereClauseExprs.map(O=>Ve(O));c=Vr({constraintExprs:L,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let d=f.forallParameters.length>0||f.parameters.some(L=>Fe(L.type))||f.SelfType&&Fe(f.SelfType),g,h;if(d)ul({functionBodyExpr:a,functionType:f,functionValue:_,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?H(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},h={...r,capturedVariables:void 0},g=a;else{if(h=Wi({...r,capturedVariables:void 0},f,_,c).evaluationContext,g=gt({expr:a,env:c,context:h,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!g.$)throw m({token:a.token,errorMessage:"Failed to evaluate the function body."});c=g.$.env}let y=h.capturedVariables,v=g.$?.type;if(Pn(g)&&(_.isControlFunction=!0),!_.isControlFunction&&v&&!W({type:f.return.type,env:c},{type:v,env:c}))throw m({token:f.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10746
10746
  - Expected: ${A(f.return.type)}
10747
- - Given : ${A(v)}`});if(M(f.return.type)&&!f.return.type.resolvedConcreteType&&!M(v)&&(f.return.type.resolvedConcreteType=v),f.return.isCompileTimeOnly&&g.$&&!g.$.value)throw m({token:f.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=rt(c,!0);let E=n;s&&y&&y.size>0&&(E=of({capturedVariables:y,env:n,closureToken:e.token}));let $=_,C=f;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let L=Ui(_,E,r);L&&($=L,C=L.type)}return e.$={env:E,value:$,type:C,pathCollection:y&&y.size>0?Gi(y):[]},e}function sf({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){let o=e.func,a=e.args;if(a.length!==1)throw m({token:o.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=ze(r,t.isFn.callType.parametersFrame);if(t.isFn.callType.whereClauseExprs?.length){let $=t.isFn.callType.whereClauseExprs.map(L=>Ve(L));l=Vr({constraintExprs:$,env:l,context:{...i,isEvaluatingFunctionType:!0}}).env}let u={tag:"Function",type:t.isFn.callType,body:s,frameLevel:l.frames.length-1,funcName:void 0,funcId:`closure_${Be(l.modulePath)}`,definitionSiteEnclosingFunctionType:i.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=Wi(i,t.isFn.callType,u,l),p=gt({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!p.$)throw m({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=p.$.env;let f=c.capturedVariables,_=p.$.type;if(!W({type:t.isFn.callType.return.type,env:l},{type:_,env:l}))throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:`Incompatible closure return type:
10747
+ - Given : ${A(v)}`});if(D(f.return.type)&&!f.return.type.resolvedConcreteType&&!D(v)&&(f.return.type.resolvedConcreteType=v),f.return.isCompileTimeOnly&&g.$&&!g.$.value)throw m({token:f.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=rt(c,!0);let E=n;s&&y&&y.size>0&&(E=sf({capturedVariables:y,env:n,closureToken:e.token}));let $=_,C=f;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let L=Ui(_,E,r);L&&($=L,C=L.type)}return e.$={env:E,value:$,type:C,pathCollection:y&&y.size>0?Gi(y):[]},e}function uf({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){let o=e.func,a=e.args;if(a.length!==1)throw m({token:o.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=Ue(r,t.isFn.callType.parametersFrame);if(t.isFn.callType.whereClauseExprs?.length){let $=t.isFn.callType.whereClauseExprs.map(L=>Ve(L));l=Vr({constraintExprs:$,env:l,context:{...i,isEvaluatingFunctionType:!0}}).env}let u={tag:"Function",type:t.isFn.callType,body:s,frameLevel:l.frames.length-1,funcName:void 0,funcId:`closure_${Be(l.modulePath)}`,definitionSiteEnclosingFunctionType:i.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=Wi(i,t.isFn.callType,u,l),p=gt({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!p.$)throw m({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=p.$.env;let f=c.capturedVariables,_=p.$.type;if(!W({type:t.isFn.callType.return.type,env:l},{type:_,env:l}))throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:`Incompatible closure return type:
10748
10748
  - Expected: ${A(t.isFn.callType.return.type)}
10749
- - Given : ${A(_)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!p.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=rt(l,!0);let d=f&&f.size>0?wa({capturedVariables:f,env:r}):void 0,g=r,{capturedVariableDupExpressions:h,env:y}=Fa({capturedVariablesWithValues:d,env:r,context:i});g=y;let{captureType:v}=ka({expectedCaptureType:void 0,capturedVariablesWithValues:d,env:g,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},M(n)&&v&&ba({wrapperType:n,captureType:v,env:g,errorToken:e.token});let E;return M(n)?(n.resolvedConcreteType=v,E={...n,resolvedConcreteType:v}):Ne(n)?E=n:E=t,e.$={env:g,value:void 0,type:E,pathCollection:f&&f.size>0?Gi(f):[],deferredDupExpressions:h&&h.length>0?h:void 0,captureType:v,closureFunctionValue:u},Ne(n)&&Pe(e,!0),e}function lf({expr:e,comptimeListType:t,argExprs:n,callerEnv:r,context:i}){let o=[],a=r,s=t.childType;for(let u=0;u<n.length;u++){let c=n[u],p=x({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!p.$)throw m({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(Rt(p,i),a=p.$.env,!W({type:s,env:a},{type:p.$.type,env:a}))throw m({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
10749
+ - Given : ${A(_)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!p.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=rt(l,!0);let d=f&&f.size>0?La({capturedVariables:f,env:r}):void 0,g=r,{capturedVariableDupExpressions:h,env:y}=Aa({capturedVariablesWithValues:d,env:r,context:i});g=y;let{captureType:v}=Fa({expectedCaptureType:void 0,capturedVariablesWithValues:d,env:g,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},D(n)&&v&&wa({wrapperType:n,captureType:v,env:g,errorToken:e.token});let E;return D(n)?(n.resolvedConcreteType=v,E={...n,resolvedConcreteType:v}):Ne(n)?E=n:E=t,e.$={env:g,value:void 0,type:E,pathCollection:f&&f.size>0?Gi(f):[],deferredDupExpressions:h&&h.length>0?h:void 0,captureType:v,closureFunctionValue:u},Ne(n)&&Pe(e,!0),e}function cf({expr:e,comptimeListType:t,argExprs:n,callerEnv:r,context:i}){let o=[],a=r,s=t.childType;for(let u=0;u<n.length;u++){let c=n[u],p=x({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!p.$)throw m({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(Rt(p,i),a=p.$.env,!W({type:s,env:a},{type:p.$.type,env:a}))throw m({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
10750
10750
  - Expected: ${A(s)}
10751
- - Given : ${A(p.$.type)}`});if(p.$.value!==void 0)o.push(p.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${A(p.$.type)}`})}let l=An(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function Hi({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:q(t.return.type,{variableName:"ctfe_analysis_result_"+Be(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map(E=>E.value),...r.args.map(E=>E.value)];if(s.some(E=>!E))throw m({token:e?.token??se,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=He(u),p=n.funcId,f=n.calledComptimeFunctionCaches,_=c?f.find(E=>E.argValues.length===l.length&&E.argValues.every(($,C)=>{let L=l[C];return R($)&&R(L)?M($.value)&&M(L.value)||Ae($.value)||Ae(L.value)?$.value.id===L.value.id:M($.value)&&!M(L.value)?!1:W({type:$.value,env:E.env},{type:L.value,env:i},!0):wt({value:$,env:E.env},{value:L,env:i})})):void 0;if(_)return{callerEnv:i,calleeEnv:o,value:_.value};let d=n.body,g={funcId:p,argValues:l,value:q(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:Ve(d)};n.calledComptimeFunctionCaches.push(g);let h=n.calledComptimeFunctionCaches.length-1,y;try{y=gt({expr:g.body,env:o,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:o},isEvaluatingLoopBody:void 0,capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType,forceCompileTimeBindings:!0},variablesToAdd:[]})}catch(E){throw n.calledComptimeFunctionCaches.splice(h,1),E}if(!y.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=y.$.value;if(!v)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=y.$.env,R(v)){let E=v.value;!E.typeName&&n.funcName&&(E.typeName=n.funcName+`(${l.map($=>Se($)).join(", ")})`),(ue(E)||ye(E)||lt(E)||Fe(E)||xe(E))&&(E.functionValue||(E.functionValue=n))}return c?n.calledComptimeFunctionCaches[h]={funcId:p,argValues:l,value:v,env:y.$.env,body:y}:n.calledComptimeFunctionCaches.splice(h,1),{value:v,callerEnv:i,calleeEnv:o}}function cf(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(H(r.type)){let i=t?.fields[n];if(i&&ie(i)&&i.isControlFunction)return!0}if(Fe(r.type)){let i=t?.fields[n];if(cf(r.type,i&&ft(i)?i:void 0))return!0}}return!1}function py({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=qt(`${w.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:void 0}});if(r.push(s),s.$?.env)i=s.$.env;else throw m({token:a.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${o.name}":
10752
- ${k(a)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function fy({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){let c=r[i],p;if(c&&F(c)&&T(c,":",2)){if(p=c.args[0],c=c.args[1],!U(p))throw m({token:p.token,errorMessage:`Expected identifier for label, got:
10751
+ - Given : ${A(p.$.type)}`});if(p.$.value!==void 0)o.push(p.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${A(p.$.type)}`})}let l=An(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function qi({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:H(t.return.type,{variableName:"ctfe_analysis_result_"+Be(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map(E=>E.value),...r.args.map(E=>E.value)];if(s.some(E=>!E))throw m({token:e?.token??ae,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=We(u),p=n.funcId,f=n.calledComptimeFunctionCaches,_=c?f.find(E=>E.argValues.length===l.length&&E.argValues.every(($,C)=>{let L=l[C];return R($)&&R(L)?D($.value)&&D(L.value)||Fe($.value)||Fe(L.value)?$.value.id===L.value.id:D($.value)&&!D(L.value)?!1:W({type:$.value,env:E.env},{type:L.value,env:i},!0):wt({value:$,env:E.env},{value:L,env:i})})):void 0;if(_)return{callerEnv:i,calleeEnv:o,value:_.value};let d=n.body,g={funcId:p,argValues:l,value:H(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:Ve(d)};n.calledComptimeFunctionCaches.push(g);let h=n.calledComptimeFunctionCaches.length-1,y;try{y=gt({expr:g.body,env:o,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:o},isEvaluatingLoopBody:void 0,capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType,forceCompileTimeBindings:!0},variablesToAdd:[]})}catch(E){throw n.calledComptimeFunctionCaches.splice(h,1),E}if(!y.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=y.$.value;if(!v)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=y.$.env,R(v)){let E=v.value;!E.typeName&&n.funcName&&(E.typeName=n.funcName+`(${l.map($=>Se($)).join(", ")})`),(ue(E)||ye(E)||lt(E)||Le(E)||xe(E))&&(E.functionValue||(E.functionValue=n))}return c?n.calledComptimeFunctionCaches[h]={funcId:p,argValues:l,value:v,env:y.$.env,body:y}:n.calledComptimeFunctionCaches.splice(h,1),{value:v,callerEnv:i,calleeEnv:o}}function ff(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(q(r.type)){let i=t?.fields[n];if(i&&ie(i)&&i.isControlFunction)return!0}if(Le(r.type)){let i=t?.fields[n];if(ff(r.type,i&&ft(i)?i:void 0))return!0}}return!1}function dy({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Ht(`${w.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:void 0}});if(r.push(s),s.$?.env)i=s.$.env;else throw m({token:a.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${o.name}":
10752
+ ${k(a)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function my({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){let c=r[i],p;if(c&&F(c)&&T(c,":",2)){if(p=c.args[0],c=c.args[1],!U(p))throw m({token:p.token,errorMessage:`Expected identifier for label, got:
10753
10753
  ${k(p)}`});let C=p.token.value;if(n.label==="")throw m({token:p.token,errorMessage:"Named argument call is not allowed for this parameter (it has no label)."});if(n.label!==C)throw m({token:p.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
10754
- Expected ${n?`label "${n.label}"`:"no label"} at the argument position, but got "${C}".`})}let{parameterType:f,calleeEnv:_}=Vo({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=_;let d;if(!c||U(c)&&ht(c,I.undefined))if(n.exprs.defaultValueExpr)d=x({expr:Ve(n.exprs.defaultValueExpr),env:o,context:{...s,expectedType:{type:f,env:o}}}),d.$?.env&&(o=d.$?.env),c&&(c.$=d.$),n.isCompileTimeOnly||u.push(d);else throw m({token:c?.token??se,errorMessage:`Expected default value for parameter "${n.label}"`});else if(n.isQuote)if(Ct(f))d=Ve(c),d.$={type:tn(),value:xn(c),env:a,pathCollection:[]};else throw m({token:c.token,errorMessage:`Expected "Expr" type for "quote" parameter "${n.label}", got:
10755
- ${A(f)}`});else{let C=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"?void 0:{type:f,env:o};if(d=x({expr:c,env:a,context:{...s,expectedType:C}}),d.$?.env&&(a=d.$?.env),n.isCompileTimeOnly||u.push(d),Wr(d,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let L=d.$?.variableName,b=L?j(a,L):[];(b.length?b[b.length-1]:void 0)?.isOwningTheRcValue?a=un(d,a,!0):(Rt(d,s),d.$?.env&&(a=d.$.env),a=un(d,a,!0))}}if(!d.$)throw m({token:c?.token??se,errorMessage:"Failed to evaluate argument expression."});let g=d.$.type;if(!d.$?.value&&n.isCompileTimeOnly)throw m({token:c?.token??se,errorMessage:`Cannot assign runtime argument to compile-time parameter:
10756
- ${c?k(c):""}`});if(n.assignedValue&&d.$?.value&&!wt({value:n.assignedValue,env:o},{value:d.$.value,env:a}))throw m({token:c?.token??se,errorMessage:`Value mismatch for parameter "${n.label}":
10754
+ Expected ${n?`label "${n.label}"`:"no label"} at the argument position, but got "${C}".`})}let{parameterType:f,calleeEnv:_}=Vo({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=_;let d;if(!c||U(c)&&ht(c,I.undefined))if(n.exprs.defaultValueExpr)d=x({expr:Ve(n.exprs.defaultValueExpr),env:o,context:{...s,expectedType:{type:f,env:o}}}),d.$?.env&&(o=d.$?.env),c&&(c.$=d.$),n.isCompileTimeOnly||u.push(d);else throw m({token:c?.token??ae,errorMessage:`Expected default value for parameter "${n.label}"`});else if(n.isQuote)if(Ct(f))d=Ve(c),d.$={type:tn(),value:xn(c),env:a,pathCollection:[]};else throw m({token:c.token,errorMessage:`Expected "Expr" type for "quote" parameter "${n.label}", got:
10755
+ ${A(f)}`});else{let C=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"?void 0:{type:f,env:o};if(d=x({expr:c,env:a,context:{...s,expectedType:C}}),d.$?.env&&(a=d.$?.env),n.isCompileTimeOnly||u.push(d),Wr(d,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let L=d.$?.variableName,b=L?j(a,L):[];(b.length?b[b.length-1]:void 0)?.isOwningTheRcValue?a=un(d,a,!0):(Rt(d,s),d.$?.env&&(a=d.$.env),a=un(d,a,!0))}}if(!d.$)throw m({token:c?.token??ae,errorMessage:"Failed to evaluate argument expression."});let g=d.$.type;if(!d.$?.value&&n.isCompileTimeOnly)throw m({token:c?.token??ae,errorMessage:`Cannot assign runtime argument to compile-time parameter:
10756
+ ${c?k(c):""}`});if(n.assignedValue&&d.$?.value&&!wt({value:n.assignedValue,env:o},{value:d.$.value,env:a}))throw m({token:c?.token??ae,errorMessage:`Value mismatch for parameter "${n.label}":
10757
10757
  Expected: ${Se(n.assignedValue)}
10758
- Got: ${Se(d.$.value)}`});let h=d.$.value;if(!n.isCompileTimeOnly&&zr(g,d.$.env)&&(s.forceCompileTimeBindings||(h=void 0),g=ut({type:g,expectedType:f,expr:d,env:d.$.env}),Yn(g,d.$.env)))throw m({token:c?.token??se,errorMessage:`Cannot convert compile-time type to runtime type for argument:
10759
- ${k(d)}`});let y=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=_e({env:o,variable:{name:n.label,type:g,isCompileTimeOnly:y,value:h?[h]:void 0,token:c?.token??se,initializedAtToken:c?.token??se,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,h&&R(h)&&M(h.value)){let C=h.value,L=Nn(a,C);if(L){for(let b of L.requiredTraits){let O={...b,receiverType:C};o=Un({env:o,someType:C,traitType:O,isNegated:!1})}for(let b of L.negativeTraits){let O={...b,receiverType:C};o=Un({env:o,someType:C,traitType:O,isNegated:!0})}}}try{let{expectedEnv:C}=Ke({type:f,env:o},{type:g,env:a});o=C}catch(C){throw m({token:c?.token??se,errorMessage:`Failed to synthesize types for parameter "${n.label}":
10760
- ${C.message}`})}let{parameterType:E,calleeEnv:$}=Vo({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=$,!W({type:E,env:o},{type:g,env:a},i===0&&l))throw m({token:c?.token??se,errorMessage:`Type mismatch for parameter "${n.label}":
10758
+ Got: ${Se(d.$.value)}`});let h=d.$.value;if(!n.isCompileTimeOnly&&zr(g,d.$.env)&&(s.forceCompileTimeBindings||(h=void 0),g=ut({type:g,expectedType:f,expr:d,env:d.$.env}),Yn(g,d.$.env)))throw m({token:c?.token??ae,errorMessage:`Cannot convert compile-time type to runtime type for argument:
10759
+ ${k(d)}`});let y=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=fe({env:o,variable:{name:n.label,type:g,isCompileTimeOnly:y,value:h?[h]:void 0,token:c?.token??ae,initializedAtToken:c?.token??ae,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,h&&R(h)&&D(h.value)){let C=h.value,L=Nn(a,C);if(L){for(let b of L.requiredTraits){let O={...b,receiverType:C};o=Un({env:o,someType:C,traitType:O,isNegated:!1})}for(let b of L.negativeTraits){let O={...b,receiverType:C};o=Un({env:o,someType:C,traitType:O,isNegated:!0})}}}try{let{expectedEnv:C}=Ke({type:f,env:o},{type:g,env:a});o=C}catch(C){throw m({token:c?.token??ae,errorMessage:`Failed to synthesize types for parameter "${n.label}":
10760
+ ${C.message}`})}let{parameterType:E,calleeEnv:$}=Vo({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=$,!W({type:E,env:o},{type:g,env:a},i===0&&l))throw m({token:c?.token??ae,errorMessage:`Type mismatch for parameter "${n.label}":
10761
10761
  Expected: ${A(E)}
10762
- Got: ${A(g)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:h,argType:g,parameterType:E}}function qi(e){if(e&&ie(e))return e}function La(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var Aa=La("YO_DEBUG_CALL")||La("YO_DEBUG_CALL_PROFILE")||La("YO_DEBUG_EVAL")||La("YO_DEBUG_EVAL_PROFILE"),uf=globalThis,nr=uf.__yoCallProfilerState??(uf.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function Dr({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){if(Aa){nr.tryCallCount++;let X="(unknown)";t&&"funcName"in t&&t.funcName?X=t.funcName:t&&"funcId"in t?X=String(t.funcId):r&&(X=k(r).slice(0,60)),nr.tryCallNames.set(X,(nr.tryCallNames.get(X)??0)+1),nr.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${nr.tryCallCount}: name=${X}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,p=[],f=[],_=[],d=t?.definitionSiteEnclosingFunctionType,g=0;i.length>0&&F(i[0])&&T(i[0],I.forall)&&(c=i[0],g=1);let h,y=i.slice(g),v=y.findIndex(X=>F(X)&&T(X,I.using));if(v!==-1){let X=y.findIndex((Q,re)=>re>v&&F(Q)&&T(Q,I.using));if(X!==-1)throw m({token:y[X].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});h=y[v],y=[...y.slice(0,v),...y.slice(v+1)]}let E=n.parameters.length,$=y;if(!n.variadicParameter){if($.length>E){let X=n.parameters.at(-1);if(!(X&&X.isQuote&&Rr(X.type)))throw m({token:r?.token??se,errorMessage:`Too many arguments for function call:
10762
+ Got: ${A(g)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:h,argType:g,parameterType:E}}function Hi(e){if(e&&ie(e))return e}function Ia(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var xa=Ia("YO_DEBUG_CALL")||Ia("YO_DEBUG_CALL_PROFILE")||Ia("YO_DEBUG_EVAL")||Ia("YO_DEBUG_EVAL_PROFILE"),pf=globalThis,rr=pf.__yoCallProfilerState??(pf.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function Dr({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){if(xa){rr.tryCallCount++;let X="(unknown)";t&&"funcName"in t&&t.funcName?X=t.funcName:t&&"funcId"in t?X=String(t.funcId):r&&(X=k(r).slice(0,60)),rr.tryCallNames.set(X,(rr.tryCallNames.get(X)??0)+1),rr.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${rr.tryCallCount}: name=${X}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,p=[],f=[],_=[],d=t?.definitionSiteEnclosingFunctionType,g=0;i.length>0&&F(i[0])&&T(i[0],I.forall)&&(c=i[0],g=1);let h,y=i.slice(g),v=y.findIndex(X=>F(X)&&T(X,I.using));if(v!==-1){let X=y.findIndex((Z,re)=>re>v&&F(Z)&&T(Z,I.using));if(X!==-1)throw m({token:y[X].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});h=y[v],y=[...y.slice(0,v),...y.slice(v+1)]}let E=n.parameters.length,$=y;if(!n.variadicParameter){if($.length>E){let X=n.parameters.at(-1);if(!(X&&X.isQuote&&Rr(X.type)))throw m({token:r?.token??ae,errorMessage:`Too many arguments for function call:
10763
10763
  Expected: ${E} arguments
10764
- Got: ${$.length} arguments`})}else if($.length<E&&!n.parameters.slice($.length).every(Q=>Q.exprs.defaultValueExpr!==void 0))throw m({token:r?.token??se,errorMessage:`Too few arguments for function call:
10764
+ Got: ${$.length} arguments`})}else if($.length<E&&!n.parameters.slice($.length).every(Z=>Z.exprs.defaultValueExpr!==void 0))throw m({token:r?.token??ae,errorMessage:`Too few arguments for function call:
10765
10765
  Expected: ${E} arguments
10766
- Got: ${$.length} arguments`})}let C=y.slice(0,E),L=y.slice(E);i=C,o=ze(o);let b=ze(n.env);if(n.SelfType){let X=J(n.SelfType),{env:Q}=_e({env:b,variable:{name:"Self",token:se,type:X.type,isCompileTimeOnly:!0,initializedAtToken:se,consumedAtToken:void 0,value:[X],isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Q}for(let X=0;X<n.forallParameters.length;X++){let Q=n.forallParameters[X],re;if(Q.exprs.labelExpr&&Q.label){let me=He(Q.type)&&Q.type.level===1&&F(Q.exprs.expr)&&T(Q.exprs.expr,"...",1)?J(Qr(Q.label,b)):q(Q.type,{variableName:Q.label,env:b,context:a}),{env:te,variable:Le}=_e({env:b,variable:{name:Q.label,type:Q.type,isCompileTimeOnly:!0,value:[me],token:Q.exprs.labelExpr.token,initializedAtToken:Q.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=te,re=Le}if(c){let ce=c.args[X],me;if(F(ce)&&T(ce,":",2)){if(me=ce.args[0],ce=ce.args[1],!U(me))throw m({token:me.token,errorMessage:`Expected identifier for type parameter label, got:
10767
- ${k(me)}`});if(Q.label!==me.token.value)throw m({token:me.token,errorMessage:`Expected type parameter label "${Q.label}", got "${me.token.value}".`})}let te;if(U(ce)&&ce.token.value==="_")continue;if(!ce||U(ce)&&ht(ce,I.undefined))if(Q.exprs.defaultValueExpr){let Ge=x({expr:Ve(Q.exprs.defaultValueExpr),env:b,context:{...a}});if(Ge.$?.env&&(o=Ge.$.env),ce&&(ce.$=Ge.$),!R(Ge.$?.value))throw m({token:ce?.token??r?.token??se,errorMessage:ce?`Expected type for default value, got:
10768
- ${k(ce)}`:"Expected type for default value."});te=Ge.$?.value}else throw m({token:ce?.token??r?.token??se,errorMessage:"Type parameter does not have default value."});else{let Ge=x({expr:ce,env:o,context:{...a,expectedType:{type:Q.type,env:b}}});if(Ge.$?.env&&(o=Ge.$.env),!R(Ge.$?.value))throw m({token:ce.token,errorMessage:`Expected type for argument, got:
10769
- ${k(ce)}`});te=Ge.$?.value}me&&(me.$={env:b,type:te.type,value:te,pathCollection:[]});let{parameterType:Le,calleeEnv:Ee}=Vo({parameter:Q,calleeEnv:b,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});b=Ee;let{expectedEnv:Ye,givenEnv:ot}=Ke({type:Le,env:b},{type:te.type,env:o});if(b=Ye,o=ot,!W({type:Le,env:b},{type:te.type,env:o}))throw m({token:ce?.token??r?.token??se,errorMessage:`Type mismatch for type parameter "${Q.label}":
10770
- Expected: ${A(Le)}
10771
- Got: ${A(te.type)}`});if(Q.label)if(re)b=Ue(b,re,{...re,value:[te]});else{let Ge=ce?.token??r?.token??se,{env:Ot}=_e({env:b,variable:{name:Q.label,type:te.type,isCompileTimeOnly:!0,value:[te],token:Ge,initializedAtToken:Ge,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Ot}p.push({value:te,argType:te.type,parameterType:Le})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:X,calleeEnv:Q}=si({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:re}=Ke({type:X,env:Q},{type:a.expectedType.type,env:a.expectedType.env});b=re}catch{}if(h&&n.implicitParameters.length>0&&n.implicitParameters.some(Q=>Q.isEffectRowSpread)){let re=n.implicitParameters.filter(me=>!me.isEffectRowSpread).length,ce=h.args.slice(re);if(ce.length>0){let me=[];for(let Ee of ce){if(!U(Ee))throw m({token:Ee.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${k(Ee)}`});let Ye=Ee.token.value,Ge=j(o,Ye).at(-1);if(!Ge)throw m({token:Ee.token,errorMessage:`Variable "${Ye}" not found for using() argument in effect row spread.`});Ee.$={env:o,type:Ge.type,value:Ge.value?.[0],variableName:Ye,pathCollection:[]},me.push({label:Ye,type:Ge.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:Ee,labelExpr:Ee,typeExpr:void 0,defaultValueExpr:void 0}})}let te=cr(me),Le=J(te);for(let Ee of n.implicitParameters){if(!Ee.isEffectRowSpread)continue;let Ye=Ee.label,Ge=j(b,Ye).at(-1);Ge&&(b=Ue(b,Ge,{...Ge,value:[Le]})),M(Ee.type)&&Ee.type.isEffectsRow&&(Ee.type.resolvedConcreteType=te)}}}n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0});let O=n.parameters.length;for(let X=0;X<O;X++){let Q=n.parameters[X],{calleeEnv:re,callerEnv:ce,context:me,argValue:te,argType:Le,parameterType:Ee}=fy({functionType:n,definitionSiteEnclosingFunctionType:d,parameter:Q,argExprs:i,argIndex:X,callerEnv:o,calleeEnv:b,context:a,isMethodCall:s,runtimeArgExprsInOrder:_});b=re,o=ce,a=me,f.push({value:te,parameterType:Ee,argType:Le})}if(!c&&n.forallParameters.length>0){for(let X of n.forallParameters)if(X.label){let re=j(b,X.label).at(-1);if(re?.value?.[0]&&R(re.value[0])){let ce=re.value[0];if(M(ce.value)&&ce.value.resolvedConcreteType&&(!ce.value.requiredTraits||ce.value.requiredTraits.length===0)){let me=J(ce.value.resolvedConcreteType);b=Ue(b,re,{...re,value:[me]})}}}}if(!c&&n.forallParameters.length>0){for(let X of n.forallParameters)if(X.label){let re=j(b,X.label).at(-1);re?.value?.[0]&&R(re.value[0])&&p.push({value:re.value[0],argType:re.value[0].type,parameterType:X.type})}}if(n.whereClauseExprs?.length){let X=n.whereClauseExprs.map(re=>Ve(re));b=Vr({constraintExprs:X,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let{returnType:N,calleeEnv:D}=si({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(b=D,a.expectedType&&!n.return.isUnquote){let{expectedEnv:X}=Ke({type:N,env:b},{type:a.expectedType.type,env:a.expectedType.env});b=X;let Q=si({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});N=Q.returnType,b=Q.calleeEnv,W({type:a.expectedType.type,env:a.expectedType.env},{type:N,env:b})&&(N=a.expectedType.type)}let V=[];if(n.variadicParameter){for(let X=0;X<L.length;X++){let Q=L[X],re;if(n.variadicParameter.isQuote)re=Ve(Q),re.$={type:tn(),value:xn(Q),env:o,pathCollection:[]},V.push({value:re.$.value,argType:re.$.type});else{if(re=x({expr:Q,env:o,context:{...a}}),!re.$?.env)throw m({token:Q.token,errorMessage:`Failed to evaluate the expression:
10772
- ${k(Q)}`});o=re.$.env,V.push({value:re.$.value,argType:re.$.type}),n.variadicParameter.isCompileTimeOnly||_.push(Q)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let X=An(tn(),V.map(re=>re.value)),{env:Q}=_e({env:b,variable:{name:n.variadicParameter.label,type:X.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:[X],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Q}}}let z=[],ee=[];if(n.implicitParameters.length>0)for(let X=0;X<n.implicitParameters.length;X++){let Q=n.implicitParameters[X],re=!1;if(Q.isEffectRowSpread){let te=[],Ee=j(b,Q.label).at(-1)?.value?.[0],Ye;if(Ee&&R(Ee)&&_t(Ee.value))Ye=Ee.value;else if(M(Q.type)&&Q.type.isEffectsRow){let ot=Mt(b,Q.type);_t(ot)&&(Ye=ot)}else _t(Q.type)&&(Ye=Q.type);if(!Ye&&M(Q.type)&&Q.type.isEffectsRow){let ot=er(o,Vt=>Vt.isImplicit===!0&&Vt.isCompileTimeOnly===!0&&(H(Vt.type)||Fe(Vt.type))),Ge=new Set(n.implicitParameters.filter(Vt=>!Vt.isEffectRowSpread).map(Vt=>Vt.label)),Ot=ot.filter(Vt=>!Ge.has(Vt.name));if(Ot.length>0){for(let Bn of Ot){let Or=Bn.value?.[0];if(Or){ee.push({value:Or,parameterType:Bn.type,argType:Bn.type});let{env:ed}=_e({env:b,variable:{name:Bn.name,type:Bn.type,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[Or],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=ed}}let Vt=cr(Ot.map(Bn=>({label:Bn.name,type:Bn.type,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!0,exprs:{expr:void 0,labelExpr:void 0,typeExpr:void 0}}))),nn=J(Vt),hr=j(b,Q.label).at(-1);hr&&(b=Ue(b,hr,{...hr,value:[nn],type:Vt})),re=!0;continue}}te=Ye?.implicitParameters??[];for(let ot of te){let Ge=ot.type,Vt=er(o,nn=>nn.isImplicit===!0&&nn.isCompileTimeOnly===!0&&nn.name===ot.label&&W({type:Ge,env:b},{type:nn.type,env:o})).at(-1);if(Vt?.value?.[0]){let nn=Vt.value[0];ee.push({value:nn,parameterType:Ge,argType:Vt.type});let{env:Vn}=_e({env:b,variable:{name:ot.label,type:Ge,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[nn],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Vn}else{let Vn=er(o,Or=>Or.isImplicit===!0&&Or.isCompileTimeOnly===!0&&W({type:Ge,env:b},{type:Or.type,env:o})).at(-1);if(!Vn?.value?.[0])throw m({token:r?.token??e?.token??se,errorMessage:`No "given" variable found for effect row parameter "${ot.label}" of type ${A(Ge)} (expanded from effect row ...(${Q.label})).
10773
- Please ensure a given variable of matching type is in scope.`});let hr=Vn.value[0];ee.push({value:hr,parameterType:Ge,argType:Vn.type});let{env:Bn}=_e({env:b,variable:{name:ot.label,type:Ge,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[hr],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Bn}}continue}let{parameterType:ce,calleeEnv:me}=Vo({parameter:Q,calleeEnv:b,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});if(b=me,h){let te=h.args[X],Le=te&&U(te)&&ht(te,I.undefined);if(te&&!Le){let Ee=x({expr:te,env:o,context:{...a}});if(!Ee.$)throw m({token:te.token,errorMessage:`Failed to evaluate using() argument: ${k(te)}`});o=Ee.$.env;let Ye=Ee.$.value,ot=Ee.$.type;if(!Ye)throw m({token:te.token,errorMessage:`Expected compile-time value for using() argument, got runtime value: ${k(te)}`});if(!W({type:ce,env:b},{type:ot,env:o}))throw m({token:te.token,errorMessage:`Incompatible type for implicit parameter "${Q.label}":
10766
+ Got: ${$.length} arguments`})}let C=y.slice(0,E),L=y.slice(E);i=C,o=Ue(o);let b=Ue(n.env);if(n.SelfType){let X=Q(n.SelfType),{env:Z}=fe({env:b,variable:{name:"Self",token:ae,type:X.type,isCompileTimeOnly:!0,initializedAtToken:ae,consumedAtToken:void 0,value:[X],isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Z}for(let X=0;X<n.forallParameters.length;X++){let Z=n.forallParameters[X],re;if(Z.exprs.labelExpr&&Z.label){let me=We(Z.type)&&Z.type.level===1&&F(Z.exprs.expr)&&T(Z.exprs.expr,"...",1)?Q(Qr(Z.label,b)):H(Z.type,{variableName:Z.label,env:b,context:a}),{env:te,variable:Ae}=fe({env:b,variable:{name:Z.label,type:Z.type,isCompileTimeOnly:!0,value:[me],token:Z.exprs.labelExpr.token,initializedAtToken:Z.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=te,re=Ae}if(c){let ce=c.args[X],me;if(F(ce)&&T(ce,":",2)){if(me=ce.args[0],ce=ce.args[1],!U(me))throw m({token:me.token,errorMessage:`Expected identifier for type parameter label, got:
10767
+ ${k(me)}`});if(Z.label!==me.token.value)throw m({token:me.token,errorMessage:`Expected type parameter label "${Z.label}", got "${me.token.value}".`})}let te;if(U(ce)&&ce.token.value==="_")continue;if(!ce||U(ce)&&ht(ce,I.undefined))if(Z.exprs.defaultValueExpr){let Ge=x({expr:Ve(Z.exprs.defaultValueExpr),env:b,context:{...a}});if(Ge.$?.env&&(o=Ge.$.env),ce&&(ce.$=Ge.$),!R(Ge.$?.value))throw m({token:ce?.token??r?.token??ae,errorMessage:ce?`Expected type for default value, got:
10768
+ ${k(ce)}`:"Expected type for default value."});te=Ge.$?.value}else throw m({token:ce?.token??r?.token??ae,errorMessage:"Type parameter does not have default value."});else{let Ge=x({expr:ce,env:o,context:{...a,expectedType:{type:Z.type,env:b}}});if(Ge.$?.env&&(o=Ge.$.env),!R(Ge.$?.value))throw m({token:ce.token,errorMessage:`Expected type for argument, got:
10769
+ ${k(ce)}`});te=Ge.$?.value}me&&(me.$={env:b,type:te.type,value:te,pathCollection:[]});let{parameterType:Ae,calleeEnv:Ee}=Vo({parameter:Z,calleeEnv:b,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});b=Ee;let{expectedEnv:Ye,givenEnv:ot}=Ke({type:Ae,env:b},{type:te.type,env:o});if(b=Ye,o=ot,!W({type:Ae,env:b},{type:te.type,env:o}))throw m({token:ce?.token??r?.token??ae,errorMessage:`Type mismatch for type parameter "${Z.label}":
10770
+ Expected: ${A(Ae)}
10771
+ Got: ${A(te.type)}`});if(Z.label)if(re)b=ze(b,re,{...re,value:[te]});else{let Ge=ce?.token??r?.token??ae,{env:Ot}=fe({env:b,variable:{name:Z.label,type:te.type,isCompileTimeOnly:!0,value:[te],token:Ge,initializedAtToken:Ge,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Ot}p.push({value:te,argType:te.type,parameterType:Ae})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:X,calleeEnv:Z}=si({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:re}=Ke({type:X,env:Z},{type:a.expectedType.type,env:a.expectedType.env});b=re}catch{}if(h&&n.implicitParameters.length>0&&n.implicitParameters.some(Z=>Z.isEffectRowSpread)){let re=n.implicitParameters.filter(me=>!me.isEffectRowSpread).length,ce=h.args.slice(re);if(ce.length>0){let me=[];for(let Ee of ce){if(!U(Ee))throw m({token:Ee.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${k(Ee)}`});let Ye=Ee.token.value,Ge=j(o,Ye).at(-1);if(!Ge)throw m({token:Ee.token,errorMessage:`Variable "${Ye}" not found for using() argument in effect row spread.`});Ee.$={env:o,type:Ge.type,value:Ge.value?.[0],variableName:Ye,pathCollection:[]},me.push({label:Ye,type:Ge.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:Ee,labelExpr:Ee,typeExpr:void 0,defaultValueExpr:void 0}})}let te=pr(me),Ae=Q(te);for(let Ee of n.implicitParameters){if(!Ee.isEffectRowSpread)continue;let Ye=Ee.label,Ge=j(b,Ye).at(-1);Ge&&(b=ze(b,Ge,{...Ge,value:[Ae]})),D(Ee.type)&&Ee.type.isEffectsRow&&(Ee.type.resolvedConcreteType=te)}}}n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0});let O=n.parameters.length;for(let X=0;X<O;X++){let Z=n.parameters[X],{calleeEnv:re,callerEnv:ce,context:me,argValue:te,argType:Ae,parameterType:Ee}=my({functionType:n,definitionSiteEnclosingFunctionType:d,parameter:Z,argExprs:i,argIndex:X,callerEnv:o,calleeEnv:b,context:a,isMethodCall:s,runtimeArgExprsInOrder:_});b=re,o=ce,a=me,f.push({value:te,parameterType:Ee,argType:Ae})}if(!c&&n.forallParameters.length>0){for(let X of n.forallParameters)if(X.label){let re=j(b,X.label).at(-1);if(re?.value?.[0]&&R(re.value[0])){let ce=re.value[0];if(D(ce.value)&&ce.value.resolvedConcreteType&&(!ce.value.requiredTraits||ce.value.requiredTraits.length===0)){let me=Q(ce.value.resolvedConcreteType);b=ze(b,re,{...re,value:[me]})}}}}if(!c&&n.forallParameters.length>0){for(let X of n.forallParameters)if(X.label){let re=j(b,X.label).at(-1);re?.value?.[0]&&R(re.value[0])&&p.push({value:re.value[0],argType:re.value[0].type,parameterType:X.type})}}if(n.whereClauseExprs?.length){let X=n.whereClauseExprs.map(re=>Ve(re));b=Vr({constraintExprs:X,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let{returnType:N,calleeEnv:M}=si({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(b=M,a.expectedType&&!n.return.isUnquote){let{expectedEnv:X}=Ke({type:N,env:b},{type:a.expectedType.type,env:a.expectedType.env});b=X;let Z=si({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});N=Z.returnType,b=Z.calleeEnv,W({type:a.expectedType.type,env:a.expectedType.env},{type:N,env:b})&&(N=a.expectedType.type)}let V=[];if(n.variadicParameter){for(let X=0;X<L.length;X++){let Z=L[X],re;if(n.variadicParameter.isQuote)re=Ve(Z),re.$={type:tn(),value:xn(Z),env:o,pathCollection:[]},V.push({value:re.$.value,argType:re.$.type});else{if(re=x({expr:Z,env:o,context:{...a}}),!re.$?.env)throw m({token:Z.token,errorMessage:`Failed to evaluate the expression:
10772
+ ${k(Z)}`});o=re.$.env,V.push({value:re.$.value,argType:re.$.type}),n.variadicParameter.isCompileTimeOnly||_.push(Z)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let X=An(tn(),V.map(re=>re.value)),{env:Z}=fe({env:b,variable:{name:n.variadicParameter.label,type:X.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:[X],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Z}}}let z=[],ee=[];if(n.implicitParameters.length>0)for(let X=0;X<n.implicitParameters.length;X++){let Z=n.implicitParameters[X],re=!1;if(Z.isEffectRowSpread){let te=[],Ee=j(b,Z.label).at(-1)?.value?.[0],Ye;if(Ee&&R(Ee)&&_t(Ee.value))Ye=Ee.value;else if(D(Z.type)&&Z.type.isEffectsRow){let ot=St(b,Z.type);_t(ot)&&(Ye=ot)}else _t(Z.type)&&(Ye=Z.type);if(!Ye&&D(Z.type)&&Z.type.isEffectsRow){let ot=tr(o,Dt=>Dt.isImplicit===!0&&Dt.isCompileTimeOnly===!0&&(q(Dt.type)||Le(Dt.type))),Ge=new Set(n.implicitParameters.filter(Dt=>!Dt.isEffectRowSpread).map(Dt=>Dt.label)),Ot=ot.filter(Dt=>!Ge.has(Dt.name));if(Ot.length>0){for(let Bn of Ot){let Or=Bn.value?.[0];if(Or){ee.push({value:Or,parameterType:Bn.type,argType:Bn.type});let{env:rd}=fe({env:b,variable:{name:Bn.name,type:Bn.type,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[Or],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=rd}}let Dt=pr(Ot.map(Bn=>({label:Bn.name,type:Bn.type,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!0,exprs:{expr:void 0,labelExpr:void 0,typeExpr:void 0}}))),nn=Q(Dt),hr=j(b,Z.label).at(-1);hr&&(b=ze(b,hr,{...hr,value:[nn],type:Dt})),re=!0;continue}}te=Ye?.implicitParameters??[];for(let ot of te){let Ge=ot.type,Dt=tr(o,nn=>nn.isImplicit===!0&&nn.isCompileTimeOnly===!0&&nn.name===ot.label&&W({type:Ge,env:b},{type:nn.type,env:o})).at(-1);if(Dt?.value?.[0]){let nn=Dt.value[0];ee.push({value:nn,parameterType:Ge,argType:Dt.type});let{env:Vn}=fe({env:b,variable:{name:ot.label,type:Ge,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[nn],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Vn}else{let Vn=tr(o,Or=>Or.isImplicit===!0&&Or.isCompileTimeOnly===!0&&W({type:Ge,env:b},{type:Or.type,env:o})).at(-1);if(!Vn?.value?.[0])throw m({token:r?.token??e?.token??ae,errorMessage:`No "given" variable found for effect row parameter "${ot.label}" of type ${A(Ge)} (expanded from effect row ...(${Z.label})).
10773
+ Please ensure a given variable of matching type is in scope.`});let hr=Vn.value[0];ee.push({value:hr,parameterType:Ge,argType:Vn.type});let{env:Bn}=fe({env:b,variable:{name:ot.label,type:Ge,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[hr],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Bn}}continue}let{parameterType:ce,calleeEnv:me}=Vo({parameter:Z,calleeEnv:b,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});if(b=me,h){let te=h.args[X],Ae=te&&U(te)&&ht(te,I.undefined);if(te&&!Ae){let Ee=x({expr:te,env:o,context:{...a}});if(!Ee.$)throw m({token:te.token,errorMessage:`Failed to evaluate using() argument: ${k(te)}`});o=Ee.$.env;let Ye=Ee.$.value,ot=Ee.$.type;if(!Ye)throw m({token:te.token,errorMessage:`Expected compile-time value for using() argument, got runtime value: ${k(te)}`});if(!W({type:ce,env:b},{type:ot,env:o}))throw m({token:te.token,errorMessage:`Incompatible type for implicit parameter "${Z.label}":
10774
10774
  Expected: ${A(ce)}
10775
- Got: ${A(ot)}`});ee.push({value:Ye,parameterType:ce,argType:ot});let Ge=j(b,Q.label);if(Ge.length>0){let Ot=Ge[Ge.length-1];b=Ue(b,Ot,{...Ot,type:ce,isImplicit:!0,value:[Ye]})}else{let{env:Ot}=_e({env:b,variable:{name:Q.label,type:ce,isCompileTimeOnly:!0,isImplicit:!0,value:[Ye],token:Q.exprs.labelExpr?.token??se,initializedAtToken:Q.exprs.labelExpr?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Ot}re=!0}}if(!re){let te=er(o,Ot=>Ot.isImplicit===!0&&Ot.isCompileTimeOnly===!0&&W({type:ce,env:b},{type:Ot.type,env:o}));if(te.length===0)throw m({token:r?.token??e?.token??se,errorMessage:`No "given" variable found for implicit parameter "${Q.label}" of type ${A(ce)}.
10775
+ Got: ${A(ot)}`});ee.push({value:Ye,parameterType:ce,argType:ot});let Ge=j(b,Z.label);if(Ge.length>0){let Ot=Ge[Ge.length-1];b=ze(b,Ot,{...Ot,type:ce,isImplicit:!0,value:[Ye]})}else{let{env:Ot}=fe({env:b,variable:{name:Z.label,type:ce,isCompileTimeOnly:!0,isImplicit:!0,value:[Ye],token:Z.exprs.labelExpr?.token??ae,initializedAtToken:Z.exprs.labelExpr?.token??ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Ot}re=!0}}if(!re){let te=tr(o,Ot=>Ot.isImplicit===!0&&Ot.isCompileTimeOnly===!0&&W({type:ce,env:b},{type:Ot.type,env:o}));if(te.length===0)throw m({token:r?.token??e?.token??ae,errorMessage:`No "given" variable found for implicit parameter "${Z.label}" of type ${A(ce)}.
10776
10776
  Please declare a given variable with a compatible type, e.g.:
10777
- given(${Q.label}) := <value>;
10777
+ given(${Z.label}) := <value>;
10778
10778
  Or pass it explicitly:
10779
- ${t?.funcName??"func"}(..., using(<value>))`});if(te[te.length-1].isFromEffectSpread&&!(()=>{if(!r||!U(r))return!1;let Vt=r.token.value,nn=a.isEvaluatingFunctionBodyOrAsyncBlock;return!nn||nn.kind!=="function-body"?!1:nn.type.parameters.some(hr=>hr.label===Vt)})())throw m({token:r?.token??e?.token??se,errorMessage:`Effect "${Q.label}" of type ${A(ce)} is available through an effect row spread but not explicitly declared in the function's using clause.
10779
+ ${t?.funcName??"func"}(..., using(<value>))`});if(te[te.length-1].isFromEffectSpread&&!(()=>{if(!r||!U(r))return!1;let Dt=r.token.value,nn=a.isEvaluatingFunctionBodyOrAsyncBlock;return!nn||nn.kind!=="function-body"?!1:nn.type.parameters.some(hr=>hr.label===Dt)})())throw m({token:r?.token??e?.token??ae,errorMessage:`Effect "${Z.label}" of type ${A(ce)} is available through an effect row spread but not explicitly declared in the function's using clause.
10780
10780
  Add it explicitly:
10781
- using(${Q.label} : ${A(ce)}, ...(E))`});let Ee=te;if(Ee.length>1){let Ot=$u(o,Vt=>Vt.isImplicit===!0&&Vt.isCompileTimeOnly===!0&&W({type:ce,env:b},{type:Vt.type,env:o}));if(Ot>=0){let nn=o.frames[Ot].variables.filter(Vn=>Vn.isImplicit===!0&&Vn.isCompileTimeOnly===!0&&W({type:ce,env:b},{type:Vn.type,env:o}));nn.length>0&&(Ee=nn)}}if(Ee.length>1)throw m({token:r?.token??e?.token??se,errorMessage:`Ambiguous implicit parameter "${Q.label}": found ${Ee.length} "given" variables with compatible type ${A(ce)} in the same scope.
10782
- Please use explicit using() to disambiguate.`});let Ye=Ee[Ee.length-1],ot=Ye.value?.[0];if(!ot)throw m({token:r?.token??e?.token??se,errorMessage:`The "given" variable "${Ye.name}" has no compile-time value.`});ee.push({value:ot,parameterType:ce,argType:Ye.type});let{env:Ge}=_e({env:b,variable:{name:Q.label,type:ce,isCompileTimeOnly:!0,isImplicit:!0,value:[ot],token:Q.exprs.labelExpr?.token??se,initializedAtToken:Q.exprs.labelExpr?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Ge}}let ne={args:f,forallArgs:p,implicitArgs:ee,variadicArgs:V},G;if(n.return.isCompileTimeOnly)if(u)G=q(N,{variableName:n.return.label,env:n.env,context:a});else if(ie(t)){let{value:X,callerEnv:Q,calleeEnv:re}=Hi({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:ne,callerEnv:o,calleeEnv:b,context:{...a}});G=X,N=X.type,o=Q,b=re}else{let X=He(N)&&N.level===0,Q=`${n.id}_return_sometype`;if(X)if(a.expectedType?.type)G=J(a.expectedType.type);else if(a.isEvaluatingFunctionType){let re=mn(N,n.return.label,{id:Q,env:b,context:a});re.functionApplication=e;let ce=Mt(b,re);G=J(ce)}else throw m({token:e?.token??r?.token??se,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else G=q(N,{variableName:n.return.label,env:n.env,context:a})}my({returnType:N,env:b,expr:e,context:a});let Z,de=a.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&ie(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&ie(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,he=ne.implicitArgs?.some(X=>fe(X.value)),$e=he&&!ne.implicitArgs?.some(X=>fe(X.value)&&!Fe(X.parameterType)),B=ne.args.some(X=>X.argType&&M(X.argType)),oe=$e&&B,ae=(()=>{if(!he||!n.implicitParameters.some(ce=>ce.isEffectRowSpread))return!1;let Q=0;for(let ce of n.implicitParameters)ce.isEffectRowSpread||Q++;let re=ne.implicitArgs??[];for(let ce=0;ce<Q&&ce<re.length;ce++)if(fe(re[ce].value))return!1;return!0})();if(!l&&t&&ie(t)&&!t.isControlFunction&&dn(n)&&!de&&(!he||oe||ae)){if(Z=_y({originalFunction:t,argValues:ne,calleeEnv:b,callerEnv:o,context:a}),Z&&M(N)){let X=Z.body?.$?.type;X&&!M(X)&&(N=X,Z.specializedType&&(Z.specializedType={...Z.specializedType,return:{...Z.specializedType.return,type:X}}))}if(Z){let X=new Set,Q=0;for(let re=0;re<n.parameters.length;re++)if(!n.parameters[re].isCompileTimeOnly){let te=ne.args[re]?.value;te&&ie(te)&&te.type.implicitParameters.some(Le=>H(Le.type)||Fe(Le.type))&&X.add(Q),Q++}if(X.size>0)for(let re=_.length-1;re>=0;re--)X.has(re)&&_.splice(re,1)}}let le=a.hasControlFunctionImplicitParams??!1;if(!l&&t&&ie(t)&&t.isControlFunction&&n.forallParameters.length>0&&!Z&&!le&&(Z=dy({originalFunction:t,argValues:ne,calleeEnv:b,callerEnv:o,context:a}),Z&&M(N))){let X=Z.body?.$?.type;X&&!M(X)&&(N=X,Z.specializedType&&(Z.specializedType={...Z.specializedType,return:{...Z.specializedType.return,type:X}}))}let Ce=Ni(o),Me;if(Ce.length>0){let X=py({variablesToDrop:Ce,env:o,context:a});Me=X.deferredDropExpressions,o=X.env}return{returnType:N,calleeEnv:b,callerEnv:o,pathCollection:z,argValues:ne,returnValue:G,specializedFunctionValue:Z,runtimeArgExprsInOrder:_,deferredDropExpressions:Me}}function _y({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){if(Aa){nr.specializeCount++;let D=e.funcName??e.funcId;nr.specializeNames.set(D,(nr.specializeNames.get(D)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(D=>D.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(D=>D.value)),o.parameters.forEach((D,V)=>{let z=t.args[V];if(D.isCompileTimeOnly)z.value&&a.push(z.value);else if(z.value&&ie(z.value)&&z.value.type.implicitParameters.some(ne=>H(ne.type)||Fe(ne.type)))z.value&&a.push(z.value);else{let G=M(z.argType)&&z.argType.resolvedConcreteType&&!we(z.argType)?z.argType.resolvedConcreteType:z.argType;s.push({...D,type:G})}});let l=s.map(D=>D.type),u=e.specializedFunctionCaches.find(D=>D.compileTimeArgValues.length===a.length&&D.compileTimeArgValues.every((ee,ne)=>{let G=a[ne];return wt({value:ee,env:D.env},{value:G,env:r})})?D.runtimeParameterTypes.length===l.length&&D.runtimeParameterTypes.every((ee,ne)=>{let G=l[ne];return W({type:ee,env:D.env},{type:G,env:r},!0)}):!1);if(u)return Aa&&nr.cacheHitCount++,u.specializedFunction;Aa&&nr.cacheMissCount++;let c=n;for(let D of r.frames)for(let V of D.variables){if(!V.isCompileTimeOnly||j(c,V.name).length>0)continue;let{env:ee}=_e({env:c,variable:{...V},allowVariableShadowing:!0});c=ee}for(let D of s){let V=j(c,D.label);if(V.length>0){let z=V[V.length-1],ee={...z,value:void 0};c=Ue(c,z,ee)}}let p=Ve(e.body),{returnType:f,calleeEnv:_}=si({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=_;let d=i.enclosingFunctionReturnType,g=t.implicitArgs?.some(D=>ie(D.value)&&D.value.isControlFunction||ft(D.value)&&cf(D.value.type,D.value))??!1,h=gt({expr:p,env:c,context:{...i,expectedType:{type:f,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:g,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!h.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let y=[],v=0;for(let D=0;D<o.implicitParameters.length;D++){let V=o.implicitParameters[D];if(H(V.type)){let z=t.implicitArgs?.[v];(z&&ie(z.value)?z.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v,label:V.label,type:V.type,fromSpread:!1}),v+=1}else if(V.isEffectRowSpread){let z=V.type;if(M(z)){let ne=j(c,V.label).at(-1)?.value?.[0];if(ne&&R(ne)&&_t(ne.value))z=ne.value;else{let G=Mt(c,z);G&&(z=G)}}if(_t(z)){for(let ee=0;ee<z.implicitParameters.length;ee++){let ne=z.implicitParameters[ee];if(H(ne.type)){let G=t.implicitArgs?.[v+ee];(G&&ie(G.value)?G.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v+ee,label:ne.label,type:ne.type,fromSpread:!0})}else if(Fe(ne.type)){let G=t.implicitArgs?.[v+ee],Z=G&&ft(G.value)?G.value:void 0,de=[],he=($e,B,oe)=>{for(let ae=0;ae<$e.fields.length;ae++){let le=$e.fields[ae];if(H(le.type)){let Ce=oe?.fields[ae];if(Ce&&ie(Ce)&&Ce.isControlFunction){let Me=Ce.specializedType??le.type;de.push({path:[...B,le.label],type:Me})}}else if(Fe(le.type)){let Ce=oe?.fields[ae];he(le.type,[...B,le.label],Ce&&ft(Ce)?Ce:void 0)}}};he(ne.type,[],Z);for(let $e of de)y.push({handlerArgIndex:v+ee,label:ne.label,type:$e.type,fromSpread:!0,effectFieldPath:$e.path})}}v+=z.implicitParameters.length}else v+=1}else if(Fe(V.type)){let z=[],ee=t.implicitArgs?.[v],ne=(G,Z,de)=>{for(let he=0;he<G.fields.length;he++){let $e=G.fields[he];if(H($e.type)){let B=de?.fields[he];if(B&&ie(B)&&B.isControlFunction){let oe=B.specializedType??$e.type;z.push({path:[...Z,$e.label],type:oe})}}else if(Fe($e.type)){let B=de?.fields[he];ne($e.type,[...Z,$e.label],B&&ft(B)?B:void 0)}}};ne(V.type,[],ee&&ft(ee.value)?ee.value:void 0);for(let G of z)y.push({handlerArgIndex:v,label:V.label,type:G.type,fromSpread:!1,effectFieldPath:G.path});v+=1}else v+=1}let E=[];for(let D of y){let V=ma(h,D.label,D.type,!0,D.effectFieldPath);if(V.hasEffects){let z=t.implicitArgs?.[D.handlerArgIndex],ee,ne=D.effectFieldPath;if(z&&ie(z.value))ee=z.value;else if(z&&ft(z.value)&&ne&&ne.length>0){let G=z.value;for(let Z of ne){if(!ft(G)){G=void 0;break}let de=G.type.fields.findIndex(he=>he.label===Z);if(de<0||!G.fields[de]){G=void 0;break}G=G.fields[de]}G&&ie(G)&&(ee=G)}if(ee){let G=ee,Z=D.type,de=!G.body.$;if(!de&&G.isControlFunction&&F(G.body)&&G.body.args.length>0&&!G.body.args[0]?.$&&(de=!0),de&&H(Z)&&Z.forallParameters.length>0&&V.effectCallPoints.length>0){let he=new Map,$e=Z.return.type,B=V.effectCallPoints[0].operationResultType;if(M($e)&&he.set($e.name,B),he.size===0&&Z.forallParameters.length===1){let X=Z.forallParameters[0];he.set(X.label,B)}let oe=Ve(G.body),ae=G.body.$?.env??c;ae=ze(ae);for(let X of Z.forallParameters){let Q=he.get(X.label);Q&&(ae=_e({env:ae,variable:{name:X.label,type:X.type,isCompileTimeOnly:!0,value:[J(Q)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let le=G.specializedType??G.type,Ce=G.definitionSiteEnclosingFunctionType?.return.type??Rn(),Me={...i,expectedType:void 0,enclosingFunctionReturnType:Ce,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:le,value:G,evaluationEnv:ae}};try{let X=li({expr:oe,env:ae,context:Me}),Q=le.parameters.map(te=>{if(te.isCompileTimeOnly)return te;if(M(te.type)){let Le=he.get(te.type.name);if(Le)return{...te,type:Le}}return te}),re=le.return.type;if(M(re)){let te=he.get(re.name);te&&(re=te)}let ce={...le,parameters:Q,return:{...le.return,type:re}},me={...G,body:X,specializedType:ce};V.handlerValue=me,V.effectParameterType=ce;for(let te of V.effectCallPoints)te.isTransitiveEffectCall&&(te.operationArgTypes=te.operationArgTypes.map(Le=>M(Le)?he.get(Le.name)??Le:Le))}catch(X){if(F(G.body)&&G.body.args.length>0&&!G.body.args[0]?.$)throw X;V.handlerValue=G}}else V.handlerValue=G}else z&&(V.handlerValue=z.value);E.push({analysis:V,ctlParam:D})}}if(E.length===1)h.$.effectAnalysis=E[0].analysis;else if(E.length>1){let D=[],V=new Map,z=new Map,ee=[];for(let Z=0;Z<E.length;Z++){let{analysis:de}=E[Z];ee.push({effectParameterName:de.effectParameterName,effectParameterType:de.effectParameterType,effectFieldPath:de.effectFieldPath,handlerValue:de.handlerValue,operationArgTypes:de.effectCallPoints.length>0?de.effectCallPoints[0].operationArgTypes:[],operationResultType:de.effectCallPoints.length>0?de.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let he of de.effectCallPoints)D.push({...he,effectIndex:Z});for(let he of de.capturedVariables)V.has(he.id)||V.set(he.id,he);for(let[he,$e]of de.variableIdRemapping)z.set(he,$e)}if(F(h)&&T(h,I.begin)){let Z=h.args,de=new Map;for(let $e=0;$e<Z.length;$e++)de.set(Z[$e],$e);let he=$e=>{for(let B=0;B<Z.length;B++)if(ul(Z[B],$e.expr))return B;return 999};D.sort(($e,B)=>he($e)-he(B))}for(let Z=0;Z<D.length;Z++)D[Z].index=Z;let ne=E[0].analysis,G={effectCallPoints:D,capturedVariables:Array.from(V.values()),hasEffects:!0,variableIdRemapping:z,effectParameterName:ne.effectParameterName,effectParameterType:ne.effectParameterType,effectFieldPath:ne.effectFieldPath,handlerValue:ne.handlerValue,effectHandlerInfos:ee};h.$.effectAnalysis=G}let $=[],C=D=>{if(R(D)){let V=D.value;if(!V.typeName&&V.id)return`${Se(D)}_id${V.id}`}return ie(D)?`fn_${D.funcId}`:Se(D)};o.forallParameters.forEach((D,V)=>{if(V<t.forallArgs.length){let z=t.forallArgs[V];$.push(K(C(z.value)))}else{let z=D.label,ee=j(n,z);ee.length>0&&ee[ee.length-1]?.value?.[0]?$.push(K(C(ee[ee.length-1].value[0]))):$.push("unknown")}}),o.parameters.forEach((D,V)=>{if(D.isCompileTimeOnly&&V<t.args.length){let z=t.args[V];z?$.push(K(C(z.value))):$.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(D=>{$.push(K(C(D.value)))}),s.forEach((D,V)=>{let z=D.type;(!z.typeName&&z.id||Ae(z))&&$.push(`rtparam${V}_${K(A(z))}_id${z.id}`)});let L=$.join("_"),b=Ii({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...o.return,type:f},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),O={...e,specializedType:b,body:h,isControlFunction:e.isControlFunction||Pn(h),funcId:`${e.funcId}_${L}`,funcName:`${e.funcName}_${L}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},N={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:O,env:h.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,N],O}function dy({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){let i=e.type,o=r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=e.definitionSiteEnclosingFunctionType?.return.type??Rn(),s=K(A(o)),l=e.specializedFunctionCaches.find(d=>d.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=ze(t);for(let d of n.frames)for(let g of d.variables){if(!g.isCompileTimeOnly||j(u,g.name).length>0)continue;let{env:y}=_e({env:u,variable:{...g},allowVariableShadowing:!0});u=y}for(let d of i.forallParameters){let g=o,{env:h}=_e({env:u,variable:{name:d.label,type:d.type,isCompileTimeOnly:!0,value:[J(g)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=h}let c=Ve(e.body),p={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},f=li({expr:c,env:u,context:p}),_={...e,body:f,isControlFunction:e.isControlFunction||Pn(f),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:_,env:f.$?.env??u}],_}function my({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let i=za(e);for(let o of i){if(we(o)||Gt(o)||o.resolvedConcreteType||o.requiredTraits&&o.requiredTraits.length>0)continue;if(!j(n,o.name).length){let s=er(n,()=>!0),l=!1;for(let u of s)if(R(u.value?.[0])){let c=u.value[0].value,p=za(c);for(let f of p)if(f.name===o.name){l=!0;break}if(l)break}if(l)continue;throw m({token:t?.token??se,errorMessage:`Failed to infer the function call return type.
10783
- Please consider providing the expected type.`})}}}function ul(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(ul(e.func,t))return!0;for(let n of e.args)if(ul(n,t))return!0}return!1}function pf({expr:e,env:t,context:n}){let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
10781
+ using(${Z.label} : ${A(ce)}, ...(E))`});let Ee=te;if(Ee.length>1){let Ot=bu(o,Dt=>Dt.isImplicit===!0&&Dt.isCompileTimeOnly===!0&&W({type:ce,env:b},{type:Dt.type,env:o}));if(Ot>=0){let nn=o.frames[Ot].variables.filter(Vn=>Vn.isImplicit===!0&&Vn.isCompileTimeOnly===!0&&W({type:ce,env:b},{type:Vn.type,env:o}));nn.length>0&&(Ee=nn)}}if(Ee.length>1)throw m({token:r?.token??e?.token??ae,errorMessage:`Ambiguous implicit parameter "${Z.label}": found ${Ee.length} "given" variables with compatible type ${A(ce)} in the same scope.
10782
+ Please use explicit using() to disambiguate.`});let Ye=Ee[Ee.length-1],ot=Ye.value?.[0];if(!ot)throw m({token:r?.token??e?.token??ae,errorMessage:`The "given" variable "${Ye.name}" has no compile-time value.`});ee.push({value:ot,parameterType:ce,argType:Ye.type});let{env:Ge}=fe({env:b,variable:{name:Z.label,type:ce,isCompileTimeOnly:!0,isImplicit:!0,value:[ot],token:Z.exprs.labelExpr?.token??ae,initializedAtToken:Z.exprs.labelExpr?.token??ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Ge}}let ne={args:f,forallArgs:p,implicitArgs:ee,variadicArgs:V},G;if(n.return.isCompileTimeOnly)if(u)G=H(N,{variableName:n.return.label,env:n.env,context:a});else if(ie(t)){let{value:X,callerEnv:Z,calleeEnv:re}=qi({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:ne,callerEnv:o,calleeEnv:b,context:{...a}});G=X,N=X.type,o=Z,b=re}else{let X=We(N)&&N.level===0,Z=`${n.id}_return_sometype`;if(X)if(a.expectedType?.type)G=Q(a.expectedType.type);else if(a.isEvaluatingFunctionType){let re=mn(N,n.return.label,{id:Z,env:b,context:a});re.functionApplication=e;let ce=St(b,re);G=Q(ce)}else throw m({token:e?.token??r?.token??ae,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else G=H(N,{variableName:n.return.label,env:n.env,context:a})}hy({returnType:N,env:b,expr:e,context:a});let J,de=a.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&ie(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&ie(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,he=ne.implicitArgs?.some(X=>_e(X.value)),$e=he&&!ne.implicitArgs?.some(X=>_e(X.value)&&!Le(X.parameterType)),B=ne.args.some(X=>X.argType&&D(X.argType)),oe=$e&&B,se=(()=>{if(!he||!n.implicitParameters.some(ce=>ce.isEffectRowSpread))return!1;let Z=0;for(let ce of n.implicitParameters)ce.isEffectRowSpread||Z++;let re=ne.implicitArgs??[];for(let ce=0;ce<Z&&ce<re.length;ce++)if(_e(re[ce].value))return!1;return!0})();if(!l&&t&&ie(t)&&!t.isControlFunction&&dn(n)&&!de&&(!he||oe||se)){if(J=yy({originalFunction:t,argValues:ne,calleeEnv:b,callerEnv:o,context:a}),J&&D(N)){let X=J.body?.$?.type;X&&!D(X)&&(N=X,J.specializedType&&(J.specializedType={...J.specializedType,return:{...J.specializedType.return,type:X}}))}if(J){let X=new Set,Z=0;for(let re=0;re<n.parameters.length;re++)if(!n.parameters[re].isCompileTimeOnly){let te=ne.args[re]?.value;te&&ie(te)&&te.type.implicitParameters.some(Ae=>q(Ae.type)||Le(Ae.type))&&X.add(Z),Z++}if(X.size>0)for(let re=_.length-1;re>=0;re--)X.has(re)&&_.splice(re,1)}}let le=a.hasControlFunctionImplicitParams??!1;if(!l&&t&&ie(t)&&t.isControlFunction&&n.forallParameters.length>0&&!J&&!le&&(J=gy({originalFunction:t,argValues:ne,calleeEnv:b,callerEnv:o,context:a}),J&&D(N))){let X=J.body?.$?.type;X&&!D(X)&&(N=X,J.specializedType&&(J.specializedType={...J.specializedType,return:{...J.specializedType.return,type:X}}))}let Ce=Ni(o),Me;if(Ce.length>0){let X=dy({variablesToDrop:Ce,env:o,context:a});Me=X.deferredDropExpressions,o=X.env}return{returnType:N,calleeEnv:b,callerEnv:o,pathCollection:z,argValues:ne,returnValue:G,specializedFunctionValue:J,runtimeArgExprsInOrder:_,deferredDropExpressions:Me}}function yy({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){if(xa){rr.specializeCount++;let M=e.funcName??e.funcId;rr.specializeNames.set(M,(rr.specializeNames.get(M)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(M=>M.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(M=>M.value)),o.parameters.forEach((M,V)=>{let z=t.args[V];if(M.isCompileTimeOnly)z.value&&a.push(z.value);else if(z.value&&ie(z.value)&&z.value.type.implicitParameters.some(ne=>q(ne.type)||Le(ne.type)))z.value&&a.push(z.value);else{let G=D(z.argType)&&z.argType.resolvedConcreteType&&!we(z.argType)?z.argType.resolvedConcreteType:z.argType;s.push({...M,type:G})}});let l=s.map(M=>M.type),u=e.specializedFunctionCaches.find(M=>M.compileTimeArgValues.length===a.length&&M.compileTimeArgValues.every((ee,ne)=>{let G=a[ne];return wt({value:ee,env:M.env},{value:G,env:r})})?M.runtimeParameterTypes.length===l.length&&M.runtimeParameterTypes.every((ee,ne)=>{let G=l[ne];return W({type:ee,env:M.env},{type:G,env:r},!0)}):!1);if(u)return xa&&rr.cacheHitCount++,u.specializedFunction;xa&&rr.cacheMissCount++;let c=n;for(let M of r.frames)for(let V of M.variables){if(!V.isCompileTimeOnly||j(c,V.name).length>0)continue;let{env:ee}=fe({env:c,variable:{...V},allowVariableShadowing:!0});c=ee}for(let M of s){let V=j(c,M.label);if(V.length>0){let z=V[V.length-1],ee={...z,value:void 0};c=ze(c,z,ee)}}let p=Ve(e.body),{returnType:f,calleeEnv:_}=si({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=_;let d=i.enclosingFunctionReturnType,g=t.implicitArgs?.some(M=>ie(M.value)&&M.value.isControlFunction||ft(M.value)&&ff(M.value.type,M.value))??!1,h=gt({expr:p,env:c,context:{...i,expectedType:{type:f,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:g,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!h.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let y=[],v=0;for(let M=0;M<o.implicitParameters.length;M++){let V=o.implicitParameters[M];if(q(V.type)){let z=t.implicitArgs?.[v];(z&&ie(z.value)?z.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v,label:V.label,type:V.type,fromSpread:!1}),v+=1}else if(V.isEffectRowSpread){let z=V.type;if(D(z)){let ne=j(c,V.label).at(-1)?.value?.[0];if(ne&&R(ne)&&_t(ne.value))z=ne.value;else{let G=St(c,z);G&&(z=G)}}if(_t(z)){for(let ee=0;ee<z.implicitParameters.length;ee++){let ne=z.implicitParameters[ee];if(q(ne.type)){let G=t.implicitArgs?.[v+ee];(G&&ie(G.value)?G.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v+ee,label:ne.label,type:ne.type,fromSpread:!0})}else if(Le(ne.type)){let G=t.implicitArgs?.[v+ee],J=G&&ft(G.value)?G.value:void 0,de=[],he=($e,B,oe)=>{for(let se=0;se<$e.fields.length;se++){let le=$e.fields[se];if(q(le.type)){let Ce=oe?.fields[se];if(Ce&&ie(Ce)&&Ce.isControlFunction){let Me=Ce.specializedType??le.type;de.push({path:[...B,le.label],type:Me})}}else if(Le(le.type)){let Ce=oe?.fields[se];he(le.type,[...B,le.label],Ce&&ft(Ce)?Ce:void 0)}}};he(ne.type,[],J);for(let $e of de)y.push({handlerArgIndex:v+ee,label:ne.label,type:$e.type,fromSpread:!0,effectFieldPath:$e.path})}}v+=z.implicitParameters.length}else v+=1}else if(Le(V.type)){let z=[],ee=t.implicitArgs?.[v],ne=(G,J,de)=>{for(let he=0;he<G.fields.length;he++){let $e=G.fields[he];if(q($e.type)){let B=de?.fields[he];if(B&&ie(B)&&B.isControlFunction){let oe=B.specializedType??$e.type;z.push({path:[...J,$e.label],type:oe})}}else if(Le($e.type)){let B=de?.fields[he];ne($e.type,[...J,$e.label],B&&ft(B)?B:void 0)}}};ne(V.type,[],ee&&ft(ee.value)?ee.value:void 0);for(let G of z)y.push({handlerArgIndex:v,label:V.label,type:G.type,fromSpread:!1,effectFieldPath:G.path});v+=1}else v+=1}let E=[];for(let M of y){let V=ga(h,M.label,M.type,!0,M.effectFieldPath);if(V.hasEffects){let z=t.implicitArgs?.[M.handlerArgIndex],ee,ne=M.effectFieldPath;if(z&&ie(z.value))ee=z.value;else if(z&&ft(z.value)&&ne&&ne.length>0){let G=z.value;for(let J of ne){if(!ft(G)){G=void 0;break}let de=G.type.fields.findIndex(he=>he.label===J);if(de<0||!G.fields[de]){G=void 0;break}G=G.fields[de]}G&&ie(G)&&(ee=G)}if(ee){let G=ee,J=M.type,de=!G.body.$;if(!de&&G.isControlFunction&&F(G.body)&&G.body.args.length>0&&!G.body.args[0]?.$&&(de=!0),de&&q(J)&&J.forallParameters.length>0&&V.effectCallPoints.length>0){let he=new Map,$e=J.return.type,B=V.effectCallPoints[0].operationResultType;if(D($e)&&he.set($e.name,B),he.size===0&&J.forallParameters.length===1){let X=J.forallParameters[0];he.set(X.label,B)}let oe=Ve(G.body),se=G.body.$?.env??c;se=Ue(se);for(let X of J.forallParameters){let Z=he.get(X.label);Z&&(se=fe({env:se,variable:{name:X.label,type:X.type,isCompileTimeOnly:!0,value:[Q(Z)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let le=G.specializedType??G.type,Ce=G.definitionSiteEnclosingFunctionType?.return.type??Rn(),Me={...i,expectedType:void 0,enclosingFunctionReturnType:Ce,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:le,value:G,evaluationEnv:se}};try{let X=li({expr:oe,env:se,context:Me}),Z=le.parameters.map(te=>{if(te.isCompileTimeOnly)return te;if(D(te.type)){let Ae=he.get(te.type.name);if(Ae)return{...te,type:Ae}}return te}),re=le.return.type;if(D(re)){let te=he.get(re.name);te&&(re=te)}let ce={...le,parameters:Z,return:{...le.return,type:re}},me={...G,body:X,specializedType:ce};V.handlerValue=me,V.effectParameterType=ce;for(let te of V.effectCallPoints)te.isTransitiveEffectCall&&(te.operationArgTypes=te.operationArgTypes.map(Ae=>D(Ae)?he.get(Ae.name)??Ae:Ae))}catch(X){if(F(G.body)&&G.body.args.length>0&&!G.body.args[0]?.$)throw X;V.handlerValue=G}}else V.handlerValue=G}else z&&(V.handlerValue=z.value);E.push({analysis:V,ctlParam:M})}}if(E.length===1)h.$.effectAnalysis=E[0].analysis;else if(E.length>1){let M=[],V=new Map,z=new Map,ee=[];for(let J=0;J<E.length;J++){let{analysis:de}=E[J];ee.push({effectParameterName:de.effectParameterName,effectParameterType:de.effectParameterType,effectFieldPath:de.effectFieldPath,handlerValue:de.handlerValue,operationArgTypes:de.effectCallPoints.length>0?de.effectCallPoints[0].operationArgTypes:[],operationResultType:de.effectCallPoints.length>0?de.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let he of de.effectCallPoints)M.push({...he,effectIndex:J});for(let he of de.capturedVariables)V.has(he.id)||V.set(he.id,he);for(let[he,$e]of de.variableIdRemapping)z.set(he,$e)}if(F(h)&&T(h,I.begin)){let J=h.args,de=new Map;for(let $e=0;$e<J.length;$e++)de.set(J[$e],$e);let he=$e=>{for(let B=0;B<J.length;B++)if(cl(J[B],$e.expr))return B;return 999};M.sort(($e,B)=>he($e)-he(B))}for(let J=0;J<M.length;J++)M[J].index=J;let ne=E[0].analysis,G={effectCallPoints:M,capturedVariables:Array.from(V.values()),hasEffects:!0,variableIdRemapping:z,effectParameterName:ne.effectParameterName,effectParameterType:ne.effectParameterType,effectFieldPath:ne.effectFieldPath,handlerValue:ne.handlerValue,effectHandlerInfos:ee};h.$.effectAnalysis=G}let $=[],C=M=>{if(R(M)){let V=M.value;if(!V.typeName&&V.id)return`${Se(M)}_id${V.id}`}return ie(M)?`fn_${M.funcId}`:Se(M)};o.forallParameters.forEach((M,V)=>{if(V<t.forallArgs.length){let z=t.forallArgs[V];$.push(K(C(z.value)))}else{let z=M.label,ee=j(n,z);ee.length>0&&ee[ee.length-1]?.value?.[0]?$.push(K(C(ee[ee.length-1].value[0]))):$.push("unknown")}}),o.parameters.forEach((M,V)=>{if(M.isCompileTimeOnly&&V<t.args.length){let z=t.args[V];z?$.push(K(C(z.value))):$.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(M=>{$.push(K(C(M.value)))}),s.forEach((M,V)=>{let z=M.type;(!z.typeName&&z.id||Fe(z))&&$.push(`rtparam${V}_${K(A(z))}_id${z.id}`)});let L=$.join("_"),b=Ii({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...o.return,type:f},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),O={...e,specializedType:b,body:h,isControlFunction:e.isControlFunction||Pn(h),funcId:`${e.funcId}_${L}`,funcName:`${e.funcName}_${L}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},N={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:O,env:h.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,N],O}function gy({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){let i=e.type,o=r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=e.definitionSiteEnclosingFunctionType?.return.type??Rn(),s=K(A(o)),l=e.specializedFunctionCaches.find(d=>d.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=Ue(t);for(let d of n.frames)for(let g of d.variables){if(!g.isCompileTimeOnly||j(u,g.name).length>0)continue;let{env:y}=fe({env:u,variable:{...g},allowVariableShadowing:!0});u=y}for(let d of i.forallParameters){let g=o,{env:h}=fe({env:u,variable:{name:d.label,type:d.type,isCompileTimeOnly:!0,value:[Q(g)],token:ae,initializedAtToken:ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=h}let c=Ve(e.body),p={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},f=li({expr:c,env:u,context:p}),_={...e,body:f,isControlFunction:e.isControlFunction||Pn(f),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:_,env:f.$?.env??u}],_}function hy({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let i=Ga(e);for(let o of i){if(we(o)||Gt(o)||o.resolvedConcreteType||o.requiredTraits&&o.requiredTraits.length>0)continue;if(!j(n,o.name).length){let s=tr(n,()=>!0),l=!1;for(let u of s)if(R(u.value?.[0])){let c=u.value[0].value,p=Ga(c);for(let f of p)if(f.name===o.name){l=!0;break}if(l)break}if(l)continue;throw m({token:t?.token??ae,errorMessage:`Failed to infer the function call return type.
10783
+ Please consider providing the expected type.`})}}}function cl(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(cl(e.func,t))return!0;for(let n of e.args)if(cl(n,t))return!0}return!1}function _f({expr:e,env:t,context:n}){let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
10784
10784
  ${k(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Iso expects a type as argument, but got:
10785
- ${k(r)}`});let a=i.$.value.value,s=eu(a,t);t=Sl({isoType:s,env:t,context:n});let l=J(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function ff({expr:e,env:t,context:n,isoType:r}){let i=e.args[0],o=x({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
10786
- ${k(i)}`});t=o.$.env;let a=o.$?.variableName;if(a){let s=j(t,a);if(s.length>0){let l=s[s.length-1];if(lr(l.type,new Set,t))throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because its type may form RC cycles.`});if(!l.isOwningTheRcValue)throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because it does not own its RC value.`});let c=t.frames.flatMap(p=>p.variables).filter(p=>p.isOwningTheSameRcValueAs?.id===l.id&&p.id!==l.id);if(c.length>0){let p=c.map(f=>f.name).join(", ");throw m({token:i.token,errorMessage:`Cannot isolate ${a}, also owned by: ${p}
10787
- Iso requires unique ownership (no aliases). Drop other aliases first.`})}}else throw m({token:i.token,errorMessage:`Variable ${a} not found in the environment.`})}return t=un(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Pe(e,!0),e}function _f({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:i}){if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the module. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((l,u)=>({...l,assignedValue:o[u]}))};for(let l=0;l<t.fields.length;l++){let u=t.fields[l],c=!1,p;for(let f=0;f<n.length;f++){let _=n[f],d;if(F(_)&&T(_,":",2)){if(d=_.args[0],_=_.args[1],!U(d))throw m({token:d.token,errorMessage:`Expected identifier for label, got:
10785
+ ${k(r)}`});let a=i.$.value.value,s=tu(a,t);t=Vl({isoType:s,env:t,context:n});let l=Q(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function df({expr:e,env:t,context:n,isoType:r}){let i=e.args[0],o=x({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
10786
+ ${k(i)}`});t=o.$.env;let a=o.$?.variableName;if(a){let s=j(t,a);if(s.length>0){let l=s[s.length-1];if(ur(l.type,new Set,t))throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because its type may form RC cycles.`});if(!l.isOwningTheRcValue)throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because it does not own its RC value.`});let c=t.frames.flatMap(p=>p.variables).filter(p=>p.isOwningTheSameRcValueAs?.id===l.id&&p.id!==l.id);if(c.length>0){let p=c.map(f=>f.name).join(", ");throw m({token:i.token,errorMessage:`Cannot isolate ${a}, also owned by: ${p}
10787
+ Iso requires unique ownership (no aliases). Drop other aliases first.`})}}else throw m({token:i.token,errorMessage:`Variable ${a} not found in the environment.`})}return t=un(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Pe(e,!0),e}function mf({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:i}){if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the module. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((l,u)=>({...l,assignedValue:o[u]}))};for(let l=0;l<t.fields.length;l++){let u=t.fields[l],c=!1,p;for(let f=0;f<n.length;f++){let _=n[f],d;if(F(_)&&T(_,":",2)){if(d=_.args[0],_=_.args[1],!U(d))throw m({token:d.token,errorMessage:`Expected identifier for label, got:
10788
10788
  ${k(d)}`});p=d.token.value}else throw m({token:_.token,errorMessage:`Expected member label, but got:
10789
10789
  ${k(_)}`});if(!t.fields.find(g=>g.label===p))throw m({token:d.token,errorMessage:`Module member with label "${p}" does not exist in the module type.`});if(u.label===p){if(c=!0,u.assignedValue)throw m({token:_.token,errorMessage:`Module member "${u.label}" already has a assigned value:
10790
- ${Se(u.assignedValue)}`});let g,h=u.exprs.typeExpr,y=u.exprs.defaultValueExpr;if(h){let L=x({expr:Ve(h),env:ze(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$?.value;if(!R(L))throw m({token:_.token,errorMessage:`Failed to evaluate the module member "${p}"`});g=L.value}else if(y){let L=x({expr:Ve(y),env:ze(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$?.value;if(!L)throw m({token:_.token,errorMessage:`Failed to evaluate the module member "${p}"`});g=L.type}else throw m({token:_.token,errorMessage:`Module member "${p}" has no type or default value or assigned value.`});let v=x({expr:_,env:r,context:{...i,expectedType:{type:g,env:r},ReceiverType:void 0,SelfType:void 0}}),E=v.$?.type;if(!E)throw m({token:_.token,errorMessage:`Failed to evaluate the module member "${p}"`});if(v.$?.env&&(r=v.$.env),!W({type:g,env:r},{type:E,env:r}))throw m({token:_.token,errorMessage:`Type mismatch for the module member "${p}":
10790
+ ${Se(u.assignedValue)}`});let g,h=u.exprs.typeExpr,y=u.exprs.defaultValueExpr;if(h){let L=x({expr:Ve(h),env:Ue(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$?.value;if(!R(L))throw m({token:_.token,errorMessage:`Failed to evaluate the module member "${p}"`});g=L.value}else if(y){let L=x({expr:Ve(y),env:Ue(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$?.value;if(!L)throw m({token:_.token,errorMessage:`Failed to evaluate the module member "${p}"`});g=L.type}else throw m({token:_.token,errorMessage:`Module member "${p}" has no type or default value or assigned value.`});let v=x({expr:_,env:r,context:{...i,expectedType:{type:g,env:r},ReceiverType:void 0,SelfType:void 0}}),E=v.$?.type;if(!E)throw m({token:_.token,errorMessage:`Failed to evaluate the module member "${p}"`});if(v.$?.env&&(r=v.$.env),!W({type:g,env:r},{type:E,env:r}))throw m({token:_.token,errorMessage:`Type mismatch for the module member "${p}":
10791
10791
  Expected: ${A(g)}
10792
- Got: ${A(E)}`});let $=v.$?.value;E.ioBuiltin&&(t.fields[l].type.ioBuiltin=E.ioBuiltin),ie($)&&($.funcId+=`_${u.label}`,!$.specializedType&&H(g)&&($.specializedType={...g,parameters:$.type.parameters,parametersFrame:$.type.parametersFrame})),o[l]=$,a.fields[l].assignedValue=$,_.$={env:r,type:E,value:$,pathCollection:[]},d&&(d.$=_.$);break}}if(!c){let f=u.defaultValue,_=u.assignedValue,d=_;if(!_&&f&&(d=f),!d)throw m({token:e.token,errorMessage:`Module member "${u.label}" is not provided and has no required/default value.`});o[l]=d,a.fields[l].assignedValue=d}}return{moduleValue:Wo({...t},o),callerEnv:r}}function df({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!Ie(e))return;let o=x({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${k(t)}`});let a=o.$.env,s=o.$.type;if($t(s)&&(Dn(e.childType)||ci(e.childType))){let u=ut({type:s,expectedType:e,expr:o,env:a});return o.$={...o.$,type:u,convertedRuntimeType:u},Object.assign(n,o),n.$=o.$,{expr:n,env:a}}if(!Ie(s))throw m({token:t.token,errorMessage:`Cannot cast ${A(s)} to ${A(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:w.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection,runtimeArgExprsInOrder:[o]}};return Zo(n,l),{expr:n,env:a}}function mf({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the trait. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((p,f)=>({...p,assignedValue:o[f]}))},s=i.ReceiverType,l=i.ReceiverType??a;if(!s)throw m({token:e.token,errorMessage:`Receiver type is undefined when implementing trait.
10792
+ Got: ${A(E)}`});let $=v.$?.value;E.ioBuiltin&&(t.fields[l].type.ioBuiltin=E.ioBuiltin),ie($)&&($.funcId+=`_${u.label}`,!$.specializedType&&q(g)&&($.specializedType={...g,parameters:$.type.parameters,parametersFrame:$.type.parametersFrame})),o[l]=$,a.fields[l].assignedValue=$,_.$={env:r,type:E,value:$,pathCollection:[]},d&&(d.$=_.$);break}}if(!c){let f=u.defaultValue,_=u.assignedValue,d=_;if(!_&&f&&(d=f),!d)throw m({token:e.token,errorMessage:`Module member "${u.label}" is not provided and has no required/default value.`});o[l]=d,a.fields[l].assignedValue=d}}return{moduleValue:Wo({...t},o),callerEnv:r}}function yf({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!Ie(e))return;let o=x({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${k(t)}`});let a=o.$.env,s=o.$.type;if($t(s)&&(Dn(e.childType)||ci(e.childType))){let u=ut({type:s,expectedType:e,expr:o,env:a});return o.$={...o.$,type:u,convertedRuntimeType:u},Object.assign(n,o),n.$=o.$,{expr:n,env:a}}if(!Ie(s))throw m({token:t.token,errorMessage:`Cannot cast ${A(s)} to ${A(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:w.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection,runtimeArgExprsInOrder:[o]}};return Zo(n,l),{expr:n,env:a}}function gf({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!F(a)||!T(a,":=",2))throw m({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
10793
+ ${k(a)}`});let s=a.args[0],l=a.args[1];if(!U(s))throw m({token:s.token,errorMessage:`Expected identifier for associated type label, got:
10794
+ ${k(s)}`});let u=s.token.value,c=e.fields.find(f=>f.label===u);if(!c)throw m({token:s.token,errorMessage:`Field "${u}" not found in trait "${e.typeName??"unknown"}".`});if(!c.unassignedSomeType&&!We(c.type))throw m({token:s.token,errorMessage:`Field "${u}" is not an associated type. Only associated type fields can be constrained with ":=".`});let p=x({expr:l,env:n,context:{...r}});if(!p.$||!R(p.$.value))throw m({token:l.token,errorMessage:`Expected type for associated type constraint "${u}", got:
10795
+ ${k(l)}`});n=p.$.env,i.push({label:u,constraintType:p.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function hf({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the trait. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((p,f)=>({...p,assignedValue:o[f]}))},s=i.ReceiverType,l=i.ReceiverType??a;if(!s)throw m({token:e.token,errorMessage:`Receiver type is undefined when implementing trait.
10793
10796
  Please consider using "impl" to specify the receiver type explicitly, like:
10794
10797
 
10795
10798
  // impl receiverType, traitImplementation
@@ -10799,19 +10802,20 @@ impl Point, Id(Point)(
10799
10802
  `});let u=s.trait;s.trait?s.trait={...s.trait,fields:[...a.fields,...s.trait.fields]}:s.trait=a;for(let p=0;p<t.fields.length;p++){let f=t.fields[p],_=!1,d;for(let g=0;g<n.length;g++){let h=n[g],y;if(F(h)&&T(h,":",2)){if(y=h.args[0],h=h.args[1],!U(y))throw m({token:y.token,errorMessage:`Expected identifier for label, got:
10800
10803
  ${k(y)}`});d=y.token.value}else throw m({token:h.token,errorMessage:`Expected member label, but got:
10801
10804
  ${k(h)}`});if(!t.fields.find(v=>v.label===d))throw m({token:y.token,errorMessage:`Trait member with label "${d}" does not exist in the trait type.`});if(f.label===d){if(_=!0,f.assignedValue)throw m({token:h.token,errorMessage:`Trait member "${f.label}" already has a assigned value:
10802
- ${Se(f.assignedValue)}`});let v,E=f.exprs.typeExpr,$=f.exprs.defaultValueExpr;if(E){let N=x({expr:Ve(E),env:ze(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$?.value;if(!R(N))throw m({token:h.token,errorMessage:`Failed to evaluate the trait member "${d}"`});v=N.value}else if($){let N=x({expr:Ve($),env:ze(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$?.value;if(!N)throw m({token:h.token,errorMessage:`Failed to evaluate the trait member "${d}"`});v=N.type}else throw m({token:h.token,errorMessage:`Trait member "${d}" has no type or default value or assigned value.`});let C=x({expr:h,env:r,context:{...i,expectedType:{type:v,env:r},ReceiverType:void 0,SelfType:l}}),L=C.$?.type;if(!L)throw m({token:h.token,errorMessage:`Failed to evaluate the trait member "${d}"`});if(C.$?.env&&(r=C.$.env),!W({type:v,env:r},{type:L,env:r}))throw m({token:h.token,errorMessage:`Type mismatch for the trait member "${d}":
10805
+ ${Se(f.assignedValue)}`});let v,E=f.exprs.typeExpr,$=f.exprs.defaultValueExpr;if(E){let N=x({expr:Ve(E),env:Ue(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$?.value;if(!R(N))throw m({token:h.token,errorMessage:`Failed to evaluate the trait member "${d}"`});v=N.value}else if($){let N=x({expr:Ve($),env:Ue(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$?.value;if(!N)throw m({token:h.token,errorMessage:`Failed to evaluate the trait member "${d}"`});v=N.type}else throw m({token:h.token,errorMessage:`Trait member "${d}" has no type or default value or assigned value.`});let C=x({expr:h,env:r,context:{...i,expectedType:{type:v,env:r},ReceiverType:void 0,SelfType:l}}),L=C.$?.type;if(!L)throw m({token:h.token,errorMessage:`Failed to evaluate the trait member "${d}"`});if(C.$?.env&&(r=C.$.env),!W({type:v,env:r},{type:L,env:r}))throw m({token:h.token,errorMessage:`Type mismatch for the trait member "${d}":
10803
10806
  Expected: ${A(v)}
10804
- Got: ${A(L)}`});let b=C.$?.value;ie(b)&&(b.funcId+=`_${f.label}`,!b.specializedType&&H(v)&&(b.specializedType={...v,parameters:b.type.parameters,parametersFrame:b.type.parametersFrame})),o[p]=b,a.fields[p].assignedValue=b,s&&s.trait&&(s.trait.fields[p].assignedValue=b),h.$={env:r,type:L,value:b,pathCollection:[]},y&&(y.$=h.$);break}}if(!_){let g=f.defaultValue,h=f.assignedValue,y=h;if(!h&&g&&(y=g),!y)throw m({token:e.token,errorMessage:`Trait member "${f.label}" is not provided and has no required/default value.`});o[p]=y,a.fields[p].assignedValue=y}}return s&&u&&(s.trait=u),{traitValue:_i({...t,receiverType:s},o),callerEnv:r}}function Ia({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:i,isUnionType:o}){if(n.length>e.length)throw m({token:t.token,errorMessage:`Failed to call the type. Too many members provided. Expected ${e.length} arguments, got ${n.length}.`});if(o&&n.length!==1)throw m({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 p=e[c],f=n[c];if(!f)break;let _;if(F(f)&&T(f,":",2)&&(_=f.args[0],f=f.args[1],!U(_)))throw m({token:_.token,errorMessage:`Expected identifier for label, got:
10807
+ Got: ${A(L)}`});let b=C.$?.value;ie(b)&&(b.funcId+=`_${f.label}`,!b.specializedType&&q(v)&&(b.specializedType={...v,parameters:b.type.parameters,parametersFrame:b.type.parametersFrame})),o[p]=b,a.fields[p].assignedValue=b,s&&s.trait&&(s.trait.fields[p].assignedValue=b),h.$={env:r,type:L,value:b,pathCollection:[]},y&&(y.$=h.$);break}}if(!_){let g=f.defaultValue,h=f.assignedValue,y=h;if(!h&&g&&(y=g),!y)throw m({token:e.token,errorMessage:`Trait member "${f.label}" is not provided and has no required/default value.`});o[p]=y,a.fields[p].assignedValue=y}}s&&u&&(s.trait=u);for(let p=0;p<t.fields.length;p++){let f=t.fields[p];if(!f.unassignedSomeType)continue;let _=f.unassignedSomeType,d=o[p];if(!d||!R(d))continue;let g=d.value;if(!Fe(g))for(let{traitType:h}of _.requiredTraits){let y=h;if(h.associatedTypeConstraints){let E=h.associatedTypeConstraints.map($=>{let C=$.constraintType;if(D(C)){for(let L=0;L<t.fields.length;L++)if(t.fields[L].unassignedSomeType===C){let O=o[L];O&&R(O)&&(C=O.value);break}}return{...$,constraintType:C}});y={...h,associatedTypeConstraints:E}}if(!Ft({targetType:g,traitType:y,env:r}))throw m({token:e.token,errorMessage:`Where clause constraint not satisfied: ${A(g)} does not implement ${y.typeName??"trait"}(${y.associatedTypeConstraints?.map(E=>`${E.label} := ${A(E.constraintType)}`).join(", ")??""}).
10808
+ Field "${f.label}" must satisfy the trait's where clause.`})}}return{traitValue:_i({...t,receiverType:s},o),callerEnv:r}}function Na({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:i,isUnionType:o}){if(n.length>e.length)throw m({token:t.token,errorMessage:`Failed to call the type. Too many members provided. Expected ${e.length} arguments, got ${n.length}.`});if(o&&n.length!==1)throw m({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 p=e[c],f=n[c];if(!f)break;let _;if(F(f)&&T(f,":",2)&&(_=f.args[0],f=f.args[1],!U(_)))throw m({token:_.token,errorMessage:`Expected identifier for label, got:
10805
10809
  ${k(_)}`});if(_){let y=_.token.value,v=e.find(E=>E.label===y);if(v){if(v.assignedValue)throw m({token:f.token,errorMessage:`Cannot use label "${y}" for already assigned value:
10806
10810
  ${bi(v)}`});p=v}else throw m({token:f.token,errorMessage:`Failed to find "${y}" in the type.`})}if(a.has(p))throw m({token:f.token,errorMessage:`Type member "${p.label}" is already implemented.`});let d=e.indexOf(p),g=x({expr:f,env:r,context:{...i,expectedType:{type:p.type,env:r}}});if(!g.$)throw m({token:f.token,errorMessage:`Failed to evaluate argument expression:
10807
10811
  ${k(f)}`});Rt(g,i),r=g.$.env;let h=g.$.type;if(zr(p.type,r)||(h=ut({type:h,expectedType:p.type,expr:g,env:r})),_&&(_.$=g.$),!W({type:p.type,env:r},{type:h,env:r}))throw m({token:f.token,errorMessage:`Type mismatch for type member "${p.label}":
10808
10812
  Expected: ${A(p.type)}
10809
- Got: ${A(h)}`});s[d]=g.$?.value,l[d]=g,a.add(p)}if(!o)for(let c=0;c<e.length;c++){let p=e[c];if(!a.has(p)){if(!p.defaultValue&&!p.assignedValue)throw m({token:t.token,errorMessage:`Type member "${p.label}" is not provided and has no default value or assigned value.`});s[c]=p.defaultValue??p.assignedValue,l[c]=p.exprs.defaultValueExpr??p.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function yy(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:i}=e.recursiveTypeRef,o=r.calledComptimeFunctionCaches.find(s=>s.argValues.length===i.length&&s.argValues.every((l,u)=>{let c=i[u];return R(l)&&R(c)?W({type:l.value,env:s.env},{type:c.value,env:t},!0):wt({value:l,env:s.env},{value:c,env:t})}));if(o&&R(o.value)&&!(M(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n?.SelfType&&dt(n.SelfType)||n?.SelfType&&ue(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!R(s.value)||M(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&R(a.value))return a.value.value}function Fn({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(F(o)){let y=x({expr:o,env:t,context:{...n}});if(o=y,y.$?.type)l=[{type:y.$.type,value:y.$.value}];else if(F(y)&&T(y,".",2)){let v=y.args[0];s=y.args[1];let E=v.$?.type;if(!E)throw m({token:v.token,errorMessage:"Expected to be evaluated."});let $=v.$?.value,C=R($);if(U(s)){let L=s.token.value;if(C){let b=$.value;l=bu({env:t,context:n,methodName:L,type:b}).map(N=>({type:N.type,value:N.value,args:a}))}else l=zs({env:t,context:n,methodName:L,receiverType:E,isInfixOperatorCall:!1}).map(O=>{let N;if(O.needsPointerConversion){let D={tag:"Atom",token:v.token,$:void 0};D.token={...v.token,value:"&",type:"identifier"},N=[{tag:"FnCall",func:D,args:[v],token:v.token,$:void 0},...a]}else N=[v,...a];return{type:O.type,value:O.value,needsPointerConversion:O.needsPointerConversion,args:N}})}else{let L=x({expr:s,env:t,context:{...n}});L.$?.env&&(t=L.$?.env),s=L;let b=s.$?.type,O=s.$?.value;if(!b)throw m({token:s.token,errorMessage:"Expected to be a function."});l=[{type:b,value:O}],a=[v,...a]}}else throw m({token:o.token,errorMessage:`Expected type for function call, got ${k(y)}`})}else{let y=o.token.value;if(y==="_"){let v=n.expectedType;if(!v||M(v.type))return Jp({expr:e,env:t,context:n});l=[{type:Tt(v.type),value:J(v.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Gn(y)&&e.isInfix){let v=a[0];if(!v)throw m({token:o.token,errorMessage:`Expected first argument for operator, got:
10810
- ${k(o)}`});let $=x({expr:v,env:t,context:{...n,expectedType:void 0}}).$?.type;if(!$)throw m({token:v.token,errorMessage:"Expected to be evaluated."});let C=y;s=o,l=zs({env:t,context:n,methodName:C,receiverType:$,isInfixOperatorCall:!0}).map(b=>({type:b.type,value:b.value,needsPointerConversion:b.needsPointerConversion}))}else if(y==="Call"&&n.SelfType){let v=J(n.SelfType);l=[{type:v.type,value:v}]}else{let v=x({expr:o,env:t,context:{...n}});if(o=v,!v.$)throw m({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(Fe(v.$.type)){let E=v.$.type,$=E.fields.findIndex(L=>L.label==="Call");if($<0)throw m({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let C=E.fields[$];if(C.assignedValue){let L=C.assignedValue;sn(L)?l=L.fields.map(b=>({type:b.type,value:b})):l=[{type:L.type,value:L}]}else throw m({token:o.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:v.$.type,value:v.$.value}]}}let u=l.length===1&&H(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!He(l[0].type.return.type)&&l[0].type.forallParameters.length===0,f=l.length===1&&(H(l[0].type)||(M(l[0].type)||Ne(l[0].type))&&!!jt(l[0].type))?l.map(y=>({...y,result:{kind:"function",result:void 0}})):l.map(y=>{let v=y.args??a;if(H(y.type))try{let E=Dr({functionValue:qi(y.value),functionType:y.type,expr:Ve(e),functionCalleeExpr:o,argExprs:v.map($=>Ve($)),callerEnv:Us(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...y,result:{kind:"function",result:E}}}catch(E){if(E instanceof rn&&E.kind==="overflow")throw nt([{token:e.token,errorMessage:`Failed to call the function:
10811
- `},...E.tokenAndErrorList],E.isAssertionError);return{...y,result:{kind:"error",error:E}}}else if((M(y.type)||Ne(y.type))&&jt(y.type)){let E=jt(y.type);try{let $=Dr({functionValue:qi(y.value),functionType:E.isFn.callType,expr:Ve(e),functionCalleeExpr:o,argExprs:v.map(C=>Ve(C)),callerEnv:Us(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...y,result:{kind:"function",result:$}}}catch($){if($ instanceof rn&&$.kind==="overflow")throw nt([{token:e.token,errorMessage:`Failed to call the function:
10812
- `},...$.tokenAndErrorList],$.isAssertionError);return{...y,result:{kind:"error",error:$}}}}else{let E=y.value;if(R(E)&&M(E.value)&&E.value.recursiveTypeRef){let $=yy(E.value,t,n);$&&(E=J($),y.value=E,y.type=E.type)}if(R(E)&&ue(E.value))try{let $=Ia({typeFields:E.value.fields,functionCalleeExpr:o,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"type",result:$}}}catch($){return{...y,result:{kind:"error",error:$}}}else if(R(E)&&ye(E.value)){let $=E.value,C=$.variants.find(L=>L.name===$.selectedVariantName);if(C)try{let L=Ia({typeFields:C.fields||[],functionCalleeExpr:o,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"type",result:L}}}catch(L){return{...y,result:{kind:"error",error:L}}}else return{...y,result:{kind:"error",error:m({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(R(E)&&lt(E.value))try{let $=Ia({typeFields:E.value.fields,functionCalleeExpr:o,argExprs:v,callerEnv:t,context:{...n},isUnionType:!0});return{...y,result:{kind:"type",result:$}}}catch($){return{...y,result:{kind:"error",error:$}}}else if(R(E)&&Fe(E.value)){let $=E.value;try{let C=_f({moduleExpr:o,moduleType:$,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"module-type",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&xe(E.value)){let $=E.value;try{let C=mf({traitExpr:o,traitType:$,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"trait-type",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&H(E.value)){let $=E.value;try{return af({expr:e,functionType:$,callerEnv:t,context:{...n}}),{...y,result:{kind:"function-type"}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&be(E.value)){let $=E.value;try{return rf({expr:e,arrayType:$,argExprs:v,callerEnv:t,context:{...n}}),{...y,result:{kind:"array-type"}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&Lt(E.value)){let $=E.value;try{return lf({expr:e,comptimeListType:$,argExprs:v,callerEnv:t,context:{...n}}),{...y,result:{kind:"array-type"}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&(M(E.value)||Ne(E.value))){let $=E.value,C=jt($);if(C)try{return sf({expr:e,fnModuleType:C,wrapperType:$,callerEnv:t,context:{...n}}),{...y,result:{kind:"closure-type"}}}catch(L){return{...y,result:{kind:"error",error:L}}}else if(M($)&&$.recursiveTypeRef)try{let L=[];for(let b of v){let O=x({expr:b,env:t,context:{...n}});if(!O.$)throw m({token:b.token,errorMessage:"Failed to evaluate argument"});t=O.$.env,L.push(O)}return{...y,result:{kind:"type",result:{values:L.map(b=>b.$.value),pathCollection:[],runtimeArgExprsInOrder:L,callerEnv:t}}}}catch(L){return{...y,result:{kind:"error",error:L}}}else return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
10813
- ${R(E)?A(E.value):A(y.type)}`})}}}else if(be(y.type)||je(y.type))try{let $=y.value,C=Ln($)?$:void 0,L=zo($)?$:void 0,b=nf({expr:e,arrayType:y.type,arrayValue:C,sliceValue:L,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"array",result:b}}}catch($){return{...y,result:{kind:"error",error:$}}}else if(R(E)&&xo(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${v.length}`})}};try{let C=Bp({targetType:$,argExpr:v[0],expr:e,callerEnv:t,context:{...n}});return C?{...y,result:{kind:"numeric-type",result:C}}:{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to convert to numeric type ${A($)}`})}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&Ie(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${v.length}`})}};try{let C=df({targetType:$,argExpr:v[0],expr:e,callerEnv:t,context:{...n}});return C?{...y,result:{kind:"pointer-type",result:C}}:{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to cast to pointer type ${A($)}`})}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&kt(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${v.length}`})}};try{let C=ff({expr:e,env:t,context:{...n},isoType:$});return{...y,result:{kind:"iso-value",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&bt(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Arc value constructor expects exactly 1 argument, got ${v.length}`})}};try{let C=tf({expr:e,env:t,context:{...n},arcType:$});return{...y,result:{kind:"arc-value",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
10814
- ${R(E)?A(E.value):A(y.type)}`})}}}}),_=f.filter(y=>y.result.kind!=="error"),d=_.filter(y=>H(y.type)&&y.type.return.isCompileTimeOnly);if(d.length===1&&(_=d),_.length>1){let y=_.filter(v=>H(v.type)?v.type.parameters.some($=>pt($.type)||Ft($.type)||$t($.type)):!1);y.length===1&&(_=y)}if(_.length===0){if(f.length===1&&f[0].result.kind==="error"){let y=f[0].result.error;throw y instanceof rn?nt([{token:e.token,errorMessage:`Failed to call the function:
10813
+ Got: ${A(h)}`});s[d]=g.$?.value,l[d]=g,a.add(p)}if(!o)for(let c=0;c<e.length;c++){let p=e[c];if(!a.has(p)){if(!p.defaultValue&&!p.assignedValue)throw m({token:t.token,errorMessage:`Type member "${p.label}" is not provided and has no default value or assigned value.`});s[c]=p.defaultValue??p.assignedValue,l[c]=p.exprs.defaultValueExpr??p.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function vy(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:i}=e.recursiveTypeRef,o=r.calledComptimeFunctionCaches.find(s=>s.argValues.length===i.length&&s.argValues.every((l,u)=>{let c=i[u];return R(l)&&R(c)?W({type:l.value,env:s.env},{type:c.value,env:t},!0):wt({value:l,env:s.env},{value:c,env:t})}));if(o&&R(o.value)&&!(D(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n?.SelfType&&mt(n.SelfType)||n?.SelfType&&ue(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!R(s.value)||D(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&R(a.value))return a.value.value}function Fn({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(F(o)){let y=x({expr:o,env:t,context:{...n}});if(o=y,y.$?.type)l=[{type:y.$.type,value:y.$.value}];else if(F(y)&&T(y,".",2)){let v=y.args[0];s=y.args[1];let E=v.$?.type;if(!E)throw m({token:v.token,errorMessage:"Expected to be evaluated."});let $=v.$?.value,C=R($);if(U(s)){let L=s.token.value;if(C){let b=$.value;l=wu({env:t,context:n,methodName:L,type:b}).map(N=>({type:N.type,value:N.value,args:a}))}else l=Bs({env:t,context:n,methodName:L,receiverType:E,isInfixOperatorCall:!1}).map(O=>{let N;if(O.needsPointerConversion){let M={tag:"Atom",token:v.token,$:void 0};M.token={...v.token,value:"&",type:"identifier"},N=[{tag:"FnCall",func:M,args:[v],token:v.token,$:void 0},...a]}else N=[v,...a];return{type:O.type,value:O.value,needsPointerConversion:O.needsPointerConversion,args:N}})}else{let L=x({expr:s,env:t,context:{...n}});L.$?.env&&(t=L.$?.env),s=L;let b=s.$?.type,O=s.$?.value;if(!b)throw m({token:s.token,errorMessage:"Expected to be a function."});l=[{type:b,value:O}],a=[v,...a]}}else throw m({token:o.token,errorMessage:`Expected type for function call, got ${k(y)}`})}else{let y=o.token.value;if(y==="_"){let v=n.expectedType;if(!v||D(v.type))return tf({expr:e,env:t,context:n});l=[{type:Tt(v.type),value:Q(v.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Gn(y)&&e.isInfix){let v=a[0];if(!v)throw m({token:o.token,errorMessage:`Expected first argument for operator, got:
10814
+ ${k(o)}`});let $=x({expr:v,env:t,context:{...n,expectedType:void 0}}).$?.type;if(!$)throw m({token:v.token,errorMessage:"Expected to be evaluated."});let C=y;s=o,l=Bs({env:t,context:n,methodName:C,receiverType:$,isInfixOperatorCall:!0}).map(b=>({type:b.type,value:b.value,needsPointerConversion:b.needsPointerConversion}))}else if(y==="Call"&&n.SelfType){let v=Q(n.SelfType);l=[{type:v.type,value:v}]}else{let v=x({expr:o,env:t,context:{...n}});if(o=v,!v.$)throw m({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(Le(v.$.type)){let E=v.$.type,$=E.fields.findIndex(L=>L.label==="Call");if($<0)throw m({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let C=E.fields[$];if(C.assignedValue){let L=C.assignedValue;sn(L)?l=L.fields.map(b=>({type:b.type,value:b})):l=[{type:L.type,value:L}]}else throw m({token:o.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:v.$.type,value:v.$.value}]}}let u=l.length===1&&q(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!We(l[0].type.return.type)&&l[0].type.forallParameters.length===0,f=l.length===1&&(q(l[0].type)||(D(l[0].type)||Ne(l[0].type))&&!!jt(l[0].type))?l.map(y=>({...y,result:{kind:"function",result:void 0}})):l.map(y=>{let v=y.args??a;if(q(y.type))try{let E=Dr({functionValue:Hi(y.value),functionType:y.type,expr:Ve(e),functionCalleeExpr:o,argExprs:v.map($=>Ve($)),callerEnv:zs(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...y,result:{kind:"function",result:E}}}catch(E){if(E instanceof rn&&E.kind==="overflow")throw nt([{token:e.token,errorMessage:`Failed to call the function:
10815
+ `},...E.tokenAndErrorList],E.isAssertionError);return{...y,result:{kind:"error",error:E}}}else if((D(y.type)||Ne(y.type))&&jt(y.type)){let E=jt(y.type);try{let $=Dr({functionValue:Hi(y.value),functionType:E.isFn.callType,expr:Ve(e),functionCalleeExpr:o,argExprs:v.map(C=>Ve(C)),callerEnv:zs(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...y,result:{kind:"function",result:$}}}catch($){if($ instanceof rn&&$.kind==="overflow")throw nt([{token:e.token,errorMessage:`Failed to call the function:
10816
+ `},...$.tokenAndErrorList],$.isAssertionError);return{...y,result:{kind:"error",error:$}}}}else{let E=y.value;if(R(E)&&D(E.value)&&E.value.recursiveTypeRef){let $=vy(E.value,t,n);$&&(E=Q($),y.value=E,y.type=E.type)}if(R(E)&&ue(E.value))try{let $=Na({typeFields:E.value.fields,functionCalleeExpr:o,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"type",result:$}}}catch($){return{...y,result:{kind:"error",error:$}}}else if(R(E)&&ye(E.value)){let $=E.value,C=$.variants.find(L=>L.name===$.selectedVariantName);if(C)try{let L=Na({typeFields:C.fields||[],functionCalleeExpr:o,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"type",result:L}}}catch(L){return{...y,result:{kind:"error",error:L}}}else return{...y,result:{kind:"error",error:m({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(R(E)&&lt(E.value))try{let $=Na({typeFields:E.value.fields,functionCalleeExpr:o,argExprs:v,callerEnv:t,context:{...n},isUnionType:!0});return{...y,result:{kind:"type",result:$}}}catch($){return{...y,result:{kind:"error",error:$}}}else if(R(E)&&Le(E.value)){let $=E.value;try{let C=mf({moduleExpr:o,moduleType:$,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"module-type",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&xe(E.value)){let $=E.value;if(v.some(L=>F(L)&&T(L,":=",2)))try{let L=gf({traitExpr:o,traitType:$,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"trait-specialization",result:L}}}catch(L){return{...y,result:{kind:"error",error:L}}}try{let L=hf({traitExpr:o,traitType:$,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"trait-type",result:L}}}catch(L){return{...y,result:{kind:"error",error:L}}}}else if(R(E)&&q(E.value)){let $=E.value;try{return lf({expr:e,functionType:$,callerEnv:t,context:{...n}}),{...y,result:{kind:"function-type"}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&be(E.value)){let $=E.value;try{return af({expr:e,arrayType:$,argExprs:v,callerEnv:t,context:{...n}}),{...y,result:{kind:"array-type"}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&At(E.value)){let $=E.value;try{return cf({expr:e,comptimeListType:$,argExprs:v,callerEnv:t,context:{...n}}),{...y,result:{kind:"array-type"}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&(D(E.value)||Ne(E.value))){let $=E.value,C=jt($);if(C)try{return uf({expr:e,fnModuleType:C,wrapperType:$,callerEnv:t,context:{...n}}),{...y,result:{kind:"closure-type"}}}catch(L){return{...y,result:{kind:"error",error:L}}}else if(D($)&&$.recursiveTypeRef)try{let L=[];for(let b of v){let O=x({expr:b,env:t,context:{...n}});if(!O.$)throw m({token:b.token,errorMessage:"Failed to evaluate argument"});t=O.$.env,L.push(O)}return{...y,result:{kind:"type",result:{values:L.map(b=>b.$.value),pathCollection:[],runtimeArgExprsInOrder:L,callerEnv:t}}}}catch(L){return{...y,result:{kind:"error",error:L}}}else return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
10817
+ ${R(E)?A(E.value):A(y.type)}`})}}}else if(be(y.type)||je(y.type))try{let $=y.value,C=Ln($)?$:void 0,L=zo($)?$:void 0,b=of({expr:e,arrayType:y.type,arrayValue:C,sliceValue:L,argExprs:v,callerEnv:t,context:{...n}});return{...y,result:{kind:"array",result:b}}}catch($){return{...y,result:{kind:"error",error:$}}}else if(R(E)&&xo(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${v.length}`})}};try{let C=Wp({targetType:$,argExpr:v[0],expr:e,callerEnv:t,context:{...n}});return C?{...y,result:{kind:"numeric-type",result:C}}:{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to convert to numeric type ${A($)}`})}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&Ie(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${v.length}`})}};try{let C=yf({targetType:$,argExpr:v[0],expr:e,callerEnv:t,context:{...n}});return C?{...y,result:{kind:"pointer-type",result:C}}:{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to cast to pointer type ${A($)}`})}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&kt(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${v.length}`})}};try{let C=df({expr:e,env:t,context:{...n},isoType:$});return{...y,result:{kind:"iso-value",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else if(R(E)&&bt(E.value)){let $=E.value;if(v.length!==1)return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Arc value constructor expects exactly 1 argument, got ${v.length}`})}};try{let C=rf({expr:e,env:t,context:{...n},arcType:$});return{...y,result:{kind:"arc-value",result:C}}}catch(C){return{...y,result:{kind:"error",error:C}}}}else return{...y,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
10818
+ ${R(E)?A(E.value):A(y.type)}`})}}}}),_=f.filter(y=>y.result.kind!=="error"),d=_.filter(y=>q(y.type)&&y.type.return.isCompileTimeOnly);if(d.length===1&&(_=d),_.length>1){let y=_.filter(v=>q(v.type)?v.type.parameters.some($=>pt($.type)||Lt($.type)||$t($.type)):!1);y.length===1&&(_=y)}if(_.length===0){if(f.length===1&&f[0].result.kind==="error"){let y=f[0].result.error;throw y instanceof rn?nt([{token:e.token,errorMessage:`Failed to call the function:
10815
10819
 
10816
10820
  ${y.tokenAndErrorList.filter(({token:v})=>v.modulePath!==e.token.modulePath).map(({errorMessage:v})=>`- ${v}`).join(`
10817
10821
  `)}`},...y.tokenAndErrorList.filter(({token:v})=>v.modulePath===e.token.modulePath)],y.isAssertionError):nt([{token:e.token,errorMessage:`Failed to call the function:
@@ -10827,232 +10831,232 @@ ${k(e)}
10827
10831
  Found ${_.length} matching calls:
10828
10832
  ${_.map(y=>`${A(y.type)}`).join(`
10829
10833
  `)}
10830
- `});let g=_[0];if(n.isInFunctionCallCheckingPhase&&u){let y=g.type,{returnType:v}=si({functionType:y,calleeEnv:y.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=rt(t),e.$={env:t,type:v,value:q(v,{variableName:"checking_phase_placeholder_"+Be(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(H(g.type)&&g.type.return.isUnquote){let{returnValue:y,callerEnv:v,pathCollection:E,deferredDropExpressions:$}=Dr({functionValue:qi(g.value),functionType:g.type,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=rt(v),e.$={env:t,type:tn(),value:y,originType:tn(),pathCollection:E,deferredDropExpressions:$},e}else throw m({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(H(g.type)){let y=g.type;{let{returnType:v,returnValue:E,callerEnv:$,pathCollection:C,specializedFunctionValue:L,runtimeArgExprsInOrder:b,deferredDropExpressions:O}=Dr({functionValue:qi(g.value),functionType:g.type,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=rt($),y.return.isUnquote)if(Qt(E)){let V=x({expr:E.value,env:t,context:{...n}});return e.$={env:V.$?.env||t,type:V.$?.type||v,value:V.$?.value,originType:V.$?.originType||V.$?.type||v,pathCollection:V.$?.pathCollection||[],macroExpansion:V,variableName:V.$?.variableName},e}else throw m({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
10831
- ${Se(E)}`});let N=e.$?.variableName,D=v;if(M(v)&&g.value&&ie(g.value)){let V=g.value.body;if(V.$?.type){let z=V.$.type;M(z)&&z.resolvedConcreteType&&(z=z.resolvedConcreteType),D={...v,resolvedConcreteType:z}}}if(e.$={env:t,type:D,value:E,originType:D,pathCollection:C,runtimeArgExprsInOrder:b,deferredDropExpressions:O,variableName:N},y.ioBuiltin==="io_async"&&b[0]){let V=b[0],z=V.$?.closureFunctionValue;if(z?.body?.$?.awaitAnalysis){e.$.awaitAnalysis=z.body.$.awaitAnalysis,e.$.captureType=V.$?.captureType,e.$.deferredDupExpressions=V.$?.deferredDupExpressions,V.$?.deferredDupExpressions&&(V.$.deferredDupExpressions=void 0);let ne=V.$?.captureType;if(ne&&e.$.awaitAnalysis){let G=new Set(ne.fields.map(Z=>Z.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(Z=>G.has(Z.name)?{...Z,kind:"outer"}:Z)}}z.isIoAsyncStateMachineClosure=!0}else V.$?.deferredDupExpressions&&(V.$.deferredDupExpressions=void 0);let ee=V.$?.variableName;if(ee&&e.$.env){let ne=j(e.$.env,ee),G=ne[ne.length-1];G&&(e.$.env=Ue(e.$.env,G,{...G,consumedAtToken:e.token}))}}Pe(e,!0),o.$={env:t,type:g.type,value:L||g.value,pathCollection:[]},s&&(s.$={env:t,type:g.type,value:L||g.value,pathCollection:[]})}return e}else if((M(g.type)||Ne(g.type))&&jt(g.type)){let y=jt(g.type),{returnType:v,returnValue:E,callerEnv:$,pathCollection:C,specializedFunctionValue:L,runtimeArgExprsInOrder:b,deferredDropExpressions:O}=Dr({functionValue:qi(g.value),functionType:y.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=rt($),y.isFn.callType.return.isUnquote)if(Qt(E)){let N=x({expr:E.value,env:t,context:{...n}});return e.$={env:N.$?.env||t,type:N.$?.type||v,value:N.$?.value,originType:N.$?.originType||N.$?.type||v,pathCollection:N.$?.pathCollection||[],macroExpansion:N},e}else throw m({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
10832
- ${Se(E)}`});return e.$={env:t,type:v,value:E,originType:v,pathCollection:C,runtimeArgExprsInOrder:b,deferredDropExpressions:O},Pe(e,!0),o.$={env:t,type:g.type,value:L||g.value,pathCollection:[]},s&&(s.$={env:t,type:g.type,value:L||g.value,pathCollection:[]}),e}else{let y=g.value;if(R(y)&&ue(y.value)){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let{values:E,pathCollection:$,callerEnv:C,runtimeArgExprsInOrder:L}=So(g);if(t=C,!E)throw m({token:o.token,errorMessage:"Error evaluating struct call."});let b=E.some(O=>!O)?void 0:In(v,E);return e.$.value=dt(v)?void 0:b,e.$.pathCollection=$,e.$.env=t,e.$.runtimeArgExprsInOrder=L,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&ye(y.value)){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let E=v.variants.find(O=>O.name===v.selectedVariantName);if(!E)throw m({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:$,pathCollection:C,callerEnv:L,runtimeArgExprsInOrder:b}=So(g);if(t=L,$.every(O=>!!O)){let O=Pr(v,E.name,$);e.$.value=O}return e.$.pathCollection=C,e.$.env=t,e.$.runtimeArgExprsInOrder=b,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&lt(y.value)){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let{pathCollection:E,callerEnv:$,runtimeArgExprsInOrder:C}=So(g);return t=$,e.$.value=void 0,e.$.pathCollection=E,e.$.env=t,e.$.runtimeArgExprsInOrder=C,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&Fe(y.value)){let{moduleValue:v,callerEnv:E}=Yp(g);return t=E,e.$={env:t,type:v.type,value:v,originType:v.type,pathCollection:[]},o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&xe(y.value)){let{traitValue:v,callerEnv:E}=jp(g);return t=E,e.$={env:t,type:v.type,value:v,originType:v.type,pathCollection:[]},o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else{if(R(y)&&H(y.value))return e;if(R(y)&&be(y.value))return e;if(R(y)&&Lt(y.value))return e;if(R(y)&&(M(y.value)||Ne(y.value))){if(g.result.kind==="type"&&M(y.value)&&y.value.recursiveTypeRef){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let{pathCollection:E,callerEnv:$,runtimeArgExprsInOrder:C}=So(g);return t=$,e.$.value=void 0,e.$.pathCollection=E,e.$.env=t,e.$.runtimeArgExprsInOrder=C,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}return e}else{if(R(y)&&xo(y.value))return e;if(R(y)&&Ie(y.value))return e;if(R(y)&&kt(y.value))return e;if(R(y)&&bt(y.value))return e;if(be(g.type)||je(g.type)){let{value:v,index:E,type:$,arrayElementRef:C,callerEnv:L}=Kp(g),b=o.$?.pathCollection??[];return a.length===1&&typeof E=="number"&&(b.length>0?b=b.map(O=>[...O,E.toString()]):o.$?.variableName&&(b=[[o.$.variableName,E.toString()]])),e.$={env:L,type:$,value:v,originType:o.$?.originType??g.type,pathCollection:b,sourceVariable:o.$?.sourceVariable,arrayElementRef:C,isAccessingProperty:!0},o.$={env:t,type:g.type,value:g.value,pathCollection:o.$?.pathCollection??[],isAccessingProperty:!0},Pe(e,!1),e}}}}throw m({token:e.token,errorMessage:`Function call is not implemented yet:
10833
- ${k(e)}`})}function gy(e){if(!e.$?.type||!ke(e.$.type))throw m({token:e.token,errorMessage:`Expected tuple type for drop generation:
10834
+ `});let g=_[0];if(n.isInFunctionCallCheckingPhase&&u){let y=g.type,{returnType:v}=si({functionType:y,calleeEnv:y.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=rt(t),e.$={env:t,type:v,value:H(v,{variableName:"checking_phase_placeholder_"+Be(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(q(g.type)&&g.type.return.isUnquote){let{returnValue:y,callerEnv:v,pathCollection:E,deferredDropExpressions:$}=Dr({functionValue:Hi(g.value),functionType:g.type,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=rt(v),e.$={env:t,type:tn(),value:y,originType:tn(),pathCollection:E,deferredDropExpressions:$},e}else throw m({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(q(g.type)){let y=g.type;{let{returnType:v,returnValue:E,callerEnv:$,pathCollection:C,specializedFunctionValue:L,runtimeArgExprsInOrder:b,deferredDropExpressions:O}=Dr({functionValue:Hi(g.value),functionType:g.type,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=rt($),y.return.isUnquote)if(Qt(E)){let V=x({expr:E.value,env:t,context:{...n}});return e.$={env:V.$?.env||t,type:V.$?.type||v,value:V.$?.value,originType:V.$?.originType||V.$?.type||v,pathCollection:V.$?.pathCollection||[],macroExpansion:V,variableName:V.$?.variableName},e}else throw m({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
10835
+ ${Se(E)}`});let N=e.$?.variableName,M=v;if(D(v)&&g.value&&ie(g.value)){let V=g.value.body;if(V.$?.type){let z=V.$.type;D(z)&&z.resolvedConcreteType&&(z=z.resolvedConcreteType),M={...v,resolvedConcreteType:z}}}if(e.$={env:t,type:M,value:E,originType:M,pathCollection:C,runtimeArgExprsInOrder:b,deferredDropExpressions:O,variableName:N},y.ioBuiltin==="io_async"&&b[0]){let V=b[0],z=V.$?.closureFunctionValue;if(z?.body?.$?.awaitAnalysis){e.$.awaitAnalysis=z.body.$.awaitAnalysis,e.$.captureType=V.$?.captureType,e.$.deferredDupExpressions=V.$?.deferredDupExpressions,V.$?.deferredDupExpressions&&(V.$.deferredDupExpressions=void 0);let ne=V.$?.captureType;if(ne&&e.$.awaitAnalysis){let G=new Set(ne.fields.map(J=>J.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(J=>G.has(J.name)?{...J,kind:"outer"}:J)}}z.isIoAsyncStateMachineClosure=!0}else V.$?.deferredDupExpressions&&(V.$.deferredDupExpressions=void 0);let ee=V.$?.variableName;if(ee&&e.$.env){let ne=j(e.$.env,ee),G=ne[ne.length-1];G&&(e.$.env=ze(e.$.env,G,{...G,consumedAtToken:e.token}))}}Pe(e,!0),o.$={env:t,type:g.type,value:L||g.value,pathCollection:[]},s&&(s.$={env:t,type:g.type,value:L||g.value,pathCollection:[]})}return e}else if((D(g.type)||Ne(g.type))&&jt(g.type)){let y=jt(g.type),{returnType:v,returnValue:E,callerEnv:$,pathCollection:C,specializedFunctionValue:L,runtimeArgExprsInOrder:b,deferredDropExpressions:O}=Dr({functionValue:Hi(g.value),functionType:y.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=rt($),y.isFn.callType.return.isUnquote)if(Qt(E)){let N=x({expr:E.value,env:t,context:{...n}});return e.$={env:N.$?.env||t,type:N.$?.type||v,value:N.$?.value,originType:N.$?.originType||N.$?.type||v,pathCollection:N.$?.pathCollection||[],macroExpansion:N},e}else throw m({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
10836
+ ${Se(E)}`});return e.$={env:t,type:v,value:E,originType:v,pathCollection:C,runtimeArgExprsInOrder:b,deferredDropExpressions:O},Pe(e,!0),o.$={env:t,type:g.type,value:L||g.value,pathCollection:[]},s&&(s.$={env:t,type:g.type,value:L||g.value,pathCollection:[]}),e}else{let y=g.value;if(R(y)&&ue(y.value)){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let{values:E,pathCollection:$,callerEnv:C,runtimeArgExprsInOrder:L}=So(g);if(t=C,!E)throw m({token:o.token,errorMessage:"Error evaluating struct call."});let b=E.some(O=>!O)?void 0:In(v,E);return e.$.value=mt(v)?void 0:b,e.$.pathCollection=$,e.$.env=t,e.$.runtimeArgExprsInOrder=L,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&ye(y.value)){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let E=v.variants.find(O=>O.name===v.selectedVariantName);if(!E)throw m({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:$,pathCollection:C,callerEnv:L,runtimeArgExprsInOrder:b}=So(g);if(t=L,$.every(O=>!!O)){let O=Pr(v,E.name,$);e.$.value=O}return e.$.pathCollection=C,e.$.env=t,e.$.runtimeArgExprsInOrder=b,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&lt(y.value)){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let{pathCollection:E,callerEnv:$,runtimeArgExprsInOrder:C}=So(g);return t=$,e.$.value=void 0,e.$.pathCollection=E,e.$.env=t,e.$.runtimeArgExprsInOrder=C,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&Le(y.value)){let{moduleValue:v,callerEnv:E}=Kp(g);return t=E,e.$={env:t,type:v.type,value:v,originType:v.type,pathCollection:[]},o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else if(R(y)&&xe(y.value)){if(g.result.kind==="trait-specialization"){let $=g.result.result;t=$.callerEnv;let C=Q($.specializedTraitType);return e.$={env:t,type:C.type,value:C,pathCollection:[]},o.$={env:t,type:y.type,value:y,pathCollection:[]},e}let{traitValue:v,callerEnv:E}=Xp(g);return t=E,e.$={env:t,type:v.type,value:v,originType:v.type,pathCollection:[]},o.$={env:t,type:y.type,value:y,pathCollection:[]},e}else{if(R(y)&&q(y.value))return e;if(R(y)&&be(y.value))return e;if(R(y)&&At(y.value))return e;if(R(y)&&(D(y.value)||Ne(y.value))){if(g.result.kind==="type"&&D(y.value)&&y.value.recursiveTypeRef){let v=y.value;e.$={env:t,type:v,originType:v,pathCollection:[]};let{pathCollection:E,callerEnv:$,runtimeArgExprsInOrder:C}=So(g);return t=$,e.$.value=void 0,e.$.pathCollection=E,e.$.env=t,e.$.runtimeArgExprsInOrder=C,Pe(e,!0),o.$={env:t,type:y.type,value:y,pathCollection:[]},e}return e}else{if(R(y)&&xo(y.value))return e;if(R(y)&&Ie(y.value))return e;if(R(y)&&kt(y.value))return e;if(R(y)&&bt(y.value))return e;if(be(g.type)||je(g.type)){let{value:v,index:E,type:$,arrayElementRef:C,callerEnv:L}=Qp(g),b=o.$?.pathCollection??[];return a.length===1&&typeof E=="number"&&(b.length>0?b=b.map(O=>[...O,E.toString()]):o.$?.variableName&&(b=[[o.$.variableName,E.toString()]])),e.$={env:L,type:$,value:v,originType:o.$?.originType??g.type,pathCollection:b,sourceVariable:o.$?.sourceVariable,arrayElementRef:C,isAccessingProperty:!0},o.$={env:t,type:g.type,value:g.value,pathCollection:o.$?.pathCollection??[],isAccessingProperty:!0},Pe(e,!1),e}}}}throw m({token:e.token,errorMessage:`Function call is not implemented yet:
10837
+ ${k(e)}`})}function Ey(e){if(!e.$?.type||!ke(e.$.type))throw m({token:e.token,errorMessage:`Expected tuple type for drop generation:
10834
10838
  ${k(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
10835
- ${k(e)}`});let n=e.$.type.fields.map((i,o)=>({index:o,element:i,needsDrop:Te(M(i.type)&&i.type.resolvedConcreteType?i.type.resolvedConcreteType:i.type)})).filter(({needsDrop:i})=>i);return n.length===0?"":`begin(
10839
+ ${k(e)}`});let n=e.$.type.fields.map((i,o)=>({index:o,element:i,needsDrop:Te(D(i.type)&&i.type.resolvedConcreteType?i.type.resolvedConcreteType:i.type)})).filter(({needsDrop:i})=>i);return n.length===0?"":`begin(
10836
10840
  ${n.map(({index:i})=>`${w.__yo_drop_tuple_element[0]}(${e.$.variableName}, ${i})`).join(`,
10837
10841
  `)}
10838
- )`}function hy(e){if(!e.$?.type||!be(e.$.type))throw m({token:e.token,errorMessage:`Expected array type for drop generation:
10842
+ )`}function Ty(e){if(!e.$?.type||!be(e.$.type))throw m({token:e.token,errorMessage:`Expected array type for drop generation:
10839
10843
  ${k(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
10840
- ${k(e)}`});let t=e.$.type,n=t.childType,r=M(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!Te(r))return"";let i=t.length;if(!Oe(i))return"";let o=i.value,a=[];for(let s=0;s<o;s++)a.push(`${w.__yo_drop_array_element[0]}(${e.$.variableName}, ${s})`);return`begin(
10844
+ ${k(e)}`});let t=e.$.type,n=t.childType,r=D(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!Te(r))return"";let i=t.length;if(!Oe(i))return"";let o=i.value,a=[];for(let s=0;s<o;s++)a.push(`${w.__yo_drop_array_element[0]}(${e.$.variableName}, ${s})`);return`begin(
10841
10845
  ${a.join(`,
10842
10846
  `)}
10843
- )`}function yf({expr:e,env:t,context:n}){ge(e,w.___drop,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.___drop[0]}":
10847
+ )`}function vf({expr:e,env:t,context:n}){ge(e,w.___drop,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.___drop[0]}":
10844
10848
  ${k(r)}`});t=i.$.env;let o=i.$?.variableName;if(!o)throw m({token:r.token,errorMessage:`Expected variable name as argument to "${w.___drop[0]}":
10845
10849
  ${k(i)}
10846
10850
 
10847
10851
  Original expression:
10848
- ${k(r)}`});let a=i.$.type,l=M(a)&&a.resolvedConcreteType&&!we(a)?a.resolvedConcreteType:a;if(Te(l))if(ke(l)){let u=gy(i);if(u){let c=qt(u);t=un(i,t,!0);let p=x({expr:c,env:t,context:{...n}});return F(p)?(Xn(e,p),e):p}else return t=un(i,t,!0),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}else if(be(l)){let u=hy(i);if(u){let c=qt(u);t=un(i,t,!0);let p=x({expr:c,env:t,context:{...n}});return F(p)?(Xn(e,p),e):p}else return t=un(i,t,!0),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}else{if(M(l)&&!we(l))return t=un(i,t,!0),e.$={env:t,type:Y.type,value:void 0,pathCollection:[]},e;{let u=i.$?.variableName;if(u){let g=j(t,u),h=g.length?g[g.length-1]:void 0;if(h&&!h.isOwningTheRcValue)return t=un(i,t,!0),e.$={env:t,type:Y.type,value:void 0,pathCollection:[]},e}let c=qt(`(${k(i)}).___drop()`),p=Fn({env:t,context:{...n},expr:c});if(!p.$?.env)throw m({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${w.___drop[0]}" method call:
10852
+ ${k(r)}`});let a=i.$.type,l=D(a)&&a.resolvedConcreteType&&!we(a)?a.resolvedConcreteType:a;if(Te(l))if(ke(l)){let u=Ey(i);if(u){let c=Ht(u);t=un(i,t,!0);let p=x({expr:c,env:t,context:{...n}});return F(p)?(Xn(e,p),e):p}else return t=un(i,t,!0),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}else if(be(l)){let u=Ty(i);if(u){let c=Ht(u);t=un(i,t,!0);let p=x({expr:c,env:t,context:{...n}});return F(p)?(Xn(e,p),e):p}else return t=un(i,t,!0),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}else{if(D(l)&&!we(l))return t=un(i,t,!0),e.$={env:t,type:Y.type,value:void 0,pathCollection:[]},e;{let u=i.$?.variableName;if(u){let g=j(t,u),h=g.length?g[g.length-1]:void 0;if(h&&!h.isOwningTheRcValue)return t=un(i,t,!0),e.$={env:t,type:Y.type,value:void 0,pathCollection:[]},e}let c=Ht(`(${k(i)}).___drop()`),p=Fn({env:t,context:{...n},expr:c});if(!p.$?.env)throw m({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${w.___drop[0]}" method call:
10849
10853
  ${k(c)}`});let _=j(p.$.env,o).at(-1);if(!_)throw m({token:e.token,errorMessage:`Variable "${o}" not found in environment after evaluating "${w.___drop[0]}" method call:
10850
- ${k(c)}`});let d=Ue(p.$.env,_,{..._,consumedAtToken:e.token});return p.$.env=d,p}}else return t=un(i,t,!0),e.$={env:t,type:Y.type,value:void 0,pathCollection:[]},e}function vy(e){if(!e.$?.type||!ke(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
10854
+ ${k(c)}`});let d=ze(p.$.env,_,{..._,consumedAtToken:e.token});return p.$.env=d,p}}else return t=un(i,t,!0),e.$={env:t,type:Y.type,value:void 0,pathCollection:[]},e}function $y(e){if(!e.$?.type||!ke(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
10851
10855
  ${k(e)}`});let n=e.$.type.fields.map((i,o)=>({index:o,element:i,needsDup:Te(i.type)}));return n.every(({needsDup:i})=>!i)?"":`begin(
10852
10856
  ${n.map(({index:i,needsDup:o})=>o?`${w.__yo_dup_tuple_element[0]}(${e.$?.variableName}, ${i})`:"").filter(i=>i.length>0).join(`,
10853
10857
  `)}
10854
- )`}function Ey(e){if(!e.$?.type||!be(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for dup generation:
10858
+ )`}function Cy(e){if(!e.$?.type||!be(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for dup generation:
10855
10859
  ${k(e)}`});let t=e.$.type,n=t.childType;if(!Te(n))return"";if(Oe(t.length)){let r=t.length.value;return`begin(
10856
10860
  ${Array.from({length:Number(r)},(i,o)=>`${w.__yo_dup_array_element[0]}(${e.$?.variableName}, ${o})`).join(", ")}
10857
- )`}else return""}function gf({expr:e,env:t,context:n}){ge(e,w.___dup,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.___dup[0]}":
10858
- ${k(r)}`});t=i.$.env;let o=i.$.type,a=M(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Te(a))if(ke(a)){let s=vy(i);if(s){let l=qt(s),u=x({expr:l,env:t,context:{...n}});return F(u)?(Xn(e,u),e):u}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(be(a)){let s=Ey(i);if(s){let l=qt(s),u=x({expr:l,env:t,context:{...n}});return F(u)?(Xn(e,u),e):u}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(M(a)&&!we(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let s=qt(`(${k(i)}).___dup()`),l=Fn({env:t,context:{...n},expr:s}),u=l.$?.variableName;if(!u||!l.$)throw m({token:e.token,errorMessage:`Failed to evaluate the "${w.___dup[0]}" method call:
10859
- ${k(s)}`});let c=j(l.$.env,u);if(c.length){let p=c[c.length-1];if(p.isOwningTheRcValue){let f=Ue(l.$.env,p,{...p,isOwningTheRcValue:!1});l.$.env=f}}return l}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function hf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_is_atom,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10861
+ )`}else return""}function Ef({expr:e,env:t,context:n}){ge(e,w.___dup,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.___dup[0]}":
10862
+ ${k(r)}`});t=i.$.env;let o=i.$.type,a=D(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Te(a))if(ke(a)){let s=$y(i);if(s){let l=Ht(s),u=x({expr:l,env:t,context:{...n}});return F(u)?(Xn(e,u),e):u}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(be(a)){let s=Cy(i);if(s){let l=Ht(s),u=x({expr:l,env:t,context:{...n}});return F(u)?(Xn(e,u),e):u}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(D(a)&&!we(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let s=Ht(`(${k(i)}).___dup()`),l=Fn({env:t,context:{...n},expr:s}),u=l.$?.variableName;if(!u||!l.$)throw m({token:e.token,errorMessage:`Failed to evaluate the "${w.___dup[0]}" method call:
10863
+ ${k(s)}`});let c=j(l.$.env,u);if(c.length){let p=c[c.length-1];if(p.isOwningTheRcValue){let f=ze(l.$.env,p,{...p,isOwningTheRcValue:!1});l.$.env=f}}return l}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Tf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_is_atom,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10860
10864
  ${k(r)}`});if(!Ct(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10861
10865
  ${k(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10862
- ${k(r)}`});let a=Qt(o)?at(U(o.value)):q(Xe(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function vf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_is_fn_call,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10866
+ ${k(r)}`});let a=Qt(o)?at(U(o.value)):H(Xe(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function $f({expr:e,env:t,context:n}){ge(e,w.__yo_expr_is_fn_call,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10863
10867
  ${k(r)}`});if(!Ct(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10864
10868
  ${k(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10865
- ${k(r)}`});let a=Qt(o)?at(F(o.value)):q(Xe(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Ef({expr:e,env:t,context:n}){ge(e,w.__yo_expr_get_callee,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10869
+ ${k(r)}`});let a=Qt(o)?at(F(o.value)):H(Xe(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Cf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_get_callee,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10866
10870
  ${k(r)}`});if(!Ct(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10867
10871
  ${k(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10868
- ${k(r)}`});if(e.$={env:i.$.env,type:tn(),value:q(tn(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Qt(o))if(F(o.value)){let a=o.value.func,s=xn(a);e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
10869
- ${k(e)}`});return e}function Tf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_get_args,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10872
+ ${k(r)}`});if(e.$={env:i.$.env,type:tn(),value:H(tn(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Qt(o))if(F(o.value)){let a=o.value.func,s=xn(a);e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
10873
+ ${k(e)}`});return e}function bf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_get_args,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10870
10874
  ${k(r)}`});if(!Ct(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10871
10875
  ${k(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10872
- ${k(r)}`});if(e.$={env:i.$.env,type:yo(),value:q(yo(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Qt(o))if(F(o.value)){let a=o.value.args,s=An(tn(),a.map(l=>xn(l)));e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
10873
- ${k(e)}`});return e}function $f({expr:e,env:t,context:n}){ge(e,w.__yo_expr_to_string,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10876
+ ${k(r)}`});if(e.$={env:i.$.env,type:yo(),value:H(yo(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Qt(o))if(F(o.value)){let a=o.value.args,s=An(tn(),a.map(l=>xn(l)));e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
10877
+ ${k(e)}`});return e}function kf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_to_string,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10874
10878
  ${k(r)}`});if(!Ct(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10875
10879
  ${k(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10876
- ${k(r)}`});return e.$={env:i.$.env,type:Dt(),value:q(Dt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Qt(o)&&(e.$.value=en(k(o.value))),e}function Cf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_eq,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10880
+ ${k(r)}`});return e.$={env:i.$.env,type:Mt(),value:H(Mt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Qt(o)&&(e.$.value=en(k(o.value))),e}function wf({expr:e,env:t,context:n}){ge(e,w.__yo_expr_eq,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10877
10881
  ${k(r)}`});if(!Ct(o.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
10878
10882
  ${k(r)}`});let a=o.$.value;if(!a)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" first argument, got:
10879
10883
  ${k(r)}`});t=o.$.env;let s=x({expr:i,env:t,context:{...n}});if(!s.$)throw m({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
10880
10884
  ${k(i)}`});if(!Ct(s.$.type))throw m({token:i.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
10881
10885
  ${k(i)}`});let l=s.$.value;if(!l)throw m({token:i.token,errorMessage:`Expected expression value for "${e.func.token.value}" second argument, got:
10882
- ${k(i)}`});t=s.$.env;let u;return Qt(a)&&Qt(l)?u=at(wt({value:a,env:t},{value:l,env:t})):u=q(Xe(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function bf({expr:e,env:t}){return ge(e,w.__yo_gc_collect,0),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function kf({expr:e,env:t,context:n}){let r=e.args[0],i="";if(r){if(e.args.length>1)throw m({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=x({expr:r,env:t,context:{...n}});if(!l.$)throw m({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
10883
- ${k(r)}`});if(!qe(l.$.value))throw m({token:r.token,errorMessage:`Expected comptime_string for prefix argument, got:
10884
- ${k(r)}`});i=l.$.value.value}let o=i+Be(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=xn(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function wf({expr:e,env:t,context:n}){if(!T(e,I.Impl))throw m({token:e.token,errorMessage:`Expected "Impl", got:
10885
- ${k(e)}`});if(e.args.length===0)throw m({token:e.token,errorMessage:"Impl requires at least one trait argument."});let r=[],i=[],o;for(let l of e.args){let u=F(l)&&T(l,"!")&&l.args.length===1,c=u?l.args[0]:l,p=x({expr:c,env:t,context:{...n}});if(!p.$)throw m({token:c.token,errorMessage:"Failed to evaluate Impl argument."});if(t=p.$.env,!p.$.value||!R(p.$.value)||!xe(p.$.value.value))throw m({token:c.token,errorMessage:`Impl argument must be a trait type, got: ${k(c)}`});let f=p.$.value.value;if(Po(f)){if(o!==void 0)throw m({token:c.token,errorMessage:"Impl can only have one Concrete(T) specifier"});o=f.isConcrete.concreteType;continue}u?i.push(f):r.push(f)}let a=mn(et(),"Impl",{requiredTraits:r,negativeTraits:i,env:t,context:n});o!==void 0&&(a.resolvedConcreteType=o);let s=J(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function Do({expr:e,env:t,context:n}){if(U(e))return e;{let r=e.func,i=e.args;if(U(r)&&ht(r,I.unquote)&&i.length===1){let o=i[0],a=x({expr:o,env:t,context:{...n}});if(!a.$||!Ct(a.$.type)||!a.$.value)throw m({token:o.token,errorMessage:`Expected expression type for "unquote" argument, got:
10886
- ${k(o)}`});let s=a.$.value;if(fe(s))return e;if(Qt(s))return s.value;throw m({token:o.token,errorMessage:`Expected expression value for "unquote" argument, got:
10886
+ ${k(i)}`});t=s.$.env;let u;return Qt(a)&&Qt(l)?u=at(wt({value:a,env:t},{value:l,env:t})):u=H(Xe(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function Ff({expr:e,env:t}){return ge(e,w.__yo_gc_collect,0),e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Lf({expr:e,env:t,context:n}){let r=e.args[0],i="";if(r){if(e.args.length>1)throw m({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=x({expr:r,env:t,context:{...n}});if(!l.$)throw m({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
10887
+ ${k(r)}`});if(!He(l.$.value))throw m({token:r.token,errorMessage:`Expected comptime_string for prefix argument, got:
10888
+ ${k(r)}`});i=l.$.value.value}let o=i+Be(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=xn(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function Af({expr:e,env:t,context:n}){if(!T(e,I.Impl))throw m({token:e.token,errorMessage:`Expected "Impl", got:
10889
+ ${k(e)}`});if(e.args.length===0)throw m({token:e.token,errorMessage:"Impl requires at least one trait argument."});let r=[],i=[],o;for(let l of e.args){let u=F(l)&&T(l,"!")&&l.args.length===1,c=u?l.args[0]:l,p=x({expr:c,env:t,context:{...n}});if(!p.$)throw m({token:c.token,errorMessage:"Failed to evaluate Impl argument."});if(t=p.$.env,!p.$.value||!R(p.$.value)||!xe(p.$.value.value))throw m({token:c.token,errorMessage:`Impl argument must be a trait type, got: ${k(c)}`});let f=p.$.value.value;if(Po(f)){if(o!==void 0)throw m({token:c.token,errorMessage:"Impl can only have one Concrete(T) specifier"});o=f.isConcrete.concreteType;continue}u?i.push(f):r.push(f)}let a=mn(Je(),"Impl",{requiredTraits:r,negativeTraits:i,env:t,context:n});o!==void 0&&(a.resolvedConcreteType=o);let s=Q(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function Do({expr:e,env:t,context:n}){if(U(e))return e;{let r=e.func,i=e.args;if(U(r)&&ht(r,I.unquote)&&i.length===1){let o=i[0],a=x({expr:o,env:t,context:{...n}});if(!a.$||!Ct(a.$.type)||!a.$.value)throw m({token:o.token,errorMessage:`Expected expression type for "unquote" argument, got:
10890
+ ${k(o)}`});let s=a.$.value;if(_e(s))return e;if(Qt(s))return s.value;throw m({token:o.token,errorMessage:`Expected expression value for "unquote" argument, got:
10887
10891
  ${Se(s)}`})}else{let o=Do({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<i.length;l++){let u=i[l];if(F(u)&&T(u,I.unquote_splicing)){let c;if(u.args.length!==1)throw m({token:u.token,errorMessage:`Expected exactly one argument for "unquote_splicing", got ${u.args.length}`});let p=u.args[0],f=x({expr:p,env:t,context:{...n}});if(!f.$||!Rr(f.$.type)||!f.$.value)throw m({token:p.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
10888
- ${k(p)}`});let _=f.$.value;El(_)&&_.elements.every(d=>Qt(d))&&(c=_.elements.map(d=>d.value)),c?c.forEach(d=>{a.push(d)}):a.push(u)}else a.push(Do({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function Ff({expr:e,env:t,context:n}){ge(e,I.quote,1);let r=Do({expr:e.args[0],env:t,context:{...n}}),i=xn(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function Lf({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw m({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
10892
+ ${k(p)}`});let _=f.$.value;Tl(_)&&_.elements.every(d=>Qt(d))&&(c=_.elements.map(d=>d.value)),c?c.forEach(d=>{a.push(d)}):a.push(u)}else a.push(Do({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function If({expr:e,env:t,context:n}){ge(e,I.quote,1);let r=Do({expr:e.args[0],env:t,context:{...n}}),i=xn(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function xf({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw m({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
10889
10893
  ${r.toString()}`});if(t=i.$.env,!Ct(i.$.type))throw m({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${A(i.$.type)}`});let o=null;if(e.args.length===2){let s=e.args[1],l=x({expr:s,env:t,context:{...n}});if(!l.$)throw m({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
10890
- ${s.toString()}`});if(!pt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${A(l.$.type)}`});if(!vn(l.$.value))throw m({token:s.token,errorMessage:'The level argument for "macro_expand" must be a comptime_int value'});let u=l.$.value.value;if(o=typeof u=="bigint"?Number(u):u,o<0)throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${o}`})}let a=i.$.value;if(Qt(a)){let s=a.value,l=t,u=0;for(;F(s)&&(o===null||u<o);)try{let c=Fn({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Qt(c.$.value)){let p=c.$.value.value;if(k(p)===k(s))break;s=p,u++}else break}catch(c){if(c instanceof rn&&c.isAssertionError)throw c;break}s=Do({expr:s,env:l,context:{...n}}),e.$={env:l,type:tn(),value:xn(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Af({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="test-block")throw m({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "panic" during compile-time function evaluation analysis. Functions containing "panic" cannot be evaluated at compile time.'});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:Y.type;if(e.args.length>0){let i=e.args[0],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate panic message"});if(!o.$.value||!qe(o.$.value)&&!(fe(o.$.value)&&$t(o.$.value.type)))throw m({token:i.token,errorMessage:"panic message must be a comptime_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}function If({expr:e,env:t}){if(T(e,w.__yo_process_platform)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=process.platform,r=en(n);return e.$={env:t,type:Dt(),value:r,pathCollection:[]},e}if(T(e,w.__yo_process_arch)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=process.arch,r=en(n);return e.$={env:t,type:Dt(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}function xf({expr:e,env:t,context:n}){ge(e,w.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Ie(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
10894
+ ${s.toString()}`});if(!pt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${A(l.$.type)}`});if(!vn(l.$.value))throw m({token:s.token,errorMessage:'The level argument for "macro_expand" must be a comptime_int value'});let u=l.$.value.value;if(o=typeof u=="bigint"?Number(u):u,o<0)throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${o}`})}let a=i.$.value;if(Qt(a)){let s=a.value,l=t,u=0;for(;F(s)&&(o===null||u<o);)try{let c=Fn({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Qt(c.$.value)){let p=c.$.value.value;if(k(p)===k(s))break;s=p,u++}else break}catch(c){if(c instanceof rn&&c.isAssertionError)throw c;break}s=Do({expr:s,env:l,context:{...n}}),e.$={env:l,type:tn(),value:xn(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Nf({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="test-block")throw m({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "panic" during compile-time function evaluation analysis. Functions containing "panic" cannot be evaluated at compile time.'});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:Y.type;if(e.args.length>0){let i=e.args[0],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate panic message"});if(!o.$.value||!He(o.$.value)&&!(_e(o.$.value)&&$t(o.$.value.type)))throw m({token:i.token,errorMessage:"panic message must be a comptime_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}function Sf({expr:e,env:t}){if(T(e,w.__yo_process_platform)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=process.platform,r=en(n);return e.$={env:t,type:Mt(),value:r,pathCollection:[]},e}if(T(e,w.__yo_process_arch)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=process.arch,r=en(n);return e.$={env:t,type:Mt(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}function Vf({expr:e,env:t,context:n}){ge(e,w.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Ie(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
10891
10895
  ${k(r)}`});if(t=o.$.env,R(o.$.value))throw m({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
10892
- ${k(r)}`});{let a=o.$.type;if(pt(a)||Ft(a)||$t(a)){let c=ut({type:a,expectedType:i?.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=Xr(a),l=o.$.sourceVariable,u=o.$.arrayElementRef;if(u){let c=Pa(s,[u.arrayValue],u.index);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else if(l&&l.value){let c=Pa(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection};return Pe(e,!1),e}}function Nf({expr:e,env:t,context:n}){ge(e,w.rc,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,on(i.$.type)?e.$={env:t,type:yt(),value:void 0,pathCollection:[]}:e.$={env:t,type:yt(),value:Bt("Usize",1),pathCollection:[]},e}function Ty(e,t,n){let i=j(t,"Option").find(_=>_.value?.[0]&&ie(_.value[0])&&H(_.type));if(!i||!i.value?.[0]||!ie(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=J(e),u=ze(a.env),{env:c}=_e({env:u,variable:{name:s.label,token:se,type:l.type,isCompileTimeOnly:!0,initializedAtToken:se,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:p,callerEnv:f}=Hi({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:et()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(p))throw new Error("Option type constructor did not return a type value");return{optionType:p.value,env:f}}function Sf({expr:e,env:t,context:n}){ge(e,[w.__yo_decr_rc[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_decr_rc[0]}":
10893
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Vf({expr:e,env:t,context:n}){ge(e,[w.__yo_incr_rc[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_incr_rc[0]}":
10894
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Df({expr:e,env:t,context:n}){ge(e,[w.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_incr_rc_atomic[0]}":
10895
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Mf({expr:e,env:t,context:n}){ge(e,[w.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_decr_rc_atomic[0]}":
10896
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Of({expr:e,env:t,context:n}){ge(e,[w.__yo_rc_own[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_incr_rc[0]}":
10897
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Rf({expr:e,env:t,context:n}){ge(e,[w.__yo_dyn_drop[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_dyn_drop[0]}":
10898
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Pf({expr:e,env:t,context:n}){ge(e,[w.__yo_dyn_dup[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_dyn_dup[0]}":
10899
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Uf({expr:e,env:t,context:n}){ge(e,[w.__yo_sometype_drop[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_sometype_drop[0]}":
10900
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function zf({expr:e,env:t,context:n}){ge(e,[w.__yo_sometype_dup[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_sometype_dup[0]}":
10901
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Bf({expr:e,env:t,context:n}){ge(e,[w.__yo_iso_extract[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_iso_extract[0]}":
10902
- ${k(r)}`});t=i.$.env;let o=i.$.type;if(!kt(o))throw m({token:r.token,errorMessage:`${w.__yo_iso_extract[0]} expects an Iso type, but got: ${A(o)}`});let a=o.childType,{optionType:s,env:l}=Ty(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection||[]},Pe(e,!0),e}function Gf({expr:e,env:t,context:n}){ge(e,[w.__yo_iso_dispose[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_iso_dispose[0]}":
10903
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Wf({expr:e,env:t,context:n}){ge(e,[w.__yo_arc_dispose[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_arc_dispose[0]}":
10904
- ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Hf({expr:e,env:t,context:n}){ge(e,[w.__yo_drop_array_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${w.__yo_drop_array_element[0]}":
10896
+ ${k(r)}`});{let a=o.$.type;if(pt(a)||Lt(a)||$t(a)){let c=ut({type:a,expectedType:i?.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=Xr(a),l=o.$.sourceVariable,u=o.$.arrayElementRef;if(u){let c=za(s,[u.arrayValue],u.index);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else if(l&&l.value){let c=za(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection};return Pe(e,!1),e}}function Df({expr:e,env:t,context:n}){ge(e,w.rc,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,on(i.$.type)?e.$={env:t,type:yt(),value:void 0,pathCollection:[]}:e.$={env:t,type:yt(),value:Bt("Usize",1),pathCollection:[]},e}function by(e,t,n){let i=j(t,"Option").find(_=>_.value?.[0]&&ie(_.value[0])&&q(_.type));if(!i||!i.value?.[0]||!ie(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=Q(e),u=Ue(a.env),{env:c}=fe({env:u,variable:{name:s.label,token:ae,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ae,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:p,callerEnv:f}=qi({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Je()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(p))throw new Error("Option type constructor did not return a type value");return{optionType:p.value,env:f}}function Mf({expr:e,env:t,context:n}){ge(e,[w.__yo_decr_rc[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_decr_rc[0]}":
10897
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Of({expr:e,env:t,context:n}){ge(e,[w.__yo_incr_rc[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_incr_rc[0]}":
10898
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Rf({expr:e,env:t,context:n}){ge(e,[w.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_incr_rc_atomic[0]}":
10899
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Pf({expr:e,env:t,context:n}){ge(e,[w.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_decr_rc_atomic[0]}":
10900
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Uf({expr:e,env:t,context:n}){ge(e,[w.__yo_rc_own[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_incr_rc[0]}":
10901
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function zf({expr:e,env:t,context:n}){ge(e,[w.__yo_dyn_drop[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_dyn_drop[0]}":
10902
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Bf({expr:e,env:t,context:n}){ge(e,[w.__yo_dyn_dup[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_dyn_dup[0]}":
10903
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Gf({expr:e,env:t,context:n}){ge(e,[w.__yo_sometype_drop[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_sometype_drop[0]}":
10904
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Wf({expr:e,env:t,context:n}){ge(e,[w.__yo_sometype_dup[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_sometype_dup[0]}":
10905
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function qf({expr:e,env:t,context:n}){ge(e,[w.__yo_iso_extract[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_iso_extract[0]}":
10906
+ ${k(r)}`});t=i.$.env;let o=i.$.type;if(!kt(o))throw m({token:r.token,errorMessage:`${w.__yo_iso_extract[0]} expects an Iso type, but got: ${A(o)}`});let a=o.childType,{optionType:s,env:l}=by(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection||[]},Pe(e,!0),e}function Hf({expr:e,env:t,context:n}){ge(e,[w.__yo_iso_dispose[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_iso_dispose[0]}":
10907
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Yf({expr:e,env:t,context:n}){ge(e,[w.__yo_arc_dispose[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${w.__yo_arc_dispose[0]}":
10908
+ ${k(r)}`});return t=i.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function jf({expr:e,env:t,context:n}){ge(e,[w.__yo_drop_array_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${w.__yo_drop_array_element[0]}":
10905
10909
  ${k(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${w.__yo_drop_array_element[0]}":
10906
- ${k(i)}`});return t=a.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function qf({expr:e,env:t,context:n}){ge(e,[w.__yo_dup_array_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${w.__yo_dup_array_element[0]}":
10910
+ ${k(i)}`});return t=a.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Kf({expr:e,env:t,context:n}){ge(e,[w.__yo_dup_array_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${w.__yo_dup_array_element[0]}":
10907
10911
  ${k(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${w.__yo_dup_array_element[0]}":
10908
- ${k(i)}`});t=a.$.env;let s=o.$.type;if(!s||!be(s))throw m({token:r.token,errorMessage:`Expected array type for "${w.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function Yf({expr:e,env:t,context:n}){ge(e,[w.__yo_drop_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${w.__yo_drop_tuple_element[0]}":
10912
+ ${k(i)}`});t=a.$.env;let s=o.$.type;if(!s||!be(s))throw m({token:r.token,errorMessage:`Expected array type for "${w.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function Xf({expr:e,env:t,context:n}){ge(e,[w.__yo_drop_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${w.__yo_drop_tuple_element[0]}":
10909
10913
  ${k(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${w.__yo_drop_tuple_element[0]}":
10910
- ${k(i)}`});return t=a.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function jf({expr:e,env:t,context:n}){ge(e,[w.__yo_dup_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${w.__yo_dup_tuple_element[0]}":
10914
+ ${k(i)}`});return t=a.$.env,e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function Qf({expr:e,env:t,context:n}){ge(e,[w.__yo_dup_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${w.__yo_dup_tuple_element[0]}":
10911
10915
  ${k(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${w.__yo_dup_tuple_element[0]}":
10912
- ${k(i)}`});t=a.$.env;let s=o.$.type;if(!s||!ke(s))throw m({token:r.token,errorMessage:`Expected tuple type for "${w.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!Oe(l))throw m({token:i.token,errorMessage:`Expected number value for index in "${w.__yo_dup_tuple_element[0]}"`});let u=Number(l.value);if(u<0||u>=s.fields.length)throw m({token:i.token,errorMessage:`Index out of bounds for tuple in "${w.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Kf({expr:e,env:t,context:n}){ge(e,w.sizeof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=kr(o),s;return a===null?s=q(yt(),{env:t,context:n}):s=Bt("Usize",Math.ceil(a/8)),e.$={env:t,type:yt(),value:s,pathCollection:[]},e}function gr({expr:e,type:t,env:n,context:r}){if(ke(t)&&F(e)&&T(e,I.tuple)){if(t.fields.length!==e.args.length)throw m({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let i=0;i<t.fields.length;i++){let o=t.fields[i].type,a=e.args[i],{env:s}=gr({expr:a,type:o,env:n,context:{...r}});n=s}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(F(e)&&T(e,"_"))if(ue(t)||lt(t)||Fe(t)||xe(t)){let i=Fn({expr:e,env:n,givenFunc:{type:Tt(t),value:J(t)},context:{...r}});if(!i.$?.type||!i.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
10913
- ${k(e)}`});return{expr:i,type:i.$?.type,env:i.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use _ with type ${A(t)}. Only supported with struct types.`});else if(F(e)&&T(e,".",1))if(ye(t)){let i=e.args[0];if(!U(i))throw m({token:e.token,errorMessage:`Expected identifier for enum variant, got ${k(i)}`});let o=i.token.value;if(!t.variants.find(l=>l.name===o))throw m({token:e.token,errorMessage:`Enum variant "${o}" not found in ${A(t)}`});let s={...t,selectedVariantName:o};return e.$={type:s,env:n,pathCollection:[]},{expr:e,type:s,env:n}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(F(e)&&F(e.func)&&T(e.func,".",1))if(ye(t)){let i=e.func,o=i.args[0];if(!U(o))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got ${k(o)}`});let a=o.token.value;if(!t.variants.find(c=>c.name===a))throw m({token:e.token,errorMessage:`Enum variant "${a}" not found in ${A(t)}`});let l={...t,selectedVariantName:a},u=Fn({expr:e,env:n,givenFunc:{type:Tt(l),value:J(l)},context:{...r}});if(!u.$?.type||!u.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
10914
- ${k(e)}`});return{expr:u,type:u.$?.type,env:u.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(e.$?.type&&t)try{let{expectedEnv:i}=Ke({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:i}}catch{return{expr:e,type:e.$?.type,env:n}}else throw m({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${k(e)}`})}function Xf({expr:e,env:t,context:n}){ge(e,w.the,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=o.$.env,!o.$.value||!R(o.$.value))throw m({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${o.$.type}`});let a=o.$.value.value,s=x({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw m({token:i.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!W({type:a,env:t},{type:s.$.type,env:t})){if(ki(a))try{let{expr:l,type:u,env:c}=gr({expr:i,type:a,env:t,context:{...n}});if(W({type:a,env:c},{type:u,env:c}))return e.$={env:c,type:a,value:l.$?.value,pathCollection:l.$?.pathCollection||[]},e}catch{}throw m({token:i.token,errorMessage:`Type mismatch: expected '${A(a)}', got '${A(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function Qf({expr:e,env:t,context:n}){ge(e,w.__yo_type_to_comptime_string,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10915
- ${k(r)}`});if(!He(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10916
+ ${k(i)}`});t=a.$.env;let s=o.$.type;if(!s||!ke(s))throw m({token:r.token,errorMessage:`Expected tuple type for "${w.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!Oe(l))throw m({token:i.token,errorMessage:`Expected number value for index in "${w.__yo_dup_tuple_element[0]}"`});let u=Number(l.value);if(u<0||u>=s.fields.length)throw m({token:i.token,errorMessage:`Index out of bounds for tuple in "${w.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Zf({expr:e,env:t,context:n}){ge(e,w.sizeof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=kr(o),s;return a===null?s=H(yt(),{env:t,context:n}):s=Bt("Usize",Math.ceil(a/8)),e.$={env:t,type:yt(),value:s,pathCollection:[]},e}function gr({expr:e,type:t,env:n,context:r}){if(ke(t)&&F(e)&&T(e,I.tuple)){if(t.fields.length!==e.args.length)throw m({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let i=0;i<t.fields.length;i++){let o=t.fields[i].type,a=e.args[i],{env:s}=gr({expr:a,type:o,env:n,context:{...r}});n=s}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(F(e)&&T(e,"_"))if(ue(t)||lt(t)||Le(t)||xe(t)){let i=Fn({expr:e,env:n,givenFunc:{type:Tt(t),value:Q(t)},context:{...r}});if(!i.$?.type||!i.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
10917
+ ${k(e)}`});return{expr:i,type:i.$?.type,env:i.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use _ with type ${A(t)}. Only supported with struct types.`});else if(F(e)&&T(e,".",1))if(ye(t)){let i=e.args[0];if(!U(i))throw m({token:e.token,errorMessage:`Expected identifier for enum variant, got ${k(i)}`});let o=i.token.value;if(!t.variants.find(l=>l.name===o))throw m({token:e.token,errorMessage:`Enum variant "${o}" not found in ${A(t)}`});let s={...t,selectedVariantName:o};return e.$={type:s,env:n,pathCollection:[]},{expr:e,type:s,env:n}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(F(e)&&F(e.func)&&T(e.func,".",1))if(ye(t)){let i=e.func,o=i.args[0];if(!U(o))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got ${k(o)}`});let a=o.token.value;if(!t.variants.find(c=>c.name===a))throw m({token:e.token,errorMessage:`Enum variant "${a}" not found in ${A(t)}`});let l={...t,selectedVariantName:a},u=Fn({expr:e,env:n,givenFunc:{type:Tt(l),value:Q(l)},context:{...r}});if(!u.$?.type||!u.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
10918
+ ${k(e)}`});return{expr:u,type:u.$?.type,env:u.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(e.$?.type&&t)try{let{expectedEnv:i}=Ke({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:i}}catch{return{expr:e,type:e.$?.type,env:n}}else throw m({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${k(e)}`})}function Jf({expr:e,env:t,context:n}){ge(e,w.the,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=o.$.env,!o.$.value||!R(o.$.value))throw m({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${o.$.type}`});let a=o.$.value.value,s=x({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw m({token:i.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!W({type:a,env:t},{type:s.$.type,env:t})){if(ki(a))try{let{expr:l,type:u,env:c}=gr({expr:i,type:a,env:t,context:{...n}});if(W({type:a,env:c},{type:u,env:c}))return e.$={env:c,type:a,value:l.$?.value,pathCollection:l.$?.pathCollection||[]},e}catch{}throw m({token:i.token,errorMessage:`Type mismatch: expected '${A(a)}', got '${A(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function e_({expr:e,env:t,context:n}){ge(e,w.__yo_type_to_comptime_string,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10919
+ ${k(r)}`});if(!We(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10916
10920
  ${k(r)}`});let i=r.$.value;if(!i)throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
10917
- ${k(r)}`});return e.$={env:r.$.env,type:Dt(),value:q(Dt(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},R(i)&&(e.$.value=en(A(i.value))),e}function Zf({expr:e,env:t,context:n}){let r=e.args,i=r[0],o=r[1],a=x({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(a.$?.value))throw m({token:i.token,errorMessage:`Expected type, got:
10921
+ ${k(r)}`});return e.$={env:r.$.env,type:Mt(),value:H(Mt(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},R(i)&&(e.$.value=en(A(i.value))),e}function t_({expr:e,env:t,context:n}){let r=e.args,i=r[0],o=r[1],a=x({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(a.$?.value))throw m({token:i.token,errorMessage:`Expected type, got:
10918
10922
  ${k(i)}`});let s=a.$.value.value;t=a.$.env;let l=x({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(l.$?.value))throw m({token:o.token,errorMessage:`Expected type, got:
10919
- ${k(o)}`});let u=l.$.value.value;t=l.$.env;let c=W({type:s,env:t},{type:u,env:t}),p=at(c);return e.$={env:t,type:p.type,value:p,pathCollection:[]},e}function Jf({expr:e,env:t,context:n}){ge(e,w.__yo_type_contains_rc_type,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10920
- ${k(r)}`});if(!He(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10923
+ ${k(o)}`});let u=l.$.value.value;t=l.$.env;let c=W({type:s,env:t},{type:u,env:t}),p=at(c);return e.$={env:t,type:p.type,value:p,pathCollection:[]},e}function n_({expr:e,env:t,context:n}){ge(e,w.__yo_type_contains_rc_type,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10924
+ ${k(r)}`});if(!We(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10921
10925
  ${k(r)}`});let i=r.$.value;if(!i||!R(i))throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
10922
- ${k(r)}`});let o=Te(i.value),a=at(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function e_({expr:e,env:t,context:n}){ge(e,w.__yo_type_can_form_rc_cycle,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10923
- ${k(r)}`});if(!He(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10926
+ ${k(r)}`});let o=Te(i.value),a=at(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function r_({expr:e,env:t,context:n}){ge(e,w.__yo_type_can_form_rc_cycle,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10927
+ ${k(r)}`});if(!We(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10924
10928
  ${k(r)}`});let i=r.$.value;if(!i||!R(i))throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
10925
- ${k(r)}`});let o=lr(i.value,new Set,r.$.env),a=at(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function t_({expr:e,env:t,context:n}){ge(e,w.__yo_type_impls,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
10926
- ${k(r)}`});if(!He(r.$.type))throw m({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
10929
+ ${k(r)}`});let o=ur(i.value,new Set,r.$.env),a=at(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function i_({expr:e,env:t,context:n}){ge(e,w.__yo_type_impls,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
10930
+ ${k(r)}`});if(!We(r.$.type))throw m({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
10927
10931
  ${k(r)}`});let i=r.$.value;if(!i||!R(i))throw m({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
10928
10932
  ${k(r)}`});t=r.$.env;let o=i.value,a=x({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw m({token:a.token,errorMessage:`Failed to evaluate the trait argument for "${e.func.token.value}":
10929
- ${k(a)}`});let s;if(R(a.$.value)){let u=a.$.value;if(!xe(u.value))throw m({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got a non-trait type`});s=u.value}else if(xe(a.$.type))s=a.$.type;else{if(He(a.$.type))return e.$={env:a.$.env,type:Xe(),value:q(Xe(),{env:a.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},e;throw m({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got:
10930
- ${k(a)}`})}t=a.$.env;let l=at(Nt({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function n_({expr:e,env:t}){ge(e,w.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!U(r)||!We(r))throw m({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
10931
- ${k(r)}`});if(n===0){let i=r.token.value,o=j(t,i);if(o.length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`});let a=o[o.length-1];t=Ue(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(j(t,i).length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:Y.type,value:Y,env:t,pathCollection:[]},e}function r_({expr:e,env:t,context:n}){ge(e,w.__yo_var_print_info,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName;if(o){let a=j(t,o);if(a.length>0){let s=a.at(-1);console.log(Cu(s))}}return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function i_({expr:e,env:t,context:n}){ge(e,w.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName,a=!1;if(o){let s=j(t,o);s.length>0&&(a=s.at(-1).isOwningTheRcValue)}return e.$={env:t,type:Xe(),value:at(a),pathCollection:[]},e}function o_({expr:e,env:t,context:n}){ge(e,w.__yo_var_has_other_aliases,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName,a=!1;if(o){let s=j(t,o);if(s.length>0){let l=s.at(-1);if(l.isOwningTheSameRcValueAs)a=!0;else{let c=l.id;for(let p=t.frames.length-1;p>=0;p--){let f=t.frames[p];for(let _=0;_<f.variables.length;_++){let d=f.variables[_];if(d.isOwningTheSameRcValueAs&&d.isOwningTheSameRcValueAs.id===c){a=!0;break}}}}}}return e.$={env:t,type:Xe(),value:at(a),pathCollection:[]},e}function a_({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&Ie(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
10932
- ${k(r)}`});if(t=o.$.env,R(o.$.value)){let s=o.$.value.value,l=Xr(s),u=J(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw m({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
10933
- ${k(r)}`})}function s_({expr:e,env:t,context:n}){if(!T(e,I.Array,2))throw m({token:e.token,errorMessage:`Expected "Array(comptime(Type), comptime(usize))" with 2 arguments, like "Array(i32, 10)"
10933
+ ${k(a)}`});let s;if(R(a.$.value)){let u=a.$.value;if(!xe(u.value))throw m({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got a non-trait type`});s=u.value}else if(xe(a.$.type))s=a.$.type;else{if(We(a.$.type))return e.$={env:a.$.env,type:Xe(),value:H(Xe(),{env:a.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},e;throw m({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got:
10934
+ ${k(a)}`})}t=a.$.env;let l=at(Ft({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function o_({expr:e,env:t}){ge(e,w.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!U(r)||!qe(r))throw m({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
10935
+ ${k(r)}`});if(n===0){let i=r.token.value,o=j(t,i);if(o.length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`});let a=o[o.length-1];t=ze(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(j(t,i).length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:Y.type,value:Y,env:t,pathCollection:[]},e}function a_({expr:e,env:t,context:n}){ge(e,w.__yo_var_print_info,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName;if(o){let a=j(t,o);if(a.length>0){let s=a.at(-1);console.log(ku(s))}}return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function s_({expr:e,env:t,context:n}){ge(e,w.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName,a=!1;if(o){let s=j(t,o);s.length>0&&(a=s.at(-1).isOwningTheRcValue)}return e.$={env:t,type:Xe(),value:at(a),pathCollection:[]},e}function l_({expr:e,env:t,context:n}){ge(e,w.__yo_var_has_other_aliases,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName,a=!1;if(o){let s=j(t,o);if(s.length>0){let l=s.at(-1);if(l.isOwningTheSameRcValueAs)a=!0;else{let c=l.id;for(let p=t.frames.length-1;p>=0;p--){let f=t.frames[p];for(let _=0;_<f.variables.length;_++){let d=f.variables[_];if(d.isOwningTheSameRcValueAs&&d.isOwningTheSameRcValueAs.id===c){a=!0;break}}}}}}return e.$={env:t,type:Xe(),value:at(a),pathCollection:[]},e}function u_({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&Ie(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
10936
+ ${k(r)}`});if(t=o.$.env,R(o.$.value)){let s=o.$.value.value,l=Xr(s),u=Q(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw m({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
10937
+ ${k(r)}`})}function c_({expr:e,env:t,context:n}){if(!T(e,I.Array,2))throw m({token:e.token,errorMessage:`Expected "Array(comptime(Type), comptime(usize))" with 2 arguments, like "Array(i32, 10)"
10934
10938
  Got:
10935
10939
  ${k(e)}`});let r=e.args[0],i=e.args[1],o=U(i)&&i.token.value==="_",a=x({expr:r,env:t,context:{...n}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10936
10940
  ${k(r)}`});if(!R(a.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
10937
10941
  ${k(r)}
10938
10942
 
10939
- 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(o){let f=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=q(yt(),{variableName:f,env:a.$.env,context:n}),{env:d}=_e({env:a.$.env,variable:{name:f,value:[_],type:yt(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),g=Qn(s,_),h=J(g);return e.$={env:d,type:h.type,value:h,pathCollection:[]},e}let l=x({expr:i,env:t,context:{...n,expectedType:{type:yt(),env:t}}});if(!l.$)throw m({token:i.token,errorMessage:`Failed to evaluate the length expression:
10943
+ 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(o){let f=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=H(yt(),{variableName:f,env:a.$.env,context:n}),{env:d}=fe({env:a.$.env,variable:{name:f,value:[_],type:yt(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),g=Qn(s,_),h=Q(g);return e.$={env:d,type:h.type,value:h,pathCollection:[]},e}let l=x({expr:i,env:t,context:{...n,expectedType:{type:yt(),env:t}}});if(!l.$)throw m({token:i.token,errorMessage:`Failed to evaluate the length expression:
10940
10944
  ${k(i)}`});if(!W({type:yt(),env:t},{type:l.$.type,env:t}))throw m({token:i.token,errorMessage:`Expected usize for length, got:
10941
10945
  ${k(i)}`});let u=l.$.value;if(!u)throw m({token:i.token,errorMessage:`Expected compile-time known value for length, got:
10942
- ${k(i)}`});fe(u)&&(u.type=yt());let c=Qn(s,u),p=J(c);return e.$={env:l.$.env,type:p.type,value:p,pathCollection:[]},e}function l_({expr:e,env:t,context:n}){return Ca({expr:e,env:t,context:n})}function u_({expr:e,env:t,context:n}){ge(e,I.ComptimeList,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10946
+ ${k(i)}`});_e(u)&&(u.type=yt());let c=Qn(s,u),p=Q(c);return e.$={env:l.$.env,type:p.type,value:p,pathCollection:[]},e}function p_({expr:e,env:t,context:n}){return ka({expr:e,env:t,context:n})}function f_({expr:e,env:t,context:n}){ge(e,I.ComptimeList,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10943
10947
  ${k(r)}`});if(!R(i.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
10944
- ${k(r)}`});let o=i.$.value.value,a=co(o),s=J(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function c_({expr:e,env:t,context:n}){if(e.args.length!==1)throw m({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
10948
+ ${k(r)}`});let o=i.$.value.value,a=co(o),s=Q(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function __({expr:e,env:t,context:n}){if(e.args.length!==1)throw m({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
10945
10949
  ${k(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
10946
- ${k(r)}`});let o=i.$.value.value,a=De(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:Tt(a),value:J(a),pathCollection:[]},e}function p_({expr:e,env:t,context:n}){ge(e,I.Dyn);let r=e.args,i=[],o=[];for(let u=0;u<r.length;u++){let c=r[u],p=F(c)&&T(c,"!")&&c.args.length===1,f=p?c.args[0]:c,_=x({expr:f,env:t,context:{...n}});if(!_.$||!_.$.value||!R(_.$.value)||!xe(_.$.value.value))throw new Error(`Expected a trait type for argument ${u+1} of 'dyn' expression.`);t=_.$.env;let d=_.$.value.value;if(p){if(o.some(g=>g.id===d.id))throw m({token:f.token,errorMessage:`Trait type ${A(d)} is already included in negative constraints of '${I.Dyn}' expression.`});o.push(d)}else{if(i.some(g=>g.id===d.id))throw m({token:f.token,errorMessage:`Trait type ${A(d)} is already included in '${I.Dyn}' expression.`});i.push(d)}}for(let u=0;u<i.length;u++){let c=i[u];for(let p=u+1;p<i.length;p++){let f=i[p];for(let _ of c.fields)for(let d of f.fields)if(_.label===d.label&&_.label!=="")throw m({token:e.token,errorMessage:`Trait types ${A(c)} and ${A(f)} have conflicting function name '${_.label}' in '${I.Dyn[0]}' expression.`})}}let a=[w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]];for(let u of i)for(let c of u.fields)if(a.includes(c.label)&&H(c.type))throw m({token:e.token,errorMessage:`Trait type ${A(u)} cannot have function '${c.label}' as it is reserved in 'dyn' expression.`});let s=go({requiredTraits:i,env:t,negativeTraits:o});t=_o({dynType:s,env:t,context:n});let l=J(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function Mr({expr:e,tupleFieldIndex:t,env:n,context:r,forType:i}){let o,a=e,s,l,u,c,p,f,_=!1,d;if(F(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(T(a,"=",2)||T(a,"::",2))){if(T(a,"::",2)){if(_=!0,s=a.args[0],!We(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${k(s)}`});o=s.token.value}p=a.args[1],a=a.args[0]}if(u&&p)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(F(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&T(s,I.comptime,1)){if(_)throw m({token:s.token,errorMessage:'Cannot combine the use of "comptime" with ::'});_=!0,s=s.args[0]}if(!U(s)||!We(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${k(s)}`});o=s.token.value}else if(F(a)&&T(a,I.comptime,1)){if(_)throw m({token:a.token,errorMessage:'Cannot combine the use of "comptime" with "::"'});if(_=!0,s=a.args[0],!U(s)||!We(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${k(s)}`});o=s.token.value}else!u&&!p&&(l=a);let g=r.expectedType?.type,h;if(g&&(ke(g)||ue(g)||Fe(g)||xe(g))){let v=g.fields[t];if(!v)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=v.type}if(l){let v=x({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});v.$?.env&&(n=v.$?.env);let E=v.$?.value;if(!R(E))throw m({token:l.token,errorMessage:`(1) Expected type for element, got ${k(l)}`});d=E.value}if(p){if(!_)throw m({token:p.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
10950
+ ${k(r)}`});let o=i.$.value.value,a=De(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:Tt(a),value:Q(a),pathCollection:[]},e}function d_({expr:e,env:t,context:n}){ge(e,I.Dyn);let r=e.args,i=[],o=[];for(let u=0;u<r.length;u++){let c=r[u],p=F(c)&&T(c,"!")&&c.args.length===1,f=p?c.args[0]:c,_=x({expr:f,env:t,context:{...n}});if(!_.$||!_.$.value||!R(_.$.value)||!xe(_.$.value.value))throw new Error(`Expected a trait type for argument ${u+1} of 'dyn' expression.`);t=_.$.env;let d=_.$.value.value;if(p){if(o.some(g=>g.id===d.id))throw m({token:f.token,errorMessage:`Trait type ${A(d)} is already included in negative constraints of '${I.Dyn}' expression.`});o.push(d)}else{if(i.some(g=>g.id===d.id))throw m({token:f.token,errorMessage:`Trait type ${A(d)} is already included in '${I.Dyn}' expression.`});i.push(d)}}for(let u=0;u<i.length;u++){let c=i[u];for(let p=u+1;p<i.length;p++){let f=i[p];for(let _ of c.fields)for(let d of f.fields)if(_.label===d.label&&_.label!=="")throw m({token:e.token,errorMessage:`Trait types ${A(c)} and ${A(f)} have conflicting function name '${_.label}' in '${I.Dyn[0]}' expression.`})}}let a=[w.___dup[0],w.___drop[0],w.___dispose[0],w.dispose[0]];for(let u of i)for(let c of u.fields)if(a.includes(c.label)&&q(c.type))throw m({token:e.token,errorMessage:`Trait type ${A(u)} cannot have function '${c.label}' as it is reserved in 'dyn' expression.`});let s=go({requiredTraits:i,env:t,negativeTraits:o});t=_o({dynType:s,env:t,context:n});let l=Q(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function Mr({expr:e,tupleFieldIndex:t,env:n,context:r,forType:i}){let o,a=e,s,l,u,c,p,f,_=!1,d;if(F(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(T(a,"=",2)||T(a,"::",2))){if(T(a,"::",2)){if(_=!0,s=a.args[0],!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${k(s)}`});o=s.token.value}p=a.args[1],a=a.args[0]}if(u&&p)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(F(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&T(s,I.comptime,1)){if(_)throw m({token:s.token,errorMessage:'Cannot combine the use of "comptime" with ::'});_=!0,s=s.args[0]}if(!U(s)||!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${k(s)}`});o=s.token.value}else if(F(a)&&T(a,I.comptime,1)){if(_)throw m({token:a.token,errorMessage:'Cannot combine the use of "comptime" with "::"'});if(_=!0,s=a.args[0],!U(s)||!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${k(s)}`});o=s.token.value}else!u&&!p&&(l=a);let g=r.expectedType?.type,h;if(g&&(ke(g)||ue(g)||Le(g)||xe(g))){let v=g.fields[t];if(!v)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=v.type}if(l){let v=x({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});v.$?.env&&(n=v.$?.env);let E=v.$?.value;if(!R(E))throw m({token:l.token,errorMessage:`(1) Expected type for element, got ${k(l)}`});d=E.value}if(p){if(!_)throw m({token:p.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
10947
10951
  Please consider adding "comptime" modifier to the field label.`});let v=d?{type:d,env:n}:h?{type:h,env:n}:void 0,E=x({expr:p,env:n,context:{...r,expectedType:v,forceCompileTimeBindings:void 0}});if(!E.$)throw m({token:p.token,errorMessage:`Failed to evaluate required value expression: ${k(p)}`});if(n=E.$?.env,f=E.$.value,!f)throw m({token:p.token,errorMessage:`Expected compile-time known value for required value, got ${k(p)}`});let $=E.$.type;if(v){if(!W({type:v.type,env:n},{type:$,env:n}))throw m({token:p.token,errorMessage:`Assigned value type mismatch:
10948
10952
  Expected type: ${A(v.type)}
10949
10953
  Given type: ${A($)}`});d=v.type}else d=$}if(u){let v=d?{type:d,env:n}:h?{type:h,env:n}:void 0,E=x({expr:u,env:n,context:{...r,expectedType:v}});if(!E.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${k(u)}`});if(n=E.$.env,c=E.$?.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${k(u)}`});let $=E.$.type;if(v){if(!W({type:v.type,env:n},{type:$,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
10950
10954
  Expected type: ${A(v.type)}
10951
- Given type: ${A($)}`});d=v.type}else d=$}if(!d)throw m({token:e.token,errorMessage:"Failed to infer the element type"});if(i!=="tuple"&&!s)throw m({token:e.token,errorMessage:`Expected label for ${i} field, got ${k(a)}`});return s&&(s.$={env:n,type:d,value:f??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:Y,type:Y.type,pathCollection:[]}),sr(d,e.token),{field:{label:o??`${t}`,type:d,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:p},defaultValue:c,assignedValue:f},env:n}}function f_({expr:e,env:t,context:n}){if(!T(e,I.enum))throw m({token:e.token,errorMessage:`Expected "enum", got:
10952
- ${k(e)}`});let r=Zl(t);Ya({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=r.variants,o=0n;for(let s=0;s<e.args.length;s++){let l=e.args[s];if(F(l)&&T(l,"=",2)&&U(l.args[0])){let u=l.args[0],c=l.args[1];if(!We(u))throw m({token:u.token,errorMessage:`Expected identifier for enum variant, got:
10953
- ${k(u)}`});let p=u.token.value;if(i.some(h=>h.name===p))throw m({token:u.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=x({expr:c,env:t,context:{...n,SelfType:r}});if(!f.$)throw m({token:c.token,errorMessage:`Failed to evaluate discriminant value: ${k(c)}`});t=f.$.env;let _=f.$.value,d=f.$.type;if(!vn(_)&&!pt(d))throw m({token:c.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${k(c)}`});if(!vn(_))throw m({token:c.token,errorMessage:`Enum discriminant must be a compile-time known value, got: ${k(c)}`});let g=typeof _.value=="bigint"?_.value:BigInt(_.value);i.push({name:p,discriminant:g}),o=g+1n}else{if(F(l)&&(T(l,"::",2)||T(l,"?=",2)))throw m({token:l.token,errorMessage:'Please use "impl" block to define members/methods for enum types.'});if(U(l)){let u=l.token.value;if(!We(l))throw m({token:l.token,errorMessage:`Expected identifier for enum variant, got:
10954
- ${k(l)}`});if(i.some(c=>c.name===u))throw m({token:l.token,errorMessage:`Duplicate variant name "${u}" in enum`});i.push({name:u,discriminant:o}),o+=1n}else{let u=l,c;if(T(l,"=",2)){u=l.args[0];let d=l.args[1],g=x({expr:d,env:t,context:{...n,SelfType:r}});if(!g.$)throw m({token:d.token,errorMessage:`Failed to evaluate discriminant value: ${k(d)}`});t=g.$.env;let h=g.$.value;if(!vn(h))throw m({token:d.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${k(d)}`});c=typeof h.value=="bigint"?h.value:BigInt(h.value)}if(T(u,":"))throw m({token:u.token,errorMessage:"Enum variant with : is not implemented yet"});if(!F(u)||!We(u.func))throw m({token:u.token,errorMessage:`Expected identifier for enum variant, got:
10955
- ${k(u)}`});let p=u.func.token.value;if(i.some(d=>d.name===p))throw m({token:u.func.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=[];for(let d=0;d<u.args.length;d++){let g=u.args[d],{field:h,env:y}=Mr({expr:g,env:t,tupleFieldIndex:d,context:{...n,SelfType:r},forType:"enum"});if(f.find(E=>E.label===h.label))throw m({token:F(g)?g.args[0]?.token??g.token:g.token,errorMessage:`Duplicate field label "${h.label}" in enum variant`});if(h.assignedValue)throw m({token:h.exprs.assignedValueExpr?.token??h.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});f.push(h),t=y}let _=c??o;i.push({name:p,fields:f,discriminant:_}),o=_+1n}}}t=Rl({enumType:r,env:t,context:n,errorToken:e.token});let a=J(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function __({expr:e,env:t,context:n}){if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> operator for Fn trait type, got:
10955
+ Given type: ${A($)}`});d=v.type}else d=$}if(!d)throw m({token:e.token,errorMessage:"Failed to infer the element type"});if(i!=="tuple"&&!s)throw m({token:e.token,errorMessage:`Expected label for ${i} field, got ${k(a)}`});return s&&(s.$={env:n,type:d,value:f??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:Y,type:Y.type,pathCollection:[]}),lr(d,e.token),{field:{label:o??`${t}`,type:d,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:p},defaultValue:c,assignedValue:f},env:n}}function m_({expr:e,env:t,context:n}){if(!T(e,I.enum))throw m({token:e.token,errorMessage:`Expected "enum", got:
10956
+ ${k(e)}`});let r=Jl(t);Ka({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=r.variants,o=0n;for(let s=0;s<e.args.length;s++){let l=e.args[s];if(F(l)&&T(l,"=",2)&&U(l.args[0])){let u=l.args[0],c=l.args[1];if(!qe(u))throw m({token:u.token,errorMessage:`Expected identifier for enum variant, got:
10957
+ ${k(u)}`});let p=u.token.value;if(i.some(h=>h.name===p))throw m({token:u.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=x({expr:c,env:t,context:{...n,SelfType:r}});if(!f.$)throw m({token:c.token,errorMessage:`Failed to evaluate discriminant value: ${k(c)}`});t=f.$.env;let _=f.$.value,d=f.$.type;if(!vn(_)&&!pt(d))throw m({token:c.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${k(c)}`});if(!vn(_))throw m({token:c.token,errorMessage:`Enum discriminant must be a compile-time known value, got: ${k(c)}`});let g=typeof _.value=="bigint"?_.value:BigInt(_.value);i.push({name:p,discriminant:g}),o=g+1n}else{if(F(l)&&(T(l,"::",2)||T(l,"?=",2)))throw m({token:l.token,errorMessage:'Please use "impl" block to define members/methods for enum types.'});if(U(l)){let u=l.token.value;if(!qe(l))throw m({token:l.token,errorMessage:`Expected identifier for enum variant, got:
10958
+ ${k(l)}`});if(i.some(c=>c.name===u))throw m({token:l.token,errorMessage:`Duplicate variant name "${u}" in enum`});i.push({name:u,discriminant:o}),o+=1n}else{let u=l,c;if(T(l,"=",2)){u=l.args[0];let d=l.args[1],g=x({expr:d,env:t,context:{...n,SelfType:r}});if(!g.$)throw m({token:d.token,errorMessage:`Failed to evaluate discriminant value: ${k(d)}`});t=g.$.env;let h=g.$.value;if(!vn(h))throw m({token:d.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${k(d)}`});c=typeof h.value=="bigint"?h.value:BigInt(h.value)}if(T(u,":"))throw m({token:u.token,errorMessage:"Enum variant with : is not implemented yet"});if(!F(u)||!qe(u.func))throw m({token:u.token,errorMessage:`Expected identifier for enum variant, got:
10959
+ ${k(u)}`});let p=u.func.token.value;if(i.some(d=>d.name===p))throw m({token:u.func.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=[];for(let d=0;d<u.args.length;d++){let g=u.args[d],{field:h,env:y}=Mr({expr:g,env:t,tupleFieldIndex:d,context:{...n,SelfType:r},forType:"enum"});if(f.find(E=>E.label===h.label))throw m({token:F(g)?g.args[0]?.token??g.token:g.token,errorMessage:`Duplicate field label "${h.label}" in enum variant`});if(h.assignedValue)throw m({token:h.exprs.assignedValueExpr?.token??h.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});f.push(h),t=y}let _=c??o;i.push({name:p,fields:f,discriminant:_}),o=_+1n}}}t=Pl({enumType:r,env:t,context:n,errorToken:e.token});let a=Q(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function y_({expr:e,env:t,context:n}){if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> operator for Fn trait type, got:
10956
10960
  ${k(e)}`});let r=e.args[0],i=e.args[1];if(!F(r)||!T(r,I.Fn))throw m({token:r.token,errorMessage:`Expected Fn(...) for function trait, got:
10957
- ${k(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:p}=sl({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}}),f=x({expr:i,env:p,context:{...n,isEvaluatingFunctionType:!0}});if(!f.$)throw m({token:i.token,errorMessage:"Failed to evaluate return type for Fn trait."});let _=f.$.value,d;if(R(_))d=_.value;else throw m({token:i.token,errorMessage:`Expected a type for Fn return type, got:
10958
- ${k(i)}`});let g=Ii({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:d,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${Be(t.modulePath)}`},env:rt(p,!0),parametersFrame:p.frames[p.frames.length-1],isClosure:!0}),h=De(rt(p,!0));return h.isFn={callType:g},t=rt(p,!0),e.$={env:t,type:Tt(h),value:J(h),pathCollection:[]},e}function d_({expr:e,env:t,context:n}){if(e.args.length<1)throw m({token:e.token,errorMessage:"Future type constructor expects at least 1 argument (output type). Usage: Future(T), Future(T, ...(E)), Future(T, Raise, ...(E))"});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
10961
+ ${k(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:p}=ll({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}}),f=x({expr:i,env:p,context:{...n,isEvaluatingFunctionType:!0}});if(!f.$)throw m({token:i.token,errorMessage:"Failed to evaluate return type for Fn trait."});let _=f.$.value,d;if(R(_))d=_.value;else throw m({token:i.token,errorMessage:`Expected a type for Fn return type, got:
10962
+ ${k(i)}`});let g=Ii({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:d,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${Be(t.modulePath)}`},env:rt(p,!0),parametersFrame:p.frames[p.frames.length-1],isClosure:!0}),h=De(rt(p,!0));return h.isFn={callType:g},t=rt(p,!0),e.$={env:t,type:Tt(h),value:Q(h),pathCollection:[]},e}function g_({expr:e,env:t,context:n}){if(e.args.length<1)throw m({token:e.token,errorMessage:"Future type constructor expects at least 1 argument (output type). Usage: Future(T), Future(T, ...(E)), Future(T, Raise, ...(E))"});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
10959
10963
  ${k(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
10960
- ${k(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],p=$y(c,t,n);a.push(p.effect),t=p.env}let s=De(t);s.isFuture={outputType:o,effects:a};let l=a.length>0?`_${a.map(u=>u.type.id).join("_")}`:"";return s.id=`future_trait_${o.id}${l}`,e.$={env:t,type:Tt(s),value:J(s),pathCollection:[]},e}function $y(e,t,n){if(F(e)&&T(e,"...")&&e.args.length===1&&U(e.args[0]))return Cy(e,t);let r=x({expr:e,env:t,context:{...n}});if(!r.$||!R(r.$.value))throw m({token:e.token,errorMessage:`Future effect argument must be an effect type or ...(E) spread, but got:
10961
- ${k(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:by(i,e),type:i,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!1,isQuote:!1,isOwningTheRcValue:!1,exprs:Zr({expr:e,labelExpr:void 0,typeExpr:e,defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function Cy(e,t){let n=e.args[0].token.value,i=j(t,n).at(-1);if(!i)throw m({token:e.token,errorMessage:`Effect row variable "${n}" not found in scope. Declare it with forall(..., ...(${n}))`});let o=i.value?.[0],a;if(o&&R(o))if(M(o.value)&&o.value.isEffectsRow||_t(o.value))a=o.value;else throw m({token:e.token,errorMessage:`"...(${n})" requires "${n}" to be a forall-declared effect row variable, but it resolves to a concrete type. Use individual effect types directly instead of spreading them, e.g. Future(T, ${n}) instead of Future(T, ...(${n}))`});else if(o&&fe(o)&&_t(o.type))a=o.type;else if(o&&fe(o)&&M(o.type)&&o.type.isEffectsRow)a=o.type;else if(o&&fe(o)&&He(o.type))a=Qr(n,t);else throw m({token:e.token,errorMessage:`Effect row variable "${n}" has invalid value. Expected a type.`});return{effect:{label:n,type:a,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Zr({expr:e,labelExpr:e.args[0],typeExpr:e.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function by(e,t){return Fe(e)&&e.typeName?e.typeName:M(e)&&e.name?e.name:k(t)}function Mo({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:i}){let o,a=e,s,l,u,c,p,f,_;if(F(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw m({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
10962
- All module fields are compile-time only by default.`});p=a.args[1],a=a.args[0]}if(u&&p)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(F(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&T(s,I.comptime,1))throw m({token:s.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!U(s)&&!We(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${k(s)}`});o=s.token.value}else{if(F(a)&&T(a,I.comptime,1))throw m({token:a.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!u&&!p)throw m({token:e.token,errorMessage:`Expected label for module field, got ${k(a)}`});if(s=a,!We(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${k(s)}`});if(!U(s)&&!We(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${k(s)}`});o=s.token.value}let d=r.expectedType?.type,g;if(d&&Fe(d)){let h=d.fields[t];if(!h)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=h.type}if(l){let h=x({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});h.$?.env&&(n=h.$?.env);let y=h.$?.value;if(!R(y))throw m({token:l.token,errorMessage:`Expected type for module field, got ${k(l)}`});_=y.value}if(p){let h=_?{type:_,env:n}:g?{type:g,env:n}:void 0,y=x({expr:p,env:n,context:{...r,expectedType:h}});if(!y.$)throw m({token:p.token,errorMessage:`Failed to evaluate required value expression: ${k(p)}`});if(n=y.$?.env,f=y.$.value,!f)throw m({token:p.token,errorMessage:`Expected compile-time known value for required value, got ${k(p)}`});let v=y.$.type;if(h){if(!W({type:h.type,env:n},{type:v,env:n}))throw m({token:p.token,errorMessage:`Assigned value type mismatch:
10964
+ ${k(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],p=ky(c,t,n);a.push(p.effect),t=p.env}let s=De(t);s.isFuture={outputType:o,effects:a};let l=a.length>0?`_${a.map(u=>u.type.id).join("_")}`:"";return s.id=`future_trait_${o.id}${l}`,e.$={env:t,type:Tt(s),value:Q(s),pathCollection:[]},e}function ky(e,t,n){if(F(e)&&T(e,"...")&&e.args.length===1&&U(e.args[0]))return wy(e,t);let r=x({expr:e,env:t,context:{...n}});if(!r.$||!R(r.$.value))throw m({token:e.token,errorMessage:`Future effect argument must be an effect type or ...(E) spread, but got:
10965
+ ${k(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:Fy(i,e),type:i,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!1,isQuote:!1,isOwningTheRcValue:!1,exprs:Zr({expr:e,labelExpr:void 0,typeExpr:e,defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function wy(e,t){let n=e.args[0].token.value,i=j(t,n).at(-1);if(!i)throw m({token:e.token,errorMessage:`Effect row variable "${n}" not found in scope. Declare it with forall(..., ...(${n}))`});let o=i.value?.[0],a;if(o&&R(o))if(D(o.value)&&o.value.isEffectsRow||_t(o.value))a=o.value;else throw m({token:e.token,errorMessage:`"...(${n})" requires "${n}" to be a forall-declared effect row variable, but it resolves to a concrete type. Use individual effect types directly instead of spreading them, e.g. Future(T, ${n}) instead of Future(T, ...(${n}))`});else if(o&&_e(o)&&_t(o.type))a=o.type;else if(o&&_e(o)&&D(o.type)&&o.type.isEffectsRow)a=o.type;else if(o&&_e(o)&&We(o.type))a=Qr(n,t);else throw m({token:e.token,errorMessage:`Effect row variable "${n}" has invalid value. Expected a type.`});return{effect:{label:n,type:a,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Zr({expr:e,labelExpr:e.args[0],typeExpr:e.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function Fy(e,t){return Le(e)&&e.typeName?e.typeName:D(e)&&e.name?e.name:k(t)}function Mo({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:i}){let o,a=e,s,l,u,c,p,f,_;if(F(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw m({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
10966
+ All module fields are compile-time only by default.`});p=a.args[1],a=a.args[0]}if(u&&p)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(F(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&T(s,I.comptime,1))throw m({token:s.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!U(s)&&!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${k(s)}`});o=s.token.value}else{if(F(a)&&T(a,I.comptime,1))throw m({token:a.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!u&&!p)throw m({token:e.token,errorMessage:`Expected label for module field, got ${k(a)}`});if(s=a,!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${k(s)}`});if(!U(s)&&!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${k(s)}`});o=s.token.value}let d=r.expectedType?.type,g;if(d&&Le(d)){let h=d.fields[t];if(!h)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=h.type}if(l){let h=x({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});h.$?.env&&(n=h.$?.env);let y=h.$?.value;if(!R(y))throw m({token:l.token,errorMessage:`Expected type for module field, got ${k(l)}`});_=y.value}if(p){let h=_?{type:_,env:n}:g?{type:g,env:n}:void 0,y=x({expr:p,env:n,context:{...r,expectedType:h}});if(!y.$)throw m({token:p.token,errorMessage:`Failed to evaluate required value expression: ${k(p)}`});if(n=y.$?.env,f=y.$.value,!f)throw m({token:p.token,errorMessage:`Expected compile-time known value for required value, got ${k(p)}`});let v=y.$.type;if(h){if(!W({type:h.type,env:n},{type:v,env:n}))throw m({token:p.token,errorMessage:`Assigned value type mismatch:
10963
10967
  Expected type: ${A(h.type)}
10964
10968
  Given type: ${A(v)}`});_=h.type}else _=v}if(u){let h=_?{type:_,env:n}:g?{type:g,env:n}:void 0,y=x({expr:u,env:n,context:{...r,expectedType:h}});if(!y.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${k(u)}`});if(n=y.$.env,c=y.$?.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${k(u)}`});let v=y.$.type;if(h){if(!W({type:h.type,env:n},{type:v,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
10965
10969
  Expected type: ${A(h.type)}
10966
- Given type: ${A(v)}`});_=h.type}else _=v}if(!_)throw m({token:e.token,errorMessage:"Failed to infer the field type"});if(i&&H(_)){for(let h of _.forallParameters)if(!h.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function forall parameter "${h.label}" in module field "${o??"unnamed"}" must have an explicit type annotation.
10970
+ Given type: ${A(v)}`});_=h.type}else _=v}if(!_)throw m({token:e.token,errorMessage:"Failed to infer the field type"});if(i&&q(_)){for(let h of _.forallParameters)if(!h.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function forall parameter "${h.label}" in module field "${o??"unnamed"}" must have an explicit type annotation.
10967
10971
  Type expressions are required for all function parameters in module fields to support proper type specialization.`});for(let h of _.parameters)if(!h.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function parameter "${h.label}" in module field "${o??"unnamed"}" must have an explicit type annotation.
10968
10972
  Type expressions are required for all function parameters in module fields to support proper type specialization.`});if(!_.return.typeExpr)throw m({token:e.token,errorMessage:`Function in module field "${o??"unnamed"}" must have an explicit return type annotation.
10969
- Type expressions are required for return types in module fields to support proper type specialization.`})}if(i&&u&&!H(_))throw m({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elements (excluding closures).
10973
+ Type expressions are required for return types in module fields to support proper type specialization.`})}if(i&&u&&!q(_))throw m({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elements (excluding closures).
10970
10974
  Module field "${o??"unnamed"}" has type: ${A(_)}
10971
10975
 
10972
- To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:_,value:f??q(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:Y,type:Y.type,pathCollection:[]}),{field:{label:o??`__field_${Be(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:p},defaultValue:c,assignedValue:f},env:n}}function m_({expr:e,env:t,context:n}){if(!T(e,I.module))throw m({token:e.token,errorMessage:`Expected "module", got:
10973
- ${k(e)}`});let r=oa(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let o=e.args;for(let s=0;s<o.length;s++){let l=o[s];if(F(l)&&T(l,"...",1)){let u=l.args[0],c=x({expr:u,env:t,context:{...n,SelfType:void 0}});if(!c.$)throw m({token:u.token,errorMessage:`Failed to evaluate the extended struct expression: ${k(u)}`});let p=c.$.value;if(R(p)&&Fe(p.value)||fe(p)&&Fe(p.type)){let f;R(p)&&Fe(p.value)?f=p.value:f=p.type;for(let _ of f.fields){let d=i.findIndex(g=>g.label===_.label);if(d>=0){if(i[d].assignedValue&&_.assignedValue&&wt({value:i[d].assignedValue,env:t},{value:_.assignedValue,env:t})||!i[d].assignedValue&&!_.assignedValue&&W({type:i[d].type,env:t},{type:_.type,env:t}))continue;throw console.log(!!i[d].assignedValue,!!_.assignedValue),console.log(A(i[d].type),`
10976
+ To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:_,value:f??H(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:Y,type:Y.type,pathCollection:[]}),{field:{label:o??`__field_${Be(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:p},defaultValue:c,assignedValue:f},env:n}}function h_({expr:e,env:t,context:n}){if(!T(e,I.module))throw m({token:e.token,errorMessage:`Expected "module", got:
10977
+ ${k(e)}`});let r=oa(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let o=e.args;for(let s=0;s<o.length;s++){let l=o[s];if(F(l)&&T(l,"...",1)){let u=l.args[0],c=x({expr:u,env:t,context:{...n,SelfType:void 0}});if(!c.$)throw m({token:u.token,errorMessage:`Failed to evaluate the extended struct expression: ${k(u)}`});let p=c.$.value;if(R(p)&&Le(p.value)||_e(p)&&Le(p.type)){let f;R(p)&&Le(p.value)?f=p.value:f=p.type;for(let _ of f.fields){let d=i.findIndex(g=>g.label===_.label);if(d>=0){if(i[d].assignedValue&&_.assignedValue&&wt({value:i[d].assignedValue,env:t},{value:_.assignedValue,env:t})||!i[d].assignedValue&&!_.assignedValue&&W({type:i[d].type,env:t},{type:_.type,env:t}))continue;throw console.log(!!i[d].assignedValue,!!_.assignedValue),console.log(A(i[d].type),`
10974
10978
  `,A(_.type),`
10975
- `,W({type:i[d].type,env:t},{type:_.type,env:t})),m({token:u.token,errorMessage:`Duplicate label 1 "${_.label}" in module`})}else i.push(_)}}else if(ft(p)){let f=p;for(let _=0;_<f.fields.length;_++){let d=f.fields[_],g=f.type.fields[_],h=i.findIndex(y=>y.label===g.label);if(h>=0){if(i[h].assignedValue&&g.assignedValue&&wt({value:i[h].assignedValue,env:t},{value:g.assignedValue,env:t})||!i[h].assignedValue&&!g.assignedValue&&W({type:i[h].type,env:t},{type:g.type,env:t}))continue;throw m({token:u.token,errorMessage:`Duplicate label 2 "${g.label}" in module`})}else i.push({...f.type.fields[_],assignedValue:d})}}else throw m({token:u.token,errorMessage:`Expected a Module type or value for extending, got ${k(u)}`})}else{let{field:u,env:c}=Mo({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!0});if(i.find(f=>f.label===u.label))throw m({token:F(l)?l.args[0]?.token??l.token:l.token,errorMessage:`Duplicate label 3 "${u.label}" in module`});i.push(u),t=c}}let a=J(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Yi({expr:e,env:t,context:n}){let r=T(e,I.object),i=T(e,I.struct),o=T(e,I.newtype);if(!i&&!r&&!o)throw m({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
10976
- ${k(e)}`});let a=r,s=o,l=Kr(t,a,s);qa({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.trait.definedInModulePath=n.currentModulePath);let u=l.fields;for(let p=0;p<e.args.length;p++){let f=e.args[p];{let{field:_,env:d}=Mr({expr:f,env:t,tupleFieldIndex:p,context:{...n,SelfType:l},forType:"struct"});if(u.find(h=>h.label===_.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label "${_.label}" in struct`});u.push(_),t=d}}if(s&&u.length!==1)throw m({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=Yr({structType:l,env:t,context:n,errorToken:e.token});let c=J(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e.func.$=e.$,e}function y_({expr:e,env:t,context:n}){return ge(e,I.newtype),Yi({expr:e,env:t,context:n})}function g_({expr:e,env:t,context:n}){if(!T(e,I.object))throw m({token:e.token,errorMessage:`Expected "object", got:
10977
- ${k(e)}`});return Yi({expr:e,env:t,context:n})}function h_({expr:e,env:t,context:n}){ge(e,I.Slice,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10979
+ `,W({type:i[d].type,env:t},{type:_.type,env:t})),m({token:u.token,errorMessage:`Duplicate label 1 "${_.label}" in module`})}else i.push(_)}}else if(ft(p)){let f=p;for(let _=0;_<f.fields.length;_++){let d=f.fields[_],g=f.type.fields[_],h=i.findIndex(y=>y.label===g.label);if(h>=0){if(i[h].assignedValue&&g.assignedValue&&wt({value:i[h].assignedValue,env:t},{value:g.assignedValue,env:t})||!i[h].assignedValue&&!g.assignedValue&&W({type:i[h].type,env:t},{type:g.type,env:t}))continue;throw m({token:u.token,errorMessage:`Duplicate label 2 "${g.label}" in module`})}else i.push({...f.type.fields[_],assignedValue:d})}}else throw m({token:u.token,errorMessage:`Expected a Module type or value for extending, got ${k(u)}`})}else{let{field:u,env:c}=Mo({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!0});if(i.find(f=>f.label===u.label))throw m({token:F(l)?l.args[0]?.token??l.token:l.token,errorMessage:`Duplicate label 3 "${u.label}" in module`});i.push(u),t=c}}let a=Q(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Yi({expr:e,env:t,context:n}){let r=T(e,I.object),i=T(e,I.struct),o=T(e,I.newtype);if(!i&&!r&&!o)throw m({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
10980
+ ${k(e)}`});let a=r,s=o,l=Kr(t,a,s);ja({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.trait.definedInModulePath=n.currentModulePath);let u=l.fields;for(let p=0;p<e.args.length;p++){let f=e.args[p];{let{field:_,env:d}=Mr({expr:f,env:t,tupleFieldIndex:p,context:{...n,SelfType:l},forType:"struct"});if(u.find(h=>h.label===_.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label "${_.label}" in struct`});u.push(_),t=d}}if(s&&u.length!==1)throw m({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=Yr({structType:l,env:t,context:n,errorToken:e.token});let c=Q(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e.func.$=e.$,e}function v_({expr:e,env:t,context:n}){return ge(e,I.newtype),Yi({expr:e,env:t,context:n})}function E_({expr:e,env:t,context:n}){if(!T(e,I.object))throw m({token:e.token,errorMessage:`Expected "object", got:
10981
+ ${k(e)}`});return Yi({expr:e,env:t,context:n})}function T_({expr:e,env:t,context:n}){ge(e,I.Slice,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10978
10982
  ${k(r)}`});if(!R(i.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
10979
10983
  ${k(r)}
10980
10984
 
10981
- If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let o=i.$.value.value,a=ra(o),s=J(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function E_({lhsExpr:e,env:t,context:n,selfType:r}){if(U(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(U(e)){let a=e.token.value,s=j(t,a);if(s.length>0){let p=s[s.length-1];if(p.value&&R(p.value[0])&&M(p.value[0].value))return{env:t,someType:p.value[0].value,isSelf:!1}}let l=mn(et(),a,{env:t,context:n}),u=J(l),{env:c}=_e({env:t,variable:{name:a,type:Tt(l),isCompileTimeOnly:!0,value:[u],token:e.token,initializedAtToken:e.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});return{env:c,someType:l,isSelf:!1}}let i=x({expr:e,env:t,context:{...n,SelfType:r}});if(!i.$||!i.$.value||!R(i.$.value))throw m({token:e.token,errorMessage:"Expected type for left-hand side of where clause constraint."});let o=i.$.value;if(!M(o.value))throw m({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${A(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function ky({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;F(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=E_({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=x({expr:s,env:n,context:{...r,SelfType:i}})}catch{return{env:n,success:!1}}if(!u.$||!u.$.value||!R(u.$.value))return{env:n,success:!1};n=u.$.env;let c=u.$.value;if(!xe(c.value))throw m({token:s.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(c.value)}`});let p=c.value;if(p.receiverType)throw m({token:s.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return l.isSelf&&(o.selfConstraints||(o.selfConstraints=[]),o.negativeSelfConstraints||(o.negativeSelfConstraints=[]),a?o.negativeSelfConstraints.push(p):o.selfConstraints.push(p)),n=Un({env:n,someType:l.someType,traitType:p,isNegated:a}),{env:n,success:!0}}function v_({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!F(s)||!T(s,"<:",2))throw m({token:s.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${k(s)}`});let l=s.args[0],u=s.args[1],c;try{c=E_({lhsExpr:l,env:t,context:n,selfType:r})}catch{throw m({token:l.token,errorMessage:"Expected type for left-hand side of where clause constraint."})}t=c.env;let p=[];F(u)&&T(u,I.tuple)?p.push(...u.args):p.push(u);for(let f of p){let _=!1,d=f;F(f)&&T(f,"!")&&f.args.length===1&&(_=!0,d=f.args[0]);let g;try{g=x({expr:d,env:t,context:{...n,SelfType:r}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw v}if(!g.$||!g.$.value||!R(g.$.value)){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw m({token:d.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=g.$.env;let h=g.$.value;if(!xe(h.value))throw m({token:d.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(h.value)}`});let y=h.value;if(y.receiverType)throw m({token:d.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});c.isSelf&&(i.selfConstraints||(i.selfConstraints=[]),i.negativeSelfConstraints||(i.negativeSelfConstraints=[]),_?i.negativeSelfConstraints.push(y):i.selfConstraints.push(y)),t=Un({env:t,someType:c.someType,traitType:y,isNegated:_})}}return{env:t,pendingTraits:a}}function wy({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){let o,a=e,s,l,u,c,p,f,_;if(F(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw m({token:a.token,errorMessage:`Cannot use "::" for trait field. Use ":=" instead.
10982
- All trait fields are compile-time only by default.`});p=a.args[1],a=a.args[0]}if(u&&p)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(F(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&T(s,I.comptime,1))throw m({token:s.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!U(s)&&!We(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${k(s)}`});o=s.token.value}else{if(F(a)&&T(a,I.comptime,1))throw m({token:a.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!u&&!p)throw m({token:e.token,errorMessage:`Expected label for trait field, got ${k(a)}`});if(s=a,!We(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${k(s)}`});if(!U(s)&&!We(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${k(s)}`});o=s.token.value}let d=r.expectedType?.type,g;if(d&&xe(d)){let y=d.fields[t];if(!y)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=y.type}if(l){let y=x({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});y.$?.env&&(n=y.$?.env);let v=y.$?.value;if(!R(v))throw m({token:l.token,errorMessage:`Expected type for trait field, got ${k(l)}`});_=v.value}if(p){let y=_?{type:_,env:n}:g?{type:g,env:n}:void 0,v=x({expr:p,env:n,context:{...r,expectedType:y}});if(!v.$)throw m({token:p.token,errorMessage:`Failed to evaluate required value expression: ${k(p)}`});if(n=v.$?.env,f=v.$.value,!f)throw m({token:p.token,errorMessage:`Expected compile-time known value for required value, got ${k(p)}`});let E=v.$.type;if(y){if(!W({type:y.type,env:n},{type:E,env:n}))throw m({token:p.token,errorMessage:`Assigned value type mismatch:
10985
+ If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let o=i.$.value.value,a=ra(o),s=Q(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function C_({lhsExpr:e,env:t,context:n,selfType:r}){if(U(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(U(e)){let a=e.token.value,s=j(t,a);if(s.length>0){let p=s[s.length-1];if(p.value&&R(p.value[0])&&D(p.value[0].value))return{env:t,someType:p.value[0].value,isSelf:!1}}let l=mn(Je(),a,{env:t,context:n}),u=Q(l),{env:c}=fe({env:t,variable:{name:a,type:Tt(l),isCompileTimeOnly:!0,value:[u],token:e.token,initializedAtToken:e.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});return{env:c,someType:l,isSelf:!1}}let i=x({expr:e,env:t,context:{...n,SelfType:r}});if(!i.$||!i.$.value||!R(i.$.value))throw m({token:e.token,errorMessage:"Expected type for left-hand side of where clause constraint."});let o=i.$.value;if(!D(o.value))throw m({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${A(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function Ly({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;F(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=C_({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=x({expr:s,env:n,context:{...r,SelfType:i}})}catch{return{env:n,success:!1}}if(!u.$||!u.$.value||!R(u.$.value))return{env:n,success:!1};n=u.$.env;let c=u.$.value;if(!xe(c.value))throw m({token:s.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(c.value)}`});let p=c.value;if(p.receiverType)throw m({token:s.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});if(l.isSelf&&(o.selfConstraints||(o.selfConstraints=[]),o.negativeSelfConstraints||(o.negativeSelfConstraints=[]),a?o.negativeSelfConstraints.push(p):o.selfConstraints.push(p)),!l.isSelf){let f=n.frames.length-1;a?l.someType.negativeTraits.some(_=>_.traitType.id===p.id)||l.someType.negativeTraits.push({traitType:p,frameLevel:f}):l.someType.requiredTraits.some(_=>_.traitType.id===p.id)||l.someType.requiredTraits.push({traitType:p,frameLevel:f})}return n=Un({env:n,someType:l.someType,traitType:p,isNegated:a}),{env:n,success:!0}}function $_({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!F(s)||!T(s,"<:",2))throw m({token:s.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${k(s)}`});let l=s.args[0],u=s.args[1],c;try{c=C_({lhsExpr:l,env:t,context:n,selfType:r})}catch{if(o){a.push({lhsExpr:l,traitExpr:u,originalConstraintExpr:s});continue}throw m({token:l.token,errorMessage:"Expected type for left-hand side of where clause constraint."})}t=c.env;let p=[];F(u)&&T(u,I.tuple)?p.push(...u.args):p.push(u);for(let f of p){let _=!1,d=f;F(f)&&T(f,"!")&&f.args.length===1&&(_=!0,d=f.args[0]);let g;try{g=x({expr:d,env:t,context:{...n,SelfType:r}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw v}if(!g.$||!g.$.value||!R(g.$.value)){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw m({token:d.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=g.$.env;let h=g.$.value;if(!xe(h.value))throw m({token:d.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(h.value)}`});let y=h.value;if(y.receiverType)throw m({token:d.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});c.isSelf&&(i.selfConstraints||(i.selfConstraints=[]),i.negativeSelfConstraints||(i.negativeSelfConstraints=[]),_?i.negativeSelfConstraints.push(y):i.selfConstraints.push(y)),t=Un({env:t,someType:c.someType,traitType:y,isNegated:_})}}return{env:t,pendingTraits:a}}function Ay({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){let o,a=e,s,l,u,c,p,f,_;if(F(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw m({token:a.token,errorMessage:`Cannot use "::" for trait field. Use ":=" instead.
10986
+ All trait fields are compile-time only by default.`});p=a.args[1],a=a.args[0]}if(u&&p)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(F(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&T(s,I.comptime,1))throw m({token:s.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!U(s)&&!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${k(s)}`});o=s.token.value}else{if(F(a)&&T(a,I.comptime,1))throw m({token:a.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!u&&!p)throw m({token:e.token,errorMessage:`Expected label for trait field, got ${k(a)}`});if(s=a,!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${k(s)}`});if(!U(s)&&!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${k(s)}`});o=s.token.value}let d=r.expectedType?.type,g;if(d&&xe(d)){let y=d.fields[t];if(!y)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=y.type}if(l){let y=x({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});y.$?.env&&(n=y.$?.env);let v=y.$?.value;if(!R(v))throw m({token:l.token,errorMessage:`Expected type for trait field, got ${k(l)}`});_=v.value}if(p){let y=_?{type:_,env:n}:g?{type:g,env:n}:void 0,v=x({expr:p,env:n,context:{...r,expectedType:y}});if(!v.$)throw m({token:p.token,errorMessage:`Failed to evaluate required value expression: ${k(p)}`});if(n=v.$?.env,f=v.$.value,!f)throw m({token:p.token,errorMessage:`Expected compile-time known value for required value, got ${k(p)}`});let E=v.$.type;if(y){if(!W({type:y.type,env:n},{type:E,env:n}))throw m({token:p.token,errorMessage:`Assigned value type mismatch:
10983
10987
  Expected type: ${A(y.type)}
10984
10988
  Given type: ${A(E)}`});_=y.type}else _=E}if(u){let y=_?{type:_,env:n}:g?{type:g,env:n}:void 0,v=x({expr:u,env:n,context:{...r,expectedType:y}});if(!v.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${k(u)}`});if(n=v.$.env,c=v.$?.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${k(u)}`});let E=v.$.type;if(y){if(!W({type:y.type,env:n},{type:E,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
10985
10989
  Expected type: ${A(y.type)}
10986
- Given type: ${A(E)}`});_=y.type}else _=E}if(!_)throw m({token:e.token,errorMessage:"Failed to infer the field type"});if(i&&H(_)){if(_.variadicParameter)throw m({token:e.token,errorMessage:`Variadic function parameters are not allowed in trait field "${o??"unnamed"}".
10990
+ Given type: ${A(E)}`});_=y.type}else _=E}if(!_)throw m({token:e.token,errorMessage:"Failed to infer the field type"});if(i&&q(_)){if(_.variadicParameter)throw m({token:e.token,errorMessage:`Variadic function parameters are not allowed in trait field "${o??"unnamed"}".
10987
10991
  Type expressions are required for all function parameters in trait fields to support proper type specialization.`});for(let y of _.forallParameters)if(!y.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function forall parameter "${y.label}" in trait field "${o??"unnamed"}" must have an explicit type annotation.
10988
10992
  Type expressions are required for all function parameters in trait fields to support proper type specialization.`});for(let y of _.parameters)if(!y.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function parameter "${y.label}" in trait field "${o??"unnamed"}" must have an explicit type annotation.
10989
10993
  Type expressions are required for all function parameters in trait fields to support proper type specialization.`});if(!_.return.typeExpr)throw m({token:e.token,errorMessage:`Function in trait field "${o??"unnamed"}" must have an explicit return type annotation.
10990
- Type expressions are required for return types in trait fields to support proper type specialization.`})}if(i&&u&&!H(_))throw m({token:u.token,errorMessage:`Default values (?=) are only allowed for function type trait elements (excluding closures).
10994
+ Type expressions are required for return types in trait fields to support proper type specialization.`})}if(i&&u&&!q(_))throw m({token:u.token,errorMessage:`Default values (?=) are only allowed for function type trait elements (excluding closures).
10991
10995
  Trait field "${o??"unnamed"}" has type: ${A(_)}
10992
10996
 
10993
- To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:_,value:f??q(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:Y,type:Y.type,pathCollection:[]});let h;if(i&&!f&&He(_)&&_.level===0){if(o){let y=j(n,o),v=y[y.length-1];v?.value&&R(v.value[0])&&M(v.value[0].value)&&(h=v.value[0].value)}h||(h=mn(_,o??`__associated_type_${Be(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${Be(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:p},defaultValue:c,assignedValue:f,unassignedSomeType:h},env:n}}function T_({expr:e,env:t,context:n}){if(!T(e,I.trait))throw m({token:e.token,errorMessage:`Expected "trait", got:
10994
- ${k(e)}`});let r=De(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=ze(t);let o=e.args,a=mn(et(),"Self",{env:t,context:n});a.trait=r,Cn(t,"Runtime")&&(t=Yt("Runtime",a,t,n));let l;if(o.length>0){let p=o[o.length-1];if(F(p)&&T(p,I.where)&&(l=p.args,l.length===0))throw m({token:p.token,errorMessage:"The where clause must have at least one constraint."})}let u=[];if(l&&l.length>0){let p=v_({constraintExprs:l,env:t,context:n,selfType:a,traitType:r,collectPendingTraits:!0});t=p.env,u=p.pendingTraits}for(let p=0;p<o.length;p++){let f=o[p];if(F(f)&&T(f,I.where)){if(p!==o.length-1)throw m({token:f.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:_,env:d}=wy({expr:f,env:t,traitFieldIndex:p,context:{...n,SelfType:a},isForEvaluatingTraitType:!0});if(i.find(h=>h.label===_.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label 3 "${_.label}" in trait`});if(i.push(_),t=d,_.unassignedSomeType){let h=j(t,_.label),y=h[h.length-1];if((y?.value&&R(y.value[0])&&M(y.value[0].value)?y.value[0].value:void 0)?.id!==_.unassignedSomeType.id){let E=J(_.unassignedSomeType),$=_.exprs.labelExpr?.token??_.exprs.expr.token??f.token,{env:C}=_e({env:t,variable:{name:_.label,type:E.type,isCompileTimeOnly:!0,value:[E],token:$,initializedAtToken:$,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=C}}}}if(u.length>0){let p=[];for(let f of u){let _=ky({lhsExpr:f.lhsExpr,traitExpr:f.traitExpr,originalConstraintExpr:f.originalConstraintExpr,env:t,context:n,selfType:a,traitType:r});t=_.env,_.success||p.push(f)}if(p.length>0){let f=p[0];v_({constraintExprs:[f.originalConstraintExpr],env:t,context:n,selfType:a,traitType:r,collectPendingTraits:!1})}}t=rt(t,!0);let c=J(r);return e.$={env:t,value:c,type:c.type,pathCollection:[]},e.func.$=e.$,e}function Fy({args:e,env:t,context:n,forType:r}){let i=[];for(let a=0;a<e.length;a++){let s=e[a],{field:l,env:u}=Mr({expr:s,env:t,tupleFieldIndex:a,context:{...n},forType:r});if(l.label&&i.find(p=>p.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in tuple`});i.push(l),t=u}return{type:ia(i),env:t}}function $_({expr:e,env:t,context:n}){if(e.args.length===0){let o=J(Rn());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=Fy({args:e.args,env:t,context:{...n},forType:"tuple"});return t=i,r.fields.forEach(o=>{if(o.exprs.defaultValueExpr)throw m({token:o.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),t=Pl({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:J(r),type:Tt(r),pathCollection:[]},e}function C_({expr:e,env:t,context:n}){if(!T(e,I.union))throw m({token:e.token,errorMessage:`Expected "union", got:
10995
- ${k(e)}`});let r=Jl(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:c}=Mr({expr:l,env:t,tupleFieldIndex:s,context:{...n,SelfType:r},forType:"union"});if(i.find(f=>f.label===u.label))throw m({token:F(l)?l.args[0]?.token??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in union field.`});if(u.defaultValue)throw m({token:u.exprs.defaultValueExpr?.token??u.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(jr(u.type,t)||!ur(u.type,t))throw m({token:u.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(Te(u.type))throw m({token:u.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(u),t=c}t=Dl({unionType:r,env:t,context:n}),t=Ml({unionType:r,env:t,context:n}),t=Ol({unionType:r,env:t,context:n});let a=J(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function xa({expr:e,env:t,context:n}){let r=n.expectedType?.type;if(!r)throw m({token:e.token,errorMessage:`Expected a function type, got:
10996
- ${k(e)}`});let i,o=!1,a,s;if(H(r))i=r;else if(M(r)){let B=jt(r);if(B)a=B,i=B.isFn.callType,o=!0,s=r;else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
10997
+ To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:_,value:f??H(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:Y,type:Y.type,pathCollection:[]});let h;if(i&&!f&&We(_)&&_.level===0){if(o){let y=j(n,o),v=y[y.length-1];v?.value&&R(v.value[0])&&D(v.value[0].value)&&(h=v.value[0].value)}h||(h=mn(_,o??`__associated_type_${Be(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${Be(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:p},defaultValue:c,assignedValue:f,unassignedSomeType:h},env:n}}function b_({expr:e,env:t,context:n}){if(!T(e,I.trait))throw m({token:e.token,errorMessage:`Expected "trait", got:
10998
+ ${k(e)}`});let r=De(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=Ue(t);let o=e.args,a=mn(Je(),"Self",{env:t,context:n});a.trait=r,Cn(t,"Runtime")&&(t=Yt("Runtime",a,t,n));let l;if(o.length>0){let p=o[o.length-1];if(F(p)&&T(p,I.where)&&(l=p.args,l.length===0))throw m({token:p.token,errorMessage:"The where clause must have at least one constraint."})}let u=[];if(l&&l.length>0){let p=$_({constraintExprs:l,env:t,context:n,selfType:a,traitType:r,collectPendingTraits:!0});t=p.env,u=p.pendingTraits}for(let p=0;p<o.length;p++){let f=o[p];if(F(f)&&T(f,I.where)){if(p!==o.length-1)throw m({token:f.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:_,env:d}=Ay({expr:f,env:t,traitFieldIndex:p,context:{...n,SelfType:a},isForEvaluatingTraitType:!0});if(i.find(h=>h.label===_.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label 3 "${_.label}" in trait`});if(i.push(_),t=d,_.unassignedSomeType){let h=j(t,_.label),y=h[h.length-1];if((y?.value&&R(y.value[0])&&D(y.value[0].value)?y.value[0].value:void 0)?.id!==_.unassignedSomeType.id){let E=Q(_.unassignedSomeType),$=_.exprs.labelExpr?.token??_.exprs.expr.token??f.token,{env:C}=fe({env:t,variable:{name:_.label,type:E.type,isCompileTimeOnly:!0,value:[E],token:$,initializedAtToken:$,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=C}}}}if(u.length>0){let p=[];for(let f of u){let _=Ly({lhsExpr:f.lhsExpr,traitExpr:f.traitExpr,originalConstraintExpr:f.originalConstraintExpr,env:t,context:n,selfType:a,traitType:r});t=_.env,_.success||p.push(f)}if(p.length>0){let f=p[0];$_({constraintExprs:[f.originalConstraintExpr],env:t,context:n,selfType:a,traitType:r,collectPendingTraits:!1})}}t=rt(t,!0);let c=Q(r);return e.$={env:t,value:c,type:c.type,pathCollection:[]},e.func.$=e.$,e}function Iy({args:e,env:t,context:n,forType:r}){let i=[];for(let a=0;a<e.length;a++){let s=e[a],{field:l,env:u}=Mr({expr:s,env:t,tupleFieldIndex:a,context:{...n},forType:r});if(l.label&&i.find(p=>p.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in tuple`});i.push(l),t=u}return{type:ia(i),env:t}}function k_({expr:e,env:t,context:n}){if(e.args.length===0){let o=Q(Rn());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=Iy({args:e.args,env:t,context:{...n},forType:"tuple"});return t=i,r.fields.forEach(o=>{if(o.exprs.defaultValueExpr)throw m({token:o.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),t=Ul({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:Q(r),type:Tt(r),pathCollection:[]},e}function w_({expr:e,env:t,context:n}){if(!T(e,I.union))throw m({token:e.token,errorMessage:`Expected "union", got:
10999
+ ${k(e)}`});let r=eu(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:c}=Mr({expr:l,env:t,tupleFieldIndex:s,context:{...n,SelfType:r},forType:"union"});if(i.find(f=>f.label===u.label))throw m({token:F(l)?l.args[0]?.token??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in union field.`});if(u.defaultValue)throw m({token:u.exprs.defaultValueExpr?.token??u.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(jr(u.type,t)||!cr(u.type,t))throw m({token:u.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(Te(u.type))throw m({token:u.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(u),t=c}t=Ml({unionType:r,env:t,context:n}),t=Ol({unionType:r,env:t,context:n}),t=Rl({unionType:r,env:t,context:n});let a=Q(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Sa({expr:e,env:t,context:n}){let r=n.expectedType?.type;if(!r)throw m({token:e.token,errorMessage:`Expected a function type, got:
11000
+ ${k(e)}`});let i,o=!1,a,s;if(q(r))i=r;else if(D(r)){let B=jt(r);if(B)a=B,i=B.isFn.callType,o=!0,s=r;else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
10997
11001
  ${A(r)}`})}else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
10998
11002
  ${A(r)}${Ne(r)?`
10999
11003
  Use 'dyn((x) => expr)' for dynamic dispatch`:""}`});let l=o?"=>":"->",u=o?"closure":"function";if(!T(e,l,2))throw m({token:e.token,errorMessage:`Expected ${l} for anonymous ${u}, got:
11000
- ${k(e)}`});let c=e.args[0],p=e.args[1],f=[];F(c)&&T(c,I.tuple)?f=c.args:f=[c];let _=[],d=[],g=[];for(let B=0;B<f.length;B++){let oe=f[B];if(F(oe)&&T(oe,I.forall)){if(B!==0)throw m({token:oe.token,errorMessage:"forall(...) must be the first parameter expression"});_=oe.args}else F(oe)&&T(oe,I.using)?d=oe.args:g.push(oe)}if(g.length!==i.parameters.length)throw m({token:e.token,errorMessage:`Expected ${i.parameters.length} regular parameters, got ${g.length}`});let h=t;t=ze(ku(t));for(let B=0;B<_.length;B++){let oe=_[B],ae=i.forallParameters[B];if(!U(oe))throw m({token:oe.token,errorMessage:`Expected parameter name for forall parameter, got ${k(oe)}`});let le=oe.token.value;if(le!==ae.label)throw m({token:oe.token,errorMessage:`Forall parameter name must match expected name.
11001
- Expected: "${ae.label}"
11002
- Got: "${le}"`})}for(let B=0;B<i.forallParameters.length;B++){let oe=_[B],ae=i.forallParameters[B],{env:le}=_e({env:t,variable:{name:ae.label,type:ae.type,isCompileTimeOnly:ae.isCompileTimeOnly,value:[q(ae.type,{variableName:ae.label,env:t,context:n})],token:oe?.token??se,initializedAtToken:oe?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=le,oe&&(oe.$={env:t,type:ae.type,value:q(ae.type,{variableName:ae.label,env:t,context:n}),pathCollection:[]})}let y=i.implicitParameters.some(B=>B.isEffectRowSpread),v,E;if(y&&d.length>0){v=[];for(let B of d)if(F(B)&&T(B,":",2)){let oe=B.args[0],ae=B.args[1];if(!U(oe))throw m({token:oe.token,errorMessage:`Expected identifier for effect name, got ${k(oe)}`});let le=oe.token.value,Ce=x({expr:Ve(ae),env:h,context:{...n,isEvaluatingFunctionType:!0}});if(!Ce.$?.value||!R(Ce.$.value))throw m({token:ae.token,errorMessage:`Expected a type for effect parameter "${le}", got ${k(ae)}`});let Me=Ce.$.value.value;v.push({label:le,type:Me,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:B,labelExpr:oe,typeExpr:ae,defaultValueExpr:void 0}})}else if(U(B)){let oe=B.token.value,le=j(h,oe).at(-1);if(!le)throw m({token:B.token,errorMessage:`Variable "${oe}" not found. Cannot infer type for using() parameter.`});v.push({label:oe,type:le.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:B,labelExpr:B,typeExpr:B,defaultValueExpr:void 0}})}else throw m({token:B.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${k(B)}`});E=cr(v);for(let B of i.implicitParameters)B.isEffectRowSpread&&M(B.type)&&B.type.isEffectsRow&&(B.type.resolvedConcreteType=E)}else if(d.length>0){let B=[];for(let ae of d)if(F(ae)&&T(ae,":",2)){let le=ae.args[0],Ce=ae.args[1];if(!U(le))throw m({token:le.token,errorMessage:`Expected identifier for effect name, got ${k(le)}`});let Me=x({expr:Ve(Ce),env:h,context:{...n,isEvaluatingFunctionType:!0}});if(!Me.$?.value||!R(Me.$.value))throw m({token:Ce.token,errorMessage:`Expected a type for effect parameter "${le.token.value}", got ${k(Ce)}`});B.push({name:le.token.value,type:Me.$.value.value,nameExpr:le})}else if(U(ae))B.push({name:ae.token.value,type:void 0,nameExpr:ae});else throw m({token:ae.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${k(ae)}`});if(B.some(ae=>ae.type!==void 0)){if(B.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Effect row mismatch: closure declares ${B.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let ae=new Set,le=[];for(let Ce=0;Ce<B.length;Ce++){let Me=B[Ce];if(!Me.type){le.push({...i.implicitParameters[Ce],label:Me.name,exprs:{...i.implicitParameters[Ce].exprs,expr:Me.nameExpr,labelExpr:Me.nameExpr}}),ae.add(Ce);continue}let X=!1;for(let Q=0;Q<i.implicitParameters.length;Q++){if(ae.has(Q))continue;let re=i.implicitParameters[Q];if(W({type:Me.type,env:h},{type:re.type,env:h})){le.push({...re,label:Me.name,exprs:{...re.exprs,expr:Me.nameExpr,labelExpr:Me.nameExpr}}),ae.add(Q),X=!0;break}}if(!X)throw m({token:Me.nameExpr.token,errorMessage:`Effect row type mismatch for "${Me.name}": closure declares ${A(Me.type)}, but no matching resolved effect found.`})}v=le,E=cr(v)}else{if(d.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Expected ${i.implicitParameters.length} implicit parameters in using(...), got ${d.length}`});v=i.implicitParameters}}else v=i.implicitParameters;let $=[];for(let B=0;B<v.length;B++){let oe=v[B],ae=E?oe.exprs?.labelExpr:d[B],le=oe.label;ae&&U(ae)&&(le=ae.token.value);let Ce;if(H(oe.type)){let re=i.implicitParameters[B]?.label,ce=[oe.label];re&&re!==oe.label&&ce.push(re);for(let me of ce){let te=j(h,me),Le=te[te.length-1];if(Le?.value&&Le.value.length>0){let Ee=Le.value[0];if(Ee&&ie(Ee)){Ce=Ee;break}}}if(!Ce){let te=er(h,Le=>Le.isImplicit===!0&&Le.isCompileTimeOnly===!0&&ie(Le.value?.[0])&&W({type:oe.type,env:h},{type:Le.type,env:h})).at(-1);te?.value?.[0]&&ie(te.value[0])&&(Ce=te.value[0])}}let Me=Ce||q(oe.type,{variableName:le,env:t,context:n}),X=n.isInsideIoAsyncCall&&o&&H(oe.type)&&oe.type.forallParameters.length===0&&!Ce;X&&$.push({name:le,type:oe.type,token:ae?.token??se});let{env:Q}=_e({env:t,variable:{name:le,type:oe.type,isCompileTimeOnly:!X,isImplicit:!0,value:X?void 0:[Me],token:ae?.token??se,initializedAtToken:ae?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:X||void 0},allowVariableShadowing:!0});t=Q,ae&&(ae.$={env:t,type:oe.type,value:X?void 0:Me,pathCollection:[]})}for(let B=0;B<g.length;B++){let oe=g[B],ae=i.parameters[B];if(ae.isCompileTimeOnly){if(!U(oe))throw m({token:oe.token,errorMessage:`Expected parameter name for compile-time parameter, got ${k(oe)}`});let X=oe.token.value;if(X!=="_"&&X!==ae.label)throw m({token:oe.token,errorMessage:`Compile-time parameter name must match expected name.
11003
- Expected: "${ae.label}"
11004
- Got: "${X}"`})}let le=oe.token.value,Ce=ae.label,{env:Me}=_e({env:t,variable:{name:le,type:ae.type,isCompileTimeOnly:ae.isCompileTimeOnly,value:ae.isCompileTimeOnly?[q(ae.type,{variableName:ae.label,env:t,context:n})]:void 0,token:oe.token,initializedAtToken:oe.token,consumedAtToken:void 0,isOwningTheRcValue:ae.isOwningTheRcValue,parameterAlias:le!==Ce?Ce:void 0}});t=Me,oe.$={env:t,type:ae.type,value:ae.isCompileTimeOnly?q(ae.type,{variableName:ae.label,env:t,context:n}):void 0,pathCollection:[]}}let C=t.frames[t.frames.length-1],L={...i,forallParameters:i.forallParameters,implicitParameters:E?v:v.map((B,oe)=>{let ae=d[oe];if(ae&&U(ae)){let le=ae.token.value;if(le!==B.label)return{...B,label:le}}return B}),parameters:i.parameters.map((B,oe)=>{if(B.isCompileTimeOnly)return B;{let ae=g[oe];return{...B,label:U(ae)?ae.token.value:B.label,exprs:{...B.exprs,expr:ae,labelExpr:ae,typeExpr:B.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:C,env:pa(i.env)};if(L.whereClauseExprs?.length){let B=L.whereClauseExprs.map(ae=>Ve(ae));t=Vr({constraintExprs:B,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:L,body:p,frameLevel:t.frames.length-1,funcId:`fn_${Be(t.modulePath)}`,definitionSiteEnclosingFunctionType:n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},O=!!a,N=i.forallParameters.length>0||i.parameters.some(B=>Ae(B.type))||i.SelfType&&Ae(i.SelfType),D,V;if(N)ll({functionBodyExpr:p,functionType:i,functionValue:b,env:t,context:n}),p.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?q(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},D={...n,isExecuting:!1,capturedVariables:new Map},V=p;else{let{evaluationContext:B}=Wi({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,b,t);if(D=B,n.isInsideIoAsyncCall&&o&&(D={...D,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),V=gt({expr:p,env:t,context:D,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!V.$)throw m({token:p.token,errorMessage:"Failed to evaluate the function body."});t=V.$.env}let z=D.capturedVariables;if(Pn(V)&&(b.isControlFunction=!0),V.$&&(i.implicitParameters.some(B=>Fe(B.type))||n.isInsideIoAsyncCall)){let B=su(V);B.hasAwaits&&(V.$.awaitAnalysis=B)}let ee=V.$?.type;if(M(i.return.type)&&!i.return.type.resolvedConcreteType&&ee&&!M(ee)){let B=ut({type:ee,expectedType:void 0,expr:V,env:t});i.return.type.resolvedConcreteType=B}if(!b.isControlFunction&&ee&&!W({type:i.return.type,env:t},{type:ee,env:t}))throw m({token:p.token,errorMessage:`Incompatible return type:
11004
+ ${k(e)}`});let c=e.args[0],p=e.args[1],f=[];F(c)&&T(c,I.tuple)?f=c.args:f=[c];let _=[],d=[],g=[];for(let B=0;B<f.length;B++){let oe=f[B];if(F(oe)&&T(oe,I.forall)){if(B!==0)throw m({token:oe.token,errorMessage:"forall(...) must be the first parameter expression"});_=oe.args}else F(oe)&&T(oe,I.using)?d=oe.args:g.push(oe)}if(g.length!==i.parameters.length)throw m({token:e.token,errorMessage:`Expected ${i.parameters.length} regular parameters, got ${g.length}`});let h=t;t=Ue(Fu(t));for(let B=0;B<_.length;B++){let oe=_[B],se=i.forallParameters[B];if(!U(oe))throw m({token:oe.token,errorMessage:`Expected parameter name for forall parameter, got ${k(oe)}`});let le=oe.token.value;if(le!==se.label)throw m({token:oe.token,errorMessage:`Forall parameter name must match expected name.
11005
+ Expected: "${se.label}"
11006
+ Got: "${le}"`})}for(let B=0;B<i.forallParameters.length;B++){let oe=_[B],se=i.forallParameters[B],{env:le}=fe({env:t,variable:{name:se.label,type:se.type,isCompileTimeOnly:se.isCompileTimeOnly,value:[H(se.type,{variableName:se.label,env:t,context:n})],token:oe?.token??ae,initializedAtToken:oe?.token??ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=le,oe&&(oe.$={env:t,type:se.type,value:H(se.type,{variableName:se.label,env:t,context:n}),pathCollection:[]})}let y=i.implicitParameters.some(B=>B.isEffectRowSpread),v,E;if(y&&d.length>0){v=[];for(let B of d)if(F(B)&&T(B,":",2)){let oe=B.args[0],se=B.args[1];if(!U(oe))throw m({token:oe.token,errorMessage:`Expected identifier for effect name, got ${k(oe)}`});let le=oe.token.value,Ce=x({expr:Ve(se),env:h,context:{...n,isEvaluatingFunctionType:!0}});if(!Ce.$?.value||!R(Ce.$.value))throw m({token:se.token,errorMessage:`Expected a type for effect parameter "${le}", got ${k(se)}`});let Me=Ce.$.value.value;v.push({label:le,type:Me,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:B,labelExpr:oe,typeExpr:se,defaultValueExpr:void 0}})}else if(U(B)){let oe=B.token.value,le=j(h,oe).at(-1);if(!le)throw m({token:B.token,errorMessage:`Variable "${oe}" not found. Cannot infer type for using() parameter.`});v.push({label:oe,type:le.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:B,labelExpr:B,typeExpr:B,defaultValueExpr:void 0}})}else throw m({token:B.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${k(B)}`});E=pr(v);for(let B of i.implicitParameters)B.isEffectRowSpread&&D(B.type)&&B.type.isEffectsRow&&(B.type.resolvedConcreteType=E)}else if(d.length>0){let B=[];for(let se of d)if(F(se)&&T(se,":",2)){let le=se.args[0],Ce=se.args[1];if(!U(le))throw m({token:le.token,errorMessage:`Expected identifier for effect name, got ${k(le)}`});let Me=x({expr:Ve(Ce),env:h,context:{...n,isEvaluatingFunctionType:!0}});if(!Me.$?.value||!R(Me.$.value))throw m({token:Ce.token,errorMessage:`Expected a type for effect parameter "${le.token.value}", got ${k(Ce)}`});B.push({name:le.token.value,type:Me.$.value.value,nameExpr:le})}else if(U(se))B.push({name:se.token.value,type:void 0,nameExpr:se});else throw m({token:se.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${k(se)}`});if(B.some(se=>se.type!==void 0)){if(B.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Effect row mismatch: closure declares ${B.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let se=new Set,le=[];for(let Ce=0;Ce<B.length;Ce++){let Me=B[Ce];if(!Me.type){le.push({...i.implicitParameters[Ce],label:Me.name,exprs:{...i.implicitParameters[Ce].exprs,expr:Me.nameExpr,labelExpr:Me.nameExpr}}),se.add(Ce);continue}let X=!1;for(let Z=0;Z<i.implicitParameters.length;Z++){if(se.has(Z))continue;let re=i.implicitParameters[Z];if(W({type:Me.type,env:h},{type:re.type,env:h})){le.push({...re,label:Me.name,exprs:{...re.exprs,expr:Me.nameExpr,labelExpr:Me.nameExpr}}),se.add(Z),X=!0;break}}if(!X)throw m({token:Me.nameExpr.token,errorMessage:`Effect row type mismatch for "${Me.name}": closure declares ${A(Me.type)}, but no matching resolved effect found.`})}v=le,E=pr(v)}else{if(d.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Expected ${i.implicitParameters.length} implicit parameters in using(...), got ${d.length}`});v=i.implicitParameters}}else v=i.implicitParameters;let $=[];for(let B=0;B<v.length;B++){let oe=v[B],se=E?oe.exprs?.labelExpr:d[B],le=oe.label;se&&U(se)&&(le=se.token.value);let Ce;if(q(oe.type)){let re=i.implicitParameters[B]?.label,ce=[oe.label];re&&re!==oe.label&&ce.push(re);for(let me of ce){let te=j(h,me),Ae=te[te.length-1];if(Ae?.value&&Ae.value.length>0){let Ee=Ae.value[0];if(Ee&&ie(Ee)){Ce=Ee;break}}}if(!Ce){let te=tr(h,Ae=>Ae.isImplicit===!0&&Ae.isCompileTimeOnly===!0&&ie(Ae.value?.[0])&&W({type:oe.type,env:h},{type:Ae.type,env:h})).at(-1);te?.value?.[0]&&ie(te.value[0])&&(Ce=te.value[0])}}let Me=Ce||H(oe.type,{variableName:le,env:t,context:n}),X=n.isInsideIoAsyncCall&&o&&q(oe.type)&&oe.type.forallParameters.length===0&&!Ce;X&&$.push({name:le,type:oe.type,token:se?.token??ae});let{env:Z}=fe({env:t,variable:{name:le,type:oe.type,isCompileTimeOnly:!X,isImplicit:!0,value:X?void 0:[Me],token:se?.token??ae,initializedAtToken:se?.token??ae,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:X||void 0},allowVariableShadowing:!0});t=Z,se&&(se.$={env:t,type:oe.type,value:X?void 0:Me,pathCollection:[]})}for(let B=0;B<g.length;B++){let oe=g[B],se=i.parameters[B];if(se.isCompileTimeOnly){if(!U(oe))throw m({token:oe.token,errorMessage:`Expected parameter name for compile-time parameter, got ${k(oe)}`});let X=oe.token.value;if(X!=="_"&&X!==se.label)throw m({token:oe.token,errorMessage:`Compile-time parameter name must match expected name.
11007
+ Expected: "${se.label}"
11008
+ Got: "${X}"`})}let le=oe.token.value,Ce=se.label,{env:Me}=fe({env:t,variable:{name:le,type:se.type,isCompileTimeOnly:se.isCompileTimeOnly,value:se.isCompileTimeOnly?[H(se.type,{variableName:se.label,env:t,context:n})]:void 0,token:oe.token,initializedAtToken:oe.token,consumedAtToken:void 0,isOwningTheRcValue:se.isOwningTheRcValue,parameterAlias:le!==Ce?Ce:void 0}});t=Me,oe.$={env:t,type:se.type,value:se.isCompileTimeOnly?H(se.type,{variableName:se.label,env:t,context:n}):void 0,pathCollection:[]}}let C=t.frames[t.frames.length-1],L={...i,forallParameters:i.forallParameters,implicitParameters:E?v:v.map((B,oe)=>{let se=d[oe];if(se&&U(se)){let le=se.token.value;if(le!==B.label)return{...B,label:le}}return B}),parameters:i.parameters.map((B,oe)=>{if(B.isCompileTimeOnly)return B;{let se=g[oe];return{...B,label:U(se)?se.token.value:B.label,exprs:{...B.exprs,expr:se,labelExpr:se,typeExpr:B.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:C,env:_a(i.env)};if(L.whereClauseExprs?.length){let B=L.whereClauseExprs.map(se=>Ve(se));t=Vr({constraintExprs:B,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:L,body:p,frameLevel:t.frames.length-1,funcId:`fn_${Be(t.modulePath)}`,definitionSiteEnclosingFunctionType:n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},O=!!a,N=i.forallParameters.length>0||i.parameters.some(B=>Fe(B.type))||i.SelfType&&Fe(i.SelfType),M,V;if(N)ul({functionBodyExpr:p,functionType:i,functionValue:b,env:t,context:n}),p.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?H(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},M={...n,isExecuting:!1,capturedVariables:new Map},V=p;else{let{evaluationContext:B}=Wi({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,b,t);if(M=B,n.isInsideIoAsyncCall&&o&&(M={...M,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),V=gt({expr:p,env:t,context:M,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!V.$)throw m({token:p.token,errorMessage:"Failed to evaluate the function body."});t=V.$.env}let z=M.capturedVariables;if(Pn(V)&&(b.isControlFunction=!0),V.$&&(i.implicitParameters.some(B=>Le(B.type))||n.isInsideIoAsyncCall)){let B=lu(V);B.hasAwaits&&(V.$.awaitAnalysis=B)}let ee=V.$?.type;if(D(i.return.type)&&!i.return.type.resolvedConcreteType&&ee&&!D(ee)){let B=ut({type:ee,expectedType:void 0,expr:V,env:t});i.return.type.resolvedConcreteType=B}if(!b.isControlFunction&&ee&&!W({type:i.return.type,env:t},{type:ee,env:t}))throw m({token:p.token,errorMessage:`Incompatible return type:
11005
11009
  - Expected: ${A(i.return.type)}
11006
- - Got : ${A(ee)}`});V.$?.env&&(t=V.$?.env),t=rt(t,!0),t=h;let ne;if(O&&z&&z.size>0&&(ne=wa({capturedVariables:z,env:t})),O&&$.length>0){ne||(ne=new Map);for(let B of $)ne.set(B.name,{frameLevel:0,usageType:"read",token:B.token,value:void 0,type:B.type,isEffectParam:!0})}let G,Z,de,he,$e=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let B=Ui(b,t,n);B&&($e=B)}if(o&&a&&s){he=ka({expectedCaptureType:void 0,capturedVariablesWithValues:ne,env:t,closureToken:e.token,context:{...n}}).captureType;let oe=nu(L,t),{capturedVariableDupExpressions:ae,env:le}=Fa({capturedVariablesWithValues:ne,env:t,context:n});de=ae,t=le,b.funcId=`closure_${Be(t.modulePath)}`,b.closureInfo={closureType:oe,captureType:he,effectParamNames:$.length>0?$.map(Ce=>Ce.name):void 0},M(s)&&he&&ba({wrapperType:s,captureType:he,env:t,errorToken:e.token}),s.resolvedConcreteType=he,G={...s,resolvedConcreteType:he},Z=void 0}else G=$e.type,Z=$e;return e.$={env:t,type:G,value:Z,pathCollection:O&&z?Gi(z):[],deferredDupExpressions:o&&de?de:void 0,captureType:o?he:void 0,closureFunctionValue:o?$e:void 0,isAnonymousFunctionDefinition:!0},O&&Pe(e,!0),e}function b_({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw m({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&be(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let p=0;p<r.length;p++){let f=r[p],_=x({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(Rt(_,n),!_.$)throw m({token:f.token,errorMessage:`Failed to evaluate array element: ${k(f)}`});if(t=_.$.env,s.push(_.$.value),!o)o=a||_.$.type;else if(!W({type:o,env:t},{type:_.$.type,env:t}))if(W({type:ut({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:_.$.type,env:t}))o=_.$.type;else throw m({token:f.token,errorMessage:`Array element type mismatch:
11010
+ - Got : ${A(ee)}`});V.$?.env&&(t=V.$?.env),t=rt(t,!0),t=h;let ne;if(O&&z&&z.size>0&&(ne=La({capturedVariables:z,env:t})),O&&$.length>0){ne||(ne=new Map);for(let B of $)ne.set(B.name,{frameLevel:0,usageType:"read",token:B.token,value:void 0,type:B.type,isEffectParam:!0})}let G,J,de,he,$e=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let B=Ui(b,t,n);B&&($e=B)}if(o&&a&&s){he=Fa({expectedCaptureType:void 0,capturedVariablesWithValues:ne,env:t,closureToken:e.token,context:{...n}}).captureType;let oe=ru(L,t),{capturedVariableDupExpressions:se,env:le}=Aa({capturedVariablesWithValues:ne,env:t,context:n});de=se,t=le,b.funcId=`closure_${Be(t.modulePath)}`,b.closureInfo={closureType:oe,captureType:he,effectParamNames:$.length>0?$.map(Ce=>Ce.name):void 0},D(s)&&he&&wa({wrapperType:s,captureType:he,env:t,errorToken:e.token}),s.resolvedConcreteType=he,G={...s,resolvedConcreteType:he},J=void 0}else G=$e.type,J=$e;return e.$={env:t,type:G,value:J,pathCollection:O&&z?Gi(z):[],deferredDupExpressions:o&&de?de:void 0,captureType:o?he:void 0,closureFunctionValue:o?$e:void 0,isAnonymousFunctionDefinition:!0},O&&Pe(e,!0),e}function F_({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw m({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&be(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let p=0;p<r.length;p++){let f=r[p],_=x({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(Rt(_,n),!_.$)throw m({token:f.token,errorMessage:`Failed to evaluate array element: ${k(f)}`});if(t=_.$.env,s.push(_.$.value),!o)o=a||_.$.type;else if(!W({type:o,env:t},{type:_.$.type,env:t}))if(W({type:ut({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:_.$.type,env:t}))o=_.$.type;else throw m({token:f.token,errorMessage:`Array element type mismatch:
11007
11011
  Expected type: ${A(o)}
11008
- Given type: ${A(_.$.type)}`});l.push(_)}let u=Qn(o,Bt("Usize",i)),c=s.every(p=>!!p)?Tr(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},Pe(e,!0),e}function k_(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=at(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function w_(e,t){if(e.token.type==="char"){let n=Ly(e.token.value),r=Hn(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function Ly(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 F_({expr:e,env:t,context:n}){let r=[],i=e.args;if(i.length===0)throw m({token:e.token,errorMessage:`Expected at least one element in comptime_list, got ${i.length}`});let o;n.expectedType&&Lt(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=x({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw m({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
11009
- ${k(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!W({type:o,env:t},{type:u.$.type,env:t}))throw m({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${A(o)}, got ${A(u.$.type)}`})}let a=An(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function L_(e,t,n){let i=j(t,"Box").find(_=>_.value&&ie(_.value[0])&&H(_.type));if(!i||!i.value||!ie(i.value[0]))throw new Error("Cannot find Box type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=J(e),u=ze(a.env),{env:c}=_e({env:u,variable:{name:s.label,token:se,type:l.type,isCompileTimeOnly:!0,initializedAtToken:se,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:p,callerEnv:f}=Hi({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:et()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(p)||!dt(p.value))throw new Error("Box type constructor did not return a type value");return{boxType:p.value,env:f}}function Ay(e,t,n){try{let r=x({expr:e,env:t,context:n});if(!r.$)return!1;let i=r.$.value;return ie(i)?!!j(t,"box").find(s=>s.value&&ie(s.value[0])&&s.value[0]===i):R(i)?!!i.value?.typeName?.startsWith("Box("):!1}catch{return!1}}function A_({expr:e,env:t,context:n}){ge(e,I.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&Ne(n.expectedType.type)){let g=n.expectedType.type;if(o=mn(et(),"",{requiredTraits:g.requiredTraits.map(h=>h.traitType),negativeTraits:g.negativeTraits.map(h=>h.traitType),env:t,context:n}),F(r)&&Ay(r.func,t,{...n})&&T(r.args[0],"=>")){let{boxType:h,env:y}=L_(o,t,n);t=y,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=x({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
11010
- ${k(r)}`});let s=a.$.type,l=a;if(!dt(s)&&!(M(s)&&we(s))){let{boxType:g,env:h}=L_(s,t,{...n});t=h;let y={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},v={tag:"FnCall",func:y,args:[a],token:r.token,$:void 0},E=x({expr:v,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!E.$)throw m({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
11011
- ${k(r)}`});t=E.$.env,s=E.$.type,l=E,e.args[0]=E}else t=a.$.env;Rt(l,n),t=l.$.env;let u=[],c=[],p=new Set,f;if(n.expectedType&&Ne(n.expectedType.type))f=n.expectedType.type;else if(hn(s)){let g=s.fields[0].type;if(g.trait){let h=[];for(let y of g.trait.fields)y.assignedValue&&mt(y.assignedValue)&&h.push(y.assignedValue.type);f=go({requiredTraits:h,negativeTraits:[],env:t}),t=_o({dynType:f,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${I.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${A(g)}`})}else if(s.trait){let g=[];for(let h of s.trait.fields)h.assignedValue&&mt(h.assignedValue)&&g.push(h.assignedValue.type);f=go({requiredTraits:g,negativeTraits:[],env:t}),t=_o({dynType:f,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${I.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${A(s)}`});let _=[];if(hn(s)){let g=s.fields[0].type;(M(g)||Ne(g))&&_.push(...g.negativeTraits.map(h=>h.traitType)??[])}for(let{traitType:g}of f.requiredTraits)for(let h of _)if(W({type:g,env:t},{type:h,env:t}))throw m({token:e.token,errorMessage:`Required trait ${A(g)} is in the negative traits list and cannot be used.`});for(let{traitType:g}of f.requiredTraits)if(!p.has(g))if(hn(s)&&(M(s.fields[0].type)||Ne(s.fields[0].type))){let h=s.fields[0].type,y=!1,v=h.requiredTraits.map(E=>E.traitType);for(let E of v)if(W({type:g,env:t},{type:E,env:t})){let $=[];for(let L=0;L<g.fields.length;L++){let b=g.fields[L],O=E.fields.findIndex(N=>N.label===b.label);O===-1?$.push(void 0):$.push(E.fields[O].assignedValue)}let C=_i(g,$);c.push(C),u.push(C.type),p.add(g),y=!0;break}if(!y)throw m({token:e.token,errorMessage:`Required trait ${A(g)} not found in SomeType's requiredTraits.`})}else{let h=hn(s)?s.fields[0].type:s;if(h.trait){let y=!1;for(let v of h.trait.fields)if(v.assignedValue&&mt(v.assignedValue)&&W({type:g,env:t},{type:v.assignedValue.type,env:t})){c.push(v.assignedValue),u.push(v.assignedValue.type),p.add(g),y=!0;break}if(!y)throw m({token:e.token,errorMessage:`Required trait ${A(g)} is not implemented by type ${A(s)}.`})}else throw m({token:e.token,errorMessage:`Cannot find trait ${A(g)} for value type ${A(s)}.`})}let d=[];for(let{traitType:g}of f.requiredTraits){let h=u.findIndex(y=>W({type:g,env:t},{type:y,env:t}));if(h===-1)throw m({token:e.token,errorMessage:`No trait value found for expected trait type ${A(g)}.`});d.push(c[h])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallTraitValues:d},Pe(e,!0),e}function I_(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;ao(a)?i="F32":so(a)&&(i="F64")}let o=Bt(i,r);return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function x_(e,t,n){if(e.token.type==="integer"){let r=e.token.value.replace(/_/g,""),i=10;r.match(/^0x/i)?(i=16,r=r.slice(2)):r.match(/^0b/i)?(i=2,r=r.slice(2)):r.match(/^0o/i)&&(i=8,r=r.slice(2));let o="ComptimeInt";if(n.expectedType){let u=n.expectedType.type;Qi(u)?o="Usize":Zi(u)?o="Isize":Dn(u)?o="U8":Ji(u)?o="I8":eo(u)?o="U16":to(u)?o="I16":no(u)?o="U32":ro(u)?o="I32":io(u)?o="U64":oo(u)&&(o="I64")}let a=o==="U64"||o==="I64"||o==="Usize"||o==="Isize",s;a||o==="ComptimeInt"?i===16?s=BigInt("0x"+r):i===8?s=BigInt("0o"+r):i===2?s=BigInt("0b"+r):s=BigInt(r):s=parseInt(r,i);let l=Bt(o,s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function N_(e,t){if(e.token.type==="string"){let n=en(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function Iy({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){let a=e,s=e,l;if(F(a)&&T(a,":",2)){let _=a.args[0];throw m({token:_.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=r.expectedType?.type,c;if(u){if(!ke(u))throw m({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
11012
+ Given type: ${A(_.$.type)}`});l.push(_)}let u=Qn(o,Bt("Usize",i)),c=s.every(p=>!!p)?Tr(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},Pe(e,!0),e}function L_(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=at(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function A_(e,t){if(e.token.type==="char"){let n=xy(e.token.value),r=qn(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function xy(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 I_({expr:e,env:t,context:n}){let r=[],i=e.args;if(i.length===0)throw m({token:e.token,errorMessage:`Expected at least one element in comptime_list, got ${i.length}`});let o;n.expectedType&&At(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=x({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw m({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
11013
+ ${k(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!W({type:o,env:t},{type:u.$.type,env:t}))throw m({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${A(o)}, got ${A(u.$.type)}`})}let a=An(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function x_(e,t,n){let i=j(t,"Box").find(_=>_.value&&ie(_.value[0])&&q(_.type));if(!i||!i.value||!ie(i.value[0]))throw new Error("Cannot find Box type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=Q(e),u=Ue(a.env),{env:c}=fe({env:u,variable:{name:s.label,token:ae,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ae,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:p,callerEnv:f}=qi({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Je()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(p)||!mt(p.value))throw new Error("Box type constructor did not return a type value");return{boxType:p.value,env:f}}function Ny(e,t,n){try{let r=x({expr:e,env:t,context:n});if(!r.$)return!1;let i=r.$.value;return ie(i)?!!j(t,"box").find(s=>s.value&&ie(s.value[0])&&s.value[0]===i):R(i)?!!i.value?.typeName?.startsWith("Box("):!1}catch{return!1}}function N_({expr:e,env:t,context:n}){ge(e,I.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&Ne(n.expectedType.type)){let g=n.expectedType.type;if(o=mn(Je(),"",{requiredTraits:g.requiredTraits.map(h=>h.traitType),negativeTraits:g.negativeTraits.map(h=>h.traitType),env:t,context:n}),F(r)&&Ny(r.func,t,{...n})&&T(r.args[0],"=>")){let{boxType:h,env:y}=x_(o,t,n);t=y,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=x({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
11014
+ ${k(r)}`});let s=a.$.type,l=a;if(!mt(s)&&!(D(s)&&we(s))){let{boxType:g,env:h}=x_(s,t,{...n});t=h;let y={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},v={tag:"FnCall",func:y,args:[a],token:r.token,$:void 0},E=x({expr:v,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!E.$)throw m({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
11015
+ ${k(r)}`});t=E.$.env,s=E.$.type,l=E,e.args[0]=E}else t=a.$.env;Rt(l,n),t=l.$.env;let u=[],c=[],p=new Set,f;if(n.expectedType&&Ne(n.expectedType.type))f=n.expectedType.type;else if(hn(s)){let g=s.fields[0].type;if(g.trait){let h=[];for(let y of g.trait.fields)y.assignedValue&&dt(y.assignedValue)&&h.push(y.assignedValue.type);f=go({requiredTraits:h,negativeTraits:[],env:t}),t=_o({dynType:f,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${I.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${A(g)}`})}else if(s.trait){let g=[];for(let h of s.trait.fields)h.assignedValue&&dt(h.assignedValue)&&g.push(h.assignedValue.type);f=go({requiredTraits:g,negativeTraits:[],env:t}),t=_o({dynType:f,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${I.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${A(s)}`});let _=[];if(hn(s)){let g=s.fields[0].type;(D(g)||Ne(g))&&_.push(...g.negativeTraits.map(h=>h.traitType)??[])}for(let{traitType:g}of f.requiredTraits)for(let h of _)if(W({type:g,env:t},{type:h,env:t}))throw m({token:e.token,errorMessage:`Required trait ${A(g)} is in the negative traits list and cannot be used.`});for(let{traitType:g}of f.requiredTraits)if(!p.has(g))if(hn(s)&&(D(s.fields[0].type)||Ne(s.fields[0].type))){let h=s.fields[0].type,y=!1,v=h.requiredTraits.map(E=>E.traitType);for(let E of v)if(W({type:g,env:t},{type:E,env:t})){let $=[];for(let L=0;L<g.fields.length;L++){let b=g.fields[L],O=E.fields.findIndex(N=>N.label===b.label);O===-1?$.push(void 0):$.push(E.fields[O].assignedValue)}let C=_i(g,$);c.push(C),u.push(C.type),p.add(g),y=!0;break}if(!y)throw m({token:e.token,errorMessage:`Required trait ${A(g)} not found in SomeType's requiredTraits.`})}else{let h=hn(s)?s.fields[0].type:s;if(h.trait){let y=!1;for(let v of h.trait.fields)if(v.assignedValue&&dt(v.assignedValue)&&W({type:g,env:t},{type:v.assignedValue.type,env:t})){c.push(v.assignedValue),u.push(v.assignedValue.type),p.add(g),y=!0;break}if(!y)throw m({token:e.token,errorMessage:`Required trait ${A(g)} is not implemented by type ${A(s)}.`})}else throw m({token:e.token,errorMessage:`Cannot find trait ${A(g)} for value type ${A(s)}.`})}let d=[];for(let{traitType:g}of f.requiredTraits){let h=u.findIndex(y=>W({type:g,env:t},{type:y,env:t}));if(h===-1)throw m({token:e.token,errorMessage:`No trait value found for expected trait type ${A(g)}.`});d.push(c[h])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallTraitValues:d},Pe(e,!0),e}function S_(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;ao(a)?i="F32":so(a)&&(i="F64")}let o=Bt(i,r);return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function V_(e,t,n){if(e.token.type==="integer"){let r=e.token.value.replace(/_/g,""),i=10;r.match(/^0x/i)?(i=16,r=r.slice(2)):r.match(/^0b/i)?(i=2,r=r.slice(2)):r.match(/^0o/i)&&(i=8,r=r.slice(2));let o="ComptimeInt";if(n.expectedType){let u=n.expectedType.type;Qi(u)?o="Usize":Zi(u)?o="Isize":Dn(u)?o="U8":Ji(u)?o="I8":eo(u)?o="U16":to(u)?o="I16":no(u)?o="U32":ro(u)?o="I32":io(u)?o="U64":oo(u)&&(o="I64")}let a=o==="U64"||o==="I64"||o==="Usize"||o==="Isize",s;a||o==="ComptimeInt"?i===16?s=BigInt("0x"+r):i===8?s=BigInt("0o"+r):i===2?s=BigInt("0b"+r):s=BigInt(r):s=parseInt(r,i);let l=Bt(o,s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function D_(e,t){if(e.token.type==="string"){let n=en(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function Sy({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){let a=e,s=e,l;if(F(a)&&T(a,":",2)){let _=a.args[0];throw m({token:_.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=r.expectedType?.type,c;if(u){if(!ke(u))throw m({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
11012
11016
  ${A(u)}`});let _=u.fields[t];if(!_)throw m({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});c=_.type}let p=x({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(Rt(p,r),!p.$)throw m({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${k(s)}`});n=p.$.env;let f=p.$.value;if(f&&R(p.$.value))throw m({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
11013
- ${k(s)}`});return!c||!zr(c,n)?l=ut({type:p.$.type,expectedType:void 0,expr:void 0,env:n}):l=p.$.type,o.push(p),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},type:l,label:i.toString()},value:f,env:n}}function xy({args:e,env:t,context:n}){let r=[],i=[],o=[];for(let l=0;l<e.length;l++){let u=e[l],{type:c,value:p,env:f}=Iy({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(p),t=f}let a=ia(r),s=i.some(l=>!l)?void 0:Ho(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function S_({expr:e,env:t,context:n}){if(!T(e,I.tuple))throw m({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:Y,type:Y.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=xy({args:e.args,env:t,context:n});return t=o,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw m({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw m({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:i,type:r,pathCollection:[],runtimeArgExprsInOrder:a},Pe(e,!0),e}function Na({expr:e,env:t,context:n}){if(!T(e,":",2))throw m({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],i=e.args[1],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate rhs expression:
11014
- ${k(i)}`});t=o.$.env;let a=o.$.value;if(!R(a))throw m({token:i.token,errorMessage:`Expected type for rhs, got ${k(i)}`});let s=a.value;if(be(s)&&fe(s.length))throw m({token:i.token,errorMessage:`Array type with inferred length '_' is not allowed in type annotations.
11015
- Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});sr(s,o.token);let l=!1,u=!1;if(F(r)&&T(r,I.comptime)){if(l=!0,r.args.length!==1)throw m({token:r.token,errorMessage:`Expected one argument for "comptime" , got ${r.args.length}`});r=r.args[0]}if(F(r)&&T(r,I.given)){if(r.args.length!==1)throw m({token:r.token,errorMessage:`Expected exactly one argument for "given", got ${r.args.length}`});u=!0,l=!0,r=r.args[0]}if(l=l||n.forceCompileTimeBindings===!0,!l&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.type.return.isCompileTimeOnly)throw m({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!We(r))throw m({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(Yn(s,t)&&!l)throw m({token:r.token,errorMessage:`Expected "comptime" for compile-time known value binding:
11016
- ${A(s)}`});if(jn(s,t)&&l)throw m({token:r.token,errorMessage:`Unexpected "comptime" for ${A(s)} which can only be used at runtime.`});let c=r.token.value;if(!l&&H(s)&&dn(s))throw m({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
11017
+ ${k(s)}`});return!c||!zr(c,n)?l=ut({type:p.$.type,expectedType:void 0,expr:void 0,env:n}):l=p.$.type,o.push(p),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},type:l,label:i.toString()},value:f,env:n}}function Vy({args:e,env:t,context:n}){let r=[],i=[],o=[];for(let l=0;l<e.length;l++){let u=e[l],{type:c,value:p,env:f}=Sy({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(p),t=f}let a=ia(r),s=i.some(l=>!l)?void 0:qo(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function M_({expr:e,env:t,context:n}){if(!T(e,I.tuple))throw m({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:Y,type:Y.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=Vy({args:e.args,env:t,context:n});return t=o,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw m({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw m({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:i,type:r,pathCollection:[],runtimeArgExprsInOrder:a},Pe(e,!0),e}function Va({expr:e,env:t,context:n}){if(!T(e,":",2))throw m({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],i=e.args[1],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate rhs expression:
11018
+ ${k(i)}`});t=o.$.env;let a=o.$.value;if(!R(a))throw m({token:i.token,errorMessage:`Expected type for rhs, got ${k(i)}`});let s=a.value;if(be(s)&&_e(s.length))throw m({token:i.token,errorMessage:`Array type with inferred length '_' is not allowed in type annotations.
11019
+ Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});lr(s,o.token);let l=!1,u=!1;if(F(r)&&T(r,I.comptime)){if(l=!0,r.args.length!==1)throw m({token:r.token,errorMessage:`Expected one argument for "comptime" , got ${r.args.length}`});r=r.args[0]}if(F(r)&&T(r,I.given)){if(r.args.length!==1)throw m({token:r.token,errorMessage:`Expected exactly one argument for "given", got ${r.args.length}`});u=!0,l=!0,r=r.args[0]}if(l=l||n.forceCompileTimeBindings===!0,!l&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.type.return.isCompileTimeOnly)throw m({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!qe(r))throw m({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(Yn(s,t)&&!l)throw m({token:r.token,errorMessage:`Expected "comptime" for compile-time known value binding:
11020
+ ${A(s)}`});if(jn(s,t)&&l)throw m({token:r.token,errorMessage:`Unexpected "comptime" for ${A(s)} which can only be used at runtime.`});let c=r.token.value;if(!l&&q(s)&&dn(s))throw m({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
11017
11021
  ${A(s)}
11018
11022
 
11019
11023
  Generic functions must be compile-time known to enable monomorphization. Consider using:
11020
- comptime(${c}) : ${A(s)}`});let{env:p}=_e({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[q(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Te(s),isImplicit:u}});return t=p,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:Y.type,value:Y,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function Sa({expr:e,env:t,context:n,throwErrorOnUndefined:r}){let i=e.token.value;if(i==="Type"){let o=J(et());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Module"){let o=J(an(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Trait"){let o=J(an(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="unit"){let o=J(Rn());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_int"){let o=J($r());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_float"){let o=J(di());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_string"){let o=J(Dt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="bool"){let o=J(Xe());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="usize"){let o=J(yt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="isize"){let o=J(mi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u8"){let o=J(yi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i8"){let o=J(gi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u16"){let o=J(hi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i16"){let o=J(vi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u32"){let o=J(Ei());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i32"){let o=J(Cr());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u64"){let o=J(Ti());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i64"){let o=J($i());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f32"){let o=J(Ci());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f64"){let o=J(br());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="char"){let o=J(zl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="short"){let o=J(Bl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ushort"){let o=J(Gl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="int"){let o=J(Wl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="uint"){let o=J(Hl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="long"){let o=J(ql());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ulong"){let o=J(Yl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="longlong"){let o=J(jl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ulonglong"){let o=J(Kl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="longdouble"){let o=J(Xl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="void"){let o=J(Ql());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Expr"){let o=J(tn());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let o=J(n.SelfType);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else{let o=j(t,i);if(o.length){let a=o[o.length-1];if(!a.initializedAtToken&&r&&!H(a.type)&&!R(a.value?.[0]))throw m({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let s=a.type.isExtern==="c"&&fe(a.value?.[0])&&!(H(a.type)||He(a.type))?void 0:a.value?.[0];if(e.$={env:t,type:a.type,value:s,originType:a.type,variableName:a.name,pathCollection:[[a.name]],sourceVariable:a},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;a.frameLevel<l&&Bi(a.name,a.frameLevel,"own",e.token,n)}if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;a.frameLevel<l&&Bi(a.name,a.frameLevel,"own",e.token,n)}return e}else throw m({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function cl(e,t){let n=Il(t),r=`Right-hand side contains "${n}" from function.`;throw F(e)&&T(e,I.cond)?r=`Cannot assign "cond" expression to variable when all cases contain "${n}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:F(e)&&T(e,I.match)?r=`Cannot assign "match" expression to variable when all cases contain "${n}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:F(e)&&T(e,I.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),m({token:e.token,errorMessage:r})}function Ny(e,t){if(be(e)&&fe(e.length)){let n=e.length;if(n.variableName){let r=j(t,n.variableName);if(r.length>0){let i=r[r.length-1];if(i.value?.[0]&&!fe(i.value[0]))return Qn(e.childType,i.value[0])}}}return e}function V_({expr:e,env:t,context:n}){if(!T(e,"=",2))throw m({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(U(r)||F(r)&&T(r,":",2)){let o;if(U(r)){let y=Sa({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!y.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${k(r)}`});t=y.$.env,r=y,o=r.token.value}else{let{expr:y,variableExpr:v,variableName:E}=Na({expr:r,env:t,context:{...n}});y.$?.env&&(t=y.$?.env),r=v,o=E}let a=j(t,o);if(!a.length)throw m({token:r.token,errorMessage:`Variable ${o} not found in the environment`});let s=a[a.length-1];if(!s.isReassignable)throw m({token:r.token,errorMessage:`Cannot reassign "${o}".
11021
- You can mutate fields (e.g., ${o}.field = value) but cannot reassign itself.`});if(i=x({expr:i,env:t,context:{...n,expectedType:{type:s.type,env:t},isInsideGivenHandler:s.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${k(i)}`});t=i.$.env,Wr(i,t),Fr(i),Rt(i,n),t=i.$.env,ct(i.$?.controlFlow)&&cl(i,i.$.controlFlow);let l=i.$?.type;if(!l)try{let{expr:y,type:v,env:E}=gr({expr:i,type:s.type,env:t,context:{...n}});i=y,l=v,t=E}catch(y){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${k(i)}
11022
- ${y}`})}if(s.isCompileTimeOnly||(l=ut({type:l,expectedType:s.type,expr:i,env:t})),!W({type:s.type,env:t},{type:l,env:t}))if(ki(s.type))try{let{expr:y,type:v,env:E}=gr({expr:i,type:s.type,env:t,context:{...n}});if(W({type:s.type,env:E},{type:v,env:E})){i=y,l=v,t=E;let $=Ny(s.type,t);t=Ue(t,s,{...s,type:$})}else throw m({token:r.token,errorMessage:`Incompatible types:
11024
+ comptime(${c}) : ${A(s)}`});let{env:p}=fe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[H(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Te(s),isImplicit:u}});return t=p,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:Y.type,value:Y,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function Da({expr:e,env:t,context:n,throwErrorOnUndefined:r}){let i=e.token.value;if(i==="Type"){let o=Q(Je());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Module"){let o=Q(an(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Trait"){let o=Q(an(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="unit"){let o=Q(Rn());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_int"){let o=Q($r());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_float"){let o=Q(di());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_string"){let o=Q(Mt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="bool"){let o=Q(Xe());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="usize"){let o=Q(yt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="isize"){let o=Q(mi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u8"){let o=Q(yi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i8"){let o=Q(gi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u16"){let o=Q(hi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i16"){let o=Q(vi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u32"){let o=Q(Ei());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i32"){let o=Q(Cr());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u64"){let o=Q(Ti());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i64"){let o=Q($i());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f32"){let o=Q(Ci());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f64"){let o=Q(br());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="char"){let o=Q(Bl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="short"){let o=Q(Gl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ushort"){let o=Q(Wl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="int"){let o=Q(ql());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="uint"){let o=Q(Hl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="long"){let o=Q(Yl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ulong"){let o=Q(jl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="longlong"){let o=Q(Kl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ulonglong"){let o=Q(Xl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="longdouble"){let o=Q(Ql());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="void"){let o=Q(Zl());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Expr"){let o=Q(tn());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let o=Q(n.SelfType);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else{let o=j(t,i);if(o.length){let a=o[o.length-1];if(!a.initializedAtToken&&r&&!q(a.type)&&!R(a.value?.[0]))throw m({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let s=a.type.isExtern==="c"&&_e(a.value?.[0])&&!(q(a.type)||We(a.type))?void 0:a.value?.[0];if(e.$={env:t,type:a.type,value:s,originType:a.type,variableName:a.name,pathCollection:[[a.name]],sourceVariable:a},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;a.frameLevel<l&&Bi(a.name,a.frameLevel,"own",e.token,n)}if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;a.frameLevel<l&&Bi(a.name,a.frameLevel,"own",e.token,n)}return e}else throw m({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function pl(e,t){let n=xl(t),r=`Right-hand side contains "${n}" from function.`;throw F(e)&&T(e,I.cond)?r=`Cannot assign "cond" expression to variable when all cases contain "${n}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:F(e)&&T(e,I.match)?r=`Cannot assign "match" expression to variable when all cases contain "${n}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:F(e)&&T(e,I.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),m({token:e.token,errorMessage:r})}function Dy(e,t){if(be(e)&&_e(e.length)){let n=e.length;if(n.variableName){let r=j(t,n.variableName);if(r.length>0){let i=r[r.length-1];if(i.value?.[0]&&!_e(i.value[0]))return Qn(e.childType,i.value[0])}}}return e}function O_({expr:e,env:t,context:n}){if(!T(e,"=",2))throw m({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(U(r)||F(r)&&T(r,":",2)){let o;if(U(r)){let y=Da({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!y.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${k(r)}`});t=y.$.env,r=y,o=r.token.value}else{let{expr:y,variableExpr:v,variableName:E}=Va({expr:r,env:t,context:{...n}});y.$?.env&&(t=y.$?.env),r=v,o=E}let a=j(t,o);if(!a.length)throw m({token:r.token,errorMessage:`Variable ${o} not found in the environment`});let s=a[a.length-1];if(!s.isReassignable)throw m({token:r.token,errorMessage:`Cannot reassign "${o}".
11025
+ You can mutate fields (e.g., ${o}.field = value) but cannot reassign itself.`});if(i=x({expr:i,env:t,context:{...n,expectedType:{type:s.type,env:t},isInsideGivenHandler:s.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${k(i)}`});t=i.$.env,Wr(i,t),Fr(i),Rt(i,n),t=i.$.env,ct(i.$?.controlFlow)&&pl(i,i.$.controlFlow);let l=i.$?.type;if(!l)try{let{expr:y,type:v,env:E}=gr({expr:i,type:s.type,env:t,context:{...n}});i=y,l=v,t=E}catch(y){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${k(i)}
11026
+ ${y}`})}if(s.isCompileTimeOnly||(l=ut({type:l,expectedType:s.type,expr:i,env:t})),!W({type:s.type,env:t},{type:l,env:t}))if(ki(s.type))try{let{expr:y,type:v,env:E}=gr({expr:i,type:s.type,env:t,context:{...n}});if(W({type:s.type,env:E},{type:v,env:E})){i=y,l=v,t=E;let $=Dy(s.type,t);t=ze(t,s,{...s,type:$})}else throw m({token:r.token,errorMessage:`Incompatible types:
11023
11027
  - Expected: ${A(s.type)}
11024
11028
  - Given : ${A(l)}`})}catch{throw m({token:r.token,errorMessage:`Incompatible types:
11025
11029
  - Expected: ${A(s.type)}
11026
11030
  - Given : ${A(l)}`})}else throw m({token:r.token,errorMessage:`Incompatible types:
11027
11031
  - Expected: ${A(s.type)}
11028
- - Given : ${A(l)}`});let u=j(t,o),c=u[u.length-1],p=i.$?.value;R(p)&&!p.value.typeName?(p.value!==n.SelfType&&(p.value.typeName=o),He(c.type)&&!c.type.baseType&&(c.type.baseType=p.value)):ie(p)&&!p.funcName?(p.funcName=o,p.funcId+=`_${r.token.value}`):(ft(p)||mt(p))&&!p.type.typeName&&p.type!==n.SelfType&&(p.type.typeName=o);let f=c.type;ye(f)&&ye(l)&&f.selectedVariantName!==l.selectedVariantName&&(f={...f,selectedVariantName:l.selectedVariantName}),M(f)&&M(l)&&l.resolvedConcreteType&&(f={...f,resolvedConcreteType:l.resolvedConcreteType});let _=!1,d=s.isOwningTheSameRcValueAs;if(s.initializedAtToken){if(M(f))throw nt([{token:r.token,errorMessage:`Cannot reassign variable "${o}" of type Impl(...).
11032
+ - Given : ${A(l)}`});let u=j(t,o),c=u[u.length-1],p=i.$?.value;R(p)&&!p.value.typeName?(p.value!==n.SelfType&&(p.value.typeName=o),We(c.type)&&!c.type.baseType&&(c.type.baseType=p.value)):ie(p)&&!p.funcName?(p.funcName=o,p.funcId+=`_${r.token.value}`):(ft(p)||dt(p))&&!p.type.typeName&&p.type!==n.SelfType&&(p.type.typeName=o);let f=c.type;ye(f)&&ye(l)&&f.selectedVariantName!==l.selectedVariantName&&(f={...f,selectedVariantName:l.selectedVariantName}),D(f)&&D(l)&&l.resolvedConcreteType&&(f={...f,resolvedConcreteType:l.resolvedConcreteType});let _=!1,d=s.isOwningTheSameRcValueAs;if(s.initializedAtToken){if(D(f))throw nt([{token:r.token,errorMessage:`Cannot reassign variable "${o}" of type Impl(...).
11029
11033
  Impl(...) uses static dispatch and the concrete type is fixed at first assignment.
11030
- Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:s.initializedAtToken??s.token,errorMessage:"First assigned here:"}]);if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let C=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<C&&Bi(s.name,s.frameLevel,"own",r.token,n)}let y=s.isCompileTimeOnly&&p?Xt(p):void 0,v=Gr(t.modulePath,o),E=vo(i,t,t.modulePath),$=E;E?.consumedAtToken&&($=void 0),t=Ue(t,s,{...s,id:v,value:y?[y]:void 0,type:f,isOwningTheRcValue:Te(f),isOwningTheSameRcValueAs:$}),_=!0}else{if(n.isEvaluatingLoopBody&&s.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw nt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:s.token,errorMessage:"Defined here:"}]);if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&s.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw nt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:s.token,errorMessage:"Defined here:"}]);let y=s.isCompileTimeOnly&&p?Xt(p):void 0,v=vo(i,t,t.modulePath),E=v;v?.consumedAtToken&&(E=void 0),t=Ue(t,s,{...s,initializedAtToken:r.token,value:y?[y]:void 0,type:f,isOwningTheRcValue:Te(f),isOwningTheSameRcValueAs:E})}let g=j(t,o),h=g[g.length-1];return r.$={env:t,type:h.type,value:h.isCompileTimeOnly?p:void 0,pathCollection:[[o]]},_?(e.$={env:t,value:s.value?.[0],type:s.type,pathCollection:[],isCompileTimeOnlyAssignment:s.isCompileTimeOnly},Pe(e,!0,d?.frameLevel===t.frames.length-1?d:void 0)):e.$={env:t,value:Y,type:Y.type,pathCollection:[],isCompileTimeOnlyAssignment:s.isCompileTimeOnly},e}else{let o=x({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${k(r)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&o.$.pathCollection){for(let f of o.$.pathCollection)if(f.length>0){let _=f[0];if(typeof _=="string"){let d=j(t,_);if(d.length>0){let g=d[d.length-1];Bi(_,g.frameLevel,"write",r.token,n)}}}}let a=o.$.type;if(i=x({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${k(i)}`});t=i.$.env,Wr(i,t),Fr(i),Rt(i,n),t=i.$.env;let s=i.$?.type;if(!s)try{let{expr:f,type:_,env:d}=gr({expr:i,type:a,env:t,context:{...n}});i=f,s=_,t=d}catch(f){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${k(i)}
11034
+ Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:s.initializedAtToken??s.token,errorMessage:"First assigned here:"}]);if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let C=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<C&&Bi(s.name,s.frameLevel,"own",r.token,n)}let y=s.isCompileTimeOnly&&p?Xt(p):void 0,v=Gr(t.modulePath,o),E=vo(i,t,t.modulePath),$=E;E?.consumedAtToken&&($=void 0),t=ze(t,s,{...s,id:v,value:y?[y]:void 0,type:f,isOwningTheRcValue:Te(f),isOwningTheSameRcValueAs:$}),_=!0}else{if(n.isEvaluatingLoopBody&&s.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw nt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:s.token,errorMessage:"Defined here:"}]);if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&s.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw nt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:s.token,errorMessage:"Defined here:"}]);let y=s.isCompileTimeOnly&&p?Xt(p):void 0,v=vo(i,t,t.modulePath),E=v;v?.consumedAtToken&&(E=void 0),t=ze(t,s,{...s,initializedAtToken:r.token,value:y?[y]:void 0,type:f,isOwningTheRcValue:Te(f),isOwningTheSameRcValueAs:E})}let g=j(t,o),h=g[g.length-1];return r.$={env:t,type:h.type,value:h.isCompileTimeOnly?p:void 0,pathCollection:[[o]]},_?(e.$={env:t,value:s.value?.[0],type:s.type,pathCollection:[],isCompileTimeOnlyAssignment:s.isCompileTimeOnly},Pe(e,!0,d?.frameLevel===t.frames.length-1?d:void 0)):e.$={env:t,value:Y,type:Y.type,pathCollection:[],isCompileTimeOnlyAssignment:s.isCompileTimeOnly},e}else{let o=x({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${k(r)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&o.$.pathCollection){for(let f of o.$.pathCollection)if(f.length>0){let _=f[0];if(typeof _=="string"){let d=j(t,_);if(d.length>0){let g=d[d.length-1];Bi(_,g.frameLevel,"write",r.token,n)}}}}let a=o.$.type;if(i=x({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${k(i)}`});t=i.$.env,Wr(i,t),Fr(i),Rt(i,n),t=i.$.env;let s=i.$?.type;if(!s)try{let{expr:f,type:_,env:d}=gr({expr:i,type:a,env:t,context:{...n}});i=f,s=_,t=d}catch(f){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${k(i)}
11031
11035
  ${f}`})}if(!W({type:a,env:t},{type:s,env:t}))throw m({token:r.token,errorMessage:`Incompatible types:
11032
11036
  - Expected: ${A(a)}
11033
- - Given : ${A(s)}`});let l=!1;if(o.$.pathCollection&&o.$.pathCollection.length>0){let f=o.$.pathCollection[0];if(f&&f.length>=2){let _=f[0],d=f[1],g=j(t,_);if(g.length>0){let h=g[g.length-1];if(h.isCompileTimeOnly&&h.value?.[0]){let y=h.value[0];if(i.$?.value&&(l=!0),pn(y)||sn(y)){let v=h.type,E=v.fields.findIndex($=>$.label===d);if(E>=0&&i.$?.value)if(ue(h.type)&&h.type.isReferenceSemantics){let $=[...y.fields];$[E]=i.$.value;let C=In(h.type,$),L=er(t,b=>b.isCompileTimeOnly&&b.value?.[0]===y);for(let b of L)t=Ue(t,b,{...b,value:[C]})}else{let $=[...y.fields];$[E]=i.$.value;let C;pn(y)?C=In(v,$):C=Ho(v,$),t=Ue(t,h,{...h,value:[C]})}}else if(Ln(y)){let v=parseInt(d,10);if(!isNaN(v)&&v>=0&&v<y.elements.length&&i.$?.value){let E=[...y.elements];E[v]=i.$.value;let $=h.type,C=Tr($,E);t=Ue(t,h,{...h,value:[C]})}}else if(xt(y)){let v=h.type,E=v.variants.find($=>$.name===y.variantName);if(E){let $=(E.fields??[]).findIndex(C=>C.label===d);if($>=0&&i.$?.value){let C=[...y.fields];C[$]=i.$.value;let L=Pr(v,y.variantName,C);t=Ue(t,h,{...h,value:[L]})}}}}}}}let u=o.$.ptrTargetValue,c=o.$.ptrTargetIndex??0;if(u&&i.$?.value){let f=u[0];Ln(f)?f.elements[c]=i.$.value:u[0]=i.$.value,l=!0}let p=o.$.arrayElementRef;return p&&i.$?.value&&(p.arrayValue.elements[p.index]=i.$.value,l=!0),!l&&o.$?.value!==void 0&&i.$?.value!==void 0&&(l=!0),e.$={env:t,value:o.$.value,type:o.$.type,pathCollection:[],isCompileTimeOnlyAssignment:l},l||Pe(e,!0),e}}function D_({expr:e,env:t,context:n}){if(!T(e,I.c_include))throw m({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&U(e.args[0])){let a=e.args[0];i=e.args.slice(1);let s=x({expr:a,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:a.token,errorMessage:`Failed to evaluate C header file argument: ${k(a)}`});t=s.$.env;let l=s.$.value;if(!qe(l))throw m({token:a.token,errorMessage:`Expected string for C header file argument, got ${k(a)}`});r=l.value}if(!r)throw m({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
11037
+ - Given : ${A(s)}`});let l=!1;if(o.$.pathCollection&&o.$.pathCollection.length>0){let f=o.$.pathCollection[0];if(f&&f.length>=2){let _=f[0],d=f[1],g=j(t,_);if(g.length>0){let h=g[g.length-1];if(h.isCompileTimeOnly&&h.value?.[0]){let y=h.value[0];if(i.$?.value&&(l=!0),pn(y)||sn(y)){let v=h.type,E=v.fields.findIndex($=>$.label===d);if(E>=0&&i.$?.value)if(ue(h.type)&&h.type.isReferenceSemantics){let $=[...y.fields];$[E]=i.$.value;let C=In(h.type,$),L=tr(t,b=>b.isCompileTimeOnly&&b.value?.[0]===y);for(let b of L)t=ze(t,b,{...b,value:[C]})}else{let $=[...y.fields];$[E]=i.$.value;let C;pn(y)?C=In(v,$):C=qo(v,$),t=ze(t,h,{...h,value:[C]})}}else if(Ln(y)){let v=parseInt(d,10);if(!isNaN(v)&&v>=0&&v<y.elements.length&&i.$?.value){let E=[...y.elements];E[v]=i.$.value;let $=h.type,C=Tr($,E);t=ze(t,h,{...h,value:[C]})}}else if(Nt(y)){let v=h.type,E=v.variants.find($=>$.name===y.variantName);if(E){let $=(E.fields??[]).findIndex(C=>C.label===d);if($>=0&&i.$?.value){let C=[...y.fields];C[$]=i.$.value;let L=Pr(v,y.variantName,C);t=ze(t,h,{...h,value:[L]})}}}}}}}let u=o.$.ptrTargetValue,c=o.$.ptrTargetIndex??0;if(u&&i.$?.value){let f=u[0];Ln(f)?f.elements[c]=i.$.value:u[0]=i.$.value,l=!0}let p=o.$.arrayElementRef;return p&&i.$?.value&&(p.arrayValue.elements[p.index]=i.$.value,l=!0),!l&&o.$?.value!==void 0&&i.$?.value!==void 0&&(l=!0),e.$={env:t,value:o.$.value,type:o.$.type,pathCollection:[],isCompileTimeOnlyAssignment:l},l||Pe(e,!0),e}}function R_({expr:e,env:t,context:n}){if(!T(e,I.c_include))throw m({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&U(e.args[0])){let a=e.args[0];i=e.args.slice(1);let s=x({expr:a,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:a.token,errorMessage:`Failed to evaluate C header file argument: ${k(a)}`});t=s.$.env;let l=s.$.value;if(!He(l))throw m({token:a.token,errorMessage:`Expected string for C header file argument, got ${k(a)}`});r=l.value}if(!r)throw m({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
11034
11038
 
11035
- c_include "<stdio.h>" ...;`});let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=Mo({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(f=>f.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});He(l.type)||H(l.type)?l.type={...l.type,isExtern:"c",cInclude:r,externName:l.label}:l.type={...l.type,isExtern:"c",cInclude:r},o.push(l),t=u;let{env:p}=_e({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??q(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=p}return e.$={env:t,value:Y,type:Y.type,pathCollection:[]},e.func.$={env:t,value:Y,type:Y.type,pathCollection:[]},e}function M_({expr:e,env:t,context:n}){if(!T(e,I.cond))throw m({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw m({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let i=[];for(let c=0;c<r.length;c++){let p=r[c];if(!F(p)||!T(p,"=>",2))throw m({token:p.token,errorMessage:`Expected => for cond statement, got ${p.tag}`});let f=p.args[0],_=p.args[1],d=t;i.push({condExpr:f,caseBodyExpr:_,caseEnv:d})}let o=[];for(let c=0;c<i.length;c++){let{condExpr:p,caseBodyExpr:f,caseEnv:_}=i[c],d=U(p)?x({expr:p,env:_,context:{...n,expectedType:{type:Xe(),env:_}}}):gt({expr:p,env:_,context:{...n,expectedType:{type:Xe(),env:_}},variablesToAdd:[]});if(!d.$)throw m({token:d.token,errorMessage:`Failed to evaluate condition expression: ${k(d)}`});if(!cn(d.$.type))throw m({token:d.token,errorMessage:`Expected bool for cond statement, got ${k(d)} of type ${A(d.$.type)}`});let g=d.$.value,h=d.$.env;if(c===i.length-1&&!(Re(g)&&g.value===!0))throw m({token:d.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:d,caseBodyExpr:f,caseEnv:h,condValue:g}),Re(g)&&g.value===!0)break}let a=-1;for(let c=0;c<o.length;c++){let{condValue:p}=o[c];if(Re(p)&&p.value===!0&&o.slice(0,c).every(({condValue:f})=>Re(f)&&f.value===!1)){a=c;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:c,caseEnv:p,condExpr:f}=o[a];f.$&&(f.$.caseExecuted=!0);let _=gt({expr:c,env:p,context:{...n},variablesToAdd:[]});if(ct(_.$?.controlFlow))return e.$={env:_.$.env,type:n.expectedType?.type??_.$.type,value:_.$.value,pathCollection:_.$.pathCollection,controlFlow:_.$.controlFlow},e;{if(!_.$?.type)throw m({token:_.token,errorMessage:`Expected type for cond statement, got ${k(_)}`});s.push(_),l.push(_.$.value),u={type:_.$.type,env:_.$.env},t=_.$.env;let d;return d=l[0],e.$={env:t,type:n.expectedType?.type??u.type,value:d,pathCollection:[],variableName:_.$.variableName},_.$.variableName||Pe(e,!0),e}}else{let c=!1,p=[],f=[];for(let{condExpr:d,condValue:g,caseBodyExpr:h,caseEnv:y}of o){if(Re(g)&&g.value===!1)continue;d.$&&(d.$.caseExecuted=!0);let v=gt({expr:h,env:y,context:{...n,isExecuting:!1},variablesToAdd:[]});if(ct(v.$?.controlFlow)){p.push(v.$.controlFlow),Je(v.$.controlFlow,"return")&&f.push(v);continue}else c=!0;if(!v.$?.type)throw m({token:v.token,errorMessage:`Expected type for cond statement, got ${k(v)}`});if(s.push(v),l.push(v.$.value),n.expectedType&&!W(n.expectedType,{type:v.$.type,env:v.$.env}))throw m({token:v.token,errorMessage:`Incompatible type with expected type:
11039
+ c_include "<stdio.h>" ...;`});let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=Mo({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(f=>f.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});We(l.type)||q(l.type)?l.type={...l.type,isExtern:"c",cInclude:r,externName:l.label}:l.type={...l.type,isExtern:"c",cInclude:r},o.push(l),t=u;let{env:p}=fe({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??H(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=p}return e.$={env:t,value:Y,type:Y.type,pathCollection:[]},e.func.$={env:t,value:Y,type:Y.type,pathCollection:[]},e}function P_({expr:e,env:t,context:n}){if(!T(e,I.cond))throw m({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw m({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let i=[];for(let c=0;c<r.length;c++){let p=r[c];if(!F(p)||!T(p,"=>",2))throw m({token:p.token,errorMessage:`Expected => for cond statement, got ${p.tag}`});let f=p.args[0],_=p.args[1],d=t;i.push({condExpr:f,caseBodyExpr:_,caseEnv:d})}let o=[];for(let c=0;c<i.length;c++){let{condExpr:p,caseBodyExpr:f,caseEnv:_}=i[c],d=U(p)?x({expr:p,env:_,context:{...n,expectedType:{type:Xe(),env:_}}}):gt({expr:p,env:_,context:{...n,expectedType:{type:Xe(),env:_}},variablesToAdd:[]});if(!d.$)throw m({token:d.token,errorMessage:`Failed to evaluate condition expression: ${k(d)}`});if(!cn(d.$.type))throw m({token:d.token,errorMessage:`Expected bool for cond statement, got ${k(d)} of type ${A(d.$.type)}`});let g=d.$.value,h=d.$.env;if(c===i.length-1&&!(Re(g)&&g.value===!0))throw m({token:d.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:d,caseBodyExpr:f,caseEnv:h,condValue:g}),Re(g)&&g.value===!0)break}let a=-1;for(let c=0;c<o.length;c++){let{condValue:p}=o[c];if(Re(p)&&p.value===!0&&o.slice(0,c).every(({condValue:f})=>Re(f)&&f.value===!1)){a=c;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:c,caseEnv:p,condExpr:f}=o[a];f.$&&(f.$.caseExecuted=!0);let _=gt({expr:c,env:p,context:{...n},variablesToAdd:[]});if(ct(_.$?.controlFlow))return e.$={env:_.$.env,type:n.expectedType?.type??_.$.type,value:_.$.value,pathCollection:_.$.pathCollection,controlFlow:_.$.controlFlow},e;{if(!_.$?.type)throw m({token:_.token,errorMessage:`Expected type for cond statement, got ${k(_)}`});s.push(_),l.push(_.$.value),u={type:_.$.type,env:_.$.env},t=_.$.env;let d;return d=l[0],e.$={env:t,type:n.expectedType?.type??u.type,value:d,pathCollection:[],variableName:_.$.variableName},_.$.variableName||Pe(e,!0),e}}else{let c=!1,p=[],f=[];for(let{condExpr:d,condValue:g,caseBodyExpr:h,caseEnv:y}of o){if(Re(g)&&g.value===!1)continue;d.$&&(d.$.caseExecuted=!0);let v=gt({expr:h,env:y,context:{...n,isExecuting:!1},variablesToAdd:[]});if(ct(v.$?.controlFlow)){p.push(v.$.controlFlow),et(v.$.controlFlow,"return")&&f.push(v);continue}else c=!0;if(!v.$?.type)throw m({token:v.token,errorMessage:`Expected type for cond statement, got ${k(v)}`});if(s.push(v),l.push(v.$.value),n.expectedType&&!W(n.expectedType,{type:v.$.type,env:v.$.env}))throw m({token:v.token,errorMessage:`Incompatible type with expected type:
11036
11040
  - Expected: ${A(n.expectedType.type)}
11037
11041
  - Actual : ${A(v.$.type)}`});if(!ct(v.$.controlFlow)){if(!u)u={type:v.$.type,env:v.$.env};else if(!W({type:u.type,env:u.env},{type:v.$.type,env:v.$.env}))if(W({type:ut({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:v.$.type,env:v.$.env}))u={type:v.$.type,env:v.$.env};else throw m({token:v.token,errorMessage:`Incompatible types:
11038
11042
  - Previous: ${A(u.type)}
11039
- - Current : ${A(v.$.type)}`})}}let _=p.length>0?fo(p):void 0;if(c||!ct(_)){if(c&&!u)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:Y.type,env:t}),t=Li(t,s.filter(g=>g.$&&!Je(g.$.controlFlow,"return")&&!Je(g.$.controlFlow,"escape")));let d;return l.some(g=>g===void 0)?d=void 0:d=q(u.type,{env:t,context:n}),e.$={env:t,type:n.expectedType?.type??u.type,value:d,pathCollection:[]},Pe(e,!0),e}else{if(p.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(Je(_,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let d;if(f.length>0&&f[0].$?d=f[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?d=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(d=n.expectedType.type),!d)throw m({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:d,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&uo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?q(d,{env:t,context:n}):void 0,pathCollection:[],controlFlow:_}}else if(Je(_,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in cond use "escape", but not inside a function with an enclosing function.'});let d=n.enclosingFunctionReturnType;e.$={env:t,type:d,value:void 0,pathCollection:[],controlFlow:_}}else if(Je(_,"break")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:_}}else if(Je(_,"continue")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:_}}return e}}}function O_({expr:e,env:t,context:n}){let r=n.enclosingFunctionReturnType;if(!r)throw m({token:e.func.token,errorMessage:"`escape` can only be used inside a function that has an enclosing function."});if(!n.isInsideGivenHandler)throw m({token:e.func.token,errorMessage:"`escape` can only be used inside a `given` handler definition."});let i=e.args[0];if(!i)throw m({token:e.func.token,errorMessage:"`escape` requires exactly one argument."});let o=li({expr:i,env:t,context:{...n,expectedType:{type:r,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate the argument of `escape`."});if(!M(r)&&!W({type:r,env:t},{type:o.$.type,env:t}))throw m({token:i.token,errorMessage:`Incompatible type for \`escape\` argument:
11043
+ - Current : ${A(v.$.type)}`})}}let _=p.length>0?fo(p):void 0;if(c||!ct(_)){if(c&&!u)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:Y.type,env:t}),t=Li(t,s.filter(g=>g.$&&!et(g.$.controlFlow,"return")&&!et(g.$.controlFlow,"escape")));let d;return l.some(g=>g===void 0)?d=void 0:d=H(u.type,{env:t,context:n}),e.$={env:t,type:n.expectedType?.type??u.type,value:d,pathCollection:[]},Pe(e,!0),e}else{if(p.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(et(_,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let d;if(f.length>0&&f[0].$?d=f[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?d=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(d=n.expectedType.type),!d)throw m({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:d,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&uo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?H(d,{env:t,context:n}):void 0,pathCollection:[],controlFlow:_}}else if(et(_,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in cond use "escape", but not inside a function with an enclosing function.'});let d=n.enclosingFunctionReturnType;e.$={env:t,type:d,value:void 0,pathCollection:[],controlFlow:_}}else if(et(_,"break")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:_}}else if(et(_,"continue")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:_}}return e}}}function U_({expr:e,env:t,context:n}){let r=n.enclosingFunctionReturnType;if(!r)throw m({token:e.func.token,errorMessage:"`escape` can only be used inside a function that has an enclosing function."});if(!n.isInsideGivenHandler)throw m({token:e.func.token,errorMessage:"`escape` can only be used inside a `given` handler definition."});let i=e.args[0];if(!i)throw m({token:e.func.token,errorMessage:"`escape` requires exactly one argument."});let o=li({expr:i,env:t,context:{...n,expectedType:{type:r,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate the argument of `escape`."});if(!D(r)&&!W({type:r,env:t},{type:o.$.type,env:t}))throw m({token:i.token,errorMessage:`Incompatible type for \`escape\` argument:
11040
11044
  - Expected (enclosing function return type): ${A(r)}
11041
- - Got: ${A(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:wr("escape")},e}function R_({expr:e,env:t,context:n}){if(!T(e,I.extern))throw m({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",i=e.args;if(e.args[0]&&U(e.args[0])){let a=e.args[0];i=e.args.slice(1);let s=x({expr:a,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:a.token,errorMessage:`Failed to evaluate language argument: ${k(a)}`});t=s.$.env;let l=s.$.value;if(!qe(l))throw m({token:a.token,errorMessage:`Expected string for language argument, got ${k(a)}`});if(l.value.toLocaleLowerCase()==="yo")r="yo";else if(l.value.toLocaleLowerCase()==="c")r="c";else throw m({token:a.token,errorMessage:`Unsupported language "${l.value}" for extern, expected "c" or "yo"`})}let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=Mo({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(f=>f.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});He(l.type)||H(l.type)?l.type={...l.type,isExtern:r,externName:l.label,...l.label==="__yo_io_async"?{ioBuiltin:"io_async"}:{},...l.label==="__yo_io_await"?{ioBuiltin:"io_await"}:{},...l.label==="__yo_io_state"?{ioBuiltin:"io_state"}:{},...l.label==="__yo_io_spawn"?{ioBuiltin:"io_spawn"}:{}}:l.type={...l.type,isExtern:r},o.push(l),t=u;let{env:p}=_e({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??q(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=p}return e.$={env:t,value:Y,type:Y.type,pathCollection:[]},e.func.$={env:t,value:Y,type:Y.type,pathCollection:[]},e}import{existsSync as P_}from"fs";import rr from"path";function U_({expr:e,env:t,context:n,stdPath:r}){if(!T(e,I.import,1))throw m({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
11042
- ${k(e)}`});let i=e.args[0],a=x({expr:i,env:t,context:{...n}}).$?.value;if(!qe(a))throw m({token:i.token,errorMessage:`Expected comptime_string for module path, got:
11043
- ${k(i)}`});let s=a.value;if(s.endsWith("prelude.yo"))throw m({token:i.token,errorMessage:'Directly importing module with name "prelude.yo" is not allowed.'});if(s.startsWith("std/")?(s=rr.relative(rr.dirname(t.modulePath.replace(/^file:\/\//,"")),rr.resolve(r,s.replace("std/","./"))),s.startsWith(".")||(s="./"+s)):s==="std"&&(s=rr.relative(rr.dirname(t.modulePath.replace(/^file:\/\//,"")),rr.resolve(r,"./index.yo")),s.startsWith(".")||(s="./"+s)),!s.startsWith("."))throw m({token:i.token,errorMessage:`Only local relative path is supported for now:
11045
+ - Got: ${A(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:wr("escape")},e}function z_({expr:e,env:t,context:n}){if(!T(e,I.extern))throw m({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",i=e.args;if(e.args[0]&&U(e.args[0])){let a=e.args[0];i=e.args.slice(1);let s=x({expr:a,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:a.token,errorMessage:`Failed to evaluate language argument: ${k(a)}`});t=s.$.env;let l=s.$.value;if(!He(l))throw m({token:a.token,errorMessage:`Expected string for language argument, got ${k(a)}`});if(l.value.toLocaleLowerCase()==="yo")r="yo";else if(l.value.toLocaleLowerCase()==="c")r="c";else throw m({token:a.token,errorMessage:`Unsupported language "${l.value}" for extern, expected "c" or "yo"`})}let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=Mo({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(f=>f.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});We(l.type)||q(l.type)?l.type={...l.type,isExtern:r,externName:l.label,...l.label==="__yo_io_async"?{ioBuiltin:"io_async"}:{},...l.label==="__yo_io_await"?{ioBuiltin:"io_await"}:{},...l.label==="__yo_io_state"?{ioBuiltin:"io_state"}:{},...l.label==="__yo_io_spawn"?{ioBuiltin:"io_spawn"}:{}}:l.type={...l.type,isExtern:r},o.push(l),t=u;let{env:p}=fe({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??H(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=p}return e.$={env:t,value:Y,type:Y.type,pathCollection:[]},e.func.$={env:t,value:Y,type:Y.type,pathCollection:[]},e}import{existsSync as B_}from"fs";import ir from"path";function G_({expr:e,env:t,context:n,stdPath:r}){if(!T(e,I.import,1))throw m({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
11046
+ ${k(e)}`});let i=e.args[0],a=x({expr:i,env:t,context:{...n}}).$?.value;if(!He(a))throw m({token:i.token,errorMessage:`Expected comptime_string for module path, got:
11047
+ ${k(i)}`});let s=a.value;if(s.endsWith("prelude.yo"))throw m({token:i.token,errorMessage:'Directly importing module with name "prelude.yo" is not allowed.'});if(s.startsWith("std/")?(s=ir.relative(ir.dirname(t.modulePath.replace(/^file:\/\//,"")),ir.resolve(r,s.replace("std/","./"))),s.startsWith(".")||(s="./"+s)):s==="std"&&(s=ir.relative(ir.dirname(t.modulePath.replace(/^file:\/\//,"")),ir.resolve(r,"./index.yo")),s.startsWith(".")||(s="./"+s)),!s.startsWith("."))throw m({token:i.token,errorMessage:`Only local relative path is supported for now:
11044
11048
  ${k(e)}
11045
- ${s}`});let l="file://"+rr.resolve(rr.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!rr.extname(l)){let c=l.replace(/^file:\/\//,"")+".yo",p=rr.join(l.replace(/^file:\/\//,""),"index.yo"),f=P_(c),_=P_(p);if(f&&_)throw m({token:i.token,errorMessage:`Ambiguous import "${s}": both "${s}.yo" and "${s}/index.yo" exist. Use an explicit path to resolve the ambiguity.`});if(f)l="file://"+c;else if(_)l="file://"+p;else throw m({token:i.token,errorMessage:`Module not found: tried "${"file://"+c}" and "${p}"`})}if(!n.loadModule)throw m({token:i.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 m({token:i.token,errorMessage:`Failed to import module "${s}":
11046
- ${c instanceof rn||c instanceof Tn?c.toString():c instanceof Error?c.message:String(c)}`})}}function pl({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:i,lhs:o,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!ke(i),c=e.token.value;if(u&&c!=="_")throw m({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${c}"`});if(lt(i)&&t.length!==1)throw m({token:o.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw m({token:o.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let p={};for(let _=0;_<t.length;_++){let d=t[_],g=_,h,y=n[g],v,E,$,C;if(F(d)&&T(d,":",2)&&d.args[0].token.value==="..."&&d.args[1].token.value==="..."||U(d)&&d.token.value==="..."){if(lt(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with _, got ${A(i)}`});for(let L=0;L<n.length;L++){let b=n[L];if(p[b.label])continue;p[b.label]={label:b.label,variableName:b.label,type:b.type};let O=sn(r)||pn(r)||ft(r)||xt(r)?r.fields[L]:void 0;if(!O&&s)throw m({token:d.token,errorMessage:`Destructuring field "${b.label}" is not defined in compile-time only context.`});let{env:N}=_e({env:a,variable:{name:b.label,value:O?[Xt(O)]:void 0,type:b.type,isCompileTimeOnly:s,token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=N}d.$={env:a,type:i,value:r,pathCollection:[]};continue}else if(F(d)&&T(d,":",2)){let L=d.args[0],b=d.args[1];if(!U(L)||!We(L))throw m({token:L.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${k(L)}`});$=L;let O=$.token.value,N=n.findIndex(V=>V.label===O);if(N===-1)throw m({token:d.token,errorMessage:`Label "${O}" being destructured not found.`});g=N,y=n[g];let D;if((sn(r)||pn(r)||ft(r)||xt(r))&&(D=r.fields[g]),h=D,U(b)&&We(b))C=b,v=b.token.value,E=b.token;else throw m({token:b.token,errorMessage:`Nested destructuring is not supported:
11049
+ ${s}`});let l="file://"+ir.resolve(ir.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!ir.extname(l)){let c=l.replace(/^file:\/\//,"")+".yo",p=ir.join(l.replace(/^file:\/\//,""),"index.yo"),f=B_(c),_=B_(p);if(f&&_)throw m({token:i.token,errorMessage:`Ambiguous import "${s}": both "${s}.yo" and "${s}/index.yo" exist. Use an explicit path to resolve the ambiguity.`});if(f)l="file://"+c;else if(_)l="file://"+p;else throw m({token:i.token,errorMessage:`Module not found: tried "${"file://"+c}" and "${p}"`})}if(!n.loadModule)throw m({token:i.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 m({token:i.token,errorMessage:`Failed to import module "${s}":
11050
+ ${c instanceof rn||c instanceof Tn?c.toString():c instanceof Error?c.message:String(c)}`})}}function fl({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:i,lhs:o,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!ke(i),c=e.token.value;if(u&&c!=="_")throw m({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${c}"`});if(lt(i)&&t.length!==1)throw m({token:o.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw m({token:o.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let p={};for(let _=0;_<t.length;_++){let d=t[_],g=_,h,y=n[g],v,E,$,C;if(F(d)&&T(d,":",2)&&d.args[0].token.value==="..."&&d.args[1].token.value==="..."||U(d)&&d.token.value==="..."){if(lt(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with _, got ${A(i)}`});for(let L=0;L<n.length;L++){let b=n[L];if(p[b.label])continue;p[b.label]={label:b.label,variableName:b.label,type:b.type};let O=sn(r)||pn(r)||ft(r)||Nt(r)?r.fields[L]:void 0;if(!O&&s)throw m({token:d.token,errorMessage:`Destructuring field "${b.label}" is not defined in compile-time only context.`});let{env:N}=fe({env:a,variable:{name:b.label,value:O?[Xt(O)]:void 0,type:b.type,isCompileTimeOnly:s,token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=N}d.$={env:a,type:i,value:r,pathCollection:[]};continue}else if(F(d)&&T(d,":",2)){let L=d.args[0],b=d.args[1];if(!U(L)||!qe(L))throw m({token:L.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${k(L)}`});$=L;let O=$.token.value,N=n.findIndex(V=>V.label===O);if(N===-1)throw m({token:d.token,errorMessage:`Label "${O}" being destructured not found.`});g=N,y=n[g];let M;if((sn(r)||pn(r)||ft(r)||Nt(r))&&(M=r.fields[g]),h=M,U(b)&&qe(b))C=b,v=b.token.value,E=b.token;else throw m({token:b.token,errorMessage:`Nested destructuring is not supported:
11047
11051
 
11048
11052
  ${k(b)}`});if(p[y.label])throw m({token:d.token,errorMessage:`Label "${O}" being destructured already exists.`});p[y.label]={label:y.label,variableName:v,type:y.type}}else{if(F(d))throw m({token:d.token,errorMessage:`Nested destructuring is not supported:
11049
11053
 
11050
- ${k(d)}`});if(U(d)&&We(d)){if(lt(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${A(i)}`});if(p[y.label])throw m({token:d.token,errorMessage:`Label "${y.label}" being destructured already exists.`});p[y.label]={label:y.label,variableName:d.token.value,type:y.type},(sn(r)||pn(r)||xt(r)||ft(r))&&(h=r.fields[g]),v=d.token.value,E=d.token}else throw m({token:d.token,errorMessage:`Unsupported destructuring pattern for: ${k(d)}`})}if(v&&E){if(!h&&s)throw m({token:d.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:L}=_e({env:a,variable:{name:v,type:y.type,isCompileTimeOnly:s,value:h?[Xt(h)]:void 0,token:E,initializedAtToken:E,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=L,d.$={env:a,type:y.type,value:h,pathCollection:[]},$&&($.$={env:a,type:y.type,value:h,pathCollection:[]}),C&&(C.$={env:a,type:y.type,value:h,pathCollection:[]})}}let f=[];for(let _ in p){let d=p[_];f.push({label:d.label,type:d.type,variableName:d.variableName})}return{env:a,runtimeDestructurings:f}}function z_({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:i}){if(!t.$?.type)throw m({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${k(t)}`});let o=t.$.type,a=t.$.value;if((ue(o)||lt(o)||Fe(o))&&F(e))return pl({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:U(t)});if(ke(o)&&F(e)&&T(e,I.tuple))return pl({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:U(t)});if(ye(o)&&F(e)){let s=o.selectedVariantName;if(!s)throw m({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${A(o)}`});let l=o.variants.find(u=>u.name===s);if(!l)throw m({token:t.token,errorMessage:`Expected enum variant "${s}" to be defined, got ${A(o)}`});if(!l.fields)throw m({token:t.token,errorMessage:`Cannot destructure enum variant "${s}" without fields, got ${A(o)}`});return pl({lhsFunc:e.func,lhsFields:e.args,rhsFields:l.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:U(t)})}throw ke(o)||ue(o)||lt(o)||Fe(o)?m({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
11054
+ ${k(d)}`});if(U(d)&&qe(d)){if(lt(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${A(i)}`});if(p[y.label])throw m({token:d.token,errorMessage:`Label "${y.label}" being destructured already exists.`});p[y.label]={label:y.label,variableName:d.token.value,type:y.type},(sn(r)||pn(r)||Nt(r)||ft(r))&&(h=r.fields[g]),v=d.token.value,E=d.token}else throw m({token:d.token,errorMessage:`Unsupported destructuring pattern for: ${k(d)}`})}if(v&&E){if(!h&&s)throw m({token:d.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:L}=fe({env:a,variable:{name:v,type:y.type,isCompileTimeOnly:s,value:h?[Xt(h)]:void 0,token:E,initializedAtToken:E,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=L,d.$={env:a,type:y.type,value:h,pathCollection:[]},$&&($.$={env:a,type:y.type,value:h,pathCollection:[]}),C&&(C.$={env:a,type:y.type,value:h,pathCollection:[]})}}let f=[];for(let _ in p){let d=p[_];f.push({label:d.label,type:d.type,variableName:d.variableName})}return{env:a,runtimeDestructurings:f}}function W_({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:i}){if(!t.$?.type)throw m({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${k(t)}`});let o=t.$.type,a=t.$.value;if((ue(o)||lt(o)||Le(o))&&F(e))return fl({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:U(t)});if(ke(o)&&F(e)&&T(e,I.tuple))return fl({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:U(t)});if(ye(o)&&F(e)){let s=o.selectedVariantName;if(!s)throw m({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${A(o)}`});let l=o.variants.find(u=>u.name===s);if(!l)throw m({token:t.token,errorMessage:`Expected enum variant "${s}" to be defined, got ${A(o)}`});if(!l.fields)throw m({token:t.token,errorMessage:`Cannot destructure enum variant "${s}" without fields, got ${A(o)}`});return fl({lhsFunc:e.func,lhsFields:e.args,rhsFields:l.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:U(t)})}throw ke(o)||ue(o)||lt(o)||Le(o)?m({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
11051
11055
 
11052
11056
  ${k(e)}`}):m({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
11053
11057
 
11054
- ${A(o)}`})}function B_({expr:e,env:t,context:n}){if(!T(e,":=",2)&&!T(e,"::",2))throw m({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=T(e,"::")||n.forceCompileTimeBindings===!0,i=!T(e,"::");if(!r&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw m({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],a=e.args[1],s=!1,l=o;if(F(o)&&T(o,I.given)){if(o.args.length!==1)throw m({token:o.token,errorMessage:`Expected exactly one argument for "given", got ${o.args.length}`});s=!0,l=o.args[0]}if(F(l)&&T(l,":"))throw m({token:l.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
11055
- (${k(l)}) = ${k(a)}`});if(a=x({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),a.$?.env&&(t=a.$?.env),a.$?.type&&sr(a.$.type,a.token),ct(a.$?.controlFlow)&&cl(a,a.$.controlFlow),Fr(a),U(l)){if(Wr(a,t),Rt(a,{...n}),a.$?.env&&(t=a.$?.env),!We(l))throw m({token:l.token,errorMessage:`Invalid assignment to ${l.token.value}, expected identifier or operator`});let u=s||r,c=s?!1:i,p=a.$?.type;if(l.$?.type){try{let{expr:y,type:v,env:E}=gr({expr:a,type:l.$?.type,env:t,context:{...n}});a=y,p=v,t=E}catch(y){throw m({token:a.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${k(a)}
11058
+ ${A(o)}`})}function q_({expr:e,env:t,context:n}){if(!T(e,":=",2)&&!T(e,"::",2))throw m({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=T(e,"::")||n.forceCompileTimeBindings===!0,i=!T(e,"::");if(!r&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw m({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],a=e.args[1],s=!1,l=o;if(F(o)&&T(o,I.given)){if(o.args.length!==1)throw m({token:o.token,errorMessage:`Expected exactly one argument for "given", got ${o.args.length}`});s=!0,l=o.args[0]}if(F(l)&&T(l,":"))throw m({token:l.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
11059
+ (${k(l)}) = ${k(a)}`});if(a=x({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),a.$?.env&&(t=a.$?.env),a.$?.type&&lr(a.$.type,a.token),ct(a.$?.controlFlow)&&pl(a,a.$.controlFlow),Fr(a),U(l)){if(Wr(a,t),Rt(a,{...n}),a.$?.env&&(t=a.$?.env),!qe(l))throw m({token:l.token,errorMessage:`Invalid assignment to ${l.token.value}, expected identifier or operator`});let u=s||r,c=s?!1:i,p=a.$?.type;if(l.$?.type){try{let{expr:y,type:v,env:E}=gr({expr:a,type:l.$?.type,env:t,context:{...n}});a=y,p=v,t=E}catch(y){throw m({token:a.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${k(a)}
11056
11060
  ${y}`})}if(!W({type:l.$.type,env:t},{type:p,env:t}))throw m({token:l.token,errorMessage:`Incompatible types:
11057
11061
  - Defined: ${A(l.$.type)}
11058
11062
  - Given : ${A(p)}`})}else{if(!p)throw m({token:a.token,errorMessage:`Failed to evaluate, got ${k(a)}`});let y=p;c&&(y=ut({type:p,expectedType:void 0,expr:a,env:t})),l.$={...l.$,env:t,type:y,pathCollection:[]}}if(!u&&Yn(l.$.type,t))throw m({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
@@ -11060,57 +11064,57 @@ ${k(e)}
11060
11064
 
11061
11065
  Type:
11062
11066
  ${A(l.$.type)}`});if(u&&jn(l.$.type,t))throw m({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${A(l.$.type)}" which can only be used at the runtime:
11063
- ${k(e)}`});let f=a.$?.value;if(R(f)&&!f.value.typeName&&f.value!==n.SelfType?f.value.typeName=l.token.value:ie(f)&&!f.funcName?(f.funcName=l.token.value,f.funcId+=`_${l.token.value}`):(ft(f)||mt(f))&&!f.type.typeName&&f.type!==n.SelfType&&(f.type.typeName=l.token.value),!f&&u)throw m({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
11067
+ ${k(e)}`});let f=a.$?.value;if(R(f)&&!f.value.typeName&&f.value!==n.SelfType?f.value.typeName=l.token.value:ie(f)&&!f.funcName?(f.funcName=l.token.value,f.funcId+=`_${l.token.value}`):(ft(f)||dt(f))&&!f.type.typeName&&f.type!==n.SelfType&&(f.type.typeName=l.token.value),!f&&u)throw m({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
11064
11068
  Got runtime value. Please consider using ":=" instead of "::":
11065
- ${k(a)}`});l.$={...l.$,env:t,type:l.$.type,value:u?f?Xt(f):q(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let _=l.$.type;M(_)&&p&&M(p)&&p.resolvedConcreteType&&(_={..._,resolvedConcreteType:p.resolvedConcreteType},l.$.type=_);let d=vo(a,t,t.modulePath),g=d;d?.consumedAtToken&&(g=void 0);let{env:h}=_e({env:t,variable:{name:l.token.value,type:_,isCompileTimeOnly:u,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Te(_),isOwningTheSameRcValueAs:g,isReassignable:!s,isImplicit:s}});return t=h,l.$.env=t,s&&(o.$={env:t,value:Y,type:Y.type,pathCollection:[]}),e.$={env:t,value:Y,type:Y.type,pathCollection:[],isCompileTimeOnlyAssignment:u},e}else{let u=s||r,{env:c,runtimeDestructurings:p}=z_({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=c,e.$={env:t,value:Y,type:Y.type,pathCollection:[],runtimeDestructurings:p,isCompileTimeOnlyAssignment:u},e}}function Sy(e){return F(e)?T(e,"|",2):!1}function fl(e){if(!Sy(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...fl(n),...fl(r)]}function Vy(e){return vr(e)||Er(e)||Mn(e)||cn(e)||pt(e)||Ft(e)||$t(e)}function G_({expr:e,env:t,context:n}){if(!T(e,I.match))throw m({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw m({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=U(i)?x({expr:i,env:t,context:{...n,expectedType:void 0}}):gt({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw m({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${k(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(Ie(a)?(u=a.childType,l=a.tag):u=a,Vy(u))return Dy({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!ye(u))throw m({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?A(a):"unknown type"}`});let c=u,p=r.slice(1),f=[],_,d=new Set,g=!1,h=!1,y=[],v=[];for(let $=0;$<p.length;$++){let C=p[$],L=t;if(!F(C)||!T(C,"=>",2))throw m({token:C.token,errorMessage:`Expected ":" for match pattern, got ${k(C)}`});let b=C.args[0],O=C.args[1];if(F(b)&&T(b,".",1)||ht(b,"_")){if(h)throw m({token:b.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let N;if(F(b)){if(N=b.args[0],!U(N))throw m({token:b.token,errorMessage:`Expected identifier for enum variant, got ${k(N)}`})}else h=!0,N=b;let D=N.token.value,V=c.variants.find(de=>de.name===D);if(!V&&D!=="_")throw m({token:b.token,errorMessage:`Enum variant "${D}" not found in ${A(c)}`});if(V&&V.fields&&V.fields.length>0)throw m({token:b.token,errorMessage:`Enum variant "${D}" has ${V.fields.length} field(s) and must be destructured. Use .${D}(...) instead of .${D}`});if(d.add(D),D!=="_"&&xt(s)&&s.variantName!==D)continue;let z={...c,selectedVariantName:D==="_"?void 0:D};N.$={env:L,type:z,value:void 0,pathCollection:[]};let ee=z;l&&l==="Ptr"&&(ee=Xr(z));let ne=O;L=ze(L),b.$={env:L,type:ee,value:void 0,pathCollection:[],caseExecuted:!0};let G=gt({expr:ne,env:L,context:{...n,isExecuting:xt(s)&&s.variantName===D},variablesToAdd:[]});if(!G.$?.type)throw m({token:ne.token,errorMessage:`Expected type for match result expression, got ${k(ne)}`});let Z=rt(G.$.env,!0);if(L=Z,G.$={...G.$,env:Z},n.expectedType&&!W(n.expectedType,{type:G.$.type,env:G.$.env}))throw m({token:G.token,errorMessage:`Incompatible type with expected type:
11069
+ ${k(a)}`});l.$={...l.$,env:t,type:l.$.type,value:u?f?Xt(f):H(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let _=l.$.type;D(_)&&p&&D(p)&&p.resolvedConcreteType&&(_={..._,resolvedConcreteType:p.resolvedConcreteType},l.$.type=_);let d=vo(a,t,t.modulePath),g=d;d?.consumedAtToken&&(g=void 0);let{env:h}=fe({env:t,variable:{name:l.token.value,type:_,isCompileTimeOnly:u,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Te(_),isOwningTheSameRcValueAs:g,isReassignable:!s,isImplicit:s}});return t=h,l.$.env=t,s&&(o.$={env:t,value:Y,type:Y.type,pathCollection:[]}),e.$={env:t,value:Y,type:Y.type,pathCollection:[],isCompileTimeOnlyAssignment:u},e}else{let u=s||r,{env:c,runtimeDestructurings:p}=W_({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=c,e.$={env:t,value:Y,type:Y.type,pathCollection:[],runtimeDestructurings:p,isCompileTimeOnlyAssignment:u},e}}function My(e){return F(e)?T(e,"|",2):!1}function _l(e){if(!My(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[..._l(n),..._l(r)]}function Oy(e){return vr(e)||Er(e)||Mn(e)||cn(e)||pt(e)||Lt(e)||$t(e)}function H_({expr:e,env:t,context:n}){if(!T(e,I.match))throw m({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw m({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=U(i)?x({expr:i,env:t,context:{...n,expectedType:void 0}}):gt({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw m({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${k(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(Ie(a)?(u=a.childType,l=a.tag):u=a,Oy(u))return Ry({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!ye(u))throw m({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?A(a):"unknown type"}`});let c=u,p=r.slice(1),f=[],_,d=new Set,g=!1,h=!1,y=[],v=[];for(let $=0;$<p.length;$++){let C=p[$],L=t;if(!F(C)||!T(C,"=>",2))throw m({token:C.token,errorMessage:`Expected ":" for match pattern, got ${k(C)}`});let b=C.args[0],O=C.args[1];if(F(b)&&T(b,".",1)||ht(b,"_")){if(h)throw m({token:b.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let N;if(F(b)){if(N=b.args[0],!U(N))throw m({token:b.token,errorMessage:`Expected identifier for enum variant, got ${k(N)}`})}else h=!0,N=b;let M=N.token.value,V=c.variants.find(de=>de.name===M);if(!V&&M!=="_")throw m({token:b.token,errorMessage:`Enum variant "${M}" not found in ${A(c)}`});if(V&&V.fields&&V.fields.length>0)throw m({token:b.token,errorMessage:`Enum variant "${M}" has ${V.fields.length} field(s) and must be destructured. Use .${M}(...) instead of .${M}`});if(d.add(M),M!=="_"&&Nt(s)&&s.variantName!==M)continue;let z={...c,selectedVariantName:M==="_"?void 0:M};N.$={env:L,type:z,value:void 0,pathCollection:[]};let ee=z;l&&l==="Ptr"&&(ee=Xr(z));let ne=O;L=Ue(L),b.$={env:L,type:ee,value:void 0,pathCollection:[],caseExecuted:!0};let G=gt({expr:ne,env:L,context:{...n,isExecuting:Nt(s)&&s.variantName===M},variablesToAdd:[]});if(!G.$?.type)throw m({token:ne.token,errorMessage:`Expected type for match result expression, got ${k(ne)}`});let J=rt(G.$.env,!0);if(L=J,G.$={...G.$,env:J},n.expectedType&&!W(n.expectedType,{type:G.$.type,env:G.$.env}))throw m({token:G.token,errorMessage:`Incompatible type with expected type:
11066
11070
  - Expected: ${A(n.expectedType.type)}
11067
- - Actual : ${A(G.$.type)}`});if(s===void 0&&G.$&&(G.$.value=void 0),ct(G.$.controlFlow)?(y.push(G.$.controlFlow),Je(G.$.controlFlow,"return")&&v.push(G),s&&!fe(s)&&xt(s)?e.$={env:G.$.env,type:n.expectedType?.type??G.$.type,value:G.$.value,pathCollection:G.$.pathCollection,controlFlow:G.$.controlFlow}:s===void 0&&(e.$={env:G.$.env,type:n.expectedType?.type??G.$.type,value:void 0,pathCollection:G.$.pathCollection,controlFlow:G.$.controlFlow})):g=!0,L=G.$.env,f.push(G),n.expectedType&&!W(n.expectedType,{type:G.$.type,env:G.$.env}))throw m({token:G.token,errorMessage:`Incompatible type with expected type:
11071
+ - Actual : ${A(G.$.type)}`});if(s===void 0&&G.$&&(G.$.value=void 0),ct(G.$.controlFlow)?(y.push(G.$.controlFlow),et(G.$.controlFlow,"return")&&v.push(G),s&&!_e(s)&&Nt(s)?e.$={env:G.$.env,type:n.expectedType?.type??G.$.type,value:G.$.value,pathCollection:G.$.pathCollection,controlFlow:G.$.controlFlow}:s===void 0&&(e.$={env:G.$.env,type:n.expectedType?.type??G.$.type,value:void 0,pathCollection:G.$.pathCollection,controlFlow:G.$.controlFlow})):g=!0,L=G.$.env,f.push(G),n.expectedType&&!W(n.expectedType,{type:G.$.type,env:G.$.env}))throw m({token:G.token,errorMessage:`Incompatible type with expected type:
11068
11072
  - Expected: ${A(n.expectedType.type)}
11069
11073
  - Actual : ${A(G.$.type)}`});if(!ct(G.$.controlFlow)){if(!_)_={type:G.$?.type,env:L};else if(!W({type:_.type,env:L},{type:G.$?.type,env:t}))if(W({type:ut({type:_.type,expectedType:void 0,expr:void 0,env:_.env}),env:_.env},{type:G.$.type,env:L}))_={type:G.$.type,env:L};else throw m({token:G.token,errorMessage:`Incompatible types:
11070
11074
  - Previous: ${A(_.type)}
11071
- - Current : ${A(G.$.type)}`})}}else if(F(b)&&F(b.func)&&T(b.func,".",1)){if(h)throw m({token:b.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let N=b.func.args[0];if(!U(N))throw m({token:b.token,errorMessage:`Expected identifier for enum variant, got ${k(N)}`});let D=N.token.value,V=c.variants.find(he=>he.name===D);if(!V)throw m({token:b.token,errorMessage:`Enum variant "${D}" not found in ${A(c)}`});if(d.add(D),xt(s)&&s.variantName!==D)continue;let z=b.args;if(V.fields&&V.fields.length>0){if(!z.some($e=>F($e)&&T($e,":",2))&&z.length!==V.fields.length)throw m({token:b.token,errorMessage:`Variant "${D}" expects ${V.fields.length} parameters, got ${z.length}`})}else if(z.length>0)throw m({token:b.token,errorMessage:`Variant "${D}" has no fields, but destructuring parameters were provided`});let ee={...c,selectedVariantName:D};N.$={env:L,type:ee,value:void 0,pathCollection:[]};let ne=ee;if(l&&l==="Ptr"&&(ne=Xr(ee)),L=ze(L),V.fields&&V.fields.length>0){let he=new Set;for(let $e=0;$e<z.length;$e++){let B=z[$e];if(F(B)&&T(B,":",2)){let oe=B.args[0],ae=B.args[1];if(!U(oe))throw m({token:oe.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${k(oe)}`});let le=oe.token.value,Ce=V.fields.findIndex(re=>re.label===le);if(Ce===-1)throw m({token:oe.token,errorMessage:`Label "${le}" not found in variant "${D}". Available labels: ${V.fields.map(re=>re.label).join(", ")}`});if(he.has(le))throw m({token:oe.token,errorMessage:`Label "${le}" is already destructured`});he.add(le);let Me=V.fields[Ce],X=xt(s)&&!fe(s),Q=X?s.fields[Ce]:void 0;if(U(ae)){let re=ae.token.value;if(re!=="_"){let{env:ce}=_e({env:L,variable:{name:re,type:Me.type,isCompileTimeOnly:X,value:Q!==void 0?[Q]:void 0,token:ae.token,initializedAtToken:ae.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});L=ce}ae.$={env:L,type:Me.type,value:void 0,pathCollection:[]},oe.$={env:L,type:Me.type,value:void 0,pathCollection:[]}}else throw m({token:ae.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${k(ae)}`})}else if(U(B)){let oe=B.token.value,ae=V.fields[$e],le=xt(s)&&!fe(s),Ce=le?s.fields[$e]:void 0;if(oe!=="_"){let{env:Me}=_e({env:L,variable:{name:oe,type:ae.type,isCompileTimeOnly:le,value:Ce!==void 0?[Ce]:void 0,token:B.token,initializedAtToken:B.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});L=Me}B.$={env:L,type:ae.type,value:void 0,pathCollection:[]}}else throw m({token:B.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${k(B)}`})}}b.$={env:L,type:ne,value:void 0,pathCollection:[],caseExecuted:!0};let G=O,Z=gt({expr:G,env:L,context:{...n,isExecuting:xt(s)&&s.variantName===D},variablesToAdd:[]});if(!Z.$?.type)throw m({token:G.token,errorMessage:`Expected type for match result expression, got ${k(G)}`});let de=rt(Z.$.env,!0);if(L=de,Z.$={...Z.$,env:de},s===void 0&&Z.$&&(Z.$.value=void 0),ct(Z.$.controlFlow)?(y.push(Z.$.controlFlow),Je(Z.$.controlFlow,"return")&&v.push(Z),s&&!fe(s)&&xt(s)?e.$={env:Z.$.env,type:n.expectedType?.type??Z.$.type,value:Z.$.value,pathCollection:Z.$.pathCollection,controlFlow:Z.$.controlFlow}:s===void 0&&(e.$={env:Z.$.env,type:n.expectedType?.type??Z.$.type,value:void 0,pathCollection:Z.$.pathCollection,controlFlow:Z.$.controlFlow})):g=!0,L=Z.$.env,f.push(Z),!ct(Z.$.controlFlow)){if(!_)_={type:Z.$?.type,env:L};else if(!W({type:_.type,env:L},{type:Z.$?.type,env:t}))if(W({type:ut({type:_.type,expectedType:void 0,expr:void 0,env:_.env}),env:_.env},{type:Z.$.type,env:L}))_={type:Z.$.type,env:L};else throw m({token:Z.token,errorMessage:`Incompatible types:
11075
+ - Current : ${A(G.$.type)}`})}}else if(F(b)&&F(b.func)&&T(b.func,".",1)){if(h)throw m({token:b.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let N=b.func.args[0];if(!U(N))throw m({token:b.token,errorMessage:`Expected identifier for enum variant, got ${k(N)}`});let M=N.token.value,V=c.variants.find(he=>he.name===M);if(!V)throw m({token:b.token,errorMessage:`Enum variant "${M}" not found in ${A(c)}`});if(d.add(M),Nt(s)&&s.variantName!==M)continue;let z=b.args;if(V.fields&&V.fields.length>0){if(!z.some($e=>F($e)&&T($e,":",2))&&z.length!==V.fields.length)throw m({token:b.token,errorMessage:`Variant "${M}" expects ${V.fields.length} parameters, got ${z.length}`})}else if(z.length>0)throw m({token:b.token,errorMessage:`Variant "${M}" has no fields, but destructuring parameters were provided`});let ee={...c,selectedVariantName:M};N.$={env:L,type:ee,value:void 0,pathCollection:[]};let ne=ee;if(l&&l==="Ptr"&&(ne=Xr(ee)),L=Ue(L),V.fields&&V.fields.length>0){let he=new Set;for(let $e=0;$e<z.length;$e++){let B=z[$e];if(F(B)&&T(B,":",2)){let oe=B.args[0],se=B.args[1];if(!U(oe))throw m({token:oe.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${k(oe)}`});let le=oe.token.value,Ce=V.fields.findIndex(re=>re.label===le);if(Ce===-1)throw m({token:oe.token,errorMessage:`Label "${le}" not found in variant "${M}". Available labels: ${V.fields.map(re=>re.label).join(", ")}`});if(he.has(le))throw m({token:oe.token,errorMessage:`Label "${le}" is already destructured`});he.add(le);let Me=V.fields[Ce],X=Nt(s)&&!_e(s),Z=X?s.fields[Ce]:void 0;if(U(se)){let re=se.token.value;if(re!=="_"){let{env:ce}=fe({env:L,variable:{name:re,type:Me.type,isCompileTimeOnly:X,value:Z!==void 0?[Z]:void 0,token:se.token,initializedAtToken:se.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});L=ce}se.$={env:L,type:Me.type,value:void 0,pathCollection:[]},oe.$={env:L,type:Me.type,value:void 0,pathCollection:[]}}else throw m({token:se.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${k(se)}`})}else if(U(B)){let oe=B.token.value,se=V.fields[$e],le=Nt(s)&&!_e(s),Ce=le?s.fields[$e]:void 0;if(oe!=="_"){let{env:Me}=fe({env:L,variable:{name:oe,type:se.type,isCompileTimeOnly:le,value:Ce!==void 0?[Ce]:void 0,token:B.token,initializedAtToken:B.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});L=Me}B.$={env:L,type:se.type,value:void 0,pathCollection:[]}}else throw m({token:B.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${k(B)}`})}}b.$={env:L,type:ne,value:void 0,pathCollection:[],caseExecuted:!0};let G=O,J=gt({expr:G,env:L,context:{...n,isExecuting:Nt(s)&&s.variantName===M},variablesToAdd:[]});if(!J.$?.type)throw m({token:G.token,errorMessage:`Expected type for match result expression, got ${k(G)}`});let de=rt(J.$.env,!0);if(L=de,J.$={...J.$,env:de},s===void 0&&J.$&&(J.$.value=void 0),ct(J.$.controlFlow)?(y.push(J.$.controlFlow),et(J.$.controlFlow,"return")&&v.push(J),s&&!_e(s)&&Nt(s)?e.$={env:J.$.env,type:n.expectedType?.type??J.$.type,value:J.$.value,pathCollection:J.$.pathCollection,controlFlow:J.$.controlFlow}:s===void 0&&(e.$={env:J.$.env,type:n.expectedType?.type??J.$.type,value:void 0,pathCollection:J.$.pathCollection,controlFlow:J.$.controlFlow})):g=!0,L=J.$.env,f.push(J),!ct(J.$.controlFlow)){if(!_)_={type:J.$?.type,env:L};else if(!W({type:_.type,env:L},{type:J.$?.type,env:t}))if(W({type:ut({type:_.type,expectedType:void 0,expr:void 0,env:_.env}),env:_.env},{type:J.$.type,env:L}))_={type:J.$.type,env:L};else throw m({token:J.token,errorMessage:`Incompatible types:
11072
11076
  - Previous: ${A(_.type)}
11073
- - Current : ${A(Z.$.type)}`})}}else throw m({token:b.token,errorMessage:`Invalid pattern in match expression: ${k(b)}
11077
+ - Current : ${A(J.$.type)}`})}}else throw m({token:b.token,errorMessage:`Invalid pattern in match expression: ${k(b)}
11074
11078
  Supported patterns:
11075
11079
  - .VariantName (for variants without fields)
11076
11080
  - .VariantName(param1, param2, ...) (for variants with fields)
11077
11081
  - _ (wildcard pattern)`})}let E=y.length>0?fo(y):void 0;if(g||!ct(E)){if(g&&!_)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(_||(_={type:Y.type,env:t}),!d.has("_")){let L=c.variants.filter(b=>!d.has(b.name));if(L.length>0)throw m({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
11078
11082
 
11079
11083
  - ${L.map(b=>b.name).join(`
11080
- - `)}`})}let $=f.filter(L=>L.$&&!Je(L.$.controlFlow,"return")&&!Je(L.$.controlFlow,"escape")),C;xt(s)&&!fe(s)&&$.length===1&&$[0].$?(t=$[0].$.env,C=$[0].$.value):xt(s)&&$.length===1&&$[0].$?t=$[0].$.env:t=Li(t,$),e.$={env:t,type:n.expectedType?.type??_.type,value:s===void 0?void 0:C!==void 0?C:q(_.type,{env:t,context:n}),pathCollection:[]},Pe(e,!0)}else{if(y.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(Je(E,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let $;if(v.length>0&&v[0].$?$=v[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?$=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&($=n.expectedType.type),!$)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:$,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&uo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?q($,{env:t,context:n}):void 0,pathCollection:[],controlFlow:E}}else if(Je(E,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let $=n.enclosingFunctionReturnType;e.$={env:t,type:$,value:void 0,pathCollection:[],controlFlow:E}}else if(Je(E,"break")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:E}}else if(Je(E,"continue")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:E}}return e}return e}function Dy({expr:e,env:t,context:n,scrutineeExpr:r,scrutineeType:i,scrutineeValue:o}){let a=e.args.slice(1),s=[],l,u=new Set,c=!1,p=!1,f=[],_=[];for(let g=0;g<a.length;g++){let h=a[g],y=t;if(!F(h)||!T(h,"=>",2))throw m({token:h.token,errorMessage:`Expected "=>" for match pattern, got ${k(h)}`});let v=h.args[0],E=h.args[1];if(ht(v,"_")){if(p)throw m({token:v.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});p=!0,v.$={env:y,type:i,value:void 0,pathCollection:[],caseExecuted:!0},y=ze(y);let N=gt({expr:E,env:y,context:{...n,isExecuting:o!==void 0&&!fe(o)},variablesToAdd:[]});if(!N.$?.type)throw m({token:E.token,errorMessage:`Expected type for match result expression, got ${k(E)}`});let D=rt(N.$.env,!0);if(y=D,N.$={...N.$,env:D},n.expectedType&&!W(n.expectedType,{type:N.$.type,env:N.$.env}))throw m({token:N.token,errorMessage:`Incompatible type with expected type:
11084
+ - `)}`})}let $=f.filter(L=>L.$&&!et(L.$.controlFlow,"return")&&!et(L.$.controlFlow,"escape")),C;Nt(s)&&!_e(s)&&$.length===1&&$[0].$?(t=$[0].$.env,C=$[0].$.value):Nt(s)&&$.length===1&&$[0].$?t=$[0].$.env:t=Li(t,$),e.$={env:t,type:n.expectedType?.type??_.type,value:s===void 0?void 0:C!==void 0?C:H(_.type,{env:t,context:n}),pathCollection:[]},Pe(e,!0)}else{if(y.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(et(E,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let $;if(v.length>0&&v[0].$?$=v[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?$=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&($=n.expectedType.type),!$)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:$,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&uo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?H($,{env:t,context:n}):void 0,pathCollection:[],controlFlow:E}}else if(et(E,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let $=n.enclosingFunctionReturnType;e.$={env:t,type:$,value:void 0,pathCollection:[],controlFlow:E}}else if(et(E,"break")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:E}}else if(et(E,"continue")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:E}}return e}return e}function Ry({expr:e,env:t,context:n,scrutineeExpr:r,scrutineeType:i,scrutineeValue:o}){let a=e.args.slice(1),s=[],l,u=new Set,c=!1,p=!1,f=[],_=[];for(let g=0;g<a.length;g++){let h=a[g],y=t;if(!F(h)||!T(h,"=>",2))throw m({token:h.token,errorMessage:`Expected "=>" for match pattern, got ${k(h)}`});let v=h.args[0],E=h.args[1];if(ht(v,"_")){if(p)throw m({token:v.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});p=!0,v.$={env:y,type:i,value:void 0,pathCollection:[],caseExecuted:!0},y=Ue(y);let N=gt({expr:E,env:y,context:{...n,isExecuting:o!==void 0&&!_e(o)},variablesToAdd:[]});if(!N.$?.type)throw m({token:E.token,errorMessage:`Expected type for match result expression, got ${k(E)}`});let M=rt(N.$.env,!0);if(y=M,N.$={...N.$,env:M},n.expectedType&&!W(n.expectedType,{type:N.$.type,env:N.$.env}))throw m({token:N.token,errorMessage:`Incompatible type with expected type:
11081
11085
  - Expected: ${A(n.expectedType.type)}
11082
- - Actual : ${A(N.$.type)}`});if(o===void 0&&N.$&&(N.$.value=void 0),ct(N.$.controlFlow))f.push(N.$.controlFlow),Je(N.$.controlFlow,"return")&&_.push(N),o!==void 0&&!fe(o)?e.$={env:N.$.env,type:n.expectedType?.type??N.$.type,value:N.$.value,pathCollection:N.$.pathCollection,controlFlow:N.$.controlFlow}:o===void 0&&(e.$={env:N.$.env,type:n.expectedType?.type??N.$.type,value:void 0,pathCollection:N.$.pathCollection,controlFlow:N.$.controlFlow});else if(c=!0,o!==void 0&&!fe(o))return t=Li(t,s.filter(V=>V.$&&!Je(V.$.controlFlow,"return")&&!Je(V.$.controlFlow,"escape"))),e.$={env:t,type:n.expectedType?.type??N.$.type,value:N.$.value,pathCollection:[],isPrimitiveMatch:!0},Pe(e,!0),e;if(y=N.$.env,s.push(N),!ct(N.$.controlFlow)){if(!l)l={type:N.$.type,env:y};else if(!W({type:l.type,env:y},{type:N.$.type,env:t}))throw m({token:N.token,errorMessage:`Incompatible types in match branches:
11086
+ - Actual : ${A(N.$.type)}`});if(o===void 0&&N.$&&(N.$.value=void 0),ct(N.$.controlFlow))f.push(N.$.controlFlow),et(N.$.controlFlow,"return")&&_.push(N),o!==void 0&&!_e(o)?e.$={env:N.$.env,type:n.expectedType?.type??N.$.type,value:N.$.value,pathCollection:N.$.pathCollection,controlFlow:N.$.controlFlow}:o===void 0&&(e.$={env:N.$.env,type:n.expectedType?.type??N.$.type,value:void 0,pathCollection:N.$.pathCollection,controlFlow:N.$.controlFlow});else if(c=!0,o!==void 0&&!_e(o))return t=Li(t,s.filter(V=>V.$&&!et(V.$.controlFlow,"return")&&!et(V.$.controlFlow,"escape"))),e.$={env:t,type:n.expectedType?.type??N.$.type,value:N.$.value,pathCollection:[],isPrimitiveMatch:!0},Pe(e,!0),e;if(y=N.$.env,s.push(N),!ct(N.$.controlFlow)){if(!l)l={type:N.$.type,env:y};else if(!W({type:l.type,env:y},{type:N.$.type,env:t}))throw m({token:N.token,errorMessage:`Incompatible types in match branches:
11083
11087
  - Previous: ${A(l.type)}
11084
- - Current : ${A(N.$.type)}`})}continue}let $=fl(v),C=[];for(let N of $){let D=x({expr:N,env:y,context:{...n,expectedType:{type:i,env:y}}});if(!D.$)throw m({token:N.token,errorMessage:`Failed to evaluate pattern expression: ${k(N)}`});if(!W({type:i,env:y},{type:D.$.type,env:D.$.env}))throw m({token:N.token,errorMessage:`Pattern type ${A(D.$.type)} is not compatible with scrutinee type ${A(i)}`});let V=D.$.value;if(V===void 0)throw m({token:N.token,errorMessage:`Match patterns must be compile-time known values. "${k(N)}" is a runtime value.
11085
- Hint: Use "::" to define compile-time constants, e.g., "myConst :: 42"`});let z=Se(V);if(z){if(u.has(z))throw m({token:N.token,errorMessage:`Duplicate pattern value: ${Se(V)}`});u.add(z)}C.push({expr:D,value:V})}let L=!1;if(o!==void 0&&!fe(o)){for(let{value:N,expr:D}of C)if(wt({value:o,env:r.$.env},{value:N,env:D.$.env})){L=!0;break}}v.$={env:y,type:i,value:void 0,pathCollection:[],caseExecuted:!0,primitivePatternValues:C.map(N=>N.value)},y=ze(y);let b=gt({expr:E,env:y,context:{...n,isExecuting:L},variablesToAdd:[]});if(!b.$?.type)throw m({token:E.token,errorMessage:`Expected type for match result expression, got ${k(E)}`});let O=rt(b.$.env,!0);if(y=O,b.$={...b.$,env:O},n.expectedType&&!W(n.expectedType,{type:b.$.type,env:b.$.env}))throw m({token:b.token,errorMessage:`Incompatible type with expected type:
11088
+ - Current : ${A(N.$.type)}`})}continue}let $=_l(v),C=[];for(let N of $){let M=x({expr:N,env:y,context:{...n,expectedType:{type:i,env:y}}});if(!M.$)throw m({token:N.token,errorMessage:`Failed to evaluate pattern expression: ${k(N)}`});if(!W({type:i,env:y},{type:M.$.type,env:M.$.env}))throw m({token:N.token,errorMessage:`Pattern type ${A(M.$.type)} is not compatible with scrutinee type ${A(i)}`});let V=M.$.value;if(V===void 0)throw m({token:N.token,errorMessage:`Match patterns must be compile-time known values. "${k(N)}" is a runtime value.
11089
+ Hint: Use "::" to define compile-time constants, e.g., "myConst :: 42"`});let z=Se(V);if(z){if(u.has(z))throw m({token:N.token,errorMessage:`Duplicate pattern value: ${Se(V)}`});u.add(z)}C.push({expr:M,value:V})}let L=!1;if(o!==void 0&&!_e(o)){for(let{value:N,expr:M}of C)if(wt({value:o,env:r.$.env},{value:N,env:M.$.env})){L=!0;break}}v.$={env:y,type:i,value:void 0,pathCollection:[],caseExecuted:!0,primitivePatternValues:C.map(N=>N.value)},y=Ue(y);let b=gt({expr:E,env:y,context:{...n,isExecuting:L},variablesToAdd:[]});if(!b.$?.type)throw m({token:E.token,errorMessage:`Expected type for match result expression, got ${k(E)}`});let O=rt(b.$.env,!0);if(y=O,b.$={...b.$,env:O},n.expectedType&&!W(n.expectedType,{type:b.$.type,env:b.$.env}))throw m({token:b.token,errorMessage:`Incompatible type with expected type:
11086
11090
  - Expected: ${A(n.expectedType.type)}
11087
- - Actual : ${A(b.$.type)}`});if(o===void 0&&b.$&&(b.$.value=void 0),ct(b.$.controlFlow)){if(f.push(b.$.controlFlow),Je(b.$.controlFlow,"return")&&_.push(b),o!==void 0&&L)return e.$={env:b.$.env,type:n.expectedType?.type??b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow},e;o===void 0&&(e.$={env:b.$.env,type:n.expectedType?.type??b.$.type,value:void 0,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow})}else if(c=!0,o!==void 0&&!fe(o)&&L)return e.$={env:b.$.env,type:n.expectedType?.type??b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,isPrimitiveMatch:!0},Pe(e,!0),e;if(y=b.$.env,s.push(b),!ct(b.$.controlFlow)){if(!l)l={type:b.$.type,env:y};else if(!W({type:l.type,env:y},{type:b.$.type,env:t}))if(W({type:ut({type:l.type,expectedType:void 0,expr:void 0,env:l.env}),env:l.env},{type:b.$.type,env:y}))l={type:b.$.type,env:y};else throw m({token:b.token,errorMessage:`Incompatible types in match branches:
11091
+ - Actual : ${A(b.$.type)}`});if(o===void 0&&b.$&&(b.$.value=void 0),ct(b.$.controlFlow)){if(f.push(b.$.controlFlow),et(b.$.controlFlow,"return")&&_.push(b),o!==void 0&&L)return e.$={env:b.$.env,type:n.expectedType?.type??b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow},e;o===void 0&&(e.$={env:b.$.env,type:n.expectedType?.type??b.$.type,value:void 0,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow})}else if(c=!0,o!==void 0&&!_e(o)&&L)return e.$={env:b.$.env,type:n.expectedType?.type??b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,isPrimitiveMatch:!0},Pe(e,!0),e;if(y=b.$.env,s.push(b),!ct(b.$.controlFlow)){if(!l)l={type:b.$.type,env:y};else if(!W({type:l.type,env:y},{type:b.$.type,env:t}))if(W({type:ut({type:l.type,expectedType:void 0,expr:void 0,env:l.env}),env:l.env},{type:b.$.type,env:y}))l={type:b.$.type,env:y};else throw m({token:b.token,errorMessage:`Incompatible types in match branches:
11088
11092
  - Previous: ${A(l.type)}
11089
- - Current : ${A(b.$.type)}`})}}if(!p)if(cn(i)){let g=u.has("true"),h=u.has("false");if(!g||!h)throw m({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${g?"":"true"}${!g&&!h?", ":""}${h?"":"false"}`})}else throw m({token:e.token,errorMessage:`Match expression on ${A(i)} requires a wildcard pattern "_" for exhaustiveness.`});let d=f.length>0?fo(f):void 0;if(c||!ct(d)){if(c&&!l)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:Y.type,env:t});let g=s.filter(h=>h.$&&!Je(h.$.controlFlow,"return")&&!Je(h.$.controlFlow,"escape"));o!==void 0&&!fe(o)&&g.length===1&&g[0].$?t=g[0].$.env:t=Li(t,g),e.$={env:t,type:n.expectedType?.type??l.type,value:o===void 0?void 0:q(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},Pe(e,!0)}else{if(f.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(Je(d,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let g;if(_.length>0&&_[0].$?g=_[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?g=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(g=n.expectedType.type),!g)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:g,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&uo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?q(g,{env:t,context:n}):void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(Je(d,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let g=n.enclosingFunctionReturnType;e.$={env:t,type:g,value:void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(Je(d,"break")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(Je(d,"continue")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}return e}return e}function W_({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
11093
+ - Current : ${A(b.$.type)}`})}}if(!p)if(cn(i)){let g=u.has("true"),h=u.has("false");if(!g||!h)throw m({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${g?"":"true"}${!g&&!h?", ":""}${h?"":"false"}`})}else throw m({token:e.token,errorMessage:`Match expression on ${A(i)} requires a wildcard pattern "_" for exhaustiveness.`});let d=f.length>0?fo(f):void 0;if(c||!ct(d)){if(c&&!l)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:Y.type,env:t});let g=s.filter(h=>h.$&&!et(h.$.controlFlow,"return")&&!et(h.$.controlFlow,"escape"));o!==void 0&&!_e(o)&&g.length===1&&g[0].$?t=g[0].$.env:t=Li(t,g),e.$={env:t,type:n.expectedType?.type??l.type,value:o===void 0?void 0:H(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},Pe(e,!0)}else{if(f.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(et(d,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let g;if(_.length>0&&_[0].$?g=_[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?g=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(g=n.expectedType.type),!g)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:g,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&uo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?H(g,{env:t,context:n}):void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(et(d,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let g=n.enclosingFunctionReturnType;e.$={env:t,type:g,value:void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(et(d,"break")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(et(d,"continue")){if(!n.isEvaluatingLoopBody)throw m({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:Y.type,value:Y,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}return e}return e}function Y_({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
11090
11094
  ${k(e)}`});{let l=r;for(;T(l,".")&&l.args.length>=1;)l=l.args[0];if(U(l)){let u=j(t,l.token.value),c=u[u.length-1];if(c?.isImplicit)throw m({token:r.token,errorMessage:`Cannot use "open" on implicit variable "${c.name}". Implicit variables must be passed via using() parameters.`})}}let i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate the module argument:
11091
- ${k(i)}`});let o=i.$.type,a=i.$.value,s;if(ft(a)){let l=a,u=l.type;for(let c=0;c<u.fields.length;c++){let p=l.fields[c],f=u.fields[c],{env:_}=_e({env:t,variable:{name:f.label,type:f.type,isCompileTimeOnly:!0,value:[p],token:f.exprs.labelExpr?.token??f.exprs.expr.token,initializedAtToken:f.exprs.labelExpr?.token??f.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=_}}else if(ue(o)){let l=a,u=o;s=[];for(let c=0;c<u.fields.length;c++){let p;pn(l)&&(p=l.fields[c]);let f=u.fields[c];try{let{env:_}=_e({env:t,variable:{name:f.label,type:f.type,isCompileTimeOnly:!!p,value:p?[p]:void 0,token:f.exprs.labelExpr?.token??f.exprs.expr.token,initializedAtToken:f.exprs.labelExpr?.token??f.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=_,s.push({label:f.label,variableName:f.label,type:f.type})}catch(_){throw nt([{token:r.token,errorMessage:`Failed to import struct field "${f.label}"`},..._ instanceof rn?_.tokenAndErrorList:[{token:r.token,errorMessage:_ instanceof Error?_.message:String(_)}]])}}}else throw m({token:r.token,errorMessage:`Expected module/struct for "${I.open}", got:
11092
- ${k(r)}`});return e.$={env:t,value:Y,type:Y.type,pathCollection:[],runtimeDestructurings:s},e}function H_({expr:e,env:t,context:n}){if(!T(e,"."))throw m({token:e.token,errorMessage:`Expected "." for property access, got:
11093
- ${k(e)}`});if(T(e,".",1)){let s=e.args[0];if(!U(s)&&!We(s))throw m({token:s.token,errorMessage:`Expected identifier for enum variant access, got:
11094
- ${k(s)}`});let l=n.expectedType?.type;if(!ye(l))throw m({token:e.token,errorMessage:"Failed to infer enum variant type."});let u=s.token.value,c=l,p=c.variants.find(_=>_.name===u);if(!p)throw m({token:s.token,errorMessage:`Enum variant "${u}" not found in enum`});let f={...c,selectedVariantName:u};if(!p.fields)e.$={env:t,type:f,value:Pr(f,u,[]),pathCollection:[]},s.$={env:t,type:f,pathCollection:[]};else{let _=J(f);e.$={env:t,value:_,type:_.type,pathCollection:[]},s.$=e.$}return e}if(!T(e,".",2))throw m({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
11095
- ${k(e)}`});let r=e.args[0],i=e.args[1];if(r=x({expr:r,env:t,context:{...n,expectedType:void 0}}),r.$?.env&&(t=r.$?.env),U(i)&&i.token.value==="*"){if(Ie(r.$?.type)){let s=r.$.type,l=s.childType;M(l)&&(l=Mt(t,l));let u=r.$?.value;if(fi(u)){let c=u.targetValue[0],p;return Ln(c)?p=c.elements[u.targetIndex]:p=c,e.$={env:t,type:l,value:p,originType:s,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=u.targetValue,e.$.ptrTargetIndex=u.targetIndex,i.$=e.$,e}if(fe(u)){let c=q(l,{variableName:u.variableName?`${u.variableName}.*`:void 0,env:t,context:n});return e.$={env:t,type:l,value:c,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:l,value:void 0,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Pe(e,!1),e}if(bt(r.$?.type)){let s=r.$.type,l=s.childType;return M(l)&&(l=Mt(t,l)),e.$={env:t,type:l,value:void 0,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Pe(e,!1),e}}if(R(r.$?.value)){let s=r.$.value;if(ye(s.value)){if(!U(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got:
11096
- ${k(i)}`});{let f=i.token.value,_=s.value.trait.fields.find(d=>d.label===f);if(_)return e.$={env:t,type:_.type,value:_.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let l=i.token.value,u=s.value,c=u.variants.find(f=>f.name===l);if(!c)throw m({token:i.token,errorMessage:`Enum variant "${l}" not found in enum`});let p={...u,selectedVariantName:l};if(!c.fields)e.$={env:t,type:p,value:Pr(p,l,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let f=J(p);e.$={env:t,type:f.type,value:f,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if(s.value.trait){if(!We(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11097
- ${k(i)}`});let l=i.token.value,u=s.value.trait.fields.findLast(c=>c.label===l);if(u){if(u.assignedValue){let c=u.assignedValue.type;return e.$={env:t,type:c,value:u.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(u.unassignedSomeType){let c=J(u.unassignedSomeType);return e.$={env:t,type:c.type,value:c,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:u.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let p of s.value.trait.fields)if(p.label===""&&p.assignedValue&&mt(p.assignedValue)){let f=p.assignedValue,_=f.type,d=_.fields.findIndex(g=>g.label===l);if(d>=0){let g=_.fields[d],h=f.fields[d];if(H(g.type))continue;if(h)return e.$={env:t,type:h.type,value:h,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(g.unassignedSomeType){let y=J(g.unassignedSomeType);return e.$={env:t,type:y.type,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let c=Jn({concreteType:s.value,methodName:l,env:t});if(c.length===1){let p=c[0];return e.$={env:t,type:p.type,value:p.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$=void 0,e}}else if(Fe(s.value)){if(!We(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11098
- ${k(i)}`});let l=i.token.value,c=s.value.fields.find(p=>p.label===l);return c?(e.$={env:t,type:c.type,value:c.assignedValue??q(c.type,{variableName:c.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(xe(s.value)){if(!We(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11099
- ${k(i)}`});let l=i.token.value,u=s.value;if(u.receiverType&&u.receiverType.trait){for(let f of u.receiverType.trait.fields)if(f.label===""&&f.assignedValue&&mt(f.assignedValue)){let _=f.assignedValue,d=_.type;if(!W({type:u,env:t},{type:d,env:t}))continue;let g=d.fields.findIndex(h=>h.label===l&&H(h.type));if(g>=0){let h=d.fields[g];if(H(h.type)){let y=_.fields[g];if(y){let v=h.type;return ie(y)&&y.specializedType&&(v=y.specializedType),e.$={env:t,type:v,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let p=du({concreteType:u.receiverType,traitType:u,methodName:l,env:t});if(p)return e.$={env:t,type:p.type,value:p.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let c=u.fields.find(p=>p.label===l);return c?(e.$={env:t,type:c.type,value:c.assignedValue??q(c.type,{variableName:c.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=r.$?.type,a=r.$?.type;for(;o&&Ie(o);)o=o.childType;if(ke(o)||ue(o)||lt(o)){let s=o.fields,l=r.$.value;if(U(i)){if(i.token.type==="integer"){if(!ke(r.$?.type))throw m({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let u=parseInt(i.token.value,10);if(isNaN(u))throw m({token:i.token,errorMessage:`Expected integer for tuple index, got:
11095
+ ${k(i)}`});let o=i.$.type,a=i.$.value,s;if(ft(a)){let l=a,u=l.type;for(let c=0;c<u.fields.length;c++){let p=l.fields[c],f=u.fields[c],{env:_}=fe({env:t,variable:{name:f.label,type:f.type,isCompileTimeOnly:!0,value:[p],token:f.exprs.labelExpr?.token??f.exprs.expr.token,initializedAtToken:f.exprs.labelExpr?.token??f.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=_}}else if(ue(o)){let l=a,u=o;s=[];for(let c=0;c<u.fields.length;c++){let p;pn(l)&&(p=l.fields[c]);let f=u.fields[c];try{let{env:_}=fe({env:t,variable:{name:f.label,type:f.type,isCompileTimeOnly:!!p,value:p?[p]:void 0,token:f.exprs.labelExpr?.token??f.exprs.expr.token,initializedAtToken:f.exprs.labelExpr?.token??f.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=_,s.push({label:f.label,variableName:f.label,type:f.type})}catch(_){throw nt([{token:r.token,errorMessage:`Failed to import struct field "${f.label}"`},..._ instanceof rn?_.tokenAndErrorList:[{token:r.token,errorMessage:_ instanceof Error?_.message:String(_)}]])}}}else throw m({token:r.token,errorMessage:`Expected module/struct for "${I.open}", got:
11096
+ ${k(r)}`});return e.$={env:t,value:Y,type:Y.type,pathCollection:[],runtimeDestructurings:s},e}function j_({expr:e,env:t,context:n}){if(!T(e,"."))throw m({token:e.token,errorMessage:`Expected "." for property access, got:
11097
+ ${k(e)}`});if(T(e,".",1)){let s=e.args[0];if(!U(s)&&!qe(s))throw m({token:s.token,errorMessage:`Expected identifier for enum variant access, got:
11098
+ ${k(s)}`});let l=n.expectedType?.type;if(!ye(l))throw m({token:e.token,errorMessage:"Failed to infer enum variant type."});let u=s.token.value,c=l,p=c.variants.find(_=>_.name===u);if(!p)throw m({token:s.token,errorMessage:`Enum variant "${u}" not found in enum`});let f={...c,selectedVariantName:u};if(!p.fields)e.$={env:t,type:f,value:Pr(f,u,[]),pathCollection:[]},s.$={env:t,type:f,pathCollection:[]};else{let _=Q(f);e.$={env:t,value:_,type:_.type,pathCollection:[]},s.$=e.$}return e}if(!T(e,".",2))throw m({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
11099
+ ${k(e)}`});let r=e.args[0],i=e.args[1];if(r=x({expr:r,env:t,context:{...n,expectedType:void 0}}),r.$?.env&&(t=r.$?.env),U(i)&&i.token.value==="*"){if(Ie(r.$?.type)){let s=r.$.type,l=s.childType;D(l)&&(l=St(t,l));let u=r.$?.value;if(fi(u)){let c=u.targetValue[0],p;return Ln(c)?p=c.elements[u.targetIndex]:p=c,e.$={env:t,type:l,value:p,originType:s,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=u.targetValue,e.$.ptrTargetIndex=u.targetIndex,i.$=e.$,e}if(_e(u)){let c=H(l,{variableName:u.variableName?`${u.variableName}.*`:void 0,env:t,context:n});return e.$={env:t,type:l,value:c,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:l,value:void 0,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Pe(e,!1),e}if(bt(r.$?.type)){let s=r.$.type,l=s.childType;return D(l)&&(l=St(t,l)),e.$={env:t,type:l,value:void 0,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Pe(e,!1),e}}if(R(r.$?.value)){let s=r.$.value;if(ye(s.value)){if(!U(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got:
11100
+ ${k(i)}`});{let f=i.token.value,_=s.value.trait.fields.find(d=>d.label===f);if(_)return e.$={env:t,type:_.type,value:_.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let l=i.token.value,u=s.value,c=u.variants.find(f=>f.name===l);if(!c)throw m({token:i.token,errorMessage:`Enum variant "${l}" not found in enum`});let p={...u,selectedVariantName:l};if(!c.fields)e.$={env:t,type:p,value:Pr(p,l,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let f=Q(p);e.$={env:t,type:f.type,value:f,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if(s.value.trait){if(!qe(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11101
+ ${k(i)}`});let l=i.token.value,u=s.value.trait.fields.findLast(c=>c.label===l);if(u){if(u.assignedValue){let c=u.assignedValue.type;return e.$={env:t,type:c,value:u.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(u.unassignedSomeType){let c=Q(u.unassignedSomeType);return e.$={env:t,type:c.type,value:c,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:u.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let f of s.value.trait.fields)if(f.label===""&&f.assignedValue&&dt(f.assignedValue)){let _=f.assignedValue,d=_.type,g=d.fields.findIndex(h=>h.label===l);if(g>=0){let h=d.fields[g],y=_.fields[g];if(q(h.type))continue;if(y)return e.$={env:t,type:y.type,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(h.unassignedSomeType){let v=Q(h.unassignedSomeType);return e.$={env:t,type:v.type,value:v,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let c=er({concreteType:s.value,methodName:l,env:t});if(c.length===1){let f=c[0];return e.$={env:t,type:f.type,value:f.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let p=pa({concreteType:s.value,propertyName:l,env:t});return p?(e.$={env:t,type:p.type,value:p.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}else if(Le(s.value)){if(!qe(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11102
+ ${k(i)}`});let l=i.token.value,c=s.value.fields.find(p=>p.label===l);return c?(e.$={env:t,type:c.type,value:c.assignedValue??H(c.type,{variableName:c.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(xe(s.value)){if(!qe(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11103
+ ${k(i)}`});let l=i.token.value,u=s.value;if(u.receiverType&&u.receiverType.trait){for(let f of u.receiverType.trait.fields)if(f.label===""&&f.assignedValue&&dt(f.assignedValue)){let _=f.assignedValue,d=_.type;if(!W({type:u,env:t},{type:d,env:t}))continue;let g=d.fields.findIndex(h=>h.label===l&&q(h.type));if(g>=0){let h=d.fields[g];if(q(h.type)){let y=_.fields[g];if(y){let v=h.type;return ie(y)&&y.specializedType&&(v=y.specializedType),e.$={env:t,type:v,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let p=mu({concreteType:u.receiverType,traitType:u,methodName:l,env:t});if(p)return e.$={env:t,type:p.type,value:p.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let c=u.fields.find(p=>p.label===l);return c?(e.$={env:t,type:c.type,value:c.assignedValue??H(c.type,{variableName:c.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=r.$?.type,a=r.$?.type;for(;o&&Ie(o);)o=o.childType;if(ke(o)||ue(o)||lt(o)){let s=o.fields,l=r.$.value;if(U(i)){if(i.token.type==="integer"){if(!ke(r.$?.type))throw m({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let u=parseInt(i.token.value,10);if(isNaN(u))throw m({token:i.token,errorMessage:`Expected integer for tuple index, got:
11100
11104
  ${k(i)}`});let c=s.length;if(u<0||u>=c)throw m({token:i.token,errorMessage:`Index out of bounds: ${u} for accessing field in:
11101
- ${A(r.$?.type)}`});let p=s[u],f=r.$.originType||a,_=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(d=>[...d,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:p.type,originType:f,isAccessingProperty:!0,pathCollection:_},i.$=e.$,l){let d=[];(sn(l)||pn(l))&&(d=l.fields),e.$.value=d?.[u]}return Pe(e,!1),e}else if(We(i)){let u=i.token.value;{let c=s.findIndex(d=>d.label===u);if(c<0){if(Fe(r.$?.type))throw m({token:i.token,errorMessage:`Module field "${u}" not found in module type`});return e.$=void 0,e}let p=s[c],f=r.$?.originType||a,_=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(d=>[...d,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:p.type,originType:f,isAccessingProperty:!0,pathCollection:_},i.$=e.$,l)if(fe(l))e.$.value=q(p.type,{env:t,context:n});else{let d=[];(sn(l)||pn(l))&&(d=l.fields);let g=d?.[c];g||(g=q(p.type,{env:t,context:n})),e.$.value=g}return Pe(e,!1),e}}}}else if(Fe(o)){let s=o.fields,l=r.$.value;if(U(i)){if(i.token.type==="integer")throw m({token:i.token,errorMessage:`Accessomg module field by index is not allowed, got:
11102
- ${k(i)}`});if(We(i)){let u=i.token.value;{let c=s.findIndex(_=>_.label===u);if(c<0){if(Fe(r.$?.type))throw m({token:i.token,errorMessage:`Module field "${u}" not found in module type`});return e.$=void 0,e}let p=s[c],f=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(_=>[..._,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:p.type,isAccessingProperty:!0,pathCollection:f},i.$=e.$,l)if(fe(l))e.$.value=q(p.type,{env:t,context:n});else{let _=[];ft(l)&&(_=l.fields);let d=_?.[c];d||(d=q(p.type,{env:t,context:n})),e.$.value=d}return e}}}}else if(ye(o)&&U(i)){if(!We(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant property, got:
11103
- ${k(i)}`});let s=i.token.value,l=o.variants.find(u=>u.name===o.selectedVariantName);if(l){let u=(l.fields??[]).findIndex(f=>f.label===s);if(u<0)return e.$=void 0,e;let c=(l.fields??[])[u];e.$={env:t,type:c.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let p=r.$?.value;return p&&xt(p)&&p.variantName===l.name&&(e.$.value=p.fields[u]),i.$=e.$,e}}return e.$=void 0,e}function q_({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body")throw m({token:e.token,errorMessage:`Expected a function type for recur, got:
11105
+ ${A(r.$?.type)}`});let p=s[u],f=r.$.originType||a,_=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(d=>[...d,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:p.type,originType:f,isAccessingProperty:!0,pathCollection:_},i.$=e.$,l){let d=[];(sn(l)||pn(l))&&(d=l.fields),e.$.value=d?.[u]}return Pe(e,!1),e}else if(qe(i)){let u=i.token.value;{let c=s.findIndex(d=>d.label===u);if(c<0){if(Le(r.$?.type))throw m({token:i.token,errorMessage:`Module field "${u}" not found in module type`});return e.$=void 0,e}let p=s[c],f=r.$?.originType||a,_=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(d=>[...d,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:p.type,originType:f,isAccessingProperty:!0,pathCollection:_},i.$=e.$,l)if(_e(l))e.$.value=H(p.type,{env:t,context:n});else{let d=[];(sn(l)||pn(l))&&(d=l.fields);let g=d?.[c];g||(g=H(p.type,{env:t,context:n})),e.$.value=g}return Pe(e,!1),e}}}}else if(Le(o)){let s=o.fields,l=r.$.value;if(U(i)){if(i.token.type==="integer")throw m({token:i.token,errorMessage:`Accessomg module field by index is not allowed, got:
11106
+ ${k(i)}`});if(qe(i)){let u=i.token.value;{let c=s.findIndex(_=>_.label===u);if(c<0){if(Le(r.$?.type))throw m({token:i.token,errorMessage:`Module field "${u}" not found in module type`});return e.$=void 0,e}let p=s[c],f=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(_=>[..._,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:p.type,isAccessingProperty:!0,pathCollection:f},i.$=e.$,l)if(_e(l))e.$.value=H(p.type,{env:t,context:n});else{let _=[];ft(l)&&(_=l.fields);let d=_?.[c];d||(d=H(p.type,{env:t,context:n})),e.$.value=d}return e}}}}else if(ye(o)&&U(i)){if(!qe(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant property, got:
11107
+ ${k(i)}`});let s=i.token.value,l=o.variants.find(u=>u.name===o.selectedVariantName);if(l){let u=(l.fields??[]).findIndex(f=>f.label===s);if(u<0)return e.$=void 0,e;let c=(l.fields??[])[u];e.$={env:t,type:c.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let p=r.$?.value;return p&&Nt(p)&&p.variantName===l.name&&(e.$.value=p.fields[u]),i.$=e.$,e}}return e.$=void 0,e}function K_({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body")throw m({token:e.token,errorMessage:`Expected a function type for recur, got:
11104
11108
  ${k(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!T(e,I.recur))throw m({token:e.token,errorMessage:`Expected recur, got:
11105
- ${k(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let o=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:a,runtimeArgExprsInOrder:s,callerEnv:l}=Dr({functionValue:ie(o)?o:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=rt(l),e.$={type:a,value:q(a,{variableName:"recur_result_"+Be(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:s},e}return Fn({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function Y_({expr:e,env:t,context:n}){if(!T(e,I.runtime,1))throw m({token:e.token,errorMessage:`Expected runtime(expr), got:
11109
+ ${k(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let o=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:a,runtimeArgExprsInOrder:s,callerEnv:l}=Dr({functionValue:ie(o)?o:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=rt(l),e.$={type:a,value:H(a,{variableName:"recur_result_"+Be(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:s},e}return Fn({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function X_({expr:e,env:t,context:n}){if(!T(e,I.runtime,1))throw m({token:e.token,errorMessage:`Expected runtime(expr), got:
11106
11110
  ${k(e)}`});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "runtime" during compile-time function evaluation analysis. The "runtime" keyword forces runtime evaluation and prevents CTFE.'});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$?.type)throw m({token:i.token,errorMessage:`Failed to evaluate runtime argument:
11107
- ${k(i)}`});let o=ut({type:i.$.type,expectedType:void 0,expr:i,env:i.$.env??t});return e.$={type:o,value:void 0,env:i.$.env??t,pathCollection:i.$.pathCollection??[]},e}function j_({expr:e,env:t,context:n}){ge(e,"<:",2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!R(o.$.value))throw m({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=o.$.env;let a=o.$.value;if(n.isInsideWhereClause&&!M(a.value))throw m({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${k(r)} of type ${A(a.value)}`});let s=[];if(F(i)&&T(i,I.tuple))for(let _ of i.args)F(_)&&T(_,"!")&&_.args.length===1?s.push({expr:_.args[0],isNegated:!0}):s.push({expr:_,isNegated:!1});else F(i)&&T(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:_,isNegated:d}of s){let g=x({expr:_,env:t,context:{...n}});if(!g.$||!g.$.value||!R(g.$.value)||!xe(g.$.value.value))throw m({token:_.token,errorMessage:"Expected trait type for right-hand side expression."});t=g.$.env;let h=g.$.value.value;if(h.receiverType)throw m({token:_.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(d&&!n.isInsideWhereClause)throw m({token:_.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:h,expr:_,isNegated:d})}if(n.isInsideWhereClause&&M(a.value)){let _=a.value;for(let{traitType:d,isNegated:g}of l){let h={...d,receiverType:_};t=Un({env:t,someType:_,traitType:h,isNegated:g})}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw m({token:i.token,errorMessage:"Multiple trait constraints (tuple form) are only allowed in where clauses."});let{traitType:u}=l[0],c=a.value;if(!M(c)&&!Nt({targetType:c,traitType:u,env:t}))throw m({token:e.token,errorMessage:`Type "${A(c)}" does not implement trait "${u.typeName??A(u)}".`});let p={...u,receiverType:a.value},f=J(p);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function K_({expr:e,env:t,context:n}){if(!T(e,I.test))throw m({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2&&e.args.length!==3)throw m({token:e.token,errorMessage:`test expects 2 or 3 arguments (name, [using clause], body), got ${e.args.length}`});let r=e.args.length===3,i=e.args[0],o=r?e.args[1]:void 0,a=r?e.args[2]:e.args[1];if(o&&!T(o,I.using))throw m({token:o.token,errorMessage:`Expected using(...) clause as second argument, got: ${k(o)}`});let s=x({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:i.token,errorMessage:`Failed to evaluate test name: ${k(i)}`});if(t=s.$.env,!qe(s.$.value))throw m({token:i.token,errorMessage:`Expected string for test name, got ${k(i)}`});if(r){let l=Ve(o);o.$={env:t,type:Y.type,value:Y,pathCollection:[],originalExpr:l};let u=Ve(a);a.$={env:t,type:Y.type,value:Y,pathCollection:[],originalExpr:u}}else{let l=Ve(a),u=x({expr:a,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!u.$)throw m({token:a.token,errorMessage:`Failed to evaluate test body: ${k(a)}`});if(!pe(u.$.type))throw m({token:a.token,errorMessage:`Test body must have 'unit' type, got ${A(u.$.type)}`});u.$.originalExpr=l}return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function X_({expr:e,env:t,context:n}){if(!T(e,w.typeof,1))throw m({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
11111
+ ${k(i)}`});let o=ut({type:i.$.type,expectedType:void 0,expr:i,env:i.$.env??t});return e.$={type:o,value:void 0,env:i.$.env??t,pathCollection:i.$.pathCollection??[]},e}function Q_({expr:e,env:t,context:n}){ge(e,"<:",2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!R(o.$.value))throw m({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=o.$.env;let a=o.$.value;if(n.isInsideWhereClause&&!D(a.value))throw m({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${k(r)} of type ${A(a.value)}`});let s=[];if(F(i)&&T(i,I.tuple))for(let _ of i.args)F(_)&&T(_,"!")&&_.args.length===1?s.push({expr:_.args[0],isNegated:!0}):s.push({expr:_,isNegated:!1});else F(i)&&T(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:_,isNegated:d}of s){let g=x({expr:_,env:t,context:{...n}});if(!g.$||!g.$.value||!R(g.$.value)||!xe(g.$.value.value))throw m({token:_.token,errorMessage:"Expected trait type for right-hand side expression."});t=g.$.env;let h=g.$.value.value;if(h.receiverType)throw m({token:_.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(d&&!n.isInsideWhereClause)throw m({token:_.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:h,expr:_,isNegated:d})}if(n.isInsideWhereClause&&D(a.value)){let _=a.value;for(let{traitType:d,isNegated:g}of l){let h={...d,receiverType:_};t=Un({env:t,someType:_,traitType:h,isNegated:g})}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw m({token:i.token,errorMessage:"Multiple trait constraints (tuple form) are only allowed in where clauses."});let{traitType:u}=l[0],c=a.value;if(!D(c)&&!Ft({targetType:c,traitType:u,env:t}))throw m({token:e.token,errorMessage:`Type "${A(c)}" does not implement trait "${u.typeName??A(u)}".`});let p={...u,receiverType:a.value},f=Q(p);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function Z_({expr:e,env:t,context:n}){if(!T(e,I.test))throw m({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2&&e.args.length!==3)throw m({token:e.token,errorMessage:`test expects 2 or 3 arguments (name, [using clause], body), got ${e.args.length}`});let r=e.args.length===3,i=e.args[0],o=r?e.args[1]:void 0,a=r?e.args[2]:e.args[1];if(o&&!T(o,I.using))throw m({token:o.token,errorMessage:`Expected using(...) clause as second argument, got: ${k(o)}`});let s=x({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:i.token,errorMessage:`Failed to evaluate test name: ${k(i)}`});if(t=s.$.env,!He(s.$.value))throw m({token:i.token,errorMessage:`Expected string for test name, got ${k(i)}`});if(r){let l=Ve(o);o.$={env:t,type:Y.type,value:Y,pathCollection:[],originalExpr:l};let u=Ve(a);a.$={env:t,type:Y.type,value:Y,pathCollection:[],originalExpr:u}}else{let l=Ve(a),u=x({expr:a,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!u.$)throw m({token:a.token,errorMessage:`Failed to evaluate test body: ${k(a)}`});if(!pe(u.$.type))throw m({token:a.token,errorMessage:`Test body must have 'unit' type, got ${A(u.$.type)}`});u.$.originalExpr=l}return e.$={env:t,type:Y.type,value:Y,pathCollection:[]},e}function J_({expr:e,env:t,context:n}){if(!T(e,w.typeof,1))throw m({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
11108
11112
  ${k(e)}`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(i.$?.env&&(t=i.$.env),!i.$?.type)throw m({token:r.token,errorMessage:`Expected type for expression, got:
11109
- ${k(r)}`});let o=i.$.type,a=J(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Va({expr:e,env:t,context:n}){if(e.args.length!==2&&e.args.length!==3)throw m({token:e.token,errorMessage:`Expected 2 or 3 arguments for while loop, got ${e.args.length}`});let r=e.args[0],i,o;e.args.length===3?(i=e.args[1],o=e.args[2]):o=e.args[1];let a=gt({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the condition expression:
11113
+ ${k(r)}`});let o=i.$.type,a=Q(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Ma({expr:e,env:t,context:n}){if(e.args.length!==2&&e.args.length!==3)throw m({token:e.token,errorMessage:`Expected 2 or 3 arguments for while loop, got ${e.args.length}`});let r=e.args[0],i,o;e.args.length===3?(i=e.args[1],o=e.args[2]):o=e.args[1];let a=gt({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the condition expression:
11110
11114
  ${k(r)}`});if(!cn(a.$.type))throw m({token:r.token,errorMessage:`Expected bool type for condition expression, got:
11111
11115
  ${k(r)}`});let s=a.$.value,l=s!==void 0;if(Re(s)&&s.value===!1)return e.$={env:t,pathCollection:[],type:Y.type,value:l?Y:void 0},e;{let u=gt({expr:o,env:t,context:{...n,isEvaluatingLoopBody:{kind:"while",env:t}},variablesToAdd:[]});if(!u.$)throw m({token:o.token,errorMessage:`Failed to evaluate the body expression:
11112
- ${k(o)}`});if(ct(u.$.controlFlow)){if(Je(u.$.controlFlow,"return")||Je(u.$.controlFlow,"escape"))if(Re(s)&&s.value===!0){let p={};Je(u.$.controlFlow,"return")&&(p.return=!0),Je(u.$.controlFlow,"escape")&&(p.escape=!0),e.$={env:u.$.env,pathCollection:u.$.pathCollection,type:u.$.type,value:u.$.value,controlFlow:p}}else e.$={env:t,pathCollection:[],type:Y.type,value:l?Y:void 0};else if(Je(u.$.controlFlow,"break"))e.$={env:u.$.env,pathCollection:[],type:Y.type,value:l?Y:void 0};else if(Je(u.$.controlFlow,"continue")){let p=u.$.env;if(i){let f=x({expr:i,env:p,context:{...n}});if(!f.$)throw m({token:i.token,errorMessage:`Failed to evaluate the step expression:
11113
- ${k(i)}`});p=f.$.env}if(Re(s))return Va({expr:e,env:p,context:{...n}});e.$={env:p,pathCollection:[],type:Y.type,value:l?Y:void 0}}return e}if(!pe(u.$.type))throw m({token:o.token,errorMessage:`Expected the while loop body to return unit, but got:
11116
+ ${k(o)}`});if(ct(u.$.controlFlow)){if(et(u.$.controlFlow,"return")||et(u.$.controlFlow,"escape"))if(Re(s)&&s.value===!0){let p={};et(u.$.controlFlow,"return")&&(p.return=!0),et(u.$.controlFlow,"escape")&&(p.escape=!0),e.$={env:u.$.env,pathCollection:u.$.pathCollection,type:u.$.type,value:u.$.value,controlFlow:p}}else e.$={env:t,pathCollection:[],type:Y.type,value:l?Y:void 0};else if(et(u.$.controlFlow,"break"))e.$={env:u.$.env,pathCollection:[],type:Y.type,value:l?Y:void 0};else if(et(u.$.controlFlow,"continue")){let p=u.$.env;if(i){let f=x({expr:i,env:p,context:{...n}});if(!f.$)throw m({token:i.token,errorMessage:`Failed to evaluate the step expression:
11117
+ ${k(i)}`});p=f.$.env}if(Re(s))return Ma({expr:e,env:p,context:{...n}});e.$={env:p,pathCollection:[],type:Y.type,value:l?Y:void 0}}return e}if(!pe(u.$.type))throw m({token:o.token,errorMessage:`Expected the while loop body to return unit, but got:
11114
11118
  ${A(u.$.type)}`});let c=u.$.value===void 0;if(t=u.$.env,i){let p=x({expr:i,env:t,context:{...n}});if(!p.$)throw m({token:i.token,errorMessage:`Failed to evaluate the step expression:
11115
- ${k(i)}`});t=p.$.env}return Re(s)&&s.value===!0&&c?(e.$={env:t,pathCollection:[],type:Y.type,value:void 0},e):Re(s)&&s.value===!0?Va({expr:e,env:t,context:{...n}}):(e.$={env:t,pathCollection:[],type:Y.type,value:l?Y:void 0},e)}}function Q_(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var My=Q_("YO_DEBUG_EVAL")||Q_("YO_DEBUG_EVAL_PROFILE"),Z_=globalThis,ji=Z_.__yoEvalProfilerState??(Z_.__yoEvalProfilerState={evalCount:0,evalStart:0});function li({expr:e,env:t,context:n}){if(My&&(ji.evalStart||(ji.evalStart=Date.now()),ji.evalCount++,ji.evalCount%1e5===0&&console.log(`[EVAL] ${ji.evalCount} calls, ${Date.now()-ji.evalStart}ms elapsed`)),U(e))switch(e.token.type){case"identifier":case"operator":return Sa({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return x_(e,t,{...n});case"float":return I_(e,t,{...n});case"string":return N_(e,t);case"char":return w_(e,t);case"bool":return k_(e,t);default:throw m({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
11116
- ${k(e)}`})}else if(T(e,":",2)){let{expr:r}=Na({expr:e,env:t,context:n});return r}else return T(e,":=",2)||T(e,"::",2)?B_({expr:e,env:t,context:n}):T(e,"=",2)?V_({expr:e,env:t,context:n}):T(e,"->",2)?F(e.args[0])&&(T(e.args[0],I.fn)||T(e.args[0],I.unsafe_fn))?Ca({expr:e,env:t,context:{...n,isUnsafeFunctionType:T(e.args[0],I.unsafe_fn)}}):F(e.args[0])&&T(e.args[0],I.Fn)?__({expr:e,env:t,context:{...n}}):xa({expr:e,env:t,context:{...n}}):T(e,"=>",2)?F(e.args[0])&&T(e.args[0],I.fn)?l_({expr:e,env:t,context:{...n}}):xa({expr:e,env:t,context:{...n}}):T(e,"=>>",2)?xa({expr:e,env:t,context:{...n}}):T(e,I.recur)?q_({expr:e,env:t,context:{...n}}):T(e,I.runtime)?Y_({expr:e,env:t,context:{...n}}):T(e,I.extern)?R_({expr:e,env:t,context:{...n}}):T(e,I.c_include)?D_({expr:e,env:t,context:{...n}}):T(e,I.test)?K_({expr:e,env:t,context:{...n}}):T(e,I.cond)?M_({expr:e,env:t,context:{...n}}):T(e,I.match)?G_({expr:e,env:t,context:{...n}}):T(e,I.tuple)?S_({expr:e,env:t,context:{...n}}):T(e,I.array)?b_({expr:e,env:t,context:{...n}}):T(e,I.comptime_list)?F_({expr:e,env:t,context:{...n}}):T(e,I.dyn)?A_({expr:e,env:t,context:{...n}}):T(e,I.struct)?Yi({expr:e,env:t,context:{...n}}):T(e,I.object)?g_({expr:e,env:t,context:{...n}}):T(e,I.newtype)?y_({expr:e,env:t,context:{...n}}):T(e,I.enum)?f_({expr:e,env:t,context:{...n}}):T(e,I.union)?C_({expr:e,env:t,context:{...n}}):T(e,".")?H_({expr:e,env:t,context:{...n}}):T(e,I.begin)?gt({expr:e,env:t,context:{...n},variablesToAdd:[]}):T(e,I.module)?m_({expr:e,env:t,context:{...n}}):T(e,I.trait)?T_({expr:e,env:t,context:{...n}}):T(e,I.Impl)?wf({expr:e,env:t,context:{...n}}):T(e,I.impl)?mu({expr:e,env:t,context:{...n}}):T(e,w.typeof)?X_({expr:e,env:t,context:{...n}}):T(e,w.sizeof)?Kf({expr:e,env:t,context:{...n}}):T(e,w.alignof)?Lp({expr:e,env:t,context:{...n}}):T(e,w.rc)?Nf({expr:e,env:t,context:{...n}}):T(e,"<:")?j_({expr:e,env:t,context:{...n}}):T(e,w.the)?Xf({expr:e,env:t,context:{...n}}):T(e,I.import)?U_({expr:e,env:t,context:{...n},stdPath:n.stdPath}):T(e,I.open)?W_({expr:e,env:t,context:{...n}}):T(e,I.Ptr,1)?a_({expr:e,env:t,context:{...n}}):T(e,I.Iso,1)?pf({expr:e,env:t,context:{...n}}):T(e,I.Arc,1)?ef({expr:e,env:t,context:{...n}}):T(e,w.__yo_address_of,1)?xf({expr:e,env:t,context:{...n}}):T(e,I.Tuple)?$_({expr:e,env:t,context:{...n}}):T(e,I.Array)?s_({expr:e,env:t,context:{...n}}):T(e,w.__yo_array_fill,2)?Ip({expr:e,env:t,context:{...n}}):T(e,I.Slice)?h_({expr:e,env:t,context:{...n}}):T(e,I.ComptimeList)?u_({expr:e,env:t,context:{...n}}):T(e,I.Future)?d_({expr:e,env:t,context:{...n}}):T(e,I.Concrete)?c_({expr:e,env:t,context:{...n}}):T(e,I.Dyn)?p_({expr:e,env:t,context:{...n}}):T(e,w.comptime_expect_error)?Sp({expr:e,env:t,context:{...n}}):T(e,w.comptime_assert)?xp({expr:e,env:t,context:{...n}}):T(e,w.comptime_fn)?Vp({expr:e,env:t,context:{...n}}):T(e,w.comptime_print)?Wp({expr:e,env:t,context:{...n}}):T(e,w.panic)?Af({expr:e,env:t,context:{...n}}):T(e,w.macro_expand)?Lf({expr:e,env:t,context:{...n}}):T(e,I.op_and)||T(e,I.op_or)?Ap({expr:e,env:t,context:{...n}}):T(e,I.escape)?O_({expr:e,env:t,context:{...n}}):T(e,w.consume)?qp({expr:e,env:t,context:{...n}}):T(e,w.___drop)?yf({expr:e,env:t,context:{...n}}):T(e,w.___dup)?gf({expr:e,env:t,context:{...n}}):T(e,w.__yo_decr_rc)?Sf({expr:e,env:t,context:{...n}}):T(e,w.__yo_incr_rc)?Vf({expr:e,env:t,context:{...n}}):T(e,w.__yo_decr_rc_atomic)?Mf({expr:e,env:t,context:{...n}}):T(e,w.__yo_incr_rc_atomic)?Df({expr:e,env:t,context:{...n}}):T(e,w.__yo_iso_extract)?Bf({expr:e,env:t,context:{...n}}):T(e,w.__yo_iso_dispose)?Gf({expr:e,env:t,context:{...n}}):T(e,w.__yo_arc_dispose)?Wf({expr:e,env:t,context:{...n}}):T(e,w.__yo_drop_array_element)?Hf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dup_array_element)?qf({expr:e,env:t,context:{...n}}):T(e,w.__yo_drop_tuple_element)?Yf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dup_tuple_element)?jf({expr:e,env:t,context:{...n}}):T(e,w.__yo_rc_own)?Of({expr:e,env:t,context:{...n}}):T(e,w.__yo_dyn_drop)?Rf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dyn_dup)?Pf({expr:e,env:t,context:{...n}}):T(e,w.__yo_sometype_drop)?Uf({expr:e,env:t,context:{...n}}):T(e,w.__yo_sometype_dup)?zf({expr:e,env:t,context:{...n}}):T(e,w.__yo_gc_collect)?bf({expr:e,env:t,context:{...n}}):T(e,I.quote)?Ff({expr:e,env:t,context:{...n}}):T(e,I.gensym)?kf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_is_atom)?hf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_is_fn_call)?vf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_get_callee)?Ef({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_get_args)?Tf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_to_string)?$f({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_eq)?Cf({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_car)?Dp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_cdr)?Mp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_cons)?Op({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_append)?Rp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_length)?Pp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_element_type)?Up({expr:e,env:t,context:{...n}}):F(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_"))?Gp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_bool_and,2)||T(e,w.__yo_comptime_bool_or,2)||T(e,w.__yo_comptime_bool_eq,2)||T(e,w.__yo_comptime_bool_neq,2)||T(e,w.__yo_comptime_bool_not,1)||T(e,w.__yo_comptime_bool_to_comptime_string,1)?Np({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_string_concat,2)||T(e,w.__yo_comptime_string_eq,2)||T(e,w.__yo_comptime_string_neq,2)||T(e,w.__yo_comptime_string_lt,2)||T(e,w.__yo_comptime_string_lte,2)||T(e,w.__yo_comptime_string_gt,2)||T(e,w.__yo_comptime_string_gte,2)||T(e,w.__yo_comptime_string_length,1)||T(e,w.__yo_comptime_string_to_upper,1)||T(e,w.__yo_comptime_string_to_lower,1)||T(e,w.__yo_comptime_string_slice)?Hp({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_to_comptime_string,1)?Qf({expr:e,env:t,context:{...n}}):T(e,w.__yo_are_types_compatible,2)?Zf({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_contains_rc_type,1)?Jf({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_can_form_rc_cycle,1)?e_({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_impls,2)?t_({expr:e,env:t,context:{...n}}):T(e,w.__yo_var_print_info,1)?r_({expr:e,env:t,context:{...n}}):T(e,w.__yo_var_is_owning_the_rc_value)?i_({expr:e,env:t,context:{...n}}):T(e,w.__yo_var_has_other_aliases)?o_({expr:e,env:t,context:{...n}}):T(e,w.__yo_process_platform)||T(e,w.__yo_process_arch)?If({expr:e,env:t,context:{...n}}):T(e,I.while)?Va({expr:e,env:t,context:{...n}}):T(e,w.va_start)?n_({expr:e,env:t,context:{...n}}):Fn({expr:e,env:t,context:{...n}})}function Ry(e){let t=e;for(;;){let n=Oo.join(t,"std");if(Oy(n))return n;let r=Oo.dirname(t);if(r===t)break;t=r}return Oo.join(__dirname,"../std")}var J_=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.allowPartialModule=t?.allowPartialModule??!1,this.stdPath=t?.stdPath??Ry(__dirname),this.codeGenratorC=new va,ml(li),Iu(Fp)}getRelativePath(t){let n=t.match(/\/std\/(.+)$/);if(n)return`std/${n[1]}`;let r=t.match(/\/tests\/(.+)$/);return r?`tests/${r[1]}`:null}isWorkspaceModule(t){return!t.includes("/extensions/")&&!t.includes("/.vscode/")}findExtensionDuplicates(t){if(!this.isWorkspaceModule(t))return[];let n=this.getRelativePath(t);if(!n)return[];let r=[];for(let[i]of this.modules)i!==t&&!this.isWorkspaceModule(i)&&this.getRelativePath(i)===n&&r.push(i);if(n.startsWith("std/"))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&!r.includes(i)&&r.push(i);return r}deleteModuleAndDependents(t){let n=this.getDependentModules(t);for(let r of n)Co(r),$o(r),this.clearDependencies(r),Qo(r),this.modules.delete(r);Co(t),$o(t),this.clearDependencies(t),Qo(t),this.modules.delete(t)}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 i=r.pop(),o=this.dependents.get(i);if(o)for(let a of o)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 i=this.dependents.get(r);i&&i.delete(t)}this.dependencies.delete(t)}resetAllState(){for(let t of this.modules.keys())Co(t),$o(t),Qo(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),Ms(),Tu(),Al()}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 i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.findExtensionDuplicates(t);for(let c of o)this.deleteModuleAndDependents(c);let a=t,s=new bo({modulePath:t,stdPath:this.stdPath,loadModule:c=>this.loadModule(c,void 0,a),inputString:n,allowPartialModule:this.allowPartialModule}),l=s.getModuleValue(),u=s.getModuleError();return this.modules.set(t,{moduleValue:l,moduleError:u,evaluator:s}),{moduleValue:l,moduleError:u}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,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:i,debugAsyncAwait:o,allocator:a}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}};export{Ro as Emitter,Ma as IdentifierRegex,J_ as ModuleManager,Da as Operators,se as PlaceholderToken,zy as RAIIToken,Ht as TokenType,Ki as charIsOperator,Ms as clearAllGlobalImplState,$o as clearGenericImplsFromModule,Co as clearImplsFromModule,yE as debug,dl as findMatchingBracketTokenIndex,qt as generateExprFromCode,Gn as stringIsOperator,yl as tokenize};
11119
+ ${k(i)}`});t=p.$.env}return Re(s)&&s.value===!0&&c?(e.$={env:t,pathCollection:[],type:Y.type,value:void 0},e):Re(s)&&s.value===!0?Ma({expr:e,env:t,context:{...n}}):(e.$={env:t,pathCollection:[],type:Y.type,value:l?Y:void 0},e)}}function ed(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var Py=ed("YO_DEBUG_EVAL")||ed("YO_DEBUG_EVAL_PROFILE"),td=globalThis,ji=td.__yoEvalProfilerState??(td.__yoEvalProfilerState={evalCount:0,evalStart:0});function li({expr:e,env:t,context:n}){if(Py&&(ji.evalStart||(ji.evalStart=Date.now()),ji.evalCount++,ji.evalCount%1e5===0&&console.log(`[EVAL] ${ji.evalCount} calls, ${Date.now()-ji.evalStart}ms elapsed`)),U(e))switch(e.token.type){case"identifier":case"operator":return Da({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return V_(e,t,{...n});case"float":return S_(e,t,{...n});case"string":return D_(e,t);case"char":return A_(e,t);case"bool":return L_(e,t);default:throw m({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
11120
+ ${k(e)}`})}else if(T(e,":",2)){let{expr:r}=Va({expr:e,env:t,context:n});return r}else return T(e,":=",2)||T(e,"::",2)?q_({expr:e,env:t,context:n}):T(e,"=",2)?O_({expr:e,env:t,context:n}):T(e,"->",2)?F(e.args[0])&&(T(e.args[0],I.fn)||T(e.args[0],I.unsafe_fn))?ka({expr:e,env:t,context:{...n,isUnsafeFunctionType:T(e.args[0],I.unsafe_fn)}}):F(e.args[0])&&T(e.args[0],I.Fn)?y_({expr:e,env:t,context:{...n}}):Sa({expr:e,env:t,context:{...n}}):T(e,"=>",2)?F(e.args[0])&&T(e.args[0],I.fn)?p_({expr:e,env:t,context:{...n}}):Sa({expr:e,env:t,context:{...n}}):T(e,"=>>",2)?Sa({expr:e,env:t,context:{...n}}):T(e,I.recur)?K_({expr:e,env:t,context:{...n}}):T(e,I.runtime)?X_({expr:e,env:t,context:{...n}}):T(e,I.extern)?z_({expr:e,env:t,context:{...n}}):T(e,I.c_include)?R_({expr:e,env:t,context:{...n}}):T(e,I.test)?Z_({expr:e,env:t,context:{...n}}):T(e,I.cond)?P_({expr:e,env:t,context:{...n}}):T(e,I.match)?H_({expr:e,env:t,context:{...n}}):T(e,I.tuple)?M_({expr:e,env:t,context:{...n}}):T(e,I.array)?F_({expr:e,env:t,context:{...n}}):T(e,I.comptime_list)?I_({expr:e,env:t,context:{...n}}):T(e,I.dyn)?N_({expr:e,env:t,context:{...n}}):T(e,I.struct)?Yi({expr:e,env:t,context:{...n}}):T(e,I.object)?E_({expr:e,env:t,context:{...n}}):T(e,I.newtype)?v_({expr:e,env:t,context:{...n}}):T(e,I.enum)?m_({expr:e,env:t,context:{...n}}):T(e,I.union)?w_({expr:e,env:t,context:{...n}}):T(e,".")?j_({expr:e,env:t,context:{...n}}):T(e,I.begin)?gt({expr:e,env:t,context:{...n},variablesToAdd:[]}):T(e,I.module)?h_({expr:e,env:t,context:{...n}}):T(e,I.trait)?b_({expr:e,env:t,context:{...n}}):T(e,I.Impl)?Af({expr:e,env:t,context:{...n}}):T(e,I.impl)?yu({expr:e,env:t,context:{...n}}):T(e,w.typeof)?J_({expr:e,env:t,context:{...n}}):T(e,w.sizeof)?Zf({expr:e,env:t,context:{...n}}):T(e,w.alignof)?Ip({expr:e,env:t,context:{...n}}):T(e,w.rc)?Df({expr:e,env:t,context:{...n}}):T(e,"<:")?Q_({expr:e,env:t,context:{...n}}):T(e,w.the)?Jf({expr:e,env:t,context:{...n}}):T(e,I.import)?G_({expr:e,env:t,context:{...n},stdPath:n.stdPath}):T(e,I.open)?Y_({expr:e,env:t,context:{...n}}):T(e,I.Ptr,1)?u_({expr:e,env:t,context:{...n}}):T(e,I.Iso,1)?_f({expr:e,env:t,context:{...n}}):T(e,I.Arc,1)?nf({expr:e,env:t,context:{...n}}):T(e,w.__yo_address_of,1)?Vf({expr:e,env:t,context:{...n}}):T(e,I.Tuple)?k_({expr:e,env:t,context:{...n}}):T(e,I.Array)?c_({expr:e,env:t,context:{...n}}):T(e,w.__yo_array_fill,2)?Np({expr:e,env:t,context:{...n}}):T(e,I.Slice)?T_({expr:e,env:t,context:{...n}}):T(e,I.ComptimeList)?f_({expr:e,env:t,context:{...n}}):T(e,I.Future)?g_({expr:e,env:t,context:{...n}}):T(e,I.Concrete)?__({expr:e,env:t,context:{...n}}):T(e,I.Dyn)?d_({expr:e,env:t,context:{...n}}):T(e,w.comptime_expect_error)?Dp({expr:e,env:t,context:{...n}}):T(e,w.comptime_assert)?Sp({expr:e,env:t,context:{...n}}):T(e,w.comptime_fn)?Mp({expr:e,env:t,context:{...n}}):T(e,w.comptime_print)?Hp({expr:e,env:t,context:{...n}}):T(e,w.panic)?Nf({expr:e,env:t,context:{...n}}):T(e,w.macro_expand)?xf({expr:e,env:t,context:{...n}}):T(e,I.op_and)||T(e,I.op_or)?xp({expr:e,env:t,context:{...n}}):T(e,I.escape)?U_({expr:e,env:t,context:{...n}}):T(e,w.consume)?jp({expr:e,env:t,context:{...n}}):T(e,w.___drop)?vf({expr:e,env:t,context:{...n}}):T(e,w.___dup)?Ef({expr:e,env:t,context:{...n}}):T(e,w.__yo_decr_rc)?Mf({expr:e,env:t,context:{...n}}):T(e,w.__yo_incr_rc)?Of({expr:e,env:t,context:{...n}}):T(e,w.__yo_decr_rc_atomic)?Pf({expr:e,env:t,context:{...n}}):T(e,w.__yo_incr_rc_atomic)?Rf({expr:e,env:t,context:{...n}}):T(e,w.__yo_iso_extract)?qf({expr:e,env:t,context:{...n}}):T(e,w.__yo_iso_dispose)?Hf({expr:e,env:t,context:{...n}}):T(e,w.__yo_arc_dispose)?Yf({expr:e,env:t,context:{...n}}):T(e,w.__yo_drop_array_element)?jf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dup_array_element)?Kf({expr:e,env:t,context:{...n}}):T(e,w.__yo_drop_tuple_element)?Xf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dup_tuple_element)?Qf({expr:e,env:t,context:{...n}}):T(e,w.__yo_rc_own)?Uf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dyn_drop)?zf({expr:e,env:t,context:{...n}}):T(e,w.__yo_dyn_dup)?Bf({expr:e,env:t,context:{...n}}):T(e,w.__yo_sometype_drop)?Gf({expr:e,env:t,context:{...n}}):T(e,w.__yo_sometype_dup)?Wf({expr:e,env:t,context:{...n}}):T(e,w.__yo_gc_collect)?Ff({expr:e,env:t,context:{...n}}):T(e,I.quote)?If({expr:e,env:t,context:{...n}}):T(e,I.gensym)?Lf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_is_atom)?Tf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_is_fn_call)?$f({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_get_callee)?Cf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_get_args)?bf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_to_string)?kf({expr:e,env:t,context:{...n}}):T(e,w.__yo_expr_eq)?wf({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_car)?Op({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_cdr)?Rp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_cons)?Pp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_append)?Up({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_length)?zp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_list_element_type)?Bp({expr:e,env:t,context:{...n}}):F(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_"))?qp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_bool_and,2)||T(e,w.__yo_comptime_bool_or,2)||T(e,w.__yo_comptime_bool_eq,2)||T(e,w.__yo_comptime_bool_neq,2)||T(e,w.__yo_comptime_bool_not,1)||T(e,w.__yo_comptime_bool_to_comptime_string,1)?Vp({expr:e,env:t,context:{...n}}):T(e,w.__yo_comptime_string_concat,2)||T(e,w.__yo_comptime_string_eq,2)||T(e,w.__yo_comptime_string_neq,2)||T(e,w.__yo_comptime_string_lt,2)||T(e,w.__yo_comptime_string_lte,2)||T(e,w.__yo_comptime_string_gt,2)||T(e,w.__yo_comptime_string_gte,2)||T(e,w.__yo_comptime_string_length,1)||T(e,w.__yo_comptime_string_to_upper,1)||T(e,w.__yo_comptime_string_to_lower,1)||T(e,w.__yo_comptime_string_slice)?Yp({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_to_comptime_string,1)?e_({expr:e,env:t,context:{...n}}):T(e,w.__yo_are_types_compatible,2)?t_({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_contains_rc_type,1)?n_({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_can_form_rc_cycle,1)?r_({expr:e,env:t,context:{...n}}):T(e,w.__yo_type_impls,2)?i_({expr:e,env:t,context:{...n}}):T(e,w.__yo_var_print_info,1)?a_({expr:e,env:t,context:{...n}}):T(e,w.__yo_var_is_owning_the_rc_value)?s_({expr:e,env:t,context:{...n}}):T(e,w.__yo_var_has_other_aliases)?l_({expr:e,env:t,context:{...n}}):T(e,w.__yo_process_platform)||T(e,w.__yo_process_arch)?Sf({expr:e,env:t,context:{...n}}):T(e,I.while)?Ma({expr:e,env:t,context:{...n}}):T(e,w.va_start)?o_({expr:e,env:t,context:{...n}}):Fn({expr:e,env:t,context:{...n}})}function zy(e){let t=e;for(;;){let n=Oo.join(t,"std");if(Uy(n))return n;let r=Oo.dirname(t);if(r===t)break;t=r}return Oo.join(__dirname,"../std")}var nd=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.allowPartialModule=t?.allowPartialModule??!1,this.stdPath=t?.stdPath??zy(__dirname),this.codeGenratorC=new Ta,yl(li),Nu(Ap)}getRelativePath(t){let n=t.match(/\/std\/(.+)$/);if(n)return`std/${n[1]}`;let r=t.match(/\/tests\/(.+)$/);return r?`tests/${r[1]}`:null}isWorkspaceModule(t){return!t.includes("/extensions/")&&!t.includes("/.vscode/")}findExtensionDuplicates(t){if(!this.isWorkspaceModule(t))return[];let n=this.getRelativePath(t);if(!n)return[];let r=[];for(let[i]of this.modules)i!==t&&!this.isWorkspaceModule(i)&&this.getRelativePath(i)===n&&r.push(i);if(n.startsWith("std/"))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&!r.includes(i)&&r.push(i);return r}deleteModuleAndDependents(t){let n=this.getDependentModules(t);for(let r of n)Co(r),$o(r),this.clearDependencies(r),Qo(r),this.modules.delete(r);Co(t),$o(t),this.clearDependencies(t),Qo(t),this.modules.delete(t)}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 i=r.pop(),o=this.dependents.get(i);if(o)for(let a of o)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 i=this.dependents.get(r);i&&i.delete(t)}this.dependencies.delete(t)}resetAllState(){for(let t of this.modules.keys())Co(t),$o(t),Qo(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),Rs(),Cu(),Il()}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 i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.findExtensionDuplicates(t);for(let c of o)this.deleteModuleAndDependents(c);let a=t,s=new bo({modulePath:t,stdPath:this.stdPath,loadModule:c=>this.loadModule(c,void 0,a),inputString:n,allowPartialModule:this.allowPartialModule}),l=s.getModuleValue(),u=s.getModuleError();return this.modules.set(t,{moduleValue:l,moduleError:u,evaluator:s}),{moduleValue:l,moduleError:u}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,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:i,debugAsyncAwait:o,allocator:a}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}};export{Ro as Emitter,Ra as IdentifierRegex,nd as ModuleManager,Oa as Operators,ae as PlaceholderToken,Wy as RAIIToken,qt as TokenType,Ki as charIsOperator,Rs as clearAllGlobalImplState,$o as clearGenericImplsFromModule,Co as clearImplsFromModule,vE as debug,ml as findMatchingBracketTokenIndex,Ht as generateExprFromCode,Gn as stringIsOperator,gl as tokenize};