@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/cjs/index.cjs +340 -336
- package/out/cjs/yo-cli.cjs +341 -337
- package/out/esm/index.mjs +308 -304
- package/out/types/src/evaluator/calls/trait-type.d.ts +8 -1
- package/out/types/src/evaluator/context.d.ts +8 -1
- package/out/types/src/evaluator/values/impl.d.ts +8 -0
- package/out/types/src/types/definitions.d.ts +4 -0
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/std/collections/array_list.yo +71 -1
- package/std/collections/btree_map.yo +120 -2
- package/std/collections/deque.yo +76 -1
- package/std/collections/hash_map.yo +137 -1
- package/std/collections/hash_set.yo +85 -1
- package/std/collections/linked_list.yo +61 -1
- package/std/collections/priority_queue.yo +70 -1
- package/std/prelude.yo +81 -18
- package/std/string/string.yo +88 -1
package/out/cjs/index.cjs
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Wd=Object.create;var va=Object.defineProperty;var qd=Object.getOwnPropertyDescriptor;var Hd=Object.getOwnPropertyNames;var Yd=Object.getPrototypeOf,jd=Object.prototype.hasOwnProperty;var Kd=(e,t)=>{for(var n in t)va(e,n,{get:t[n],enumerable:!0})},nu=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Hd(t))!jd.call(e,i)&&i!==n&&va(e,i,{get:()=>t[i],enumerable:!(r=qd(t,i))||r.enumerable});return e};var $s=(e,t,n)=>(n=e!=null?Wd(Yd(e)):{},nu(t||!e||!e.__esModule?va(n,"default",{value:e,enumerable:!0}):n,e)),Xd=e=>nu(va({},"__esModule",{value:!0}),e);var Vg={};Kd(Vg,{Emitter:()=>So,IdentifierRegex:()=>Ea,ModuleManager:()=>tu,Operators:()=>Ta,PlaceholderToken:()=>ke,RAIIToken:()=>Qd,TokenType:()=>En,charIsOperator:()=>Gi,clearAllGlobalImplState:()=>Ya,clearGenericImplsFromModule:()=>mo,clearImplsFromModule:()=>yo,debug:()=>ey,findMatchingBracketTokenIndex:()=>Cs,generateExprFromCode:()=>$n,stringIsOperator:()=>mr,tokenize:()=>ks});module.exports=Xd(Vg);var So=class{constructor(){this.headers="";this.declarations="";this.code=""}emit(t,n=""){return this.code+=n+t,this.code}emitLine(t,n=""){return this.code+=n+t+`
|
|
2
2
|
`,this.code}emitHeaderLine(t,n=""){return this.headers+=n+t+`
|
|
3
3
|
`,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
|
|
4
4
|
`,this.declarations}print(){return this.headers+`
|
|
5
5
|
`+this.declarations+`
|
|
6
|
-
`+this.code.trim()}};var
|
|
7
|
-
${
|
|
6
|
+
`+this.code.trim()}};var dc=require("node:fs"),mc=$s(require("path"));var tr=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
|
+
${ru({token:n})}`).join(`
|
|
8
8
|
|
|
9
|
-
`)}};function
|
|
9
|
+
`)}};function ru({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
|
-
${
|
|
15
|
-
`+n.message:"")}],r,i)}function
|
|
14
|
+
${ru({token:e})}`;return new Rn([{token:e,errorMessage:o+(n!=null&&n.message?`
|
|
15
|
+
`+n.message:"")}],r,i)}function St(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new Rn(e,t,n)}var En=(k=>(k.Operator="operator",k.Dot=".",k.LParen="(",k.RParen=")",k.LBracket="[",k.RBracket="]",k.LCurlyBracket="{",k.RCurlyBracket="}",k.Char="char",k.String="string",k.Identifier="identifier",k.Integer="integer",k.Float="float",k.Bool="bool",k.Semicolon=";",k.Comma=",",k.SingleLineComment="single_line_comment",k.MultiLineComment="multi_line_comment",k.Whitespace="whitespace",k.TemplateString="template_string",k))(En||{}),ke={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}},Qd={modulePath:"drop",inputString:"drop",type:"identifier",value:"drop",position:{row:0,column:0,character:0}},Ta=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function Gi(e){return Ta.includes(e)}function mr(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!Gi(r)){t=!1;break}}return t}var Ea=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function Cs(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 bs;function iu(e){bs=e}function M({expr:e,env:t,context:n}){if(!bs)throw new Error("Internal Error: evaluateExpression function is not set.");return bs({expr:e,env:t,context:n})}function ks(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(;Gi(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 f="",p=o,_=r;for(;e[p]===" "||e[p]===" "||e[p]===`
|
|
17
17
|
`||e[p]==="\r";)f+=e[p],e[p]===`
|
|
18
18
|
`&&(r++,i=p+1),p=p+1;n.push({type:"whitespace",value:f,position:{row:_,column:s,character:l},modulePath:t,inputString:e}),o=p-1;break}case"/":if(e[o+1]==="/"){let f="",p=o;for(;e[p]!==`
|
|
19
19
|
`&&p<e.length;)f+=e[p],p=p+1;n.push({type:"single_line_comment",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=p-1}else if(e[o+1]==="*"){let f=o,p="",_=r,d=1;for(p+=e[f],f++,p+=e[f],f++;d>0&&f<e.length;){if(e[f]===`
|
|
20
20
|
`&&(i=f+1,r++),e[f]==="/"&&e[f+1]==="*"){d++,p+="/*",f+=2;continue}if(e[f]==="*"&&e[f+1]==="/"){d--,p+="*/",f+=2;continue}p+=e[f],f++}if(d>0)throw new tr({message:"Unterminated multi-line comment",characterIndex:e.length-1,row:r});n.push({type:"multi_line_comment",value:p,position:{row:_,column:s,character:l},modulePath:t,inputString:e}),o=f-1}else throw new tr({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 f="";for(let p=o+1;p<e.length;p++){if(e[p]==="\\"){f+=e[p],p=p+1,f+=e[p];continue}if(e[p]==="'"){o=p;break}f+=e[p]}if(f.length===1||f.length===2&&f[0]==="\\")n.push({type:"char",value:`'${f}'`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});else throw new tr({message:`Invalid char '${f}', expected char to have length 1.`,characterIndex:o,row:r});break}case'"':{let f="";for(let p=o+1;p<e.length;p++){if(e[p]==="\\"){f+=e[p],p=p+1,f+=e[p];continue}if(e[p]==='"'){o=p;break}f+=e[p]}n.push({type:"string",value:`"${f}"`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case"`":{let f="",p=0,_=o+1;for(;_<e.length;){if(e[_]==="\\"&&_+1<e.length){let d=e[_+1];if(d==="$"){f+="\\$",_=_+2;continue}else{switch(_=_+1,d){case"n":f+=`
|
|
21
21
|
`;break;case"t":f+=" ";break;case"r":f+="\r";break;case"\\":f+="\\";break;case'"':f+='"';break;case"'":f+="'";break;case"`":f+="`";break;case"0":f+="\0";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+="\v";break;default:f+="\\",f+=d;break}_=_+1;continue}}if(p===0&&e[_]==="$"&&e[_+1]==="{"){f+="${",_=_+2,p=1;continue}if(p>0){e[_]==="{"?p=p+1:e[_]==="}"&&(p=p-1),f+=e[_],_=_+1;continue}if(e[_]==="`"){o=_;break}e[_]===`
|
|
22
|
-
`&&(r++,i=_+1),f+=e[_],_=_+1}if(_>=e.length&&e[_]!=="`")throw new tr({message:"Unterminated template string",characterIndex:o,row:r});n.push({type:"template_string",value:f,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 f=o,p=a;o=o+1;let _=/[0-9_]/;for(e[o-1]==="0"&&typeof e[o]=="string"&&(e[o]==="x"||e[o]==="X"?(p+=e[o],o=o+1,_=/[0-9A-Fa-f]/):e[o]==="b"||e[o]==="B"?(p+=e[o],o=o+1,_=/[01]/):(e[o]==="o"||e[o]==="O")&&(p+=e[o],o=o+1,_=/[0-7]/));typeof e[o]=="string"&&_.test(e[o]);)p+=e[o],o=o+1;if(e[o]==="."&&e[f-1]!=="."&&(e[o+1]??"").match(/[0-9]/)){for(p+=e[o],o=o+1;typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)p+=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(p+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(p+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)p+=e[o],o=o+1;n.push({type:"float",value:p,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(p+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(p+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)p+=e[o],o=o+1;n.push({type:"integer",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=o-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let f=a,p=o;for(o=o+1;typeof e[o]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[o]);)f+=e[o],o=o+1;if(o=o-1,(e[o+1]==="!"||e[o+1]==="?")&&Ea.test(f+e[o+1])&&(o=o+1,f+=e[o]),Ea.test(f))switch(f){case"true":case"false":n.push({type:"bool",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new tr({message:`Invalid identifier ${f}`,characterIndex:p,row:r})}else throw new tr({message:`Unexpected character ${a}`,characterIndex:o,row:r});break}}return n}var Wi=class e{constructor({modulePath:t,inputString:n}){this.hasTemplateString=!1;this.modulePath=t,this.inputString=n,this.tokens=
|
|
22
|
+
`&&(r++,i=_+1),f+=e[_],_=_+1}if(_>=e.length&&e[_]!=="`")throw new tr({message:"Unterminated template string",characterIndex:o,row:r});n.push({type:"template_string",value:f,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 f=o,p=a;o=o+1;let _=/[0-9_]/;for(e[o-1]==="0"&&typeof e[o]=="string"&&(e[o]==="x"||e[o]==="X"?(p+=e[o],o=o+1,_=/[0-9A-Fa-f]/):e[o]==="b"||e[o]==="B"?(p+=e[o],o=o+1,_=/[01]/):(e[o]==="o"||e[o]==="O")&&(p+=e[o],o=o+1,_=/[0-7]/));typeof e[o]=="string"&&_.test(e[o]);)p+=e[o],o=o+1;if(e[o]==="."&&e[f-1]!=="."&&(e[o+1]??"").match(/[0-9]/)){for(p+=e[o],o=o+1;typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)p+=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(p+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(p+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)p+=e[o],o=o+1;n.push({type:"float",value:p,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(p+=e[o],o=o+1,(e[o]==="+"||e[o]==="-")&&(p+=e[o],o=o+1);typeof e[o]=="string"&&/[0-9_]/.test(e[o]);)p+=e[o],o=o+1;n.push({type:"integer",value:p,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=o-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let f=a,p=o;for(o=o+1;typeof e[o]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[o]);)f+=e[o],o=o+1;if(o=o-1,(e[o+1]==="!"||e[o+1]==="?")&&Ea.test(f+e[o+1])&&(o=o+1,f+=e[o]),Ea.test(f))switch(f){case"true":case"false":n.push({type:"bool",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new tr({message:`Invalid identifier ${f}`,characterIndex:p,row:r})}else throw new tr({message:`Unexpected character ${a}`,characterIndex:o,row:r});break}}return n}var Wi=class e{constructor({modulePath:t,inputString:n}){this.hasTemplateString=!1;this.modulePath=t,this.inputString=n,this.tokens=ks(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===")"&&Cs(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 f=r.substring(u,c);i.push({type:"expr",value:f}),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},f={tag:"Atom",token:c},p={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:p,args:[],token:t}}else{let f=new e({modulePath:t.modulePath,inputString:l.value}).getProgram();if(f.length===0)throw m({token:t,errorMessage:"Empty expression in template string interpolation"});let p=f[0],_={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:_,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}){var a;let r=n;if(t[n].type!=="(")throw m({token:t[n],errorMessage:"Expected left paren"});if(((a=t[n+1])==null?void 0:a.type)===")")return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:V.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 s,l=[o];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!s||s===",")s=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!s||s===";")s=";";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:c,index:f}=this.parseExpression({tokens:t,index:n});l.push(c),n=f}let u=s===";"||!s;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:u?V.Tuple[0]:V.tuple[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:l,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw 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?V.Array[0]:l?V.Slice[0]:V.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:V.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(Y(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:V.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:ke,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 Y(t)?t.token.position.column:Math.min(this.getExprMinimumColumnNumber(t.func),...t.args.map(n=>this.getExprMinimumColumnNumber(n)))}parsePrimaryEnd({primaryExpr:t,tokens:n,index:r}){var u,c,f,p,_;let i=this.skipWhitespace(n,r),o=i!==r,a=((u=n[r-1])==null?void 0:u.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&&((c=n[i+1])==null?void 0:c.type)!=="whitespace"){let{expr:d,index:y}=this.parsePrimary({tokens:n,index:l?r:r+1});r=y;let g={expr:{tag:"FnCall",func:{tag:"Atom",token:l?t.token:s},args:l?[d]:[t,d],isInfix:!l,token:l?t.token:s},index:r};for(;n[r]&&n[r].type===".";){let{expr:h,index:v}=this.parsePrimary({tokens:n,index:r+1});g={expr:{tag:"FnCall",func:{tag:"Atom",token:s},args:[g.expr,h],isInfix:!0,token:s},index:v},r=v}return this.parsePrimaryEnd({primaryExpr:g.expr,tokens:n,index:g.index})}else if((s.type==="operator"||s.type==="."&&!o)&&((f=n[r+1])==null?void 0:f.type)!=="("){let d=this.skipWhitespace(n,r+1),{expr:y,index:g}=this.parseExpression({tokens:n,index:d});if(y.tag==="FnCall"&&y.isInfix&&y.func.tag==="Atom"&&y.func.token.type!=="."&&!this.isParenthesizedExpression(n,d,g-1)){let h=`Ambiguous operator precedence.
|
|
24
24
|
Please use parentheses to clarify:
|
|
25
25
|
|
|
@@ -39,10 +39,10 @@ ${e}
|
|
|
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=>w(r)).join(`
|
|
41
41
|
`)}
|
|
42
|
-
`);return n[0]}function Vo(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
|
|
43
|
-
Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(Wt(a))continue;let s=[...n,o],l=en(a,s);vt(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?Un(i):r?Nt(e):Nt(e)}function en(e,t=[]){if(et(e))return Nt(e);if(Vo(e))return Nt(e);if(vt(e))return Un(e.level+1);if(zt(e)||sn(e)||tn(e)||ln(e))return Nt(e);if(nn(e))return Nt(e);if(ae(e))return Nt(e);if(Jt(e))return Nt(e);if(We(e))return en(e.childType,t);if(Et(e))return Nt(e);if(He(e))return Ca(e,e.fields,t);if(Ae(e))return Ca(e,e.fields,t);if(Me(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Ca(e,n,t)}else{if(Rt(e))return Ca(e,e.fields,t);if(Ye(e))return Un(1,e);if(Je(e))return Un(1,e);if(G(e))return e.parentType;if(Xe(e))return Nt(e);if(on(e))return Nt(e);if(rn(e))return Nt(e);if(bn(e))return Nt(e);if(Or(e))return Nt(e);if(Gt(e))return Un(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function au(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function tt(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return S(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(tt).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(tt).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(tt).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(tt).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mr(r)&&(r=`(${r})`),`${r}: ${tt(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==null?void 0:t.fields[r].label)??"_";return mr(i)&&(i=`(${i})`),`${i}: ${tt(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 mr(r)&&(r=`(${r})`),`${r}: ${tt(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mr(r)&&(r=`(${r})`),`${r}: ${tt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${w(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${S(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return lr(t)?`<ptr to ${tt(t.elements[e.targetIndex])}>`:`<ptr to ${tt(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function H(e){return(e==null?void 0:e.tag)==="Type"}function Jn(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function ka(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function Tt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function br(e){return(e==null?void 0:e.tag)==="ComptimeList"}function su(e){return br(e)&&nn(e.type.childType)}function ft(e){return(e==null?void 0:e.tag)==="ComptimeInt"||(e==null?void 0:e.tag)==="ComptimeFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function _t(e){return(e==null?void 0:e.tag)==="Bool"}function be(e){return(e==null?void 0:e.tag)==="Function"}function xe(e){return(e==null?void 0:e.tag)==="Unknown"}function zn(e){return(e==null?void 0:e.tag)==="Tuple"}function Hn(e){return(e==null?void 0:e.tag)==="Struct"}function lr(e){return(e==null?void 0:e.tag)==="Array"}function ba(e){return(e==null?void 0:e.tag)==="Slice"}function fn(e){return(e==null?void 0:e.tag)==="Enum"}function Bt(e){return(e==null?void 0:e.tag)==="Module"}function Ht(e){return(e==null?void 0:e.tag)==="Trait"}function Yi(e){return(e==null?void 0:e.tag)==="Ptr"}function xn(e){return(e==null?void 0:e.tag)==="Expr"}function he(e){return{tag:"Type",type:en(e),value:e}}function Mn(e){return{tag:"ComptimeString",type:yn(),value:e}}function ur(e,t){return{tag:"ComptimeList",type:jo(e),elements:t}}function kn(e,t){let n;if(e==="ComptimeInt")n=ti();else if(e==="ComptimeFloat")n=Ki();else if(e==="U8")n=Qi();else if(e==="I8")n=Zi();else if(e==="U16")n=Ji();else if(e==="I16")n=eo();else if(e==="U32")n=to();else if(e==="I32")n=ni();else if(e==="U64")n=no();else if(e==="I64")n=ro();else if(e==="F32")n=io();else if(e==="F64")n=ri();else if(e==="Usize")n=qt();else if(e==="Isize")n=Xi();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function kr(e){return kn("ComptimeInt",e)}function wa(e){return kn("ComptimeFloat",e)}function Mt(e){return{tag:"Bool",type:Ct(),value:e}}function le(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(vt(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${S(e)}`);let o=Kn(e,t,{recursiveTypeRef:n,env:r,context:i});return he(o)}return{tag:"Unknown",type:e,variableName:t}}function cr(e,t){return{tag:"Struct",type:e,fields:t}}function Fa(e,t){return{tag:"Module",type:e,fields:t}}function ji(e,t){return{tag:"Trait",type:e,fields:t}}function La(e,t){return{tag:"Tuple",type:e,fields:t}}function hi(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function ei(e,t){return{tag:"Array",type:e,elements:t}}function Aa(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function fr(e){return{tag:"Expr",type:On(),value:e}}function ks(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function an(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 ie({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(Tt(n)&&Tt(r))return n.value===r.value;if(br(n)&&br(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!an({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(ft(n)&&ft(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(_t(n)&&_t(r))return n.value===r.value;if(lr(n)&&lr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!an({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(ba(n)&&ba(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(!an({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(zn(n)&&zn(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Hn(n)&&Hn(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(fn(n)&&fn(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Bt(n)&&Bt(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Ht(n)&&Ht(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(xn(n)&&xn(r))return n.value===r.value||Ia(n.value,r.value);if(xe(n)&&xe(r)){let i,o;if(n.variableName){let a=pe(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!xe(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=pe(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!xe(s.value[0])&&(o=s.value[0])}}return i&&o?an({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:ie({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(xe(n)&&!xe(r)){if(n.variableName){let i=pe(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!xe(o.value[0]))return an({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!xe(n)&&xe(r)){if(r.variableName){let i=pe(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!xe(o.value[0]))return an({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return Yi(n)&&Yi(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Fr(e,t){return e?Ti(e,t):!1}function Lr(e,t){return e?Kd(e,t):!1}function Ti(e,t){return hr(e,t)&&!Br(e,t)}function Kd(e,t){let n=hr(e,t),r=Br(e,t);return!n&&r}function Be(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(Pn(e))return!0;switch(e.tag){case"Array":return Be(e.childType,t);case"Tuple":return e.fields.some(n=>Be(n.type,t));case"Union":return e.fields.some(n=>Be(n.type,t));case"Struct":return e.fields.some(n=>Be(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Be(i.type,t))});case"Iso":return Be(e.childType,t);case"Arc":return Be(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return qe(n)?!0:n.resolvedConcreteType?Be(n.resolvedConcreteType,t):!0}default:return!1}}function je(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),G(e))return e.isExtern?!1:e.resolvedConcreteType?je(e.resolvedConcreteType,t):!(wn(e)||qe(e));switch(e.tag){case"Array":return je(e.childType,t);case"Tuple":return e.fields.some(n=>je(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&je(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>je(i.type,t))});case"Union":return e.fields.some(n=>je(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>je(r.type,t))||je(n.return.type,t)}case"Module":return e.fields.some(n=>je(n.type,t));case"Ptr":return je(e.childType,t);default:return!1}}function Rr(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),We(e)?xe(e.length)?!0:Rr(e.childType,t):Xe(e)||Et(e)?Rr(e.childType,t):He(e)?e.fields.some(n=>Rr(n.type,t)):Ae(e)?e.fields.some(n=>Rr(n.type,t)):Me(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Rr(i.type,t))}):Rt(e)?e.fields.some(n=>Rr(n.type,t)):!1)}function Fs(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),G(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=>{var a;(a=o.fields)==null||a.forEach(s=>r(s.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 ao(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return xe(t.length)||ao(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?ao(t.isFn.callType):!1}default:return!1}}function Pt({type:e,expectedType:t,expr:n,env:r}){let i;if(zt(e))i=ni();else if(sn(e))i=ri();else if(tn(e))t&&(Xe(t)&&(yr(t.childType)||Hi(t.childType))||Et(t))&&(i=t),i||(i=fu(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function ws(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=S(e.type,t),i=e.exprs.defaultValueExpr?w(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function oo(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?tt(e.defaultValue):"",i=e.assignedValue?tt(e.assignedValue):"";return r?`(${n}: ${S(e.type,t)}) ?= ${r}`:i?`(${n}: ${S(e.type,t)}) = ${i}`:`${n}: ${S(e.type,t)}`}function lu(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?tt(e.defaultValue):"",i=e.assignedValue?tt(e.assignedValue):"";return r?`(${n} : ${S(e.type,t)}) ?= ${r}`:i?`(${n} : ${S(e.type,t)}) = ${i}`:`${n} : ${S(e.type,t)}`}function uu(e,t=new Set){var f;let n=e.parameters.map(p=>ws(p,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(p=>ws(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=S(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})`:ws(p,t)).join(", ")})`:"",l=[r,n,s,i].filter(p=>!!p).join(", "),u=(f=e.SelfType)==null?void 0:f.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function S(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 Xd(e,t)}finally{e.id&&t.delete(e.id)}}function Xd(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`[${S(e.childType,t)}; ${tt(e.length)}]`;case"Slice":return`[${S(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>oo(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=>oo(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=>oo(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=>oo(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=>lu(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(Jt(n))return`Fn${uu(n.isFn.callType,t).slice(2)}`;if(bn(n)){let i=[S(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(S(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=>lu(i,t)).join(", ")})`,n.receiverType&&(r=`(${S(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:uu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return w(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(S(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${S(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${S(e.childType,t)})`;case"Iso":return`Iso(${S(e.childType,t)})`;case"Arc":return`Arc(${S(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${S(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${S(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(S(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${S(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var cu=64;function Na(){return cu}function Sa(){return cu/8}function Qd(e){let t=ii(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(ft(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function Zd(e){let t=0;for(let n of e.fields){let r=ii(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function Jd(e){let t=0;for(let n of e.fields){let r=ii(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function em(e){let t=0,n=0;for(let d of e.variants){let y=0;if(d.fields)for(let g of d.fields){let h=ii(g.type);if(h===null)return null;if(h===-1)return-1;y+=h;let v=Pr(g.type);if(v===null)return null;n=Math.max(n,v*8)}t=Math.max(t,y)}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,f=c/8,p=a/8,_=(p-f%p)%p*8;return c+_}function tm(e){let t=0;for(let n of e.fields){let r=ii(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Pr(e){if(G(e))return null;if(Se(e)||vt(e)||zt(e)||sn(e)||tn(e)||ln(e)||Ye(e)||Je(e)||nn(e))return 1;if(Wn(e))return 1;if(Do(e)||Mo(e))return Sa();if(yr(e)||Oo(e))return 1;if(Ro(e)||Po(e))return 2;if(Uo(e)||zo(e))return 4;if(Bo(e)||Go(e))return 8;if(Wo(e))return 4;if(Ho(e))return 8;if(We(e))return Pr(e.childType);if(He(e)){let t=1;for(let n of e.fields){let r=Pr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ae(e)){if(e.isReferenceSemantics)return Sa();if(e.isNewtype)return Pr(e.fields[0].type);let t=1;for(let n of e.fields){let r=Pr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Me(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Pr(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(Rt(e)){let t=1;for(let n of e.fields){let r=Pr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(ae(e))return Sa();if(Xe(e))return Sa()}return null}function ii(e){return G(e)?null:Se(e)||vt(e)||zt(e)||sn(e)||tn(e)||ln(e)||Ye(e)||Je(e)||nn(e)?0:Wn(e)?8:Do(e)||Mo(e)?Na():yr(e)||Oo(e)?8:Ro(e)||Po(e)?16:Uo(e)||zo(e)?32:Bo(e)||Go(e)?64:Wo(e)?32:Ho(e)?64:We(e)?Qd(e):He(e)?Zd(e):Ae(e)?e.isReferenceSemantics?Na():e.isNewtype?ii(e.fields[0].type):Jd(e):Me(e)?em(e):Rt(e)?tm(e):ae(e)||Xe(e)?Na():null}function Ur(e,t){if(Or(e))throw xt([{token:t,errorMessage:`Cannot use 'void' type here.
|
|
42
|
+
`);return n[0]}function Vo(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 xe(e){return(e==null?void 0:e.tag)==="unit"}function zt(e){return(e==null?void 0:e.tag)==="comptime_int"}function ln(e){return(e==null?void 0:e.tag)==="comptime_float"}function tn(e){return(e==null?void 0:e.tag)==="comptime_string"}function un(e){return(e==null?void 0:e.tag)==="ComptimeList"}function gi(e){return un(e)&&nn(e.childType)}function Wn(e){return(e==null?void 0:e.tag)==="bool"}function Do(e){return(e==null?void 0:e.tag)==="usize"}function Mo(e){return(e==null?void 0:e.tag)==="isize"}function yr(e){return(e==null?void 0:e.tag)==="u8"}function Oo(e){return(e==null?void 0:e.tag)==="i8"}function Ro(e){return(e==null?void 0:e.tag)==="u16"}function Po(e){return(e==null?void 0:e.tag)==="i16"}function Uo(e){return(e==null?void 0:e.tag)==="u32"}function zo(e){return(e==null?void 0:e.tag)==="i32"}function Bo(e){return(e==null?void 0:e.tag)==="u64"}function Go(e){return(e==null?void 0:e.tag)==="i64"}function Wo(e){return(e==null?void 0:e.tag)==="f32"}function qo(e){return(e==null?void 0:e.tag)==="f64"}function nn(e){return(e==null?void 0:e.tag)==="Expr"}function We(e){return(e==null?void 0:e.tag)==="Array"}function Et(e){return(e==null?void 0:e.tag)==="Slice"}function qe(e){return(e==null?void 0:e.tag)==="Tuple"}function Rt(e){return(e==null?void 0:e.tag)==="Union"}function Me(e){return(e==null?void 0:e.tag)==="Enum"}function Ie(e){return(e==null?void 0:e.tag)==="Struct"}function qt(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function Ho(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function je(e){return(e==null?void 0:e.tag)==="Module"}function Je(e){return(e==null?void 0:e.tag)==="Trait"}function Jt(e){return Je(e)&&e.isFn!==void 0}function ae(e){return(e==null?void 0:e.tag)==="Function"}function Yo(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function gt(e){return(e==null?void 0:e.tag)==="Type"}function ou(e){return gt(e)&&e.tag==="Type"&&e.level===0}function G(e){return(e==null?void 0:e.tag)==="SomeType"}function Xe(e){return(e==null?void 0:e.tag)==="Ptr"}function on(e){return(e==null?void 0:e.tag)==="Iso"}function rn(e){return(e==null?void 0:e.tag)==="Arc"}function et(e){return(e==null?void 0:e.tag)==="Dyn"}function Pn(e){if(G(e)){let t=e;if(He(t))return!0;if(t.resolvedConcreteType)return Pn(t.resolvedConcreteType)}return qt(e)||et(e)||on(e)||rn(e)}function Zr(e){return(e==null?void 0:e.tag)==="u8"||(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="u16"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="u32"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="u64"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="usize"||(e==null?void 0:e.tag)==="isize"}function Jr(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function au(e){return(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="isize"}function qi(e){return(e==null?void 0:e.tag)==="char"}function Rr(e){return(e==null?void 0:e.tag)==="void"}function bn(e){return Je(e)&&e.isFuture!==void 0}function $a(e){return Je(e)&&e.isConcrete!==void 0}function gr(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 jn(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(i=>i.isCompileTimeOnly)||e.forallParameters.length>0||e.implicitParameters.length>0,n=e.parameters.some(i=>!i.isCompileTimeOnly&&G(i.type)&&!He(i.type));return t||n}function Hi(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(i=>i.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(i=>!i.isCompileTimeOnly&&G(i.type)&&!He(i.type));return t||n}function ws(e){var n;let t=e.type;return t?jn(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function Zn(e){var t;return qt(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function Gt(e){return(e==null?void 0:e.tag)==="EffectsRow"}function Ca(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(qt(a))continue;let s=[...n,o],l=en(a,s);gt(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?Un(i):r?It(e):It(e)}function en(e,t=[]){if(et(e))return It(e);if(Vo(e))return It(e);if(gt(e))return Un(e.level+1);if(zt(e)||ln(e)||tn(e)||un(e))return It(e);if(nn(e))return It(e);if(ae(e))return It(e);if(Jt(e))return It(e);if(We(e))return en(e.childType,t);if(Et(e))return It(e);if(qe(e))return Ca(e,e.fields,t);if(Ie(e))return Ca(e,e.fields,t);if(Me(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Ca(e,n,t)}else{if(Rt(e))return Ca(e,e.fields,t);if(je(e))return Un(1,e);if(Je(e))return Un(1,e);if(G(e))return e.parentType;if(Xe(e))return It(e);if(on(e))return It(e);if(rn(e))return It(e);if(bn(e))return It(e);if(Rr(e))return It(e);if(Gt(e))return Un(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function su(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function tt(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return S(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(tt).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(tt).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(tt).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(tt).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mr(r)&&(r=`(${r})`),`${r}: ${tt(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==null?void 0:t.fields[r].label)??"_";return mr(i)&&(i=`(${i})`),`${i}: ${tt(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 mr(r)&&(r=`(${r})`),`${r}: ${tt(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mr(r)&&(r=`(${r})`),`${r}: ${tt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${w(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${S(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return lr(t)?`<ptr to ${tt(t.elements[e.targetIndex])}>`:`<ptr to ${tt(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function q(e){return(e==null?void 0:e.tag)==="Type"}function Jn(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function ka(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function Tt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function br(e){return(e==null?void 0:e.tag)==="ComptimeList"}function lu(e){return br(e)&&nn(e.type.childType)}function ft(e){return(e==null?void 0:e.tag)==="ComptimeInt"||(e==null?void 0:e.tag)==="ComptimeFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function _t(e){return(e==null?void 0:e.tag)==="Bool"}function be(e){return(e==null?void 0:e.tag)==="Function"}function Ve(e){return(e==null?void 0:e.tag)==="Unknown"}function zn(e){return(e==null?void 0:e.tag)==="Tuple"}function qn(e){return(e==null?void 0:e.tag)==="Struct"}function lr(e){return(e==null?void 0:e.tag)==="Array"}function ba(e){return(e==null?void 0:e.tag)==="Slice"}function _n(e){return(e==null?void 0:e.tag)==="Enum"}function Bt(e){return(e==null?void 0:e.tag)==="Module"}function Wt(e){return(e==null?void 0:e.tag)==="Trait"}function Yi(e){return(e==null?void 0:e.tag)==="Ptr"}function Sn(e){return(e==null?void 0:e.tag)==="Expr"}function ye(e){return{tag:"Type",type:en(e),value:e}}function Mn(e){return{tag:"ComptimeString",type:gn(),value:e}}function ur(e,t){return{tag:"ComptimeList",type:jo(e),elements:t}}function kn(e,t){let n;if(e==="ComptimeInt")n=ti();else if(e==="ComptimeFloat")n=Ki();else if(e==="U8")n=Qi();else if(e==="I8")n=Zi();else if(e==="U16")n=Ji();else if(e==="I16")n=eo();else if(e==="U32")n=to();else if(e==="I32")n=ni();else if(e==="U64")n=no();else if(e==="I64")n=ro();else if(e==="F32")n=io();else if(e==="F64")n=ri();else if(e==="Usize")n=Ht();else if(e==="Isize")n=Xi();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function kr(e){return kn("ComptimeInt",e)}function wa(e){return kn("ComptimeFloat",e)}function Mt(e){return{tag:"Bool",type:Ct(),value:e}}function le(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(gt(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${S(e)}`);let o=Kn(e,t,{recursiveTypeRef:n,env:r,context:i});return ye(o)}return{tag:"Unknown",type:e,variableName:t}}function cr(e,t){return{tag:"Struct",type:e,fields:t}}function Fa(e,t){return{tag:"Module",type:e,fields:t}}function ji(e,t){return{tag:"Trait",type:e,fields:t}}function La(e,t){return{tag:"Tuple",type:e,fields:t}}function hi(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function ei(e,t){return{tag:"Array",type:e,elements:t}}function Aa(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function fr(e){return{tag:"Expr",type:On(),value:e}}function Fs(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function an(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 ie({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(Tt(n)&&Tt(r))return n.value===r.value;if(br(n)&&br(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!an({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(ft(n)&&ft(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(_t(n)&&_t(r))return n.value===r.value;if(lr(n)&&lr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!an({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(ba(n)&&ba(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(!an({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(zn(n)&&zn(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(qn(n)&&qn(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(_n(n)&&_n(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Bt(n)&&Bt(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Wt(n)&&Wt(r)){if(n.fields.length!==r.fields.length||!ie({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(!an({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Sn(n)&&Sn(r))return n.value===r.value||Ia(n.value,r.value);if(Ve(n)&&Ve(r)){let i,o;if(n.variableName){let a=pe(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ve(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=pe(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ve(s.value[0])&&(o=s.value[0])}}return i&&o?an({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:ie({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Ve(n)&&!Ve(r)){if(n.variableName){let i=pe(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Ve(o.value[0]))return an({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Ve(n)&&Ve(r)){if(r.variableName){let i=pe(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Ve(o.value[0]))return an({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return Yi(n)&&Yi(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Fr(e,t){return e?Ti(e,t):!1}function Lr(e,t){return e?Zd(e,t):!1}function Ti(e,t){return hr(e,t)&&!Gr(e,t)}function Zd(e,t){let n=hr(e,t),r=Gr(e,t);return!n&&r}function Be(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(Pn(e))return!0;switch(e.tag){case"Array":return Be(e.childType,t);case"Tuple":return e.fields.some(n=>Be(n.type,t));case"Union":return e.fields.some(n=>Be(n.type,t));case"Struct":return e.fields.some(n=>Be(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Be(i.type,t))});case"Iso":return Be(e.childType,t);case"Arc":return Be(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return He(n)?!0:n.resolvedConcreteType?Be(n.resolvedConcreteType,t):!0}default:return!1}}function Ye(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),G(e))return e.isExtern?!1:e.resolvedConcreteType?Ye(e.resolvedConcreteType,t):!(wn(e)||He(e));switch(e.tag){case"Array":return Ye(e.childType,t);case"Tuple":return e.fields.some(n=>Ye(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Ye(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Ye(i.type,t))});case"Union":return e.fields.some(n=>Ye(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ye(r.type,t))||Ye(n.return.type,t)}case"Module":return e.fields.some(n=>Ye(n.type,t));case"Ptr":return Ye(e.childType,t);default:return!1}}function Pr(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),We(e)?Ve(e.length)?!0:Pr(e.childType,t):Xe(e)||Et(e)?Pr(e.childType,t):qe(e)?e.fields.some(n=>Pr(n.type,t)):Ie(e)?e.fields.some(n=>Pr(n.type,t)):Me(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Pr(i.type,t))}):Rt(e)?e.fields.some(n=>Pr(n.type,t)):!1)}function As(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),G(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=>{var a;(a=o.fields)==null||a.forEach(s=>r(s.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 ao(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Ve(t.length)||ao(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?ao(t.isFn.callType):!1}default:return!1}}function Pt({type:e,expectedType:t,expr:n,env:r}){let i;if(zt(e))i=ni();else if(ln(e))i=ri();else if(tn(e))t&&(Xe(t)&&(yr(t.childType)||qi(t.childType))||Et(t))&&(i=t),i||(i=_u(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function Ls(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=S(e.type,t),i=e.exprs.defaultValueExpr?w(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function oo(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?tt(e.defaultValue):"",i=e.assignedValue?tt(e.assignedValue):"";return r?`(${n}: ${S(e.type,t)}) ?= ${r}`:i?`(${n}: ${S(e.type,t)}) = ${i}`:`${n}: ${S(e.type,t)}`}function uu(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?tt(e.defaultValue):"",i=e.assignedValue?tt(e.assignedValue):"";return r?`(${n} : ${S(e.type,t)}) ?= ${r}`:i?`(${n} : ${S(e.type,t)}) = ${i}`:`${n} : ${S(e.type,t)}`}function cu(e,t=new Set){var f;let n=e.parameters.map(p=>Ls(p,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(p=>Ls(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=S(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})`:Ls(p,t)).join(", ")})`:"",l=[r,n,s,i].filter(p=>!!p).join(", "),u=(f=e.SelfType)==null?void 0:f.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function S(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 Jd(e,t)}finally{e.id&&t.delete(e.id)}}function Jd(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`[${S(e.childType,t)}; ${tt(e.length)}]`;case"Slice":return`[${S(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>oo(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=>oo(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=>oo(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=>oo(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=>uu(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(Jt(n))return`Fn${cu(n.isFn.callType,t).slice(2)}`;if(bn(n)){let i=[S(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(S(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=>uu(i,t)).join(", ")})`,n.receiverType&&(r=`(${S(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:cu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return w(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(S(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${S(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${S(e.childType,t)})`;case"Iso":return`Iso(${S(e.childType,t)})`;case"Arc":return`Arc(${S(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${S(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${S(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(S(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${S(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var fu=64;function Na(){return fu}function xa(){return fu/8}function em(e){let t=ii(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(ft(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function tm(e){let t=0;for(let n of e.fields){let r=ii(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function nm(e){let t=0;for(let n of e.fields){let r=ii(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function rm(e){let t=0,n=0;for(let d of e.variants){let y=0;if(d.fields)for(let g of d.fields){let h=ii(g.type);if(h===null)return null;if(h===-1)return-1;y+=h;let v=Ur(g.type);if(v===null)return null;n=Math.max(n,v*8)}t=Math.max(t,y)}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,f=c/8,p=a/8,_=(p-f%p)%p*8;return c+_}function im(e){let t=0;for(let n of e.fields){let r=ii(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Ur(e){if(G(e))return null;if(xe(e)||gt(e)||zt(e)||ln(e)||tn(e)||un(e)||je(e)||Je(e)||nn(e))return 1;if(Wn(e))return 1;if(Do(e)||Mo(e))return xa();if(yr(e)||Oo(e))return 1;if(Ro(e)||Po(e))return 2;if(Uo(e)||zo(e))return 4;if(Bo(e)||Go(e))return 8;if(Wo(e))return 4;if(qo(e))return 8;if(We(e))return Ur(e.childType);if(qe(e)){let t=1;for(let n of e.fields){let r=Ur(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ie(e)){if(e.isReferenceSemantics)return xa();if(e.isNewtype)return Ur(e.fields[0].type);let t=1;for(let n of e.fields){let r=Ur(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Me(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Ur(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(Rt(e)){let t=1;for(let n of e.fields){let r=Ur(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(ae(e))return xa();if(Xe(e))return xa()}return null}function ii(e){return G(e)?null:xe(e)||gt(e)||zt(e)||ln(e)||tn(e)||un(e)||je(e)||Je(e)||nn(e)?0:Wn(e)?8:Do(e)||Mo(e)?Na():yr(e)||Oo(e)?8:Ro(e)||Po(e)?16:Uo(e)||zo(e)?32:Bo(e)||Go(e)?64:Wo(e)?32:qo(e)?64:We(e)?em(e):qe(e)?tm(e):Ie(e)?e.isReferenceSemantics?Na():e.isNewtype?ii(e.fields[0].type):nm(e):Me(e)?rm(e):Rt(e)?im(e):ae(e)||Xe(e)?Na():null}function zr(e,t){if(Rr(e))throw St([{token:t,errorMessage:`Cannot use 'void' type here.
|
|
44
44
|
Please consider use 'unit' type instead.
|
|
45
|
-
`}])}function
|
|
45
|
+
`}])}function Br(e,t,n){if(!qt(e)||Ei(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(vi(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function vi(e,t,n,r){if(Ie(e)&&e.id===t.id)return!0;if(Ie(e)&&e.isReferenceSemantics)return Br(e,new Set(n),r);if(Me(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(vi(o.type,t,n,r))return!0}}if(G(e))return Ei(e,r)?!1:e.resolvedConcreteType?vi(e.resolvedConcreteType,t,n,r):!0;if(We(e)||Et(e))return vi(e.childType,t,n,r);if(qe(e)){for(let i of e.fields)if(vi(i.type,t,n,r))return!0}if(Rt(e)){for(let i of e.fields)if(vi(i.type,t,n,r))return!0}return et(e)?!0:(Xe(e),!1)}function wr(e,t){return t?e.id===t.id?!0:We(e)||Et(e)||Xe(e)?wr(e.childType,t):qe(e)?e.fields.some(n=>wr(n.type,t)):Ie(e)?e.fields.some(n=>wr(n.type,t)):Rt(e)?e.fields.some(n=>wr(n.type,t)):Me(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>wr(i.type,t))}):ae(e)?wr(e.return.type,t):!1:!1}var Ns=require("crypto");function Ko(e){return"yo"+(0,Ns.createHash)("sha1").update(e).digest("hex").slice(0,8)}var Sa=new Map;function yt(e){let t=Sa.get(e);return t===void 0&&(t=0),Sa.set(e,t+1),`${Ko(e)}_id_${t}`}function Va(e){Sa.delete(e)}var pu=1;function du(e){return`_${Ko(e)}_temp_`}function mu(e){return`${du(e)}${pu++}`}function wt(e,t){return t.startsWith(du(e))}var Is=new Map;function $i(e,t){let n="";for(let o=0;o<t.length;o++)if(Gi(t[o])){let a=Ta.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=Ko(e)+"_"+n,i=Is.get(r);return i===void 0?i=0:i++,Is.set(r,i),r+(i==0?"":`_${i}`)}function xs(e){return(0,Ns.createHash)("sha1").update(e).digest("hex").slice(0,10)}function yu(){Sa.clear(),Is.clear(),pu=1}function oi(e){return{[e]:!0}}function Nt(e,t){return(e==null?void 0:e[t])===!0}function Ut(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function Xo(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 gu(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 nt(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:nt(e.func),args:e.args.map(nt),$:void 0}}}function I(e){return(e==null?void 0:e.tag)==="FnCall"}function Y(e){return(e==null?void 0:e.tag)==="Atom"}function Xt(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function so(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 Oe(e,t,n){if(!I(e))throw m({token:e.token,errorMessage:`Expected function call, got atom:
|
|
46
46
|
${w(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
|
${w(e)}`});if(n!==void 0&&e.args.length!==n)throw m({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
|
|
48
48
|
${w(e)}`})}function Ia(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(!Ia(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!Ia(e.args[n],t.args[n]))return!1;return!0}return!1}var V={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"]},L={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 lo(e){return!!(e.tag==="FnCall"&&e.isInfix&&e.func.tag==="Atom"&&e.func.token.type==="operator"&&e.args.length===2)}function w(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?Xn(e,r):Ar(e)}function Ar(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}${Ar(e.args[0])}`:t=`${e.func.token.value}(${Ar(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let i=Ar(e.args[0]),o=Ar(e.args[1]);i=lo(e.args[0])||so(e.args[0])?`(${i})`:i,o=lo(e.args[1])||so(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===V.tuple[0]){e.args.length===1?t=`(${Ar(e.args[0])},)`:t=`(${e.args.map(i=>Ar(i)).join(", ").trim()})`;break}let n=Ar(e.func);n=lo(e.func)||so(e.func)?`(${n})`:n;let r=e.args.map(i=>Ar(i)).join(", ").trim();t=`${n}(${r})`;break}}return t}function Xn(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}${Xn(e.args[0],t)}`;{let u=Xn(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=Xn(e.args[0],t),c=Xn(e.args[1],t);return u=lo(e.args[0])||so(e.args[0])?`(${u})`:u,c=lo(e.args[1])||so(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===V.tuple[0]){if(e.args.length===0)return"()";if(e.args.length===1)return`(${Xn(e.args[0],t)},)`;{let u=e.args.map(f=>Xn(f,t)),c=`(${u.join(", ")})`;return c.length<=t.maxLineLength?c:`(
|
|
@@ -52,7 +52,7 @@ ${n})`}}let o=e.func.tag==="Atom"?e.func.token.value:null,a=o&&[...V.begin,...V.
|
|
|
52
52
|
`))return`${s}(${c})`}let u=e.args.map(c=>Xn(c,r));return`${s}(
|
|
53
53
|
${i}${u.join(`,
|
|
54
54
|
${i}`)}
|
|
55
|
-
${n})`}else if(o===V.cond[0]){let u=e.args.map(c=>{if(
|
|
55
|
+
${n})`}else if(o===V.cond[0]){let u=e.args.map(c=>{if(I(c)&&c.isInfix&&T(c,"=>")){let f=c.args[0],p=Xn(c.args[1],r),_=Xn(f,t);if(I(f)&&f.isInfix&&!T(f,"=>")&&(_=`(${_})`),p.includes(`
|
|
56
56
|
`)){let y=p.split(`
|
|
57
57
|
`).map((g,h)=>h===0?g:`${i}${g}`).join(`
|
|
58
58
|
`);return`${_} => ${y}`}else return`${_} => ${p}`}return Xn(c,r)});return`${s}(
|
|
@@ -62,36 +62,36 @@ ${n})`}}let l=e.args.map(u=>Xn(u,r));return`${s}(
|
|
|
62
62
|
${i}${l.join(`,
|
|
63
63
|
${i}`)}
|
|
64
64
|
${n})`}}return Ar(e)}function pt(e,t,n){if(!e.$)throw new Error(`Expected expression to be evaluated, but it is not:
|
|
65
|
-
${w(e)}`);let{env:r,type:i,value:o,originType:a}=e.$,s=r.modulePath,l=t&&Be(i);if(e.$.variableName){let f=pe(r,e.$.variableName);if(f.length>0){let _=f[f.length-1],d=_.isOwningTheRcValue?l:!1,y={..._,type:i,value:d?void 0:o?[o]:void 0,isCompileTimeOnly:d?!1:!!o,isOwningTheRcValue:d,isOwningTheSameRcValueAs:n};e.$.env=
|
|
65
|
+
${w(e)}`);let{env:r,type:i,value:o,originType:a}=e.$,s=r.modulePath,l=t&&Be(i);if(e.$.variableName){let f=pe(r,e.$.variableName);if(f.length>0){let _=f[f.length-1],d=_.isOwningTheRcValue?l:!1,y={..._,type:i,value:d?void 0:o?[o]:void 0,isCompileTimeOnly:d?!1:!!o,isOwningTheRcValue:d,isOwningTheSameRcValueAs:n};e.$.env=mt(r,_,y),a||(e.$.originType=i);return}let{env:p}=Se({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=p;return}let u=mu(s),{env:c}=Se({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 uo(e,t){let n=e.frames.length-1,r=[];for(let i=0;i<t.length;i++){let o=t[i];if(!o.$)throw St([{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 St([{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(f=>{l[0].push({consumedAtToken:f.consumedAtToken,initializedAtToken:f.initializedAtToken,type:f.type,isOwningTheRcValue:f.isOwningTheRcValue??!1})});for(let f=0;f<r.length;f++){let d=r[f].frames[i].variables;if(i!==n&&s.length!==d.length)if(d.length>s.length){let y=[...d].slice(s.length);if(y.every(h=>wt(e.modulePath,h.name))){for(let v of y)s.push(v),l[0].push({consumedAtToken:void 0,initializedAtToken:v.initializedAtToken,type:v.type,isOwningTheRcValue:v.isOwningTheRcValue??!1});let h={...a,variables:[...s]};e={...e,frames:e.frames.map((v,E)=>E===i?h:v)}}else throw St([{token:t[f].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}])}else throw St([{token:t[f].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}]);for(let y=0;y<s.length;y++){let g=s[y],h=d[y];if(g.name!==h.name){if(wt(e.modulePath,g.name)&&wt(e.modulePath,h.name))continue;throw St([{token:t[f].token,errorMessage:`Frame level ${i} has different variable names for different cases.`}])}}l.push([]),d.forEach(y=>{l[l.length-1].push({consumedAtToken:y.consumedAtToken,initializedAtToken:y.initializedAtToken,type:y.type,isOwningTheRcValue:y.isOwningTheRcValue??!1})})}let u=l.length,c=l[0].length;for(let f=0;f<c;f++){let p=s[f].name,_=[],d=[],y=[],g=[];for(let b=1;b<u;b++){let $=r[b-1].frames[o].variables;_.push(l[b][f].initializedAtToken),d.push(l[b][f].isOwningTheRcValue?$[f].token:void 0),y.push(l[b][f].consumedAtToken),g.push(l[b][f].type)}let h=_.map((b,F)=>({token:b,index:F})).filter(({token:b})=>!!b);if(h.length>1){let b=g[h[0].index],F=r[h[0].index];for(let $=1;$<h.length;$++){let C=g[h[$].index],A=r[h[$].index];if(G(b)&&G(C)){let N=b.resolvedConcreteType,x=C.resolvedConcreteType;if(N&&x&&!ie({type:N,env:F},{type:x,env:A}))throw St([{token:t[h[0].index].token,errorMessage:`Variable "${p}" 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:_[h[0].index],errorMessage:`First branch has concrete type: ${S(N)}`},{token:_[h[$].index],errorMessage:`Conflicting branch has concrete type: ${S(x)}`}])}if(b!==C&&!ie({type:b,env:F},{type:C,env:
|
|
68
|
-
`:"")+($?"Might be initialized here:":"Not initialized here:"),token:$??t[C].token})))}if(y.length===1){if(y[0]&&!s[f].consumedAtToken){let b={...s[f],consumedAtToken:y[0]};e=
|
|
69
|
-
`:"")+($?"Consumed here:":"Not consumed here:"),token:$??t[C].token})))}if(!s[f].isOwningTheRcValue&&d.every(b=>b)){let b={...s[f],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=
|
|
70
|
-
`:"")+($?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:$??t[C].token})))}let v=s[f].id,E=[];for(let b=1;b<u;b++){let C=r[b-1].frames[o].variables[f];E.push(C.id)}if(E.some(b=>b!==v)){let b=$i(e.modulePath,p),F={...s[f],id:b,isOwningTheSameRcValueAs:void 0};e=
|
|
71
|
-
${w(e)}`});if(Be(e.$.type)){if(wt(e.$.env.modulePath,n)&&!(Y(e)&&e.token.value!==n)){let a=pe(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=
|
|
72
|
-
`)}}function
|
|
67
|
+
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:_[h[0].index],errorMessage:`First branch has concrete type: ${S(N)}`},{token:_[h[$].index],errorMessage:`Conflicting branch has concrete type: ${S(x)}`}])}if(b!==C&&!ie({type:b,env:F},{type:C,env:A}))throw St([{token:t[h[0].index].token,errorMessage:`Variable "${p}" has incompatible types across different cases:`},{token:_[h[0].index],errorMessage:`First initialization: ${S(b)}`},{token:_[h[$].index],errorMessage:`Conflicting initialization: ${S(C)}`}])}}if(_.length===1){if(_[0]&&!s[f].initializedAtToken)throw St([{token:s[f].token,errorMessage:`Variable "${s[f].name}" might not be initialized in all cases.`},{token:_[0],errorMessage:"Might be initialized here:"}])}else if(!s[f].initializedAtToken&&_.every(b=>b)){let b={...s[f],initializedAtToken:_[0]};e=mt(e,s[f],b),s[f]=b}else{let b=_.filter($=>!!$),F=_.filter($=>!$);if(b.length>0&&F.length>0)throw St(_.map(($,C)=>({errorMessage:(C===0?`Variable "${p}" might be initialized in some cases but not initialized in other cases:
|
|
68
|
+
`:"")+($?"Might be initialized here:":"Not initialized here:"),token:$??t[C].token})))}if(y.length===1){if(y[0]&&!s[f].consumedAtToken){let b={...s[f],consumedAtToken:y[0]};e=mt(e,s[f],b),s[f]=b}}else if(!s[f].consumedAtToken&&y.every(b=>b)){let b={...s[f],consumedAtToken:y[0]};e=mt(e,s[f],b),s[f]=b}else{let b=y.filter($=>!!$),F=y.filter($=>!$);if(b.length>0&&F.length>0)throw St(y.map(($,C)=>({errorMessage:(C===0?`Variable "${p}" is consumed in some cases but not in other cases:
|
|
69
|
+
`:"")+($?"Consumed here:":"Not consumed here:"),token:$??t[C].token})))}if(!s[f].isOwningTheRcValue&&d.every(b=>b)){let b={...s[f],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=mt(e,s[f],b),s[f]=b}else{let b=d.filter($=>!!$),F=d.filter($=>!$);if(b.length>0&&F.length>0)throw St(d.map(($,C)=>({errorMessage:(C===0?`Variable "${p}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
|
|
70
|
+
`:"")+($?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:$??t[C].token})))}let v=s[f].id,E=[];for(let b=1;b<u;b++){let C=r[b-1].frames[o].variables[f];E.push(C.id)}if(E.some(b=>b!==v)){let b=$i(e.modulePath,p),F={...s[f],id:b,isOwningTheSameRcValueAs:void 0};e=mt(e,s[f],F),s[f]=F}}}return e}function Ir(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 Da(e,t){I(e)||(e.tag=t.tag),Ir(e,t)}function Gn(e,t,n=!1){var a,s,l;if((a=e.$)!=null&&a.value&&q((s=e.$)==null?void 0:s.value))return t;let r=(l=e.$)==null?void 0:l.variableName;if(!r)return t;let i=pe(t,r);if(i.length===0)throw St([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let o=i[i.length-1];if(o.consumedAtToken&&!n){let u=`use of moved value: \`${r}\``;throw St([{token:e.token,errorMessage:u},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=mt(t,o,{...o,consumedAtToken:e.token});return t}function hn(e,t){var r;if(!e.$||!e.$.variableName)return;if(e.$.value){let i=e.$.variableName;if(i&&wt(e.$.env.modulePath,i)&&Be(e.$.type)){let o=pe(e.$.env,i);if(o.length>0){let a=o[o.length-1];a.isOwningTheRcValue&&!a.consumedAtToken&&(e.$.env=mt(e.$.env,a,{...a,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 ${L.___dup} on:
|
|
71
|
+
${w(e)}`});if(Be(e.$.type)){if(wt(e.$.env.modulePath,n)&&!(Y(e)&&e.token.value!==n)){let a=pe(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=mt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=$n(`${L.___dup[0]}(${n})`),o=M({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=pe(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=mt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function Ci(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=pe(t,n);if(r.length===0)throw St([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let a=`use of moved value: \`${n}\``;throw St([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var Ot="__yo_self";function bi(e,t,n){if(Ie(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>bi(i.type,t,n));return n.delete(e.id),r}if(qe(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>bi(i.type,t,n));return n.delete(e.id),r}if(Me(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>bi(o.type,t,n)));return n.delete(e.id),r}return We(e)||Et(e)||Xe(e)?bi(e.childType,t,n):hr(e,t)}function ki(e,t,n){if(Ie(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>ki(i.type,t,n));return n.delete(e.id),r}if(qe(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>ki(i.type,t,n));return n.delete(e.id),r}if(Me(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>ki(o.type,t,n)));return n.delete(e.id),r}return We(e)||Et(e)||Xe(e)?ki(e.childType,t,n):Gr(e,t)}function hu(e,t,n,r){let i=$n(e),o=M({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${w(i)}`);return{expr:o,env:o.$.env}}function co({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=hu(t,n,r,i);if(I(o)&&o.$&&o.$.value&&q(o.$.value)&&ae(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 Qn({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=hu(t,n,r,i);if(I(o)&&o.$&&o.$.value&&be(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 Ss=`(fn(${Ot} : Self) -> unit)`,Ma=`(fn(${Ot} : Self) -> unit)`,Oa=`(fn(${Ot} : Self) -> Self)`;function om(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function am(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Vs(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(am(i)){let o=yt("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=yt("field_"+om(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${Ot};`,callsExpr:r.join(`
|
|
72
|
+
`)}}function sm(e){let t=Ss;if(!Pn(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>Be(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=Vs(n,L.___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
|
|
79
|
-
${L.__yo_decr_rc[0]}(${Ot});`:"",i="";if(!Pn(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=
|
|
78
|
+
})`}}function lm(e){let t=Ma,n=e.fields.filter(a=>Be(a.type)).map(a=>a.label),r=Pn(e)?`
|
|
79
|
+
${L.__yo_decr_rc[0]}(${Ot});`:"",i="";if(!Pn(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=Vs(n,L.___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
|
|
87
|
-
${L.__yo_incr_rc[0]}(${Ot});`:"",i="";if(!Pn(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=
|
|
86
|
+
})`;return{signature:t,code:o}}function um(e){let t=Oa,n=e.fields.filter(o=>Be(o.type)).map(o=>o.label),r=Pn(e)?`
|
|
87
|
+
${L.__yo_incr_rc[0]}(${Ot});`:"",i="";if(!Pn(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=Vs(n,L.___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 ${L.__yo_rc_own[0]}(${Ot});
|
|
94
|
-
})`}}function
|
|
94
|
+
})`}}function cm({structType:e,env:t,context:n}){if(Fi(e,t))return t;en(e);let r=Ye(e),{code:i}=sm(e),{code:o}=lm(e),{code:a}=um(e);return Ds({structType:e,env:t,context:n}),r||(t=Qn({label:L.___dispose[0],functionCode:i,SelfType:e,env:t,context:n}),t=Qn({label:L.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=Qn({label:L.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function Ds({structType:e,env:t,context:n}){Fi(e,t)||(co({label:L.___dispose[0],functionSignature:Ss,SelfType:e,env:t,context:n}),co({label:L.___drop[0],functionSignature:Ma,SelfType:e,env:t,context:n}),co({label:L.___dup[0],functionSignature:Oa,SelfType:e,env:t,context:n}))}function fm(e){let t=Ma,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Be(a.type))),r=Pn(e)?`
|
|
95
95
|
${L.__yo_decr_rc[0]}(${Ot});`:"",i=Pn(e)?"":n.length?`
|
|
96
96
|
match(${Ot},
|
|
97
97
|
${n.map(o=>{let a=o.fields.filter(u=>Be(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${L.___drop[0]})(${u});`).join(`
|
|
@@ -104,7 +104,7 @@ ${l}
|
|
|
104
104
|
${i}
|
|
105
105
|
${r}
|
|
106
106
|
return ();
|
|
107
|
-
})`}}function
|
|
107
|
+
})`}}function _m(e){let t=Oa,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Be(a.type))),r=Pn(e)?`
|
|
108
108
|
${L.__yo_incr_rc[0]}(${Ot});`:"",i=Pn(e)?"":n.length?`
|
|
109
109
|
match(${Ot},
|
|
110
110
|
${n.map(o=>{let a=o.fields.filter(u=>Be(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${L.___dup[0]})(${u});`).join(`
|
|
@@ -117,77 +117,77 @@ ${l}
|
|
|
117
117
|
${i}
|
|
118
118
|
${r}
|
|
119
119
|
return ${L.__yo_rc_own[0]}(${Ot});
|
|
120
|
-
})`}}function
|
|
120
|
+
})`}}function pm({enumType:e,env:t,context:n}){if(Fi(e,t))return t;en(e);let r=Ye(e),{code:i}=fm(e),{code:o}=_m(e);return Ms({enumType:e,env:t,context:n}),r||(t=Qn({label:L.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=Qn({label:L.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),t}function Ms({enumType:e,env:t,context:n}){if(Fi(e,t))return t;co({label:L.___dispose[0],functionSignature:Ss,SelfType:e,env:t,context:n}),co({label:L.___drop[0],functionSignature:Ma,SelfType:e,env:t,context:n}),co({label:L.___dup[0],functionSignature:Oa,SelfType:e,env:t,context:n})}function Qo({dynType:e,env:t,context:n}){let r=dm(e),i=mm(e);return i&&(t=Qn({label:L.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),r&&(t=Qn({label:L.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function dm(e){return`((fn(${Ot} : Self) -> unit) { // ___drop for ${S(e)}
|
|
121
121
|
${L.__yo_dyn_drop[0]}(${Ot});
|
|
122
|
-
})`}function
|
|
122
|
+
})`}function mm(e){return`((fn(${Ot} : Self) -> Self) { // ___dup for ${S(e)}
|
|
123
123
|
${L.__yo_dyn_dup[0]}(${Ot});
|
|
124
124
|
return ${L.__yo_rc_own[0]}(${Ot});
|
|
125
|
-
})`}function
|
|
125
|
+
})`}function ym(e){return`((fn(${Ot} : Self) -> unit) { // ___drop for ${S(e)}
|
|
126
126
|
${L.__yo_sometype_drop[0]}(${Ot});
|
|
127
|
-
})`}function
|
|
127
|
+
})`}function gm(e){return`((fn(${Ot} : Self) -> Self) { // ___dup for ${S(e)}
|
|
128
128
|
${L.__yo_sometype_dup[0]}(${Ot});
|
|
129
129
|
return ${L.__yo_rc_own[0]}(${Ot});
|
|
130
|
-
})`}function
|
|
130
|
+
})`}function vu({someType:e,env:t,context:n}){let r=ym(e),i=gm(e);return t=Qn({label:L.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=Qn({label:L.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function hm(e){return`((fn(${Ot} : Self) -> unit) { // ___dispose for Iso
|
|
131
131
|
${L.__yo_iso_dispose[0]}(${Ot});
|
|
132
132
|
return ();
|
|
133
|
-
})`}function
|
|
133
|
+
})`}function vm(e){return`((fn(${Ot} : Self) -> unit) { // ___drop for Iso
|
|
134
134
|
${L.__yo_decr_rc_atomic[0]}(${Ot});
|
|
135
135
|
return ();
|
|
136
|
-
})`}function
|
|
136
|
+
})`}function Tm(e){return`((fn(${Ot} : Self) -> Self) { // ___dup for Iso
|
|
137
137
|
${L.__yo_incr_rc_atomic[0]}(${Ot});
|
|
138
138
|
return ${L.__yo_rc_own[0]}(${Ot});
|
|
139
|
-
})`}function
|
|
139
|
+
})`}function Tu({isoType:e,env:t,context:n}){let r=hm(e),i=vm(e),o=Tm(e);return t=Qn({label:L.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=Qn({label:L.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=Qn({label:L.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Em(e){return`((fn(${Ot} : Self) -> unit) { // ___dispose for Arc
|
|
140
140
|
${L.__yo_arc_dispose[0]}(${Ot});
|
|
141
141
|
return ();
|
|
142
|
-
})`}function
|
|
142
|
+
})`}function $m(e){return`((fn(${Ot} : Self) -> unit) { // ___drop for Arc
|
|
143
143
|
${L.__yo_decr_rc_atomic[0]}(${Ot});
|
|
144
144
|
return ();
|
|
145
|
-
})`}function
|
|
145
|
+
})`}function Cm(e){return`((fn(${Ot} : Self) -> Self) { // ___dup for Arc
|
|
146
146
|
${L.__yo_incr_rc_atomic[0]}(${Ot});
|
|
147
147
|
return ${L.__yo_rc_own[0]}(${Ot});
|
|
148
|
-
})`}function Tu({arcType:e,env:t,context:n}){let r=hm(e),i=vm(e),o=Tm(e);return t=Qn({label:L.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=Qn({label:L.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=Qn({label:L.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function An(e,t,n,r){let i=`${e}()`,o=$n(i),a=M({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Ht(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:Un(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function Em({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Zo(i.type,t))&&(t=An("Send",e,t,n)),t}function $m({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=An("Rc",e,t,n)),t}function Cm({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Zo(o.type,t)))&&(t=An("Send",e,t,n)),t}function Eu({unionType:e,env:t,context:n}){return e.fields.every(i=>Zo(i.type,t))&&(t=An("Send",e,t,n)),t}function bm({structType:e,env:t,context:n}){return e.isReferenceSemantics?zr(e,new Set,t)||(t=An("Acyclic",e,t,n)):e.fields.every(i=>Ei(i.type,t))&&(t=An("Acyclic",e,t,n)),t}function km({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Ei(o.type,t)))&&(t=An("Acyclic",e,t,n)),t}function $u({unionType:e,env:t,context:n}){return e.fields.every(i=>Ei(i.type,t))&&(t=An("Acyclic",e,t,n)),t}function wm({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>bi(i.type,t,new Set([e.id])))&&(t=An("Comptime",e,t,n)),t}function Fm({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>bi(o.type,t,new Set([e.id]))))&&(t=An("Comptime",e,t,n)),t}function Lm({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=An("Runtime",e,t,n),t):(e.fields.every(i=>ki(i.type,t,new Set([e.id])))&&(t=An("Runtime",e,t,n)),t)}function Am({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>ki(o.type,t,new Set([e.id]))))&&(t=An("Runtime",e,t,n)),t}function Cu({unionType:e,env:t,context:n}){return t=An("Runtime",e,t,n),t}function Im({tupleType:e,env:t,context:n}){return e.fields.every(i=>Zo(i.type,t))&&(t=An("Send",e,t,n)),t}function Nm({tupleType:e,env:t,context:n}){return e.fields.every(i=>bi(i.type,t,new Set([e.id])))&&(t=An("Comptime",e,t,n)),t}function Sm({tupleType:e,env:t,context:n}){return e.fields.every(i=>ki(i.type,t,new Set([e.id])))&&(t=An("Runtime",e,t,n)),t}function wi({structType:e,env:t,context:n,errorToken:r}){return t=Em({structType:e,env:t,context:n}),t=$m({structType:e,env:t,context:n}),t=bm({structType:e,env:t,context:n}),t=wm({structType:e,env:t,context:n}),t=Lm({structType:e,env:t,context:n}),t=sm({structType:e,env:t,context:n}),Ra(e,t,r,n),t}function bu({enumType:e,env:t,context:n,errorToken:r}){return t=Cm({enumType:e,env:t,context:n}),t=km({enumType:e,env:t,context:n}),t=Fm({enumType:e,env:t,context:n}),t=Am({enumType:e,env:t,context:n}),t=cm({enumType:e,env:t,context:n}),Ra(e,t,r,n),t}function ku({tupleType:e,env:t,context:n,errorToken:r}){return t=Im({tupleType:e,env:t,context:n}),t=Nm({tupleType:e,env:t,context:n}),t=Sm({tupleType:e,env:t,context:n}),Ra(e,t,r,n),t}function rr(e,t){let n=pe(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&H(r.value[0])){let i=r.value[0];if(Je(i.value))return i.value}}function gn(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=>{var l,u;return s.name===t.name&&((u=(l=s.value)==null?void 0:l[0])==null?void 0:u.tag)==="Type"});if(a&&a.value){let s=a.value[0];if(s.value===t||G(s.value)&&s.value.id===t.id)return t;G(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=pe(e,t.name,a=>{var s,l;return((l=(s=a.value)==null?void 0:s[0])==null?void 0:l.tag)==="Type"});if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(G(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==null?void 0: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==null?void 0:c.tag)==="Type"){let f=c;if(f.value===t){a=!0;break}if(G(f.value)&&f.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(G(t));return r.value}var Ds=null;function ti(){if(Ds)return Ds;let e=St(),t=it(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Ds=n,n}var Ms=null;function Ki(){if(Ms)return Ms;let e=St(),t=it(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,Ms=n,n}var Os=null;function yn(){if(Os)return Os;let e=St(),t=it(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,Os=n,n}var Rs=null;function On(){if(Rs)return Rs;let e=St(),t=it(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,Rs=n,n}var Ps=new Map;function jo(e){if(Ps.has(e))return Ps.get(e);let t=St(),n=it(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,Ps.set(e,i),i}function Jo(){return jo(On())}var Us=null;function Ct(){if(Us)return Us;let e=St(),t=it(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,Us=n,n}var zs=null;function qt(){if(zs)return zs;let e=St(),t=it(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,zs=n,n}var Bs=null;function Xi(){if(Bs)return Bs;let e=St(),t=it(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,Bs=n,n}var Gs=null;function Qi(){if(Gs)return Gs;let e=St(),t=it(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,Gs=n,n}var Ws=null;function Zi(){if(Ws)return Ws;let e=St(),t=it(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,Ws=n,n}var Hs=null;function Ji(){if(Hs)return Hs;let e=St(),t=it(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,Hs=n,n}var qs=null;function eo(){if(qs)return qs;let e=St(),t=it(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,qs=n,n}var Ys=null;function to(){if(Ys)return Ys;let e=St(),t=it(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,Ys=n,n}var js=null;function ni(){if(js)return js;let e=St(),t=it(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,js=n,n}var Ks=null;function no(){if(Ks)return Ks;let e=St(),t=it(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,Ks=n,n}var Xs=null;function ro(){if(Xs)return Xs;let e=St(),t=it(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,Xs=n,n}var Qs=null;function io(){if(Qs)return Qs;let e=St(),t=it(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,Qs=n,n}var Zs=null;function ri(){if(Zs)return Zs;let e=St(),t=it(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,Zs=n,n}var Js=null;function vr(){if(Js)return Js;let e=St(),t=it(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,Js=n,n}var el=null;function Fu(){if(el)return el;let e=St(),t=it(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,el=n,n}var tl=null;function Lu(){if(tl)return tl;let e=St(),t=it(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,tl=n,n}var nl=null;function Au(){if(nl)return nl;let e=St(),t=it(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,nl=n,n}var rl=null;function Iu(){if(rl)return rl;let e=St(),t=it(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,rl=n,n}var il=null;function Nu(){if(il)return il;let e=St(),t=it(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,il=n,n}var ol=null;function Su(){if(ol)return ol;let e=St(),t=it(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,ol=n,n}var al=null;function xu(){if(al)return al;let e=St(),t=it(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,al=n,n}var sl=null;function Vu(){if(sl)return sl;let e=St(),t=it(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,sl=n,n}var ll=null;function Du(){if(ll)return ll;let e=St(),t=it(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,ll=n,n}var ul=null;function Mu(){if(ul)return ul;let e=St(),t=it(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,ul=n,n}function Nt(e){return Un(0,e)}function Nr(e,t){let n=St(),r=it(n),i={id:`array_${e.id+"_"+Is(tt(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var cl=new Map;function Ua(e){if(cl.has(e))return cl.get(e);let t=St(),n=it(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,cl.set(e,r),r}function fu(e){var r;let n=pe(e,"str").find(i=>{var o;return H((o=i.value)==null?void 0:o[0])&&i.value[0].type});if(!n||!H((r=n.value)==null?void 0:r[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var fl;function Ou(){if(fl)return fl;let e=St(),t=it(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,fl=n,n}function za(e){let t=St(),n=it(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Li(e,t=!1,n=!1){let r=it(e),i={id:`struct_${yt(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function Ba(e){return{id:`module_${yt(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function it(e){return{id:`trait_${yt(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function Ru(e){let t=it(e),n={id:`enum_${yt(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function Pu(e){let t=it(e),n={id:`union_${yt(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function fo({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,isClosure:u}){let c=St(),f=it(c),p={id:`fn_${yt(a.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,implicitParameters:n??[],variadicParameter:r,whereClauseExprs:i,return:o,env:a,parametersFrame:s,SelfType:l,trait:f,isClosure:u};return f.receiverType=p,p}var _l=new Map;function Ai(e){if(_l.has(e))return _l.get(e);let t=St(),n=it(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,_l.set(e,r),r}var pl=new Map;function Uu(e,t){if(pl.has(e))return pl.get(e);let n=it(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,pl.set(e,r),r}var dl=new Map;function zu(e,t){if(dl.has(e))return dl.get(e);let n=it(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,dl.set(e,r),r}function Kn(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=it(a),u=(r==null?void 0:r.map(p=>({traitType:p,frameLevel:-1})))??[],c=(i==null?void 0:i.map(p=>({traitType:p,frameLevel:-1})))??[],f={id:n??`sometype_${yt(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=f,rr(a,"Runtime")&&An("Runtime",f,a,s),hu({someType:f,env:a,context:{SelfType:f,stdPath:""}}),f}var Pa=new Map;function Ii(e,t){let n=it(t),r=Un(1),i={id:`effects_row_sometype_${yt(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 Gr(e){let t=St(),n=it(t),r={id:`EffectsRow_${yt(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function Un(e,t){if(Pa.has(e)){let i=Pa.get(e);if(i.has(t))return i.get(t)}else Pa.set(e,new Map);let n=it(St()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,Pa.get(e).set(t,r),r}function Ni({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function Bu(e,t){let n=`fn_trait_${e.id}`,r=it(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function wu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${S(a.type)}`).join(","),o=S(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${S(n.type)}`}).join(";")}function ea({requiredTraits:e,env:t,negativeTraits:n}){let r=it(t),i=e.map(c=>wu(c)).join("__"),o=n?n.map(c=>wu(c)).join("__"):"",a=`dyn_${Is(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=(n==null?void 0: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 Gu(e,t){return!vt(e)||!vt(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function ir(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),G(t))return e===t.id;if(Ae(t))return t.fields.some(r=>ir(e,r.type,n));if(Me(t))return t.variants.some(r=>r.fields?r.fields.some(i=>ir(e,i.type,n)):!1);if(He(t))return t.fields.some(r=>ir(e,r.type,n));if(We(t)||Et(t)||ln(t))return ir(e,t.childType,n);if(Xe(t))return!1;if(on(t)||rn(t))return ir(e,t.childType,n);if(ae(t))return t.parameters.some(r=>ir(e,r.type,n))||ir(e,t.return.type,n);if(bn(t)){if(ir(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(ir(e,r.type,n))return!0;return!1}return Jt(t)?ir(e,t.isFn.callType,n):!1}function $t(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}),G(e.type)&&G(t.type)){let r=gn(e.env,e.type),i=gn(t.env,t.type);if(G(r))if(G(i)){if(r!==i){let o=he(t.type);{let a=pe(e.env,e.type.name),s=a[a.length-1];if(s)e.env=dt(e.env,s,{...s,value:[o]});else{let{env:l}=Ve({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=pe(t.env,t.type.name),s=a[a.length-1];if(s)t.env=dt(t.env,s,{...s,value:[o]});else{let{env:l}=Ve({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=he(i),a=pe(e.env,e.type.name),s=a[a.length-1];if(s)e.env=dt(e.env,s,{...s,value:[o]});else{let{env:l}=Ve({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=he(r),a=pe(t.env,t.type.name),s=a[a.length-1];if(s)t.env=dt(t.env,s,{...s,value:[o]});else{let{env:l}=Ve({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,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(Jt(l)){let u=a.find(c=>Jt(c.traitType));if(u&&Jt(u.traitType)){let{expectedEnv:c,givenEnv:f}=$t({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=f}}else if(bn(l)){let u=a.find(c=>bn(c.traitType));if(u&&bn(u.traitType)){let{expectedEnv:c,givenEnv:f}=$t({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=f,ml(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(G(e.type)){let r=gn(e.env,e.type);if(G(r)&&(r.id===e.type.id||r.name===e.type.name)){if(ir(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${S(t.type)}" because it would create an infinite type.`);let i=he(t.type),o=pe(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=dt(e.env,a,{...a,value:[i]}));else{let{env:s}=Ve({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(Jt(s)&&ae(t.type)){let l=s.isFn.callType,{expectedEnv:u,givenEnv:c}=$t({type:l,env:e.env},{type:t.type,env:t.env},n);e.env=u,t.env=c}else if(bn(s)&&bn(t.type)){let{expectedEnv:l,givenEnv:u}=$t({type:s.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=l,t.env=u,ml(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!G(r)){let{expectedEnv:i,givenEnv:o}=$t({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=i,t.env=o}}else if(G(t.type)){let r=gn(t.env,t.type);if(G(r)){if(ir(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${S(e.type)}" because it would create an infinite type.`);let i=he(e.type),o=pe(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=dt(t.env,a,{...a,value:[i]}));else{let{env:s}=Ve({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:i,givenEnv:o}=$t({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=i,t.env=o}}else if(He(e.type)&&He(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:i,givenEnv:o}=$t({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(He(e.type)&&He(t.type))throw new Error(`Cannot unify incompatible tuple types: "${S(e.type)}" and "${S(t.type)}"`);if(Ae(e.type)&&Ae(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: "${S(e.type)}" and "${S(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}=$t({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&H(i.assignedValue)&&H(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=$t({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(Me(e.type)&&Me(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}=$t({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=c}}else{if(Me(e.type)&&Me(t.type))throw new Error(`Cannot unify incompatible enum types: "${S(e.type)}" and "${S(t.type)}"`);if(Ye(e.type)&&Ye(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}=$t({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&H(i.assignedValue)&&H(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=$t({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(Je(e.type)&&Je(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}=$t({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&H(i.assignedValue)&&H(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=$t({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)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(on(e.type)&&on(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(rn(e.type)&&rn(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(We(e.type)&&We(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=i,xe(e.type.length)&&e.type.length.variableName&&!xe(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=pe(e.env,o),l=s[s.length-1];if(l)l&&(e.env=dt(e.env,l,{...l,value:[a]}));else{let{env:u}=Ve({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(Et(e.type)&&Et(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(ln(e.type)&&ln(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(bn(e.type)&&bn(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=i,ml(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(Jt(e.type)&&Jt(t.type)){let r=e.type,i=t.type,{expectedEnv:o,givenEnv:a}=$t({type:r.isFn.callType,env:e.env},{type:i.isFn.callType,env:t.env},n);e.env=o,t.env=a}else if(ae(e.type)&&ae(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:f}=$t({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=f}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=$t({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?Gt(_.type)&&l.push(..._.type.implicitParameters):l.push(_);let u=[],c=[],f=[];for(let _ of s)_.isEffectRowSpread?Gt(_.type)?c.push(_):G(_.type)&&_.type.isEffectsRow&&f.push(_):u.push(_);if(f.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${f.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let p=new Set;for(let _ of u)for(let d=0;d<l.length;d++)if(!p.has(d)&&_.type.id===l[d].type.id){let{expectedEnv:y,givenEnv:g}=$t({type:_.type,env:e.env},{type:l[d].type,env:t.env},n);e.env=y,t.env=g,p.add(d);break}for(let _ of c){let d=_.type.implicitParameters;for(let y of d)for(let g=0;g<l.length;g++)if(!p.has(g)&&y.type.id===l[g].type.id){let{expectedEnv:h,givenEnv:v}=$t({type:y.type,env:e.env},{type:l[g].type,env:t.env},n);e.env=h,t.env=v,p.add(g);break}}if(f.length===1){let _=f[0],d=[];for(let y=0;y<l.length;y++)p.has(y)||d.push(l[y]);if(G(_.type)&&_.type.isEffectsRow){let y=Gr(d),g=he(y),h=pe(e.env,_.type.name),v=h[h.length-1];if(v)e.env=dt(e.env,v,{...v,value:[g]});else{let{env:E}=Ve({env:e.env,variable:{name:_.type.name,value:[g],type:g.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=E}}}}let{expectedEnv:o,givenEnv:a}=$t({type:r.return.type,env:e.env},{type:i.return.type,env:t.env},n);e.env=o,t.env=a}else if(!(vt(e.type)&&!vt(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
|
|
148
|
+
})`}function Eu({arcType:e,env:t,context:n}){let r=Em(e),i=$m(e),o=Cm(e);return t=Qn({label:L.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=Qn({label:L.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=Qn({label:L.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function An(e,t,n,r){let i=`${e}()`,o=$n(i),a=M({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Wt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:Un(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function bm({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Zo(i.type,t))&&(t=An("Send",e,t,n)),t}function km({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=An("Rc",e,t,n)),t}function wm({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Zo(o.type,t)))&&(t=An("Send",e,t,n)),t}function $u({unionType:e,env:t,context:n}){return e.fields.every(i=>Zo(i.type,t))&&(t=An("Send",e,t,n)),t}function Fm({structType:e,env:t,context:n}){return e.isReferenceSemantics?Br(e,new Set,t)||(t=An("Acyclic",e,t,n)):e.fields.every(i=>Ei(i.type,t))&&(t=An("Acyclic",e,t,n)),t}function Lm({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Ei(o.type,t)))&&(t=An("Acyclic",e,t,n)),t}function Cu({unionType:e,env:t,context:n}){return e.fields.every(i=>Ei(i.type,t))&&(t=An("Acyclic",e,t,n)),t}function Am({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>bi(i.type,t,new Set([e.id])))&&(t=An("Comptime",e,t,n)),t}function Im({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>bi(o.type,t,new Set([e.id]))))&&(t=An("Comptime",e,t,n)),t}function Nm({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=An("Runtime",e,t,n),t):(e.fields.every(i=>ki(i.type,t,new Set([e.id])))&&(t=An("Runtime",e,t,n)),t)}function xm({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>ki(o.type,t,new Set([e.id]))))&&(t=An("Runtime",e,t,n)),t}function bu({unionType:e,env:t,context:n}){return t=An("Runtime",e,t,n),t}function Sm({tupleType:e,env:t,context:n}){return e.fields.every(i=>Zo(i.type,t))&&(t=An("Send",e,t,n)),t}function Vm({tupleType:e,env:t,context:n}){return e.fields.every(i=>bi(i.type,t,new Set([e.id])))&&(t=An("Comptime",e,t,n)),t}function Dm({tupleType:e,env:t,context:n}){return e.fields.every(i=>ki(i.type,t,new Set([e.id])))&&(t=An("Runtime",e,t,n)),t}function wi({structType:e,env:t,context:n,errorToken:r}){return t=bm({structType:e,env:t,context:n}),t=km({structType:e,env:t,context:n}),t=Fm({structType:e,env:t,context:n}),t=Am({structType:e,env:t,context:n}),t=Nm({structType:e,env:t,context:n}),t=cm({structType:e,env:t,context:n}),Ra(e,t,r,n),t}function ku({enumType:e,env:t,context:n,errorToken:r}){return t=wm({enumType:e,env:t,context:n}),t=Lm({enumType:e,env:t,context:n}),t=Im({enumType:e,env:t,context:n}),t=xm({enumType:e,env:t,context:n}),t=pm({enumType:e,env:t,context:n}),Ra(e,t,r,n),t}function wu({tupleType:e,env:t,context:n,errorToken:r}){return t=Sm({tupleType:e,env:t,context:n}),t=Vm({tupleType:e,env:t,context:n}),t=Dm({tupleType:e,env:t,context:n}),Ra(e,t,r,n),t}function rr(e,t){let n=pe(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&q(r.value[0])){let i=r.value[0];if(Je(i.value))return i.value}}function pn(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=>{var l,u;return s.name===t.name&&((u=(l=s.value)==null?void 0:l[0])==null?void 0:u.tag)==="Type"});if(a&&a.value){let s=a.value[0];if(s.value===t||G(s.value)&&s.value.id===t.id)return t;G(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=pe(e,t.name,a=>{var s,l;return((l=(s=a.value)==null?void 0:s[0])==null?void 0:l.tag)==="Type"});if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(G(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==null?void 0: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==null?void 0:c.tag)==="Type"){let f=c;if(f.value===t){a=!0;break}if(G(f.value)&&f.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(G(t));return r.value}var Os=null;function ti(){if(Os)return Os;let e=xt(),t=it(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Os=n,n}var Rs=null;function Ki(){if(Rs)return Rs;let e=xt(),t=it(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,Rs=n,n}var Ps=null;function gn(){if(Ps)return Ps;let e=xt(),t=it(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,Ps=n,n}var Us=null;function On(){if(Us)return Us;let e=xt(),t=it(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,Us=n,n}var zs=new Map;function jo(e){if(zs.has(e))return zs.get(e);let t=xt(),n=it(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,zs.set(e,i),i}function Jo(){return jo(On())}var Bs=null;function Ct(){if(Bs)return Bs;let e=xt(),t=it(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,Bs=n,n}var Gs=null;function Ht(){if(Gs)return Gs;let e=xt(),t=it(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,Gs=n,n}var Ws=null;function Xi(){if(Ws)return Ws;let e=xt(),t=it(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,Ws=n,n}var qs=null;function Qi(){if(qs)return qs;let e=xt(),t=it(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,qs=n,n}var Hs=null;function Zi(){if(Hs)return Hs;let e=xt(),t=it(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,Hs=n,n}var Ys=null;function Ji(){if(Ys)return Ys;let e=xt(),t=it(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,Ys=n,n}var js=null;function eo(){if(js)return js;let e=xt(),t=it(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,js=n,n}var Ks=null;function to(){if(Ks)return Ks;let e=xt(),t=it(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,Ks=n,n}var Xs=null;function ni(){if(Xs)return Xs;let e=xt(),t=it(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,Xs=n,n}var Qs=null;function no(){if(Qs)return Qs;let e=xt(),t=it(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,Qs=n,n}var Zs=null;function ro(){if(Zs)return Zs;let e=xt(),t=it(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,Zs=n,n}var Js=null;function io(){if(Js)return Js;let e=xt(),t=it(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,Js=n,n}var el=null;function ri(){if(el)return el;let e=xt(),t=it(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,el=n,n}var tl=null;function vr(){if(tl)return tl;let e=xt(),t=it(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,tl=n,n}var nl=null;function Lu(){if(nl)return nl;let e=xt(),t=it(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,nl=n,n}var rl=null;function Au(){if(rl)return rl;let e=xt(),t=it(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,rl=n,n}var il=null;function Iu(){if(il)return il;let e=xt(),t=it(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,il=n,n}var ol=null;function Nu(){if(ol)return ol;let e=xt(),t=it(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,ol=n,n}var al=null;function xu(){if(al)return al;let e=xt(),t=it(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,al=n,n}var sl=null;function Su(){if(sl)return sl;let e=xt(),t=it(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,sl=n,n}var ll=null;function Vu(){if(ll)return ll;let e=xt(),t=it(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,ll=n,n}var ul=null;function Du(){if(ul)return ul;let e=xt(),t=it(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,ul=n,n}var cl=null;function Mu(){if(cl)return cl;let e=xt(),t=it(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,cl=n,n}var fl=null;function Ou(){if(fl)return fl;let e=xt(),t=it(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,fl=n,n}function It(e){return Un(0,e)}function Nr(e,t){let n=xt(),r=it(n),i={id:`array_${e.id+"_"+xs(tt(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var _l=new Map;function Ua(e){if(_l.has(e))return _l.get(e);let t=xt(),n=it(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,_l.set(e,r),r}function _u(e){var r;let n=pe(e,"str").find(i=>{var o;return q((o=i.value)==null?void 0:o[0])&&i.value[0].type});if(!n||!q((r=n.value)==null?void 0:r[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var pl;function Ru(){if(pl)return pl;let e=xt(),t=it(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,pl=n,n}function za(e){let t=xt(),n=it(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Li(e,t=!1,n=!1){let r=it(e),i={id:`struct_${yt(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function Ba(e){return{id:`module_${yt(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function it(e){return{id:`trait_${yt(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function Pu(e){let t=it(e),n={id:`enum_${yt(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function Uu(e){let t=it(e),n={id:`union_${yt(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function fo({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,isClosure:u}){let c=xt(),f=it(c),p={id:`fn_${yt(a.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,implicitParameters:n??[],variadicParameter:r,whereClauseExprs:i,return:o,env:a,parametersFrame:s,SelfType:l,trait:f,isClosure:u};return f.receiverType=p,p}var dl=new Map;function Ai(e){if(dl.has(e))return dl.get(e);let t=xt(),n=it(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,dl.set(e,r),r}var ml=new Map;function zu(e,t){if(ml.has(e))return ml.get(e);let n=it(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,ml.set(e,r),r}var yl=new Map;function Bu(e,t){if(yl.has(e))return yl.get(e);let n=it(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,yl.set(e,r),r}function Kn(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=it(a),u=(r==null?void 0:r.map(p=>({traitType:p,frameLevel:-1})))??[],c=(i==null?void 0:i.map(p=>({traitType:p,frameLevel:-1})))??[],f={id:n??`sometype_${yt(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=f,rr(a,"Runtime")&&An("Runtime",f,a,s),vu({someType:f,env:a,context:{SelfType:f,stdPath:""}}),f}var Pa=new Map;function Ii(e,t){let n=it(t),r=Un(1),i={id:`effects_row_sometype_${yt(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 Wr(e){let t=xt(),n=it(t),r={id:`EffectsRow_${yt(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function Un(e,t){if(Pa.has(e)){let i=Pa.get(e);if(i.has(t))return i.get(t)}else Pa.set(e,new Map);let n=it(xt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,Pa.get(e).set(t,r),r}function Ni({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function Gu(e,t){let n=`fn_trait_${e.id}`,r=it(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function Fu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${S(a.type)}`).join(","),o=S(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${S(n.type)}`}).join(";")}function ea({requiredTraits:e,env:t,negativeTraits:n}){let r=it(t),i=e.map(c=>Fu(c)).join("__"),o=n?n.map(c=>Fu(c)).join("__"):"",a=`dyn_${xs(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=(n==null?void 0: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 Wu(e,t){return!gt(e)||!gt(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function ir(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),G(t))return e===t.id;if(Ie(t))return t.fields.some(r=>ir(e,r.type,n));if(Me(t))return t.variants.some(r=>r.fields?r.fields.some(i=>ir(e,i.type,n)):!1);if(qe(t))return t.fields.some(r=>ir(e,r.type,n));if(We(t)||Et(t)||un(t))return ir(e,t.childType,n);if(Xe(t))return!1;if(on(t)||rn(t))return ir(e,t.childType,n);if(ae(t))return t.parameters.some(r=>ir(e,r.type,n))||ir(e,t.return.type,n);if(bn(t)){if(ir(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(ir(e,r.type,n))return!0;return!1}return Jt(t)?ir(e,t.isFn.callType,n):!1}function $t(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}),G(e.type)&&G(t.type)){let r=pn(e.env,e.type),i=pn(t.env,t.type);if(G(r))if(G(i)){if(r!==i){let o=ye(t.type);{let a=pe(e.env,e.type.name),s=a[a.length-1];if(s)e.env=mt(e.env,s,{...s,value:[o]});else{let{env:l}=Se({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=pe(t.env,t.type.name),s=a[a.length-1];if(s)t.env=mt(t.env,s,{...s,value:[o]});else{let{env:l}=Se({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=ye(i),a=pe(e.env,e.type.name),s=a[a.length-1];if(s)e.env=mt(e.env,s,{...s,value:[o]});else{let{env:l}=Se({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=ye(r),a=pe(t.env,t.type.name),s=a[a.length-1];if(s)t.env=mt(t.env,s,{...s,value:[o]});else{let{env:l}=Se({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=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(Jt(l)){let u=a.find(c=>Jt(c.traitType));if(u&&Jt(u.traitType)){let{expectedEnv:c,givenEnv:f}=$t({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=f}}else if(bn(l)){let u=a.find(c=>bn(c.traitType));if(u&&bn(u.traitType)){let{expectedEnv:c,givenEnv:f}=$t({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=f,gl(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(G(e.type)){let r=pn(e.env,e.type);if(G(r)&&(r.id===e.type.id||r.name===e.type.name)){if(ir(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${S(t.type)}" because it would create an infinite type.`);let i=ye(t.type),o=pe(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=mt(e.env,a,{...a,value:[i]}));else{let{env:s}=Se({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(Jt(s)&&ae(t.type)){let l=s.isFn.callType,{expectedEnv:u,givenEnv:c}=$t({type:l,env:e.env},{type:t.type,env:t.env},n);e.env=u,t.env=c}else if(bn(s)&&bn(t.type)){let{expectedEnv:l,givenEnv:u}=$t({type:s.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=l,t.env=u,gl(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!G(r)){let{expectedEnv:i,givenEnv:o}=$t({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=i,t.env=o}}else if(G(t.type)){let r=pn(t.env,t.type);if(G(r)){if(ir(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${S(e.type)}" because it would create an infinite type.`);let i=ye(e.type),o=pe(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=mt(t.env,a,{...a,value:[i]}));else{let{env:s}=Se({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:i,givenEnv:o}=$t({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=i,t.env=o}}else if(qe(e.type)&&qe(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}=$t({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(qe(e.type)&&qe(t.type))throw new Error(`Cannot unify incompatible tuple types: "${S(e.type)}" and "${S(t.type)}"`);if(Ie(e.type)&&Ie(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: "${S(e.type)}" and "${S(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}=$t({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&q(i.assignedValue)&&q(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=$t({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(Me(e.type)&&Me(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}=$t({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=c}}else{if(Me(e.type)&&Me(t.type))throw new Error(`Cannot unify incompatible enum types: "${S(e.type)}" and "${S(t.type)}"`);if(je(e.type)&&je(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}=$t({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&q(i.assignedValue)&&q(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=$t({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(Je(e.type)&&Je(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}=$t({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&q(i.assignedValue)&&q(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=$t({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)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(on(e.type)&&on(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(rn(e.type)&&rn(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(We(e.type)&&We(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=i,Ve(e.type.length)&&e.type.length.variableName&&!Ve(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=pe(e.env,o),l=s[s.length-1];if(l)l&&(e.env=mt(e.env,l,{...l,value:[a]}));else{let{env:u}=Se({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(Et(e.type)&&Et(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(un(e.type)&&un(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(bn(e.type)&&bn(t.type)){let{expectedEnv:r,givenEnv:i}=$t({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=i,gl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(Jt(e.type)&&Jt(t.type)){let r=e.type,i=t.type,{expectedEnv:o,givenEnv:a}=$t({type:r.isFn.callType,env:e.env},{type:i.isFn.callType,env:t.env},n);e.env=o,t.env=a}else if(ae(e.type)&&ae(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:f}=$t({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=f}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=$t({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?Gt(_.type)&&l.push(..._.type.implicitParameters):l.push(_);let u=[],c=[],f=[];for(let _ of s)_.isEffectRowSpread?Gt(_.type)?c.push(_):G(_.type)&&_.type.isEffectsRow&&f.push(_):u.push(_);if(f.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${f.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let p=new Set;for(let _ of u)for(let d=0;d<l.length;d++)if(!p.has(d)&&_.type.id===l[d].type.id){let{expectedEnv:y,givenEnv:g}=$t({type:_.type,env:e.env},{type:l[d].type,env:t.env},n);e.env=y,t.env=g,p.add(d);break}for(let _ of c){let d=_.type.implicitParameters;for(let y of d)for(let g=0;g<l.length;g++)if(!p.has(g)&&y.type.id===l[g].type.id){let{expectedEnv:h,givenEnv:v}=$t({type:y.type,env:e.env},{type:l[g].type,env:t.env},n);e.env=h,t.env=v,p.add(g);break}}if(f.length===1){let _=f[0],d=[];for(let y=0;y<l.length;y++)p.has(y)||d.push(l[y]);if(G(_.type)&&_.type.isEffectsRow){let y=Wr(d),g=ye(y),h=pe(e.env,_.type.name),v=h[h.length-1];if(v)e.env=mt(e.env,v,{...v,value:[g]});else{let{env:E}=Se({env:e.env,variable:{name:_.type.name,value:[g],type:g.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=E}}}}let{expectedEnv:o,givenEnv:a}=$t({type:r.return.type,env:e.env},{type:i.return.type,env:t.env},n);e.env=o,t.env=a}else if(!(gt(e.type)&&!gt(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
|
|
149
149
|
Expected: "${S(e.type)}"
|
|
150
|
-
Given: "${S(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function ml(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?Gt(c.type)?a.push(c):G(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?Gt(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let f=0;f<l.length;f++)if(!u.has(f)&&c.type.id===l[f].type.id){let{expectedEnv:p,givenEnv:_}=$t({type:c.type,env:n.env},{type:l[f].type,env:r.env},i);n.env=p,r.env=_,u.add(f);break}for(let c of a){let f=c.type.implicitParameters;for(let p of f)for(let _=0;_<l.length;_++)if(!u.has(_)&&p.type.id===l[_].type.id){let{expectedEnv:d,givenEnv:y}=$t({type:p.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=d,r.env=y,u.add(_);break}}if(s.length===1){let c=s[0],f=[];for(let p=0;p<l.length;p++)u.has(p)||f.push(l[p]);if(G(c.type)&&c.type.isEffectsRow){let p=Gr(f),_=he(p),d=pe(n.env,c.type.name),y=d[d.length-1];if(y)n.env=dt(n.env,y,{...y,value:[_]});else{let{env:g}=Ve({env:n.env,variable:{name:c.type.name,value:[_],type:_.type,isCompileTimeOnly:!0,token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=g}}}}function yl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=_r(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function Wu(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=_r(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function gl(e){let t=[];for(let n of e)n.isEffectRowSpread&&Gt(n.type)?t.push(...gl(n.type.implicitParameters)):(n.isEffectRowSpread&&G(n.type)&&n.type.isEffectsRow,t.push(n));return t}function ie(e,t,n=!1,r=new Set){var a,s;let i=e.type.id,o=t.type.id;if(i&&o&&(Ae(e.type)||Me(e.type)||Rt(e.type))&&(Ae(t.type)||Me(t.type)||Rt(t.type))){let l=`${i}:${o}`;if(r.has(l))return!0;r.add(l)}if(Vo(e.type)&&Vo(t.type))return e.type.tag===t.type.tag;if((zt(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"||gr(e.type))&&zt(t.type))return!(n&&!zt(e.type));if((sn(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&sn(t.type))return!(n&&!sn(e.type));if((tn(e.type)||Et(e.type)&&yr(e.type.childType)||Xe(e.type)&&(yr(e.type.childType)||Hi(e.type.childType)))&&tn(t.type))return!0;if(gr(e.type)&&gr(t.type))return e.type.tag===t.type.tag;if(nn(e.type)&&nn(t.type))return!0;if(ln(e.type)&&ln(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(We(e.type)&&We(t.type))return an({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Et(e.type)&&Et(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(He(e.type)&&He(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(!ie({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Ae(e.type)&&Ae(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!je(e.type)&&!je(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ie({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Me(e.type)&&Me(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],c=t.type.variants[l];if(u.name!==c.name||((a=u.fields)==null?void 0:a.length)!==((s=c.fields)==null?void 0:s.length))return!1;if(u.fields)for(let f=0;f<u.fields.length;f++){let p=u.fields[f],_=c.fields[f];if(p.label!==_.label||!ie({type:p.type,env:e.env},{type:_.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(Rt(e.type)&&Rt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!je(e.type)&&!je(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ie({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Ye(e.type)&&Ye(t.type)){for(let l of e.type.fields){let u=t.type.fields.find(c=>c.label===l.label);if(!u||!ie({type:l.type,env:e.env},{type:u.type,env:t.env},n,r))return!1}return!0}if(Je(e.type)){if(Je(t.type)){if(Jt(e.type))return!(!Jt(t.type)||!Hu({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(bn(e.type)){if(!bn(t.type)||!ie({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let l=gl(e.type.isFuture.effects),u=gl(t.type.isFuture.effects);if(l.length>0&&u.length>0){if(l.length!==u.length)return!1;let c=new Set;for(let f of l){let p=!1;for(let _=0;_<u.length;_++)if(!c.has(_)&&ie({type:f.type,env:e.env},{type:u[_].type,env:t.env},n,r)){c.add(_),p=!0;break}if(!p)return!1}}return!0}return e.type.id===t.type.id}return vt(t.type)&&t.type.baseType&&t.type.baseType.trait&&Je(e.type)?ie({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(ae(e.type)&&ae(t.type))return Hu({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(vt(e.type)&&vt(t.type))return Gu(e.type,t.type);if(Xe(e.type)&&Xe(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(on(e.type)&&on(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(rn(e.type)&&rn(t.type))return ie({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(et(e.type)&&et(t.type)){for(let{traitType:l}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:c})=>ie({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:l}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:c})=>ie({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1}return!0}if(G(e.type)){if(et(t.type))return!0;if(G(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?ie({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=yl(e.env,e.type),u=yl(t.env,t.type);if(n&&l.length!==u.length)return!1;for(let f of l)if(!u.find(_=>ie({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1;let c=Wu(e.env,e.type);if(c.length>0){for(let f of c)if(u.find(_=>ie({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!ie({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 ie({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let l=yl(e.env,e.type);if(l.length===0)return!n;if(l.length>0){for(let p of l)if(!_n({targetType:t.type,traitType:p,env:e.env}))break;let c=Wu(e.env,e.type);if(c.length>0){for(let p of c)if(_n({targetType:t.type,traitType:p,env:e.env}))return!1}let f=!0;for(let p of l)if(!_n({targetType:t.type,traitType:p,env:e.env})){f=!1;break}if(f)return!0}let u=gn(e.env,e.type);return e.type===u?!1:ie({type:u,env:e.env},t,n,r)}}else if(G(t.type)){if(t.type.resolvedConcreteType&&ie(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=gn(t.env,t.type);return t.type===l?!1:ie(e,{type:l,env:t.env},n,r)}return!1}function Hu(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}=$t({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(!ie({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||!ie({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return ie({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function hl(e){var t;return T(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||A(e)&&A(e.func)&&(T(e.func,V.fn)||T(e.func,V.unsafe_fn)||T(e.func,V.Fn))||!e.$):!1}function vl(e,t){if(!A(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(A(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Tr(e){var t,n,r;if(Y(e))return Xt(e,V.escape);if(A(e)){if((t=e.$)!=null&&t.macroExpansion)return Tr(e.$.macroExpansion);if(T(e,V.cond)||T(e,V.match))return vl(e,Tr);if(hl(e)||A(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&H(e.func.$.value)&&ae(e.func.$.value.value)||A(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&H(e.func.$.value)&&wn(e.func.$.value.value))return!1;if(Tr(e.func))return!0;for(let i of e.args)if(Tr(i))return!0}return!1}function _o(e){var t,n,r;if(Y(e))return Xt(e,V.return)||Xt(e,V.escape);if(A(e)){if(T(e,V.return)||T(e,V.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return _o(e.$.macroExpansion);if(T(e,V.cond)||T(e,V.match))return vl(e,_o);if(hl(e)||A(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&H(e.func.$.value)&&ae(e.func.$.value.value)||A(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&H(e.func.$.value)&&wn(e.func.$.value.value))return!1;if(_o(e.func))return!0;for(let i of e.args)if(_o(i))return!0}return!1}function Vn(e){var t,n,r,i,o,a,s;if(A(e)){if(((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await")return!0;if((r=e.$)!=null&&r.macroExpansion)return Vn(e.$.macroExpansion);if(T(e,V.cond)||T(e,V.match))return vl(e,Vn);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||hl(e)||H((a=e.func.$)==null?void 0:a.value)&&ae(e.func.$.value.value)||A(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&H(e.func.$.value)&&wn(e.func.$.value.value))return!1;if(Vn(e.func))return!0;for(let l of e.args)if(Vn(l))return!0}return!1}var ue={tag:"Unit",type:vr()};function ta(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=pe(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function Ga(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(Sr(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)Sr(s,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 Sr(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,f=pe(e.$.env,u);if(f.length>0){let p=f[f.length-1];if(p&&!n.has(p.id)&&!p.isCompileTimeOnly){let _=`${p.name}:${p.frameLevel}`,d=r.get(_);if(d&&d!==p.id)i.set(p.id,d);else if(p.isOwningTheSameRcValueAs){let y=p.isOwningTheSameRcValueAs;if(!n.has(y.id)){let g={id:y.id,name:y.name,type:y.type,isOwningTheSameRcValueAs:void 0};n.set(y.id,g);let h=`${y.name}:${y.frameLevel}`;r.has(h)||r.set(h,y.id)}}else n.set(p.id,{id:p.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,p.id)}}}break;case"FnCall":{if(T(e,V.while)){let u=t.length;Sr(e.func,t,n,r,i,o,e);for(let f of e.args)Sr(f,t,n,r,i,o,e);let c=t.length;if(c>u)for(let f=u;f<c;f++)t[f].isInsideWhile=!0,t[f].whileNestingDepth=(t[f].whileNestingDepth??0)+1,t[f].enclosingWhileExpr||(t[f].enclosingWhileExpr=e);break}if(T(e,V.cond)){qu(e,t,n,r,i,o);break}if(T(e,V.match)){qu(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)Sr(u,t,n,r,i,o,e);break}Sr(e.func,t,n,r,i,o,e);for(let u of e.args)Sr(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)Sr(u,t,n,r,i,o,e);break}}}function qu(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;Sr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let f=t.length;Sr(c,t,n,r,i,o,e),l.push(t.slice(f))}r.clear();for(let[c,f]of s)r.set(c,f);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let f=0;f<u;f++){let p;for(let _ of l)if(f<_.length){p=_[f];break}p&&(p.index=t.length,p.isInsideCond=!0,f===0&&(p.needsOwnCondBranchField=!0),f>0&&(p.condBranchSourceIndex=c),t.push(p))}}}function Yu(e){let n=Ga(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&qn(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&qe(u)){let c=un(u);if(!c)return;let f=c.isFuture.outputType,p;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let d=l.token.value,y=pe(l.$.env,d);if(y.length>0){let g=y[y.length-1];g.isOwningTheSameRcValueAs?p=g.isOwningTheSameRcValueAs.id:p=g.id}}let _=ta(o);a.push({index:a.length,expr:i,resultType:f,futureType:c,targetVariableId:_,futureVariableId:p})}}},shouldSkipBody(i){return vn(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 vn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_async"}function qn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await"}function ju(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_state"}function Ku(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_spawn"}function gt(e){return Y(e)&&e.token.type==="identifier"||e.token.type==="operator"}function na(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=pe(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 ai(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else Y(e)&&(n=e.token.value);if(n){let o=pe(t,n),a=o[o.length-1];if(a!=null&&a.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${a.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Tl=!0;function xm({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=$n(`${L.___drop[0]}(${o.name})`),s=M({expr:a,env:i,context:{...n,expectedType:{env:i,type:ue.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function ra(e,t,n){var s,l;if(A(e)&&vn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)ra(u,t,n);if(A(e)&&A(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===L.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=pe(e.$.env,u);if(c.length>0){let f=c[c.length-1];t.has(f.id)||t.set(f.id,[]),t.get(f.id).push(e)}return}if(A(e)&&T(e,V.while))return;function i(u){var c,f;if(Ut((c=u.$)==null?void 0:c.controlFlow))return!0;if(A(u)&&T(u,V.begin)){let p=u.args[u.args.length-1];if(Ut((f=p==null?void 0:p.$)==null?void 0:f.controlFlow)||A(p)&&T(p,V.return))return!0}return!!(A(u)&&T(u,V.return))}function o(u){if(A(u)&&T(u,V.tuple,0))return!0;if(A(u)&&T(u,V.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(A(c)&&T(c,V.tuple,0))return!0}}return!1}function a(u,c){let f=[],p=[],_=[];for(let y=c;y<u.args.length;y++){let g=u.args[y];if(A(g)&&T(g,"=>",2)){let h=g.args[1],v=Xu(h);f.push(v),p.push(i(h)),_.push(o(h))}}let d=new Set;for(let y of f){for(let g of y.dupCalls.keys())d.add(g);for(let g of y.varsWithPartialBranchDups)n.add(g)}if(f.length>0)for(let y of d){let g=[],h=[];for(let v=0;v<f.length;v++){let E=f[v],k=E.dupCalls.has(y),b=p[v];if(k){let F=E.dupCalls.get(y);b?g.push(...F):h.push(...F)}}for(let v of g)t.has(y)||t.set(y,[]),v.__isEarlyReturnDup=!0,t.get(y).push(v);if(h.length>0){let v=0,E=0;for(let k=0;k<f.length;k++)p[k]||(v++,f[k].dupCalls.has(y)&&E++);if(E===v){t.has(y)||t.set(y,[]);for(let k of h)t.get(y).push(k)}else n.add(y)}}}if(A(e)&&T(e,V.cond)){a(e,0);return}if(A(e)&&T(e,V.match)){e.args[0]&&ra(e.args[0],t,n),a(e,1);return}if(A(e)){ra(e.func,t,n);for(let u of e.args)ra(u,t,n)}}function Xu(e){let t=new Map,n=new Set;return ra(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function Wa(e){return A(e)&&T(e,V.tuple,0)}function El(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),A(e)){El(e.func,t);for(let r of e.args)El(r,t)}}function Yt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var v,E,k,b,F,$,C,I,N;if(!A(e)||!T(e,V.begin)){let x={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:V.begin[0]}},args:[rt(e)],token:{...e.token,value:V.begin[0]}};Ir(e,x),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e;t=mt(t,void 0,!0);for(let x=0;x<r.length;x++){let D=r[x],{env:P}=Ve({env:t,variable:D});t=P}let s=o[o.length-1],l,u=!1;for(let x=0;x<o.length;x++){let D=o[x];if(Y(D)&&Xt(D,V.return)||A(D)&&T(D,V.return)){if(x!==o.length-1&&!(x===o.length-2&&Wa(o[o.length-1])))throw m({token:D.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(A(D)&&Oe(D,V.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:D.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=D,Y(D)){D.$={env:t,type:ue.type,value:ue,pathCollection:[],controlFlow:oi("return")},s=D;break}else{Oe(D,V.return,1);let P=D.args[0],U=M({expr:P,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!U.$)throw m({token:P.token,errorMessage:`Return expression is not evaluated correctly:
|
|
151
|
-
${w(P)}`});if(((v=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:v.kind)==="function-body"&&G(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let
|
|
150
|
+
Given: "${S(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function gl(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?Gt(c.type)?a.push(c):G(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?Gt(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let f=0;f<l.length;f++)if(!u.has(f)&&c.type.id===l[f].type.id){let{expectedEnv:p,givenEnv:_}=$t({type:c.type,env:n.env},{type:l[f].type,env:r.env},i);n.env=p,r.env=_,u.add(f);break}for(let c of a){let f=c.type.implicitParameters;for(let p of f)for(let _=0;_<l.length;_++)if(!u.has(_)&&p.type.id===l[_].type.id){let{expectedEnv:d,givenEnv:y}=$t({type:p.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=d,r.env=y,u.add(_);break}}if(s.length===1){let c=s[0],f=[];for(let p=0;p<l.length;p++)u.has(p)||f.push(l[p]);if(G(c.type)&&c.type.isEffectsRow){let p=Wr(f),_=ye(p),d=pe(n.env,c.type.name),y=d[d.length-1];if(y)n.env=mt(n.env,y,{...y,value:[_]});else{let{env:g}=Se({env:n.env,variable:{name:c.type.name,value:[_],type:_.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=g}}}}function hl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=_r(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function qu(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=_r(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function vl(e){let t=[];for(let n of e)n.isEffectRowSpread&&Gt(n.type)?t.push(...vl(n.type.implicitParameters)):(n.isEffectRowSpread&&G(n.type)&&n.type.isEffectsRow,t.push(n));return t}function ie(e,t,n=!1,r=new Set){var a,s;let i=e.type.id,o=t.type.id;if(i&&o&&(Ie(e.type)||Me(e.type)||Rt(e.type))&&(Ie(t.type)||Me(t.type)||Rt(t.type))){let l=`${i}:${o}`;if(r.has(l))return!0;r.add(l)}if(Vo(e.type)&&Vo(t.type))return e.type.tag===t.type.tag;if((zt(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"||gr(e.type))&&zt(t.type))return!(n&&!zt(e.type));if((ln(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&ln(t.type))return!(n&&!ln(e.type));if((tn(e.type)||Et(e.type)&&yr(e.type.childType)||Xe(e.type)&&(yr(e.type.childType)||qi(e.type.childType)))&&tn(t.type))return!0;if(gr(e.type)&&gr(t.type))return e.type.tag===t.type.tag;if(nn(e.type)&&nn(t.type))return!0;if(un(e.type)&&un(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(We(e.type)&&We(t.type))return an({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Et(e.type)&&Et(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(qe(e.type)&&qe(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(!ie({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Ie(e.type)&&Ie(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ye(e.type)&&!Ye(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ie({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Me(e.type)&&Me(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],c=t.type.variants[l];if(u.name!==c.name||((a=u.fields)==null?void 0:a.length)!==((s=c.fields)==null?void 0:s.length))return!1;if(u.fields)for(let f=0;f<u.fields.length;f++){let p=u.fields[f],_=c.fields[f];if(p.label!==_.label||!ie({type:p.type,env:e.env},{type:_.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(Rt(e.type)&&Rt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ye(e.type)&&!Ye(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ie({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(je(e.type)&&je(t.type)){for(let l of e.type.fields){let u=t.type.fields.find(c=>c.label===l.label);if(!u||!ie({type:l.type,env:e.env},{type:u.type,env:t.env},n,r))return!1}return!0}if(Je(e.type)){if(Je(t.type)){if(Jt(e.type))return!(!Jt(t.type)||!Hu({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(bn(e.type)){if(!bn(t.type)||!ie({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let l=vl(e.type.isFuture.effects),u=vl(t.type.isFuture.effects);if(l.length>0&&u.length>0){if(l.length!==u.length)return!1;let c=new Set;for(let f of l){let p=!1;for(let _=0;_<u.length;_++)if(!c.has(_)&&ie({type:f.type,env:e.env},{type:u[_].type,env:t.env},n,r)){c.add(_),p=!0;break}if(!p)return!1}}return!0}return e.type.id===t.type.id}return gt(t.type)&&t.type.baseType&&t.type.baseType.trait&&Je(e.type)?ie({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(ae(e.type)&&ae(t.type))return Hu({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(gt(e.type)&>(t.type))return Wu(e.type,t.type);if(Xe(e.type)&&Xe(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(on(e.type)&&on(t.type))return ie({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(rn(e.type)&&rn(t.type))return ie({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(et(e.type)&&et(t.type)){for(let{traitType:l}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:c})=>ie({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:l}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:c})=>ie({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1}return!0}if(G(e.type)){if(et(t.type))return!0;if(G(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?ie({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=hl(e.env,e.type),u=hl(t.env,t.type);if(n&&l.length!==u.length)return!1;for(let f of l)if(!u.find(_=>ie({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1;let c=qu(e.env,e.type);if(c.length>0){for(let f of c)if(u.find(_=>ie({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!ie({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 ie({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let l=hl(e.env,e.type);if(l.length===0)return!n;if(l.length>0){for(let p of l)if(!sn({targetType:t.type,traitType:p,env:e.env}))break;let c=qu(e.env,e.type);if(c.length>0){for(let p of c)if(sn({targetType:t.type,traitType:p,env:e.env}))return!1}let f=!0;for(let p of l)if(!sn({targetType:t.type,traitType:p,env:e.env})){f=!1;break}if(f)return!0}let u=pn(e.env,e.type);return e.type===u?!1:ie({type:u,env:e.env},t,n,r)}}else if(G(t.type)){if(t.type.resolvedConcreteType&&ie(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=pn(t.env,t.type);return t.type===l?!1:ie(e,{type:l,env:t.env},n,r)}return!1}function Hu(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}=$t({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(!ie({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||!ie({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return ie({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function Tl(e){var t;return T(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||I(e)&&I(e.func)&&(T(e.func,V.fn)||T(e.func,V.unsafe_fn)||T(e.func,V.Fn))||!e.$):!1}function El(e,t){if(!I(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(I(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Tr(e){var t,n,r;if(Y(e))return Xt(e,V.escape);if(I(e)){if((t=e.$)!=null&&t.macroExpansion)return Tr(e.$.macroExpansion);if(T(e,V.cond)||T(e,V.match))return El(e,Tr);if(Tl(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&q(e.func.$.value)&&ae(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&q(e.func.$.value)&&wn(e.func.$.value.value))return!1;if(Tr(e.func))return!0;for(let i of e.args)if(Tr(i))return!0}return!1}function _o(e){var t,n,r;if(Y(e))return Xt(e,V.return)||Xt(e,V.escape);if(I(e)){if(T(e,V.return)||T(e,V.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return _o(e.$.macroExpansion);if(T(e,V.cond)||T(e,V.match))return El(e,_o);if(Tl(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&q(e.func.$.value)&&ae(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&q(e.func.$.value)&&wn(e.func.$.value.value))return!1;if(_o(e.func))return!0;for(let i of e.args)if(_o(i))return!0}return!1}function Vn(e){var t,n,r,i,o,a,s;if(I(e)){if(((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await")return!0;if((r=e.$)!=null&&r.macroExpansion)return Vn(e.$.macroExpansion);if(T(e,V.cond)||T(e,V.match))return El(e,Vn);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||Tl(e)||q((a=e.func.$)==null?void 0:a.value)&&ae(e.func.$.value.value)||I(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&q(e.func.$.value)&&wn(e.func.$.value.value))return!1;if(Vn(e.func))return!0;for(let l of e.args)if(Vn(l))return!0}return!1}var ue={tag:"Unit",type:vr()};function ta(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=pe(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function Ga(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(xr(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)xr(s,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 xr(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,f=pe(e.$.env,u);if(f.length>0){let p=f[f.length-1];if(p&&!n.has(p.id)&&!p.isCompileTimeOnly){let _=`${p.name}:${p.frameLevel}`,d=r.get(_);if(d&&d!==p.id)i.set(p.id,d);else if(p.isOwningTheSameRcValueAs){let y=p.isOwningTheSameRcValueAs;if(!n.has(y.id)){let g={id:y.id,name:y.name,type:y.type,isOwningTheSameRcValueAs:void 0};n.set(y.id,g);let h=`${y.name}:${y.frameLevel}`;r.has(h)||r.set(h,y.id)}}else n.set(p.id,{id:p.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,p.id)}}}break;case"FnCall":{if(T(e,V.while)){let u=t.length;xr(e.func,t,n,r,i,o,e);for(let f of e.args)xr(f,t,n,r,i,o,e);let c=t.length;if(c>u)for(let f=u;f<c;f++)t[f].isInsideWhile=!0,t[f].whileNestingDepth=(t[f].whileNestingDepth??0)+1,t[f].enclosingWhileExpr||(t[f].enclosingWhileExpr=e);break}if(T(e,V.cond)){Yu(e,t,n,r,i,o);break}if(T(e,V.match)){Yu(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)xr(u,t,n,r,i,o,e);break}xr(e.func,t,n,r,i,o,e);for(let u of e.args)xr(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)xr(u,t,n,r,i,o,e);break}}}function Yu(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;xr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let f=t.length;xr(c,t,n,r,i,o,e),l.push(t.slice(f))}r.clear();for(let[c,f]of s)r.set(c,f);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let f=0;f<u;f++){let p;for(let _ of l)if(f<_.length){p=_[f];break}p&&(p.index=t.length,p.isInsideCond=!0,f===0&&(p.needsOwnCondBranchField=!0),f>0&&(p.condBranchSourceIndex=c),t.push(p))}}}function ju(e){let n=Ga(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&Hn(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&He(u)){let c=cn(u);if(!c)return;let f=c.isFuture.outputType,p;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let d=l.token.value,y=pe(l.$.env,d);if(y.length>0){let g=y[y.length-1];g.isOwningTheSameRcValueAs?p=g.isOwningTheSameRcValueAs.id:p=g.id}}let _=ta(o);a.push({index:a.length,expr:i,resultType:f,futureType:c,targetVariableId:_,futureVariableId:p})}}},shouldSkipBody(i){return vn(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 vn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_async"}function Hn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await"}function Ku(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_state"}function Xu(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_spawn"}function ht(e){return Y(e)&&e.token.type==="identifier"||e.token.type==="operator"}function na(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=pe(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 ai(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else Y(e)&&(n=e.token.value);if(n){let o=pe(t,n),a=o[o.length-1];if(a!=null&&a.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${a.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var $l=!0;function Mm({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=$n(`${L.___drop[0]}(${o.name})`),s=M({expr:a,env:i,context:{...n,expectedType:{env:i,type:ue.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function ra(e,t,n){var s,l;if(I(e)&&vn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)ra(u,t,n);if(I(e)&&I(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===L.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=pe(e.$.env,u);if(c.length>0){let f=c[c.length-1];t.has(f.id)||t.set(f.id,[]),t.get(f.id).push(e)}return}if(I(e)&&T(e,V.while))return;function i(u){var c,f;if(Ut((c=u.$)==null?void 0:c.controlFlow))return!0;if(I(u)&&T(u,V.begin)){let p=u.args[u.args.length-1];if(Ut((f=p==null?void 0:p.$)==null?void 0:f.controlFlow)||I(p)&&T(p,V.return))return!0}return!!(I(u)&&T(u,V.return))}function o(u){if(I(u)&&T(u,V.tuple,0))return!0;if(I(u)&&T(u,V.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(I(c)&&T(c,V.tuple,0))return!0}}return!1}function a(u,c){let f=[],p=[],_=[];for(let y=c;y<u.args.length;y++){let g=u.args[y];if(I(g)&&T(g,"=>",2)){let h=g.args[1],v=Qu(h);f.push(v),p.push(i(h)),_.push(o(h))}}let d=new Set;for(let y of f){for(let g of y.dupCalls.keys())d.add(g);for(let g of y.varsWithPartialBranchDups)n.add(g)}if(f.length>0)for(let y of d){let g=[],h=[];for(let v=0;v<f.length;v++){let E=f[v],k=E.dupCalls.has(y),b=p[v];if(k){let F=E.dupCalls.get(y);b?g.push(...F):h.push(...F)}}for(let v of g)t.has(y)||t.set(y,[]),v.__isEarlyReturnDup=!0,t.get(y).push(v);if(h.length>0){let v=0,E=0;for(let k=0;k<f.length;k++)p[k]||(v++,f[k].dupCalls.has(y)&&E++);if(E===v){t.has(y)||t.set(y,[]);for(let k of h)t.get(y).push(k)}else n.add(y)}}}if(I(e)&&T(e,V.cond)){a(e,0);return}if(I(e)&&T(e,V.match)){e.args[0]&&ra(e.args[0],t,n),a(e,1);return}if(I(e)){ra(e.func,t,n);for(let u of e.args)ra(u,t,n)}}function Qu(e){let t=new Map,n=new Set;return ra(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function Wa(e){return I(e)&&T(e,V.tuple,0)}function Cl(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),I(e)){Cl(e.func,t);for(let r of e.args)Cl(r,t)}}function Yt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var v,E,k,b,F,$,C,A,N;if(!I(e)||!T(e,V.begin)){let x={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:V.begin[0]}},args:[nt(e)],token:{...e.token,value:V.begin[0]}};Ir(e,x),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e;t=dt(t,void 0,!0);for(let x=0;x<r.length;x++){let D=r[x],{env:P}=Se({env:t,variable:D});t=P}let s=o[o.length-1],l,u=!1;for(let x=0;x<o.length;x++){let D=o[x];if(Y(D)&&Xt(D,V.return)||I(D)&&T(D,V.return)){if(x!==o.length-1&&!(x===o.length-2&&Wa(o[o.length-1])))throw m({token:D.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(I(D)&&Oe(D,V.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:D.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=D,Y(D)){D.$={env:t,type:ue.type,value:ue,pathCollection:[],controlFlow:oi("return")},s=D;break}else{Oe(D,V.return,1);let P=D.args[0],U=M({expr:P,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!U.$)throw m({token:P.token,errorMessage:`Return expression is not evaluated correctly:
|
|
151
|
+
${w(P)}`});if(((v=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:v.kind)==="function-body"&&G(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let j=U.$.type;if(n.functionReturnImplConcreteType.length>0){let O=n.functionReturnImplConcreteType[0];if(!ie({type:O.concreteType,env:O.env},{type:j,env:t}))throw St([{token:D.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
|
-
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:
|
|
153
|
+
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:O.token,errorMessage:`First return has concrete type: ${S(O.concreteType)}`},{token:D.token,errorMessage:`Conflicting return has concrete type: ${S(j)}`}])}else n.functionReturnImplConcreteType.push({concreteType:j,env:t,token:D.token})}pt(U,!0),t=U.$.env,D.$={env:t,type:U.$.type,value:U.$.value,pathCollection:U.$.pathCollection,variableName:U.$.variableName,controlFlow:oi("return")},s=D;break}}else if(Y(D)&&Xt(D,V.break)){if(x!==o.length-1&&!(x===o.length-2&&Wa(o[o.length-1])))throw m({token:D.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:D.token,errorMessage:'The "break" keyword can only be used inside a loop.'});D.$={env:t,type:ue.type,value:ue,pathCollection:[],controlFlow:oi("break")},s=D;break}else if(Y(D)&&Xt(D,V.continue)){if(x!==o.length-1&&!(x===o.length-2&&Wa(o[o.length-1])))throw m({token:D.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:D.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});D.$={env:t,type:ue.type,value:ue,pathCollection:[],controlFlow:oi("continue")},s=D;break}else if(I(D)&&T(D,V.escape)){if(x!==o.length-1&&!(x===o.length-2&&Wa(o[o.length-1])))throw m({token:D.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw m({token:D.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=D,Oe(D,V.escape,1);let P=D.args[0],U=M({expr:P,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!U.$)throw m({token:P.token,errorMessage:`Escape expression is not evaluated correctly:
|
|
154
154
|
${w(P)}`});if(D.args[0]=U,!G(n.enclosingFunctionReturnType)&&!ie({type:n.enclosingFunctionReturnType,env:t},{type:U.$.type,env:t}))throw m({token:P.token,errorMessage:`Incompatible type for \`escape\` argument:
|
|
155
155
|
- Expected (enclosing function return type): ${S(n.enclosingFunctionReturnType)}
|
|
156
|
-
- Got: ${S(U.$.type)}`});pt(U,!0),t=U.$.env,D.$={env:t,type:U.$.type,value:U.$.value,pathCollection:U.$.pathCollection,variableName:U.$.variableName,controlFlow:oi("escape")},s=D;break}else{let P=M({expr:D,env:t,context:{...n,expectedType:x===o.length-1?a:void 0}});if((E=P.$)!=null&&E.env&&(t=(k=P.$)==null?void 0:k.env),x<o.length-1&&!u&&(((b=P.$)==null?void 0:b.value)===void 0||
|
|
157
|
-
${w(s)}`});let c=s.$.type;if(
|
|
158
|
-
${w(v)}`});let b=k.$.type;if(!
|
|
159
|
-
${S(b)}`});let F=k.$.value,$=new Set;if(E)if(
|
|
160
|
-
${w(C)}`});let
|
|
161
|
-
${w(E)}`});for(let C=0;C<b.fields.length;C++){let
|
|
162
|
-
${w(h)}`});v=h.token.value,E=v}else if(
|
|
163
|
-
${w($)}`});if(!
|
|
156
|
+
- Got: ${S(U.$.type)}`});pt(U,!0),t=U.$.env,D.$={env:t,type:U.$.type,value:U.$.value,pathCollection:U.$.pathCollection,variableName:U.$.variableName,controlFlow:oi("escape")},s=D;break}else{let P=M({expr:D,env:t,context:{...n,expectedType:x===o.length-1?a:void 0}});if((E=P.$)!=null&&E.env&&(t=(k=P.$)==null?void 0:k.env),x<o.length-1&&!u&&(((b=P.$)==null?void 0:b.value)===void 0||I(P)&&(T(P,"=")||T(P,":="))&&!P.$.isCompileTimeOnlyAssignment)&&(u=!0),Ut((F=P.$)==null?void 0:F.controlFlow)){s=P;break}}}if(!s.$)throw m({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
|
|
157
|
+
${w(s)}`});let c=s.$.type;if(Nt(s.$.controlFlow,"return")){if((($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body")try{$t({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!ie({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${S(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${S(c)}".`})}else if(((C=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:C.kind)==="async-block"&&n.expectedType)try{$t({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!ie({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${S(n.expectedType.type)}", but got "${S(c)}".`})}}if(l){let x=I(l)&&T(l,V.return,1)?l.args[0]:l;ai(x)}else ai(s);let f,p=s;I(s)&&T(s,V.return,1)&&(p=s.args[0]);let _=p?(A=p.$)==null?void 0:A.variableName:void 0;if(_){let x=pe(t,_);x.length&&(f=x[x.length-1])}f!=null&&f.isOwningTheRcValue&&f.frameLevel===t.frames.length-1&&!f.consumedAtToken?t=mt(t,f,{...f,consumedAtToken:s.token}):f&&p&&(hn(p,n),t=p.$.env);let d=po(t),y=[];if($l){if(i&&t.frames.length>=2){let O={...t,frames:t.frames.slice(0,-1)},z=po(O);d=[...d,...z]}let x=new Map,D=new Set,P=new Map,U=-1;if(I(e))for(let O=0;O<e.args.length;O++){let z=e.args[O];U<0&&_o(z)&&(U=O);let W=Qu(z);for(let[ee,de]of W.dupCalls){x.has(ee)||x.set(ee,[]);let se=x.get(ee);for(let K of de)se.includes(K)||(se.push(K),P.set(K,O))}for(let ee of W.varsWithPartialBranchDups)D.add(ee)}let j=new Set;for(let O of d){let z=O;for(;z.isOwningTheSameRcValueAs;)z=z.isOwningTheSameRcValueAs;let W=z.id,ee=x.get(W),de=!qt(z.type)&&Be(z.type),se=D.has(W),K=!1;if(U>=0&&ee&&ee.length>0)for(let te of ee){if(te.__isEarlyReturnDup)continue;let we=P.get(te);if(we!==void 0&&we>U){K=!0;break}}if(ee&&ee.length>0&&!de&&!se&&!K){let te=0,re=[],we=[];for(let ce of ee){let Q=ce;Q.__isEarlyReturnDup?re.push(ce):Q.__branchGroup?(te++,we.push(Q.__branchGroup)):(te++,re.push(ce))}if(te<=1){for(let ce of we)for(let Q of ce)j.add(Q);for(let ce of re)j.add(ce);ee.length=0,t=mt(t,O,{...O,consumedAtToken:s.token})}else y.push(O)}else y.push(O)}if(I(e))for(let O of e.args)Cl(O,j)}let g;if(($l?y:d).length>0){let x=Mm({variablesToDrop:$l?y:d,env:t,context:{...n,expectedType:void 0}});g=x.deferredDropExpressions,t=x.env}l&&l.$&&(l.$.deferredDropExpressions=g);let h=t.frames[t.frames.length-1];return t=Vt(t),e.$={env:t,type:s.$.type,value:u?void 0:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:g,poppedEnvFrame:h},f&&((N=p==null?void 0:p.$)!=null&&N.deferredDupExpressions)&&p.$.deferredDupExpressions.length>0?pt(e,!0,f):f!=null&&f.consumedAtToken?pt(e,!0,f):pt(e,!0),e}function qa({beginExprs:e,env:t,context:n,allowPartialModule:r=!1}){var l,u,c,f,p;let i=Ba(t),o=[],a;t=dt(t);for(let _=0;_<e.length;_++){let d=e[_];try{if(I(d)&&T(d,V.export)){let y=d.args;for(let g=0;g<y.length;g++){let h=y[g];if(I(h)&&T(h,"...")){let v=h.args[0],E=h.args[1],k=M({expr:v,env:t,context:{...n}});if(!k.$)throw m({token:v.token,errorMessage:`Failed to evaluate the extended struct expression:
|
|
158
|
+
${w(v)}`});let b=k.$.type;if(!je(b))throw m({token:v.token,errorMessage:`Expected struct type for export, got:
|
|
159
|
+
${S(b)}`});let F=k.$.value,$=new Set;if(E)if(I(E)&&T(E,":",2)&&Xt(E.args[0],"exclude")&&(E=E.args[1]),Y(E)){let C=E.token.value,A=b.fields.find(N=>N.label===C);if(!A)throw m({token:E.token,errorMessage:`Label "${C}" is not found in the extended module type.`});$.add(C),E.$={env:t,type:A.type,value:A.assignedValue,pathCollection:[]}}else if(I(E)&&T(E,V.tuple))for(let C of E.args){if(!Y(C))throw m({token:C.token,errorMessage:`Expected identifier for excluded label, got:
|
|
160
|
+
${w(C)}`});let A=C.token.value,N=b.fields.find(x=>x.label===A);if(!N)throw m({token:C.token,errorMessage:`Label "${A}" is not found in the extended module type.`});$.add(A),C.$={env:t,type:N.type,value:N.assignedValue,pathCollection:[]}}else throw m({token:E.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
|
|
161
|
+
${w(E)}`});for(let C=0;C<b.fields.length;C++){let A=b.fields[C];if($.has(A.label))continue;if(i.fields.findIndex(x=>x.label===A.label)>=0)throw m({token:h.token,errorMessage:`Element "${A.label}" is already exported in the module.`});i.fields.push({label:A.label,type:A.type,assignedValue:A.assignedValue,defaultValue:A.defaultValue,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),F?o.push(F.fields[C]):o.push(void 0),h.$={env:t,type:A.type,value:F?F.fields[C]:void 0,pathCollection:[]}}}else{let v="",E="";if(Y(h)){if(!ht(h))throw m({token:h.token,errorMessage:`Expected identifier for export, got:
|
|
162
|
+
${w(h)}`});v=h.token.value,E=v}else if(I(h)&&T(h,":",2)){let $=h.args[0],C=h.args[1];if(!Y($))throw m({token:$.token,errorMessage:`Expected identifier for export, got:
|
|
163
|
+
${w($)}`});if(!ht($))throw m({token:$.token,errorMessage:`Expected identifier for export, got:
|
|
164
164
|
${w($)}`});if(v=$.token.value,!Y(C))throw m({token:C.token,errorMessage:`Expected identifier for export, got:
|
|
165
|
-
${w(C)}`});if(!
|
|
166
|
-
${w(C)}`});E=C.token.value}let k=pe(t,E);if(k.length===0)throw m({token:h.token,errorMessage:`Variable "${E}" is not defined in the module.`});let b=k[k.length-1];if(i.fields.findIndex($=>$.label===E)>=0)throw m({token:h.token,errorMessage:`Variable "${E}" is already exported in the module.`});if(!b.isCompileTimeOnly)throw m({token:h.token,errorMessage:`Variable "${E}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:v,type:b.type,assignedValue:b.isCompileTimeOnly?(l=b.value)==null?void 0:l[0]:void 0,defaultValue:void 0,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),o.push((u=b.value)==null?void 0:u[0]),h.$={env:t,type:b.type,value:(c=b.value)==null?void 0:c[0],pathCollection:[]}}}}else{let y=M({expr:d,env:t,context:{...n,expectedType:void 0}});(f=y.$)!=null&&f.env&&(t=(p=y.$)==null?void 0:p.env)}}catch(y){if(r){a=y;break}else throw y}}try{a||(t=Vt(t))}catch(_){if(r)a=_;else throw _}return{moduleValue:Fa({...i},o),moduleType:i,env:t,partialModuleError:a}}function
|
|
167
|
-
${w(p)}`});let d=p.token.value,y=M({expr:_,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!((u=y.$)!=null&&u.type))throw m({token:_.token,errorMessage:`Failed to evaluate impl field value for "${d}".`});t=y.$.env;let g=y.$.type,h=y.$.value;if(!h)throw m({token:_.token,errorMessage:`impl field "${d}" must be a compile-time value.`});be(h)&&!h.funcName&&(h.funcName=d,h.funcId+=`_${d}`);let{env:v}=
|
|
168
|
-
${w(c)}`});t=f.$.env,i.push({traitValue:f.$.value,sourceExpr:c,isAnonymousTrait:!1})}if(t=Vt(t),r&&(r.trait=l),s){let c=ji({...o,receiverType:r},a);i.unshift({traitValue:c,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var
|
|
169
|
-
First implementation was in: ${a.modulePath||"unknown"}`})}function
|
|
165
|
+
${w(C)}`});if(!ht(C))throw m({token:C.token,errorMessage:`Expected identifier for export, got:
|
|
166
|
+
${w(C)}`});E=C.token.value}let k=pe(t,E);if(k.length===0)throw m({token:h.token,errorMessage:`Variable "${E}" is not defined in the module.`});let b=k[k.length-1];if(i.fields.findIndex($=>$.label===E)>=0)throw m({token:h.token,errorMessage:`Variable "${E}" is already exported in the module.`});if(!b.isCompileTimeOnly)throw m({token:h.token,errorMessage:`Variable "${E}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:v,type:b.type,assignedValue:b.isCompileTimeOnly?(l=b.value)==null?void 0:l[0]:void 0,defaultValue:void 0,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),o.push((u=b.value)==null?void 0:u[0]),h.$={env:t,type:b.type,value:(c=b.value)==null?void 0:c[0],pathCollection:[]}}}}else{let y=M({expr:d,env:t,context:{...n,expectedType:void 0}});(f=y.$)!=null&&f.env&&(t=(p=y.$)==null?void 0:p.env)}}catch(y){if(r){a=y;break}else throw y}}try{a||(t=Vt(t))}catch(_){if(r)a=_;else throw _}return{moduleValue:Fa({...i},o),moduleType:i,env:t,partialModuleError:a}}function bl({functionType:e,specializedEnv:t,SelfType:n}){var u;let r=e.parameters.map(c=>{var _;if(!c.exprs.typeExpr)return c;let f=nt(c.exprs.typeExpr),p=M({expr:f,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return q((_=p.$)==null?void 0:_.value)?{...c,type:p.$.value.value,exprs:{...c.exprs}}:c}),i=e.return.type,o=nt(e.return.typeExpr),a=M({expr:o,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});q((u=a.$)==null?void 0:u.value)&&(i=a.$.value.value);let s=e.SelfType;n&&(s=n);let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(c=>{let f=r.find(_=>_.label===c.name),p=f?f.type:c.type;return p!==c.type?{...c,type:p}:c})};return{...e,env:t,forallParameters:[],parameters:r,parametersFrame:l,return:{...e.return,type:i},SelfType:s}}var ia=new Map;function Om({traitExpr:e,traitType:t}){if(!e||!I(e))return{};let n=e.func;if(I(n)){let r=n.args.map(o=>nt(o)),i;if(t.functionValue&&ae(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(I(o)&&T(o,":",2)){let a=o.args[0],s=o.args[1];if(Y(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!ae(u.type)&&(r.push(nt(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function Zu({fieldExprs:e,env:t,context:n,receiverType:r}){var u;let i=[],o=it(t),a=[],s=!1,l=r==null?void 0:r.trait;r!=null&&r.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=dt(t);for(let c of e){if(I(c)&&T(c,V.begin))throw m({token:c.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(I(c)&&(T(c,"::",2)||T(c,":=",2)))throw m({token:c.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(I(c)&&T(c,":",2)){let p=c.args[0],_=c.args[1];if(!Y(p)||!ht(p))throw m({token:p.token,errorMessage:`Expected identifier for impl field name, got:
|
|
167
|
+
${w(p)}`});let d=p.token.value,y=M({expr:_,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!((u=y.$)!=null&&u.type))throw m({token:_.token,errorMessage:`Failed to evaluate impl field value for "${d}".`});t=y.$.env;let g=y.$.type,h=y.$.value;if(!h)throw m({token:_.token,errorMessage:`impl field "${d}" must be a compile-time value.`});be(h)&&!h.funcName&&(h.funcName=d,h.funcId+=`_${d}`);let{env:v}=Se({env:t,variable:{name:d,type:g,isCompileTimeOnly:!0,value:[h],token:p.token,initializedAtToken:p.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=v,o.fields.push({label:d,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:c}}),a.push(h),s=!0,r!=null&&r.trait&&r.trait.fields.push({label:d,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:c}});continue}let f=M({expr:c,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!f.$||!Wt(f.$.value))throw m({token:c.token,errorMessage:`Expected trait value in impl field list, got:
|
|
168
|
+
${w(c)}`});t=f.$.env,i.push({traitValue:f.$.value,sourceExpr:c,isAnonymousTrait:!1})}if(t=Vt(t),r&&(r.trait=l),s){let c=ji({...o,receiverType:r},a);i.unshift({traitValue:c,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var Sr=new Map,xi=new Map;function mo(e){for(let[t,n]of Sr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?Sr.delete(t):Sr.set(t,r)}}function Rm(e){for(let[t,n]of xi.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?xi.delete(t):xi.set(t,r)}}function Ya(){ia.clear(),Sr.clear(),xi.clear()}function Ha(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function Ju(e,t){let n=Sr.get(e);n||(n=[],Sr.set(e,n)),n.push(t)}function Pm({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(xi.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 "${S(e)}".
|
|
169
|
+
First implementation was in: ${a.modulePath||"unknown"}`})}function Um({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=xi.get(i);o||(o=[],xi.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function zm({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 "${S(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 ja({concreteType:e,traitType:t,env:n}){let r=
|
|
174
|
-
Consider adding "where(T <: ${o.typeName??S(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(
|
|
175
|
-
Consider adding "where(T <: !(${o.typeName??S(o)}))" to the impl.`})}}function
|
|
176
|
-
${w(e)}`});if(e.args.length===1&&
|
|
173
|
+
Current module: ${n}`})}function ja({concreteType:e,traitType:t,env:n}){let r=Ha(t),i=Sr.get(r);if(!(!i||i.length===0)){for(let o of i)if(Xa({concreteType:e,impl:o,env:n}).matched)return o}}function Vr({concreteType:e,methodName:t,env:n}){if(G(e)){let i=pn(n,e);G(i)||(e=i)}let r=[];for(let[i,o]of Sr.entries())for(let a of o){let s=Xa({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(f=>f.label===t&&ae(f.type));if(c>=0){let f=l.fields[c];if(ae(f.type)){let p=u.fields[c],_=Pr(e);if(be(p)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!_){let y=a.definitionEnv,g=dt(y);for(let[b,F]of s.substitutions){let{env:$}=Se({env:g,variable:{name:b,type:It(),isCompileTimeOnly:!0,value:[ye(F)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=$}for(let[b,F]of s.valueSubstitutions){let{env:$}=Se({env:g,variable:{name:b,type:F.type,isCompileTimeOnly:!0,value:[F],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=$}if(a.traitTypeArgExprs&&a.traitFunctionParamNames&&a.traitTypeArgExprs.length===a.traitFunctionParamNames.length)for(let b=0;b<a.traitTypeArgExprs.length;b++){let F=a.traitTypeArgExprs[b],$=a.traitFunctionParamNames[b],C=M({expr:nt(F),env:g,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(C.$&&q(C.$.value)){let{env:A}=Se({env:g,variable:{name:$,type:It(),isCompileTimeOnly:!0,value:[C.$.value],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});g=A}}let h=bl({functionType:f.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});g=dt(g,h.parametersFrame);let v=nt(p.body),E=Yt({expr:v,env:g,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:h.return.type,env:g},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:h,value:p,evaluationEnv:g},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),k={...p,specializedType:h,body:E,funcId:`${p.funcId}_specialized_${[...s.substitutions.entries()].map(([b,F])=>`${b}_${S(F)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([b,F])=>`${b}_${tt(F)}`).join("_")}`,funcName:p.funcName?`${p.funcName}_specialized`:void 0};r.push({type:h,value:k})}else if(_){let y=a.definitionEnv,g=dt(y);for(let[v,E]of s.substitutions){let{env:k}=Se({env:g,variable:{name:v,type:It(),isCompileTimeOnly:!0,value:[ye(E)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=k}for(let[v,E]of s.valueSubstitutions){let{env:k}=Se({env:g,variable:{name:v,type:E.type,isCompileTimeOnly:!0,value:[E],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=k}let h=bl({functionType:f.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});r.push({type:h,value:void 0})}else if(be(p)){let y={...p,specializedType:f.type};r.push({type:f.type,value:y})}else r.push({type:f.type,value:p})}}}return r}function Ka({concreteType:e,propertyName:t,env:n}){if(G(e)){let r=pn(n,e);G(r)||(e=r)}for(let[r,i]of Sr.entries())for(let o of i){let a;try{a=Xa({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(f=>f.label===t&&!ae(f.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let f=o.definitionEnv,p=dt(f);for(let[_,d]of a.substitutions){let{env:y}=Se({env:p,variable:{name:_,type:It(),isCompileTimeOnly:!0,value:[ye(d)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});p=y}for(let _=0;_<o.traitTypeArgExprs.length;_++){let d=o.traitTypeArgExprs[_];if(o.traitFunctionParamNames[_]===t)try{let g=nt(d),h=M({expr:g,env:p,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(h.$&&q(h.$.value))return{type:h.$.value.type,value:h.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!q(c))){if(!G(c.value))return{type:c.type,value:c};for(let f of o.forallParameters)if(f.kind==="type"&&f.someType===c.value){let p=a.substitutions.get(f.name);if(p){let _=ye(p);return{type:_.type,value:_}}}}}}function tc({concreteType:e,traitType:t,methodName:n,env:r}){let i=Ha(t),o=Sr.get(i);if(!(!o||o.length===0))for(let a of o){let s=Xa({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(f=>f.label===n&&ae(f.type));if(c>=0){let f=l.fields[c];if(ae(f.type)){let p=u.fields[c];if(be(p)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let _=a.definitionEnv,d=dt(_);for(let[E,k]of s.substitutions){let{env:b}=Se({env:d,variable:{name:E,type:It(),isCompileTimeOnly:!0,value:[ye(k)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=b}for(let[E,k]of s.valueSubstitutions){let{env:b}=Se({env:d,variable:{name:E,type:k.type,isCompileTimeOnly:!0,value:[k],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=b}let y=bl({functionType:f.type,specializedEnv:d,SelfType:s.substitutions.get("Self")});d=dt(d,y.parametersFrame);let g=nt(p.body),h=Yt({expr:g,env:d,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:d},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:p,evaluationEnv:d},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...p,specializedType:y,body:h,funcId:`${p.funcId}_specialized_${[...s.substitutions.entries()].map(([E,k])=>`${E}_${S(k)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([E,k])=>`${E}_${tt(k)}`).join("_")}`,funcName:p.funcName?`${p.funcName}_specialized`:void 0};return{type:y,value:v}}else if(be(p)){let _={...p,specializedType:f.type};return{type:f.type,value:_}}else return{type:f.type,value:p}}}}}function Xa({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(G(e)){let o=pn(n,e);if(G(o))return r;e=o}let i=dt(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=Se({env:i,variable:{name:o.name,type:It(),isCompileTimeOnly:!0,value:[ye(o.someType)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=Se({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=$t({type:t.receiverTypePattern,env:i},{type:e,env:n});for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let f=ec(o,l);if(!f)return r;let p=u;if(c)try{let _=nt(c),d=M({expr:_,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});d.$&&q(d.$.value)&&Je(d.$.value.value)&&(p=d.$.value.value)}catch{}if(p.isNegatedConstraint){if(G(f)){if(!Gm(f,p,n))return r;continue}if(sn({targetType:f,traitType:p,env:n}))return r;continue}if(G(f)){if(!Bm(f,p,n))return r;continue}if(!sn({targetType:f,traitType:p,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=ec(o,l.someType);u&&!G(u)&&a.set(l.name,u)}else{let u=pe(o,l.name),c=u[u.length-1];if(c&&c.value&&!Ve(c.value[0])){let f={...c.value[0],type:l.type};s.set(l.name,f)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function Bm(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=_r(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(Wt(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function Gm(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=_r(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function Wm({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(sn({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 "${S(e)}" does not satisfy constraint "${o.typeName??S(o)}" required by trait "${t.typeName??S(t)}".
|
|
174
|
+
Consider adding "where(T <: ${o.typeName??S(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(sn({targetType:e,traitType:o,env:r}))throw m({token:i,errorMessage:`Generic impl receiver type "${S(e)}" implements "${o.typeName??S(o)}" but trait "${t.typeName??S(t)}" requires it to NOT implement this trait.
|
|
175
|
+
Consider adding "where(T <: !(${o.typeName??S(o)}))" to the impl.`})}}function ec(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&&q(i.value[0]))return i.value[0].value}return t}function yo(e){let t=ia.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);ia.delete(e),Rm(e)}}function qm(e,t){let n=ia.get(e);n||(n=new Set,ia.set(e,n)),n.add(t)}function Hm(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(zm({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Pm({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Um({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&qm(n,r.trait),e.type.typeName){let i={label:"",type:Un(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 nc({expr:e,env:t,context:n}){var k,b;if(!T(e,V.impl))throw m({token:e.token,errorMessage:`Expected "impl", got:
|
|
176
|
+
${w(e)}`});if(e.args.length===1&&I(e.args[0])&&T(e.args[0],V.begin)){let F=e.args[0].args,{moduleType:$,moduleValue:C,env:A}=qa({beginExprs:F,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=A,e.$={env:t,type:$,value:C,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&I(r[i])&&T(r[i],V.forall)&&(o=r[i],i++),r[i]&&I(r[i])&&T(r[i],V.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]&&I(r[i])&&T(r[i],V.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 F=M({expr:s,env:t,context:{...n}});if(!F.$||!F.$.value||!q(F.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type argument."});t=F.$.env;let $=F.$.value.value,C=Et($)||We($),{env:A,traitEntries:N}=Zu({fieldExprs:l,env:t,context:{...n},receiverType:$});if(t=A,N.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let D of N){let P=D.traitValue,U=P.type;if(D.isAnonymousTrait||rc({targetType:$,traitType:U,env:t,errorToken:e.token}),C){let j=Ha(U),O={forallParameters:[],whereConstraints:[],receiverTypePattern:$,traitType:U,traitValue:P,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};Ju(j,O)}else Hm(P,e,n.currentModulePath)}let x=N[0].traitValue;return e.$={env:t,type:x.type,value:x,pathCollection:[]},e}let c=o.args,f=[];t=dt(t);for(let F of c){let $,C;if(I(F)&&T(F,":",2)){let U=F.args[0];if(!Y(U))throw m({token:U.token,errorMessage:`Expected identifier for forall parameter name, got: ${w(U)}`});$=U.token.value,C=F.args[1]}else if(Y(F))$=F.token.value;else throw m({token:F.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${w(F)}`});let A;if(C){let U=M({expr:C,env:t,context:{...n}});if((k=U.$)!=null&&k.env&&(t=U.$.env),!U.$||!U.$.value||!q(U.$.value))throw m({token:C.token,errorMessage:`Expected type for forall parameter type, got: ${w(C)}`});A=U.$.value.value}let N=!A||ou(A),x=A||It(),D=le(x,{variableName:$,env:t,context:n}),{env:P}=Se({env:t,variable:{name:$,type:x,isCompileTimeOnly:!0,value:[D],token:F.token,initializedAtToken:F.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=P,N){let U=D.value;f.push({kind:"type",name:$,someType:U})}else f.push({kind:"value",name:$,type:x,unknownValue:D})}let p=new Map;if(a)for(let F of a.args){if(!I(F)||!T(F,"<:",2))throw m({token:F.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${w(F)}`});let $=M({expr:F,env:t,context:{...n,isInsideWhereClause:!0}});(b=$.$)!=null&&b.env&&(t=$.$.env);let C=F.args[0],A=F.args[1],N=M({expr:C,env:t,context:{...n}});if(!N.$||!N.$.value||!q(N.$.value)||!G(N.$.value.value))throw m({token:C.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${w(C)}`});t=N.$.env;let x=[];if(I(A)&&T(A,V.tuple))for(let D of A.args)I(D)&&T(D,"!")&&D.args.length===1?x.push({expr:D.args[0],isNegated:!0}):x.push({expr:D,isNegated:!1});else I(A)&&T(A,"!")&&A.args.length===1?x.push({expr:A.args[0],isNegated:!0}):x.push({expr:A,isNegated:!1});for(let{expr:D}of x){let P=M({expr:D,env:t,context:{...n}});if(!P.$||!P.$.value||!q(P.$.value)||!Je(P.$.value.value))throw m({token:D.token,errorMessage:"Expected trait type for right-hand side expression."});t=P.$.env;let U=P.$.value.value;p.set(U.id,nt(D))}}let _=[];for(let F of f){if(F.kind!=="type")continue;let{someType:$}=F,C=_r(t,$);if(C){for(let A of C.requiredTraits)_.push({someType:$,traitType:A,traitExpr:p.get(A.id)});for(let A of C.negativeTraits){let N={...A,isNegatedConstraint:!0};_.push({someType:$,traitType:N,traitExpr:p.get(A.id)})}}}let d=M({expr:s,env:t,context:{...n}});if(!d.$||!d.$.value||!q(d.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=d.$.env;let y=d.$.value.value,{env:g,traitEntries:h}=Zu({fieldExprs:l,env:t,context:{...n},receiverType:y});if(t=g,h.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let F of h){let $=F.traitValue,C=$.type;Wm({receiverTypePattern:y,traitType:C,whereConstraints:_,env:t,errorToken:e.token});let{traitTypeArgExprs:A,traitFunctionParamNames:N}=F.isAnonymousTrait?{}:Om({traitExpr:F.sourceExpr,traitType:C});v.push({traitType:C,traitValue:$,traitTypeArgExprs:A,traitFunctionParamNames:N})}t=Vt(t);for(let F of v){let $=Ha(F.traitType),C={forallParameters:f,whereConstraints:_,receiverTypePattern:y,traitType:F.traitType,traitValue:F.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:F.traitTypeArgExprs,traitFunctionParamNames:F.traitFunctionParamNames};Ju($,C)}let E=v[0].traitValue;return e.$={env:t,type:E.type,value:E,pathCollection:[]},e}var kl=new Set;function oc(e){if(!e||Ie(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(gt(e))return!0}function ac(e){if(!e)return!1;if(Ie(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 ic(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&&q(o.assignedValue)){i=o.assignedValue.value;break}if(o.assignedValue&&Wt(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&&q(u)&&(i=u.value);break}}if(i)break}}if(!i){let o=Ka({concreteType:e,propertyName:r.label,env:n});o&&q(o.value)&&(i=o.value.value)}if(!i||!ie({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function sn({targetType:e,traitType:t,env:n}){let r=rr(n,"Comptime");if(r&&t.id===r.id){let l=oc(e);if(l!==void 0)return l}let i=rr(n,"Runtime");if(i&&t.id===i.id){let l=ac(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||!Wt(l.assignedValue))continue;let c=l.assignedValue.type;if(ie({type:o,env:n},{type:c,env:n})&&ic(e,t,n))return!0}if(G(e)){let l=!1,u=!1;for(let f of e.requiredTraits)f.traitType.id===t.id&&(l=!0);let c=_r(n,e);if(c){for(let f of c.requiredTraits)f.id===t.id&&(l=!0);for(let f of c.negativeTraits)f.id===t.id&&(u=!0)}if(e.negativeTraits)for(let f of e.negativeTraits)f.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(G(e)){let l=pn(n,e);if(G(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(kl.has(s))return!1;kl.add(s);try{return ja({concreteType:e,traitType:t,env:n})===void 0?!1:ic(e,t,n)}finally{kl.delete(s)}}function rc({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!sn({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${S(e)}" does not implement required constraint "${i.typeName??S(i)}" from trait "${t.typeName??S(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(sn({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${S(e)}" implements "${i.typeName??S(i)}" but the trait "${t.typeName??S(t)}"'s where clause requires it to NOT implement this trait.`})}}function hr(e,t){let n=oc(e);if(n!==void 0)return n;let r=rr(t,"Comptime");return r?sn({targetType:e,traitType:r,env:t}):!1}function Gr(e,t){let n=ac(e);if(n!==void 0)return n;let r=rr(t,"Runtime");return r?sn({targetType:e,traitType:r,env:t}):!1}function Zo(e,t){if(!e)return!1;let n=rr(t,"Send");return n?sn({targetType:e,traitType:n,env:t}):!1}function Ei(e,t){if(!e)return!1;let n=rr(t,"Acyclic");return n?sn({targetType:e,traitType:n,env:t}):!1}function Fi(e,t){return hr(e,t)&&!Gr(e,t)}function wn(e){if(!e)return!1;if(G(e)||et(e)){for(let{traitType:t}of e.requiredTraits)if(Jt(t))return!0}return!1}function In(e){if(Jt(e))return e;if(G(e)||et(e)){for(let{traitType:t}of e.requiredTraits)if(Jt(t))return t}}function He(e){if(!e)return!1;if(G(e)||et(e)){for(let{traitType:t}of e.requiredTraits)if(bn(t))return!0}return!1}function cn(e){if(bn(e))return e;if(G(e)||et(e)){for(let{traitType:t}of e.requiredTraits)if(bn(t))return t}}function Ra(e,t,n,r){if(!Ye(e)&&!hr(e,t)&&!Gr(e,t))throw m({token:n,errorMessage:`Type ${S(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
|
|
183
|
-
Typeof "${a.name}": ${S(a.type)}`})));if(o.length>0)throw
|
|
184
|
-
${a instanceof Rn||a instanceof tr?a.toString():a instanceof Error?a.message:String(a)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var l,u;let r=kl({modulePath:this.modulePath,inputString:this.inputString});if(!Xm(this.tokens,"@skip_prelude")&&!Km){let c="file://"+pc.default.join(t,"prelude.yo"),{moduleValue:f,moduleError:p}=n(c);if(p)throw p;if(f&&Ye(f.type)){r=mt(r);for(let _=0;_<f.type.fields.length;_++){let d=f.type.fields[_],y=f.fields[_],{env:g}=Ve({env:r,variable:{name:d.label,type:d.type,value:y?[y]:void 0,isCompileTimeOnly:!0,initializedAtToken:((l=d.exprs.labelExpr)==null?void 0:l.token)??d.exprs.expr.token,consumedAtToken:void 0,token:((u=d.exprs.labelExpr)==null?void 0:u.token)??d.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}ac(r)}let{moduleValue:o,env:a,partialModuleError:s}=Ha({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 Qm(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}var Ud=require("fs"),ha=Ts(require("path"));function dc(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 mc(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 Hr(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 yc(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 xi=[...L.__yo_op_add,...L.__yo_op_sub,...L.__yo_op_mul,...L.__yo_op_div,...L.__yo_op_mod,...L.__yo_op_neg,...L.__yo_op_eq,...L.__yo_op_neq,...L.__yo_op_lt,...L.__yo_op_lte,...L.__yo_op_gt,...L.__yo_op_gte,...L.__yo_op_not,...L.__yo_op_bit_and,...L.__yo_op_bit_or,...L.__yo_op_bit_xor,...L.__yo_op_bit_complement,...L.__yo_op_bit_left_shift,...L.__yo_op_bit_right_shift,...L.__yo_ptr_add,...L.__yo_ptr_sub,...L.__yo_ptr_diff,...L.__yo_ptr_eq,...L.__yo_ptr_neq,...L.__yo_ptr_lt,...L.__yo_ptr_lte,...L.__yo_ptr_gt,...L.__yo_ptr_gte,...L.__yo_slice_len,...L.__yo_slice_new,...L.__yo_as,...L.__yo_getrandom,...L.__yo_arc4random_buf,...L.__yo_bcrypt_gen_random,...L.__yo_maybe_uninit_new,...L.__yo_maybe_uninit_as_ptr,...L.__yo_maybe_uninit_assume_init,...L.__yo_noop,...L.__yo_return_self,...L.__yo_ms_sleep],gc=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 me(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 q(e,t){var n,r,i,o,a,s,l;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 f=Nn(e);if(f)return q(f,t)}let u;switch(e.tag){case"Tuple":u="tuple";break;case"Struct":u="struct";break;case"Union":u="union";break;case"Enum":u="enum";break;default:throw new Error("Unreachable")}let c=(n=t.types[e.id])==null?void 0:n.cName;if(!c)throw new Error(`No C type name found for ${u} ${S(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&Ae(e)&&e.isReferenceSemantics?`${c}*`:c}case"Function":return"void*";case"Dyn":{let u=(r=t.types[e.id])==null?void 0:r.cName;if(!u)throw new Error(`No C type name found for dynamic dispatch type ${S(e)}`);return u}case"Array":{let u=e,c=u.childType,f=u.length;if(ft(f)){let p=q(c,t),_=`Array_${me(p)}_${f.value}`;return t.arrayStructTypes.has(_)||t.arrayStructTypes.set(_,{childType:p,length:typeof f.value=="bigint"?Number(f.value):f.value}),_}break}case"Slice":{let u=e,f=`Slice_${me(q(u.childType,t))}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:q(u.childType,t)}),f}case"SomeType":{let u=e;if(qe(u)){if((i=u.resolvedConcreteType)!=null&&i.isExtern)return`${q(u.resolvedConcreteType,t)}*`;let c=(o=t.types[u.id])==null?void 0:o.cName;if(c)return`${c}*`;if(u.resolvedConcreteType&&G(u.resolvedConcreteType)&&qe(u.resolvedConcreteType)){let p=u.resolvedConcreteType,_=(a=t.types[p.id])==null?void 0:a.cName;if(_)return`${_}*`}if(u.resolvedConcreteType&&Ae(u.resolvedConcreteType)){let p=u.resolvedConcreteType.id;for(let[_,d]of Object.entries(t.types))if(G(d.type)&&qe(d.type)&&d.type.resolvedConcreteType&&Ae(d.type.resolvedConcreteType)&&d.type.resolvedConcreteType.id===p)return`${d.cName}*`}let f=un(u);if(f){let p=(s=t.types[f.id])==null?void 0:s.cName;if(p)return`${p}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(f==null?void 0:f.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 xn(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=[xn(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=>xn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>xn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>xn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>xn(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=[xn(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=>xn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?xn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?xn(i,t,n):void 0)}}default:return e}}function wl({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function xt(){let e=wl({modulePath:"",inputString:""});return dt(e)}function Fl(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=xn(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=xn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:Ym(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function Ym(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 Er({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 _r(e,t){var l;let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let u of e.frames)for(let c of u.variables){let f=(l=c.value)==null?void 0:l[0];q(f)&&G(f.value)&&f.value.id===t.id&&s.add(c.name)}for(let u of e.frames)for(let c of u.whereClauseConstraints.values())if(!(c.someType.id!==t.id&&!s.has(c.someType.name))){a=!0;for(let f of c.requiredTraits)i.has(f.id)||(i.add(f.id),n.push(f));for(let f of c.negativeTraits)o.has(f.id)||(o.add(f.id),r.push(f))}if(a)return{requiredTraits:n,negativeTraits:r}}var sc=null;function lc(e){sc=e}function uc(){sc=null}var jm="__yo_self";function Se({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0);if(i){let _=Qm(e);_>=0&&(a=_)}if(t.name!==jm){let _=pe(e,t.name);if(_.length>0&&!o){let d=_[_.length-1];throw St([{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=wt(e.modulePath,t.name)?t.name:r??$i(e.modulePath,t.name),u={...t,frameLevel:a,id:l},c=Km({frame:s,variable:u}),f=e.frames.slice();return f[a]=c,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:f,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function Km({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw St([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:e.variables.find(r=>r.name===t.name).token,errorMessage:`Variable "${t.name}" is already defined here in the same scope:`}]);let n=e.variables.findIndex(r=>r.name===t.name&&!r.initializedAtToken);if(n>-1){let r=e.variables.slice();return r[n]=t,{id:e.id,variables:r,isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:new Map(e.whereClauseConstraints)}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:new Map(e.whereClauseConstraints)}}function Xm(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function pe(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=Xm(o,t,n);r.push(...a)}return n?r.filter(n):r}function Dr(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 cc(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function dt(e,t={id:$i(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 Vt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=po(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw St(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}": ${S(a.type)}`})));if(o.length>0)throw St(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 mt(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 fc(e){var t,n;return{id:e.id,name:e.name,type:S(e.type),typeId:e.type.id,value:tt((t=e.value)==null?void 0:t[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:(n=e.isOwningTheSameRcValueAs)==null?void 0:n.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function _c({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&&ae(a.type));if(o&&ae(o.type)){let a=o.assignedValue;Ve(a)&&(a=le(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&&Wt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&ae(c.type));if(u>=0){let c=l.fields[u];if(ae(c.type)){let f=s.fields[u],p=c.type;be(f)&&f.specializedType&&(p=f.specializedType),i.push({type:p,value:f})}}}if(i.length===0){let a=Vr({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Ll({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){var p;let o=[],a=r;for(;Xe(a);)a=a.childType;function s(_,d){let y=_.fields.find(g=>g.label===n&&(ae(g.type)||Je(g.type)));if(y){let g;if(ae(y.type)){if(Ve(d))g=le(y.type,{variableName:y.label,env:e,context:t});else if(Wt(d)){let h=_.fields.findIndex(v=>v.label===y.label);g=d.fields[h]}o.push({type:y.type,value:g})}else if(je(y.type)){let h=y.assignedValue;Bt(h)&&l(h)}}if(!y)for(let g of _.fields)Je(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}function l(_){let d=_.type.fields.findIndex(y=>y.label==="Call");if(d>=0){let y=_.type.fields[d];if(y.assignedValue){let g=y.assignedValue;zn(g)?g.fields.forEach(h=>{o.push({type:h.type,value:h})}):o.push({type:g.type,value:g})}}}function u(_){return _.filter(y=>{if(ae(y.type)){if(y.type.parameters.length===0)return!1;let h=y.type.parameters[0].type;if(!i&&Xe(h)){let E=h.childType,k=r;if((zt(r)||ln(r)||tn(r))&&(k=Pt({type:r,expectedType:void 0,expr:void 0,env:e})),ie({type:E,env:y.type.env},{type:k,env:e},!0))return y.needsPointerConversion=!0,!0}if(Ye(h)||Ye(h)&&!Ye(r)||G(r)&&r.resolvedConcreteType&&!He(r)&&!Ye(h)&&ie({type:h,env:y.type.env},{type:r.resolvedConcreteType,env:e},!0))return!0;if(!Ye(h)&&Ye(r))return!1;if(zt(r)||ln(r)||tn(r)){let E=Pt({type:r,expectedType:void 0,expr:void 0,env:e});if(ie({type:h,env:y.type.env},{type:E,env:e},!0))return!0}if(et(r)&&y.value===void 0){if(y.type.parameters.length>0&&y.type.SelfType){let k=y.type.parameters[0];if(k){let b=k.type;if(!qt(b)&&!et(b)&&!Xe(b))return!1}}let E=y.type.return.type;if(wr(E,y.type.SelfType))return!1}return ie({type:h,env:y.type.env},{type:r,env:e},!0)}return!0})}function c(_,d,y=new Set){if(y.has(_.id))return;y.add(_.id);let g=_.fields.find(h=>h.label===d&&ae(h.type));if(g&&ae(g.type)){let h=g.assignedValue;Ve(h)&&(h=le(g.type,{variableName:g.label,env:e,context:t})),o.push({type:g.type,value:h});return}for(let h of _.fields)Je(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}if(r!==a&&r.trait){let _=r.trait.fields.find(d=>d.label===n&&ae(d.type));if(_&&ae(_.type)){let d=_.assignedValue;Ve(d)&&(d=le(_.type,{variableName:_.label,env:e,context:t})),o.push({type:_.type,value:d})}else c(r.trait,n);for(let d of r.trait.fields)if(d.label===""&&d.assignedValue&&Wt(d.assignedValue)){let y=d.assignedValue,g=y.type,h=g.fields.findIndex(v=>v.label===n&&ae(v.type));if(h>=0){let v=g.fields[h];if(ae(v.type)){let E=y.fields[h],k=v.type;be(E)&&E.specializedType&&(k=E.specializedType),o.push({type:k,value:E})}}}}if(o.length===0&&r!==a){let _=Vr({concreteType:r,methodName:n,env:e});o.push(..._)}let f=G(a)&&a.resolvedConcreteType&&!He(a);if(a.trait&&!et(a)&&!f){let _=a.trait.fields.find(d=>d.label===n&&(ae(d.type)||je(d.type)));if(_&&ae(_.type)){let d=_.assignedValue;Ve(d)&&(d=le(_.type,{variableName:_.label,env:e,context:t})),o.push({type:_.type,value:d})}else if(_&&je(_.type)){let d=_.assignedValue;Bt(d)&&l(d)}else c(a.trait,n);for(let d of a.trait.fields)if(d.label===""&&d.assignedValue&&Wt(d.assignedValue)){let y=d.assignedValue,g=y.type,h=g.fields.findIndex(v=>v.label===n&&ae(v.type));if(h>=0){let v=g.fields[h];if(ae(v.type)){let E=y.fields[h],k=v.type;be(E)&&E.specializedType&&(k=E.specializedType),o.push({type:k,value:E})}}}if(o.length===0){let d=Vr({concreteType:a,methodName:n,env:e});o.push(...d)}}if(zt(a)||ln(a)||tn(a)){let _=Pt({type:a,expectedType:void 0,expr:void 0,env:e});if(_.trait){let d=_.trait.fields.find(y=>y.label===n&&ae(y.type));if(d&&ae(d.type)){let y=d.assignedValue;Ve(y)&&(y=le(d.type,{variableName:d.label,env:e,context:t})),o.push({type:d.type,value:y})}else c(_.trait,n);for(let y of _.trait.fields)if(y.label===""&&y.assignedValue&&Wt(y.assignedValue)){let g=y.assignedValue,h=g.type,v=h.fields.findIndex(E=>E.label===n&&ae(E.type));if(v>=0){let E=h.fields[v];if(ae(E.type)){let k=g.fields[v],b=E.type;be(k)&&k.specializedType&&(b=k.specializedType),o.push({type:b,value:k})}}}if(o.length===0){let y=Vr({concreteType:_,methodName:n,env:e});o.push(...y)}}}if(G(a)){if((p=a.resolvedConcreteType)!=null&&p.trait&&!He(a)){let _=a.resolvedConcreteType,d=_.trait,y=d==null?void 0:d.fields.find(g=>g.label===n&&ae(g.type));if(y&&ae(y.type)){let g=y.assignedValue||le(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:g})}if(o.length===0){for(let g of(d==null?void 0:d.fields)??[])if(g.label===""&&g.assignedValue&&Wt(g.assignedValue)){let h=g.assignedValue,v=h.type,E=v.fields.findIndex(k=>k.label===n&&ae(k.type));if(E>=0){let k=v.fields[E];if(ae(k.type)){let b=h.fields[E],F=k.type;be(b)&&b.specializedType&&(F=b.specializedType),o.push({type:F,value:b});break}}}}if(o.length===0){let g=Vr({concreteType:_,methodName:n,env:e});o.push(...g)}}if(!(o.length>0)){let _=[],d=new Set;for(let g of a.requiredTraits??[])d.has(g.traitType.id)||(d.add(g.traitType.id),_.push(g.traitType));let y=_r(e,a);if(y)for(let g of y.requiredTraits)d.has(g.id)||(d.add(g.id),_.push(g));if(G(a))for(let g=e.frames.length-1;g>=0;g--){let h=e.frames[g];for(let v of h.whereClauseConstraints.values())if(ie({type:v.someType,env:e},{type:a,env:e},!1))for(let E of v.requiredTraits)d.has(E.id)||(d.add(E.id),_.push(E))}for(let g of _){let h=g.fields.find(v=>v.label===n&&ae(v.type));if(h&&ae(h.type)){let v={...h.type,SelfType:a},E=!1;if(v.parameters.length>0&&Xe(v.parameters[0].type)){let b=v.parameters[0].type.childType;(G(b)&&b.name==="Self"||ie({type:b,env:v.env},{type:r,env:e},!0))&&(E=!0)}let k=le(v,{variableName:h.label,env:e,context:t});o.push({type:v,value:k,needsPointerConversion:E})}}if(o.length===0){for(let g of a.trait.fields)if(g.label===""&&g.assignedValue&&q(g.assignedValue)&&Je(g.assignedValue.value)){let v=g.assignedValue.value.fields.find(E=>E.label===n&&ae(E.type));if(v&&ae(v.type)){let E=le(v.type,{variableName:v.label,env:e,context:t});o.push({type:v.type,value:E})}}}}}if(et(a)){let _=a.trait.fields.find(y=>y.label===n&&(ae(y.type)||Je(y.type)));if(_&&ae(_.type)){let y=_.assignedValue||le(_.type,{variableName:_.label,env:e,context:t});o.push({type:_.type,value:y})}let d=a.requiredTraits;for(let{traitType:y}of d){let g=y.fields.find(h=>h.label===n&&(ae(h.type)||Je(h.type)));g&&ae(g.type)&&g.type.parameters.length>0&&(Ye(g.type.parameters[0].type)||Ye(r)||ie({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 pc(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function Qa(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 po(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Be(r.type))return!1;let i=r.type;return!(G(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function Qm(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}var Zm=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Jm(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var oa=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??(0,dc.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new Wi({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 tr?a.toString():a instanceof Error?a.message:String(a)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var l,u;let r=wl({modulePath:this.modulePath,inputString:this.inputString});if(!Jm(this.tokens,"@skip_prelude")&&!Zm){let c="file://"+mc.default.join(t,"prelude.yo"),{moduleValue:f,moduleError:p}=n(c);if(p)throw p;if(f&&je(f.type)){r=dt(r);for(let _=0;_<f.type.fields.length;_++){let d=f.type.fields[_],y=f.fields[_],{env:g}=Se({env:r,variable:{name:d.label,type:d.type,value:y?[y]:void 0,isCompileTimeOnly:!0,initializedAtToken:((l=d.exprs.labelExpr)==null?void 0:l.token)??d.exprs.expr.token,consumedAtToken:void 0,token:((u=d.exprs.labelExpr)==null?void 0:u.token)??d.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}lc(r)}let{moduleValue:o,env:a,partialModuleError:s}=qa({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 ey(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}var Gd=require("fs"),ha=$s(require("path"));function yc(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 gc(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 qr(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 hc(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 Si=[...L.__yo_op_add,...L.__yo_op_sub,...L.__yo_op_mul,...L.__yo_op_div,...L.__yo_op_mod,...L.__yo_op_neg,...L.__yo_op_eq,...L.__yo_op_neq,...L.__yo_op_lt,...L.__yo_op_lte,...L.__yo_op_gt,...L.__yo_op_gte,...L.__yo_op_not,...L.__yo_op_bit_and,...L.__yo_op_bit_or,...L.__yo_op_bit_xor,...L.__yo_op_bit_complement,...L.__yo_op_bit_left_shift,...L.__yo_op_bit_right_shift,...L.__yo_ptr_add,...L.__yo_ptr_sub,...L.__yo_ptr_diff,...L.__yo_ptr_eq,...L.__yo_ptr_neq,...L.__yo_ptr_lt,...L.__yo_ptr_lte,...L.__yo_ptr_gt,...L.__yo_ptr_gte,...L.__yo_slice_len,...L.__yo_slice_new,...L.__yo_as,...L.__yo_getrandom,...L.__yo_arc4random_buf,...L.__yo_bcrypt_gen_random,...L.__yo_maybe_uninit_new,...L.__yo_maybe_uninit_as_ptr,...L.__yo_maybe_uninit_assume_init,...L.__yo_noop,...L.__yo_return_self,...L.__yo_ms_sleep],vc=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 me(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 H(e,t){var n,r,i,o,a,s,l;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 f=Nn(e);if(f)return H(f,t)}let u;switch(e.tag){case"Tuple":u="tuple";break;case"Struct":u="struct";break;case"Union":u="union";break;case"Enum":u="enum";break;default:throw new Error("Unreachable")}let c=(n=t.types[e.id])==null?void 0:n.cName;if(!c)throw new Error(`No C type name found for ${u} ${S(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&Ie(e)&&e.isReferenceSemantics?`${c}*`:c}case"Function":return"void*";case"Dyn":{let u=(r=t.types[e.id])==null?void 0:r.cName;if(!u)throw new Error(`No C type name found for dynamic dispatch type ${S(e)}`);return u}case"Array":{let u=e,c=u.childType,f=u.length;if(ft(f)){let p=H(c,t),_=`Array_${me(p)}_${f.value}`;return t.arrayStructTypes.has(_)||t.arrayStructTypes.set(_,{childType:p,length:typeof f.value=="bigint"?Number(f.value):f.value}),_}break}case"Slice":{let u=e,f=`Slice_${me(H(u.childType,t))}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:H(u.childType,t)}),f}case"SomeType":{let u=e;if(He(u)){if((i=u.resolvedConcreteType)!=null&&i.isExtern)return`${H(u.resolvedConcreteType,t)}*`;let c=(o=t.types[u.id])==null?void 0:o.cName;if(c)return`${c}*`;if(u.resolvedConcreteType&&G(u.resolvedConcreteType)&&He(u.resolvedConcreteType)){let p=u.resolvedConcreteType,_=(a=t.types[p.id])==null?void 0:a.cName;if(_)return`${_}*`}if(u.resolvedConcreteType&&Ie(u.resolvedConcreteType)){let p=u.resolvedConcreteType.id;for(let[_,d]of Object.entries(t.types))if(G(d.type)&&He(d.type)&&d.type.resolvedConcreteType&&Ie(d.type.resolvedConcreteType)&&d.type.resolvedConcreteType.id===p)return`${d.cName}*`}let f=cn(u);if(f){let p=(s=t.types[f.id])==null?void 0:s.cName;if(p)return`${p}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(f==null?void 0:f.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
|
|
185
185
|
resolvedConcreteType: ${((l=u.resolvedConcreteType)==null?void 0:l.id)??"none"}
|
|
186
|
-
registered type IDs: ${Object.keys(t.types).filter(p=>p.startsWith("sometype")).join(", ")}`)}return wn(u)&&u.resolvedConcreteType||u.resolvedConcreteType?
|
|
187
|
-
`;let _=e.fields.map((d,y)=>{let g=Fn(d,t);return`._${y} = ${g}`});return`(${p}){ ${_.join(", ")} }`}else if(
|
|
188
|
-
`;if(f.isNewtype&&f.fields.length===1&&e.fields.length===1){let _=Fn(e.fields[0],t);return`((${p})(${_}))`}if(f.isReferenceSemantics){let _=e.fields.map(y=>Fn(y,t));return`${`__yo_new_${p}`}(${_.join(", ")})`}else{let _=e.fields.map((d,y)=>{let g=d,h=
|
|
189
|
-
`}else if(H(e)){let f=e.value;if(f)return t.types[f.id]?t.types[f.id].cName:`/* Error: No C type name found for type ${S(f)} */`}else if(Yi(e)){let f=e.targetValue[0];if(f){let p=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(p&&Xe(p)){let _=p.childType,d=Fn(f,t,{$:{type:_,convertedRuntimeType:_}});if(d&&!d.startsWith("/*")&&!d.startsWith("//"))return`(&${d})`}}return`/* Error: Cannot generate pointer value ${tt(e)} */`}}return`/* skip generating: ${tt(e)} */`}function ui(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(ui(e.func,t,n))return!0;for(let r of e.args)if(ui(r,t,n))return!0}return!1}function Zm(e,t,n){for(let r=0;r<t.length;r++)if(ui(e,t[r].expr,n))return r;return-1}function Qa(e,t,n){let r=[],i=n==null?void 0: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=Zm(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(Xt(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let f=u+1;f<t.length&&ui(l,t[f].expr,i);f++)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 vc(e,t){let r=Qa(e,t,{shouldSkipBody:vn,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 Jm(e,t){return ui(e,t,vn)}function Tc(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&&Jm(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,V.while)||T(a,V.cond)||T(a,V.match))&&Vn(a);if((l||u)&&e.awaitPoint)Eo(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=O(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=O(a,t,n);!c||!a.$||wt(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Eo(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&qn(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=O(l,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&T(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FnCall"&&qn(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let f=(a=l.token)==null?void 0:a.value;if(!f||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let p=O(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${f})`),o.emitLine(`${r}sm->await_future_${t.index} = ${p};`)}else o.emitLine(`${r}// Store Future for await (variable: ${f}) - future already in state machine`);return}if(u.tag==="FnCall"&&T(u,V.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,p=pe(l.$.env,f);p.length>0&&(c=p[p.length-1].id)}sa(u,t,r,i,c);return}if(u.tag==="FnCall"&&T(u,V.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,p=pe(l.$.env,f);p.length>0&&(c=p[p.length-1].id)}la(u,t,r,i,c);return}}if(e.tag==="FnCall"&&T(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&T(u,V.cond)){let c=O(l,r,i);sa(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&T(u,V.match)){let c=O(l,r,i);la(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&T(e,V.cond)){sa(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,V.match)){la(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,V.while)){Il(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"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function sa(e,t,n,r,i,o){var g,h,v,E,k,b,F,$,C,I,N,x,D,P,U,X;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,V.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 R=0;R<s.length;R++){let z=s[R];if(z.tag==="FnCall"&&T(z,"=>")){let W=z.args[0];if(W&&!(_t((g=W.$)==null?void 0:g.value)&&W.$.value.value===!1)){u=R;break}}}let c=!1;if(u>=0){let R=s[u];if(R.tag==="FnCall"&&T(R,"=>")){let z=R.args[0];z&&_t((h=z.$)==null?void 0:h.value)&&z.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let R=s[u],z=A(R)?R.args[1]:void 0;if(z)if(ci(z)){let se=To(z,t,n,r),j=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(j&&se.length>0){let te=(E=r.asyncCondBranchInfo)==null?void 0:E.get(t.index),ne=(te==null?void 0:te.branches.some(ke=>ke.hasAwait&&ke.remainingExprs&&ke.remainingExprs.length>0))??!1;j.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:se,deferredDropExpressions:(k=z.$)==null?void 0:k.deferredDropExpressions,skipCondBranchCheck:ne},l.push({index:u,value:z,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(b=z.$)==null?void 0:b.deferredDropExpressions})}else l.push({index:u,value:z,hasAwait:!0,remainingExprs:se,deferredDropExpressions:(F=z.$)==null?void 0:F.deferredDropExpressions})}else{if(ho(e,z,r,i,o))vo(z,n,r);else if(A(z)&&T(z,V.begin)){let se=z.args;for(let j=0;j<se.length;j++){let te=se[j],ne=O(te,n,r);if(ne==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ke=ne==="break"||ne==="continue"||(ne==null?void 0:ne.includes("return"));ne&&(ke||te.$&&!wt(te.$.env.modulePath,ne))&&a.emitLine(`${n}${ne};`)}}if(($=z.$)!=null&&$.deferredDropExpressions)for(let j of z.$.deferredDropExpressions){let te=O(j,n,r);te&&a.emitLine(`${n}${te};`)}}else{let se=O(z,n,r);if(se==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let j=se==="break"||se==="continue"||(se==null?void 0:se.includes("return"));se&&(j||z.$&&!wt(z.$.env.modulePath,se))&&a.emitLine(`${n}${se};`)}}l.push({index:u,value:z,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let W=r.asyncCondBranchInfo.get(t.index);((W==null?void 0:W.branches.some(de=>de.hasAwait&&de.remainingExprs&&de.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let f=!1,p=0,_=n;for(let R=0;R<s.length;R++){let z=s[R];if(z.tag!=="FnCall"||!T(z,"=>")){a.emitLine(`${_}// Error: Expected => pair in cond`);continue}let W=z.args[0],ee=z.args[1];if(!W||!ee){a.emitLine(`${_}// Error: Invalid pair in cond`);continue}if(_t((C=W.$)==null?void 0:C.value)&&W.$.value.value===!1)continue;f&&(a.emitLine(`${_}else {`),p++,_+=" ");let de=R===s.length-1&&W.tag==="Atom"&&((I=W.token)==null?void 0:I.value)==="true"?null:O(W,_,r);de?a.emitLine(`${_}if (${de}) {`):a.emitLine(`${_}{`),f=!0;let se=`${_} `;if(ci(ee)){a.emitLine(`${se}sm->cond_branch_${t.index} = ${R};`);let te=To(ee,t,se,r),ne=(N=r.asyncWhileLoopInfo)==null?void 0:N.get(t.index);if(ne&&te.length>0){let ke=(x=r.asyncCondBranchInfo)==null?void 0:x.get(t.index),ce=(ke==null?void 0:ke.branches.some(Q=>Q.hasAwait&&Q.remainingExprs&&Q.remainingExprs.length>0))??!1;ne.condBranchPostWhileExprs={branchIndex:R,condBranchFieldIndex:t.index,exprs:te,deferredDropExpressions:(D=ee.$)==null?void 0:D.deferredDropExpressions,skipCondBranchCheck:ce},l.push({index:R,value:ee,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(P=ee.$)==null?void 0:P.deferredDropExpressions})}else l.push({index:R,value:ee,hasAwait:!0,remainingExprs:te,deferredDropExpressions:(U=ee.$)==null?void 0:U.deferredDropExpressions})}else{if(ho(e,ee,r,i,o))vo(ee,se,r);else if(A(ee)&&T(ee,V.begin)){let te=ee.args;for(let ne=0;ne<te.length;ne++){let ke=te[ne],ce=O(ke,se,r);if(ce==="break"&&t.isInsideWhile)a.emitLine(`${se}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${se}goto while_loop_${t.index}_end;`);else{let Q=ce==="break"||ce==="continue"||(ce==null?void 0:ce.includes("return"));ce&&(Q||ke.$&&!wt(ke.$.env.modulePath,ce))&&a.emitLine(`${se}${ce};`)}}if((X=ee.$)!=null&&X.deferredDropExpressions)for(let ne of ee.$.deferredDropExpressions){let ke=O(ne,se,r);ke&&a.emitLine(`${se}${ke};`)}}else{let te=O(ee,se,r);if(te==="break"&&t.isInsideWhile)a.emitLine(`${se}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${se}goto while_loop_${t.index}_end;`);else{let ne=te==="break"||te==="continue"||(te==null?void 0:te.includes("return"));te&&(ne||ee.$&&!wt(ee.$.env.modulePath,te))&&a.emitLine(`${se}${te};`)}}l.push({index:R,value:ee,hasAwait:!1})}a.emitLine(`${_}}`)}for(let R=0;R<p;R++)_=_.slice(0,-2),a.emitLine(`${_}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let d=r.asyncCondBranchInfo.get(t.index);((d==null?void 0:d.branches.some(R=>R.hasAwait&&R.remainingExprs&&R.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function ho(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!Ec(t)}function vo(e,t,n){var o,a;let r=n.emitter,i=Se((o=e.$)==null?void 0:o.type);if(A(e)&&T(e,V.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],f=O(c,t,n);f&&c.$&&!wt(c.$.env.modulePath,f)&&r.emitLine(`${t}${f};`)}let l=s[s.length-1];if(l&&!i){let u=O(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=O(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=O(e,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let s of n.pendingDeferredDrops){let l=O(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}Hr({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function ci(e){if(e.tag==="FnCall"&&qn(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(ci(t))return!0}return!1}function Ec(e){if(Xt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Ec(t))return!0}return!1}function la(e,t,n,r,i,o){var d,y,g,h,v,E;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,V.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=O(s,n,r),c=(d=s.$)==null?void 0:d.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((y=e.$)!=null&&y.isPrimitiveMatch){ty(e,l,u,t,n,r,i,o);return}if(!Me(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let f=c,p=(g=r.types[f.id])==null?void 0:g.cName;if(!p){a.emitLine(`${n}// Error: enum type has no C name`);return}let _=Nn(f);if(_){let k=-1,b=-1,F;for(let $=0;$<l.length;$++){let C=l[$];if(A(C)&&T(C,"=>",2)){let I=C.args[0];if(I&&A(I)&&T(I,"."))k=$;else if(I&&A(I)){let N=I.func;N&&A(N)&&T(N,".")&&(b=$,I.args.length>0&&Y(I.args[0])&&(F=I.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),b>=0){let $=l[b];if(!A($))a.emitLine(`${n} // Error: Expected => in case`);else{let C=$.args[1];if(F){let I=r,N=!1,x;if(I.stateMachineVariables){for(let[D,P]of I.stateMachineVariables)if(P.name===F){N=!0,x=D;break}}N&&x?a.emitLine(`${n} sm->var_${x} = ${u};`):a.emitLine(`${n} ${q(_,r)} ${F} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),ci(C)){let I=To(C,t,n+" ",r);if(I.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:b,value:C,hasAwait:!0,remainingExprs:I,deferredDropExpressions:(h=C.$)==null?void 0:h.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(ho(e,C,r,i,o))vo(C,n+" ",r);else{let I=O(C,n+" ",r);if(i){let N=me(`var_${i}`);I&&a.emitLine(`${n} sm->${N} = ${I};`)}else o?I&&a.emitLine(`${n} ${o} = ${I};`):I&&C.$&&!wt(C.$.env.modulePath,I)&&a.emitLine(`${n} ${I};`)}}}if(a.emitLine(`${n}} else {`),k>=0){let $=l[k];if(!A($))a.emitLine(`${n} // Error: Expected => in case`);else{let C=$.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${k};`),ci(C)){let I=To(C,t,n+" ",r);if(I.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:k,value:C,hasAwait:!0,remainingExprs:I,deferredDropExpressions:(v=C.$)==null?void 0:v.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(ho(e,C,r,i,o))vo(C,n+" ",r);else{let I=O(C,n+" ",r);if(i){let N=me(`var_${i}`);I&&a.emitLine(`${n} sm->${N} = ${I};`)}else o?I&&a.emitLine(`${n} ${o} = ${I};`):I&&C.$&&!wt(C.$.env.modulePath,I)&&a.emitLine(`${n} ${I};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let k=!1;for(let b=0;b<l.length;b++){let F=l[b];if(!A(F)||!T(F,"=>",2))continue;let $=F.args[0],C=F.args[1],I=Y($)&&$.token.value==="_",N;if(!I){if(A($)&&T($,".",1))N=$.args[0].token.value;else if(A($)){let x=$.func;x&&A(x)&&T(x,".",1)&&(N=x.args[0].token.value)}}if(!I&&!N){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(I)k=!0,a.emitLine(`${n} default: {`);else{let x=`${p.toUpperCase()}_${N.toUpperCase()}`;a.emitLine(`${n} case ${x}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),A($)&&$.args.length>=1){let x=$.func;if(x&&A(x)&&T(x,".")){let D=f.variants.find(P=>P.name===N);if(D&&D.fields)for(let P=0;P<Math.min($.args.length,D.fields.length);P++){let U=$.args[P],X=D.fields[P];if(Y(U)&&X){let R=U.token.value,z=me(R),W=r,ee=!1,de;if(W.stateMachineVariables){for(let[te,ne]of W.stateMachineVariables)if(ne.name===R){ee=!0,de=te;break}}let se=me(X.label,X.type.isExtern==="c"),j=`${u}.data.${N}.${se}`;if(ee&&de)a.emitLine(`${n} sm->var_${de} = ${j};`);else{let te=q(X.type,r);a.emitLine(`${n} ${te} ${z} = ${j};`)}}}}}if(ci(C)){let x=To(C,t,n+" ",r);if(x.length>0){let D=r;D.asyncCondBranchInfo||(D.asyncCondBranchInfo=new Map);let P=D.asyncCondBranchInfo.get(t.index)||{branches:[]};P.branches.push({index:b,value:C,hasAwait:!0,remainingExprs:x,deferredDropExpressions:(E=C.$)==null?void 0:E.deferredDropExpressions}),D.asyncCondBranchInfo.set(t.index,P)}}else if(ho(e,C,r,i,o))vo(C,n+" ",r);else{let x=O(C,n+" ",r);if(i){let D=me(`var_${i}`);x&&a.emitLine(`${n} sm->${D} = ${x};`)}else o?x&&a.emitLine(`${n} ${o} = ${x};`):x&&C.$&&!wt(C.$.env.modulePath,x)&&a.emitLine(`${n} ${x};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}k||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function ey(e){return A(e)?T(e,"|",2):!1}function Al(e){if(!ey(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Al(t),...Al(n)]}function ty(e,t,n,r,i,o,a,s){var c,f,p;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let _=0;_<t.length;_++){let d=t[_];if(!A(d)||!T(d,"=>",2))continue;let y=d.args[0],g=d.args[1];if(Xt(y,"_"))l.emitLine(`${i} default:`);else{let h=(c=y.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let v of h)if(v!==void 0){let E=Fn(v,o);l.emitLine(`${i} case ${E}:`)}}else{let v=Al(y);for(let E of v){let k=(f=E.$)==null?void 0:f.value;if(k!==void 0){let b=Fn(k,o);l.emitLine(`${i} case ${b}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${_};`),ci(g)){let h=To(g,r,i+" ",o);u.push({index:_,value:g,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(p=g.$)==null?void 0:p.deferredDropExpressions})}else{if(ho(e,g,o,a,s))vo(g,i+" ",o);else{let h=O(g,i+" ",o);if(a){let v=me(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&g.$&&!wt(g.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:_,value:g,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 To(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(ci(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&qn(u)){let c=u.args[0];if(c){let f=O(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${f};`)}}}else if(l.tag==="FnCall"&&qn(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=O(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,V.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),sa(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,V.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),la(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&T(l,V.while)&&Il(l,t,n,r);else{let u=O(l,n,r);u&&l.$&&!wt(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Il(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=ry(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=O(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 f=ny(s,t,n,r,u);if(i.emitLine(`${n}while_loop_${u}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),l){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:u,conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:f})}function ny(e,t,n,r,i){var _;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let d=0;d<s.length;d++){let y=s[d];if(Vn(y)){l=d;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,f=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...((_=e.$)==null?void 0:_.deferredDropExpressions)??[]];for(let d=0;d<l;d++){let y=s[d],g=O(y,n,r);g&&y.$&&!wt(y.$.env.modulePath,g)&&o.emitLine(`${n}${g};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=f;let p=s[l];if(A(p)&&T(p,V.while)&&Vn(p)){Il(p,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}if(A(p)&&T(p,":=")){let d=p.args[1];if(d&&d.tag==="FnCall"&&qn(d)){let y=d.args[0];if(y){let g=O(y,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(p.tag==="FnCall"&&qn(p)){let d=p.args[0];if(d&&t.futureVariableId===void 0){let y=O(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${y};`)}}else if(A(p)&&T(p,V.cond)){sa(p,t,n,r,void 0);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}else if(A(p)&&T(p,V.match)){la(p,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}function ry(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,V.while)&&Vn(n))return!0;return!1}function Sl(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 ua(e){return!e||!G(e)?!1:e.resolvedConcreteType&&G(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>$a(t.traitType))}function Za(e,t){return t==="outer"?`__capture.${me(e)}`:me(`var_${e}`)}function $c(e,t,n,r,i,o,a,s){var y,g,h,v,E,k,b,F,$,C,I,N,x,D,P,U,X,R,z,W,ee,de,se,j,te,ne,ke;let l=s.emitter,c=un(o).isFuture.outputType,f=Se(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let p=vc(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 ce=0;ce<p.length;ce++){let Q=p[ce];if(!Q)continue;let Pe=Q.stateNumber,ut=ce===p.length-1;if(l.emitLine(`
|
|
190
|
-
state_${Pe}:`),l.emitLine(` case ${Pe}: { // State ${Pe}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${Pe}\\n");`),Pe>0&&i.awaitPoints[Pe-1]){let B=i.awaitPoints[Pe-1],re=Sl(B,i);B.isInsideCond&&l.emitLine(` if (sm->${re} != NULL) {`);let ve=Se(B.resultType)||G(B.resultType)&&!B.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${re}->state == -2) {`),l.emitLine(' fprintf(stderr, "panic: attempted to await an aborted Future\\n");'),l.emitLine(" abort();"),l.emitLine(" }"),B&&!ve){if(l.emitLine(` // Extract result from await ${Pe-1}`),l.emitLine(` int state_before_read = sm->${re}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${Pe-1}, state=%d\\n", state_before_read);`),Be(B.resultType)){let Le=pr(B.resultType,s);Le?l.emitLine(` sm->await_result_${Pe-1} = ${Le}(sm->${re}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${Pe-1} = sm->${re}->result;`))}else l.emitLine(` sm->await_result_${Pe-1} = sm->${re}->result;`);if(B.targetVariableId){let Le=Za(B.targetVariableId,"local");l.emitLine(` sm->${Le} = sm->await_result_${Pe-1};`)}l.emitLine("")}if(!B.futureVariableId){let Le=B.expr;if(Le.tag==="FnCall"){let Ie=Le.args[0],ze=(y=Ie==null?void 0:Ie.$)==null?void 0:y.type;ze&&(G(ze)||et(ze))&&(l.emitLine(` if (sm->${re} != NULL) { __yo_decr_rc((void*)sm->${re}); sm->${re} = NULL; }`),l.emitLine(""))}}let Te=s;if(B){let Le=(g=Te.asyncCondBranchInfo)==null?void 0:g.get(B.index);if(Le&&Le.branches.some(ze=>ze.hasAwait)){let ze=Le.condBranchFieldIndex??B.index,bt=ze===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),bt||l.emitLine(` switch (sm->cond_branch_${ze}) {`);let Kt=((h=Q.awaitPoint)==null?void 0:h.isInsideCond)??!1;for(let kt of Le.branches)if(kt.hasAwait){if(bt||l.emitLine(` case ${kt.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${kt.index}\\n");`),kt.remainingExprs&&kt.remainingExprs.length>0){let ht=s.inAsyncStateMachine,dn=s.stateMachineVariables,Fe=s.variableIdRemapping,ot=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let lt=(v=Te.asyncWhileLoopInfo)==null?void 0:v.get(B.index);s.pendingDeferredDrops=[...kt.deferredDropExpressions??[],...((E=lt==null?void 0:lt.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...((k=e.$)==null?void 0:k.deferredDropExpressions)??[]];let Ue=new Map;for(let fe of i.capturedVariables)Ue.set(fe.id,fe);if(a)for(let fe of a.fields)Ue.set(fe.label,{id:fe.label,name:fe.label,type:fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ue;let Ee=!1,K=[],oe=Le.targetAssignmentCode;for(let fe=0;fe<kt.remainingExprs.length;fe++){let Z=kt.remainingExprs[fe],ge=fe===kt.remainingExprs.length-1;if(Ee){K.push(Z);continue}if(Kt&&Vn(Z)){Ee=!0,Nl(Z,Q.awaitPoint,i," ",s);continue}let J=O(Z," ",s);!J||!Z.$||wt(Z.$.env.modulePath,J)||(ge&&oe?l.emitLine(` ${oe} = ${J};`):l.emitLine(` ${J};`))}if(kt.remainingExprs.length===0&&oe&&l.emitLine(` ${oe} = sm->await_result_${B.index};`),Ee&&Q.awaitPoint){let fe=Q.awaitPoint.index;Te.asyncCondBranchInfo||(Te.asyncCondBranchInfo=new Map);let Z=Te.asyncCondBranchInfo.get(fe);if(Z)Z.chainedBranches||(Z.chainedBranches=[]),Z.chainedBranches.push({branches:[{index:kt.index,value:kt.value,hasAwait:K.length>0||K.some(ge=>Vn(ge)),remainingExprs:K,deferredDropExpressions:kt.deferredDropExpressions}],condBranchFieldIndex:ze});else{let ge={branches:[{index:kt.index,value:kt.value,hasAwait:K.length>0||K.some(J=>Vn(J)),remainingExprs:K,deferredDropExpressions:kt.deferredDropExpressions}],condBranchFieldIndex:ze};Te.asyncCondBranchInfo.set(fe,ge)}}else if(kt.deferredDropExpressions)for(let fe of kt.deferredDropExpressions){let Z=O(fe," ",s);Z&&Z.includes("sm->")&&l.emitLine(` ${Z};`)}s.inAsyncStateMachine=ht,s.stateMachineVariables=dn,s.variableIdRemapping=Fe,s.pendingDeferredDrops=ot}bt||(l.emitLine(" break;"),l.emitLine(" }"))}if(bt||l.emitLine(" }"),Le.chainedBranches){for(let kt of Le.chainedBranches)for(let ht of kt.branches)if(ht.hasAwait&&ht.remainingExprs&&ht.remainingExprs.length>0){let dn=s.inAsyncStateMachine,Fe=s.stateMachineVariables,ot=s.variableIdRemapping,lt=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ue=(b=Te.asyncWhileLoopInfo)==null?void 0:b.get(B.index);s.pendingDeferredDrops=[...ht.deferredDropExpressions??[],...((F=Ue==null?void 0:Ue.bodyExpr.$)==null?void 0:F.deferredDropExpressions)??[],...(($=e.$)==null?void 0:$.deferredDropExpressions)??[]];let Ee=new Map;for(let Z of i.capturedVariables)Ee.set(Z.id,Z);if(a)for(let Z of a.fields)Ee.set(Z.label,{id:Z.label,name:Z.label,type:Z.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ee;let K=((C=Q.awaitPoint)==null?void 0:C.isInsideCond)??!1,oe=!1,fe=[];for(let Z of ht.remainingExprs){if(oe){fe.push(Z);continue}if(K&&Vn(Z)){oe=!0,Nl(Z,Q.awaitPoint,i," ",s);continue}let ge=O(Z," ",s);!ge||!Z.$||wt(Z.$.env.modulePath,ge)||l.emitLine(` ${ge};`)}if(oe&&Q.awaitPoint){let Z=Q.awaitPoint.index;Te.asyncCondBranchInfo||(Te.asyncCondBranchInfo=new Map);let ge=Te.asyncCondBranchInfo.get(Z);ge?(ge.chainedBranches||(ge.chainedBranches=[]),ge.chainedBranches.push({branches:[{index:ht.index,value:ht.value,hasAwait:fe.length>0||fe.some(J=>Vn(J)),remainingExprs:fe,deferredDropExpressions:ht.deferredDropExpressions}],condBranchFieldIndex:kt.condBranchFieldIndex})):Te.asyncCondBranchInfo.set(Z,{branches:[{index:ht.index,value:ht.value,hasAwait:fe.length>0||fe.some(J=>Vn(J)),remainingExprs:fe,deferredDropExpressions:ht.deferredDropExpressions}],condBranchFieldIndex:kt.condBranchFieldIndex})}else if(ht.deferredDropExpressions)for(let Z of ht.deferredDropExpressions){let ge=O(Z," ",s);ge&&ge.includes("sm->")&&l.emitLine(` ${ge};`)}s.inAsyncStateMachine=dn,s.stateMachineVariables=Fe,s.variableIdRemapping=ot,s.pendingDeferredDrops=lt}}if(Le.targetVariableId){let kt=Za(Le.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${kt} = sm->await_result_${B.index};`)}l.emitLine("")}B.isInsideCond&&l.emitLine(" }");let Ie=(I=Te.asyncWhileLoopInfo)==null?void 0:I.get(B.index);if(Ie){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${B.index}_active) {`),Ie.bodyExprsAfterAwait&&Ie.bodyExprsAfterAwait.length>0){let Fe=s.inAsyncStateMachine,ot=s.stateMachineVariables,lt=s.variableIdRemapping,Ue=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((N=Ie.bodyExpr.$)==null?void 0:N.deferredDropExpressions)??[],...((x=e.$)==null?void 0:x.deferredDropExpressions)??[]];let Ee=new Map;for(let Z of i.capturedVariables)Ee.set(Z.id,Z);if(a)for(let Z of a.fields)Ee.set(Z.label,{id:Z.label,name:Z.label,type:Z.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ee;let K=s.smWhileBreakInfo,oe=s.smWhileContinueInfo,fe=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${B.index}`,activeIndex:B.index},s.smWhileContinueInfo={label:`while_loop_${B.index}_continue`},s.smWhileBodyDrops=[...((D=Ie.bodyExpr.$)==null?void 0:D.deferredDropExpressions)??[]];for(let Z of Ie.bodyExprsAfterAwait){let ge=O(Z," ",s);!ge||!Z.$||wt(Z.$.env.modulePath,ge)||l.emitLine(` ${ge};`)}s.smWhileBreakInfo=K,s.smWhileContinueInfo=oe,s.smWhileBodyDrops=fe,s.inAsyncStateMachine=Fe,s.stateMachineVariables=ot,s.variableIdRemapping=lt,s.pendingDeferredDrops=Ue}l.emitLine(` while_loop_${B.index}_continue:`);{let Fe=((P=Ie.bodyExpr.$)==null?void 0:P.deferredDropExpressions)??[];if(Fe.length>0){let ot=s.inAsyncStateMachine,lt=s.stateMachineVariables,Ue=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ee=new Map;for(let K of i.capturedVariables)Ee.set(K.id,K);if(a)for(let K of a.fields)Ee.set(K.label,{id:K.label,name:K.label,type:K.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ee;for(let K of Fe){let oe=O(K," ",s);oe&&oe.includes("sm->")&&l.emitLine(` ${oe};`)}s.inAsyncStateMachine=ot,s.stateMachineVariables=lt,s.variableIdRemapping=Ue}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let ze=s.inAsyncStateMachine,bt=s.stateMachineVariables,Kt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let kt=new Map;for(let Fe of i.capturedVariables)kt.set(Fe.id,Fe);if(a)for(let Fe of a.fields)kt.set(Fe.label,{id:Fe.label,name:Fe.label,type:Fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=kt;let ht=O(Ie.conditionExpr," ",s);s.inAsyncStateMachine=ze,s.stateMachineVariables=bt,s.variableIdRemapping=Kt,l.emitLine(` if (!(${ht})) {`),l.emitLine(` sm->while_loop_${B.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 dn=B.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${dn};`),l.emitLine(` goto while_loop_${dn}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${B.index}:`),Ie.condBranchPostWhileExprs){let Fe=Ie.condBranchPostWhileExprs,ot=Fe.condBranchFieldIndex,lt=Fe.branchIndex;Fe.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_${ot} == ${lt}) {`));let Ue=s.inAsyncStateMachine,Ee=s.stateMachineVariables,K=s.variableIdRemapping,oe=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((U=e.$)==null?void 0:U.deferredDropExpressions)??[]];let fe=new Map;for(let Ne of i.capturedVariables)fe.set(Ne.id,Ne);if(a)for(let Ne of a.fields)fe.set(Ne.label,{id:Ne.label,name:Ne.label,type:Ne.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=fe;let Z=Q.awaitPoint!=null,ge=!1,J=[];for(let Ne=0;Ne<Fe.exprs.length;Ne++){let ye=Fe.exprs[Ne];if(ge){J.push(ye);continue}if(Z&&Vn(ye)){ge=!0,Nl(ye,Q.awaitPoint,i," ",s);continue}let Ke=O(ye," ",s);!Ke||!ye.$||wt(ye.$.env.modulePath,Ke)||l.emitLine(` ${Ke};`)}if(ge&&Q.awaitPoint){let Ne=Q.awaitPoint.index;Te.asyncCondBranchInfo||(Te.asyncCondBranchInfo=new Map);let ye=Fe.skipCondBranchCheck?-1:Fe.condBranchFieldIndex,Ke=Te.asyncCondBranchInfo.get(Ne);Ke?(Ke.chainedBranches||(Ke.chainedBranches=[]),Ke.chainedBranches.push({branches:[{index:Fe.branchIndex,value:Fe.exprs[0],hasAwait:J.length>0||J.some(Qe=>Vn(Qe)),remainingExprs:J,deferredDropExpressions:Fe.deferredDropExpressions}],condBranchFieldIndex:ye})):Te.asyncCondBranchInfo.set(Ne,{branches:[{index:Fe.branchIndex,value:Fe.exprs[0],hasAwait:J.length>0||J.some(Qe=>Vn(Qe)),remainingExprs:J,deferredDropExpressions:Fe.deferredDropExpressions}],condBranchFieldIndex:ye})}if(!ge&&Fe.deferredDropExpressions)for(let Ne of Fe.deferredDropExpressions){let ye=O(Ne," ",s);ye&&ye.includes("sm->")&&l.emitLine(` ${ye};`)}l.emitLine(" }"),s.inAsyncStateMachine=Ue,s.stateMachineVariables=Ee,s.variableIdRemapping=K,s.pendingDeferredDrops=oe}if(Ie.outerWhileLoop){let Fe=Ie.outerWhileLoop,ot=Fe.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${ot}_active) {`),Fe.bodyExprsAfterAwait.length>0){let lt=s.inAsyncStateMachine,Ue=s.stateMachineVariables,Ee=s.variableIdRemapping,K=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((X=Fe.bodyExpr.$)==null?void 0:X.deferredDropExpressions)??[],...((R=e.$)==null?void 0:R.deferredDropExpressions)??[]];let oe=new Map;for(let J of i.capturedVariables)oe.set(J.id,J);if(a)for(let J of a.fields)oe.set(J.label,{id:J.label,name:J.label,type:J.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;let fe=s.smWhileBreakInfo,Z=s.smWhileContinueInfo,ge=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${ot}`,activeIndex:ot},s.smWhileContinueInfo={label:`while_loop_${ot}_continue`},s.smWhileBodyDrops=[...((z=Fe.bodyExpr.$)==null?void 0:z.deferredDropExpressions)??[]];for(let J of Fe.bodyExprsAfterAwait){let Ne=O(J," ",s);!Ne||!J.$||wt(J.$.env.modulePath,Ne)||l.emitLine(` ${Ne};`)}s.smWhileBreakInfo=fe,s.smWhileContinueInfo=Z,s.smWhileBodyDrops=ge,s.inAsyncStateMachine=lt,s.stateMachineVariables=Ue,s.variableIdRemapping=Ee,s.pendingDeferredDrops=K}l.emitLine(` while_loop_${ot}_continue:`);{let lt=((W=Fe.bodyExpr.$)==null?void 0:W.deferredDropExpressions)??[];if(lt.length>0){let Ue=s.inAsyncStateMachine,Ee=s.stateMachineVariables,K=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let oe=new Map;for(let fe of i.capturedVariables)oe.set(fe.id,fe);if(a)for(let fe of a.fields)oe.set(fe.label,{id:fe.label,name:fe.label,type:fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;for(let fe of lt){let Z=O(fe," ",s);Z&&Z.includes("sm->")&&l.emitLine(` ${Z};`)}s.inAsyncStateMachine=Ue,s.stateMachineVariables=Ee,s.variableIdRemapping=K}}{let lt=s.inAsyncStateMachine,Ue=s.stateMachineVariables,Ee=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let K=new Map;for(let fe of i.capturedVariables)K.set(fe.id,fe);if(a)for(let fe of a.fields)K.set(fe.label,{id:fe.label,name:fe.label,type:fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=K;let oe=O(Fe.conditionExpr," ",s);s.inAsyncStateMachine=lt,s.stateMachineVariables=Ue,s.variableIdRemapping=Ee,l.emitLine(` if (!(${oe})) {`),l.emitLine(` sm->while_loop_${ot}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${B.index};`),l.emitLine(` goto while_loop_${ot}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${ot}:`)}}}}let at=s.inAsyncStateMachine,_e=s.stateMachineVariables,Ce=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let $e=new Map;for(let B of i.capturedVariables)$e.set(B.id,B);if(a)for(let B of a.fields)$e.set(B.label,{id:B.label,name:B.label,type:B.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=$e;let Ge=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((ee=e.$)==null?void 0:ee.deferredDropExpressions)??[]];let nt=ut&&!f&&Q.expressions.length>0,ct=Q.expressions.length>0?Q.expressions[Q.expressions.length-1]:void 0,jt=s.asyncBodyReturnExpr;if(!f&&ct&&d&&ct===d&&Q.awaitPoint?s.asyncBodyReturnExpr=ct:s.asyncBodyReturnExpr=void 0,Tc(Q," ",s,nt),s.asyncBodyReturnExpr=jt,s.pendingDeferredDrops=Ge,l.emitLine(""),Q.awaitPoint){s.inAsyncStateMachine=at,s.stateMachineVariables=_e,s.variableIdRemapping=Ce;let B=Pe+1;{let re=Sl(Q.awaitPoint,i),Te=(de=Q.awaitPoint.expr.args)==null?void 0:de[0],Le=ua((se=Te==null?void 0:Te.$)==null?void 0:se.type),Ie=(j=Q.awaitPoint)==null?void 0:j.isInsideCond;Ie&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${re} != NULL) {`));let ze=(te=Q.awaitPoint)==null?void 0:te.isInsideWhile,bt=ze?(ne=s.asyncWhileLoopInfo)==null?void 0:ne.get(Q.awaitPoint.index):void 0;if(ze&&bt){let Kt=Q.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${Kt}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${B};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${re}->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(""),Le?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->${re}); // event loop reference`)),Le||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),oy(Q.awaitPoint.expr,`sm->${re}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${re}->__yo_resume_fn((void*)sm->${re});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${re}->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->${re}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${re}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),ze&&bt){let Kt=Q.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${Kt};`),l.emitLine(" }")}Ie&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${B};`),l.emitLine(` goto state_${B};`),l.emitLine(" }"))}}else if(ut){if(!Q.expressions.some(re=>Cc(re))){if((ke=e.$)!=null&&ke.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let re of e.$.deferredDropExpressions){let ve=O(re," ",s);ve&&l.emitLine(` ${ve};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),Hr({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=at,s.stateMachineVariables=_e,s.variableIdRemapping=Ce}else s.inAsyncStateMachine=at,s.stateMachineVariables=_e,s.variableIdRemapping=Ce;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function Nl(e,t,n,r,i){let o=i.emitter,a=Sl(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&qn(s)){let l=s.args[0];if(l){let u=O(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"&&qn(e)){let s=e.args[0];if(s){let l=O(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,V.cond)){Eo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,V.match)){Eo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,V.while)){Eo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,V.begin)){Eo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Cc(e){if(Xt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Cc(t))return!0}return!1}function iy(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;G(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Gt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function oy(e,t,n,r){var c,f,p,_;let i=(c=e.args)==null?void 0:c[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=(p=e.args)==null?void 0:p.find(d=>A(d)&&T(d,V.using));if(!o)return;let a=un(i.$.type);if(!((_=a==null?void 0:a.isFuture.effects)!=null&&_.length))return;let s=iy(a.isFuture.effects),l=o.args,u=r.emitter;for(let d=0;d<s.length&&d<l.length;d++){let y=s[d],g=l[d];if(!ae(y.type)||y.type.forallParameters.length>0)continue;let h=O(g,n,r),v=y.label;u.emitLine(`${n}${t}->__capture.${v} = (void*)${h};`)}}function Dr(e,t,n){let r=pe(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function bc(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&wn(e.$.type))}function ay(e,t,n,r,i,o=!1){var _;let a=Object.values(i.types).find(d=>d.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.$)!=null&&_.deferredDupExpressions)for(let d of n.$.deferredDupExpressions){let y=Xa(d);y&&l.set(y,d)}let u=e.fields.map(d=>{var v,E;if(d.isEffectParam)return"NULL";let y,g=d.exprs.expr;if((E=(v=g.$)==null?void 0:v.deferredDupExpressions)!=null&&E.length&&(y=g.$.deferredDupExpressions[0]),!y){let k=[d.label];Y(g)&&k.push(g.token.value);for(let b of k){let F=l.get(b);if(F){y=F;break}}}if(y)return O(y,r,i);let h={tag:"Atom",token:g.token,$:g.$};return O(h,r,i)}),c=`(${s}){ ${u.map((d,y)=>{let g=e.fields[y];return g?`.${g.label} = ${d}`:`/* Error: missing field at index ${y} */`}).join(", ")} }`,f=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=`__capture_${t}_${f}`;return o?i.emitter.emitLine(`${r}${s} ${p} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${p} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${p} = ${c};`)),{captureTempVar:p,captureCName:s}}function kc(e,t,n){var d;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=In(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=(d=n.functions[o.funcId])==null?void 0:d.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=et(e.$.type),u;if(l){let y=n.types[e.$.type.id];if(!y)return"// Error: Dyn closure type not found in context";u=y.cName}let c=a&&Ae(a)&&a.fields.length>0,f=q(i.return.type,n),p=i.parameters.map(y=>q(y.type,n)).join(", "),_=`(${f} (*)(void*${p?", "+p:""}))${s}`;if(c&&a&&Ae(a)){let y=!l,g=ay(a,i.id,e,t,n,y);if(!g)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=g;if(l){let v=`__yo_create_${u}`,E=`__yo_dispose_${u}`;return`${v}(${h}, ${E}, ${_})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let y=`__yo_create_${u}`,g=`__yo_dispose_${u}`;return`${y}(NULL, ${g}, ${_})`}else{if(e.$.type.tag==="SomeType"){let y=e.$.type;if(y.resolvedConcreteType)return n.implClosureCallMap.set(y.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${q(y.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function xl(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=O(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function $o(e,t,n=""){var a,s,l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$,C,I,N,x,D,P,U,X,R;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return xl(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return xl(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let z=t.emitter;for(let W of r.smWhileBodyDrops){let ee=O(W,n,t);ee&&ee.includes("sm->")&&z.emitLine(`${n}${ee};`)}}if(r.smWhileContinueInfo.stepExpr){let z=t.emitter,W=O(r.smWhileContinueInfo.stepExpr,n,t);W&&z.emitLine(`${n}${W};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return xl(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:z,activeIndex:W}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let ee=t.emitter;for(let de of r.smWhileBodyDrops){let se=O(de,n,t);se&&se.includes("sm->")&&ee.emitLine(`${n}${se};`)}}return W!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${W}_active = false;`),`goto ${z}`):`goto ${z}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let z=t.emitter,W=r.inAsyncStateMachine.futureType,de=un(W).isFuture.outputType,se=Se(de);if((a=e.$)!=null&&a.deferredDropExpressions)for(let te of e.$.deferredDropExpressions){let ne=O(te,n,t);ne&&ne.includes("sm->")&&z.emitLine(`${n}${ne};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){z.emitLine(`${n}// Drop local variables before early completion`);for(let te of r.pendingDeferredDrops){let ne=O(te,n,t);ne&&ne.includes("sm->")&&z.emitLine(`${n}${ne};`)}}z.emitLine(`${n}// Early return - complete the result Future`);let j=se?void 0:`(${q(de,t)}){0}`;return Hr({emitter:z,indent:n,resultCode:j,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&Se(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let z=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(z))return me(z);let W=!1;if((u=e.$)!=null&&u.env){let ee=pe(e.$.env,z);if(ee.length>0){let de=ee[ee.length-1],se=de.isOwningTheSameRcValueAs?de.isOwningTheSameRcValueAs.id:de.id;(c=r.variableIdRemapping)!=null&&c.has(se)&&(se=r.variableIdRemapping.get(se));let j=r.stateMachineVariables.get(se);if(j){let te=j.kind==="outer"?`__capture.${z}`:`var_${j.id}`;return W=!0,`sm->${te}`}}}if(!W){for(let[ee,de]of r.stateMachineVariables)if(de.name===z){let se=de.kind==="outer"?`__capture.${z}`:`var_${ee}`;return W=!0,`sm->${se}`}}if((f=e.$)!=null&&f.env){let ee=pe(e.$.env,z);if(ee.length>0){let de=ee[ee.length-1];if(de.isOwningTheSameRcValueAs){let se=de.isOwningTheSameRcValueAs.name,j=de.isOwningTheSameRcValueAs.id;for(let[te,ne]of r.stateMachineVariables)if(ne.name===se||te===j)return`sm->${ne.kind==="outer"?`__capture.${se}`:`var_${te}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(z)&&r.currentClosureCaptureFrameLevel!==void 0){let ee=r.currentClosureCaptureTypeCName;return ee?`((${ee}*)closure_context)->${Re(z,(p=e.$)==null?void 0:p.env)}`:`closure_context->${Re(z,(_=e.$)==null?void 0:_.env)}`}if((d=e.$)!=null&&d.variableName){if((y=e.$)!=null&&y.env&&((g=e.$)!=null&&g.value)&&!xe(e.$.value)){let ee=pe(e.$.env,e.$.variableName);if(ee.length>0&&ee[ee.length-1].isCompileTimeOnly)return Fn(e.$.value,t,e)}return Re(e.$.variableName,e.$.env)}}if((h=e.$)!=null&&h.variableName){if((v=e.$)!=null&&v.env&&((E=e.$)!=null&&E.value)&&!xe(e.$.value)){let z=pe(e.$.env,e.$.variableName);if(z.length>0&&z[z.length-1].isCompileTimeOnly)return Fn(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((k=e.$)!=null&&k.env)&&r.currentClosureCaptureFrameLevel!==void 0&&Dr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Re(e.$.variableName,(b=e.$)==null?void 0:b.env)}if((F=e.$)!=null&&F.value&&!xe(e.$.value))return Fn(e.$.value,t,e);let i=($=e.$)!=null&&$.env&&r.currentClosureCaptureFrameLevel!==void 0?Dr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((C=e.$)!=null&&C.env)||i)){let z=r.currentClosureCaptureTypeCName;return z?`((${z}*)closure_context)->${Re(e.token.value,(I=e.$)==null?void 0:I.env)}`:`closure_context->${Re(e.token.value,(N=e.$)==null?void 0:N.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let z=Object.values(r.functions).find(W=>W.cName===r.currentFunctionName);if(z&&z.value.type.isClosure){let W=Object.values(r.types).find(ee=>ae(ee.type)&&ee.type.isClosure&&ee.type===z.value.type);if(W)return`((${`${W.cName}_capture`}*)closure_context->data)->${Re(e.token.value,(x=e.$)==null?void 0:x.env)}`}}if((D=e.$)!=null&&D.env){let z=pe(e.$.env,e.token.value);if(z.length>0){let W=z[z.length-1];if((P=W.value)!=null&&P[0]&&be(W.value[0])){let ee=(U=t.functions[W.value[0].funcId])==null?void 0:U.cName;if(ee)return ee}else if(ae(W.type)&&(xe((X=W.value)==null?void 0:X[0])||W.value===void 0)){let ee=Object.entries(t.functions).find(([de,se])=>se.value.funcName===e.token.value);if(ee)return ee[1].cName}}}return Re(e.token.value,(R=e.$)==null?void 0:R.env)}function wc(e,t,n){var g,h,v,E,k,b,F,$,C,I,N,x,D;let r;if(vn(e)){let P=(h=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder)==null?void 0:h[0],U=(v=P==null?void 0:P.$)==null?void 0:v.closureFunctionValue;U&&be(U)&&(r=U.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=(E=e.$)==null?void 0:E.type;if(!i||!qe(i))return"/* Error: async block must have Future type */";let o=un(i);if(!o)return"/* Error: Could not extract Future module type */";let a=((k=e.$)==null?void 0:k.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 f=(b=e.$)==null?void 0:b.awaitAnalysis;if(!f)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let p=o.isFuture.outputType,_=q(p,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(""),(F=e.$)!=null&&F.captureType){let P=e.$.captureType,U=Object.values(n.types).find(R=>R.type===P),X=U?U.cName:`async_capture_${P.id}`;d.emitDeclarationLine(`${s}* ${u}(${X} __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:p,resultTypeCName:_,captureType:($=e.$)==null?void 0:$.captureType,analysis:f});let y=(C=e.$)==null?void 0:C.captureType;if(y){let P=Object.values(n.types).find(j=>j.type===y),U=P?P.cName:`async_capture_${y.id}`,X=n,R=X.currentClosureCaptures!==void 0||X.inAsyncStateMachine!==void 0||X.inEffectStateMachine!==void 0,z=!1,W=y.fields.map(j=>{var ke,ce;if(j.isEffectParam)return`.${j.label} = NULL`;let te;if(!R&&((ke=e.$)!=null&&ke.deferredDupExpressions))for(let Q of e.$.deferredDupExpressions){let Pe;if(A(Q)&&(Q.args.length>0&&Y(Q.args[0])?Pe=Q.args[0].token.value:Q.args.length===0&&A(Q.func)&&T(Q.func,".")&&Q.func.args.length>=2&&Y(Q.func.args[0])&&(Pe=Q.func.args[0].token.value)),Pe===j.label){te=Q;break}}if(te)return z=!0,(ce=te.$)!=null&&ce.variableName?(O(te,t,n),`.${j.label} = ${te.$.variableName}`):`.${j.label} = ${O(te,t,n)}`;let ne={tag:"Atom",token:j.exprs.expr.token,$:j.exprs.expr.$};return`.${j.label} = ${$o(ne,n)}`}).join(", "),ee=`(${U}){${W}}`;if(!z){let j=pr(y,n);j&&(ee=`${j}(${ee})`)}let de=((I=e.$)==null?void 0:I.variableName)||"async_result",se=`${u}(${ee})`;if(de&&((N=e.$)!=null&&N.type)){let j=Dt(e.$.type,de,n);return n.emitter.emitLine(`${t}${j} = ${se};`),de}else return se}else{let P=((x=e.$)==null?void 0:x.variableName)||"async_result",U=`${u}()`;if(P&&((D=e.$)!=null&&D.type)){let X=Dt(e.$.type,P,n);return n.emitter.emitLine(`${t}${X} = ${U};`),P}else return U}}function Fc(e,t){var p;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(${S(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)"),Se(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${S(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 _=Object.values(t.types).find(y=>y.type===s),d=_?_.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${d} __capture;`),n.emitDeclarationLine("")}let u=l.capturedVariables.filter(_=>_.kind!=="outer");if(u.length>0){n.emitDeclarationLine(" // Local variables");for(let _ of u){let d=q(_.type,t),y=Za(_.id,"local");n.emitDeclarationLine(` ${d} ${y}; // ${_.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let _ of l.awaitPoints)if(!(Se(_.resultType)||G(_.resultType)&&!_.resultType.resolvedConcreteType)){let y=_.resultType;if(_.futureType){let h=un(_.futureType);h&&(y=h.isFuture.outputType)}let g=q(y,t);n.emitDeclarationLine(` ${g} await_result_${_.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let _=l.awaitPoints.filter(d=>d.futureVariableId===void 0);if(_.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let d of _){let y=d.expr;if(y.tag!=="FnCall")continue;let g=y.args[0],h=(p=g==null?void 0:g.$)==null?void 0:p.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let v=q(h,t);n.emitDeclarationLine(` ${v} await_future_${d.index};`)}n.emitDeclarationLine("")}}let c=l.awaitPoints.filter(_=>_.needsOwnCondBranchField);if(c.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let _ of c)n.emitDeclarationLine(` int cond_branch_${_.index}; // Which branch was taken in cond with await ${_.index}`);n.emitDeclarationLine("")}let f=l.awaitPoints.filter(_=>_.isInsideWhile);if(f.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let _=l.awaitPoints.length;for(let d of f){n.emitDeclarationLine(` _Bool while_loop_${d.index}_active; // Whether while loop ${d.index} should continue`);let y=(d.whileNestingDepth??1)-1;for(let g=0;g<y;g++)n.emitDeclarationLine(` _Bool while_loop_${_}_active; // Whether outer while loop ${_} should continue`),_++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function sy(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=f=>{let p=r.get(f);p.has(u.structName)||(p.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let f of u.analysis.capturedVariables){let p;try{p=q(f.type,e)}catch{continue}let _=n.get(p);_&&_.structName!==u.structName&&c(_.structName)}for(let f of u.analysis.awaitPoints){if(f.futureVariableId!==void 0)continue;let p=f.expr;if(p.tag!=="FnCall")continue;let _=p.args[0],d=(l=_==null?void 0:_.$)==null?void 0:l.type;if(!d)continue;let y;try{y=q(d,e)}catch{continue}let g=n.get(y);g&&g.structName!==u.structName&&c(g.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let f of c){let p=(i.get(f)??0)-1;i.set(f,p),p===0&&o.push(f)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)Fc({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function ly(e,t,n,r,i,o,a){var l;let s=a.emitter;if(s.emitLine(`// Dispose function for async block ${e} state machine`),s.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),s.emitLine(`void ${n}(void* sm_ptr) {`),s.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),s.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),s.emitLine(""),i&&Be(i)){let u=Object.values(a.types).find(c=>c.type===i);if(!u)s.emitLine(" /* Error: capture struct type not found in context */");else{let c=u.cName,f=i.trait.fields.find(p=>p.label===L.___drop[0]);if(f&&f.assignedValue&&be(f.assignedValue)){let p=(l=a.functions[f.assignedValue.funcId])==null?void 0:l.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 ${c} */`)}}if(s.emitLine(""),!Se(r)&&Be(r)){let u=q(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 c=li(r,a);c?s.emitLine(` ${c}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${u} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function uy(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let f=Object.values(u.types).find(_=>_.type===l),p=f?f.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${p} __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)"),Se(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 Lc(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;sy(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:f,resultType:p,resultTypeCName:_,captureType:d,analysis:y}=r;if(ly(a,s,c,p,d,y,e),t.emitLine(""),$c(o,a,s,l,y,f,d,e),t.emitLine(""),uy(a,s,l,u,c,f,p,_,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let g=e.deferredAsyncBlocks.slice(i);for(let h of g)Fc({asyncBlockId:h.asyncBlockId,structName:h.structName,resultType:h.resultType,resultTypeCName:h.resultTypeCName,captureType:h.captureType,analysis:h.analysis},e)}n++}}function Ac(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&Ic(n.body,e)}}function Ic(e,t){var n,r,i,o,a;if(e&&A(e)){let s=e;if(vn(e)){let l=(n=e.$)==null?void 0:n.type;if(l&&qe(l)&&un(l)){let f=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=f),t.types[l.id]={type:l,cName:f},t.emitter.emitDeclarationLine(`typedef struct ${f}_struct ${f}; // Forward declaration for async state machine`)}}if(vn(e)){let l=(i=e.$)==null?void 0:i.type;if(l&&qe(l)&&un(l)){let c=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,f=!!((a=e.$)!=null&&a.awaitAnalysis),p=f?`${c}_state_t`:`${c}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[l.id]={type:l,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for io.async ${f?"state machine":"sync future"}`)}}for(let l of s.args)Ic(l,t)}}function Nc(e,t,n){var $,C,I,N,x;let r=($=e.$)==null?void 0:$.type;if(!r||!qe(r))return"/* Error: io.async must return a Future type */";let i=un(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType,a=q(o,n),s=(C=e.$)==null?void 0:C.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,f=(N=(I=e.$)==null?void 0:I.runtimeArgExprsInOrder)==null?void 0:N[0];if(!(f!=null&&f.$))return"/* Error: Missing closure argument for io.async */";let p=O(f,t,n),_=f.$.type,d,y;if(G(_)&&_.resolvedConcreteType){let D=_.resolvedConcreteType,P=n.implClosureCallMap.get(D.id);P&&(d=P.functionCName);let U=n.types[D.id];U&&(y=U.cName)}if(!d||!y)return"/* Error: no closure function or capture type for io.async sync path */";let g;for(let D in n.functions){let P=n.functions[D];if(P.cName===d&&P.effectStateMachineInfo){g=P.effectStateMachineInfo;break}}if(c.emitDeclarationLine(`struct ${s}_struct {`),c.emitDeclarationLine(" yo_ref_header_t header;"),c.emitDeclarationLine(" int state;"),Se(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(` ${y} __capture;`),g&&c.emitDeclarationLine(` ${g.structName} __effect_sm;`),c.emitDeclarationLine("};"),c.emitDeclarationLine(""),g){c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),c.emitDeclarationLine(" sm->__effect_sm.closure_context = &sm->__capture;"),c.emitDeclarationLine(` ${g.resumeFunctionName}(&sm->__effect_sm);`),c.emitDeclarationLine(" if (sm->__effect_sm.completed) {"),Se(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 D=g.analysis;for(let P of D.effectCallPoints){for(let U=0;U<P.operationArgTypes.length;U++){let X=P.operationArgTypes[U];if(Be(X)){let R=ar(`sm->__effect_sm.yield_${U}`,X,n);R&&c.emitDeclarationLine(` ${R};`)}}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;`),Se(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 h=f.$.captureType,v=h&&Be(h)?li(h,n):void 0,E=h&&Be(h)?pr(h,n):void 0,k=li(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||k)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),k&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${k}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let b=((x=e.$)==null?void 0:x.variableName)||"__io_async_result",F=Dt(r,b,n);return c.emitLine(`${t}${F} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${b}, 0, sizeof(${s}));`),c.emitLine(`${t}${b}->header.ref_count = 1;`),c.emitLine(`${t}${b}->header.gc_flags = 0;`),c.emitLine(`${t}${b}->header.gc_mark = YO_GC_UNMARKED;`),c.emitLine(`${t}${b}->header.gc_next = NULL;`),c.emitLine(`${t}${b}->header.gc_prev = NULL;`),c.emitLine(`${t}${b}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${b}->header.traverse_fn = NULL;`),c.emitLine(`${t}${b}->__capture = ${p};`),E&&c.emitLine(`${t}${b}->__capture = ${E}(${b}->__capture);`),c.emitLine(`${t}${b}->state = 0;`),c.emitLine(`${t}${b}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${b}->continuation_fn = NULL;`),c.emitLine(`${t}${b}->continuation_sm = NULL;`),b}function Sc(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];be(o)&&(Yr(o.type,t),Di(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(Yr(o.value.type,t),o.value.specializedType&&Yr(o.value.specializedType,t),Di(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&cn(a.value.type,t),Di(a.body,t)}}}function Yr(e,t){for(let n of e.parameters)cn(n.type,t);for(let n of e.forallParameters)cn(n.type,t);cn(e.return.type,t)}function Di(e,t){var n;if(e.$&&e.$.type&&cn(e.$.type,t),e.$&&e.$.value&&be(e.$.value)){let r=e.$.value;r.isControlFunction?(Yr(r.type,t),Dn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>G(a)&&qe(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:me(r.funcId)},Yr(r.type,t),Dn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Di(r,t);if(e.$&&e.$.macroExpansion&&Di(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)cn(r,t);if(e.$&&e.$.captureType&&Ae(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`yo_${r.id}`};for(let i of r.fields)cn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&be(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},Yr(o.type,t),Dn(o.body,t))}}}switch(e.tag){case"FnCall":if(T(e,V.test))break;Di(e.func,t);for(let r of e.args)Di(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&H(e.$.value)&&cn(e.$.value.value,t);break}}function cn(e,t){if(!t.types[e.id]){if(G(e)&&wn(e)){if(e.resolvedConcreteType){cn(e.resolvedConcreteType,t);return}let n=In(e);n&&cn(n,t);return}if(G(e)&&qe(e)){let n=un(e);n&&cn(n.isFuture.outputType,t);return}if(G(e)&&e.resolvedConcreteType){cn(e.resolvedConcreteType,t);return}if(!je(e)){if(Ae(e)||Rt(e)||Me(e)||He(e)||et(e)||Ye(e)||Je(e)||Et(e)||on(e)||rn(e)){let n=Et(e)?q(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Ae(e))for(let r of e.fields)cn(r.type,t);if(Me(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)cn(i.type,t)}if(Rt(e))for(let r of e.fields)cn(r.type,t);if(et(e)){let r=e;for(let i of r.requiredTraits)cn(i.traitType,t)}if(on(e)){let r=e;cn(r.childType,t),q(r,t)}if(rn(e)){let r=e;cn(r.childType,t),q(r,t)}if(Et(e)&&cn(e.childType,t),Ye(e)||Je(e)){for(let r of e.fields)cn(r.type,t);for(let r of e.fields)if(r.assignedValue&&be(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:me(i.funcId)},Yr(i.type,t),Dn(i.body,t))}else if(r.assignedValue&&(Bt(r.assignedValue)||Ht(r.assignedValue))){let i=r.assignedValue;ca(i,t)}}}else if(We(e)){let n=e,r=n.childType,i=n.length;if(ft(i)){cn(r,t);let o=q(r,t),a=`Array_${me(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(Xe(e)){if(cn(e.childType,t),Et(e.childType)){let r=e.childType.childType;cn(r,t);let i=q(r,t),o=`Slice_${me(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:q(e,t)}}else gc.has(e.tag)&&(t.types[e.id]={type:e,cName:q(e,t)});e.trait&&cn(e.trait,t)}}}function Mi(e){var t,n,r;if(e.$&&e.$.value&&xe(e.$.value)&&!(ae(e.$.type)&&e.$.type.isExtern)){if(!Se(e.$.type))return!0}if(A(e)){if(Mi(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&Se(i.$.type))&&Mi(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&Se(e.$.type))return!1;if(Mi(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(Mi(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(Mi(i))return!0}return!1}function ca(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];be(r)&&(i.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:me(r.funcId)},Dn(r.body,t))}}function Dn(e,t){var i,o,a,s,l,u,c,f,p,_;if(A(e)&&T(e,V.test)||A(e)&&T(e,L.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Dn(e.$.macroExpansion,t),(i=e.$)!=null&&i.effectAnalysis){let d=e.$.effectAnalysis.handlerValue;d&&be(d)&&Dn(d.body,t)}if(e.$&&e.$.closureFunctionValue){let d=e.$.closureFunctionValue;t.functions[d.funcId]||(t.functions[d.funcId]={value:d,cName:me(d.funcId)},Dn(d.body,t))}if(A(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let d=e.$.type,y=e.args[0];if(et(d)&&y&&((o=y.$)!=null&&o.type)){let g=y.$.type,h=e.$.dynCallTraitValues;if(h.length>0&&(Wt(g)||Zn(g))){let v=Zn(g)?g.fields[0].type:g,E=`${v.id}_${d.id}`;t.dynImpls.set(E,{dynType:d,concreteType:v,dataType:g,traitValues:h})}}}if(A(e)){let d=(a=e.func.$)==null?void 0:a.type,y=(s=e.func.$)==null?void 0:s.value;if(e.func.token.value==="?=")return;if(ae(d)){if(be(y)&&y.isControlFunction){Dn(y.body,t);for(let g of e.args)Dn(g,t);return}if(be(y)){if(y.type.return.isCompileTimeOnly||bs(y)&&!y.specializedType||y.specializedType&&jn(y.specializedType))return;if(!t.functions[y.funcId]){let g=!1;if(Mi(y.body)&&(g=!qi(y.type)&&y.type.implicitParameters.length>0,!g)||!g&&y.type.parameters.map(E=>E.type).some(E=>G(E)&&qe(E)&&!E.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:me(y.funcId)},Dn(y.body,t)}}else if(d.isExtern==="c"){let g=d.externName?d.externName:Y(e.func)?e.func.token.value:d.id;t.externFunctions[d.id]={type:d,cName:g}}}Dn(e.func,t);for(let g of e.args)Dn(g,t)}let n=(l=e.$)==null?void 0:l.type,r=(u=e.$)==null?void 0:u.value;if(ae(n)){if(be(r)&&r.isControlFunction){Dn(r.body,t);return}if(be(r)){if(bs(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(Mi(r.body))return;t.functions[r.funcId]={value:r,cName:me(r.funcId)},Dn(r.body,t)}}if(H((c=e.$)==null?void 0:c.value)&&cn(e.$.value.value,t),(f=e.$)!=null&&f.deferredDupExpressions)for(let d of e.$.deferredDupExpressions)Dn(d,t);if((p=e.$)!=null&&p.deferredDropExpressions)for(let d of e.$.deferredDropExpressions)Dn(d,t);if((_=e.$)!=null&&_.dynCallTraitValues)for(let d of e.$.dynCallTraitValues)ca(d,t)}function xc(e){let t=L.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Ae(r)||!r.isReferenceSemantics)continue;let i=xr({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&be(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:me(a.funcId)},Yr(a.type,e),Dn(a.body,e)}}}function Dc(e){var n,r,i,o,a;let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let s in e.externFunctions){let{cName:l,type:u}=e.externFunctions[s];u.isExtern!=="yo"&&(u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||Vc(u,l,!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"),cy(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),fy(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",f=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,p=f&&f.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!p&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&[...u.type.implicitParameters,...u.type.parameters.filter(v=>v.isImplicit)].some(v=>ae(v.type))||!c&&!p&&(qi(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Vi(u)||go(u)||u.isIoAsyncStateMachineClosure))continue;let d=u.specializedType??u.type,y=!p&&(d.parameters.some(v=>je(v.type))||d.forallParameters.length>0),g=je(d.return.type),h=G(d.return.type)&&d.return.type.requiredTraits.length>0;y||g&&!h||Vc(d,l,!1,e,u.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function Oi(e,t,n,r){let i=r||q(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 f=me(u.label||`param${c}`);if(ae(u.type))return Oi(u.type,"(*)",n).replace(" (*)(",` (*${f})(`);{let p;return G(u.type)&&qe(u.type)?u.type.resolvedConcreteType?p=q(u.type.resolvedConcreteType,n)+"*":p=q(u.type,n):p=q(u.type,n),`${p} ${f}`}});a.push(...s);let l=a.join(", ");return`${i} ${t}(${l})`}function Vc(e,t,n,r,i){var l,u,c,f;let o;if(i&&qe(e.return.type)){let p=aa(i);(l=p==null?void 0:p.$)!=null&&l.asyncStateMachineStructName?o=`${p.$.asyncStateMachineStructName}*`:(u=i.$)!=null&&u.type&&G(i.$.type)&&qe(i.$.type)&&(o=q(i.$.type,r))}if(i&&G(e.return.type)&&!qe(e.return.type)&&(c=i.$)!=null&&c.type&&(o=q(i.$.type,r)),!o&&i&&((f=i.$)!=null&&f.type)&&!qe(e.return.type)){let p=q(e.return.type,r),_=q(i.$.type,r);p!==_&&(o=_)}let a=o?Oi(e,t,r,o):Oi(e,t,r),s=S(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function cy(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(Ae(r)&&r.isReferenceSemantics){if(r.fields.some(l=>je(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=q(l.type,e),c=me(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`${i}* ${a}(${s}); // Constructor`)}}}function fy(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 Mc(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Vi(r)||!o||!jn(r.type)||jn(o))continue;let a=o.parameters.some(l=>je(l.type)),s=je(o.return.type);a||s||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${Oi(o,i,e)}; // specialized function: ${S(r.type)}`))}}function Oc(e){var r;let t=e.emitter,n=new Set;for(let[,i]of e.dynImpls){let o=((r=e.types[i.dynType.id])==null?void 0:r.cName)||`yo_dyn_${i.dynType.id}`;n.has(o)||(n.add(o),t.emitLine(`${o} __yo_dup_${o}(${o} 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_${o}(${o} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function Rc(e){var r,i,o;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let l=`yo_dyn_box_${((r=e.types[a.concreteType.id])==null?void 0:r.cName)||`unknown_${a.concreteType.id}`}`;if(n.has(l))continue;n.add(l);let u=q(a.concreteType,e);t.emitLine(`${l}* __yo_new_${l}(${u} value) {`),t.emitLine(` ${l}* box = (${l}*)__yo_malloc(sizeof(${l}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${l};`),t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_dispose_${l}(void* ptr) {`),t.emitLine(` ${l}* box = (${l}*)ptr;`);let f=(i=(G(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(p=>p.label===L.___drop[0]);if(f&&f.assignedValue&&be(f.assignedValue)){let p=(o=e.functions[f.assignedValue.funcId])==null?void 0:o.cName;p&&t.emitLine(` ${p}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function Pc(e){var n,r,i,o;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([L.___dup[0],L.___drop[0],L.___dispose[0],L.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!Jt(c))continue;let f=c.isFn.callType,p=q(f.return.type,e),_=`yo_wrap_${a}_call`,d=["void* self_ptr"];for(let y=0;y<f.parameters.length;y++){let g=f.parameters[y],h=q(g.type,e);d.push(`${h} arg${y+1}`)}if(t.emitDeclarationLine(`static ${p} ${_}(${d.join(", ")}) {`),Zn(l)){let y=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,g=me(l.fields[0].label);t.emitDeclarationLine(` ${y}* box = (${y}*)self_ptr;`);let h=l.fields[0].type,v=G(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,E=e.implClosureCallMap.get(v.id),k=(()=>{var F;if(E)return E.functionCName;for(let[,$]of Object.entries(e.functions)){let I=$.value.closureInfo;if(((F=I==null?void 0:I.captureType)==null?void 0:F.id)===v.id)return $.cName}})(),b=[];if(k){b.push(`(void*)&box->${g}`);for(let F=0;F<f.parameters.length;F++)b.push(`arg${F+1}`);Or(f.return.type)?t.emitDeclarationLine(` ${k}(${b.join(", ")});`):t.emitDeclarationLine(` return ${k}(${b.join(", ")});`)}else{b.push(`box->${g}.data`);for(let F=0;F<f.parameters.length;F++)b.push(`arg${F+1}`);Or(f.return.type)?t.emitDeclarationLine(` box->${g}.call(${b.join(", ")});`):t.emitDeclarationLine(` return box->${g}.call(${b.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let y=0;y<f.parameters.length;y++)t.emitDeclarationLine(` (void)arg${y+1};`);Or(f.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${p} zero = (${p})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:f}=s.dynType.requiredTraits[c];if(Jt(f))continue;let p=s.traitValues[c];if(!p){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let d=p.type.fields;for(let y=0;y<d.length;y++){let g=d[y];if(g.label==="Self"||u.has(g.label))continue;let h=p.fields[y];if(!h||!be(h)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function value */`);continue}let v=g.type;if(!ae(v)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function type */`);continue}let E=h.funcId,k=(r=e.functions[E])==null?void 0:r.cName;if(!k){t.emitDeclarationLine(`/* Warning: Impl function for ${g.label} not found */`);continue}let b=`yo_wrap_${a}_${g.label}`,F=q(v.return.type,e),$=["void* self_ptr"];for(let x=1;x<v.parameters.length;x++){let D=v.parameters[x],P=q(D.type,e);$.push(`${P} arg${x}`)}t.emitDeclarationLine(`static ${F} ${b}(${$.join(", ")}) {`);let C=(i=v.parameters[0])==null?void 0:i.type,I;if(Zn(l)){let x=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,D=me(l.fields[0].label);t.emitDeclarationLine(` ${x}* box = (${x}*)self_ptr;`),C&&Xe(C)?I=`&box->${D}`:I=`box->${D}`}else{let x=q(s.concreteType,e);t.emitDeclarationLine(` ${x} concrete_value = (${x})self_ptr;`),C&&Xe(C)?I="&concrete_value":I="concrete_value"}let N=[I];for(let x=1;x<v.parameters.length;x++)N.push(`arg${x}`);Or(v.return.type)?t.emitDeclarationLine(` ${k}(${N.join(", ")});`):t.emitDeclarationLine(` return ${k}(${N.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function Uc(e){var n,r;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[i,o]of e.dynImpls){let a=((n=e.types[o.dynType.id])==null?void 0:n.cName)||`yo_dyn_${o.dynType.id}`,s=((r=e.types[o.concreteType.id])==null?void 0:r.cName)||`unknown_${o.concreteType.id}`,l=`yo_vtable_${i}`,u=`${a}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${o.dynType.requiredTraits.map(({traitType:p})=>p.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`);let c=new Set,f=new Set([L.___dup[0],L.___drop[0],L.___dispose[0],L.dispose[0]]);for(let{traitType:p}of o.dynType.requiredTraits){if(Jt(p)){let _=`yo_wrap_${i}_call`;t.emitDeclarationLine(` .call = ${_},`),c.add("call");continue}for(let _ of p.fields)if(_.label!=="Self"&&!f.has(_.label)&&!c.has(_.label)&&(c.add(_.label),ae(_.type))){let d=_.type;if(d.parameters.length>0){let y=d.parameters[0];if(y&&y.label==="self"){let g=`yo_wrap_${i}_${_.label}`;t.emitDeclarationLine(` .${me(_.label)} = ${g},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function Ja(e,t,n,r=!1,i){let o=ae(n)?n:void 0,s=Ga(e,{detect(u,c,f){var _,d,y;if(u.tag!=="FnCall")return;if(zc(u,t,i,!0)){let g=[];for(let v of u.args)(_=v.$)!=null&&_.type&&g.push(v.$.type);if(g.length===0&&o)for(let v of o.parameters)v.isCompileTimeOnly||g.push(v.type);let h=((d=u.$)==null?void 0:d.type)??(o==null?void 0:o.return.type);if(g.length>0&&h){let v=ta(c);f.push({index:f.length,expr:u,operationArgTypes:g,operationResultType:h,targetVariableId:v})}}if(r&&!zc(u,t,i)){let g=_y(u,t);if(g){let h=n,v=h.parameters.filter(k=>!k.isCompileTimeOnly).map(k=>k.type),E=g.viaClosure?h.return.type:(y=u.$)==null?void 0:y.type;if(v.length>0&&E){let k=ta(c);f.push({index:f.length,expr:u,operationArgTypes:v,operationResultType:E,targetVariableId:k,isTransitiveEffectCall:!0,isTransitiveClosureCall:g.viaClosure})}}}},shouldSkipBody(u){return vn(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 zc(e,t,n,r=!1){var l,u;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 c=(l=i.$)==null?void 0:l.type;return!(!r&&(!c||!ae(c))||r&&c&&!ae(c))}let o=[],a=i;for(;a.tag==="FnCall"&&T(a,".")&&a.args.length>=2;){let c=a.args[1];if(!c||c.tag!=="Atom")return!1;o.unshift(c.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let c=0;c<o.length;c++)if(o[c]!==n[c])return!1;let s=(u=i.$)==null?void 0:u.type;return!(!r&&(!s||!ae(s))||r&&s&&!ae(s))}function _y(e,t){var i,o,a;if(e.tag!=="FnCall")return;let n=(i=e.func.$)==null?void 0:i.type;if(!n)return;if(ae(n)){if(!n.implicitParameters)return;for(let s of n.implicitParameters){if(s.label===t&&(ae(s.type)||Ye(s.type)))return{matched:!0,viaClosure:!1};if(s.isEffectRowSpread&&Bc(s,t,(o=e.func.$)==null?void 0:o.env))return{matched:!0,viaClosure:!1}}return}let r=In(n);if(r){let s=r.isFn.callType;if(s.implicitParameters)for(let l of s.implicitParameters){if(l.label===t&&(ae(l.type)||Ye(l.type)))return{matched:!0,viaClosure:!0};if(l.isEffectRowSpread&&Bc(l,t,(a=e.func.$)==null?void 0:a.env))return{matched:!0,viaClosure:!0}}}}function Bc(e,t,n){var o,a;if(!n)return!1;let r=e.type,i;if(G(r)&&r.isEffectsRow){let l=(a=(o=pe(n,e.label).at(-1))==null?void 0:o.value)==null?void 0:a[0];if(l&&H(l)&&Gt(l.value))i=l.value;else{let u=gn(n,r);Gt(u)&&(i=u)}}else Gt(r)&&(i=r);if(i){for(let s of i.implicitParameters)if(s.label===t&&(ae(s.type)||Ye(s.type)))return!0}return!1}function Gc(e){e.emitLine(`
|
|
186
|
+
registered type IDs: ${Object.keys(t.types).filter(p=>p.startsWith("sometype")).join(", ")}`)}return wn(u)&&u.resolvedConcreteType||u.resolvedConcreteType?H(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Et(c)){let _=H(c.childType,t),d=`Slice_${me(_)}`;return t.sliceStructTypes.has(d)||t.sliceStructTypes.set(d,{childType:_}),`${d}*`}let f=H(c,t);return qt(c)?`${f}*`:Me(c)&&Nn(c)?`${f}*`:`${f}*`}case"Iso":{let u=e,c=u.childType,f=H(c,t),p=f.replace(/\*/g,"").trim(),_=`Iso_${me(p)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(_)||t.isoTypes.set(_,{childTypeCName:f,isoType:u}),_}case"Arc":{let u=e,c=u.childType,f=H(c,t),p=f.replace(/\*/g,"").trim(),_=`Arc_${me(p)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(_)||t.arcTypes.set(_,{childTypeCName:f,arcType:u}),_}}return`// Unknown type: ${S(e)}`}function Dt(e,t,n){let r=me(t);return`${H(e,n)} ${r}`}function Yn(e,t,n){var i;let r=(i=n.types[e.id])==null?void 0:i.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${S(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Vi(e){return e.type.return.isCompileTimeOnly}function go(e){let t=e.body,n=null;return I(t)&&T(t,"begin")&&t.args.length===1&&I(t.args[0])&&T(t.args[0],Si)?n=t.args[0].func.token.value:I(t)&&T(t,Si)&&(n=t.func.token.value),n&&L.__yo_as.includes(n)?null:n}function Nn(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(Xe(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function or(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Re(e,t){if(!t)return me(e);let n=pe(t,e);if(n.length>0){let r=n[n.length-1];return me(r.name,r.type.isExtern==="c")}return me(e)}function Za(e){if(I(e)&&e.args.length>=1){let t=e.args[0];if(t&&Y(t))return t.token.value}if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===L.___dup[0])return e.func.args[0].token.value}function Hr(e){if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===L.___drop[0]&&Y(e.func.args[0]))return e.func.args[0].token.value;if(!I(e)||!T(e,L.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!Y(t)))return t.token.value}function aa(e){if(e){if(vn(e))return e;if(I(e)){let t=e;for(let n of t.args){let r=aa(n);if(r)return r}}}}var Al;function Tc(e){Al=e}function R(e,t,n){if(!Al)throw new Error("Internal Error: generateExpr function is not set.");return Al(e,t,n)}function ar(e,t,n){let r=G(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Be(r))return"";if(We(r)){let i=r.length;if(!ft(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=ar(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(qe(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=G(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Be(s)){let l=ar(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(et(r))return`__yo_decr_rc((void*)(${e}).data)`;if(qt(r))return`__yo_decr_rc((void*)(${e}))`;if(on(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(rn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Ie(r)||Me(r)){let i=li(r,n);if(i)return`${i}(${e})`}return""}function si(e,t,n){let r=G(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(We(r)){let i=r.length;if(!ft(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${yt("")}`,a=`i_${yt("")}`,s=H(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=si(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(qe(r)){let i=n.emitter,o=`temp_dup_tuple_${yt("")}`,a=H(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=G(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Be(u)){let c=si(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(et(r))return`((${H(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(qt(r))return`((${H(r,n)})__yo_incr_rc((void*)(${e})))`;if(on(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(rn(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Ie(r)||Me(r)){let i=pr(r,n);if(i)return`${i}(${e})`}return e}function li(e,t){var n;if(Ie(e)||Me(e)||et(e)||G(e)||on(e)||rn(e)){let r=e.trait.fields.find(i=>i.label===L.___drop[0]);if(r&&r.assignedValue&&be(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function pr(e,t){var n;if(Ie(e)||Me(e)||et(e)||G(e)||on(e)||rn(e)){let r=e.trait.fields.find(i=>i.label===L.___dup[0]);if(r&&r.assignedValue&&be(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Qt(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){let a=R(o,t,n);a&&r.emitLine(`${t}${a};`)}}function Ft(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(I(o)){let a=R(o,t,n);a&&r.emitLine(`${t}${a};`)}}}function Fn(e,t,n){var r,i,o,a,s,l,u,c;if(ft(e)){let f=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(f.includes(".")?f:f+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?f.includes(".")?f:f+".0":e.tag==="U64"||e.tag==="Usize"?f+"ULL":e.tag==="I64"||e.tag==="Isize"?f+"LL":e.tag==="U32"?f+"U":f}else{if(_t(e))return e.value?"true":"false";if(Tt(e)){let f=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(f&&Ho(f)&&f.fields.length===1){let p=f.fields[0].type;if(Et(p)){let _=H(f,t),d=JSON.stringify(e.value),y=Buffer.byteLength(e.value,"utf8");return`(${_}){ .data = (uint8_t*)${d}, .length = ${y} }`}}if(f&&Et(f)){let p=H(f,t),_=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${_}, .length = ${d} }`}return JSON.stringify(e.value)}else if(_n(e)){let f=e.type;if(Nn(f)){let g=f.variants.find(h=>h.name===e.variantName);if(!g)return`// Error: Variant ${e.variantName} not found in enum`;if(!g.fields||g.fields.length===0)return"NULL";if(g.fields.length===1&&e.fields.length===1)return Fn(e.fields[0],t)}if(or(f))return Yn(f,e.variantName,t);let d=(o=t.types[f.id])==null?void 0:o.cName;if(!d)return`// Error: No C type name found for enum ${S(f)}`;let y=Yn(f,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${d}){ .tag = ${y} }`;{let g=f.variants.find(v=>v.name===e.variantName);if(!g||!g.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((v,E)=>{let k=g.fields[E];if(k&&!xe(k.type)){let b=me(k.label),F=Fn(v,t);return`.${b} = ${F}`}return null}).filter(v=>v!==null);return h.length===0?`(${d}){ .tag = ${y} }`:`(${d}){ .tag = ${y}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(zn(e)){let f=e.type,p=(a=t.types[f.id])==null?void 0:a.cName;if(!p)return`// Error: No C type name found for tuple ${S(f)}
|
|
187
|
+
`;let _=e.fields.map((d,y)=>{let g=Fn(d,t);return`._${y} = ${g}`});return`(${p}){ ${_.join(", ")} }`}else if(qn(e)){let f=e.type;if(f&&Ie(f)){let p=(s=t.types[f.id])==null?void 0:s.cName;if(!p)return`// Error: No C type name found for struct ${S(f)}
|
|
188
|
+
`;if(f.isNewtype&&f.fields.length===1&&e.fields.length===1){let _=Fn(e.fields[0],t);return`((${p})(${_}))`}if(f.isReferenceSemantics){let _=e.fields.map(y=>Fn(y,t));return`${`__yo_new_${p}`}(${_.join(", ")})`}else{let _=e.fields.map((d,y)=>{let g=d,h=qe(f)?`_${y}`:me(f.fields[y].label),v=Fn(g,t);return`.${h} = ${v}`});return`(${p}){ ${_.join(", ")} }`}}}else if(lr(e)){let f=e.type,p=H(f,t),_=e.elements.map(d=>Fn(d,t));return`(${p}){ .data = { ${_.join(", ")} } }`}else if(be(e)){let f=(l=t.functions[e.funcId])==null?void 0:l.cName;return f||`// Error: No C function name found for function value with ID ${e.funcId}
|
|
189
|
+
`}else if(q(e)){let f=e.value;if(f)return t.types[f.id]?t.types[f.id].cName:`/* Error: No C type name found for type ${S(f)} */`}else if(Yi(e)){let f=e.targetValue[0];if(f){let p=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(p&&Xe(p)){let _=p.childType,d=Fn(f,t,{$:{type:_,convertedRuntimeType:_}});if(d&&!d.startsWith("/*")&&!d.startsWith("//"))return`(&${d})`}}return`/* Error: Cannot generate pointer value ${tt(e)} */`}}return`/* skip generating: ${tt(e)} */`}function ui(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(ui(e.func,t,n))return!0;for(let r of e.args)if(ui(r,t,n))return!0}return!1}function ty(e,t,n){for(let r=0;r<t.length;r++)if(ui(e,t[r].expr,n))return r;return-1}function Ja(e,t,n){let r=[],i=n==null?void 0: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=ty(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(Xt(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let f=u+1;f<t.length&&ui(l,t[f].expr,i);f++)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 Ec(e,t){let r=Ja(e,t,{shouldSkipBody:vn,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 ny(e,t){return ui(e,t,vn)}function $c(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&&ny(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,V.while)||T(a,V.cond)||T(a,V.match))&&Vn(a);if((l||u)&&e.awaitPoint)Eo(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=R(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=R(a,t,n);!c||!a.$||wt(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Eo(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&Hn(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=R(l,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&T(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FnCall"&&Hn(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let f=(a=l.token)==null?void 0:a.value;if(!f||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let p=R(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${f})`),o.emitLine(`${r}sm->await_future_${t.index} = ${p};`)}else o.emitLine(`${r}// Store Future for await (variable: ${f}) - future already in state machine`);return}if(u.tag==="FnCall"&&T(u,V.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,p=pe(l.$.env,f);p.length>0&&(c=p[p.length-1].id)}sa(u,t,r,i,c);return}if(u.tag==="FnCall"&&T(u,V.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,p=pe(l.$.env,f);p.length>0&&(c=p[p.length-1].id)}la(u,t,r,i,c);return}}if(e.tag==="FnCall"&&T(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&T(u,V.cond)){let c=R(l,r,i);sa(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&T(u,V.match)){let c=R(l,r,i);la(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&T(e,V.cond)){sa(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,V.match)){la(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,V.while)){Nl(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"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function sa(e,t,n,r,i,o){var g,h,v,E,k,b,F,$,C,A,N,x,D,P,U,j;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,V.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 O=0;O<s.length;O++){let z=s[O];if(z.tag==="FnCall"&&T(z,"=>")){let W=z.args[0];if(W&&!(_t((g=W.$)==null?void 0:g.value)&&W.$.value.value===!1)){u=O;break}}}let c=!1;if(u>=0){let O=s[u];if(O.tag==="FnCall"&&T(O,"=>")){let z=O.args[0];z&&_t((h=z.$)==null?void 0:h.value)&&z.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let O=s[u],z=I(O)?O.args[1]:void 0;if(z)if(ci(z)){let se=To(z,t,n,r),K=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(K&&se.length>0){let te=(E=r.asyncCondBranchInfo)==null?void 0:E.get(t.index),re=(te==null?void 0:te.branches.some(we=>we.hasAwait&&we.remainingExprs&&we.remainingExprs.length>0))??!1;K.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:se,deferredDropExpressions:(k=z.$)==null?void 0:k.deferredDropExpressions,skipCondBranchCheck:re},l.push({index:u,value:z,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(b=z.$)==null?void 0:b.deferredDropExpressions})}else l.push({index:u,value:z,hasAwait:!0,remainingExprs:se,deferredDropExpressions:(F=z.$)==null?void 0:F.deferredDropExpressions})}else{if(ho(e,z,r,i,o))vo(z,n,r);else if(I(z)&&T(z,V.begin)){let se=z.args;for(let K=0;K<se.length;K++){let te=se[K],re=R(te,n,r);if(re==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let we=re==="break"||re==="continue"||(re==null?void 0:re.includes("return"));re&&(we||te.$&&!wt(te.$.env.modulePath,re))&&a.emitLine(`${n}${re};`)}}if(($=z.$)!=null&&$.deferredDropExpressions)for(let K of z.$.deferredDropExpressions){let te=R(K,n,r);te&&a.emitLine(`${n}${te};`)}}else{let se=R(z,n,r);if(se==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let K=se==="break"||se==="continue"||(se==null?void 0:se.includes("return"));se&&(K||z.$&&!wt(z.$.env.modulePath,se))&&a.emitLine(`${n}${se};`)}}l.push({index:u,value:z,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let W=r.asyncCondBranchInfo.get(t.index);((W==null?void 0:W.branches.some(de=>de.hasAwait&&de.remainingExprs&&de.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let f=!1,p=0,_=n;for(let O=0;O<s.length;O++){let z=s[O];if(z.tag!=="FnCall"||!T(z,"=>")){a.emitLine(`${_}// Error: Expected => pair in cond`);continue}let W=z.args[0],ee=z.args[1];if(!W||!ee){a.emitLine(`${_}// Error: Invalid pair in cond`);continue}if(_t((C=W.$)==null?void 0:C.value)&&W.$.value.value===!1)continue;f&&(a.emitLine(`${_}else {`),p++,_+=" ");let de=O===s.length-1&&W.tag==="Atom"&&((A=W.token)==null?void 0:A.value)==="true"?null:R(W,_,r);de?a.emitLine(`${_}if (${de}) {`):a.emitLine(`${_}{`),f=!0;let se=`${_} `;if(ci(ee)){a.emitLine(`${se}sm->cond_branch_${t.index} = ${O};`);let te=To(ee,t,se,r),re=(N=r.asyncWhileLoopInfo)==null?void 0:N.get(t.index);if(re&&te.length>0){let we=(x=r.asyncCondBranchInfo)==null?void 0:x.get(t.index),ce=(we==null?void 0:we.branches.some(Q=>Q.hasAwait&&Q.remainingExprs&&Q.remainingExprs.length>0))??!1;re.condBranchPostWhileExprs={branchIndex:O,condBranchFieldIndex:t.index,exprs:te,deferredDropExpressions:(D=ee.$)==null?void 0:D.deferredDropExpressions,skipCondBranchCheck:ce},l.push({index:O,value:ee,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(P=ee.$)==null?void 0:P.deferredDropExpressions})}else l.push({index:O,value:ee,hasAwait:!0,remainingExprs:te,deferredDropExpressions:(U=ee.$)==null?void 0:U.deferredDropExpressions})}else{if(ho(e,ee,r,i,o))vo(ee,se,r);else if(I(ee)&&T(ee,V.begin)){let te=ee.args;for(let re=0;re<te.length;re++){let we=te[re],ce=R(we,se,r);if(ce==="break"&&t.isInsideWhile)a.emitLine(`${se}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${se}goto while_loop_${t.index}_end;`);else{let Q=ce==="break"||ce==="continue"||(ce==null?void 0:ce.includes("return"));ce&&(Q||we.$&&!wt(we.$.env.modulePath,ce))&&a.emitLine(`${se}${ce};`)}}if((j=ee.$)!=null&&j.deferredDropExpressions)for(let re of ee.$.deferredDropExpressions){let we=R(re,se,r);we&&a.emitLine(`${se}${we};`)}}else{let te=R(ee,se,r);if(te==="break"&&t.isInsideWhile)a.emitLine(`${se}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${se}goto while_loop_${t.index}_end;`);else{let re=te==="break"||te==="continue"||(te==null?void 0:te.includes("return"));te&&(re||ee.$&&!wt(ee.$.env.modulePath,te))&&a.emitLine(`${se}${te};`)}}l.push({index:O,value:ee,hasAwait:!1})}a.emitLine(`${_}}`)}for(let O=0;O<p;O++)_=_.slice(0,-2),a.emitLine(`${_}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let d=r.asyncCondBranchInfo.get(t.index);((d==null?void 0:d.branches.some(O=>O.hasAwait&&O.remainingExprs&&O.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function ho(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!Cc(t)}function vo(e,t,n){var o,a;let r=n.emitter,i=xe((o=e.$)==null?void 0:o.type);if(I(e)&&T(e,V.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],f=R(c,t,n);f&&c.$&&!wt(c.$.env.modulePath,f)&&r.emitLine(`${t}${f};`)}let l=s[s.length-1];if(l&&!i){let u=R(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=R(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=R(e,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let s of n.pendingDeferredDrops){let l=R(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}qr({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function ci(e){if(e.tag==="FnCall"&&Hn(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(ci(t))return!0}return!1}function Cc(e){if(Xt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Cc(t))return!0}return!1}function la(e,t,n,r,i,o){var d,y,g,h,v,E;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,V.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=R(s,n,r),c=(d=s.$)==null?void 0:d.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((y=e.$)!=null&&y.isPrimitiveMatch){iy(e,l,u,t,n,r,i,o);return}if(!Me(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let f=c,p=(g=r.types[f.id])==null?void 0:g.cName;if(!p){a.emitLine(`${n}// Error: enum type has no C name`);return}let _=Nn(f);if(_){let k=-1,b=-1,F;for(let $=0;$<l.length;$++){let C=l[$];if(I(C)&&T(C,"=>",2)){let A=C.args[0];if(A&&I(A)&&T(A,"."))k=$;else if(A&&I(A)){let N=A.func;N&&I(N)&&T(N,".")&&(b=$,A.args.length>0&&Y(A.args[0])&&(F=A.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),b>=0){let $=l[b];if(!I($))a.emitLine(`${n} // Error: Expected => in case`);else{let C=$.args[1];if(F){let A=r,N=!1,x;if(A.stateMachineVariables){for(let[D,P]of A.stateMachineVariables)if(P.name===F){N=!0,x=D;break}}N&&x?a.emitLine(`${n} sm->var_${x} = ${u};`):a.emitLine(`${n} ${H(_,r)} ${F} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),ci(C)){let A=To(C,t,n+" ",r);if(A.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:b,value:C,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(h=C.$)==null?void 0:h.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(ho(e,C,r,i,o))vo(C,n+" ",r);else{let A=R(C,n+" ",r);if(i){let N=me(`var_${i}`);A&&a.emitLine(`${n} sm->${N} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&C.$&&!wt(C.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}if(a.emitLine(`${n}} else {`),k>=0){let $=l[k];if(!I($))a.emitLine(`${n} // Error: Expected => in case`);else{let C=$.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${k};`),ci(C)){let A=To(C,t,n+" ",r);if(A.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:k,value:C,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(v=C.$)==null?void 0:v.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(ho(e,C,r,i,o))vo(C,n+" ",r);else{let A=R(C,n+" ",r);if(i){let N=me(`var_${i}`);A&&a.emitLine(`${n} sm->${N} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&C.$&&!wt(C.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let k=!1;for(let b=0;b<l.length;b++){let F=l[b];if(!I(F)||!T(F,"=>",2))continue;let $=F.args[0],C=F.args[1],A=Y($)&&$.token.value==="_",N;if(!A){if(I($)&&T($,".",1))N=$.args[0].token.value;else if(I($)){let x=$.func;x&&I(x)&&T(x,".",1)&&(N=x.args[0].token.value)}}if(!A&&!N){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(A)k=!0,a.emitLine(`${n} default: {`);else{let x=`${p.toUpperCase()}_${N.toUpperCase()}`;a.emitLine(`${n} case ${x}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),I($)&&$.args.length>=1){let x=$.func;if(x&&I(x)&&T(x,".")){let D=f.variants.find(P=>P.name===N);if(D&&D.fields)for(let P=0;P<Math.min($.args.length,D.fields.length);P++){let U=$.args[P],j=D.fields[P];if(Y(U)&&j){let O=U.token.value,z=me(O),W=r,ee=!1,de;if(W.stateMachineVariables){for(let[te,re]of W.stateMachineVariables)if(re.name===O){ee=!0,de=te;break}}let se=me(j.label,j.type.isExtern==="c"),K=`${u}.data.${N}.${se}`;if(ee&&de)a.emitLine(`${n} sm->var_${de} = ${K};`);else{let te=H(j.type,r);a.emitLine(`${n} ${te} ${z} = ${K};`)}}}}}if(ci(C)){let x=To(C,t,n+" ",r);if(x.length>0){let D=r;D.asyncCondBranchInfo||(D.asyncCondBranchInfo=new Map);let P=D.asyncCondBranchInfo.get(t.index)||{branches:[]};P.branches.push({index:b,value:C,hasAwait:!0,remainingExprs:x,deferredDropExpressions:(E=C.$)==null?void 0:E.deferredDropExpressions}),D.asyncCondBranchInfo.set(t.index,P)}}else if(ho(e,C,r,i,o))vo(C,n+" ",r);else{let x=R(C,n+" ",r);if(i){let D=me(`var_${i}`);x&&a.emitLine(`${n} sm->${D} = ${x};`)}else o?x&&a.emitLine(`${n} ${o} = ${x};`):x&&C.$&&!wt(C.$.env.modulePath,x)&&a.emitLine(`${n} ${x};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}k||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function ry(e){return I(e)?T(e,"|",2):!1}function Il(e){if(!ry(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Il(t),...Il(n)]}function iy(e,t,n,r,i,o,a,s){var c,f,p;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let _=0;_<t.length;_++){let d=t[_];if(!I(d)||!T(d,"=>",2))continue;let y=d.args[0],g=d.args[1];if(Xt(y,"_"))l.emitLine(`${i} default:`);else{let h=(c=y.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let v of h)if(v!==void 0){let E=Fn(v,o);l.emitLine(`${i} case ${E}:`)}}else{let v=Il(y);for(let E of v){let k=(f=E.$)==null?void 0:f.value;if(k!==void 0){let b=Fn(k,o);l.emitLine(`${i} case ${b}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${_};`),ci(g)){let h=To(g,r,i+" ",o);u.push({index:_,value:g,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(p=g.$)==null?void 0:p.deferredDropExpressions})}else{if(ho(e,g,o,a,s))vo(g,i+" ",o);else{let h=R(g,i+" ",o);if(a){let v=me(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&g.$&&!wt(g.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:_,value:g,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 To(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(ci(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&Hn(u)){let c=u.args[0];if(c){let f=R(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${f};`)}}}else if(l.tag==="FnCall"&&Hn(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=R(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,V.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),sa(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,V.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),la(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&T(l,V.while)&&Nl(l,t,n,r);else{let u=R(l,n,r);u&&l.$&&!wt(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Nl(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=ay(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=R(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 f=oy(s,t,n,r,u);if(i.emitLine(`${n}while_loop_${u}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),l){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:u,conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:f})}function oy(e,t,n,r,i){var _;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let d=0;d<s.length;d++){let y=s[d];if(Vn(y)){l=d;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,f=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...((_=e.$)==null?void 0:_.deferredDropExpressions)??[]];for(let d=0;d<l;d++){let y=s[d],g=R(y,n,r);g&&y.$&&!wt(y.$.env.modulePath,g)&&o.emitLine(`${n}${g};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=f;let p=s[l];if(I(p)&&T(p,V.while)&&Vn(p)){Nl(p,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}if(I(p)&&T(p,":=")){let d=p.args[1];if(d&&d.tag==="FnCall"&&Hn(d)){let y=d.args[0];if(y){let g=R(y,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(p.tag==="FnCall"&&Hn(p)){let d=p.args[0];if(d&&t.futureVariableId===void 0){let y=R(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${y};`)}}else if(I(p)&&T(p,V.cond)){sa(p,t,n,r,void 0);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}else if(I(p)&&T(p,V.match)){la(p,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}function ay(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,V.while)&&Vn(n))return!0;return!1}function Sl(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 ua(e){return!e||!G(e)?!1:e.resolvedConcreteType&&G(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>$a(t.traitType))}function es(e,t){return t==="outer"?`__capture.${me(e)}`:me(`var_${e}`)}function bc(e,t,n,r,i,o,a,s){var y,g,h,v,E,k,b,F,$,C,A,N,x,D,P,U,j,O,z,W,ee,de,se,K,te,re,we;let l=s.emitter,c=cn(o).isFuture.outputType,f=xe(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let p=Ec(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 ce=0;ce<p.length;ce++){let Q=p[ce];if(!Q)continue;let Pe=Q.stateNumber,ut=ce===p.length-1;if(l.emitLine(`
|
|
190
|
+
state_${Pe}:`),l.emitLine(` case ${Pe}: { // State ${Pe}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${Pe}\\n");`),Pe>0&&i.awaitPoints[Pe-1]){let B=i.awaitPoints[Pe-1],ne=Sl(B,i);B.isInsideCond&&l.emitLine(` if (sm->${ne} != NULL) {`);let ve=xe(B.resultType)||G(B.resultType)&&!B.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${ne}->state == -2) {`),l.emitLine(' fprintf(stderr, "panic: attempted to await an aborted Future\\n");'),l.emitLine(" abort();"),l.emitLine(" }"),B&&!ve){if(l.emitLine(` // Extract result from await ${Pe-1}`),l.emitLine(` int state_before_read = sm->${ne}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${Pe-1}, state=%d\\n", state_before_read);`),Be(B.resultType)){let Ae=pr(B.resultType,s);Ae?l.emitLine(` sm->await_result_${Pe-1} = ${Ae}(sm->${ne}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${Pe-1} = sm->${ne}->result;`))}else l.emitLine(` sm->await_result_${Pe-1} = sm->${ne}->result;`);if(B.targetVariableId){let Ae=es(B.targetVariableId,"local");l.emitLine(` sm->${Ae} = sm->await_result_${Pe-1};`)}l.emitLine("")}if(!B.futureVariableId){let Ae=B.expr;if(Ae.tag==="FnCall"){let Fe=Ae.args[0],ze=(y=Fe==null?void 0:Fe.$)==null?void 0:y.type;ze&&(G(ze)||et(ze))&&(l.emitLine(` if (sm->${ne} != NULL) { __yo_decr_rc((void*)sm->${ne}); sm->${ne} = NULL; }`),l.emitLine(""))}}let Te=s;if(B){let Ae=(g=Te.asyncCondBranchInfo)==null?void 0:g.get(B.index);if(Ae&&Ae.branches.some(ze=>ze.hasAwait)){let ze=Ae.condBranchFieldIndex??B.index,bt=ze===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),bt||l.emitLine(` switch (sm->cond_branch_${ze}) {`);let Kt=((h=Q.awaitPoint)==null?void 0:h.isInsideCond)??!1;for(let kt of Ae.branches)if(kt.hasAwait){if(bt||l.emitLine(` case ${kt.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${kt.index}\\n");`),kt.remainingExprs&&kt.remainingExprs.length>0){let vt=s.inAsyncStateMachine,mn=s.stateMachineVariables,Le=s.variableIdRemapping,ot=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let lt=(v=Te.asyncWhileLoopInfo)==null?void 0:v.get(B.index);s.pendingDeferredDrops=[...kt.deferredDropExpressions??[],...((E=lt==null?void 0:lt.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...((k=e.$)==null?void 0:k.deferredDropExpressions)??[]];let Ue=new Map;for(let fe of i.capturedVariables)Ue.set(fe.id,fe);if(a)for(let fe of a.fields)Ue.set(fe.label,{id:fe.label,name:fe.label,type:fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ue;let Ee=!1,X=[],oe=Ae.targetAssignmentCode;for(let fe=0;fe<kt.remainingExprs.length;fe++){let Z=kt.remainingExprs[fe],he=fe===kt.remainingExprs.length-1;if(Ee){X.push(Z);continue}if(Kt&&Vn(Z)){Ee=!0,xl(Z,Q.awaitPoint,i," ",s);continue}let J=R(Z," ",s);!J||!Z.$||wt(Z.$.env.modulePath,J)||(he&&oe?l.emitLine(` ${oe} = ${J};`):l.emitLine(` ${J};`))}if(kt.remainingExprs.length===0&&oe&&l.emitLine(` ${oe} = sm->await_result_${B.index};`),Ee&&Q.awaitPoint){let fe=Q.awaitPoint.index;Te.asyncCondBranchInfo||(Te.asyncCondBranchInfo=new Map);let Z=Te.asyncCondBranchInfo.get(fe);if(Z)Z.chainedBranches||(Z.chainedBranches=[]),Z.chainedBranches.push({branches:[{index:kt.index,value:kt.value,hasAwait:X.length>0||X.some(he=>Vn(he)),remainingExprs:X,deferredDropExpressions:kt.deferredDropExpressions}],condBranchFieldIndex:ze});else{let he={branches:[{index:kt.index,value:kt.value,hasAwait:X.length>0||X.some(J=>Vn(J)),remainingExprs:X,deferredDropExpressions:kt.deferredDropExpressions}],condBranchFieldIndex:ze};Te.asyncCondBranchInfo.set(fe,he)}}else if(kt.deferredDropExpressions)for(let fe of kt.deferredDropExpressions){let Z=R(fe," ",s);Z&&Z.includes("sm->")&&l.emitLine(` ${Z};`)}s.inAsyncStateMachine=vt,s.stateMachineVariables=mn,s.variableIdRemapping=Le,s.pendingDeferredDrops=ot}bt||(l.emitLine(" break;"),l.emitLine(" }"))}if(bt||l.emitLine(" }"),Ae.chainedBranches){for(let kt of Ae.chainedBranches)for(let vt of kt.branches)if(vt.hasAwait&&vt.remainingExprs&&vt.remainingExprs.length>0){let mn=s.inAsyncStateMachine,Le=s.stateMachineVariables,ot=s.variableIdRemapping,lt=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ue=(b=Te.asyncWhileLoopInfo)==null?void 0:b.get(B.index);s.pendingDeferredDrops=[...vt.deferredDropExpressions??[],...((F=Ue==null?void 0:Ue.bodyExpr.$)==null?void 0:F.deferredDropExpressions)??[],...(($=e.$)==null?void 0:$.deferredDropExpressions)??[]];let Ee=new Map;for(let Z of i.capturedVariables)Ee.set(Z.id,Z);if(a)for(let Z of a.fields)Ee.set(Z.label,{id:Z.label,name:Z.label,type:Z.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ee;let X=((C=Q.awaitPoint)==null?void 0:C.isInsideCond)??!1,oe=!1,fe=[];for(let Z of vt.remainingExprs){if(oe){fe.push(Z);continue}if(X&&Vn(Z)){oe=!0,xl(Z,Q.awaitPoint,i," ",s);continue}let he=R(Z," ",s);!he||!Z.$||wt(Z.$.env.modulePath,he)||l.emitLine(` ${he};`)}if(oe&&Q.awaitPoint){let Z=Q.awaitPoint.index;Te.asyncCondBranchInfo||(Te.asyncCondBranchInfo=new Map);let he=Te.asyncCondBranchInfo.get(Z);he?(he.chainedBranches||(he.chainedBranches=[]),he.chainedBranches.push({branches:[{index:vt.index,value:vt.value,hasAwait:fe.length>0||fe.some(J=>Vn(J)),remainingExprs:fe,deferredDropExpressions:vt.deferredDropExpressions}],condBranchFieldIndex:kt.condBranchFieldIndex})):Te.asyncCondBranchInfo.set(Z,{branches:[{index:vt.index,value:vt.value,hasAwait:fe.length>0||fe.some(J=>Vn(J)),remainingExprs:fe,deferredDropExpressions:vt.deferredDropExpressions}],condBranchFieldIndex:kt.condBranchFieldIndex})}else if(vt.deferredDropExpressions)for(let Z of vt.deferredDropExpressions){let he=R(Z," ",s);he&&he.includes("sm->")&&l.emitLine(` ${he};`)}s.inAsyncStateMachine=mn,s.stateMachineVariables=Le,s.variableIdRemapping=ot,s.pendingDeferredDrops=lt}}if(Ae.targetVariableId){let kt=es(Ae.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${kt} = sm->await_result_${B.index};`)}l.emitLine("")}B.isInsideCond&&l.emitLine(" }");let Fe=(A=Te.asyncWhileLoopInfo)==null?void 0:A.get(B.index);if(Fe){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${B.index}_active) {`),Fe.bodyExprsAfterAwait&&Fe.bodyExprsAfterAwait.length>0){let Le=s.inAsyncStateMachine,ot=s.stateMachineVariables,lt=s.variableIdRemapping,Ue=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((N=Fe.bodyExpr.$)==null?void 0:N.deferredDropExpressions)??[],...((x=e.$)==null?void 0:x.deferredDropExpressions)??[]];let Ee=new Map;for(let Z of i.capturedVariables)Ee.set(Z.id,Z);if(a)for(let Z of a.fields)Ee.set(Z.label,{id:Z.label,name:Z.label,type:Z.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ee;let X=s.smWhileBreakInfo,oe=s.smWhileContinueInfo,fe=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${B.index}`,activeIndex:B.index},s.smWhileContinueInfo={label:`while_loop_${B.index}_continue`},s.smWhileBodyDrops=[...((D=Fe.bodyExpr.$)==null?void 0:D.deferredDropExpressions)??[]];for(let Z of Fe.bodyExprsAfterAwait){let he=R(Z," ",s);!he||!Z.$||wt(Z.$.env.modulePath,he)||l.emitLine(` ${he};`)}s.smWhileBreakInfo=X,s.smWhileContinueInfo=oe,s.smWhileBodyDrops=fe,s.inAsyncStateMachine=Le,s.stateMachineVariables=ot,s.variableIdRemapping=lt,s.pendingDeferredDrops=Ue}l.emitLine(` while_loop_${B.index}_continue:`);{let Le=((P=Fe.bodyExpr.$)==null?void 0:P.deferredDropExpressions)??[];if(Le.length>0){let ot=s.inAsyncStateMachine,lt=s.stateMachineVariables,Ue=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ee=new Map;for(let X of i.capturedVariables)Ee.set(X.id,X);if(a)for(let X of a.fields)Ee.set(X.label,{id:X.label,name:X.label,type:X.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Ee;for(let X of Le){let oe=R(X," ",s);oe&&oe.includes("sm->")&&l.emitLine(` ${oe};`)}s.inAsyncStateMachine=ot,s.stateMachineVariables=lt,s.variableIdRemapping=Ue}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let ze=s.inAsyncStateMachine,bt=s.stateMachineVariables,Kt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let kt=new Map;for(let Le of i.capturedVariables)kt.set(Le.id,Le);if(a)for(let Le of a.fields)kt.set(Le.label,{id:Le.label,name:Le.label,type:Le.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=kt;let vt=R(Fe.conditionExpr," ",s);s.inAsyncStateMachine=ze,s.stateMachineVariables=bt,s.variableIdRemapping=Kt,l.emitLine(` if (!(${vt})) {`),l.emitLine(` sm->while_loop_${B.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 mn=B.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${mn};`),l.emitLine(` goto while_loop_${mn}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${B.index}:`),Fe.condBranchPostWhileExprs){let Le=Fe.condBranchPostWhileExprs,ot=Le.condBranchFieldIndex,lt=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_${ot} == ${lt}) {`));let Ue=s.inAsyncStateMachine,Ee=s.stateMachineVariables,X=s.variableIdRemapping,oe=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((U=e.$)==null?void 0:U.deferredDropExpressions)??[]];let fe=new Map;for(let Ne of i.capturedVariables)fe.set(Ne.id,Ne);if(a)for(let Ne of a.fields)fe.set(Ne.label,{id:Ne.label,name:Ne.label,type:Ne.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=fe;let Z=Q.awaitPoint!=null,he=!1,J=[];for(let Ne=0;Ne<Le.exprs.length;Ne++){let ge=Le.exprs[Ne];if(he){J.push(ge);continue}if(Z&&Vn(ge)){he=!0,xl(ge,Q.awaitPoint,i," ",s);continue}let Ke=R(ge," ",s);!Ke||!ge.$||wt(ge.$.env.modulePath,Ke)||l.emitLine(` ${Ke};`)}if(he&&Q.awaitPoint){let Ne=Q.awaitPoint.index;Te.asyncCondBranchInfo||(Te.asyncCondBranchInfo=new Map);let ge=Le.skipCondBranchCheck?-1:Le.condBranchFieldIndex,Ke=Te.asyncCondBranchInfo.get(Ne);Ke?(Ke.chainedBranches||(Ke.chainedBranches=[]),Ke.chainedBranches.push({branches:[{index:Le.branchIndex,value:Le.exprs[0],hasAwait:J.length>0||J.some(Qe=>Vn(Qe)),remainingExprs:J,deferredDropExpressions:Le.deferredDropExpressions}],condBranchFieldIndex:ge})):Te.asyncCondBranchInfo.set(Ne,{branches:[{index:Le.branchIndex,value:Le.exprs[0],hasAwait:J.length>0||J.some(Qe=>Vn(Qe)),remainingExprs:J,deferredDropExpressions:Le.deferredDropExpressions}],condBranchFieldIndex:ge})}if(!he&&Le.deferredDropExpressions)for(let Ne of Le.deferredDropExpressions){let ge=R(Ne," ",s);ge&&ge.includes("sm->")&&l.emitLine(` ${ge};`)}l.emitLine(" }"),s.inAsyncStateMachine=Ue,s.stateMachineVariables=Ee,s.variableIdRemapping=X,s.pendingDeferredDrops=oe}if(Fe.outerWhileLoop){let Le=Fe.outerWhileLoop,ot=Le.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${ot}_active) {`),Le.bodyExprsAfterAwait.length>0){let lt=s.inAsyncStateMachine,Ue=s.stateMachineVariables,Ee=s.variableIdRemapping,X=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((j=Le.bodyExpr.$)==null?void 0:j.deferredDropExpressions)??[],...((O=e.$)==null?void 0:O.deferredDropExpressions)??[]];let oe=new Map;for(let J of i.capturedVariables)oe.set(J.id,J);if(a)for(let J of a.fields)oe.set(J.label,{id:J.label,name:J.label,type:J.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;let fe=s.smWhileBreakInfo,Z=s.smWhileContinueInfo,he=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${ot}`,activeIndex:ot},s.smWhileContinueInfo={label:`while_loop_${ot}_continue`},s.smWhileBodyDrops=[...((z=Le.bodyExpr.$)==null?void 0:z.deferredDropExpressions)??[]];for(let J of Le.bodyExprsAfterAwait){let Ne=R(J," ",s);!Ne||!J.$||wt(J.$.env.modulePath,Ne)||l.emitLine(` ${Ne};`)}s.smWhileBreakInfo=fe,s.smWhileContinueInfo=Z,s.smWhileBodyDrops=he,s.inAsyncStateMachine=lt,s.stateMachineVariables=Ue,s.variableIdRemapping=Ee,s.pendingDeferredDrops=X}l.emitLine(` while_loop_${ot}_continue:`);{let lt=((W=Le.bodyExpr.$)==null?void 0:W.deferredDropExpressions)??[];if(lt.length>0){let Ue=s.inAsyncStateMachine,Ee=s.stateMachineVariables,X=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let oe=new Map;for(let fe of i.capturedVariables)oe.set(fe.id,fe);if(a)for(let fe of a.fields)oe.set(fe.label,{id:fe.label,name:fe.label,type:fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;for(let fe of lt){let Z=R(fe," ",s);Z&&Z.includes("sm->")&&l.emitLine(` ${Z};`)}s.inAsyncStateMachine=Ue,s.stateMachineVariables=Ee,s.variableIdRemapping=X}}{let lt=s.inAsyncStateMachine,Ue=s.stateMachineVariables,Ee=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let X=new Map;for(let fe of i.capturedVariables)X.set(fe.id,fe);if(a)for(let fe of a.fields)X.set(fe.label,{id:fe.label,name:fe.label,type:fe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=X;let oe=R(Le.conditionExpr," ",s);s.inAsyncStateMachine=lt,s.stateMachineVariables=Ue,s.variableIdRemapping=Ee,l.emitLine(` if (!(${oe})) {`),l.emitLine(` sm->while_loop_${ot}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${B.index};`),l.emitLine(` goto while_loop_${ot}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${ot}:`)}}}}let at=s.inAsyncStateMachine,_e=s.stateMachineVariables,Ce=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let $e=new Map;for(let B of i.capturedVariables)$e.set(B.id,B);if(a)for(let B of a.fields)$e.set(B.label,{id:B.label,name:B.label,type:B.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=$e;let Ge=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((ee=e.$)==null?void 0:ee.deferredDropExpressions)??[]];let rt=ut&&!f&&Q.expressions.length>0,ct=Q.expressions.length>0?Q.expressions[Q.expressions.length-1]:void 0,jt=s.asyncBodyReturnExpr;if(!f&&ct&&d&&ct===d&&Q.awaitPoint?s.asyncBodyReturnExpr=ct:s.asyncBodyReturnExpr=void 0,$c(Q," ",s,rt),s.asyncBodyReturnExpr=jt,s.pendingDeferredDrops=Ge,l.emitLine(""),Q.awaitPoint){s.inAsyncStateMachine=at,s.stateMachineVariables=_e,s.variableIdRemapping=Ce;let B=Pe+1;{let ne=Sl(Q.awaitPoint,i),Te=(de=Q.awaitPoint.expr.args)==null?void 0:de[0],Ae=ua((se=Te==null?void 0:Te.$)==null?void 0:se.type),Fe=(K=Q.awaitPoint)==null?void 0:K.isInsideCond;Fe&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${ne} != NULL) {`));let ze=(te=Q.awaitPoint)==null?void 0:te.isInsideWhile,bt=ze?(re=s.asyncWhileLoopInfo)==null?void 0:re.get(Q.awaitPoint.index):void 0;if(ze&&bt){let Kt=Q.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${Kt}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${B};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${ne}->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(""),Ae?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->${ne}); // event loop reference`)),Ae||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),ly(Q.awaitPoint.expr,`sm->${ne}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${ne}->__yo_resume_fn((void*)sm->${ne});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${ne}->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->${ne}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${ne}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),ze&&bt){let Kt=Q.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${Kt};`),l.emitLine(" }")}Fe&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${B};`),l.emitLine(` goto state_${B};`),l.emitLine(" }"))}}else if(ut){if(!Q.expressions.some(ne=>kc(ne))){if((we=e.$)!=null&&we.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let ne of e.$.deferredDropExpressions){let ve=R(ne," ",s);ve&&l.emitLine(` ${ve};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),qr({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=at,s.stateMachineVariables=_e,s.variableIdRemapping=Ce}else s.inAsyncStateMachine=at,s.stateMachineVariables=_e,s.variableIdRemapping=Ce;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function xl(e,t,n,r,i){let o=i.emitter,a=Sl(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&Hn(s)){let l=s.args[0];if(l){let u=R(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"&&Hn(e)){let s=e.args[0];if(s){let l=R(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,V.cond)){Eo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,V.match)){Eo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,V.while)){Eo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,V.begin)){Eo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function kc(e){if(Xt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(kc(t))return!0}return!1}function sy(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;G(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Gt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function ly(e,t,n,r){var c,f,p,_;let i=(c=e.args)==null?void 0:c[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=(p=e.args)==null?void 0:p.find(d=>I(d)&&T(d,V.using));if(!o)return;let a=cn(i.$.type);if(!((_=a==null?void 0:a.isFuture.effects)!=null&&_.length))return;let s=sy(a.isFuture.effects),l=o.args,u=r.emitter;for(let d=0;d<s.length&&d<l.length;d++){let y=s[d],g=l[d];if(!ae(y.type)||y.type.forallParameters.length>0)continue;let h=R(g,n,r),v=y.label;u.emitLine(`${n}${t}->__capture.${v} = (void*)${h};`)}}function Mr(e,t,n){let r=pe(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function wc(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&wn(e.$.type))}function uy(e,t,n,r,i,o=!1){var _;let a=Object.values(i.types).find(d=>d.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.$)!=null&&_.deferredDupExpressions)for(let d of n.$.deferredDupExpressions){let y=Za(d);y&&l.set(y,d)}let u=e.fields.map(d=>{var v,E;if(d.isEffectParam)return"NULL";let y,g=d.exprs.expr;if((E=(v=g.$)==null?void 0:v.deferredDupExpressions)!=null&&E.length&&(y=g.$.deferredDupExpressions[0]),!y){let k=[d.label];Y(g)&&k.push(g.token.value);for(let b of k){let F=l.get(b);if(F){y=F;break}}}if(y)return R(y,r,i);let h={tag:"Atom",token:g.token,$:g.$};return R(h,r,i)}),c=`(${s}){ ${u.map((d,y)=>{let g=e.fields[y];return g?`.${g.label} = ${d}`:`/* Error: missing field at index ${y} */`}).join(", ")} }`,f=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=`__capture_${t}_${f}`;return o?i.emitter.emitLine(`${r}${s} ${p} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${p} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${p} = ${c};`)),{captureTempVar:p,captureCName:s}}function Fc(e,t,n){var d;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=In(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=(d=n.functions[o.funcId])==null?void 0:d.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=et(e.$.type),u;if(l){let y=n.types[e.$.type.id];if(!y)return"// Error: Dyn closure type not found in context";u=y.cName}let c=a&&Ie(a)&&a.fields.length>0,f=H(i.return.type,n),p=i.parameters.map(y=>H(y.type,n)).join(", "),_=`(${f} (*)(void*${p?", "+p:""}))${s}`;if(c&&a&&Ie(a)){let y=!l,g=uy(a,i.id,e,t,n,y);if(!g)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=g;if(l){let v=`__yo_create_${u}`,E=`__yo_dispose_${u}`;return`${v}(${h}, ${E}, ${_})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let y=`__yo_create_${u}`,g=`__yo_dispose_${u}`;return`${y}(NULL, ${g}, ${_})`}else{if(e.$.type.tag==="SomeType"){let y=e.$.type;if(y.resolvedConcreteType)return n.implClosureCallMap.set(y.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${H(y.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function Vl(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=R(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function $o(e,t,n=""){var a,s,l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$,C,A,N,x,D,P,U,j,O;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return Vl(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return Vl(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let z=t.emitter;for(let W of r.smWhileBodyDrops){let ee=R(W,n,t);ee&&ee.includes("sm->")&&z.emitLine(`${n}${ee};`)}}if(r.smWhileContinueInfo.stepExpr){let z=t.emitter,W=R(r.smWhileContinueInfo.stepExpr,n,t);W&&z.emitLine(`${n}${W};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return Vl(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:z,activeIndex:W}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let ee=t.emitter;for(let de of r.smWhileBodyDrops){let se=R(de,n,t);se&&se.includes("sm->")&&ee.emitLine(`${n}${se};`)}}return W!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${W}_active = false;`),`goto ${z}`):`goto ${z}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let z=t.emitter,W=r.inAsyncStateMachine.futureType,de=cn(W).isFuture.outputType,se=xe(de);if((a=e.$)!=null&&a.deferredDropExpressions)for(let te of e.$.deferredDropExpressions){let re=R(te,n,t);re&&re.includes("sm->")&&z.emitLine(`${n}${re};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){z.emitLine(`${n}// Drop local variables before early completion`);for(let te of r.pendingDeferredDrops){let re=R(te,n,t);re&&re.includes("sm->")&&z.emitLine(`${n}${re};`)}}z.emitLine(`${n}// Early return - complete the result Future`);let K=se?void 0:`(${H(de,t)}){0}`;return qr({emitter:z,indent:n,resultCode:K,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&xe(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let z=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(z))return me(z);let W=!1;if((u=e.$)!=null&&u.env){let ee=pe(e.$.env,z);if(ee.length>0){let de=ee[ee.length-1],se=de.isOwningTheSameRcValueAs?de.isOwningTheSameRcValueAs.id:de.id;(c=r.variableIdRemapping)!=null&&c.has(se)&&(se=r.variableIdRemapping.get(se));let K=r.stateMachineVariables.get(se);if(K){let te=K.kind==="outer"?`__capture.${z}`:`var_${K.id}`;return W=!0,`sm->${te}`}}}if(!W){for(let[ee,de]of r.stateMachineVariables)if(de.name===z){let se=de.kind==="outer"?`__capture.${z}`:`var_${ee}`;return W=!0,`sm->${se}`}}if((f=e.$)!=null&&f.env){let ee=pe(e.$.env,z);if(ee.length>0){let de=ee[ee.length-1];if(de.isOwningTheSameRcValueAs){let se=de.isOwningTheSameRcValueAs.name,K=de.isOwningTheSameRcValueAs.id;for(let[te,re]of r.stateMachineVariables)if(re.name===se||te===K)return`sm->${re.kind==="outer"?`__capture.${se}`:`var_${te}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(z)&&r.currentClosureCaptureFrameLevel!==void 0){let ee=r.currentClosureCaptureTypeCName;return ee?`((${ee}*)closure_context)->${Re(z,(p=e.$)==null?void 0:p.env)}`:`closure_context->${Re(z,(_=e.$)==null?void 0:_.env)}`}if((d=e.$)!=null&&d.variableName){if((y=e.$)!=null&&y.env&&((g=e.$)!=null&&g.value)&&!Ve(e.$.value)){let ee=pe(e.$.env,e.$.variableName);if(ee.length>0&&ee[ee.length-1].isCompileTimeOnly)return Fn(e.$.value,t,e)}return Re(e.$.variableName,e.$.env)}}if((h=e.$)!=null&&h.variableName){if((v=e.$)!=null&&v.env&&((E=e.$)!=null&&E.value)&&!Ve(e.$.value)){let z=pe(e.$.env,e.$.variableName);if(z.length>0&&z[z.length-1].isCompileTimeOnly)return Fn(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((k=e.$)!=null&&k.env)&&r.currentClosureCaptureFrameLevel!==void 0&&Mr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Re(e.$.variableName,(b=e.$)==null?void 0:b.env)}if((F=e.$)!=null&&F.value&&!Ve(e.$.value))return Fn(e.$.value,t,e);let i=($=e.$)!=null&&$.env&&r.currentClosureCaptureFrameLevel!==void 0?Mr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((C=e.$)!=null&&C.env)||i)){let z=r.currentClosureCaptureTypeCName;return z?`((${z}*)closure_context)->${Re(e.token.value,(A=e.$)==null?void 0:A.env)}`:`closure_context->${Re(e.token.value,(N=e.$)==null?void 0:N.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let z=Object.values(r.functions).find(W=>W.cName===r.currentFunctionName);if(z&&z.value.type.isClosure){let W=Object.values(r.types).find(ee=>ae(ee.type)&&ee.type.isClosure&&ee.type===z.value.type);if(W)return`((${`${W.cName}_capture`}*)closure_context->data)->${Re(e.token.value,(x=e.$)==null?void 0:x.env)}`}}if((D=e.$)!=null&&D.env){let z=pe(e.$.env,e.token.value);if(z.length>0){let W=z[z.length-1];if((P=W.value)!=null&&P[0]&&be(W.value[0])){let ee=(U=t.functions[W.value[0].funcId])==null?void 0:U.cName;if(ee)return ee}else if(ae(W.type)&&(Ve((j=W.value)==null?void 0:j[0])||W.value===void 0)){let ee=Object.entries(t.functions).find(([de,se])=>se.value.funcName===e.token.value);if(ee)return ee[1].cName}}}return Re(e.token.value,(O=e.$)==null?void 0:O.env)}function Lc(e,t,n){var g,h,v,E,k,b,F,$,C,A,N,x,D;let r;if(vn(e)){let P=(h=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder)==null?void 0:h[0],U=(v=P==null?void 0:P.$)==null?void 0:v.closureFunctionValue;U&&be(U)&&(r=U.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=(E=e.$)==null?void 0:E.type;if(!i||!He(i))return"/* Error: async block must have Future type */";let o=cn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=((k=e.$)==null?void 0:k.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 f=(b=e.$)==null?void 0:b.awaitAnalysis;if(!f)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let p=o.isFuture.outputType,_=H(p,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(""),(F=e.$)!=null&&F.captureType){let P=e.$.captureType,U=Object.values(n.types).find(O=>O.type===P),j=U?U.cName:`async_capture_${P.id}`;d.emitDeclarationLine(`${s}* ${u}(${j} __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:p,resultTypeCName:_,captureType:($=e.$)==null?void 0:$.captureType,analysis:f});let y=(C=e.$)==null?void 0:C.captureType;if(y){let P=Object.values(n.types).find(K=>K.type===y),U=P?P.cName:`async_capture_${y.id}`,j=n,O=j.currentClosureCaptures!==void 0||j.inAsyncStateMachine!==void 0||j.inEffectStateMachine!==void 0,z=!1,W=y.fields.map(K=>{var we,ce;if(K.isEffectParam)return`.${K.label} = NULL`;let te;if(!O&&((we=e.$)!=null&&we.deferredDupExpressions))for(let Q of e.$.deferredDupExpressions){let Pe;if(I(Q)&&(Q.args.length>0&&Y(Q.args[0])?Pe=Q.args[0].token.value:Q.args.length===0&&I(Q.func)&&T(Q.func,".")&&Q.func.args.length>=2&&Y(Q.func.args[0])&&(Pe=Q.func.args[0].token.value)),Pe===K.label){te=Q;break}}if(te)return z=!0,(ce=te.$)!=null&&ce.variableName?(R(te,t,n),`.${K.label} = ${te.$.variableName}`):`.${K.label} = ${R(te,t,n)}`;let re={tag:"Atom",token:K.exprs.expr.token,$:K.exprs.expr.$};return`.${K.label} = ${$o(re,n)}`}).join(", "),ee=`(${U}){${W}}`;if(!z){let K=pr(y,n);K&&(ee=`${K}(${ee})`)}let de=((A=e.$)==null?void 0:A.variableName)||"async_result",se=`${u}(${ee})`;if(de&&((N=e.$)!=null&&N.type)){let K=Dt(e.$.type,de,n);return n.emitter.emitLine(`${t}${K} = ${se};`),de}else return se}else{let P=((x=e.$)==null?void 0:x.variableName)||"async_result",U=`${u}()`;if(P&&((D=e.$)!=null&&D.type)){let j=Dt(e.$.type,P,n);return n.emitter.emitLine(`${t}${j} = ${U};`),P}else return U}}function Ac(e,t){var p;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(${S(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)"),xe(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${S(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 _=Object.values(t.types).find(y=>y.type===s),d=_?_.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${d} __capture;`),n.emitDeclarationLine("")}let u=l.capturedVariables.filter(_=>_.kind!=="outer");if(u.length>0){n.emitDeclarationLine(" // Local variables");for(let _ of u){let d=H(_.type,t),y=es(_.id,"local");n.emitDeclarationLine(` ${d} ${y}; // ${_.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let _ of l.awaitPoints)if(!(xe(_.resultType)||G(_.resultType)&&!_.resultType.resolvedConcreteType)){let y=_.resultType;if(_.futureType){let h=cn(_.futureType);h&&(y=h.isFuture.outputType)}let g=H(y,t);n.emitDeclarationLine(` ${g} await_result_${_.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let _=l.awaitPoints.filter(d=>d.futureVariableId===void 0);if(_.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let d of _){let y=d.expr;if(y.tag!=="FnCall")continue;let g=y.args[0],h=(p=g==null?void 0:g.$)==null?void 0:p.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let v=H(h,t);n.emitDeclarationLine(` ${v} await_future_${d.index};`)}n.emitDeclarationLine("")}}let c=l.awaitPoints.filter(_=>_.needsOwnCondBranchField);if(c.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let _ of c)n.emitDeclarationLine(` int cond_branch_${_.index}; // Which branch was taken in cond with await ${_.index}`);n.emitDeclarationLine("")}let f=l.awaitPoints.filter(_=>_.isInsideWhile);if(f.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let _=l.awaitPoints.length;for(let d of f){n.emitDeclarationLine(` _Bool while_loop_${d.index}_active; // Whether while loop ${d.index} should continue`);let y=(d.whileNestingDepth??1)-1;for(let g=0;g<y;g++)n.emitDeclarationLine(` _Bool while_loop_${_}_active; // Whether outer while loop ${_} should continue`),_++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function cy(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=f=>{let p=r.get(f);p.has(u.structName)||(p.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let f of u.analysis.capturedVariables){let p;try{p=H(f.type,e)}catch{continue}let _=n.get(p);_&&_.structName!==u.structName&&c(_.structName)}for(let f of u.analysis.awaitPoints){if(f.futureVariableId!==void 0)continue;let p=f.expr;if(p.tag!=="FnCall")continue;let _=p.args[0],d=(l=_==null?void 0:_.$)==null?void 0:l.type;if(!d)continue;let y;try{y=H(d,e)}catch{continue}let g=n.get(y);g&&g.structName!==u.structName&&c(g.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let f of c){let p=(i.get(f)??0)-1;i.set(f,p),p===0&&o.push(f)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)Ac({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function fy(e,t,n,r,i,o,a){var l;let s=a.emitter;if(s.emitLine(`// Dispose function for async block ${e} state machine`),s.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),s.emitLine(`void ${n}(void* sm_ptr) {`),s.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),s.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),s.emitLine(""),i&&Be(i)){let u=Object.values(a.types).find(c=>c.type===i);if(!u)s.emitLine(" /* Error: capture struct type not found in context */");else{let c=u.cName,f=i.trait.fields.find(p=>p.label===L.___drop[0]);if(f&&f.assignedValue&&be(f.assignedValue)){let p=(l=a.functions[f.assignedValue.funcId])==null?void 0:l.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 ${c} */`)}}if(s.emitLine(""),!xe(r)&&Be(r)){let u=H(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 c=li(r,a);c?s.emitLine(` ${c}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${u} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function _y(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let f=Object.values(u.types).find(_=>_.type===l),p=f?f.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${p} __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)"),xe(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 Ic(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;cy(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:f,resultType:p,resultTypeCName:_,captureType:d,analysis:y}=r;if(fy(a,s,c,p,d,y,e),t.emitLine(""),bc(o,a,s,l,y,f,d,e),t.emitLine(""),_y(a,s,l,u,c,f,p,_,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let g=e.deferredAsyncBlocks.slice(i);for(let h of g)Ac({asyncBlockId:h.asyncBlockId,structName:h.structName,resultType:h.resultType,resultTypeCName:h.resultTypeCName,captureType:h.captureType,analysis:h.analysis},e)}n++}}function Nc(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&xc(n.body,e)}}function xc(e,t){var n,r,i,o,a;if(e&&I(e)){let s=e;if(vn(e)){let l=(n=e.$)==null?void 0:n.type;if(l&&He(l)&&cn(l)){let f=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=f),t.types[l.id]={type:l,cName:f},t.emitter.emitDeclarationLine(`typedef struct ${f}_struct ${f}; // Forward declaration for async state machine`)}}if(vn(e)){let l=(i=e.$)==null?void 0:i.type;if(l&&He(l)&&cn(l)){let c=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,f=!!((a=e.$)!=null&&a.awaitAnalysis),p=f?`${c}_state_t`:`${c}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[l.id]={type:l,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for io.async ${f?"state machine":"sync future"}`)}}for(let l of s.args)xc(l,t)}}function Sc(e,t,n){var $,C,A,N,x;let r=($=e.$)==null?void 0:$.type;if(!r||!He(r))return"/* Error: io.async must return a Future type */";let i=cn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType,a=H(o,n),s=(C=e.$)==null?void 0:C.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,f=(N=(A=e.$)==null?void 0:A.runtimeArgExprsInOrder)==null?void 0:N[0];if(!(f!=null&&f.$))return"/* Error: Missing closure argument for io.async */";let p=R(f,t,n),_=f.$.type,d,y;if(G(_)&&_.resolvedConcreteType){let D=_.resolvedConcreteType,P=n.implClosureCallMap.get(D.id);P&&(d=P.functionCName);let U=n.types[D.id];U&&(y=U.cName)}if(!d||!y)return"/* Error: no closure function or capture type for io.async sync path */";let g;for(let D in n.functions){let P=n.functions[D];if(P.cName===d&&P.effectStateMachineInfo){g=P.effectStateMachineInfo;break}}if(c.emitDeclarationLine(`struct ${s}_struct {`),c.emitDeclarationLine(" yo_ref_header_t header;"),c.emitDeclarationLine(" int state;"),xe(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(` ${y} __capture;`),g&&c.emitDeclarationLine(` ${g.structName} __effect_sm;`),c.emitDeclarationLine("};"),c.emitDeclarationLine(""),g){c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),c.emitDeclarationLine(" sm->__effect_sm.closure_context = &sm->__capture;"),c.emitDeclarationLine(` ${g.resumeFunctionName}(&sm->__effect_sm);`),c.emitDeclarationLine(" if (sm->__effect_sm.completed) {"),xe(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 D=g.analysis;for(let P of D.effectCallPoints){for(let U=0;U<P.operationArgTypes.length;U++){let j=P.operationArgTypes[U];if(Be(j)){let O=ar(`sm->__effect_sm.yield_${U}`,j,n);O&&c.emitDeclarationLine(` ${O};`)}}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;`),xe(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 h=f.$.captureType,v=h&&Be(h)?li(h,n):void 0,E=h&&Be(h)?pr(h,n):void 0,k=li(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||k)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),k&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${k}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let b=((x=e.$)==null?void 0:x.variableName)||"__io_async_result",F=Dt(r,b,n);return c.emitLine(`${t}${F} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${b}, 0, sizeof(${s}));`),c.emitLine(`${t}${b}->header.ref_count = 1;`),c.emitLine(`${t}${b}->header.gc_flags = 0;`),c.emitLine(`${t}${b}->header.gc_mark = YO_GC_UNMARKED;`),c.emitLine(`${t}${b}->header.gc_next = NULL;`),c.emitLine(`${t}${b}->header.gc_prev = NULL;`),c.emitLine(`${t}${b}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${b}->header.traverse_fn = NULL;`),c.emitLine(`${t}${b}->__capture = ${p};`),E&&c.emitLine(`${t}${b}->__capture = ${E}(${b}->__capture);`),c.emitLine(`${t}${b}->state = 0;`),c.emitLine(`${t}${b}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${b}->continuation_fn = NULL;`),c.emitLine(`${t}${b}->continuation_sm = NULL;`),b}function Vc(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];be(o)&&(Yr(o.type,t),Di(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(Yr(o.value.type,t),o.value.specializedType&&Yr(o.value.specializedType,t),Di(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&fn(a.value.type,t),Di(a.body,t)}}}function Yr(e,t){for(let n of e.parameters)fn(n.type,t);for(let n of e.forallParameters)fn(n.type,t);fn(e.return.type,t)}function Di(e,t){var n;if(e.$&&e.$.type&&fn(e.$.type,t),e.$&&e.$.value&&be(e.$.value)){let r=e.$.value;r.isControlFunction?(Yr(r.type,t),Dn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>G(a)&&He(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:me(r.funcId)},Yr(r.type,t),Dn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Di(r,t);if(e.$&&e.$.macroExpansion&&Di(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)fn(r,t);if(e.$&&e.$.captureType&&Ie(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`yo_${r.id}`};for(let i of r.fields)fn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&be(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},Yr(o.type,t),Dn(o.body,t))}}}switch(e.tag){case"FnCall":if(T(e,V.test))break;Di(e.func,t);for(let r of e.args)Di(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&q(e.$.value)&&fn(e.$.value.value,t);break}}function fn(e,t){if(!t.types[e.id]){if(G(e)&&wn(e)){if(e.resolvedConcreteType){fn(e.resolvedConcreteType,t);return}let n=In(e);n&&fn(n,t);return}if(G(e)&&He(e)){let n=cn(e);n&&fn(n.isFuture.outputType,t);return}if(G(e)&&e.resolvedConcreteType){fn(e.resolvedConcreteType,t);return}if(!Ye(e)){if(Ie(e)||Rt(e)||Me(e)||qe(e)||et(e)||je(e)||Je(e)||Et(e)||on(e)||rn(e)){let n=Et(e)?H(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Ie(e))for(let r of e.fields)fn(r.type,t);if(Me(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)fn(i.type,t)}if(Rt(e))for(let r of e.fields)fn(r.type,t);if(et(e)){let r=e;for(let i of r.requiredTraits)fn(i.traitType,t)}if(on(e)){let r=e;fn(r.childType,t),H(r,t)}if(rn(e)){let r=e;fn(r.childType,t),H(r,t)}if(Et(e)&&fn(e.childType,t),je(e)||Je(e)){for(let r of e.fields)fn(r.type,t);for(let r of e.fields)if(r.assignedValue&&be(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:me(i.funcId)},Yr(i.type,t),Dn(i.body,t))}else if(r.assignedValue&&(Bt(r.assignedValue)||Wt(r.assignedValue))){let i=r.assignedValue;ca(i,t)}}}else if(We(e)){let n=e,r=n.childType,i=n.length;if(ft(i)){fn(r,t);let o=H(r,t),a=`Array_${me(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(Xe(e)){if(fn(e.childType,t),Et(e.childType)){let r=e.childType.childType;fn(r,t);let i=H(r,t),o=`Slice_${me(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:H(e,t)}}else vc.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.trait&&fn(e.trait,t)}}}function Mi(e){var t,n,r;if(e.$&&e.$.value&&Ve(e.$.value)&&!(ae(e.$.type)&&e.$.type.isExtern)){if(!xe(e.$.type))return!0}if(I(e)){if(Mi(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&xe(i.$.type))&&Mi(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&xe(e.$.type))return!1;if(Mi(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(Mi(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(Mi(i))return!0}return!1}function ca(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];be(r)&&(i.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:me(r.funcId)},Dn(r.body,t))}}function Dn(e,t){var i,o,a,s,l,u,c,f,p,_;if(I(e)&&T(e,V.test)||I(e)&&T(e,L.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Dn(e.$.macroExpansion,t),(i=e.$)!=null&&i.effectAnalysis){let d=e.$.effectAnalysis.handlerValue;d&&be(d)&&Dn(d.body,t)}if(e.$&&e.$.closureFunctionValue){let d=e.$.closureFunctionValue;t.functions[d.funcId]||(t.functions[d.funcId]={value:d,cName:me(d.funcId)},Dn(d.body,t))}if(I(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let d=e.$.type,y=e.args[0];if(et(d)&&y&&((o=y.$)!=null&&o.type)){let g=y.$.type,h=e.$.dynCallTraitValues;if(h.length>0&&(qt(g)||Zn(g))){let v=Zn(g)?g.fields[0].type:g,E=`${v.id}_${d.id}`;t.dynImpls.set(E,{dynType:d,concreteType:v,dataType:g,traitValues:h})}}}if(I(e)){let d=(a=e.func.$)==null?void 0:a.type,y=(s=e.func.$)==null?void 0:s.value;if(e.func.token.value==="?=")return;if(ae(d)){if(be(y)&&y.isControlFunction){Dn(y.body,t);for(let g of e.args)Dn(g,t);return}if(be(y)){if(y.type.return.isCompileTimeOnly||ws(y)&&!y.specializedType||y.specializedType&&jn(y.specializedType))return;if(!t.functions[y.funcId]){let g=!1;if(Mi(y.body)&&(g=!Hi(y.type)&&y.type.implicitParameters.length>0,!g)||!g&&y.type.parameters.map(E=>E.type).some(E=>G(E)&&He(E)&&!E.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:me(y.funcId)},Dn(y.body,t)}}else if(d.isExtern==="c"){let g=d.externName?d.externName:Y(e.func)?e.func.token.value:d.id;t.externFunctions[d.id]={type:d,cName:g}}}Dn(e.func,t);for(let g of e.args)Dn(g,t)}let n=(l=e.$)==null?void 0:l.type,r=(u=e.$)==null?void 0:u.value;if(ae(n)){if(be(r)&&r.isControlFunction){Dn(r.body,t);return}if(be(r)){if(ws(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(Mi(r.body))return;t.functions[r.funcId]={value:r,cName:me(r.funcId)},Dn(r.body,t)}}if(q((c=e.$)==null?void 0:c.value)&&fn(e.$.value.value,t),(f=e.$)!=null&&f.deferredDupExpressions)for(let d of e.$.deferredDupExpressions)Dn(d,t);if((p=e.$)!=null&&p.deferredDropExpressions)for(let d of e.$.deferredDropExpressions)Dn(d,t);if((_=e.$)!=null&&_.dynCallTraitValues)for(let d of e.$.dynCallTraitValues)ca(d,t)}function Dc(e){let t=L.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Ie(r)||!r.isReferenceSemantics)continue;let i=Vr({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&be(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:me(a.funcId)},Yr(a.type,e),Dn(a.body,e)}}}function Oc(e){var n,r,i,o,a;let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let s in e.externFunctions){let{cName:l,type:u}=e.externFunctions[s];u.isExtern!=="yo"&&(u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||Mc(u,l,!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"),py(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),dy(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",f=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,p=f&&f.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!p&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&[...u.type.implicitParameters,...u.type.parameters.filter(v=>v.isImplicit)].some(v=>ae(v.type))||!c&&!p&&(Hi(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Vi(u)||go(u)||u.isIoAsyncStateMachineClosure))continue;let d=u.specializedType??u.type,y=!p&&(d.parameters.some(v=>Ye(v.type))||d.forallParameters.length>0),g=Ye(d.return.type),h=G(d.return.type)&&d.return.type.requiredTraits.length>0;y||g&&!h||Mc(d,l,!1,e,u.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function Oi(e,t,n,r){let i=r||H(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 f=me(u.label||`param${c}`);if(ae(u.type))return Oi(u.type,"(*)",n).replace(" (*)(",` (*${f})(`);{let p;return G(u.type)&&He(u.type)?u.type.resolvedConcreteType?p=H(u.type.resolvedConcreteType,n)+"*":p=H(u.type,n):p=H(u.type,n),`${p} ${f}`}});a.push(...s);let l=a.join(", ");return`${i} ${t}(${l})`}function Mc(e,t,n,r,i){var l,u,c,f;let o;if(i&&He(e.return.type)){let p=aa(i);(l=p==null?void 0:p.$)!=null&&l.asyncStateMachineStructName?o=`${p.$.asyncStateMachineStructName}*`:(u=i.$)!=null&&u.type&&G(i.$.type)&&He(i.$.type)&&(o=H(i.$.type,r))}if(i&&G(e.return.type)&&!He(e.return.type)&&(c=i.$)!=null&&c.type&&(o=H(i.$.type,r)),!o&&i&&((f=i.$)!=null&&f.type)&&!He(e.return.type)){let p=H(e.return.type,r),_=H(i.$.type,r);p!==_&&(o=_)}let a=o?Oi(e,t,r,o):Oi(e,t,r),s=S(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function py(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(Ie(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ye(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=H(l.type,e),c=me(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`${i}* ${a}(${s}); // Constructor`)}}}function dy(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 Rc(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Vi(r)||!o||!jn(r.type)||jn(o))continue;let a=o.parameters.some(l=>Ye(l.type)),s=Ye(o.return.type);a||s||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${Oi(o,i,e)}; // specialized function: ${S(r.type)}`))}}function Pc(e){var r;let t=e.emitter,n=new Set;for(let[,i]of e.dynImpls){let o=((r=e.types[i.dynType.id])==null?void 0:r.cName)||`yo_dyn_${i.dynType.id}`;n.has(o)||(n.add(o),t.emitLine(`${o} __yo_dup_${o}(${o} 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_${o}(${o} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function Uc(e){var r,i,o;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let l=`yo_dyn_box_${((r=e.types[a.concreteType.id])==null?void 0:r.cName)||`unknown_${a.concreteType.id}`}`;if(n.has(l))continue;n.add(l);let u=H(a.concreteType,e);t.emitLine(`${l}* __yo_new_${l}(${u} value) {`),t.emitLine(` ${l}* box = (${l}*)__yo_malloc(sizeof(${l}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${l};`),t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_dispose_${l}(void* ptr) {`),t.emitLine(` ${l}* box = (${l}*)ptr;`);let f=(i=(G(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(p=>p.label===L.___drop[0]);if(f&&f.assignedValue&&be(f.assignedValue)){let p=(o=e.functions[f.assignedValue.funcId])==null?void 0:o.cName;p&&t.emitLine(` ${p}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function zc(e){var n,r,i,o;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([L.___dup[0],L.___drop[0],L.___dispose[0],L.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!Jt(c))continue;let f=c.isFn.callType,p=H(f.return.type,e),_=`yo_wrap_${a}_call`,d=["void* self_ptr"];for(let y=0;y<f.parameters.length;y++){let g=f.parameters[y],h=H(g.type,e);d.push(`${h} arg${y+1}`)}if(t.emitDeclarationLine(`static ${p} ${_}(${d.join(", ")}) {`),Zn(l)){let y=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,g=me(l.fields[0].label);t.emitDeclarationLine(` ${y}* box = (${y}*)self_ptr;`);let h=l.fields[0].type,v=G(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,E=e.implClosureCallMap.get(v.id),k=(()=>{var F;if(E)return E.functionCName;for(let[,$]of Object.entries(e.functions)){let A=$.value.closureInfo;if(((F=A==null?void 0:A.captureType)==null?void 0:F.id)===v.id)return $.cName}})(),b=[];if(k){b.push(`(void*)&box->${g}`);for(let F=0;F<f.parameters.length;F++)b.push(`arg${F+1}`);Rr(f.return.type)?t.emitDeclarationLine(` ${k}(${b.join(", ")});`):t.emitDeclarationLine(` return ${k}(${b.join(", ")});`)}else{b.push(`box->${g}.data`);for(let F=0;F<f.parameters.length;F++)b.push(`arg${F+1}`);Rr(f.return.type)?t.emitDeclarationLine(` box->${g}.call(${b.join(", ")});`):t.emitDeclarationLine(` return box->${g}.call(${b.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let y=0;y<f.parameters.length;y++)t.emitDeclarationLine(` (void)arg${y+1};`);Rr(f.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${p} zero = (${p})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:f}=s.dynType.requiredTraits[c];if(Jt(f))continue;let p=s.traitValues[c];if(!p){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let d=p.type.fields;for(let y=0;y<d.length;y++){let g=d[y];if(g.label==="Self"||u.has(g.label))continue;let h=p.fields[y];if(!h||!be(h)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function value */`);continue}let v=g.type;if(!ae(v)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function type */`);continue}let E=h.funcId,k=(r=e.functions[E])==null?void 0:r.cName;if(!k){t.emitDeclarationLine(`/* Warning: Impl function for ${g.label} not found */`);continue}let b=`yo_wrap_${a}_${g.label}`,F=H(v.return.type,e),$=["void* self_ptr"];for(let x=1;x<v.parameters.length;x++){let D=v.parameters[x],P=H(D.type,e);$.push(`${P} arg${x}`)}t.emitDeclarationLine(`static ${F} ${b}(${$.join(", ")}) {`);let C=(i=v.parameters[0])==null?void 0:i.type,A;if(Zn(l)){let x=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,D=me(l.fields[0].label);t.emitDeclarationLine(` ${x}* box = (${x}*)self_ptr;`),C&&Xe(C)?A=`&box->${D}`:A=`box->${D}`}else{let x=H(s.concreteType,e);t.emitDeclarationLine(` ${x} concrete_value = (${x})self_ptr;`),C&&Xe(C)?A="&concrete_value":A="concrete_value"}let N=[A];for(let x=1;x<v.parameters.length;x++)N.push(`arg${x}`);Rr(v.return.type)?t.emitDeclarationLine(` ${k}(${N.join(", ")});`):t.emitDeclarationLine(` return ${k}(${N.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function Bc(e){var n,r;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[i,o]of e.dynImpls){let a=((n=e.types[o.dynType.id])==null?void 0:n.cName)||`yo_dyn_${o.dynType.id}`,s=((r=e.types[o.concreteType.id])==null?void 0:r.cName)||`unknown_${o.concreteType.id}`,l=`yo_vtable_${i}`,u=`${a}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${o.dynType.requiredTraits.map(({traitType:p})=>p.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`);let c=new Set,f=new Set([L.___dup[0],L.___drop[0],L.___dispose[0],L.dispose[0]]);for(let{traitType:p}of o.dynType.requiredTraits){if(Jt(p)){let _=`yo_wrap_${i}_call`;t.emitDeclarationLine(` .call = ${_},`),c.add("call");continue}for(let _ of p.fields)if(_.label!=="Self"&&!f.has(_.label)&&!c.has(_.label)&&(c.add(_.label),ae(_.type))){let d=_.type;if(d.parameters.length>0){let y=d.parameters[0];if(y&&y.label==="self"){let g=`yo_wrap_${i}_${_.label}`;t.emitDeclarationLine(` .${me(_.label)} = ${g},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function ts(e,t,n,r=!1,i){let o=ae(n)?n:void 0,s=Ga(e,{detect(u,c,f){var _,d,y;if(u.tag!=="FnCall")return;if(Gc(u,t,i,!0)){let g=[];for(let v of u.args)(_=v.$)!=null&&_.type&&g.push(v.$.type);if(g.length===0&&o)for(let v of o.parameters)v.isCompileTimeOnly||g.push(v.type);let h=((d=u.$)==null?void 0:d.type)??(o==null?void 0:o.return.type);if(g.length>0&&h){let v=ta(c);f.push({index:f.length,expr:u,operationArgTypes:g,operationResultType:h,targetVariableId:v})}}if(r&&!Gc(u,t,i)){let g=my(u,t);if(g){let h=n,v=h.parameters.filter(k=>!k.isCompileTimeOnly).map(k=>k.type),E=g.viaClosure?h.return.type:(y=u.$)==null?void 0:y.type;if(v.length>0&&E){let k=ta(c);f.push({index:f.length,expr:u,operationArgTypes:v,operationResultType:E,targetVariableId:k,isTransitiveEffectCall:!0,isTransitiveClosureCall:g.viaClosure})}}}},shouldSkipBody(u){return vn(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 Gc(e,t,n,r=!1){var l,u;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 c=(l=i.$)==null?void 0:l.type;return!(!r&&(!c||!ae(c))||r&&c&&!ae(c))}let o=[],a=i;for(;a.tag==="FnCall"&&T(a,".")&&a.args.length>=2;){let c=a.args[1];if(!c||c.tag!=="Atom")return!1;o.unshift(c.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let c=0;c<o.length;c++)if(o[c]!==n[c])return!1;let s=(u=i.$)==null?void 0:u.type;return!(!r&&(!s||!ae(s))||r&&s&&!ae(s))}function my(e,t){var i,o,a;if(e.tag!=="FnCall")return;let n=(i=e.func.$)==null?void 0:i.type;if(!n)return;if(ae(n)){if(!n.implicitParameters)return;for(let s of n.implicitParameters){if(s.label===t&&(ae(s.type)||je(s.type)))return{matched:!0,viaClosure:!1};if(s.isEffectRowSpread&&Wc(s,t,(o=e.func.$)==null?void 0:o.env))return{matched:!0,viaClosure:!1}}return}let r=In(n);if(r){let s=r.isFn.callType;if(s.implicitParameters)for(let l of s.implicitParameters){if(l.label===t&&(ae(l.type)||je(l.type)))return{matched:!0,viaClosure:!0};if(l.isEffectRowSpread&&Wc(l,t,(a=e.func.$)==null?void 0:a.env))return{matched:!0,viaClosure:!0}}}}function Wc(e,t,n){var o,a;if(!n)return!1;let r=e.type,i;if(G(r)&&r.isEffectsRow){let l=(a=(o=pe(n,e.label).at(-1))==null?void 0:o.value)==null?void 0:a[0];if(l&&q(l)&&Gt(l.value))i=l.value;else{let u=pn(n,r);Gt(u)&&(i=u)}}else Gt(r)&&(i=r);if(i){for(let s of i.implicitParameters)if(s.label===t&&(ae(s.type)||je(s.type)))return!0}return!1}function qc(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
|
|
550
|
+
`)}function Hc(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
|
|
2005
|
+
`)}function Yc(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
|
|
3752
|
+
`)}function jc(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
|
|
5451
|
+
`)}function Kc(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 jc(e,t){Gc(e),Hc(e),qc(e),Yc(e),Wc(e)}function Pi(e){return!!e.effectInfos&&e.effectInfos.length>1}function fi(e){if(T(e,V.return))return!0;if(e.tag==="FnCall"){let t=e;if(T(e,"->"))return!1;for(let n of t.args)if(fi(n))return!0;if(t.func&&fi(t.func))return!0}return!1}function ts(e,t,n){return Pi(e)&&t.effectIndex!==void 0?`yield_${t.effectIndex}_${n}`:`yield_${n}`}function es(e,t){return Pi(e)&&t.effectIndex!==void 0?`resume_value_${t.effectIndex}`:"resume_value"}function Kc(e,t){return Pi(e)&&t.effectIndex!==void 0?e.effectInfos[t.effectIndex].resumeTypeCName:e.resumeTypeCName}function ef(e,t){var c;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;"),Se(o.return.type)||n.emitDeclarationLine(` ${a} result;`),e.effectInfos){n.emitDeclarationLine(" int effect_tag;");for(let f=0;f<e.effectInfos.length;f++){let p=e.effectInfos[f];for(let _=0;_<p.yieldTypeCNames.length;_++)n.emitDeclarationLine(` ${p.yieldTypeCNames[_]} yield_${f}_${_};`);p.resumeTypeCName!=="void"&&n.emitDeclarationLine(` ${p.resumeTypeCName} resume_value_${f};`)}}else{for(let f=0;f<s.length;f++)n.emitDeclarationLine(` ${s[f]} yield_${f};`);l!=="void"&&n.emitDeclarationLine(` ${l} resume_value;`)}e.isClosure&&n.emitDeclarationLine(" void* closure_context;");let u=new Set;for(let f of o.parameters){if(f.isCompileTimeOnly||f.isImplicit)continue;let p=q(f.type,t);n.emitDeclarationLine(` ${p} ${me(f.label)};`),u.add(f.label)}for(let f of i.capturedVariables){if((c=e.closureCapturedVarNames)!=null&&c.has(f.name))continue;let p=q(f.type,t),_=me(`var_${f.id}`);n.emitDeclarationLine(` ${p} ${_};`)}for(let f of i.effectCallPoints)if(f.isTransitiveEffectCall){let p=ns(f,t);p&&n.emitDeclarationLine(` ${p.structName} _inner_sm_${f.index};`)}n.emitDeclarationLine(`} ${r};`),n.emitDeclarationLine("")}function tf(e,t){t.emitter.emitDeclarationLine(`void ${e.resumeFunctionName}(${e.structName}* sm);`)}function ns(e,t){var i,o,a,s,l;let n=e.expr,r=(i=n.func.$)==null?void 0:i.value;if(r&&be(r)){let u=r.funcId,c=t.functions[u];return c?c.effectStateMachineInfo:void 0}if(e.isTransitiveClosureCall){let u=(o=n.func.$)==null?void 0:o.type;if(u&&G(u)){let f=(a=u.resolvedConcreteType)==null?void 0:a.id;if(f){let p=t.implClosureCallMap.get(f);if(p){let _=Object.values(t.functions).find(d=>d.cName===p.functionCName);if(_!=null&&_.effectStateMachineInfo)return _.effectStateMachineInfo}for(let _ in t.functions){let d=t.functions[_];if(d.value.type.isClosure&&((l=(s=d.value.closureInfo)==null?void 0:s.captureType)==null?void 0:l.id)===f&&d.effectStateMachineInfo)return d.effectStateMachineInfo}}}}}function py(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 dy(e,t){return Qa(e,t).map(r=>({stateNumber:r.stateNumber,expressions:r.expressions,effectCallPoint:r.suspensionPoint}))}function Ri(e,t){return ui(e,t)}function nf(e,t,n,r){var v,E;let i=n.emitter,{structName:o,resumeFunctionName:a,analysis:s}=t,l=n.inEffectStateMachine,u=n.stateMachineVariables,c=n.variableIdRemapping,f=n.currentClosureCaptures,p=n.currentClosureCaptureFrameLevel,_=n.currentClosureCaptureTypeCName;if(t.isClosure&&(r!=null&&r.closureInfo)){let k=r.closureInfo.captureType;k&&Ae(k)&&k.fields.length>0&&(n.currentClosureCaptures=k.fields.map(b=>b.label),n.currentClosureCaptureFrameLevel=r.frameLevel,t.closureCaptureTypeCName&&(n.currentClosureCaptureTypeCName=t.closureCaptureTypeCName))}let d=t.closureCapturedVarNames??new Set,y=py(s);if(d.size>0)for(let[k,b]of y)d.has(b.name)&&y.delete(k);n.inEffectStateMachine=t,n.stateMachineVariables=y,n.variableIdRemapping=s.variableIdRemapping;let g=dy(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 k=0;k<g.length;k++){let b=g[k],F=k===g.length-1;if(i.emitLine(` case ${b.stateNumber}: {`),b.stateNumber===0){let $=t.functionType.parameters.filter(C=>!C.isCompileTimeOnly&&!C.isImplicit);for(let C of $){let I=s.capturedVariables.find(N=>N.name===C.label);if(I){let N=me(`var_${I.id}`),x=me(C.label);i.emitLine(` sm->${N} = sm->${x};`)}}}if(b.stateNumber>0&&s.effectCallPoints[b.stateNumber-1]){let $=s.effectCallPoints[b.stateNumber-1];if($.isTransitiveEffectCall){let C=ns($,n);if(C){let I=`sm->_inner_sm_${$.index}`,N=es(t,$);C.resumeTypeCName!=="void"&&i.emitLine(` ${I}.resume_value = sm->${N};`),i.emitLine(` ${C.resumeFunctionName}(&${I});`),i.emitLine(` if (!${I}.completed) {`);for(let D=0;D<C.yieldTypeCNames.length;D++){let P=ts(t,$,D);i.emitLine(` sm->${P} = ${I}.yield_${D};`)}Pi(t)&&$.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${$.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let x=C.returnTypeCName==="void";if($.targetVariableId&&!x){let D=me(`var_${$.targetVariableId}`);i.emitLine(` sm->${D} = ${I}.result;`)}}}else{let C=es(t,$),I=Kc(t,$);if($.targetVariableId&&I!=="void"){let N=me(`var_${$.targetVariableId}`);i.emitLine(` sm->${N} = sm->${C};`)}}if($.isInsideWhile&&$.enclosingWhileExpr){let I=$.enclosingWhileExpr.args,N,x;I.length===3?(N=I[1],x=I[2]):x=I[1];let D=`while_loop_${$.index}`,P=`while_done_${$.index}_s${b.stateNumber}`,{remainingExprs:U,bodyDropExprs:X}=Zc(x,$);Vl(U,X,D,N,P," ",n),i.emitLine(` ${P}:;`),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;"),i.emitLine(" }");continue}}for(let $=0;$<b.expressions.length;$++){let C=b.expressions[$],I=$===b.expressions.length-1;if(b.effectCallPoint&&Ri(C,b.effectCallPoint.expr)&&b.effectCallPoint)Co(C,b.effectCallPoint,b.stateNumber," ",n,t);else if(I&&F&&!Se(t.functionType.return.type)){let x=O(C," ",n);x&&i.emitLine(` sm->result = ${x};`)}else{let x=O(C," ",n);x&&C.$&&!wt(C.$.env.modulePath,x)&&i.emitLine(` ${x};`)}}F&&!b.effectCallPoint&&((v=e.$)!=null&&v.deferredDropExpressions?Qt(e," ",n):Jc(s," ",n),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;")),i.emitLine(" }")}let h=g.length>0?g[g.length-1].stateNumber:-1;for(let k of s.effectCallPoints){let b=k.index+1;if(b>h){if(i.emitLine(` case ${b}: {`),k.isTransitiveEffectCall){let F=ns(k,n);if(F){let $=`sm->_inner_sm_${k.index}`,C=es(t,k);F.resumeTypeCName!=="void"&&i.emitLine(` ${$}.resume_value = sm->${C};`),i.emitLine(` ${F.resumeFunctionName}(&${$});`),i.emitLine(` if (!${$}.completed) {`);for(let N=0;N<F.yieldTypeCNames.length;N++){let x=ts(t,k,N);i.emitLine(` sm->${x} = ${$}.yield_${N};`)}Pi(t)&&k.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${k.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let I=F.returnTypeCName==="void";if(k.targetVariableId&&!I){let N=me(`var_${k.targetVariableId}`);i.emitLine(` sm->${N} = ${$}.result;`)}!Se(t.functionType.return.type)&&!I&&i.emitLine(` sm->result = ${$}.result;`)}}else{let F=es(t,k),$=Kc(t,k);if(k.targetVariableId&&$!=="void"){let C=me(`var_${k.targetVariableId}`);i.emitLine(` sm->${C} = sm->${F};`)}!Se(t.functionType.return.type)&&$!=="void"&&i.emitLine(` sm->result = sm->${F};`),(E=e.$)!=null&&E.deferredDropExpressions?Qt(e," ",n):Jc(s," ",n)}if(k.isInsideWhile&&k.enclosingWhileExpr){let $=k.enclosingWhileExpr.args,C,I;$.length===3?(C=$[1],I=$[2]):I=$[1];let N=`while_loop_${k.index}`,x=`while_done_${k.index}_r${b}`,{remainingExprs:D,bodyDropExprs:P}=Zc(I,k);Vl(D,P,N,C,x," ",n),i.emitLine(` ${x}:;`),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=f,n.currentClosureCaptureFrameLevel=p,n.currentClosureCaptureTypeCName=_}function Co(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?Qc(s,t,n,r,i,o):Xc(s,t,n,r,i,o);return}if(Ri(u,s)){Co(u,t,n,r,i,o);return}let c=O(e,r,i);c&&a.emitLine(`${r}${c};`);return}if(e===s){t.isTransitiveEffectCall?Qc(s,t,n,r,i,o):Xc(s,t,n,r,i,o);return}if(T(e,V.cond)){yy(e,t,n,r,i,o);return}if(T(e,V.match)){gy(e,t,n,r,i,o);return}if(T(e,V.while)){my(e,t,n,r,i,o);return}if(e.tag==="FnCall"){if(Ri(e.func,s)){Co(e.func,t,n,r,i,o);return}for(let u of e.args)if(Ri(u,s)){Co(u,t,n,r,i,o);return}}let l=O(e,r,i);l&&a.emitLine(`${r}${l};`)}function Xc(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],f=O(c,r,i);a.emitLine(`${r}sm->${ts(o,t,u)} = ${f};`)}Pi(o)&&t.effectIndex!==void 0&&a.emitLine(`${r}sm->effect_tag = ${t.effectIndex};`),a.emitLine(`${r}sm->state = ${s};`),a.emitLine(`${r}return;`)}function Qc(e,t,n,r,i,o){let a=i.emitter,s=ns(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 y=O(e.func,r,i);a.emitLine(`${r}${u}.closure_context = &(${y});`)}let f=s.functionType.parameters.filter(y=>!y.isCompileTimeOnly&&!y.isImplicit),p=e.args;for(let y=0;y<f.length&&y<p.length;y++){let g=f[y],h=O(p[y],r,i);a.emitLine(`${r}${u}.${me(g.label)} = ${h};`)}a.emitLine(`${r}${s.resumeFunctionName}(&${u});`),a.emitLine(`${r}if (!${u}.completed) {`);for(let y=0;y<s.yieldTypeCNames.length;y++){let g=ts(o,t,y);a.emitLine(`${r} sm->${g} = ${u}.yield_${y};`)}Pi(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(!Se(o.functionType.return.type)&&!_){if(t.targetVariableId){let y=me(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${y} = ${u}.result;`)}a.emitLine(`${r}sm->result = ${u}.result;`)}else if(t.targetVariableId&&!_){let y=me(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${y} = ${u}.result;`)}let d=i.effectWhileLoopContinuation;d?(Vl(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 Zc(e,t){var s;let n=t.expr,r=((s=e.$)==null?void 0:s.deferredDropExpressions)??[],i;e.tag==="FnCall"&&T(e,"begin")?i=e.args:i=[e];let o=[],a=-1;for(let l=0;l<i.length;l++)if(Ri(i[l],n)){a=l;break}if(a!==-1)for(let l=a+1;l<i.length;l++)o.push(i[l]);return{remainingExprs:o,bodyDropExprs:r}}function Vl(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 f of e){let p=O(f,o,a);p&&f.$&&!wt(f.$.env.modulePath,p)&&s.emitLine(`${o}${p};`)}a.smWhileBreakInfo=l,a.smWhileContinueInfo=u,a.smWhileBodyDrops=c}if(r){let l=O(r,o,a);l&&s.emitLine(`${o}${l};`)}s.emitLine(`${o}goto ${n};`)}function my(e,t,n,r,i,o){var $;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 f=`while_loop_${t.index}`,p=`while_done_${t.index}`;a.emitLine(`${r}${f}:;`);let _=O(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 y=t.expr,g=-1;for(let C=0;C<d.length;C++)if(Ri(d[C],y)){g=C;break}let h=[];if(g!==-1)for(let C=g+1;C<d.length;C++)h.push(d[C]);let v=(($=c.$)==null?void 0:$.deferredDropExpressions)??[],E=i.smWhileBreakInfo,k=i.smWhileContinueInfo,b=i.smWhileBodyDrops;i.smWhileBreakInfo={label:p},i.smWhileContinueInfo={label:f,stepExpr:u,emitDropsBeforeGoto:!0},i.smWhileBodyDrops=[...v];for(let C=0;C<g;C++){let I=d[C],N=O(I,r,i);N&&I.$&&!wt(I.$.env.modulePath,N)&&a.emitLine(`${r}${N};`)}i.smWhileBreakInfo=E,i.smWhileContinueInfo=k,i.smWhileBodyDrops=b;let F=i.effectWhileLoopContinuation;i.effectWhileLoopContinuation={label:f,stepExpr:u,whileDoneLabel:p,remainingExprs:h,bodyDropExprs:v},g!==-1&&Co(d[g],t,n,r,i,o),i.effectWhileLoopContinuation=F}function yy(e,t,n,r,i,o){var u;let a=i.emitter,s=t.expr,l=e.args;for(let c=0;c<l.length;c++){let f=l[c];if(!T(f,"=>"))continue;let p=f.args[0],_=f.args[1];if(p.tag==="Atom"&&p.token.value==="true")a.emitLine(`${r}} else {`);else{let g=O(p,r,i);c===0?a.emitLine(`${r}if (${g}) {`):a.emitLine(`${r}} else if (${g}) {`)}if(Ri(_,s))Co(_,t,n,`${r} `,i,o);else{let g=O(_,`${r} `,i);g&&!Se(o.functionType.return.type)?a.emitLine(`${r} sm->result = ${g};`):g&&a.emitLine(`${r} ${g};`),(u=e.$)!=null&&u.deferredDropExpressions&&Qt(e,`${r} `,i),a.emitLine(`${r} sm->completed = 1;`),a.emitLine(`${r} return;`)}}a.emitLine(`${r}}`)}function gy(e,t,n,r,i,o){let a=O(e,r,i);a&&i.emitter.emitLine(`${r}${a};`)}function Dl(e,t,n,r,i,o,a,s,l,u,c){let f=u.emitter,{structName:p,resumeFunctionName:_}=e,d=s?`_eff_sm_${me(s)}`:"_eff_sm";f.emitLine(`${l}${p} ${d} = {0};`),c&&f.emitLine(`${l}${d}.closure_context = ${c};`);let y=n.parameters.filter(h=>!h.isCompileTimeOnly&&!h.isImplicit);for(let h=0;h<y.length&&h<t.length;h++){let v=y[h];f.emitLine(`${l}${d}.${me(v.label)} = ${t[h]};`)}f.emitLine(`${l}${_}(&${d});`);let g=u.effectSmConsumedArgCNames;if(!o){let h=new Set;for(let v=0;v<y.length&&v<t.length;v++){let E=y[v];Be(E.type)&&h.add(t[v])}h.size>0&&(u.effectSmConsumedArgCNames=h)}if(f.emitLine(`${l}while (!${d}.completed) {`),of(r,i,d,e,`${l} `,u,o),f.emitLine(`${l}}`),u.effectSmConsumedArgCNames=g,s&&!Se(n.return.type)){let h=e.returnTypeCName;return f.emitLine(`${l}${h} ${s} = ${d}.result;`),s}return""}function rf(e,t,n,r,i,o,a){let s=a.emitter,{structName:l,resumeFunctionName:u}=e,c=i?`_eff_sm_${me(i)}`:"_eff_sm";s.emitLine(`${o}${l} ${c} = {0};`);let f=n.parameters.filter(d=>!d.isCompileTimeOnly&&!d.isImplicit);for(let d=0;d<f.length&&d<t.length;d++){let y=f[d];s.emitLine(`${o}${c}.${me(y.label)} = ${t[d]};`)}s.emitLine(`${o}${u}(&${c});`);let p=r.some(d=>!d.hasResume),_=a.effectSmConsumedArgCNames;if(p){let d=new Set;for(let y=0;y<f.length&&y<t.length;y++){let g=f[y];Be(g.type)&&d.add(t[y])}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}: {`),of(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&&!Se(n.return.type)){let d=e.returnTypeCName;return s.emitLine(`${o}${d} ${i} = ${c}.result;`),i}return""}function Jc(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(Be(s)){let l=i&&o.effectIndex!==void 0?`yield_${o.effectIndex}_${a}`:`yield_${a}`,u=ar(`sm->${l}`,s,n);u&&r.emitLine(`${t}${u};`)}}}function of(e,t,n,r,i,o,a,s){let l=o.emitter,u=t.parameters.filter(f=>!f.isCompileTimeOnly),c=[];for(let f=0;f<u.length;f++){let p=u[f],_=q(p.type,o),d=me(p.label),y=s!==void 0?`${n}.yield_${s}_${f}`:`${n}.yield_${f}`;if(a&&Be(p.type)){let g=si(y,p.type,o);g?l.emitLine(`${i}${_} ${d} = ${g};`):l.emitLine(`${i}${_} ${d} = ${y};`)}else l.emitLine(`${i}${_} ${d} = ${y};`);if(Be(p.type)){let g=ar(d,p.type,o);g&&c.push(g)}}if(a){let f=o.continuationVariables,p=new Map(f);p.set("resume",{smVar:n,smInfo:r,effectIndex:s}),o.continuationVariables=p;let _=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let d=o.localShadowedVariables,y=new Set(d);for(let h of u)y.add(me(h.label));o.localShadowedVariables=y;let g=O(e,i,o);if(g&&l.emitLine(`${i}${g};`),o.localShadowedVariables=d,!fi(e)){l.emitLine(`${i}if (!${n}.completed) {`);for(let E of c)l.emitLine(`${i} ${E};`);let h=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}.${h} = (${v}){0};`),l.emitLine(`${i} ${r.resumeFunctionName}(&${n});`),l.emitLine(`${i}}`)}o.effectHandlerParamDrops=_,o.continuationVariables=f}else{let f=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let p=o.localShadowedVariables,_=new Set(p);for(let y of u)_.add(me(y.label));o.localShadowedVariables=_;let d=O(e,i,o);d&&l.emitLine(`${i}${d};`),o.localShadowedVariables=p,o.effectHandlerParamDrops=f}}function hy(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ft(e,n,r);let a=e.$.deferredDupExpressions[0];if(A(a)&&((o=a.$)!=null&&o.variableName))return Re(a.$.variableName,a.$.env)}return t}function vy(e,t,n){var r,i,o;if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((i=e.$)!=null&&i.variableName){let s=e.$.variableName;e.$.variableName=void 0;let l=O(e,t,n);e.$.variableName=s;let u=q(e.$.type,n),c=me(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=O(e,t,n);n.emitter.emitLine(`${t}${s};`)}Ft(e,t,n);let a=e.$.deferredDupExpressions[0];if(A(a)&&((o=a.$)!=null&&o.variableName))return Re(a.$.variableName,a.$.env)}return O(e,t,n)}function Ty(e){var t,n;if(A(e)&&T(e,L.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&Y(r))return Re(r.token.value,(t=r.$)==null?void 0:t.env)}if(A(e)&&e.args.length===0&&A(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===L.___drop[0]&&Y(e.func.args[0])){let r=e.func.args[0];return Re(r.token.value,(n=r.$)==null?void 0:n.env)}}function $r(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let f of n.$.deferredDropExpressions){let p=qr(f);p&&l.add(p)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(f=>{let p=qr(f);return!p||l.has(p)?!1:pe(n.$.env,p).length>0}):t.pendingDeferredDrops.filter(f=>{let p=qr(f);if(!p||l.has(p))return!1;if(u&&u.size>0){let _=Ty(f);if(_&&u.has(_))return!1}return!0});if(c.length>0){let f=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${f}`);for(let p of c){let _=O(p,e,t);_&&t.emitter.emitLine(`${e}${_};`)}}}}function Ey(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",f=a!==void 0&&o.effectInfos&&o.effectInfos.length>1?o.effectInfos[a].resumeTypeCName:o.resumeTypeCName;if(u&&f!=="void"){let p=O(u,t,n);s.emitLine(`${t}${i}.${c} = ${p};`)}if(l.effectHandlerParamDrops)for(let p of l.effectHandlerParamDrops)s.emitLine(`${t}${p};`);return s.emitLine(`${t}${o.resumeFunctionName}(&${i});`),""}function af(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let f=r.continuationVariables.get("resume");if(f){if("directReturnVar"in f){if(!f.isUnitReturn){let p=e.args[0];if(p){let _=O(p,t,n);_&&n.emitter.emitLine(`${t}${f.directReturnVar} = ${_};`)}}return $r(t,r,e,!1,!0),f.directExitLabel&&n.emitter.emitLine(`${t}goto ${f.directExitLabel};`),""}return Ey(e,t,n,f)}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!Se(e.$.type))return"// Error: return expression missing temporary variable name";let f,p=!1;if((r.inAsyncStateMachine||r.inEffectStateMachine)&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,f=O(i,t,n),i.$.variableName=h,p=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=O(i,t,n);i.$.variableName=h;let E=q(i.$.type,n),k=Re(h,i.$.env);k!==v&&n.emitter.emitLine(`${t}${E} ${k} = ${v};`),f=k}else f=O(i,t,n);let _=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ft(i,t,r);let h=i.$.deferredDupExpressions[0];A(h)&&((u=h.$)!=null&&u.variableName)&&(f=Re(h.$.variableName,h.$.env),_=!0)}let d=q(e.$.type,n),y=e.$.variableName?Re(e.$.variableName,e.$.env):void 0;if(!_&&!Se(e.$.type)&&y&&y!==f&&n.emitter.emitLine(`${t}${d} ${y} = ${f};`),e.$.deferredDropExpressions&&Qt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine){$r(t,r,e,!0);let F=_?f:y??f;return Se(e.$.type)||n.emitter.emitLine(`${t}sm->result = ${F};`),n.emitter.emitLine(`${t}sm->completed = 1;`),"return"}let h=r.inAsyncStateMachine.futureType,E=un(h).isFuture.outputType,k=Se(E);$r(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let b;return k||(b=e.$.variableName&&p?e.$.variableName:e.$.variableName||f),Hr({emitter:n.emitter,indent:t,resultCode:b,debugLabel:n.currentFunctionName}),""}return $r(t,r,e),Se(e.$.type)?"return":`return ${_?f:y??f}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&Qt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine)return $r(t,r,e,!0),n.emitter.emitLine(`${t}sm->completed = 1;`),"return";let f=r.inAsyncStateMachine.futureType,_=un(f).isFuture.outputType,d=Se(_);$r(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let y=d?void 0:`(${q(_,n)}){0}`;return Hr({emitter:n.emitter,indent:t,resultCode:y,debugLabel:n.currentFunctionName}),""}return $r(t,r,e),"return"}}function sf(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=$o(e,n),o=hy(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,V.return)){let i=O(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=vy(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function lf(e,t){e.emitLine(`
|
|
9530
|
+
`)}function Xc(e,t){qc(e),Yc(e),jc(e),Kc(e),Hc(e)}function Pi(e){return!!e.effectInfos&&e.effectInfos.length>1}function fi(e){if(T(e,V.return))return!0;if(e.tag==="FnCall"){let t=e;if(T(e,"->"))return!1;for(let n of t.args)if(fi(n))return!0;if(t.func&&fi(t.func))return!0}return!1}function rs(e,t,n){return Pi(e)&&t.effectIndex!==void 0?`yield_${t.effectIndex}_${n}`:`yield_${n}`}function ns(e,t){return Pi(e)&&t.effectIndex!==void 0?`resume_value_${t.effectIndex}`:"resume_value"}function Qc(e,t){return Pi(e)&&t.effectIndex!==void 0?e.effectInfos[t.effectIndex].resumeTypeCName:e.resumeTypeCName}function nf(e,t){var c;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;"),xe(o.return.type)||n.emitDeclarationLine(` ${a} result;`),e.effectInfos){n.emitDeclarationLine(" int effect_tag;");for(let f=0;f<e.effectInfos.length;f++){let p=e.effectInfos[f];for(let _=0;_<p.yieldTypeCNames.length;_++)n.emitDeclarationLine(` ${p.yieldTypeCNames[_]} yield_${f}_${_};`);p.resumeTypeCName!=="void"&&n.emitDeclarationLine(` ${p.resumeTypeCName} resume_value_${f};`)}}else{for(let f=0;f<s.length;f++)n.emitDeclarationLine(` ${s[f]} yield_${f};`);l!=="void"&&n.emitDeclarationLine(` ${l} resume_value;`)}e.isClosure&&n.emitDeclarationLine(" void* closure_context;");let u=new Set;for(let f of o.parameters){if(f.isCompileTimeOnly||f.isImplicit)continue;let p=H(f.type,t);n.emitDeclarationLine(` ${p} ${me(f.label)};`),u.add(f.label)}for(let f of i.capturedVariables){if((c=e.closureCapturedVarNames)!=null&&c.has(f.name))continue;let p=H(f.type,t),_=me(`var_${f.id}`);n.emitDeclarationLine(` ${p} ${_};`)}for(let f of i.effectCallPoints)if(f.isTransitiveEffectCall){let p=is(f,t);p&&n.emitDeclarationLine(` ${p.structName} _inner_sm_${f.index};`)}n.emitDeclarationLine(`} ${r};`),n.emitDeclarationLine("")}function rf(e,t){t.emitter.emitDeclarationLine(`void ${e.resumeFunctionName}(${e.structName}* sm);`)}function is(e,t){var i,o,a,s,l;let n=e.expr,r=(i=n.func.$)==null?void 0:i.value;if(r&&be(r)){let u=r.funcId,c=t.functions[u];return c?c.effectStateMachineInfo:void 0}if(e.isTransitiveClosureCall){let u=(o=n.func.$)==null?void 0:o.type;if(u&&G(u)){let f=(a=u.resolvedConcreteType)==null?void 0:a.id;if(f){let p=t.implClosureCallMap.get(f);if(p){let _=Object.values(t.functions).find(d=>d.cName===p.functionCName);if(_!=null&&_.effectStateMachineInfo)return _.effectStateMachineInfo}for(let _ in t.functions){let d=t.functions[_];if(d.value.type.isClosure&&((l=(s=d.value.closureInfo)==null?void 0:s.captureType)==null?void 0:l.id)===f&&d.effectStateMachineInfo)return d.effectStateMachineInfo}}}}}function yy(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 gy(e,t){return Ja(e,t).map(r=>({stateNumber:r.stateNumber,expressions:r.expressions,effectCallPoint:r.suspensionPoint}))}function Ri(e,t){return ui(e,t)}function of(e,t,n,r){var v,E;let i=n.emitter,{structName:o,resumeFunctionName:a,analysis:s}=t,l=n.inEffectStateMachine,u=n.stateMachineVariables,c=n.variableIdRemapping,f=n.currentClosureCaptures,p=n.currentClosureCaptureFrameLevel,_=n.currentClosureCaptureTypeCName;if(t.isClosure&&(r!=null&&r.closureInfo)){let k=r.closureInfo.captureType;k&&Ie(k)&&k.fields.length>0&&(n.currentClosureCaptures=k.fields.map(b=>b.label),n.currentClosureCaptureFrameLevel=r.frameLevel,t.closureCaptureTypeCName&&(n.currentClosureCaptureTypeCName=t.closureCaptureTypeCName))}let d=t.closureCapturedVarNames??new Set,y=yy(s);if(d.size>0)for(let[k,b]of y)d.has(b.name)&&y.delete(k);n.inEffectStateMachine=t,n.stateMachineVariables=y,n.variableIdRemapping=s.variableIdRemapping;let g=gy(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 k=0;k<g.length;k++){let b=g[k],F=k===g.length-1;if(i.emitLine(` case ${b.stateNumber}: {`),b.stateNumber===0){let $=t.functionType.parameters.filter(C=>!C.isCompileTimeOnly&&!C.isImplicit);for(let C of $){let A=s.capturedVariables.find(N=>N.name===C.label);if(A){let N=me(`var_${A.id}`),x=me(C.label);i.emitLine(` sm->${N} = sm->${x};`)}}}if(b.stateNumber>0&&s.effectCallPoints[b.stateNumber-1]){let $=s.effectCallPoints[b.stateNumber-1];if($.isTransitiveEffectCall){let C=is($,n);if(C){let A=`sm->_inner_sm_${$.index}`,N=ns(t,$);C.resumeTypeCName!=="void"&&i.emitLine(` ${A}.resume_value = sm->${N};`),i.emitLine(` ${C.resumeFunctionName}(&${A});`),i.emitLine(` if (!${A}.completed) {`);for(let D=0;D<C.yieldTypeCNames.length;D++){let P=rs(t,$,D);i.emitLine(` sm->${P} = ${A}.yield_${D};`)}Pi(t)&&$.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${$.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let x=C.returnTypeCName==="void";if($.targetVariableId&&!x){let D=me(`var_${$.targetVariableId}`);i.emitLine(` sm->${D} = ${A}.result;`)}}}else{let C=ns(t,$),A=Qc(t,$);if($.targetVariableId&&A!=="void"){let N=me(`var_${$.targetVariableId}`);i.emitLine(` sm->${N} = sm->${C};`)}}if($.isInsideWhile&&$.enclosingWhileExpr){let A=$.enclosingWhileExpr.args,N,x;A.length===3?(N=A[1],x=A[2]):x=A[1];let D=`while_loop_${$.index}`,P=`while_done_${$.index}_s${b.stateNumber}`,{remainingExprs:U,bodyDropExprs:j}=ef(x,$);Dl(U,j,D,N,P," ",n),i.emitLine(` ${P}:;`),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;"),i.emitLine(" }");continue}}for(let $=0;$<b.expressions.length;$++){let C=b.expressions[$],A=$===b.expressions.length-1;if(b.effectCallPoint&&Ri(C,b.effectCallPoint.expr)&&b.effectCallPoint)Co(C,b.effectCallPoint,b.stateNumber," ",n,t);else if(A&&F&&!xe(t.functionType.return.type)){let x=R(C," ",n);x&&i.emitLine(` sm->result = ${x};`)}else{let x=R(C," ",n);x&&C.$&&!wt(C.$.env.modulePath,x)&&i.emitLine(` ${x};`)}}F&&!b.effectCallPoint&&((v=e.$)!=null&&v.deferredDropExpressions?Qt(e," ",n):tf(s," ",n),i.emitLine(" sm->completed = 1;"),i.emitLine(" return;")),i.emitLine(" }")}let h=g.length>0?g[g.length-1].stateNumber:-1;for(let k of s.effectCallPoints){let b=k.index+1;if(b>h){if(i.emitLine(` case ${b}: {`),k.isTransitiveEffectCall){let F=is(k,n);if(F){let $=`sm->_inner_sm_${k.index}`,C=ns(t,k);F.resumeTypeCName!=="void"&&i.emitLine(` ${$}.resume_value = sm->${C};`),i.emitLine(` ${F.resumeFunctionName}(&${$});`),i.emitLine(` if (!${$}.completed) {`);for(let N=0;N<F.yieldTypeCNames.length;N++){let x=rs(t,k,N);i.emitLine(` sm->${x} = ${$}.yield_${N};`)}Pi(t)&&k.effectIndex!==void 0&&i.emitLine(` sm->effect_tag = ${k.effectIndex};`),i.emitLine(" return;"),i.emitLine(" }");let A=F.returnTypeCName==="void";if(k.targetVariableId&&!A){let N=me(`var_${k.targetVariableId}`);i.emitLine(` sm->${N} = ${$}.result;`)}!xe(t.functionType.return.type)&&!A&&i.emitLine(` sm->result = ${$}.result;`)}}else{let F=ns(t,k),$=Qc(t,k);if(k.targetVariableId&&$!=="void"){let C=me(`var_${k.targetVariableId}`);i.emitLine(` sm->${C} = sm->${F};`)}!xe(t.functionType.return.type)&&$!=="void"&&i.emitLine(` sm->result = sm->${F};`),(E=e.$)!=null&&E.deferredDropExpressions?Qt(e," ",n):tf(s," ",n)}if(k.isInsideWhile&&k.enclosingWhileExpr){let $=k.enclosingWhileExpr.args,C,A;$.length===3?(C=$[1],A=$[2]):A=$[1];let N=`while_loop_${k.index}`,x=`while_done_${k.index}_r${b}`,{remainingExprs:D,bodyDropExprs:P}=ef(A,k);Dl(D,P,N,C,x," ",n),i.emitLine(` ${x}:;`),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=f,n.currentClosureCaptureFrameLevel=p,n.currentClosureCaptureTypeCName=_}function Co(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?Jc(s,t,n,r,i,o):Zc(s,t,n,r,i,o);return}if(Ri(u,s)){Co(u,t,n,r,i,o);return}let c=R(e,r,i);c&&a.emitLine(`${r}${c};`);return}if(e===s){t.isTransitiveEffectCall?Jc(s,t,n,r,i,o):Zc(s,t,n,r,i,o);return}if(T(e,V.cond)){vy(e,t,n,r,i,o);return}if(T(e,V.match)){Ty(e,t,n,r,i,o);return}if(T(e,V.while)){hy(e,t,n,r,i,o);return}if(e.tag==="FnCall"){if(Ri(e.func,s)){Co(e.func,t,n,r,i,o);return}for(let u of e.args)if(Ri(u,s)){Co(u,t,n,r,i,o);return}}let l=R(e,r,i);l&&a.emitLine(`${r}${l};`)}function Zc(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],f=R(c,r,i);a.emitLine(`${r}sm->${rs(o,t,u)} = ${f};`)}Pi(o)&&t.effectIndex!==void 0&&a.emitLine(`${r}sm->effect_tag = ${t.effectIndex};`),a.emitLine(`${r}sm->state = ${s};`),a.emitLine(`${r}return;`)}function Jc(e,t,n,r,i,o){let a=i.emitter,s=is(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 y=R(e.func,r,i);a.emitLine(`${r}${u}.closure_context = &(${y});`)}let f=s.functionType.parameters.filter(y=>!y.isCompileTimeOnly&&!y.isImplicit),p=e.args;for(let y=0;y<f.length&&y<p.length;y++){let g=f[y],h=R(p[y],r,i);a.emitLine(`${r}${u}.${me(g.label)} = ${h};`)}a.emitLine(`${r}${s.resumeFunctionName}(&${u});`),a.emitLine(`${r}if (!${u}.completed) {`);for(let y=0;y<s.yieldTypeCNames.length;y++){let g=rs(o,t,y);a.emitLine(`${r} sm->${g} = ${u}.yield_${y};`)}Pi(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(!xe(o.functionType.return.type)&&!_){if(t.targetVariableId){let y=me(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${y} = ${u}.result;`)}a.emitLine(`${r}sm->result = ${u}.result;`)}else if(t.targetVariableId&&!_){let y=me(`var_${t.targetVariableId}`);a.emitLine(`${r}sm->${y} = ${u}.result;`)}let d=i.effectWhileLoopContinuation;d?(Dl(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 ef(e,t){var s;let n=t.expr,r=((s=e.$)==null?void 0:s.deferredDropExpressions)??[],i;e.tag==="FnCall"&&T(e,"begin")?i=e.args:i=[e];let o=[],a=-1;for(let l=0;l<i.length;l++)if(Ri(i[l],n)){a=l;break}if(a!==-1)for(let l=a+1;l<i.length;l++)o.push(i[l]);return{remainingExprs:o,bodyDropExprs:r}}function Dl(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 f of e){let p=R(f,o,a);p&&f.$&&!wt(f.$.env.modulePath,p)&&s.emitLine(`${o}${p};`)}a.smWhileBreakInfo=l,a.smWhileContinueInfo=u,a.smWhileBodyDrops=c}if(r){let l=R(r,o,a);l&&s.emitLine(`${o}${l};`)}s.emitLine(`${o}goto ${n};`)}function hy(e,t,n,r,i,o){var $;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 f=`while_loop_${t.index}`,p=`while_done_${t.index}`;a.emitLine(`${r}${f}:;`);let _=R(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 y=t.expr,g=-1;for(let C=0;C<d.length;C++)if(Ri(d[C],y)){g=C;break}let h=[];if(g!==-1)for(let C=g+1;C<d.length;C++)h.push(d[C]);let v=(($=c.$)==null?void 0:$.deferredDropExpressions)??[],E=i.smWhileBreakInfo,k=i.smWhileContinueInfo,b=i.smWhileBodyDrops;i.smWhileBreakInfo={label:p},i.smWhileContinueInfo={label:f,stepExpr:u,emitDropsBeforeGoto:!0},i.smWhileBodyDrops=[...v];for(let C=0;C<g;C++){let A=d[C],N=R(A,r,i);N&&A.$&&!wt(A.$.env.modulePath,N)&&a.emitLine(`${r}${N};`)}i.smWhileBreakInfo=E,i.smWhileContinueInfo=k,i.smWhileBodyDrops=b;let F=i.effectWhileLoopContinuation;i.effectWhileLoopContinuation={label:f,stepExpr:u,whileDoneLabel:p,remainingExprs:h,bodyDropExprs:v},g!==-1&&Co(d[g],t,n,r,i,o),i.effectWhileLoopContinuation=F}function vy(e,t,n,r,i,o){var u;let a=i.emitter,s=t.expr,l=e.args;for(let c=0;c<l.length;c++){let f=l[c];if(!T(f,"=>"))continue;let p=f.args[0],_=f.args[1];if(p.tag==="Atom"&&p.token.value==="true")a.emitLine(`${r}} else {`);else{let g=R(p,r,i);c===0?a.emitLine(`${r}if (${g}) {`):a.emitLine(`${r}} else if (${g}) {`)}if(Ri(_,s))Co(_,t,n,`${r} `,i,o);else{let g=R(_,`${r} `,i);g&&!xe(o.functionType.return.type)?a.emitLine(`${r} sm->result = ${g};`):g&&a.emitLine(`${r} ${g};`),(u=e.$)!=null&&u.deferredDropExpressions&&Qt(e,`${r} `,i),a.emitLine(`${r} sm->completed = 1;`),a.emitLine(`${r} return;`)}}a.emitLine(`${r}}`)}function Ty(e,t,n,r,i,o){let a=R(e,r,i);a&&i.emitter.emitLine(`${r}${a};`)}function Ml(e,t,n,r,i,o,a,s,l,u,c){let f=u.emitter,{structName:p,resumeFunctionName:_}=e,d=s?`_eff_sm_${me(s)}`:"_eff_sm";f.emitLine(`${l}${p} ${d} = {0};`),c&&f.emitLine(`${l}${d}.closure_context = ${c};`);let y=n.parameters.filter(h=>!h.isCompileTimeOnly&&!h.isImplicit);for(let h=0;h<y.length&&h<t.length;h++){let v=y[h];f.emitLine(`${l}${d}.${me(v.label)} = ${t[h]};`)}f.emitLine(`${l}${_}(&${d});`);let g=u.effectSmConsumedArgCNames;if(!o){let h=new Set;for(let v=0;v<y.length&&v<t.length;v++){let E=y[v];Be(E.type)&&h.add(t[v])}h.size>0&&(u.effectSmConsumedArgCNames=h)}if(f.emitLine(`${l}while (!${d}.completed) {`),sf(r,i,d,e,`${l} `,u,o),f.emitLine(`${l}}`),u.effectSmConsumedArgCNames=g,s&&!xe(n.return.type)){let h=e.returnTypeCName;return f.emitLine(`${l}${h} ${s} = ${d}.result;`),s}return""}function af(e,t,n,r,i,o,a){let s=a.emitter,{structName:l,resumeFunctionName:u}=e,c=i?`_eff_sm_${me(i)}`:"_eff_sm";s.emitLine(`${o}${l} ${c} = {0};`);let f=n.parameters.filter(d=>!d.isCompileTimeOnly&&!d.isImplicit);for(let d=0;d<f.length&&d<t.length;d++){let y=f[d];s.emitLine(`${o}${c}.${me(y.label)} = ${t[d]};`)}s.emitLine(`${o}${u}(&${c});`);let p=r.some(d=>!d.hasResume),_=a.effectSmConsumedArgCNames;if(p){let d=new Set;for(let y=0;y<f.length&&y<t.length;y++){let g=f[y];Be(g.type)&&d.add(t[y])}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}: {`),sf(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&&!xe(n.return.type)){let d=e.returnTypeCName;return s.emitLine(`${o}${d} ${i} = ${c}.result;`),i}return""}function tf(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(Be(s)){let l=i&&o.effectIndex!==void 0?`yield_${o.effectIndex}_${a}`:`yield_${a}`,u=ar(`sm->${l}`,s,n);u&&r.emitLine(`${t}${u};`)}}}function sf(e,t,n,r,i,o,a,s){let l=o.emitter,u=t.parameters.filter(f=>!f.isCompileTimeOnly),c=[];for(let f=0;f<u.length;f++){let p=u[f],_=H(p.type,o),d=me(p.label),y=s!==void 0?`${n}.yield_${s}_${f}`:`${n}.yield_${f}`;if(a&&Be(p.type)){let g=si(y,p.type,o);g?l.emitLine(`${i}${_} ${d} = ${g};`):l.emitLine(`${i}${_} ${d} = ${y};`)}else l.emitLine(`${i}${_} ${d} = ${y};`);if(Be(p.type)){let g=ar(d,p.type,o);g&&c.push(g)}}if(a){let f=o.continuationVariables,p=new Map(f);p.set("resume",{smVar:n,smInfo:r,effectIndex:s}),o.continuationVariables=p;let _=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let d=o.localShadowedVariables,y=new Set(d);for(let h of u)y.add(me(h.label));o.localShadowedVariables=y;let g=R(e,i,o);if(g&&l.emitLine(`${i}${g};`),o.localShadowedVariables=d,!fi(e)){l.emitLine(`${i}if (!${n}.completed) {`);for(let E of c)l.emitLine(`${i} ${E};`);let h=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}.${h} = (${v}){0};`),l.emitLine(`${i} ${r.resumeFunctionName}(&${n});`),l.emitLine(`${i}}`)}o.effectHandlerParamDrops=_,o.continuationVariables=f}else{let f=o.effectHandlerParamDrops;o.effectHandlerParamDrops=c;let p=o.localShadowedVariables,_=new Set(p);for(let y of u)_.add(me(y.label));o.localShadowedVariables=_;let d=R(e,i,o);d&&l.emitLine(`${i}${d};`),o.localShadowedVariables=p,o.effectHandlerParamDrops=f}}function Ey(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ft(e,n,r);let a=e.$.deferredDupExpressions[0];if(I(a)&&((o=a.$)!=null&&o.variableName))return Re(a.$.variableName,a.$.env)}return t}function $y(e,t,n){var r,i,o;if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((i=e.$)!=null&&i.variableName){let s=e.$.variableName;e.$.variableName=void 0;let l=R(e,t,n);e.$.variableName=s;let u=H(e.$.type,n),c=me(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=R(e,t,n);n.emitter.emitLine(`${t}${s};`)}Ft(e,t,n);let a=e.$.deferredDupExpressions[0];if(I(a)&&((o=a.$)!=null&&o.variableName))return Re(a.$.variableName,a.$.env)}return R(e,t,n)}function Cy(e){var t,n;if(I(e)&&T(e,L.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&Y(r))return Re(r.token.value,(t=r.$)==null?void 0:t.env)}if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===L.___drop[0]&&Y(e.func.args[0])){let r=e.func.args[0];return Re(r.token.value,(n=r.$)==null?void 0:n.env)}}function $r(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let f of n.$.deferredDropExpressions){let p=Hr(f);p&&l.add(p)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(f=>{let p=Hr(f);return!p||l.has(p)?!1:pe(n.$.env,p).length>0}):t.pendingDeferredDrops.filter(f=>{let p=Hr(f);if(!p||l.has(p))return!1;if(u&&u.size>0){let _=Cy(f);if(_&&u.has(_))return!1}return!0});if(c.length>0){let f=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${f}`);for(let p of c){let _=R(p,e,t);_&&t.emitter.emitLine(`${e}${_};`)}}}}function by(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",f=a!==void 0&&o.effectInfos&&o.effectInfos.length>1?o.effectInfos[a].resumeTypeCName:o.resumeTypeCName;if(u&&f!=="void"){let p=R(u,t,n);s.emitLine(`${t}${i}.${c} = ${p};`)}if(l.effectHandlerParamDrops)for(let p of l.effectHandlerParamDrops)s.emitLine(`${t}${p};`);return s.emitLine(`${t}${o.resumeFunctionName}(&${i});`),""}function lf(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let f=r.continuationVariables.get("resume");if(f){if("directReturnVar"in f){if(!f.isUnitReturn){let p=e.args[0];if(p){let _=R(p,t,n);_&&n.emitter.emitLine(`${t}${f.directReturnVar} = ${_};`)}}return $r(t,r,e,!1,!0),f.directExitLabel&&n.emitter.emitLine(`${t}goto ${f.directExitLabel};`),""}return by(e,t,n,f)}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!xe(e.$.type))return"// Error: return expression missing temporary variable name";let f,p=!1;if((r.inAsyncStateMachine||r.inEffectStateMachine)&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,f=R(i,t,n),i.$.variableName=h,p=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=R(i,t,n);i.$.variableName=h;let E=H(i.$.type,n),k=Re(h,i.$.env);k!==v&&n.emitter.emitLine(`${t}${E} ${k} = ${v};`),f=k}else f=R(i,t,n);let _=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Ft(i,t,r);let h=i.$.deferredDupExpressions[0];I(h)&&((u=h.$)!=null&&u.variableName)&&(f=Re(h.$.variableName,h.$.env),_=!0)}let d=H(e.$.type,n),y=e.$.variableName?Re(e.$.variableName,e.$.env):void 0;if(!_&&!xe(e.$.type)&&y&&y!==f&&n.emitter.emitLine(`${t}${d} ${y} = ${f};`),e.$.deferredDropExpressions&&Qt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine){$r(t,r,e,!0);let F=_?f:y??f;return xe(e.$.type)||n.emitter.emitLine(`${t}sm->result = ${F};`),n.emitter.emitLine(`${t}sm->completed = 1;`),"return"}let h=r.inAsyncStateMachine.futureType,E=cn(h).isFuture.outputType,k=xe(E);$r(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let b;return k||(b=e.$.variableName&&p?e.$.variableName:e.$.variableName||f),qr({emitter:n.emitter,indent:t,resultCode:b,debugLabel:n.currentFunctionName}),""}return $r(t,r,e),xe(e.$.type)?"return":`return ${_?f:y??f}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&Qt(e,t,n),r.inAsyncStateMachine||r.inEffectStateMachine){if(r.inEffectStateMachine)return $r(t,r,e,!0),n.emitter.emitLine(`${t}sm->completed = 1;`),"return";let f=r.inAsyncStateMachine.futureType,_=cn(f).isFuture.outputType,d=xe(_);$r(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let y=d?void 0:`(${H(_,n)}){0}`;return qr({emitter:n.emitter,indent:t,resultCode:y,debugLabel:n.currentFunctionName}),""}return $r(t,r,e),"return"}}function uf(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=$o(e,n),o=Ey(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,V.return)){let i=R(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=$y(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function cf(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
|
|
9952
|
+
`)}function Ol(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct { // Vtable for ${S(e)}`);let o=new Set,a=new Set([L.___dup[0],L.___drop[0],L.___dispose[0],L.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(Jt(s)){let l=s.isFn.callType,u=H(l.return.type,n),c=l.parameters.map(f=>{let p=H(f.type,n),_=me(f.label);return`${p} ${_}`}).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=me(l.label);if(ae(l.type)){let c=l.type;if(c.parameters.length>0){let f=c.parameters[0];if(f&&f.label==="self"){let p=H(c.return.type,n),_=c.parameters.map((d,y)=>{if(y===0)return"void* self";{let g=H(d.type,n),h=me(d.label);return`${g} ${h}`}}).join(", ");r.emitDeclarationLine(` ${p} (*${u})(${_}); // Method pointer for ${l.label}`)}}}else{let c=H(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`typedef struct { // ${e.typeName||"Dyn"} : ${S(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 Rl(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,i]of e.dynImpls){let a=`yo_dyn_box_${((r=e.types[i.concreteType.id])==null?void 0:r.cName)||`unknown_${i.concreteType.id}`}`;if(n.has(a))continue;n.add(a);let s=H(i.concreteType,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" yo_ref_header_t header;"),t.emitDeclarationLine(` ${s} value;`),t.emitDeclarationLine(`} ${a};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${a}* __yo_new_${a}(${s} value);`),t.emitDeclarationLine(`void __yo_dispose_${a}(void* ptr);`),t.emitDeclarationLine("")}}function ff(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 p in e.types){let{type:_,cName:d}=e.types[p];if(!
|
|
10146
|
+
`);for(let p in e.types){let{type:_,cName:d}=e.types[p];if(!Ye(_)){if(bn(_))e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`);else if(Ie(_)){if(_.isNewtype&&_.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}else if(Me(_)){let y=Nn(_),g=or(_);!y&&!g&&e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),ky(e),wy(e),Ul(e),Fy(e);for(let p in e.types){let{type:_,cName:d}=e.types[p];Ye(_)||Me(_)&&or(_)&&Pl(_,d,e)}let i=[];for(let p in e.types){let{type:_,cName:d}=e.types[p];Ye(_)||(Ie(_)?i.push({typeId:p,type:_,cName:d,kind:"struct"}):Me(_)&&!or(_)&&!Nn(_)?i.push({typeId:p,type:_,cName:d,kind:"enum"}):qe(_)&&i.push({typeId:p,type:_,cName:d,kind:"tuple"}))}let o=new Map,a=new Map(i.map(p=>[p.typeId,p])),s=new Map(i.map(p=>[p.cName,p.typeId]));function l(p){if(Xe(p)){let d=p.childType;if(Ie(d)&&d.isNewtype)return d}else if(Me(p)){let _=Nn(p);if(_&&Xe(_)){let y=_.childType;if(Ie(y)&&y.isNewtype)return y}}return null}for(let{typeId:p,type:_,kind:d}of i)if(o.set(p,new Set),d==="struct"&&Ie(_))for(let y of _.fields){let g=y.type;G(g)&&g.resolvedConcreteType&&(g=g.resolvedConcreteType);let h=l(g);if(h){let v=H(h,e),E=s.get(v);E&&E!==p&&a.has(E)&&o.get(p).add(E)}if(Me(g)){if(!Nn(g)){let v=H(g,e),E=s.get(v);E&&E!==p&&a.has(E)&&o.get(p).add(E)}}else if(Ie(g)&&g.isNewtype){let v=H(g,e),E=s.get(v);E&&E!==p&&a.has(E)&&o.get(p).add(E)}else if(Ie(g)&&!g.isReferenceSemantics&&!g.isNewtype){let v=H(g,e),E=s.get(v);E&&E!==p&&a.has(E)&&o.get(p).add(E)}else if(qe(g)){let v=H(g,e),E=s.get(v);E&&E!==p&&a.has(E)&&o.get(p).add(E)}}else if(d==="enum"&&Me(_)){for(let y of _.variants)if(y.fields){for(let g of y.fields)if(Me(g.type)){let h=H(g.type,e),v=s.get(h);v&&v!==p&&a.has(v)&&o.get(p).add(v)}else if(Ie(g.type)&&g.type.isNewtype){let h=H(g.type,e),v=s.get(h);v&&v!==p&&a.has(v)&&o.get(p).add(v)}else if(qe(g.type)){let h=H(g.type,e),v=s.get(h);v&&v!==p&&a.has(v)&&o.get(p).add(v)}else if(Ie(g.type)&&!g.type.isReferenceSemantics&&!g.type.isNewtype){let h=H(g.type,e),v=s.get(h);v&&v!==p&&a.has(v)&&o.get(p).add(v)}}}else if(d==="tuple"&&qe(_)){for(let y of _.fields)if(qe(y.type)){let g=H(y.type,e),h=s.get(g);h&&h!==p&&a.has(h)&&o.get(p).add(h)}else if(Me(y.type)){let g=H(y.type,e),h=s.get(g);h&&h!==p&&a.has(h)&&o.get(p).add(h)}else if(Ie(y.type)&&!y.type.isReferenceSemantics&&!y.type.isNewtype){let g=H(y.type,e),h=s.get(g);h&&h!==p&&a.has(h)&&o.get(p).add(h)}}let u=new Map;for(let[p,_]of o)u.set(p,_.size);let c=[];for(let[p,_]of u)_===0&&c.push(p);let f=[];for(;c.length>0;){let p=c.shift(),_=a.get(p);f.push({type:_.type,cName:_.cName,kind:_.kind});for(let[d,y]of o)if(y.has(p)){let g=(u.get(d)||1)-1;u.set(d,g),g===0&&c.push(d)}}if(f.length<i.length)for(let p of i)f.find(_=>_.cName===p.cName)||f.push({type:p.type,cName:p.cName,kind:p.kind});for(let{type:p,cName:_,kind:d}of f)d==="struct"&&Ie(p)?Ay(p,_,e):d==="enum"&&Me(p)?Pl(p,_,e):d==="tuple"&&qe(p)&&Iy(p,_,e);for(let p in e.types){let{type:_,cName:d}=e.types[p];Ye(_)||Me(_)&&Nn(_)&&Pl(_,d,e)}for(let p in e.types){let{type:_,cName:d}=e.types[p];Ye(_)||(et(_)?Ol(_,d,e):Rt(_)&&Ny(_,d,e))}Ly(e)}function ky(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 wy(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 Ul(e){var n;let t=e.emitter;if(e.isoTypes){for(let[r,i]of e.isoTypes){let{childTypeCName:o,structGenerated:a}=i;a||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${o} value; // Inner value`),t.emitDeclarationLine(`} ${r}_struct;`),t.emitDeclarationLine(`typedef ${r}_struct* ${r};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_iso_${r}(${o} value);`),t.emitDeclarationLine(""),i.structGenerated=!0)}for(let[r,i]of e.isoTypes){let{optionTypeCName:o,extractGenerated:a}=i;a||!o||t.emitDeclarationLine(`${o} __yo_iso_extract_${r}(${r} iso);`)}for(let[r,i]of e.isoTypes){let{structGenerated:o}=i;o&&(t.emitDeclarationLine(`void __yo_iso_dispose_${r}(${r} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${r}(void* ptr);`))}for(let[r,i]of e.isoTypes){let{childTypeCName:o,createGenerated:a}=i;a||(t.emitLine(`
|
|
10147
10147
|
${r} __yo_create_iso_${r}(${o} value) {
|
|
10148
10148
|
${r} iso = (${r})__yo_malloc(sizeof(${r}_struct));
|
|
10149
10149
|
iso->header.ref_count = 1;
|
|
@@ -10176,7 +10176,7 @@ ${o} __yo_iso_extract_${r}(${r} iso) {
|
|
|
10176
10176
|
result.data.Some.value = iso->value;
|
|
10177
10177
|
}
|
|
10178
10178
|
return result;
|
|
10179
|
-
}`)}i.extractGenerated=!0}}}}function
|
|
10179
|
+
}`)}i.extractGenerated=!0}}}}function Fy(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 Ly(e){var n;let t=e.emitter;if(e.arcTypes){for(let[r,i]of e.arcTypes){let{childTypeCName:o}=i;i.structGenerated||(t.emitDeclarationLine(`struct ${r}_struct { // Arc wrapper`),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(` ${o} value; // Inner value`),t.emitDeclarationLine("};"),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_arc_${r}(${o} value);`),t.emitDeclarationLine(""),i.structGenerated=!0)}for(let[r,i]of e.arcTypes)i.structGenerated&&(t.emitDeclarationLine(`void __yo_arc_dispose_${r}(${r} arc);`),t.emitDeclarationLine(`static void __yo_dispose_arc_${r}(void* ptr);`));for(let[r,i]of e.arcTypes){let{childTypeCName:o,createGenerated:a}=i;a||(t.emitLine(`
|
|
10180
10180
|
${r} __yo_create_arc_${r}(${o} value) {
|
|
10181
10181
|
${r} arc = (${r})__yo_malloc(sizeof(${r}_struct));
|
|
10182
10182
|
arc->header.ref_count = 1;
|
|
@@ -10191,7 +10191,7 @@ void __yo_arc_dispose_${r}(${r} arc) {
|
|
|
10191
10191
|
}`),t.emitLine(`
|
|
10192
10192
|
static void __yo_dispose_arc_${r}(void* ptr) {
|
|
10193
10193
|
__yo_arc_dispose_${r}((${r})ptr);
|
|
10194
|
-
}`),i.disposeGenerated=!0}}}function
|
|
10194
|
+
}`),i.disposeGenerated=!0}}}function Ay(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=H(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${S(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${S(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${S(e)}`);for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Iy(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${S(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=H(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Ny(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${S(e)}`);for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Pl(e,t,n){let r=n.emitter,i=Nn(e);if(i){let l=H(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${S(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(or(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${S(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Yn(e,u.name,n),f=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${f}`)}}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=Yn(e,u.name,n),f=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${f}`)}}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=>!xe(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let f of u){let p=H(f.type,n),_=me(f.label);r.emitDeclarationLine(` ${p} ${_};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${S(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function xy(e,t){let n=rr(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!Wt(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ie({type:r,env:t},{type:s,env:t}))return a}let i=ja({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function Sy(e,t,n){var s;let r=xy(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===L.dispose[0]);if(i<0)return;let o=r.fields[i];if(!be(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,f=c.specializedType??c.type;if(c.funcName===L.dispose[0]&&f.SelfType&&ie({type:f.SelfType,env:t},{type:e,env:t}))return u.cName}}function _f(e){var t,n,r,i,o,a,s;e.emitter.emitLine("// Function implementations"),Xc(e.emitter,e.debugAsyncAwait),cf(e.emitter,e.debugParallelism),Dy(e),Oy(e);for(let l in e.functions){let{value:u,cName:c}=e.functions[l],f=c==="__yo_user_main",p=(n=(t=u.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,_=p&&p.hasEffects;if(!f&&!u.type.isClosure&&((r=u.specializedFunctionCaches)==null?void 0:r.length)>0||!f&&!_&&!u.type.isClosure&&!u.specializedType&&(((i=u.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&[...u.type.implicitParameters,...u.type.parameters.filter(b=>b.isImplicit)].some(b=>ae(b.type)))continue;let y=u.specializedType&&!jn(u.type);if(!f&&!_&&(Hi(u.type)&&!u.type.isClosure||((o=u.specializedFunctionCaches)==null?void 0:o.length)>0&&!u.type.isClosure||u.specializedType&&!y||Vi(u)||go(u)||u.isIoAsyncStateMachineClosure))continue;let g=u.specializedType??u.type,h=!_&&(g.parameters.some(b=>Ye(b.type))||g.forallParameters.length>0),v=Ye(g.return.type),E=G(g.return.type)&&g.return.type.requiredTraits.length>0;if(h||v&&!E)continue;let k=(s=(a=u.body)==null?void 0:a.$)==null?void 0:s.effectAnalysis;if(k&&k.hasEffects){continue}mf(u,c,e)}if(e.deferredEffectfulFunctions)for(let l of e.deferredEffectfulFunctions){let{functionValue:u,info:c}=l;u.body&&of(u.body,c,e,u)}Ul(e)}function pf(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(!xe(i))throw new Error(`main function must return unit , but it returns ${S(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
|
|
10214
|
+
`)}function df(e){var r,i,o,a,s,l,u;let t=[],n=[];for(let c in e.functions){let{value:f,cName:p}=e.functions[c];if(Vi(f))continue;let _=(i=(r=f.body)==null?void 0:r.$)==null?void 0:i.effectAnalysis;if(!_||!_.hasEffects)continue;let d=f.specializedType??f.type;if(f.specializedType){if(jn(f.specializedType))continue;let h=f.specializedType.parameters.some(E=>Ye(E.type)),v=Ye(f.specializedType.return.type);if(h||v)continue}let y=_.effectCallPoints.some(h=>h.isTransitiveEffectCall);_.effectCallPoints.some(h=>!h.isTransitiveEffectCall)||!y?t.push({functionValue:f,cFunctionName:p,functionType:d,effectAnalysis:_}):n.push({functionValue:f,cFunctionName:p,functionType:d,effectAnalysis:_})}for(let c of t)zl(c.functionValue,c.cFunctionName,c.functionType,c.effectAnalysis,e);for(let c in e.functions){let{value:f,cName:p}=e.functions[c];if(!((o=f.body)!=null&&o.$)||(a=f.body.$.effectAnalysis)!=null&&a.hasEffects||!f.type.isClosure&&((s=f.specializedFunctionCaches)==null?void 0:s.length)>0)continue;let _=f.type,d=_.implicitParameters;for(let y of d){if(!ae(y.type))continue;let g=ts(f.body,y.label,y.type);if(!g.hasEffects)continue;let h=g.effectCallPoints[0],v=!1;if(h){let F=h.expr;if(F&&"func"in F){let $=(l=F.func.$)==null?void 0:l.value;$&&be($)&&(g.handlerValue=$,v=!!$.isControlFunction)}}if(!v){let F=y.type;F.forallParameters&&F.forallParameters.length>0&&(v=!0)}let E=d.some(F=>F.isEffectRowSpread);if(!v&&(f.type.isClosure||!E))continue;f.body.$.effectAnalysis=g;let k,b=f.closureInfo;b!=null&&b.captureType&&Ie(b.captureType)&&(k=(u=e.types[b.captureType.id])==null?void 0:u.cName),zl(f,p,_,g,e,!0,k);break}}for(let c of n)zl(c.functionValue,c.cFunctionName,c.functionType,c.effectAnalysis,e)}function zl(e,t,n,r,i,o=!1,a){var g;let s=xe(n.return.type)?"void":H(n.return.type,i),l=r.effectCallPoints.length>0?r.effectCallPoints[0].operationArgTypes.map(h=>H(h,i)):[],u=r.effectCallPoints.length>0?H(r.effectCallPoints[0].operationResultType,i):"void",c=`${me(t)}_sm`,f=`${me(t)}_resume`,p;r.effectHandlerInfos&&r.effectHandlerInfos.length>1&&(p=r.effectHandlerInfos.map(h=>({yieldTypeCNames:h.operationArgTypes.map(v=>H(v,i)),resumeTypeCName:H(h.operationResultType,i)})));let _;if(o&&((g=e.closureInfo)!=null&&g.captureType)){let h=e.closureInfo.captureType;Ie(h)&&h.fields.length>0&&(_=new Set(h.fields.map(v=>v.label)))}let d={structName:c,resumeFunctionName:f,analysis:r,functionType:n,returnTypeCName:s,yieldTypeCNames:l,resumeTypeCName:u,effectInfos:p,isClosure:o,closureCaptureTypeCName:a,closureCapturedVarNames:_};nf(d,i),rf(d,i),i.deferredEffectfulFunctions||(i.deferredEffectfulFunctions=[]),i.deferredEffectfulFunctions.push({functionValue:e,cFunctionName:t,info:d});let y=i.functions[e.funcId];y&&(y.effectStateMachineInfo=d)}function mf(e,t,n){var y,g,h,v,E,k;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&He(o.return.type)){let b=aa(e.body);(y=b==null?void 0:b.$)!=null&&y.asyncStateMachineStructName?a=`${b.$.asyncStateMachineStructName}*`:(g=e.body.$)!=null&&g.type&&G(e.body.$.type)&&He(e.body.$.type)&&(a=H(e.body.$.type,n))}e.body&&G(o.return.type)&&!He(o.return.type)&&!e.specializedType&&(h=e.body.$)!=null&&h.type&&(a=H(e.body.$.type,n));let s=a?Oi(o,t,n,a):Oi(o,t,n);r.emitLine(`${s} {`);let l=n.currentFunctionName,u=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let c=n.currentClosureCaptures,f=n.currentClosureCaptureFrameLevel,p=n.currentClosureType,_=n.currentClosureCaptureTypeCName;if(o.isClosure){let b=e.closureInfo;if(b){let F=b.closureType.isFn,$=b.captureType;if(n.currentClosureType=F.callType,$&&Ie($)&&$.fields.length>0){let C=$.fields.map(N=>N.label);n.currentClosureCaptures=C,n.currentClosureCaptureFrameLevel=e.frameLevel;let A=(v=n.types[$.id])==null?void 0:v.cName;A&&(n.currentClosureCaptureTypeCName=A)}}}if(e.funcName===L.___dispose[0]&&o.SelfType){let b=Sy(o.SelfType,e.type.env,n);if(b){let F=((E=o.parameters[0])==null?void 0:E.label)==="__yo_self"?"__yo_self":((k=o.parameters[0])==null?void 0:k.label)??"__yo_self";r.emitLine(` ${b}(${F}); // Call user's dispose method`)}}Vy(e.body,o," ",n),n.currentFunctionName=l,n.currentFunctionType=u,n.currentClosureCaptures=c,n.currentClosureCaptureFrameLevel=f,n.currentClosureType=p,n.currentClosureCaptureTypeCName=_,r.emitLine("}")}function Vy(e,t,n,r){var o,a,s,l,u,c,f,p,_,d;let i=r.emitter;if(I(e)&&T(e,V.begin)){let y=e.args;r.pendingDeferredDrops=[...((o=e.$)==null?void 0:o.deferredDropExpressions)??[]];let g=!1;for(let h=0;h<y.length-1;h++){let v=y[h];T(v,V.return)&&(g=!0);let E=R(v,n,r);if(E&&(!v.$||!wt(v.$.env.modulePath,E))&&i.emitLine(`${n}${E};`),g)break}if(!g&&y.length>0){let h=y[y.length-1];if(He(t.return.type)&&h){let E=vn(h),k=(a=h.$)==null?void 0:a.type,b=k&&He(k);if(E||b){let F=R(h,n,r);if((s=e.$)!=null&&s.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&k){let $=H(k,r),C=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${$} ${C} = ${F};`),Qt(e,n,r),i.emitLine(`${n}return ${C};`)}else i.emitLine(`${n}return ${F};`);return}}else if(h&&xe(t.return.type)){let E=R(h,n,r);E&&i.emitLine(`${n}${E};`),Qt(e,n,r)}else if(h){let E=Ut((l=h.$)==null?void 0:l.controlFlow),k=xe((u=h.$)==null?void 0:u.type)||I(h)&&T(h,V.tuple)&&h.args.length===0,b=y.length>1?y[y.length-2]:null,F=Ut((c=b==null?void 0:b.$)==null?void 0:c.controlFlow);if(!(k&&F))if(E){let $=R(h,n,r);$&&i.emitLine(`${n}${$};`)}else{if((f=h.$)!=null&&f.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){if((p=h.$)!=null&&p.variableName){let A=H(t.return.type,r),N=Re(h.$.variableName,h.$.env),x=R(h,n,r);N!==x&&i.emitLine(`${n}${A} ${N} = ${x};`)}Ft(h,n,r);let C=h.$.deferredDupExpressions[0];if(I(C)&&((_=C.$)!=null&&_.variableName)){let A=me(C.$.variableName);Qt(e,n,r),i.emitLine(`${n}return ${A};`);return}}let $=R(h,n,r);Qt(e,n,r),$&&i.emitLine(`${n}return ${$};`)}}}else if(g&&y.length>0){let h=y[y.length-1];h&&xe((d=h.$)==null?void 0:d.type)}}else if(Qt(e,n,r),xe(t.return.type)){let y=R(e,n,r);y&&i.emitLine(`${n}${y};`)}else uf(e,n,r)}function yf(e){var t,n;for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(Vi(i)||!i.specializedType||!jn(i.type)||jn(i.specializedType))continue;let a=i.specializedType.parameters.some(u=>Ye(u.type)),s=Ye(i.specializedType.return.type);if(a||s)continue;let l=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;if(l&&l.hasEffects){continue}mf(i,o,e)}}function Dy(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,75 +10624,75 @@ static void yo_init_process_cleanup(void) {
|
|
|
10624
10624
|
cleanup_initialized = true;
|
|
10625
10625
|
atexit(yo_process_cleanup);
|
|
10626
10626
|
#endif
|
|
10627
|
-
}`)}function
|
|
10628
|
-
// Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${Ko(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"};ca(n,i),
|
|
10627
|
+
}`)}function My(e){var n;let t=e.emitter;for(let r in e.types){let{type:i,cName:o}=e.types[r];if(Ie(i)&&i.isReferenceSemantics){if(i.fields.some(l=>Ye(l.type)))continue;let s=`__yo_traverse_${o}`;t.emitLine(`void ${s}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${o}* obj = (${o}*)ptr;`);for(let l of i.fields){let u=me(l.label),c=l.type;if(Ie(c)&&c.isReferenceSemantics)t.emitLine(` if (obj->${u}) {`),t.emitLine(` visit(obj->${u});`),t.emitLine(" }");else if(Me(c)){let f=c;if(!Nn(f)){t.emitLine(` switch (obj->${u}.tag) {`);for(let _ of f.variants||[])if(_.fields&&_.fields.length>0){for(let d of _.fields)if(Ie(d.type)&&d.type.isReferenceSemantics){let y=`YO_${(n=f.id)==null?void 0:n.toUpperCase()}_${_.name.toUpperCase()}`;t.emitLine(` case ${y}:`),t.emitLine(` if (obj->${u}.data.${_.name}.${me(d.label)}) {`),t.emitLine(` visit(obj->${u}.data.${_.name}.${me(d.label)});`),t.emitLine(" }"),t.emitLine(" break;");break}}t.emitLine(" }")}}}t.emitLine("}"),t.emitLine("")}}}function Oy(e){var n;let t=e.emitter;My(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(Ie(i)&&i.isReferenceSemantics){if(i.fields.some(f=>Ye(f.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(f=>{let p=H(f.type,e),_=me(f.label);return`${p} ${_}`}).join(", ");t.emitLine(`${o}* ${s}(${l}) {`),t.emitLine(` ${o}* obj = (${o}*)__yo_malloc(sizeof(${o}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;");let u=i.trait.fields.find(f=>f.label===L.___dispose[0]&&f.assignedValue&&be(f.assignedValue));if(u&&be(u.assignedValue)){let f=u.assignedValue,p=((n=e.functions[f.funcId])==null?void 0:n.cName)||f.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${p};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`),i.fields.forEach(f=>{let p=me(f.label);t.emitLine(` obj->${p} = ${p};`)}),Br(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function gf(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let i=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`void ${i}(void* closure_ptr);`)}for(let[r,{closureCName:i,captureType:o,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=o.trait.fields.find(f=>f.label===L.___drop[0]);if(!l||!l.assignedValue||!be(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function hf(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let i=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`yo_dyn_${r.dynType.id}`,a=`${(()=>{var c,f;let s=(c=e.types[r.concreteType.id])==null?void 0:c.cName;if(s)return s;let l=In(r.concreteType);return(l?(f=e.types[l.id])==null?void 0:f.cName:void 0)||`unknown_${r.concreteType.id}`})()}_${i}`;t.set(a,r)}e.dynImpls=t}var os=class{constructor(){this.emitter=new So}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
|
|
10628
|
+
// Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${Ko(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"};ca(n,i),Vc(n,i),Dc(i),yc(i),gc(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
|
-
`),
|
|
10635
|
+
`),ff(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
|
-
`),
|
|
10641
|
-
`;let a=
|
|
10642
|
-
`;let i=r.token.value,o=Dt(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function
|
|
10643
|
-
`;if((u=r.$)!=null&&u.env){let x=pe(r.$.env,C);if(x.length>0&&x[x.length-1].isCompileTimeOnly)return""}let
|
|
10640
|
+
`),hf(i),Rl(i),Nc(i),Oc(i),df(i),_f(i),Uc(i),zc(i),Bc(i),Pc(i),Ic(i),pf(i),gf(i),Rc(i),yf(i)}print(){return this.emitter.print()}};var vf=0;function Tf(e){var t,n;return(t=e.$)!=null&&t.variableName?!0:(((n=e.$)==null?void 0:n.value)!==void 0,!1)}function as(e,t){var n;if(I(e)){(n=e.$)!=null&&n.variableName&&t.add(e.$.variableName);for(let r of e.args)as(r,t);e.func&&as(e.func,t)}}function Ef(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=Hr(o);if(a&&e.has(a)){let s=R(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function $f(e,t,n){var l;if(e.args.length===0)return"true";if(e.args.length===1)return R(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(_t(c)){if(c.value===!1)return"false";continue}r.push(u)}if(r.length===0)return"true";if(r.length===1)return R(r[0],t,n);if(!r.slice(1).some(u=>Tf(u)))return`(${r.map(c=>R(c,t,n)).join(" && ")})`;let o=`__yo_sc_${vf++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=R(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (${c}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],f=new Set;as(c,f),Ef(f,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Cf(e,t,n){var l;if(e.args.length===0)return"false";if(e.args.length===1)return R(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(_t(c)){if(c.value===!0)return"true";continue}r.push(u)}if(r.length===0)return"false";if(r.length===1)return R(r[0],t,n);if(!r.slice(1).some(u=>Tf(u)))return`(${r.map(c=>R(c,t,n)).join(" || ")})`;let o=`__yo_sc_${vf++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=R(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (!(${c})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],f=new Set;as(c,f),Ef(f,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function bf(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=R(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!rn(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${H(o,n)}(${i})`}function Bl(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return q(t)&&rn(t.value)&&e.args.length===1}function kf(e,t,n){var c;if(!Bl(e))return"/* Error: generateArcTypeCall called on non-Arc type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=R(a,t,n),l=H(i,n),u=H(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 wf(e,t,n){var a,s,l,u;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(s=e.$)==null?void 0:s.type,o=(l=e.$)==null?void 0:l.variableName;if(We(i)&&r){let c=n,f=r.map(_=>{var y,g;let d=R(_,t,n);if((y=_.$)!=null&&y.deferredDupExpressions&&_.$.deferredDupExpressions.length>0){Ft(_,t,c);let h=_.$.deferredDupExpressions[0];if(I(h)&&((g=h.$)!=null&&g.variableName))return Re(h.$.variableName,h.$.env)}return d}).join(", "),p=H(i,n);if(o&&((u=e.$)!=null&&u.type)){let _=`(${p}){ .data = { ${f} } }`,d=Dt(e.$.type,o,n);return n.emitter.emitLine(`${t}${d} = ${_};`),o}else return`(${p}){ .data = { ${f} } }`}}function Ff(e,t,n){var _,d,y;let r=n.emitter,i=e.args[0],o=e.args[1],a=(_=i.$)==null?void 0:_.value;if(!a||!q(a)||!We(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!ft(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=H(s,n),c=R(o,t,n),f=((d=e.$)==null?void 0:d.variableName)||`temp_array_${Date.now()}`,p=`i_${yt(((y=e.$)==null?void 0:y.env.modulePath)??"")}`;return r.emitLine(`${t}${u} ${f};`),r.emitLine(`${t}for (int ${p} = 0; ${p} < ${l.value}; ${p}++) {`),r.emitLine(`${t} ${f}.data[${p}] = ${c};`),r.emitLine(`${t}}`),f}function Lf(e,t,n){var l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$,C,A,N,x,D,P;if((l=e.$)!=null&&l.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(I(r)&&T(r,":",2)&&(o=!0,r=r.args[0]),I(r)&&T(r,V.comptime)||I(r)&&T(r,V.given))return"";if((u=r.$)!=null&&u.pathCollection&&((c=r.$)==null?void 0:c.pathCollection.length)>0){let U=r.$.pathCollection[0];if(U&&U.length>=2){let j=U[0];if(typeof j=="string"&&((f=r.$)!=null&&f.env)){let O=pe(r.$.env,j);if(O.length>0&&O[O.length-1].isCompileTimeOnly)return""}}}if(Y(r)&&((p=r.$)!=null&&p.env)){let U=r.token.value,j=pe(r.$.env,U);if(j.length>0&&j[j.length-1].isCompileTimeOnly)return""}if(!((_=r.$)!=null&&_.type))return`// Error: No type information for left-hand side ${w(r)}
|
|
10641
|
+
`;let a=R(r,t,n),s=!1;if((d=e.$)!=null&&d.variableName){let U=e.$.variableName,j=n;if((j.inAsyncStateMachine||j.inEffectStateMachine)&&a.startsWith("sm->")){let z=(y=j.stateMachineVariables)==null?void 0:y.get(U);if(!z&&j.stateMachineVariables){for(let[,W]of j.stateMachineVariables)if(W.name===U){z=W;break}}if(z&&z.kind!=="outer"){let W=`var_${z.id}`;xe(r.$.type)||n.emitter.emitLine(`${t}sm->${W} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let z=Dt(r.$.type,U,n);We(r.$.type)?n.emitter.emitLine(`${t}${z} = ${a}; // Save old value for later use`):xe(r.$.type)||n.emitter.emitLine(`${t}${z} = ${a}; // Save old value for later use`)}}if(We(r.$.type)){let U=R(i,t,n),j=I(i)&&((g=i.$)==null?void 0:g.closureFunctionValue)&&((h=i.$)==null?void 0:h.type)&&wn(i.$.type),O=n,z=U;if(!j&&((v=i.$)!=null&&v.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((E=i.$)!=null&&E.variableName&&((k=i.$)!=null&&k.type)){let ee=Re(i.$.variableName,i.$.env);if(ee!==U.trim()){let de=i.$.convertedRuntimeType||i.$.type,se=H(de,n);n.emitter.emitLine(`${t}${se} ${ee} = ${U};`)}}Ft(i,t,O);let W=i.$.deferredDupExpressions[0];I(W)&&((b=W.$)!=null&&b.variableName)&&(z=Re(W.$.variableName,W.$.env))}if(o){let W=Dt(r.$.type,R(r,t,n),n);n.emitter.emitLine(`${t}${W} = ${z};`)}else n.emitter.emitLine(`${t}${a} = ${z};`)}else{let U=R(i,t,n),j=I(i)&&((F=i.$)==null?void 0:F.closureFunctionValue)&&(($=i.$)==null?void 0:$.type)&&wn(i.$.type),O=n,z=U;if(!j&&((C=i.$)!=null&&C.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((A=i.$)!=null&&A.variableName&&((N=i.$)!=null&&N.type)){let ee=Re(i.$.variableName,i.$.env);if(ee!==U.trim()){let de=i.$.convertedRuntimeType||i.$.type,se=H(de,n);n.emitter.emitLine(`${t}${se} ${ee} = ${U};`)}}Ft(i,t,O);let W=i.$.deferredDupExpressions[0];I(W)&&((x=W.$)!=null&&x.variableName)&&(z=Re(W.$.variableName,W.$.env))}if(!xe(r.$.type)){let W=r.$.type,ee=(D=i.$)==null?void 0:D.type,de,se=wt(i.$.env.modulePath,z.trim());se&&n.tempVarAsyncStructNames&&(de=n.tempVarAsyncStructNames.get(z.trim()));let K=o&&ee&&He(W)&&He(ee),te;se&&K?de?te=`${de}*`:te=H(ee,n):K&&de?te=`${de}*`:te=H(K?ee:W,n);let re=(O.inAsyncStateMachine||O.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!re?te+" ":""}${a} = ${z};`)}}return s?"":((P=e.$)==null?void 0:P.variableName)??""}function Af(e,t,n){var s,l,u,c,f,p,_;let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=(s=r.$)==null?void 0:s.type;if(!i||!He(i))return"// Error: await argument must be a Future type";let o=cn(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(Hn(e)){let d=R(r,t,n),y=H(i,n),g=o.isFuture.outputType,h=a.emitter,v=xe(g)||G(g)&&xe(((l=e.$)==null?void 0:l.type)??g),E=(u=e.$)!=null&&u.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",k=(c=e.$)!=null&&c.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";h.emitLine(`${t}// Synchronous await (io.await outside state machine)`),h.emitLine(`${t}${y} ${E} = ${d};`),h.emitLine(`${t}int ${k} = ${E}->state;`),ua((f=r.$)==null?void 0:f.type)||(h.emitLine(`${t}if (${k} == 0 && ${E}->__yo_resume_fn) {`),Py(e,E,t,n),h.emitLine(`${t} __yo_incr_rc((void*)${E}); // event loop reference`),h.emitLine(`${t} ${E}->__yo_resume_fn((void*)${E});`),h.emitLine(`${t}}`)),h.emitLine(`${t}{`),h.emitLine(`${t} int __await_state = ${E}->state;`),h.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),h.emitLine(`${t} yo_async_poll_step();`),h.emitLine(`${t} __await_state = ${E}->state;`),h.emitLine(`${t} }`),h.emitLine(`${t} if (__await_state == -2) {`);let F=cn(i),$=((p=F==null?void 0:F.isFuture.effects)==null?void 0:p.some(C=>ae(C.type)||C.isEffectRowSpread))??!1;if($?(h.emitLine(`${t} if (${k} == -2) {`),h.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),h.emitLine(`${t} abort();`),h.emitLine(`${t} }`)):(h.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),h.emitLine(`${t} abort();`)),h.emitLine(`${t} }`),h.emitLine(`${t}}`),v)return"";{let C=((_=e.$)==null?void 0:_.variableName)||"__sync_await_result",A=H(g,n),N=Dt(g,C,n);if($){if(h.emitLine(`${t}${N};`),h.emitLine(`${t}if (${E}->state == -1) {`),Be(g)){let x=pr(g,n);x?h.emitLine(`${t} ${C} = ${x}(${E}->result);`):h.emitLine(`${t} ${C} = ${E}->result;`)}else h.emitLine(`${t} ${C} = ${E}->result;`);h.emitLine(`${t}} else {`),h.emitLine(`${t} ${C} = (${A}){0};`),h.emitLine(`${t}}`)}else if(Be(g)){let x=pr(g,n);x?h.emitLine(`${t}${N} = ${x}(${E}->result);`):h.emitLine(`${t}${N} = ${E}->result;`)}else h.emitLine(`${t}${N} = ${E}->result;`);return C}}return"// Error: await should only be used inside async blocks"}function If(e,t,n){var c,f,p;let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=(c=r.$)==null?void 0:c.type;if(!i||!He(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=R(r,t,n),l=(f=e.$)!=null&&f.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((p=e.$)==null?void 0:p.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Ry(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;G(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Gt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Py(e,t,n,r){var f,p;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(_=>I(_)&&T(_,V.using));if(!o)return;let a=cn(i.$.type);if(!((p=a==null?void 0:a.isFuture.effects)!=null&&p.length))return;let s=Ry(a.isFuture.effects),l=o.args,c=r.emitter;for(let _=0;_<s.length&&_<l.length;_++){let d=s[_],y=l[_];if(!ae(d.type)||d.type.forallParameters.length>0)continue;let g=R(y,n,r),h=d.label;c.emitLine(`${n} ${t}->__capture.${h} = (void*)${g};`)}}function Nf(e,t,n){var a,s,l,u,c,f,p,_,d,y,g,h;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!xe(i)&&!Ut((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${H(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let v=o.pendingDeferredDrops,E=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...E,...v??[]];let k=[],b=!xe(i)&&!Ut((c=e.$)==null?void 0:c.controlFlow);for(let F=0;F<e.args.length;F++){let $=e.args[F],C=R($,t+" ",n);k.push(C);let A=F===e.args.length-1;C&&!(A&&b)&&($.$&&wt($.$.env.modulePath,C)||n.emitter.emitLine(`${t} ${C};`))}if(b){let F=e.args[e.args.length-1],$=k[k.length-1];if((f=F.$)!=null&&f.deferredDupExpressions&&F.$.deferredDupExpressions.length>0){if((p=F.$)!=null&&p.variableName){let A=F.$.variableName;F.$.variableName=void 0;let N=R(F,t+" ",n);F.$.variableName=A;let x=H(F.$.type,n),D=Re(A,F.$.env);D!==N&&n.emitter.emitLine(`${t} ${x} ${D} = ${N};`),$=D}Ft(F,t+" ",n);let C=F.$.deferredDupExpressions[0];I(C)&&((_=C.$)!=null&&_.variableName)&&($=Re(C.$.variableName,C.$.env))}n.emitter.emitLine(`${t} ${r} = ${$};`)}if((d=e.$)!=null&&d.deferredDropExpressions)for(let F of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let C=Hr(F);if(C&&o.shortCircuitHandledDropVarNames.has(C)){o.shortCircuitHandledDropVarNames.delete(C);continue}}let $=R(F,t+" ",n);$&&n.emitter.emitLine(`${t} ${$};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=v,xe(i)||Ut((y=e.$)==null?void 0:y.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let v=o.pendingDeferredDrops,E=((g=e.$)==null?void 0:g.deferredDropExpressions)??[];if(o.pendingDeferredDrops=[...E,...v??[]],e.args.map(b=>R(b,t+" ",n)).forEach(b=>{b&&n.emitter.emitLine(`${t} ${b};`)}),(h=e.$)!=null&&h.deferredDropExpressions)for(let b of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let $=Hr(b);if($&&o.shortCircuitHandledDropVarNames.has($)){o.shortCircuitHandledDropVarNames.delete($);continue}}let F=R(b,t+" ",n);F&&n.emitter.emitLine(`${t} ${F};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=v,""}}function xf(e,t,n){var a;let r=e.args[0];if(I(r)&&T(r,V.comptime,1)||I(r)&&T(r,V.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${w(r)}
|
|
10642
|
+
`;let i=r.token.value,o=Dt(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function Sf(e,t,n){var r,i,o,a,s,l,u,c,f,p;if(e.$){let _=e.$.variableName,d=e.$.type,y=d&&xe(d),g=-1;for(let b=0;b<e.args.length;b++){let F=e.args[b];if(I(F)&&T(F,"=>",2)){let $=F.args[0];if($&&!(_t((r=$.$)==null?void 0:r.value)&&$.$.value.value===!1)){g=b;break}}}let h=!1;if(g>=0){let b=e.args[g];if(b&&I(b)&&T(b,"=>",2)){let F=b.args[0];F&&_t((i=F.$)==null?void 0:i.value)&&F.$.value.value===!0&&(h=!0)}}if(!y&&_&&!h){let b=H(d,n);n.emitter.emitLine(`${t}${b} ${_};`)}if(h&&g>=0){let b=e.args[g];if(b&&I(b)&&T(b,"=>",2)){let F=b.args[1];if(F){let $=R(F,t,n);_&&!y&&($&&$!==""&&!$.startsWith("goto")&&$!=="continue"&&$!=="break"&&!$.includes("return")?n.emitter.emitLine(`${t}${_} = ${$};`):$&&($.startsWith("goto")||$==="continue"||$==="break"||$.includes("return"))&&n.emitter.emitLine(`${t}${$};`))}}return y?"":_??""}let v=t,E=0,k=!1;for(let b=0;b<e.args.length;b++){let F=e.args[b];if(I(F)&&T(F,"=>",2)){let $=F.args[0],C=F.args[1];if($&&C){if(_t((o=$.$)==null?void 0:o.value)&&$.$.value.value===!1)continue;if(k){if(n.emitter.emitLine(`${v}else {`),E++,v+=" ",!(_t((s=$.$)==null?void 0:s.value)&&$.$.value.value===!0)){let P=R($,v,n);n.emitter.emitLine(`${v}if (${P}) {`)}}else{if(_t((a=$.$)==null?void 0:a.value)&&$.$.value.value===!0)n.emitter.emitLine(`${v}{`);else{let D=R($,v,n);n.emitter.emitLine(`${v}if (${D}) {`)}k=!0}let A=_t((l=$.$)==null?void 0:l.value)&&$.$.value.value===!0,N=k&&A?v:v+" ";if(I(C)&&T(C,V.begin)){let D=C.args,P=n,U=P.pendingDeferredDrops,j=((u=C.$)==null?void 0:u.deferredDropExpressions)??[];P.pendingDeferredDrops=[...j,...U??[]];for(let O=0;O<D.length-1;O++){let z=D[O],W=R(z,N,n);W&&z.$&&!wt(z.$.env.modulePath,W)&&n.emitter.emitLine(`${N}${W};`)}if(D.length>0){let O=D[D.length-1];(c=O.$)!=null&&c.deferredDupExpressions&&Ft(O,N,n);let z=R(O,N,n);z&&(z==="continue"||z==="break"||z.startsWith("goto")||I(O)&&T(O,V.return)||z.includes("return")?n.emitter.emitLine(`${N}${z};`):_&&!y&&n.emitter.emitLine(`${N}${_} = ${z};`))}(f=C.$)!=null&&f.deferredDropExpressions&&Qt(C,N,n),P.pendingDeferredDrops=U}else{(p=C.$)!=null&&p.deferredDupExpressions&&Ft(C,N,n);let D=R(C,N,n);D==="continue"||D==="break"||D.startsWith("goto")||I(C)&&T(C,V.return)||D.includes("return")?n.emitter.emitLine(`${N}${D};`):D===""||!D||_&&(y||n.emitter.emitLine(`${N}${_} = ${D};`))}!(k&&A)&&n.emitter.emitLine(`${v}}`)}}}for(let b=0;b<E;b++)v=v.slice(0,-2),n.emitter.emitLine(`${v}}`);return y?"":_??""}return'/* "cond" expression is not evaluated */'}function Vf(e,t,n){let r=e.args[0];return R(r,t,n)}function Df(e,t,n){var d,y,g,h,v,E,k,b,F;if(!((d=e.$)!=null&&d.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=((g=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder)==null?void 0:g[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!et(i))return"/* Error: dyn() result type is not DynType */";let o=(h=r.$)==null?void 0:h.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(!qt(o)&&!Zn(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=Zn(o)?o.fields[0].type:o,l=((v=n.types[i.id])==null?void 0:v.cName)||`yo_dyn_${i.id}`,c=`${(()=>{var N,x;let $=(N=n.types[s.id])==null?void 0:N.cName;if($)return $;let C=In(s);return(C?(x=n.types[C.id])==null?void 0:x.cName:void 0)||`unknown_${s.id}`})()}_${l}`;n.dynImpls.set(c,{dynType:i,concreteType:s,dataType:o,traitValues:a});let f=R(r,t,n);if((E=r.$)!=null&&E.variableName&&f!==r.$.variableName){let $=Dt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${$} = ${f};`),f=r.$.variableName}if((k=r.$)!=null&&k.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Ft(r,t,n);let $=r.$.deferredDupExpressions[0];I($)&&((b=$.$)!=null&&b.variableName)&&(f=Re($.$.variableName,$.$.env))}let p=(F=e.$)==null?void 0:F.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let _=`yo_vtable_${c}`;return n.emitter.emitLine(`${t}${l} ${p} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${_}`),n.emitter.emitLine(`${t}};`),p}function Mf(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function Of(e,t,n){var a,s,l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$;let r=e.args[0],i=e.args[1],o=n;if(I(r)&&T(r,V.comptime,1)||I(r)&&T(r,V.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&Y(r)&&Y(i)){let C=r.token.value,A=i.token.value,N=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(D=>D.name===C),x=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(D=>D.name===A);if(C===A&&(N||x))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let C=e.$.runtimeDestructurings,A=R(i,t,n),N=(s=i.$)==null?void 0:s.type;return C.forEach(({label:x,type:D,variableName:P})=>{let U=me(P,D.isExtern==="c"),j=Dt(D,U,n);if(N&&Ie(N)&&N.isNewtype&&N.fields.length===1){let W=N.fields[0];if(W&&W.label===x){n.emitter.emitLine(`${t}${j} = ${A}; // Destructuring ${x} (newtype)`);return}}let O=x.match(/^\d+$/)?`_${x}`:me(x,D.isExtern==="c");if(N&&qe(N)&&!x.match(/^\d+$/)){let W=N.fields.findIndex(ee=>ee.label===x);O=W>=0?`_${W}`:O}let z=N&&qt(N)?"->":".";n.emitter.emitLine(`${t}${j} = ${A}${z}${O}; // Destructuring ${x}`)}),""}if(Y(r)){let C=r.token.value;if(!((l=r.$)!=null&&l.type))return`// Error: No type information for variable ${C}
|
|
10643
|
+
`;if((u=r.$)!=null&&u.env){let x=pe(r.$.env,C);if(x.length>0&&x[x.length-1].isCompileTimeOnly)return""}let A=!1,N;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((c=r.$)!=null&&c.env)){let x=pe(r.$.env,C);if(x.length>0){let D=x[x.length-1],P=D.isOwningTheSameRcValueAs?D.isOwningTheSameRcValueAs.id:D.id;o.stateMachineVariables.has(P)&&(A=!0,N=P)}}if(We(r.$.type))if(I(i)&&T(i,V.array)){let x=R(i,t,n);if(A&&N)n.emitter.emitLine(`${t}sm->var_${N} = ${x};`);else if(!xe(r.$.type)){let D=Dt(r.$.type,C,n);n.emitter.emitLine(`${t}${D} = ${x};`)}}else{let x;if((f=i.$)!=null&&f.variableName){let D=Re(i.$.variableName,i.$.env),P=R(i,t,n);if(!A){let U=Dt(i.$.type,D,n);D!==P&&n.emitter.emitLine(`${t}${U} = ${P};`)}x=D}else x=R(i,t,n);if(A&&N)n.emitter.emitLine(`${t}sm->var_${N} = ${x};`);else if(!xe(r.$.type)){let D=Dt(r.$.type,C,n);n.emitter.emitLine(`${t}${D} = ${x};`)}}else{let x,D=I(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((_=i.$)==null?void 0:_.type)&&wn(i.$.type),P=I(i)&&vn(i);if((d=i.$)!=null&&d.variableName){let U=Re(i.$.variableName,i.$.env),j=Re(C,r.$.env);if(U===j){if(x=R(i,t,n),!D&&!P&&((y=i.$)!=null&&y.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Ft(i,t,o);let O=i.$.deferredDupExpressions[0];I(O)&&((g=O.$)!=null&&g.variableName)&&(x=Re(O.$.variableName,O.$.env))}}else if(Y(i)&&U===Re(i.token.value,i.$.env)){if(x=R(i,t,n),!D&&!P&&((h=i.$)!=null&&h.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Ft(i,t,o);let O=i.$.deferredDupExpressions[0];I(O)&&((v=O.$)!=null&&v.variableName)&&(x=Re(O.$.variableName,O.$.env))}}else if(Y(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&((E=i.$)!=null&&E.env)&&o.currentClosureCaptureFrameLevel!==void 0&&Mr(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let O=o.currentClosureType;if(O&&O.isClosure){let z=Object.values(o.types).find(W=>W.type===O);z?x=`((${`${z.cName}_capture`}*)closure_context->data)->${Re(i.token.value,i.$.env)}`:x=`closure_context->${Re(i.token.value,i.$.env)}`}else x=`closure_context->${Re(i.token.value,i.$.env)}`}else{let O=R(i,t,n);if(O.trim()!==U){let z=i.$.convertedRuntimeType||i.$.type,W=Dt(z,U,n);n.emitter.emitLine(`${t}${W} = ${O};`)}if(!D&&!P&&((k=i.$)!=null&&k.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Ft(i,t,o);let z=i.$.deferredDupExpressions[0];I(z)&&((b=z.$)!=null&&b.variableName)?x=Re(z.$.variableName,z.$.env):x=U}else x=U}}else if(x=R(i,t,n),!D&&!P&&((F=i.$)!=null&&F.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Ft(i,t,o);let U=i.$.deferredDupExpressions[0];I(U)&&(($=U.$)!=null&&$.variableName)&&(x=Re(U.$.variableName,U.$.env))}if(Et(r.$.type)){let U=r.$.type;if(A&&N)n.emitter.emitLine(`${t}sm->var_${N} = ${x};`);else if(!xe(U)){let j=Dt(U,C,n);n.emitter.emitLine(`${t}${j} = ${x};`)}}else if(A&&N)n.emitter.emitLine(`${t}sm->var_${N} = ${x};`);else{let U=wt(i.$.env.modulePath,x.trim()),j;if(U&&n.tempVarAsyncStructNames){let O=n.tempVarAsyncStructNames.get(x.trim());O?j=`${O}*`:j=H(r.$.type,n)}else j=H(r.$.type,n);xe(r.$.type)||n.emitter.emitLine(`${t}${j} ${Re(C,r.$.env)} = ${x};`)}}return""}}var Uy=0;function fa(e,t,n,r,i=" "){var o,a,s,l,u,c;if(L.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(L.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(L.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(L.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(L.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(L.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(L.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(L.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(L.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(L.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(L.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(L.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(L.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(L.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(L.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(L.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(L.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(L.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(L.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(L.__yo_noop.includes(e))return"";if(L.__yo_return_self.includes(e))return`(*${t[0]})`;if(L.__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(L.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(L.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let f=q(n.$.type,r),p=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return p&&Me(p)&&!or(p)?`((${f})((${t[0]}).tag))`:`((${f})(${t[0]}))`}else{if(L.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(L.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(L.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(L.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(L.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(L.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(L.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(L.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(L.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(L.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(L.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${q(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(L.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(L.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(L.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(L.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let f=q(n.$.type,r),p=`__yo_uninit_${Oy++}`;return r.emitter.emitLine(`${i}${f} ${p};`),p}else return L.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${q(n.$.type,r)})(${t[0]}))`:L.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function Mf(e,t,n){var c,f,p,_;let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=O(r,t,n),o=(c=r.$)==null?void 0:c.type;if(!o||!on(o))return"// Error: __yo_iso_extract requires an Iso type";let a=q(o,n),s=(f=e.$)==null?void 0:f.type;if(s&&((p=n.isoTypes)!=null&&p.has(a))){let d=n.isoTypes.get(a);d.optionTypeCName||(d.optionTypeCName=q(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(_=e.$)==null?void 0:_.variableName;return u&&s?(n.emitter.emitLine(`${t}${q(s,n)} ${u} = ${l};`),u):l}function Of(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=O(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!on(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${q(o,n)}(${i})`}function Bl(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return H(t)&&on(t.value)&&e.args.length===1}function Rf(e,t,n){var c;if(!Bl(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=O(a,t,n),l=q(i,n),u=q(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 jr(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function Kr(e,t,n){var r,i,o,a,s,l;if(A(e)&&T(e,V.begin)){let u=e.args,c=n,f=c.pendingDeferredDrops,p=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];c.pendingDeferredDrops=[...p,...f??[]];for(let d=0;d<u.length-1;d++){let y=u[d],g=O(y,t,n);g&&n.emitter.emitLine(`${t}${g};`)}let _="";if(u.length>0){let d=u[u.length-1];if((i=d.$)!=null&&i.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if((o=d.$)!=null&&o.variableName){let g=d.$.variableName;d.$.variableName=void 0;let h=O(d,t,n);d.$.variableName=g;let v=q(d.$.type,n),E=Re(g,d.$.env);E!==h&&n.emitter.emitLine(`${t}${v} ${E} = ${h};`)}Ft(d,t,n);let y=d.$.deferredDupExpressions[0];A(y)&&((a=y.$)!=null&&a.variableName)?_=Re(y.$.variableName,y.$.env):_=O(d,t,n)}else _=O(d,t,n)}return(s=e.$)!=null&&s.deferredDropExpressions&&Qt(e,t,n),c.pendingDeferredDrops=f,_}else return(l=e.$)!=null&&l.deferredDupExpressions&&Ft(e,t,n),O(e,t,n)}function Uf(e,t,n){var y,g,h,v,E,k,b;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&Se(i);if(!o&&r){let F=q(i,n);n.emitter.emitLine(`${t}${F} ${r};`)}let a=O(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return Py(e,t,n,a,s,r,o);let l,u;if(Xe(s)?(u=s.childType,l=s.tag):Wt(s)?(u=s,l="ref_semantics"):u=s,!Me(u))return'// Error: "match" expression requires an enum type';if(!((g=n.types[u.id])==null?void 0:g.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let f=Nn(u);if(f){let F=e.args.slice(1),$=null,C=null;for(let I of F)if(A(I)&&T(I,"=>",2)){let N=I.args[0],x=I.args[1];if(N&&x&&A(N)&&T(N,"."))$={caseBody:x};else{let D=N.func;if(D&&A(D)&&T(D,".")){let P=D.args[0];if(P&&Y(P)){let U=P.token.value;C={caseBody:x,variantName:U,casePattern:N}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),C){let I;if(A(C.casePattern)&&C.casePattern.args.length>0){let P=C.casePattern.args[0];if(P&&Y(P)){I=me(P.token.value);let U=f;n.emitter.emitLine(`${t} ${q(U,n)} ${I} = ${a};`)}}let N=n;I&&(N.inAsyncStateMachine||N.inEffectStateMachine)&&(N.localShadowedVariables||(N.localShadowedVariables=new Set),N.localShadowedVariables.add(I));let x=Kr(C.caseBody,t+" ",n);I&&N.localShadowedVariables&&N.localShadowedVariables.delete(I);let D=jr(x);if(!o&&r&&!D){let P=x||a;n.emitter.emitLine(`${t} ${r} = ${P};`)}else x&&x!==""&&n.emitter.emitLine(`${t} ${x};`)}if(n.emitter.emitLine(`${t}} else {`),$){let I=Kr($.caseBody,t+" ",n),N=jr(I);!o&&r&&!N?n.emitter.emitLine(`${t} ${r} = ${I};`):I&&I!==""&&n.emitter.emitLine(`${t} ${I};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(or(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let F=n.insideMatch;n.insideMatch=!0;let $=e.args.slice(1);for(let C=0;C<$.length;C++){let I=$[C];if(A(I)&&T(I,"=>",2)){let N=I.args[0],x=I.args[1];if(N&&x&&Y(N)&&N.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let D=Kr(x,t+" ",n);!o&&r&&D&&!jr(D)?n.emitter.emitLine(`${t} ${r} = ${D};`):D&&n.emitter.emitLine(`${t} ${D};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(N&&x&&A(N)&&T(N,".",1)){let D=N.args[0].token.value,P=Yn(u,D,n);n.emitter.emitLine(`${t}case ${P}: {`);let U=Kr(x,t+" ",n);!o&&r&&U&&!jr(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=F,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 F=0;F<d.length;F++){let $=d[F];if(A($)&&T($,"=>",2)){let C=$.args[0],I=$.args[1];if(C&&I&&Y(C)&&C.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let N=Kr(I,t+" ",n);!o&&r&&N&&!jr(N)?n.emitter.emitLine(`${t} ${r} = ${N};`):N&&n.emitter.emitLine(`${t} ${N};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&I&&A(C)&&C.func.tag==="Atom"&&C.func.token.value==="."&&C.args.length>=1){let N=C.args[0].token.value,x=Yn(u,N,n);if(n.emitter.emitLine(`${t}case ${x}: {`),C.args.length>1){let P=u.variants.find(U=>U.name===N);if(P&&P.fields){let U=C.args.slice(1);if(U.some(R=>A(R)&&T(R,":",2))){for(let R of U)if(A(R)&&T(R,":",2)){let z=R.args[0],W=R.args[1];if(!Y(z))continue;let ee=z.token.value,de=P.fields.find(se=>se.label===ee);if(!de||Se(de.type))continue;if(Y(W)){let se=W.token.value;if(se!=="_"){let j=me(se),te=me(ee),ne=q(de.type,n),ke=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ne} ${j} = ${a}${ke}data.${N}.${te};`);let ce=n;if((ce!=null&&ce.inAsyncStateMachine||ce!=null&&ce.inEffectStateMachine)&&ce.stateMachineVariables){let Q;if((h=W.$)!=null&&h.env){let Pe=pe(W.$.env,se);Pe.length>0&&(Q=Pe[Pe.length-1].id)}Q&&ce.stateMachineVariables.has(Q)&&n.emitter.emitLine(`${t} sm->var_${Q} = ${j};`)}}}}}else for(let R=0;R<U.length&&R<P.fields.length;R++){let z=U[R],W=P.fields[R];if(Y(z)&&W){if(Se(W.type))continue;let ee=z.token.value;if(ee!=="_"){let de=me(ee),se=me(W.label),j=q(W.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${j} ${de} = ${a}${te}data.${N}.${se};`);let ne=n;if((ne!=null&&ne.inAsyncStateMachine||ne!=null&&ne.inEffectStateMachine)&&ne.stateMachineVariables){let ke;if((v=z.$)!=null&&v.env){let ce=pe(z.$.env,ee);ce.length>0&&(ke=ce[ce.length-1].id)}ke&&ne.stateMachineVariables.has(ke)&&n.emitter.emitLine(`${t} sm->var_${ke} = ${de};`)}}}}}}if(A(I)&&T(I,"=>",2)){let P=I.args[0];n.emitter.emitLine(`${t} ${q(s,n)} ${me(P.token.value)} = ${a};`),I=I.args[1]}let D=Kr(I,t+" ",n);!o&&r&&D&&!jr(D)?n.emitter.emitLine(`${t} ${r} = ${D};`):D&&n.emitter.emitLine(`${t} ${D};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&I&&A(C)&&A(C.func)&&C.func.func.tag==="Atom"&&C.func.func.token.value==="."&&C.func.args.length===1){let N=C.func.args[0].token.value,x=Yn(u,N,n),D=C.args;n.emitter.emitLine(`${t}case ${x}: {`);let P=u.variants.find(X=>X.name===N);if(P&&P.fields&&D.length>0)if(D.some(R=>A(R)&&T(R,":",2))){for(let R of D)if(A(R)&&T(R,":",2)){let z=R.args[0],W=R.args[1];if(!Y(z))continue;let ee=z.token.value,de=P.fields.find(se=>se.label===ee);if(!de)continue;if(Y(W)){let se=W.token.value;if(se!=="_"){let j=me(se);if(Se(de.type))n.emitter.emitLine(`${t} // ${j} is unit type (no value)`);else{let te=me(ee),ne=q(de.type,n),ke=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ne} ${j} = ${a}${ke}data.${N}.${te};`);let ce=n;if((ce!=null&&ce.inAsyncStateMachine||ce!=null&&ce.inEffectStateMachine)&&ce.stateMachineVariables){let Q;if((E=W.$)!=null&&E.env){let Pe=pe(W.$.env,j);Pe.length>0&&(Q=Pe[Pe.length-1].id)}Q&&ce.stateMachineVariables.has(Q)&&n.emitter.emitLine(`${t} sm->var_${Q} = ${j};`)}}}}}}else for(let R=0;R<Math.min(D.length,P.fields.length);R++){let z=D[R],W=P.fields[R];if(z.tag==="Atom"&&W){let ee=z.token.value;if(ee!=="_"){let de=me(ee);if(Se(W.type))n.emitter.emitLine(`${t} // ${de} is unit type (no value)`);else{let se=me(W.label),j=q(W.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${j} ${de} = ${a}${te}data.${N}.${se};`);let ne=n;if((ne!=null&&ne.inAsyncStateMachine||ne!=null&&ne.inEffectStateMachine)&&ne.stateMachineVariables){let ke;if((k=z.$)!=null&&k.env){let ce=pe(z.$.env,ee);ce.length>0&&(ke=ce[ce.length-1].id)}ke&&ne.stateMachineVariables.has(ke)&&n.emitter.emitLine(`${t} sm->var_${ke} = ${de};`)}}}}}if(A(I)&&T(I,"=>",2)){let X=I.args[0];n.emitter.emitLine(`${t} ${q(s,n)} ${me(X.token.value)} = ${a};`),I=I.args[1]}let U=Kr(I,t+" ",n);!o&&r&&U&&!jr(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=_,n.emitter.emitLine(`${t}}`),(b=e.$)!=null&&b.deferredDropExpressions&&Qt(e,t,n),o?"":r??""}function Ry(e){return A(e)?T(e,"|",2):!1}function Gl(e){if(!Ry(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Gl(n),...Gl(r)]}function Pf(e){if(e!==void 0){if(ft(e))return String(e.value);if(_t(e))return e.value?"true":"false"}}function Py(e,t,n,r,i,o,a){var u,c,f;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let p=0;p<l.length;p++){let _=l[p];if(A(_)&&T(_,"=>",2)){let d=_.args[0],y=_.args[1];if(!d||!y)continue;if(Y(d)&&d.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let E=Kr(y,t+" ",n);!a&&o&&E&&!jr(E)?n.emitter.emitLine(`${t} ${o} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let g=Gl(d),h=(u=d.$)==null?void 0:u.primitivePatternValues;if(h&&h.length>0)for(let E of h){let k=Pf(E);k!==void 0&&n.emitter.emitLine(`${t}case ${k}:`)}else for(let E of g){let k=(c=E.$)==null?void 0:c.value,b=Pf(k);b!==void 0&&n.emitter.emitLine(`${t}case ${b}:`)}n.emitter.emitLine(`${t}{`);let v=Kr(y,t+" ",n);!a&&o&&v&&!jr(v)?n.emitter.emitLine(`${t} ${o} = ${v};`):v&&n.emitter.emitLine(`${t} ${v};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(f=e.$)!=null&&f.deferredDropExpressions&&Qt(e,t,n),a?"":o??""}function zf(e,t,n){var r,i;if((r=e.$)!=null&&r.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let o=e.args[0];if(!o||!((i=o.$)!=null&&i.type))return"// Error: open expression has no argument or type";let a=o.$.type,s=o.$.value;if(Ae(a)&&s===void 0){let l=O(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let f=q(c.type,n),p=me(c.variableName),_=me(c.label);n.emitter.emitLine(`${t}${f} ${p} = ${l}.${_};`)}}}return""}function Bf(e,t,n){var y,g,h,v,E;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(G(o)){let k=o;k.resolvedConcreteType&&(a=k.resolvedConcreteType.id,s=k.resolvedConcreteType)}else Ae(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=q(s,n),f=O(i,t,n),p=(h=i.$)!=null&&h.variableName?Re(i.$.variableName,i.$.env):f,_=`_thread_closure_data_${yt(((v=e.$)==null?void 0:v.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`);let d=(E=e.$)==null?void 0:E.variableName;return d?(n.emitter.emitLine(`${t}__yo_thread_t ${d} = __yo_thread_spawn(${u}, ${_});`),d):`__yo_thread_spawn(${u}, ${_})`}function Gf(e,t,n){var d,y,g,h;let r=(d=e.$)==null?void 0:d.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(y=i.$)==null?void 0:y.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(G(o)){let v=o;v.resolvedConcreteType&&(a=v.resolvedConcreteType.id,s=v.resolvedConcreteType)}else Ae(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=q(s,n),f=O(i,t,n),p=(g=i.$)!=null&&g.variableName?Re(i.$.variableName,i.$.env):f,_=`_worker_closure_data_${yt(((h=e.$)==null?void 0:h.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${_});`),""}function Wf(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${O(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function er(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&&qe(i.type))return;let o=`var_${i.id}`,a=me(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function Hf(e,t,n){var o,a,s,l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$,C,I,N,x,D,P,U,X,R,z,W,ee,de,se,j,te,ne,ke,ce,Q,Pe,ut,at,_e,Ce,$e,Ge,nt,ct,jt,B,re,ve,Te,Le,Ie,ze,bt,Kt,kt,ht,dn;if(((o=e.$)==null?void 0:o.value)!==void 0&&!xe(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&Qt(e,t,n),Se(e.$.type)?"":Fn(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.type,i=(l=e.func.$)==null?void 0:l.value;if(ae(r)){let Fe=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(Fe){let ot=!1;if(A(e.func)&&T(e.func,".",2)){let Ee=e.func.args[0],K=(c=Ee==null?void 0:Ee.$)==null?void 0:c.type;K&&et(K)&&(ot=!0)}let lt=Fe.map((Ee,K)=>{var oe,fe,Z,ge,J,Ne,ye,Ke,Qe;if((oe=Ee.$)!=null&&oe.variableName&&((fe=Ee.$)!=null&&fe.type)){let De=n,st=De.currentClosureCaptures&&De.currentClosureCaptures.includes(Ee.$.variableName)&&Y(Ee)&&Ee.$.env&&De.currentClosureCaptureFrameLevel!==void 0&&Dr(Ee.token.value,Ee.$.env,De.currentClosureCaptureFrameLevel),Ze=O(Ee,t,n),Lt=!1;if(Y(Ee)&&Ee.$.env&&Ee.$.variableName){let Zt=pe(Ee.$.env,Ee.$.variableName);Zt.length>0&&Zt[Zt.length-1].isCompileTimeOnly&&(Lt=!0)}let At=(De.inAsyncStateMachine||De.inEffectStateMachine)&&Ze.startsWith("sm->"),mn=!1;if(Ze&&Ze!==Ee.$.variableName&&!st&&!At&&!Lt){let Zt=Re(Ee.$.variableName,Ee.$.env);if(Ze!==Zt){let Tn=Ee.$.convertedRuntimeType||Ee.$.type,dr=Dt(Tn,Ee.$.variableName,n);n.emitter.emitLine(`${t}${dr} = ${Ze};`),mn=!0,er(Ee.$.variableName,t,n)}}let Ln=mn?Ee.$.variableName:Ze;if((Z=Ee.$)!=null&&Z.deferredDupExpressions&&Ee.$.deferredDupExpressions.length>0){let Zt=new Set;(ge=Ee.$)!=null&&ge.variableName&&Zt.add(Re(Ee.$.variableName,Ee.$.env)),Ze&&Zt.add(Ze),Y(Ee)&&Zt.add(Re(Ee.token.value,Ee.$.env));let Tn=Ee.$.deferredDupExpressions.find(dr=>{var yi;let Qr=Xa(dr);return Qr?Zt.has(Re(Qr,(yi=dr.$)==null?void 0:yi.env)):!1});Tn&&(Ft(Ee,t,De),A(Tn)&&((J=Tn.$)!=null&&J.variableName)&&(Ln=Re(Tn.$.variableName,Tn.$.env)))}if(ot&&K===0){if(A(e.func)&&T(e.func,".",2)){let Tn=e.func.args[0],dr=(Ne=Tn==null?void 0:Tn.$)==null?void 0:Ne.type,Qr=e.func.args[1];if(Y(Qr)&&et(dr)){let yi=Qr.token.value;if(dr.trait.fields.find(vs=>vs.label===yi))return me(Ln,Ee.$.type.isExtern==="c")}}let Zt=(ye=Ee.$)==null?void 0:ye.type;return Zt&&Xe(Zt)?`${me(Ln,Ee.$.type.isExtern==="c")}->data`:`(${me(Ln,Ee.$.type.isExtern==="c")}).data`}else return st||At||Lt?Ze:me(Ln,Ee.$.type.isExtern==="c")}else if(ot&&K===0){let De=O(Ee,t,n);if(A(e.func)&&T(e.func,".",2)){let Ze=e.func.args[0],Lt=(Ke=Ze==null?void 0:Ze.$)==null?void 0:Ke.type,At=e.func.args[1];if(Y(At)&&et(Lt)){let mn=At.token.value;if(Lt.trait.fields.find(Zt=>Zt.label===mn))return De}}let st=(Qe=Ee.$)==null?void 0:Qe.type;return st&&Xe(st)?`(${De})->data`:`(${De}).data`}else return O(Ee,t,n)}),Ue=lt.join(", ");if(r.isExtern==="yo"&&r.externName){let Ee=r.externName;return xi.includes(Ee)?fa(Ee,lt,e,n,t):Ee==="__yo_thread_spawn"?Bf(e,t,n):Ee==="__yo_worker_spawn"?Gf(e,t,n):Se(r.return.type)?(n.emitter.emitLine(`${t}${Ee}(${Ue});`),(f=e.$)!=null&&f.deferredDropExpressions&&Qt(e,t,n),""):`${Ee}(${Ue})`}if(be(i)){let Ee=go(i);if(Ee)return fa(Ee,lt,e,n,t);let K=i.specializedType??i.type;if(i.isControlFunction&&i.body)return zy(i,K,lt,t,n);let oe=(p=n.functions[i.funcId])==null?void 0:p.cName;if(oe){let fe=n.functions[i.funcId],Z=fe==null?void 0:fe.effectStateMachineInfo;if(Z){let ge=(d=(_=i.body)==null?void 0:_.$)==null?void 0:d.effectAnalysis;if(ge!=null&&ge.effectHandlerInfos&&ge.effectHandlerInfos.length>1){let Ne=[];for(let ye=0;ye<ge.effectHandlerInfos.length;ye++){let Qe=ge.effectHandlerInfos[ye].handlerValue;if(Qe&&be(Qe)){let De=Qe.specializedType??Qe.type,st=Qe.body,Ze=st?!Qe.isControlFunction||fi(st):!1;Ne.push({handlerBody:st,handlerType:De,hasResume:Ze,effectIndex:ye})}}if(Ne.length>0){let ye=(y=e.$)==null?void 0:y.variableName;return rf(Z,lt,K,Ne,ye,t,n)}}let J=ge==null?void 0:ge.handlerValue;if(J&&be(J)){let Ne=J.specializedType??J.type,ye=J.body,Ke=ye?!J.isControlFunction||fi(ye):!1,Qe=(g=e.$)==null?void 0:g.variableName,De=(h=e.$)==null?void 0:h.type;return Dl(Z,lt,K,ye,Ne,Ke,De,Qe,t,n)}}if(Se(K.return.type))return n.emitter.emitLine(`${t}${oe}(${Ue});`),(v=e.$)!=null&&v.deferredDropExpressions&&Qt(e,t,n),"";{let ge=(E=e.$)==null?void 0:E.variableName;if(ge){let J=((k=i.specializedType)==null?void 0:k.return.type)??K.return.type,Ne=(b=e.$)==null?void 0:b.type,ye=Ne&&qe(Ne),Ke=J&&qe(J),Qe;if(ye&&Ke){let De=i.body;if(De&&T(De,"begin")){let st=De.args;if(st.length>0){let Ze=st[st.length-1];vn(Ze)&&(De=Ze)}}if(De&&vn(De)&&((F=De.$)!=null&&F.asyncStateMachineStructName)){let st=De.$.asyncStateMachineStructName;Qe=`${st}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(ge,st)}else Ne&&G(Ne)&&Ne.resolvedConcreteType?Qe=q(Ne,n):Qe=q(J,n)}else Qe=q(J??Ne,n);return n.emitter.emitLine(`${t}${Qe} ${ge} = ${oe}(${Ue});`),er(ge,t,n),($=e.$)!=null&&$.deferredDropExpressions&&Qt(e,t,n),ge}else return`// Error: Regular function call returns ${q(((C=i.specializedType)==null?void 0:C.return.type)??K.return.type,n)} but no temp variable assigned`}}}else{let Ee=n.externFunctions[r.id];if(Ee){let K=Ee.cName;return(I=e.$)!=null&&I.deferredDropExpressions&&Qt(e,t,n),`${K}(${Ue})`}else{let K=O(e.func,t,n),oe=q(r.return.type,n),fe=r.parameters.filter(ge=>!ge.isCompileTimeOnly).map(ge=>q(ge.type,n)),Z=`((${oe} (*)(${fe.join(", ")}))${K})`;if(Se(r.return.type))return n.emitter.emitLine(`${t}${Z}(${Ue});`),(N=e.$)!=null&&N.deferredDropExpressions&&Qt(e,t,n),"";{let ge=(x=e.$)==null?void 0:x.variableName;if(ge){let J=r.return.type,Ne=(D=e.$)==null?void 0:D.type,ye=Ne&&J&&qe(Ne)&&qe(J)?J:Ne??J;return n.emitter.emitLine(`${t}${q(ye,n)} ${ge} = ${Z}(${Ue});`),er(ge,t,n),(P=e.$)!=null&&P.deferredDropExpressions&&Qt(e,t,n),ge}else return`// Error: Function parameter call returns ${q(r.return.type,n)} but no temp variable assigned`}}}}}else if(r&&wn(r)){let Fe=r,ot=In(Fe),lt=et(Fe);{let Ue=ot.isFn.callType,Ee=(U=e.$)==null?void 0:U.runtimeArgExprsInOrder;if(Ee){let K=n;for(let J of Ee)if((X=J.$)!=null&&X.variableName&&((R=J.$)!=null&&R.type)){let Ne=K.currentClosureCaptures&&K.currentClosureCaptures.includes(J.$.variableName)&&Y(J)&&J.$.env&&K.currentClosureCaptureFrameLevel!==void 0&&Dr(J.token.value,J.$.env,K.currentClosureCaptureFrameLevel),ye=O(J,t,n),Ke=!1;if(Y(J)&&J.$.env&&J.$.variableName){let De=pe(J.$.env,J.$.variableName);De.length>0&&De[De.length-1].isCompileTimeOnly&&(Ke=!0)}let Qe=(K.inAsyncStateMachine||K.inEffectStateMachine)&&ye.startsWith("sm->");if(ye&&ye!==J.$.variableName&&!Ne&&!Qe&&!Ke){let De=J.$.convertedRuntimeType||J.$.type,st=Dt(De,J.$.variableName,n);n.emitter.emitLine(`${t}${st} = ${ye};`),er(J.$.variableName,t,n)}}let oe=O(e.func,t,n),fe=Ee.map(J=>{var Ne,ye,Ke,Qe;if((Ne=J.$)!=null&&Ne.variableName&&((ye=J.$)!=null&&ye.type)){if(K.currentClosureCaptures&&K.currentClosureCaptures.includes(J.$.variableName)&&Y(J)&&J.$.env&&K.currentClosureCaptureFrameLevel!==void 0&&Dr(J.token.value,J.$.env,K.currentClosureCaptureFrameLevel))return O(J,t,n);{let st=Re(J.$.variableName,J.$.env),Ze=(K.inAsyncStateMachine||K.inEffectStateMachine)&&st.startsWith("sm->"),Lt=st;if((Ke=J.$)!=null&&Ke.deferredDupExpressions&&J.$.deferredDupExpressions.length>0){Ft(J,t,K);let At=J.$.deferredDupExpressions[0];A(At)&&((Qe=At.$)!=null&&Qe.variableName)&&(Lt=Re(At.$.variableName,At.$.env))}return Ze?st:Lt}}else return O(J,t,n)}),Z;if(lt){let J=[`(${oe}).data`,...fe];Z=`(${oe}).vtable->call(${J.join(", ")})`}else{let J;if(G(Fe)){let ye=Fe;ye.resolvedConcreteType&&(J=ye.resolvedConcreteType.id)}let Ne=J?n.implClosureCallMap.get(J):void 0;if(Ne){let ye=Object.values(K.functions).find(Qe=>Qe.cName===Ne.functionCName),Ke=ye==null?void 0:ye.effectStateMachineInfo;if(Ke&&ye){let De=Ke.analysis.effectParameterName,st=((z=e.func.$)==null?void 0:z.env)??((W=e.$)==null?void 0:W.env);if(De&&st){let Ze=pe(st,De),Lt=Ze[Ze.length-1],At=(ee=Lt==null?void 0:Lt.value)==null?void 0:ee[0];if(At&&be(At)){let mn=At.specializedType??At.type,Ln=At.body?!At.isControlFunction||fi(At.body):!1,Zt=(de=e.$)==null?void 0:de.variableName,Tn=`&(${oe})`,dr=Dl(Ke,fe,Ke.functionType,At.body,mn,Ln,(se=K.currentFunctionType)==null?void 0:se.return.type,Zt,t,K,Tn);return(j=e.$)!=null&&j.deferredDropExpressions&&Qt(e,t,K),dr}}}}if(Ne){let ye=[`&(${oe})`,...fe];Z=`${Ne.functionCName}(${ye.join(", ")})`}else{let ye=[`(${oe}).data`,...fe];Z=`(${oe}).call(${ye.join(", ")})`}}let ge=Ue.return.type;if(Se(ge))return n.emitter.emitLine(`${t}${Z};`),(te=e.$)!=null&&te.deferredDropExpressions&&Qt(e,t,n),"";{let J=(ne=e.$)==null?void 0:ne.variableName;return J?(n.emitter.emitLine(`${t}${q(ge,n)} ${J} = ${Z};`),er(J,t,n),(ke=e.$)!=null&&ke.deferredDropExpressions&&Qt(e,t,n),J):`// Error: Closure call returns ${q(ge,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(H(i))if(Ae(i.value)){let Fe=i.value,ot=(ce=e.$)==null?void 0:ce.runtimeArgExprsInOrder,lt=(Q=n.types[Fe.id])==null?void 0:Q.cName,Ue=Fe.fields.map(K=>K.label),Ee=(Pe=e.$)==null?void 0:Pe.variableName;if(ot&<&&Ue.length===ot.length){if(Fe.isNewtype&&Fe.fields.length===1){let K=ot[0],oe=O(K,t,n),fe=oe;if((ut=K.$)!=null&&ut.deferredDupExpressions&&K.$.deferredDupExpressions.length>0){let ge=n;if((at=K.$)!=null&&at.variableName&&((_e=K.$)!=null&&_e.type)){let Ne=Re(K.$.variableName,K.$.env);if(oe!==Ne){let ye=K.$.type,Ke=q(ye,n);n.emitter.emitLine(`${t}${Ke} ${Ne} = ${oe};`)}}Ft(K,t,ge);let J=K.$.deferredDupExpressions[0];A(J)&&((Ce=J.$)!=null&&Ce.variableName)&&(fe=Re(J.$.variableName,J.$.env))}let Z=`((${lt})(${fe}))`;if(Ee&&(($e=e.$)!=null&&$e.type)){let ge=Dt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${ge} = ${Z};`),er(Ee,t,n),Ee}else return Z}if(Fe.isReferenceSemantics){let K=n,oe=ot.map(ge=>{var Ne,ye,Ke,Qe;let J=O(ge,t,n);if((Ne=ge.$)!=null&&Ne.deferredDupExpressions&&ge.$.deferredDupExpressions.length>0){if((ye=ge.$)!=null&&ye.variableName&&((Ke=ge.$)!=null&&Ke.type)){let st=Re(ge.$.variableName,ge.$.env);if(J!==st){let Ze=ge.$.type,Lt=q(Ze,n);n.emitter.emitLine(`${t}${Lt} ${st} = ${J};`)}}Ft(ge,t,K);let De=ge.$.deferredDupExpressions[0];if(A(De)&&((Qe=De.$)!=null&&Qe.variableName))return Re(De.$.variableName,De.$.env)}return J}).join(", "),Z=`${`__yo_new_${lt}`}(${oe})`;if(Ee&&((Ge=e.$)!=null&&Ge.type)){let ge=Dt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${ge} = ${Z};`),er(Ee,t,n),Ee}else return Z}else{let K=n,oe=ot.map((Z,ge)=>{var Ke,Qe,De,st;let J=O(Z,t,n),Ne=He(Fe)?`_${ge}`:me(Ue[ge],Fe.isExtern==="c"),ye=J;if((Ke=Z.$)!=null&&Ke.deferredDupExpressions&&Z.$.deferredDupExpressions.length>0){if((Qe=Z.$)!=null&&Qe.variableName&&((De=Z.$)!=null&&De.type)){let Lt=Re(Z.$.variableName,Z.$.env),At=Z.$.type,mn=q(At,n);J!==Lt&&n.emitter.emitLine(`${t}${mn} ${Lt} = ${J};`)}Ft(Z,t,K);let Ze=Z.$.deferredDupExpressions[0];A(Ze)&&((st=Ze.$)!=null&&st.variableName)&&(ye=Re(Ze.$.variableName,Ze.$.env))}return`.${Ne} = `+ye}).join(", "),fe=`(${lt}){ ${oe} }`;if(Ee&&((nt=e.$)!=null&&nt.type)){let Z=Dt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${Z} = ${fe};`),er(Ee,t,n),Ee}else return fe}}}else{if(wn(i.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Rt(i.value)){let Fe=(ct=e.$)==null?void 0:ct.variableName,ot=e.args[0];if(ot&&A(ot)&&T(ot,":",2)){let lt=ot.args[0],Ue=ot.args[1],Ee=(jt=n.types[i.value.id])==null?void 0:jt.cName;if(Ee&&Y(lt)&&Ue){let K=n,oe=lt.token.value,fe=Re(oe,(B=lt.$)==null?void 0:B.env),ge=O(Ue,t,n);if((re=Ue.$)!=null&&re.deferredDupExpressions&&Ue.$.deferredDupExpressions.length>0){Ft(Ue,t,K);let Ne=Ue.$.deferredDupExpressions[0];A(Ne)&&((ve=Ne.$)!=null&&ve.variableName)&&(ge=Re(Ne.$.variableName,Ne.$.env))}let J=`(${Ee}){ .${fe} = ${ge} }`;if(Fe&&((Te=e.$)!=null&&Te.type)){let Ne=Dt(e.$.type,Fe,n);return n.emitter.emitLine(`${t}${Ne} = ${J};`),er(Fe,t,n),Fe}else return J}}}else if(Me(i.value)){let Fe=i.value,ot=(Le=e.$)==null?void 0:Le.runtimeArgExprsInOrder,lt=(Ie=n.types[Fe.id])==null?void 0:Ie.cName,Ue=(ze=e.$)==null?void 0:ze.variableName;if(Fe.selectedVariantName&&ot&<){if(Nn(Fe)){let Z=Fe.selectedVariantName,ge=Fe.variants.find(J=>J.name===Z);if(ge){if(!ge.fields||ge.fields.length===0){let J="NULL";if(Ue&&((bt=e.$)!=null&&bt.type)){let Ne=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${Ne} = ${J};`),er(Ue,t,n),Ue}else return J}else if(ge.fields.length===1){let J=O(ot[0],t,n);if(Ue&&((Kt=e.$)!=null&&Kt.type)){let Ne=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${Ne} = ${J};`),er(Ue,t,n),Ue}else return J}}}if(or(Fe)){let Z=Fe.selectedVariantName,ge=Yn(Fe,Z,n);if(Ue&&((kt=e.$)!=null&&kt.type)){let J=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${J} = ${ge};`),er(Ue,t,n),Ue}else return ge}let oe=Fe.selectedVariantName,fe=Fe.variants.find(Z=>Z.name===oe);if(fe){let Z=((ht=fe.fields)==null?void 0:ht.filter(ye=>!Se(ye.type)))||[],ge=n,J=ot.map((ye,Ke)=>{var Qe,De,st,Ze,Lt;if(fe.fields){let At=fe.fields[Ke];if(At&&!Se(At.type)){let mn=O(ye,t,n),Ln=Re(At.label,(Qe=ye.$)==null?void 0:Qe.env),Zt=mn;if((De=ye.$)!=null&&De.variableName&&((st=ye.$)!=null&&st.type)){let Tn=ge.currentClosureCaptures&&ge.currentClosureCaptures.includes(ye.$.variableName)&&Y(ye)&&ye.$.env&&ge.currentClosureCaptureFrameLevel!==void 0&&Dr(ye.token.value,ye.$.env,ge.currentClosureCaptureFrameLevel),dr=(ge.inAsyncStateMachine||ge.inEffectStateMachine)&&mn.startsWith("sm->"),Qr=!1;if(Y(ye)&&ye.$.env&&ye.$.variableName){let Bi=pe(ye.$.env,ye.$.variableName);Bi.length>0&&Bi[Bi.length-1].isCompileTimeOnly&&(Qr=!0)}let yi=!1;if(mn&&mn!==ye.$.variableName&&!Tn&&!dr&&!Qr){let Bi=Re(ye.$.variableName,ye.$.env);if(mn!==Bi){let vs=Dt(ye.$.type,ye.$.variableName,n);n.emitter.emitLine(`${t}${vs} = ${mn};`),yi=!0,er(ye.$.variableName,t,n)}}yi&&(Zt=Re(ye.$.variableName,ye.$.env))}if((Ze=ye.$)!=null&&Ze.deferredDupExpressions&&ye.$.deferredDupExpressions.length>0){Ft(ye,t,ge);let Tn=ye.$.deferredDupExpressions[0];A(Tn)&&((Lt=Tn.$)!=null&&Lt.variableName)&&(Zt=Re(Tn.$.variableName,Tn.$.env))}return`.${Ln} = `+Zt}return""}else return""}).filter(ye=>ye).join(", "),Ne=Z.length>0?`(${lt}){ .tag = ${Yn(Fe,oe,n)}, .data = { .${oe} = { ${J} } } }`:`(${lt}){ .tag = ${Yn(Fe,oe,n)} }`;if(Ue&&((dn=e.$)!=null&&dn.type)){let ye=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${ye} = ${Ne};`),er(Ue,t,n),Ue}else return Ne}}}}else if(We(r)){let Fe=e.args[0];if(Fe&&A(Fe)&&T(Fe,":")){let Ue=O(e.func,t,n),Ee=O(Fe.args[0],t,n),K=O(Fe.args[1],t,n),oe=`Slice_${me(q(r.childType,n))}`;return n.sliceStructTypes.has(oe)||n.sliceStructTypes.set(oe,{childType:q(r.childType,n)}),`(${oe}){ .data = &${Ue}.data[${Ee}], .length = (${K}) - (${Ee}) }`}else if(Fe&&Y(Fe)&&Fe.token.value===":"){let Ue=O(e.func,t,n),Ee=r,K=Ee.childType,oe=`Slice_${me(q(K,n))}`;return n.sliceStructTypes.has(oe)||n.sliceStructTypes.set(oe,{childType:q(K,n)}),ft(Ee.length)?`(${oe}){ .data = &${Ue}.data[0], .length = ${Ee.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let ot=O(e.func,t,n),lt=O(Fe,t,n);return`${ot}.data[${lt}]`}else if(Et(r)){let Fe=e.args[0];if(Fe&&A(Fe)&&T(Fe,":")){let Ue=O(e.func,t,n),Ee=O(Fe.args[0],t,n),K=O(Fe.args[1],t,n),oe=`Slice_${me(q(r.childType,n))}`;return n.sliceStructTypes.has(oe)||n.sliceStructTypes.set(oe,{childType:q(r.childType,n)}),`(${oe}){ .data = &${Ue}.data[${Ee}], .length = (${K}) - (${Ee}) }`}else if(Fe&&Y(Fe)&&Fe.token.value===":"){let Ue=O(e.func,t,n),Ee=`Slice_${me(q(r.childType,n))}`;return n.sliceStructTypes.has(Ee)||n.sliceStructTypes.set(Ee,{childType:q(r.childType,n)}),`(${Ee}){ .data = ${Ue}.data, .length = ${Ue}.length }`}let ot=O(e.func,t,n),lt=O(Fe,t,n);return`${ot}.data[${lt}]`}else if(r&&Xe(r)&&Et(r.childType)){let Fe=O(e.func,t,n),ot=O(e.args[0],t,n);return`${Fe}.data[${ot}]`}}var Uy=0;function zy(e,t,n,r,i){var d;let o=i.emitter,a=Uy++,s=t.parameters.filter(y=>!y.isCompileTimeOnly),l=e.body?!e.isControlFunction||fi(e.body):!1,u=l?(d=e.body.$)==null?void 0:d.type:void 0,c=!u||Se(u),f=`__ctl_direct_result_${a}`;if(l&&!c){let y=q(u,i);o.emitLine(`${r}${y} ${f};`)}let p=`${r} `;o.emitLine(`${r}{`);let _=[];for(let y=0;y<s.length&&y<n.length;y++){let g=s[y],h=q(g.type,i),v=me(g.label);if(o.emitLine(`${p}${h} ${v} = ${n[y]};`),Be(g.type)){let E=ar(v,g.type,i);E&&_.push(E)}}if(l){let y=`__ctl_direct_exit_${a}`,g=i.continuationVariables,h=new Map(g);h.set("resume",{directReturnVar:c?"":f,directExitLabel:y,isUnitReturn:c}),i.continuationVariables=h;let v=i.pendingDeferredDrops;i.pendingDeferredDrops=void 0;let E=O(e.body,p,i);return E&&o.emitLine(`${p}${E};`),i.pendingDeferredDrops=v,i.continuationVariables=g,o.emitLine(`${r}}`),o.emitLine(`${r}${y}:;`),c?"":f}else{let y=i.effectHandlerParamDrops;i.effectHandlerParamDrops=_;let g=i.effectSmConsumedArgCNames,h=new Set;for(let E=0;E<s.length&&E<n.length;E++){let k=s[E];Be(k.type)&&h.add(n[E])}h.size>0&&(i.effectSmConsumedArgCNames=h);let v=O(e.body,p,i);v&&o.emitLine(`${p}${v};`),i.effectSmConsumedArgCNames=g,i.effectHandlerParamDrops=y}return o.emitLine(`${r}}`),""}function qf(e,t,n){var a,s;let r=n.emitter,i=(a=e.$)==null?void 0:a.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 l=e.args[0];if((s=l.$)!=null&&s.value&&Tt(l.$.value)){let u=l.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(u)});`),r.emitLine(`${t}abort();`)}else{let u=O(l,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${u});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${q(i,n)}*)NULL))`}function Yf(e,t,n){var l,u,c,f,p,_,d,y,g,h;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=O(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(Y(i)){let v=i.token.value;if((c=e.$)!=null&&c.value&&be(e.$.value)){let E=e.$.value;return((f=n.functions[E.funcId])==null?void 0:f.cName)||E.funcId}if(!((p=e.$)!=null&&p.value)&&(L.___dispose.includes(v)||L.___drop.includes(v)||L.___dup.includes(v))&&a){let E=null;if((Ae(a)||Me(a))&&(E=a.trait),E){let k=E.fields.find(b=>b.label===v&&b.assignedValue&&be(b.assignedValue));if(k&&be(k.assignedValue)){let b=k.assignedValue;return((_=n.functions[b.funcId])==null?void 0:_.cName)||b.funcId}else return`/* ERROR: Rc method ${v} not found in type module */`}else return`/* ERROR: No module found for Rc method ${v} */`}if(Ye(a)||Bt(s)){let E=(d=e.$)==null?void 0:d.value;if(E){if(xe(E)){if(E.variableName)return Re(E.variableName,(y=e.$)==null?void 0:y.env)}else if(!Bt(E))return Fn(E,n,e)}return Re(v,(g=e.$)==null?void 0:g.env)}if(qo(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===v)return o}if(Me(a)){let E=a;if(Nn(E))return o;for(let b of E.variants)if(b.fields){for(let F of b.fields)if(F.label===v){let $=b.name;return`${o}.data.${$}.${me(v)}`}}return`/* ERROR: field ${v} not found in enum ${E.typeName} */`}else if(H(s)&&Me(s.value)){let E=s.value,k=E.variants.find(F=>F.name===v),b=(h=n.types[E.id])==null?void 0:h.cName;if(k&&!k.fields&&b){let F=Yn(E,k.name,n);return`(${b}){ .tag = ${F}, .data = { } }`}}else{if(rn(a)&&v==="*")return`${o}->value`;if(Xe(a)){if(v==="*")return`(*${o})`;if(Et(a.childType))return`${o}->${me(v)}`;{let E=0,k=a;for(;Xe(k);)E++,k=k.childType;if(E>0&&Ae(k)&&k.isReferenceSemantics&&E++,qo(k)&&k.fields.length===1){let b=k.fields[0];if(b&&b.label===v)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${me(v)}`:`${`(${"*".repeat(E-1)}${o})`}->${me(v)}`:`${o}.${me(v)}`}}else if(He(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let E=a.fields.findIndex(k=>k.label===v);return`${o}._${E}`}}else return et(a)?`${o}.vtable->${me(v)}`:Wt(a)?`${o}->${me(v)}`:`${o}.${me(v)}`}}return"/* ERROR: field name must be an identifier */"}function jf(e,t,n){var l,u,c,f,p;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${w(e)}
|
|
10650
|
-
`;let i=e.args[0];if(
|
|
10651
|
-
`}function __(e,t,n){let r=e.args[0];return`sizeof(${O(r,t,n)})`}function p_(e,t,n){var a,s,l,u,c,f,p,_,d;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(u=n.types[((l=(s=e.$)==null?void 0:s.type)==null?void 0:l.id)??""])==null?void 0:u.cName,o=(c=e.$)==null?void 0:c.variableName;if(r&&i){let y=n,g=r.map((h,v)=>{var b,F;let k=O(h,t,n);if((b=h.$)!=null&&b.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Ft(h,t,y);let $=h.$.deferredDupExpressions[0];A($)&&((F=$.$)!=null&&F.variableName)&&(k=Re($.$.variableName,$.$.env))}return`._${v} = ${k}`}).join(", ");if(o&&((f=e.$)!=null&&f.type)){let h=`(${i}){ ${g} }`,v=Dt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}else{if(e.args.length===0)return"";{let y=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((_=(p=e.$)==null?void 0:p.type)==null?void 0:_.id)??"none"} */`;let g=y.map((h,v)=>{let E=O(h,t,n);return`._${v} = ${E}`}).join(", ");if(o&&((d=e.$)!=null&&d.type)){let h=`(${i}){ ${g} }`,v=Dt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}}}function By(e,t){if(A(e)&&T(e,V.begin)){let n=[];for(let r of e.args)if(A(r)&&T(r,"=",2)){let i=r.args[0],o=r.args[1],a=O(i,"",t),s=O(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(A(e)&&T(e,"=",2)){let n=e.args[0],r=e.args[1],i=O(n,"",t),o=O(r,"",t);return`${i} = ${o}`}return O(e,"",t)}function d_(e,t,n){var r,i;if(A(e)&&T(e,V.begin)){let o=n,a=o.pendingDeferredDrops,s=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];o.pendingDeferredDrops=[...s,...a??[]];for(let l of e.args){let u=O(l,t,n);u&&n.emitter.emitLine(`${t}${u};`)}if((i=e.$)!=null&&i.deferredDropExpressions)for(let l of e.$.deferredDropExpressions){let u=O(l,t,n);u&&n.emitter.emitLine(`${t}${u};`)}o.pendingDeferredDrops=a}else{let o=O(e,t,n);o&&n.emitter.emitLine(`${t}${o};`)}}function m_(e,t,n){var i,o;let r=e.args;if(r.length===2){let a=r[0],s=r[1],l=n.currentLoopLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u;let c=n,f=c.loopBodyDropsBaselineCount;c.loopBodyDropsBaselineCount=((i=c.pendingDeferredDrops)==null?void 0:i.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=O(a,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),d_(s,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),c.loopBodyDropsBaselineCount=f,n.currentLoopLabel=l,""}else if(r.length===3){let a=r[0],s=r[1],l=r[2],u=n.currentLoopLabel,c=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let _=n,d=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let y=O(a,t+" ",n);n.emitter.emitLine(`${t} if (!(${y})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),d_(l,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let g=By(s,n);return n.emitter.emitLine(`${t} ${g};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),_.loopBodyDropsBaselineCount=d,n.currentLoopLabel=u,n.currentContinueLabel=c,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Gy(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;G(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Gt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Wy(e,t,n,r){var f,p;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(_=>A(_)&&T(_,V.using));if(!o)return;let a=un(i.$.type);if(!((p=a==null?void 0:a.isFuture.effects)!=null&&p.length))return;let s=Gy(a.isFuture.effects),l=o.args,c=r.emitter;for(let _=0;_<s.length&&_<l.length;_++){let d=s[_],y=l[_];if(!ae(d.type)||d.type.forallParameters.length>0)continue;let g=O(y,n,r),h=d.label;c.emitLine(`${n} ${t}->__capture.${h} = (void*)${g};`)}}function Hy(e,t,n){var l;let r=n,i=e.args[0],o=(l=r.continuationVariables)==null?void 0:l.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let u=O(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${u};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let u=r.emitter;if(i){let c=O(i,t,n);c&&c!=="(void)0"&&u.emitLine(`${t}(void)${c};`)}if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)u.emitLine(`${t}${c};`);return $r(t,r,e,!1,!1,!0),yc({emitter:u,indent:t,debugLabel:r.currentFunctionName}),""}if(!i){if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);return $r(t,r,e,!1,!1,!0),"return"}let s=O(i,t,n);if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);return $r(t,r,e,!1,!1,!0),`return ${s}`}function y_(e,t,n){let r;switch(e.tag){case"FnCall":r=qy(e,t,n);break;case"Atom":r=$o(e,n,t);break}return r}function qy(e,t,n){var r,i,o,a,s,l,u,c,f,p;if((r=e.$)!=null&&r.macroExpansion)return O(e.$.macroExpansion,t,n);if(A(e.func)&&T(e.func,".",2)&&e.func.args[1]&&Y(e.func.args[1])){let _=e.func.args[1].token.value,d=e.func.args[0],y=(i=d==null?void 0:d.$)==null?void 0:i.type;if(y&&G(y)&&qe(y)){if(_===L.___drop[0]){let g=O(d,t,n);return`if (${g} != NULL) { __yo_decr_rc((void*)${g}); }`}if(_===L.___dup[0])return`__yo_incr_rc((void*)${O(d,t,n)})`}}if(bc(e))return kc(e,t,n);if(T(e,L.__yo_decr_rc))return Kf(e,t,n);if(T(e,L.__yo_incr_rc))return Xf(e,t,n);if(T(e,L.__yo_rc_own))return Qf(e,t,n);if(T(e,L.__yo_drop_array_element))return Zf(e,t,n);if(T(e,L.__yo_dup_array_element))return Jf(e,t,n);if(T(e,L.__yo_drop_tuple_element))return e_(e,t,n);if(T(e,L.__yo_dup_tuple_element))return t_(e,t,n);if(T(e,L.___dup))return n_(e,t,n);if(T(e,L.___drop))return r_(e,t,n);if(T(e,L.__yo_dyn_drop))return i_(e,t,n);if(T(e,L.__yo_dyn_dup))return o_(e,t,n);if(T(e,L.__yo_incr_rc_atomic))return a_(e,t,n);if(T(e,L.__yo_decr_rc_atomic))return s_(e,t,n);if(T(e,L.__yo_iso_extract))return Mf(e,t,n);if(T(e,L.__yo_iso_dispose))return Of(e,t,n);if(T(e,L.__yo_arc_dispose))return $f(e,t,n);if(Bl(e))return Rf(e,t,n);if(zl(e))return Cf(e,t,n);if(T(e,L.__yo_sometype_drop))return l_(e,t,n);if(T(e,L.__yo_sometype_dup))return u_(e,t,n);if(T(e,L.__yo_gc_collect))return Vf(e,t,n);if(T(e,L.rc))return c_(e,t,n);if(T(e,L.panic))return qf(e,t,n);if(T(e,V.test))return"/* test declaration skipped */";if(T(e,L.__yo_thread_set_maximum_threads))return Wf(e,t,n);if(T(e,V.op_and))return Tf(e,t,n);if(T(e,V.op_or))return Ef(e,t,n);if(vn(e))return(o=e.$)!=null&&o.awaitAnalysis?wc(e,t,n):Nc(e,t,n);if(T(e,V.dyn))return xf(e,t,n);if(qn(e))return Ff(e,t,n);if(ju(e))return Lf(e,t,n);if(Ku(e)){let _=e.args[0];if(!_)return"// Error: spawn requires a Future argument";let y=n.emitter,g=O(_,t,n),h=(a=_.$)==null?void 0:a.type,v=h?q(h,n):"void*",E="__spawn_future";return y.emitLine(`${t}// io.spawn \u2014 start cold Future without waiting`),y.emitLine(`${t}{`),y.emitLine(`${t} ${v} ${E} = ${g};`),y.emitLine(`${t} int __spawn_state = ${E}->state;`),y.emitLine(`${t} if (__spawn_state == -2) {`),y.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),y.emitLine(`${t} abort();`),y.emitLine(`${t} }`),ua((s=_.$)==null?void 0:s.type)||(y.emitLine(`${t} if (__spawn_state == 0 && ${E}->__yo_resume_fn) {`),Wy(e,E,`${t} `,n),y.emitLine(`${t} __yo_incr_rc((void*)${E});`),y.emitLine(`${t} ${E}->__yo_resume_fn((void*)${E});`),y.emitLine(`${t} }`)),y.emitLine(`${t}}`),""}if(T(e,V.return))return af(e,t,n);if(T(e,V.escape))return Hy(e,t,n);if(T(e,L.__yo_array_fill,2))return kf(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return If(e,t,n);if(T(e,":=",2)){let _=Df(e,t,n);if(_!==void 0)return _}else{if(T(e,"=",2))return wf(e,t,n);if((l=e.$)!=null&&l.value&&!xe((u=e.$)==null?void 0:u.value)&&!Se(e.$.type)&&!Ut((c=e.$)==null?void 0:c.controlFlow)){let _=e.$.value;return Fn(_,n,e)}else{if(T(e,".",2))return Yf(e,t,n);if(T(e,V.begin))return Af(e,t,n);if(T(e,V.cond))return Nf(e,t,n);if(T(e,V.match))return Uf(e,t,n);if(T(e,L.__yo_address_of,1))return jf(e,t,n);if(T(e,V.tuple))return p_(e,t,n);if(T(e,V.array)){let _=bf(e,t,n);if(_!==void 0)return _}else{if(T(e,V.recur))return f_(e,t,n);if(T(e,V.runtime,1))return O(e.args[0],t,n);if(T(e,L.sizeof,1))return __(e,t,n);if(T(e,xi)){let _=((f=e.$)==null?void 0:f.runtimeArgExprsInOrder)||e.args;if(_){let d=n,y=_.map(g=>{var v,E;let h=O(g,t,n);if((v=g.$)!=null&&v.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){Ft(g,t,d);let k=g.$.deferredDupExpressions[0];if(A(k)&&((E=k.$)!=null&&E.variableName))return Re(k.$.variableName,k.$.env)}return h});return fa(e.func.token.value,y,e,n,t)}}else{if(T(e,V.while))return m_(e,t,n);if(T(e,"->",2)&&A(e.args[0])&&T(e.args[0],V.fn)){let _=(p=e.$)==null?void 0:p.value;return be(_)?Fn(_,n):"// Error: Anonymous function missing function value"}else{if(T(e,L.consume))return Sf(e,t,n);if(T(e,L.comptime_expect_error)||T(e,L.comptime_assert)||T(e,L.__yo_var_print_info)||T(e,L.__yo_var_is_owning_the_rc_value)||T(e,L.__yo_var_has_other_aliases))return"";if(T(e,V.open))return zf(e,t,n);{let _=Hf(e,t,n);if(_!==void 0)return _}}}}}}if(A(e))throw new Error(`Unhandled function call: ${w(e)}`);return`// Failed to transpile ${w(e)}`}function g_({expr:e,env:t,context:n}){Oe(e,L.alignof,1);let r=e.args[0],i=M({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&&H(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Pr(o),s;return a===null?s=le(qt(),{env:t,context:n}):s=kn("Usize",a),e.$={env:t,type:qt(),value:s,pathCollection:[]},e}function h_({expr:e,env:t,context:n}){let r=T(e,V.op_and)?"and":"or",i=e.args;if(i.length===0){let u=Mt(r==="and");return e.$={env:t,type:Ct(),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],f=M({expr:c,env:o,context:{...n}});if(!f.$||!Wn(f.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
|
|
10652
|
-
${w(c)}`});o=f.$.env;let p=f.$.value;if(
|
|
10649
|
+
)`;if(L.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(L.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let f=H(n.$.type,r),p=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return p&&Me(p)&&!or(p)?`((${f})((${t[0]}).tag))`:`((${f})(${t[0]}))`}else{if(L.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(L.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(L.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(L.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(L.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(L.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(L.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(L.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(L.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(L.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(L.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${H(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(L.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(L.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(L.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(L.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let f=H(n.$.type,r),p=`__yo_uninit_${Uy++}`;return r.emitter.emitLine(`${i}${f} ${p};`),p}else return L.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${H(n.$.type,r)})(${t[0]}))`:L.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function Rf(e,t,n){var c,f,p,_;let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=R(r,t,n),o=(c=r.$)==null?void 0:c.type;if(!o||!on(o))return"// Error: __yo_iso_extract requires an Iso type";let a=H(o,n),s=(f=e.$)==null?void 0:f.type;if(s&&((p=n.isoTypes)!=null&&p.has(a))){let d=n.isoTypes.get(a);d.optionTypeCName||(d.optionTypeCName=H(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(_=e.$)==null?void 0:_.variableName;return u&&s?(n.emitter.emitLine(`${t}${H(s,n)} ${u} = ${l};`),u):l}function Pf(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=R(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!on(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(o,n)}(${i})`}function Gl(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return q(t)&&on(t.value)&&e.args.length===1}function Uf(e,t,n){var c;if(!Gl(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=R(a,t,n),l=H(i,n),u=H(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 jr(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function Kr(e,t,n){var r,i,o,a,s,l;if(I(e)&&T(e,V.begin)){let u=e.args,c=n,f=c.pendingDeferredDrops,p=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];c.pendingDeferredDrops=[...p,...f??[]];for(let d=0;d<u.length-1;d++){let y=u[d],g=R(y,t,n);g&&n.emitter.emitLine(`${t}${g};`)}let _="";if(u.length>0){let d=u[u.length-1];if((i=d.$)!=null&&i.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if((o=d.$)!=null&&o.variableName){let g=d.$.variableName;d.$.variableName=void 0;let h=R(d,t,n);d.$.variableName=g;let v=H(d.$.type,n),E=Re(g,d.$.env);E!==h&&n.emitter.emitLine(`${t}${v} ${E} = ${h};`)}Ft(d,t,n);let y=d.$.deferredDupExpressions[0];I(y)&&((a=y.$)!=null&&a.variableName)?_=Re(y.$.variableName,y.$.env):_=R(d,t,n)}else _=R(d,t,n)}return(s=e.$)!=null&&s.deferredDropExpressions&&Qt(e,t,n),c.pendingDeferredDrops=f,_}else return(l=e.$)!=null&&l.deferredDupExpressions&&Ft(e,t,n),R(e,t,n)}function Bf(e,t,n){var y,g,h,v,E,k,b;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&xe(i);if(!o&&r){let F=H(i,n);n.emitter.emitLine(`${t}${F} ${r};`)}let a=R(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return By(e,t,n,a,s,r,o);let l,u;if(Xe(s)?(u=s.childType,l=s.tag):qt(s)?(u=s,l="ref_semantics"):u=s,!Me(u))return'// Error: "match" expression requires an enum type';if(!((g=n.types[u.id])==null?void 0:g.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let f=Nn(u);if(f){let F=e.args.slice(1),$=null,C=null;for(let A of F)if(I(A)&&T(A,"=>",2)){let N=A.args[0],x=A.args[1];if(N&&x&&I(N)&&T(N,"."))$={caseBody:x};else{let D=N.func;if(D&&I(D)&&T(D,".")){let P=D.args[0];if(P&&Y(P)){let U=P.token.value;C={caseBody:x,variantName:U,casePattern:N}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),C){let A;if(I(C.casePattern)&&C.casePattern.args.length>0){let P=C.casePattern.args[0];if(P&&Y(P)){A=me(P.token.value);let U=f;n.emitter.emitLine(`${t} ${H(U,n)} ${A} = ${a};`)}}let N=n;A&&(N.inAsyncStateMachine||N.inEffectStateMachine)&&(N.localShadowedVariables||(N.localShadowedVariables=new Set),N.localShadowedVariables.add(A));let x=Kr(C.caseBody,t+" ",n);A&&N.localShadowedVariables&&N.localShadowedVariables.delete(A);let D=jr(x);if(!o&&r&&!D){let P=x||a;n.emitter.emitLine(`${t} ${r} = ${P};`)}else x&&x!==""&&n.emitter.emitLine(`${t} ${x};`)}if(n.emitter.emitLine(`${t}} else {`),$){let A=Kr($.caseBody,t+" ",n),N=jr(A);!o&&r&&!N?n.emitter.emitLine(`${t} ${r} = ${A};`):A&&A!==""&&n.emitter.emitLine(`${t} ${A};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(or(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let F=n.insideMatch;n.insideMatch=!0;let $=e.args.slice(1);for(let C=0;C<$.length;C++){let A=$[C];if(I(A)&&T(A,"=>",2)){let N=A.args[0],x=A.args[1];if(N&&x&&Y(N)&&N.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let D=Kr(x,t+" ",n);!o&&r&&D&&!jr(D)?n.emitter.emitLine(`${t} ${r} = ${D};`):D&&n.emitter.emitLine(`${t} ${D};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(N&&x&&I(N)&&T(N,".",1)){let D=N.args[0].token.value,P=Yn(u,D,n);n.emitter.emitLine(`${t}case ${P}: {`);let U=Kr(x,t+" ",n);!o&&r&&U&&!jr(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=F,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 F=0;F<d.length;F++){let $=d[F];if(I($)&&T($,"=>",2)){let C=$.args[0],A=$.args[1];if(C&&A&&Y(C)&&C.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let N=Kr(A,t+" ",n);!o&&r&&N&&!jr(N)?n.emitter.emitLine(`${t} ${r} = ${N};`):N&&n.emitter.emitLine(`${t} ${N};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&A&&I(C)&&C.func.tag==="Atom"&&C.func.token.value==="."&&C.args.length>=1){let N=C.args[0].token.value,x=Yn(u,N,n);if(n.emitter.emitLine(`${t}case ${x}: {`),C.args.length>1){let P=u.variants.find(U=>U.name===N);if(P&&P.fields){let U=C.args.slice(1);if(U.some(O=>I(O)&&T(O,":",2))){for(let O of U)if(I(O)&&T(O,":",2)){let z=O.args[0],W=O.args[1];if(!Y(z))continue;let ee=z.token.value,de=P.fields.find(se=>se.label===ee);if(!de||xe(de.type))continue;if(Y(W)){let se=W.token.value;if(se!=="_"){let K=me(se),te=me(ee),re=H(de.type,n),we=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${re} ${K} = ${a}${we}data.${N}.${te};`);let ce=n;if((ce!=null&&ce.inAsyncStateMachine||ce!=null&&ce.inEffectStateMachine)&&ce.stateMachineVariables){let Q;if((h=W.$)!=null&&h.env){let Pe=pe(W.$.env,se);Pe.length>0&&(Q=Pe[Pe.length-1].id)}Q&&ce.stateMachineVariables.has(Q)&&n.emitter.emitLine(`${t} sm->var_${Q} = ${K};`)}}}}}else for(let O=0;O<U.length&&O<P.fields.length;O++){let z=U[O],W=P.fields[O];if(Y(z)&&W){if(xe(W.type))continue;let ee=z.token.value;if(ee!=="_"){let de=me(ee),se=me(W.label),K=H(W.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${K} ${de} = ${a}${te}data.${N}.${se};`);let re=n;if((re!=null&&re.inAsyncStateMachine||re!=null&&re.inEffectStateMachine)&&re.stateMachineVariables){let we;if((v=z.$)!=null&&v.env){let ce=pe(z.$.env,ee);ce.length>0&&(we=ce[ce.length-1].id)}we&&re.stateMachineVariables.has(we)&&n.emitter.emitLine(`${t} sm->var_${we} = ${de};`)}}}}}}if(I(A)&&T(A,"=>",2)){let P=A.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${me(P.token.value)} = ${a};`),A=A.args[1]}let D=Kr(A,t+" ",n);!o&&r&&D&&!jr(D)?n.emitter.emitLine(`${t} ${r} = ${D};`):D&&n.emitter.emitLine(`${t} ${D};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&A&&I(C)&&I(C.func)&&C.func.func.tag==="Atom"&&C.func.func.token.value==="."&&C.func.args.length===1){let N=C.func.args[0].token.value,x=Yn(u,N,n),D=C.args;n.emitter.emitLine(`${t}case ${x}: {`);let P=u.variants.find(j=>j.name===N);if(P&&P.fields&&D.length>0)if(D.some(O=>I(O)&&T(O,":",2))){for(let O of D)if(I(O)&&T(O,":",2)){let z=O.args[0],W=O.args[1];if(!Y(z))continue;let ee=z.token.value,de=P.fields.find(se=>se.label===ee);if(!de)continue;if(Y(W)){let se=W.token.value;if(se!=="_"){let K=me(se);if(xe(de.type))n.emitter.emitLine(`${t} // ${K} is unit type (no value)`);else{let te=me(ee),re=H(de.type,n),we=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${re} ${K} = ${a}${we}data.${N}.${te};`);let ce=n;if((ce!=null&&ce.inAsyncStateMachine||ce!=null&&ce.inEffectStateMachine)&&ce.stateMachineVariables){let Q;if((E=W.$)!=null&&E.env){let Pe=pe(W.$.env,K);Pe.length>0&&(Q=Pe[Pe.length-1].id)}Q&&ce.stateMachineVariables.has(Q)&&n.emitter.emitLine(`${t} sm->var_${Q} = ${K};`)}}}}}}else for(let O=0;O<Math.min(D.length,P.fields.length);O++){let z=D[O],W=P.fields[O];if(z.tag==="Atom"&&W){let ee=z.token.value;if(ee!=="_"){let de=me(ee);if(xe(W.type))n.emitter.emitLine(`${t} // ${de} is unit type (no value)`);else{let se=me(W.label),K=H(W.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${K} ${de} = ${a}${te}data.${N}.${se};`);let re=n;if((re!=null&&re.inAsyncStateMachine||re!=null&&re.inEffectStateMachine)&&re.stateMachineVariables){let we;if((k=z.$)!=null&&k.env){let ce=pe(z.$.env,ee);ce.length>0&&(we=ce[ce.length-1].id)}we&&re.stateMachineVariables.has(we)&&n.emitter.emitLine(`${t} sm->var_${we} = ${de};`)}}}}}if(I(A)&&T(A,"=>",2)){let j=A.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${me(j.token.value)} = ${a};`),A=A.args[1]}let U=Kr(A,t+" ",n);!o&&r&&U&&!jr(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=_,n.emitter.emitLine(`${t}}`),(b=e.$)!=null&&b.deferredDropExpressions&&Qt(e,t,n),o?"":r??""}function zy(e){return I(e)?T(e,"|",2):!1}function Wl(e){if(!zy(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Wl(n),...Wl(r)]}function zf(e){if(e!==void 0){if(ft(e))return String(e.value);if(_t(e))return e.value?"true":"false"}}function By(e,t,n,r,i,o,a){var u,c,f;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let p=0;p<l.length;p++){let _=l[p];if(I(_)&&T(_,"=>",2)){let d=_.args[0],y=_.args[1];if(!d||!y)continue;if(Y(d)&&d.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let E=Kr(y,t+" ",n);!a&&o&&E&&!jr(E)?n.emitter.emitLine(`${t} ${o} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let g=Wl(d),h=(u=d.$)==null?void 0:u.primitivePatternValues;if(h&&h.length>0)for(let E of h){let k=zf(E);k!==void 0&&n.emitter.emitLine(`${t}case ${k}:`)}else for(let E of g){let k=(c=E.$)==null?void 0:c.value,b=zf(k);b!==void 0&&n.emitter.emitLine(`${t}case ${b}:`)}n.emitter.emitLine(`${t}{`);let v=Kr(y,t+" ",n);!a&&o&&v&&!jr(v)?n.emitter.emitLine(`${t} ${o} = ${v};`):v&&n.emitter.emitLine(`${t} ${v};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(f=e.$)!=null&&f.deferredDropExpressions&&Qt(e,t,n),a?"":o??""}function Gf(e,t,n){var r,i;if((r=e.$)!=null&&r.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let o=e.args[0];if(!o||!((i=o.$)!=null&&i.type))return"// Error: open expression has no argument or type";let a=o.$.type,s=o.$.value;if(Ie(a)&&s===void 0){let l=R(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let f=H(c.type,n),p=me(c.variableName),_=me(c.label);n.emitter.emitLine(`${t}${f} ${p} = ${l}.${_};`)}}}return""}function Wf(e,t,n){var y,g,h,v,E;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(G(o)){let k=o;k.resolvedConcreteType&&(a=k.resolvedConcreteType.id,s=k.resolvedConcreteType)}else Ie(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=H(s,n),f=R(i,t,n),p=(h=i.$)!=null&&h.variableName?Re(i.$.variableName,i.$.env):f,_=`_thread_closure_data_${yt(((v=e.$)==null?void 0:v.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`);let d=(E=e.$)==null?void 0:E.variableName;return d?(n.emitter.emitLine(`${t}__yo_thread_t ${d} = __yo_thread_spawn(${u}, ${_});`),d):`__yo_thread_spawn(${u}, ${_})`}function qf(e,t,n){var d,y,g,h;let r=(d=e.$)==null?void 0:d.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(y=i.$)==null?void 0:y.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(G(o)){let v=o;v.resolvedConcreteType&&(a=v.resolvedConcreteType.id,s=v.resolvedConcreteType)}else Ie(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=H(s,n),f=R(i,t,n),p=(g=i.$)!=null&&g.variableName?Re(i.$.variableName,i.$.env):f,_=`_worker_closure_data_${yt(((h=e.$)==null?void 0:h.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${_});`),""}function Hf(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${R(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function er(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&&He(i.type))return;let o=`var_${i.id}`,a=me(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function Yf(e,t,n){var o,a,s,l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$,C,A,N,x,D,P,U,j,O,z,W,ee,de,se,K,te,re,we,ce,Q,Pe,ut,at,_e,Ce,$e,Ge,rt,ct,jt,B,ne,ve,Te,Ae,Fe,ze,bt,Kt,kt,vt,mn;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Ve(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&Qt(e,t,n),xe(e.$.type)?"":Fn(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.type,i=(l=e.func.$)==null?void 0:l.value;if(ae(r)){let Le=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(Le){let ot=!1;if(I(e.func)&&T(e.func,".",2)){let Ee=e.func.args[0],X=(c=Ee==null?void 0:Ee.$)==null?void 0:c.type;X&&et(X)&&(ot=!0)}let lt=Le.map((Ee,X)=>{var oe,fe,Z,he,J,Ne,ge,Ke,Qe;if((oe=Ee.$)!=null&&oe.variableName&&((fe=Ee.$)!=null&&fe.type)){let De=n,st=De.currentClosureCaptures&&De.currentClosureCaptures.includes(Ee.$.variableName)&&Y(Ee)&&Ee.$.env&&De.currentClosureCaptureFrameLevel!==void 0&&Mr(Ee.token.value,Ee.$.env,De.currentClosureCaptureFrameLevel),Ze=R(Ee,t,n),Lt=!1;if(Y(Ee)&&Ee.$.env&&Ee.$.variableName){let Zt=pe(Ee.$.env,Ee.$.variableName);Zt.length>0&&Zt[Zt.length-1].isCompileTimeOnly&&(Lt=!0)}let At=(De.inAsyncStateMachine||De.inEffectStateMachine)&&Ze.startsWith("sm->"),yn=!1;if(Ze&&Ze!==Ee.$.variableName&&!st&&!At&&!Lt){let Zt=Re(Ee.$.variableName,Ee.$.env);if(Ze!==Zt){let Tn=Ee.$.convertedRuntimeType||Ee.$.type,dr=Dt(Tn,Ee.$.variableName,n);n.emitter.emitLine(`${t}${dr} = ${Ze};`),yn=!0,er(Ee.$.variableName,t,n)}}let Ln=yn?Ee.$.variableName:Ze;if((Z=Ee.$)!=null&&Z.deferredDupExpressions&&Ee.$.deferredDupExpressions.length>0){let Zt=new Set;(he=Ee.$)!=null&&he.variableName&&Zt.add(Re(Ee.$.variableName,Ee.$.env)),Ze&&Zt.add(Ze),Y(Ee)&&Zt.add(Re(Ee.token.value,Ee.$.env));let Tn=Ee.$.deferredDupExpressions.find(dr=>{var yi;let Qr=Za(dr);return Qr?Zt.has(Re(Qr,(yi=dr.$)==null?void 0:yi.env)):!1});Tn&&(Ft(Ee,t,De),I(Tn)&&((J=Tn.$)!=null&&J.variableName)&&(Ln=Re(Tn.$.variableName,Tn.$.env)))}if(ot&&X===0){if(I(e.func)&&T(e.func,".",2)){let Tn=e.func.args[0],dr=(Ne=Tn==null?void 0:Tn.$)==null?void 0:Ne.type,Qr=e.func.args[1];if(Y(Qr)&&et(dr)){let yi=Qr.token.value;if(dr.trait.fields.find(Es=>Es.label===yi))return me(Ln,Ee.$.type.isExtern==="c")}}let Zt=(ge=Ee.$)==null?void 0:ge.type;return Zt&&Xe(Zt)?`${me(Ln,Ee.$.type.isExtern==="c")}->data`:`(${me(Ln,Ee.$.type.isExtern==="c")}).data`}else return st||At||Lt?Ze:me(Ln,Ee.$.type.isExtern==="c")}else if(ot&&X===0){let De=R(Ee,t,n);if(I(e.func)&&T(e.func,".",2)){let Ze=e.func.args[0],Lt=(Ke=Ze==null?void 0:Ze.$)==null?void 0:Ke.type,At=e.func.args[1];if(Y(At)&&et(Lt)){let yn=At.token.value;if(Lt.trait.fields.find(Zt=>Zt.label===yn))return De}}let st=(Qe=Ee.$)==null?void 0:Qe.type;return st&&Xe(st)?`(${De})->data`:`(${De}).data`}else return R(Ee,t,n)}),Ue=lt.join(", ");if(r.isExtern==="yo"&&r.externName){let Ee=r.externName;return Si.includes(Ee)?fa(Ee,lt,e,n,t):Ee==="__yo_thread_spawn"?Wf(e,t,n):Ee==="__yo_worker_spawn"?qf(e,t,n):xe(r.return.type)?(n.emitter.emitLine(`${t}${Ee}(${Ue});`),(f=e.$)!=null&&f.deferredDropExpressions&&Qt(e,t,n),""):`${Ee}(${Ue})`}if(be(i)){let Ee=go(i);if(Ee)return fa(Ee,lt,e,n,t);let X=i.specializedType??i.type;if(i.isControlFunction&&i.body)return Wy(i,X,lt,t,n);let oe=(p=n.functions[i.funcId])==null?void 0:p.cName;if(oe){let fe=n.functions[i.funcId],Z=fe==null?void 0:fe.effectStateMachineInfo;if(Z){let he=(d=(_=i.body)==null?void 0:_.$)==null?void 0:d.effectAnalysis;if(he!=null&&he.effectHandlerInfos&&he.effectHandlerInfos.length>1){let Ne=[];for(let ge=0;ge<he.effectHandlerInfos.length;ge++){let Qe=he.effectHandlerInfos[ge].handlerValue;if(Qe&&be(Qe)){let De=Qe.specializedType??Qe.type,st=Qe.body,Ze=st?!Qe.isControlFunction||fi(st):!1;Ne.push({handlerBody:st,handlerType:De,hasResume:Ze,effectIndex:ge})}}if(Ne.length>0){let ge=(y=e.$)==null?void 0:y.variableName;return af(Z,lt,X,Ne,ge,t,n)}}let J=he==null?void 0:he.handlerValue;if(J&&be(J)){let Ne=J.specializedType??J.type,ge=J.body,Ke=ge?!J.isControlFunction||fi(ge):!1,Qe=(g=e.$)==null?void 0:g.variableName,De=(h=e.$)==null?void 0:h.type;return Ml(Z,lt,X,ge,Ne,Ke,De,Qe,t,n)}}if(xe(X.return.type))return n.emitter.emitLine(`${t}${oe}(${Ue});`),(v=e.$)!=null&&v.deferredDropExpressions&&Qt(e,t,n),"";{let he=(E=e.$)==null?void 0:E.variableName;if(he){let J=((k=i.specializedType)==null?void 0:k.return.type)??X.return.type,Ne=(b=e.$)==null?void 0:b.type,ge=Ne&&He(Ne),Ke=J&&He(J),Qe;if(ge&&Ke){let De=i.body;if(De&&T(De,"begin")){let st=De.args;if(st.length>0){let Ze=st[st.length-1];vn(Ze)&&(De=Ze)}}if(De&&vn(De)&&((F=De.$)!=null&&F.asyncStateMachineStructName)){let st=De.$.asyncStateMachineStructName;Qe=`${st}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(he,st)}else Ne&&G(Ne)&&Ne.resolvedConcreteType?Qe=H(Ne,n):Qe=H(J,n)}else Qe=H(J??Ne,n);return n.emitter.emitLine(`${t}${Qe} ${he} = ${oe}(${Ue});`),er(he,t,n),($=e.$)!=null&&$.deferredDropExpressions&&Qt(e,t,n),he}else return`// Error: Regular function call returns ${H(((C=i.specializedType)==null?void 0:C.return.type)??X.return.type,n)} but no temp variable assigned`}}}else{let Ee=n.externFunctions[r.id];if(Ee){let X=Ee.cName;return(A=e.$)!=null&&A.deferredDropExpressions&&Qt(e,t,n),`${X}(${Ue})`}else{let X=R(e.func,t,n),oe=H(r.return.type,n),fe=r.parameters.filter(he=>!he.isCompileTimeOnly).map(he=>H(he.type,n)),Z=`((${oe} (*)(${fe.join(", ")}))${X})`;if(xe(r.return.type))return n.emitter.emitLine(`${t}${Z}(${Ue});`),(N=e.$)!=null&&N.deferredDropExpressions&&Qt(e,t,n),"";{let he=(x=e.$)==null?void 0:x.variableName;if(he){let J=r.return.type,Ne=(D=e.$)==null?void 0:D.type,ge=Ne&&J&&He(Ne)&&He(J)?J:Ne??J;return n.emitter.emitLine(`${t}${H(ge,n)} ${he} = ${Z}(${Ue});`),er(he,t,n),(P=e.$)!=null&&P.deferredDropExpressions&&Qt(e,t,n),he}else return`// Error: Function parameter call returns ${H(r.return.type,n)} but no temp variable assigned`}}}}}else if(r&&wn(r)){let Le=r,ot=In(Le),lt=et(Le);{let Ue=ot.isFn.callType,Ee=(U=e.$)==null?void 0:U.runtimeArgExprsInOrder;if(Ee){let X=n;for(let J of Ee)if((j=J.$)!=null&&j.variableName&&((O=J.$)!=null&&O.type)){let Ne=X.currentClosureCaptures&&X.currentClosureCaptures.includes(J.$.variableName)&&Y(J)&&J.$.env&&X.currentClosureCaptureFrameLevel!==void 0&&Mr(J.token.value,J.$.env,X.currentClosureCaptureFrameLevel),ge=R(J,t,n),Ke=!1;if(Y(J)&&J.$.env&&J.$.variableName){let De=pe(J.$.env,J.$.variableName);De.length>0&&De[De.length-1].isCompileTimeOnly&&(Ke=!0)}let Qe=(X.inAsyncStateMachine||X.inEffectStateMachine)&&ge.startsWith("sm->");if(ge&&ge!==J.$.variableName&&!Ne&&!Qe&&!Ke){let De=J.$.convertedRuntimeType||J.$.type,st=Dt(De,J.$.variableName,n);n.emitter.emitLine(`${t}${st} = ${ge};`),er(J.$.variableName,t,n)}}let oe=R(e.func,t,n),fe=Ee.map(J=>{var Ne,ge,Ke,Qe;if((Ne=J.$)!=null&&Ne.variableName&&((ge=J.$)!=null&&ge.type)){if(X.currentClosureCaptures&&X.currentClosureCaptures.includes(J.$.variableName)&&Y(J)&&J.$.env&&X.currentClosureCaptureFrameLevel!==void 0&&Mr(J.token.value,J.$.env,X.currentClosureCaptureFrameLevel))return R(J,t,n);{let st=Re(J.$.variableName,J.$.env),Ze=(X.inAsyncStateMachine||X.inEffectStateMachine)&&st.startsWith("sm->"),Lt=st;if((Ke=J.$)!=null&&Ke.deferredDupExpressions&&J.$.deferredDupExpressions.length>0){Ft(J,t,X);let At=J.$.deferredDupExpressions[0];I(At)&&((Qe=At.$)!=null&&Qe.variableName)&&(Lt=Re(At.$.variableName,At.$.env))}return Ze?st:Lt}}else return R(J,t,n)}),Z;if(lt){let J=[`(${oe}).data`,...fe];Z=`(${oe}).vtable->call(${J.join(", ")})`}else{let J;if(G(Le)){let ge=Le;ge.resolvedConcreteType&&(J=ge.resolvedConcreteType.id)}let Ne=J?n.implClosureCallMap.get(J):void 0;if(Ne){let ge=Object.values(X.functions).find(Qe=>Qe.cName===Ne.functionCName),Ke=ge==null?void 0:ge.effectStateMachineInfo;if(Ke&&ge){let De=Ke.analysis.effectParameterName,st=((z=e.func.$)==null?void 0:z.env)??((W=e.$)==null?void 0:W.env);if(De&&st){let Ze=pe(st,De),Lt=Ze[Ze.length-1],At=(ee=Lt==null?void 0:Lt.value)==null?void 0:ee[0];if(At&&be(At)){let yn=At.specializedType??At.type,Ln=At.body?!At.isControlFunction||fi(At.body):!1,Zt=(de=e.$)==null?void 0:de.variableName,Tn=`&(${oe})`,dr=Ml(Ke,fe,Ke.functionType,At.body,yn,Ln,(se=X.currentFunctionType)==null?void 0:se.return.type,Zt,t,X,Tn);return(K=e.$)!=null&&K.deferredDropExpressions&&Qt(e,t,X),dr}}}}if(Ne){let ge=[`&(${oe})`,...fe];Z=`${Ne.functionCName}(${ge.join(", ")})`}else{let ge=[`(${oe}).data`,...fe];Z=`(${oe}).call(${ge.join(", ")})`}}let he=Ue.return.type;if(xe(he))return n.emitter.emitLine(`${t}${Z};`),(te=e.$)!=null&&te.deferredDropExpressions&&Qt(e,t,n),"";{let J=(re=e.$)==null?void 0:re.variableName;return J?(n.emitter.emitLine(`${t}${H(he,n)} ${J} = ${Z};`),er(J,t,n),(we=e.$)!=null&&we.deferredDropExpressions&&Qt(e,t,n),J):`// Error: Closure call returns ${H(he,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(q(i))if(Ie(i.value)){let Le=i.value,ot=(ce=e.$)==null?void 0:ce.runtimeArgExprsInOrder,lt=(Q=n.types[Le.id])==null?void 0:Q.cName,Ue=Le.fields.map(X=>X.label),Ee=(Pe=e.$)==null?void 0:Pe.variableName;if(ot&<&&Ue.length===ot.length){if(Le.isNewtype&&Le.fields.length===1){let X=ot[0],oe=R(X,t,n),fe=oe;if((ut=X.$)!=null&&ut.deferredDupExpressions&&X.$.deferredDupExpressions.length>0){let he=n;if((at=X.$)!=null&&at.variableName&&((_e=X.$)!=null&&_e.type)){let Ne=Re(X.$.variableName,X.$.env);if(oe!==Ne){let ge=X.$.type,Ke=H(ge,n);n.emitter.emitLine(`${t}${Ke} ${Ne} = ${oe};`)}}Ft(X,t,he);let J=X.$.deferredDupExpressions[0];I(J)&&((Ce=J.$)!=null&&Ce.variableName)&&(fe=Re(J.$.variableName,J.$.env))}let Z=`((${lt})(${fe}))`;if(Ee&&(($e=e.$)!=null&&$e.type)){let he=Dt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${he} = ${Z};`),er(Ee,t,n),Ee}else return Z}if(Le.isReferenceSemantics){let X=n,oe=ot.map(he=>{var Ne,ge,Ke,Qe;let J=R(he,t,n);if((Ne=he.$)!=null&&Ne.deferredDupExpressions&&he.$.deferredDupExpressions.length>0){if((ge=he.$)!=null&&ge.variableName&&((Ke=he.$)!=null&&Ke.type)){let st=Re(he.$.variableName,he.$.env);if(J!==st){let Ze=he.$.type,Lt=H(Ze,n);n.emitter.emitLine(`${t}${Lt} ${st} = ${J};`)}}Ft(he,t,X);let De=he.$.deferredDupExpressions[0];if(I(De)&&((Qe=De.$)!=null&&Qe.variableName))return Re(De.$.variableName,De.$.env)}return J}).join(", "),Z=`${`__yo_new_${lt}`}(${oe})`;if(Ee&&((Ge=e.$)!=null&&Ge.type)){let he=Dt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${he} = ${Z};`),er(Ee,t,n),Ee}else return Z}else{let X=n,oe=ot.map((Z,he)=>{var Ke,Qe,De,st;let J=R(Z,t,n),Ne=qe(Le)?`_${he}`:me(Ue[he],Le.isExtern==="c"),ge=J;if((Ke=Z.$)!=null&&Ke.deferredDupExpressions&&Z.$.deferredDupExpressions.length>0){if((Qe=Z.$)!=null&&Qe.variableName&&((De=Z.$)!=null&&De.type)){let Lt=Re(Z.$.variableName,Z.$.env),At=Z.$.type,yn=H(At,n);J!==Lt&&n.emitter.emitLine(`${t}${yn} ${Lt} = ${J};`)}Ft(Z,t,X);let Ze=Z.$.deferredDupExpressions[0];I(Ze)&&((st=Ze.$)!=null&&st.variableName)&&(ge=Re(Ze.$.variableName,Ze.$.env))}return`.${Ne} = `+ge}).join(", "),fe=`(${lt}){ ${oe} }`;if(Ee&&((rt=e.$)!=null&&rt.type)){let Z=Dt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${Z} = ${fe};`),er(Ee,t,n),Ee}else return fe}}}else{if(wn(i.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Rt(i.value)){let Le=(ct=e.$)==null?void 0:ct.variableName,ot=e.args[0];if(ot&&I(ot)&&T(ot,":",2)){let lt=ot.args[0],Ue=ot.args[1],Ee=(jt=n.types[i.value.id])==null?void 0:jt.cName;if(Ee&&Y(lt)&&Ue){let X=n,oe=lt.token.value,fe=Re(oe,(B=lt.$)==null?void 0:B.env),he=R(Ue,t,n);if((ne=Ue.$)!=null&&ne.deferredDupExpressions&&Ue.$.deferredDupExpressions.length>0){Ft(Ue,t,X);let Ne=Ue.$.deferredDupExpressions[0];I(Ne)&&((ve=Ne.$)!=null&&ve.variableName)&&(he=Re(Ne.$.variableName,Ne.$.env))}let J=`(${Ee}){ .${fe} = ${he} }`;if(Le&&((Te=e.$)!=null&&Te.type)){let Ne=Dt(e.$.type,Le,n);return n.emitter.emitLine(`${t}${Ne} = ${J};`),er(Le,t,n),Le}else return J}}}else if(Me(i.value)){let Le=i.value,ot=(Ae=e.$)==null?void 0:Ae.runtimeArgExprsInOrder,lt=(Fe=n.types[Le.id])==null?void 0:Fe.cName,Ue=(ze=e.$)==null?void 0:ze.variableName;if(Le.selectedVariantName&&ot&<){if(Nn(Le)){let Z=Le.selectedVariantName,he=Le.variants.find(J=>J.name===Z);if(he){if(!he.fields||he.fields.length===0){let J="NULL";if(Ue&&((bt=e.$)!=null&&bt.type)){let Ne=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${Ne} = ${J};`),er(Ue,t,n),Ue}else return J}else if(he.fields.length===1){let J=R(ot[0],t,n);if(Ue&&((Kt=e.$)!=null&&Kt.type)){let Ne=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${Ne} = ${J};`),er(Ue,t,n),Ue}else return J}}}if(or(Le)){let Z=Le.selectedVariantName,he=Yn(Le,Z,n);if(Ue&&((kt=e.$)!=null&&kt.type)){let J=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${J} = ${he};`),er(Ue,t,n),Ue}else return he}let oe=Le.selectedVariantName,fe=Le.variants.find(Z=>Z.name===oe);if(fe){let Z=((vt=fe.fields)==null?void 0:vt.filter(ge=>!xe(ge.type)))||[],he=n,J=ot.map((ge,Ke)=>{var Qe,De,st,Ze,Lt;if(fe.fields){let At=fe.fields[Ke];if(At&&!xe(At.type)){let yn=R(ge,t,n),Ln=Re(At.label,(Qe=ge.$)==null?void 0:Qe.env),Zt=yn;if((De=ge.$)!=null&&De.variableName&&((st=ge.$)!=null&&st.type)){let Tn=he.currentClosureCaptures&&he.currentClosureCaptures.includes(ge.$.variableName)&&Y(ge)&&ge.$.env&&he.currentClosureCaptureFrameLevel!==void 0&&Mr(ge.token.value,ge.$.env,he.currentClosureCaptureFrameLevel),dr=(he.inAsyncStateMachine||he.inEffectStateMachine)&&yn.startsWith("sm->"),Qr=!1;if(Y(ge)&&ge.$.env&&ge.$.variableName){let Bi=pe(ge.$.env,ge.$.variableName);Bi.length>0&&Bi[Bi.length-1].isCompileTimeOnly&&(Qr=!0)}let yi=!1;if(yn&&yn!==ge.$.variableName&&!Tn&&!dr&&!Qr){let Bi=Re(ge.$.variableName,ge.$.env);if(yn!==Bi){let Es=Dt(ge.$.type,ge.$.variableName,n);n.emitter.emitLine(`${t}${Es} = ${yn};`),yi=!0,er(ge.$.variableName,t,n)}}yi&&(Zt=Re(ge.$.variableName,ge.$.env))}if((Ze=ge.$)!=null&&Ze.deferredDupExpressions&&ge.$.deferredDupExpressions.length>0){Ft(ge,t,he);let Tn=ge.$.deferredDupExpressions[0];I(Tn)&&((Lt=Tn.$)!=null&&Lt.variableName)&&(Zt=Re(Tn.$.variableName,Tn.$.env))}return`.${Ln} = `+Zt}return""}else return""}).filter(ge=>ge).join(", "),Ne=Z.length>0?`(${lt}){ .tag = ${Yn(Le,oe,n)}, .data = { .${oe} = { ${J} } } }`:`(${lt}){ .tag = ${Yn(Le,oe,n)} }`;if(Ue&&((mn=e.$)!=null&&mn.type)){let ge=Dt(e.$.type,Ue,n);return n.emitter.emitLine(`${t}${ge} = ${Ne};`),er(Ue,t,n),Ue}else return Ne}}}}else if(We(r)){let Le=e.args[0];if(Le&&I(Le)&&T(Le,":")){let Ue=R(e.func,t,n),Ee=R(Le.args[0],t,n),X=R(Le.args[1],t,n),oe=`Slice_${me(H(r.childType,n))}`;return n.sliceStructTypes.has(oe)||n.sliceStructTypes.set(oe,{childType:H(r.childType,n)}),`(${oe}){ .data = &${Ue}.data[${Ee}], .length = (${X}) - (${Ee}) }`}else if(Le&&Y(Le)&&Le.token.value===":"){let Ue=R(e.func,t,n),Ee=r,X=Ee.childType,oe=`Slice_${me(H(X,n))}`;return n.sliceStructTypes.has(oe)||n.sliceStructTypes.set(oe,{childType:H(X,n)}),ft(Ee.length)?`(${oe}){ .data = &${Ue}.data[0], .length = ${Ee.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let ot=R(e.func,t,n),lt=R(Le,t,n);return`${ot}.data[${lt}]`}else if(Et(r)){let Le=e.args[0];if(Le&&I(Le)&&T(Le,":")){let Ue=R(e.func,t,n),Ee=R(Le.args[0],t,n),X=R(Le.args[1],t,n),oe=`Slice_${me(H(r.childType,n))}`;return n.sliceStructTypes.has(oe)||n.sliceStructTypes.set(oe,{childType:H(r.childType,n)}),`(${oe}){ .data = &${Ue}.data[${Ee}], .length = (${X}) - (${Ee}) }`}else if(Le&&Y(Le)&&Le.token.value===":"){let Ue=R(e.func,t,n),Ee=`Slice_${me(H(r.childType,n))}`;return n.sliceStructTypes.has(Ee)||n.sliceStructTypes.set(Ee,{childType:H(r.childType,n)}),`(${Ee}){ .data = ${Ue}.data, .length = ${Ue}.length }`}let ot=R(e.func,t,n),lt=R(Le,t,n);return`${ot}.data[${lt}]`}else if(r&&Xe(r)&&Et(r.childType)){let Le=R(e.func,t,n),ot=R(e.args[0],t,n);return`${Le}.data[${ot}]`}}var Gy=0;function Wy(e,t,n,r,i){var d;let o=i.emitter,a=Gy++,s=t.parameters.filter(y=>!y.isCompileTimeOnly),l=e.body?!e.isControlFunction||fi(e.body):!1,u=l?(d=e.body.$)==null?void 0:d.type:void 0,c=!u||xe(u),f=`__ctl_direct_result_${a}`;if(l&&!c){let y=H(u,i);o.emitLine(`${r}${y} ${f};`)}let p=`${r} `;o.emitLine(`${r}{`);let _=[];for(let y=0;y<s.length&&y<n.length;y++){let g=s[y],h=H(g.type,i),v=me(g.label);if(o.emitLine(`${p}${h} ${v} = ${n[y]};`),Be(g.type)){let E=ar(v,g.type,i);E&&_.push(E)}}if(l){let y=`__ctl_direct_exit_${a}`,g=i.continuationVariables,h=new Map(g);h.set("resume",{directReturnVar:c?"":f,directExitLabel:y,isUnitReturn:c}),i.continuationVariables=h;let v=i.pendingDeferredDrops;i.pendingDeferredDrops=void 0;let E=R(e.body,p,i);return E&&o.emitLine(`${p}${E};`),i.pendingDeferredDrops=v,i.continuationVariables=g,o.emitLine(`${r}}`),o.emitLine(`${r}${y}:;`),c?"":f}else{let y=i.effectHandlerParamDrops;i.effectHandlerParamDrops=_;let g=i.effectSmConsumedArgCNames,h=new Set;for(let E=0;E<s.length&&E<n.length;E++){let k=s[E];Be(k.type)&&h.add(n[E])}h.size>0&&(i.effectSmConsumedArgCNames=h);let v=R(e.body,p,i);v&&o.emitLine(`${p}${v};`),i.effectSmConsumedArgCNames=g,i.effectHandlerParamDrops=y}return o.emitLine(`${r}}`),""}function jf(e,t,n){var a,s;let r=n.emitter,i=(a=e.$)==null?void 0:a.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 l=e.args[0];if((s=l.$)!=null&&s.value&&Tt(l.$.value)){let u=l.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(u)});`),r.emitLine(`${t}abort();`)}else{let u=R(l,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${u});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${H(i,n)}*)NULL))`}function Kf(e,t,n){var l,u,c,f,p,_,d,y,g,h;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=R(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(Y(i)){let v=i.token.value;if((c=e.$)!=null&&c.value&&be(e.$.value)){let E=e.$.value;return((f=n.functions[E.funcId])==null?void 0:f.cName)||E.funcId}if(!((p=e.$)!=null&&p.value)&&(L.___dispose.includes(v)||L.___drop.includes(v)||L.___dup.includes(v))&&a){let E=null;if((Ie(a)||Me(a))&&(E=a.trait),E){let k=E.fields.find(b=>b.label===v&&b.assignedValue&&be(b.assignedValue));if(k&&be(k.assignedValue)){let b=k.assignedValue;return((_=n.functions[b.funcId])==null?void 0:_.cName)||b.funcId}else return`/* ERROR: Rc method ${v} not found in type module */`}else return`/* ERROR: No module found for Rc method ${v} */`}if(je(a)||Bt(s)){let E=(d=e.$)==null?void 0:d.value;if(E){if(Ve(E)){if(E.variableName)return Re(E.variableName,(y=e.$)==null?void 0:y.env)}else if(!Bt(E))return Fn(E,n,e)}return Re(v,(g=e.$)==null?void 0:g.env)}if(Ho(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===v)return o}if(Me(a)){let E=a;if(Nn(E))return o;for(let b of E.variants)if(b.fields){for(let F of b.fields)if(F.label===v){let $=b.name;return`${o}.data.${$}.${me(v)}`}}return`/* ERROR: field ${v} not found in enum ${E.typeName} */`}else if(q(s)&&Me(s.value)){let E=s.value,k=E.variants.find(F=>F.name===v),b=(h=n.types[E.id])==null?void 0:h.cName;if(k&&!k.fields&&b){let F=Yn(E,k.name,n);return`(${b}){ .tag = ${F}, .data = { } }`}}else{if(rn(a)&&v==="*")return`${o}->value`;if(Xe(a)){if(v==="*")return`(*${o})`;if(Et(a.childType))return`${o}->${me(v)}`;{let E=0,k=a;for(;Xe(k);)E++,k=k.childType;if(E>0&&Ie(k)&&k.isReferenceSemantics&&E++,Ho(k)&&k.fields.length===1){let b=k.fields[0];if(b&&b.label===v)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${me(v)}`:`${`(${"*".repeat(E-1)}${o})`}->${me(v)}`:`${o}.${me(v)}`}}else if(qe(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let E=a.fields.findIndex(k=>k.label===v);return`${o}._${E}`}}else return et(a)?`${o}.vtable->${me(v)}`:qt(a)?`${o}->${me(v)}`:`${o}.${me(v)}`}}return"/* ERROR: field name must be an identifier */"}function Xf(e,t,n){var l,u,c,f,p;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${w(e)}
|
|
10650
|
+
`;let i=e.args[0];if(I(i)){let _=(u=i.func.$)==null?void 0:u.type;if(_&&We(_)){let d=i.args[0];if(d&&I(d)&&T(d,":")){let y=R(i.func,t,n),g=R(d.args[0],t,n),h=R(d.args[1],t,n),v=`Slice_${me(H(_.childType,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:H(_.childType,n)}),`(${v}){ .data = &${y}.data[${g}], .length = ${h} - ${g} }`}else if(d&&Y(d)&&d.token.value===":"){let y=R(i.func,t,n),g=_,h=g.childType,v=`Slice_${me(H(h,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:H(h,n)}),ft(g.length)?`(${v}){ .data = &${y}.data[0], .length = ${g.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(_&&(Et(_)||Xe(_)&&Et(_.childType))){let d=Et(_)?_:_.childType,y=i.args[0];if(y&&I(y)&&T(y,":")){let g=R(i.func,t,n),h=R(y.args[0],t,n),v=R(y.args[1],t,n),E=`Slice_${me(H(d.childType,n))}`;return n.sliceStructTypes.has(E)||n.sliceStructTypes.set(E,{childType:H(d.childType,n)}),`(${E}){ .data = &${g}.data[${h}], .length = ${v} - ${h} }`}else if(y&&Y(y)&&y.token.value===":"){let g=R(i.func,t,n),h=`Slice_${me(H(d.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:H(d.childType,n)}),`(${h}){ .data = ${g}.data, .length = ${g}.length }`}}}let o=(c=i.$)==null?void 0:c.value,a=(f=i.$)==null?void 0:f.type;if(o!==void 0&&a){if(ft(o)||_t(o)){let _=R(i,t,n);return`(&(${H(a,n)}){${_}})`}if(Tt(o)&&((p=i.$)!=null&&p.convertedRuntimeType))return`(&${R(i,t,n)})`}return`(&${R(i,t,n)})`}function Qf(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${R(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function Zf(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${R(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function Jf(e,t,n){let r=e.args[0];return r?R(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function e_(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=R(r,t,n),a=R(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!We(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=G(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(We(u)){let p=u.length;if(!ft(p))return"// Error: array element has non-constant length";let _=`i_${Math.floor(Math.random()*1e6)}`,d=n.emitter;d.emitLine(`for (size_t ${_} = 0; ${_} < ${p.value}; ${_}++) {`);let y=`(${o}).data[${a}].data[${_}]`;d.emitLine(" { // drop nested array element");let g=ar(y,u.childType,n);return g&&d.emitLine(` ${g};`),d.emitLine(" }"),d.emitLine("}"),""}let c=li(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function t_(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=R(r,t,n),a=R(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!We(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=G(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(We(u)){let p=u.length;if(!ft(p))return"// Error: array element has non-constant length";let _=`temp_array_${Math.floor(Math.random()*1e6)}`,d=`i_${Math.floor(Math.random()*1e6)}`,y=H(u,n),g=n.emitter;g.emitLine(`${y} ${_} = (${o}).data[${a}];`),g.emitLine(`for (size_t ${d} = 0; ${d} < ${p.value}; ${d}++) {`);let h=si(`${_}.data[${d}]`,u.childType,n);return g.emitLine(` ${_}.data[${d}] = ${h};`),g.emitLine("}"),_}let c=pr(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function n_(e,t,n){var p,_;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=R(r,t,n);R(i,t,n);let a=(p=r.$)==null?void 0:p.type;if(!a||!qe(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(_=i.$)==null?void 0:_.value;if(!ft(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=G(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(qe(c)){let d=`(${o})._${l}`;return ar(d,c,n)}let f=li(c,n);return f?`${f}((${o})._${l})`:"// No drop function for tuple element type"}function r_(e,t,n){var p,_;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=R(r,t,n);R(i,t,n);let a=(p=r.$)==null?void 0:p.type;if(!a||!qe(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(_=i.$)==null?void 0:_.value;if(!ft(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=G(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(qe(c)){let d=`(${o})._${l}`;return si(d,c,n)}let f=pr(c,n);return f?`${f}((${o})._${l})`:"// No dup function for tuple element type"}function i_(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=R(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?si(i,o,n):i}function o_(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=R(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?ar(i,o,n):""}function a_(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${R(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function s_(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${R(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function l_(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${R(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function u_(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${R(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function c_(e,t,n){var o,a,s;let r=e.args[0];if(!r)return"// Error: __yo_sometype_drop requires exactly 1 argument";let i=(o=r.$)==null?void 0:o.type;if(i&&G(i)&&He(i)){let l=R(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&G(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===L.___drop[0]);if(u&&u.assignedValue&&be(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=R(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_drop: no-op */"}function f_(e,t,n){var o,a,s;let r=e.args[0];if(!r)return"// Error: __yo_sometype_dup requires exactly 1 argument";let i=(o=r.$)==null?void 0:o.type;if(i&&G(i)&&He(i))return`__yo_incr_rc((void*)${R(r,t,n)})`;if(i&&G(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===L.___dup[0]);if(u&&u.assignedValue&&be(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=R(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_dup: no-op */"}function __(e,t,n){var a;if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let r=e.args[0],i=(a=r.$)==null?void 0:a.type;if(!i)return"// Error: rc argument missing type information";let o=R(r,t,n);return Pn(i)?`((yo_ref_header_t*)(${o}))->ref_count`:"1"}function p_(e,t,n){var i;let r=(i=e.$)==null?void 0:i.runtimeArgExprsInOrder;if(r){let o=n,a=r.map(s=>{var u,c;let l=R(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){Ft(s,t,o);let f=s.$.deferredDupExpressions[0];if(I(f)&&((c=f.$)!=null&&c.variableName))return Re(f.$.variableName,f.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${w(e)}
|
|
10651
|
+
`}function d_(e,t,n){let r=e.args[0];return`sizeof(${R(r,t,n)})`}function m_(e,t,n){var a,s,l,u,c,f,p,_,d;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(u=n.types[((l=(s=e.$)==null?void 0:s.type)==null?void 0:l.id)??""])==null?void 0:u.cName,o=(c=e.$)==null?void 0:c.variableName;if(r&&i){let y=n,g=r.map((h,v)=>{var b,F;let k=R(h,t,n);if((b=h.$)!=null&&b.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Ft(h,t,y);let $=h.$.deferredDupExpressions[0];I($)&&((F=$.$)!=null&&F.variableName)&&(k=Re($.$.variableName,$.$.env))}return`._${v} = ${k}`}).join(", ");if(o&&((f=e.$)!=null&&f.type)){let h=`(${i}){ ${g} }`,v=Dt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}else{if(e.args.length===0)return"";{let y=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((_=(p=e.$)==null?void 0:p.type)==null?void 0:_.id)??"none"} */`;let g=y.map((h,v)=>{let E=R(h,t,n);return`._${v} = ${E}`}).join(", ");if(o&&((d=e.$)!=null&&d.type)){let h=`(${i}){ ${g} }`,v=Dt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}}}function qy(e,t){if(I(e)&&T(e,V.begin)){let n=[];for(let r of e.args)if(I(r)&&T(r,"=",2)){let i=r.args[0],o=r.args[1],a=R(i,"",t),s=R(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(I(e)&&T(e,"=",2)){let n=e.args[0],r=e.args[1],i=R(n,"",t),o=R(r,"",t);return`${i} = ${o}`}return R(e,"",t)}function y_(e,t,n){var r,i;if(I(e)&&T(e,V.begin)){let o=n,a=o.pendingDeferredDrops,s=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];o.pendingDeferredDrops=[...s,...a??[]];for(let l of e.args){let u=R(l,t,n);u&&n.emitter.emitLine(`${t}${u};`)}if((i=e.$)!=null&&i.deferredDropExpressions)for(let l of e.$.deferredDropExpressions){let u=R(l,t,n);u&&n.emitter.emitLine(`${t}${u};`)}o.pendingDeferredDrops=a}else{let o=R(e,t,n);o&&n.emitter.emitLine(`${t}${o};`)}}function g_(e,t,n){var i,o;let r=e.args;if(r.length===2){let a=r[0],s=r[1],l=n.currentLoopLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u;let c=n,f=c.loopBodyDropsBaselineCount;c.loopBodyDropsBaselineCount=((i=c.pendingDeferredDrops)==null?void 0:i.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=R(a,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),y_(s,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),c.loopBodyDropsBaselineCount=f,n.currentLoopLabel=l,""}else if(r.length===3){let a=r[0],s=r[1],l=r[2],u=n.currentLoopLabel,c=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let _=n,d=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let y=R(a,t+" ",n);n.emitter.emitLine(`${t} if (!(${y})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),y_(l,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let g=qy(s,n);return n.emitter.emitLine(`${t} ${g};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),_.loopBodyDropsBaselineCount=d,n.currentLoopLabel=u,n.currentContinueLabel=c,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Hy(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;G(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Gt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Yy(e,t,n,r){var f,p;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(_=>I(_)&&T(_,V.using));if(!o)return;let a=cn(i.$.type);if(!((p=a==null?void 0:a.isFuture.effects)!=null&&p.length))return;let s=Hy(a.isFuture.effects),l=o.args,c=r.emitter;for(let _=0;_<s.length&&_<l.length;_++){let d=s[_],y=l[_];if(!ae(d.type)||d.type.forallParameters.length>0)continue;let g=R(y,n,r),h=d.label;c.emitLine(`${n} ${t}->__capture.${h} = (void*)${g};`)}}function jy(e,t,n){var l;let r=n,i=e.args[0],o=(l=r.continuationVariables)==null?void 0:l.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let u=R(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${u};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let u=r.emitter;if(i){let c=R(i,t,n);c&&c!=="(void)0"&&u.emitLine(`${t}(void)${c};`)}if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)u.emitLine(`${t}${c};`);return $r(t,r,e,!1,!1,!0),hc({emitter:u,indent:t,debugLabel:r.currentFunctionName}),""}if(!i){if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);return $r(t,r,e,!1,!1,!0),"return"}let s=R(i,t,n);if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);return $r(t,r,e,!1,!1,!0),`return ${s}`}function h_(e,t,n){let r;switch(e.tag){case"FnCall":r=Ky(e,t,n);break;case"Atom":r=$o(e,n,t);break}return r}function Ky(e,t,n){var r,i,o,a,s,l,u,c,f,p;if((r=e.$)!=null&&r.macroExpansion)return R(e.$.macroExpansion,t,n);if(I(e.func)&&T(e.func,".",2)&&e.func.args[1]&&Y(e.func.args[1])){let _=e.func.args[1].token.value,d=e.func.args[0],y=(i=d==null?void 0:d.$)==null?void 0:i.type;if(y&&G(y)&&He(y)){if(_===L.___drop[0]){let g=R(d,t,n);return`if (${g} != NULL) { __yo_decr_rc((void*)${g}); }`}if(_===L.___dup[0])return`__yo_incr_rc((void*)${R(d,t,n)})`}}if(wc(e))return Fc(e,t,n);if(T(e,L.__yo_decr_rc))return Qf(e,t,n);if(T(e,L.__yo_incr_rc))return Zf(e,t,n);if(T(e,L.__yo_rc_own))return Jf(e,t,n);if(T(e,L.__yo_drop_array_element))return e_(e,t,n);if(T(e,L.__yo_dup_array_element))return t_(e,t,n);if(T(e,L.__yo_drop_tuple_element))return n_(e,t,n);if(T(e,L.__yo_dup_tuple_element))return r_(e,t,n);if(T(e,L.___dup))return i_(e,t,n);if(T(e,L.___drop))return o_(e,t,n);if(T(e,L.__yo_dyn_drop))return a_(e,t,n);if(T(e,L.__yo_dyn_dup))return s_(e,t,n);if(T(e,L.__yo_incr_rc_atomic))return l_(e,t,n);if(T(e,L.__yo_decr_rc_atomic))return u_(e,t,n);if(T(e,L.__yo_iso_extract))return Rf(e,t,n);if(T(e,L.__yo_iso_dispose))return Pf(e,t,n);if(T(e,L.__yo_arc_dispose))return bf(e,t,n);if(Gl(e))return Uf(e,t,n);if(Bl(e))return kf(e,t,n);if(T(e,L.__yo_sometype_drop))return c_(e,t,n);if(T(e,L.__yo_sometype_dup))return f_(e,t,n);if(T(e,L.__yo_gc_collect))return Mf(e,t,n);if(T(e,L.rc))return __(e,t,n);if(T(e,L.panic))return jf(e,t,n);if(T(e,V.test))return"/* test declaration skipped */";if(T(e,L.__yo_thread_set_maximum_threads))return Hf(e,t,n);if(T(e,V.op_and))return $f(e,t,n);if(T(e,V.op_or))return Cf(e,t,n);if(vn(e))return(o=e.$)!=null&&o.awaitAnalysis?Lc(e,t,n):Sc(e,t,n);if(T(e,V.dyn))return Df(e,t,n);if(Hn(e))return Af(e,t,n);if(Ku(e))return If(e,t,n);if(Xu(e)){let _=e.args[0];if(!_)return"// Error: spawn requires a Future argument";let y=n.emitter,g=R(_,t,n),h=(a=_.$)==null?void 0:a.type,v=h?H(h,n):"void*",E="__spawn_future";return y.emitLine(`${t}// io.spawn \u2014 start cold Future without waiting`),y.emitLine(`${t}{`),y.emitLine(`${t} ${v} ${E} = ${g};`),y.emitLine(`${t} int __spawn_state = ${E}->state;`),y.emitLine(`${t} if (__spawn_state == -2) {`),y.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),y.emitLine(`${t} abort();`),y.emitLine(`${t} }`),ua((s=_.$)==null?void 0:s.type)||(y.emitLine(`${t} if (__spawn_state == 0 && ${E}->__yo_resume_fn) {`),Yy(e,E,`${t} `,n),y.emitLine(`${t} __yo_incr_rc((void*)${E});`),y.emitLine(`${t} ${E}->__yo_resume_fn((void*)${E});`),y.emitLine(`${t} }`)),y.emitLine(`${t}}`),""}if(T(e,V.return))return lf(e,t,n);if(T(e,V.escape))return jy(e,t,n);if(T(e,L.__yo_array_fill,2))return Ff(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return xf(e,t,n);if(T(e,":=",2)){let _=Of(e,t,n);if(_!==void 0)return _}else{if(T(e,"=",2))return Lf(e,t,n);if((l=e.$)!=null&&l.value&&!Ve((u=e.$)==null?void 0:u.value)&&!xe(e.$.type)&&!Ut((c=e.$)==null?void 0:c.controlFlow)){let _=e.$.value;return Fn(_,n,e)}else{if(T(e,".",2))return Kf(e,t,n);if(T(e,V.begin))return Nf(e,t,n);if(T(e,V.cond))return Sf(e,t,n);if(T(e,V.match))return Bf(e,t,n);if(T(e,L.__yo_address_of,1))return Xf(e,t,n);if(T(e,V.tuple))return m_(e,t,n);if(T(e,V.array)){let _=wf(e,t,n);if(_!==void 0)return _}else{if(T(e,V.recur))return p_(e,t,n);if(T(e,V.runtime,1))return R(e.args[0],t,n);if(T(e,L.sizeof,1))return d_(e,t,n);if(T(e,Si)){let _=((f=e.$)==null?void 0:f.runtimeArgExprsInOrder)||e.args;if(_){let d=n,y=_.map(g=>{var v,E;let h=R(g,t,n);if((v=g.$)!=null&&v.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){Ft(g,t,d);let k=g.$.deferredDupExpressions[0];if(I(k)&&((E=k.$)!=null&&E.variableName))return Re(k.$.variableName,k.$.env)}return h});return fa(e.func.token.value,y,e,n,t)}}else{if(T(e,V.while))return g_(e,t,n);if(T(e,"->",2)&&I(e.args[0])&&T(e.args[0],V.fn)){let _=(p=e.$)==null?void 0:p.value;return be(_)?Fn(_,n):"// Error: Anonymous function missing function value"}else{if(T(e,L.consume))return Vf(e,t,n);if(T(e,L.comptime_expect_error)||T(e,L.comptime_assert)||T(e,L.__yo_var_print_info)||T(e,L.__yo_var_is_owning_the_rc_value)||T(e,L.__yo_var_has_other_aliases))return"";if(T(e,V.open))return Gf(e,t,n);{let _=Yf(e,t,n);if(_!==void 0)return _}}}}}}if(I(e))throw new Error(`Unhandled function call: ${w(e)}`);return`// Failed to transpile ${w(e)}`}function v_({expr:e,env:t,context:n}){Oe(e,L.alignof,1);let r=e.args[0],i=M({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&&q(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Ur(o),s;return a===null?s=le(Ht(),{env:t,context:n}):s=kn("Usize",a),e.$={env:t,type:Ht(),value:s,pathCollection:[]},e}function T_({expr:e,env:t,context:n}){let r=T(e,V.op_and)?"and":"or",i=e.args;if(i.length===0){let u=Mt(r==="and");return e.$={env:t,type:Ct(),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],f=M({expr:c,env:o,context:{...n}});if(!f.$||!Wn(f.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
|
|
10652
|
+
${w(c)}`});o=f.$.env;let p=f.$.value;if(Ve(p)){s=!0;continue}if(_t(p)){let _=p.value;if(r==="and"){if(!_){a=Mt(!1);break}!s&&!l&&(a=Mt(!0))}else{if(_){a=Mt(!0);break}!s&&!l&&(a=Mt(!1))}}else l=!0}return _t(a)||(l||s)&&(l?a=void 0:a=le(Ct(),{env:o,context:n})),e.$={env:o,type:Ct(),value:a,pathCollection:[],isAccessingProperty:!1},e}function E_({expr:e,env:t,context:n}){var y,g,h,v,E;Oe(e,L.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});(y=o.$)!=null&&y.env&&(t=o.$.env);let a=(g=o.$)==null?void 0:g.value;if(!q(a)||!We(a.value))throw m({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?tt(a):"undefined"}`});let s=a.value,l=M({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});(h=l.$)!=null&&h.env&&(t=l.$.env);let u=(v=l.$)==null?void 0:v.type,c=(E=l.$)==null?void 0:E.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(!ie({type:s.childType,env:t},{type:u,env:t}))throw m({token:i.token,errorMessage:`Fill value type ${S(u)} is not compatible with array element type ${S(s.childType)}`});let f=s.length;if(Ve(f)){let k=le(s,{env:t,context:n});return e.$={env:t,type:s,value:k,pathCollection:[]},e}let p;if(ft(f)){let k=f.value;if(p=typeof k=="bigint"?Number(k):k,!Number.isInteger(p)||p<0)throw m({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${p}`})}else throw m({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${tt(f)}`});let _=[];if(Ve(c)){let k=le(s,{env:t,context:n});return e.$={env:t,type:s,value:k,pathCollection:[]},e}for(let k=0;k<p;k++)_.push(c);let d=ei(s,_);return e.$={env:t,type:s,value:d,pathCollection:[]},e}function $_({expr:e,env:t,context:n}){var s,l,u;if(n.isValidatingFunctionDefinition||!n.isExecuting){let c=((s=n.expectedType)==null?void 0:s.type)??ue.type;return e.$={env:t,type:c,value:xe(c)?ue:le(c,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});if(!o.$||!_t(o.$.value))throw m({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
|
|
10653
10653
|
${w(r)}
|
|
10654
10654
|
|
|
10655
10655
|
Value:
|
|
10656
10656
|
${tt((l=o.$)==null?void 0:l.value)}`,isAssertionError:!0});if(o.$.value.value)return e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e;if(i){let c=M({expr:i,env:t,context:{...n}});if((u=c.$)!=null&&u.value)throw m({token:e.token,errorMessage:Tt(c.$.value)?c.$.value.value:tt(c.$.value),isAssertionError:!0})}throw m({token:e.token,errorMessage:`Assertion failed for "comptime_assert":
|
|
10657
|
-
${w(r)}`,isAssertionError:!0})}function
|
|
10658
|
-
${w(r)}`});t=r.$.env;let i;if(T(e,L.__yo_comptime_bool_not))_t(r.$.value)?i=Mt(!r.$.value.value):i=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_to_comptime_string))_t(r.$.value)?i=Mn(r.$.value.value.toString()):i=le(
|
|
10657
|
+
${w(r)}`,isAssertionError:!0})}function C_({expr:e,env:t,context:n}){if(T(e,L.__yo_comptime_bool_not)||T(e,L.__yo_comptime_bool_to_comptime_string)){let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Wn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
|
|
10658
|
+
${w(r)}`});t=r.$.env;let i;if(T(e,L.__yo_comptime_bool_not))_t(r.$.value)?i=Mt(!r.$.value.value):i=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_to_comptime_string))_t(r.$.value)?i=Mn(r.$.value.value.toString()):i=le(gn(),{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=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Wn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
|
|
10659
10659
|
${w(r)}`});t=r.$.env;let i=M({expr:e.args[1],env:t,context:{...n}});if(!i.$||!Wn(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
|
|
10660
|
-
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,L.__yo_comptime_bool_and))_t(o)&&_t(a)?s=Mt(o.value&&a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_or))_t(o)&&_t(a)?s=Mt(o.value||a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_eq))_t(o)&&_t(a)?s=Mt(o.value===a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_neq))_t(o)&&_t(a)?s=Mt(o.value!==a.value):s=le(Ct(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${w(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function
|
|
10661
|
-
${w(r)}`})}function
|
|
10662
|
-
${w(r)}`});if(!
|
|
10660
|
+
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,L.__yo_comptime_bool_and))_t(o)&&_t(a)?s=Mt(o.value&&a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_or))_t(o)&&_t(a)?s=Mt(o.value||a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_eq))_t(o)&&_t(a)?s=Mt(o.value===a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_bool_neq))_t(o)&&_t(a)?s=Mt(o.value!==a.value):s=le(Ct(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${w(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function b_({expr:e,env:t,context:n}){var o;let r=nt(e.args[0]),i=e.args[1]?nt(e.args[1]):void 0;try{M({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}if(i){let a=M({expr:i,env:t,context:{...n}});if((o=a.$)!=null&&o.value)throw m({token:e.token,errorMessage:Tt(a.$.value)?a.$.value.value:tt(a.$.value)})}throw m({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
|
|
10661
|
+
${w(r)}`})}function Xy(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 bo(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(Lr(o.type,t))return;if(Lr(e.type.return.type,t))return;let r=Xy(e.type);try{let o=nt(e.body),a=dt(r.env);for(let u of r.parameters){let{env:c}=Se({env:a,variable:{name:u.label,type:u.type,isCompileTimeOnly:!0,value:[le(u.type,{variableName:u.label,env:a,context:n})],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});a=c}let s={tag:"Function",type:r,body:o,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},l=Yt({expr:o,env:a,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:s,evaluationEnv:a},expectedType:{type:r.return.type,env:a}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(((i=l.$)==null?void 0:i.value)!==void 0)return s.body=l,Vt(a,!0),s;Vt(a,!0);return}catch{return}}function k_({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=M({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(!be(o))throw m({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${tt(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=bo(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 w_({expr:e,env:t,context:n}){Oe(e,L.__yo_comptime_list_car,1);let r=e.args[0],i=M({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
|
+
${w(r)}`});if(!un(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10663
10663
|
${w(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
|
-
${w(r)}`});if(e.$={env:i.$.env,type:o.childType,value:le(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},br(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
|
|
10665
|
-
${w(r)}`});if(!
|
|
10664
|
+
${w(r)}`});if(e.$={env:i.$.env,type:o.childType,value:le(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},br(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 F_({expr:e,env:t,context:n}){Oe(e,L.__yo_comptime_list_cdr,1);let r=e.args[0],i=M({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
|
+
${w(r)}`});if(!un(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10666
10666
|
${w(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
|
-
${w(r)}`});if(e.$={env:i.$.env,type:o,value:le(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},br(a)){let s=a.elements;if(s.length>0)e.$.value=ur(o.childType,[...s.slice(1)]);else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function
|
|
10667
|
+
${w(r)}`});if(e.$={env:i.$.env,type:o,value:le(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},br(a)){let s=a.elements;if(s.length>0)e.$.value=ur(o.childType,[...s.slice(1)]);else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function L_({expr:e,env:t,context:n}){Oe(e,L.__yo_comptime_list_cons,2);let r=M({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
|
${w(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
|
${w(r)}`});let o=M({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
|
-
${w(o)}`});if(t=o.$.env,!
|
|
10670
|
+
${w(o)}`});if(t=o.$.env,!un(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
|
|
10671
10671
|
${w(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
|
-
${w(o)}`});let s=o.$.type,l=r.$.type;if(!ie({type:l,env:t},{type:s.childType,env:t}))throw m({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${S(l)}" to ComptimeList of base type "${S(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:le(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},br(a)){let u=[i,...a.elements];e.$.value=ur(s.childType,u)}return e}function
|
|
10673
|
-
${w(r)}`});if(t=r.$.env,!
|
|
10672
|
+
${w(o)}`});let s=o.$.type,l=r.$.type;if(!ie({type:l,env:t},{type:s.childType,env:t}))throw m({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${S(l)}" to ComptimeList of base type "${S(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:le(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},br(a)){let u=[i,...a.elements];e.$.value=ur(s.childType,u)}return e}function A_({expr:e,env:t,context:n}){Oe(e,L.__yo_comptime_list_append,2);let r=M({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
|
+
${w(r)}`});if(t=r.$.env,!un(r.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" first argument, got:
|
|
10674
10674
|
${w(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
|
${w(r)}`});let o=M({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
|
-
${w(o)}`});if(t=o.$.env,!
|
|
10676
|
+
${w(o)}`});if(t=o.$.env,!un(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
|
|
10677
10677
|
${w(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
|
-
${w(o)}`});let s=r.$.type,l=o.$.type;if(!ie({type:s,env:t},{type:l,env:t}))throw m({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${S(l.childType)}" to ComptimeList of base type "${S(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:le(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},br(i)&&br(a)){let u=[...i.elements,...a.elements];e.$.value=ur(s.childType,u)}return e}function
|
|
10679
|
-
${w(r)}`});if(!
|
|
10678
|
+
${w(o)}`});let s=r.$.type,l=o.$.type;if(!ie({type:s,env:t},{type:l,env:t}))throw m({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${S(l.childType)}" to ComptimeList of base type "${S(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:le(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},br(i)&&br(a)){let u=[...i.elements,...a.elements];e.$.value=ur(s.childType,u)}return e}function I_({expr:e,env:t,context:n}){Oe(e,L.__yo_comptime_list_length,1);let r=e.args[0],i=M({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
|
+
${w(r)}`});if(!un(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10680
10680
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
|
|
10681
|
-
${w(r)}`});if(e.$={env:i.$.env,type:
|
|
10682
|
-
${w(r)}`});if(!
|
|
10683
|
-
${w(r)}`});let o=i.$.value.value;if(!
|
|
10684
|
-
${S(o)}`});let a=
|
|
10681
|
+
${w(r)}`});if(e.$={env:i.$.env,type:Ht(),value:le(Ht(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},br(o)){let a=o.elements.length,s=kn("Usize",a);e.$.value=s}return e}function N_({expr:e,env:t,context:n}){var s;Oe(e,L.__yo_comptime_list_element_type,1);let r=e.args[0],i=M({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
|
+
${w(r)}`});if(!q((s=i.$)==null?void 0:s.value))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10683
|
+
${w(r)}`});let o=i.$.value.value;if(!un(o))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10684
|
+
${S(o)}`});let a=ye(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function ls(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 x_(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 _a(e){return Zr(e)||Jr(e)||zt(e)||ln(e)||gr(e)||e.isExtern==="c"&&G(e)}function Qy(e){let n=e.type.variants.find(r=>r.name===e.variantName);return n==null?void 0:n.discriminant}function Zy(e){if(e&&ft(e))return e.value}function Jy(e){return Jn(e)||ka(e)||ft(e)}function ss(e,t,n){let r=ls(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 ${S(t)} (${r.min} to ${r.max})`})}if(zt(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return kr(i)}if(ln(t)){let i=typeof e=="bigint"?Number(e):e;return wa(i)}if(Jr(t)){let i=x_(t);if(i){let o=typeof e=="bigint"?Number(e):e;return kn(i,o)}}if(Zr(t)){let i=x_(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return kn(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return kn(i,a)}}throw m({token:n,errorMessage:`Cannot create compile-time value for type ${S(t)}`})}function S_({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!_a(e))return;let o=M({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${w(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(Me(l)&&_n(s)){let c=Qy(s);if(c===void 0)throw m({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(hr(e,a)){let f=ss(c,e,n.token);return n.$={env:a,type:e,value:f,pathCollection:[]},{expr:n,env:a}}}if(!_a(l)&&!zt(l)&&!ln(l)&&!Me(l))throw m({token:t.token,errorMessage:`Cannot convert ${S(l)} to ${S(e)}. Expected a numeric type.`});let u=Zy(s);if(u!==void 0&&hr(e,a)){let c=ss(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((zt(e)||ln(e))&&u===void 0)throw m({token:t.token,errorMessage:`Cannot convert runtime value to ${S(e)}. Only compile-time values can be converted to ${S(e)}.`});if((zt(l)||ln(l))&&hr(e,a))if(u!==void 0){let c=ss(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:le(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(gr(e)||!Jy(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:L.__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 Da(n,c),{expr:n,env:a}}if(u!==void 0){let c=ss(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 dn(e){return e&&(Jn(e)||ka(e)||ft(e))?e.value:null}function _i(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return kr(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return wa(a)}if(gr(t))return le(t,{env:n,context:r});let i=eg(t),o=ng(e,t);return kn(i,o)}function eg(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 ql(e,t,n,r,i,o){let a=ls(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 f=typeof u=="bigint"?u:BigInt(Math.floor(u)),p=typeof c=="bigint"?c:BigInt(Math.floor(c));return f<p}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let f=typeof u=="bigint"?u:BigInt(Math.floor(u)),p=typeof c=="bigint"?c:BigInt(Math.floor(c));return f>p}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
|
|
10687
|
-
${w(g)}`});t=g.$.env;let h;if(s==="neg")if(ft(g.$.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}`});h=
|
|
10686
|
+
Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function tg(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 ng(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=ls(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 pa(e,t,n,r,i,o){let a=dn(e),s=dn(t);return a===null||s===null?le(n,{env:i,context:o}):_i(r(a,s),n,i,o)??le(n,{env:i,context:o})}function ko(e,t,n,r,i){let o=dn(e),a=dn(t);if(o===null||a===null)return le(Ct(),{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 Mt(n(s,l))}return Mt(n(o,a))}function rg(e,t,n,r,i){let o=dn(e);return o===null?le(t,{env:r,context:i}):_i(n(o),t,r,i)??le(t,{env:r,context:i})}function V_({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 Qi();case"i8":return Zi();case"u16":return Ji();case"i16":return eo();case"u32":return to();case"i32":return ni();case"u64":return no();case"i64":return ro();case"usize":return Ht();case"isize":return Xi();case"f32":return io();case"f64":return ri();case"int":case"comptime_int":return ti();case"float":case"comptime_float":return Ki();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let g=M({expr:e.args[0],env:t,context:{...n}});if(!g.$||!g.$.value)throw m({token:g.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
|
|
10687
|
+
${w(g)}`});t=g.$.env;let h;if(s==="neg")if(ft(g.$.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}`});h=rg(g.$.value,u,v=>-v,t,n)}else h=le(u,{env:t,context:n});else if(s==="bit_not")if(ft(g.$.value)||Jn(g.$.value)){let v=dn(g.$.value);if(v!==null){let E=typeof v=="bigint"?v:BigInt(Math.floor(v)),k=tg(u),b;if(k!==null){let $=(1n<<BigInt(k))-1n;if(b=E^$,au(u)){let C=1n<<BigInt(k-1);b>=C&&(b=b-(1n<<BigInt(k)))}}else b=~E;h=_i(b,u,t,n)??le(u,{env:t,context:n})}else h=le(u,{env:t,context:n})}else h=le(u,{env:t,context:n});else if(s==="to_comptime_string")if(ft(g.$.value)){let v=dn(g.$.value);v!==null?h=Mn(v.toString()):h=le(gn(),{env:t,context:n})}else h=le(gn(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?gn():u,value:h,pathCollection:[]},e}let c=M({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
|
${w(c)}`});t=c.$.env;let f=M({expr:e.args[1],env:t,context:{...n}});if(!f.$||!f.$.value)throw m({token:f.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
|
|
10689
|
-
${w(f)}`});t=f.$.env;let p=c.$.value,_=f.$.value,d,y;switch(s){case"add":{let g=
|
|
10690
|
-
${w(r)}`});t=r.$.env;let i;if(T(e,L.__yo_comptime_string_length))Tt(r.$.value)?i=kr(BigInt(r.$.value.value.length)):i=le(ti(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_to_upper))Tt(r.$.value)?i=Mn(r.$.value.value.toUpperCase()):i=le(
|
|
10689
|
+
${w(f)}`});t=f.$.env;let p=c.$.value,_=f.$.value,d,y;switch(s){case"add":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))+(typeof h=="bigint"?h:BigInt(h)):g+h;ql(v,u,"add",g,h,e.token)}d=pa(p,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let k=typeof v=="bigint"?v:BigInt(v),b=typeof E=="bigint"?E:BigInt(E);return k+b}return v+E},t,n),y=u;break}case"sub":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))-(typeof h=="bigint"?h:BigInt(h)):g-h;ql(v,u,"subtract",g,h,e.token)}d=pa(p,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let k=typeof v=="bigint"?v:BigInt(v),b=typeof E=="bigint"?E:BigInt(E);return k-b}return v-E},t,n),y=u;break}case"mul":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))*(typeof h=="bigint"?h:BigInt(h)):g*h;ql(v,u,"multiply",g,h,e.token)}d=pa(p,_,u,(v,E)=>{if(typeof v=="bigint"||typeof E=="bigint"){let k=typeof v=="bigint"?v:BigInt(v),b=typeof E=="bigint"?E:BigInt(E);return k*b}return v*E},t,n),y=u;break}case"div":{let g=dn(_);if(g===0||g===0n)throw m({token:f.token,errorMessage:`Division by zero in "${r}" operation`});d=pa(p,_,u,(h,v)=>{if(typeof h=="bigint"||typeof v=="bigint"){let E=typeof h=="bigint"?h:BigInt(h),k=typeof v=="bigint"?v:BigInt(v);return E/k}return Zr(u)||u.tag==="comptime_int"?Math.trunc(h/v):h/v},t,n),y=u;break}case"mod":{if(Jr(u))throw m({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let g=dn(_);if(g===0||g===0n)throw m({token:f.token,errorMessage:`Modulo by zero in "${r}" operation`});d=pa(p,_,u,(h,v)=>{if(typeof h=="bigint"||typeof v=="bigint"){let E=typeof h=="bigint"?h:BigInt(h),k=typeof v=="bigint"?v:BigInt(v);return E%k}return h%v},t,n),y=u;break}case"eq":d=ko(p,_,(g,h)=>g===h,t,n),y=Ct();break;case"neq":d=ko(p,_,(g,h)=>g!==h,t,n),y=Ct();break;case"lt":d=ko(p,_,(g,h)=>g<h,t,n),y=Ct();break;case"lte":d=ko(p,_,(g,h)=>g<=h,t,n),y=Ct();break;case"gt":d=ko(p,_,(g,h)=>g>h,t,n),y=Ct();break;case"gte":d=ko(p,_,(g,h)=>g>=h,t,n),y=Ct();break;case"bit_and":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),E=typeof h=="bigint"?h:BigInt(Math.floor(h));d=_i(v&E,u,t,n)??le(u,{env:t,context:n})}else d=le(u,{env:t,context:n});y=u;break}case"bit_or":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),E=typeof h=="bigint"?h:BigInt(Math.floor(h));d=_i(v|E,u,t,n)??le(u,{env:t,context:n})}else d=le(u,{env:t,context:n});y=u;break}case"bit_xor":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),E=typeof h=="bigint"?h:BigInt(Math.floor(h));d=_i(v^E,u,t,n)??le(u,{env:t,context:n})}else d=le(u,{env:t,context:n});y=u;break}case"shl":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),E=typeof h=="bigint"?Number(h):Math.floor(h);d=_i(v<<BigInt(E),u,t,n)??le(u,{env:t,context:n})}else d=le(u,{env:t,context:n});y=u;break}case"shr":{let g=dn(p),h=dn(_);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),E=typeof h=="bigint"?Number(h):Math.floor(h);d=_i(v>>BigInt(E),u,t,n)??le(u,{env:t,context:n})}else d=le(u,{env:t,context:n});y=u;break}default:throw m({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:y,value:d,pathCollection:[]},e}function D_({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=M({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${w(i)}`});t=o.$.env,Tt(o.$.value)?r.push(o.$.value.value):r.push(tt(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function M_({expr:e,env:t,context:n}){if(T(e,L.__yo_comptime_string_length)||T(e,L.__yo_comptime_string_to_upper)||T(e,L.__yo_comptime_string_to_lower)){let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!tn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
|
|
10690
|
+
${w(r)}`});t=r.$.env;let i;if(T(e,L.__yo_comptime_string_length))Tt(r.$.value)?i=kr(BigInt(r.$.value.value.length)):i=le(ti(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_to_upper))Tt(r.$.value)?i=Mn(r.$.value.value.toUpperCase()):i=le(gn(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_to_lower))Tt(r.$.value)?i=Mn(r.$.value.value.toLowerCase()):i=le(gn(),{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,L.__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=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!tn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" string argument, got:
|
|
10691
10691
|
${w(r)}`});t=r.$.env;let i=M({expr:e.args[1],env:t,context:{...n}});if(!i.$||!zt(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" start argument, got:
|
|
10692
10692
|
${w(i)}`});t=i.$.env;let o;if(e.args.length===3){if(o=M({expr:e.args[2],env:t,context:{...n}}),!o.$||!zt(o.$.type)||!o.$.value)throw m({token:o.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" end argument, got:
|
|
10693
|
-
${w(o)}`});t=o.$.env}let a;if(Tt(r.$.value)&&Jn(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&&Jn(o.$.value)){let f=o.$.value.value;c=typeof f=="bigint"?Number(f):f}a=Mn(s.slice(u,c))}else a=le(
|
|
10693
|
+
${w(o)}`});t=o.$.env}let a;if(Tt(r.$.value)&&Jn(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&&Jn(o.$.value)){let f=o.$.value.value;c=typeof f=="bigint"?Number(f):f}a=Mn(s.slice(u,c))}else a=le(gn(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=M({expr:e.args[0],env:t,context:{...n}});if(!r.$||!tn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
|
|
10694
10694
|
${w(r)}`});t=r.$.env;let i=M({expr:e.args[1],env:t,context:{...n}});if(!i.$||!tn(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" second argument, got:
|
|
10695
|
-
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,L.__yo_comptime_string_concat))Tt(o)&&Tt(a)?s=Mn(o.value+a.value):s=le(
|
|
10695
|
+
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,L.__yo_comptime_string_concat))Tt(o)&&Tt(a)?s=Mn(o.value+a.value):s=le(gn(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_eq))Tt(o)&&Tt(a)?s=Mt(o.value===a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_neq))Tt(o)&&Tt(a)?s=Mt(o.value!==a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_lt))Tt(o)&&Tt(a)?s=Mt(o.value<a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_lte))Tt(o)&&Tt(a)?s=Mt(o.value<=a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_gt))Tt(o)&&Tt(a)?s=Mt(o.value>a.value):s=le(Ct(),{env:t,context:n});else if(T(e,L.__yo_comptime_string_gte))Tt(o)&&Tt(a)?s=Mt(o.value>=a.value):s=le(Ct(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${w(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function O_({expr:e,env:t,context:n}){Oe(e,L.consume,1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=Gn(i,t),e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function da(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function R_(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function P_(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function U_(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function wo(e,t,n,r,i){var c;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 f=0;f<o.frames.length;f++){let p=(c=o.frames[f])==null?void 0:c.variables.find(_=>_.name===e);if(p){a=p,s=f;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 ig(e){let t=e;if(I(t)&&T(t,"?=",2)&&(t=t.args[0]),I(t)&&T(t,"=",2)&&(t=t.args[0]),!I(t)||!T(t,":",2))return;let n=t.args[0],r=t.args[1];if(!I(n)||!T(n,V.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!Y(i)||!ht(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function Hl({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){var A,N,x;let o,a=r,s=!1,l=!1,u,c,f,p,_,d=e,y,g,h,v;if(I(d)&&T(d,"=")){let D=d.args[0];if(D&&I(D)&&T(D,":",2))u=D,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(I(d)&&T(d,":=",2))throw m({token:d.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(I(d)&&T(d,"?=",2)&&(c=d.args[1],u=d.args[0],h=c,d=u),I(d)&&T(d,":",2)?(c=d.args[1],u=d.args[0],y=c):v?u=d:h?(y=void 0,u=d):y=d,!y)throw m({token:e.token,errorMessage:h?"Default parameters must specify a type: (name : Type) ?= value.":'Expected an explicit type annotation for function parameter. Use "(name : Type)".'});if(u){if(I(u)&&T(u,V.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(I(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(I(u)&&T(u,V.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(!Y(u)||!ht(u))throw m({token:u.token,errorMessage:`Expected identifier for parameter label, got ${w(u)}`});o=u.token.value,g=u}if(!o)throw m({token:e.token,errorMessage:`Expected a label for function parameter, got ${w(e)}`});if(o==="Self")throw m({token:(g==null?void 0:g.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let D=M({expr:v,env:t,context:{...n}});if(!D.$)throw m({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${w(v)}`});t=D.$.env;let P=D.$.value;if(!q(P))throw m({token:v.token,errorMessage:`Expected type value for = assignment, got ${tt(P)}`});if(f=It(),_=P,!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(y){let D=M({expr:y,env:t,context:{...n}});if(!D.$)throw m({token:y.token,errorMessage:`(3) Failed to evaluate type expression: ${w(y)}`});t=D.$.env;let P=D.$.value;if(q(P))f=P.value;else throw m({token:y.token,errorMessage:`Expected type for function parameter, got ${tt(P)}`})}if(h){let D=M({expr:h,env:t,context:{...n}});if((A=D.$)!=null&&A.env&&(t=(N=D.$)==null?void 0:N.env),p=(x=D.$)==null?void 0:x.value,!p)throw m({token:h.token,errorMessage:`Expected a compile-time known value for default parameter, got ${w(h)}`});if(!f)f=p.type;else if(!ie({type:f,env:t},{type:p.type,env:t}))throw m({token:h.token,errorMessage:`Incompatible default value type:
|
|
10696
10696
|
- Expected: ${S(f)}
|
|
10697
10697
|
- Got : ${S(p.type)}`})}if(!f)throw m({token:e.token,errorMessage:"Expected type for function parameter}"});if(a&&Lr(f,t))throw m({token:(u==null?void 0:u.token)??e.token,errorMessage:`Parameter marked as "comptime" but type is not available at compile-time:
|
|
10698
10698
|
${S(f)}`});if(!a&&Fr(f,t))throw m({token:(u==null?void 0:u.token)??e.token,errorMessage:`Parameter marked as runtime but type is not available at runtime:
|
|
@@ -10700,7 +10700,7 @@ ${S(f)}`});if(!a&&ae(f)&&(f.forallParameters.length>0||f.parameters.some(D=>D.is
|
|
|
10700
10700
|
${S(f)}
|
|
10701
10701
|
|
|
10702
10702
|
Generic functions must be compile-time known to enable monomorphization. Consider using:
|
|
10703
|
-
comptime(${o}) : ${S(f)}`})}if(s&&!nn(f)&&!gi(f))throw m({token:(u==null?void 0:u.token)??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${S(f)}`});let E=a?le(f,{variableName:o,env:t,context:n}):void 0;if(n.isUnsafeFunctionType||
|
|
10703
|
+
comptime(${o}) : ${S(f)}`})}if(s&&!nn(f)&&!gi(f))throw m({token:(u==null?void 0:u.token)??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${S(f)}`});let E=a?le(f,{variableName:o,env:t,context:n}):void 0;if(n.isUnsafeFunctionType||zr(f,(y==null?void 0:y.token)??e.token),Je(f)&&!f.receiverType)throw m({token:(y==null?void 0:y.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,252 +10714,256 @@ use_id :: (fn(forall(T : Type),
|
|
|
10714
10714
|
) -> T) {
|
|
10715
10715
|
return val.id();
|
|
10716
10716
|
}
|
|
10717
|
-
`});let k=pe(t,o),b=k.length>0?k[k.length-1]:void 0,F=k.find(D=>{if(D.value&&H(D.value[0])){let P=D.value[0];if(G(P.value))return!0}return!1}),$=E,C=f;if(F){let D=F.value[0],P=D.value;if(_&&H(_)&&G(_.value)){let U=_.value,X=[...P.requiredTraits];for(let z of U.requiredTraits)X.some(W=>W.traitType.id===z.traitType.id)||X.push(z);let R=[...P.negativeTraits??[]];if(U.negativeTraits)for(let z of U.negativeTraits)R.some(W=>W.traitType.id===z.traitType.id)||R.push(z);P.requiredTraits=X,P.negativeTraits=R}$=D,C=en(P)}else if(b&&b.isCompileTimeOnly&&b.value&&b.frameLevel===t.frames.length-1)$=b.value[0],C=b.type;else{let{env:D}=Ve({env:t,variable:{name:o,type:f,isCompileTimeOnly:a,value:_?[_]:a?[le(f,{variableName:o,env:t,context:n})]:void 0,token:(u==null?void 0:u.token)??e.token,initializedAtToken:(u==null?void 0:u.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=D}return u&&(u.$={env:t,type:C,value:$,pathCollection:[]}),u!==e&&y!==e&&(e.$={env:t,type:ue.type,value:ue,pathCollection:[]}),Jt(f),{parameter:{label:o,type:f,exprs:Ni({expr:e,labelExpr:g,typeExpr:y,defaultValueExpr:h,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:_},env:t}}function ng({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!A(i)||!T(i,"<:",2))continue;let o=i.args[0];if(Y(o)){let s=o.token.value;if(pe(t,s).length===0){let u=Kn(Nt(),s,{env:t,context:n}),c=he(u),{env:f}=Ve({env:t,variable:{name:s,type:en(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=f,o.$={env:t,type:en(u),value:c,pathCollection:[]}}}let a=ql({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function P_({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=rg({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 U_({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=M({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!H(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!Je(s.value))throw m({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(s.value)}`});let l=s.value,u=_n({targetType:e,traitType:l,env:i});if(n){if(u)throw m({token:r.token,errorMessage:`Type ${S(e)} must NOT implement ${S(l)}, but it does.`})}else if(!u)throw m({token:r.token,errorMessage:`Type ${S(e)} does not implement required trait ${S(l)}.`});return{env:i,success:!0}}function rg({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;A(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(Y(e)){let f=e.token.value,p=pe(r,f);if(p.length===0)return{env:r,success:!1};let _=p[p.length-1];if(_.value&&H(_.value[0])&&G(_.value[0].value))s=_.value[0].value;else if(_.value&&H(_.value[0]))try{return U_({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 f;try{f=M({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!f.$||!f.$.value||!H(f.$.value))return{env:r,success:!1};r=f.$.env;let p=f.$.value;if(!G(p.value))try{return U_({concreteType:p.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=p.value}let l;try{l=M({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!H(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!Je(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(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=Er({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function ql({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!A(o)||!T(o,"<:",2))throw m({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${w(o)}`});let a=o.args[0],s=o.args[1],l;if(Y(a)){let c=a.token.value,f=pe(t,c);if(f.length>0){let p=f[f.length-1];if(p.value&&H(p.value[0])&&G(p.value[0].value))l=p.value[0].value;else if(p.value&&H(p.value[0])){let _=p.value[0].value;t=z_({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=Kn(Nt(),c,{env:t,context:n});let p=he(l),{env:_}=Ve({env:t,variable:{name:c,type:en(l),isCompileTimeOnly:!0,value:[p],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,a.$={env:t,type:en(l),value:p,pathCollection:[]}}}else{let c=M({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!H(c.$.value))throw m({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let f=c.$.value;if(!G(f.value)){t=z_({concreteType:f.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=f.value}let u=[];A(s)&&T(s,V.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let f=u[c],p=!1,_=f;A(f)&&T(f,"!")&&f.args.length===1&&(p=!0,_=f.args[0]);let d;try{d=M({expr:_,env:t,context:{...n}})}catch(h){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw h}if(!d.$||!d.$.value||!H(d.$.value)){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw m({token:_.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=d.$.env;let y=d.$.value;if(!Je(y.value))throw m({token:_.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(y.value)}`});let g=y.value;if(g.receiverType)throw m({token:_.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Er({env:t,someType:l,traitType:g,isNegated:p})}}return{env:t,pendingTraits:i}}function pi({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:ql({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function z_({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(A(t)&&T(t,V.tuple))for(let a of t.args)A(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else A(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=M({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!H(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(!Je(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(u.value)}`});let c=u.value,f=_n({targetType:e,traitType:c,env:r});if(s){if(f)throw m({token:n.token,errorMessage:`Type ${S(e)} must NOT implement ${S(c)}, but it does.`})}else if(!f)throw m({token:n.token,errorMessage:`Type ${S(e)} does not implement required trait ${S(c)}.`})}return r}function Yl({parameterExprs:e,env:t,context:n}){var p,_,d;t=mt(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let y=e[0];if(A(y)&&T(y,V.forall)){let g=y.args;for(let h=0;h<g.length;h++){let v=g[h];if(A(v)&&T(v,"...")&&v.args.length===1&&Y(v.args[0])){let F=v.args[0].token.value;if(i.find(D=>D.label===F))throw m({token:v.token,errorMessage:`Duplicate label "${F}" in type parameter`});let C=Ii(F,t),I=Un(1),{env:N}=Ve({env:t,variable:{name:F,type:I,isCompileTimeOnly:!0,value:[he(C)],token:v.args[0].token,initializedAtToken:v.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=N,v.$={env:t,type:I,value:he(C),pathCollection:[]};let x={label:F,type:I,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:Ni({expr:v,labelExpr:v.args[0],typeExpr:v.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(x);continue}let{parameter:E,env:k}=Hl({expr:v,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(F=>F.label===E.label))throw m({token:v.token,errorMessage:`Duplicate label "${E.label}" in type parameter`});i.push(E),t=k}}}let u=0;for(let y=0;y<e.length;y++){let g=e[y];if(A(g)&&T(g,V.using)){if(u++,u>1)throw m({token:g.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 h=g.args;for(let v=0;v<h.length;v++){let E=h[v];if(A(E)&&T(E,"...")&&E.args.length===1&&Y(E.args[0])){let D=E.args[0].token.value,U=pe(t,D).at(-1);if(!U)throw m({token:E.token,errorMessage:`Effect row variable "${D}" not found in scope. Declare it with forall(..., ...(${D}))`});let X,R=(p=U.value)==null?void 0:p[0];if(R&&H(R)&&Gt(R.value)){let W=R.value;for(let ee of W.implicitParameters)o.push({...ee,isEffectRowSpread:!1});continue}else if(R&&H(R)){if(!(G(R.value)&&R.value.isEffectsRow||Gt(R.value)))throw m({token:E.token,errorMessage:`"...(${D})" requires "${D}" 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 : ${D}) instead of using(...(${D}))`});X=R.value}else if(R&&xe(R)&&Gt(R.type)){let W=R.type;for(let ee of W.implicitParameters)o.push({...ee,isEffectRowSpread:!1});continue}else if(R&&xe(R))X=Ii(D,t);else throw m({token:E.token,errorMessage:`Effect row variable "${D}" has invalid value. Expected a type.`});let z={label:D,type:X,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Ni({expr:E,labelExpr:E.args[0],typeExpr:E.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(z);continue}if(!(A(E)&&(T(E,":")||T(E,"=")||T(E,"?=")||T(E,":="))))throw m({token:E.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:b,env:F}=Hl({expr:E,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(D=>D.label===b.label))throw m({token:E.token,errorMessage:`Duplicate label "${b.label}" in implicit parameter (already in forall)`});if(o.find(D=>D.label===b.label))throw m({token:E.token,errorMessage:`Duplicate label "${b.label}" in implicit parameter`});let I={...b,isCompileTimeOnly:!0,isImplicit:!0};o.push(I);let x=F.frames[F.frames.length-1].variables.find(D=>D.name===b.label);x&&(x.isImplicit=!0),t=F}}}let c=new Set;for(let y=0;y<e.length;y++){let g=e[y];if(A(g)&&(T(g,V.forall)||T(g,V.using)||T(g,V.where)||T(g,"...")))continue;let h=tg(g);if(h){let v=M({expr:h.typeExpr,env:t,context:{...n}});if((_=v.$)!=null&&_.env&&(t=v.$.env),!v.$||!v.$.value||!H(v.$.value))continue;let E=v.$.value.value,k=le(E,{variableName:h.name,env:t,context:n}),{env:b}=Ve({env:t,variable:{name:h.name,type:E,isCompileTimeOnly:!0,value:[k],token:h.token,initializedAtToken:h.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=b,c.add(y)}}let f=[];if(e.length>0){let y=e[e.length-1];if(A(y)&&T(y,V.where)){if(s=y.args,s.length===0)throw m({token:y.token,errorMessage:"The where clause must have at least one constraint."});let g=ng({constraintExprs:s,env:t,context:n});t=g.env,f=g.pendingConstraints}}for(let y=0;y<e.length;y++){let g=e[y];if(A(g)&&T(g,V.forall)){if(y!==0)throw m({token:g.token,errorMessage:`Expected type parameters to be the first argument, got ${y+1}`});continue}else{if(A(g)&&T(g,V.using))continue;if(A(g)&&T(g,V.where)){if(y!==e.length-1)throw m({token:g.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(Y(g)&&Xt(g,"...")||A(g)&&T(g,"...")){l=!0;let h=!1,v=!1,E="...",k=g,b=ue.type;if(A(g)){let C=g.args[0];if(C){if(A(C)&&T(C,V.comptime))throw h=!0,C.args.length!==1?m({token:C.token,errorMessage:`Expected one argument for "comptime" , got ${C.args.length}`}):(k=C.args[0],E=C.args[0].token.value,b=ue.type,m({token:C.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(A(C)&&T(C,V.quote)){if(h=!0,v=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});k=C.args[0],E=C.args[0].token.value,b=Jo()}else throw gt(C)?(k=C,E=C.token.value,b=ue.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 ${w(C)}`})}else throw m({token:g.token,errorMessage:`Expected a name for variadic parameter, got ${w(g)}`})}else b=ue.type;let F=$n(S(b)),$={exprs:{expr:g,labelExpr:k,typeExpr:F},isCompileTimeOnly:h,isQuote:v,label:E,type:b,isOwningTheRcValue:!1,isImplicit:!1};if(a=$,E!=="..."){let{env:C}=Ve({env:t,variable:{name:E,type:b,isCompileTimeOnly:$.isCompileTimeOnly,value:h?[le(b,{variableName:E,env:t,context:n})]:void 0,token:k.token,initializedAtToken:k.token,consumedAtToken:void 0,isOwningTheRcValue:$.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,k.$={env:t,type:b,value:h?le(b,{variableName:E,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw m({token:g.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:h,env:v}=Hl({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(k=>k.label===h.label))throw m({token:A(g)?((d=g.args[0])==null?void 0:d.token)??g.token:g.token,errorMessage:`Duplicate label "${h.label}" in function parameter`});if(r.push(h),t=v,f.length>0){let k=P_({pendingConstraints:f,env:t,context:n});t=k.env,f=k.pendingConstraints}}}}if(r.forEach((y,g)=>{if(y.isQuote&&gi(y.type)&&g!==r.length-1)throw m({token:y.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),f.length>0){let y=P_({pendingConstraints:f,env:t,context:n});if(t=y.env,y.pendingConstraints.length>0){let g=y.pendingConstraints[0];ql({constraintExprs:[g.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function ss({expr:e,env:t,context:n}){var k;if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> for function type, got:
|
|
10717
|
+
`});let k=pe(t,o),b=k.length>0?k[k.length-1]:void 0,F=k.find(D=>{if(D.value&&q(D.value[0])){let P=D.value[0];if(G(P.value))return!0}return!1}),$=E,C=f;if(F){let D=F.value[0],P=D.value;if(_&&q(_)&&G(_.value)){let U=_.value,j=[...P.requiredTraits];for(let z of U.requiredTraits)j.some(W=>W.traitType.id===z.traitType.id)||j.push(z);let O=[...P.negativeTraits??[]];if(U.negativeTraits)for(let z of U.negativeTraits)O.some(W=>W.traitType.id===z.traitType.id)||O.push(z);P.requiredTraits=j,P.negativeTraits=O}$=D,C=en(P)}else if(b&&b.isCompileTimeOnly&&b.value&&b.frameLevel===t.frames.length-1)$=b.value[0],C=b.type;else{let{env:D}=Se({env:t,variable:{name:o,type:f,isCompileTimeOnly:a,value:_?[_]:a?[le(f,{variableName:o,env:t,context:n})]:void 0,token:(u==null?void 0:u.token)??e.token,initializedAtToken:(u==null?void 0:u.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=D}return u&&(u.$={env:t,type:C,value:$,pathCollection:[]}),u!==e&&y!==e&&(e.$={env:t,type:ue.type,value:ue,pathCollection:[]}),Jt(f),{parameter:{label:o,type:f,exprs:Ni({expr:e,labelExpr:g,typeExpr:y,defaultValueExpr:h,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:_},env:t}}function og({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!I(i)||!T(i,"<:",2))continue;let o=i.args[0];if(Y(o)){let s=o.token.value;if(pe(t,s).length===0){let u=Kn(It(),s,{env:t,context:n}),c=ye(u),{env:f}=Se({env:t,variable:{name:s,type:en(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=f,o.$={env:t,type:en(u),value:c,pathCollection:[]}}}let a=Yl({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function z_({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=ag({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 B_({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=M({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!q(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!Je(s.value))throw m({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(s.value)}`});let l=s.value,u=sn({targetType:e,traitType:l,env:i});if(n){if(u)throw m({token:r.token,errorMessage:`Type ${S(e)} must NOT implement ${S(l)}, but it does.`})}else if(!u)throw m({token:r.token,errorMessage:`Type ${S(e)} does not implement required trait ${S(l)}.`});return{env:i,success:!0}}function ag({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;I(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(Y(e)){let f=e.token.value,p=pe(r,f);if(p.length===0)return{env:r,success:!1};let _=p[p.length-1];if(_.value&&q(_.value[0])&&G(_.value[0].value))s=_.value[0].value;else if(_.value&&q(_.value[0]))try{return B_({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 f;try{f=M({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!f.$||!f.$.value||!q(f.$.value))return{env:r,success:!1};r=f.$.env;let p=f.$.value;if(!G(p.value))try{return B_({concreteType:p.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=p.value}let l;try{l=M({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!q(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!Je(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(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=Er({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function Yl({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!I(o)||!T(o,"<:",2))throw m({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${w(o)}`});let a=o.args[0],s=o.args[1],l;if(Y(a)){let c=a.token.value,f=pe(t,c);if(f.length>0){let p=f[f.length-1];if(p.value&&q(p.value[0])&&G(p.value[0].value))l=p.value[0].value;else if(p.value&&q(p.value[0])){let _=p.value[0].value;t=G_({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=Kn(It(),c,{env:t,context:n});let p=ye(l),{env:_}=Se({env:t,variable:{name:c,type:en(l),isCompileTimeOnly:!0,value:[p],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,a.$={env:t,type:en(l),value:p,pathCollection:[]}}}else{let c=M({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!q(c.$.value))throw m({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let f=c.$.value;if(!G(f.value)){t=G_({concreteType:f.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=f.value}let u=[];I(s)&&T(s,V.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let f=u[c],p=!1,_=f;I(f)&&T(f,"!")&&f.args.length===1&&(p=!0,_=f.args[0]);let d;try{d=M({expr:_,env:t,context:{...n}})}catch(h){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw h}if(!d.$||!d.$.value||!q(d.$.value)){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw m({token:_.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=d.$.env;let y=d.$.value;if(!Je(y.value))throw m({token:_.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(y.value)}`});let g=y.value;if(g.receiverType)throw m({token:_.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Er({env:t,someType:l,traitType:g,isNegated:p})}}return{env:t,pendingTraits:i}}function pi({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:Yl({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function G_({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(I(t)&&T(t,V.tuple))for(let a of t.args)I(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else I(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=M({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!q(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(!Je(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(u.value)}`});let c=u.value,f=sn({targetType:e,traitType:c,env:r});if(s){if(f)throw m({token:n.token,errorMessage:`Type ${S(e)} must NOT implement ${S(c)}, but it does.`})}else if(!f)throw m({token:n.token,errorMessage:`Type ${S(e)} does not implement required trait ${S(c)}.`})}return r}function jl({parameterExprs:e,env:t,context:n}){var p,_,d;t=dt(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let y=e[0];if(I(y)&&T(y,V.forall)){let g=y.args;for(let h=0;h<g.length;h++){let v=g[h];if(I(v)&&T(v,"...")&&v.args.length===1&&Y(v.args[0])){let F=v.args[0].token.value;if(i.find(D=>D.label===F))throw m({token:v.token,errorMessage:`Duplicate label "${F}" in type parameter`});let C=Ii(F,t),A=Un(1),{env:N}=Se({env:t,variable:{name:F,type:A,isCompileTimeOnly:!0,value:[ye(C)],token:v.args[0].token,initializedAtToken:v.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=N,v.$={env:t,type:A,value:ye(C),pathCollection:[]};let x={label:F,type:A,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:Ni({expr:v,labelExpr:v.args[0],typeExpr:v.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(x);continue}let{parameter:E,env:k}=Hl({expr:v,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(F=>F.label===E.label))throw m({token:v.token,errorMessage:`Duplicate label "${E.label}" in type parameter`});i.push(E),t=k}}}let u=0;for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&T(g,V.using)){if(u++,u>1)throw m({token:g.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 h=g.args;for(let v=0;v<h.length;v++){let E=h[v];if(I(E)&&T(E,"...")&&E.args.length===1&&Y(E.args[0])){let D=E.args[0].token.value,U=pe(t,D).at(-1);if(!U)throw m({token:E.token,errorMessage:`Effect row variable "${D}" not found in scope. Declare it with forall(..., ...(${D}))`});let j,O=(p=U.value)==null?void 0:p[0];if(O&&q(O)&&Gt(O.value)){let W=O.value;for(let ee of W.implicitParameters)o.push({...ee,isEffectRowSpread:!1});continue}else if(O&&q(O)){if(!(G(O.value)&&O.value.isEffectsRow||Gt(O.value)))throw m({token:E.token,errorMessage:`"...(${D})" requires "${D}" 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 : ${D}) instead of using(...(${D}))`});j=O.value}else if(O&&Ve(O)&&Gt(O.type)){let W=O.type;for(let ee of W.implicitParameters)o.push({...ee,isEffectRowSpread:!1});continue}else if(O&&Ve(O))j=Ii(D,t);else throw m({token:E.token,errorMessage:`Effect row variable "${D}" has invalid value. Expected a type.`});let z={label:D,type:j,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Ni({expr:E,labelExpr:E.args[0],typeExpr:E.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(z);continue}if(!(I(E)&&(T(E,":")||T(E,"=")||T(E,"?=")||T(E,":="))))throw m({token:E.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:b,env:F}=Hl({expr:E,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(D=>D.label===b.label))throw m({token:E.token,errorMessage:`Duplicate label "${b.label}" in implicit parameter (already in forall)`});if(o.find(D=>D.label===b.label))throw m({token:E.token,errorMessage:`Duplicate label "${b.label}" in implicit parameter`});let A={...b,isCompileTimeOnly:!0,isImplicit:!0};o.push(A);let x=F.frames[F.frames.length-1].variables.find(D=>D.name===b.label);x&&(x.isImplicit=!0),t=F}}}let c=new Set;for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&(T(g,V.forall)||T(g,V.using)||T(g,V.where)||T(g,"...")))continue;let h=ig(g);if(h){let v=M({expr:h.typeExpr,env:t,context:{...n}});if((_=v.$)!=null&&_.env&&(t=v.$.env),!v.$||!v.$.value||!q(v.$.value))continue;let E=v.$.value.value,k=le(E,{variableName:h.name,env:t,context:n}),{env:b}=Se({env:t,variable:{name:h.name,type:E,isCompileTimeOnly:!0,value:[k],token:h.token,initializedAtToken:h.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=b,c.add(y)}}let f=[];if(e.length>0){let y=e[e.length-1];if(I(y)&&T(y,V.where)){if(s=y.args,s.length===0)throw m({token:y.token,errorMessage:"The where clause must have at least one constraint."});let g=og({constraintExprs:s,env:t,context:n});t=g.env,f=g.pendingConstraints}}for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&T(g,V.forall)){if(y!==0)throw m({token:g.token,errorMessage:`Expected type parameters to be the first argument, got ${y+1}`});continue}else{if(I(g)&&T(g,V.using))continue;if(I(g)&&T(g,V.where)){if(y!==e.length-1)throw m({token:g.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(Y(g)&&Xt(g,"...")||I(g)&&T(g,"...")){l=!0;let h=!1,v=!1,E="...",k=g,b=ue.type;if(I(g)){let C=g.args[0];if(C){if(I(C)&&T(C,V.comptime))throw h=!0,C.args.length!==1?m({token:C.token,errorMessage:`Expected one argument for "comptime" , got ${C.args.length}`}):(k=C.args[0],E=C.args[0].token.value,b=ue.type,m({token:C.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(I(C)&&T(C,V.quote)){if(h=!0,v=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});k=C.args[0],E=C.args[0].token.value,b=Jo()}else throw ht(C)?(k=C,E=C.token.value,b=ue.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 ${w(C)}`})}else throw m({token:g.token,errorMessage:`Expected a name for variadic parameter, got ${w(g)}`})}else b=ue.type;let F=$n(S(b)),$={exprs:{expr:g,labelExpr:k,typeExpr:F},isCompileTimeOnly:h,isQuote:v,label:E,type:b,isOwningTheRcValue:!1,isImplicit:!1};if(a=$,E!=="..."){let{env:C}=Se({env:t,variable:{name:E,type:b,isCompileTimeOnly:$.isCompileTimeOnly,value:h?[le(b,{variableName:E,env:t,context:n})]:void 0,token:k.token,initializedAtToken:k.token,consumedAtToken:void 0,isOwningTheRcValue:$.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,k.$={env:t,type:b,value:h?le(b,{variableName:E,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw m({token:g.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:h,env:v}=Hl({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(k=>k.label===h.label))throw m({token:I(g)?((d=g.args[0])==null?void 0:d.token)??g.token:g.token,errorMessage:`Duplicate label "${h.label}" in function parameter`});if(r.push(h),t=v,f.length>0){let k=z_({pendingConstraints:f,env:t,context:n});t=k.env,f=k.pendingConstraints}}}}if(r.forEach((y,g)=>{if(y.isQuote&&gi(y.type)&&g!==r.length-1)throw m({token:y.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),f.length>0){let y=z_({pendingConstraints:f,env:t,context:n});if(t=y.env,y.pendingConstraints.length>0){let g=y.pendingConstraints[0];Yl({constraintExprs:[g.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function us({expr:e,env:t,context:n}){var k;if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> for function type, got:
|
|
10718
10718
|
${w(e)}
|
|
10719
10719
|
|
|
10720
|
-
Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],i=e.args[1],o=[];if(
|
|
10721
|
-
${w(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:f}=
|
|
10720
|
+
Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],i=e.args[1],o=[];if(I(r)&&(T(r,V.fn)||T(r,V.unsafe_fn)))o=r.args;else throw m({token:r.token,errorMessage:`Expected a "fn" or "unsafe_fn" call for parameter list, got:
|
|
10721
|
+
${w(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:f}=jl({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=f;let p,_=!1,d=!1,y=i;if(I(i)&&T(i,":",2)){let b=i.args[0];if(y=i.args[1],I(b)&&T(b,V.comptime)){if(_=!0,b.args.length!==1)throw m({token:b.token,errorMessage:`Expected one argument for "comptime" , got ${b.args.length}`});b=b.args[0]}if(I(b)&&T(b,V.unquote)){if(d=!0,b.args.length!==1)throw m({token:b.token,errorMessage:`Expected one argument for "unquote", got ${b.args.length}`});if(_)throw m({token:b.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,b=b.args[0]}if(I(b)&&T(b,V.quote))throw m({token:b.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!ht(b))throw m({token:b.token,errorMessage:`Expected a valid variable name for return label, got ${w(b)}`});p=b.token.value}else{if(I(y)&&T(y,V.comptime)){if(_=!0,y.args.length!==1)throw m({token:y.token,errorMessage:`Expected one argument for "comptime" , got ${y.args.length}`});y=y.args[0]}if(I(y)&&T(y,V.unquote)){if(d=!0,y.args.length!==1)throw m({token:y.token,errorMessage:`Expected one argument for "unquote", got ${y.args.length}`});if(_)throw m({token:y.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,y=y.args[0]}if(I(y)&&T(y,V.quote))throw m({token:y.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let g=M({expr:y,env:t,context:{...n,isEvaluatingFunctionType:!0}}),h,v=(k=g.$)==null?void 0:k.value;if(q(v))h=v.value;else throw m({token:y.token,errorMessage:`Expected a type for function return type, got:
|
|
10722
10722
|
${w(y)}`});if(Fr(h,t)&&!_&&(h=Pt({type:h,expectedType:void 0,expr:void 0,env:t}),Fr(h,t)))throw m({token:y.token,errorMessage:`Expected a "comptime" for return type, like:
|
|
10723
10723
|
|
|
10724
10724
|
comptime(${w(y)})
|
|
10725
10725
|
|
|
10726
10726
|
Given type:
|
|
10727
|
-
${S(h)}`});if(n.isUnsafeFunctionType||
|
|
10728
|
-
${w(d)}`});return(u=d.$)!=null&&u.env&&(t=(c=d.$)==null?void 0:c.env),{parameterType:(f=d.$)==null?void 0:f.value.value,calleeEnv:t}}else if(a){let _=M({expr:
|
|
10729
|
-
${w(a)}`});return t=(p=_.$)==null?void 0:p.env,{parameterType:_.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Ui({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let i=e.return,o=M({expr:
|
|
10730
|
-
${w(r)}`});let o=Li(t),a=o.fields,s=[],l=[];for(let _=0;_<i.length;_++){let d=i[_],y,g=d,h;if(
|
|
10731
|
-
${w(y)}`});h=y.token.value}{let v=M({expr:g,env:t,context:{...n,SelfType:o}});if(hn(v,n),!v.$)throw m({token:g.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${w(g)}`});t=v.$.env;let E=v.$.type,k={exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:g},type:E,label:h??`__field_${yt(t.modulePath)}`};a.push(k),l.push(v),v.$.value?s.push((p=v.$)==null?void 0:p.value):s.push(void 0),y&&(y.$=v.$)}}t=wi({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(_=>!_)?void 0:cr(o,s);let c=
|
|
10732
|
-
${w(r)}`});if(t=i.$.env,!
|
|
10733
|
-
${w(r)}`});let a=i.$.value.value,s=
|
|
10734
|
-
${w(i)}`});return t=o.$.env,t=Gn(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},pt(e,!0),e}function
|
|
10735
|
-
${w(l)}`});o=c.$.env;let f=c.$.type;if(!ie({type:
|
|
10736
|
-
${S(f)}`});let p=M({expr:u,env:o,context:{...a,expectedType:{type:
|
|
10737
|
-
${w(u)}`});o=p.$.env;let _=p.$.type;if(!ie({type:
|
|
10738
|
-
${S(_)}`});if(n&&ft(c.$.value)&&ft(p.$.value)){let d=c.$.value.value,y=p.$.value.value,g=typeof d=="bigint"?Number(d):d,h=typeof y=="bigint"?Number(y):y;if(g<0||g>n.elements.length)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${g}. Expected index in range [0, ${n.elements.length}].`});if(h<g||h>n.elements.length)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${g}, ${n.elements.length}].`});return{value:Aa(s,[n],g,h),type:s,callerEnv:o}}if(r&&ft(c.$.value)&&ft(p.$.value)){let d=c.$.value.value,y=p.$.value.value,g=typeof d=="bigint"?Number(d):d,h=typeof y=="bigint"?Number(y):y,v=r.endIndex-r.startIndex;if(g<0||g>v)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${g}. Expected index in range [0, ${v}].`});if(h<g||h>v)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${g}, ${v}].`});let E=r.startIndex+g,k=r.startIndex+h;return{value:Aa(s,r.sourceArray,E,k),type:s,callerEnv:o}}return{value:void 0,type:s,callerEnv:o}}}else{let s=i[0],l=M({expr:s,env:o,context:{...a,expectedType:{type:
|
|
10739
|
-
${w(s)}`});o=l.$.env;let u=l.$.type;if(!ie({type:
|
|
10740
|
-
${S(u)}`});let c=t.childType;if(r)if(l.$.value)if(ft(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f,_=r.endIndex-r.startIndex;if(p<0||p>=_)throw m({token:s.token,errorMessage:`Slice index out of bounds: ${p}. Expected index in range [0, ${_-1}].`});let d=r.startIndex+p,y=r.sourceArray[0];return{value:y.elements[d],index:p,arrayElementRef:{arrayValue:y,index:d},type:c,callerEnv:o}}else return{value:le(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Pt({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(ft(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f;if(p<0||p>=n.elements.length)throw m({token:s.token,errorMessage:`Array index out of bounds: ${p}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[p],index:p,arrayElementRef:{arrayValue:n,index:p},type:c,callerEnv:o}}else return{value:le(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Pt({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function
|
|
10727
|
+
${S(h)}`});if(n.isUnsafeFunctionType||zr(h,y.token),_&&Lr(h,t))throw m({token:y.token,errorMessage:`Unexpected "comptime" for return type of ${S(h)} which can only be used at runtime.`});if(_){for(let b of a)if(!b.isCompileTimeOnly)throw m({token:su(b),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(d&&!nn(h))throw m({token:y.token,errorMessage:`Expected Expr type for "unquote" return type, got ${S(h)}`});let E=fo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:h,typeExpr:y,isCompileTimeOnly:_,isUnquote:d,label:p??`fn_return_${yt(t.modulePath)}`},env:Vt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType});return t=Vt(t,!0),e.$={env:t,value:ye(E),type:en(E),pathCollection:[]},e}function ma({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){var s,l,u,c,f,p;let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let _=r??(((s=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:s.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),d=M({expr:nt(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,isEvaluatingFunctionBodyOrAsyncBlock:_?{kind:"function-body",type:_,evaluationEnv:t}:void 0}});if(!q((l=d.$)==null?void 0:l.value))throw m({token:o.token,errorMessage:`Expected type for parameter, got:
|
|
10728
|
+
${w(d)}`});return(u=d.$)!=null&&u.env&&(t=(c=d.$)==null?void 0:c.env),{parameterType:(f=d.$)==null?void 0:f.value.value,calleeEnv:t}}else if(a){let _=M({expr:nt(a),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType}});if(!_.$)throw m({token:a.token,errorMessage:`Failed to evaluate default value expression:
|
|
10729
|
+
${w(a)}`});return t=(p=_.$)==null?void 0:p.env,{parameterType:_.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Ui({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let i=e.return,o=M({expr:nt(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType}}),a,s=(l=o.$)==null?void 0:l.value;if(q(s))a=s.value;else throw m({token:(r==null?void 0:r.token)??ke,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return G(a)&&(a=pn(t,a)),{returnType:a,calleeEnv:((u=o.$)==null?void 0:u.env)??t}}function W_({expr:e,env:t,context:n}){var p;let r=e.func,i=e.args;if(!Y(r)||r.token.value!=="_")throw m({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
|
|
10730
|
+
${w(r)}`});let o=Li(t),a=o.fields,s=[],l=[];for(let _=0;_<i.length;_++){let d=i[_],y,g=d,h;if(I(d)&&T(d,":",2)){if(y=d.args[0],g=d.args[1],!ht(y))throw m({token:y.token,errorMessage:`Expected identifier for anonymous struct field label, got:
|
|
10731
|
+
${w(y)}`});h=y.token.value}{let v=M({expr:g,env:t,context:{...n,SelfType:o}});if(hn(v,n),!v.$)throw m({token:g.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${w(g)}`});t=v.$.env;let E=v.$.type,k={exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:g},type:E,label:h??`__field_${yt(t.modulePath)}`};a.push(k),l.push(v),v.$.value?s.push((p=v.$)==null?void 0:p.value):s.push(void 0),y&&(y.$=v.$)}}t=wi({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(_=>!_)?void 0:cr(o,s);let c=ye(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:f}=Se({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=f,e.$={env:t,type:o,value:u,pathCollection:[],runtimeArgExprsInOrder:l},pt(e,!0),e}function q_({expr:e,env:t,context:n}){let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Arc:
|
|
10732
|
+
${w(r)}`});if(t=i.$.env,!q(i.$.value))throw m({token:r.token,errorMessage:`Arc expects a type as argument, but got:
|
|
10733
|
+
${w(r)}`});let a=i.$.value.value,s=Bu(a,t);t=Eu({arcType:s,env:t,context:n});let l=ye(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function H_({expr:e,env:t,context:n,arcType:r}){let i=e.args[0],o=M({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
|
+
${w(i)}`});return t=o.$.env,t=Gn(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},pt(e,!0),e}function Y_({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(Y(e.args[0])&&Xt(e.args[0],":")||I(e.args[0])&&T(e.args[0],":")){let s=Ua(t.childType);if(Y(e.args[0]))return n?{value:Aa(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=M({expr:l,env:o,context:{...a,expectedType:{type:Ht(),env:o}}});if(!c.$)throw m({token:l.token,errorMessage:`Failed to evaluate start expression:
|
|
10735
|
+
${w(l)}`});o=c.$.env;let f=c.$.type;if(!ie({type:Ht(),env:o},{type:f,env:o}))throw m({token:l.token,errorMessage:`Expected usize for array start index, got:
|
|
10736
|
+
${S(f)}`});let p=M({expr:u,env:o,context:{...a,expectedType:{type:Ht(),env:o}}});if(!p.$)throw m({token:u.token,errorMessage:`Failed to evaluate end expression:
|
|
10737
|
+
${w(u)}`});o=p.$.env;let _=p.$.type;if(!ie({type:Ht(),env:o},{type:_,env:o}))throw m({token:u.token,errorMessage:`Expected usize for array end index, got:
|
|
10738
|
+
${S(_)}`});if(n&&ft(c.$.value)&&ft(p.$.value)){let d=c.$.value.value,y=p.$.value.value,g=typeof d=="bigint"?Number(d):d,h=typeof y=="bigint"?Number(y):y;if(g<0||g>n.elements.length)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${g}. Expected index in range [0, ${n.elements.length}].`});if(h<g||h>n.elements.length)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${g}, ${n.elements.length}].`});return{value:Aa(s,[n],g,h),type:s,callerEnv:o}}if(r&&ft(c.$.value)&&ft(p.$.value)){let d=c.$.value.value,y=p.$.value.value,g=typeof d=="bigint"?Number(d):d,h=typeof y=="bigint"?Number(y):y,v=r.endIndex-r.startIndex;if(g<0||g>v)throw m({token:l.token,errorMessage:`Slice start index out of bounds: ${g}. Expected index in range [0, ${v}].`});if(h<g||h>v)throw m({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${g}, ${v}].`});let E=r.startIndex+g,k=r.startIndex+h;return{value:Aa(s,r.sourceArray,E,k),type:s,callerEnv:o}}return{value:void 0,type:s,callerEnv:o}}}else{let s=i[0],l=M({expr:s,env:o,context:{...a,expectedType:{type:Ht(),env:o}}});if(!l.$)throw m({token:s.token,errorMessage:`Failed to evaluate argument expression:
|
|
10739
|
+
${w(s)}`});o=l.$.env;let u=l.$.type;if(!ie({type:Ht(),env:o},{type:u,env:o}))throw m({token:s.token,errorMessage:`Expected usize for array index, got:
|
|
10740
|
+
${S(u)}`});let c=t.childType;if(r)if(l.$.value)if(ft(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f,_=r.endIndex-r.startIndex;if(p<0||p>=_)throw m({token:s.token,errorMessage:`Slice index out of bounds: ${p}. Expected index in range [0, ${_-1}].`});let d=r.startIndex+p,y=r.sourceArray[0];return{value:y.elements[d],index:p,arrayElementRef:{arrayValue:y,index:d},type:c,callerEnv:o}}else return{value:le(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Pt({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(ft(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f;if(p<0||p>=n.elements.length)throw m({token:s.token,errorMessage:`Array index out of bounds: ${p}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[p],index:p,arrayElementRef:{arrayValue:n,index:p},type:c,callerEnv:o}}else return{value:le(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Pt({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function j_({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(ft(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(Ve(o)){s=n.length;let p=kr(BigInt(s));a=Nr(t.childType,p)}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 p=0;p<n.length;p++){let _=n[p],d=M({expr:_,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!d.$)throw m({token:_.token,errorMessage:`Failed to evaluate array element at index ${p}.`});if(hn(d,i),u=d.$.env,p===0&&We(c)&&Ve(c.length)&&We(d.$.type)&&(c=d.$.type,a=Nr(c,a.length)),!ie({type:c,env:u},{type:d.$.type,env:u}))throw m({token:_.token,errorMessage:`Array element at index ${p} has incompatible type:
|
|
10741
10741
|
- Expected: ${S(c)}
|
|
10742
|
-
- Given : ${S(d.$.type)}`});d.$.value!==void 0?l.push(d.$.value):l.push(le(c,{env:u,context:i}))}let f=ei(a,l);return e.$={env:u,value:f,type:a,pathCollection:[]},e}function
|
|
10743
|
-
`);throw m({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function
|
|
10742
|
+
- Given : ${S(d.$.type)}`});d.$.value!==void 0?l.push(d.$.value):l.push(le(c,{env:u,context:i}))}let f=ei(a,l);return e.$={env:u,value:f,type:a,pathCollection:[]},e}function K_({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=pe(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=mt(r,s,{...s,consumedAtToken:n}))}}return r}function Fo(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function cs({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!Jt(i)&&!sn({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!sn({targetType:l.type,traitType:i,env:n})),a=S(i),s=o.map(l=>`\`${l.label}\` has type \`${S(l.type)}\` which does not implement \`${a}\``).join(`
|
|
10743
|
+
`);throw m({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function fs({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=Li(n),l=Array.from(t.entries()).map(([c,f])=>({label:c,type:f.type,isCompileTimeOnly:!1,assignedValue:void 0,isEffectParam:f.isEffectParam||void 0,exprs:{expr:{tag:"Atom",token:f.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,o=s,n=wi({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=cr(s,u):a=void 0}else{let s=Li(n);s.fields=[],n=wi({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=cr(s,[])}else if(t&&t.size>0){let s=o,l=Array.from(t.keys()),u=s.fields.map(f=>f.label);for(let f of l)if(!u.includes(f))throw m({token:r,errorMessage:`Captured variable "${f}" does not exist in expected capture struct "${S(s)}"`});for(let f of s.fields)if(!l.includes(f.label))throw m({token:r,errorMessage:`Expected capture struct field "${f.label}" is not captured by this closure`});for(let[f,p]of t.entries()){let _=s.fields.find(d=>d.label===f);if(_&&!ie({type:_.type,env:n},{type:p.type,env:n}))throw m({token:p.token,errorMessage:`Captured variable "${f}" has type "${S(p.type)}" but expected struct field has type "${S(_.type)}"`})}let c=Array.from(t.values()).map(f=>f.value);c.every(f=>f!==void 0)?a=cr(o,c):a=void 0}else a=cr(o,[]);return{captureType:o,captureValue:a}}function _s({capturedVariables:e,env:t}){var r;let n=new Map;for(let[i,o]of e.entries())if(o.frameLevel<t.frames.length){let s=t.frames[o.frameLevel].variables.find(l=>l.name===i);s&&!s.isCompileTimeOnly&&n.set(i,{...o,value:(r=s.value)==null?void 0:r[0],type:s.type})}return n}function ps({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(Be(a.type)){let s=$n(`${L.___dup[0]}(${o})`),l=M({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 Kl({functionBodyExpr:e,functionType:t,functionValue:n,env:r,context:i}){var a,s,l;if(!Ye(t.return.type))return;let o;try{let u=nt(e),c=Lo({...i,capturedVariables:void 0},t,{...n},r),f=Yt({expr:u,env:r,context:c.evaluationContext,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(o=(a=f.$)==null?void 0:a.type,Nt((s=f.$)==null?void 0:s.controlFlow,"escape")&&!Nt((l=f.$)==null?void 0:l.controlFlow,"return"))return}catch{return}if(o&&!ie({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: ${S(t.return.type)}
|
|
10745
|
-
- Given : ${S(o)}`})}function Lo(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=vr()}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
|
|
10745
|
+
- Given : ${S(o)}`})}function Lo(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=vr()}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 X_({expr:e,functionType:t,callerEnv:n,context:r}){var F,$,C,A;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=(F=r.expectedType)==null?void 0:F.type,u=l&&ae(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((N,x)=>N.label!==t.parameters[x].label),c=dt(s?n:Qa(n));if(u&&l&&ae(l)){for(let N of t.forallParameters){let{env:x}=Se({env:c,variable:{name:N.label,type:N.type,isCompileTimeOnly:!0,value:[le(N.type,{variableName:N.label,env:c,context:r})],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=x}for(let N=0;N<t.parameters.length;N++){let x=t.parameters[N],D=l.parameters[N],P=x.label,U=D.label,{env:j}=Se({env:c,variable:{name:P,type:x.type,isCompileTimeOnly:x.isCompileTimeOnly,value:x.isCompileTimeOnly?[le(x.type,{variableName:U,env:c,context:r})]:void 0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:x.isOwningTheRcValue,parameterAlias:P!==U?U:void 0}});c=j}}else c=dt(c,t.parametersFrame);let f=c.frames[c.frames.length-1],p={...t,parametersFrame:f,env:t.env},_={tag:"Function",type:p,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${yt(c.modulePath)}`,definitionSiteEnclosingFunctionType:(($=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if((C=p.whereClauseExprs)!=null&&C.length){let N=p.whereClauseExprs.map(D=>nt(D));c=pi({constraintExprs:N,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let d=p.forallParameters.length>0||p.parameters.some(N=>Ye(N.type))||p.SelfType&&Ye(p.SelfType),y,g;if(d)Kl({functionBodyExpr:a,functionType:p,functionValue:_,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?le(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},g={...r,capturedVariables:void 0},y=a;else{if(g=Lo({...r,capturedVariables:void 0},p,_,c).evaluationContext,y=Yt({expr:a,env:c,context:g,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!y.$)throw m({token:a.token,errorMessage:"Failed to evaluate the function body."});c=y.$.env}let h=g.capturedVariables,v=(A=y.$)==null?void 0:A.type;if(Tr(y)&&(_.isControlFunction=!0),!_.isControlFunction&&v&&!ie({type:p.return.type,env:c},{type:v,env:c}))throw m({token:p.return.typeExpr.token,errorMessage:`Incompatible function return type for:
|
|
10746
10746
|
- Expected: ${S(p.return.type)}
|
|
10747
|
-
- Given : ${S(v)}`});if(G(p.return.type)&&!p.return.type.resolvedConcreteType&&!G(v)&&(p.return.type.resolvedConcreteType=v),p.return.isCompileTimeOnly&&y.$&&!y.$.value)throw m({token:p.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=Vt(c,!0);let E=n;s&&h&&h.size>0&&(E=
|
|
10747
|
+
- Given : ${S(v)}`});if(G(p.return.type)&&!p.return.type.resolvedConcreteType&&!G(v)&&(p.return.type.resolvedConcreteType=v),p.return.isCompileTimeOnly&&y.$&&!y.$.value)throw m({token:p.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=Vt(c,!0);let E=n;s&&h&&h.size>0&&(E=K_({capturedVariables:h,env:n,closureToken:e.token}));let k=_,b=p;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let N=bo(_,E,r);N&&(k=N,b=N.type)}return e.$={env:E,value:k,type:b,pathCollection:h&&h.size>0?Fo(h):[]},e}function Q_({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){var k,b;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=dt(r,t.isFn.callType.parametersFrame);if((k=t.isFn.callType.whereClauseExprs)!=null&&k.length){let F=t.isFn.callType.whereClauseExprs.map(C=>nt(C));l=pi({constraintExprs:F,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_${yt(l.modulePath)}`,definitionSiteEnclosingFunctionType:((b=i.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=Lo(i,t.isFn.callType,u,l),f=Yt({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!f.$)throw m({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=f.$.env;let p=c.capturedVariables,_=f.$.type;if(!ie({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: ${S(t.isFn.callType.return.type)}
|
|
10749
|
-
- Given : ${S(_)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!f.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Vt(l,!0);let d=p&&p.size>0?
|
|
10749
|
+
- Given : ${S(_)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!f.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Vt(l,!0);let d=p&&p.size>0?_s({capturedVariables:p,env:r}):void 0,y=r,{capturedVariableDupExpressions:g,env:h}=ps({capturedVariablesWithValues:d,env:r,context:i});y=h;let{captureType:v}=fs({expectedCaptureType:void 0,capturedVariablesWithValues:d,env:y,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},G(n)&&v&&cs({wrapperType:n,captureType:v,env:y,errorToken:e.token});let E;return G(n)?(n.resolvedConcreteType=v,E={...n,resolvedConcreteType:v}):et(n)?E=n:E=t,e.$={env:y,value:void 0,type:E,pathCollection:p&&p.size>0?Fo(p):[],deferredDupExpressions:g&&g.length>0?g:void 0,captureType:v,closureFunctionValue:u},et(n)&&pt(e,!0),e}function Z_({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],f=M({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!f.$)throw m({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(hn(f,i),a=f.$.env,!ie({type:s,env:a},{type:f.$.type,env:a}))throw m({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
|
|
10750
10750
|
- Expected: ${S(s)}
|
|
10751
|
-
- Given : ${S(f.$.type)}`});if(f.$.value!==void 0)o.push(f.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${S(f.$.type)}`})}let l=ur(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function Ao({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:le(t.return.type,{variableName:"ctfe_analysis_result_"+yt(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==null?void 0:e.token)??
|
|
10752
|
-
${w(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function
|
|
10751
|
+
- Given : ${S(f.$.type)}`});if(f.$.value!==void 0)o.push(f.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${S(f.$.type)}`})}let l=ur(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function Ao({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:le(t.return.type,{variableName:"ctfe_analysis_result_"+yt(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==null?void 0:e.token)??ke,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=gt(u),f=n.funcId,p=n.calledComptimeFunctionCaches,_=c?p.find(E=>E.argValues.length===l.length&&E.argValues.every((k,b)=>{let F=l[b];return q(k)&&q(F)?G(k.value)&&G(F.value)||Ye(k.value)||Ye(F.value)?k.value.id===F.value.id:G(k.value)&&!G(F.value)?!1:ie({type:k.value,env:E.env},{type:F.value,env:i},!0):an({value:k,env:E.env},{value:F,env:i})})):void 0;if(_)return{callerEnv:i,calleeEnv:o,value:_.value};let d=n.body,y={funcId:f,argValues:l,value:le(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:nt(d)};n.calledComptimeFunctionCaches.push(y);let g=n.calledComptimeFunctionCaches.length-1,h;try{h=Yt({expr:y.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(g,1),E}if(!h.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=h.$.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=h.$.env,q(v)){let E=v.value;!E.typeName&&n.funcName&&(E.typeName=n.funcName+`(${l.map(k=>tt(k)).join(", ")})`),(Ie(E)||Me(E)||Rt(E)||je(E)||Je(E))&&(E.functionValue||(E.functionValue=n))}return c?n.calledComptimeFunctionCaches[g]={funcId:f,argValues:l,value:v,env:h.$.env,body:h}:n.calledComptimeFunctionCaches.splice(g,1),{value:v,callerEnv:i,calleeEnv:o}}function ep(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(ae(r.type)){let i=t==null?void 0:t.fields[n];if(i&&be(i)&&i.isControlFunction)return!0}if(je(r.type)){let i=t==null?void 0:t.fields[n];if(ep(r.type,i&&Bt(i)?i:void 0))return!0}}return!1}function sg({variablesToDrop:e,env:t,context:n}){var o;let r=[],i=t;for(let a of e){let s=$n(`${L.___drop[0]}(${a.name})`),l=M({expr:s,env:i,context:{...n,expectedType:void 0}});if(r.push(l),(o=l.$)!=null&&o.env)i=l.$.env;else throw m({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
|
|
10752
|
+
${w(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function lg({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){var b,F,$,C,A,N,x,D;let c=r[i],f;if(c&&I(c)&&T(c,":",2)){if(f=c.args[0],c=c.args[1],!Y(f))throw m({token:f.token,errorMessage:`Expected identifier for label, got:
|
|
10753
10753
|
${w(f)}`});let P=f.token.value;if(n.label==="")throw m({token:f.token,errorMessage:"Named argument call is not allowed for this parameter (it has no label)."});if(n.label!==P)throw m({token:f.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 "${P}".`})}let{parameterType:p,calleeEnv:_}=ma({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=_;let d;if(!c||Y(c)&&Xt(c,V.undefined))if(n.exprs.defaultValueExpr)d=M({expr:
|
|
10755
|
-
${S(p)}`});else{let P=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"?void 0:{type:p,env:o};if(d=M({expr:c,env:a,context:{...s,expectedType:P}}),($=d.$)!=null&&$.env&&(a=(C=d.$)==null?void 0:C.env),n.isCompileTimeOnly||u.push(d),Ci(d,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let U=(
|
|
10756
|
-
${c?w(c):""}`});if(n.assignedValue&&((D=d.$)!=null&&D.value)&&!an({value:n.assignedValue,env:o},{value:d.$.value,env:a}))throw m({token:(c==null?void 0:c.token)??
|
|
10754
|
+
Expected ${n?`label "${n.label}"`:"no label"} at the argument position, but got "${P}".`})}let{parameterType:p,calleeEnv:_}=ma({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=_;let d;if(!c||Y(c)&&Xt(c,V.undefined))if(n.exprs.defaultValueExpr)d=M({expr:nt(n.exprs.defaultValueExpr),env:o,context:{...s,expectedType:{type:p,env:o}}}),(b=d.$)!=null&&b.env&&(o=(F=d.$)==null?void 0:F.env),c&&(c.$=d.$),n.isCompileTimeOnly||u.push(d);else throw m({token:(c==null?void 0:c.token)??ke,errorMessage:`Expected default value for parameter "${n.label}"`});else if(n.isQuote)if(nn(p))d=nt(c),d.$={type:On(),value:fr(c),env:a,pathCollection:[]};else throw m({token:c.token,errorMessage:`Expected "Expr" type for "quote" parameter "${n.label}", got:
|
|
10755
|
+
${S(p)}`});else{let P=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"?void 0:{type:p,env:o};if(d=M({expr:c,env:a,context:{...s,expectedType:P}}),($=d.$)!=null&&$.env&&(a=(C=d.$)==null?void 0:C.env),n.isCompileTimeOnly||u.push(d),Ci(d,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let U=(A=d.$)==null?void 0:A.variableName,j=U?pe(a,U):[],O=j.length?j[j.length-1]:void 0;O!=null&&O.isOwningTheRcValue?a=Gn(d,a,!0):(hn(d,s),(N=d.$)!=null&&N.env&&(a=d.$.env),a=Gn(d,a,!0))}}if(!d.$)throw m({token:(c==null?void 0:c.token)??ke,errorMessage:"Failed to evaluate argument expression."});let y=d.$.type;if(!((x=d.$)!=null&&x.value)&&n.isCompileTimeOnly)throw m({token:(c==null?void 0:c.token)??ke,errorMessage:`Cannot assign runtime argument to compile-time parameter:
|
|
10756
|
+
${c?w(c):""}`});if(n.assignedValue&&((D=d.$)!=null&&D.value)&&!an({value:n.assignedValue,env:o},{value:d.$.value,env:a}))throw m({token:(c==null?void 0:c.token)??ke,errorMessage:`Value mismatch for parameter "${n.label}":
|
|
10757
10757
|
Expected: ${tt(n.assignedValue)}
|
|
10758
|
-
Got: ${tt(d.$.value)}`});let g=d.$.value;if(!n.isCompileTimeOnly&&Ti(y,d.$.env)&&(s.forceCompileTimeBindings||(g=void 0),y=Pt({type:y,expectedType:p,expr:d,env:d.$.env}),Fr(y,d.$.env)))throw m({token:(c==null?void 0:c.token)??
|
|
10759
|
-
${w(d)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=
|
|
10760
|
-
${P.message}`})}let{parameterType:E,calleeEnv:k}=ma({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=k,!ie({type:E,env:o},{type:y,env:a},i===0&&l))throw m({token:(c==null?void 0:c.token)??
|
|
10758
|
+
Got: ${tt(d.$.value)}`});let g=d.$.value;if(!n.isCompileTimeOnly&&Ti(y,d.$.env)&&(s.forceCompileTimeBindings||(g=void 0),y=Pt({type:y,expectedType:p,expr:d,env:d.$.env}),Fr(y,d.$.env)))throw m({token:(c==null?void 0:c.token)??ke,errorMessage:`Cannot convert compile-time type to runtime type for argument:
|
|
10759
|
+
${w(d)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=Se({env:o,variable:{name:n.label,type:y,isCompileTimeOnly:h,value:g?[g]:void 0,token:(c==null?void 0:c.token)??ke,initializedAtToken:(c==null?void 0:c.token)??ke,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,g&&q(g)&&G(g.value)){let P=g.value,U=_r(a,P);if(U){for(let j of U.requiredTraits){let O={...j,receiverType:P};o=Er({env:o,someType:P,traitType:O,isNegated:!1})}for(let j of U.negativeTraits){let O={...j,receiverType:P};o=Er({env:o,someType:P,traitType:O,isNegated:!0})}}}try{let{expectedEnv:P}=$t({type:p,env:o},{type:y,env:a});o=P}catch(P){throw m({token:(c==null?void 0:c.token)??ke,errorMessage:`Failed to synthesize types for parameter "${n.label}":
|
|
10760
|
+
${P.message}`})}let{parameterType:E,calleeEnv:k}=ma({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=k,!ie({type:E,env:o},{type:y,env:a},i===0&&l))throw m({token:(c==null?void 0:c.token)??ke,errorMessage:`Type mismatch for parameter "${n.label}":
|
|
10761
10761
|
Expected: ${S(E)}
|
|
10762
|
-
Got: ${S(y)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:g,argType:y,parameterType:E}}function Io(e){if(e&&be(e))return e}function
|
|
10762
|
+
Got: ${S(y)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:g,argType:y,parameterType:E}}function Io(e){if(e&&be(e))return e}function ds(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var ms=ds("YO_DEBUG_CALL")||ds("YO_DEBUG_CALL_PROFILE")||ds("YO_DEBUG_EVAL")||ds("YO_DEBUG_EVAL_PROFILE"),J_=globalThis,Or=J_.__yoCallProfilerState??(J_.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function di({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var ce,Q,Pe,ut,at,_e,Ce,$e,Ge,rt,ct,jt,B,ne,ve,Te,Ae,Fe,ze,bt,Kt,kt,vt,mn,Le,ot,lt,Ue,Ee;if(ms){Or.tryCallCount++;let X="(unknown)";t&&"funcName"in t&&t.funcName?X=t.funcName:t&&"funcId"in t?X=String(t.funcId):r&&(X=w(r).slice(0,60)),Or.tryCallNames.set(X,(Or.tryCallNames.get(X)??0)+1),Or.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${Or.tryCallCount}: name=${X}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,f=[],p=[],_=[],d=t==null?void 0:t.definitionSiteEnclosingFunctionType,y=0;i.length>0&&I(i[0])&&T(i[0],V.forall)&&(c=i[0],y=1);let g,h=i.slice(y),v=h.findIndex(X=>I(X)&&T(X,V.using));if(v!==-1){let X=h.findIndex((oe,fe)=>fe>v&&I(oe)&&T(oe,V.using));if(X!==-1)throw m({token:h[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))'});g=h[v],h=[...h.slice(0,v),...h.slice(v+1)]}let E=n.parameters.length,k=h;if(!n.variadicParameter){if(k.length>E){let X=n.parameters.at(-1);if(!(X&&X.isQuote&&gi(X.type)))throw m({token:(r==null?void 0:r.token)??ke,errorMessage:`Too many arguments for function call:
|
|
10763
10763
|
Expected: ${E} arguments
|
|
10764
|
-
Got: ${k.length} arguments`})}else if(k.length<E&&!n.parameters.slice(k.length).every(oe=>oe.exprs.defaultValueExpr!==void 0))throw m({token:(r==null?void 0:r.token)??
|
|
10764
|
+
Got: ${k.length} arguments`})}else if(k.length<E&&!n.parameters.slice(k.length).every(oe=>oe.exprs.defaultValueExpr!==void 0))throw m({token:(r==null?void 0:r.token)??ke,errorMessage:`Too few arguments for function call:
|
|
10765
10765
|
Expected: ${E} arguments
|
|
10766
|
-
Got: ${k.length} arguments`})}let b=h.slice(0,E),F=h.slice(E);i=b,o=
|
|
10767
|
-
${w(
|
|
10768
|
-
${w(Z)}`:"Expected type for default value."});J=(Pe=De.$)==null?void 0:Pe.value}else throw m({token:(Z==null?void 0:Z.token)??(r==null?void 0:r.token)??
|
|
10769
|
-
${w(Z)}`});J=(_e=De.$)==null?void 0:_e.value}
|
|
10766
|
+
Got: ${k.length} arguments`})}let b=h.slice(0,E),F=h.slice(E);i=b,o=dt(o);let $=dt(n.env);if(n.SelfType){let X=ye(n.SelfType),{env:oe}=Se({env:$,variable:{name:"Self",token:ke,type:X.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:[X],isOwningTheRcValue:!1},allowVariableShadowing:!0});$=oe}for(let X=0;X<n.forallParameters.length;X++){let oe=n.forallParameters[X],fe;if(oe.exprs.labelExpr&&oe.label){let he=gt(oe.type)&&oe.type.level===1&&I(oe.exprs.expr)&&T(oe.exprs.expr,"...",1)?ye(Ii(oe.label,$)):le(oe.type,{variableName:oe.label,env:$,context:a}),{env:J,variable:Ne}=Se({env:$,variable:{name:oe.label,type:oe.type,isCompileTimeOnly:!0,value:[he],token:oe.exprs.labelExpr.token,initializedAtToken:oe.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});$=J,fe=Ne}if(c){let Z=c.args[X],he;if(I(Z)&&T(Z,":",2)){if(he=Z.args[0],Z=Z.args[1],!Y(he))throw m({token:he.token,errorMessage:`Expected identifier for type parameter label, got:
|
|
10767
|
+
${w(he)}`});if(oe.label!==he.token.value)throw m({token:he.token,errorMessage:`Expected type parameter label "${oe.label}", got "${he.token.value}".`})}let J;if(Y(Z)&&Z.token.value==="_")continue;if(!Z||Y(Z)&&Xt(Z,V.undefined))if(oe.exprs.defaultValueExpr){let De=M({expr:nt(oe.exprs.defaultValueExpr),env:$,context:{...a}});if((ce=De.$)!=null&&ce.env&&(o=De.$.env),Z&&(Z.$=De.$),!q((Q=De.$)==null?void 0:Q.value))throw m({token:(Z==null?void 0:Z.token)??(r==null?void 0:r.token)??ke,errorMessage:Z?`Expected type for default value, got:
|
|
10768
|
+
${w(Z)}`:"Expected type for default value."});J=(Pe=De.$)==null?void 0:Pe.value}else throw m({token:(Z==null?void 0:Z.token)??(r==null?void 0:r.token)??ke,errorMessage:"Type parameter does not have default value."});else{let De=M({expr:Z,env:o,context:{...a,expectedType:{type:oe.type,env:$}}});if((ut=De.$)!=null&&ut.env&&(o=De.$.env),!q((at=De.$)==null?void 0:at.value))throw m({token:Z.token,errorMessage:`Expected type for argument, got:
|
|
10769
|
+
${w(Z)}`});J=(_e=De.$)==null?void 0:_e.value}he&&(he.$={env:$,type:J.type,value:J,pathCollection:[]});let{parameterType:Ne,calleeEnv:ge}=ma({parameter:oe,calleeEnv:$,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});$=ge;let{expectedEnv:Ke,givenEnv:Qe}=$t({type:Ne,env:$},{type:J.type,env:o});if($=Ke,o=Qe,!ie({type:Ne,env:$},{type:J.type,env:o}))throw m({token:(Z==null?void 0:Z.token)??(r==null?void 0:r.token)??ke,errorMessage:`Type mismatch for type parameter "${oe.label}":
|
|
10770
10770
|
Expected: ${S(Ne)}
|
|
10771
|
-
Got: ${S(J.type)}`});if(oe.label)if(fe)$=
|
|
10772
|
-
${w(oe)}`});o=fe.$.env,x.push({value:fe.$.value,argType:fe.$.type}),n.variadicParameter.isCompileTimeOnly||_.push(oe)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let
|
|
10773
|
-
Please ensure a given variable of matching type is in scope.`});let
|
|
10771
|
+
Got: ${S(J.type)}`});if(oe.label)if(fe)$=mt($,fe,{...fe,value:[J]});else{let De=(Z==null?void 0:Z.token)??(r==null?void 0:r.token)??ke,{env:st}=Se({env:$,variable:{name:oe.label,type:J.type,isCompileTimeOnly:!0,value:[J],token:De,initializedAtToken:De,consumedAtToken:void 0,isOwningTheRcValue:!1}});$=st}f.push({value:J,argType:J.type,parameterType:Ne})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:X,calleeEnv:oe}=Ui({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:fe}=$t({type:X,env:oe},{type:a.expectedType.type,env:a.expectedType.env});$=fe}catch{}if(g&&n.implicitParameters.length>0&&n.implicitParameters.some(oe=>oe.isEffectRowSpread)){let fe=n.implicitParameters.filter(he=>!he.isEffectRowSpread).length,Z=g.args.slice(fe);if(Z.length>0){let he=[];for(let ge of Z){if(!Y(ge))throw m({token:ge.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${w(ge)}`});let Ke=ge.token.value,De=pe(o,Ke).at(-1);if(!De)throw m({token:ge.token,errorMessage:`Variable "${Ke}" not found for using() argument in effect row spread.`});ge.$={env:o,type:De.type,value:(Ce=De.value)==null?void 0:Ce[0],variableName:Ke,pathCollection:[]},he.push({label:Ke,type:De.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:ge,labelExpr:ge,typeExpr:void 0,defaultValueExpr:void 0}})}let J=Wr(he),Ne=ye(J);for(let ge of n.implicitParameters){if(!ge.isEffectRowSpread)continue;let Ke=ge.label,De=pe($,Ke).at(-1);De&&($=mt($,De,{...De,value:[Ne]})),G(ge.type)&&ge.type.isEffectsRow&&(ge.type.resolvedConcreteType=J)}}}n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0});let C=n.parameters.length;for(let X=0;X<C;X++){let oe=n.parameters[X],{calleeEnv:fe,callerEnv:Z,context:he,argValue:J,argType:Ne,parameterType:ge}=lg({functionType:n,definitionSiteEnclosingFunctionType:d,parameter:oe,argExprs:i,argIndex:X,callerEnv:o,calleeEnv:$,context:a,isMethodCall:s,runtimeArgExprsInOrder:_});$=fe,o=Z,a=he,p.push({value:J,parameterType:ge,argType:Ne})}if(!c&&n.forallParameters.length>0){for(let X of n.forallParameters)if(X.label){let fe=pe($,X.label).at(-1);if(($e=fe==null?void 0:fe.value)!=null&&$e[0]&&q(fe.value[0])){let Z=fe.value[0];if(G(Z.value)&&Z.value.resolvedConcreteType&&(!Z.value.requiredTraits||Z.value.requiredTraits.length===0)){let he=ye(Z.value.resolvedConcreteType);$=mt($,fe,{...fe,value:[he]})}}}}if(!c&&n.forallParameters.length>0){for(let X of n.forallParameters)if(X.label){let fe=pe($,X.label).at(-1);(Ge=fe==null?void 0:fe.value)!=null&&Ge[0]&&q(fe.value[0])&&f.push({value:fe.value[0],argType:fe.value[0].type,parameterType:X.type})}}if((rt=n.whereClauseExprs)!=null&&rt.length){let X=n.whereClauseExprs.map(fe=>nt(fe));$=pi({constraintExprs:X,env:$,context:{...a,isEvaluatingFunctionType:!0}}).env}let{returnType:A,calleeEnv:N}=Ui({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if($=N,a.expectedType&&!n.return.isUnquote){let{expectedEnv:X}=$t({type:A,env:$},{type:a.expectedType.type,env:a.expectedType.env});$=X;let oe=Ui({functionType:n,calleeEnv:$,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});A=oe.returnType,$=oe.calleeEnv,ie({type:a.expectedType.type,env:a.expectedType.env},{type:A,env:$})&&(A=a.expectedType.type)}let x=[];if(n.variadicParameter){for(let X=0;X<F.length;X++){let oe=F[X],fe;if(n.variadicParameter.isQuote)fe=nt(oe),fe.$={type:On(),value:fr(oe),env:o,pathCollection:[]},x.push({value:fe.$.value,argType:fe.$.type});else{if(fe=M({expr:oe,env:o,context:{...a}}),!((ct=fe.$)!=null&&ct.env))throw m({token:oe.token,errorMessage:`Failed to evaluate the expression:
|
|
10772
|
+
${w(oe)}`});o=fe.$.env,x.push({value:fe.$.value,argType:fe.$.type}),n.variadicParameter.isCompileTimeOnly||_.push(oe)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let X=ur(On(),x.map(fe=>fe.value)),{env:oe}=Se({env:$,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}});$=oe}}}let D=[],P=[];if(n.implicitParameters.length>0)for(let X=0;X<n.implicitParameters.length;X++){let oe=n.implicitParameters[X],fe=!1;if(oe.isEffectRowSpread){let J=[],ge=(B=(jt=pe($,oe.label).at(-1))==null?void 0:jt.value)==null?void 0:B[0],Ke;if(ge&&q(ge)&&Gt(ge.value))Ke=ge.value;else if(G(oe.type)&&oe.type.isEffectsRow){let Qe=pn($,oe.type);Gt(Qe)&&(Ke=Qe)}else Gt(oe.type)&&(Ke=oe.type);if(!Ke&&G(oe.type)&&oe.type.isEffectsRow){let Qe=Dr(o,Ze=>Ze.isImplicit===!0&&Ze.isCompileTimeOnly===!0&&(ae(Ze.type)||je(Ze.type))),De=new Set(n.implicitParameters.filter(Ze=>!Ze.isEffectRowSpread).map(Ze=>Ze.label)),st=Qe.filter(Ze=>!De.has(Ze.name));if(st.length>0){for(let Ln of st){let Zt=(ne=Ln.value)==null?void 0:ne[0];if(Zt){P.push({value:Zt,parameterType:Ln.type,argType:Ln.type});let{env:Tn}=Se({env:$,variable:{name:Ln.name,type:Ln.type,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[Zt],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});$=Tn}}let Ze=Wr(st.map(Ln=>({label:Ln.name,type:Ln.type,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!0,exprs:{expr:void 0,labelExpr:void 0,typeExpr:void 0}}))),Lt=ye(Ze),yn=pe($,oe.label).at(-1);yn&&($=mt($,yn,{...yn,value:[Lt],type:Ze})),fe=!0;continue}}J=(Ke==null?void 0:Ke.implicitParameters)??[];for(let Qe of J){let De=Qe.type,Ze=Dr(o,Lt=>Lt.isImplicit===!0&&Lt.isCompileTimeOnly===!0&&Lt.name===Qe.label&&ie({type:De,env:$},{type:Lt.type,env:o})).at(-1);if((ve=Ze==null?void 0:Ze.value)!=null&&ve[0]){let Lt=Ze.value[0];P.push({value:Lt,parameterType:De,argType:Ze.type});let{env:At}=Se({env:$,variable:{name:Qe.label,type:De,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[Lt],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});$=At}else{let At=Dr(o,Zt=>Zt.isImplicit===!0&&Zt.isCompileTimeOnly===!0&&ie({type:De,env:$},{type:Zt.type,env:o})).at(-1);if(!((Te=At==null?void 0:At.value)!=null&&Te[0]))throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??ke,errorMessage:`No "given" variable found for effect row parameter "${Qe.label}" of type ${S(De)} (expanded from effect row ...(${oe.label})).
|
|
10773
|
+
Please ensure a given variable of matching type is in scope.`});let yn=At.value[0];P.push({value:yn,parameterType:De,argType:At.type});let{env:Ln}=Se({env:$,variable:{name:Qe.label,type:De,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[yn],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});$=Ln}}continue}let{parameterType:Z,calleeEnv:he}=ma({parameter:oe,calleeEnv:$,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});if($=he,g){let J=g.args[X],Ne=J&&Y(J)&&Xt(J,V.undefined);if(J&&!Ne){let ge=M({expr:J,env:o,context:{...a}});if(!ge.$)throw m({token:J.token,errorMessage:`Failed to evaluate using() argument: ${w(J)}`});o=ge.$.env;let Ke=ge.$.value,Qe=ge.$.type;if(!Ke)throw m({token:J.token,errorMessage:`Expected compile-time value for using() argument, got runtime value: ${w(J)}`});if(!ie({type:Z,env:$},{type:Qe,env:o}))throw m({token:J.token,errorMessage:`Incompatible type for implicit parameter "${oe.label}":
|
|
10774
10774
|
Expected: ${S(Z)}
|
|
10775
|
-
Got: ${S(Qe)}`});P.push({value:Ke,parameterType:Z,argType:Qe});let De=pe($,oe.label);if(De.length>0){let st=De[De.length-1];$=
|
|
10775
|
+
Got: ${S(Qe)}`});P.push({value:Ke,parameterType:Z,argType:Qe});let De=pe($,oe.label);if(De.length>0){let st=De[De.length-1];$=mt($,st,{...st,type:Z,isImplicit:!0,value:[Ke]})}else{let{env:st}=Se({env:$,variable:{name:oe.label,type:Z,isCompileTimeOnly:!0,isImplicit:!0,value:[Ke],token:((Ae=oe.exprs.labelExpr)==null?void 0:Ae.token)??ke,initializedAtToken:((Fe=oe.exprs.labelExpr)==null?void 0:Fe.token)??ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});$=st}fe=!0}}if(!fe){let J=Dr(o,st=>st.isImplicit===!0&&st.isCompileTimeOnly===!0&&ie({type:Z,env:$},{type:st.type,env:o}));if(J.length===0)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??ke,errorMessage:`No "given" variable found for implicit parameter "${oe.label}" of type ${S(Z)}.
|
|
10776
10776
|
Please declare a given variable with a compatible type, e.g.:
|
|
10777
10777
|
given(${oe.label}) := <value>;
|
|
10778
10778
|
Or pass it explicitly:
|
|
10779
|
-
${(t==null?void 0:t.funcName)??"func"}(..., using(<value>))`});if(J[J.length-1].isFromEffectSpread&&!(()=>{if(!r||!Y(r))return!1;let Ze=r.token.value,Lt=a.isEvaluatingFunctionBodyOrAsyncBlock;return!Lt||Lt.kind!=="function-body"?!1:Lt.type.parameters.some(
|
|
10779
|
+
${(t==null?void 0:t.funcName)??"func"}(..., using(<value>))`});if(J[J.length-1].isFromEffectSpread&&!(()=>{if(!r||!Y(r))return!1;let Ze=r.token.value,Lt=a.isEvaluatingFunctionBodyOrAsyncBlock;return!Lt||Lt.kind!=="function-body"?!1:Lt.type.parameters.some(yn=>yn.label===Ze)})())throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??ke,errorMessage:`Effect "${oe.label}" of type ${S(Z)} is available through an effect row spread but not explicitly declared in the function's using clause.
|
|
10780
10780
|
Add it explicitly:
|
|
10781
|
-
using(${oe.label} : ${S(Z)}, ...(E))`});let
|
|
10782
|
-
Please use explicit using() to disambiguate.`});let Ke=ye[ye.length-1],Qe=(ze=Ke.value)==null?void 0:ze[0];if(!Qe)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??we,errorMessage:`The "given" variable "${Ke.name}" has no compile-time value.`});P.push({value:Qe,parameterType:Z,argType:Ke.type});let{env:De}=Ve({env:$,variable:{name:oe.label,type:Z,isCompileTimeOnly:!0,isImplicit:!0,value:[Qe],token:((bt=oe.exprs.labelExpr)==null?void 0:bt.token)??we,initializedAtToken:((Kt=oe.exprs.labelExpr)==null?void 0:Kt.token)??we,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});$=De}}let U={args:p,forallArgs:f,implicitArgs:P,variadicArgs:x},X;if(n.return.isCompileTimeOnly)if(u)X=le(I,{variableName:n.return.label,env:n.env,context:a});else if(be(t)){let{value:K,callerEnv:oe,calleeEnv:fe}=Ao({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:U,callerEnv:o,calleeEnv:$,context:{...a}});X=K,I=K.type,o=oe,$=fe}else{let K=vt(I)&&I.level===0,oe=`${n.id}_return_sometype`;if(K)if((kt=a.expectedType)!=null&&kt.type)X=he(a.expectedType.type);else if(a.isEvaluatingFunctionType){let fe=Kn(I,n.return.label,{id:oe,env:$,context:a});fe.functionApplication=e;let Z=gn($,fe);X=he(Z)}else throw m({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??we,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else X=le(I,{variableName:n.return.label,env:n.env,context:a})}lg({returnType:I,env:$,expr:e,context:a});let R,z=((ht=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:ht.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&be(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&be(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,W=(dn=U.implicitArgs)==null?void 0:dn.some(K=>xe(K.value)),ee=W&&!((Fe=U.implicitArgs)!=null&&Fe.some(K=>xe(K.value)&&!Ye(K.parameterType))),de=U.args.some(K=>K.argType&&G(K.argType)),se=ee&&de,j=(()=>{if(!W||!n.implicitParameters.some(Z=>Z.isEffectRowSpread))return!1;let oe=0;for(let Z of n.implicitParameters)Z.isEffectRowSpread||oe++;let fe=U.implicitArgs??[];for(let Z=0;Z<oe&&Z<fe.length;Z++)if(xe(fe[Z].value))return!1;return!0})();if(!l&&t&&be(t)&&!t.isControlFunction&&jn(n)&&!z&&(!W||se||j)){if(R=ag({originalFunction:t,argValues:U,calleeEnv:$,callerEnv:o,context:a}),R&&G(I)){let K=(lt=(ot=R.body)==null?void 0:ot.$)==null?void 0:lt.type;K&&!G(K)&&(I=K,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:K}}))}if(R){let K=new Set,oe=0;for(let fe=0;fe<n.parameters.length;fe++)if(!n.parameters[fe].isCompileTimeOnly){let ge=U.args[fe],J=ge==null?void 0:ge.value;J&&be(J)&&J.type.implicitParameters.some(Ne=>ae(Ne.type)||Ye(Ne.type))&&K.add(oe),oe++}if(K.size>0)for(let fe=_.length-1;fe>=0;fe--)K.has(fe)&&_.splice(fe,1)}}let te=a.hasControlFunctionImplicitParams??!1;if(!l&&t&&be(t)&&t.isControlFunction&&n.forallParameters.length>0&&!R&&!te&&(R=sg({originalFunction:t,argValues:U,calleeEnv:$,callerEnv:o,context:a}),R&&G(I))){let K=(Ee=(Ue=R.body)==null?void 0:Ue.$)==null?void 0:Ee.type;K&&!G(K)&&(I=K,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:K}}))}let ne=po(o),ke;if(ne.length>0){let K=ig({variablesToDrop:ne,env:o,context:a});ke=K.deferredDropExpressions,o=K.env}return{returnType:I,calleeEnv:$,callerEnv:o,pathCollection:D,argValues:U,returnValue:X,specializedFunctionValue:R,runtimeArgExprsInOrder:_,deferredDropExpressions:ke}}function ag({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var N,x,D,P,U,X,R,z,W,ee,de,se;if(ps){Mr.specializeCount++;let j=e.funcName??e.funcId;Mr.specializeNames.set(j,(Mr.specializeNames.get(j)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(j=>j.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(j=>j.value)),o.parameters.forEach((j,te)=>{let ne=t.args[te];if(j.isCompileTimeOnly)ne.value&&a.push(ne.value);else if(ne.value&&be(ne.value)&&ne.value.type.implicitParameters.some(ce=>ae(ce.type)||Ye(ce.type)))ne.value&&a.push(ne.value);else{let Q=G(ne.argType)&&ne.argType.resolvedConcreteType&&!qe(ne.argType)?ne.argType.resolvedConcreteType:ne.argType;s.push({...j,type:Q})}});let l=s.map(j=>j.type),u=e.specializedFunctionCaches.find(j=>j.compileTimeArgValues.length===a.length&&j.compileTimeArgValues.every((ke,ce)=>{let Q=a[ce];return an({value:ke,env:j.env},{value:Q,env:r})})?j.runtimeParameterTypes.length===l.length&&j.runtimeParameterTypes.every((ke,ce)=>{let Q=l[ce];return ie({type:ke,env:j.env},{type:Q,env:r},!0)}):!1);if(u)return ps&&Mr.cacheHitCount++,u.specializedFunction;ps&&Mr.cacheMissCount++;let c=n;for(let j of r.frames)for(let te of j.variables){if(!te.isCompileTimeOnly||pe(c,te.name).length>0)continue;let{env:ke}=Ve({env:c,variable:{...te},allowVariableShadowing:!0});c=ke}for(let j of s){let te=pe(c,j.label);if(te.length>0){let ne=te[te.length-1],ke={...ne,value:void 0};c=dt(c,ne,ke)}}let f=rt(e.body),{returnType:p,calleeEnv:_}=Ui({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=_;let d=i.enclosingFunctionReturnType,y=((N=t.implicitArgs)==null?void 0:N.some(j=>be(j.value)&&j.value.isControlFunction||Bt(j.value)&&Z_(j.value.type,j.value)))??!1,g=Yt({expr:f,env:c,context:{...i,expectedType:{type:p,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:y,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let j=0;j<o.implicitParameters.length;j++){let te=o.implicitParameters[j];if(ae(te.type)){let ne=(x=t.implicitArgs)==null?void 0:x[v],ke=ne&&be(ne.value)?ne.value:void 0;ke!=null&&ke.isControlFunction&&h.push({handlerArgIndex:v,label:te.label,type:te.type,fromSpread:!1}),v+=1}else if(te.isEffectRowSpread){let ne=te.type;if(G(ne)){let ce=(P=(D=pe(c,te.label).at(-1))==null?void 0:D.value)==null?void 0:P[0];if(ce&&H(ce)&&Gt(ce.value))ne=ce.value;else{let Q=gn(c,ne);Q&&(ne=Q)}}if(Gt(ne)){for(let ke=0;ke<ne.implicitParameters.length;ke++){let ce=ne.implicitParameters[ke];if(ae(ce.type)){let Q=(U=t.implicitArgs)==null?void 0:U[v+ke],Pe=Q&&be(Q.value)?Q.value:void 0;Pe!=null&&Pe.isControlFunction&&h.push({handlerArgIndex:v+ke,label:ce.label,type:ce.type,fromSpread:!0})}else if(Ye(ce.type)){let Q=(X=t.implicitArgs)==null?void 0:X[v+ke],Pe=Q&&Bt(Q.value)?Q.value:void 0,ut=[],at=(_e,Ce,$e)=>{for(let Ge=0;Ge<_e.fields.length;Ge++){let nt=_e.fields[Ge];if(ae(nt.type)){let ct=$e==null?void 0:$e.fields[Ge];if(ct&&be(ct)&&ct.isControlFunction){let jt=ct.specializedType??nt.type;ut.push({path:[...Ce,nt.label],type:jt})}}else if(Ye(nt.type)){let ct=$e==null?void 0:$e.fields[Ge];at(nt.type,[...Ce,nt.label],ct&&Bt(ct)?ct:void 0)}}};at(ce.type,[],Pe);for(let _e of ut)h.push({handlerArgIndex:v+ke,label:ce.label,type:_e.type,fromSpread:!0,effectFieldPath:_e.path})}}v+=ne.implicitParameters.length}else v+=1}else if(Ye(te.type)){let ne=[],ke=(R=t.implicitArgs)==null?void 0:R[v],ce=(Q,Pe,ut)=>{for(let at=0;at<Q.fields.length;at++){let _e=Q.fields[at];if(ae(_e.type)){let Ce=ut==null?void 0:ut.fields[at];if(Ce&&be(Ce)&&Ce.isControlFunction){let $e=Ce.specializedType??_e.type;ne.push({path:[...Pe,_e.label],type:$e})}}else if(Ye(_e.type)){let Ce=ut==null?void 0:ut.fields[at];ce(_e.type,[...Pe,_e.label],Ce&&Bt(Ce)?Ce:void 0)}}};ce(te.type,[],ke&&Bt(ke.value)?ke.value:void 0);for(let Q of ne)h.push({handlerArgIndex:v,label:te.label,type:Q.type,fromSpread:!1,effectFieldPath:Q.path});v+=1}else v+=1}let E=[];for(let j of h){let te=Ja(g,j.label,j.type,!0,j.effectFieldPath);if(te.hasEffects){let ne=(z=t.implicitArgs)==null?void 0:z[j.handlerArgIndex],ke,ce=j.effectFieldPath;if(ne&&be(ne.value))ke=ne.value;else if(ne&&Bt(ne.value)&&ce&&ce.length>0){let Q=ne.value;for(let Pe of ce){if(!Bt(Q)){Q=void 0;break}let ut=Q.type.fields.findIndex(at=>at.label===Pe);if(ut<0||!Q.fields[ut]){Q=void 0;break}Q=Q.fields[ut]}Q&&be(Q)&&(ke=Q)}if(ke){let Q=ke,Pe=j.type,ut=!Q.body.$;if(!ut&&Q.isControlFunction&&A(Q.body)&&Q.body.args.length>0&&!((W=Q.body.args[0])!=null&&W.$)&&(ut=!0),ut&&ae(Pe)&&Pe.forallParameters.length>0&&te.effectCallPoints.length>0){let at=new Map,_e=Pe.return.type,Ce=te.effectCallPoints[0].operationResultType;if(G(_e)&&at.set(_e.name,Ce),at.size===0&&Pe.forallParameters.length===1){let B=Pe.forallParameters[0];at.set(B.label,Ce)}let $e=rt(Q.body),Ge=((ee=Q.body.$)==null?void 0:ee.env)??c;Ge=mt(Ge);for(let B of Pe.forallParameters){let re=at.get(B.label);re&&(Ge=Ve({env:Ge,variable:{name:B.label,type:B.type,isCompileTimeOnly:!0,value:[he(re)],token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let nt=Q.specializedType??Q.type,ct=((de=Q.definitionSiteEnclosingFunctionType)==null?void 0:de.return.type)??vr(),jt={...i,expectedType:void 0,enclosingFunctionReturnType:ct,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:nt,value:Q,evaluationEnv:Ge}};try{let B=zi({expr:$e,env:Ge,context:jt}),re=nt.parameters.map(Ie=>{if(Ie.isCompileTimeOnly)return Ie;if(G(Ie.type)){let ze=at.get(Ie.type.name);if(ze)return{...Ie,type:ze}}return Ie}),ve=nt.return.type;if(G(ve)){let Ie=at.get(ve.name);Ie&&(ve=Ie)}let Te={...nt,parameters:re,return:{...nt.return,type:ve}},Le={...Q,body:B,specializedType:Te};te.handlerValue=Le,te.effectParameterType=Te;for(let Ie of te.effectCallPoints)Ie.isTransitiveEffectCall&&(Ie.operationArgTypes=Ie.operationArgTypes.map(ze=>G(ze)?at.get(ze.name)??ze:ze))}catch(B){if(A(Q.body)&&Q.body.args.length>0&&!((se=Q.body.args[0])!=null&&se.$))throw B;te.handlerValue=Q}}else te.handlerValue=Q}else ne&&(te.handlerValue=ne.value);E.push({analysis:te,ctlParam:j})}}if(E.length===1)g.$.effectAnalysis=E[0].analysis;else if(E.length>1){let j=[],te=new Map,ne=new Map,ke=[];for(let Pe=0;Pe<E.length;Pe++){let{analysis:ut}=E[Pe];ke.push({effectParameterName:ut.effectParameterName,effectParameterType:ut.effectParameterType,effectFieldPath:ut.effectFieldPath,handlerValue:ut.handlerValue,operationArgTypes:ut.effectCallPoints.length>0?ut.effectCallPoints[0].operationArgTypes:[],operationResultType:ut.effectCallPoints.length>0?ut.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let at of ut.effectCallPoints)j.push({...at,effectIndex:Pe});for(let at of ut.capturedVariables)te.has(at.id)||te.set(at.id,at);for(let[at,_e]of ut.variableIdRemapping)ne.set(at,_e)}if(A(g)&&T(g,V.begin)){let Pe=g.args,ut=new Map;for(let _e=0;_e<Pe.length;_e++)ut.set(Pe[_e],_e);let at=_e=>{for(let Ce=0;Ce<Pe.length;Ce++)if(Kl(Pe[Ce],_e.expr))return Ce;return 999};j.sort((_e,Ce)=>at(_e)-at(Ce))}for(let Pe=0;Pe<j.length;Pe++)j[Pe].index=Pe;let ce=E[0].analysis,Q={effectCallPoints:j,capturedVariables:Array.from(te.values()),hasEffects:!0,variableIdRemapping:ne,effectParameterName:ce.effectParameterName,effectParameterType:ce.effectParameterType,effectFieldPath:ce.effectFieldPath,handlerValue:ce.handlerValue,effectHandlerInfos:ke};g.$.effectAnalysis=Q}let k=[],b=j=>{if(H(j)){let te=j.value;if(!te.typeName&&te.id)return`${tt(j)}_id${te.id}`}return be(j)?`fn_${j.funcId}`:tt(j)};o.forallParameters.forEach((j,te)=>{var ne,ke;if(te<t.forallArgs.length){let ce=t.forallArgs[te];k.push(me(b(ce.value)))}else{let ce=j.label,Q=pe(n,ce);Q.length>0&&((ke=(ne=Q[Q.length-1])==null?void 0:ne.value)!=null&&ke[0])?k.push(me(b(Q[Q.length-1].value[0]))):k.push("unknown")}}),o.parameters.forEach((j,te)=>{if(j.isCompileTimeOnly&&te<t.args.length){let ne=t.args[te];ne?k.push(me(b(ne.value))):k.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(j=>{k.push(me(b(j.value)))}),s.forEach((j,te)=>{let ne=j.type;(!ne.typeName&&ne.id||je(ne))&&k.push(`rtparam${te}_${me(S(ne))}_id${ne.id}`)});let F=k.join("_"),$=fo({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...o.return,type:p},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),C={...e,specializedType:$,body:g,isControlFunction:e.isControlFunction||Tr(g),funcId:`${e.funcId}_${F}`,funcName:`${e.funcName}_${F}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},I={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:C,env:g.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,I],C}function sg({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var d,y,g;let i=e.type,o=((d=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=((y=e.definitionSiteEnclosingFunctionType)==null?void 0:y.return.type)??vr(),s=me(S(o)),l=e.specializedFunctionCaches.find(h=>h.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=mt(t);for(let h of n.frames)for(let v of h.variables){if(!v.isCompileTimeOnly||pe(u,v.name).length>0)continue;let{env:k}=Ve({env:u,variable:{...v},allowVariableShadowing:!0});u=k}for(let h of i.forallParameters){let v=o,{env:E}=Ve({env:u,variable:{name:h.label,type:h.type,isCompileTimeOnly:!0,value:[he(v)],token:we,initializedAtToken:we,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=E}let c=rt(e.body),f={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},p=zi({expr:c,env:u,context:f}),_={...e,body:p,isControlFunction:e.isControlFunction||Tr(p),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:((g=p.$)==null?void 0:g.env)??u}],_}function lg({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=Fs(e);for(let a of i){if(qe(a)||wn(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!pe(n,a.name).length){let l=Vr(n,()=>!0),u=!1;for(let c of l)if(H((o=c.value)==null?void 0:o[0])){let f=c.value[0].value,p=Fs(f);for(let _ of p)if(_.name===a.name){u=!0;break}if(u)break}if(u)continue;throw m({token:(t==null?void 0:t.token)??we,errorMessage:`Failed to infer the function call return type.
|
|
10783
|
-
Please consider providing the expected type.`})}}}function
|
|
10784
|
-
${w(r)}`});if(t=i.$.env,!
|
|
10785
|
-
${w(r)}`});let a=i.$.value.value,s=
|
|
10786
|
-
${w(i)}`});t=o.$.env;let a=(s=o.$)==null?void 0:s.variableName;if(a){let l=pe(t,a);if(l.length>0){let u=l[l.length-1];if(
|
|
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=Gn(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},pt(e,!0),e}function
|
|
10781
|
+
using(${oe.label} : ${S(Z)}, ...(E))`});let ge=J;if(ge.length>1){let st=cc(o,Ze=>Ze.isImplicit===!0&&Ze.isCompileTimeOnly===!0&&ie({type:Z,env:$},{type:Ze.type,env:o}));if(st>=0){let Lt=o.frames[st].variables.filter(At=>At.isImplicit===!0&&At.isCompileTimeOnly===!0&&ie({type:Z,env:$},{type:At.type,env:o}));Lt.length>0&&(ge=Lt)}}if(ge.length>1)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??ke,errorMessage:`Ambiguous implicit parameter "${oe.label}": found ${ge.length} "given" variables with compatible type ${S(Z)} in the same scope.
|
|
10782
|
+
Please use explicit using() to disambiguate.`});let Ke=ge[ge.length-1],Qe=(ze=Ke.value)==null?void 0:ze[0];if(!Qe)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??ke,errorMessage:`The "given" variable "${Ke.name}" has no compile-time value.`});P.push({value:Qe,parameterType:Z,argType:Ke.type});let{env:De}=Se({env:$,variable:{name:oe.label,type:Z,isCompileTimeOnly:!0,isImplicit:!0,value:[Qe],token:((bt=oe.exprs.labelExpr)==null?void 0:bt.token)??ke,initializedAtToken:((Kt=oe.exprs.labelExpr)==null?void 0:Kt.token)??ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});$=De}}let U={args:p,forallArgs:f,implicitArgs:P,variadicArgs:x},j;if(n.return.isCompileTimeOnly)if(u)j=le(A,{variableName:n.return.label,env:n.env,context:a});else if(be(t)){let{value:X,callerEnv:oe,calleeEnv:fe}=Ao({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:U,callerEnv:o,calleeEnv:$,context:{...a}});j=X,A=X.type,o=oe,$=fe}else{let X=gt(A)&&A.level===0,oe=`${n.id}_return_sometype`;if(X)if((kt=a.expectedType)!=null&&kt.type)j=ye(a.expectedType.type);else if(a.isEvaluatingFunctionType){let fe=Kn(A,n.return.label,{id:oe,env:$,context:a});fe.functionApplication=e;let Z=pn($,fe);j=ye(Z)}else throw m({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??ke,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else j=le(A,{variableName:n.return.label,env:n.env,context:a})}fg({returnType:A,env:$,expr:e,context:a});let O,z=((vt=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:vt.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&be(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&be(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,W=(mn=U.implicitArgs)==null?void 0:mn.some(X=>Ve(X.value)),ee=W&&!((Le=U.implicitArgs)!=null&&Le.some(X=>Ve(X.value)&&!je(X.parameterType))),de=U.args.some(X=>X.argType&&G(X.argType)),se=ee&&de,K=(()=>{if(!W||!n.implicitParameters.some(Z=>Z.isEffectRowSpread))return!1;let oe=0;for(let Z of n.implicitParameters)Z.isEffectRowSpread||oe++;let fe=U.implicitArgs??[];for(let Z=0;Z<oe&&Z<fe.length;Z++)if(Ve(fe[Z].value))return!1;return!0})();if(!l&&t&&be(t)&&!t.isControlFunction&&jn(n)&&!z&&(!W||se||K)){if(O=ug({originalFunction:t,argValues:U,calleeEnv:$,callerEnv:o,context:a}),O&&G(A)){let X=(lt=(ot=O.body)==null?void 0:ot.$)==null?void 0:lt.type;X&&!G(X)&&(A=X,O.specializedType&&(O.specializedType={...O.specializedType,return:{...O.specializedType.return,type:X}}))}if(O){let X=new Set,oe=0;for(let fe=0;fe<n.parameters.length;fe++)if(!n.parameters[fe].isCompileTimeOnly){let he=U.args[fe],J=he==null?void 0:he.value;J&&be(J)&&J.type.implicitParameters.some(Ne=>ae(Ne.type)||je(Ne.type))&&X.add(oe),oe++}if(X.size>0)for(let fe=_.length-1;fe>=0;fe--)X.has(fe)&&_.splice(fe,1)}}let te=a.hasControlFunctionImplicitParams??!1;if(!l&&t&&be(t)&&t.isControlFunction&&n.forallParameters.length>0&&!O&&!te&&(O=cg({originalFunction:t,argValues:U,calleeEnv:$,callerEnv:o,context:a}),O&&G(A))){let X=(Ee=(Ue=O.body)==null?void 0:Ue.$)==null?void 0:Ee.type;X&&!G(X)&&(A=X,O.specializedType&&(O.specializedType={...O.specializedType,return:{...O.specializedType.return,type:X}}))}let re=po(o),we;if(re.length>0){let X=sg({variablesToDrop:re,env:o,context:a});we=X.deferredDropExpressions,o=X.env}return{returnType:A,calleeEnv:$,callerEnv:o,pathCollection:D,argValues:U,returnValue:j,specializedFunctionValue:O,runtimeArgExprsInOrder:_,deferredDropExpressions:we}}function ug({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var N,x,D,P,U,j,O,z,W,ee,de,se;if(ms){Or.specializeCount++;let K=e.funcName??e.funcId;Or.specializeNames.set(K,(Or.specializeNames.get(K)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(K=>K.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(K=>K.value)),o.parameters.forEach((K,te)=>{let re=t.args[te];if(K.isCompileTimeOnly)re.value&&a.push(re.value);else if(re.value&&be(re.value)&&re.value.type.implicitParameters.some(ce=>ae(ce.type)||je(ce.type)))re.value&&a.push(re.value);else{let Q=G(re.argType)&&re.argType.resolvedConcreteType&&!He(re.argType)?re.argType.resolvedConcreteType:re.argType;s.push({...K,type:Q})}});let l=s.map(K=>K.type),u=e.specializedFunctionCaches.find(K=>K.compileTimeArgValues.length===a.length&&K.compileTimeArgValues.every((we,ce)=>{let Q=a[ce];return an({value:we,env:K.env},{value:Q,env:r})})?K.runtimeParameterTypes.length===l.length&&K.runtimeParameterTypes.every((we,ce)=>{let Q=l[ce];return ie({type:we,env:K.env},{type:Q,env:r},!0)}):!1);if(u)return ms&&Or.cacheHitCount++,u.specializedFunction;ms&&Or.cacheMissCount++;let c=n;for(let K of r.frames)for(let te of K.variables){if(!te.isCompileTimeOnly||pe(c,te.name).length>0)continue;let{env:we}=Se({env:c,variable:{...te},allowVariableShadowing:!0});c=we}for(let K of s){let te=pe(c,K.label);if(te.length>0){let re=te[te.length-1],we={...re,value:void 0};c=mt(c,re,we)}}let f=nt(e.body),{returnType:p,calleeEnv:_}=Ui({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=_;let d=i.enclosingFunctionReturnType,y=((N=t.implicitArgs)==null?void 0:N.some(K=>be(K.value)&&K.value.isControlFunction||Bt(K.value)&&ep(K.value.type,K.value)))??!1,g=Yt({expr:f,env:c,context:{...i,expectedType:{type:p,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:y,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let K=0;K<o.implicitParameters.length;K++){let te=o.implicitParameters[K];if(ae(te.type)){let re=(x=t.implicitArgs)==null?void 0:x[v],we=re&&be(re.value)?re.value:void 0;we!=null&&we.isControlFunction&&h.push({handlerArgIndex:v,label:te.label,type:te.type,fromSpread:!1}),v+=1}else if(te.isEffectRowSpread){let re=te.type;if(G(re)){let ce=(P=(D=pe(c,te.label).at(-1))==null?void 0:D.value)==null?void 0:P[0];if(ce&&q(ce)&&Gt(ce.value))re=ce.value;else{let Q=pn(c,re);Q&&(re=Q)}}if(Gt(re)){for(let we=0;we<re.implicitParameters.length;we++){let ce=re.implicitParameters[we];if(ae(ce.type)){let Q=(U=t.implicitArgs)==null?void 0:U[v+we],Pe=Q&&be(Q.value)?Q.value:void 0;Pe!=null&&Pe.isControlFunction&&h.push({handlerArgIndex:v+we,label:ce.label,type:ce.type,fromSpread:!0})}else if(je(ce.type)){let Q=(j=t.implicitArgs)==null?void 0:j[v+we],Pe=Q&&Bt(Q.value)?Q.value:void 0,ut=[],at=(_e,Ce,$e)=>{for(let Ge=0;Ge<_e.fields.length;Ge++){let rt=_e.fields[Ge];if(ae(rt.type)){let ct=$e==null?void 0:$e.fields[Ge];if(ct&&be(ct)&&ct.isControlFunction){let jt=ct.specializedType??rt.type;ut.push({path:[...Ce,rt.label],type:jt})}}else if(je(rt.type)){let ct=$e==null?void 0:$e.fields[Ge];at(rt.type,[...Ce,rt.label],ct&&Bt(ct)?ct:void 0)}}};at(ce.type,[],Pe);for(let _e of ut)h.push({handlerArgIndex:v+we,label:ce.label,type:_e.type,fromSpread:!0,effectFieldPath:_e.path})}}v+=re.implicitParameters.length}else v+=1}else if(je(te.type)){let re=[],we=(O=t.implicitArgs)==null?void 0:O[v],ce=(Q,Pe,ut)=>{for(let at=0;at<Q.fields.length;at++){let _e=Q.fields[at];if(ae(_e.type)){let Ce=ut==null?void 0:ut.fields[at];if(Ce&&be(Ce)&&Ce.isControlFunction){let $e=Ce.specializedType??_e.type;re.push({path:[...Pe,_e.label],type:$e})}}else if(je(_e.type)){let Ce=ut==null?void 0:ut.fields[at];ce(_e.type,[...Pe,_e.label],Ce&&Bt(Ce)?Ce:void 0)}}};ce(te.type,[],we&&Bt(we.value)?we.value:void 0);for(let Q of re)h.push({handlerArgIndex:v,label:te.label,type:Q.type,fromSpread:!1,effectFieldPath:Q.path});v+=1}else v+=1}let E=[];for(let K of h){let te=ts(g,K.label,K.type,!0,K.effectFieldPath);if(te.hasEffects){let re=(z=t.implicitArgs)==null?void 0:z[K.handlerArgIndex],we,ce=K.effectFieldPath;if(re&&be(re.value))we=re.value;else if(re&&Bt(re.value)&&ce&&ce.length>0){let Q=re.value;for(let Pe of ce){if(!Bt(Q)){Q=void 0;break}let ut=Q.type.fields.findIndex(at=>at.label===Pe);if(ut<0||!Q.fields[ut]){Q=void 0;break}Q=Q.fields[ut]}Q&&be(Q)&&(we=Q)}if(we){let Q=we,Pe=K.type,ut=!Q.body.$;if(!ut&&Q.isControlFunction&&I(Q.body)&&Q.body.args.length>0&&!((W=Q.body.args[0])!=null&&W.$)&&(ut=!0),ut&&ae(Pe)&&Pe.forallParameters.length>0&&te.effectCallPoints.length>0){let at=new Map,_e=Pe.return.type,Ce=te.effectCallPoints[0].operationResultType;if(G(_e)&&at.set(_e.name,Ce),at.size===0&&Pe.forallParameters.length===1){let B=Pe.forallParameters[0];at.set(B.label,Ce)}let $e=nt(Q.body),Ge=((ee=Q.body.$)==null?void 0:ee.env)??c;Ge=dt(Ge);for(let B of Pe.forallParameters){let ne=at.get(B.label);ne&&(Ge=Se({env:Ge,variable:{name:B.label,type:B.type,isCompileTimeOnly:!0,value:[ye(ne)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let rt=Q.specializedType??Q.type,ct=((de=Q.definitionSiteEnclosingFunctionType)==null?void 0:de.return.type)??vr(),jt={...i,expectedType:void 0,enclosingFunctionReturnType:ct,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:rt,value:Q,evaluationEnv:Ge}};try{let B=zi({expr:$e,env:Ge,context:jt}),ne=rt.parameters.map(Fe=>{if(Fe.isCompileTimeOnly)return Fe;if(G(Fe.type)){let ze=at.get(Fe.type.name);if(ze)return{...Fe,type:ze}}return Fe}),ve=rt.return.type;if(G(ve)){let Fe=at.get(ve.name);Fe&&(ve=Fe)}let Te={...rt,parameters:ne,return:{...rt.return,type:ve}},Ae={...Q,body:B,specializedType:Te};te.handlerValue=Ae,te.effectParameterType=Te;for(let Fe of te.effectCallPoints)Fe.isTransitiveEffectCall&&(Fe.operationArgTypes=Fe.operationArgTypes.map(ze=>G(ze)?at.get(ze.name)??ze:ze))}catch(B){if(I(Q.body)&&Q.body.args.length>0&&!((se=Q.body.args[0])!=null&&se.$))throw B;te.handlerValue=Q}}else te.handlerValue=Q}else re&&(te.handlerValue=re.value);E.push({analysis:te,ctlParam:K})}}if(E.length===1)g.$.effectAnalysis=E[0].analysis;else if(E.length>1){let K=[],te=new Map,re=new Map,we=[];for(let Pe=0;Pe<E.length;Pe++){let{analysis:ut}=E[Pe];we.push({effectParameterName:ut.effectParameterName,effectParameterType:ut.effectParameterType,effectFieldPath:ut.effectFieldPath,handlerValue:ut.handlerValue,operationArgTypes:ut.effectCallPoints.length>0?ut.effectCallPoints[0].operationArgTypes:[],operationResultType:ut.effectCallPoints.length>0?ut.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let at of ut.effectCallPoints)K.push({...at,effectIndex:Pe});for(let at of ut.capturedVariables)te.has(at.id)||te.set(at.id,at);for(let[at,_e]of ut.variableIdRemapping)re.set(at,_e)}if(I(g)&&T(g,V.begin)){let Pe=g.args,ut=new Map;for(let _e=0;_e<Pe.length;_e++)ut.set(Pe[_e],_e);let at=_e=>{for(let Ce=0;Ce<Pe.length;Ce++)if(Xl(Pe[Ce],_e.expr))return Ce;return 999};K.sort((_e,Ce)=>at(_e)-at(Ce))}for(let Pe=0;Pe<K.length;Pe++)K[Pe].index=Pe;let ce=E[0].analysis,Q={effectCallPoints:K,capturedVariables:Array.from(te.values()),hasEffects:!0,variableIdRemapping:re,effectParameterName:ce.effectParameterName,effectParameterType:ce.effectParameterType,effectFieldPath:ce.effectFieldPath,handlerValue:ce.handlerValue,effectHandlerInfos:we};g.$.effectAnalysis=Q}let k=[],b=K=>{if(q(K)){let te=K.value;if(!te.typeName&&te.id)return`${tt(K)}_id${te.id}`}return be(K)?`fn_${K.funcId}`:tt(K)};o.forallParameters.forEach((K,te)=>{var re,we;if(te<t.forallArgs.length){let ce=t.forallArgs[te];k.push(me(b(ce.value)))}else{let ce=K.label,Q=pe(n,ce);Q.length>0&&((we=(re=Q[Q.length-1])==null?void 0:re.value)!=null&&we[0])?k.push(me(b(Q[Q.length-1].value[0]))):k.push("unknown")}}),o.parameters.forEach((K,te)=>{if(K.isCompileTimeOnly&&te<t.args.length){let re=t.args[te];re?k.push(me(b(re.value))):k.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(K=>{k.push(me(b(K.value)))}),s.forEach((K,te)=>{let re=K.type;(!re.typeName&&re.id||Ye(re))&&k.push(`rtparam${te}_${me(S(re))}_id${re.id}`)});let F=k.join("_"),$=fo({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...o.return,type:p},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),C={...e,specializedType:$,body:g,isControlFunction:e.isControlFunction||Tr(g),funcId:`${e.funcId}_${F}`,funcName:`${e.funcName}_${F}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},A={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:C,env:g.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,A],C}function cg({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var d,y,g;let i=e.type,o=((d=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=((y=e.definitionSiteEnclosingFunctionType)==null?void 0:y.return.type)??vr(),s=me(S(o)),l=e.specializedFunctionCaches.find(h=>h.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=dt(t);for(let h of n.frames)for(let v of h.variables){if(!v.isCompileTimeOnly||pe(u,v.name).length>0)continue;let{env:k}=Se({env:u,variable:{...v},allowVariableShadowing:!0});u=k}for(let h of i.forallParameters){let v=o,{env:E}=Se({env:u,variable:{name:h.label,type:h.type,isCompileTimeOnly:!0,value:[ye(v)],token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=E}let c=nt(e.body),f={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},p=zi({expr:c,env:u,context:f}),_={...e,body:p,isControlFunction:e.isControlFunction||Tr(p),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:((g=p.$)==null?void 0:g.env)??u}],_}function fg({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=As(e);for(let a of i){if(He(a)||wn(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!pe(n,a.name).length){let l=Dr(n,()=>!0),u=!1;for(let c of l)if(q((o=c.value)==null?void 0:o[0])){let f=c.value[0].value,p=As(f);for(let _ of p)if(_.name===a.name){u=!0;break}if(u)break}if(u)continue;throw m({token:(t==null?void 0:t.token)??ke,errorMessage:`Failed to infer the function call return type.
|
|
10783
|
+
Please consider providing the expected type.`})}}}function Xl(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(Xl(e.func,t))return!0;for(let n of e.args)if(Xl(n,t))return!0}return!1}function tp({expr:e,env:t,context:n}){let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
|
|
10784
|
+
${w(r)}`});if(t=i.$.env,!q(i.$.value))throw m({token:r.token,errorMessage:`Iso expects a type as argument, but got:
|
|
10785
|
+
${w(r)}`});let a=i.$.value.value,s=zu(a,t);t=Tu({isoType:s,env:t,context:n});let l=ye(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function np({expr:e,env:t,context:n,isoType:r}){var s;let i=e.args[0],o=M({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
|
+
${w(i)}`});t=o.$.env;let a=(s=o.$)==null?void 0:s.variableName;if(a){let l=pe(t,a);if(l.length>0){let u=l[l.length-1];if(Br(u.type,new Set,t))throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because its type may form RC cycles.`});if(!u.isOwningTheRcValue)throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because it does not own its RC value.`});let f=t.frames.flatMap(p=>p.variables).filter(p=>{var _;return((_=p.isOwningTheSameRcValueAs)==null?void 0:_.id)===u.id&&p.id!==u.id});if(f.length>0){let p=f.map(_=>_.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=Gn(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},pt(e,!0),e}function rp({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:i}){var l,u,c,f,p;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((_,d)=>({..._,assignedValue:o[d]}))};for(let _=0;_<t.fields.length;_++){let d=t.fields[_],y=!1,g;for(let h=0;h<n.length;h++){let v=n[h],E;if(I(v)&&T(v,":",2)){if(E=v.args[0],v=v.args[1],!Y(E))throw m({token:E.token,errorMessage:`Expected identifier for label, got:
|
|
10788
10788
|
${w(E)}`});g=E.token.value}else throw m({token:v.token,errorMessage:`Expected member label, but got:
|
|
10789
10789
|
${w(v)}`});if(!t.fields.find(k=>k.label===g))throw m({token:E.token,errorMessage:`Module member with label "${g}" does not exist in the module type.`});if(d.label===g){if(y=!0,d.assignedValue)throw m({token:v.token,errorMessage:`Module member "${d.label}" already has a assigned value:
|
|
10790
|
-
${tt(d.assignedValue)}`});let k,b=d.exprs.typeExpr,F=d.exprs.defaultValueExpr;if(b){let x=(l=M({expr:
|
|
10790
|
+
${tt(d.assignedValue)}`});let k,b=d.exprs.typeExpr,F=d.exprs.defaultValueExpr;if(b){let x=(l=M({expr:nt(b),env:dt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$)==null?void 0:l.value;if(!q(x))throw m({token:v.token,errorMessage:`Failed to evaluate the module member "${g}"`});k=x.value}else if(F){let x=(u=M({expr:nt(F),env:dt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$)==null?void 0:u.value;if(!x)throw m({token:v.token,errorMessage:`Failed to evaluate the module member "${g}"`});k=x.type}else throw m({token:v.token,errorMessage:`Module member "${g}" has no type or default value or assigned value.`});let $=M({expr:v,env:r,context:{...i,expectedType:{type:k,env:r},ReceiverType:void 0,SelfType:void 0}}),C=(c=$.$)==null?void 0:c.type;if(!C)throw m({token:v.token,errorMessage:`Failed to evaluate the module member "${g}"`});if((f=$.$)!=null&&f.env&&(r=$.$.env),!ie({type:k,env:r},{type:C,env:r}))throw m({token:v.token,errorMessage:`Type mismatch for the module member "${g}":
|
|
10791
10791
|
Expected: ${S(k)}
|
|
10792
|
-
Got: ${S(C)}`});let
|
|
10792
|
+
Got: ${S(C)}`});let A=(p=$.$)==null?void 0:p.value;C.ioBuiltin&&(t.fields[_].type.ioBuiltin=C.ioBuiltin),be(A)&&(A.funcId+=`_${d.label}`,!A.specializedType&&ae(k)&&(A.specializedType={...k,parameters:A.type.parameters,parametersFrame:A.type.parametersFrame})),o[_]=A,a.fields[_].assignedValue=A,v.$={env:r,type:C,value:A,pathCollection:[]},E&&(E.$=v.$);break}}if(!y){let h=d.defaultValue,v=d.assignedValue,E=v;if(!v&&h&&(E=h),!E)throw m({token:e.token,errorMessage:`Module member "${d.label}" is not provided and has no required/default value.`});o[_]=E,a.fields[_].assignedValue=E}}return{moduleValue:Fa({...t},o),callerEnv:r}}function ip({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!Xe(e))return;let o=M({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${w(t)}`});let a=o.$.env,s=o.$.type;if(tn(s)&&(yr(e.childType)||qi(e.childType))){let u=Pt({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(!Xe(s))throw m({token:t.token,errorMessage:`Cannot cast ${S(s)} to ${S(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:L.__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 Da(n,l),{expr:n,env:a}}function op({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!I(a)||!T(a,":=",2))throw m({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
|
|
10793
|
+
${w(a)}`});let s=a.args[0],l=a.args[1];if(!Y(s))throw m({token:s.token,errorMessage:`Expected identifier for associated type label, got:
|
|
10794
|
+
${w(s)}`});let u=s.token.value,c=e.fields.find(p=>p.label===u);if(!c)throw m({token:s.token,errorMessage:`Field "${u}" not found in trait "${e.typeName??"unknown"}".`});if(!c.unassignedSomeType&&!gt(c.type))throw m({token:s.token,errorMessage:`Field "${u}" is not an associated type. Only associated type fields can be constrained with ":=".`});let f=M({expr:l,env:n,context:{...r}});if(!f.$||!q(f.$.value))throw m({token:l.token,errorMessage:`Expected type for associated type constraint "${u}", got:
|
|
10795
|
+
${w(l)}`});n=f.$.env,i.push({label:u,constraintType:f.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function ap({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){var f,p,_,d,y,g;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((h,v)=>({...h,assignedValue:o[v]}))},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
|
|
10796
10799
|
impl Point, Id(Point)(
|
|
10797
10800
|
id : ((p) -> p)
|
|
10798
10801
|
);
|
|
10799
|
-
`});let u=s.trait;s.trait?s.trait={...s.trait,fields:[...a.fields,...s.trait.fields]}:s.trait=a;for(let
|
|
10800
|
-
${w(
|
|
10801
|
-
${w(
|
|
10802
|
-
${tt(
|
|
10803
|
-
Expected: ${S(
|
|
10804
|
-
Got: ${S(
|
|
10802
|
+
`});let u=s.trait;s.trait?s.trait={...s.trait,fields:[...a.fields,...s.trait.fields]}:s.trait=a;for(let h=0;h<t.fields.length;h++){let v=t.fields[h],E=!1,k;for(let b=0;b<n.length;b++){let F=n[b],$;if(I(F)&&T(F,":",2)){if($=F.args[0],F=F.args[1],!Y($))throw m({token:$.token,errorMessage:`Expected identifier for label, got:
|
|
10803
|
+
${w($)}`});k=$.token.value}else throw m({token:F.token,errorMessage:`Expected member label, but got:
|
|
10804
|
+
${w(F)}`});if(!t.fields.find(C=>C.label===k))throw m({token:$.token,errorMessage:`Trait member with label "${k}" does not exist in the trait type.`});if(v.label===k){if(E=!0,v.assignedValue)throw m({token:F.token,errorMessage:`Trait member "${v.label}" already has a assigned value:
|
|
10805
|
+
${tt(v.assignedValue)}`});let C,A=v.exprs.typeExpr,N=v.exprs.defaultValueExpr;if(A){let j=(f=M({expr:nt(A),env:dt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:f.value;if(!q(j))throw m({token:F.token,errorMessage:`Failed to evaluate the trait member "${k}"`});C=j.value}else if(N){let j=(p=M({expr:nt(N),env:dt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:p.value;if(!j)throw m({token:F.token,errorMessage:`Failed to evaluate the trait member "${k}"`});C=j.type}else throw m({token:F.token,errorMessage:`Trait member "${k}" has no type or default value or assigned value.`});let x=M({expr:F,env:r,context:{...i,expectedType:{type:C,env:r},ReceiverType:void 0,SelfType:l}}),D=(_=x.$)==null?void 0:_.type;if(!D)throw m({token:F.token,errorMessage:`Failed to evaluate the trait member "${k}"`});if((d=x.$)!=null&&d.env&&(r=x.$.env),!ie({type:C,env:r},{type:D,env:r}))throw m({token:F.token,errorMessage:`Type mismatch for the trait member "${k}":
|
|
10806
|
+
Expected: ${S(C)}
|
|
10807
|
+
Got: ${S(D)}`});let P=(y=x.$)==null?void 0:y.value;be(P)&&(P.funcId+=`_${v.label}`,!P.specializedType&&ae(C)&&(P.specializedType={...C,parameters:P.type.parameters,parametersFrame:P.type.parametersFrame})),o[h]=P,a.fields[h].assignedValue=P,s&&s.trait&&(s.trait.fields[h].assignedValue=P),F.$={env:r,type:D,value:P,pathCollection:[]},$&&($.$=F.$);break}}if(!E){let b=v.defaultValue,F=v.assignedValue,$=F;if(!F&&b&&($=b),!$)throw m({token:e.token,errorMessage:`Trait member "${v.label}" is not provided and has no required/default value.`});o[h]=$,a.fields[h].assignedValue=$}}s&&u&&(s.trait=u);for(let h=0;h<t.fields.length;h++){let v=t.fields[h];if(!v.unassignedSomeType)continue;let E=v.unassignedSomeType,k=o[h];if(!k||!q(k))continue;let b=k.value;if(!Ye(b))for(let{traitType:F}of E.requiredTraits){let $=F;if(F.associatedTypeConstraints){let A=F.associatedTypeConstraints.map(N=>{let x=N.constraintType;if(G(x)){for(let D=0;D<t.fields.length;D++)if(t.fields[D].unassignedSomeType===x){let U=o[D];U&&q(U)&&(x=U.value);break}}return{...N,constraintType:x}});$={...F,associatedTypeConstraints:A}}if(!sn({targetType:b,traitType:$,env:r}))throw m({token:e.token,errorMessage:`Where clause constraint not satisfied: ${S(b)} does not implement ${$.typeName??"trait"}(${((g=$.associatedTypeConstraints)==null?void 0:g.map(A=>`${A.label} := ${S(A.constraintType)}`).join(", "))??""}).
|
|
10808
|
+
Field "${v.label}" must satisfy the trait's where clause.`})}}return{traitValue:ji({...t,receiverType:s},o),callerEnv:r}}function ys({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:i,isUnionType:o}){var c;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 f=0;f<e.length;f++){let p=e[f],_=n[f];if(!_)break;let d;if(I(_)&&T(_,":",2)&&(d=_.args[0],_=_.args[1],!Y(d)))throw m({token:d.token,errorMessage:`Expected identifier for label, got:
|
|
10805
10809
|
${w(d)}`});if(d){let v=d.token.value,E=e.find(k=>k.label===v);if(E){if(E.assignedValue)throw m({token:_.token,errorMessage:`Cannot use label "${v}" for already assigned value:
|
|
10806
10810
|
${oo(E)}`});p=E}else throw m({token:_.token,errorMessage:`Failed to find "${v}" in the type.`})}if(a.has(p))throw m({token:_.token,errorMessage:`Type member "${p.label}" is already implemented.`});let y=e.indexOf(p),g=M({expr:_,env:r,context:{...i,expectedType:{type:p.type,env:r}}});if(!g.$)throw m({token:_.token,errorMessage:`Failed to evaluate argument expression:
|
|
10807
10811
|
${w(_)}`});hn(g,i),r=g.$.env;let h=g.$.type;if(Ti(p.type,r)||(h=Pt({type:h,expectedType:p.type,expr:g,env:r})),d&&(d.$=g.$),!ie({type:p.type,env:r},{type:h,env:r}))throw m({token:_.token,errorMessage:`Type mismatch for type member "${p.label}":
|
|
10808
10812
|
Expected: ${S(p.type)}
|
|
10809
|
-
Got: ${S(h)}`});s[y]=(c=g.$)==null?void 0:c.value,l[y]=g,a.add(p)}if(!o)for(let f=0;f<e.length;f++){let p=e[f];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[f]=p.defaultValue??p.assignedValue,l[f]=p.exprs.defaultValueExpr??p.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function
|
|
10810
|
-
${w(o)}`});let Te=(C=M({expr:
|
|
10811
|
-
`},...ve.tokenAndErrorList],ve.isAssertionError);return{...B,result:{kind:"error",error:ve}}}else if((G(B.type)||et(B.type))&&In(B.type)){let ve=In(B.type);try{let Te=di({functionValue:Io(B.value),functionType:ve.isFn.callType,expr:
|
|
10812
|
-
`},...Te.tokenAndErrorList],Te.isAssertionError);return{...B,result:{kind:"error",error:Te}}}}else{let ve=B.value;if(
|
|
10813
|
-
${
|
|
10814
|
-
${
|
|
10815
|
-
|
|
10816
|
-
${B.tokenAndErrorList.filter(({token:
|
|
10817
|
-
`)}`},...B.tokenAndErrorList.filter(({token:
|
|
10818
|
-
`},{token:e.token,errorMessage:B instanceof Error?B.message:String(B)}])}throw
|
|
10813
|
+
Got: ${S(h)}`});s[y]=(c=g.$)==null?void 0:c.value,l[y]=g,a.add(p)}if(!o)for(let f=0;f<e.length;f++){let p=e[f];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[f]=p.defaultValue??p.assignedValue,l[f]=p.exprs.defaultValueExpr??p.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function _g(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 q(l)&&q(c)?ie({type:l.value,env:s.env},{type:c.value,env:t},!0):an({value:l,env:s.env},{value:c,env:t})}));if(o&&q(o.value)&&!(G(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&qt(n.SelfType)||n!=null&&n.SelfType&&Ie(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!q(s.value)||G(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&q(a.value))return a.value.value}function sr({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var h,v,E,k,b,F,$,C,A,N,x,D,P,U,j,O,z,W,ee,de,se,K,te,re,we,ce,Q,Pe,ut,at,_e,Ce,$e,Ge,rt,ct,jt;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(I(o)){let B=M({expr:o,env:t,context:{...n}});if(o=B,(h=B.$)!=null&&h.type)l=[{type:B.$.type,value:B.$.value}];else if(I(B)&&T(B,".",2)){let ne=B.args[0];s=B.args[1];let ve=(v=ne.$)==null?void 0:v.type;if(!ve)throw m({token:ne.token,errorMessage:"Expected to be evaluated."});let Te=(E=ne.$)==null?void 0:E.value,Ae=q(Te);if(Y(s)){let Fe=s.token.value;if(Ae){let ze=Te.value;l=_c({env:t,context:n,methodName:Fe,type:ze}).map(Kt=>({type:Kt.type,value:Kt.value,args:a}))}else l=Ll({env:t,context:n,methodName:Fe,receiverType:ve,isInfixOperatorCall:!1}).map(bt=>{let Kt;if(bt.needsPointerConversion){let kt={tag:"Atom",token:ne.token,$:void 0};kt.token={...ne.token,value:"&",type:"identifier"},Kt=[{tag:"FnCall",func:kt,args:[ne],token:ne.token,$:void 0},...a]}else Kt=[ne,...a];return{type:bt.type,value:bt.value,needsPointerConversion:bt.needsPointerConversion,args:Kt}})}else{let Fe=M({expr:s,env:t,context:{...n}});(k=Fe.$)!=null&&k.env&&(t=(b=Fe.$)==null?void 0:b.env),s=Fe;let ze=(F=s.$)==null?void 0:F.type,bt=($=s.$)==null?void 0:$.value;if(!ze)throw m({token:s.token,errorMessage:"Expected to be a function."});l=[{type:ze,value:bt}],a=[ne,...a]}}else throw m({token:o.token,errorMessage:`Expected type for function call, got ${w(B)}`})}else{let B=o.token.value;if(B==="_"){let ne=n.expectedType;if(!ne||G(ne.type))return W_({expr:e,env:t,context:n});l=[{type:en(ne.type),value:ye(ne.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(mr(B)&&e.isInfix){let ne=a[0];if(!ne)throw m({token:o.token,errorMessage:`Expected first argument for operator, got:
|
|
10814
|
+
${w(o)}`});let Te=(C=M({expr:ne,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:C.type;if(!Te)throw m({token:ne.token,errorMessage:"Expected to be evaluated."});let Ae=B;s=o,l=Ll({env:t,context:n,methodName:Ae,receiverType:Te,isInfixOperatorCall:!0}).map(ze=>({type:ze.type,value:ze.value,needsPointerConversion:ze.needsPointerConversion}))}else if(B==="Call"&&n.SelfType){let ne=ye(n.SelfType);l=[{type:ne.type,value:ne}]}else{let ne=M({expr:o,env:t,context:{...n}});if(o=ne,!ne.$)throw m({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(je(ne.$.type)){let ve=ne.$.type,Te=ve.fields.findIndex(Fe=>Fe.label==="Call");if(Te<0)throw m({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let Ae=ve.fields[Te];if(Ae.assignedValue){let Fe=Ae.assignedValue;zn(Fe)?l=Fe.fields.map(ze=>({type:ze.type,value:ze})):l=[{type:Fe.type,value:Fe}]}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:ne.$.type,value:ne.$.value}]}}let u=l.length===1&&ae(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!gt(l[0].type.return.type)&&l[0].type.forallParameters.length===0,p=l.length===1&&(ae(l[0].type)||(G(l[0].type)||et(l[0].type))&&!!In(l[0].type))?l.map(B=>({...B,result:{kind:"function",result:void 0}})):l.map(B=>{let ne=B.args??a;if(ae(B.type))try{let ve=di({functionValue:Io(B.value),functionType:B.type,expr:nt(e),functionCalleeExpr:o,argExprs:ne.map(Te=>nt(Te)),callerEnv:Fl(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...B,result:{kind:"function",result:ve}}}catch(ve){if(ve instanceof Rn&&ve.kind==="overflow")throw St([{token:e.token,errorMessage:`Failed to call the function:
|
|
10815
|
+
`},...ve.tokenAndErrorList],ve.isAssertionError);return{...B,result:{kind:"error",error:ve}}}else if((G(B.type)||et(B.type))&&In(B.type)){let ve=In(B.type);try{let Te=di({functionValue:Io(B.value),functionType:ve.isFn.callType,expr:nt(e),functionCalleeExpr:o,argExprs:ne.map(Ae=>nt(Ae)),callerEnv:Fl(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...B,result:{kind:"function",result:Te}}}catch(Te){if(Te instanceof Rn&&Te.kind==="overflow")throw St([{token:e.token,errorMessage:`Failed to call the function:
|
|
10816
|
+
`},...Te.tokenAndErrorList],Te.isAssertionError);return{...B,result:{kind:"error",error:Te}}}}else{let ve=B.value;if(q(ve)&&G(ve.value)&&ve.value.recursiveTypeRef){let Te=_g(ve.value,t,n);Te&&(ve=ye(Te),B.value=ve,B.type=ve.type)}if(q(ve)&&Ie(ve.value))try{let Te=ys({typeFields:ve.value.fields,functionCalleeExpr:o,argExprs:ne,callerEnv:t,context:{...n}});return{...B,result:{kind:"type",result:Te}}}catch(Te){return{...B,result:{kind:"error",error:Te}}}else if(q(ve)&&Me(ve.value)){let Te=ve.value,Ae=Te.variants.find(Fe=>Fe.name===Te.selectedVariantName);if(Ae)try{let Fe=ys({typeFields:Ae.fields||[],functionCalleeExpr:o,argExprs:ne,callerEnv:t,context:{...n}});return{...B,result:{kind:"type",result:Fe}}}catch(Fe){return{...B,result:{kind:"error",error:Fe}}}else return{...B,result:{kind:"error",error:m({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(q(ve)&&Rt(ve.value))try{let Te=ys({typeFields:ve.value.fields,functionCalleeExpr:o,argExprs:ne,callerEnv:t,context:{...n},isUnionType:!0});return{...B,result:{kind:"type",result:Te}}}catch(Te){return{...B,result:{kind:"error",error:Te}}}else if(q(ve)&&je(ve.value)){let Te=ve.value;try{let Ae=rp({moduleExpr:o,moduleType:Te,argExprs:ne,callerEnv:t,context:{...n}});return{...B,result:{kind:"module-type",result:Ae}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&Je(ve.value)){let Te=ve.value;if(ne.some(Fe=>I(Fe)&&T(Fe,":=",2)))try{let Fe=op({traitExpr:o,traitType:Te,argExprs:ne,callerEnv:t,context:{...n}});return{...B,result:{kind:"trait-specialization",result:Fe}}}catch(Fe){return{...B,result:{kind:"error",error:Fe}}}try{let Fe=ap({traitExpr:o,traitType:Te,argExprs:ne,callerEnv:t,context:{...n}});return{...B,result:{kind:"trait-type",result:Fe}}}catch(Fe){return{...B,result:{kind:"error",error:Fe}}}}else if(q(ve)&&ae(ve.value)){let Te=ve.value;try{return X_({expr:e,functionType:Te,callerEnv:t,context:{...n}}),{...B,result:{kind:"function-type"}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&We(ve.value)){let Te=ve.value;try{return j_({expr:e,arrayType:Te,argExprs:ne,callerEnv:t,context:{...n}}),{...B,result:{kind:"array-type"}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&un(ve.value)){let Te=ve.value;try{return Z_({expr:e,comptimeListType:Te,argExprs:ne,callerEnv:t,context:{...n}}),{...B,result:{kind:"array-type"}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&(G(ve.value)||et(ve.value))){let Te=ve.value,Ae=In(Te);if(Ae)try{return Q_({expr:e,fnModuleType:Ae,wrapperType:Te,callerEnv:t,context:{...n}}),{...B,result:{kind:"closure-type"}}}catch(Fe){return{...B,result:{kind:"error",error:Fe}}}else if(G(Te)&&Te.recursiveTypeRef)try{let Fe=[];for(let ze of ne){let bt=M({expr:ze,env:t,context:{...n}});if(!bt.$)throw m({token:ze.token,errorMessage:"Failed to evaluate argument"});t=bt.$.env,Fe.push(bt)}return{...B,result:{kind:"type",result:{values:Fe.map(ze=>ze.$.value),pathCollection:[],runtimeArgExprsInOrder:Fe,callerEnv:t}}}}catch(Fe){return{...B,result:{kind:"error",error:Fe}}}else return{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
|
|
10817
|
+
${q(ve)?S(ve.value):S(B.type)}`})}}}else if(We(B.type)||Et(B.type))try{let Te=B.value,Ae=lr(Te)?Te:void 0,Fe=ba(Te)?Te:void 0,ze=Y_({expr:e,arrayType:B.type,arrayValue:Ae,sliceValue:Fe,argExprs:ne,callerEnv:t,context:{...n}});return{...B,result:{kind:"array",result:ze}}}catch(Te){return{...B,result:{kind:"error",error:Te}}}else if(q(ve)&&_a(ve.value)){let Te=ve.value;if(ne.length!==1)return{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${ne.length}`})}};try{let Ae=S_({targetType:Te,argExpr:ne[0],expr:e,callerEnv:t,context:{...n}});return Ae?{...B,result:{kind:"numeric-type",result:Ae}}:{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to convert to numeric type ${S(Te)}`})}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&Xe(ve.value)){let Te=ve.value;if(ne.length!==1)return{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${ne.length}`})}};try{let Ae=ip({targetType:Te,argExpr:ne[0],expr:e,callerEnv:t,context:{...n}});return Ae?{...B,result:{kind:"pointer-type",result:Ae}}:{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to cast to pointer type ${S(Te)}`})}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&on(ve.value)){let Te=ve.value;if(ne.length!==1)return{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${ne.length}`})}};try{let Ae=np({expr:e,env:t,context:{...n},isoType:Te});return{...B,result:{kind:"iso-value",result:Ae}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else if(q(ve)&&rn(ve.value)){let Te=ve.value;if(ne.length!==1)return{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Arc value constructor expects exactly 1 argument, got ${ne.length}`})}};try{let Ae=H_({expr:e,env:t,context:{...n},arcType:Te});return{...B,result:{kind:"arc-value",result:Ae}}}catch(Ae){return{...B,result:{kind:"error",error:Ae}}}}else return{...B,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
|
|
10818
|
+
${q(ve)?S(ve.value):S(B.type)}`})}}}}),_=p.filter(B=>B.result.kind!=="error"),d=_.filter(B=>ae(B.type)&&B.type.return.isCompileTimeOnly);if(d.length===1&&(_=d),_.length>1){let B=_.filter(ne=>ae(ne.type)?ne.type.parameters.some(Te=>zt(Te.type)||ln(Te.type)||tn(Te.type)):!1);B.length===1&&(_=B)}if(_.length===0){if(p.length===1&&p[0].result.kind==="error"){let B=p[0].result.error;throw B instanceof Rn?St([{token:e.token,errorMessage:`Failed to call the function:
|
|
10819
|
+
|
|
10820
|
+
${B.tokenAndErrorList.filter(({token:ne})=>ne.modulePath!==e.token.modulePath).map(({errorMessage:ne})=>`- ${ne}`).join(`
|
|
10821
|
+
`)}`},...B.tokenAndErrorList.filter(({token:ne})=>ne.modulePath===e.token.modulePath)],B.isAssertionError):St([{token:e.token,errorMessage:`Failed to call the function:
|
|
10822
|
+
`},{token:e.token,errorMessage:B instanceof Error?B.message:String(B)}])}throw St([{token:o.token,errorMessage:`No matching call found with arguments:
|
|
10819
10823
|
${w(e)}
|
|
10820
10824
|
|
|
10821
10825
|
${p.length?`Available functions:
|
|
10822
|
-
`:""}`},...p.map(B=>{let
|
|
10823
|
-
`},...
|
|
10824
|
-
${
|
|
10826
|
+
`:""}`},...p.map(B=>{let ne=B.result.kind==="error"?B.result.error:void 0;return ne?ne instanceof Rn?[{token:o.token,errorMessage:`- ${S(B.type)}
|
|
10827
|
+
`},...ne.tokenAndErrorList]:{token:o.token,errorMessage:`- ${S(B.type)}
|
|
10828
|
+
${ne instanceof Error?ne.message:String(ne)}`}:{token:o.token,errorMessage:`${S(B.type)}`}}).flat()])}if(_.length>1)throw m({token:o.token,errorMessage:`Ambiguous call with arguments:
|
|
10825
10829
|
${w(e)}
|
|
10826
10830
|
|
|
10827
10831
|
Found ${_.length} matching calls:
|
|
10828
10832
|
${_.map(B=>`${S(B.type)}`).join(`
|
|
10829
10833
|
`)}
|
|
10830
|
-
`});let y=_[0];if(n.isInFunctionCallCheckingPhase&&u){let B=y.type,{returnType:
|
|
10831
|
-
${tt(ve)}`});let Kt=(
|
|
10832
|
-
${tt(ve)}`});return e.$={env:t,type:
|
|
10833
|
-
${w(e)}`})}function
|
|
10834
|
+
`});let y=_[0];if(n.isInFunctionCallCheckingPhase&&u){let B=y.type,{returnType:ne}=Ui({functionType:B,calleeEnv:B.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=Vt(t),e.$={env:t,type:ne,value:le(ne,{variableName:"checking_phase_placeholder_"+yt(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(ae(y.type)&&y.type.return.isUnquote){let{returnValue:B,callerEnv:ne,pathCollection:ve,deferredDropExpressions:Te}=di({functionValue:Io(y.value),functionType:y.type,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=Vt(ne),e.$={env:t,type:On(),value:B,originType:On(),pathCollection:ve,deferredDropExpressions:Te},e}else throw m({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(ae(y.type)){let B=y.type;{let{returnType:ne,returnValue:ve,callerEnv:Te,pathCollection:Ae,specializedFunctionValue:Fe,runtimeArgExprsInOrder:ze,deferredDropExpressions:bt}=di({functionValue:Io(y.value),functionType:y.type,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Vt(Te),B.return.isUnquote)if(Sn(ve)){let vt=M({expr:ve.value,env:t,context:{...n}});return e.$={env:((A=vt.$)==null?void 0:A.env)||t,type:((N=vt.$)==null?void 0:N.type)||ne,value:(x=vt.$)==null?void 0:x.value,originType:((D=vt.$)==null?void 0:D.originType)||((P=vt.$)==null?void 0:P.type)||ne,pathCollection:((U=vt.$)==null?void 0:U.pathCollection)||[],macroExpansion:vt,variableName:(j=vt.$)==null?void 0:j.variableName},e}else throw m({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
|
|
10835
|
+
${tt(ve)}`});let Kt=(O=e.$)==null?void 0:O.variableName,kt=ne;if(G(ne)&&y.value&&be(y.value)){let vt=y.value.body;if((z=vt.$)!=null&&z.type){let mn=vt.$.type;G(mn)&&mn.resolvedConcreteType&&(mn=mn.resolvedConcreteType),kt={...ne,resolvedConcreteType:mn}}}if(e.$={env:t,type:kt,value:ve,originType:kt,pathCollection:Ae,runtimeArgExprsInOrder:ze,deferredDropExpressions:bt,variableName:Kt},B.ioBuiltin==="io_async"&&ze[0]){let vt=ze[0],mn=(W=vt.$)==null?void 0:W.closureFunctionValue;if((de=(ee=mn==null?void 0:mn.body)==null?void 0:ee.$)!=null&&de.awaitAnalysis){e.$.awaitAnalysis=mn.body.$.awaitAnalysis,e.$.captureType=(se=vt.$)==null?void 0:se.captureType,e.$.deferredDupExpressions=(K=vt.$)==null?void 0:K.deferredDupExpressions,(te=vt.$)!=null&&te.deferredDupExpressions&&(vt.$.deferredDupExpressions=void 0);let ot=(re=vt.$)==null?void 0:re.captureType;if(ot&&e.$.awaitAnalysis){let lt=new Set(ot.fields.map(Ue=>Ue.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(Ue=>lt.has(Ue.name)?{...Ue,kind:"outer"}:Ue)}}mn.isIoAsyncStateMachineClosure=!0}else(we=vt.$)!=null&&we.deferredDupExpressions&&(vt.$.deferredDupExpressions=void 0);let Le=(ce=vt.$)==null?void 0:ce.variableName;if(Le&&e.$.env){let ot=pe(e.$.env,Le),lt=ot[ot.length-1];lt&&(e.$.env=mt(e.$.env,lt,{...lt,consumedAtToken:e.token}))}}pt(e,!0),o.$={env:t,type:y.type,value:Fe||y.value,pathCollection:[]},s&&(s.$={env:t,type:y.type,value:Fe||y.value,pathCollection:[]})}return e}else if((G(y.type)||et(y.type))&&In(y.type)){let B=In(y.type),{returnType:ne,returnValue:ve,callerEnv:Te,pathCollection:Ae,specializedFunctionValue:Fe,runtimeArgExprsInOrder:ze,deferredDropExpressions:bt}=di({functionValue:Io(y.value),functionType:B.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Vt(Te),B.isFn.callType.return.isUnquote)if(Sn(ve)){let Kt=M({expr:ve.value,env:t,context:{...n}});return e.$={env:((Q=Kt.$)==null?void 0:Q.env)||t,type:((Pe=Kt.$)==null?void 0:Pe.type)||ne,value:(ut=Kt.$)==null?void 0:ut.value,originType:((at=Kt.$)==null?void 0:at.originType)||((_e=Kt.$)==null?void 0:_e.type)||ne,pathCollection:((Ce=Kt.$)==null?void 0:Ce.pathCollection)||[],macroExpansion:Kt},e}else throw m({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
|
|
10836
|
+
${tt(ve)}`});return e.$={env:t,type:ne,value:ve,originType:ne,pathCollection:Ae,runtimeArgExprsInOrder:ze,deferredDropExpressions:bt},pt(e,!0),o.$={env:t,type:y.type,value:Fe||y.value,pathCollection:[]},s&&(s.$={env:t,type:y.type,value:Fe||y.value,pathCollection:[]}),e}else{let B=y.value;if(q(B)&&Ie(B.value)){let ne=B.value;e.$={env:t,type:ne,originType:ne,pathCollection:[]};let{values:ve,pathCollection:Te,callerEnv:Ae,runtimeArgExprsInOrder:Fe}=da(y);if(t=Ae,!ve)throw m({token:o.token,errorMessage:"Error evaluating struct call."});let ze=ve.some(bt=>!bt)?void 0:cr(ne,ve);return e.$.value=qt(ne)?void 0:ze,e.$.pathCollection=Te,e.$.env=t,e.$.runtimeArgExprsInOrder=Fe,pt(e,!0),o.$={env:t,type:B.type,value:B,pathCollection:[]},e}else if(q(B)&&Me(B.value)){let ne=B.value;e.$={env:t,type:ne,originType:ne,pathCollection:[]};let ve=ne.variants.find(bt=>bt.name===ne.selectedVariantName);if(!ve)throw m({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:Te,pathCollection:Ae,callerEnv:Fe,runtimeArgExprsInOrder:ze}=da(y);if(t=Fe,Te.every(bt=>!!bt)){let bt=hi(ne,ve.name,Te);e.$.value=bt}return e.$.pathCollection=Ae,e.$.env=t,e.$.runtimeArgExprsInOrder=ze,pt(e,!0),o.$={env:t,type:B.type,value:B,pathCollection:[]},e}else if(q(B)&&Rt(B.value)){let ne=B.value;e.$={env:t,type:ne,originType:ne,pathCollection:[]};let{pathCollection:ve,callerEnv:Te,runtimeArgExprsInOrder:Ae}=da(y);return t=Te,e.$.value=void 0,e.$.pathCollection=ve,e.$.env=t,e.$.runtimeArgExprsInOrder=Ae,pt(e,!0),o.$={env:t,type:B.type,value:B,pathCollection:[]},e}else if(q(B)&&je(B.value)){let{moduleValue:ne,callerEnv:ve}=R_(y);return t=ve,e.$={env:t,type:ne.type,value:ne,originType:ne.type,pathCollection:[]},o.$={env:t,type:B.type,value:B,pathCollection:[]},e}else if(q(B)&&Je(B.value)){if(y.result.kind==="trait-specialization"){let Te=y.result.result;t=Te.callerEnv;let Ae=ye(Te.specializedTraitType);return e.$={env:t,type:Ae.type,value:Ae,pathCollection:[]},o.$={env:t,type:B.type,value:B,pathCollection:[]},e}let{traitValue:ne,callerEnv:ve}=P_(y);return t=ve,e.$={env:t,type:ne.type,value:ne,originType:ne.type,pathCollection:[]},o.$={env:t,type:B.type,value:B,pathCollection:[]},e}else{if(q(B)&&ae(B.value))return e;if(q(B)&&We(B.value))return e;if(q(B)&&un(B.value))return e;if(q(B)&&(G(B.value)||et(B.value))){if(y.result.kind==="type"&&G(B.value)&&B.value.recursiveTypeRef){let ne=B.value;e.$={env:t,type:ne,originType:ne,pathCollection:[]};let{pathCollection:ve,callerEnv:Te,runtimeArgExprsInOrder:Ae}=da(y);return t=Te,e.$.value=void 0,e.$.pathCollection=ve,e.$.env=t,e.$.runtimeArgExprsInOrder=Ae,pt(e,!0),o.$={env:t,type:B.type,value:B,pathCollection:[]},e}return e}else{if(q(B)&&_a(B.value))return e;if(q(B)&&Xe(B.value))return e;if(q(B)&&on(B.value))return e;if(q(B)&&rn(B.value))return e;if(We(y.type)||Et(y.type)){let{value:ne,index:ve,type:Te,arrayElementRef:Ae,callerEnv:Fe}=U_(y),ze=(($e=o.$)==null?void 0:$e.pathCollection)??[];return a.length===1&&typeof ve=="number"&&(ze.length>0?ze=ze.map(bt=>[...bt,ve.toString()]):(Ge=o.$)!=null&&Ge.variableName&&(ze=[[o.$.variableName,ve.toString()]])),e.$={env:Fe,type:Te,value:ne,originType:((rt=o.$)==null?void 0:rt.originType)??y.type,pathCollection:ze,sourceVariable:(ct=o.$)==null?void 0:ct.sourceVariable,arrayElementRef:Ae,isAccessingProperty:!0},o.$={env:t,type:y.type,value:y.value,pathCollection:((jt=o.$)==null?void 0:jt.pathCollection)??[],isAccessingProperty:!0},pt(e,!1),e}}}}throw m({token:e.token,errorMessage:`Function call is not implemented yet:
|
|
10837
|
+
${w(e)}`})}function pg(e){var i;if(!((i=e.$)!=null&&i.type)||!qe(e.$.type))throw m({token:e.token,errorMessage:`Expected tuple type for drop generation:
|
|
10834
10838
|
${w(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
|
|
10835
10839
|
${w(e)}`});let n=e.$.type.fields.map((o,a)=>({index:a,element:o,needsDrop:Be(G(o.type)&&o.type.resolvedConcreteType?o.type.resolvedConcreteType:o.type)})).filter(({needsDrop:o})=>o);return n.length===0?"":`begin(
|
|
10836
10840
|
${n.map(({index:o})=>`${L.__yo_drop_tuple_element[0]}(${e.$.variableName}, ${o})`).join(`,
|
|
10837
10841
|
`)}
|
|
10838
|
-
)`}function
|
|
10842
|
+
)`}function dg(e){var s;if(!((s=e.$)!=null&&s.type)||!We(e.$.type))throw m({token:e.token,errorMessage:`Expected array type for drop generation:
|
|
10839
10843
|
${w(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
|
|
10840
10844
|
${w(e)}`});let t=e.$.type,n=t.childType,r=G(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!Be(r))return"";let i=t.length;if(!ft(i))return"";let o=i.value,a=[];for(let l=0;l<o;l++)a.push(`${L.__yo_drop_array_element[0]}(${e.$.variableName}, ${l})`);return`begin(
|
|
10841
10845
|
${a.join(`,
|
|
10842
10846
|
`)}
|
|
10843
|
-
)`}function
|
|
10847
|
+
)`}function sp({expr:e,env:t,context:n}){var u,c,f;Oe(e,L.___drop,1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.___drop[0]}":
|
|
10844
10848
|
${w(r)}`});t=i.$.env;let o=(u=i.$)==null?void 0:u.variableName;if(!o)throw m({token:r.token,errorMessage:`Expected variable name as argument to "${L.___drop[0]}":
|
|
10845
10849
|
${w(i)}
|
|
10846
10850
|
|
|
10847
10851
|
Original expression:
|
|
10848
|
-
${w(r)}`});let a=i.$.type,l=G(a)&&a.resolvedConcreteType&&!
|
|
10852
|
+
${w(r)}`});let a=i.$.type,l=G(a)&&a.resolvedConcreteType&&!He(a)?a.resolvedConcreteType:a;if(Be(l))if(qe(l)){let p=pg(i);if(p){let _=$n(p);t=Gn(i,t,!0);let d=M({expr:_,env:t,context:{...n}});return I(d)?(Ir(e,d),e):d}else return t=Gn(i,t,!0),e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}else if(We(l)){let p=dg(i);if(p){let _=$n(p);t=Gn(i,t,!0);let d=M({expr:_,env:t,context:{...n}});return I(d)?(Ir(e,d),e):d}else return t=Gn(i,t,!0),e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}else{if(G(l)&&!He(l))return t=Gn(i,t,!0),e.$={env:t,type:ue.type,value:void 0,pathCollection:[]},e;{let p=(c=i.$)==null?void 0:c.variableName;if(p){let v=pe(t,p),E=v.length?v[v.length-1]:void 0;if(E&&!E.isOwningTheRcValue)return t=Gn(i,t,!0),e.$={env:t,type:ue.type,value:void 0,pathCollection:[]},e}let _=$n(`(${w(i)}).___drop()`),d=sr({env:t,context:{...n},expr:_});if(!((f=d.$)!=null&&f.env))throw m({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${L.___drop[0]}" method call:
|
|
10849
10853
|
${w(_)}`});let g=pe(d.$.env,o).at(-1);if(!g)throw m({token:e.token,errorMessage:`Variable "${o}" not found in environment after evaluating "${L.___drop[0]}" method call:
|
|
10850
|
-
${w(_)}`});let h=
|
|
10854
|
+
${w(_)}`});let h=mt(d.$.env,g,{...g,consumedAtToken:e.token});return d.$.env=h,d}}else return t=Gn(i,t,!0),e.$={env:t,type:ue.type,value:void 0,pathCollection:[]},e}function mg(e){var i;if(!((i=e.$)!=null&&i.type)||!qe(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
|
${w(e)}`});let n=e.$.type.fields.map((o,a)=>({index:a,element:o,needsDup:Be(o.type)}));return n.every(({needsDup:o})=>!o)?"":`begin(
|
|
10852
10856
|
${n.map(({index:o,needsDup:a})=>{var s;return a?`${L.__yo_dup_tuple_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${o})`:""}).filter(o=>o.length>0).join(`,
|
|
10853
10857
|
`)}
|
|
10854
|
-
)`}function
|
|
10858
|
+
)`}function yg(e){var r;if(!((r=e.$)!=null&&r.type)||!We(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
|
${w(e)}`});let t=e.$.type,n=t.childType;if(!Be(n))return"";if(ft(t.length)){let i=t.length.value;return`begin(
|
|
10856
10860
|
${Array.from({length:Number(i)},(o,a)=>{var s;return`${L.__yo_dup_array_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${a})`}).join(", ")}
|
|
10857
|
-
)`}else return""}function
|
|
10858
|
-
${w(r)}`});t=i.$.env;let o=i.$.type,a=G(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Be(a))if(
|
|
10859
|
-
${w(l)}`});let f=pe(u.$.env,c);if(f.length){let p=f[f.length-1];if(p.isOwningTheRcValue){let _=
|
|
10861
|
+
)`}else return""}function lp({expr:e,env:t,context:n}){var s;Oe(e,L.___dup,1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.___dup[0]}":
|
|
10862
|
+
${w(r)}`});t=i.$.env;let o=i.$.type,a=G(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Be(a))if(qe(a)){let l=mg(i);if(l){let u=$n(l),c=M({expr:u,env:t,context:{...n}});return I(c)?(Ir(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(We(a)){let l=yg(i);if(l){let u=$n(l),c=M({expr:u,env:t,context:{...n}});return I(c)?(Ir(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(G(a)&&!He(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let l=$n(`(${w(i)}).___dup()`),u=sr({env:t,context:{...n},expr:l}),c=(s=u.$)==null?void 0:s.variableName;if(!c||!u.$)throw m({token:e.token,errorMessage:`Failed to evaluate the "${L.___dup[0]}" method call:
|
|
10863
|
+
${w(l)}`});let f=pe(u.$.env,c);if(f.length){let p=f[f.length-1];if(p.isOwningTheRcValue){let _=mt(u.$.env,p,{...p,isOwningTheRcValue:!1});u.$.env=_}}return u}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function up({expr:e,env:t,context:n}){Oe(e,L.__yo_expr_is_atom,1);let r=e.args[0],i=M({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
|
${w(r)}`});if(!nn(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
10861
10865
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
10862
|
-
${w(r)}`});let a=
|
|
10866
|
+
${w(r)}`});let a=Sn(o)?Mt(Y(o.value)):le(Ct(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function cp({expr:e,env:t,context:n}){Oe(e,L.__yo_expr_is_fn_call,1);let r=e.args[0],i=M({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
|
${w(r)}`});if(!nn(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
10864
10868
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
10865
|
-
${w(r)}`});let a=
|
|
10869
|
+
${w(r)}`});let a=Sn(o)?Mt(I(o.value)):le(Ct(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function fp({expr:e,env:t,context:n}){Oe(e,L.__yo_expr_get_callee,1);let r=e.args[0],i=M({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
|
${w(r)}`});if(!nn(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
10867
10871
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
10868
|
-
${w(r)}`});if(e.$={env:i.$.env,type:On(),value:le(On(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10869
|
-
${w(e)}`});return e}function
|
|
10872
|
+
${w(r)}`});if(e.$={env:i.$.env,type:On(),value:le(On(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(o))if(I(o.value)){let a=o.value.func,s=fr(a);e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
|
|
10873
|
+
${w(e)}`});return e}function _p({expr:e,env:t,context:n}){Oe(e,L.__yo_expr_get_args,1);let r=e.args[0],i=M({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
|
${w(r)}`});if(!nn(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
10871
10875
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
10872
|
-
${w(r)}`});if(e.$={env:i.$.env,type:Jo(),value:le(Jo(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10873
|
-
${w(e)}`});return e}function
|
|
10876
|
+
${w(r)}`});if(e.$={env:i.$.env,type:Jo(),value:le(Jo(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(o))if(I(o.value)){let a=o.value.args,s=ur(On(),a.map(l=>fr(l)));e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
|
|
10877
|
+
${w(e)}`});return e}function pp({expr:e,env:t,context:n}){Oe(e,L.__yo_expr_to_string,1);let r=e.args[0],i=M({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
|
${w(r)}`});if(!nn(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
10875
10879
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
10876
|
-
${w(r)}`});return e.$={env:i.$.env,type:
|
|
10880
|
+
${w(r)}`});return e.$={env:i.$.env,type:gn(),value:le(gn(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(o)&&(e.$.value=Mn(w(o.value))),e}function dp({expr:e,env:t,context:n}){Oe(e,L.__yo_expr_eq,2);let r=e.args[0],i=e.args[1],o=M({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
|
${w(r)}`});if(!nn(o.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
|
|
10878
10882
|
${w(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
|
${w(r)}`});t=o.$.env;let s=M({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
|
${w(i)}`});if(!nn(s.$.type))throw m({token:i.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
|
|
10881
10885
|
${w(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
|
-
${w(i)}`});t=s.$.env;let u;return
|
|
10886
|
+
${w(i)}`});t=s.$.env;let u;return Sn(a)&&Sn(l)?u=Mt(an({value:a,env:t},{value:l,env:t})):u=le(Ct(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function mp({expr:e,env:t}){return Oe(e,L.__yo_gc_collect,0),e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function yp({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=M({expr:r,env:t,context:{...n}});if(!l.$)throw m({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
|
|
10883
10887
|
${w(r)}`});if(!Tt(l.$.value))throw m({token:r.token,errorMessage:`Expected comptime_string for prefix argument, got:
|
|
10884
|
-
${w(r)}`});i=l.$.value.value}let o=i+yt(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=fr(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function
|
|
10885
|
-
${w(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=
|
|
10886
|
-
${w(o)}`});let s=a.$.value;if(
|
|
10887
|
-
${tt(s)}`})}else{let o=ya({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<i.length;l++){let u=i[l];if(
|
|
10888
|
-
${w(f)}`});let _=p.$.value;
|
|
10888
|
+
${w(r)}`});i=l.$.value.value}let o=i+yt(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=fr(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function gp({expr:e,env:t,context:n}){if(!T(e,V.Impl))throw m({token:e.token,errorMessage:`Expected "Impl", got:
|
|
10889
|
+
${w(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=I(l)&&T(l,"!")&&l.args.length===1,c=u?l.args[0]:l,f=M({expr:c,env:t,context:{...n}});if(!f.$)throw m({token:c.token,errorMessage:"Failed to evaluate Impl argument."});if(t=f.$.env,!f.$.value||!q(f.$.value)||!Je(f.$.value.value))throw m({token:c.token,errorMessage:`Impl argument must be a trait type, got: ${w(c)}`});let p=f.$.value.value;if($a(p)){if(o!==void 0)throw m({token:c.token,errorMessage:"Impl can only have one Concrete(T) specifier"});o=p.isConcrete.concreteType;continue}u?i.push(p):r.push(p)}let a=Kn(It(),"Impl",{requiredTraits:r,negativeTraits:i,env:t,context:n});o!==void 0&&(a.resolvedConcreteType=o);let s=ye(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function ya({expr:e,env:t,context:n}){if(Y(e))return e;{let r=e.func,i=e.args;if(Y(r)&&Xt(r,V.unquote)&&i.length===1){let o=i[0],a=M({expr:o,env:t,context:{...n}});if(!a.$||!nn(a.$.type)||!a.$.value)throw m({token:o.token,errorMessage:`Expected expression type for "unquote" argument, got:
|
|
10890
|
+
${w(o)}`});let s=a.$.value;if(Ve(s))return e;if(Sn(s))return s.value;throw m({token:o.token,errorMessage:`Expected expression value for "unquote" argument, got:
|
|
10891
|
+
${tt(s)}`})}else{let o=ya({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<i.length;l++){let u=i[l];if(I(u)&&T(u,V.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 f=u.args[0],p=M({expr:f,env:t,context:{...n}});if(!p.$||!gi(p.$.type)||!p.$.value)throw m({token:f.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
|
|
10892
|
+
${w(f)}`});let _=p.$.value;lu(_)&&_.elements.every(d=>Sn(d))&&(c=_.elements.map(d=>d.value)),c?c.forEach(d=>{a.push(d)}):a.push(u)}else a.push(ya({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function hp({expr:e,env:t,context:n}){Oe(e,V.quote,1);let r=ya({expr:e.args[0],env:t,context:{...n}}),i=fr(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function vp({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=M({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,!nn(i.$.type))throw m({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${S(i.$.type)}`});let o=null;if(e.args.length===2){let s=e.args[1],l=M({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(!zt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${S(l.$.type)}`});if(!Jn(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(
|
|
10891
|
-
${w(r)}`});if(t=o.$.env,
|
|
10892
|
-
${w(r)}`});{let a=o.$.type;if(zt(a)||
|
|
10893
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10894
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10895
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10896
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10897
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function
|
|
10898
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10899
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10900
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10901
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10902
|
-
${w(r)}`});t=i.$.env;let o=i.$.type;if(!on(o))throw m({token:r.token,errorMessage:`${L.__yo_iso_extract[0]} expects an Iso type, but got: ${S(o)}`});let a=o.childType,{optionType:s,env:l}=
|
|
10903
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10904
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10894
|
+
${s.toString()}`});if(!zt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${S(l.$.type)}`});if(!Jn(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(Sn(a)){let s=a.value,l=t,u=0;for(;I(s)&&(o===null||u<o);)try{let c=sr({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Sn(c.$.value)){let f=c.$.value.value;if(w(f)===w(s))break;s=f,u++}else break}catch(c){if(c instanceof Rn&&c.isAssertionError)throw c;break}s=ya({expr:s,env:l,context:{...n}}),e.$={env:l,type:On(),value:fr(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Tp({expr:e,env:t,context:n}){var i,o;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body"&&((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.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:ue.type;if(e.args.length>0){let a=e.args[0],s=M({expr:a,env:t,context:{...n}});if(!s.$)throw m({token:a.token,errorMessage:"Failed to evaluate panic message"});if(!s.$.value||!Tt(s.$.value)&&!(Ve(s.$.value)&&tn(s.$.value.type)))throw m({token:a.token,errorMessage:"panic message must be a comptime_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}function Ep({expr:e,env:t}){if(T(e,L.__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=Mn(n);return e.$={env:t,type:gn(),value:r,pathCollection:[]},e}if(T(e,L.__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=Mn(n);return e.$={env:t,type:gn(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}function $p({expr:e,env:t,context:n}){Oe(e,L.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Xe(i.type)&&(i={...i,type:i.type.childType});let o=M({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
|
|
10895
|
+
${w(r)}`});if(t=o.$.env,q(o.$.value))throw m({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
|
|
10896
|
+
${w(r)}`});{let a=o.$.type;if(zt(a)||ln(a)||tn(a)){let c=Pt({type:a,expectedType:i==null?void 0:i.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=Ai(a),l=o.$.sourceVariable,u=o.$.arrayElementRef;if(u){let c=Fs(s,[u.arrayValue],u.index);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else if(l&&l.value){let c=Fs(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 pt(e,!1),e}}function Cp({expr:e,env:t,context:n}){Oe(e,L.rc,1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,Pn(i.$.type)?e.$={env:t,type:Ht(),value:void 0,pathCollection:[]}:e.$={env:t,type:Ht(),value:kn("Usize",1),pathCollection:[]},e}function gg(e,t,n){var _;let i=pe(t,"Option").find(d=>{var y;return((y=d.value)==null?void 0:y[0])&&be(d.value[0])&&ae(d.type)});if(!i||!((_=i.value)!=null&&_[0])||!be(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=ye(e),u=dt(a.env),{env:c}=Se({env:u,variable:{name:s.label,token:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:p}=Ao({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:It()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!q(f))throw new Error("Option type constructor did not return a type value");return{optionType:f.value,env:p}}function bp({expr:e,env:t,context:n}){Oe(e,[L.__yo_decr_rc[0]],1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_decr_rc[0]}":
|
|
10897
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function kp({expr:e,env:t,context:n}){Oe(e,[L.__yo_incr_rc[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_incr_rc[0]}":
|
|
10898
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function wp({expr:e,env:t,context:n}){Oe(e,[L.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_incr_rc_atomic[0]}":
|
|
10899
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Fp({expr:e,env:t,context:n}){Oe(e,[L.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_decr_rc_atomic[0]}":
|
|
10900
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Lp({expr:e,env:t,context:n}){Oe(e,[L.__yo_rc_own[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_incr_rc[0]}":
|
|
10901
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Ap({expr:e,env:t,context:n}){Oe(e,[L.__yo_dyn_drop[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_dyn_drop[0]}":
|
|
10902
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Ip({expr:e,env:t,context:n}){Oe(e,[L.__yo_dyn_dup[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_dyn_dup[0]}":
|
|
10903
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Np({expr:e,env:t,context:n}){Oe(e,[L.__yo_sometype_drop[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_sometype_drop[0]}":
|
|
10904
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function xp({expr:e,env:t,context:n}){Oe(e,[L.__yo_sometype_dup[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_sometype_dup[0]}":
|
|
10905
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Sp({expr:e,env:t,context:n}){Oe(e,[L.__yo_iso_extract[0]],1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_iso_extract[0]}":
|
|
10906
|
+
${w(r)}`});t=i.$.env;let o=i.$.type;if(!on(o))throw m({token:r.token,errorMessage:`${L.__yo_iso_extract[0]} expects an Iso type, but got: ${S(o)}`});let a=o.childType,{optionType:s,env:l}=gg(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection||[]},pt(e,!0),e}function Vp({expr:e,env:t,context:n}){Oe(e,[L.__yo_iso_dispose[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_iso_dispose[0]}":
|
|
10907
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Dp({expr:e,env:t,context:n}){Oe(e,[L.__yo_arc_dispose[0]]);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${L.__yo_arc_dispose[0]}":
|
|
10908
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Mp({expr:e,env:t,context:n}){Oe(e,[L.__yo_drop_array_element[0]],2);let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${L.__yo_drop_array_element[0]}":
|
|
10905
10909
|
${w(r)}`});t=o.$.env;let a=M({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${L.__yo_drop_array_element[0]}":
|
|
10906
|
-
${w(i)}`});return t=a.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10910
|
+
${w(i)}`});return t=a.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Op({expr:e,env:t,context:n}){Oe(e,[L.__yo_dup_array_element[0]],2);let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${L.__yo_dup_array_element[0]}":
|
|
10907
10911
|
${w(r)}`});t=o.$.env;let a=M({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${L.__yo_dup_array_element[0]}":
|
|
10908
|
-
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!We(s))throw m({token:r.token,errorMessage:`Expected array type for "${L.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function
|
|
10912
|
+
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!We(s))throw m({token:r.token,errorMessage:`Expected array type for "${L.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function Rp({expr:e,env:t,context:n}){Oe(e,[L.__yo_drop_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${L.__yo_drop_tuple_element[0]}":
|
|
10909
10913
|
${w(r)}`});t=o.$.env;let a=M({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${L.__yo_drop_tuple_element[0]}":
|
|
10910
|
-
${w(i)}`});return t=a.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function
|
|
10914
|
+
${w(i)}`});return t=a.$.env,e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Pp({expr:e,env:t,context:n}){Oe(e,[L.__yo_dup_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${L.__yo_dup_tuple_element[0]}":
|
|
10911
10915
|
${w(r)}`});t=o.$.env;let a=M({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${L.__yo_dup_tuple_element[0]}":
|
|
10912
|
-
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!
|
|
10913
|
-
${w(e)}`});return{expr:d,type:(a=d.$)==null?void 0:a.type,env:(s=d.$)==null?void 0:s.env}}else throw m({token:e.token,errorMessage:`Cannot use _ with type ${S(t)}. Only supported with struct types.`});else if(
|
|
10914
|
-
${w(e)}`});return{expr:E,type:(c=E.$)==null?void 0:c.type,env:(f=E.$)==null?void 0:f.env}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${S(t)}. Only supported with enum types.`});else if((p=e.$)!=null&&p.type&&t)try{let{expectedEnv:d}=$t({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:d}}catch{return{expr:e,type:(_=e.$)==null?void 0:_.type,env:n}}else throw m({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${w(e)}`})}function
|
|
10915
|
-
${w(r)}`});if(!
|
|
10916
|
+
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!qe(s))throw m({token:r.token,errorMessage:`Expected tuple type for "${L.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!ft(l))throw m({token:i.token,errorMessage:`Expected number value for index in "${L.__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 "${L.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Up({expr:e,env:t,context:n}){Oe(e,L.sizeof,1);let r=e.args[0],i=M({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&&q(i.$.value)?o=i.$.value.value:o=i.$.type;let a=ii(o),s;return a===null?s=le(Ht(),{env:t,context:n}):s=kn("Usize",Math.ceil(a/8)),e.$={env:t,type:Ht(),value:s,pathCollection:[]},e}function Xr({expr:e,type:t,env:n,context:r}){var i,o,a,s,l,u,c,f,p,_;if(qe(t)&&I(e)&&T(e,V.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 d=0;d<t.fields.length;d++){let y=t.fields[d].type,g=e.args[d],{env:h}=Xr({expr:g,type:y,env:n,context:{...r}});n=h}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(I(e)&&T(e,"_"))if(Ie(t)||Rt(t)||je(t)||Je(t)){let d=sr({expr:e,env:n,givenFunc:{type:en(t),value:ye(t)},context:{...r}});if(!((i=d.$)!=null&&i.type)||!((o=d.$)!=null&&o.env))throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
|
|
10917
|
+
${w(e)}`});return{expr:d,type:(a=d.$)==null?void 0:a.type,env:(s=d.$)==null?void 0:s.env}}else throw m({token:e.token,errorMessage:`Cannot use _ with type ${S(t)}. Only supported with struct types.`});else if(I(e)&&T(e,".",1))if(Me(t)){let d=e.args[0];if(!Y(d))throw m({token:e.token,errorMessage:`Expected identifier for enum variant, got ${w(d)}`});let y=d.token.value;if(!t.variants.find(v=>v.name===y))throw m({token:e.token,errorMessage:`Enum variant "${y}" not found in ${S(t)}`});let h={...t,selectedVariantName:y};return e.$={type:h,env:n,pathCollection:[]},{expr:e,type:h,env:n}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${S(t)}. Only supported with enum types.`});else if(I(e)&&I(e.func)&&T(e.func,".",1))if(Me(t)){let d=e.func,y=d.args[0];if(!Y(y))throw m({token:d.token,errorMessage:`Expected identifier for enum variant, got ${w(y)}`});let g=y.token.value;if(!t.variants.find(k=>k.name===g))throw m({token:e.token,errorMessage:`Enum variant "${g}" not found in ${S(t)}`});let v={...t,selectedVariantName:g},E=sr({expr:e,env:n,givenFunc:{type:en(v),value:ye(v)},context:{...r}});if(!((l=E.$)!=null&&l.type)||!((u=E.$)!=null&&u.env))throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
|
|
10918
|
+
${w(e)}`});return{expr:E,type:(c=E.$)==null?void 0:c.type,env:(f=E.$)==null?void 0:f.env}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${S(t)}. Only supported with enum types.`});else if((p=e.$)!=null&&p.type&&t)try{let{expectedEnv:d}=$t({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:d}}catch{return{expr:e,type:(_=e.$)==null?void 0:_.type,env:n}}else throw m({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${w(e)}`})}function zp({expr:e,env:t,context:n}){var l,u;Oe(e,L.the,2);let r=e.args[0],i=e.args[1],o=M({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||!q(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=M({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,!ie({type:a,env:t},{type:s.$.type,env:t})){if(ao(a))try{let{expr:c,type:f,env:p}=Xr({expr:i,type:a,env:t,context:{...n}});if(ie({type:a,env:p},{type:f,env:p}))return e.$={env:p,type:a,value:(l=c.$)==null?void 0:l.value,pathCollection:((u=c.$)==null?void 0:u.pathCollection)||[]},e}catch{}throw m({token:i.token,errorMessage:`Type mismatch: expected '${S(a)}', got '${S(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function Bp({expr:e,env:t,context:n}){Oe(e,L.__yo_type_to_comptime_string,1);let r=M({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
|
+
${w(r)}`});if(!gt(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
|
|
10916
10920
|
${w(r)}`});let i=r.$.value;if(!i)throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
|
|
10917
|
-
${w(r)}`});return e.$={env:r.$.env,type:
|
|
10918
|
-
${w(i)}`});let s=a.$.value.value;t=a.$.env;let l=M({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!
|
|
10919
|
-
${w(o)}`});let u=l.$.value.value;t=l.$.env;let c=ie({type:s,env:t},{type:u,env:t}),f=Mt(c);return e.$={env:t,type:f.type,value:f,pathCollection:[]},e}function
|
|
10920
|
-
${w(r)}`});if(!
|
|
10921
|
-
${w(r)}`});let i=r.$.value;if(!i||!
|
|
10922
|
-
${w(r)}`});let o=Be(i.value),a=Mt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
10923
|
-
${w(r)}`});if(!
|
|
10924
|
-
${w(r)}`});let i=r.$.value;if(!i||!
|
|
10925
|
-
${w(r)}`});let o=
|
|
10926
|
-
${w(r)}`});if(!
|
|
10927
|
-
${w(r)}`});let i=r.$.value;if(!i||!
|
|
10921
|
+
${w(r)}`});return e.$={env:r.$.env,type:gn(),value:le(gn(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},q(i)&&(e.$.value=Mn(S(i.value))),e}function Gp({expr:e,env:t,context:n}){var p,_;let r=e.args,i=r[0],o=r[1],a=M({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!q((p=a.$)==null?void 0:p.value))throw m({token:i.token,errorMessage:`Expected type, got:
|
|
10922
|
+
${w(i)}`});let s=a.$.value.value;t=a.$.env;let l=M({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!q((_=l.$)==null?void 0:_.value))throw m({token:o.token,errorMessage:`Expected type, got:
|
|
10923
|
+
${w(o)}`});let u=l.$.value.value;t=l.$.env;let c=ie({type:s,env:t},{type:u,env:t}),f=Mt(c);return e.$={env:t,type:f.type,value:f,pathCollection:[]},e}function Wp({expr:e,env:t,context:n}){Oe(e,L.__yo_type_contains_rc_type,1);let r=M({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
|
+
${w(r)}`});if(!gt(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
|
|
10925
|
+
${w(r)}`});let i=r.$.value;if(!i||!q(i))throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
|
|
10926
|
+
${w(r)}`});let o=Be(i.value),a=Mt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function qp({expr:e,env:t,context:n}){Oe(e,L.__yo_type_can_form_rc_cycle,1);let r=M({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
|
+
${w(r)}`});if(!gt(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
|
|
10928
|
+
${w(r)}`});let i=r.$.value;if(!i||!q(i))throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
|
|
10929
|
+
${w(r)}`});let o=Br(i.value,new Set,r.$.env),a=Mt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Hp({expr:e,env:t,context:n}){Oe(e,L.__yo_type_impls,2);let r=M({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
|
+
${w(r)}`});if(!gt(r.$.type))throw m({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
|
|
10931
|
+
${w(r)}`});let i=r.$.value;if(!i||!q(i))throw m({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
|
|
10928
10932
|
${w(r)}`});t=r.$.env;let o=i.value,a=M({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
|
-
${w(a)}`});let s;if(
|
|
10930
|
-
${w(a)}`})}t=a.$.env;let l=Mt(
|
|
10931
|
-
${w(r)}`});if(n===0){let i=r.token.value,o=pe(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=
|
|
10932
|
-
${w(r)}`});if(t=o.$.env,
|
|
10933
|
-
${w(r)}`})}function
|
|
10933
|
+
${w(a)}`});let s;if(q(a.$.value)){let u=a.$.value;if(!Je(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(Je(a.$.type))s=a.$.type;else{if(gt(a.$.type))return e.$={env:a.$.env,type:Ct(),value:le(Ct(),{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
|
+
${w(a)}`})}t=a.$.env;let l=Mt(sn({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function Yp({expr:e,env:t}){Oe(e,L.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!Y(r)||!ht(r))throw m({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
|
|
10935
|
+
${w(r)}`});if(n===0){let i=r.token.value,o=pe(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=mt(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(pe(t,i).length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:ue.type,value:ue,env:t,pathCollection:[]},e}function jp({expr:e,env:t,context:n}){var a;Oe(e,L.__yo_var_print_info,1);let r=e.args[0],i=M({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(a=i.$)==null?void 0:a.variableName;if(o){let s=pe(t,o);if(s.length>0){let l=s.at(-1);console.log(fc(l))}}return e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Kp({expr:e,env:t,context:n}){var s;Oe(e,L.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=M({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=pe(t,o);l.length>0&&(a=l.at(-1).isOwningTheRcValue)}return e.$={env:t,type:Ct(),value:Mt(a),pathCollection:[]},e}function Xp({expr:e,env:t,context:n}){var s;Oe(e,L.__yo_var_has_other_aliases,1);let r=e.args[0],i=M({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=pe(t,o);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameRcValueAs)a=!0;else{let f=u.id;for(let p=t.frames.length-1;p>=0;p--){let _=t.frames[p];for(let d=0;d<_.variables.length;d++){let y=_.variables[d];if(y.isOwningTheSameRcValueAs&&y.isOwningTheSameRcValueAs.id===f){a=!0;break}}}}}}return e.$={env:t,type:Ct(),value:Mt(a),pathCollection:[]},e}function Qp({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&Xe(i.type)&&(i={...i,type:i.type.childType});let o=M({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
|
+
${w(r)}`});if(t=o.$.env,q(o.$.value)){let s=o.$.value.value,l=Ai(s),u=ye(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
|
+
${w(r)}`})}function Zp({expr:e,env:t,context:n}){if(!T(e,V.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
|
${w(e)}`});let r=e.args[0],i=e.args[1],o=Y(i)&&i.token.value==="_",a=M({expr:r,env:t,context:{...n}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
10936
|
-
${w(r)}`});if(!
|
|
10940
|
+
${w(r)}`});if(!q(a.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
|
|
10937
10941
|
${w(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 p=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=le(
|
|
10940
|
-
${w(i)}`});if(!ie({type:
|
|
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 p=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=le(Ht(),{variableName:p,env:a.$.env,context:n}),{env:d}=Se({env:a.$.env,variable:{name:p,value:[_],type:Ht(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),y=Nr(s,_),g=ye(y);return e.$={env:d,type:g.type,value:g,pathCollection:[]},e}let l=M({expr:i,env:t,context:{...n,expectedType:{type:Ht(),env:t}}});if(!l.$)throw m({token:i.token,errorMessage:`Failed to evaluate the length expression:
|
|
10944
|
+
${w(i)}`});if(!ie({type:Ht(),env:t},{type:l.$.type,env:t}))throw m({token:i.token,errorMessage:`Expected usize for length, got:
|
|
10941
10945
|
${w(i)}`});let u=l.$.value;if(!u)throw m({token:i.token,errorMessage:`Expected compile-time known value for length, got:
|
|
10942
|
-
${w(i)}`});
|
|
10943
|
-
${w(r)}`});if(!
|
|
10944
|
-
${w(r)}`});let o=i.$.value.value,a=jo(o),s=
|
|
10945
|
-
${w(r)}`});if(t=i.$.env,!
|
|
10946
|
-
${w(r)}`});let o=i.$.value.value,a=it(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:en(a),value:
|
|
10947
|
-
Please consider adding "comptime" modifier to the field label.`});let C=d?{type:d,env:n}:g?{type:g,env:n}:void 0,
|
|
10946
|
+
${w(i)}`});Ve(u)&&(u.type=Ht());let c=Nr(s,u),f=ye(c);return e.$={env:l.$.env,type:f.type,value:f,pathCollection:[]},e}function Jp({expr:e,env:t,context:n}){return us({expr:e,env:t,context:n})}function ed({expr:e,env:t,context:n}){Oe(e,V.ComptimeList,1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
10947
|
+
${w(r)}`});if(!q(i.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
|
|
10948
|
+
${w(r)}`});let o=i.$.value.value,a=jo(o),s=ye(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function td({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=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
|
|
10949
|
+
${w(r)}`});if(t=i.$.env,!q(i.$.value))throw m({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
|
|
10950
|
+
${w(r)}`});let o=i.$.value.value,a=it(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:en(a),value:ye(a),pathCollection:[]},e}function nd({expr:e,env:t,context:n}){Oe(e,V.Dyn);let r=e.args,i=[],o=[];for(let u=0;u<r.length;u++){let c=r[u],f=I(c)&&T(c,"!")&&c.args.length===1,p=f?c.args[0]:c,_=M({expr:p,env:t,context:{...n}});if(!_.$||!_.$.value||!q(_.$.value)||!Je(_.$.value.value))throw new Error(`Expected a trait type for argument ${u+1} of 'dyn' expression.`);t=_.$.env;let d=_.$.value.value;if(f){if(o.some(y=>y.id===d.id))throw m({token:p.token,errorMessage:`Trait type ${S(d)} is already included in negative constraints of '${V.Dyn}' expression.`});o.push(d)}else{if(i.some(y=>y.id===d.id))throw m({token:p.token,errorMessage:`Trait type ${S(d)} is already included in '${V.Dyn}' expression.`});i.push(d)}}for(let u=0;u<i.length;u++){let c=i[u];for(let f=u+1;f<i.length;f++){let p=i[f];for(let _ of c.fields)for(let d of p.fields)if(_.label===d.label&&_.label!=="")throw m({token:e.token,errorMessage:`Trait types ${S(c)} and ${S(p)} have conflicting function name '${_.label}' in '${V.Dyn[0]}' expression.`})}}let a=[L.___dup[0],L.___drop[0],L.___dispose[0],L.dispose[0]];for(let u of i)for(let c of u.fields)if(a.includes(c.label)&&ae(c.type))throw m({token:e.token,errorMessage:`Trait type ${S(u)} cannot have function '${c.label}' as it is reserved in 'dyn' expression.`});let s=ea({requiredTraits:i,env:t,negativeTraits:o});t=Qo({dynType:s,env:t,context:n});let l=ye(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function mi({expr:e,tupleFieldIndex:t,env:n,context:r,forType:i}){var v,E,k,b,F,$;let o,a=e,s,l,u,c,f,p,_=!1,d;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2))){if(T(a,"::",2)){if(_=!0,s=a.args[0],!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${w(s)}`});o=s.token.value}f=a.args[1],a=a.args[0]}if(u&&f)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,V.comptime,1)){if(_)throw m({token:s.token,errorMessage:'Cannot combine the use of "comptime" with ::'});_=!0,s=s.args[0]}if(!Y(s)||!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${w(s)}`});o=s.token.value}else if(I(a)&&T(a,V.comptime,1)){if(_)throw m({token:a.token,errorMessage:'Cannot combine the use of "comptime" with "::"'});if(_=!0,s=a.args[0],!Y(s)||!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${w(s)}`});o=s.token.value}else!u&&!f&&(l=a);let y=(v=r.expectedType)==null?void 0:v.type,g;if(y&&(qe(y)||Ie(y)||je(y)||Je(y))){let C=y.fields[t];if(!C)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=C.type}if(l){let C=M({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});(E=C.$)!=null&&E.env&&(n=(k=C.$)==null?void 0:k.env);let A=(b=C.$)==null?void 0:b.value;if(!q(A))throw m({token:l.token,errorMessage:`(1) Expected type for element, got ${w(l)}`});d=A.value}if(f){if(!_)throw m({token:f.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
|
|
10951
|
+
Please consider adding "comptime" modifier to the field label.`});let C=d?{type:d,env:n}:g?{type:g,env:n}:void 0,A=M({expr:f,env:n,context:{...r,expectedType:C,forceCompileTimeBindings:void 0}});if(!A.$)throw m({token:f.token,errorMessage:`Failed to evaluate required value expression: ${w(f)}`});if(n=(F=A.$)==null?void 0:F.env,p=A.$.value,!p)throw m({token:f.token,errorMessage:`Expected compile-time known value for required value, got ${w(f)}`});let N=A.$.type;if(C){if(!ie({type:C.type,env:n},{type:N,env:n}))throw m({token:f.token,errorMessage:`Assigned value type mismatch:
|
|
10948
10952
|
Expected type: ${S(C.type)}
|
|
10949
|
-
Given type: ${S(N)}`});d=C.type}else d=N}if(u){let C=d?{type:d,env:n}:g?{type:g,env:n}:void 0,
|
|
10953
|
+
Given type: ${S(N)}`});d=C.type}else d=N}if(u){let C=d?{type:d,env:n}:g?{type:g,env:n}:void 0,A=M({expr:u,env:n,context:{...r,expectedType:C}});if(!A.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${w(u)}`});if(n=A.$.env,c=($=A.$)==null?void 0:$.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${w(u)}`});let N=A.$.type;if(C){if(!ie({type:C.type,env:n},{type:N,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
|
|
10950
10954
|
Expected type: ${S(C.type)}
|
|
10951
|
-
Given type: ${S(N)}`});d=C.type}else d=N}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 ${w(a)}`});return s&&(s.$={env:n,type:d,value:p??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:ue,type:ue.type,pathCollection:[]}),
|
|
10952
|
-
${w(e)}`});let r=
|
|
10953
|
-
${w(f)}`});let _=f.token.value;if(i.some(v=>v.name===_))throw m({token:f.token,errorMessage:`Duplicate variant name "${_}" in enum`});let d=M({expr:p,env:t,context:{...n,SelfType:r}});if(!d.$)throw m({token:p.token,errorMessage:`Failed to evaluate discriminant value: ${w(p)}`});t=d.$.env;let y=d.$.value,g=d.$.type;if(!Jn(y)&&!zt(g))throw m({token:p.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${w(p)}`});if(!Jn(y))throw m({token:p.token,errorMessage:`Enum discriminant must be a compile-time known value, got: ${w(p)}`});let h=typeof y.value=="bigint"?y.value:BigInt(y.value);i.push({name:_,discriminant:h}),o=h+1n}else{if(
|
|
10954
|
-
${w(c)}`});if(i.some(p=>p.name===f))throw m({token:c.token,errorMessage:`Duplicate variant name "${f}" in enum`});i.push({name:f,discriminant:o}),o+=1n}else{let f=c,p;if(T(c,"=",2)){f=c.args[0];let g=c.args[1],h=M({expr:g,env:t,context:{...n,SelfType:r}});if(!h.$)throw m({token:g.token,errorMessage:`Failed to evaluate discriminant value: ${w(g)}`});t=h.$.env;let v=h.$.value;if(!Jn(v))throw m({token:g.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${w(g)}`});p=typeof v.value=="bigint"?v.value:BigInt(v.value)}if(T(f,":"))throw m({token:f.token,errorMessage:"Enum variant with : is not implemented yet"});if(!
|
|
10955
|
-
${w(f)}`});let _=f.func.token.value;if(i.some(g=>g.name===_))throw m({token:f.func.token,errorMessage:`Duplicate variant name "${_}" in enum`});let d=[];for(let g=0;g<f.args.length;g++){let h=f.args[g],{field:v,env:E}=mi({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:r},forType:"enum"});if(d.find(b=>b.label===v.label))throw m({token:
|
|
10956
|
-
${w(e)}`});let r=e.args[0],i=e.args[1];if(!
|
|
10957
|
-
${w(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:f}=
|
|
10958
|
-
${w(i)}`});let y=fo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:d,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${yt(t.modulePath)}`},env:Vt(f,!0),parametersFrame:f.frames[f.frames.length-1],isClosure:!0}),g=it(Vt(f,!0));return g.isFn={callType:y},t=Vt(f,!0),e.$={env:t,type:en(g),value:
|
|
10959
|
-
${w(r)}`});if(t=i.$.env,!
|
|
10960
|
-
${w(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],f=
|
|
10961
|
-
${w(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:
|
|
10962
|
-
All module fields are compile-time only by default.`});f=a.args[1],a=a.args[0]}if(u&&f)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(
|
|
10955
|
+
Given type: ${S(N)}`});d=C.type}else d=N}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 ${w(a)}`});return s&&(s.$={env:n,type:d,value:p??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:ue,type:ue.type,pathCollection:[]}),zr(d,e.token),{field:{label:o??`${t}`,type:d,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:f},defaultValue:c,assignedValue:p},env:n}}function rd({expr:e,env:t,context:n}){var s,l;if(!T(e,V.enum))throw m({token:e.token,errorMessage:`Expected "enum", got:
|
|
10956
|
+
${w(e)}`});let r=Pu(t);Ms({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 u=0;u<e.args.length;u++){let c=e.args[u];if(I(c)&&T(c,"=",2)&&Y(c.args[0])){let f=c.args[0],p=c.args[1];if(!ht(f))throw m({token:f.token,errorMessage:`Expected identifier for enum variant, got:
|
|
10957
|
+
${w(f)}`});let _=f.token.value;if(i.some(v=>v.name===_))throw m({token:f.token,errorMessage:`Duplicate variant name "${_}" in enum`});let d=M({expr:p,env:t,context:{...n,SelfType:r}});if(!d.$)throw m({token:p.token,errorMessage:`Failed to evaluate discriminant value: ${w(p)}`});t=d.$.env;let y=d.$.value,g=d.$.type;if(!Jn(y)&&!zt(g))throw m({token:p.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${w(p)}`});if(!Jn(y))throw m({token:p.token,errorMessage:`Enum discriminant must be a compile-time known value, got: ${w(p)}`});let h=typeof y.value=="bigint"?y.value:BigInt(y.value);i.push({name:_,discriminant:h}),o=h+1n}else{if(I(c)&&(T(c,"::",2)||T(c,"?=",2)))throw m({token:c.token,errorMessage:'Please use "impl" block to define members/methods for enum types.'});if(Y(c)){let f=c.token.value;if(!ht(c))throw m({token:c.token,errorMessage:`Expected identifier for enum variant, got:
|
|
10958
|
+
${w(c)}`});if(i.some(p=>p.name===f))throw m({token:c.token,errorMessage:`Duplicate variant name "${f}" in enum`});i.push({name:f,discriminant:o}),o+=1n}else{let f=c,p;if(T(c,"=",2)){f=c.args[0];let g=c.args[1],h=M({expr:g,env:t,context:{...n,SelfType:r}});if(!h.$)throw m({token:g.token,errorMessage:`Failed to evaluate discriminant value: ${w(g)}`});t=h.$.env;let v=h.$.value;if(!Jn(v))throw m({token:g.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${w(g)}`});p=typeof v.value=="bigint"?v.value:BigInt(v.value)}if(T(f,":"))throw m({token:f.token,errorMessage:"Enum variant with : is not implemented yet"});if(!I(f)||!ht(f.func))throw m({token:f.token,errorMessage:`Expected identifier for enum variant, got:
|
|
10959
|
+
${w(f)}`});let _=f.func.token.value;if(i.some(g=>g.name===_))throw m({token:f.func.token,errorMessage:`Duplicate variant name "${_}" in enum`});let d=[];for(let g=0;g<f.args.length;g++){let h=f.args[g],{field:v,env:E}=mi({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:r},forType:"enum"});if(d.find(b=>b.label===v.label))throw m({token:I(h)?((s=h.args[0])==null?void 0:s.token)??h.token:h.token,errorMessage:`Duplicate field label "${v.label}" in enum variant`});if(v.assignedValue)throw m({token:((l=v.exprs.assignedValueExpr)==null?void 0:l.token)??v.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});d.push(v),t=E}let y=p??o;i.push({name:_,fields:d,discriminant:y}),o=y+1n}}}t=ku({enumType:r,env:t,context:n,errorToken:e.token});let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function id({expr:e,env:t,context:n}){if(!T(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> operator for Fn trait type, got:
|
|
10960
|
+
${w(e)}`});let r=e.args[0],i=e.args[1];if(!I(r)||!T(r,V.Fn))throw m({token:r.token,errorMessage:`Expected Fn(...) for function trait, got:
|
|
10961
|
+
${w(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:f}=jl({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}}),p=M({expr:i,env:f,context:{...n,isEvaluatingFunctionType:!0}});if(!p.$)throw m({token:i.token,errorMessage:"Failed to evaluate return type for Fn trait."});let _=p.$.value,d;if(q(_))d=_.value;else throw m({token:i.token,errorMessage:`Expected a type for Fn return type, got:
|
|
10962
|
+
${w(i)}`});let y=fo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:d,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${yt(t.modulePath)}`},env:Vt(f,!0),parametersFrame:f.frames[f.frames.length-1],isClosure:!0}),g=it(Vt(f,!0));return g.isFn={callType:y},t=Vt(f,!0),e.$={env:t,type:en(g),value:ye(g),pathCollection:[]},e}function od({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=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
|
|
10963
|
+
${w(r)}`});if(t=i.$.env,!q(i.$.value))throw m({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
|
|
10964
|
+
${w(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],f=hg(c,t,n);a.push(f.effect),t=f.env}let s=it(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:en(s),value:ye(s),pathCollection:[]},e}function hg(e,t,n){if(I(e)&&T(e,"...")&&e.args.length===1&&Y(e.args[0]))return vg(e,t);let r=M({expr:e,env:t,context:{...n}});if(!r.$||!q(r.$.value))throw m({token:e.token,errorMessage:`Future effect argument must be an effect type or ...(E) spread, but got:
|
|
10965
|
+
${w(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:Tg(i,e),type:i,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!1,isQuote:!1,isOwningTheRcValue:!1,exprs:Ni({expr:e,labelExpr:void 0,typeExpr:e,defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function vg(e,t){var l;let n=e.args[0].token.value,i=pe(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=(l=i.value)==null?void 0:l[0],a;if(o&&q(o))if(G(o.value)&&o.value.isEffectsRow||Gt(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&&Ve(o)&&Gt(o.type))a=o.type;else if(o&&Ve(o)&&G(o.type)&&o.type.isEffectsRow)a=o.type;else if(o&&Ve(o)&>(o.type))a=Ii(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:Ni({expr:e,labelExpr:e.args[0],typeExpr:e.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function Tg(e,t){return je(e)&&e.typeName?e.typeName:G(e)&&e.name?e.name:w(t)}function ga({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:i}){var g,h,v,E,k,b;let o,a=e,s,l,u,c,f,p,_;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(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.`});f=a.args[1],a=a.args[0]}if(u&&f)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,V.comptime,1))throw m({token:s.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!Y(s)&&!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${w(s)}`});o=s.token.value}else{if(I(a)&&T(a,V.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&&!f)throw m({token:e.token,errorMessage:`Expected label for module field, got ${w(a)}`});if(s=a,!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${w(s)}`});if(!Y(s)&&!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${w(s)}`});o=s.token.value}let d=(g=r.expectedType)==null?void 0:g.type,y;if(d&&je(d)){let F=d.fields[t];if(!F)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});y=F.type}if(l){let F=M({expr:l,env:n,context:{...r,expectedType:y?{type:y,env:n}:void 0}});(h=F.$)!=null&&h.env&&(n=(v=F.$)==null?void 0:v.env);let $=(E=F.$)==null?void 0:E.value;if(!q($))throw m({token:l.token,errorMessage:`Expected type for module field, got ${w(l)}`});_=$.value}if(f){let F=_?{type:_,env:n}:y?{type:y,env:n}:void 0,$=M({expr:f,env:n,context:{...r,expectedType:F}});if(!$.$)throw m({token:f.token,errorMessage:`Failed to evaluate required value expression: ${w(f)}`});if(n=(k=$.$)==null?void 0:k.env,p=$.$.value,!p)throw m({token:f.token,errorMessage:`Expected compile-time known value for required value, got ${w(f)}`});let C=$.$.type;if(F){if(!ie({type:F.type,env:n},{type:C,env:n}))throw m({token:f.token,errorMessage:`Assigned value type mismatch:
|
|
10963
10967
|
Expected type: ${S(F.type)}
|
|
10964
10968
|
Given type: ${S(C)}`});_=F.type}else _=C}if(u){let F=_?{type:_,env:n}:y?{type:y,env:n}:void 0,$=M({expr:u,env:n,context:{...r,expectedType:F}});if(!$.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${w(u)}`});if(n=$.$.env,c=(b=$.$)==null?void 0:b.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${w(u)}`});let C=$.$.type;if(F){if(!ie({type:F.type,env:n},{type:C,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
|
|
10965
10969
|
Expected type: ${S(F.type)}
|
|
@@ -10969,90 +10973,90 @@ Type expressions are required for all function parameters in module fields to su
|
|
|
10969
10973
|
Type expressions are required for return types in module fields to support proper type specialization.`})}if(i&&u&&!ae(_))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: ${S(_)}
|
|
10971
10975
|
|
|
10972
|
-
To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:_,value:p??le(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:ue,type:ue.type,pathCollection:[]}),{field:{label:o??`__field_${yt(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:f},defaultValue:c,assignedValue:p},env:n}}function
|
|
10973
|
-
${w(e)}`});let r=Ba(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let o=e.args;for(let l=0;l<o.length;l++){let u=o[l];if(
|
|
10976
|
+
To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:_,value:p??le(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:ue,type:ue.type,pathCollection:[]}),{field:{label:o??`__field_${yt(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:f},defaultValue:c,assignedValue:p},env:n}}function ad({expr:e,env:t,context:n}){var s;if(!T(e,V.module))throw m({token:e.token,errorMessage:`Expected "module", got:
|
|
10977
|
+
${w(e)}`});let r=Ba(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let o=e.args;for(let l=0;l<o.length;l++){let u=o[l];if(I(u)&&T(u,"...",1)){let c=u.args[0],f=M({expr:c,env:t,context:{...n,SelfType:void 0}});if(!f.$)throw m({token:c.token,errorMessage:`Failed to evaluate the extended struct expression: ${w(c)}`});let p=f.$.value;if(q(p)&&je(p.value)||Ve(p)&&je(p.type)){let _;q(p)&&je(p.value)?_=p.value:_=p.type;for(let d of _.fields){let y=i.findIndex(g=>g.label===d.label);if(y>=0){if(i[y].assignedValue&&d.assignedValue&&an({value:i[y].assignedValue,env:t},{value:d.assignedValue,env:t})||!i[y].assignedValue&&!d.assignedValue&&ie({type:i[y].type,env:t},{type:d.type,env:t}))continue;throw console.log(!!i[y].assignedValue,!!d.assignedValue),console.log(S(i[y].type),`
|
|
10974
10978
|
`,S(d.type),`
|
|
10975
|
-
`,ie({type:i[y].type,env:t},{type:d.type,env:t})),m({token:c.token,errorMessage:`Duplicate label 1 "${d.label}" in module`})}else i.push(d)}}else if(Bt(p)){let _=p;for(let d=0;d<_.fields.length;d++){let y=_.fields[d],g=_.type.fields[d],h=i.findIndex(v=>v.label===g.label);if(h>=0){if(i[h].assignedValue&&g.assignedValue&&an({value:i[h].assignedValue,env:t},{value:g.assignedValue,env:t})||!i[h].assignedValue&&!g.assignedValue&&ie({type:i[h].type,env:t},{type:g.type,env:t}))continue;throw m({token:c.token,errorMessage:`Duplicate label 2 "${g.label}" in module`})}else i.push({..._.type.fields[d],assignedValue:y})}}else throw m({token:c.token,errorMessage:`Expected a Module type or value for extending, got ${w(c)}`})}else{let{field:c,env:f}=ga({expr:u,env:t,moduleFieldIndex:l,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!0});if(i.find(_=>_.label===c.label))throw m({token:
|
|
10976
|
-
${w(e)}`});let a=r,s=o,l=Li(t,a,s);
|
|
10977
|
-
${w(e)}`});return No({expr:e,env:t,context:n})}function
|
|
10978
|
-
${w(r)}`});if(!
|
|
10979
|
+
`,ie({type:i[y].type,env:t},{type:d.type,env:t})),m({token:c.token,errorMessage:`Duplicate label 1 "${d.label}" in module`})}else i.push(d)}}else if(Bt(p)){let _=p;for(let d=0;d<_.fields.length;d++){let y=_.fields[d],g=_.type.fields[d],h=i.findIndex(v=>v.label===g.label);if(h>=0){if(i[h].assignedValue&&g.assignedValue&&an({value:i[h].assignedValue,env:t},{value:g.assignedValue,env:t})||!i[h].assignedValue&&!g.assignedValue&&ie({type:i[h].type,env:t},{type:g.type,env:t}))continue;throw m({token:c.token,errorMessage:`Duplicate label 2 "${g.label}" in module`})}else i.push({..._.type.fields[d],assignedValue:y})}}else throw m({token:c.token,errorMessage:`Expected a Module type or value for extending, got ${w(c)}`})}else{let{field:c,env:f}=ga({expr:u,env:t,moduleFieldIndex:l,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!0});if(i.find(_=>_.label===c.label))throw m({token:I(u)?((s=u.args[0])==null?void 0:s.token)??u.token:u.token,errorMessage:`Duplicate label 3 "${c.label}" in module`});i.push(c),t=f}}let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function No({expr:e,env:t,context:n}){var f;let r=T(e,V.object),i=T(e,V.struct),o=T(e,V.newtype);if(!i&&!r&&!o)throw m({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
|
|
10980
|
+
${w(e)}`});let a=r,s=o,l=Li(t,a,s);Ds({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 _=e.args[p];{let{field:d,env:y}=mi({expr:_,env:t,tupleFieldIndex:p,context:{...n,SelfType:l},forType:"struct"});if(u.find(h=>h.label===d.label))throw m({token:I(_)?((f=_.args[0])==null?void 0:f.token)??_.token:_.token,errorMessage:`Duplicate label "${d.label}" in struct`});u.push(d),t=y}}if(s&&u.length!==1)throw m({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=wi({structType:l,env:t,context:n,errorToken:e.token});let c=ye(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e.func.$=e.$,e}function sd({expr:e,env:t,context:n}){return Oe(e,V.newtype),No({expr:e,env:t,context:n})}function ld({expr:e,env:t,context:n}){if(!T(e,V.object))throw m({token:e.token,errorMessage:`Expected "object", got:
|
|
10981
|
+
${w(e)}`});return No({expr:e,env:t,context:n})}function ud({expr:e,env:t,context:n}){Oe(e,V.Slice,1);let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
10982
|
+
${w(r)}`});if(!q(i.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
|
|
10979
10983
|
${w(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=Ua(o),s=
|
|
10982
|
-
All trait fields are compile-time only by default.`});f=a.args[1],a=a.args[0]}if(u&&f)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(
|
|
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=Ua(o),s=ye(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function fd({lhsExpr:e,env:t,context:n,selfType:r}){if(Y(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(Y(e)){let a=e.token.value,s=pe(t,a);if(s.length>0){let f=s[s.length-1];if(f.value&&q(f.value[0])&&G(f.value[0].value))return{env:t,someType:f.value[0].value,isSelf:!1}}let l=Kn(It(),a,{env:t,context:n}),u=ye(l),{env:c}=Se({env:t,variable:{name:a,type:en(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=M({expr:e,env:t,context:{...n,SelfType:r}});if(!i.$||!i.$.value||!q(i.$.value))throw m({token:e.token,errorMessage:"Expected type for left-hand side of where clause constraint."});let o=i.$.value;if(!G(o.value))throw m({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${S(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function Eg({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;I(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=fd({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=M({expr:s,env:n,context:{...r,SelfType:i}})}catch{return{env:n,success:!1}}if(!u.$||!u.$.value||!q(u.$.value))return{env:n,success:!1};n=u.$.env;let c=u.$.value;if(!Je(c.value))throw m({token:s.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(c.value)}`});let f=c.value;if(f.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(f):o.selfConstraints.push(f)),!l.isSelf){let p=n.frames.length-1;a?l.someType.negativeTraits.some(_=>_.traitType.id===f.id)||l.someType.negativeTraits.push({traitType:f,frameLevel:p}):l.someType.requiredTraits.some(_=>_.traitType.id===f.id)||l.someType.requiredTraits.push({traitType:f,frameLevel:p})}return n=Er({env:n,someType:l.someType,traitType:f,isNegated:a}),{env:n,success:!0}}function cd({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!I(s)||!T(s,"<:",2))throw m({token:s.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${w(s)}`});let l=s.args[0],u=s.args[1],c;try{c=fd({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 f=[];I(u)&&T(u,V.tuple)?f.push(...u.args):f.push(u);for(let p of f){let _=!1,d=p;I(p)&&T(p,"!")&&p.args.length===1&&(_=!0,d=p.args[0]);let y;try{y=M({expr:d,env:t,context:{...n,SelfType:r}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:p,originalConstraintExpr:s});continue}throw v}if(!y.$||!y.$.value||!q(y.$.value)){if(o){a.push({lhsExpr:l,traitExpr:p,originalConstraintExpr:s});continue}throw m({token:d.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=y.$.env;let g=y.$.value;if(!Je(g.value))throw m({token:d.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${S(g.value)}`});let h=g.value;if(h.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(h):i.selfConstraints.push(h)),t=Er({env:t,someType:c.someType,traitType:h,isNegated:_})}}return{env:t,pendingTraits:a}}function $g({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){var h,v,E,k,b,F;let o,a=e,s,l,u,c,f,p,_;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(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.`});f=a.args[1],a=a.args[0]}if(u&&f)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,V.comptime,1))throw m({token:s.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!Y(s)&&!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${w(s)}`});o=s.token.value}else{if(I(a)&&T(a,V.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&&!f)throw m({token:e.token,errorMessage:`Expected label for trait field, got ${w(a)}`});if(s=a,!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${w(s)}`});if(!Y(s)&&!ht(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${w(s)}`});o=s.token.value}let d=(h=r.expectedType)==null?void 0:h.type,y;if(d&&Je(d)){let $=d.fields[t];if(!$)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});y=$.type}if(l){let $=M({expr:l,env:n,context:{...r,expectedType:y?{type:y,env:n}:void 0}});(v=$.$)!=null&&v.env&&(n=(E=$.$)==null?void 0:E.env);let C=(k=$.$)==null?void 0:k.value;if(!q(C))throw m({token:l.token,errorMessage:`Expected type for trait field, got ${w(l)}`});_=C.value}if(f){let $=_?{type:_,env:n}:y?{type:y,env:n}:void 0,C=M({expr:f,env:n,context:{...r,expectedType:$}});if(!C.$)throw m({token:f.token,errorMessage:`Failed to evaluate required value expression: ${w(f)}`});if(n=(b=C.$)==null?void 0:b.env,p=C.$.value,!p)throw m({token:f.token,errorMessage:`Expected compile-time known value for required value, got ${w(f)}`});let A=C.$.type;if($){if(!ie({type:$.type,env:n},{type:A,env:n}))throw m({token:f.token,errorMessage:`Assigned value type mismatch:
|
|
10983
10987
|
Expected type: ${S($.type)}
|
|
10984
|
-
Given type: ${S(
|
|
10988
|
+
Given type: ${S(A)}`});_=$.type}else _=A}if(u){let $=_?{type:_,env:n}:y?{type:y,env:n}:void 0,C=M({expr:u,env:n,context:{...r,expectedType:$}});if(!C.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${w(u)}`});if(n=C.$.env,c=(F=C.$)==null?void 0:F.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${w(u)}`});let A=C.$.type;if($){if(!ie({type:$.type,env:n},{type:A,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
|
|
10985
10989
|
Expected type: ${S($.type)}
|
|
10986
|
-
Given type: ${S(
|
|
10990
|
+
Given type: ${S(A)}`});_=$.type}else _=A}if(!_)throw m({token:e.token,errorMessage:"Failed to infer the field type"});if(i&&ae(_)){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 $ of _.forallParameters)if(!$.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function forall parameter "${$.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 $ of _.parameters)if(!$.exprs.typeExpr)throw m({token:e.token,errorMessage:`Function parameter "${$.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
10994
|
Type expressions are required for return types in trait fields to support proper type specialization.`})}if(i&&u&&!ae(_))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: ${S(_)}
|
|
10992
10996
|
|
|
10993
|
-
To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:_,value:p??le(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:ue,type:ue.type,pathCollection:[]});let g;if(i&&!p&&
|
|
10994
|
-
${w(e)}`});let r=it(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=
|
|
10995
|
-
${w(e)}`});let r=
|
|
10997
|
+
To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:_,value:p??le(_,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:ue,type:ue.type,pathCollection:[]});let g;if(i&&!p&>(_)&&_.level===0){if(o){let $=pe(n,o),C=$[$.length-1];C!=null&&C.value&&q(C.value[0])&&G(C.value[0].value)&&(g=C.value[0].value)}g||(g=Kn(_,o??`__associated_type_${yt(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${yt(n.modulePath)}`,type:_,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:f},defaultValue:c,assignedValue:p,unassignedSomeType:g},env:n}}function _d({expr:e,env:t,context:n}){var f,p;if(!T(e,V.trait))throw m({token:e.token,errorMessage:`Expected "trait", got:
|
|
10998
|
+
${w(e)}`});let r=it(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=dt(t);let o=e.args,a=Kn(It(),"Self",{env:t,context:n});a.trait=r,rr(t,"Runtime")&&(t=An("Runtime",a,t,n));let l;if(o.length>0){let _=o[o.length-1];if(I(_)&&T(_,V.where)&&(l=_.args,l.length===0))throw m({token:_.token,errorMessage:"The where clause must have at least one constraint."})}let u=[];if(l&&l.length>0){let _=cd({constraintExprs:l,env:t,context:n,selfType:a,traitType:r,collectPendingTraits:!0});t=_.env,u=_.pendingTraits}for(let _=0;_<o.length;_++){let d=o[_];if(I(d)&&T(d,V.where)){if(_!==o.length-1)throw m({token:d.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:y,env:g}=$g({expr:d,env:t,traitFieldIndex:_,context:{...n,SelfType:a},isForEvaluatingTraitType:!0});if(i.find(v=>v.label===y.label))throw m({token:I(d)?((f=d.args[0])==null?void 0:f.token)??d.token:d.token,errorMessage:`Duplicate label 3 "${y.label}" in trait`});if(i.push(y),t=g,y.unassignedSomeType){let v=pe(t,y.label),E=v[v.length-1],k=E!=null&&E.value&&q(E.value[0])&&G(E.value[0].value)?E.value[0].value:void 0;if((k==null?void 0:k.id)!==y.unassignedSomeType.id){let b=ye(y.unassignedSomeType),F=((p=y.exprs.labelExpr)==null?void 0:p.token)??y.exprs.expr.token??d.token,{env:$}=Se({env:t,variable:{name:y.label,type:b.type,isCompileTimeOnly:!0,value:[b],token:F,initializedAtToken:F,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=$}}}}if(u.length>0){let _=[];for(let d of u){let y=Eg({lhsExpr:d.lhsExpr,traitExpr:d.traitExpr,originalConstraintExpr:d.originalConstraintExpr,env:t,context:n,selfType:a,traitType:r});t=y.env,y.success||_.push(d)}if(_.length>0){let d=_[0];cd({constraintExprs:[d.originalConstraintExpr],env:t,context:n,selfType:a,traitType:r,collectPendingTraits:!1})}}t=Vt(t,!0);let c=ye(r);return e.$={env:t,value:c,type:c.type,pathCollection:[]},e.func.$=e.$,e}function Cg({args:e,env:t,context:n,forType:r}){var a;let i=[];for(let s=0;s<e.length;s++){let l=e[s],{field:u,env:c}=mi({expr:l,env:t,tupleFieldIndex:s,context:{...n},forType:r});if(u.label&&i.find(p=>p.label===u.label))throw m({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in tuple`});i.push(u),t=c}return{type:za(i),env:t}}function pd({expr:e,env:t,context:n}){if(e.args.length===0){let o=ye(vr());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=Cg({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=wu({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:ye(r),type:en(r),pathCollection:[]},e}function dd({expr:e,env:t,context:n}){var s,l;if(!T(e,V.union))throw m({token:e.token,errorMessage:`Expected "union", got:
|
|
10999
|
+
${w(e)}`});let r=Uu(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let u=0;u<o.length;u++){let c=o[u],{field:f,env:p}=mi({expr:c,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(i.find(d=>d.label===f.label))throw m({token:I(c)?((s=c.args[0])==null?void 0:s.token)??c.token:c.token,errorMessage:`Duplicate label "${f.label}" in union field.`});if(f.defaultValue)throw m({token:((l=f.exprs.defaultValueExpr)==null?void 0:l.token)??f.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(Fi(f.type,t)||!Gr(f.type,t))throw m({token:f.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(Be(f.type))throw m({token:f.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(f),t=p}t=$u({unionType:r,env:t,context:n}),t=Cu({unionType:r,env:t,context:n}),t=bu({unionType:r,env:t,context:n});let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function gs({expr:e,env:t,context:n}){var de,se,K,te,re,we,ce,Q,Pe,ut,at;let r=(de=n.expectedType)==null?void 0:de.type;if(!r)throw m({token:e.token,errorMessage:`Expected a function type, got:
|
|
10996
11000
|
${w(e)}`});let i,o=!1,a,s;if(ae(r))i=r;else if(G(r)){let _e=In(r);if(_e)a=_e,i=_e.isFn.callType,o=!0,s=r;else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
|
|
10997
11001
|
${S(r)}`})}else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
|
|
10998
11002
|
${S(r)}${et(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
|
-
${w(e)}`});let c=e.args[0],f=e.args[1],p=[];
|
|
11004
|
+
${w(e)}`});let c=e.args[0],f=e.args[1],p=[];I(c)&&T(c,V.tuple)?p=c.args:p=[c];let _=[],d=[],y=[];for(let _e=0;_e<p.length;_e++){let Ce=p[_e];if(I(Ce)&&T(Ce,V.forall)){if(_e!==0)throw m({token:Ce.token,errorMessage:"forall(...) must be the first parameter expression"});_=Ce.args}else I(Ce)&&T(Ce,V.using)?d=Ce.args:y.push(Ce)}if(y.length!==i.parameters.length)throw m({token:e.token,errorMessage:`Expected ${i.parameters.length} regular parameters, got ${y.length}`});let g=t;t=dt(pc(t));for(let _e=0;_e<_.length;_e++){let Ce=_[_e],$e=i.forallParameters[_e];if(!Y(Ce))throw m({token:Ce.token,errorMessage:`Expected parameter name for forall parameter, got ${w(Ce)}`});let Ge=Ce.token.value;if(Ge!==$e.label)throw m({token:Ce.token,errorMessage:`Forall parameter name must match expected name.
|
|
11001
11005
|
Expected: "${$e.label}"
|
|
11002
|
-
Got: "${Ge}"`})}for(let _e=0;_e<i.forallParameters.length;_e++){let Ce=_[_e],$e=i.forallParameters[_e],{env:Ge}=
|
|
11006
|
+
Got: "${Ge}"`})}for(let _e=0;_e<i.forallParameters.length;_e++){let Ce=_[_e],$e=i.forallParameters[_e],{env:Ge}=Se({env:t,variable:{name:$e.label,type:$e.type,isCompileTimeOnly:$e.isCompileTimeOnly,value:[le($e.type,{variableName:$e.label,env:t,context:n})],token:(Ce==null?void 0:Ce.token)??ke,initializedAtToken:(Ce==null?void 0:Ce.token)??ke,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=Ge,Ce&&(Ce.$={env:t,type:$e.type,value:le($e.type,{variableName:$e.label,env:t,context:n}),pathCollection:[]})}let h=i.implicitParameters.some(_e=>_e.isEffectRowSpread),v,E;if(h&&d.length>0){v=[];for(let _e of d)if(I(_e)&&T(_e,":",2)){let Ce=_e.args[0],$e=_e.args[1];if(!Y(Ce))throw m({token:Ce.token,errorMessage:`Expected identifier for effect name, got ${w(Ce)}`});let Ge=Ce.token.value,rt=M({expr:nt($e),env:g,context:{...n,isEvaluatingFunctionType:!0}});if(!((se=rt.$)!=null&&se.value)||!q(rt.$.value))throw m({token:$e.token,errorMessage:`Expected a type for effect parameter "${Ge}", got ${w($e)}`});let ct=rt.$.value.value;v.push({label:Ge,type:ct,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:_e,labelExpr:Ce,typeExpr:$e,defaultValueExpr:void 0}})}else if(Y(_e)){let Ce=_e.token.value,Ge=pe(g,Ce).at(-1);if(!Ge)throw m({token:_e.token,errorMessage:`Variable "${Ce}" not found. Cannot infer type for using() parameter.`});v.push({label:Ce,type:Ge.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:_e,labelExpr:_e,typeExpr:_e,defaultValueExpr:void 0}})}else throw m({token:_e.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${w(_e)}`});E=Wr(v);for(let _e of i.implicitParameters)_e.isEffectRowSpread&&G(_e.type)&&_e.type.isEffectsRow&&(_e.type.resolvedConcreteType=E)}else if(d.length>0){let _e=[];for(let $e of d)if(I($e)&&T($e,":",2)){let Ge=$e.args[0],rt=$e.args[1];if(!Y(Ge))throw m({token:Ge.token,errorMessage:`Expected identifier for effect name, got ${w(Ge)}`});let ct=M({expr:nt(rt),env:g,context:{...n,isEvaluatingFunctionType:!0}});if(!((K=ct.$)!=null&&K.value)||!q(ct.$.value))throw m({token:rt.token,errorMessage:`Expected a type for effect parameter "${Ge.token.value}", got ${w(rt)}`});_e.push({name:Ge.token.value,type:ct.$.value.value,nameExpr:Ge})}else if(Y($e))_e.push({name:$e.token.value,type:void 0,nameExpr:$e});else throw m({token:$e.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${w($e)}`});if(_e.some($e=>$e.type!==void 0)){if(_e.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Effect row mismatch: closure declares ${_e.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let $e=new Set,Ge=[];for(let rt=0;rt<_e.length;rt++){let ct=_e[rt];if(!ct.type){Ge.push({...i.implicitParameters[rt],label:ct.name,exprs:{...i.implicitParameters[rt].exprs,expr:ct.nameExpr,labelExpr:ct.nameExpr}}),$e.add(rt);continue}let jt=!1;for(let B=0;B<i.implicitParameters.length;B++){if($e.has(B))continue;let ne=i.implicitParameters[B];if(ie({type:ct.type,env:g},{type:ne.type,env:g})){Ge.push({...ne,label:ct.name,exprs:{...ne.exprs,expr:ct.nameExpr,labelExpr:ct.nameExpr}}),$e.add(B),jt=!0;break}}if(!jt)throw m({token:ct.nameExpr.token,errorMessage:`Effect row type mismatch for "${ct.name}": closure declares ${S(ct.type)}, but no matching resolved effect found.`})}v=Ge,E=Wr(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 k=[];for(let _e=0;_e<v.length;_e++){let Ce=v[_e],$e=E?(te=Ce.exprs)==null?void 0:te.labelExpr:d[_e],Ge=Ce.label;$e&&Y($e)&&(Ge=$e.token.value);let rt;if(ae(Ce.type)){let ne=(re=i.implicitParameters[_e])==null?void 0:re.label,ve=[Ce.label];ne&&ne!==Ce.label&&ve.push(ne);for(let Te of ve){let Ae=pe(g,Te),Fe=Ae[Ae.length-1];if(Fe!=null&&Fe.value&&Fe.value.length>0){let ze=Fe.value[0];if(ze&&be(ze)){rt=ze;break}}}if(!rt){let Ae=Dr(g,Fe=>{var ze;return Fe.isImplicit===!0&&Fe.isCompileTimeOnly===!0&&be((ze=Fe.value)==null?void 0:ze[0])&&ie({type:Ce.type,env:g},{type:Fe.type,env:g})}).at(-1);(we=Ae==null?void 0:Ae.value)!=null&&we[0]&&be(Ae.value[0])&&(rt=Ae.value[0])}}let ct=rt||le(Ce.type,{variableName:Ge,env:t,context:n}),jt=n.isInsideIoAsyncCall&&o&&ae(Ce.type)&&Ce.type.forallParameters.length===0&&!rt;jt&&k.push({name:Ge,type:Ce.type,token:($e==null?void 0:$e.token)??ke});let{env:B}=Se({env:t,variable:{name:Ge,type:Ce.type,isCompileTimeOnly:!jt,isImplicit:!0,value:jt?void 0:[ct],token:($e==null?void 0:$e.token)??ke,initializedAtToken:($e==null?void 0:$e.token)??ke,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:jt||void 0},allowVariableShadowing:!0});t=B,$e&&($e.$={env:t,type:Ce.type,value:jt?void 0:ct,pathCollection:[]})}for(let _e=0;_e<y.length;_e++){let Ce=y[_e],$e=i.parameters[_e];if($e.isCompileTimeOnly){if(!Y(Ce))throw m({token:Ce.token,errorMessage:`Expected parameter name for compile-time parameter, got ${w(Ce)}`});let jt=Ce.token.value;if(jt!=="_"&&jt!==$e.label)throw m({token:Ce.token,errorMessage:`Compile-time parameter name must match expected name.
|
|
11003
11007
|
Expected: "${$e.label}"
|
|
11004
|
-
Got: "${jt}"`})}let Ge=Ce.token.value,
|
|
11008
|
+
Got: "${jt}"`})}let Ge=Ce.token.value,rt=$e.label,{env:ct}=Se({env:t,variable:{name:Ge,type:$e.type,isCompileTimeOnly:$e.isCompileTimeOnly,value:$e.isCompileTimeOnly?[le($e.type,{variableName:$e.label,env:t,context:n})]:void 0,token:Ce.token,initializedAtToken:Ce.token,consumedAtToken:void 0,isOwningTheRcValue:$e.isOwningTheRcValue,parameterAlias:Ge!==rt?rt:void 0}});t=ct,Ce.$={env:t,type:$e.type,value:$e.isCompileTimeOnly?le($e.type,{variableName:$e.label,env:t,context:n}):void 0,pathCollection:[]}}let b=t.frames[t.frames.length-1],F={...i,forallParameters:i.forallParameters,implicitParameters:E?v:v.map((_e,Ce)=>{let $e=d[Ce];if($e&&Y($e)){let Ge=$e.token.value;if(Ge!==_e.label)return{..._e,label:Ge}}return _e}),parameters:i.parameters.map((_e,Ce)=>{if(_e.isCompileTimeOnly)return _e;{let $e=y[Ce];return{..._e,label:Y($e)?$e.token.value:_e.label,exprs:{..._e.exprs,expr:$e,labelExpr:$e,typeExpr:_e.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:b,env:Qa(i.env)};if((ce=F.whereClauseExprs)!=null&&ce.length){let _e=F.whereClauseExprs.map($e=>nt($e));t=pi({constraintExprs:_e,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let $={tag:"Function",type:F,body:f,frameLevel:t.frames.length-1,funcId:`fn_${yt(t.modulePath)}`,definitionSiteEnclosingFunctionType:((Q=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Q.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},C=!!a,A=i.forallParameters.length>0||i.parameters.some(_e=>Ye(_e.type))||i.SelfType&&Ye(i.SelfType),N,x;if(A)Kl({functionBodyExpr:f,functionType:i,functionValue:$,env:t,context:n}),f.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?le(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},N={...n,isExecuting:!1,capturedVariables:new Map},x=f;else{let{evaluationContext:_e}=Lo({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,$,t);if(N=_e,n.isInsideIoAsyncCall&&o&&(N={...N,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),x=Yt({expr:f,env:t,context:N,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!x.$)throw m({token:f.token,errorMessage:"Failed to evaluate the function body."});t=x.$.env}let D=N.capturedVariables;if(Tr(x)&&($.isControlFunction=!0),x.$&&(i.implicitParameters.some(_e=>je(_e.type))||n.isInsideIoAsyncCall)){let _e=ju(x);_e.hasAwaits&&(x.$.awaitAnalysis=_e)}let P=(Pe=x.$)==null?void 0:Pe.type;if(G(i.return.type)&&!i.return.type.resolvedConcreteType&&P&&!G(P)){let _e=Pt({type:P,expectedType:void 0,expr:x,env:t});i.return.type.resolvedConcreteType=_e}if(!$.isControlFunction&&P&&!ie({type:i.return.type,env:t},{type:P,env:t}))throw m({token:f.token,errorMessage:`Incompatible return type:
|
|
11005
11009
|
- Expected: ${S(i.return.type)}
|
|
11006
|
-
- Got : ${S(P)}`});(ut=x.$)!=null&&ut.env&&(t=(at=x.$)==null?void 0:at.env),t=Vt(t,!0),t=g;let U;if(C&&D&&D.size>0&&(U=
|
|
11010
|
+
- Got : ${S(P)}`});(ut=x.$)!=null&&ut.env&&(t=(at=x.$)==null?void 0:at.env),t=Vt(t,!0),t=g;let U;if(C&&D&&D.size>0&&(U=_s({capturedVariables:D,env:t})),C&&k.length>0){U||(U=new Map);for(let _e of k)U.set(_e.name,{frameLevel:0,usageType:"read",token:_e.token,value:void 0,type:_e.type,isEffectParam:!0})}let j,O,z,W,ee=$;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let _e=bo($,t,n);_e&&(ee=_e)}if(o&&a&&s){W=fs({expectedCaptureType:void 0,capturedVariablesWithValues:U,env:t,closureToken:e.token,context:{...n}}).captureType;let Ce=Gu(F,t),{capturedVariableDupExpressions:$e,env:Ge}=ps({capturedVariablesWithValues:U,env:t,context:n});z=$e,t=Ge,$.funcId=`closure_${yt(t.modulePath)}`,$.closureInfo={closureType:Ce,captureType:W,effectParamNames:k.length>0?k.map(rt=>rt.name):void 0},G(s)&&W&&cs({wrapperType:s,captureType:W,env:t,errorToken:e.token}),s.resolvedConcreteType=W,j={...s,resolvedConcreteType:W},O=void 0}else j=ee.type,O=ee;return e.$={env:t,type:j,value:O,pathCollection:C&&D?Fo(D):[],deferredDupExpressions:o&&z?z:void 0,captureType:o?W:void 0,closureFunctionValue:o?ee:void 0,isAnonymousFunctionDefinition:!0},C&&pt(e,!0),e}function md({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&&We(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let f=0;f<r.length;f++){let p=r[f],_=M({expr:p,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(hn(_,n),!_.$)throw m({token:p.token,errorMessage:`Failed to evaluate array element: ${w(p)}`});if(t=_.$.env,s.push(_.$.value),!o)o=a||_.$.type;else if(!ie({type:o,env:t},{type:_.$.type,env:t}))if(ie({type:Pt({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:_.$.type,env:t}))o=_.$.type;else throw m({token:p.token,errorMessage:`Array element type mismatch:
|
|
11007
11011
|
Expected type: ${S(o)}
|
|
11008
|
-
Given type: ${S(_.$.type)}`});l.push(_)}let u=Nr(o,kn("Usize",i)),c=s.every(f=>!!f)?ei(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},pt(e,!0),e}function
|
|
11009
|
-
${w(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!ie({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 ${S(o)}, got ${S(u.$.type)}`})}let a=ur(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function
|
|
11010
|
-
${w(r)}`});let s=a.$.type,l=a;if(!
|
|
11011
|
-
${w(r)}`});t=E.$.env,s=E.$.type,l=E,e.args[0]=E}else t=a.$.env;hn(l,n),t=l.$.env;let u=[],c=[],f=new Set,p;if(n.expectedType&&et(n.expectedType.type))p=n.expectedType.type;else if(Zn(s)){let y=s.fields[0].type;if(y.trait){let g=[];for(let h of y.trait.fields)h.assignedValue&&
|
|
11012
|
-
${S(u)}`});let d=u.fields[t];if(!d)throw m({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});c=d.type}let f=M({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(hn(f,r),!f.$)throw m({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${w(s)}`});n=f.$.env;let p=f.$.value;if(p&&
|
|
11013
|
-
${w(s)}`});return!c||!Ti(c,n)?l=Pt({type:f.$.type,expectedType:void 0,expr:void 0,env:n}):l=f.$.type,o.push(f),e!==s&&(e.$={env:n,type:l,value:p,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},type:l,label:i.toString()},value:p,env:n}}function
|
|
11014
|
-
${w(i)}`});t=o.$.env;let a=o.$.value;if(!
|
|
11015
|
-
Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});
|
|
11012
|
+
Given type: ${S(_.$.type)}`});l.push(_)}let u=Nr(o,kn("Usize",i)),c=s.every(f=>!!f)?ei(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},pt(e,!0),e}function yd(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=Mt(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 gd(e,t){if(e.token.type==="char"){let n=bg(e.token.value),r=kr(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 bg(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 hd({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&&un(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=M({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
|
+
${w(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!ie({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 ${S(o)}, got ${S(u.$.type)}`})}let a=ur(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function vd(e,t,n){let i=pe(t,"Box").find(_=>_.value&&be(_.value[0])&&ae(_.type));if(!i||!i.value||!be(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=ye(e),u=dt(a.env),{env:c}=Se({env:u,variable:{name:s.label,token:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:p}=Ao({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:It()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!q(f)||!qt(f.value))throw new Error("Box type constructor did not return a type value");return{boxType:f.value,env:p}}function kg(e,t,n){var r;try{let i=M({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(be(o))return!!pe(t,"box").find(l=>l.value&&be(l.value[0])&&l.value[0]===o);if(q(o)){let s=o.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function Td({expr:e,env:t,context:n}){Oe(e,V.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&et(n.expectedType.type)){let y=n.expectedType.type;if(o=Kn(It(),"",{requiredTraits:y.requiredTraits.map(g=>g.traitType),negativeTraits:y.negativeTraits.map(g=>g.traitType),env:t,context:n}),I(r)&&kg(r.func,t,{...n})&&T(r.args[0],"=>")){let{boxType:g,env:h}=vd(o,t,n);t=h,i={type:g,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=M({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
|
+
${w(r)}`});let s=a.$.type,l=a;if(!qt(s)&&!(G(s)&&He(s))){let{boxType:y,env:g}=vd(s,t,{...n});t=g;let h={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},v={tag:"FnCall",func:h,args:[a],token:r.token,$:void 0},E=M({expr:v,env:t,context:{...n,expectedType:{type:y,env:t}}});if(!E.$)throw m({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
|
|
11015
|
+
${w(r)}`});t=E.$.env,s=E.$.type,l=E,e.args[0]=E}else t=a.$.env;hn(l,n),t=l.$.env;let u=[],c=[],f=new Set,p;if(n.expectedType&&et(n.expectedType.type))p=n.expectedType.type;else if(Zn(s)){let y=s.fields[0].type;if(y.trait){let g=[];for(let h of y.trait.fields)h.assignedValue&&Wt(h.assignedValue)&&g.push(h.assignedValue.type);p=ea({requiredTraits:g,negativeTraits:[],env:t}),t=Qo({dynType:p,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${V.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${S(y)}`})}else if(s.trait){let y=[];for(let g of s.trait.fields)g.assignedValue&&Wt(g.assignedValue)&&y.push(g.assignedValue.type);p=ea({requiredTraits:y,negativeTraits:[],env:t}),t=Qo({dynType:p,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${V.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${S(s)}`});let _=[];if(Zn(s)){let y=s.fields[0].type;(G(y)||et(y))&&_.push(...y.negativeTraits.map(g=>g.traitType)??[])}for(let{traitType:y}of p.requiredTraits)for(let g of _)if(ie({type:y,env:t},{type:g,env:t}))throw m({token:e.token,errorMessage:`Required trait ${S(y)} is in the negative traits list and cannot be used.`});for(let{traitType:y}of p.requiredTraits)if(!f.has(y))if(Zn(s)&&(G(s.fields[0].type)||et(s.fields[0].type))){let g=s.fields[0].type,h=!1,v=g.requiredTraits.map(E=>E.traitType);for(let E of v)if(ie({type:y,env:t},{type:E,env:t})){let k=[];for(let F=0;F<y.fields.length;F++){let $=y.fields[F],C=E.fields.findIndex(A=>A.label===$.label);C===-1?k.push(void 0):k.push(E.fields[C].assignedValue)}let b=ji(y,k);c.push(b),u.push(b.type),f.add(y),h=!0;break}if(!h)throw m({token:e.token,errorMessage:`Required trait ${S(y)} not found in SomeType's requiredTraits.`})}else{let g=Zn(s)?s.fields[0].type:s;if(g.trait){let h=!1;for(let v of g.trait.fields)if(v.assignedValue&&Wt(v.assignedValue)&&ie({type:y,env:t},{type:v.assignedValue.type,env:t})){c.push(v.assignedValue),u.push(v.assignedValue.type),f.add(y),h=!0;break}if(!h)throw m({token:e.token,errorMessage:`Required trait ${S(y)} is not implemented by type ${S(s)}.`})}else throw m({token:e.token,errorMessage:`Cannot find trait ${S(y)} for value type ${S(s)}.`})}let d=[];for(let{traitType:y}of p.requiredTraits){let g=u.findIndex(h=>ie({type:y,env:t},{type:h,env:t}));if(g===-1)throw m({token:e.token,errorMessage:`No trait value found for expected trait type ${S(y)}.`});d.push(c[g])}return e.$={env:t,value:void 0,type:p,pathCollection:a.$.pathCollection,dynCallTraitValues:d},pt(e,!0),e}function Ed(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;Wo(a)?i="F32":qo(a)&&(i="F64")}let o=kn(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 $d(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;Do(u)?o="Usize":Mo(u)?o="Isize":yr(u)?o="U8":Oo(u)?o="I8":Ro(u)?o="U16":Po(u)?o="I16":Uo(u)?o="U32":zo(u)?o="I32":Bo(u)?o="U64":Go(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=kn(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 Cd(e,t){if(e.token.type==="string"){let n=Mn(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 wg({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){var _;let a=e,s=e,l;if(I(a)&&T(a,":",2)){let d=a.args[0];throw m({token:d.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(_=r.expectedType)==null?void 0:_.type,c;if(u){if(!qe(u))throw m({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
|
|
11016
|
+
${S(u)}`});let d=u.fields[t];if(!d)throw m({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});c=d.type}let f=M({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(hn(f,r),!f.$)throw m({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${w(s)}`});n=f.$.env;let p=f.$.value;if(p&&q(f.$.value))throw m({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
|
|
11017
|
+
${w(s)}`});return!c||!Ti(c,n)?l=Pt({type:f.$.type,expectedType:void 0,expr:void 0,env:n}):l=f.$.type,o.push(f),e!==s&&(e.$={env:n,type:l,value:p,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},type:l,label:i.toString()},value:p,env:n}}function Fg({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:f,env:p}=wg({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(f),t=p}let a=za(r),s=i.some(l=>!l)?void 0:La(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function bd({expr:e,env:t,context:n}){if(!T(e,V.tuple))throw m({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:ue,type:ue.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=Fg({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},pt(e,!0),e}function hs({expr:e,env:t,context:n}){var p,_;if(!T(e,":",2))throw m({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],i=e.args[1],o=M({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate rhs expression:
|
|
11018
|
+
${w(i)}`});t=o.$.env;let a=o.$.value;if(!q(a))throw m({token:i.token,errorMessage:`Expected type for rhs, got ${w(i)}`});let s=a.value;if(We(s)&&Ve(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)'`});zr(s,o.token);let l=!1,u=!1;if(I(r)&&T(r,V.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(I(r)&&T(r,V.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&&((p=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:p.kind)==="function-body"&&((_=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&_.type.return.isCompileTimeOnly))throw m({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!ht(r))throw m({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(Fr(s,t)&&!l)throw m({token:r.token,errorMessage:`Expected "comptime" for compile-time known value binding:
|
|
11016
11020
|
${S(s)}`});if(Lr(s,t)&&l)throw m({token:r.token,errorMessage:`Unexpected "comptime" for ${S(s)} which can only be used at runtime.`});let c=r.token.value;if(!l&&ae(s)&&jn(s))throw m({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
|
|
11017
11021
|
${S(s)}
|
|
11018
11022
|
|
|
11019
11023
|
Generic functions must be compile-time known to enable monomorphization. Consider using:
|
|
11020
|
-
comptime(${c}) : ${S(s)}`});let{env:f}=
|
|
11021
|
-
You can mutate fields (e.g., ${C}.field = value) but cannot reassign itself.`});if(i=M({expr:i,env:t,context:{...n,expectedType:{type:N.type,env:t},isInsideGivenHandler:N.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${w(i)}`});t=i.$.env,Ci(i,t),ai(i),hn(i,n),t=i.$.env,Ut((s=i.$)==null?void 0:s.controlFlow)&&
|
|
11022
|
-
${de}`})}if(N.isCompileTimeOnly||(x=Pt({type:x,expectedType:N.type,expr:i,env:t})),!ie({type:N.type,env:t},{type:x,env:t}))if(ao(N.type))try{let{expr:de,type:se,env:
|
|
11024
|
+
comptime(${c}) : ${S(s)}`});let{env:f}=Se({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[le(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Be(s),isImplicit:u}});return t=f,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:ue.type,value:ue,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function vs({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var o,a,s,l;let i=e.token.value;if(i==="Type"){let u=ye(It());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Module"){let u=ye(Un(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Trait"){let u=ye(Un(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="unit"){let u=ye(vr());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_int"){let u=ye(ti());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_float"){let u=ye(Ki());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_string"){let u=ye(gn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="bool"){let u=ye(Ct());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="usize"){let u=ye(Ht());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="isize"){let u=ye(Xi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u8"){let u=ye(Qi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i8"){let u=ye(Zi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u16"){let u=ye(Ji());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i16"){let u=ye(eo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u32"){let u=ye(to());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i32"){let u=ye(ni());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u64"){let u=ye(no());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i64"){let u=ye(ro());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f32"){let u=ye(io());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f64"){let u=ye(ri());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="char"){let u=ye(Lu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="short"){let u=ye(Au());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ushort"){let u=ye(Iu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="int"){let u=ye(Nu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="uint"){let u=ye(xu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="long"){let u=ye(Su());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulong"){let u=ye(Vu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longlong"){let u=ye(Du());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulonglong"){let u=ye(Mu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longdouble"){let u=ye(Ou());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="void"){let u=ye(Ru());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Expr"){let u=ye(On());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let u=ye(n.SelfType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else{let u=pe(t,i);if(u.length){let c=u[u.length-1];if(!c.initializedAtToken&&r&&!ae(c.type)&&!q((o=c.value)==null?void 0:o[0]))throw m({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let f=c.type.isExtern==="c"&&Ve((a=c.value)==null?void 0:a[0])&&!(ae(c.type)||gt(c.type))||(s=c.value)==null?void 0:s[0];if(e.$={env:t,type:c.type,value:f,originType:c.type,variableName:c.name,pathCollection:[[c.name]],sourceVariable:c},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<p&&wo(c.name,c.frameLevel,"own",e.token,n)}if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)==="async-block"){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<p&&wo(c.name,c.frameLevel,"own",e.token,n)}return e}else throw m({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function Ql(e,t){let n=gu(t),r=`Right-hand side contains "${n}" from function.`;throw I(e)&&T(e,V.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.`:I(e)&&T(e,V.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.`:I(e)&&T(e,V.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),m({token:e.token,errorMessage:r})}function Lg(e,t){var n;if(We(e)&&Ve(e.length)){let r=e.length;if(r.variableName){let i=pe(t,r.variableName);if(i.length>0){let o=i[i.length-1];if((n=o.value)!=null&&n[0]&&!Ve(o.value[0]))return Nr(e.childType,o.value[0])}}}return e}function kd({expr:e,env:t,context:n}){var o,a,s,l,u,c,f,p,_,d,y,g,h,v,E,k,b,F,$;if(!T(e,"=",2))throw m({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(Y(r)||I(r)&&T(r,":",2)){let C;if(Y(r)){let de=vs({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!de.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${w(r)}`});t=de.$.env,r=de,C=r.token.value}else{let{expr:de,variableExpr:se,variableName:K}=hs({expr:r,env:t,context:{...n}});(o=de.$)!=null&&o.env&&(t=(a=de.$)==null?void 0:a.env),r=se,C=K}let A=pe(t,C);if(!A.length)throw m({token:r.token,errorMessage:`Variable ${C} not found in the environment`});let N=A[A.length-1];if(!N.isReassignable)throw m({token:r.token,errorMessage:`Cannot reassign "${C}".
|
|
11025
|
+
You can mutate fields (e.g., ${C}.field = value) but cannot reassign itself.`});if(i=M({expr:i,env:t,context:{...n,expectedType:{type:N.type,env:t},isInsideGivenHandler:N.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${w(i)}`});t=i.$.env,Ci(i,t),ai(i),hn(i,n),t=i.$.env,Ut((s=i.$)==null?void 0:s.controlFlow)&&Ql(i,i.$.controlFlow);let x=(l=i.$)==null?void 0:l.type;if(!x)try{let{expr:de,type:se,env:K}=Xr({expr:i,type:N.type,env:t,context:{...n}});i=de,x=se,t=K}catch(de){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${w(i)}
|
|
11026
|
+
${de}`})}if(N.isCompileTimeOnly||(x=Pt({type:x,expectedType:N.type,expr:i,env:t})),!ie({type:N.type,env:t},{type:x,env:t}))if(ao(N.type))try{let{expr:de,type:se,env:K}=Xr({expr:i,type:N.type,env:t,context:{...n}});if(ie({type:N.type,env:K},{type:se,env:K})){i=de,x=se,t=K;let te=Lg(N.type,t);t=mt(t,N,{...N,type:te})}else throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11023
11027
|
- Expected: ${S(N.type)}
|
|
11024
11028
|
- Given : ${S(x)}`})}catch{throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11025
11029
|
- Expected: ${S(N.type)}
|
|
11026
11030
|
- Given : ${S(x)}`})}else throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11027
11031
|
- Expected: ${S(N.type)}
|
|
11028
|
-
- Given : ${S(x)}`});let D=pe(t,C),P=D[D.length-1],U=(u=i.$)==null?void 0:u.value;
|
|
11032
|
+
- Given : ${S(x)}`});let D=pe(t,C),P=D[D.length-1],U=(u=i.$)==null?void 0:u.value;q(U)&&!U.value.typeName?(U.value!==n.SelfType&&(U.value.typeName=C),gt(P.type)&&!P.type.baseType&&(P.type.baseType=U.value)):be(U)&&!U.funcName?(U.funcName=C,U.funcId+=`_${r.token.value}`):(Bt(U)||Wt(U))&&!U.type.typeName&&U.type!==n.SelfType&&(U.type.typeName=C);let j=P.type;Me(j)&&Me(x)&&j.selectedVariantName!==x.selectedVariantName&&(j={...j,selectedVariantName:x.selectedVariantName}),G(j)&&G(x)&&x.resolvedConcreteType&&(j={...j,resolvedConcreteType:x.resolvedConcreteType});let O=!1,z=N.isOwningTheSameRcValueAs;if(N.initializedAtToken){if(G(j))throw St([{token:r.token,errorMessage:`Cannot reassign variable "${C}" 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:N.initializedAtToken??N.token,errorMessage:"First assigned here:"}]);if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let
|
|
11031
|
-
${
|
|
11032
|
-
- Expected: ${S(
|
|
11033
|
-
- Given : ${S(N)}`});let x=!1;if(C.$.pathCollection&&C.$.pathCollection.length>0){let
|
|
11034
|
+
Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:N.initializedAtToken??N.token,errorMessage:"First assigned here:"}]);if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let re=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;N.frameLevel<re&&wo(N.name,N.frameLevel,"own",r.token,n)}let de=N.isCompileTimeOnly&&U?xn(U):void 0,se=$i(t.modulePath,C),K=na(i,t,t.modulePath),te=K;K!=null&&K.consumedAtToken&&(te=void 0),t=mt(t,N,{...N,id:se,value:de?[de]:void 0,type:j,isOwningTheRcValue:Be(j),isOwningTheSameRcValueAs:te}),O=!0}else{if(n.isEvaluatingLoopBody&&N.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw St([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:N.token,errorMessage:"Defined here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&N.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw St([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:N.token,errorMessage:"Defined here:"}]);let de=N.isCompileTimeOnly&&U?xn(U):void 0,se=na(i,t,t.modulePath),K=se;se!=null&&se.consumedAtToken&&(K=void 0),t=mt(t,N,{...N,initializedAtToken:r.token,value:de?[de]:void 0,type:j,isOwningTheRcValue:Be(j),isOwningTheSameRcValueAs:K})}let W=pe(t,C),ee=W[W.length-1];return r.$={env:t,type:ee.type,value:ee.isCompileTimeOnly?U:void 0,pathCollection:[[C]]},O?(e.$={env:t,value:(p=N.value)==null?void 0:p[0],type:N.type,pathCollection:[],isCompileTimeOnlyAssignment:N.isCompileTimeOnly},pt(e,!0,(z==null?void 0:z.frameLevel)===t.frames.length-1?z:void 0)):e.$={env:t,value:ue,type:ue.type,pathCollection:[],isCompileTimeOnlyAssignment:N.isCompileTimeOnly},e}else{let C=M({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!C.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${w(r)}`});if(((_=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:_.kind)==="function-body"&&C.$.pathCollection){for(let j of C.$.pathCollection)if(j.length>0){let O=j[0];if(typeof O=="string"){let z=pe(t,O);if(z.length>0){let W=z[z.length-1];wo(O,W.frameLevel,"write",r.token,n)}}}}let A=C.$.type;if(i=M({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: ${w(i)}`});t=i.$.env,Ci(i,t),ai(i),hn(i,n),t=i.$.env;let N=(d=i.$)==null?void 0:d.type;if(!N)try{let{expr:j,type:O,env:z}=Xr({expr:i,type:A,env:t,context:{...n}});i=j,N=O,t=z}catch(j){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${w(i)}
|
|
11035
|
+
${j}`})}if(!ie({type:A,env:t},{type:N,env:t}))throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11036
|
+
- Expected: ${S(A)}
|
|
11037
|
+
- Given : ${S(N)}`});let x=!1;if(C.$.pathCollection&&C.$.pathCollection.length>0){let j=C.$.pathCollection[0];if(j&&j.length>=2){let O=j[0],z=j[1],W=pe(t,O);if(W.length>0){let ee=W[W.length-1];if(ee.isCompileTimeOnly&&((y=ee.value)!=null&&y[0])){let de=ee.value[0];if((g=i.$)!=null&&g.value&&(x=!0),qn(de)||zn(de)){let se=ee.type,K=se.fields.findIndex(te=>te.label===z);if(K>=0&&((h=i.$)!=null&&h.value))if(Ie(ee.type)&&ee.type.isReferenceSemantics){let te=[...de.fields];te[K]=i.$.value;let re=cr(ee.type,te),we=Dr(t,ce=>{var Q;return ce.isCompileTimeOnly&&((Q=ce.value)==null?void 0:Q[0])===de});for(let ce of we)t=mt(t,ce,{...ce,value:[re]})}else{let te=[...de.fields];te[K]=i.$.value;let re;qn(de)?re=cr(se,te):re=La(se,te),t=mt(t,ee,{...ee,value:[re]})}}else if(lr(de)){let se=parseInt(z,10);if(!isNaN(se)&&se>=0&&se<de.elements.length&&((v=i.$)!=null&&v.value)){let K=[...de.elements];K[se]=i.$.value;let te=ee.type,re=ei(te,K);t=mt(t,ee,{...ee,value:[re]})}}else if(_n(de)){let se=ee.type,K=se.variants.find(te=>te.name===de.variantName);if(K){let te=(K.fields??[]).findIndex(re=>re.label===z);if(te>=0&&((E=i.$)!=null&&E.value)){let re=[...de.fields];re[te]=i.$.value;let we=hi(se,de.variantName,re);t=mt(t,ee,{...ee,value:[we]})}}}}}}}let D=C.$.ptrTargetValue,P=C.$.ptrTargetIndex??0;if(D&&((k=i.$)!=null&&k.value)){let j=D[0];lr(j)?j.elements[P]=i.$.value:D[0]=i.$.value,x=!0}let U=C.$.arrayElementRef;return U&&((b=i.$)!=null&&b.value)&&(U.arrayValue.elements[U.index]=i.$.value,x=!0),!x&&((F=C.$)==null?void 0:F.value)!==void 0&&(($=i.$)==null?void 0:$.value)!==void 0&&(x=!0),e.$={env:t,value:C.$.value,type:C.$.type,pathCollection:[],isCompileTimeOnlyAssignment:x},x||pt(e,!0),e}}function wd({expr:e,env:t,context:n}){var a;if(!T(e,V.c_include))throw m({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&Y(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=M({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw m({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${w(s)}`});t=l.$.env;let u=l.$.value;if(!Tt(u))throw m({token:s.token,errorMessage:`Expected string for C header file argument, got ${w(s)}`});r=u.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 s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=ga({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(_=>_.label===u.label))throw m({token:
|
|
11039
|
+
c_include "<stdio.h>" ...;`});let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=ga({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(_=>_.label===u.label))throw m({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});gt(u.type)||ae(u.type)?u.type={...u.type,isExtern:"c",cInclude:r,externName:u.label}:u.type={...u.type,isExtern:"c",cInclude:r},o.push(u),t=c;let{env:p}=Se({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??le(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=p}return e.$={env:t,value:ue,type:ue.type,pathCollection:[]},e.func.$={env:t,value:ue,type:ue.type,pathCollection:[]},e}function Fd({expr:e,env:t,context:n}){var c,f,p,_,d,y,g;if(!T(e,V.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 h=0;h<r.length;h++){let v=r[h];if(!I(v)||!T(v,"=>",2))throw m({token:v.token,errorMessage:`Expected => for cond statement, got ${v.tag}`});let E=v.args[0],k=v.args[1],b=t;i.push({condExpr:E,caseBodyExpr:k,caseEnv:b})}let o=[];for(let h=0;h<i.length;h++){let{condExpr:v,caseBodyExpr:E,caseEnv:k}=i[h],b=Y(v)?M({expr:v,env:k,context:{...n,expectedType:{type:Ct(),env:k}}}):Yt({expr:v,env:k,context:{...n,expectedType:{type:Ct(),env:k}},variablesToAdd:[]});if(!b.$)throw m({token:b.token,errorMessage:`Failed to evaluate condition expression: ${w(b)}`});if(!Wn(b.$.type))throw m({token:b.token,errorMessage:`Expected bool for cond statement, got ${w(b)} of type ${S(b.$.type)}`});let F=b.$.value,$=b.$.env;if(h===i.length-1&&!(_t(F)&&F.value===!0))throw m({token:b.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:b,caseBodyExpr:E,caseEnv:$,condValue:F}),_t(F)&&F.value===!0)break}let a=-1;for(let h=0;h<o.length;h++){let{condValue:v}=o[h];if(_t(v)&&v.value===!0&&o.slice(0,h).every(({condValue:E})=>_t(E)&&E.value===!1)){a=h;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:h,caseEnv:v,condExpr:E}=o[a];E.$&&(E.$.caseExecuted=!0);let k=Yt({expr:h,env:v,context:{...n},variablesToAdd:[]});if(Ut((c=k.$)==null?void 0:c.controlFlow))return e.$={env:k.$.env,type:((f=n.expectedType)==null?void 0:f.type)??k.$.type,value:k.$.value,pathCollection:k.$.pathCollection,controlFlow:k.$.controlFlow},e;{if(!((p=k.$)!=null&&p.type))throw m({token:k.token,errorMessage:`Expected type for cond statement, got ${w(k)}`});s.push(k),l.push(k.$.value),u={type:k.$.type,env:k.$.env},t=k.$.env;let b;return b=l[0],e.$={env:t,type:((_=n.expectedType)==null?void 0:_.type)??u.type,value:b,pathCollection:[],variableName:k.$.variableName},k.$.variableName||pt(e,!0),e}}else{let h=!1,v=[],E=[];for(let{condExpr:b,condValue:F,caseBodyExpr:$,caseEnv:C}of o){if(_t(F)&&F.value===!1)continue;b.$&&(b.$.caseExecuted=!0);let A=Yt({expr:$,env:C,context:{...n,isExecuting:!1},variablesToAdd:[]});if(Ut((d=A.$)==null?void 0:d.controlFlow)){v.push(A.$.controlFlow),Nt(A.$.controlFlow,"return")&&E.push(A);continue}else h=!0;if(!((y=A.$)!=null&&y.type))throw m({token:A.token,errorMessage:`Expected type for cond statement, got ${w(A)}`});if(s.push(A),l.push(A.$.value),n.expectedType&&!ie(n.expectedType,{type:A.$.type,env:A.$.env}))throw m({token:A.token,errorMessage:`Incompatible type with expected type:
|
|
11036
11040
|
- Expected: ${S(n.expectedType.type)}
|
|
11037
|
-
- Actual : ${S(
|
|
11041
|
+
- Actual : ${S(A.$.type)}`});if(!Ut(A.$.controlFlow)){if(!u)u={type:A.$.type,env:A.$.env};else if(!ie({type:u.type,env:u.env},{type:A.$.type,env:A.$.env}))if(ie({type:Pt({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:A.$.type,env:A.$.env}))u={type:A.$.type,env:A.$.env};else throw m({token:A.token,errorMessage:`Incompatible types:
|
|
11038
11042
|
- Previous: ${S(u.type)}
|
|
11039
|
-
- Current : ${S(
|
|
11043
|
+
- Current : ${S(A.$.type)}`})}}let k=v.length>0?Xo(v):void 0;if(h||!Ut(k)){if(h&&!u)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:ue.type,env:t}),t=uo(t,s.filter(F=>F.$&&!Nt(F.$.controlFlow,"return")&&!Nt(F.$.controlFlow,"escape")));let b;return l.some(F=>F===void 0)?b=void 0:b=le(u.type,{env:t,context:n}),e.$={env:t,type:((g=n.expectedType)==null?void 0:g.type)??u.type,value:b,pathCollection:[]},pt(e,!0),e}else{if(v.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(Nt(k,"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 b;if(E.length>0&&E[0].$?b=E[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?b=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(b=n.expectedType.type),!b)throw m({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:b,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Yo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?le(b,{env:t,context:n}):void 0,pathCollection:[],controlFlow:k}}else if(Nt(k,"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 b=n.enclosingFunctionReturnType;e.$={env:t,type:b,value:void 0,pathCollection:[],controlFlow:k}}else if(Nt(k,"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:ue.type,value:ue,pathCollection:[],controlFlow:k}}else if(Nt(k,"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:ue.type,value:ue,pathCollection:[],controlFlow:k}}return e}}}function Ld({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=zi({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(!G(r)&&!ie({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): ${S(r)}
|
|
11041
|
-
- Got: ${S(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:oi("escape")},e}function
|
|
11045
|
+
- Got: ${S(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:oi("escape")},e}function Ad({expr:e,env:t,context:n}){var a;if(!T(e,V.extern))throw m({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",i=e.args;if(e.args[0]&&Y(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=M({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw m({token:s.token,errorMessage:`Failed to evaluate language argument: ${w(s)}`});t=l.$.env;let u=l.$.value;if(!Tt(u))throw m({token:s.token,errorMessage:`Expected string for language argument, got ${w(s)}`});if(u.value.toLocaleLowerCase()==="yo")r="yo";else if(u.value.toLocaleLowerCase()==="c")r="c";else throw m({token:s.token,errorMessage:`Unsupported language "${u.value}" for extern, expected "c" or "yo"`})}let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=ga({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(_=>_.label===u.label))throw m({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});gt(u.type)||ae(u.type)?u.type={...u.type,isExtern:r,externName:u.label,...u.label==="__yo_io_async"?{ioBuiltin:"io_async"}:{},...u.label==="__yo_io_await"?{ioBuiltin:"io_await"}:{},...u.label==="__yo_io_state"?{ioBuiltin:"io_state"}:{},...u.label==="__yo_io_spawn"?{ioBuiltin:"io_spawn"}:{}}:u.type={...u.type,isExtern:r},o.push(u),t=c;let{env:p}=Se({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??le(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=p}return e.$={env:t,value:ue,type:ue.type,pathCollection:[]},e.func.$={env:t,value:ue,type:ue.type,pathCollection:[]},e}var Zl=require("fs"),Cr=$s(require("path"));function Id({expr:e,env:t,context:n,stdPath:r}){var c;if(!T(e,V.import,1))throw m({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
|
|
11042
11046
|
${w(e)}`});let i=e.args[0],a=(c=M({expr:i,env:t,context:{...n}}).$)==null?void 0:c.value;if(!Tt(a))throw m({token:i.token,errorMessage:`Expected comptime_string for module path, got:
|
|
11043
11047
|
${w(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=Cr.default.relative(Cr.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Cr.default.resolve(r,s.replace("std/","./"))),s.startsWith(".")||(s="./"+s)):s==="std"&&(s=Cr.default.relative(Cr.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Cr.default.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
|
${w(e)}
|
|
11045
|
-
${s}`});let l="file://"+Cr.default.resolve(Cr.default.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!Cr.default.extname(l)){let f=l.replace(/^file:\/\//,"")+".yo",p=Cr.default.join(l.replace(/^file:\/\//,""),"index.yo"),_=(0,
|
|
11046
|
-
${f instanceof Rn||f instanceof tr?f.toString():f instanceof Error?f.message:String(f)}`})}}function
|
|
11049
|
+
${s}`});let l="file://"+Cr.default.resolve(Cr.default.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!Cr.default.extname(l)){let f=l.replace(/^file:\/\//,"")+".yo",p=Cr.default.join(l.replace(/^file:\/\//,""),"index.yo"),_=(0,Zl.existsSync)(f),d=(0,Zl.existsSync)(p);if(_&&d)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(_)l="file://"+f;else if(d)l="file://"+p;else throw m({token:i.token,errorMessage:`Module not found: tried "${"file://"+f}" and "${p}"`})}if(!n.loadModule)throw m({token:i.token,errorMessage:"Module loader is not provided in the context."});try{let{moduleValue:f}=n.loadModule(l);return e.$={env:t,type:f.type,value:f,pathCollection:[]},e}catch(f){throw m({token:i.token,errorMessage:`Failed to import module "${s}":
|
|
11050
|
+
${f instanceof Rn||f instanceof tr?f.toString():f instanceof Error?f.message:String(f)}`})}}function Jl({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:i,lhs:o,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!qe(i),c=e.token.value;if(u&&c!=="_")throw m({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${c}"`});if(Rt(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 f={};for(let _=0;_<t.length;_++){let d=t[_],y=_,g,h=n[y],v,E,k,b;if(I(d)&&T(d,":",2)&&d.args[0].token.value==="..."&&d.args[1].token.value==="..."||Y(d)&&d.token.value==="..."){if(Rt(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with _, got ${S(i)}`});for(let F=0;F<n.length;F++){let $=n[F];if(f[$.label])continue;f[$.label]={label:$.label,variableName:$.label,type:$.type};let C=zn(r)||qn(r)||Bt(r)||_n(r)?r.fields[F]:void 0;if(!C&&s)throw m({token:d.token,errorMessage:`Destructuring field "${$.label}" is not defined in compile-time only context.`});let{env:A}=Se({env:a,variable:{name:$.label,value:C?[xn(C)]:void 0,type:$.type,isCompileTimeOnly:s,token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=A}d.$={env:a,type:i,value:r,pathCollection:[]};continue}else if(I(d)&&T(d,":",2)){let F=d.args[0],$=d.args[1];if(!Y(F)||!ht(F))throw m({token:F.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${w(F)}`});k=F;let C=k.token.value,A=n.findIndex(x=>x.label===C);if(A===-1)throw m({token:d.token,errorMessage:`Label "${C}" being destructured not found.`});y=A,h=n[y];let N;if((zn(r)||qn(r)||Bt(r)||_n(r))&&(N=r.fields[y]),g=N,Y($)&&ht($))b=$,v=$.token.value,E=$.token;else throw m({token:$.token,errorMessage:`Nested destructuring is not supported:
|
|
11047
11051
|
|
|
11048
|
-
${w($)}`});if(f[h.label])throw m({token:d.token,errorMessage:`Label "${C}" being destructured already exists.`});f[h.label]={label:h.label,variableName:v,type:h.type}}else{if(
|
|
11052
|
+
${w($)}`});if(f[h.label])throw m({token:d.token,errorMessage:`Label "${C}" being destructured already exists.`});f[h.label]={label:h.label,variableName:v,type:h.type}}else{if(I(d))throw m({token:d.token,errorMessage:`Nested destructuring is not supported:
|
|
11049
11053
|
|
|
11050
|
-
${w(d)}`});if(Y(d)&&
|
|
11054
|
+
${w(d)}`});if(Y(d)&&ht(d)){if(Rt(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${S(i)}`});if(f[h.label])throw m({token:d.token,errorMessage:`Label "${h.label}" being destructured already exists.`});f[h.label]={label:h.label,variableName:d.token.value,type:h.type},(zn(r)||qn(r)||_n(r)||Bt(r))&&(g=r.fields[y]),v=d.token.value,E=d.token}else throw m({token:d.token,errorMessage:`Unsupported destructuring pattern for: ${w(d)}`})}if(v&&E){if(!g&&s)throw m({token:d.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:F}=Se({env:a,variable:{name:v,type:h.type,isCompileTimeOnly:s,value:g?[xn(g)]:void 0,token:E,initializedAtToken:E,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=F,d.$={env:a,type:h.type,value:g,pathCollection:[]},k&&(k.$={env:a,type:h.type,value:g,pathCollection:[]}),b&&(b.$={env:a,type:h.type,value:g,pathCollection:[]})}}let p=[];for(let _ in f){let d=f[_];p.push({label:d.label,type:d.type,variableName:d.variableName})}return{env:a,runtimeDestructurings:p}}function Nd({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:i}){var s;if(!((s=t.$)!=null&&s.type))throw m({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${w(t)}`});let o=t.$.type,a=t.$.value;if((Ie(o)||Rt(o)||je(o))&&I(e))return Jl({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:Y(t)});if(qe(o)&&I(e)&&T(e,V.tuple))return Jl({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:Y(t)});if(Me(o)&&I(e)){let l=o.selectedVariantName;if(!l)throw m({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${S(o)}`});let u=o.variants.find(c=>c.name===l);if(!u)throw m({token:t.token,errorMessage:`Expected enum variant "${l}" to be defined, got ${S(o)}`});if(!u.fields)throw m({token:t.token,errorMessage:`Cannot destructure enum variant "${l}" without fields, got ${S(o)}`});return Jl({lhsFunc:e.func,lhsFields:e.args,rhsFields:u.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:Y(t)})}throw qe(o)||Ie(o)||Rt(o)||je(o)?m({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
|
|
11051
11055
|
|
|
11052
11056
|
${w(e)}`}):m({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
|
|
11053
11057
|
|
|
11054
|
-
${S(o)}`})}function
|
|
11055
|
-
(${w(l)}) = ${w(a)}`});if(a=M({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),(c=a.$)!=null&&c.env&&(t=(f=a.$)==null?void 0:f.env),(p=a.$)!=null&&p.type&&
|
|
11058
|
+
${S(o)}`})}function xd({expr:e,env:t,context:n}){var u,c,f,p,_,d,y,g,h,v,E;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&&((u=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:u.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(I(o)&&T(o,V.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(I(l)&&T(l,":"))throw m({token:l.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
|
|
11059
|
+
(${w(l)}) = ${w(a)}`});if(a=M({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),(c=a.$)!=null&&c.env&&(t=(f=a.$)==null?void 0:f.env),(p=a.$)!=null&&p.type&&zr(a.$.type,a.token),Ut((_=a.$)==null?void 0:_.controlFlow)&&Ql(a,a.$.controlFlow),ai(a),Y(l)){if(Ci(a,t),hn(a,{...n}),(d=a.$)!=null&&d.env&&(t=(y=a.$)==null?void 0:y.env),!ht(l))throw m({token:l.token,errorMessage:`Invalid assignment to ${l.token.value}, expected identifier or operator`});let k=s||r,b=s?!1:i,F=(g=a.$)==null?void 0:g.type;if((h=l.$)!=null&&h.type){try{let{expr:D,type:P,env:U}=Xr({expr:a,type:(v=l.$)==null?void 0:v.type,env:t,context:{...n}});a=D,F=P,t=U}catch(D){throw m({token:a.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${w(a)}
|
|
11056
11060
|
${D}`})}if(!ie({type:l.$.type,env:t},{type:F,env:t}))throw m({token:l.token,errorMessage:`Incompatible types:
|
|
11057
11061
|
- Defined: ${S(l.$.type)}
|
|
11058
11062
|
- Given : ${S(F)}`})}else{if(!F)throw m({token:a.token,errorMessage:`Failed to evaluate, got ${w(a)}`});let D=F;b&&(D=Pt({type:F,expectedType:void 0,expr:a,env:t})),l.$={...l.$,env:t,type:D,pathCollection:[]}}if(!k&&Fr(l.$.type,t))throw m({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
|
|
@@ -11060,15 +11064,15 @@ ${w(e)}
|
|
|
11060
11064
|
|
|
11061
11065
|
Type:
|
|
11062
11066
|
${S(l.$.type)}`});if(k&&Lr(l.$.type,t))throw m({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${S(l.$.type)}" which can only be used at the runtime:
|
|
11063
|
-
${w(e)}`});let $=(E=a.$)==null?void 0:E.value;if(
|
|
11067
|
+
${w(e)}`});let $=(E=a.$)==null?void 0:E.value;if(q($)&&!$.value.typeName&&$.value!==n.SelfType?$.value.typeName=l.token.value:be($)&&!$.funcName?($.funcName=l.token.value,$.funcId+=`_${l.token.value}`):(Bt($)||Wt($))&&!$.type.typeName&&$.type!==n.SelfType&&($.type.typeName=l.token.value),!$&&k)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
|
-
${w(a)}`});l.$={...l.$,env:t,type:l.$.type,value:k?$?
|
|
11069
|
+
${w(a)}`});l.$={...l.$,env:t,type:l.$.type,value:k?$?xn($):le(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let C=l.$.type;G(C)&&F&&G(F)&&F.resolvedConcreteType&&(C={...C,resolvedConcreteType:F.resolvedConcreteType},l.$.type=C);let A=na(a,t,t.modulePath),N=A;A!=null&&A.consumedAtToken&&(N=void 0);let{env:x}=Se({env:t,variable:{name:l.token.value,type:C,isCompileTimeOnly:k,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Be(C),isOwningTheSameRcValueAs:N,isReassignable:!s,isImplicit:s}});return t=x,l.$.env=t,s&&(o.$={env:t,value:ue,type:ue.type,pathCollection:[]}),e.$={env:t,value:ue,type:ue.type,pathCollection:[],isCompileTimeOnlyAssignment:k},e}else{let k=s||r,{env:b,runtimeDestructurings:F}=Nd({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=b,e.$={env:t,value:ue,type:ue.type,pathCollection:[],runtimeDestructurings:F,isCompileTimeOnlyAssignment:k},e}}function Ag(e){return I(e)?T(e,"|",2):!1}function eu(e){if(!Ag(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...eu(n),...eu(r)]}function Ig(e){return Zr(e)||Jr(e)||gr(e)||Wn(e)||zt(e)||ln(e)||tn(e)}function Sd({expr:e,env:t,context:n}){var k,b,F,$,C,A,N,x,D,P,U;if(!T(e,V.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=Y(i)?M({expr:i,env:t,context:{...n,expectedType:void 0}}):Yt({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: ${w(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(Xe(a)?(u=a.childType,l=a.tag):u=a,Ig(u))return Ng({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!Me(u))throw m({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?S(a):"unknown type"}`});let c=u,f=r.slice(1),p=[],_,d=new Set,y=!1,g=!1,h=[],v=[];for(let j=0;j<f.length;j++){let O=f[j],z=t;if(!I(O)||!T(O,"=>",2))throw m({token:O.token,errorMessage:`Expected ":" for match pattern, got ${w(O)}`});let W=O.args[0],ee=O.args[1];if(I(W)&&T(W,".",1)||Xt(W,"_")){if(g)throw m({token:W.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let de;if(I(W)){if(de=W.args[0],!Y(de))throw m({token:W.token,errorMessage:`Expected identifier for enum variant, got ${w(de)}`})}else g=!0,de=W;let se=de.token.value,K=c.variants.find(Pe=>Pe.name===se);if(!K&&se!=="_")throw m({token:W.token,errorMessage:`Enum variant "${se}" not found in ${S(c)}`});if(K&&K.fields&&K.fields.length>0)throw m({token:W.token,errorMessage:`Enum variant "${se}" has ${K.fields.length} field(s) and must be destructured. Use .${se}(...) instead of .${se}`});if(d.add(se),se!=="_"&&_n(s)&&s.variantName!==se)continue;let te={...c,selectedVariantName:se==="_"?void 0:se};de.$={env:z,type:te,value:void 0,pathCollection:[]};let re=te;l&&l==="Ptr"&&(re=Ai(te));let we=ee;z=dt(z),W.$={env:z,type:re,value:void 0,pathCollection:[],caseExecuted:!0};let ce=Yt({expr:we,env:z,context:{...n,isExecuting:_n(s)&&s.variantName===se},variablesToAdd:[]});if(!((k=ce.$)!=null&&k.type))throw m({token:we.token,errorMessage:`Expected type for match result expression, got ${w(we)}`});let Q=Vt(ce.$.env,!0);if(z=Q,ce.$={...ce.$,env:Q},n.expectedType&&!ie(n.expectedType,{type:ce.$.type,env:ce.$.env}))throw m({token:ce.token,errorMessage:`Incompatible type with expected type:
|
|
11066
11070
|
- Expected: ${S(n.expectedType.type)}
|
|
11067
|
-
- Actual : ${S(ce.$.type)}`});if(s===void 0&&ce.$&&(ce.$.value=void 0),Ut(ce.$.controlFlow)?(h.push(ce.$.controlFlow),
|
|
11071
|
+
- Actual : ${S(ce.$.type)}`});if(s===void 0&&ce.$&&(ce.$.value=void 0),Ut(ce.$.controlFlow)?(h.push(ce.$.controlFlow),Nt(ce.$.controlFlow,"return")&&v.push(ce),s&&!Ve(s)&&_n(s)?e.$={env:ce.$.env,type:((b=n.expectedType)==null?void 0:b.type)??ce.$.type,value:ce.$.value,pathCollection:ce.$.pathCollection,controlFlow:ce.$.controlFlow}:s===void 0&&(e.$={env:ce.$.env,type:((F=n.expectedType)==null?void 0:F.type)??ce.$.type,value:void 0,pathCollection:ce.$.pathCollection,controlFlow:ce.$.controlFlow})):y=!0,z=ce.$.env,p.push(ce),n.expectedType&&!ie(n.expectedType,{type:ce.$.type,env:ce.$.env}))throw m({token:ce.token,errorMessage:`Incompatible type with expected type:
|
|
11068
11072
|
- Expected: ${S(n.expectedType.type)}
|
|
11069
11073
|
- Actual : ${S(ce.$.type)}`});if(!Ut(ce.$.controlFlow)){if(!_)_={type:($=ce.$)==null?void 0:$.type,env:z};else if(!ie({type:_.type,env:z},{type:(C=ce.$)==null?void 0:C.type,env:t}))if(ie({type:Pt({type:_.type,expectedType:void 0,expr:void 0,env:_.env}),env:_.env},{type:ce.$.type,env:z}))_={type:ce.$.type,env:z};else throw m({token:ce.token,errorMessage:`Incompatible types:
|
|
11070
11074
|
- Previous: ${S(_.type)}
|
|
11071
|
-
- Current : ${S(ce.$.type)}`})}}else if(
|
|
11075
|
+
- Current : ${S(ce.$.type)}`})}}else if(I(W)&&I(W.func)&&T(W.func,".",1)){if(g)throw m({token:W.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let de=W.func.args[0];if(!Y(de))throw m({token:W.token,errorMessage:`Expected identifier for enum variant, got ${w(de)}`});let se=de.token.value,K=c.variants.find(ut=>ut.name===se);if(!K)throw m({token:W.token,errorMessage:`Enum variant "${se}" not found in ${S(c)}`});if(d.add(se),_n(s)&&s.variantName!==se)continue;let te=W.args;if(K.fields&&K.fields.length>0){if(!te.some(at=>I(at)&&T(at,":",2))&&te.length!==K.fields.length)throw m({token:W.token,errorMessage:`Variant "${se}" expects ${K.fields.length} parameters, got ${te.length}`})}else if(te.length>0)throw m({token:W.token,errorMessage:`Variant "${se}" has no fields, but destructuring parameters were provided`});let re={...c,selectedVariantName:se};de.$={env:z,type:re,value:void 0,pathCollection:[]};let we=re;if(l&&l==="Ptr"&&(we=Ai(re)),z=dt(z),K.fields&&K.fields.length>0){let ut=new Set;for(let at=0;at<te.length;at++){let _e=te[at];if(I(_e)&&T(_e,":",2)){let Ce=_e.args[0],$e=_e.args[1];if(!Y(Ce))throw m({token:Ce.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${w(Ce)}`});let Ge=Ce.token.value,rt=K.fields.findIndex(ne=>ne.label===Ge);if(rt===-1)throw m({token:Ce.token,errorMessage:`Label "${Ge}" not found in variant "${se}". Available labels: ${K.fields.map(ne=>ne.label).join(", ")}`});if(ut.has(Ge))throw m({token:Ce.token,errorMessage:`Label "${Ge}" is already destructured`});ut.add(Ge);let ct=K.fields[rt],jt=_n(s)&&!Ve(s),B=jt?s.fields[rt]:void 0;if(Y($e)){let ne=$e.token.value;if(ne!=="_"){let{env:ve}=Se({env:z,variable:{name:ne,type:ct.type,isCompileTimeOnly:jt,value:B!==void 0?[B]:void 0,token:$e.token,initializedAtToken:$e.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});z=ve}$e.$={env:z,type:ct.type,value:void 0,pathCollection:[]},Ce.$={env:z,type:ct.type,value:void 0,pathCollection:[]}}else throw m({token:$e.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${w($e)}`})}else if(Y(_e)){let Ce=_e.token.value,$e=K.fields[at],Ge=_n(s)&&!Ve(s),rt=Ge?s.fields[at]:void 0;if(Ce!=="_"){let{env:ct}=Se({env:z,variable:{name:Ce,type:$e.type,isCompileTimeOnly:Ge,value:rt!==void 0?[rt]:void 0,token:_e.token,initializedAtToken:_e.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});z=ct}_e.$={env:z,type:$e.type,value:void 0,pathCollection:[]}}else throw m({token:_e.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${w(_e)}`})}}W.$={env:z,type:we,value:void 0,pathCollection:[],caseExecuted:!0};let ce=ee,Q=Yt({expr:ce,env:z,context:{...n,isExecuting:_n(s)&&s.variantName===se},variablesToAdd:[]});if(!((A=Q.$)!=null&&A.type))throw m({token:ce.token,errorMessage:`Expected type for match result expression, got ${w(ce)}`});let Pe=Vt(Q.$.env,!0);if(z=Pe,Q.$={...Q.$,env:Pe},s===void 0&&Q.$&&(Q.$.value=void 0),Ut(Q.$.controlFlow)?(h.push(Q.$.controlFlow),Nt(Q.$.controlFlow,"return")&&v.push(Q),s&&!Ve(s)&&_n(s)?e.$={env:Q.$.env,type:((N=n.expectedType)==null?void 0:N.type)??Q.$.type,value:Q.$.value,pathCollection:Q.$.pathCollection,controlFlow:Q.$.controlFlow}:s===void 0&&(e.$={env:Q.$.env,type:((x=n.expectedType)==null?void 0:x.type)??Q.$.type,value:void 0,pathCollection:Q.$.pathCollection,controlFlow:Q.$.controlFlow})):y=!0,z=Q.$.env,p.push(Q),!Ut(Q.$.controlFlow)){if(!_)_={type:(D=Q.$)==null?void 0:D.type,env:z};else if(!ie({type:_.type,env:z},{type:(P=Q.$)==null?void 0:P.type,env:t}))if(ie({type:Pt({type:_.type,expectedType:void 0,expr:void 0,env:_.env}),env:_.env},{type:Q.$.type,env:z}))_={type:Q.$.type,env:z};else throw m({token:Q.token,errorMessage:`Incompatible types:
|
|
11072
11076
|
- Previous: ${S(_.type)}
|
|
11073
11077
|
- Current : ${S(Q.$.type)}`})}}else throw m({token:W.token,errorMessage:`Invalid pattern in match expression: ${w(W)}
|
|
11074
11078
|
Supported patterns:
|
|
@@ -11077,40 +11081,40 @@ Supported patterns:
|
|
|
11077
11081
|
- _ (wildcard pattern)`})}let E=h.length>0?Xo(h):void 0;if(y||!Ut(E)){if(y&&!_)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(_||(_={type:ue.type,env:t}),!d.has("_")){let z=c.variants.filter(W=>!d.has(W.name));if(z.length>0)throw m({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
|
|
11078
11082
|
|
|
11079
11083
|
- ${z.map(W=>W.name).join(`
|
|
11080
|
-
- `)}`})}let
|
|
11084
|
+
- `)}`})}let j=p.filter(z=>z.$&&!Nt(z.$.controlFlow,"return")&&!Nt(z.$.controlFlow,"escape")),O;_n(s)&&!Ve(s)&&j.length===1&&j[0].$?(t=j[0].$.env,O=j[0].$.value):_n(s)&&j.length===1&&j[0].$?t=j[0].$.env:t=uo(t,j),e.$={env:t,type:((U=n.expectedType)==null?void 0:U.type)??_.type,value:s===void 0?void 0:O!==void 0?O:le(_.type,{env:t,context:n}),pathCollection:[]},pt(e,!0)}else{if(h.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(Nt(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 j;if(v.length>0&&v[0].$?j=v[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?j=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(j=n.expectedType.type),!j)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:j,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Yo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?le(j,{env:t,context:n}):void 0,pathCollection:[],controlFlow:E}}else if(Nt(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 j=n.enclosingFunctionReturnType;e.$={env:t,type:j,value:void 0,pathCollection:[],controlFlow:E}}else if(Nt(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:ue.type,value:ue,pathCollection:[],controlFlow:E}}else if(Nt(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:ue.type,value:ue,pathCollection:[],controlFlow:E}}return e}return e}function Ng({expr:e,env:t,context:n,scrutineeExpr:r,scrutineeType:i,scrutineeValue:o}){var y,g,h,v,E,k,b,F,$;let a=e.args.slice(1),s=[],l,u=new Set,c=!1,f=!1,p=[],_=[];for(let C=0;C<a.length;C++){let A=a[C],N=t;if(!I(A)||!T(A,"=>",2))throw m({token:A.token,errorMessage:`Expected "=>" for match pattern, got ${w(A)}`});let x=A.args[0],D=A.args[1];if(Xt(x,"_")){if(f)throw m({token:x.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});f=!0,x.$={env:N,type:i,value:void 0,pathCollection:[],caseExecuted:!0},N=dt(N);let W=Yt({expr:D,env:N,context:{...n,isExecuting:o!==void 0&&!Ve(o)},variablesToAdd:[]});if(!((y=W.$)!=null&&y.type))throw m({token:D.token,errorMessage:`Expected type for match result expression, got ${w(D)}`});let ee=Vt(W.$.env,!0);if(N=ee,W.$={...W.$,env:ee},n.expectedType&&!ie(n.expectedType,{type:W.$.type,env:W.$.env}))throw m({token:W.token,errorMessage:`Incompatible type with expected type:
|
|
11081
11085
|
- Expected: ${S(n.expectedType.type)}
|
|
11082
|
-
- Actual : ${S(W.$.type)}`});if(o===void 0&&W.$&&(W.$.value=void 0),Ut(W.$.controlFlow))p.push(W.$.controlFlow),
|
|
11086
|
+
- Actual : ${S(W.$.type)}`});if(o===void 0&&W.$&&(W.$.value=void 0),Ut(W.$.controlFlow))p.push(W.$.controlFlow),Nt(W.$.controlFlow,"return")&&_.push(W),o!==void 0&&!Ve(o)?e.$={env:W.$.env,type:((g=n.expectedType)==null?void 0:g.type)??W.$.type,value:W.$.value,pathCollection:W.$.pathCollection,controlFlow:W.$.controlFlow}:o===void 0&&(e.$={env:W.$.env,type:((h=n.expectedType)==null?void 0:h.type)??W.$.type,value:void 0,pathCollection:W.$.pathCollection,controlFlow:W.$.controlFlow});else if(c=!0,o!==void 0&&!Ve(o))return t=uo(t,s.filter(de=>de.$&&!Nt(de.$.controlFlow,"return")&&!Nt(de.$.controlFlow,"escape"))),e.$={env:t,type:((v=n.expectedType)==null?void 0:v.type)??W.$.type,value:W.$.value,pathCollection:[],isPrimitiveMatch:!0},pt(e,!0),e;if(N=W.$.env,s.push(W),!Ut(W.$.controlFlow)){if(!l)l={type:W.$.type,env:N};else if(!ie({type:l.type,env:N},{type:W.$.type,env:t}))throw m({token:W.token,errorMessage:`Incompatible types in match branches:
|
|
11083
11087
|
- Previous: ${S(l.type)}
|
|
11084
|
-
- Current : ${S(W.$.type)}`})}continue}let P=
|
|
11085
|
-
Hint: Use "::" to define compile-time constants, e.g., "myConst :: 42"`});let se=tt(de);if(se){if(u.has(se))throw m({token:W.token,errorMessage:`Duplicate pattern value: ${tt(de)}`});u.add(se)}U.push({expr:ee,value:de})}let
|
|
11088
|
+
- Current : ${S(W.$.type)}`})}continue}let P=eu(x),U=[];for(let W of P){let ee=M({expr:W,env:N,context:{...n,expectedType:{type:i,env:N}}});if(!ee.$)throw m({token:W.token,errorMessage:`Failed to evaluate pattern expression: ${w(W)}`});if(!ie({type:i,env:N},{type:ee.$.type,env:ee.$.env}))throw m({token:W.token,errorMessage:`Pattern type ${S(ee.$.type)} is not compatible with scrutinee type ${S(i)}`});let de=ee.$.value;if(de===void 0)throw m({token:W.token,errorMessage:`Match patterns must be compile-time known values. "${w(W)}" is a runtime value.
|
|
11089
|
+
Hint: Use "::" to define compile-time constants, e.g., "myConst :: 42"`});let se=tt(de);if(se){if(u.has(se))throw m({token:W.token,errorMessage:`Duplicate pattern value: ${tt(de)}`});u.add(se)}U.push({expr:ee,value:de})}let j=!1;if(o!==void 0&&!Ve(o)){for(let{value:W,expr:ee}of U)if(an({value:o,env:r.$.env},{value:W,env:ee.$.env})){j=!0;break}}x.$={env:N,type:i,value:void 0,pathCollection:[],caseExecuted:!0,primitivePatternValues:U.map(W=>W.value)},N=dt(N);let O=Yt({expr:D,env:N,context:{...n,isExecuting:j},variablesToAdd:[]});if(!((E=O.$)!=null&&E.type))throw m({token:D.token,errorMessage:`Expected type for match result expression, got ${w(D)}`});let z=Vt(O.$.env,!0);if(N=z,O.$={...O.$,env:z},n.expectedType&&!ie(n.expectedType,{type:O.$.type,env:O.$.env}))throw m({token:O.token,errorMessage:`Incompatible type with expected type:
|
|
11086
11090
|
- Expected: ${S(n.expectedType.type)}
|
|
11087
|
-
- Actual : ${S(
|
|
11091
|
+
- Actual : ${S(O.$.type)}`});if(o===void 0&&O.$&&(O.$.value=void 0),Ut(O.$.controlFlow)){if(p.push(O.$.controlFlow),Nt(O.$.controlFlow,"return")&&_.push(O),o!==void 0&&j)return e.$={env:O.$.env,type:((k=n.expectedType)==null?void 0:k.type)??O.$.type,value:O.$.value,pathCollection:O.$.pathCollection,controlFlow:O.$.controlFlow},e;o===void 0&&(e.$={env:O.$.env,type:((b=n.expectedType)==null?void 0:b.type)??O.$.type,value:void 0,pathCollection:O.$.pathCollection,controlFlow:O.$.controlFlow})}else if(c=!0,o!==void 0&&!Ve(o)&&j)return e.$={env:O.$.env,type:((F=n.expectedType)==null?void 0:F.type)??O.$.type,value:O.$.value,pathCollection:O.$.pathCollection,isPrimitiveMatch:!0},pt(e,!0),e;if(N=O.$.env,s.push(O),!Ut(O.$.controlFlow)){if(!l)l={type:O.$.type,env:N};else if(!ie({type:l.type,env:N},{type:O.$.type,env:t}))if(ie({type:Pt({type:l.type,expectedType:void 0,expr:void 0,env:l.env}),env:l.env},{type:O.$.type,env:N}))l={type:O.$.type,env:N};else throw m({token:O.token,errorMessage:`Incompatible types in match branches:
|
|
11088
11092
|
- Previous: ${S(l.type)}
|
|
11089
|
-
- Current : ${S(
|
|
11093
|
+
- Current : ${S(O.$.type)}`})}}if(!f)if(Wn(i)){let C=u.has("true"),A=u.has("false");if(!C||!A)throw m({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${C?"":"true"}${!C&&!A?", ":""}${A?"":"false"}`})}else throw m({token:e.token,errorMessage:`Match expression on ${S(i)} requires a wildcard pattern "_" for exhaustiveness.`});let d=p.length>0?Xo(p):void 0;if(c||!Ut(d)){if(c&&!l)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:ue.type,env:t});let C=s.filter(A=>A.$&&!Nt(A.$.controlFlow,"return")&&!Nt(A.$.controlFlow,"escape"));o!==void 0&&!Ve(o)&&C.length===1&&C[0].$?t=C[0].$.env:t=uo(t,C),e.$={env:t,type:(($=n.expectedType)==null?void 0:$.type)??l.type,value:o===void 0?void 0:le(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},pt(e,!0)}else{if(p.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(Nt(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 C;if(_.length>0&&_[0].$?C=_[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?C=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(C=n.expectedType.type),!C)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:C,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Yo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?le(C,{env:t,context:n}):void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(Nt(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 C=n.enclosingFunctionReturnType;e.$={env:t,type:C,value:void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(Nt(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:ue.type,value:ue,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(Nt(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:ue.type,value:ue,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}return e}return e}function Vd({expr:e,env:t,context:n}){var l,u,c,f;let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
|
|
11090
11094
|
${w(e)}`});{let p=r;for(;T(p,".")&&p.args.length>=1;)p=p.args[0];if(Y(p)){let _=pe(t,p.token.value),d=_[_.length-1];if(d!=null&&d.isImplicit)throw m({token:r.token,errorMessage:`Cannot use "open" on implicit variable "${d.name}". Implicit variables must be passed via using() parameters.`})}}let i=M({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate the module argument:
|
|
11091
|
-
${w(i)}`});let o=i.$.type,a=i.$.value,s;if(Bt(a)){let p=a,_=p.type;for(let d=0;d<_.fields.length;d++){let y=p.fields[d],g=_.fields[d],{env:h}=
|
|
11092
|
-
${w(r)}`});return e.$={env:t,value:ue,type:ue.type,pathCollection:[],runtimeDestructurings:s},e}function
|
|
11093
|
-
${w(e)}`});if(T(e,".",1)){let F=e.args[0];if(!Y(F)&&!
|
|
11094
|
-
${w(F)}`});let $=(s=n.expectedType)==null?void 0:s.type;if(!Me($))throw m({token:e.token,errorMessage:"Failed to infer enum variant type."});let C=F.token.value,
|
|
11095
|
-
${w(e)}`});let r=e.args[0],i=e.args[1];if(r=M({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),Y(i)&&i.token.value==="*"){if(Xe((c=r.$)==null?void 0:c.type)){let F=r.$.type,$=F.childType;G($)&&($=
|
|
11096
|
-
${w(i)}`});{let x=i.token.value,D=F.value.trait.fields.find(P=>P.label===x);if(D)return e.$={env:t,type:D.type,value:D.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let $=i.token.value,C=F.value,
|
|
11097
|
-
${w(i)}`});let $=i.token.value,C=F.value.trait.fields.findLast(
|
|
11098
|
-
${w(i)}`});let $=i.token.value,
|
|
11099
|
-
${w(i)}`});let $=i.token.value,C=F.value;if(C.receiverType&&C.receiverType.trait){for(let x of C.receiverType.trait.fields)if(x.label===""&&x.assignedValue&&
|
|
11100
|
-
${w(i)}`});let
|
|
11101
|
-
${S((h=r.$)==null?void 0:h.type)}`});let N=F[C],x=r.$.originType||a,D=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(P=>[...P,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:N.type,originType:x,isAccessingProperty:!0,pathCollection:D},i.$=e.$,$){let P=[];(zn($)||
|
|
11102
|
-
${w(i)}`});if(
|
|
11103
|
-
${w(i)}`});let F=i.token.value,$=o.variants.find(C=>C.name===o.selectedVariantName);if($){let C=($.fields??[]).findIndex(x=>x.label===F);if(C<0)return e.$=void 0,e;let
|
|
11095
|
+
${w(i)}`});let o=i.$.type,a=i.$.value,s;if(Bt(a)){let p=a,_=p.type;for(let d=0;d<_.fields.length;d++){let y=p.fields[d],g=_.fields[d],{env:h}=Se({env:t,variable:{name:g.label,type:g.type,isCompileTimeOnly:!0,value:[y],token:((l=g.exprs.labelExpr)==null?void 0:l.token)??g.exprs.expr.token,initializedAtToken:((u=g.exprs.labelExpr)==null?void 0:u.token)??g.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=h}}else if(Ie(o)){let p=a,_=o;s=[];for(let d=0;d<_.fields.length;d++){let y;qn(p)&&(y=p.fields[d]);let g=_.fields[d];try{let{env:h}=Se({env:t,variable:{name:g.label,type:g.type,isCompileTimeOnly:!!y,value:y?[y]:void 0,token:((c=g.exprs.labelExpr)==null?void 0:c.token)??g.exprs.expr.token,initializedAtToken:((f=g.exprs.labelExpr)==null?void 0:f.token)??g.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=h,s.push({label:g.label,variableName:g.label,type:g.type})}catch(h){throw St([{token:r.token,errorMessage:`Failed to import struct field "${g.label}"`},...h instanceof Rn?h.tokenAndErrorList:[{token:r.token,errorMessage:h instanceof Error?h.message:String(h)}]])}}}else throw m({token:r.token,errorMessage:`Expected module/struct for "${V.open}", got:
|
|
11096
|
+
${w(r)}`});return e.$={env:t,value:ue,type:ue.type,pathCollection:[],runtimeDestructurings:s},e}function Dd({expr:e,env:t,context:n}){var s,l,u,c,f,p,_,d,y,g,h,v,E,k,b;if(!T(e,"."))throw m({token:e.token,errorMessage:`Expected "." for property access, got:
|
|
11097
|
+
${w(e)}`});if(T(e,".",1)){let F=e.args[0];if(!Y(F)&&!ht(F))throw m({token:F.token,errorMessage:`Expected identifier for enum variant access, got:
|
|
11098
|
+
${w(F)}`});let $=(s=n.expectedType)==null?void 0:s.type;if(!Me($))throw m({token:e.token,errorMessage:"Failed to infer enum variant type."});let C=F.token.value,A=$,N=A.variants.find(D=>D.name===C);if(!N)throw m({token:F.token,errorMessage:`Enum variant "${C}" not found in enum`});let x={...A,selectedVariantName:C};if(!N.fields)e.$={env:t,type:x,value:hi(x,C,[]),pathCollection:[]},F.$={env:t,type:x,pathCollection:[]};else{let D=ye(x);e.$={env:t,value:D,type:D.type,pathCollection:[]},F.$=e.$}return e}if(!T(e,".",2))throw m({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
|
|
11099
|
+
${w(e)}`});let r=e.args[0],i=e.args[1];if(r=M({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),Y(i)&&i.token.value==="*"){if(Xe((c=r.$)==null?void 0:c.type)){let F=r.$.type,$=F.childType;G($)&&($=pn(t,$));let C=(f=r.$)==null?void 0:f.value;if(Yi(C)){let A=C.targetValue[0],N;return lr(A)?N=A.elements[C.targetIndex]:N=A,e.$={env:t,type:$,value:N,originType:F,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=C.targetValue,e.$.ptrTargetIndex=C.targetIndex,i.$=e.$,e}if(Ve(C)){let A=le($,{variableName:C.variableName?`${C.variableName}.*`:void 0,env:t,context:n});return e.$={env:t,type:$,value:A,originType:F,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:$,value:void 0,originType:F,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,pt(e,!1),e}if(rn((p=r.$)==null?void 0:p.type)){let F=r.$.type,$=F.childType;return G($)&&($=pn(t,$)),e.$={env:t,type:$,value:void 0,originType:F,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,pt(e,!1),e}}if(q((_=r.$)==null?void 0:_.value)){let F=r.$.value;if(Me(F.value)){if(!Y(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got:
|
|
11100
|
+
${w(i)}`});{let x=i.token.value,D=F.value.trait.fields.find(P=>P.label===x);if(D)return e.$={env:t,type:D.type,value:D.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let $=i.token.value,C=F.value,A=C.variants.find(x=>x.name===$);if(!A)throw m({token:i.token,errorMessage:`Enum variant "${$}" not found in enum`});let N={...C,selectedVariantName:$};if(!A.fields)e.$={env:t,type:N,value:hi(N,$,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let x=ye(N);e.$={env:t,type:x.type,value:x,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if(F.value.trait){if(!ht(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11101
|
+
${w(i)}`});let $=i.token.value,C=F.value.trait.fields.findLast(A=>A.label===$);if(C){if(C.assignedValue){let A=C.assignedValue.type;return e.$={env:t,type:A,value:C.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(C.unassignedSomeType){let A=ye(C.unassignedSomeType);return e.$={env:t,type:A.type,value:A,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:C.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let x of F.value.trait.fields)if(x.label===""&&x.assignedValue&&Wt(x.assignedValue)){let D=x.assignedValue,P=D.type,U=P.fields.findIndex(j=>j.label===$);if(U>=0){let j=P.fields[U],O=D.fields[U];if(ae(j.type))continue;if(O)return e.$={env:t,type:O.type,value:O,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(j.unassignedSomeType){let z=ye(j.unassignedSomeType);return e.$={env:t,type:z.type,value:z,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let A=Vr({concreteType:F.value,methodName:$,env:t});if(A.length===1){let x=A[0];return e.$={env:t,type:x.type,value:x.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let N=Ka({concreteType:F.value,propertyName:$,env:t});return N?(e.$={env:t,type:N.type,value:N.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}else if(je(F.value)){if(!ht(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11102
|
+
${w(i)}`});let $=i.token.value,A=F.value.fields.find(N=>N.label===$);return A?(e.$={env:t,type:A.type,value:A.assignedValue??le(A.type,{variableName:A.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(Je(F.value)){if(!ht(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11103
|
+
${w(i)}`});let $=i.token.value,C=F.value;if(C.receiverType&&C.receiverType.trait){for(let x of C.receiverType.trait.fields)if(x.label===""&&x.assignedValue&&Wt(x.assignedValue)){let D=x.assignedValue,P=D.type;if(!ie({type:C,env:t},{type:P,env:t}))continue;let U=P.fields.findIndex(j=>j.label===$&&ae(j.type));if(U>=0){let j=P.fields[U];if(ae(j.type)){let O=D.fields[U];if(O){let z=j.type;return be(O)&&O.specializedType&&(z=O.specializedType),e.$={env:t,type:z,value:O,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let N=tc({concreteType:C.receiverType,traitType:C,methodName:$,env:t});if(N)return e.$={env:t,type:N.type,value:N.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let A=C.fields.find(N=>N.label===$);return A?(e.$={env:t,type:A.type,value:A.assignedValue??le(A.type,{variableName:A.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=(d=r.$)==null?void 0:d.type,a=(y=r.$)==null?void 0:y.type;for(;o&&Xe(o);)o=o.childType;if(qe(o)||Ie(o)||Rt(o)){let F=o.fields,$=r.$.value;if(Y(i)){if(i.token.type==="integer"){if(!qe((g=r.$)==null?void 0:g.type))throw m({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let C=parseInt(i.token.value,10);if(isNaN(C))throw m({token:i.token,errorMessage:`Expected integer for tuple index, got:
|
|
11104
|
+
${w(i)}`});let A=F.length;if(C<0||C>=A)throw m({token:i.token,errorMessage:`Index out of bounds: ${C} for accessing field in:
|
|
11105
|
+
${S((h=r.$)==null?void 0:h.type)}`});let N=F[C],x=r.$.originType||a,D=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(P=>[...P,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:N.type,originType:x,isAccessingProperty:!0,pathCollection:D},i.$=e.$,$){let P=[];(zn($)||qn($))&&(P=$.fields),e.$.value=P==null?void 0:P[C]}return pt(e,!1),e}else if(ht(i)){let C=i.token.value;{let A=F.findIndex(P=>P.label===C);if(A<0){if(je((v=r.$)==null?void 0:v.type))throw m({token:i.token,errorMessage:`Module field "${C}" not found in module type`});return e.$=void 0,e}let N=F[A],x=((E=r.$)==null?void 0:E.originType)||a,D=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(P=>[...P,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:N.type,originType:x,isAccessingProperty:!0,pathCollection:D},i.$=e.$,$)if(Ve($))e.$.value=le(N.type,{env:t,context:n});else{let P=[];(zn($)||qn($))&&(P=$.fields);let U=P==null?void 0:P[A];U||(U=le(N.type,{env:t,context:n})),e.$.value=U}return pt(e,!1),e}}}}else if(je(o)){let F=o.fields,$=r.$.value;if(Y(i)){if(i.token.type==="integer")throw m({token:i.token,errorMessage:`Accessomg module field by index is not allowed, got:
|
|
11106
|
+
${w(i)}`});if(ht(i)){let C=i.token.value;{let A=F.findIndex(D=>D.label===C);if(A<0){if(je((k=r.$)==null?void 0:k.type))throw m({token:i.token,errorMessage:`Module field "${C}" not found in module type`});return e.$=void 0,e}let N=F[A],x=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(D=>[...D,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:N.type,isAccessingProperty:!0,pathCollection:x},i.$=e.$,$)if(Ve($))e.$.value=le(N.type,{env:t,context:n});else{let D=[];Bt($)&&(D=$.fields);let P=D==null?void 0:D[A];P||(P=le(N.type,{env:t,context:n})),e.$.value=P}return e}}}}else if(Me(o)&&Y(i)){if(!ht(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant property, got:
|
|
11107
|
+
${w(i)}`});let F=i.token.value,$=o.variants.find(C=>C.name===o.selectedVariantName);if($){let C=($.fields??[]).findIndex(x=>x.label===F);if(C<0)return e.$=void 0,e;let A=($.fields??[])[C];e.$={env:t,type:A.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let N=(b=r.$)==null?void 0:b.value;return N&&_n(N)&&N.variantName===$.name&&(e.$.value=N.fields[C]),i.$=e.$,e}}return e.$=void 0,e}function Md({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw m({token:e.token,errorMessage:`Expected a function type for recur, got:
|
|
11104
11108
|
${w(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!T(e,V.recur))throw m({token:e.token,errorMessage:`Expected recur, got:
|
|
11105
|
-
${w(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=di({functionValue:be(a)?a:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=Vt(u),e.$={type:s,value:le(s,{variableName:"recur_result_"+yt(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return sr({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function
|
|
11109
|
+
${w(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=di({functionValue:be(a)?a:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=Vt(u),e.$={type:s,value:le(s,{variableName:"recur_result_"+yt(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return sr({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function Od({expr:e,env:t,context:n}){var a;if(!T(e,V.runtime,1))throw m({token:e.token,errorMessage:`Expected runtime(expr), got:
|
|
11106
11110
|
${w(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=M({expr:r,env:t,context:{...n}});if(!((a=i.$)!=null&&a.type))throw m({token:i.token,errorMessage:`Failed to evaluate runtime argument:
|
|
11107
|
-
${w(i)}`});let o=Pt({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
|
|
11111
|
+
${w(i)}`});let o=Pt({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 Rd({expr:e,env:t,context:n}){Oe(e,"<:",2);let r=e.args[0],i=e.args[1],o=M({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!q(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&&!G(a.value))throw m({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${w(r)} of type ${S(a.value)}`});let s=[];if(I(i)&&T(i,V.tuple))for(let _ of i.args)I(_)&&T(_,"!")&&_.args.length===1?s.push({expr:_.args[0],isNegated:!0}):s.push({expr:_,isNegated:!1});else I(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 y=M({expr:_,env:t,context:{...n}});if(!y.$||!y.$.value||!q(y.$.value)||!Je(y.$.value.value))throw m({token:_.token,errorMessage:"Expected trait type for right-hand side expression."});t=y.$.env;let g=y.$.value.value;if(g.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:g,expr:_,isNegated:d})}if(n.isInsideWhereClause&&G(a.value)){let _=a.value;for(let{traitType:d,isNegated:y}of l){let g={...d,receiverType:_};t=Er({env:t,someType:_,traitType:g,isNegated:y})}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(!G(c)&&!sn({targetType:c,traitType:u,env:t}))throw m({token:e.token,errorMessage:`Type "${S(c)}" does not implement trait "${u.typeName??S(u)}".`});let f={...u,receiverType:a.value},p=ye(f);return e.$={env:t,value:p,type:p.type,pathCollection:[]},e}function Pd({expr:e,env:t,context:n}){if(!T(e,V.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,V.using))throw m({token:o.token,errorMessage:`Expected using(...) clause as second argument, got: ${w(o)}`});let s=M({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:i.token,errorMessage:`Failed to evaluate test name: ${w(i)}`});if(t=s.$.env,!Tt(s.$.value))throw m({token:i.token,errorMessage:`Expected string for test name, got ${w(i)}`});if(r){let l=nt(o);o.$={env:t,type:ue.type,value:ue,pathCollection:[],originalExpr:l};let u=nt(a);a.$={env:t,type:ue.type,value:ue,pathCollection:[],originalExpr:u}}else{let l=nt(a),u=M({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: ${w(a)}`});if(!xe(u.$.type))throw m({token:a.token,errorMessage:`Test body must have 'unit' type, got ${S(u.$.type)}`});u.$.originalExpr=l}return e.$={env:t,type:ue.type,value:ue,pathCollection:[]},e}function Ud({expr:e,env:t,context:n}){var s,l;if(!T(e,L.typeof,1))throw m({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
|
|
11108
11112
|
${w(e)}`});let r=e.args[0],i=M({expr:r,env:t,context:{...n}});if((s=i.$)!=null&&s.env&&(t=i.$.env),!((l=i.$)!=null&&l.type))throw m({token:r.token,errorMessage:`Expected type for expression, got:
|
|
11109
|
-
${w(r)}`});let o=i.$.type,a=
|
|
11113
|
+
${w(r)}`});let o=i.$.type,a=ye(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Ts({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=Yt({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the condition expression:
|
|
11110
11114
|
${w(r)}`});if(!Wn(a.$.type))throw m({token:r.token,errorMessage:`Expected bool type for condition expression, got:
|
|
11111
11115
|
${w(r)}`});let s=a.$.value,l=s!==void 0;if(_t(s)&&s.value===!1)return e.$={env:t,pathCollection:[],type:ue.type,value:l?ue:void 0},e;{let u=Yt({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
|
-
${w(o)}`});if(Ut(u.$.controlFlow)){if(
|
|
11113
|
-
${w(i)}`});f=p.$.env}if(_t(s))return
|
|
11116
|
+
${w(o)}`});if(Ut(u.$.controlFlow)){if(Nt(u.$.controlFlow,"return")||Nt(u.$.controlFlow,"escape"))if(_t(s)&&s.value===!0){let f={};Nt(u.$.controlFlow,"return")&&(f.return=!0),Nt(u.$.controlFlow,"escape")&&(f.escape=!0),e.$={env:u.$.env,pathCollection:u.$.pathCollection,type:u.$.type,value:u.$.value,controlFlow:f}}else e.$={env:t,pathCollection:[],type:ue.type,value:l?ue:void 0};else if(Nt(u.$.controlFlow,"break"))e.$={env:u.$.env,pathCollection:[],type:ue.type,value:l?ue:void 0};else if(Nt(u.$.controlFlow,"continue")){let f=u.$.env;if(i){let p=M({expr:i,env:f,context:{...n}});if(!p.$)throw m({token:i.token,errorMessage:`Failed to evaluate the step expression:
|
|
11117
|
+
${w(i)}`});f=p.$.env}if(_t(s))return Ts({expr:e,env:f,context:{...n}});e.$={env:f,pathCollection:[],type:ue.type,value:l?ue:void 0}}return e}if(!xe(u.$.type))throw m({token:o.token,errorMessage:`Expected the while loop body to return unit, but got:
|
|
11114
11118
|
${S(u.$.type)}`});let c=u.$.value===void 0;if(t=u.$.env,i){let f=M({expr:i,env:t,context:{...n}});if(!f.$)throw m({token:i.token,errorMessage:`Failed to evaluate the step expression:
|
|
11115
|
-
${w(i)}`});t=f.$.env}return _t(s)&&s.value===!0&&c?(e.$={env:t,pathCollection:[],type:ue.type,value:void 0},e):_t(s)&&s.value===!0?
|
|
11116
|
-
${w(e)}`})}else if(T(e,":",2)){let{expr:r}=ys({expr:e,env:t,context:n});return r}else return T(e,":=",2)||T(e,"::",2)?Ad({expr:e,env:t,context:n}):T(e,"=",2)?$d({expr:e,env:t,context:n}):T(e,"->",2)?A(e.args[0])&&(T(e.args[0],V.fn)||T(e.args[0],V.unsafe_fn))?ss({expr:e,env:t,context:{...n,isUnsafeFunctionType:T(e.args[0],V.unsafe_fn)}}):A(e.args[0])&&T(e.args[0],V.Fn)?td({expr:e,env:t,context:{...n}}):ms({expr:e,env:t,context:{...n}}):T(e,"=>",2)?A(e.args[0])&&T(e.args[0],V.fn)?Xp({expr:e,env:t,context:{...n}}):ms({expr:e,env:t,context:{...n}}):T(e,"=>>",2)?ms({expr:e,env:t,context:{...n}}):T(e,V.recur)?xd({expr:e,env:t,context:{...n}}):T(e,V.runtime)?Vd({expr:e,env:t,context:{...n}}):T(e,V.extern)?wd({expr:e,env:t,context:{...n}}):T(e,V.c_include)?Cd({expr:e,env:t,context:{...n}}):T(e,V.test)?Md({expr:e,env:t,context:{...n}}):T(e,V.cond)?bd({expr:e,env:t,context:{...n}}):T(e,V.match)?Id({expr:e,env:t,context:{...n}}):T(e,V.tuple)?Ed({expr:e,env:t,context:{...n}}):T(e,V.array)?_d({expr:e,env:t,context:{...n}}):T(e,V.comptime_list)?md({expr:e,env:t,context:{...n}}):T(e,V.dyn)?gd({expr:e,env:t,context:{...n}}):T(e,V.struct)?No({expr:e,env:t,context:{...n}}):T(e,V.object)?od({expr:e,env:t,context:{...n}}):T(e,V.newtype)?id({expr:e,env:t,context:{...n}}):T(e,V.enum)?ed({expr:e,env:t,context:{...n}}):T(e,V.union)?fd({expr:e,env:t,context:{...n}}):T(e,".")?Sd({expr:e,env:t,context:{...n}}):T(e,V.begin)?Yt({expr:e,env:t,context:{...n},variablesToAdd:[]}):T(e,V.module)?rd({expr:e,env:t,context:{...n}}):T(e,V.trait)?ud({expr:e,env:t,context:{...n}}):T(e,V.Impl)?dp({expr:e,env:t,context:{...n}}):T(e,V.impl)?tc({expr:e,env:t,context:{...n}}):T(e,L.typeof)?Od({expr:e,env:t,context:{...n}}):T(e,L.sizeof)?Op({expr:e,env:t,context:{...n}}):T(e,L.alignof)?g_({expr:e,env:t,context:{...n}}):T(e,L.rc)?Tp({expr:e,env:t,context:{...n}}):T(e,"<:")?Dd({expr:e,env:t,context:{...n}}):T(e,L.the)?Rp({expr:e,env:t,context:{...n}}):T(e,V.import)?Fd({expr:e,env:t,context:{...n},stdPath:n.stdPath}):T(e,V.open)?Nd({expr:e,env:t,context:{...n}}):T(e,V.Ptr,1)?jp({expr:e,env:t,context:{...n}}):T(e,V.Iso,1)?J_({expr:e,env:t,context:{...n}}):T(e,V.Arc,1)?G_({expr:e,env:t,context:{...n}}):T(e,L.__yo_address_of,1)?vp({expr:e,env:t,context:{...n}}):T(e,V.Tuple)?cd({expr:e,env:t,context:{...n}}):T(e,V.Array)?Kp({expr:e,env:t,context:{...n}}):T(e,L.__yo_array_fill,2)?v_({expr:e,env:t,context:{...n}}):T(e,V.Slice)?ad({expr:e,env:t,context:{...n}}):T(e,V.ComptimeList)?Qp({expr:e,env:t,context:{...n}}):T(e,V.Future)?nd({expr:e,env:t,context:{...n}}):T(e,V.Concrete)?Zp({expr:e,env:t,context:{...n}}):T(e,V.Dyn)?Jp({expr:e,env:t,context:{...n}}):T(e,L.comptime_expect_error)?$_({expr:e,env:t,context:{...n}}):T(e,L.comptime_assert)?T_({expr:e,env:t,context:{...n}}):T(e,L.comptime_fn)?C_({expr:e,env:t,context:{...n}}):T(e,L.comptime_print)?x_({expr:e,env:t,context:{...n}}):T(e,L.panic)?gp({expr:e,env:t,context:{...n}}):T(e,L.macro_expand)?yp({expr:e,env:t,context:{...n}}):T(e,V.op_and)||T(e,V.op_or)?h_({expr:e,env:t,context:{...n}}):T(e,V.escape)?kd({expr:e,env:t,context:{...n}}):T(e,L.consume)?D_({expr:e,env:t,context:{...n}}):T(e,L.___drop)?ip({expr:e,env:t,context:{...n}}):T(e,L.___dup)?op({expr:e,env:t,context:{...n}}):T(e,L.__yo_decr_rc)?Ep({expr:e,env:t,context:{...n}}):T(e,L.__yo_incr_rc)?$p({expr:e,env:t,context:{...n}}):T(e,L.__yo_decr_rc_atomic)?bp({expr:e,env:t,context:{...n}}):T(e,L.__yo_incr_rc_atomic)?Cp({expr:e,env:t,context:{...n}}):T(e,L.__yo_iso_extract)?Ip({expr:e,env:t,context:{...n}}):T(e,L.__yo_iso_dispose)?Np({expr:e,env:t,context:{...n}}):T(e,L.__yo_arc_dispose)?Sp({expr:e,env:t,context:{...n}}):T(e,L.__yo_drop_array_element)?xp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dup_array_element)?Vp({expr:e,env:t,context:{...n}}):T(e,L.__yo_drop_tuple_element)?Dp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dup_tuple_element)?Mp({expr:e,env:t,context:{...n}}):T(e,L.__yo_rc_own)?kp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dyn_drop)?wp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dyn_dup)?Fp({expr:e,env:t,context:{...n}}):T(e,L.__yo_sometype_drop)?Lp({expr:e,env:t,context:{...n}}):T(e,L.__yo_sometype_dup)?Ap({expr:e,env:t,context:{...n}}):T(e,L.__yo_gc_collect)?_p({expr:e,env:t,context:{...n}}):T(e,V.quote)?mp({expr:e,env:t,context:{...n}}):T(e,V.gensym)?pp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_is_atom)?ap({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_is_fn_call)?sp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_get_callee)?lp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_get_args)?up({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_to_string)?cp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_eq)?fp({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_car)?b_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_cdr)?k_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_cons)?w_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_append)?F_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_length)?L_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_element_type)?A_({expr:e,env:t,context:{...n}}):A(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_"))?S_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_bool_and,2)||T(e,L.__yo_comptime_bool_or,2)||T(e,L.__yo_comptime_bool_eq,2)||T(e,L.__yo_comptime_bool_neq,2)||T(e,L.__yo_comptime_bool_not,1)||T(e,L.__yo_comptime_bool_to_comptime_string,1)?E_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_string_concat,2)||T(e,L.__yo_comptime_string_eq,2)||T(e,L.__yo_comptime_string_neq,2)||T(e,L.__yo_comptime_string_lt,2)||T(e,L.__yo_comptime_string_lte,2)||T(e,L.__yo_comptime_string_gt,2)||T(e,L.__yo_comptime_string_gte,2)||T(e,L.__yo_comptime_string_length,1)||T(e,L.__yo_comptime_string_to_upper,1)||T(e,L.__yo_comptime_string_to_lower,1)||T(e,L.__yo_comptime_string_slice)?V_({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_to_comptime_string,1)?Pp({expr:e,env:t,context:{...n}}):T(e,L.__yo_are_types_compatible,2)?Up({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_contains_rc_type,1)?zp({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_can_form_rc_cycle,1)?Bp({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_impls,2)?Gp({expr:e,env:t,context:{...n}}):T(e,L.__yo_var_print_info,1)?Hp({expr:e,env:t,context:{...n}}):T(e,L.__yo_var_is_owning_the_rc_value)?qp({expr:e,env:t,context:{...n}}):T(e,L.__yo_var_has_other_aliases)?Yp({expr:e,env:t,context:{...n}}):T(e,L.__yo_process_platform)||T(e,L.__yo_process_arch)?hp({expr:e,env:t,context:{...n}}):T(e,V.while)?hs({expr:e,env:t,context:{...n}}):T(e,L.va_start)?Wp({expr:e,env:t,context:{...n}}):sr({expr:e,env:t,context:{...n}})}function Ig(e){let t=e;for(;;){let n=ha.join(t,"std");if((0,Ud.existsSync)(n))return n;let r=ha.dirname(t);if(r===t)break;t=r}return ha.join(__dirname,"../std")}var eu=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??Ig(__dirname),this.codeGenratorC=new rs,ru(zi),hc(y_)}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)yo(r),mo(r),this.clearDependencies(r),Va(r),this.modules.delete(r);yo(t),mo(t),this.clearDependencies(t),Va(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())yo(t),mo(t),Va(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),Ya(),sc(),mu()}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 oa({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()}};0&&(module.exports={Emitter,IdentifierRegex,ModuleManager,Operators,PlaceholderToken,RAIIToken,TokenType,charIsOperator,clearAllGlobalImplState,clearGenericImplsFromModule,clearImplsFromModule,debug,findMatchingBracketTokenIndex,generateExprFromCode,stringIsOperator,tokenize});
|
|
11119
|
+
${w(i)}`});t=f.$.env}return _t(s)&&s.value===!0&&c?(e.$={env:t,pathCollection:[],type:ue.type,value:void 0},e):_t(s)&&s.value===!0?Ts({expr:e,env:t,context:{...n}}):(e.$={env:t,pathCollection:[],type:ue.type,value:l?ue:void 0},e)}}function zd(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var xg=zd("YO_DEBUG_EVAL")||zd("YO_DEBUG_EVAL_PROFILE"),Bd=globalThis,xo=Bd.__yoEvalProfilerState??(Bd.__yoEvalProfilerState={evalCount:0,evalStart:0});function zi({expr:e,env:t,context:n}){if(xg&&(xo.evalStart||(xo.evalStart=Date.now()),xo.evalCount++,xo.evalCount%1e5===0&&console.log(`[EVAL] ${xo.evalCount} calls, ${Date.now()-xo.evalStart}ms elapsed`)),Y(e))switch(e.token.type){case"identifier":case"operator":return vs({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return $d(e,t,{...n});case"float":return Ed(e,t,{...n});case"string":return Cd(e,t);case"char":return gd(e,t);case"bool":return yd(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
|
+
${w(e)}`})}else if(T(e,":",2)){let{expr:r}=hs({expr:e,env:t,context:n});return r}else return T(e,":=",2)||T(e,"::",2)?xd({expr:e,env:t,context:n}):T(e,"=",2)?kd({expr:e,env:t,context:n}):T(e,"->",2)?I(e.args[0])&&(T(e.args[0],V.fn)||T(e.args[0],V.unsafe_fn))?us({expr:e,env:t,context:{...n,isUnsafeFunctionType:T(e.args[0],V.unsafe_fn)}}):I(e.args[0])&&T(e.args[0],V.Fn)?id({expr:e,env:t,context:{...n}}):gs({expr:e,env:t,context:{...n}}):T(e,"=>",2)?I(e.args[0])&&T(e.args[0],V.fn)?Jp({expr:e,env:t,context:{...n}}):gs({expr:e,env:t,context:{...n}}):T(e,"=>>",2)?gs({expr:e,env:t,context:{...n}}):T(e,V.recur)?Md({expr:e,env:t,context:{...n}}):T(e,V.runtime)?Od({expr:e,env:t,context:{...n}}):T(e,V.extern)?Ad({expr:e,env:t,context:{...n}}):T(e,V.c_include)?wd({expr:e,env:t,context:{...n}}):T(e,V.test)?Pd({expr:e,env:t,context:{...n}}):T(e,V.cond)?Fd({expr:e,env:t,context:{...n}}):T(e,V.match)?Sd({expr:e,env:t,context:{...n}}):T(e,V.tuple)?bd({expr:e,env:t,context:{...n}}):T(e,V.array)?md({expr:e,env:t,context:{...n}}):T(e,V.comptime_list)?hd({expr:e,env:t,context:{...n}}):T(e,V.dyn)?Td({expr:e,env:t,context:{...n}}):T(e,V.struct)?No({expr:e,env:t,context:{...n}}):T(e,V.object)?ld({expr:e,env:t,context:{...n}}):T(e,V.newtype)?sd({expr:e,env:t,context:{...n}}):T(e,V.enum)?rd({expr:e,env:t,context:{...n}}):T(e,V.union)?dd({expr:e,env:t,context:{...n}}):T(e,".")?Dd({expr:e,env:t,context:{...n}}):T(e,V.begin)?Yt({expr:e,env:t,context:{...n},variablesToAdd:[]}):T(e,V.module)?ad({expr:e,env:t,context:{...n}}):T(e,V.trait)?_d({expr:e,env:t,context:{...n}}):T(e,V.Impl)?gp({expr:e,env:t,context:{...n}}):T(e,V.impl)?nc({expr:e,env:t,context:{...n}}):T(e,L.typeof)?Ud({expr:e,env:t,context:{...n}}):T(e,L.sizeof)?Up({expr:e,env:t,context:{...n}}):T(e,L.alignof)?v_({expr:e,env:t,context:{...n}}):T(e,L.rc)?Cp({expr:e,env:t,context:{...n}}):T(e,"<:")?Rd({expr:e,env:t,context:{...n}}):T(e,L.the)?zp({expr:e,env:t,context:{...n}}):T(e,V.import)?Id({expr:e,env:t,context:{...n},stdPath:n.stdPath}):T(e,V.open)?Vd({expr:e,env:t,context:{...n}}):T(e,V.Ptr,1)?Qp({expr:e,env:t,context:{...n}}):T(e,V.Iso,1)?tp({expr:e,env:t,context:{...n}}):T(e,V.Arc,1)?q_({expr:e,env:t,context:{...n}}):T(e,L.__yo_address_of,1)?$p({expr:e,env:t,context:{...n}}):T(e,V.Tuple)?pd({expr:e,env:t,context:{...n}}):T(e,V.Array)?Zp({expr:e,env:t,context:{...n}}):T(e,L.__yo_array_fill,2)?E_({expr:e,env:t,context:{...n}}):T(e,V.Slice)?ud({expr:e,env:t,context:{...n}}):T(e,V.ComptimeList)?ed({expr:e,env:t,context:{...n}}):T(e,V.Future)?od({expr:e,env:t,context:{...n}}):T(e,V.Concrete)?td({expr:e,env:t,context:{...n}}):T(e,V.Dyn)?nd({expr:e,env:t,context:{...n}}):T(e,L.comptime_expect_error)?b_({expr:e,env:t,context:{...n}}):T(e,L.comptime_assert)?$_({expr:e,env:t,context:{...n}}):T(e,L.comptime_fn)?k_({expr:e,env:t,context:{...n}}):T(e,L.comptime_print)?D_({expr:e,env:t,context:{...n}}):T(e,L.panic)?Tp({expr:e,env:t,context:{...n}}):T(e,L.macro_expand)?vp({expr:e,env:t,context:{...n}}):T(e,V.op_and)||T(e,V.op_or)?T_({expr:e,env:t,context:{...n}}):T(e,V.escape)?Ld({expr:e,env:t,context:{...n}}):T(e,L.consume)?O_({expr:e,env:t,context:{...n}}):T(e,L.___drop)?sp({expr:e,env:t,context:{...n}}):T(e,L.___dup)?lp({expr:e,env:t,context:{...n}}):T(e,L.__yo_decr_rc)?bp({expr:e,env:t,context:{...n}}):T(e,L.__yo_incr_rc)?kp({expr:e,env:t,context:{...n}}):T(e,L.__yo_decr_rc_atomic)?Fp({expr:e,env:t,context:{...n}}):T(e,L.__yo_incr_rc_atomic)?wp({expr:e,env:t,context:{...n}}):T(e,L.__yo_iso_extract)?Sp({expr:e,env:t,context:{...n}}):T(e,L.__yo_iso_dispose)?Vp({expr:e,env:t,context:{...n}}):T(e,L.__yo_arc_dispose)?Dp({expr:e,env:t,context:{...n}}):T(e,L.__yo_drop_array_element)?Mp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dup_array_element)?Op({expr:e,env:t,context:{...n}}):T(e,L.__yo_drop_tuple_element)?Rp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dup_tuple_element)?Pp({expr:e,env:t,context:{...n}}):T(e,L.__yo_rc_own)?Lp({expr:e,env:t,context:{...n}}):T(e,L.__yo_dyn_drop)?Ap({expr:e,env:t,context:{...n}}):T(e,L.__yo_dyn_dup)?Ip({expr:e,env:t,context:{...n}}):T(e,L.__yo_sometype_drop)?Np({expr:e,env:t,context:{...n}}):T(e,L.__yo_sometype_dup)?xp({expr:e,env:t,context:{...n}}):T(e,L.__yo_gc_collect)?mp({expr:e,env:t,context:{...n}}):T(e,V.quote)?hp({expr:e,env:t,context:{...n}}):T(e,V.gensym)?yp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_is_atom)?up({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_is_fn_call)?cp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_get_callee)?fp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_get_args)?_p({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_to_string)?pp({expr:e,env:t,context:{...n}}):T(e,L.__yo_expr_eq)?dp({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_car)?w_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_cdr)?F_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_cons)?L_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_append)?A_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_length)?I_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_list_element_type)?N_({expr:e,env:t,context:{...n}}):I(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_"))?V_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_bool_and,2)||T(e,L.__yo_comptime_bool_or,2)||T(e,L.__yo_comptime_bool_eq,2)||T(e,L.__yo_comptime_bool_neq,2)||T(e,L.__yo_comptime_bool_not,1)||T(e,L.__yo_comptime_bool_to_comptime_string,1)?C_({expr:e,env:t,context:{...n}}):T(e,L.__yo_comptime_string_concat,2)||T(e,L.__yo_comptime_string_eq,2)||T(e,L.__yo_comptime_string_neq,2)||T(e,L.__yo_comptime_string_lt,2)||T(e,L.__yo_comptime_string_lte,2)||T(e,L.__yo_comptime_string_gt,2)||T(e,L.__yo_comptime_string_gte,2)||T(e,L.__yo_comptime_string_length,1)||T(e,L.__yo_comptime_string_to_upper,1)||T(e,L.__yo_comptime_string_to_lower,1)||T(e,L.__yo_comptime_string_slice)?M_({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_to_comptime_string,1)?Bp({expr:e,env:t,context:{...n}}):T(e,L.__yo_are_types_compatible,2)?Gp({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_contains_rc_type,1)?Wp({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_can_form_rc_cycle,1)?qp({expr:e,env:t,context:{...n}}):T(e,L.__yo_type_impls,2)?Hp({expr:e,env:t,context:{...n}}):T(e,L.__yo_var_print_info,1)?jp({expr:e,env:t,context:{...n}}):T(e,L.__yo_var_is_owning_the_rc_value)?Kp({expr:e,env:t,context:{...n}}):T(e,L.__yo_var_has_other_aliases)?Xp({expr:e,env:t,context:{...n}}):T(e,L.__yo_process_platform)||T(e,L.__yo_process_arch)?Ep({expr:e,env:t,context:{...n}}):T(e,V.while)?Ts({expr:e,env:t,context:{...n}}):T(e,L.va_start)?Yp({expr:e,env:t,context:{...n}}):sr({expr:e,env:t,context:{...n}})}function Sg(e){let t=e;for(;;){let n=ha.join(t,"std");if((0,Gd.existsSync)(n))return n;let r=ha.dirname(t);if(r===t)break;t=r}return ha.join(__dirname,"../std")}var tu=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??Sg(__dirname),this.codeGenratorC=new os,iu(zi),Tc(h_)}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)yo(r),mo(r),this.clearDependencies(r),Va(r),this.modules.delete(r);yo(t),mo(t),this.clearDependencies(t),Va(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())yo(t),mo(t),Va(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),Ya(),uc(),yu()}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 oa({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()}};0&&(module.exports={Emitter,IdentifierRegex,ModuleManager,Operators,PlaceholderToken,RAIIToken,TokenType,charIsOperator,clearAllGlobalImplState,clearGenericImplsFromModule,clearImplsFromModule,debug,findMatchingBracketTokenIndex,generateExprFromCode,stringIsOperator,tokenize});
|