@shd101wyy/yo 0.1.11 → 0.1.12
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 +236 -236
- package/out/cjs/yo-cli.cjs +271 -271
- package/out/esm/index.mjs +233 -233
- package/out/types/src/evaluator/exprs/import.d.ts +2 -0
- package/out/types/src/tests/import-path.test.d.ts +1 -0
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/out/esm/index.mjs
CHANGED
|
@@ -3,23 +3,23 @@ var Pi=class{constructor(){this.headers="";this.declarations="";this.code=""}emi
|
|
|
3
3
|
`,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
|
|
4
4
|
`,this.declarations}print(){return this.headers+`
|
|
5
5
|
`+this.declarations+`
|
|
6
|
-
`+this.code.trim()}};import{readFileSync as
|
|
7
|
-
${
|
|
6
|
+
`+this.code.trim()}};import{readFileSync as wg}from"node:fs";import Fg from"path";var qn=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}`}},kn=class{constructor(t,n,r){this.tokenAndErrorList=[];this.tokenAndErrorList=t,this.isAssertionError=n||!1,this.kind=r}toString(){return this.tokenAndErrorList.map(({token:n,errorMessage:r})=>`Error: ${r}
|
|
7
|
+
${mu({token:n})}`).join(`
|
|
8
8
|
|
|
9
|
-
`)}};function
|
|
9
|
+
`)}};function mu({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 pt(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new kn(e,t,n)}var
|
|
14
|
+
${mu({token:e})}`;return new kn([{token:e,errorMessage:o+(n?.message?`
|
|
15
|
+
`+n.message:"")}],r,i)}function pt(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new kn(e,t,n)}var rn=($=>($.Operator="operator",$.Dot=".",$.LParen="(",$.RParen=")",$.LBracket="[",$.RBracket="]",$.LCurlyBracket="{",$.RCurlyBracket="}",$.Char="char",$.String="string",$.Identifier="identifier",$.Integer="integer",$.Float="float",$.Bool="bool",$.Semicolon=";",$.Comma=",",$.SingleLineComment="single_line_comment",$.MultiLineComment="multi_line_comment",$.Whitespace="whitespace",$.TemplateString="template_string",$))(rn||{}),se={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}},ET={modulePath:"drop",inputString:"drop",type:"identifier",value:"drop",position:{row:0,column:0,character:0}},Es=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function Io(e){return Es.includes(e)}function mr(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!Io(r)){t=!1;break}}return t}var $s=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function yu(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 Cs;function gu(e){Cs=e}function x({expr:e,env:t,context:n}){if(!Cs)throw new Error("Internal Error: evaluateExpression function is not set.");return Cs({expr:e,env:t,context:n})}function hu(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;u===".."&&e[c]==="="&&(u+=e[c],c=c+1)}else for(;Io(e[c])&&e[c]!==".";)u+=e[c],c=c+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=c-1;continue}switch(a){case" ":case" ":case`
|
|
16
16
|
`:case"\r":{let _="",p=o,f=r;for(;e[p]===" "||e[p]===" "||e[p]===`
|
|
17
17
|
`||e[p]==="\r";)_+=e[p],e[p]===`
|
|
18
18
|
`&&(r++,i=p+1),p=p+1;n.push({type:"whitespace",value:_,position:{row:f,column:s,character:l},modulePath:t,inputString:e}),o=p-1;break}case"/":if(e[o+1]==="/"){let _="",p=o;for(;e[p]!==`
|
|
19
19
|
`&&p<e.length;)_+=e[p],p=p+1;n.push({type:"single_line_comment",value:_,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=p-1}else if(e[o+1]==="*"){let _=o,p="",f=r,d=1;for(p+=e[_],_++,p+=e[_],_++;d>0&&_<e.length;){if(e[_]===`
|
|
20
20
|
`&&(i=_+1,r++),e[_]==="/"&&e[_+1]==="*"){d++,p+="/*",_+=2;continue}if(e[_]==="*"&&e[_+1]==="/"){d--,p+="*/",_+=2;continue}p+=e[_],_++}if(d>0)throw new qn({message:"Unterminated multi-line comment",characterIndex:e.length-1,row:r});n.push({type:"multi_line_comment",value:p,position:{row:f,column:s,character:l},modulePath:t,inputString:e}),o=_-1}else throw new qn({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 _="";for(let p=o+1;p<e.length;p++){if(e[p]==="\\"){_+=e[p],p=p+1,_+=e[p];continue}if(e[p]==="'"){o=p;break}_+=e[p]}if(_.length===1||_.length===2&&_[0]==="\\")n.push({type:"char",value:`'${_}'`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});else throw new qn({message:`Invalid char '${_}', expected char to have length 1.`,characterIndex:o,row:r});break}case'"':{let _="";for(let p=o+1;p<e.length;p++){if(e[p]==="\\"){_+=e[p],p=p+1,_+=e[p];continue}if(e[p]==='"'){o=p;break}_+=e[p]}n.push({type:"string",value:`"${_}"`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case"`":{let _="",p=0,f=o+1;for(;f<e.length;){if(e[f]==="\\"&&f+1<e.length){let d=e[f+1];if(d==="$"){_+="\\$",f=f+2;continue}else{switch(f=f+1,d){case"n":_+=`
|
|
21
21
|
`;break;case"t":_+=" ";break;case"r":_+="\r";break;case"\\":_+="\\";break;case'"':_+='"';break;case"'":_+="'";break;case"`":_+="`";break;case"0":_+="\0";break;case"b":_+="\b";break;case"f":_+="\f";break;case"v":_+="\v";break;default:_+="\\",_+=d;break}f=f+1;continue}}if(p===0&&e[f]==="$"&&e[f+1]==="{"){_+="${",f=f+2,p=1;continue}if(p>0){e[f]==="{"?p=p+1:e[f]==="}"&&(p=p-1),_+=e[f],f=f+1;continue}if(e[f]==="`"){o=f;break}e[f]===`
|
|
22
|
-
`&&(r++,i=f+1),_+=e[f],f=f+1}if(f>=e.length&&e[f]!=="`")throw new qn({message:"Unterminated template string",characterIndex:o,row:r});n.push({type:"template_string",value:_,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 _=o,p=a;o=o+1;let f=/[0-9_]/;for(e[o-1]==="0"&&typeof e[o]=="string"&&(e[o]==="x"||e[o]==="X"?(p+=e[o],o=o+1,f=/[0-9A-Fa-f]/):e[o]==="b"||e[o]==="B"?(p+=e[o],o=o+1,f=/[01]/):(e[o]==="o"||e[o]==="O")&&(p+=e[o],o=o+1,f=/[0-7]/));typeof e[o]=="string"&&f.test(e[o]);)p+=e[o],o=o+1;if(e[o]==="."&&e[_-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 _=a,p=o;for(o=o+1;typeof e[o]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[o]);)_+=e[o],o=o+1;if(o=o-1,(e[o+1]==="!"||e[o+1]==="?")
|
|
22
|
+
`&&(r++,i=f+1),_+=e[f],f=f+1}if(f>=e.length&&e[f]!=="`")throw new qn({message:"Unterminated template string",characterIndex:o,row:r});n.push({type:"template_string",value:_,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 _=o,p=a;o=o+1;let f=/[0-9_]/;for(e[o-1]==="0"&&typeof e[o]=="string"&&(e[o]==="x"||e[o]==="X"?(p+=e[o],o=o+1,f=/[0-9A-Fa-f]/):e[o]==="b"||e[o]==="B"?(p+=e[o],o=o+1,f=/[01]/):(e[o]==="o"||e[o]==="O")&&(p+=e[o],o=o+1,f=/[0-7]/));typeof e[o]=="string"&&f.test(e[o]);)p+=e[o],o=o+1;if(e[o]==="."&&e[_-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 _=a,p=o;for(o=o+1;typeof e[o]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[o]);)_+=e[o],o=o+1;if(o=o-1,(e[o+1]==="!"||e[o+1]==="?")&&$s.test(_+e[o+1])&&(o=o+1,_+=e[o]),$s.test(_))switch(_){case"true":case"false":n.push({type:"bool",value:_,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:_,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new qn({message:`Invalid identifier ${_}`,characterIndex:p,row:r})}else throw new qn({message:`Unexpected character ${a}`,characterIndex:o,row:r});break}}return n}var fi=class e{constructor({modulePath:t,inputString:n}){this.hasTemplateString=!1;this.modulePath=t,this.inputString=n,this.tokens=hu(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===")"&&yu(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 _=r.substring(u,c);i.push({type:"expr",value:_}),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},_={tag:"Atom",token:c},p={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[_,{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 _=new e({modulePath:t.modulePath,inputString:l.value}).getProgram();if(_.length===0)throw m({token:t,errorMessage:"Empty expression in template string interpolation"});let p=_[0],f={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[p,{tag:"Atom",token:{type:"identifier",value:"to_string",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};u={tag:"FnCall",func:f,args:[],token:t}}if(s===null)s=u;else{let c={tag:"FnCall",func:{tag:"Atom",token:{type:".",value:".",position:t.position,modulePath:t.modulePath,inputString:t.inputString}},args:[s,{tag:"Atom",token:{type:"operator",value:"+",position:t.position,modulePath:t.modulePath,inputString:t.inputString}}],isInfix:!0,token:t};s={tag:"FnCall",func:c,args:[u],token:t}}}return{expr:s,index:n+1}}parseParenExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="(")throw m({token:t[n],errorMessage:"Expected left paren"});if(t[n+1]?.type===")")return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value: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 a,s=[o];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!a||a===",")a=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!a||a===";")a=";";else throw m({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in (...)'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type===")")break;let{expr:u,index:c}=this.parseExpression({tokens:t,index:n});s.push(u),n=c}let l=a===";"||!a;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:l?V.Tuple[0]:V.tuple[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:s,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw m({token:t[n],errorMessage:"Expected left bracket"});n=n+1;let i,o=[];for(;;){if(!t[n])throw m({token:t[n-1],errorMessage:"Expected ] or , for array"});if(t[n].type===","){if(!i||i===",")i=",";else throw m({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in [...]'});n=n+1}else if(t[n].type===";"){if(!i||i===";")i=";";else throw m({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in [...]'});n=n+1}if(t[n].type==="]")break;let{expr:u,index:c}=this.parseExpression({tokens:t,index:n});o.push(u),n=c}let a=i===";"||!i;if(a&&o.length>2)throw m({token:t[r],errorMessage:`Expected at 2 arguments for Array type, or 1 argument for Slice type, got ${o.length}`});let s=a&&o.length===2,l=a&&o.length===1;return{expr:{tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:s?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(B(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:se,errorMessage:"Unexpected end of input"});let i=null;switch(r.type){case"identifier":case"operator":case"bool":case"integer":case"float":case"string":case"char":{i={expr:{tag:"Atom",token:r},index:n+1};break}case"(":{i=this.parseParenExpr({tokens:t,index:n});break}case"[":{i=this.parseArrayExpr({tokens:t,index:n});break}case"{":{i=this.parseCurlyBracketExpr({tokens:t,index:n});break}case".":{i={expr:{tag:"Atom",token:r},index:n+1};break}case"template_string":{i=this.parseTemplateString({token:r,index:n});break}default:throw m({token:r,errorMessage:`Unexpected token "${r.type}"`})}return i}isOperatorAtLineStart(t,n){for(let r=t.length-1;r>=0;r--){let i=t[r];if(i.type==="whitespace"&&i.value.includes(`
|
|
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 B(t)?t.token.position.column:Math.min(this.getExprMinimumColumnNumber(t.func),...t.args.map(n=>this.getExprMinimumColumnNumber(n)))}parsePrimaryEnd({primaryExpr:t,tokens:n,index:r}){let i=r,o=this.skipWhitespace(n,r),a=o!==r,s=n[r-1]?.type==="whitespace";r=o;let l=n[o];if(!l||l.type===";"||l.type===","||l.type===")"||l.type==="]"||l.type==="}")return{expr:t,index:r};let u=t.tag==="Atom"&&t.token.type===".",c=l?.type==="."&&a&&n[o+1]?.type!=="whitespace"&&n.slice(i,o).some(_=>_.type==="whitespace"&&_.value.includes(`
|
|
24
24
|
`))&&this.isOperatorAtLineStart(n.slice(i,o),0);if(u||c||l.type==="."&&!a&&!s&&n[o+1]?.type!=="whitespace"){let{expr:_,index:p}=this.parsePrimary({tokens:n,index:u?r:r+1});r=p;let f={expr:{tag:"FnCall",func:{tag:"Atom",token:u?t.token:l},args:u?[_]:[t,_],isInfix:!u,token:u?t.token:l},index:r};for(;n[r]&&n[r].type===".";){let{expr:d,index:h}=this.parsePrimary({tokens:n,index:r+1});f={expr:{tag:"FnCall",func:{tag:"Atom",token:l},args:[f.expr,d],isInfix:!0,token:l},index:h},r=h}return this.parsePrimaryEnd({primaryExpr:f.expr,tokens:n,index:f.index})}else if((l.type==="operator"||l.type==="."&&!a)&&n[r+1]?.type!=="("){let _=this.skipWhitespace(n,r+1),{expr:p,index:f}=this.parseExpression({tokens:n,index:_});if(p.tag==="FnCall"&&p.isInfix&&p.func.tag==="Atom"&&p.func.token.type!=="."&&!this.isParenthesizedExpression(n,_,f-1)){let d=`Ambiguous operator precedence.
|
|
25
25
|
Please use parentheses to clarify:
|
|
@@ -40,14 +40,14 @@ ${e}
|
|
|
40
40
|
`,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}"
|
|
41
41
|
${n.map(r=>w(r)).join(`
|
|
42
42
|
`)}
|
|
43
|
-
`);return n[0]}function
|
|
43
|
+
`);return n[0]}function vu(e){let t=new fi({modulePath:`auto-generated://
|
|
44
44
|
// === START auto-generated code ===
|
|
45
45
|
${e}
|
|
46
46
|
// === END auto-generated code ===
|
|
47
|
-
`,inputString:e});if(t.getParserError())throw t.getParserError();return t.getProgram()}function Ao(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function de(e){return e?.tag==="unit"}function gt(e){return e?.tag==="comptime_int"}function Mt(e){return e?.tag==="comptime_float"}function ht(e){return e?.tag==="comptime_string"}function Tt(e){return e?.tag==="ComptimeList"}function di(e){return Tt(e)&&Dt(e.childType)}function vn(e){return e?.tag==="bool"}function xo(e){return e?.tag==="usize"}function So(e){return e?.tag==="isize"}function rr(e){return e?.tag==="u8"}function Vo(e){return e?.tag==="i8"}function No(e){return e?.tag==="u16"}function Mo(e){return e?.tag==="i16"}function Do(e){return e?.tag==="u32"}function Oo(e){return e?.tag==="i32"}function Ro(e){return e?.tag==="u64"}function Po(e){return e?.tag==="i64"}function Uo(e){return e?.tag==="f32"}function zo(e){return e?.tag==="f64"}function Dt(e){return e?.tag==="Expr"}function ke(e){return e?.tag==="Array"}function Ge(e){return e?.tag==="Slice"}function Se(e){return e?.tag==="Tuple"}function ot(e){return e?.tag==="Union"}function ge(e){return e?.tag==="Enum"}function pe(e){return e?.tag==="Struct"}function dt(e){return e?.tag==="Struct"&&e.isReferenceSemantics}function An(e){return e?.tag==="Struct"&&e.isNewtype}function Ce(e){return e?.tag==="Module"}function Le(e){return e?.tag==="Trait"}function At(e){return Le(e)&&e.isFn!==void 0}function G(e){return e?.tag==="Function"}function Bo(e){return e?.tag==="Function"&&e.return.isCompileTimeOnly}function Xe(e){return e?.tag==="Type"}function
|
|
48
|
-
Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(dt(a))continue;let s=[...n,o],l=Ft(a,s);Xe(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?wn(i):r?tt(e):tt(e)}function Ft(e,t=[]){if(Ae(e))return tt(e);if(Ao(e))return tt(e);if(Xe(e))return wn(e.level+1);if(gt(e)||Mt(e)||ht(e)||Tt(e))return tt(e);if(Dt(e))return tt(e);if(G(e))return tt(e);if(At(e))return tt(e);if(ke(e))return Ft(e.childType,t);if(Ge(e))return tt(e);if(Se(e))return $a(e,e.fields,t);if(pe(e))return $a(e,e.fields,t);if(ge(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return $a(e,n,t)}else{if(ot(e))return $a(e,e.fields,t);if(Ce(e))return wn(1,e);if(Le(e))return wn(1,e);if(D(e))return e.parentType;if(Ee(e))return tt(e);if(xt(e))return tt(e);if(wt(e))return tt(e);if(rn(e))return tt(e);if(Nr(e))return tt(e);if(lt(e))return wn(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function Eu(e){if(e.exprs.labelExpr?.token)return e.exprs.labelExpr.token;if(e.exprs.typeExpr?.token)return e.exprs.typeExpr.token;if(e.exprs.defaultValueExpr?.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function De(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return A(e.value);case"ComptimeInt":case"ComptimeFloat":return e.value.toString();case"ComptimeString":return JSON.stringify(e.value);case"ComptimeList":return`comptime_list(${e.elements.map(De).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(De).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(De).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(De).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}: ${De(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let i=t?.fields[r].label??"_";return mr(i)&&(i=`(${i})`),`${i}: ${De(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}: ${De(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}: ${De(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${w(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${A(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return Fn(t)?`<ptr to ${De(t.elements[e.targetIndex])}>`:`<ptr to ${De(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function R(e){return e?.tag==="Type"}function Ln(e){return e?.tag==="ComptimeInt"}function Ca(e){return e?.tag==="ComptimeFloat"}function we(e){return e?.tag==="ComptimeString"}function Sn(e){return e?.tag==="ComptimeList"}function $u(e){return Sn(e)&&Dt(e.type.childType)}function Ue(e){return e?.tag==="ComptimeInt"||e?.tag==="ComptimeFloat"||e?.tag==="U8"||e?.tag==="I8"||e?.tag==="U16"||e?.tag==="I16"||e?.tag==="U32"||e?.tag==="I32"||e?.tag==="U64"||e?.tag==="I64"||e?.tag==="F32"||e?.tag==="F64"||e?.tag==="Usize"||e?.tag==="Isize"}function We(e){return e?.tag==="Bool"}function ee(e){return e?.tag==="Function"}function ue(e){return e?.tag==="Unknown"}function pn(e){return e?.tag==="Tuple"}function Pt(e){return e?.tag==="Struct"}function Fn(e){return e?.tag==="Array"}function mi(e){return e?.tag==="Slice"}function Lt(e){return e?.tag==="Enum"}function Ye(e){return e?.tag==="Module"}function mt(e){return e?.tag==="Trait"}function Yn(e){return e?.tag==="Ptr"}function Kt(e){return e?.tag==="Expr"}function J(e){return{tag:"Type",type:Ft(e),value:e}}function Ut(e){return{tag:"ComptimeString",type:zt(),value:e}}function fn(e,t){return{tag:"ComptimeList",type:Mr(e),elements:t}}function on(e,t){let n;if(e==="ComptimeInt")n=vr();else if(e==="ComptimeFloat")n=Gi();else if(e==="U8")n=qi();else if(e==="I8")n=Yi();else if(e==="U16")n=Hi();else if(e==="I16")n=ji();else if(e==="U32")n=Ki();else if(e==="I32")n=Jr();else if(e==="U64")n=Xi();else if(e==="I64")n=Qi();else if(e==="F32")n=Zi();else if(e==="F64")n=ei();else if(e==="Usize")n=St();else if(e==="Isize")n=Wi();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Qn(e){return on("ComptimeInt",e)}function ba(e){return on("ComptimeFloat",e)}function ft(e){return{tag:"Bool",type:rt(),value:e}}function W(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(Xe(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${A(e)}`);let o=Vn(e,t,{recursiveTypeRef:n,env:r,context:i});return J(o)}if(G(e)&&t){let o=e;if(o.return.isCompileTimeOnly&&Xe(o.return.type)&&o.return.type.level===0&&o.parameters.every(s=>s.isCompileTimeOnly)){let s=Vn(o.return.type,t,{recursiveTypeRef:n,env:r,context:i});return s.kindFunctionType=o,J(s)}}return{tag:"Unknown",type:e,variableName:t}}function Zn(e,t){return{tag:"Struct",type:e,fields:t}}function Cu(e,t,n){return{tag:"Module",type:e,fields:t,moduleLevelInitExprs:n&&n.length>0?n:void 0}}function zi(e,t){return{tag:"Trait",type:e,fields:t}}function ka(e,t){return{tag:"Tuple",type:e,fields:t}}function yi(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Qr(e,t){return{tag:"Array",type:e,elements:t}}function Bi(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function ln(e){return{tag:"Expr",type:Xt(),value:e}}function Zr(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function Ot(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 q({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(we(n)&&we(r))return n.value===r.value;if(Sn(n)&&Sn(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Ot({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Ue(n)&&Ue(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(We(n)&&We(r))return n.value===r.value;if(Fn(n)&&Fn(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Ot({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(mi(n)&&mi(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(!Ot({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(pn(n)&&pn(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Pt(n)&&Pt(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Lt(n)&&Lt(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Ye(n)&&Ye(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(mt(n)&&mt(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Kt(n)&&Kt(r))return n.value===r.value||wa(n.value,r.value);if(ue(n)&&ue(r)){let i,o;if(n.variableName){let a=Y(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!ue(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=Y(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!ue(s.value[0])&&(o=s.value[0])}}return i&&o?Ot({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:q({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(ue(n)&&!ue(r)){if(n.variableName){let i=Y(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!ue(o.value[0]))return Ot({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!ue(n)&&ue(r)){if(r.variableName){let i=Y(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!ue(o.value[0]))return Ot({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return Yn(n)&&Yn(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Er(e,t){return e?hi(e,t):!1}function $r(e,t){return e?$y(e,t):!1}function hi(e,t){return lr(e,t)&&!Rr(e,t)}function $y(e,t){let n=lr(e,t),r=Rr(e,t);return!n&&r}function Ve(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(mn(e))return!0;switch(e.tag){case"Array":return Ve(e.childType,t);case"Tuple":return e.fields.some(n=>Ve(n.type,t));case"Union":return e.fields.some(n=>Ve(n.type,t));case"Struct":return e.fields.some(n=>Ve(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>Ve(r.type,t)));case"Iso":return Ve(e.childType,t);case"Arc":return Ve(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return Ie(n)?!0:n.resolvedConcreteType?Ve(n.resolvedConcreteType,t):!0}default:return!1}}function me(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),D(e))return e.isExtern?!1:e.resolvedConcreteType?me(e.resolvedConcreteType,t):!(Jt(e)||Ie(e));switch(e.tag){case"Array":return me(e.childType,t);case"Tuple":return e.fields.some(n=>me(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&me(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>me(r.type,t)));case"Union":return e.fields.some(n=>me(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>me(r.type,t))||me(n.return.type,t)}case"Module":return e.fields.some(n=>me(n.type,t));case"Ptr":return me(e.childType,t);case"Slice":return me(e.childType,t);case"TypeApplication":return!0;default:return!1}}function Dr(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),ke(e)?ue(e.length)?!0:Dr(e.childType,t):Ee(e)||Ge(e)?Dr(e.childType,t):Se(e)?e.fields.some(n=>Dr(n.type,t)):pe(e)?e.fields.some(n=>Dr(n.type,t)):ge(e)?e.variants.some(n=>n.fields?.some(r=>Dr(r.type,t))):ot(e)?e.fields.some(n=>Dr(n.type,t)):!1)}function ks(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),D(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{o.fields?.forEach(a=>r(a.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function eo(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return ue(t.length)||eo(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?eo(t.isFn.callType):!1}default:return!1}}function vt({type:e,expectedType:t,expr:n,env:r}){let i;if(gt(e))i=Jr();else if(Mt(e))i=ei();else if(ht(e))t&&(Ee(t)&&(rr(t.childType)||Ui(t.childType))||Ge(t))&&(i=t),i||(i=Fu(r));else return e;return i&&n?.$&&(n.$.convertedRuntimeType=i),i??e}function bs(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=A(e.type,t),i=e.exprs.defaultValueExpr?w(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function Ji(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?De(e.defaultValue):"",i=e.assignedValue?De(e.assignedValue):"";return r?`(${n}: ${A(e.type,t)}) ?= ${r}`:i?`(${n}: ${A(e.type,t)}) = ${i}`:`${n}: ${A(e.type,t)}`}function bu(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?De(e.defaultValue):"",i=e.assignedValue?De(e.assignedValue):"";return r?`(${n} : ${A(e.type,t)}) ?= ${r}`:i?`(${n} : ${A(e.type,t)}) = ${i}`:`${n} : ${A(e.type,t)}`}function ku(e,t=new Set){let n=e.parameters.map(_=>bs(_,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(_=>bs(_,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=A(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(_=>_.isEffectRowSpread?`...(${_.label})`:bs(_,t)).join(", ")})`:"",l=[r,n,s,i].filter(_=>!!_).join(", "),u=e.SelfType?.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function A(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return Cy(e,t)}finally{e.id&&t.delete(e.id)}}function Cy(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${A(e.childType,t)}; ${De(e.length)}]`;case"Slice":return`[${A(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>Ji(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=>Ji(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=>Ji(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=>Ji(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=>bu(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(At(n))return`Fn${ku(n.isFn.callType,t).slice(2)}`;if(rn(n)){let i=[A(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(A(o.type,t));return`Future(${i.join(", ")})`}let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}trait(${n.fields.map(i=>bu(i,t)).join(", ")})`,n.receiverType&&(r=`(${A(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:ku(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(A(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${A(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${A(e.childType,t)})`;case"Iso":return`Iso(${A(e.childType,t)})`;case"Arc":return`Arc(${A(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${A(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${A(r.type,t)}`).join(", ")})`}case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let{traitType:i}of n.requiredTraits)r.push(A(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${A(i,t)})`);return`Dyn(${r.join(", ")})`}case"TypeApplication":{let n=e,r=A(n.constructor,t),i=n.args.map(o=>A(o,t)).join(", ");return`${r}(${i})`}default:return`${e.tag}`}}var wu=64;function ar(){return wu}function Fa(){return wu/8}function by(e){let t=ti(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(Ue(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function ky(e){let t=0,n=1;for(let r of e.fields){let i=ti(r.type);if(i===null)return null;if(i===-1)return-1;let o=or(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function wy(e){let t=0,n=1;for(let r of e.fields){let i=ti(r.type);if(i===null)return null;if(i===-1)return-1;let o=or(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function Fy(e){let t=0,n=0;for(let d of e.variants){let h=0,g=1;if(d.fields)for(let v of d.fields){let T=ti(v.type);if(T===null)return null;if(T===-1)return-1;let $=or(v.type);if($===null)return null;let C=Math.ceil(T/8);h=Math.ceil(h/$)*$,h+=C,g=Math.max(g,$),n=Math.max(n,$*8)}h=Math.ceil(h/g)*g;let y=h*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,_=c/8,p=a/8,f=(p-_%p)%p*8;return c+f}function Ly(e){let t=0;for(let n of e.fields){let r=ti(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function or(e){if(D(e))return null;if(de(e)||Xe(e)||gt(e)||Mt(e)||ht(e)||Tt(e)||Ce(e)||Le(e)||Dt(e))return 1;if(vn(e))return 1;if(xo(e)||So(e))return Fa();if(rr(e)||Vo(e))return 1;if(No(e)||Mo(e))return 2;if(Do(e)||Oo(e))return 4;if(Ro(e)||Po(e))return 8;if(Uo(e))return 4;if(zo(e))return 8;if(ke(e))return or(e.childType);if(Se(e)){let t=1;for(let n of e.fields){let r=or(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(pe(e)){if(e.isReferenceSemantics)return Fa();if(e.isNewtype)return or(e.fields[0].type);let t=1;for(let n of e.fields){let r=or(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ge(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=or(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(ot(e)){let t=1;for(let n of e.fields){let r=or(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(G(e))return Fa();if(Ee(e))return Fa()}return null}function ti(e){return D(e)?null:de(e)||Xe(e)||gt(e)||Mt(e)||ht(e)||Tt(e)||Ce(e)||Le(e)||Dt(e)?0:vn(e)?8:xo(e)||So(e)?ar():rr(e)||Vo(e)?8:No(e)||Mo(e)?16:Do(e)||Oo(e)?32:Ro(e)||Po(e)?64:Uo(e)?32:zo(e)?64:ke(e)?by(e):Se(e)?ky(e):pe(e)?e.isReferenceSemantics?ar():e.isNewtype?ti(e.fields[0].type):wy(e):ge(e)?Fy(e):ot(e)?Ly(e):G(e)||Ee(e)?ar():null}function Or(e,t){if(Nr(e))throw pt([{token:t,errorMessage:`Cannot use 'void' type here.
|
|
47
|
+
`,inputString:e});if(t.getParserError())throw t.getParserError();return t.getProgram()}function Ao(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function de(e){return e?.tag==="unit"}function gt(e){return e?.tag==="comptime_int"}function Mt(e){return e?.tag==="comptime_float"}function ht(e){return e?.tag==="comptime_string"}function Tt(e){return e?.tag==="ComptimeList"}function di(e){return Tt(e)&&Dt(e.childType)}function vn(e){return e?.tag==="bool"}function xo(e){return e?.tag==="usize"}function So(e){return e?.tag==="isize"}function rr(e){return e?.tag==="u8"}function Vo(e){return e?.tag==="i8"}function No(e){return e?.tag==="u16"}function Mo(e){return e?.tag==="i16"}function Do(e){return e?.tag==="u32"}function Oo(e){return e?.tag==="i32"}function Ro(e){return e?.tag==="u64"}function Po(e){return e?.tag==="i64"}function Uo(e){return e?.tag==="f32"}function zo(e){return e?.tag==="f64"}function Dt(e){return e?.tag==="Expr"}function ke(e){return e?.tag==="Array"}function Ge(e){return e?.tag==="Slice"}function Se(e){return e?.tag==="Tuple"}function ot(e){return e?.tag==="Union"}function ge(e){return e?.tag==="Enum"}function pe(e){return e?.tag==="Struct"}function dt(e){return e?.tag==="Struct"&&e.isReferenceSemantics}function An(e){return e?.tag==="Struct"&&e.isNewtype}function Ce(e){return e?.tag==="Module"}function Le(e){return e?.tag==="Trait"}function At(e){return Le(e)&&e.isFn!==void 0}function G(e){return e?.tag==="Function"}function Bo(e){return e?.tag==="Function"&&e.return.isCompileTimeOnly}function Xe(e){return e?.tag==="Type"}function Tu(e){return Xe(e)&&e.tag==="Type"&&e.level===0}function D(e){return e?.tag==="SomeType"}function Ee(e){return e?.tag==="Ptr"}function xt(e){return e?.tag==="Iso"}function wt(e){return e?.tag==="Arc"}function Ae(e){return e?.tag==="Dyn"}function Vr(e){return e?.tag==="TypeApplication"}function mn(e){if(D(e)){let t=e;if(Ie(t))return!0;if(t.resolvedConcreteType)return mn(t.resolvedConcreteType)}return dt(e)||Ae(e)||xt(e)||wt(e)}function yr(e){return e?.tag==="u8"||e?.tag==="i8"||e?.tag==="u16"||e?.tag==="i16"||e?.tag==="u32"||e?.tag==="i32"||e?.tag==="u64"||e?.tag==="i64"||e?.tag==="usize"||e?.tag==="isize"}function gr(e){return e?.tag==="f32"||e?.tag==="f64"}function Eu(e){return e?.tag==="i8"||e?.tag==="i16"||e?.tag==="i32"||e?.tag==="i64"||e?.tag==="isize"}function Ui(e){return e?.tag==="char"}function Nr(e){return e?.tag==="void"}function on(e){return Le(e)&&e.isFuture!==void 0}function Ea(e){return Le(e)&&e.isConcrete!==void 0}function ir(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 Xn(e){if(!e||e.return?.isCompileTimeOnly)return!1;let t=e.parameters.some(r=>r.isCompileTimeOnly)||e.forallParameters.length>0||e.implicitParameters.length>0,n=e.parameters.some(r=>!r.isCompileTimeOnly&&D(r.type)&&!Ie(r.type));return t||n}function hr(e){if(!e||e.return?.isCompileTimeOnly)return!1;let t=e.parameters.some(r=>r.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(r=>!r.isCompileTimeOnly&&D(r.type)&&!Ie(r.type));return t||n}function bs(e){let t=e.type;return t?Xn(t)&&(e.specializedFunctionCaches?.length??0)>0:!1}function xn(e){return dt(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!e.typeName?.startsWith("Box("):!1}function lt(e){return e?.tag==="EffectsRow"}function $a(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}"
|
|
48
|
+
Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(dt(a))continue;let s=[...n,o],l=Ft(a,s);Xe(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?wn(i):r?tt(e):tt(e)}function Ft(e,t=[]){if(Ae(e))return tt(e);if(Ao(e))return tt(e);if(Xe(e))return wn(e.level+1);if(gt(e)||Mt(e)||ht(e)||Tt(e))return tt(e);if(Dt(e))return tt(e);if(G(e))return tt(e);if(At(e))return tt(e);if(ke(e))return Ft(e.childType,t);if(Ge(e))return tt(e);if(Se(e))return $a(e,e.fields,t);if(pe(e))return $a(e,e.fields,t);if(ge(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return $a(e,n,t)}else{if(ot(e))return $a(e,e.fields,t);if(Ce(e))return wn(1,e);if(Le(e))return wn(1,e);if(D(e))return e.parentType;if(Ee(e))return tt(e);if(xt(e))return tt(e);if(wt(e))return tt(e);if(on(e))return tt(e);if(Nr(e))return tt(e);if(lt(e))return wn(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function $u(e){if(e.exprs.labelExpr?.token)return e.exprs.labelExpr.token;if(e.exprs.typeExpr?.token)return e.exprs.typeExpr.token;if(e.exprs.defaultValueExpr?.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function De(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return A(e.value);case"ComptimeInt":case"ComptimeFloat":return e.value.toString();case"ComptimeString":return JSON.stringify(e.value);case"ComptimeList":return`comptime_list(${e.elements.map(De).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(De).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(De).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(De).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}: ${De(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let i=t?.fields[r].label??"_";return mr(i)&&(i=`(${i})`),`${i}: ${De(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}: ${De(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}: ${De(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${w(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${A(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return Fn(t)?`<ptr to ${De(t.elements[e.targetIndex])}>`:`<ptr to ${De(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function R(e){return e?.tag==="Type"}function Ln(e){return e?.tag==="ComptimeInt"}function Ca(e){return e?.tag==="ComptimeFloat"}function we(e){return e?.tag==="ComptimeString"}function Sn(e){return e?.tag==="ComptimeList"}function Cu(e){return Sn(e)&&Dt(e.type.childType)}function Ue(e){return e?.tag==="ComptimeInt"||e?.tag==="ComptimeFloat"||e?.tag==="U8"||e?.tag==="I8"||e?.tag==="U16"||e?.tag==="I16"||e?.tag==="U32"||e?.tag==="I32"||e?.tag==="U64"||e?.tag==="I64"||e?.tag==="F32"||e?.tag==="F64"||e?.tag==="Usize"||e?.tag==="Isize"}function We(e){return e?.tag==="Bool"}function ee(e){return e?.tag==="Function"}function ue(e){return e?.tag==="Unknown"}function pn(e){return e?.tag==="Tuple"}function Pt(e){return e?.tag==="Struct"}function Fn(e){return e?.tag==="Array"}function mi(e){return e?.tag==="Slice"}function Lt(e){return e?.tag==="Enum"}function Ye(e){return e?.tag==="Module"}function mt(e){return e?.tag==="Trait"}function Yn(e){return e?.tag==="Ptr"}function Kt(e){return e?.tag==="Expr"}function J(e){return{tag:"Type",type:Ft(e),value:e}}function Ut(e){return{tag:"ComptimeString",type:zt(),value:e}}function fn(e,t){return{tag:"ComptimeList",type:Mr(e),elements:t}}function an(e,t){let n;if(e==="ComptimeInt")n=vr();else if(e==="ComptimeFloat")n=Gi();else if(e==="U8")n=qi();else if(e==="I8")n=Yi();else if(e==="U16")n=Hi();else if(e==="I16")n=ji();else if(e==="U32")n=Ki();else if(e==="I32")n=Jr();else if(e==="U64")n=Xi();else if(e==="I64")n=Qi();else if(e==="F32")n=Zi();else if(e==="F64")n=ei();else if(e==="Usize")n=St();else if(e==="Isize")n=Wi();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Qn(e){return an("ComptimeInt",e)}function ba(e){return an("ComptimeFloat",e)}function ft(e){return{tag:"Bool",type:rt(),value:e}}function W(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(Xe(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${A(e)}`);let o=Vn(e,t,{recursiveTypeRef:n,env:r,context:i});return J(o)}if(G(e)&&t){let o=e;if(o.return.isCompileTimeOnly&&Xe(o.return.type)&&o.return.type.level===0&&o.parameters.every(s=>s.isCompileTimeOnly)){let s=Vn(o.return.type,t,{recursiveTypeRef:n,env:r,context:i});return s.kindFunctionType=o,J(s)}}return{tag:"Unknown",type:e,variableName:t}}function Zn(e,t){return{tag:"Struct",type:e,fields:t}}function bu(e,t,n){return{tag:"Module",type:e,fields:t,moduleLevelInitExprs:n&&n.length>0?n:void 0}}function zi(e,t){return{tag:"Trait",type:e,fields:t}}function ka(e,t){return{tag:"Tuple",type:e,fields:t}}function yi(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Qr(e,t){return{tag:"Array",type:e,elements:t}}function Bi(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function ln(e){return{tag:"Expr",type:Xt(),value:e}}function Zr(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function Ot(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 q({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(we(n)&&we(r))return n.value===r.value;if(Sn(n)&&Sn(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Ot({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Ue(n)&&Ue(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(We(n)&&We(r))return n.value===r.value;if(Fn(n)&&Fn(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Ot({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(mi(n)&&mi(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(!Ot({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(pn(n)&&pn(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Pt(n)&&Pt(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Lt(n)&&Lt(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Ye(n)&&Ye(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(mt(n)&&mt(r)){if(n.fields.length!==r.fields.length||!q({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(!Ot({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Kt(n)&&Kt(r))return n.value===r.value||wa(n.value,r.value);if(ue(n)&&ue(r)){let i,o;if(n.variableName){let a=Y(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!ue(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=Y(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!ue(s.value[0])&&(o=s.value[0])}}return i&&o?Ot({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:q({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(ue(n)&&!ue(r)){if(n.variableName){let i=Y(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!ue(o.value[0]))return Ot({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!ue(n)&&ue(r)){if(r.variableName){let i=Y(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!ue(o.value[0]))return Ot({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return Yn(n)&&Yn(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Er(e,t){return e?hi(e,t):!1}function $r(e,t){return e?Cy(e,t):!1}function hi(e,t){return lr(e,t)&&!Rr(e,t)}function Cy(e,t){let n=lr(e,t),r=Rr(e,t);return!n&&r}function Ve(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(mn(e))return!0;switch(e.tag){case"Array":return Ve(e.childType,t);case"Tuple":return e.fields.some(n=>Ve(n.type,t));case"Union":return e.fields.some(n=>Ve(n.type,t));case"Struct":return e.fields.some(n=>Ve(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>Ve(r.type,t)));case"Iso":return Ve(e.childType,t);case"Arc":return Ve(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return Ie(n)?!0:n.resolvedConcreteType?Ve(n.resolvedConcreteType,t):!0}default:return!1}}function me(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),D(e))return e.isExtern?!1:e.resolvedConcreteType?me(e.resolvedConcreteType,t):!(Jt(e)||Ie(e));switch(e.tag){case"Array":return me(e.childType,t);case"Tuple":return e.fields.some(n=>me(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&me(n.type,t));case"Enum":return e.variants.some(n=>n.fields?.some(r=>me(r.type,t)));case"Union":return e.fields.some(n=>me(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>me(r.type,t))||me(n.return.type,t)}case"Module":return e.fields.some(n=>me(n.type,t));case"Ptr":return me(e.childType,t);case"Slice":return me(e.childType,t);case"TypeApplication":return!0;default:return!1}}function Dr(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),ke(e)?ue(e.length)?!0:Dr(e.childType,t):Ee(e)||Ge(e)?Dr(e.childType,t):Se(e)?e.fields.some(n=>Dr(n.type,t)):pe(e)?e.fields.some(n=>Dr(n.type,t)):ge(e)?e.variants.some(n=>n.fields?.some(r=>Dr(r.type,t))):ot(e)?e.fields.some(n=>Dr(n.type,t)):!1)}function ws(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),D(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{o.fields?.forEach(a=>r(a.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function eo(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return ue(t.length)||eo(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?eo(t.isFn.callType):!1}default:return!1}}function vt({type:e,expectedType:t,expr:n,env:r}){let i;if(gt(e))i=Jr();else if(Mt(e))i=ei();else if(ht(e))t&&(Ee(t)&&(rr(t.childType)||Ui(t.childType))||Ge(t))&&(i=t),i||(i=Lu(r));else return e;return i&&n?.$&&(n.$.convertedRuntimeType=i),i??e}function ks(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=A(e.type,t),i=e.exprs.defaultValueExpr?w(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function Ji(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?De(e.defaultValue):"",i=e.assignedValue?De(e.assignedValue):"";return r?`(${n}: ${A(e.type,t)}) ?= ${r}`:i?`(${n}: ${A(e.type,t)}) = ${i}`:`${n}: ${A(e.type,t)}`}function ku(e,t=new Set){let n=e.label;mr(n)&&(n=`(${n})`);let r=e.defaultValue?De(e.defaultValue):"",i=e.assignedValue?De(e.assignedValue):"";return r?`(${n} : ${A(e.type,t)}) ?= ${r}`:i?`(${n} : ${A(e.type,t)}) = ${i}`:`${n} : ${A(e.type,t)}`}function wu(e,t=new Set){let n=e.parameters.map(_=>ks(_,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(_=>ks(_,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=A(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(_=>_.isEffectRowSpread?`...(${_.label})`:ks(_,t)).join(", ")})`:"",l=[r,n,s,i].filter(_=>!!_).join(", "),u=e.SelfType?.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function A(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return by(e,t)}finally{e.id&&t.delete(e.id)}}function by(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${A(e.childType,t)}; ${De(e.length)}]`;case"Slice":return`[${A(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>Ji(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=>Ji(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=>Ji(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=>Ji(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=>ku(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(At(n))return`Fn${wu(n.isFn.callType,t).slice(2)}`;if(on(n)){let i=[A(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(A(o.type,t));return`Future(${i.join(", ")})`}let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}trait(${n.fields.map(i=>ku(i,t)).join(", ")})`,n.receiverType&&(r=`(${A(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:wu(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(A(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${A(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${A(e.childType,t)})`;case"Iso":return`Iso(${A(e.childType,t)})`;case"Arc":return`Arc(${A(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${A(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${A(r.type,t)}`).join(", ")})`}case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let{traitType:i}of n.requiredTraits)r.push(A(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${A(i,t)})`);return`Dyn(${r.join(", ")})`}case"TypeApplication":{let n=e,r=A(n.constructor,t),i=n.args.map(o=>A(o,t)).join(", ");return`${r}(${i})`}default:return`${e.tag}`}}var Fu=64;function ar(){return Fu}function Fa(){return Fu/8}function ky(e){let t=ti(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(Ue(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function wy(e){let t=0,n=1;for(let r of e.fields){let i=ti(r.type);if(i===null)return null;if(i===-1)return-1;let o=or(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function Fy(e){let t=0,n=1;for(let r of e.fields){let i=ti(r.type);if(i===null)return null;if(i===-1)return-1;let o=or(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function Ly(e){let t=0,n=0;for(let d of e.variants){let h=0,g=1;if(d.fields)for(let v of d.fields){let T=ti(v.type);if(T===null)return null;if(T===-1)return-1;let $=or(v.type);if($===null)return null;let C=Math.ceil(T/8);h=Math.ceil(h/$)*$,h+=C,g=Math.max(g,$),n=Math.max(n,$*8)}h=Math.ceil(h/g)*g;let y=h*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,_=c/8,p=a/8,f=(p-_%p)%p*8;return c+f}function Iy(e){let t=0;for(let n of e.fields){let r=ti(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function or(e){if(D(e))return null;if(de(e)||Xe(e)||gt(e)||Mt(e)||ht(e)||Tt(e)||Ce(e)||Le(e)||Dt(e))return 1;if(vn(e))return 1;if(xo(e)||So(e))return Fa();if(rr(e)||Vo(e))return 1;if(No(e)||Mo(e))return 2;if(Do(e)||Oo(e))return 4;if(Ro(e)||Po(e))return 8;if(Uo(e))return 4;if(zo(e))return 8;if(ke(e))return or(e.childType);if(Se(e)){let t=1;for(let n of e.fields){let r=or(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(pe(e)){if(e.isReferenceSemantics)return Fa();if(e.isNewtype)return or(e.fields[0].type);let t=1;for(let n of e.fields){let r=or(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ge(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=or(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(ot(e)){let t=1;for(let n of e.fields){let r=or(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(G(e))return Fa();if(Ee(e))return Fa()}return null}function ti(e){return D(e)?null:de(e)||Xe(e)||gt(e)||Mt(e)||ht(e)||Tt(e)||Ce(e)||Le(e)||Dt(e)?0:vn(e)?8:xo(e)||So(e)?ar():rr(e)||Vo(e)?8:No(e)||Mo(e)?16:Do(e)||Oo(e)?32:Ro(e)||Po(e)?64:Uo(e)?32:zo(e)?64:ke(e)?ky(e):Se(e)?wy(e):pe(e)?e.isReferenceSemantics?ar():e.isNewtype?ti(e.fields[0].type):Fy(e):ge(e)?Ly(e):ot(e)?Iy(e):G(e)||Ee(e)?ar():null}function Or(e,t){if(Nr(e))throw pt([{token:t,errorMessage:`Cannot use 'void' type here.
|
|
49
49
|
Please consider use 'unit' type instead.
|
|
50
|
-
`}])}function sr(e,t,n){if(!dt(e)||vi(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(gi(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function gi(e,t,n,r){if(pe(e)&&e.id===t.id)return!0;if(pe(e)&&e.isReferenceSemantics)return sr(e,new Set(n),r);if(ge(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(gi(o.type,t,n,r))return!0}}if(D(e))return vi(e,r)?!1:e.resolvedConcreteType?gi(e.resolvedConcreteType,t,n,r):!0;if(ke(e)||Ge(e))return gi(e.childType,t,n,r);if(Se(e)){for(let i of e.fields)if(gi(i.type,t,n,r))return!0}if(ot(e)){for(let i of e.fields)if(gi(i.type,t,n,r))return!0}return Ae(e)?!0:(Ee(e),!1)}function Tr(e,t){return t?e.id===t.id?!0:ke(e)||Ge(e)||Ee(e)?Tr(e.childType,t):Se(e)?e.fields.some(n=>Tr(n.type,t)):pe(e)?e.fields.some(n=>Tr(n.type,t)):ot(e)?e.fields.some(n=>Tr(n.type,t)):ge(e)?e.variants.some(n=>n.fields?.some(r=>Tr(r.type,t))):G(e)?Tr(e.return.type,t):!1:!1}import{createHash as
|
|
50
|
+
`}])}function sr(e,t,n){if(!dt(e)||vi(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(gi(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function gi(e,t,n,r){if(pe(e)&&e.id===t.id)return!0;if(pe(e)&&e.isReferenceSemantics)return sr(e,new Set(n),r);if(ge(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(gi(o.type,t,n,r))return!0}}if(D(e))return vi(e,r)?!1:e.resolvedConcreteType?gi(e.resolvedConcreteType,t,n,r):!0;if(ke(e)||Ge(e))return gi(e.childType,t,n,r);if(Se(e)){for(let i of e.fields)if(gi(i.type,t,n,r))return!0}if(ot(e)){for(let i of e.fields)if(gi(i.type,t,n,r))return!0}return Ae(e)?!0:(Ee(e),!1)}function Tr(e,t){return t?e.id===t.id?!0:ke(e)||Ge(e)||Ee(e)?Tr(e.childType,t):Se(e)?e.fields.some(n=>Tr(n.type,t)):pe(e)?e.fields.some(n=>Tr(n.type,t)):ot(e)?e.fields.some(n=>Tr(n.type,t)):ge(e)?e.variants.some(n=>n.fields?.some(r=>Tr(r.type,t))):G(e)?Tr(e.return.type,t):!1:!1}import{createHash as Iu}from"crypto";function to(e){return"yo"+Iu("sha1").update(e).digest("hex").slice(0,8)}var La=new Map;function Re(e){let t=La.get(e);return t===void 0&&(t=0),La.set(e,t+1),`${to(e)}_id_${t}`}function Ia(e){La.delete(e)}var Au=1;function xu(e){return`_${to(e)}_temp_`}function Aa(e){return`${xu(e)}${Au++}`}function ut(e,t){return t.startsWith(xu(e))}var Fs=new Map;function Ct(e,t){let n="";for(let o=0;o<t.length;o++)if(Io(t[o])){let a=Es.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=to(e)+"_"+n,i=Fs.get(r);return i===void 0?i=0:i++,Fs.set(r,i),r+(i==0?"":`_${i}`)}function Ls(e){return Iu("sha1").update(e).digest("hex").slice(0,10)}function Su(){La.clear(),Fs.clear(),Au=1}function ni(e){return{[e]:!0}}function it(e,t){return e?.[t]===!0}function at(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function Go(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 Vu(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 Ne(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:Ne(e.func),args:e.args.map(Ne),$:void 0}}}function F(e){return e?.tag==="FnCall"}function B(e){return e?.tag==="Atom"}function Et(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function no(e){return e.tag==="Atom"&&e.token.type==="operator"}function E(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 ve(e,t,n){if(!F(e))throw m({token:e.token,errorMessage:`Expected function call, got atom:
|
|
51
51
|
${w(e)}`});if(!E(e,t))throw m({token:e.token,errorMessage:`Expected function call of ${Array.isArray(t)?t.map(r=>`"${r}"`).join(" or "):`"${t}"`}, got:
|
|
52
52
|
${w(e)}`});if(n!==void 0&&e.args.length!==n)throw m({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
|
|
53
53
|
${w(e)}`})}function wa(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(!wa(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!wa(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:["||"],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"]},k={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"],typeid:["typeid"],downcast:["downcast"],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_slice_ptr:["__yo_slice_ptr"],__yo_array_index:["__yo_array_index"],__yo_slice_index:["__yo_slice_index"],__yo_array_index_range:["__yo_array_index_range"],__yo_array_index_range_inclusive:["__yo_array_index_range_inclusive"],__yo_slice_index_range:["__yo_slice_index_range"],__yo_slice_index_range_inclusive:["__yo_slice_index_range_inclusive"],__yo_comptime_array_index:["__yo_comptime_array_index"],__yo_comptime_slice_index:["__yo_comptime_slice_index"],__yo_comptime_array_index_range:["__yo_comptime_array_index_range"],__yo_comptime_array_index_range_inclusive:["__yo_comptime_array_index_range_inclusive"],__yo_comptime_slice_index_range:["__yo_comptime_slice_index_range"],__yo_comptime_slice_index_range_inclusive:["__yo_comptime_slice_index_range_inclusive"],__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_list_get:["__yo_comptime_list_get"],__yo_comptime_list_index:["__yo_comptime_list_index"],__yo_comptime_list_index_range:["__yo_comptime_list_index_range"],__yo_comptime_list_index_range_inclusive:["__yo_comptime_list_index_range_inclusive"],__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_comptime_string_index:["__yo_comptime_string_index"],__yo_comptime_string_index_range:["__yo_comptime_string_index_range"],__yo_comptime_string_index_range_inclusive:["__yo_comptime_string_index_range_inclusive"],__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_are_types_equal:["__yo_are_types_equal"],__yo_type_impls:["__yo_type_impls"],__yo_type_get_info:["__yo_type_get_info"],comptime_eval:["comptime_eval"],derive:["derive"],derive_rule:["derive_rule"],__yo_comptime_string_to_expr:["__yo_comptime_string_to_expr"],__yo_type_join_fields:["__yo_type_join_fields"],__yo_type_map_variants:["__yo_type_map_variants"],__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_getentropy:["__yo_getentropy"],__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"],__yo_pointer_size_bits:["__yo_pointer_size_bits"],__yo_build_executable:["__yo_build_executable"],__yo_build_static_library:["__yo_build_static_library"],__yo_build_shared_library:["__yo_build_shared_library"],__yo_build_test:["__yo_build_test"],__yo_build_run:["__yo_build_run"],__yo_build_step:["__yo_build_step"],__yo_build_step_depend_on:["__yo_build_step_depend_on"],__yo_build_link:["__yo_build_link"],__yo_build_link_system_library:["__yo_build_link_system_library"],__yo_build_target_host:["__yo_build_target_host"],__yo_build_target_parse:["__yo_build_target_parse"],__yo_build_dependency:["__yo_build_dependency"],__yo_build_path_dependency:["__yo_build_path_dependency"],__yo_build_system_library:["__yo_build_system_library"],__yo_build_option:["__yo_build_option"],__yo_build_dep_artifact:["__yo_build_dep_artifact"],__yo_build_module:["__yo_build_module"],__yo_build_module_link:["__yo_build_module_link"],__yo_build_add_import:["__yo_build_add_import"],__yo_build_add_cflags:["__yo_build_add_cflags"],__yo_build_dep_module:["__yo_build_dep_module"],asm:["asm"],global_asm:["global_asm"]};function ro(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?Dn(e,r):Cr(e)}function Cr(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){if(e.func.token.value==="."){let i=Cr(e.args[0]);F(e.args[0])&&(i=`(${i})`),t=`${e.func.token.value}${i}`}else t=`${e.func.token.value}(${Cr(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let i=Cr(e.args[0]),o=Cr(e.args[1]);i=ro(e.args[0])||no(e.args[0])?`(${i})`:i,o=ro(e.args[1])||no(e.args[1])?`(${o})`:o,e.func.token.value==="."?(F(e.args[1])&&(o=`(${o})`),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=`(${Cr(e.args[0])},)`:t=`(${e.args.map(i=>Cr(i)).join(", ").trim()})`;break}let n=Cr(e.func);n=ro(e.func)||no(e.func)?`(${n})`:n;let r=e.args.map(i=>Cr(i)).join(", ").trim();t=`${n}(${r})`;break}}return t}function Dn(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==="."){let u=Dn(e.args[0],t);return F(e.args[0])&&(u=`(${u})`),`${e.func.token.value}${u}`}else{let u=Dn(e.args[0],t);return`${e.func.token.value}(${u})`}else if(e.args.length===2&&e.isInfix){let u=Dn(e.args[0],t),c=Dn(e.args[1],t);return u=ro(e.args[0])||no(e.args[0])?`(${u})`:u,c=ro(e.args[1])||no(e.args[1])?`(${c})`:c,e.func.token.value==="."?(F(e.args[1])&&(c=`(${c})`),`(${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`(${Dn(e.args[0],t)},)`;{let u=e.args.map(_=>Dn(_,t)),c=`(${u.join(", ")})`;return c.length<=t.maxLineLength?c:`(
|
|
@@ -73,30 +73,30 @@ Consider using Dyn(...) for dynamic dispatch if different concrete types are nee
|
|
|
73
73
|
`:"")+(b?"Might be initialized here:":"Not initialized here:"),token:b??t[S].token})))}if(h.length===1){if(h[0]&&!s[_].consumedAtToken){let C={...s[_],consumedAtToken:h[0]};e=qe(e,s[_],C),s[_]=C}}else if(!s[_].consumedAtToken&&h.every(C=>C)){let C={...s[_],consumedAtToken:h[0]};e=qe(e,s[_],C),s[_]=C}else{let C=h.filter(b=>!!b),L=h.filter(b=>!b);if(C.length>0&&L.length>0)throw pt(h.map((b,S)=>({errorMessage:(S===0?`Variable "${p}" is consumed in some cases but not in other cases:
|
|
74
74
|
`:"")+(b?"Consumed here:":"Not consumed here:"),token:b??t[S].token})))}if(!s[_].isOwningTheRcValue&&d.every(C=>C)){let C={...s[_],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=qe(e,s[_],C),s[_]=C}else{let C=d.filter(b=>!!b),L=d.filter(b=>!b);if(C.length>0&&L.length>0)throw pt(d.map((b,S)=>({errorMessage:(S===0?`Variable "${p}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
|
|
75
75
|
`:"")+(b?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:b??t[S].token})))}let v=s[_].id,T=[];for(let C=1;C<u;C++){let S=r[C-1].frames[o].variables[_];T.push(S.id)}if(T.some(C=>C!==v)){let C=Ct(e.modulePath,p),L={...s[_],id:C,value:void 0,isOwningTheSameRcValueAs:void 0};e=qe(e,s[_],L),s[_]=L}}}return e}function br(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 xa(e,t){F(e)||(e.tag=t.tag),br(e,t)}function In(e,t,n=!1){if(e.$?.value&&R(e.$?.value))return t;let r=e.$?.variableName;if(!r)return t;let i=Y(t,r);if(i.length===0)throw pt([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let o=i[i.length-1];if(o.consumedAtToken&&!n){let a=`use of moved value: \`${r}\``;throw pt([{token:e.token,errorMessage:a},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=qe(t,o,{...o,consumedAtToken:e.token});return t}function en(e,t){if(!e.$||!e.$.variableName)return;if(e.$.value){let r=e.$.variableName,i=!1;if(r&&ut(e.$.env.modulePath,r)&&Ve(e.$.type)){let o=Y(e.$.env,r);if(o.length>0){let a=o[o.length-1];a.isOwningTheRcValue&&!a.consumedAtToken&&(e.$.env=qe(e.$.env,a,{...a,consumedAtToken:e.token})),a.isOwningTheRcValue||(i=!0)}}if(!i)return}let n=e.$.variableName;if(!n)throw m({token:e.token,errorMessage:`Expression does not have a variable name to call ${k.___dup} on:
|
|
76
|
-
${w(e)}`});if(Ve(e.$.type)){if(ut(e.$.env.modulePath,n)&&!(B(e)&&e.token.value!==n)){let o=Y(e.$.env,n);if(o.length>0){let a=o[o.length-1];if(a.isOwningTheRcValue){a.consumedAtToken||(e.$.env=qe(e.$.env,a,{...a,consumedAtToken:e.token}));return}}}let r=et(`${k.___dup[0]}(${n})`),i=x({expr:r,env:e.$.env,context:{...t,expectedType:void 0}});if(i.$?.variableName){let o=Y(i.$.env,i.$.variableName);if(o.length>0){let a=o[o.length-1];a.consumedAtToken||(i.$.env=qe(i.$.env,a,{...a,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function Ei(e,t){let n=e.$?.variableName;if(!n)return;let r=Y(t,n);if(r.length===0)throw pt([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let o=`use of moved value: \`${n}\``;throw pt([{token:e.token,errorMessage:o},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var yt="__yo_self";function $i(e,t,n){if(pe(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>$i(i.type,t,n));return n.delete(e.id),r}if(Se(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>$i(i.type,t,n));return n.delete(e.id),r}if(ge(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>$i(o.type,t,n)));return n.delete(e.id),r}return ke(e)||Ge(e)||Ee(e)?$i(e.childType,t,n):lr(e,t)}function Ci(e,t,n){if(pe(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ci(i.type,t,n));return n.delete(e.id),r}if(Se(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ci(i.type,t,n));return n.delete(e.id),r}if(ge(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Ci(o.type,t,n)));return n.delete(e.id),r}return ke(e)||Ge(e)||Ee(e)?Ci(e.childType,t,n):Rr(e,t)}function
|
|
77
|
-
`)}}function
|
|
76
|
+
${w(e)}`});if(Ve(e.$.type)){if(ut(e.$.env.modulePath,n)&&!(B(e)&&e.token.value!==n)){let o=Y(e.$.env,n);if(o.length>0){let a=o[o.length-1];if(a.isOwningTheRcValue){a.consumedAtToken||(e.$.env=qe(e.$.env,a,{...a,consumedAtToken:e.token}));return}}}let r=et(`${k.___dup[0]}(${n})`),i=x({expr:r,env:e.$.env,context:{...t,expectedType:void 0}});if(i.$?.variableName){let o=Y(i.$.env,i.$.variableName);if(o.length>0){let a=o[o.length-1];a.consumedAtToken||(i.$.env=qe(i.$.env,a,{...a,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function Ei(e,t){let n=e.$?.variableName;if(!n)return;let r=Y(t,n);if(r.length===0)throw pt([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let o=`use of moved value: \`${n}\``;throw pt([{token:e.token,errorMessage:o},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var yt="__yo_self";function $i(e,t,n){if(pe(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>$i(i.type,t,n));return n.delete(e.id),r}if(Se(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>$i(i.type,t,n));return n.delete(e.id),r}if(ge(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>$i(o.type,t,n)));return n.delete(e.id),r}return ke(e)||Ge(e)||Ee(e)?$i(e.childType,t,n):lr(e,t)}function Ci(e,t,n){if(pe(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ci(i.type,t,n));return n.delete(e.id),r}if(Se(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ci(i.type,t,n));return n.delete(e.id),r}if(ge(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Ci(o.type,t,n)));return n.delete(e.id),r}return ke(e)||Ge(e)||Ee(e)?Ci(e.childType,t,n):Rr(e,t)}function Nu(e,t,n,r){let i=et(e),o=x({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 oo({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=Nu(t,n,r,i);if(F(o)&&o.$&&o.$.value&&R(o.$.value)&&G(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 On({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=Nu(t,n,r,i);if(F(o)&&o.$&&o.$.value&&ee(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 Is=`(fn(${yt} : Self) -> unit)`,Sa=`(fn(${yt} : Self) -> unit)`,Va=`(fn(${yt} : Self) -> Self)`;function Ay(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function xy(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function As(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(xy(i)){let o=Re("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=Re("field_"+Ay(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${yt};`,callsExpr:r.join(`
|
|
77
|
+
`)}}function Sy(e){let t=Is;if(!mn(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>Ve(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=As(n,k.___drop[0]),o=`
|
|
78
78
|
${r}
|
|
79
79
|
${i}
|
|
80
80
|
`;return{signature:t,code:`(${t} { // ___dispose
|
|
81
81
|
${o}
|
|
82
82
|
return ();
|
|
83
|
-
})`}}function
|
|
84
|
-
${k.__yo_decr_rc[0]}(${yt});`:"",i="";if(!mn(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=
|
|
83
|
+
})`}}function Vy(e){let t=Sa,n=e.fields.filter(a=>Ve(a.type)).map(a=>a.label),r=mn(e)?`
|
|
84
|
+
${k.__yo_decr_rc[0]}(${yt});`:"",i="";if(!mn(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=As(n,k.___drop[0]);i=`
|
|
85
85
|
${a}
|
|
86
86
|
${s}
|
|
87
87
|
`}let o=`(${t} { // ___drop
|
|
88
88
|
${i}
|
|
89
89
|
${r}
|
|
90
90
|
return ();
|
|
91
|
-
})`;return{signature:t,code:o}}function
|
|
92
|
-
${k.__yo_incr_rc[0]}(${yt});`:"",i="";if(!mn(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=
|
|
91
|
+
})`;return{signature:t,code:o}}function Ny(e){let t=Va,n=e.fields.filter(o=>Ve(o.type)).map(o=>o.label),r=mn(e)?`
|
|
92
|
+
${k.__yo_incr_rc[0]}(${yt});`:"",i="";if(!mn(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=As(n,k.___dup[0]);i=`
|
|
93
93
|
${o}
|
|
94
94
|
${a}
|
|
95
95
|
`}return{signature:t,code:`(${t} { // ___dup
|
|
96
96
|
${i}
|
|
97
97
|
${r}
|
|
98
98
|
return ${k.__yo_rc_own[0]}(${yt});
|
|
99
|
-
})`}}function
|
|
99
|
+
})`}}function My({structType:e,env:t,context:n}){if(ki(e,t))return t;Ft(e);let r=me(e),{code:i}=Sy(e),{code:o}=Vy(e),{code:a}=Ny(e);return xs({structType:e,env:t,context:n}),r||(t=On({label:k.___dispose[0],functionCode:i,SelfType:e,env:t,context:n}),t=On({label:k.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=On({label:k.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function xs({structType:e,env:t,context:n}){ki(e,t)||(oo({label:k.___dispose[0],functionSignature:Is,SelfType:e,env:t,context:n}),oo({label:k.___drop[0],functionSignature:Sa,SelfType:e,env:t,context:n}),oo({label:k.___dup[0],functionSignature:Va,SelfType:e,env:t,context:n}))}function Dy(e){let t=Sa,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Ve(a.type))),r=mn(e)?`
|
|
100
100
|
${k.__yo_decr_rc[0]}(${yt});`:"",i=mn(e)?"":n.length?`
|
|
101
101
|
match(${yt},
|
|
102
102
|
${n.map(o=>{let a=o.fields.filter(u=>Ve(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${k.___drop[0]})(${u});`).join(`
|
|
@@ -109,7 +109,7 @@ ${l}
|
|
|
109
109
|
${i}
|
|
110
110
|
${r}
|
|
111
111
|
return ();
|
|
112
|
-
})`}}function
|
|
112
|
+
})`}}function Oy(e){let t=Va,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Ve(a.type))),r=mn(e)?`
|
|
113
113
|
${k.__yo_incr_rc[0]}(${yt});`:"",i=mn(e)?"":n.length?`
|
|
114
114
|
match(${yt},
|
|
115
115
|
${n.map(o=>{let a=o.fields.filter(u=>Ve(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${k.___dup[0]})(${u});`).join(`
|
|
@@ -122,44 +122,44 @@ ${l}
|
|
|
122
122
|
${i}
|
|
123
123
|
${r}
|
|
124
124
|
return ${k.__yo_rc_own[0]}(${yt});
|
|
125
|
-
})`}}function
|
|
125
|
+
})`}}function Ry({enumType:e,env:t,context:n}){if(ki(e,t))return t;Ft(e);let r=me(e),{code:i}=Dy(e),{code:o}=Oy(e);return Ss({enumType:e,env:t,context:n}),r||(t=On({label:k.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=On({label:k.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),t}function Ss({enumType:e,env:t,context:n}){if(ki(e,t))return t;oo({label:k.___dispose[0],functionSignature:Is,SelfType:e,env:t,context:n}),oo({label:k.___drop[0],functionSignature:Sa,SelfType:e,env:t,context:n}),oo({label:k.___dup[0],functionSignature:Va,SelfType:e,env:t,context:n})}function Wo({dynType:e,env:t,context:n}){let r=Py(e),i=Uy(e);return i&&(t=On({label:k.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),r&&(t=On({label:k.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function Py(e){return`((fn(${yt} : Self) -> unit) { // ___drop for ${A(e)}
|
|
126
126
|
${k.__yo_dyn_drop[0]}(${yt});
|
|
127
|
-
})`}function
|
|
127
|
+
})`}function Uy(e){return`((fn(${yt} : Self) -> Self) { // ___dup for ${A(e)}
|
|
128
128
|
${k.__yo_dyn_dup[0]}(${yt});
|
|
129
129
|
return ${k.__yo_rc_own[0]}(${yt});
|
|
130
|
-
})`}function
|
|
130
|
+
})`}function zy(e){return`((fn(${yt} : Self) -> unit) { // ___drop for ${A(e)}
|
|
131
131
|
${k.__yo_sometype_drop[0]}(${yt});
|
|
132
|
-
})`}function
|
|
132
|
+
})`}function By(e){return`((fn(${yt} : Self) -> Self) { // ___dup for ${A(e)}
|
|
133
133
|
${k.__yo_sometype_dup[0]}(${yt});
|
|
134
134
|
return ${k.__yo_rc_own[0]}(${yt});
|
|
135
|
-
})`}function
|
|
135
|
+
})`}function Mu({someType:e,env:t,context:n}){let r=zy(e),i=By(e);return t=On({label:k.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=On({label:k.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function Gy(e){return`((fn(${yt} : Self) -> unit) { // ___dispose for Iso
|
|
136
136
|
${k.__yo_iso_dispose[0]}(${yt});
|
|
137
137
|
return ();
|
|
138
|
-
})`}function
|
|
138
|
+
})`}function Wy(e){return`((fn(${yt} : Self) -> unit) { // ___drop for Iso
|
|
139
139
|
${k.__yo_decr_rc_atomic[0]}(${yt});
|
|
140
140
|
return ();
|
|
141
|
-
})`}function
|
|
141
|
+
})`}function qy(e){return`((fn(${yt} : Self) -> Self) { // ___dup for Iso
|
|
142
142
|
${k.__yo_incr_rc_atomic[0]}(${yt});
|
|
143
143
|
return ${k.__yo_rc_own[0]}(${yt});
|
|
144
|
-
})`}function
|
|
144
|
+
})`}function Du({isoType:e,env:t,context:n}){let r=Gy(e),i=Wy(e),o=qy(e);return t=On({label:k.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=On({label:k.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=On({label:k.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Yy(e){return`((fn(${yt} : Self) -> unit) { // ___dispose for Arc
|
|
145
145
|
${k.__yo_arc_dispose[0]}(${yt});
|
|
146
146
|
return ();
|
|
147
|
-
})`}function
|
|
147
|
+
})`}function Hy(e){return`((fn(${yt} : Self) -> unit) { // ___drop for Arc
|
|
148
148
|
${k.__yo_decr_rc_atomic[0]}(${yt});
|
|
149
149
|
return ();
|
|
150
|
-
})`}function
|
|
150
|
+
})`}function jy(e){return`((fn(${yt} : Self) -> Self) { // ___dup for Arc
|
|
151
151
|
${k.__yo_incr_rc_atomic[0]}(${yt});
|
|
152
152
|
return ${k.__yo_rc_own[0]}(${yt});
|
|
153
|
-
})`}function Du({arcType:e,env:t,context:n}){let r=qy(e),i=Yy(e),o=Hy(e);return t=On({label:k.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=On({label:k.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=On({label:k.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function un(e,t,n,r){let i=`${e}()`,o=et(i),a=x({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!mt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:wn(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function jy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>qo(i.type,t))&&(t=un("Send",e,t,n)),t}function Ky({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=un("Rc",e,t,n)),t}function Xy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>qo(o.type,t)))&&(t=un("Send",e,t,n)),t}function Ou({unionType:e,env:t,context:n}){return e.fields.every(i=>qo(i.type,t))&&(t=un("Send",e,t,n)),t}function Qy({structType:e,env:t,context:n}){return e.isReferenceSemantics?sr(e,new Set,t)||(t=un("Acyclic",e,t,n)):e.fields.every(i=>vi(i.type,t))&&(t=un("Acyclic",e,t,n)),t}function Zy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>vi(o.type,t)))&&(t=un("Acyclic",e,t,n)),t}function Ru({unionType:e,env:t,context:n}){return e.fields.every(i=>vi(i.type,t))&&(t=un("Acyclic",e,t,n)),t}function Jy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>$i(i.type,t,new Set([e.id])))&&(t=un("Comptime",e,t,n)),t}function eg({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>$i(o.type,t,new Set([e.id]))))&&(t=un("Comptime",e,t,n)),t}function tg({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=un("Runtime",e,t,n),t):(e.fields.every(i=>Ci(i.type,t,new Set([e.id])))&&(t=un("Runtime",e,t,n)),t)}function ng({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Ci(o.type,t,new Set([e.id]))))&&(t=un("Runtime",e,t,n)),t}function Pu({unionType:e,env:t,context:n}){return t=un("Runtime",e,t,n),t}function rg({tupleType:e,env:t,context:n}){return e.fields.every(i=>qo(i.type,t))&&(t=un("Send",e,t,n)),t}function ig({tupleType:e,env:t,context:n}){return e.fields.every(i=>$i(i.type,t,new Set([e.id])))&&(t=un("Comptime",e,t,n)),t}function og({tupleType:e,env:t,context:n}){return e.fields.every(i=>Ci(i.type,t,new Set([e.id])))&&(t=un("Runtime",e,t,n)),t}function bi({structType:e,env:t,context:n,errorToken:r}){return t=jy({structType:e,env:t,context:n}),t=Ky({structType:e,env:t,context:n}),t=Qy({structType:e,env:t,context:n}),t=Jy({structType:e,env:t,context:n}),t=tg({structType:e,env:t,context:n}),t=Ny({structType:e,env:t,context:n}),Na(e,t,r,n),t}function Uu({enumType:e,env:t,context:n,errorToken:r}){return t=Xy({enumType:e,env:t,context:n}),t=Zy({enumType:e,env:t,context:n}),t=eg({enumType:e,env:t,context:n}),t=ng({enumType:e,env:t,context:n}),t=Oy({enumType:e,env:t,context:n}),Na(e,t,r,n),t}function zu({tupleType:e,env:t,context:n,errorToken:r}){return t=rg({tupleType:e,env:t,context:n}),t=ig({tupleType:e,env:t,context:n}),t=og({tupleType:e,env:t,context:n}),Na(e,t,r,n),t}function Gn(e,t){let n=Y(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&R(r.value[0])){let i=r.value[0];if(Le(i.value))return i.value}}function qt(e,t){let n=t.definitionFrameLevel;if(n!==void 0&&n>=0){let o=e.frames[n];if(o){let a=o.variables.find(s=>s.name===t.name&&s.value?.[0]?.tag==="Type");if(a&&a.value){let s=a.value[0];if(s.value===t||D(s.value)&&s.value.id===t.id)return t}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=Y(e,t.name,a=>a.value?.[0]?.tag==="Type");if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(D(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"){let _=c;if(_.value===t){a=!0;break}if(D(_.value)&&_.value.id!==t.id)return t}}if(a)break}}if(!a&&n!==void 0&&n>=0&&n<e.frames.length){let s=e.frames[n];if(s){for(let l of s.variables)if(l.name===t.name&&l.value){let u=l.value[0];if(u?.tag==="Type"){let c=u;!D(c.value)&&c.value===r.value&&(a=!0)}}}}if(!a)return t;break}}while(D(t));return r.value}var Ss=null;function vr(){if(Ss)return Ss;let e=ct(),t=Pe(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Ss=n,n}var Vs=null;function Gi(){if(Vs)return Vs;let e=ct(),t=Pe(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,Vs=n,n}var Ns=null;function zt(){if(Ns)return Ns;let e=ct(),t=Pe(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,Ns=n,n}var Ms=null;function Xt(){if(Ms)return Ms;let e=ct(),t=Pe(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,Ms=n,n}var Ds=new Map;function Mr(e){if(Ds.has(e))return Ds.get(e);let t=ct(),n=Pe(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,Ds.set(e,i),i}function Yo(){return Mr(Xt())}var Os=null;function rt(){if(Os)return Os;let e=ct(),t=Pe(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,Os=n,n}var Rs=null;function St(){if(Rs)return Rs;let e=ct(),t=Pe(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,Rs=n,n}var Ps=null;function Wi(){if(Ps)return Ps;let e=ct(),t=Pe(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,Ps=n,n}var Us=null;function qi(){if(Us)return Us;let e=ct(),t=Pe(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,Us=n,n}var zs=null;function Yi(){if(zs)return zs;let e=ct(),t=Pe(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,zs=n,n}var Bs=null;function Hi(){if(Bs)return Bs;let e=ct(),t=Pe(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,Bs=n,n}var Gs=null;function ji(){if(Gs)return Gs;let e=ct(),t=Pe(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,Gs=n,n}var Ws=null;function Ki(){if(Ws)return Ws;let e=ct(),t=Pe(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,Ws=n,n}var qs=null;function Jr(){if(qs)return qs;let e=ct(),t=Pe(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,qs=n,n}var Ys=null;function Xi(){if(Ys)return Ys;let e=ct(),t=Pe(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,Ys=n,n}var Hs=null;function Qi(){if(Hs)return Hs;let e=ct(),t=Pe(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,Hs=n,n}var js=null;function Zi(){if(js)return js;let e=ct(),t=Pe(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,js=n,n}var Ks=null;function ei(){if(Ks)return Ks;let e=ct(),t=Pe(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,Ks=n,n}var Xs=null;function Hn(){if(Xs)return Xs;let e=ct(),t=Pe(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,Xs=n,n}var Qs=null;function Gu(){if(Qs)return Qs;let e=ct(),t=Pe(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,Qs=n,n}var Zs=null;function Wu(){if(Zs)return Zs;let e=ct(),t=Pe(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,Zs=n,n}var Js=null;function qu(){if(Js)return Js;let e=ct(),t=Pe(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,Js=n,n}var el=null;function Yu(){if(el)return el;let e=ct(),t=Pe(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,el=n,n}var tl=null;function Hu(){if(tl)return tl;let e=ct(),t=Pe(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,tl=n,n}var nl=null;function ju(){if(nl)return nl;let e=ct(),t=Pe(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,nl=n,n}var rl=null;function Ku(){if(rl)return rl;let e=ct(),t=Pe(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,rl=n,n}var il=null;function Xu(){if(il)return il;let e=ct(),t=Pe(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,il=n,n}var ol=null;function Qu(){if(ol)return ol;let e=ct(),t=Pe(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,ol=n,n}var al=null;function Zu(){if(al)return al;let e=ct(),t=Pe(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,al=n,n}function tt(e){return wn(0,e)}function kr(e,t){let n=ct(),r=Pe(n),i={id:`array_${e.id+"_"+Fs(De(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var sl=new Map;function Pr(e){if(sl.has(e))return sl.get(e);let t=ct(),n=Pe(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,sl.set(e,r),r}function Fu(e){let n=Y(e,"str").find(r=>R(r.value?.[0])&&r.value[0].type);if(!n||!R(n.value?.[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var ll;function Ju(){if(ll)return ll;let e=ct(),t=Pe(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,ll=n,n}function ao(e){let t=ct(),n=Pe(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function wi(e,t=!1,n=!1){let r=Pe(e),i={id:`struct_${Re(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function Da(e){return{id:`module_${Re(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function Pe(e){return{id:`trait_${Re(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function ec(e){let t=Pe(e),n={id:`enum_${Re(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function tc(e){let t=Pe(e),n={id:`union_${Re(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function Ur({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,isClosure:_}){let p=ct(),f=Pe(p),d={id:`fn_${Re(a.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,implicitParameters:n??[],variadicParameter:r,whereClauseExprs:i,return:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,trait:f,isClosure:_};return f.receiverType=d,d}var ul=new Map;function It(e){if(ul.has(e))return ul.get(e);let t=ct(),n=Pe(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,ul.set(e,r),r}var cl=new Map;function nc(e,t){if(cl.has(e))return cl.get(e);let n=Pe(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,cl.set(e,r),r}var _l=new Map;function rc(e,t){if(_l.has(e))return _l.get(e);let n=Pe(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,_l.set(e,r),r}function Vn(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=Pe(a),u=r?.map(p=>({traitType:p,frameLevel:-1}))??[],c=i?.map(p=>({traitType:p,frameLevel:-1}))??[],_={id:n??`sometype_${Re(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=_,Gn(a,"Runtime")&&un("Runtime",_,a,s),Nu({someType:_,env:a,context:{SelfType:_,stdPath:""}}),_}var Ma=new Map;function Fi(e,t){let n=Pe(t),r=wn(1),i={id:`effects_row_sometype_${Re(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 zr(e){let t=ct(),n=Pe(t),r={id:`EffectsRow_${Re(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function wn(e,t){if(Ma.has(e)){let i=Ma.get(e);if(i.has(t))return i.get(t)}else Ma.set(e,new Map);let n=Pe(ct()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,Ma.get(e).set(t,r),r}function Li({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function ic(e,t){let n=`fn_trait_${e.id}`,r=Pe(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function Bu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${A(a.type)}`).join(","),o=A(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${A(n.type)}`}).join(";")}function Ho({requiredTraits:e,env:t,negativeTraits:n}){let r=Pe(t),i=e.map(c=>Bu(c)).join("__"),o=n?n.map(c=>Bu(c)).join("__"):"",a=`dyn_${Fs(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=n?.map(c=>({traitType:c,frameLevel:-1}))??[],u={id:a,tag:"Dyn",requiredTraits:s,negativeTraits:l,trait:r,env:t};return r.receiverType=u,u}function oc(e,t,n,r){let i=Pe(r),o={id:`typeapp_${e.id}_${t.map(a=>a.id).join("_")}_${Re(r.modulePath)}`,tag:"TypeApplication",constructor:e,args:t,resultKind:n,trait:i};return i.receiverType=o,o}function ac(e,t){return!Xe(e)||!Xe(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Tn(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),D(t))return e===t.id;if(pe(t))return t.fields.some(r=>Tn(e,r.type,n));if(ge(t))return t.variants.some(r=>r.fields?r.fields.some(i=>Tn(e,i.type,n)):!1);if(Se(t))return t.fields.some(r=>Tn(e,r.type,n));if(ke(t)||Ge(t)||Tt(t))return Tn(e,t.childType,n);if(Ee(t))return!1;if(xt(t)||wt(t))return Tn(e,t.childType,n);if(G(t))return t.parameters.some(r=>Tn(e,r.type,n))||Tn(e,t.return.type,n);if(rn(t)){if(Tn(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(Tn(e,r.type,n))return!0;return!1}return At(t)?Tn(e,t.isFn.callType,n):Vr(t)?Tn(e,t.constructor,n)||t.args.some(r=>Tn(e,r,n)):Le(t)?t.fields.some(r=>Tn(e,r.type,n)):Ce(t)?t.fields.some(r=>Tn(e,r.type,n)):ot(t)?t.fields.some(r=>Tn(e,r.type,n)):!1}function Ze(e,t,n=[],r){if(n.find(i=>i.expected===e.type&&i.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),D(e.type)&&D(t.type)){let i=qt(e.env,e.type),o=qt(t.env,t.type);if(D(i))if(D(o)){if(i!==o){let a=J(t.type);{let s=Y(e.env,e.type.name),l=s[s.length-1];if(l)e.env=qe(e.env,l,{...l,value:[a]});else{let{env:u}=fe({env:e.env,variable:{name:e.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}{let s=Y(t.env,t.type.name),l=s[s.length-1];if(l)t.env=qe(t.env,l,{...l,value:[a]});else{let{env:u}=fe({env:t.env,variable:{name:t.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=u}}}}else{let a=J(o),s=Y(e.env,e.type.name),l=s[s.length-1];if(l)e.env=qe(e.env,l,{...l,value:[a]});else{let{env:u}=fe({env:e.env,variable:{name:e.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}else{let a=J(i),s=Y(t.env,t.type.name),l=s[s.length-1];if(l)t.env=qe(t.env,l,{...l,value:[a]});else{let{env:u}=fe({env:t.env,variable:{name:t.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=u}}if(e.type.id!==t.type.id&&e.type.requiredTraits&&t.type.requiredTraits){let a=e.type.requiredTraits,s=t.type.requiredTraits;for(let l=0;l<a.length;l++){let u=a[l].traitType;if(At(u)){let c=s.find(_=>At(_.traitType));if(c&&At(c.traitType)){let{expectedEnv:_,givenEnv:p}=Ze({type:u.isFn.callType,env:e.env},{type:c.traitType.isFn.callType,env:t.env},n,r);e.env=_,t.env=p}}else if(rn(u)){let c=s.find(_=>rn(_.traitType));if(c&&rn(c.traitType)){let{expectedEnv:_,givenEnv:p}=Ze({type:u.isFuture.outputType,env:e.env},{type:c.traitType.isFuture.outputType,env:t.env},n,r);e.env=_,t.env=p,pl(u.isFuture.effects,c.traitType.isFuture.effects,e,t,n,r)}}}}}else if(D(e.type)){let i=qt(e.env,e.type);if(D(i)&&i.id===e.type.id){if(Tn(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${A(t.type)}" because it would create an infinite type.`);let o=J(t.type);r?.setResolvedConcreteType&&!e.type.resolvedConcreteType&&(e.type.resolvedConcreteType=t.type);let a=Y(e.env,e.type.name),s=a[a.length-1];if(s)s&&(e.env=qe(e.env,s,{...s,value:[o]}));else{let{env:l}=fe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}if(e.type.requiredTraits){for(let{traitType:l}of e.type.requiredTraits)if(At(l)&&G(t.type)){let u=l.isFn.callType,{expectedEnv:c,givenEnv:_}=Ze({type:u,env:e.env},{type:t.type,env:t.env},n,r);e.env=c,t.env=_}else if(rn(l)&&rn(t.type)){let{expectedEnv:u,givenEnv:c}=Ze({type:l.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r);e.env=u,t.env=c,pl(l.isFuture.effects,t.type.isFuture.effects,e,t,n,r)}}}else if(!D(i)){let{expectedEnv:o,givenEnv:a}=Ze({type:i,env:e.env},{type:t.type,env:t.env},n,r);e.env=o,t.env=a}}else if(D(t.type)){let i=qt(t.env,t.type);if(D(i)){if(Tn(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${A(e.type)}" because it would create an infinite type.`);let o=J(e.type);r?.setResolvedConcreteType&&!t.type.resolvedConcreteType&&(t.type.resolvedConcreteType=e.type);let a=Y(t.env,t.type.name),s=a[a.length-1];if(s)s&&(t.env=qe(t.env,s,{...s,value:[o]}));else{let{env:l}=fe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}else{let{expectedEnv:o,givenEnv:a}=Ze({type:e.type,env:e.env},{type:i,env:t.env},n,r);e.env=o,t.env=a}}else if(Se(e.type)&&Se(t.type)&&e.type.fields.length===t.type.fields.length)for(let i=0;i<e.type.fields.length;i++){let{expectedEnv:o,givenEnv:a}=Ze({type:e.type.fields[i].type,env:e.env},{type:t.type.fields[i].type,env:t.env},n,r);e.env=o,t.env=a}else{if(Se(e.type)&&Se(t.type))throw new Error(`Cannot unify incompatible tuple types: "${A(e.type)}" and "${A(t.type)}"`);if(pe(e.type)&&pe(t.type)){if(!(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)){if(!(e.type.functionValue&&t.type.functionValue&&e.type.functionValue.funcId===t.type.functionValue.funcId))throw new Error(`Cannot unify incompatible struct types: "${A(e.type)}" and "${A(t.type)}"`)}for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=t.type.fields[i],{expectedEnv:s,givenEnv:l}=Ze({type:o.type,env:e.env},{type:a.type,env:t.env},n,r);if(e.env=s,t.env=l,o.assignedValue&&a.assignedValue&&R(o.assignedValue)&&R(a.assignedValue)){let{expectedEnv:u,givenEnv:c}=Ze({type:o.assignedValue.value,env:e.env},{type:a.assignedValue.value,env:t.env},n,r);e.env=u,t.env=c}}}else if(ge(e.type)&&ge(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)){for(let i=0;i<e.type.variants.length;i++){let o=e.type.variants[i],a=t.type.variants[i],s=o.fields??[],l=a.fields??[];for(let u=0;u<s.length;u++){let{expectedEnv:c,givenEnv:_}=Ze({type:s[u].type,env:e.env},{type:l[u].type,env:t.env},n,r);e.env=c,t.env=_}}if(e.type.typeConstructorArgs&&t.type.typeConstructorArgs){let i=Math.min(e.type.typeConstructorArgs.length,t.type.typeConstructorArgs.length);for(let o=0;o<i;o++){let{expectedEnv:a,givenEnv:s}=Ze({type:e.type.typeConstructorArgs[o],env:e.env},{type:t.type.typeConstructorArgs[o],env:t.env},n,r);e.env=a,t.env=s}}}else{if(ge(e.type)&&ge(t.type))throw new Error(`Cannot unify incompatible enum types: "${A(e.type)}" and "${A(t.type)}"`);if(Ce(e.type)&&Ce(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=t.type.fields[i],{expectedEnv:s,givenEnv:l}=Ze({type:o.type,env:e.env},{type:a.type,env:t.env},n,r);if(e.env=s,t.env=l,o.assignedValue&&a.assignedValue&&R(o.assignedValue)&&R(a.assignedValue)){let{expectedEnv:u,givenEnv:c}=Ze({type:o.assignedValue.value,env:e.env},{type:a.assignedValue.value,env:t.env},n,r);e.env=u,t.env=c}}else if(Le(e.type)&&Le(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=t.type.fields[i],{expectedEnv:s,givenEnv:l}=Ze({type:o.type,env:e.env},{type:a.type,env:t.env},n,r);if(e.env=s,t.env=l,o.assignedValue&&a.assignedValue&&R(o.assignedValue)&&R(a.assignedValue)){let{expectedEnv:u,givenEnv:c}=Ze({type:o.assignedValue.value,env:e.env},{type:a.assignedValue.value,env:t.env},n,r);e.env=u,t.env=c}}else if(Ee(e.type)&&Ee(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(xt(e.type)&&xt(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(wt(e.type)&&wt(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(ke(e.type)&&ke(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.env=i,t.env=o,ue(e.type.length)&&e.type.length.variableName&&!ue(t.type.length)){let a=e.type.length.variableName,s=t.type.length,l=Y(e.env,a),u=l[l.length-1];if(u)u&&(e.env=qe(e.env,u,{...u,value:[s]}));else{let{env:c}=fe({env:e.env,variable:{name:a,value:[s],type:t.type.length.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=c}}}else if(Ge(e.type)&&Ge(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(Tt(e.type)&&Tt(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(rn(e.type)&&rn(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r);e.env=i,t.env=o,pl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n,r)}else if(At(e.type)&&At(t.type)){let i=e.type,o=t.type,{expectedEnv:a,givenEnv:s}=Ze({type:i.isFn.callType,env:e.env},{type:o.isFn.callType,env:t.env},n,r);e.env=a,t.env=s}else if(G(e.type)&&G(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let i=e.type,o=t.type;for(let l=0;l<i.forallParameters.length;l++){let u=i.forallParameters[l],c=o.forallParameters[l],{expectedEnv:_,givenEnv:p}=Ze({type:u.type,env:e.env},{type:c.type,env:t.env},n,r);e.env=_,t.env=p}for(let l=0;l<i.parameters.length;l++){let{expectedEnv:u,givenEnv:c}=Ze({type:i.parameters[l].type,env:e.env},{type:o.parameters[l].type,env:t.env},n,r);e.env=u,t.env=c}{let l=i.implicitParameters,u=[];for(let h of o.implicitParameters)h.isEffectRowSpread?lt(h.type)&&u.push(...h.type.implicitParameters):u.push(h);let c=[],_=[],p=[];for(let h of l)h.isEffectRowSpread?lt(h.type)?_.push(h):D(h.type)&&h.type.isEffectsRow&&p.push(h):c.push(h);if(p.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${p.map(h=>h.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let f=new Set,d=new Set;for(let h=0;h<c.length;h++){let g=c[h];for(let y=0;y<u.length;y++)if(!f.has(y)&&g.type.id===u[y].type.id){let{expectedEnv:v,givenEnv:T}=Ze({type:g.type,env:e.env},{type:u[y].type,env:t.env},n,r);e.env=v,t.env=T,f.add(y),d.add(h);break}}for(let h of _){let g=h.type.implicitParameters;for(let y of g)for(let v=0;v<u.length;v++)if(!f.has(v)&&y.type.id===u[v].type.id){let{expectedEnv:T,givenEnv:$}=Ze({type:y.type,env:e.env},{type:u[v].type,env:t.env},n,r);e.env=T,t.env=$,f.add(v);break}}if(p.length===1&&d.size<c.length){let h=c.filter((g,y)=>!d.has(y));throw new Error(`Effect row unification failed: expected effect(s) ${h.map(g=>`"${g.label??A(g.type)}"`).join(", ")} not found in given implicit parameters.`)}if(p.length===1){let h=p[0],g=[];for(let y=0;y<u.length;y++)f.has(y)||g.push(u[y]);if(D(h.type)&&h.type.isEffectsRow){let y=zr(g),v=J(y),T=Y(e.env,h.type.name),$=T[T.length-1];if($)e.env=qe(e.env,$,{...$,value:[v]});else{let{env:C}=fe({env:e.env,variable:{name:h.type.name,value:[v],type:v.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=C}}}}let{expectedEnv:a,givenEnv:s}=Ze({type:i.return.type,env:e.env},{type:o.return.type,env:t.env},n,r);e.env=a,t.env=s}else if(!(Xe(e.type)&&!Xe(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
|
|
153
|
+
})`}function Ou({arcType:e,env:t,context:n}){let r=Yy(e),i=Hy(e),o=jy(e);return t=On({label:k.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=On({label:k.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=On({label:k.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function un(e,t,n,r){let i=`${e}()`,o=et(i),a=x({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!mt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:wn(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function Ky({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>qo(i.type,t))&&(t=un("Send",e,t,n)),t}function Xy({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=un("Rc",e,t,n)),t}function Qy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>qo(o.type,t)))&&(t=un("Send",e,t,n)),t}function Ru({unionType:e,env:t,context:n}){return e.fields.every(i=>qo(i.type,t))&&(t=un("Send",e,t,n)),t}function Zy({structType:e,env:t,context:n}){return e.isReferenceSemantics?sr(e,new Set,t)||(t=un("Acyclic",e,t,n)):e.fields.every(i=>vi(i.type,t))&&(t=un("Acyclic",e,t,n)),t}function Jy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>vi(o.type,t)))&&(t=un("Acyclic",e,t,n)),t}function Pu({unionType:e,env:t,context:n}){return e.fields.every(i=>vi(i.type,t))&&(t=un("Acyclic",e,t,n)),t}function eg({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>$i(i.type,t,new Set([e.id])))&&(t=un("Comptime",e,t,n)),t}function tg({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>$i(o.type,t,new Set([e.id]))))&&(t=un("Comptime",e,t,n)),t}function ng({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=un("Runtime",e,t,n),t):(e.fields.every(i=>Ci(i.type,t,new Set([e.id])))&&(t=un("Runtime",e,t,n)),t)}function rg({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Ci(o.type,t,new Set([e.id]))))&&(t=un("Runtime",e,t,n)),t}function Uu({unionType:e,env:t,context:n}){return t=un("Runtime",e,t,n),t}function ig({tupleType:e,env:t,context:n}){return e.fields.every(i=>qo(i.type,t))&&(t=un("Send",e,t,n)),t}function og({tupleType:e,env:t,context:n}){return e.fields.every(i=>$i(i.type,t,new Set([e.id])))&&(t=un("Comptime",e,t,n)),t}function ag({tupleType:e,env:t,context:n}){return e.fields.every(i=>Ci(i.type,t,new Set([e.id])))&&(t=un("Runtime",e,t,n)),t}function bi({structType:e,env:t,context:n,errorToken:r}){return t=Ky({structType:e,env:t,context:n}),t=Xy({structType:e,env:t,context:n}),t=Zy({structType:e,env:t,context:n}),t=eg({structType:e,env:t,context:n}),t=ng({structType:e,env:t,context:n}),t=My({structType:e,env:t,context:n}),Na(e,t,r,n),t}function zu({enumType:e,env:t,context:n,errorToken:r}){return t=Qy({enumType:e,env:t,context:n}),t=Jy({enumType:e,env:t,context:n}),t=tg({enumType:e,env:t,context:n}),t=rg({enumType:e,env:t,context:n}),t=Ry({enumType:e,env:t,context:n}),Na(e,t,r,n),t}function Bu({tupleType:e,env:t,context:n,errorToken:r}){return t=ig({tupleType:e,env:t,context:n}),t=og({tupleType:e,env:t,context:n}),t=ag({tupleType:e,env:t,context:n}),Na(e,t,r,n),t}function Gn(e,t){let n=Y(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&R(r.value[0])){let i=r.value[0];if(Le(i.value))return i.value}}function qt(e,t){let n=t.definitionFrameLevel;if(n!==void 0&&n>=0){let o=e.frames[n];if(o){let a=o.variables.find(s=>s.name===t.name&&s.value?.[0]?.tag==="Type");if(a&&a.value){let s=a.value[0];if(s.value===t||D(s.value)&&s.value.id===t.id)return t}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=Y(e,t.name,a=>a.value?.[0]?.tag==="Type");if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(D(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if(c?.tag==="Type"){let _=c;if(_.value===t){a=!0;break}if(D(_.value)&&_.value.id!==t.id)return t}}if(a)break}}if(!a&&n!==void 0&&n>=0&&n<e.frames.length){let s=e.frames[n];if(s){for(let l of s.variables)if(l.name===t.name&&l.value){let u=l.value[0];if(u?.tag==="Type"){let c=u;!D(c.value)&&c.value===r.value&&(a=!0)}}}}if(!a)return t;break}}while(D(t));return r.value}var Vs=null;function vr(){if(Vs)return Vs;let e=ct(),t=Pe(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Vs=n,n}var Ns=null;function Gi(){if(Ns)return Ns;let e=ct(),t=Pe(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,Ns=n,n}var Ms=null;function zt(){if(Ms)return Ms;let e=ct(),t=Pe(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,Ms=n,n}var Ds=null;function Xt(){if(Ds)return Ds;let e=ct(),t=Pe(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,Ds=n,n}var Os=new Map;function Mr(e){if(Os.has(e))return Os.get(e);let t=ct(),n=Pe(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,Os.set(e,i),i}function Yo(){return Mr(Xt())}var Rs=null;function rt(){if(Rs)return Rs;let e=ct(),t=Pe(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,Rs=n,n}var Ps=null;function St(){if(Ps)return Ps;let e=ct(),t=Pe(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,Ps=n,n}var Us=null;function Wi(){if(Us)return Us;let e=ct(),t=Pe(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,Us=n,n}var zs=null;function qi(){if(zs)return zs;let e=ct(),t=Pe(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,zs=n,n}var Bs=null;function Yi(){if(Bs)return Bs;let e=ct(),t=Pe(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,Bs=n,n}var Gs=null;function Hi(){if(Gs)return Gs;let e=ct(),t=Pe(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,Gs=n,n}var Ws=null;function ji(){if(Ws)return Ws;let e=ct(),t=Pe(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,Ws=n,n}var qs=null;function Ki(){if(qs)return qs;let e=ct(),t=Pe(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,qs=n,n}var Ys=null;function Jr(){if(Ys)return Ys;let e=ct(),t=Pe(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,Ys=n,n}var Hs=null;function Xi(){if(Hs)return Hs;let e=ct(),t=Pe(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,Hs=n,n}var js=null;function Qi(){if(js)return js;let e=ct(),t=Pe(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,js=n,n}var Ks=null;function Zi(){if(Ks)return Ks;let e=ct(),t=Pe(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,Ks=n,n}var Xs=null;function ei(){if(Xs)return Xs;let e=ct(),t=Pe(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,Xs=n,n}var Qs=null;function Hn(){if(Qs)return Qs;let e=ct(),t=Pe(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,Qs=n,n}var Zs=null;function Wu(){if(Zs)return Zs;let e=ct(),t=Pe(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,Zs=n,n}var Js=null;function qu(){if(Js)return Js;let e=ct(),t=Pe(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,Js=n,n}var el=null;function Yu(){if(el)return el;let e=ct(),t=Pe(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,el=n,n}var tl=null;function Hu(){if(tl)return tl;let e=ct(),t=Pe(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,tl=n,n}var nl=null;function ju(){if(nl)return nl;let e=ct(),t=Pe(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,nl=n,n}var rl=null;function Ku(){if(rl)return rl;let e=ct(),t=Pe(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,rl=n,n}var il=null;function Xu(){if(il)return il;let e=ct(),t=Pe(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,il=n,n}var ol=null;function Qu(){if(ol)return ol;let e=ct(),t=Pe(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,ol=n,n}var al=null;function Zu(){if(al)return al;let e=ct(),t=Pe(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,al=n,n}var sl=null;function Ju(){if(sl)return sl;let e=ct(),t=Pe(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,sl=n,n}function tt(e){return wn(0,e)}function kr(e,t){let n=ct(),r=Pe(n),i={id:`array_${e.id+"_"+Ls(De(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var ll=new Map;function Pr(e){if(ll.has(e))return ll.get(e);let t=ct(),n=Pe(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,ll.set(e,r),r}function Lu(e){let n=Y(e,"str").find(r=>R(r.value?.[0])&&r.value[0].type);if(!n||!R(n.value?.[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var ul;function ec(){if(ul)return ul;let e=ct(),t=Pe(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,ul=n,n}function ao(e){let t=ct(),n=Pe(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function wi(e,t=!1,n=!1){let r=Pe(e),i={id:`struct_${Re(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function Da(e){return{id:`module_${Re(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function Pe(e){return{id:`trait_${Re(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function tc(e){let t=Pe(e),n={id:`enum_${Re(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function nc(e){let t=Pe(e),n={id:`union_${Re(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function Ur({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,isClosure:_}){let p=ct(),f=Pe(p),d={id:`fn_${Re(a.modulePath)}`,tag:"Function",parameters:e,forallParameters:t,implicitParameters:n??[],variadicParameter:r,whereClauseExprs:i,return:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,trait:f,isClosure:_};return f.receiverType=d,d}var cl=new Map;function It(e){if(cl.has(e))return cl.get(e);let t=ct(),n=Pe(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,cl.set(e,r),r}var _l=new Map;function rc(e,t){if(_l.has(e))return _l.get(e);let n=Pe(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,_l.set(e,r),r}var pl=new Map;function ic(e,t){if(pl.has(e))return pl.get(e);let n=Pe(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,pl.set(e,r),r}function Vn(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=Pe(a),u=r?.map(p=>({traitType:p,frameLevel:-1}))??[],c=i?.map(p=>({traitType:p,frameLevel:-1}))??[],_={id:n??`sometype_${Re(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=_,Gn(a,"Runtime")&&un("Runtime",_,a,s),Mu({someType:_,env:a,context:{SelfType:_,stdPath:""}}),_}var Ma=new Map;function Fi(e,t){let n=Pe(t),r=wn(1),i={id:`effects_row_sometype_${Re(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 zr(e){let t=ct(),n=Pe(t),r={id:`EffectsRow_${Re(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function wn(e,t){if(Ma.has(e)){let i=Ma.get(e);if(i.has(t))return i.get(t)}else Ma.set(e,new Map);let n=Pe(ct()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,Ma.get(e).set(t,r),r}function Li({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function oc(e,t){let n=`fn_trait_${e.id}`,r=Pe(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function Gu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${A(a.type)}`).join(","),o=A(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${A(n.type)}`}).join(";")}function Ho({requiredTraits:e,env:t,negativeTraits:n}){let r=Pe(t),i=e.map(c=>Gu(c)).join("__"),o=n?n.map(c=>Gu(c)).join("__"):"",a=`dyn_${Ls(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=n?.map(c=>({traitType:c,frameLevel:-1}))??[],u={id:a,tag:"Dyn",requiredTraits:s,negativeTraits:l,trait:r,env:t};return r.receiverType=u,u}function ac(e,t,n,r){let i=Pe(r),o={id:`typeapp_${e.id}_${t.map(a=>a.id).join("_")}_${Re(r.modulePath)}`,tag:"TypeApplication",constructor:e,args:t,resultKind:n,trait:i};return i.receiverType=o,o}function sc(e,t){return!Xe(e)||!Xe(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Tn(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),D(t))return e===t.id;if(pe(t))return t.fields.some(r=>Tn(e,r.type,n));if(ge(t))return t.variants.some(r=>r.fields?r.fields.some(i=>Tn(e,i.type,n)):!1);if(Se(t))return t.fields.some(r=>Tn(e,r.type,n));if(ke(t)||Ge(t)||Tt(t))return Tn(e,t.childType,n);if(Ee(t))return!1;if(xt(t)||wt(t))return Tn(e,t.childType,n);if(G(t))return t.parameters.some(r=>Tn(e,r.type,n))||Tn(e,t.return.type,n);if(on(t)){if(Tn(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(Tn(e,r.type,n))return!0;return!1}return At(t)?Tn(e,t.isFn.callType,n):Vr(t)?Tn(e,t.constructor,n)||t.args.some(r=>Tn(e,r,n)):Le(t)?t.fields.some(r=>Tn(e,r.type,n)):Ce(t)?t.fields.some(r=>Tn(e,r.type,n)):ot(t)?t.fields.some(r=>Tn(e,r.type,n)):!1}function Ze(e,t,n=[],r){if(n.find(i=>i.expected===e.type&&i.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),D(e.type)&&D(t.type)){let i=qt(e.env,e.type),o=qt(t.env,t.type);if(D(i))if(D(o)){if(i!==o){let a=J(t.type);{let s=Y(e.env,e.type.name),l=s[s.length-1];if(l)e.env=qe(e.env,l,{...l,value:[a]});else{let{env:u}=fe({env:e.env,variable:{name:e.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}{let s=Y(t.env,t.type.name),l=s[s.length-1];if(l)t.env=qe(t.env,l,{...l,value:[a]});else{let{env:u}=fe({env:t.env,variable:{name:t.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=u}}}}else{let a=J(o),s=Y(e.env,e.type.name),l=s[s.length-1];if(l)e.env=qe(e.env,l,{...l,value:[a]});else{let{env:u}=fe({env:e.env,variable:{name:e.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}else{let a=J(i),s=Y(t.env,t.type.name),l=s[s.length-1];if(l)t.env=qe(t.env,l,{...l,value:[a]});else{let{env:u}=fe({env:t.env,variable:{name:t.type.name,value:[a],type:a.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=u}}if(e.type.id!==t.type.id&&e.type.requiredTraits&&t.type.requiredTraits){let a=e.type.requiredTraits,s=t.type.requiredTraits;for(let l=0;l<a.length;l++){let u=a[l].traitType;if(At(u)){let c=s.find(_=>At(_.traitType));if(c&&At(c.traitType)){let{expectedEnv:_,givenEnv:p}=Ze({type:u.isFn.callType,env:e.env},{type:c.traitType.isFn.callType,env:t.env},n,r);e.env=_,t.env=p}}else if(on(u)){let c=s.find(_=>on(_.traitType));if(c&&on(c.traitType)){let{expectedEnv:_,givenEnv:p}=Ze({type:u.isFuture.outputType,env:e.env},{type:c.traitType.isFuture.outputType,env:t.env},n,r);e.env=_,t.env=p,fl(u.isFuture.effects,c.traitType.isFuture.effects,e,t,n,r)}}}}}else if(D(e.type)){let i=qt(e.env,e.type);if(D(i)&&i.id===e.type.id){if(Tn(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${A(t.type)}" because it would create an infinite type.`);let o=J(t.type);r?.setResolvedConcreteType&&!e.type.resolvedConcreteType&&(e.type.resolvedConcreteType=t.type);let a=Y(e.env,e.type.name),s=a[a.length-1];if(s)s&&(e.env=qe(e.env,s,{...s,value:[o]}));else{let{env:l}=fe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}if(e.type.requiredTraits){for(let{traitType:l}of e.type.requiredTraits)if(At(l)&&G(t.type)){let u=l.isFn.callType,{expectedEnv:c,givenEnv:_}=Ze({type:u,env:e.env},{type:t.type,env:t.env},n,r);e.env=c,t.env=_}else if(on(l)&&on(t.type)){let{expectedEnv:u,givenEnv:c}=Ze({type:l.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r);e.env=u,t.env=c,fl(l.isFuture.effects,t.type.isFuture.effects,e,t,n,r)}}}else if(!D(i)){let{expectedEnv:o,givenEnv:a}=Ze({type:i,env:e.env},{type:t.type,env:t.env},n,r);e.env=o,t.env=a}}else if(D(t.type)){let i=qt(t.env,t.type);if(D(i)){if(Tn(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${A(e.type)}" because it would create an infinite type.`);let o=J(e.type);r?.setResolvedConcreteType&&!t.type.resolvedConcreteType&&(t.type.resolvedConcreteType=e.type);let a=Y(t.env,t.type.name),s=a[a.length-1];if(s)s&&(t.env=qe(t.env,s,{...s,value:[o]}));else{let{env:l}=fe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}else{let{expectedEnv:o,givenEnv:a}=Ze({type:e.type,env:e.env},{type:i,env:t.env},n,r);e.env=o,t.env=a}}else if(Se(e.type)&&Se(t.type)&&e.type.fields.length===t.type.fields.length)for(let i=0;i<e.type.fields.length;i++){let{expectedEnv:o,givenEnv:a}=Ze({type:e.type.fields[i].type,env:e.env},{type:t.type.fields[i].type,env:t.env},n,r);e.env=o,t.env=a}else{if(Se(e.type)&&Se(t.type))throw new Error(`Cannot unify incompatible tuple types: "${A(e.type)}" and "${A(t.type)}"`);if(pe(e.type)&&pe(t.type)){if(!(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)){if(!(e.type.functionValue&&t.type.functionValue&&e.type.functionValue.funcId===t.type.functionValue.funcId))throw new Error(`Cannot unify incompatible struct types: "${A(e.type)}" and "${A(t.type)}"`)}for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=t.type.fields[i],{expectedEnv:s,givenEnv:l}=Ze({type:o.type,env:e.env},{type:a.type,env:t.env},n,r);if(e.env=s,t.env=l,o.assignedValue&&a.assignedValue&&R(o.assignedValue)&&R(a.assignedValue)){let{expectedEnv:u,givenEnv:c}=Ze({type:o.assignedValue.value,env:e.env},{type:a.assignedValue.value,env:t.env},n,r);e.env=u,t.env=c}}}else if(ge(e.type)&&ge(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)){for(let i=0;i<e.type.variants.length;i++){let o=e.type.variants[i],a=t.type.variants[i],s=o.fields??[],l=a.fields??[];for(let u=0;u<s.length;u++){let{expectedEnv:c,givenEnv:_}=Ze({type:s[u].type,env:e.env},{type:l[u].type,env:t.env},n,r);e.env=c,t.env=_}}if(e.type.typeConstructorArgs&&t.type.typeConstructorArgs){let i=Math.min(e.type.typeConstructorArgs.length,t.type.typeConstructorArgs.length);for(let o=0;o<i;o++){let{expectedEnv:a,givenEnv:s}=Ze({type:e.type.typeConstructorArgs[o],env:e.env},{type:t.type.typeConstructorArgs[o],env:t.env},n,r);e.env=a,t.env=s}}}else{if(ge(e.type)&&ge(t.type))throw new Error(`Cannot unify incompatible enum types: "${A(e.type)}" and "${A(t.type)}"`);if(Ce(e.type)&&Ce(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=t.type.fields[i],{expectedEnv:s,givenEnv:l}=Ze({type:o.type,env:e.env},{type:a.type,env:t.env},n,r);if(e.env=s,t.env=l,o.assignedValue&&a.assignedValue&&R(o.assignedValue)&&R(a.assignedValue)){let{expectedEnv:u,givenEnv:c}=Ze({type:o.assignedValue.value,env:e.env},{type:a.assignedValue.value,env:t.env},n,r);e.env=u,t.env=c}}else if(Le(e.type)&&Le(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=t.type.fields[i],{expectedEnv:s,givenEnv:l}=Ze({type:o.type,env:e.env},{type:a.type,env:t.env},n,r);if(e.env=s,t.env=l,o.assignedValue&&a.assignedValue&&R(o.assignedValue)&&R(a.assignedValue)){let{expectedEnv:u,givenEnv:c}=Ze({type:o.assignedValue.value,env:e.env},{type:a.assignedValue.value,env:t.env},n,r);e.env=u,t.env=c}}else if(Ee(e.type)&&Ee(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(xt(e.type)&&xt(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(wt(e.type)&&wt(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(ke(e.type)&&ke(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.env=i,t.env=o,ue(e.type.length)&&e.type.length.variableName&&!ue(t.type.length)){let a=e.type.length.variableName,s=t.type.length,l=Y(e.env,a),u=l[l.length-1];if(u)u&&(e.env=qe(e.env,u,{...u,value:[s]}));else{let{env:c}=fe({env:e.env,variable:{name:a,value:[s],type:t.type.length.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=c}}}else if(Ge(e.type)&&Ge(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(Tt(e.type)&&Tt(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);e.env=i,t.env=o}else if(on(e.type)&&on(t.type)){let{expectedEnv:i,givenEnv:o}=Ze({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r);e.env=i,t.env=o,fl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n,r)}else if(At(e.type)&&At(t.type)){let i=e.type,o=t.type,{expectedEnv:a,givenEnv:s}=Ze({type:i.isFn.callType,env:e.env},{type:o.isFn.callType,env:t.env},n,r);e.env=a,t.env=s}else if(G(e.type)&&G(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let i=e.type,o=t.type;for(let l=0;l<i.forallParameters.length;l++){let u=i.forallParameters[l],c=o.forallParameters[l],{expectedEnv:_,givenEnv:p}=Ze({type:u.type,env:e.env},{type:c.type,env:t.env},n,r);e.env=_,t.env=p}for(let l=0;l<i.parameters.length;l++){let{expectedEnv:u,givenEnv:c}=Ze({type:i.parameters[l].type,env:e.env},{type:o.parameters[l].type,env:t.env},n,r);e.env=u,t.env=c}{let l=i.implicitParameters,u=[];for(let h of o.implicitParameters)h.isEffectRowSpread?lt(h.type)&&u.push(...h.type.implicitParameters):u.push(h);let c=[],_=[],p=[];for(let h of l)h.isEffectRowSpread?lt(h.type)?_.push(h):D(h.type)&&h.type.isEffectsRow&&p.push(h):c.push(h);if(p.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${p.map(h=>h.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let f=new Set,d=new Set;for(let h=0;h<c.length;h++){let g=c[h];for(let y=0;y<u.length;y++)if(!f.has(y)&&g.type.id===u[y].type.id){let{expectedEnv:v,givenEnv:T}=Ze({type:g.type,env:e.env},{type:u[y].type,env:t.env},n,r);e.env=v,t.env=T,f.add(y),d.add(h);break}}for(let h of _){let g=h.type.implicitParameters;for(let y of g)for(let v=0;v<u.length;v++)if(!f.has(v)&&y.type.id===u[v].type.id){let{expectedEnv:T,givenEnv:$}=Ze({type:y.type,env:e.env},{type:u[v].type,env:t.env},n,r);e.env=T,t.env=$,f.add(v);break}}if(p.length===1&&d.size<c.length){let h=c.filter((g,y)=>!d.has(y));throw new Error(`Effect row unification failed: expected effect(s) ${h.map(g=>`"${g.label??A(g.type)}"`).join(", ")} not found in given implicit parameters.`)}if(p.length===1){let h=p[0],g=[];for(let y=0;y<u.length;y++)f.has(y)||g.push(u[y]);if(D(h.type)&&h.type.isEffectsRow){let y=zr(g),v=J(y),T=Y(e.env,h.type.name),$=T[T.length-1];if($)e.env=qe(e.env,$,{...$,value:[v]});else{let{env:C}=fe({env:e.env,variable:{name:h.type.name,value:[v],type:v.type,isCompileTimeOnly:!0,token:r?.token??se,initializedAtToken:r?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=C}}}}let{expectedEnv:a,givenEnv:s}=Ze({type:i.return.type,env:e.env},{type:o.return.type,env:t.env},n,r);e.env=a,t.env=s}else if(!(Xe(e.type)&&!Xe(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
|
|
154
154
|
Expected: "${A(e.type)}"
|
|
155
|
-
Given: "${A(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function pl(e,t,n,r,i,o){if(e.length===0&&t.length===0)return;let a=[],s=[],l=[];for(let _ of e)_.isEffectRowSpread?lt(_.type)?s.push(_):D(_.type)&&_.type.isEffectsRow&&l.push(_):a.push(_);if(l.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${l.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let u=[];for(let _ of t)_.isEffectRowSpread?lt(_.type)&&u.push(..._.type.implicitParameters):u.push(_);let c=new Set;for(let _ of a)for(let p=0;p<u.length;p++)if(!c.has(p)&&_.type.id===u[p].type.id){let{expectedEnv:f,givenEnv:d}=Ze({type:_.type,env:n.env},{type:u[p].type,env:r.env},i,o);n.env=f,r.env=d,c.add(p);break}for(let _ of s){let p=_.type.implicitParameters;for(let f of p)for(let d=0;d<u.length;d++)if(!c.has(d)&&f.type.id===u[d].type.id){let{expectedEnv:h,givenEnv:g}=Ze({type:f.type,env:n.env},{type:u[d].type,env:r.env},i,o);n.env=h,r.env=g,c.add(d);break}}if(l.length===1){let _=l[0],p=[];for(let f=0;f<u.length;f++)c.has(f)||p.push(u[f]);if(D(_.type)&&_.type.isEffectsRow){let f=zr(p),d=J(f),h=Y(n.env,_.type.name),g=h[h.length-1];if(g)n.env=qe(n.env,g,{...g,value:[d]});else{let{env:y}=fe({env:n.env,variable:{name:_.type.name,value:[d],type:d.type,isCompileTimeOnly:!0,token:o?.token??se,initializedAtToken:o?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=y}}}}function fl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Rn(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function sc(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=Rn(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function dl(e){let t=[];for(let n of e)n.isEffectRowSpread&<(n.type)?t.push(...dl(n.type.implicitParameters)):(n.isEffectRowSpread&&D(n.type)&&n.type.isEffectsRow,t.push(n));return t}function q(e,t,n=!1,r=new Set){let i=e.type.id,o=t.type.id;if(i&&o&&(pe(e.type)||ge(e.type)||ot(e.type))&&(pe(t.type)||ge(t.type)||ot(t.type))){let a=`${i}:${o}`;if(r.has(a))return!0;r.add(a)}if(Ao(e.type)&&Ao(t.type))return e.type.tag===t.type.tag;if((gt(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"||ir(e.type))&>(t.type))return!(n&&!gt(e.type));if((Mt(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Mt(t.type))return!(n&&!Mt(e.type));if((ht(e.type)||Ge(e.type)&&rr(e.type.childType)||Ee(e.type)&&(rr(e.type.childType)||Ui(e.type.childType))||An(e.type)&&e.type.typeName==="str")&&ht(t.type))return!0;if(ir(e.type)&&ir(t.type))return e.type.tag===t.type.tag;if(Dt(e.type)&&Dt(t.type))return!0;if(Tt(e.type)&&Tt(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(ke(e.type)&&ke(t.type))return Ot({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Ge(e.type)&&Ge(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Se(e.type)&&Se(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(!q({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(pe(e.type)&&pe(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!me(e.type)&&!me(t.type)&&!(e.type.functionValue&&t.type.functionValue&&e.type.functionValue.funcId===t.type.functionValue.funcId))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!q({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(ge(e.type)&&ge(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.id!==t.type.id&&!me(e.type)&&!me(t.type)&&!(e.type.functionValue&&t.type.functionValue&&e.type.functionValue.funcId===t.type.functionValue.funcId)||e.type.variants.length!==t.type.variants.length)return!1;for(let a=0;a<e.type.variants.length;a++){let s=e.type.variants[a],l=t.type.variants[a];if(s.name!==l.name||s.fields?.length!==l.fields?.length)return!1;if(s.fields)for(let u=0;u<s.fields.length;u++){let c=s.fields[u],_=l.fields[u];if(c.label!==_.label||!q({type:c.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(ot(e.type)&&ot(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!me(e.type)&&!me(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!q({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(Ce(e.type)&&Ce(t.type)){for(let a of e.type.fields){let s=t.type.fields.find(l=>l.label===a.label);if(!s||!q({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}return!0}if(Le(e.type)){if(Le(t.type)){if(At(e.type))return!(!At(t.type)||!lc({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n,r));if(rn(e.type)){if(!rn(t.type)||!q({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let a=dl(e.type.isFuture.effects),s=dl(t.type.isFuture.effects);if(a.length>0&&s.length>0){if(a.length!==s.length)return!1;let l=new Set;for(let u of a){let c=!1;for(let _=0;_<s.length;_++)if(!l.has(_)&&q({type:u.type,env:e.env},{type:s[_].type,env:t.env},n,r)){l.add(_),c=!0;break}if(!c)return!1}}return!0}return e.type.id===t.type.id}return Xe(t.type)&&t.type.baseType&&t.type.baseType.trait&&Le(e.type)?q({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(G(e.type)&&G(t.type))return lc({type:e.type,env:e.env},{type:t.type,env:t.env},n,r);if(Xe(e.type)&&Xe(t.type))return ac(e.type,t.type);if(Ee(e.type)&&Ee(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(xt(e.type)&&xt(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(wt(e.type)&&wt(t.type))return q({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(Ae(e.type)&&Ae(t.type)){for(let{traitType:a}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:l})=>q({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:a}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:l})=>q({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1}return!0}if(D(e.type)){if(Ae(t.type)){if(e.type.requiredTraits.length>0){for(let{traitType:a}of e.type.requiredTraits)if(!t.type.requiredTraits.some(({traitType:l})=>q({type:a,env:e.env},{type:l,env:t.env},!1,r)))return!1}return!0}if(D(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?q({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let a=fl(e.env,e.type),s=fl(t.env,t.type);if(n&&a.length!==s.length)return!1;for(let u of a)if(!s.find(_=>q({type:u,env:e.env},{type:_,env:t.env},n,r)))return!1;let l=sc(e.env,e.type);if(l.length>0){for(let u of l)if(s.find(_=>q({type:u,env:e.env},{type:_,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!q({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 q({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let a=fl(e.env,e.type);if(a.length===0)return!n;if(a.length>0){for(let c of a)if(!Rt({targetType:t.type,traitType:c,env:e.env}))break;let l=sc(e.env,e.type);if(l.length>0){for(let c of l)if(Rt({targetType:t.type,traitType:c,env:e.env}))return!1}let u=!0;for(let c of a)if(!Rt({targetType:t.type,traitType:c,env:e.env})){u=!1;break}if(u)return!0}let s=qt(e.env,e.type);return e.type===s?!1:q({type:s,env:e.env},t,n,r)}}else if(D(t.type)){if(t.type.resolvedConcreteType&&q(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let a=qt(t.env,t.type);return t.type===a?!1:q(e,{type:a,env:t.env},n,r)}if(Vr(e.type)&&Vr(t.type)){let a=e.type,s=t.type;return a.constructor.id!==s.constructor.id||a.args.length!==s.args.length?!1:a.args.every((l,u)=>q({type:l,env:e.env},{type:s.args[u],env:t.env},n,r))}return!1}function lc(e,t,n=!1,r=new Set){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:o,givenEnv:a}=Ze({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=o,t.env=a}catch{return!1}for(let o=0;o<e.type.forallParameters.length;o++){let a=e.type.forallParameters[o],s=t.type.forallParameters[o];if(!q({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}for(let o=0;o<e.type.parameters.length;o++){let a=e.type.parameters[o],s=t.type.parameters[o];if(a.isCompileTimeOnly!==s.isCompileTimeOnly||!q({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}return q({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n,r)}function Oa(e){return E(e,["->","=>"])?!!(e.$?.isAnonymousFunctionDefinition===!0||F(e)&&F(e.func)&&(E(e.func,V.fn)||E(e.func,V.unsafe_fn)||E(e.func,V.Fn))||!e.$):!1}function Ra(e,t){if(!F(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(F(n)&&E(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function ur(e){if(B(e))return Et(e,V.escape);if(F(e)){if(e.$?.macroExpansion)return ur(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,ur);if(Oa(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(ur(e.func))return!0;for(let t of e.args)if(ur(t))return!0}return!1}function so(e){if(B(e))return Et(e,V.return)||Et(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return so(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,so);if(Oa(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(so(e.func))return!0;for(let t of e.args)if(so(t))return!0}return!1}function gn(e){if(F(e)){if(e.func.$?.type?.ioBuiltin==="io_await")return!0;if(e.$?.macroExpansion)return gn(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,gn);if(e.func.$?.type?.ioBuiltin==="io_async"||Oa(e)||R(e.func.$?.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(gn(e.func))return!0;for(let t of e.args)if(gn(t))return!0}return!1}function lo(e){if(B(e))return Et(e,V.break)||Et(e,V.return)||Et(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return lo(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,lo);if(Oa(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(lo(e.func))return!0;for(let t of e.args)if(lo(t))return!0}return!1}var H={tag:"Unit",type:Hn()};function jo(e){if(e&&e.tag==="FnCall"&&E(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=Y(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function Pa(e,t){let n=[],r=new Map,i=new Map,o=new Map;if(wr(e,n,r,i,o,t),e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)wr(a,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function wr(e,t,n,r,i,o,a){switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let s=e.token.value,l=e.$.type,u=Y(e.$.env,s);if(u.length>0){let c=u[u.length-1];if(c&&!n.has(c.id)&&!c.isCompileTimeOnly){let _=`${c.name}:${c.frameLevel}`,p=r.get(_);if(p&&p!==c.id)i.set(c.id,p);else if(c.isOwningTheSameRcValueAs){let f=c.isOwningTheSameRcValueAs;if(!n.has(f.id)){let d={id:f.id,name:f.name,type:f.type,isOwningTheSameRcValueAs:void 0};n.set(f.id,d);let h=`${f.name}:${f.frameLevel}`;r.has(h)||r.set(h,f.id)}}else n.set(c.id,{id:c.id,name:s,type:l,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,c.id)}}}break;case"FnCall":{if(E(e,V.while)){let s=t.length;wr(e.func,t,n,r,i,o,e);for(let u of e.args)wr(u,t,n,r,i,o,e);let l=t.length;if(l>s)for(let u=s;u<l;u++)t[u].isInsideWhile=!0,t[u].whileNestingDepth=(t[u].whileNestingDepth??0)+1,t[u].enclosingWhileExpr||(t[u].enclosingWhileExpr=e);break}if(E(e,V.cond)){uc(e,t,n,r,i,o);break}if(E(e,V.match)){uc(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)wr(s,t,n,r,i,o,e);break}wr(e.func,t,n,r,i,o,e);for(let s of e.args)wr(s,t,n,r,i,o,e);if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)wr(s,t,n,r,i,o,e);break}}}function uc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;wr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let _=t.length;wr(c,t,n,r,i,o,e),l.push(t.slice(_))}r.clear();for(let[c,_]of s)r.set(c,_);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let _=0;_<u;_++){let p;for(let f of l)if(_<f.length){p=f[_];break}p&&(p.index=t.length,p.isInsideCond=!0,_===0&&(p.needsOwnCondBranchField=!0),_>0&&(p.condBranchSourceIndex=c),t.push(p))}}}function cc(e){let n=Pa(e,{detect(i,o,a){if(i.tag==="FnCall"&&En(i)){let s=i.args[0];if(!s)return;let l=s.$?.type;if(l&&Ie(l)){let u=Bt(l);if(!u)return;let c=u.isFuture.outputType,_;if(s.tag==="Atom"&&s.token.type==="identifier"&&s.$){let f=s.token.value,d=Y(s.$.env,f);if(d.length>0){let h=d[d.length-1];h.isOwningTheSameRcValueAs?_=h.isOwningTheSameRcValueAs.id:_=h.id}}let p=jo(o);a.push({index:a.length,expr:i,resultType:c,futureType:u,targetVariableId:p,futureVariableId:_})}}},shouldSkipBody(i){return Yt(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 Yt(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_async"}function En(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_await"}function _c(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_state"}function Ua(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_spawn"}function pc(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="join_handle_await"}function Qe(e){return B(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Ko(e,t,n){if(!e.$?.variableName)return;let r=Y(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 ri(e){let t=e.$?.env;if(!t)return;let n;if(e.$?.pathCollection)for(let r of e.$.pathCollection)r.length>0&&typeof r[0]=="string"&&(n=r[0]);else B(e)&&(n=e.token.value);if(n){let r=Y(t,n),i=r[r.length-1];if(i?.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${i.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var za=!0;function fc({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=et(`${k.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:{env:i,type:H.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Xo(e,t,n){if(F(e)&&Yt(e))return;if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Xo(s,t,n);if(F(e)&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[0])&&B(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0]&&e.args.length===0&&e.$?.env){let s=e.func.args[0].token.value,l=Y(e.$.env,s);if(l.length>0){let u=l[l.length-1];t.has(u.id)||t.set(u.id,[]),t.get(u.id).push(e)}return}if(F(e)&&E(e,V.while))return;function i(s){if(at(s.$?.controlFlow))return!0;if(F(s)&&E(s,V.begin)){let l=s.args[s.args.length-1];if(at(l?.$?.controlFlow)||F(l)&&E(l,V.return))return!0}return!!(F(s)&&E(s,V.return))}function o(s){if(F(s)&&E(s,V.tuple,0))return!0;if(F(s)&&E(s,V.begin)){if(s.args.length===0)return!0;if(s.args.length===1){let l=s.args[0];if(F(l)&&E(l,V.tuple,0))return!0}}return!1}function a(s,l){let u=[],c=[],_=[];for(let f=l;f<s.args.length;f++){let d=s.args[f];if(F(d)&&E(d,"=>",2)){let h=d.args[1],g=dc(h);u.push(g),c.push(i(h)),_.push(o(h))}}let p=new Set;for(let f of u){for(let d of f.dupCalls.keys())p.add(d);for(let d of f.varsWithPartialBranchDups)n.add(d)}if(u.length>0)for(let f of p){let d=[],h=[];for(let g=0;g<u.length;g++){let y=u[g],v=y.dupCalls.has(f),T=c[g];if(v){let $=y.dupCalls.get(f);T?d.push(...$):h.push(...$)}}for(let g of d)t.has(f)||t.set(f,[]),g.__isEarlyReturnDup=!0,t.get(f).push(g);if(h.length>0){let g=0,y=0;for(let v=0;v<u.length;v++)c[v]||(g++,u[v].dupCalls.has(f)&&y++);if(y===g){t.has(f)||t.set(f,[]);for(let v of h)t.get(f).push(v)}else n.add(f)}}}if(F(e)&&E(e,V.cond)){a(e,0);return}if(F(e)&&E(e,V.match)){e.args[0]&&Xo(e.args[0],t,n),a(e,1);return}if(F(e)){Xo(e.func,t,n);for(let s of e.args)Xo(s,t,n)}}function dc(e){let t=new Map,n=new Set;return Xo(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function Ba(e){return F(e)&&E(e,V.tuple,0)}function ml(e,t){if(e.$?.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(n=>!t.has(n)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),F(e)){ml(e.func,t);for(let n of e.args)ml(n,t)}}function ag(e,t){let n=new Set,r=e.args;for(let i=0;i<r.length;i++){let o=r[i];if(!F(o)||!E(o,V.while))continue;let a=o.args[o.args.length-1];if(!(!a||!F(a)||!E(a,V.begin)))for(let s of a.args){if(!F(s)||!E(s,V.match))continue;let l=s.args[0];if(!l||!B(l))continue;let u=l.token.value,c,_,p;for(let $=1;$<s.args.length;$++){let C=s.args[$];if(!F(C)||!E(C,"=>",2))continue;let L=C.args[1];if(!(!F(L)||!E(L,V.begin))){for(let b of L.args)if(F(b)&&E(b,"=",2)){let S=b.args[0];if(B(S)&&S.token.value===u){c=b.args[1],_=b,p=L;break}}if(c)break}}if(!c||!_||!p||!c.$?.deferredDupExpressions||c.$.deferredDupExpressions.length===0)continue;let f;for(let $=0;$<i;$++){let C=r[$];if(F(C)&&E(C,"=",2)){let L=C.args[0];if(B(L)&&L.token.value===u){f=C.args[1];break}if(F(L)&&L.args.length>0&&B(L.args[0])&&L.args[0].token.value===u){f=C.args[1];break}}}if(!f)continue;let d=f.$?.variableName;if(!d||!f.$?.env)continue;let h=Y(f.$.env,d);if(h.length===0||h[h.length-1].isOwningTheRcValue||!f.$?.deferredDupExpressions||f.$.deferredDupExpressions.length===0)continue;let y=!1;for(let $=i+1;$<r.length;$++)if(yl(r[$],u)){y=!0;break}if(y)continue;f.$.deferredDupExpressions=void 0,c.$.deferredDupExpressions=void 0;let v=_.$?.variableName;v&&p.$?.deferredDropExpressions&&(p.$.deferredDropExpressions=p.$.deferredDropExpressions.filter($=>sg($)!==v),p.$.deferredDropExpressions.length===0&&(p.$.deferredDropExpressions=void 0)),_.$&&(_.$.variableName=void 0);let T=Y(t,u);if(T.length>0){let $=T[T.length-1];t=qe(t,$,{...$,consumedAtToken:$.token})}n.add(u)}}return{optimizedVarNames:n,env:t}}function sg(e){if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(F(e)&&E(e,k.___drop)&&e.args.length>=1&&B(e.args[0]))return e.args[0].token.value}function yl(e,t){if(B(e)&&e.token.value===t)return!0;if(F(e)){if(yl(e.func,t))return!0;for(let n of e.args)if(yl(n,t))return!0}return!1}function $t({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){if(F(e)&&E(e,"_")&&!E(e,V.begin)){let $=e;$.args.some(L=>F(L)&&E(L,":"))||($.func={...$.func,token:{...$.func.token,value:V.begin[0]}})}if(!F(e)||!E(e,V.begin)){let $={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:V.begin[0]}},args:[Ne(e)],token:{...e.token,value:V.begin[0]}};br(e,$),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:H.type,value:H,pathCollection:[]},e;t=xe(t,void 0,!0);for(let $=0;$<r.length;$++){let C=r[$],{env:L}=fe({env:t,variable:C});t=L}let s=o[o.length-1],l,u=!1;for(let $=0;$<o.length;$++){let C=o[$];if(B(C)&&Et(C,V.return)||F(C)&&E(C,V.return)){if($!==o.length-1&&!($===o.length-2&&Ba(o[o.length-1])))throw m({token:C.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(F(C)&&ve(C,V.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:C.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=C,B(C)){C.$={env:t,type:H.type,value:H,pathCollection:[],controlFlow:ni("return")},s=C;break}else{ve(C,V.return,1);let L=C.args[0],b=x({expr:L,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!b.$)throw m({token:L.token,errorMessage:`Return expression is not evaluated correctly:
|
|
155
|
+
Given: "${A(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function fl(e,t,n,r,i,o){if(e.length===0&&t.length===0)return;let a=[],s=[],l=[];for(let _ of e)_.isEffectRowSpread?lt(_.type)?s.push(_):D(_.type)&&_.type.isEffectsRow&&l.push(_):a.push(_);if(l.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${l.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let u=[];for(let _ of t)_.isEffectRowSpread?lt(_.type)&&u.push(..._.type.implicitParameters):u.push(_);let c=new Set;for(let _ of a)for(let p=0;p<u.length;p++)if(!c.has(p)&&_.type.id===u[p].type.id){let{expectedEnv:f,givenEnv:d}=Ze({type:_.type,env:n.env},{type:u[p].type,env:r.env},i,o);n.env=f,r.env=d,c.add(p);break}for(let _ of s){let p=_.type.implicitParameters;for(let f of p)for(let d=0;d<u.length;d++)if(!c.has(d)&&f.type.id===u[d].type.id){let{expectedEnv:h,givenEnv:g}=Ze({type:f.type,env:n.env},{type:u[d].type,env:r.env},i,o);n.env=h,r.env=g,c.add(d);break}}if(l.length===1){let _=l[0],p=[];for(let f=0;f<u.length;f++)c.has(f)||p.push(u[f]);if(D(_.type)&&_.type.isEffectsRow){let f=zr(p),d=J(f),h=Y(n.env,_.type.name),g=h[h.length-1];if(g)n.env=qe(n.env,g,{...g,value:[d]});else{let{env:y}=fe({env:n.env,variable:{name:_.type.name,value:[d],type:d.type,isCompileTimeOnly:!0,token:o?.token??se,initializedAtToken:o?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=y}}}}function dl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Rn(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function lc(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=Rn(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function ml(e){let t=[];for(let n of e)n.isEffectRowSpread&<(n.type)?t.push(...ml(n.type.implicitParameters)):(n.isEffectRowSpread&&D(n.type)&&n.type.isEffectsRow,t.push(n));return t}function q(e,t,n=!1,r=new Set){let i=e.type.id,o=t.type.id;if(i&&o&&(pe(e.type)||ge(e.type)||ot(e.type))&&(pe(t.type)||ge(t.type)||ot(t.type))){let a=`${i}:${o}`;if(r.has(a))return!0;r.add(a)}if(Ao(e.type)&&Ao(t.type))return e.type.tag===t.type.tag;if((gt(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"||ir(e.type))&>(t.type))return!(n&&!gt(e.type));if((Mt(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Mt(t.type))return!(n&&!Mt(e.type));if((ht(e.type)||Ge(e.type)&&rr(e.type.childType)||Ee(e.type)&&(rr(e.type.childType)||Ui(e.type.childType))||An(e.type)&&e.type.typeName==="str")&&ht(t.type))return!0;if(ir(e.type)&&ir(t.type))return e.type.tag===t.type.tag;if(Dt(e.type)&&Dt(t.type))return!0;if(Tt(e.type)&&Tt(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(ke(e.type)&&ke(t.type))return Ot({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Ge(e.type)&&Ge(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Se(e.type)&&Se(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(!q({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(pe(e.type)&&pe(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!me(e.type)&&!me(t.type)&&!(e.type.functionValue&&t.type.functionValue&&e.type.functionValue.funcId===t.type.functionValue.funcId))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!q({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(ge(e.type)&&ge(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.id!==t.type.id&&!me(e.type)&&!me(t.type)&&!(e.type.functionValue&&t.type.functionValue&&e.type.functionValue.funcId===t.type.functionValue.funcId)||e.type.variants.length!==t.type.variants.length)return!1;for(let a=0;a<e.type.variants.length;a++){let s=e.type.variants[a],l=t.type.variants[a];if(s.name!==l.name||s.fields?.length!==l.fields?.length)return!1;if(s.fields)for(let u=0;u<s.fields.length;u++){let c=s.fields[u],_=l.fields[u];if(c.label!==_.label||!q({type:c.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(ot(e.type)&&ot(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!me(e.type)&&!me(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let a=0;a<e.type.fields.length;a++){let s=e.type.fields[a],l=t.type.fields[a];if(s.label!==l.label||!q({type:s.type,env:e.env},{type:l.type,env:t.env},n,r))return!1}return!0}if(Ce(e.type)&&Ce(t.type)){for(let a of e.type.fields){let s=t.type.fields.find(l=>l.label===a.label);if(!s||!q({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}return!0}if(Le(e.type)){if(Le(t.type)){if(At(e.type))return!(!At(t.type)||!uc({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n,r));if(on(e.type)){if(!on(t.type)||!q({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let a=ml(e.type.isFuture.effects),s=ml(t.type.isFuture.effects);if(a.length>0&&s.length>0){if(a.length!==s.length)return!1;let l=new Set;for(let u of a){let c=!1;for(let _=0;_<s.length;_++)if(!l.has(_)&&q({type:u.type,env:e.env},{type:s[_].type,env:t.env},n,r)){l.add(_),c=!0;break}if(!c)return!1}}return!0}return e.type.id===t.type.id}return Xe(t.type)&&t.type.baseType&&t.type.baseType.trait&&Le(e.type)?q({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(G(e.type)&&G(t.type))return uc({type:e.type,env:e.env},{type:t.type,env:t.env},n,r);if(Xe(e.type)&&Xe(t.type))return sc(e.type,t.type);if(Ee(e.type)&&Ee(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(xt(e.type)&&xt(t.type))return q({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(wt(e.type)&&wt(t.type))return q({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(Ae(e.type)&&Ae(t.type)){for(let{traitType:a}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:l})=>q({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:a}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:l})=>q({type:a,env:e.env},{type:l,env:t.env},n,r)))return!1}return!0}if(D(e.type)){if(Ae(t.type)){if(e.type.requiredTraits.length>0){for(let{traitType:a}of e.type.requiredTraits)if(!t.type.requiredTraits.some(({traitType:l})=>q({type:a,env:e.env},{type:l,env:t.env},!1,r)))return!1}return!0}if(D(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?q({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let a=dl(e.env,e.type),s=dl(t.env,t.type);if(n&&a.length!==s.length)return!1;for(let u of a)if(!s.find(_=>q({type:u,env:e.env},{type:_,env:t.env},n,r)))return!1;let l=lc(e.env,e.type);if(l.length>0){for(let u of l)if(s.find(_=>q({type:u,env:e.env},{type:_,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!q({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 q({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let a=dl(e.env,e.type);if(a.length===0)return!n;if(a.length>0){for(let c of a)if(!Rt({targetType:t.type,traitType:c,env:e.env}))break;let l=lc(e.env,e.type);if(l.length>0){for(let c of l)if(Rt({targetType:t.type,traitType:c,env:e.env}))return!1}let u=!0;for(let c of a)if(!Rt({targetType:t.type,traitType:c,env:e.env})){u=!1;break}if(u)return!0}let s=qt(e.env,e.type);return e.type===s?!1:q({type:s,env:e.env},t,n,r)}}else if(D(t.type)){if(t.type.resolvedConcreteType&&q(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let a=qt(t.env,t.type);return t.type===a?!1:q(e,{type:a,env:t.env},n,r)}if(Vr(e.type)&&Vr(t.type)){let a=e.type,s=t.type;return a.constructor.id!==s.constructor.id||a.args.length!==s.args.length?!1:a.args.every((l,u)=>q({type:l,env:e.env},{type:s.args[u],env:t.env},n,r))}return!1}function uc(e,t,n=!1,r=new Set){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:o,givenEnv:a}=Ze({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=o,t.env=a}catch{return!1}for(let o=0;o<e.type.forallParameters.length;o++){let a=e.type.forallParameters[o],s=t.type.forallParameters[o];if(!q({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}for(let o=0;o<e.type.parameters.length;o++){let a=e.type.parameters[o],s=t.type.parameters[o];if(a.isCompileTimeOnly!==s.isCompileTimeOnly||!q({type:a.type,env:e.env},{type:s.type,env:t.env},n,r))return!1}return q({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n,r)}function Oa(e){return E(e,["->","=>"])?!!(e.$?.isAnonymousFunctionDefinition===!0||F(e)&&F(e.func)&&(E(e.func,V.fn)||E(e.func,V.unsafe_fn)||E(e.func,V.Fn))||!e.$):!1}function Ra(e,t){if(!F(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(F(n)&&E(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function ur(e){if(B(e))return Et(e,V.escape);if(F(e)){if(e.$?.macroExpansion)return ur(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,ur);if(Oa(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(ur(e.func))return!0;for(let t of e.args)if(ur(t))return!0}return!1}function so(e){if(B(e))return Et(e,V.return)||Et(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return so(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,so);if(Oa(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(so(e.func))return!0;for(let t of e.args)if(so(t))return!0}return!1}function gn(e){if(F(e)){if(e.func.$?.type?.ioBuiltin==="io_await")return!0;if(e.$?.macroExpansion)return gn(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,gn);if(e.func.$?.type?.ioBuiltin==="io_async"||Oa(e)||R(e.func.$?.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(gn(e.func))return!0;for(let t of e.args)if(gn(t))return!0}return!1}function lo(e){if(B(e))return Et(e,V.break)||Et(e,V.return)||Et(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return lo(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return Ra(e,lo);if(Oa(e)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&G(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&R(e.func.$.value)&&Jt(e.func.$.value.value))return!1;if(lo(e.func))return!0;for(let t of e.args)if(lo(t))return!0}return!1}var H={tag:"Unit",type:Hn()};function jo(e){if(e&&e.tag==="FnCall"&&E(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=Y(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function Pa(e,t){let n=[],r=new Map,i=new Map,o=new Map;if(wr(e,n,r,i,o,t),e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)wr(a,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function wr(e,t,n,r,i,o,a){switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let s=e.token.value,l=e.$.type,u=Y(e.$.env,s);if(u.length>0){let c=u[u.length-1];if(c&&!n.has(c.id)&&!c.isCompileTimeOnly){let _=`${c.name}:${c.frameLevel}`,p=r.get(_);if(p&&p!==c.id)i.set(c.id,p);else if(c.isOwningTheSameRcValueAs){let f=c.isOwningTheSameRcValueAs;if(!n.has(f.id)){let d={id:f.id,name:f.name,type:f.type,isOwningTheSameRcValueAs:void 0};n.set(f.id,d);let h=`${f.name}:${f.frameLevel}`;r.has(h)||r.set(h,f.id)}}else n.set(c.id,{id:c.id,name:s,type:l,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,c.id)}}}break;case"FnCall":{if(E(e,V.while)){let s=t.length;wr(e.func,t,n,r,i,o,e);for(let u of e.args)wr(u,t,n,r,i,o,e);let l=t.length;if(l>s)for(let u=s;u<l;u++)t[u].isInsideWhile=!0,t[u].whileNestingDepth=(t[u].whileNestingDepth??0)+1,t[u].enclosingWhileExpr||(t[u].enclosingWhileExpr=e);break}if(E(e,V.cond)){cc(e,t,n,r,i,o);break}if(E(e,V.match)){cc(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)wr(s,t,n,r,i,o,e);break}wr(e.func,t,n,r,i,o,e);for(let s of e.args)wr(s,t,n,r,i,o,e);if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)wr(s,t,n,r,i,o,e);break}}}function cc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;wr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let _=t.length;wr(c,t,n,r,i,o,e),l.push(t.slice(_))}r.clear();for(let[c,_]of s)r.set(c,_);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let _=0;_<u;_++){let p;for(let f of l)if(_<f.length){p=f[_];break}p&&(p.index=t.length,p.isInsideCond=!0,_===0&&(p.needsOwnCondBranchField=!0),_>0&&(p.condBranchSourceIndex=c),t.push(p))}}}function _c(e){let n=Pa(e,{detect(i,o,a){if(i.tag==="FnCall"&&En(i)){let s=i.args[0];if(!s)return;let l=s.$?.type;if(l&&Ie(l)){let u=Bt(l);if(!u)return;let c=u.isFuture.outputType,_;if(s.tag==="Atom"&&s.token.type==="identifier"&&s.$){let f=s.token.value,d=Y(s.$.env,f);if(d.length>0){let h=d[d.length-1];h.isOwningTheSameRcValueAs?_=h.isOwningTheSameRcValueAs.id:_=h.id}}let p=jo(o);a.push({index:a.length,expr:i,resultType:c,futureType:u,targetVariableId:p,futureVariableId:_})}}},shouldSkipBody(i){return Yt(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 Yt(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_async"}function En(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_await"}function pc(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_state"}function Ua(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_spawn"}function fc(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="join_handle_await"}function Qe(e){return B(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Ko(e,t,n){if(!e.$?.variableName)return;let r=Y(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 ri(e){let t=e.$?.env;if(!t)return;let n;if(e.$?.pathCollection)for(let r of e.$.pathCollection)r.length>0&&typeof r[0]=="string"&&(n=r[0]);else B(e)&&(n=e.token.value);if(n){let r=Y(t,n),i=r[r.length-1];if(i?.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${i.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var za=!0;function dc({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=et(`${k.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:{env:i,type:H.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Xo(e,t,n){if(F(e)&&Yt(e))return;if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Xo(s,t,n);if(F(e)&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[0])&&B(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0]&&e.args.length===0&&e.$?.env){let s=e.func.args[0].token.value,l=Y(e.$.env,s);if(l.length>0){let u=l[l.length-1];t.has(u.id)||t.set(u.id,[]),t.get(u.id).push(e)}return}if(F(e)&&E(e,V.while))return;function i(s){if(at(s.$?.controlFlow))return!0;if(F(s)&&E(s,V.begin)){let l=s.args[s.args.length-1];if(at(l?.$?.controlFlow)||F(l)&&E(l,V.return))return!0}return!!(F(s)&&E(s,V.return))}function o(s){if(F(s)&&E(s,V.tuple,0))return!0;if(F(s)&&E(s,V.begin)){if(s.args.length===0)return!0;if(s.args.length===1){let l=s.args[0];if(F(l)&&E(l,V.tuple,0))return!0}}return!1}function a(s,l){let u=[],c=[],_=[];for(let f=l;f<s.args.length;f++){let d=s.args[f];if(F(d)&&E(d,"=>",2)){let h=d.args[1],g=mc(h);u.push(g),c.push(i(h)),_.push(o(h))}}let p=new Set;for(let f of u){for(let d of f.dupCalls.keys())p.add(d);for(let d of f.varsWithPartialBranchDups)n.add(d)}if(u.length>0)for(let f of p){let d=[],h=[];for(let g=0;g<u.length;g++){let y=u[g],v=y.dupCalls.has(f),T=c[g];if(v){let $=y.dupCalls.get(f);T?d.push(...$):h.push(...$)}}for(let g of d)t.has(f)||t.set(f,[]),g.__isEarlyReturnDup=!0,t.get(f).push(g);if(h.length>0){let g=0,y=0;for(let v=0;v<u.length;v++)c[v]||(g++,u[v].dupCalls.has(f)&&y++);if(y===g){t.has(f)||t.set(f,[]);for(let v of h)t.get(f).push(v)}else n.add(f)}}}if(F(e)&&E(e,V.cond)){a(e,0);return}if(F(e)&&E(e,V.match)){e.args[0]&&Xo(e.args[0],t,n),a(e,1);return}if(F(e)){Xo(e.func,t,n);for(let s of e.args)Xo(s,t,n)}}function mc(e){let t=new Map,n=new Set;return Xo(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function Ba(e){return F(e)&&E(e,V.tuple,0)}function yl(e,t){if(e.$?.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(n=>!t.has(n)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),F(e)){yl(e.func,t);for(let n of e.args)yl(n,t)}}function sg(e,t){let n=new Set,r=e.args;for(let i=0;i<r.length;i++){let o=r[i];if(!F(o)||!E(o,V.while))continue;let a=o.args[o.args.length-1];if(!(!a||!F(a)||!E(a,V.begin)))for(let s of a.args){if(!F(s)||!E(s,V.match))continue;let l=s.args[0];if(!l||!B(l))continue;let u=l.token.value,c,_,p;for(let $=1;$<s.args.length;$++){let C=s.args[$];if(!F(C)||!E(C,"=>",2))continue;let L=C.args[1];if(!(!F(L)||!E(L,V.begin))){for(let b of L.args)if(F(b)&&E(b,"=",2)){let S=b.args[0];if(B(S)&&S.token.value===u){c=b.args[1],_=b,p=L;break}}if(c)break}}if(!c||!_||!p||!c.$?.deferredDupExpressions||c.$.deferredDupExpressions.length===0)continue;let f;for(let $=0;$<i;$++){let C=r[$];if(F(C)&&E(C,"=",2)){let L=C.args[0];if(B(L)&&L.token.value===u){f=C.args[1];break}if(F(L)&&L.args.length>0&&B(L.args[0])&&L.args[0].token.value===u){f=C.args[1];break}}}if(!f)continue;let d=f.$?.variableName;if(!d||!f.$?.env)continue;let h=Y(f.$.env,d);if(h.length===0||h[h.length-1].isOwningTheRcValue||!f.$?.deferredDupExpressions||f.$.deferredDupExpressions.length===0)continue;let y=!1;for(let $=i+1;$<r.length;$++)if(gl(r[$],u)){y=!0;break}if(y)continue;f.$.deferredDupExpressions=void 0,c.$.deferredDupExpressions=void 0;let v=_.$?.variableName;v&&p.$?.deferredDropExpressions&&(p.$.deferredDropExpressions=p.$.deferredDropExpressions.filter($=>lg($)!==v),p.$.deferredDropExpressions.length===0&&(p.$.deferredDropExpressions=void 0)),_.$&&(_.$.variableName=void 0);let T=Y(t,u);if(T.length>0){let $=T[T.length-1];t=qe(t,$,{...$,consumedAtToken:$.token})}n.add(u)}}return{optimizedVarNames:n,env:t}}function lg(e){if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(F(e)&&E(e,k.___drop)&&e.args.length>=1&&B(e.args[0]))return e.args[0].token.value}function gl(e,t){if(B(e)&&e.token.value===t)return!0;if(F(e)){if(gl(e.func,t))return!0;for(let n of e.args)if(gl(n,t))return!0}return!1}function $t({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){if(F(e)&&E(e,"_")&&!E(e,V.begin)){let $=e;$.args.some(L=>F(L)&&E(L,":"))||($.func={...$.func,token:{...$.func.token,value:V.begin[0]}})}if(!F(e)||!E(e,V.begin)){let $={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:V.begin[0]}},args:[Ne(e)],token:{...e.token,value:V.begin[0]}};br(e,$),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:H.type,value:H,pathCollection:[]},e;t=xe(t,void 0,!0);for(let $=0;$<r.length;$++){let C=r[$],{env:L}=fe({env:t,variable:C});t=L}let s=o[o.length-1],l,u=!1;for(let $=0;$<o.length;$++){let C=o[$];if(B(C)&&Et(C,V.return)||F(C)&&E(C,V.return)){if($!==o.length-1&&!($===o.length-2&&Ba(o[o.length-1])))throw m({token:C.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(F(C)&&ve(C,V.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:C.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=C,B(C)){C.$={env:t,type:H.type,value:H,pathCollection:[],controlFlow:ni("return")},s=C;break}else{ve(C,V.return,1);let L=C.args[0],b=x({expr:L,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!b.$)throw m({token:L.token,errorMessage:`Return expression is not evaluated correctly:
|
|
156
156
|
${w(L)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&D(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let S=b.$.type;if(n.functionReturnImplConcreteType.length>0){let I=n.functionReturnImplConcreteType[0];if(!q({type:I.concreteType,env:I.env},{type:S,env:t}))throw pt([{token:C.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
|
|
157
157
|
Impl(...) uses static dispatch and requires the same concrete type across all returns.
|
|
158
158
|
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:I.token,errorMessage:`First return has concrete type: ${A(I.concreteType)}`},{token:C.token,errorMessage:`Conflicting return has concrete type: ${A(S)}`}])}else n.functionReturnImplConcreteType.push({concreteType:S,env:t,token:C.token})}He(b,!0),t=b.$.env,C.$={env:t,type:b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,variableName:b.$.variableName,controlFlow:ni("return")},s=C;break}}else if(B(C)&&Et(C,V.break)){if($!==o.length-1&&!($===o.length-2&&Ba(o[o.length-1])))throw m({token:C.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:C.token,errorMessage:'The "break" keyword can only be used inside a loop.'});C.$={env:t,type:H.type,value:H,pathCollection:[],controlFlow:ni("break")},s=C;break}else if(B(C)&&Et(C,V.continue)){if($!==o.length-1&&!($===o.length-2&&Ba(o[o.length-1])))throw m({token:C.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:C.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});C.$={env:t,type:H.type,value:H,pathCollection:[],controlFlow:ni("continue")},s=C;break}else if(F(C)&&E(C,V.escape)){if($!==o.length-1&&!($===o.length-2&&Ba(o[o.length-1])))throw m({token:C.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw m({token:C.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=C,ve(C,V.escape,1);let L=C.args[0],b=x({expr:L,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!b.$)throw m({token:L.token,errorMessage:`Escape expression is not evaluated correctly:
|
|
159
159
|
${w(L)}`});if(C.args[0]=b,!D(n.enclosingFunctionReturnType)&&!q({type:n.enclosingFunctionReturnType,env:t},{type:b.$.type,env:t}))throw m({token:L.token,errorMessage:`Incompatible type for \`escape\` argument:
|
|
160
160
|
- Expected (enclosing function return type): ${A(n.enclosingFunctionReturnType)}
|
|
161
161
|
- Got: ${A(b.$.type)}`});He(b,!0),t=b.$.env,C.$={env:t,type:b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,variableName:b.$.variableName,controlFlow:ni("escape")},s=C;break}else{let L=x({expr:C,env:t,context:{...n,expectedType:$===o.length-1?a:void 0}});if(L.$?.env&&(t=L.$?.env),$<o.length-1&&!u&&(L.$?.value===void 0||F(L)&&(E(L,"=")||E(L,":="))&&!L.$.isCompileTimeOnlyAssignment)&&(u=!0),at(L.$?.controlFlow)){s=L;break}}}if(!s.$)throw m({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
|
|
162
|
-
${w(s)}`});let c=s.$.type;if(it(s.$.controlFlow,"return")){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body")try{Ze({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!q({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${A(c)}".`})}else if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"&&n.expectedType)try{Ze({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!q({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.expectedType.type)}", but got "${A(c)}".`})}}if(l){let $=F(l)&&E(l,V.return,1)?l.args[0]:l;ri($)}else ri(s);let _,p=s;F(s)&&E(s,V.return,1)&&(p=s.args[0]);let f=p?p.$?.variableName:void 0;if(f){let $=Y(t,f);$.length&&(_=$[$.length-1])}let d;_?.isOwningTheRcValue&&_.frameLevel===t.frames.length-1&&!_.consumedAtToken?(Ve(_.type)&&!(D(_.type)&&!_.type.resolvedConcreteType&&_.type.requiredTraits.length===0)&&(d=_),t=qe(t,_,{..._,consumedAtToken:s.token})):_&&p&&(en(p,n),t=p.$.env);let h=uo(t),g=[];if(za){if(i&&t.frames.length>=2){let I={...t,frames:t.frames.slice(0,-1)},z=uo(I);h=[...h,...z]}if(F(e)){let I=
|
|
162
|
+
${w(s)}`});let c=s.$.type;if(it(s.$.controlFlow,"return")){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body")try{Ze({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!q({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${A(c)}".`})}else if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"&&n.expectedType)try{Ze({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!q({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${A(n.expectedType.type)}", but got "${A(c)}".`})}}if(l){let $=F(l)&&E(l,V.return,1)?l.args[0]:l;ri($)}else ri(s);let _,p=s;F(s)&&E(s,V.return,1)&&(p=s.args[0]);let f=p?p.$?.variableName:void 0;if(f){let $=Y(t,f);$.length&&(_=$[$.length-1])}let d;_?.isOwningTheRcValue&&_.frameLevel===t.frames.length-1&&!_.consumedAtToken?(Ve(_.type)&&!(D(_.type)&&!_.type.resolvedConcreteType&&_.type.requiredTraits.length===0)&&(d=_),t=qe(t,_,{..._,consumedAtToken:s.token})):_&&p&&(en(p,n),t=p.$.env);let h=uo(t),g=[];if(za){if(i&&t.frames.length>=2){let I={...t,frames:t.frames.slice(0,-1)},z=uo(I);h=[...h,...z]}if(F(e)){let I=sg(e,t);I.optimizedVarNames.size>0&&(t=I.env,h=h.filter(z=>!I.optimizedVarNames.has(z.name)))}let $=new Map,C=new Set,L=new Map,b=-1;if(F(e))for(let I=0;I<e.args.length;I++){let z=e.args[I];b<0&&so(z)&&(b=I);let M=mc(z);for(let[N,O]of M.dupCalls){$.has(N)||$.set(N,[]);let Q=$.get(N);for(let ne of O)Q.includes(ne)||(Q.push(ne),L.set(ne,I))}for(let N of M.varsWithPartialBranchDups)C.add(N)}let S=new Set;for(let I of h){let z=I;for(;z.isOwningTheSameRcValueAs;)z=z.isOwningTheSameRcValueAs;let M=z.id,N=$.get(M),O=!dt(z.type)&&Ve(z.type),Q=C.has(M),ne=!1;if(b>=0&&N&&N.length>0)for(let j of N){if(j.__isEarlyReturnDup)continue;let te=L.get(j);if(te!==void 0&&te>b){ne=!0;break}}if(N&&N.length>0&&!O&&!Q&&!ne){let j=0,K=[],te=[];for(let $e of N){let X=$e;X.__isEarlyReturnDup?K.push($e):X.__branchGroup?(j++,te.push(X.__branchGroup)):(j++,K.push($e))}if(j<=1){for(let $e of te)for(let X of $e)S.add(X);for(let $e of K)S.add($e);N.length=0,t=qe(t,I,{...I,consumedAtToken:s.token})}else g.push(I)}else g.push(I)}if(F(e))for(let I of e.args)yl(I,S)}let y,v;if((za?g:h).length>0){let $=dc({variablesToDrop:za?g:h,env:t,context:{...n,expectedType:void 0}});y=$.deferredDropExpressions,t=$.env}if(za&&d){let $=qe(t,d,{...d,consumedAtToken:void 0});try{v=dc({variablesToDrop:[d],env:$,context:{...n,expectedType:void 0}}).deferredDropExpressions}catch{}}l&&l.$&&(l.$.deferredDropExpressions=y);let T=t.frames[t.frames.length-1];return t=nt(t),e.$={env:t,type:s.$.type,value:u?void 0:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:y,consumedVariableDropExpressions:v,poppedEnvFrame:T,comptimeRef:s.$.comptimeRef},_&&p?.$?.deferredDupExpressions&&p.$.deferredDupExpressions.length>0?He(e,!0,_):_?.consumedAtToken?He(e,!0,_):He(e,!0),e}function Ga({beginExprs:e,env:t,context:n,allowPartialModule:r=!1,registerPartialModule:i}){let o=Da(t),a=[],s={tag:"Module",type:o,fields:[],isLoading:!0};i&&i(s);let l;t=xe(t);for(let u=0;u<e.length;u++){let c=e[u];try{if(F(c)&&E(c,V.export)){let _=c.args;for(let p=0;p<_.length;p++){let f=_[p];if(F(f)&&E(f,"...")){let d=f.args[0],h=f.args[1],g=x({expr:d,env:t,context:{...n}});if(!g.$)throw m({token:d.token,errorMessage:`Failed to evaluate the extended struct expression:
|
|
163
163
|
${w(d)}`});let y=g.$.type;if(!Ce(y))throw m({token:d.token,errorMessage:`Expected struct type for export, got:
|
|
164
164
|
${A(y)}`});let v=g.$.value,T=new Set;if(h)if(F(h)&&E(h,":",2)&&Et(h.args[0],"exclude")&&(h=h.args[1]),B(h)){let $=h.token.value,C=y.fields.find(L=>L.label===$);if(!C)throw m({token:h.token,errorMessage:`Label "${$}" is not found in the extended module type.`});T.add($),h.$={env:t,type:C.type,value:C.assignedValue,pathCollection:[]}}else if(F(h)&&E(h,V.tuple))for(let $ of h.args){if(!B($))throw m({token:$.token,errorMessage:`Expected identifier for excluded label, got:
|
|
165
165
|
${w($)}`});let C=$.token.value,L=y.fields.find(b=>b.label===C);if(!L)throw m({token:$.token,errorMessage:`Label "${C}" is not found in the extended module type.`});T.add(C),$.$={env:t,type:L.type,value:L.assignedValue,pathCollection:[]}}else throw m({token:h.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
|
|
@@ -169,34 +169,34 @@ ${w(T)}`});if(!Qe(T))throw m({token:T.token,errorMessage:`Expected identifier fo
|
|
|
169
169
|
${w(T)}`});if(d=T.token.value,!B($))throw m({token:$.token,errorMessage:`Expected identifier for export, got:
|
|
170
170
|
${w($)}`});if(!Qe($))throw m({token:$.token,errorMessage:`Expected identifier for export, got:
|
|
171
171
|
${w($)}`});h=$.token.value}let g=Y(t,h);if(g.length===0)throw m({token:f.token,errorMessage:`Variable "${h}" is not defined in the module.`});let y=g[g.length-1];if(o.fields.findIndex(T=>T.label===h)>=0)throw m({token:f.token,errorMessage:`Variable "${h}" is already exported in the module.`});if(!y.isCompileTimeOnly)throw m({token:f.token,errorMessage:`Variable "${h}" is not a compile-time variable and cannot be exported.`});o.fields.push({label:d,type:y.type,assignedValue:y.isCompileTimeOnly?y.value?.[0]:void 0,defaultValue:void 0,exprs:{expr:f,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),s.fields.push(y.value?.[0]),f.$={env:t,type:y.type,value:y.value?.[0],pathCollection:[]}}}}else{let _=x({expr:c,env:t,context:{...n,expectedType:void 0}});if(_.$?.env&&(t=_.$?.env),F(_)){if(E(_,":=",2)){let p=_.args[0];B(p)&&p.$?.type&&!p.$.value&&a.push(_)}else if(E(_,"=",2)){let p=_.args[0],f;if(B(p))f=p.token.value;else if(F(p)&&E(p,":",2)){let d=p.args[0];B(d)&&(f=d.token.value)}if(f){let d=Y(t,f);(d.length>0?d[d.length-1]:void 0)?.isModuleLevel&&a.push(_)}}}if(F(_)&&E(_,":",2)){let p=_.args[0];if(B(p)&&p.$?.env){let f=p.token.value,d=Y(t,f);if((d.length>0?d[d.length-1]:void 0)?.isModuleLevel)throw m({token:p.token,errorMessage:`Uninitialized runtime variable "${f}" at module scope.
|
|
172
|
-
Use \`${f} := value;\` or \`(${f} : ${_.args[1]?.token.value??"Type"}) = value;\` instead.`})}}}}catch(_){if(r){l=_;break}else throw _}}try{l||(t=nt(t))}catch(u){if(r)l=u;else throw u}return s.isLoading=!1,s.moduleLevelInitExprs=a.length>0?a:void 0,{moduleValue:s,moduleType:o,env:t,partialModuleError:l}}function Wa({functionType:e,specializedEnv:t,SelfType:n}){let r=t.frames[t.frames.length-1],i=new Set(r.variables.map(y=>y.name)),o=xe(e.env,r),a=o,s=e.parametersFrame.variables.filter(y=>e.forallParameters.some(v=>v.label===y.name)&&!i.has(y.name));if(s.length>0){a=xe(o);for(let y of s){let{env:v}=fe({env:a,variable:{...y},allowVariableShadowing:!0});a=v}}let l=e.parameters.map(y=>{if(!y.exprs.typeExpr)return y;let v=Ne(y.exprs.typeExpr),T=x({expr:v,env:a,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return R(T.$?.value)?{...y,type:T.$.value.value,exprs:{...y.exprs}}:y}),u=e.return.type,c=Ne(e.return.typeExpr),_=x({expr:c,env:a,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});R(_.$?.value)&&(u=_.$.value.value);let p=e.SelfType;n&&(p=n);let f=e.forallParameters.filter(y=>!i.has(y.label)),d={...e.parametersFrame,variables:e.parametersFrame.variables.map(y=>{let v=l.find($=>$.label===y.name),T=v?v.type:y.type;return T!==y.type?{...y,type:T}:y})},h=t,g=new Set;for(let y of t.frames)for(let v of y.variables)g.add(v.name);for(let y of e.env.frames)for(let v of y.variables)if(!g.has(v.name)){let{env:T}=fe({env:h,variable:{...v},allowVariableShadowing:!0});h=T,g.add(v.name)}return{...e,env:h,forallParameters:f,parameters:l,parametersFrame:d,return:{...e.return,type:u},SelfType:p}}var Qo=new Map;function
|
|
172
|
+
Use \`${f} := value;\` or \`(${f} : ${_.args[1]?.token.value??"Type"}) = value;\` instead.`})}}}}catch(_){if(r){l=_;break}else throw _}}try{l||(t=nt(t))}catch(u){if(r)l=u;else throw u}return s.isLoading=!1,s.moduleLevelInitExprs=a.length>0?a:void 0,{moduleValue:s,moduleType:o,env:t,partialModuleError:l}}function Wa({functionType:e,specializedEnv:t,SelfType:n}){let r=t.frames[t.frames.length-1],i=new Set(r.variables.map(y=>y.name)),o=xe(e.env,r),a=o,s=e.parametersFrame.variables.filter(y=>e.forallParameters.some(v=>v.label===y.name)&&!i.has(y.name));if(s.length>0){a=xe(o);for(let y of s){let{env:v}=fe({env:a,variable:{...y},allowVariableShadowing:!0});a=v}}let l=e.parameters.map(y=>{if(!y.exprs.typeExpr)return y;let v=Ne(y.exprs.typeExpr),T=x({expr:v,env:a,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return R(T.$?.value)?{...y,type:T.$.value.value,exprs:{...y.exprs}}:y}),u=e.return.type,c=Ne(e.return.typeExpr),_=x({expr:c,env:a,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});R(_.$?.value)&&(u=_.$.value.value);let p=e.SelfType;n&&(p=n);let f=e.forallParameters.filter(y=>!i.has(y.label)),d={...e.parametersFrame,variables:e.parametersFrame.variables.map(y=>{let v=l.find($=>$.label===y.name),T=v?v.type:y.type;return T!==y.type?{...y,type:T}:y})},h=t,g=new Set;for(let y of t.frames)for(let v of y.variables)g.add(v.name);for(let y of e.env.frames)for(let v of y.variables)if(!g.has(v.name)){let{env:T}=fe({env:h,variable:{...v},allowVariableShadowing:!0});h=T,g.add(v.name)}return{...e,env:h,forallParameters:f,parameters:l,parametersFrame:d,return:{...e.return,type:u},SelfType:p}}var Qo=new Map;function ug({traitExpr:e,traitType:t}){if(!e||!F(e))return{};let n=e.func;if(F(n)){let r=n.args.map(o=>Ne(o)),i;if(t.functionValue&&G(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))}if(i){for(let o of e.args)if(F(o)&&E(o,":",2)){let a=o.args[0],s=o.args[1];if(B(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!G(u.type)&&(r.push(Ne(s)),i.push(l))}}}return{traitTypeArgExprs:r,traitFunctionParamNames:i}}if(!t.functionValue){let r=[],i=[];for(let o of e.args)if(F(o)&&E(o,":",2)){let a=o.args[0],s=o.args[1];if(B(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!G(u.type)&&(r.push(Ne(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function yc({fieldExprs:e,env:t,context:n,receiverType:r}){let i=[],o=Pe(t),a=[],s=!1,l=r?.trait;r?.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=xe(t);for(let u of e){if(F(u)&&E(u,V.begin))throw m({token:u.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(F(u)&&(E(u,"::",2)||E(u,":=",2)))throw m({token:u.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(F(u)&&E(u,":",2)){let _=u.args[0],p=u.args[1];if(!B(_)||!Qe(_))throw m({token:_.token,errorMessage:`Expected identifier for impl field name, got:
|
|
173
173
|
${w(_)}`});let f=_.token.value,d=x({expr:p,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!d.$?.type)throw m({token:p.token,errorMessage:`Failed to evaluate impl field value for "${f}".`});t=d.$.env;let h=d.$.type,g=d.$.value;if(!g)throw m({token:p.token,errorMessage:`impl field "${f}" must be a compile-time value.`});ee(g)&&!g.funcName&&(g.funcName=f,g.funcId+=`_${f}`);let{env:y}=fe({env:t,variable:{name:f,type:h,isCompileTimeOnly:!0,value:[g],token:_.token,initializedAtToken:_.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=y,o.fields.push({label:f,type:h,assignedValue:g,defaultValue:void 0,exprs:{expr:u}}),a.push(g),s=!0,r?.trait&&r.trait.fields.push({label:f,type:h,assignedValue:g,defaultValue:void 0,exprs:{expr:u}});continue}let c=x({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!c.$||!mt(c.$.value))throw m({token:u.token,errorMessage:`Expected trait value in impl field list, got:
|
|
174
|
-
${w(u)}`});t=c.$.env,i.push({traitValue:c.$.value,sourceExpr:u,isAnonymousTrait:!1})}if(t=nt(t),r&&(r.trait=l),s){let u=zi({...o,receiverType:r},a);i.unshift({traitValue:u,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var cr=new Map,Zo=0,qa=new Map,Ii=new Map;function Jo(e){for(let[t,n]of cr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?cr.delete(t):cr.set(t,r)}Zo++,qa.clear()}function
|
|
175
|
-
Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${u.label}") for the comptime variant.`})}}}}let n=cr.get(e);n||(n=[],cr.set(e,n)),n.push(t),Zo++}function
|
|
176
|
-
First implementation was in: ${a.modulePath||"unknown"}`})}function
|
|
174
|
+
${w(u)}`});t=c.$.env,i.push({traitValue:c.$.value,sourceExpr:u,isAnonymousTrait:!1})}if(t=nt(t),r&&(r.trait=l),s){let u=zi({...o,receiverType:r},a);i.unshift({traitValue:u,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var cr=new Map,Zo=0,qa=new Map,Ii=new Map;function Jo(e){for(let[t,n]of cr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?cr.delete(t):cr.set(t,r)}Zo++,qa.clear()}function cg(e){for(let[t,n]of Ii.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?Ii.delete(t):Ii.set(t,r)}}function hl(){Qo.clear(),cr.clear(),Ii.clear(),qa.clear(),Zo=0}function Ya(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function gc(e){if("functionValue"in e){let t=e.functionValue;if(t)return t.funcId}return e.id}function hc(e,t){if(!t.traitType.typeName){let r=t.traitType.fields.filter(i=>i.label&&G(i.type)).map(i=>i.label);if(r.length>0){let i=gc(t.receiverTypePattern);if(i){for(let[o,a]of cr.entries())for(let s of a)if(!(s.traitType.typeName||gc(s.receiverTypePattern)!==i)){for(let u of s.traitType.fields)if(u.label&&G(u.type)&&r.includes(u.label))throw m({token:t.expr.token,errorMessage:`Method "${u.label}" is already defined for type "${A(t.receiverTypePattern)}".
|
|
175
|
+
Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${u.label}") for the comptime variant.`})}}}}let n=cr.get(e);n||(n=[],cr.set(e,n)),n.push(t),Zo++}function _g({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(Ii.get(i)||[]).find(s=>s.traitTypeId===t.id);if(a)throw m({token:r.token,errorMessage:`Trait "${t.typeName??t.id}" is already implemented for type "${A(e)}".
|
|
176
|
+
First implementation was in: ${a.modulePath||"unknown"}`})}function pg({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=Ii.get(i);o||(o=[],Ii.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function fg({receiverType:e,traitType:t,currentModulePath:n,expr:r}){if(!n)return;let i=t.definedInModulePath===n,o=e.definedInModulePath===n;if(!(n.includes("prelude.yo")||n.includes("std/"))&&!i&&!o)throw m({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign trait "${t.typeName??t.id}" for foreign type "${A(e)}".
|
|
177
177
|
At least one of the trait or the type must be defined in this module.
|
|
178
178
|
Trait defined in: ${t.definedInModulePath||"unknown"}
|
|
179
179
|
Type defined in: ${e.definedInModulePath||"unknown"}
|
|
180
|
-
Current module: ${n}`})}function Ha({concreteType:e,traitType:t,env:n}){let r=Ya(t),i=cr.get(r);if(!(!i||i.length===0)){for(let o of i)if(Ka({concreteType:e,impl:o,env:n}).matched)return o}}function jn({concreteType:e,methodName:t,env:n}){if(D(e)){let l=qt(n,e);D(l)||(e=l)}if(!D(e)){let l=A(e)+"\0"+t,u=qa.get(l);if(u&&u.version===Zo)return u.result}let r=[],i=[];for(let[l,u]of cr.entries())for(let c of u){let _=Ka({concreteType:e,impl:c,env:n});if(!_.matched)continue;let p=c.traitType,f=c.traitValue,d=!p.typeName,h=p.fields.findIndex(g=>g.label===t&&G(g.type));if(h>=0){let g=p.fields[h];if(G(g.type)){let y=f.fields[h],v=Dr(e);if(ee(y)&&(_.valueSubstitutions.size>0||_.substitutions.size>0)&&!v){let $=c.definitionEnv,C=xe($);for(let[z,M]of _.substitutions){let{env:N}=fe({env:C,variable:{name:z,type:tt(),isCompileTimeOnly:!0,value:[J(M)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=N}for(let[z,M]of _.valueSubstitutions){let{env:N}=fe({env:C,variable:{name:z,type:M.type,isCompileTimeOnly:!0,value:[M],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=N}if(c.traitTypeArgExprs&&c.traitFunctionParamNames&&c.traitTypeArgExprs.length===c.traitFunctionParamNames.length)for(let z=0;z<c.traitTypeArgExprs.length;z++){let M=c.traitTypeArgExprs[z],N=c.traitFunctionParamNames[z],O=x({expr:Ne(M),env:C,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(O.$&&R(O.$.value)){let{env:Q}=fe({env:C,variable:{name:N,type:tt(),isCompileTimeOnly:!0,value:[O.$.value],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=Q}}let L=Wa({functionType:g.type,specializedEnv:C,SelfType:_.substitutions.get("Self")});C=xe(C,L.parametersFrame);let b=Ne(y.body),S=$t({expr:b,env:C,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:L.return.type,env:C},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:L,value:y,evaluationEnv:C},functionReturnImplConcreteType:[],SelfType:_.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),I={...y,specializedType:L,body:S,funcId:`${y.funcId}_specialized_${[..._.substitutions.entries()].map(([z,M])=>`${z}_${A(M)}`).join("_")}_${[..._.valueSubstitutions.entries()].map(([z,M])=>`${z}_${De(M)}`).join("_")}`,funcName:y.funcName?`${y.funcName}_specialized`:void 0};r.push({type:L,value:I}),i.push(d)}else if(v){let $=c.definitionEnv,C=xe($);for(let[b,S]of _.substitutions){let{env:I}=fe({env:C,variable:{name:b,type:tt(),isCompileTimeOnly:!0,value:[J(S)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}for(let[b,S]of _.valueSubstitutions){let{env:I}=fe({env:C,variable:{name:b,type:S.type,isCompileTimeOnly:!0,value:[S],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}let L=Wa({functionType:g.type,specializedEnv:C,SelfType:_.substitutions.get("Self")});r.push({type:L,value:void 0}),i.push(d)}else if(ee(y)){let $={...y,specializedType:g.type};r.push({type:g.type,value:$}),i.push(d)}else if(!ee(y)&&(_.substitutions.size>0||_.valueSubstitutions.size>0)){let $=c.definitionEnv,C=xe($);for(let[b,S]of _.substitutions){let{env:I}=fe({env:C,variable:{name:b,type:tt(),isCompileTimeOnly:!0,value:[J(S)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}for(let[b,S]of _.valueSubstitutions){let{env:I}=fe({env:C,variable:{name:b,type:S.type,isCompileTimeOnly:!0,value:[S],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}let L=Wa({functionType:g.type,specializedEnv:C,SelfType:_.substitutions.get("Self")});r.push({type:L,value:y}),i.push(d)}else r.push({type:g.type,value:y}),i.push(d)}}}let o=i.some(l=>l),a=i.some(l=>!l),s=r;if(o&&a&&(s=r.filter((l,u)=>i[u])),!D(e)){let l=A(e)+"\0"+t;qa.set(l,{result:s,version:Zo})}return s}function ja({concreteType:e,propertyName:t,env:n}){if(D(e)){let r=qt(n,e);D(r)||(e=r)}for(let[r,i]of cr.entries())for(let o of i){let a;try{a=Ka({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(_=>_.label===t&&!G(_.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let _=o.definitionEnv,p=xe(_);for(let[f,d]of a.substitutions){let{env:h}=fe({env:p,variable:{name:f,type:tt(),isCompileTimeOnly:!0,value:[J(d)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});p=h}for(let f=0;f<o.traitTypeArgExprs.length;f++){let d=o.traitTypeArgExprs[f];if(o.traitFunctionParamNames[f]===t)try{let g=Ne(d),y=x({expr:g,env:p,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(y.$&&R(y.$.value))return{type:y.$.value.type,value:y.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!R(c))){if(!D(c.value))return{type:c.type,value:c};for(let _ of o.forallParameters)if(_.kind==="type"&&_.someType===c.value){let p=a.substitutions.get(_.name);if(p){let f=J(p);return{type:f.type,value:f}}}}}}function
|
|
180
|
+
Current module: ${n}`})}function Ha({concreteType:e,traitType:t,env:n}){let r=Ya(t),i=cr.get(r);if(!(!i||i.length===0)){for(let o of i)if(Ka({concreteType:e,impl:o,env:n}).matched)return o}}function jn({concreteType:e,methodName:t,env:n}){if(D(e)){let l=qt(n,e);D(l)||(e=l)}if(!D(e)){let l=A(e)+"\0"+t,u=qa.get(l);if(u&&u.version===Zo)return u.result}let r=[],i=[];for(let[l,u]of cr.entries())for(let c of u){let _=Ka({concreteType:e,impl:c,env:n});if(!_.matched)continue;let p=c.traitType,f=c.traitValue,d=!p.typeName,h=p.fields.findIndex(g=>g.label===t&&G(g.type));if(h>=0){let g=p.fields[h];if(G(g.type)){let y=f.fields[h],v=Dr(e);if(ee(y)&&(_.valueSubstitutions.size>0||_.substitutions.size>0)&&!v){let $=c.definitionEnv,C=xe($);for(let[z,M]of _.substitutions){let{env:N}=fe({env:C,variable:{name:z,type:tt(),isCompileTimeOnly:!0,value:[J(M)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=N}for(let[z,M]of _.valueSubstitutions){let{env:N}=fe({env:C,variable:{name:z,type:M.type,isCompileTimeOnly:!0,value:[M],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=N}if(c.traitTypeArgExprs&&c.traitFunctionParamNames&&c.traitTypeArgExprs.length===c.traitFunctionParamNames.length)for(let z=0;z<c.traitTypeArgExprs.length;z++){let M=c.traitTypeArgExprs[z],N=c.traitFunctionParamNames[z],O=x({expr:Ne(M),env:C,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(O.$&&R(O.$.value)){let{env:Q}=fe({env:C,variable:{name:N,type:tt(),isCompileTimeOnly:!0,value:[O.$.value],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=Q}}let L=Wa({functionType:g.type,specializedEnv:C,SelfType:_.substitutions.get("Self")});C=xe(C,L.parametersFrame);let b=Ne(y.body),S=$t({expr:b,env:C,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:L.return.type,env:C},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:L,value:y,evaluationEnv:C},functionReturnImplConcreteType:[],SelfType:_.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),I={...y,specializedType:L,body:S,funcId:`${y.funcId}_specialized_${[..._.substitutions.entries()].map(([z,M])=>`${z}_${A(M)}`).join("_")}_${[..._.valueSubstitutions.entries()].map(([z,M])=>`${z}_${De(M)}`).join("_")}`,funcName:y.funcName?`${y.funcName}_specialized`:void 0};r.push({type:L,value:I}),i.push(d)}else if(v){let $=c.definitionEnv,C=xe($);for(let[b,S]of _.substitutions){let{env:I}=fe({env:C,variable:{name:b,type:tt(),isCompileTimeOnly:!0,value:[J(S)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}for(let[b,S]of _.valueSubstitutions){let{env:I}=fe({env:C,variable:{name:b,type:S.type,isCompileTimeOnly:!0,value:[S],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}let L=Wa({functionType:g.type,specializedEnv:C,SelfType:_.substitutions.get("Self")});r.push({type:L,value:void 0}),i.push(d)}else if(ee(y)){let $={...y,specializedType:g.type};r.push({type:g.type,value:$}),i.push(d)}else if(!ee(y)&&(_.substitutions.size>0||_.valueSubstitutions.size>0)){let $=c.definitionEnv,C=xe($);for(let[b,S]of _.substitutions){let{env:I}=fe({env:C,variable:{name:b,type:tt(),isCompileTimeOnly:!0,value:[J(S)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}for(let[b,S]of _.valueSubstitutions){let{env:I}=fe({env:C,variable:{name:b,type:S.type,isCompileTimeOnly:!0,value:[S],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=I}let L=Wa({functionType:g.type,specializedEnv:C,SelfType:_.substitutions.get("Self")});r.push({type:L,value:y}),i.push(d)}else r.push({type:g.type,value:y}),i.push(d)}}}let o=i.some(l=>l),a=i.some(l=>!l),s=r;if(o&&a&&(s=r.filter((l,u)=>i[u])),!D(e)){let l=A(e)+"\0"+t;qa.set(l,{result:s,version:Zo})}return s}function ja({concreteType:e,propertyName:t,env:n}){if(D(e)){let r=qt(n,e);D(r)||(e=r)}for(let[r,i]of cr.entries())for(let o of i){let a;try{a=Ka({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(_=>_.label===t&&!G(_.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let _=o.definitionEnv,p=xe(_);for(let[f,d]of a.substitutions){let{env:h}=fe({env:p,variable:{name:f,type:tt(),isCompileTimeOnly:!0,value:[J(d)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});p=h}for(let f=0;f<o.traitTypeArgExprs.length;f++){let d=o.traitTypeArgExprs[f];if(o.traitFunctionParamNames[f]===t)try{let g=Ne(d),y=x({expr:g,env:p,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(y.$&&R(y.$.value))return{type:y.$.value.type,value:y.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!R(c))){if(!D(c.value))return{type:c.type,value:c};for(let _ of o.forallParameters)if(_.kind==="type"&&_.someType===c.value){let p=a.substitutions.get(_.name);if(p){let f=J(p);return{type:f.type,value:f}}}}}}function Tc({concreteType:e,traitType:t,methodName:n,env:r}){let i=Ya(t),o=cr.get(i);if(!(!o||o.length===0))for(let a of o){let s=Ka({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(_=>_.label===n&&G(_.type));if(c>=0){let _=l.fields[c];if(G(_.type)){let p=u.fields[c];if(ee(p)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let f=a.definitionEnv,d=xe(f);for(let[T,$]of s.substitutions){let{env:C}=fe({env:d,variable:{name:T,type:tt(),isCompileTimeOnly:!0,value:[J($)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=C}for(let[T,$]of s.valueSubstitutions){let{env:C}=fe({env:d,variable:{name:T,type:$.type,isCompileTimeOnly:!0,value:[$],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=C}let h=Wa({functionType:_.type,specializedEnv:d,SelfType:s.substitutions.get("Self")});d=xe(d,h.parametersFrame);let g=Ne(p.body),y=$t({expr:g,env:d,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:h.return.type,env:d},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:h,value:p,evaluationEnv:d},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...p,specializedType:h,body:y,funcId:`${p.funcId}_specialized_${[...s.substitutions.entries()].map(([T,$])=>`${T}_${A($)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([T,$])=>`${T}_${De($)}`).join("_")}`,funcName:p.funcName?`${p.funcName}_specialized`:void 0};return{type:h,value:v}}else if(ee(p)){let f={...p,specializedType:_.type};return{type:_.type,value:f}}else return{type:_.type,value:p}}}}}function Ka({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(D(e)){let o=qt(n,e);if(D(o))return r;e=o}let i=xe(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=fe({env:i,variable:{name:o.name,type:tt(),isCompileTimeOnly:!0,value:[J(o.someType)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=fe({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=Ze({type:t.receiverTypePattern,env:i},{type:e,env:n});for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let _=vc(o,l);if(!_)return r;let p=u;if(c)try{let f=Ne(c),d=x({expr:f,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});d.$&&R(d.$.value)&&Le(d.$.value.value)&&(p=d.$.value.value)}catch{}if(p.isNegatedConstraint){if(D(_)){if(!mg(_,p,n))return r;continue}if(Rt({targetType:_,traitType:p,env:n}))return r;continue}if(D(_)){if(!dg(_,p,n))return r;continue}if(!Rt({targetType:_,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=vc(o,l.someType);u&&!D(u)&&a.set(l.name,u)}else{let u=Y(o,l.name),c=u[u.length-1];if(c&&c.value&&!ue(c.value[0])){let _={...c.value[0],type:l.type};s.set(l.name,_)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function dg(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=Rn(n,e);if(i){for(let o of i.requiredTraits)if(o.id===t.id)return!0}for(let o of e.trait.fields)if(mt(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function mg(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=Rn(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function yg({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(Rt({targetType:e,traitType:o,env:r}))continue;let a=new Set;for(let s of n)s.traitType.typeName===o.typeName&&!s.traitType.isNegatedConstraint&&a.add(s.someType.name);throw m({token:i,errorMessage:`Generic impl receiver type "${A(e)}" does not satisfy constraint "${o.typeName??A(o)}" required by trait "${t.typeName??A(t)}".
|
|
181
181
|
Consider adding "where(T <: ${o.typeName??A(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(Rt({targetType:e,traitType:o,env:r}))throw m({token:i,errorMessage:`Generic impl receiver type "${A(e)}" implements "${o.typeName??A(o)}" but trait "${t.typeName??A(t)}" requires it to NOT implement this trait.
|
|
182
|
-
Consider adding "where(T <: !(${o.typeName??A(o)}))" to the impl.`})}}function
|
|
183
|
-
Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${o.label}") for the comptime variant.`});let s={label:o.label,type:o.type,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(s)}}function
|
|
184
|
-
${w(e)}`});if(e.args.length===1&&F(e.args[0])&&E(e.args[0],V.begin)){let $=e.args[0].args,{moduleType:C,moduleValue:L,env:b}=Ga({beginExprs:$,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType,isInsideImplBlock:!0}});return t=b,e.$={env:t,type:C,value:L,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&F(r[i])&&E(r[i],V.forall)&&(o=r[i],i++),r[i]&&F(r[i])&&E(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]&&F(r[i])&&E(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 $=x({expr:s,env:t,context:{...n}});if(!$.$||!$.$.value||!R($.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type argument."});t=$.$.env;let C=$.$.value.value,L=Ge(C)||ke(C),{env:b,traitEntries:S}=mc({fieldExprs:l,env:t,context:{...n},receiverType:C});if(t=b,S.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let z of S){let M=z.traitValue,N=M.type;if(z.isAnonymousTrait||Ec({targetType:C,traitType:N,env:t,errorToken:e.token}),L){let O=Ya(N),Q={forallParameters:[],whereConstraints:[],receiverTypePattern:C,traitType:N,traitValue:M,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};gc(O,Q)}else gg(M,e,n.currentModulePath)}let I=S[0].traitValue;return e.$={env:t,type:I.type,value:I,pathCollection:[]},e}let c=o.args,_=[];t=xe(t);for(let $ of c){let C,L;if(F($)&&E($,":",2)){let N=$.args[0];if(!B(N))throw m({token:N.token,errorMessage:`Expected identifier for forall parameter name, got: ${w(N)}`});C=N.token.value,L=$.args[1]}else if(B($))C=$.token.value;else throw m({token:$.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${w($)}`});let b;if(L){let N=x({expr:L,env:t,context:{...n}});if(N.$?.env&&(t=N.$.env),!N.$||!N.$.value||!R(N.$.value))throw m({token:L.token,errorMessage:`Expected type for forall parameter type, got: ${w(L)}`});b=N.$.value.value}let S=!b||vu(b),I=b||tt(),z=W(I,{variableName:C,env:t,context:n}),{env:M}=fe({env:t,variable:{name:C,type:I,isCompileTimeOnly:!0,value:[z],token:$.token,initializedAtToken:$.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=M,S){let N=z.value;_.push({kind:"type",name:C,someType:N})}else _.push({kind:"value",name:C,type:I,unknownValue:z})}let p=new Map;if(a)for(let $ of a.args){if(!F($)||!E($,"<:",2))throw m({token:$.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${w($)}`});let C=x({expr:$,env:t,context:{...n,isInsideWhereClause:!0}});C.$?.env&&(t=C.$.env);let L=$.args[0],b=$.args[1],S=x({expr:L,env:t,context:{...n}});if(!S.$||!S.$.value||!R(S.$.value)||!D(S.$.value.value))throw m({token:L.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${w(L)}`});t=S.$.env;let I=[];if(F(b)&&E(b,V.tuple))for(let z of b.args)F(z)&&E(z,"!")&&z.args.length===1?I.push({expr:z.args[0],isNegated:!0}):I.push({expr:z,isNegated:!1});else F(b)&&E(b,"!")&&b.args.length===1?I.push({expr:b.args[0],isNegated:!0}):I.push({expr:b,isNegated:!1});for(let{expr:z}of I){let M=x({expr:z,env:t,context:{...n}});if(!M.$||!M.$.value||!R(M.$.value)||!Le(M.$.value.value))throw m({token:z.token,errorMessage:"Expected trait type for right-hand side expression."});t=M.$.env;let N=M.$.value.value;p.set(N.id,Ne(z))}}let f=[];for(let $ of _){if($.kind!=="type")continue;let{someType:C}=$,L=Rn(t,C);if(L){for(let b of L.requiredTraits)f.push({someType:C,traitType:b,traitExpr:p.get(b.id)});for(let b of L.negativeTraits){let S={...b,isNegatedConstraint:!0};f.push({someType:C,traitType:S,traitExpr:p.get(b.id)})}}}let d=x({expr:s,env:t,context:{...n}});if(!d.$||!d.$.value||!R(d.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=d.$.env;let h=d.$.value.value,{env:g,traitEntries:y}=mc({fieldExprs:l,env:t,context:{...n},receiverType:h});if(t=g,y.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let $ of y){let C=$.traitValue,L=C.type;mg({receiverTypePattern:h,traitType:L,whereConstraints:f,env:t,errorToken:e.token});let{traitTypeArgExprs:b,traitFunctionParamNames:S}=$.isAnonymousTrait?{}:lg({traitExpr:$.sourceExpr,traitType:L});v.push({traitType:L,traitValue:C,traitTypeArgExprs:b,traitFunctionParamNames:S})}t=nt(t);for(let $ of v){let C=Ya($.traitType),L={forallParameters:_,whereConstraints:f,receiverTypePattern:h,traitType:$.traitType,traitValue:$.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:$.traitTypeArgExprs,traitFunctionParamNames:$.traitFunctionParamNames};gc(C,L)}let T=v[0].traitValue;return e.$={env:t,type:T.type,value:T,pathCollection:[]},e}var hl=new Set;function vl(e){if(!e||pe(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(Xe(e))return!0}function Cc(e){if(!e)return!1;if(pe(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 $c(e,t,n){if(!t.associatedTypeConstraints||t.associatedTypeConstraints.length===0)return!0;for(let r of t.associatedTypeConstraints){let i;if(e.trait)for(let o of e.trait.fields){if(o.label===r.label&&o.assignedValue&&R(o.assignedValue)){i=o.assignedValue.value;break}if(o.assignedValue&&mt(o.assignedValue)){let a=o.assignedValue;if(a.type.id===t.id){for(let s=0;s<a.type.fields.length;s++)if(a.type.fields[s].label===r.label){let u=a.fields[s];u&&R(u)&&(i=u.value);break}}if(i)break}}if(!i){let o=ja({concreteType:e,propertyName:r.label,env:n});o&&R(o.value)&&(i=o.value.value)}if(!i||!q({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function Rt({targetType:e,traitType:t,env:n}){let r=Gn(n,"Comptime");if(r&&t.id===r.id){let l=vl(e);if(l!==void 0)return l}let i=Gn(n,"Runtime");if(i&&t.id===i.id){let l=Cc(e);if(l!==void 0)return l}let o={...t,receiverType:e},a=e.trait;if(a)for(let l of a.fields){if(!l.assignedValue||!mt(l.assignedValue))continue;let c=l.assignedValue.type;if(q({type:o,env:n},{type:c,env:n})&&$c(e,t,n))return!0}if(Ae(e)){for(let{traitType:l}of e.requiredTraits){if(l.id===t.id)return!0;if(l.selfConstraints){for(let u of l.selfConstraints)if(u.id===t.id)return!0}}for(let{traitType:l}of e.negativeTraits)if(l.id===t.id)return!1}if(D(e)){let l=!1,u=!1;for(let _ of e.requiredTraits)_.traitType.id===t.id&&(l=!0);let c=Rn(n,e);if(c){for(let _ of c.requiredTraits)_.id===t.id&&(l=!0);for(let _ of c.negativeTraits)_.id===t.id&&(u=!0)}if(e.negativeTraits)for(let _ of e.negativeTraits)_.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(D(e)){let l=qt(n,e);if(D(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(hl.has(s))return!1;hl.add(s);try{return Ha({concreteType:e,traitType:t,env:n})===void 0?!1:$c(e,t,n)}finally{hl.delete(s)}}function Ec({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!Rt({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" does not implement required constraint "${i.typeName??A(i)}" from trait "${t.typeName??A(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(Rt({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" implements "${i.typeName??A(i)}" but the trait "${t.typeName??A(t)}"'s where clause requires it to NOT implement this trait.`})}}function lr(e,t){let n=vl(e);if(n!==void 0)return n;let r=Gn(t,"Comptime");return r?Rt({targetType:e,traitType:r,env:t}):!1}function Ai(e,t){let n=vl(e);if(n!==!0&&n!==!1){if(D(e)){let r=Gn(t,"Comptime");if(!r)return e;for(let o of e.requiredTraits)if(o.traitType.id===r.id)return;let i=Rn(t,e);if(i){for(let o of i.requiredTraits)if(o.id===r.id)return}return e}if(Ee(e))return Ai(e.childType,t)}}function Rr(e,t){let n=Cc(e);if(n!==void 0)return n;let r=Gn(t,"Runtime");return r?Rt({targetType:e,traitType:r,env:t}):!1}function qo(e,t){if(!e)return!1;let n=Gn(t,"Send");return n?Rt({targetType:e,traitType:n,env:t}):!1}function vi(e,t){if(!e)return!1;let n=Gn(t,"Acyclic");return n?Rt({targetType:e,traitType:n,env:t}):!1}function ki(e,t){return lr(e,t)&&!Rr(e,t)}function Jt(e){if(!e)return!1;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(At(t))return!0}return!1}function cn(e){if(At(e))return e;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(At(t))return t}}function Ie(e){if(!e)return!1;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(rn(t))return!0}return!1}function Bt(e){if(rn(e))return e;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(rn(t))return t}}function Na(e,t,n,r){if(!me(e)&&!lr(e,t)&&!Rr(e,t))throw m({token:n,errorMessage:`Type ${A(e)} has incompatible field contexts and cannot be used in any evaluation context.
|
|
182
|
+
Consider adding "where(T <: !(${o.typeName??A(o)}))" to the impl.`})}}function vc(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let i of r.variables)if(i.name===t.name&&i.value&&R(i.value[0]))return i.value[0].value}return t}function ea(e){let t=Qo.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Qo.delete(e),cg(e)}}function gg(e,t){let n=Qo.get(e);n||(n=new Set,Qo.set(e,n)),n.add(t)}function hg(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(fg({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),_g({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),pg({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&gg(n,r.trait),e.type.typeName){let i={label:"",type:wn(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];if(o.label&&G(o.type)&&r.trait.fields.find(u=>u.label===o.label&&G(u.type)))throw m({token:t.token,errorMessage:`Method "${o.label}" is already defined for type "${A(r)}".
|
|
183
|
+
Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${o.label}") for the comptime variant.`});let s={label:o.label,type:o.type,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(s)}}function Ec({expr:e,env:t,context:n}){if(!E(e,V.impl))throw m({token:e.token,errorMessage:`Expected "impl", got:
|
|
184
|
+
${w(e)}`});if(e.args.length===1&&F(e.args[0])&&E(e.args[0],V.begin)){let $=e.args[0].args,{moduleType:C,moduleValue:L,env:b}=Ga({beginExprs:$,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType,isInsideImplBlock:!0}});return t=b,e.$={env:t,type:C,value:L,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&F(r[i])&&E(r[i],V.forall)&&(o=r[i],i++),r[i]&&F(r[i])&&E(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]&&F(r[i])&&E(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 $=x({expr:s,env:t,context:{...n}});if(!$.$||!$.$.value||!R($.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type argument."});t=$.$.env;let C=$.$.value.value,L=Ge(C)||ke(C),{env:b,traitEntries:S}=yc({fieldExprs:l,env:t,context:{...n},receiverType:C});if(t=b,S.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let z of S){let M=z.traitValue,N=M.type;if(z.isAnonymousTrait||$c({targetType:C,traitType:N,env:t,errorToken:e.token}),L){let O=Ya(N),Q={forallParameters:[],whereConstraints:[],receiverTypePattern:C,traitType:N,traitValue:M,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};hc(O,Q)}else hg(M,e,n.currentModulePath)}let I=S[0].traitValue;return e.$={env:t,type:I.type,value:I,pathCollection:[]},e}let c=o.args,_=[];t=xe(t);for(let $ of c){let C,L;if(F($)&&E($,":",2)){let N=$.args[0];if(!B(N))throw m({token:N.token,errorMessage:`Expected identifier for forall parameter name, got: ${w(N)}`});C=N.token.value,L=$.args[1]}else if(B($))C=$.token.value;else throw m({token:$.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${w($)}`});let b;if(L){let N=x({expr:L,env:t,context:{...n}});if(N.$?.env&&(t=N.$.env),!N.$||!N.$.value||!R(N.$.value))throw m({token:L.token,errorMessage:`Expected type for forall parameter type, got: ${w(L)}`});b=N.$.value.value}let S=!b||Tu(b),I=b||tt(),z=W(I,{variableName:C,env:t,context:n}),{env:M}=fe({env:t,variable:{name:C,type:I,isCompileTimeOnly:!0,value:[z],token:$.token,initializedAtToken:$.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=M,S){let N=z.value;_.push({kind:"type",name:C,someType:N})}else _.push({kind:"value",name:C,type:I,unknownValue:z})}let p=new Map;if(a)for(let $ of a.args){if(!F($)||!E($,"<:",2))throw m({token:$.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${w($)}`});let C=x({expr:$,env:t,context:{...n,isInsideWhereClause:!0}});C.$?.env&&(t=C.$.env);let L=$.args[0],b=$.args[1],S=x({expr:L,env:t,context:{...n}});if(!S.$||!S.$.value||!R(S.$.value)||!D(S.$.value.value))throw m({token:L.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${w(L)}`});t=S.$.env;let I=[];if(F(b)&&E(b,V.tuple))for(let z of b.args)F(z)&&E(z,"!")&&z.args.length===1?I.push({expr:z.args[0],isNegated:!0}):I.push({expr:z,isNegated:!1});else F(b)&&E(b,"!")&&b.args.length===1?I.push({expr:b.args[0],isNegated:!0}):I.push({expr:b,isNegated:!1});for(let{expr:z}of I){let M=x({expr:z,env:t,context:{...n}});if(!M.$||!M.$.value||!R(M.$.value)||!Le(M.$.value.value))throw m({token:z.token,errorMessage:"Expected trait type for right-hand side expression."});t=M.$.env;let N=M.$.value.value;p.set(N.id,Ne(z))}}let f=[];for(let $ of _){if($.kind!=="type")continue;let{someType:C}=$,L=Rn(t,C);if(L){for(let b of L.requiredTraits)f.push({someType:C,traitType:b,traitExpr:p.get(b.id)});for(let b of L.negativeTraits){let S={...b,isNegatedConstraint:!0};f.push({someType:C,traitType:S,traitExpr:p.get(b.id)})}}}let d=x({expr:s,env:t,context:{...n}});if(!d.$||!d.$.value||!R(d.$.value))throw m({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=d.$.env;let h=d.$.value.value,{env:g,traitEntries:y}=yc({fieldExprs:l,env:t,context:{...n},receiverType:h});if(t=g,y.length===0)throw m({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let $ of y){let C=$.traitValue,L=C.type;yg({receiverTypePattern:h,traitType:L,whereConstraints:f,env:t,errorToken:e.token});let{traitTypeArgExprs:b,traitFunctionParamNames:S}=$.isAnonymousTrait?{}:ug({traitExpr:$.sourceExpr,traitType:L});v.push({traitType:L,traitValue:C,traitTypeArgExprs:b,traitFunctionParamNames:S})}t=nt(t);for(let $ of v){let C=Ya($.traitType),L={forallParameters:_,whereConstraints:f,receiverTypePattern:h,traitType:$.traitType,traitValue:$.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:$.traitTypeArgExprs,traitFunctionParamNames:$.traitFunctionParamNames};hc(C,L)}let T=v[0].traitValue;return e.$={env:t,type:T.type,value:T,pathCollection:[]},e}var vl=new Set;function Tl(e){if(!e||pe(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(Xe(e))return!0}function bc(e){if(!e)return!1;if(pe(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 Cc(e,t,n){if(!t.associatedTypeConstraints||t.associatedTypeConstraints.length===0)return!0;for(let r of t.associatedTypeConstraints){let i;if(e.trait)for(let o of e.trait.fields){if(o.label===r.label&&o.assignedValue&&R(o.assignedValue)){i=o.assignedValue.value;break}if(o.assignedValue&&mt(o.assignedValue)){let a=o.assignedValue;if(a.type.id===t.id){for(let s=0;s<a.type.fields.length;s++)if(a.type.fields[s].label===r.label){let u=a.fields[s];u&&R(u)&&(i=u.value);break}}if(i)break}}if(!i){let o=ja({concreteType:e,propertyName:r.label,env:n});o&&R(o.value)&&(i=o.value.value)}if(!i||!q({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function Rt({targetType:e,traitType:t,env:n}){let r=Gn(n,"Comptime");if(r&&t.id===r.id){let l=Tl(e);if(l!==void 0)return l}let i=Gn(n,"Runtime");if(i&&t.id===i.id){let l=bc(e);if(l!==void 0)return l}let o={...t,receiverType:e},a=e.trait;if(a)for(let l of a.fields){if(!l.assignedValue||!mt(l.assignedValue))continue;let c=l.assignedValue.type;if(q({type:o,env:n},{type:c,env:n})&&Cc(e,t,n))return!0}if(Ae(e)){for(let{traitType:l}of e.requiredTraits){if(l.id===t.id)return!0;if(l.selfConstraints){for(let u of l.selfConstraints)if(u.id===t.id)return!0}}for(let{traitType:l}of e.negativeTraits)if(l.id===t.id)return!1}if(D(e)){let l=!1,u=!1;for(let _ of e.requiredTraits)_.traitType.id===t.id&&(l=!0);let c=Rn(n,e);if(c){for(let _ of c.requiredTraits)_.id===t.id&&(l=!0);for(let _ of c.negativeTraits)_.id===t.id&&(u=!0)}if(e.negativeTraits)for(let _ of e.negativeTraits)_.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(D(e)){let l=qt(n,e);if(D(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(vl.has(s))return!1;vl.add(s);try{return Ha({concreteType:e,traitType:t,env:n})===void 0?!1:Cc(e,t,n)}finally{vl.delete(s)}}function $c({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!Rt({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" does not implement required constraint "${i.typeName??A(i)}" from trait "${t.typeName??A(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(Rt({targetType:e,traitType:i,env:n}))throw m({token:r,errorMessage:`Type "${A(e)}" implements "${i.typeName??A(i)}" but the trait "${t.typeName??A(t)}"'s where clause requires it to NOT implement this trait.`})}}function lr(e,t){let n=Tl(e);if(n!==void 0)return n;let r=Gn(t,"Comptime");return r?Rt({targetType:e,traitType:r,env:t}):!1}function Ai(e,t){let n=Tl(e);if(n!==!0&&n!==!1){if(D(e)){let r=Gn(t,"Comptime");if(!r)return e;for(let o of e.requiredTraits)if(o.traitType.id===r.id)return;let i=Rn(t,e);if(i){for(let o of i.requiredTraits)if(o.id===r.id)return}return e}if(Ee(e))return Ai(e.childType,t)}}function Rr(e,t){let n=bc(e);if(n!==void 0)return n;let r=Gn(t,"Runtime");return r?Rt({targetType:e,traitType:r,env:t}):!1}function qo(e,t){if(!e)return!1;let n=Gn(t,"Send");return n?Rt({targetType:e,traitType:n,env:t}):!1}function vi(e,t){if(!e)return!1;let n=Gn(t,"Acyclic");return n?Rt({targetType:e,traitType:n,env:t}):!1}function ki(e,t){return lr(e,t)&&!Rr(e,t)}function Jt(e){if(!e)return!1;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(At(t))return!0}return!1}function cn(e){if(At(e))return e;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(At(t))return t}}function Ie(e){if(!e)return!1;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(on(t))return!0}return!1}function Bt(e){if(on(e))return e;if(D(e)||Ae(e)){for(let{traitType:t}of e.requiredTraits)if(on(t))return t}}function Na(e,t,n,r){if(!me(e)&&!lr(e,t)&&!Rr(e,t))throw m({token:n,errorMessage:`Type ${A(e)} has incompatible field contexts and cannot be used in any evaluation context.
|
|
185
185
|
|
|
186
186
|
This typically happens when a struct/enum/array/tuple contains fields with conflicting availability:
|
|
187
187
|
- Compile-time only fields (e.g., comptime_int, Type, Module)
|
|
188
188
|
- Runtime only fields (e.g., *(T), [T], void, C-compatible types)
|
|
189
189
|
|
|
190
|
-
Consider restructuring the type to avoid mixing incompatible field types.`})}function dn(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=[dn(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=>dn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>dn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>dn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>dn(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=[dn(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=>dn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?dn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?dn(i,t,n):void 0)}}default:return e}}function
|
|
191
|
-
Typeof "${a.name}": ${A(a.type)}`})));if(o.length>0)throw pt(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 qe(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 Ic(e){return{id:e.id,name:e.name,type:A(e.type),typeId:e.type.id,value:De(e.value?.[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:e.isOwningTheSameRcValueAs?.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function Ac({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&&G(a.type));if(o&&G(o.type)){let a=o.assignedValue;ue(a)&&(a=W(o.type,{variableName:o.label,env:e,context:t})),i.push({type:o.type,value:a})}for(let a of r.trait.fields)if(a.label===""&&a.assignedValue&&mt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&G(c.type));if(u>=0){let c=l.fields[u];if(G(c.type)){let _=s.fields[u],p=c.type;ee(_)&&_.specializedType&&(p=_.specializedType),i.push({type:p,value:_})}}}if(i.length===0){let a=jn({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function $l({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){let o=[],a=r;for(;Ee(a);)a=a.childType;function s(p,f){let d=p.fields.find(h=>h.label===n&&(G(h.type)||Le(h.type)));if(d){let h;if(G(d.type)){if(ue(f))h=W(d.type,{variableName:d.label,env:e,context:t});else if(mt(f)){let g=p.fields.findIndex(y=>y.label===d.label);h=f.fields[g]}o.push({type:d.type,value:h})}else if(Ce(d.type)){let g=d.assignedValue;Ye(g)&&l(g)}}if(!d)for(let h of p.fields)Le(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(p){let f=p.type.fields.findIndex(d=>d.label==="Call");if(f>=0){let d=p.type.fields[f];if(d.assignedValue){let h=d.assignedValue;pn(h)?h.fields.forEach(g=>{o.push({type:g.type,value:g})}):o.push({type:h.type,value:h})}}}function u(p){let f=[];for(let d of p)if(G(d.type)){if(d.type.parameters.length===0)continue;let g=d.type.parameters[0].type;if(!i&&Ee(g)){let v=g.childType,T=r;if((gt(r)||Mt(r)||ht(r))&&(T=vt({type:r,expectedType:void 0,expr:void 0,env:e})),q({type:v,env:d.type.env},{type:T,env:e},!0)){f.push({type:d.type,value:d.value,needsPointerConversion:!0});continue}}if(me(g)){f.push(d);continue}if(me(g)&&!me(r)){f.push(d);continue}if(D(r)&&r.resolvedConcreteType&&!Ie(r)&&!me(g)&&q({type:g,env:d.type.env},{type:r.resolvedConcreteType,env:e},!0)){f.push(d);continue}if(!me(g)&&me(r))continue;if(gt(r)||Mt(r)||ht(r)){let v=vt({type:r,expectedType:void 0,expr:void 0,env:e});if(q({type:g,env:d.type.env},{type:v,env:e},!0)){f.push(d);continue}}if(Ae(r)&&d.value===void 0){if(d.type.parameters.length>0&&d.type.SelfType){let T=d.type.parameters[0];if(T){let $=T.type;if(!dt($)&&!Ae($)&&!Ee($))continue}}let v=d.type.return.type;if(Tr(v,d.type.SelfType))continue}q({type:g,env:d.type.env},{type:r,env:e},!0)&&f.push(d)}else f.push(d);return f}function c(p,f,d=new Set){if(d.has(p.id))return;d.add(p.id);let h=p.fields.find(g=>g.label===f&&G(g.type));if(h&&G(h.type)){let g=h.assignedValue;ue(g)&&(g=W(h.type,{variableName:h.label,env:e,context:t})),o.push({type:h.type,value:g});return}for(let g of p.fields)Le(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}if(r!==a&&r.trait){let p=r.trait.fields.find(f=>f.label===n&&G(f.type));if(p&&G(p.type)){let f=p.assignedValue;ue(f)&&(f=W(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:f})}else c(r.trait,n);for(let f of r.trait.fields)if(f.label===""&&f.assignedValue&&mt(f.assignedValue)){let d=f.assignedValue,h=d.type,g=h.fields.findIndex(y=>y.label===n&&G(y.type));if(g>=0){let y=h.fields[g];if(G(y.type)){let v=d.fields[g],T=y.type;ee(v)&&v.specializedType&&(T=v.specializedType),o.push({type:T,value:v})}}}}if(o.length===0&&r!==a){let p=jn({concreteType:r,methodName:n,env:e});o.push(...p)}let _=D(a)&&a.resolvedConcreteType&&!Ie(a);if(a.trait&&!Ae(a)&&!_){let p=a.trait.fields.find(f=>f.label===n&&(G(f.type)||Ce(f.type)));if(p&&G(p.type)){let f=p.assignedValue;ue(f)&&(f=W(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:f})}else if(p&&Ce(p.type)){let f=p.assignedValue;Ye(f)&&l(f)}else c(a.trait,n);for(let f of a.trait.fields)if(f.label===""&&f.assignedValue&&mt(f.assignedValue)){let d=f.assignedValue,h=d.type,g=h.fields.findIndex(y=>y.label===n&&G(y.type));if(g>=0){let y=h.fields[g];if(G(y.type)){let v=d.fields[g],T=y.type;ee(v)&&v.specializedType&&(T=v.specializedType),o.push({type:T,value:v})}}}if(o.length===0){let f=jn({concreteType:a,methodName:n,env:e});o.push(...f)}}if(o.length===0&&Vr(a)){let p=vg(e,a);if(p)for(let f of p.requiredTraits)c(f,n)}if(gt(a)||Mt(a)||ht(a)){let p=vt({type:a,expectedType:void 0,expr:void 0,env:e});if(p.trait){let f=p.trait.fields.find(d=>d.label===n&&G(d.type));if(f&&G(f.type)){let d=f.assignedValue;ue(d)&&(d=W(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:d})}else c(p.trait,n);for(let d of p.trait.fields)if(d.label===""&&d.assignedValue&&mt(d.assignedValue)){let h=d.assignedValue,g=h.type,y=g.fields.findIndex(v=>v.label===n&&G(v.type));if(y>=0){let v=g.fields[y];if(G(v.type)){let T=h.fields[y],$=v.type;ee(T)&&T.specializedType&&($=T.specializedType),o.push({type:$,value:T})}}}if(o.length===0){let d=jn({concreteType:p,methodName:n,env:e});o.push(...d)}}}if(D(a)){if(a.resolvedConcreteType?.trait&&!Ie(a)){let p=a.resolvedConcreteType,f=p.trait,d=f?.fields.find(h=>h.label===n&&G(h.type));if(d&&G(d.type)){let h=d.assignedValue||W(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:h})}if(o.length===0){let h=new Set;if(D(a)){let g=Rn(e,a);if(g)for(let y of g.requiredTraits)h.add(y.id)}for(let g of f?.fields??[])if(g.label===""&&g.assignedValue&&mt(g.assignedValue)){let y=g.assignedValue,v=y.type;if(h.size>0&&!h.has(v.id))continue;let T=v.fields.findIndex($=>$.label===n&&G($.type));if(T>=0){let $=v.fields[T];if(G($.type)){let C=y.fields[T],L=$.type;ee(C)&&C.specializedType&&(L=C.specializedType),o.push({type:L,value:C});break}}}}if(o.length===0){let h=jn({concreteType:p,methodName:n,env:e});o.push(...h)}}if(!(o.length>0)){let p=[],f=new Set;for(let h of a.requiredTraits??[])f.has(h.traitType.id)||(f.add(h.traitType.id),p.push(h.traitType));let d=Rn(e,a);if(d)for(let h of d.requiredTraits)f.has(h.id)||(f.add(h.id),p.push(h));if(D(a))for(let h=e.frames.length-1;h>=0;h--){let g=e.frames[h];for(let y of g.whereClauseConstraints.values())if(q({type:y.someType,env:e},{type:a,env:e},!1))for(let v of y.requiredTraits)f.has(v.id)||(f.add(v.id),p.push(v))}for(let h of p){let g=h.fields.find(y=>y.label===n&&G(y.type));if(g&&G(g.type)){let y={...g.type,SelfType:a},v=!1;if(y.parameters.length>0&&Ee(y.parameters[0].type)){let C=y.parameters[0].type.childType;(D(C)&&C.name==="Self"||q({type:C,env:y.env},{type:r,env:e},!0))&&(v=!0)}let T;if(D(a)){let C=a.definitionFrameLevel;if(C!==void 0&&C>=0){let L=e.frames[C];if(L){let b=L.variables.find(S=>S.name===a.name&&S.value&&R(S.value[0]));if(b?.value&&R(b.value[0])){let S=b.value[0].value;if(S!==a&&!D(S)&&S.trait){for(let I of S.trait.fields)if(I.label===""&&I.assignedValue&&mt(I.assignedValue)&&I.assignedValue.type.id===h.id){let z=I.assignedValue.type.fields.findIndex(M=>M.label===n&&G(M.type));z>=0&&(T=I.assignedValue.fields[z]??I.assignedValue.type.fields[z]?.assignedValue);break}}}}}}let $=T??W(y,{variableName:g.label,env:e,context:t});o.push({type:y,value:$,needsPointerConversion:v})}}if(o.length===0){for(let h of a.trait.fields)if(h.label===""&&h.assignedValue&&R(h.assignedValue)&&Le(h.assignedValue.value)){let y=h.assignedValue.value.fields.find(v=>v.label===n&&G(v.type));if(y&&G(y.type)){let v=W(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:v})}}}}}if(Ae(a)){let p=a.trait.fields.find(d=>d.label===n&&(G(d.type)||Le(d.type)));if(p&&G(p.type)){let d=p.assignedValue||W(p.type,{variableName:p.label,env:e,context:t});o.push({type:p.type,value:d})}let f=a.requiredTraits;for(let{traitType:d}of f){let h=d.fields.find(g=>g.label===n&&(G(g.type)||Le(g.type)));h&&G(h.type)&&h.type.parameters.length>0&&(me(h.type.parameters[0].type)||me(r)||q({type:h.type.parameters[0].type,env:h.type.env},{type:r,env:e},!0))&&o.push({type:h.type,value:void 0})}}return o.length>0,u(o)}function xc(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function Xa(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 uo(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Ve(r.type)||r.isModuleLevel)return!1;let i=r.type;return!(D(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function bg(e){for(let t=e.frames.length-1;t>=0;t--)if(e.frames[t]?.isBeginBlockFrame)return t;return-1}var Fg=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Lg(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var na=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1,registerPartialModule:a}){if(this.modulePath=t,this.allowPartialModule=o,this.registerPartialModule=a,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??kg(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new fi({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(s){throw new Error(`Failed to import module "${t}":
|
|
192
|
-
${s instanceof kn||s instanceof qn?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=Tl({modulePath:this.modulePath,inputString:this.inputString});if(!Lg(this.tokens,"@skip_prelude")&&!Fg){let l="file://"+wg.join(t,"prelude.yo"),{moduleValue:u,moduleError:c}=n(l);if(c)throw c;if(u&&Ce(u.type)){r=xe(r);for(let _=0;_<u.type.fields.length;_++){let p=u.type.fields[_],f=u.fields[_],{env:d}=fe({env:r,variable:{name:p.label,type:p.type,value:f?[f]:void 0,isCompileTimeOnly:!0,initializedAtToken:p.exprs.labelExpr?.token??p.exprs.expr.token,consumedAtToken:void 0,token:p.exprs.labelExpr?.token??p.exprs.expr.token,isOwningTheRcValue:!1}});r=d}}Fc(r)}let{moduleValue:o,env:a,partialModuleError:s}=Ga({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,registerPartialModule:this.registerPartialModule});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 KC(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as yT}from"fs";import*as Ta from"path";import*as Oc from"fs";function Ig(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var Sc={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},Vc={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Qa;function Ag(){if(Qa)return Qa;let e=Sc[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(Sc).join(", ")}`);let t=Vc[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(Vc).join(", ")}`);return Qa={platform:e,arch:t},Qa}function xg(){if(process.platform!=="linux")return"gnu";try{if(Oc.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function Rc(e){switch(e){case"linux":return xg();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function Sg(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function Pc(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:Ig(e),triple:Sg(e,t,n)}}function ii(){let e=Ag(),t=Rc(e.platform);return Pc(e.arch,e.platform,t)}var Nc=new Set(["x86_64","aarch64","x86","arm","wasm32"]),Mc=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),Dc=new Set(["gnu","musl","msvc","none","wasm"]);function Uc(e){let n=(e.startsWith("wasm-")?`wasm32-${e.slice(5)}`:e).split("-");if(n.length<2||n.length>3)throw new Error(`Invalid target triple "${e}". Expected format: <arch>-<os> or <arch>-<os>-<abi>. Example: x86_64-linux-gnu`);let r=n[0],i=n[1],o=n[2];if(!Nc.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...Nc].join(", ")}`);if(!Mc.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[...Mc].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(Dc.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...Dc].join(", ")}`);else l=Rc(s);return Pc(a,s,l)}var Cl;function ra(){return Cl||(Cl=ii()),Cl}function Ht(e){return e.os==="windows"}function xi(e){return e.os==="linux"}function Jn(e){return e.os==="macos"}function er(e){return e.arch==="wasm32"||e.os==="wasi"||e.os==="emscripten"}function zc(e){return e.os==="wasi"}function Bc(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){let t=Ht(e.targetInfo);t?(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("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux")),e.emitter.emitHeaderLine("");for(let n of e.cIncludes)e.emitter.emitHeaderLine(`#include ${n}`);t?(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("#include <unistd.h>"),e.emitter.emitHeaderLine("#include <sys/stat.h>"),e.emitter.emitHeaderLine("#include <sys/random.h>")),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(" #define __yo_aligned_free mi_free"),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"),t?(e.emitter.emitHeaderLine(" static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine(" #define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free free")),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"),t?(e.emitter.emitHeaderLine(" static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine(" #define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free free")),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"),t?(e.emitter.emitHeaderLine("static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine("#define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#define __yo_aligned_free free"))),e.emitter.emitHeaderLine("")}function Br(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 Wn(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=[...k.__yo_op_add,...k.__yo_op_sub,...k.__yo_op_mul,...k.__yo_op_div,...k.__yo_op_mod,...k.__yo_op_neg,...k.__yo_op_eq,...k.__yo_op_neq,...k.__yo_op_lt,...k.__yo_op_lte,...k.__yo_op_gt,...k.__yo_op_gte,...k.__yo_op_not,...k.__yo_op_bit_and,...k.__yo_op_bit_or,...k.__yo_op_bit_xor,...k.__yo_op_bit_complement,...k.__yo_op_bit_left_shift,...k.__yo_op_bit_right_shift,...k.__yo_ptr_add,...k.__yo_ptr_sub,...k.__yo_ptr_diff,...k.__yo_ptr_eq,...k.__yo_ptr_neq,...k.__yo_ptr_lt,...k.__yo_ptr_lte,...k.__yo_ptr_gt,...k.__yo_ptr_gte,...k.__yo_slice_len,...k.__yo_slice_new,...k.__yo_slice_ptr,...k.__yo_as,...k.__yo_getrandom,...k.__yo_arc4random_buf,...k.__yo_bcrypt_gen_random,...k.__yo_getentropy,...k.__yo_maybe_uninit_new,...k.__yo_maybe_uninit_as_ptr,...k.__yo_maybe_uninit_assume_init,...k.__yo_array_index,...k.__yo_slice_index,...k.__yo_array_index_range,...k.__yo_array_index_range_inclusive,...k.__yo_slice_index_range,...k.__yo_slice_index_range_inclusive,...k.__yo_noop,...k.__yo_return_self,...k.__yo_ms_sleep],Wc=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 oe(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 U(e,t){if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_string":for(let n of Object.values(t.types))if(An(n.type)&&n.type.fields.length===1&&Ge(n.type.fields[0].type))return n.cName;return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let i=tn(e);if(i)return U(i,t)}let n;switch(e.tag){case"Tuple":n="tuple";break;case"Struct":n="struct";break;case"Union":n="union";break;case"Enum":n="enum";break;default:throw new Error("Unreachable")}let r=t.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for ${n} ${A(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&pe(e)&&e.isReferenceSemantics?`${r}*`:r}case"Function":return"void*";case"Dyn":{let n=t.types[e.id]?.cName;if(!n)throw new Error(`No C type name found for dynamic dispatch type ${A(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(Ue(i)){let o=U(r,t),a=`Array_${oe(o)}_${i.value}`;return t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),a}break}case"Slice":{let n=e,i=`Slice_${oe(U(n.childType,t))}`;return t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:U(n.childType,t)}),i}case"SomeType":{let n=e;if(Ie(n)){if(n.resolvedConcreteType?.isExtern)return`${U(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&D(n.resolvedConcreteType)&&Ie(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&pe(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(D(s.type)&&Ie(s.type)&&s.type.resolvedConcreteType&&pe(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=Bt(n);if(i){let o=t.types[i.id]?.cName;if(o)return`${o}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${n.id}, FutureModule: ${i?.id??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
|
|
190
|
+
Consider restructuring the type to avoid mixing incompatible field types.`})}function dn(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=[dn(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=>dn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>dn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>dn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>dn(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=[dn(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=>dn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?dn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?dn(i,t,n):void 0)}}default:return e}}function El({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function ct(){let e=El({modulePath:"",inputString:""});return xe(e)}function $l(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=dn(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=dn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:vg(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function vg(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 _r({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 Rn(e,t){let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let l of e.frames)for(let u of l.variables){let c=u.value?.[0];R(c)&&D(c.value)&&c.value.id===t.id&&s.add(u.name)}for(let l of e.frames)for(let u of l.whereClauseConstraints.values())if(!(u.someType.id!==t.id&&!s.has(u.someType.name))){a=!0;for(let c of u.requiredTraits)i.has(c.id)||(i.add(c.id),n.push(c));for(let c of u.negativeTraits)o.has(c.id)||(o.add(c.id),r.push(c))}if(a)return{requiredTraits:n,negativeTraits:r}}function kc(e){return`typeapp:${e.constructor.id}:${e.args.map(t=>t.id).join(",")}`}function wc({env:e,typeApp:t,traitType:n,isNegated:r}){let i=e.frames.length-1,o=e.frames[i];if(!o)return e;let a=kc(t),s=o.whereClauseConstraints.get(a);s||(s={someType:t.constructor,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 Tg(e,t){let n=kc(t),r=[],i=[],o=new Set,a=new Set,s=!1;for(let l of e.frames){let u=l.whereClauseConstraints.get(n);if(u){s=!0;for(let c of u.requiredTraits)o.has(c.id)||(o.add(c.id),r.push(c));for(let c of u.negativeTraits)a.has(c.id)||(a.add(c.id),i.push(c))}}if(s)return{requiredTraits:r,negativeTraits:i}}var Fc=null;function Lc(e){Fc=e}function Ic(){Fc=null}var Eg="__yo_self";function fe({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0),s=ut(e.modulePath,t.name);if(i){let d=kg(e);d>=0&&(a=d)}if(t.name!==Eg&&!s){let d=Y(e,t.name);if(d.length>0&&!o){let h=d[d.length-1];throw pt([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:h.token,errorMessage:`Variable "${t.name}" is already defined here (variable shadowing is not allowed):`}])}}let l=e.frames[a];if(!l)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 u=s?t.name:r??Ct(e.modulePath,t.name),c={...t,frameLevel:a,id:u},_=s?Cg(l,c):$g({frame:l,variable:c}),p=e.frames.slice();return p[a]=_,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:p,modulePath:e.modulePath,inputString:e.inputString},variable:c}}function $g({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw pt([{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 Cg(e,t){return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:e.whereClauseConstraints}}function bg(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function Y(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=bg(o,t,n);r.push(...a)}return n?r.filter(n):r}function $n(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 ta(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function xe(e,t={id:Ct(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 nt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=uo(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw pt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
|
|
191
|
+
Typeof "${a.name}": ${A(a.type)}`})));if(o.length>0)throw pt(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 qe(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 Ac(e){return{id:e.id,name:e.name,type:A(e.type),typeId:e.type.id,value:De(e.value?.[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:e.isOwningTheSameRcValueAs?.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function xc({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&&G(a.type));if(o&&G(o.type)){let a=o.assignedValue;ue(a)&&(a=W(o.type,{variableName:o.label,env:e,context:t})),i.push({type:o.type,value:a})}for(let a of r.trait.fields)if(a.label===""&&a.assignedValue&&mt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&G(c.type));if(u>=0){let c=l.fields[u];if(G(c.type)){let _=s.fields[u],p=c.type;ee(_)&&_.specializedType&&(p=_.specializedType),i.push({type:p,value:_})}}}if(i.length===0){let a=jn({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Cl({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){let o=[],a=r;for(;Ee(a);)a=a.childType;function s(p,f){let d=p.fields.find(h=>h.label===n&&(G(h.type)||Le(h.type)));if(d){let h;if(G(d.type)){if(ue(f))h=W(d.type,{variableName:d.label,env:e,context:t});else if(mt(f)){let g=p.fields.findIndex(y=>y.label===d.label);h=f.fields[g]}o.push({type:d.type,value:h})}else if(Ce(d.type)){let g=d.assignedValue;Ye(g)&&l(g)}}if(!d)for(let h of p.fields)Le(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(p){let f=p.type.fields.findIndex(d=>d.label==="Call");if(f>=0){let d=p.type.fields[f];if(d.assignedValue){let h=d.assignedValue;pn(h)?h.fields.forEach(g=>{o.push({type:g.type,value:g})}):o.push({type:h.type,value:h})}}}function u(p){let f=[];for(let d of p)if(G(d.type)){if(d.type.parameters.length===0)continue;let g=d.type.parameters[0].type;if(!i&&Ee(g)){let v=g.childType,T=r;if((gt(r)||Mt(r)||ht(r))&&(T=vt({type:r,expectedType:void 0,expr:void 0,env:e})),q({type:v,env:d.type.env},{type:T,env:e},!0)){f.push({type:d.type,value:d.value,needsPointerConversion:!0});continue}}if(me(g)){f.push(d);continue}if(me(g)&&!me(r)){f.push(d);continue}if(D(r)&&r.resolvedConcreteType&&!Ie(r)&&!me(g)&&q({type:g,env:d.type.env},{type:r.resolvedConcreteType,env:e},!0)){f.push(d);continue}if(!me(g)&&me(r))continue;if(gt(r)||Mt(r)||ht(r)){let v=vt({type:r,expectedType:void 0,expr:void 0,env:e});if(q({type:g,env:d.type.env},{type:v,env:e},!0)){f.push(d);continue}}if(Ae(r)&&d.value===void 0){if(d.type.parameters.length>0&&d.type.SelfType){let T=d.type.parameters[0];if(T){let $=T.type;if(!dt($)&&!Ae($)&&!Ee($))continue}}let v=d.type.return.type;if(Tr(v,d.type.SelfType))continue}q({type:g,env:d.type.env},{type:r,env:e},!0)&&f.push(d)}else f.push(d);return f}function c(p,f,d=new Set){if(d.has(p.id))return;d.add(p.id);let h=p.fields.find(g=>g.label===f&&G(g.type));if(h&&G(h.type)){let g=h.assignedValue;ue(g)&&(g=W(h.type,{variableName:h.label,env:e,context:t})),o.push({type:h.type,value:g});return}for(let g of p.fields)Le(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}if(r!==a&&r.trait){let p=r.trait.fields.find(f=>f.label===n&&G(f.type));if(p&&G(p.type)){let f=p.assignedValue;ue(f)&&(f=W(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:f})}else c(r.trait,n);for(let f of r.trait.fields)if(f.label===""&&f.assignedValue&&mt(f.assignedValue)){let d=f.assignedValue,h=d.type,g=h.fields.findIndex(y=>y.label===n&&G(y.type));if(g>=0){let y=h.fields[g];if(G(y.type)){let v=d.fields[g],T=y.type;ee(v)&&v.specializedType&&(T=v.specializedType),o.push({type:T,value:v})}}}}if(o.length===0&&r!==a){let p=jn({concreteType:r,methodName:n,env:e});o.push(...p)}let _=D(a)&&a.resolvedConcreteType&&!Ie(a);if(a.trait&&!Ae(a)&&!_){let p=a.trait.fields.find(f=>f.label===n&&(G(f.type)||Ce(f.type)));if(p&&G(p.type)){let f=p.assignedValue;ue(f)&&(f=W(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:f})}else if(p&&Ce(p.type)){let f=p.assignedValue;Ye(f)&&l(f)}else c(a.trait,n);for(let f of a.trait.fields)if(f.label===""&&f.assignedValue&&mt(f.assignedValue)){let d=f.assignedValue,h=d.type,g=h.fields.findIndex(y=>y.label===n&&G(y.type));if(g>=0){let y=h.fields[g];if(G(y.type)){let v=d.fields[g],T=y.type;ee(v)&&v.specializedType&&(T=v.specializedType),o.push({type:T,value:v})}}}if(o.length===0){let f=jn({concreteType:a,methodName:n,env:e});o.push(...f)}}if(o.length===0&&Vr(a)){let p=Tg(e,a);if(p)for(let f of p.requiredTraits)c(f,n)}if(gt(a)||Mt(a)||ht(a)){let p=vt({type:a,expectedType:void 0,expr:void 0,env:e});if(p.trait){let f=p.trait.fields.find(d=>d.label===n&&G(d.type));if(f&&G(f.type)){let d=f.assignedValue;ue(d)&&(d=W(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:d})}else c(p.trait,n);for(let d of p.trait.fields)if(d.label===""&&d.assignedValue&&mt(d.assignedValue)){let h=d.assignedValue,g=h.type,y=g.fields.findIndex(v=>v.label===n&&G(v.type));if(y>=0){let v=g.fields[y];if(G(v.type)){let T=h.fields[y],$=v.type;ee(T)&&T.specializedType&&($=T.specializedType),o.push({type:$,value:T})}}}if(o.length===0){let d=jn({concreteType:p,methodName:n,env:e});o.push(...d)}}}if(D(a)){if(a.resolvedConcreteType?.trait&&!Ie(a)){let p=a.resolvedConcreteType,f=p.trait,d=f?.fields.find(h=>h.label===n&&G(h.type));if(d&&G(d.type)){let h=d.assignedValue||W(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:h})}if(o.length===0){let h=new Set;if(D(a)){let g=Rn(e,a);if(g)for(let y of g.requiredTraits)h.add(y.id)}for(let g of f?.fields??[])if(g.label===""&&g.assignedValue&&mt(g.assignedValue)){let y=g.assignedValue,v=y.type;if(h.size>0&&!h.has(v.id))continue;let T=v.fields.findIndex($=>$.label===n&&G($.type));if(T>=0){let $=v.fields[T];if(G($.type)){let C=y.fields[T],L=$.type;ee(C)&&C.specializedType&&(L=C.specializedType),o.push({type:L,value:C});break}}}}if(o.length===0){let h=jn({concreteType:p,methodName:n,env:e});o.push(...h)}}if(!(o.length>0)){let p=[],f=new Set;for(let h of a.requiredTraits??[])f.has(h.traitType.id)||(f.add(h.traitType.id),p.push(h.traitType));let d=Rn(e,a);if(d)for(let h of d.requiredTraits)f.has(h.id)||(f.add(h.id),p.push(h));if(D(a))for(let h=e.frames.length-1;h>=0;h--){let g=e.frames[h];for(let y of g.whereClauseConstraints.values())if(q({type:y.someType,env:e},{type:a,env:e},!1))for(let v of y.requiredTraits)f.has(v.id)||(f.add(v.id),p.push(v))}for(let h of p){let g=h.fields.find(y=>y.label===n&&G(y.type));if(g&&G(g.type)){let y={...g.type,SelfType:a},v=!1;if(y.parameters.length>0&&Ee(y.parameters[0].type)){let C=y.parameters[0].type.childType;(D(C)&&C.name==="Self"||q({type:C,env:y.env},{type:r,env:e},!0))&&(v=!0)}let T;if(D(a)){let C=a.definitionFrameLevel;if(C!==void 0&&C>=0){let L=e.frames[C];if(L){let b=L.variables.find(S=>S.name===a.name&&S.value&&R(S.value[0]));if(b?.value&&R(b.value[0])){let S=b.value[0].value;if(S!==a&&!D(S)&&S.trait){for(let I of S.trait.fields)if(I.label===""&&I.assignedValue&&mt(I.assignedValue)&&I.assignedValue.type.id===h.id){let z=I.assignedValue.type.fields.findIndex(M=>M.label===n&&G(M.type));z>=0&&(T=I.assignedValue.fields[z]??I.assignedValue.type.fields[z]?.assignedValue);break}}}}}}let $=T??W(y,{variableName:g.label,env:e,context:t});o.push({type:y,value:$,needsPointerConversion:v})}}if(o.length===0){for(let h of a.trait.fields)if(h.label===""&&h.assignedValue&&R(h.assignedValue)&&Le(h.assignedValue.value)){let y=h.assignedValue.value.fields.find(v=>v.label===n&&G(v.type));if(y&&G(y.type)){let v=W(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:v})}}}}}if(Ae(a)){let p=a.trait.fields.find(d=>d.label===n&&(G(d.type)||Le(d.type)));if(p&&G(p.type)){let d=p.assignedValue||W(p.type,{variableName:p.label,env:e,context:t});o.push({type:p.type,value:d})}let f=a.requiredTraits;for(let{traitType:d}of f){let h=d.fields.find(g=>g.label===n&&(G(g.type)||Le(g.type)));h&&G(h.type)&&h.type.parameters.length>0&&(me(h.type.parameters[0].type)||me(r)||q({type:h.type.parameters[0].type,env:h.type.env},{type:r,env:e},!0))&&o.push({type:h.type,value:void 0})}}return o.length>0,u(o)}function Sc(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function Xa(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 uo(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Ve(r.type)||r.isModuleLevel)return!1;let i=r.type;return!(D(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function kg(e){for(let t=e.frames.length-1;t>=0;t--)if(e.frames[t]?.isBeginBlockFrame)return t;return-1}var Lg=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Ig(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var na=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1,registerPartialModule:a}){if(this.modulePath=t,this.allowPartialModule=o,this.registerPartialModule=a,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??wg(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new fi({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(s){throw new Error(`Failed to import module "${t}":
|
|
192
|
+
${s instanceof kn||s instanceof qn?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=El({modulePath:this.modulePath,inputString:this.inputString});if(!Ig(this.tokens,"@skip_prelude")&&!Lg){let l="file://"+Fg.join(t,"prelude.yo"),{moduleValue:u,moduleError:c}=n(l);if(c)throw c;if(u&&Ce(u.type)){r=xe(r);for(let _=0;_<u.type.fields.length;_++){let p=u.type.fields[_],f=u.fields[_],{env:d}=fe({env:r,variable:{name:p.label,type:p.type,value:f?[f]:void 0,isCompileTimeOnly:!0,initializedAtToken:p.exprs.labelExpr?.token??p.exprs.expr.token,consumedAtToken:void 0,token:p.exprs.labelExpr?.token??p.exprs.expr.token,isOwningTheRcValue:!1}});r=d}}Lc(r)}let{moduleValue:o,env:a,partialModuleError:s}=Ga({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,registerPartialModule:this.registerPartialModule});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 XC(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as gT}from"fs";import*as Ta from"path";import*as Rc from"fs";function Ag(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var Vc={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},Nc={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Qa;function xg(){if(Qa)return Qa;let e=Vc[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(Vc).join(", ")}`);let t=Nc[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(Nc).join(", ")}`);return Qa={platform:e,arch:t},Qa}function Sg(){if(process.platform!=="linux")return"gnu";try{if(Rc.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function Pc(e){switch(e){case"linux":return Sg();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function Vg(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function Uc(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:Ag(e),triple:Vg(e,t,n)}}function ii(){let e=xg(),t=Pc(e.platform);return Uc(e.arch,e.platform,t)}var Mc=new Set(["x86_64","aarch64","x86","arm","wasm32"]),Dc=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),Oc=new Set(["gnu","musl","msvc","none","wasm"]);function zc(e){let n=(e.startsWith("wasm-")?`wasm32-${e.slice(5)}`:e).split("-");if(n.length<2||n.length>3)throw new Error(`Invalid target triple "${e}". Expected format: <arch>-<os> or <arch>-<os>-<abi>. Example: x86_64-linux-gnu`);let r=n[0],i=n[1],o=n[2];if(!Mc.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...Mc].join(", ")}`);if(!Dc.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[...Dc].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(Oc.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...Oc].join(", ")}`);else l=Pc(s);return Uc(a,s,l)}var bl;function ra(){return bl||(bl=ii()),bl}function Ht(e){return e.os==="windows"}function xi(e){return e.os==="linux"}function Jn(e){return e.os==="macos"}function er(e){return e.arch==="wasm32"||e.os==="wasi"||e.os==="emscripten"}function Bc(e){return e.os==="wasi"}function Gc(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 Wc(e){let t=Ht(e.targetInfo);t?(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("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux")),e.emitter.emitHeaderLine("");for(let n of e.cIncludes)e.emitter.emitHeaderLine(`#include ${n}`);t?(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("#include <unistd.h>"),e.emitter.emitHeaderLine("#include <sys/stat.h>"),e.emitter.emitHeaderLine("#include <sys/random.h>")),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(" #define __yo_aligned_free mi_free"),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"),t?(e.emitter.emitHeaderLine(" static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine(" #define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free free")),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"),t?(e.emitter.emitHeaderLine(" static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine(" #define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free free")),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"),t?(e.emitter.emitHeaderLine("static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine("#define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#define __yo_aligned_free free"))),e.emitter.emitHeaderLine("")}function Br(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 Wn(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=[...k.__yo_op_add,...k.__yo_op_sub,...k.__yo_op_mul,...k.__yo_op_div,...k.__yo_op_mod,...k.__yo_op_neg,...k.__yo_op_eq,...k.__yo_op_neq,...k.__yo_op_lt,...k.__yo_op_lte,...k.__yo_op_gt,...k.__yo_op_gte,...k.__yo_op_not,...k.__yo_op_bit_and,...k.__yo_op_bit_or,...k.__yo_op_bit_xor,...k.__yo_op_bit_complement,...k.__yo_op_bit_left_shift,...k.__yo_op_bit_right_shift,...k.__yo_ptr_add,...k.__yo_ptr_sub,...k.__yo_ptr_diff,...k.__yo_ptr_eq,...k.__yo_ptr_neq,...k.__yo_ptr_lt,...k.__yo_ptr_lte,...k.__yo_ptr_gt,...k.__yo_ptr_gte,...k.__yo_slice_len,...k.__yo_slice_new,...k.__yo_slice_ptr,...k.__yo_as,...k.__yo_getrandom,...k.__yo_arc4random_buf,...k.__yo_bcrypt_gen_random,...k.__yo_getentropy,...k.__yo_maybe_uninit_new,...k.__yo_maybe_uninit_as_ptr,...k.__yo_maybe_uninit_assume_init,...k.__yo_array_index,...k.__yo_slice_index,...k.__yo_array_index_range,...k.__yo_array_index_range_inclusive,...k.__yo_slice_index_range,...k.__yo_slice_index_range_inclusive,...k.__yo_noop,...k.__yo_return_self,...k.__yo_ms_sleep],qc=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 oe(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 U(e,t){if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_string":for(let n of Object.values(t.types))if(An(n.type)&&n.type.fields.length===1&&Ge(n.type.fields[0].type))return n.cName;return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let i=tn(e);if(i)return U(i,t)}let n;switch(e.tag){case"Tuple":n="tuple";break;case"Struct":n="struct";break;case"Union":n="union";break;case"Enum":n="enum";break;default:throw new Error("Unreachable")}let r=t.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for ${n} ${A(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&pe(e)&&e.isReferenceSemantics?`${r}*`:r}case"Function":return"void*";case"Dyn":{let n=t.types[e.id]?.cName;if(!n)throw new Error(`No C type name found for dynamic dispatch type ${A(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(Ue(i)){let o=U(r,t),a=`Array_${oe(o)}_${i.value}`;return t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),a}break}case"Slice":{let n=e,i=`Slice_${oe(U(n.childType,t))}`;return t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:U(n.childType,t)}),i}case"SomeType":{let n=e;if(Ie(n)){if(n.resolvedConcreteType?.isExtern)return`${U(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&D(n.resolvedConcreteType)&&Ie(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&pe(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(D(s.type)&&Ie(s.type)&&s.type.resolvedConcreteType&&pe(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=Bt(n);if(i){let o=t.types[i.id]?.cName;if(o)return`${o}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${n.id}, FutureModule: ${i?.id??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
|
|
193
193
|
resolvedConcreteType: ${n.resolvedConcreteType?.id??"none"}
|
|
194
|
-
registered type IDs: ${Object.keys(t.types).filter(o=>o.startsWith("sometype")).join(", ")}`)}return Jt(n)&&n.resolvedConcreteType||n.resolvedConcreteType?U(n.resolvedConcreteType,t):"void*"}case"Ptr":{let r=e.childType;if(Ge(r)){let a=U(r.childType,t),s=`Slice_${oe(a)}`;return t.sliceStructTypes.has(s)||t.sliceStructTypes.set(s,{childType:a}),`${s}*`}let i=U(r,t);return dt(r)?`${i}*`:ge(r)&&tn(r)?`${i}*`:`${i}*`}case"Iso":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Iso_${oe(o)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(a)||t.isoTypes.set(a,{childTypeCName:i,isoType:n}),a}case"Arc":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Arc_${oe(o)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(a)||t.arcTypes.set(a,{childTypeCName:i,arcType:n}),a}}return`// Unknown type: ${A(e)}`}function _t(e,t,n){let r=oe(t);return`${U(e,n)} ${r}`}function Qt(e,t,n){let r=n.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${A(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function oi(e){return e.type.return.isCompileTimeOnly}function Fr(e){let t=e.body,n=null;return F(t)&&E(t,"begin")&&t.args.length===1&&F(t.args[0])&&E(t.args[0],Si)?n=t.args[0].func.token.value:F(t)&&E(t,Si)&&(n=t.func.token.value),n&&k.__yo_as.includes(n)?null:n}function tn(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(Ee(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function Pn(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Te(e,t){if(!t)return oe(e);let n=Y(t,e);if(n.length>0){let r=n[n.length-1];return oe(r.name,r.type.isExtern==="c")}return oe(e)}function Za(e){if(F(e)&&e.args.length>=1){let t=e.args[0];if(t&&B(t))return t.token.value}if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[0])&&B(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0])return e.func.args[0].token.value}function Nn(e){if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(!F(e)||!E(e,k.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!B(t)))return t.token.value}function ia(e){if(e){if(Yt(e))return e;if(F(e)){let t=e;for(let n of t.args){let r=ia(n);if(r)return r}}}}var
|
|
195
|
-
`;let o=e.fields.map((a,s)=>{let l=
|
|
196
|
-
`;if(r.isNewtype&&r.fields.length===1&&e.fields.length===1){let o=
|
|
197
|
-
`}else if(R(e)){let r=e.value;if(r)return t.types[r.id]?t.types[r.id].cName:`/* Error: No C type name found for type ${A(r)} */`}else if(Yn(e)){let r=e.targetValue[0];if(r){let i=n?.$?.convertedRuntimeType||n?.$?.type;if(i&&Ee(i)){let o=i.childType,a=an(r,t,{$:{type:o,convertedRuntimeType:o}});if(a&&!a.startsWith("/*")&&!a.startsWith("//"))return`(&${a})`}}return`/* Error: Cannot generate pointer value ${De(e)} */`}}return`/* skip generating: ${De(e)} */`}function _o(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(_o(e.func,t,n))return!0;for(let r of e.args)if(_o(r,t,n))return!0}return!1}function Vg(e,t,n){for(let r=0;r<t.length;r++)if(_o(e,t[r].expr,n))return r;return-1}function Yc(e,t,n){let r=[],i=n?.shouldSkipBody;if(e.tag!=="FnCall"||!E(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=Vg(l,t,i),c=n?.handleReturnStatements&&(Et(l,"return")||E(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n?.handleSequentialSuspensions)for(let _=u+1;_<t.length&&_o(l,t[_].expr,i);_++)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 wl(e,t){let r=Yc(e,t,{shouldSkipBody:Yt,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 Ng(e,t){return _o(e,t,Yt)}function Hc(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&&Ng(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(E(a,V.while)||E(a,V.cond)||E(a,V.match))&&gn(a);if((l||u)&&e.awaitPoint)yo(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=P(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=P(a,t,n);!c||!a.$||ut(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function yo(e,t,n,r,i){let o=i.emitter;if(e.tag==="FnCall"&&En(e)){let a=e.args[0];if(!a){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let s=P(a,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${s};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&E(e,":=")){let a=e.args[0],s=e.args[1];if(!a||!s){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(s.tag==="FnCall"&&En(s)){let l=s.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}let u=a.token?.value;if(!u||!a.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let c=P(l,r,i);o.emitLine(`${r}// Store Future for await (variable: ${u})`),o.emitLine(`${r}sm->await_future_${t.index} = ${c};`)}else o.emitLine(`${r}// Store Future for await (variable: ${u}) - future already in state machine`);return}if(s.tag==="FnCall"&&E(s,V.cond)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=Y(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}oa(s,t,r,i,l);return}if(s.tag==="FnCall"&&E(s,V.match)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=Y(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}aa(s,t,r,i,l);return}}if(e.tag==="FnCall"&&E(e,"=")){let a=e.args[0],s=e.args[1];if(a&&s){if(s.tag==="FnCall"&&E(s,V.cond)){let l=P(a,r,i);oa(s,t,r,i,void 0,l||void 0);return}if(s.tag==="FnCall"&&E(s,V.match)){let l=P(a,r,i);aa(s,t,r,i,void 0,l||void 0);return}}}if(e.tag==="FnCall"&&E(e,V.cond)){oa(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,V.match)){aa(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,V.while)){Fl(e,t,r,i);return}o.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),o.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FnCall"?e.func.tag==="Atom"?e.func.token?.value:e.func.tag:"N/A"}`)}function oa(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!E(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 g=0;g<s.length;g++){let y=s[g];if(y.tag==="FnCall"&&E(y,"=>")){let v=y.args[0];if(v&&!(We(v.$?.value)&&v.$.value.value===!1)){u=g;break}}}let c=!1;if(u>=0){let g=s[u];if(g.tag==="FnCall"&&E(g,"=>")){let y=g.args[0];y&&We(y.$?.value)&&y.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let g=s[u],y=F(g)?g.args[1]:void 0;if(y)if(ai(y)){let C=mo(y,t,n,r),L=r.asyncWhileLoopInfo?.get(t.index);if(L&&C.length>0){let S=r.asyncCondBranchInfo?.get(t.index)?.branches.some(I=>I.hasAwait&&I.remainingExprs&&I.remainingExprs.length>0)??!1;L.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:C,deferredDropExpressions:y.$?.deferredDropExpressions,skipCondBranchCheck:S},l.push({index:u,value:y,hasAwait:!0,remainingExprs:[],deferredDropExpressions:y.$?.deferredDropExpressions})}else l.push({index:u,value:y,hasAwait:!0,remainingExprs:C,deferredDropExpressions:y.$?.deferredDropExpressions})}else{if(po(e,y,r,i,o))fo(y,n,r);else if(F(y)&&E(y,V.begin)){let C=y.args;for(let L=0;L<C.length;L++){let b=C[L],S=P(b,n,r);if(S==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let I=S==="break"||S==="continue"||S?.includes("return");S&&(I||b.$&&!ut(b.$.env.modulePath,S))&&a.emitLine(`${n}${S};`)}}if(y.$?.deferredDropExpressions)for(let L of y.$.deferredDropExpressions){let b=P(L,n,r);b&&a.emitLine(`${n}${b};`)}}else{let C=P(y,n,r);if(C==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let L=C==="break"||C==="continue"||C?.includes("return");C&&(L||y.$&&!ut(y.$.env.modulePath,C))&&a.emitLine(`${n}${C};`)}}l.push({index:u,value:y,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some($=>$.hasAwait&&$.remainingExprs&&$.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let _=!1,p=0,f=n;for(let g=0;g<s.length;g++){let y=s[g];if(y.tag!=="FnCall"||!E(y,"=>")){a.emitLine(`${f}// Error: Expected => pair in cond`);continue}let v=y.args[0],T=y.args[1];if(!v||!T){a.emitLine(`${f}// Error: Invalid pair in cond`);continue}if(We(v.$?.value)&&v.$.value.value===!1)continue;_&&(a.emitLine(`${f}else {`),p++,f+=" ");let $=g===s.length-1&&v.tag==="Atom"&&v.token?.value==="true"?null:P(v,f,r);$?a.emitLine(`${f}if (${$}) {`):a.emitLine(`${f}{`),_=!0;let C=`${f} `;if(ai(T)){a.emitLine(`${C}sm->cond_branch_${t.index} = ${g};`);let b=mo(T,t,C,r),S=r.asyncWhileLoopInfo?.get(t.index);if(S&&b.length>0){let z=r.asyncCondBranchInfo?.get(t.index)?.branches.some(M=>M.hasAwait&&M.remainingExprs&&M.remainingExprs.length>0)??!1;S.condBranchPostWhileExprs={branchIndex:g,condBranchFieldIndex:t.index,exprs:b,deferredDropExpressions:T.$?.deferredDropExpressions,skipCondBranchCheck:z},l.push({index:g,value:T,hasAwait:!0,remainingExprs:[],deferredDropExpressions:T.$?.deferredDropExpressions})}else l.push({index:g,value:T,hasAwait:!0,remainingExprs:b,deferredDropExpressions:T.$?.deferredDropExpressions})}else{if(po(e,T,r,i,o))fo(T,C,r);else if(F(T)&&E(T,V.begin)){let b=T.args;for(let S=0;S<b.length;S++){let I=b[S],z=P(I,C,r);if(z==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let M=z==="break"||z==="continue"||z?.includes("return");z&&(M||I.$&&!ut(I.$.env.modulePath,z))&&a.emitLine(`${C}${z};`)}}if(T.$?.deferredDropExpressions)for(let S of T.$.deferredDropExpressions){let I=P(S,C,r);I&&a.emitLine(`${C}${I};`)}}else{let b=P(T,C,r);if(b==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let S=b==="break"||b==="continue"||b?.includes("return");b&&(S||T.$&&!ut(T.$.env.modulePath,b))&&a.emitLine(`${C}${b};`)}}l.push({index:g,value:T,hasAwait:!1})}a.emitLine(`${f}}`)}for(let g=0;g<p;g++)f=f.slice(0,-2),a.emitLine(`${f}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some(g=>g.hasAwait&&g.remainingExprs&&g.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function po(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!jc(t)}function fo(e,t,n){let r=n.emitter,i=de(e.$?.type);if(F(e)&&E(e,V.begin)){let o=e.args;for(let s=0;s<o.length-1;s++){let l=o[s],u=P(l,t,n);u&&l.$&&!ut(l.$.env.modulePath,u)&&r.emitLine(`${t}${u};`)}let a=o[o.length-1];if(a&&!i){let s=P(a,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions){let l=P(s,t,n);l&&r.emitLine(`${t}${l};`)}}else if(!i){let o=P(e,t,n);o&&r.emitLine(`${t}sm->result = ${o};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let o of n.pendingDeferredDrops){let a=P(o,t,n);a&&a.includes("sm->")&&r.emitLine(`${t}${a};`)}Br({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function ai(e){if(e.tag==="FnCall"&&En(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(ai(t))return!0}return!1}function jc(e){if(Et(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(jc(t))return!0}return!1}function aa(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!E(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=P(s,n,r),c=s.$?.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if(e.$?.isPrimitiveMatch){Dg(e,l,u,t,n,r,i,o);return}if(!ge(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let _=c,p=r.types[_.id]?.cName;if(!p){a.emitLine(`${n}// Error: enum type has no C name`);return}let f=tn(_);if(f){let d=-1,h=-1,g;for(let y=0;y<l.length;y++){let v=l[y];if(F(v)&&E(v,"=>",2)){let T=v.args[0];if(T&&F(T)&&E(T,"."))d=y;else if(T&&F(T)){let $=T.func;$&&F($)&&E($,".")&&(h=y,T.args.length>0&&B(T.args[0])&&(g=T.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),h>=0){let y=l[h];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(g){let T=r,$=!1,C;if(T.stateMachineVariables){for(let[L,b]of T.stateMachineVariables)if(b.name===g){$=!0,C=L;break}}if($&&C){let L=_n(C,"local",T.stateMachineFieldAliases);a.emitLine(`${n} sm->${L} = ${u};`)}else a.emitLine(`${n} ${U(f,r)} ${g} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${h};`),ai(v)){let T=mo(v,t,n+" ",r);if(T.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:h,value:v,hasAwait:!0,remainingExprs:T,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(po(e,v,r,i,o))fo(v,n+" ",r);else{let T=P(v,n+" ",r);if(i){let $=oe(`var_${i}`);T&&a.emitLine(`${n} sm->${$} = ${T};`)}else o?T&&a.emitLine(`${n} ${o} = ${T};`):T&&v.$&&!ut(v.$.env.modulePath,T)&&a.emitLine(`${n} ${T};`)}}}if(a.emitLine(`${n}} else {`),d>=0){let y=l[d];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${d};`),ai(v)){let T=mo(v,t,n+" ",r);if(T.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:d,value:v,hasAwait:!0,remainingExprs:T,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(po(e,v,r,i,o))fo(v,n+" ",r);else{let T=P(v,n+" ",r);if(i){let $=oe(`var_${i}`);T&&a.emitLine(`${n} sm->${$} = ${T};`)}else o?T&&a.emitLine(`${n} ${o} = ${T};`):T&&v.$&&!ut(v.$.env.modulePath,T)&&a.emitLine(`${n} ${T};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let d=!1;for(let h=0;h<l.length;h++){let g=l[h];if(!F(g)||!E(g,"=>",2))continue;let y=g.args[0],v=g.args[1],T=B(y)&&y.token.value==="_",$;if(!T){if(F(y)&&E(y,".",1))$=y.args[0].token.value;else if(F(y)){let C=y.func;C&&F(C)&&E(C,".",1)&&($=C.args[0].token.value)}}if(!T&&!$){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(T)d=!0,a.emitLine(`${n} default: {`);else{let C=`${p.toUpperCase()}_${$.toUpperCase()}`;a.emitLine(`${n} case ${C}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${h};`),F(y)&&y.args.length>=1){let C=y.func;if(C&&F(C)&&E(C,".")){let L=_.variants.find(b=>b.name===$);if(L&&L.fields)for(let b=0;b<Math.min(y.args.length,L.fields.length);b++){let S=y.args[b],I=L.fields[b];if(B(S)&&I){let z=S.token.value,M=oe(z),N=r,O=!1,Q;if(N.stateMachineVariables){for(let[K,te]of N.stateMachineVariables)if(te.name===z){O=!0,Q=K;break}}let ne=oe(I.label,I.type.isExtern==="c"),j=`${u}.data.${$}.${ne}`;if(O&&Q){let K=_n(Q,"local",N.stateMachineFieldAliases);a.emitLine(`${n} sm->${K} = ${j};`)}else{let K=U(I.type,r);a.emitLine(`${n} ${K} ${M} = ${j};`)}}}}}if(ai(v)){let C=mo(v,t,n+" ",r);if(C.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let b=L.asyncCondBranchInfo.get(t.index)||{branches:[]};b.branches.push({index:h,value:v,hasAwait:!0,remainingExprs:C,deferredDropExpressions:v.$?.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,b)}}else if(po(e,v,r,i,o))fo(v,n+" ",r);else{let C=P(v,n+" ",r);if(i){let L=oe(`var_${i}`);C&&a.emitLine(`${n} sm->${L} = ${C};`)}else o?C&&a.emitLine(`${n} ${o} = ${C};`):C&&v.$&&!ut(v.$.env.modulePath,C)&&a.emitLine(`${n} ${C};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}d||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function Mg(e){return F(e)?E(e,"|",2):!1}function kl(e){if(!Mg(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...kl(t),...kl(n)]}function Dg(e,t,n,r,i,o,a,s){let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let c=0;c<t.length;c++){let _=t[c];if(!F(_)||!E(_,"=>",2))continue;let p=_.args[0],f=_.args[1];if(Et(p,"_"))l.emitLine(`${i} default:`);else{let d=p.$?.primitivePatternValues;if(d&&d.length>0){for(let h of d)if(h!==void 0){let g=an(h,o);l.emitLine(`${i} case ${g}:`)}}else{let h=kl(p);for(let g of h){let y=g.$?.value;if(y!==void 0){let v=an(y,o);l.emitLine(`${i} case ${v}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${c};`),ai(f)){let d=mo(f,r,i+" ",o);u.push({index:c,value:f,hasAwait:!0,remainingExprs:d,deferredDropExpressions:f.$?.deferredDropExpressions})}else{if(po(e,f,o,a,s))fo(f,i+" ",o);else{let d=P(f,i+" ",o);if(a){let h=oe(`var_${a}`);d&&l.emitLine(`${i} sm->${h} = ${d};`)}else s?d&&l.emitLine(`${i} ${s} = ${d};`):d&&f.$&&!ut(f.$.env.modulePath,d)&&l.emitLine(`${i} ${d};`)}u.push({index:c,value:f,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 mo(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!E(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(ai(l))if(s=!0,l.tag==="FnCall"&&E(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&En(u)){let c=u.args[0];if(c){let _=P(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${_};`)}}}else if(l.tag==="FnCall"&&En(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=P(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"&&E(l,V.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),oa(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&E(l,V.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),aa(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&E(l,V.while)&&Fl(l,t,n,r);else{let u=P(l,n,r);u&&l.$&&!ut(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Fl(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!E(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length<2||o.length>3){i.emitLine(`${n}// Error: while must have 2 or 3 arguments (condition, [step,] body)`);return}let a=o[0],s=o.length===3?o[1]:void 0,l=o.length===3?o[2]:o[1],u=Rg(l),c;u?(c=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=c+1):c=t.index,i.emitLine(`${n}sm->while_loop_${c}_active = true;`),i.emitLine(`${n}while_loop_${c}_start:`);let _=P(a,n,r);i.emitLine(`${n}if (!(${_})) {`),i.emitLine(`${n} sm->while_loop_${c}_active = false;`),i.emitLine(`${n} goto while_loop_${c}_end;`),i.emitLine(`${n}}`);let p=Og(l,t,n,r,c);if(i.emitLine(`${n}while_loop_${c}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),u){let f=r.asyncWhileLoopInfo.get(t.index);f&&(f.outerWhileLoop={whileLoopIndex:c,conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:p})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:p})}function Og(e,t,n,r,i){let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&E(e,"begin")?s=e.args:s=[e];let l=-1;for(let f=0;f<s.length;f++){let d=s[f];if(gn(d)){l=f;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,_=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...e.$?.deferredDropExpressions??[]];for(let f=0;f<l;f++){let d=s[f],h=P(d,n,r);h&&d.$&&!ut(d.$.env.modulePath,h)&&o.emitLine(`${n}${h};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=_;let p=s[l];if(F(p)&&E(p,V.while)&&gn(p)){Fl(p,t,n,r);for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}if(F(p)&&E(p,":=")){let f=p.args[1];if(f&&f.tag==="FnCall"&&En(f)){let d=f.args[0];if(d){let h=P(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${h};`)}}}else if(p.tag==="FnCall"&&En(p)){let f=p.args[0];if(f&&t.futureVariableId===void 0){let d=P(f,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}}else if(F(p)&&E(p,V.cond)){oa(p,t,n,r,void 0);for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}else if(F(p)&&E(p,V.match)){aa(p,t,n,r);for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}function Rg(e){let t=e.tag==="FnCall"&&E(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&E(n,V.while)&&gn(n))return!0;return!1}function Vi(e,t,n){if(e)switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let r=e.token.value,i=Y(e.$.env,r);if(i.length>0){let o=i[i.length-1];if(o&&!o.isCompileTimeOnly){let a=n.get(o.id)??o.id,s=o.isOwningTheSameRcValueAs?o.isOwningTheSameRcValueAs.id:a;t.add(s)}}}break;case"FnCall":if(Yt(e)){if(e.$?.deferredDupExpressions)for(let r of e.$.deferredDupExpressions)Vi(r,t,n);break}Vi(e.func,t,n);for(let r of e.args)Vi(r,t,n);if(e.$?.deferredDropExpressions)for(let r of e.$.deferredDropExpressions)Vi(r,t,n);if(e.$?.deferredDupExpressions)for(let r of e.$.deferredDupExpressions)Vi(r,t,n);break}}function Ja(e,t){let{awaitPoints:n,capturedVariables:r,variableIdRemapping:i}=t;if(n.length===0)return{crossBoundaryIds:new Set,awaitFutureTempVarAliases:new Map,variableSegments:new Map};let o=new Set,a=wl(e,n);for(let _ of a)(_.awaitPoint?.isInsideCond||_.awaitPoint?.isInsideWhile)&&o.add(_.stateNumber);let s=new Map;for(let _ of a){let p=new Set;for(let f of _.expressions)Vi(f,p,i);for(let f of p){let d=s.get(f);d||(d=new Set,s.set(f,d)),d.add(_.stateNumber)}}let l=-1;if(e.$?.deferredDropExpressions){let _=new Set;for(let p of e.$.deferredDropExpressions)Vi(p,_,i);for(let p of _){let f=s.get(p);f||(f=new Set,s.set(p,f)),f.add(l)}}let u=new Set;for(let _ of r){if(_.kind==="outer")continue;let p=s.get(_.id);if(!p)u.add(_.id);else if(p.size>1)u.add(_.id);else if(p.has(l))u.add(_.id);else{let f=p.values().next().value;o.has(f)&&u.add(_.id)}}let c=new Map;for(let _ of n){if(_.futureVariableId!==void 0)continue;let p=_.expr;if(!F(p))continue;let f=p.args[0];if(!f)continue;let d=f.$?.variableName;if(!d)continue;let h=r.find(g=>g.kind==="local"&&(g.name===d||g.id===d));h&&(c.set(h.id,`await_future_${_.index}`),u.delete(h.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function es(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(p=>p.kind==="local"&&e.has(p.id)&&!r.has(p.id)&&!Ve(p.type));if(a.length<2)return o;let s=new Map;for(let p of a){let f=t.get(p.id);if(!f||f.size===0)continue;let d=[...f].filter(y=>y>=0);if(d.length===0)continue;let h=Math.min(...d),g=Math.max(...d);s.set(p.id,[h,g])}if(s.size<2)return o;let l=new Map;for(let[p]of s){let f=a.find(g=>g.id===p);if(!f)continue;let d=U(f.type,i),h=l.get(d);h||(h=[],l.set(d,h)),h.push(p)}let u=new Map,c=[],_=0;for(let[p,f]of l){if(f.length<2)continue;let d=new Map;for(let y of f)d.set(y,new Set);for(let y=0;y<f.length;y++)for(let v=y+1;v<f.length;v++){let[T,$]=s.get(f[y]),[C,L]=s.get(f[v]);T<=L&&C<=$&&(d.get(f[y]).add(f[v]),d.get(f[v]).add(f[y]))}let h=new Map;for(let y of f){let v=new Set;for(let $ of d.get(y))h.has($)&&v.add(h.get($));let T=0;for(;v.has(T);)T++;h.set(y,T)}let g=new Map;for(let[y,v]of h){let T=g.get(v);T||(T=[],g.set(v,T)),T.push(y)}for(let[,y]of g){if(y.length<2)continue;let v=`slot_${_}`,T=y.map($=>a.find(C=>C.id===$)?.name??$);for(let $ of y)u.set($,v);c.push({fieldName:v,cType:p,variableNames:T}),_++}}return{slotAliases:u,slots:c}}function Il(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 sa(e){return!e||!D(e)?!1:e.resolvedConcreteType&&D(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Ea(t.traitType))}function _n(e,t,n){if(t==="outer")return`__capture.${oe(e)}`;let r=n?.get(e);return r||oe(`var_${e}`)}function Xc(e,t,n,r,i,o,a,s){let l=s.emitter,c=Bt(o).isFuture.outputType,_=de(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let p=wl(e,i.awaitPoints),f=e.tag==="FnCall"&&E(e,"begin")?e.args:[e],d=f.length>0?f[f.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) {");let h=[];for(let g=0;g<p.length;g++){let y=p[g];if(!y)continue;let v=y.stateNumber,T=g===p.length-1;if(l.emitLine(`
|
|
198
|
-
state_${v}:`),l.emitLine(` case ${v}: { // State ${v}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${v}\\n");`),v>0&&i.awaitPoints[v-1]){let N=i.awaitPoints[v-1],O=Il(N,i);N.isInsideCond&&l.emitLine(` if (sm->${O} != NULL) {`);let Q=de(N.resultType)||D(N.resultType)&&!N.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${O}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${O});`),l.emitLine(` sm->${O} = NULL;`),Wn({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),N&&!Q){l.emitLine(` // Extract result from await ${v-1}`),l.emitLine(` int state_before_read = sm->${O}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${v-1}, state=%d\\n", state_before_read);`);let j=!!N.isInsideCond,K;if(j?K=`sm->await_result_${v-1}`:N.targetVariableId&&(K=`sm->${_n(N.targetVariableId,"local",s.stateMachineFieldAliases)}`),K)if(Ve(N.resultType)){let te=Un(N.resultType,s);te?l.emitLine(` ${K} = ${te}(sm->${O}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${K} = sm->${O}->result;`))}else l.emitLine(` ${K} = sm->${O}->result;`);if(j&&N.targetVariableId){let te=_n(N.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${te} = sm->await_result_${v-1};`)}l.emitLine("")}if(!N.futureVariableId){let j=N.expr;if(j.tag==="FnCall"){let te=j.args[0]?.$?.type;te&&(D(te)||Ae(te))&&(l.emitLine(` if (sm->${O} != NULL) { __yo_decr_rc((void*)sm->${O}); sm->${O} = NULL; }`),l.emitLine(""))}}let ne=s;if(N){let j=ne.asyncCondBranchInfo?.get(N.index);if(j&&j.branches.some(te=>te.hasAwait)){let te=j.condBranchFieldIndex??N.index,$e=te===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),$e||l.emitLine(` switch (sm->cond_branch_${te}) {`);let X=y.awaitPoint?.isInsideCond??!1;for(let re of j.branches)if(re.hasAwait){if($e||l.emitLine(` case ${re.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${re.index}\\n");`),re.remainingExprs&&re.remainingExprs.length>0){let ce=s.inAsyncStateMachine,Me=s.stateMachineVariables,Oe=s.variableIdRemapping,he=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ke=ne.asyncWhileLoopInfo?.get(N.index);s.pendingDeferredDrops=[...re.deferredDropExpressions??[],...Ke?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let ie=new Map;for(let be of i.capturedVariables)ie.set(be.id,be);if(a)for(let be of a.fields)ie.set(be.label,{id:be.label,name:be.label,type:be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ie;let Z=!1,_e=[],ae=j.targetAssignmentCode;for(let be=0;be<re.remainingExprs.length;be++){let le=re.remainingExprs[be],ye=be===re.remainingExprs.length-1;if(Z){_e.push(le);continue}if(X&&gn(le)){Z=!0,Ll(le,y.awaitPoint,i," ",s);continue}let Fe=P(le," ",s);!Fe||!le.$||ut(le.$.env.modulePath,Fe)||(ye&&ae?l.emitLine(` ${ae} = ${Fe};`):l.emitLine(` ${Fe};`))}if(re.remainingExprs.length===0&&ae&&l.emitLine(` ${ae} = sm->await_result_${N.index};`),Z&&y.awaitPoint){let be=y.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let le=ne.asyncCondBranchInfo.get(be);if(le)le.chainedBranches||(le.chainedBranches=[]),le.chainedBranches.push({branches:[{index:re.index,value:re.value,hasAwait:_e.length>0||_e.some(ye=>gn(ye)),remainingExprs:_e,deferredDropExpressions:re.deferredDropExpressions}],condBranchFieldIndex:te});else{let ye={branches:[{index:re.index,value:re.value,hasAwait:_e.length>0||_e.some(Fe=>gn(Fe)),remainingExprs:_e,deferredDropExpressions:re.deferredDropExpressions}],condBranchFieldIndex:te};ne.asyncCondBranchInfo.set(be,ye)}}else if(re.deferredDropExpressions)for(let be of re.deferredDropExpressions){let le=P(be," ",s);le&&le.includes("sm->")&&l.emitLine(` ${le};`)}s.inAsyncStateMachine=ce,s.stateMachineVariables=Me,s.variableIdRemapping=Oe,s.pendingDeferredDrops=he}$e||(l.emitLine(" break;"),l.emitLine(" }"))}if($e||l.emitLine(" }"),j.chainedBranches){for(let re of j.chainedBranches)for(let ce of re.branches)if(ce.hasAwait&&ce.remainingExprs&&ce.remainingExprs.length>0){let Me=s.inAsyncStateMachine,Oe=s.stateMachineVariables,he=s.variableIdRemapping,Ke=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ie=ne.asyncWhileLoopInfo?.get(N.index);s.pendingDeferredDrops=[...ce.deferredDropExpressions??[],...ie?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let Z=new Map;for(let le of i.capturedVariables)Z.set(le.id,le);if(a)for(let le of a.fields)Z.set(le.label,{id:le.label,name:le.label,type:le.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;let _e=y.awaitPoint?.isInsideCond??!1,ae=!1,be=[];for(let le of ce.remainingExprs){if(ae){be.push(le);continue}if(_e&&gn(le)){ae=!0,Ll(le,y.awaitPoint,i," ",s);continue}let ye=P(le," ",s);!ye||!le.$||ut(le.$.env.modulePath,ye)||l.emitLine(` ${ye};`)}if(ae&&y.awaitPoint){let le=y.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let ye=ne.asyncCondBranchInfo.get(le);ye?(ye.chainedBranches||(ye.chainedBranches=[]),ye.chainedBranches.push({branches:[{index:ce.index,value:ce.value,hasAwait:be.length>0||be.some(Fe=>gn(Fe)),remainingExprs:be,deferredDropExpressions:ce.deferredDropExpressions}],condBranchFieldIndex:re.condBranchFieldIndex})):ne.asyncCondBranchInfo.set(le,{branches:[{index:ce.index,value:ce.value,hasAwait:be.length>0||be.some(Fe=>gn(Fe)),remainingExprs:be,deferredDropExpressions:ce.deferredDropExpressions}],condBranchFieldIndex:re.condBranchFieldIndex})}else if(ce.deferredDropExpressions)for(let le of ce.deferredDropExpressions){let ye=P(le," ",s);ye&&ye.includes("sm->")&&l.emitLine(` ${ye};`)}s.inAsyncStateMachine=Me,s.stateMachineVariables=Oe,s.variableIdRemapping=he,s.pendingDeferredDrops=Ke}}if(j.targetVariableId){let re=_n(j.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${re} = sm->await_result_${N.index};`)}l.emitLine("")}N.isInsideCond&&l.emitLine(" }");let K=ne.asyncWhileLoopInfo?.get(N.index);if(K){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${N.index}_active) {`),K.bodyExprsAfterAwait&&K.bodyExprsAfterAwait.length>0){let he=s.inAsyncStateMachine,Ke=s.stateMachineVariables,ie=s.variableIdRemapping,Z=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...K.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let _e=new Map;for(let ye of i.capturedVariables)_e.set(ye.id,ye);if(a)for(let ye of a.fields)_e.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=_e;let ae=s.smWhileBreakInfo,be=s.smWhileContinueInfo,le=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${N.index}`,activeIndex:N.index},s.smWhileContinueInfo={label:`while_loop_${N.index}_continue`},s.smWhileBodyDrops=[...K.bodyExpr.$?.deferredDropExpressions??[]];for(let ye of K.bodyExprsAfterAwait){let Fe=P(ye," ",s);!Fe||!ye.$||ut(ye.$.env.modulePath,Fe)||l.emitLine(` ${Fe};`)}s.smWhileBreakInfo=ae,s.smWhileContinueInfo=be,s.smWhileBodyDrops=le,s.inAsyncStateMachine=he,s.stateMachineVariables=Ke,s.variableIdRemapping=ie,s.pendingDeferredDrops=Z}l.emitLine(` while_loop_${N.index}_continue:`);{let he=K.bodyExpr.$?.deferredDropExpressions??[];if(he.length>0){let Ke=s.inAsyncStateMachine,ie=s.stateMachineVariables,Z=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let _e=new Map;for(let ae of i.capturedVariables)_e.set(ae.id,ae);if(a)for(let ae of a.fields)_e.set(ae.label,{id:ae.label,name:ae.label,type:ae.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=_e;for(let ae of he){let be=P(ae," ",s);be&&be.includes("sm->")&&l.emitLine(` ${be};`)}s.inAsyncStateMachine=Ke,s.stateMachineVariables=ie,s.variableIdRemapping=Z}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let te=s.declaredTempVars;if(s.declaredTempVars=void 0,K.stepExpr){let he=s.inAsyncStateMachine,Ke=s.stateMachineVariables,ie=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Z=new Map;for(let ae of i.capturedVariables)Z.set(ae.id,ae);if(a)for(let ae of a.fields)Z.set(ae.label,{id:ae.label,name:ae.label,type:ae.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;let _e=P(K.stepExpr," ",s);_e&&l.emitLine(` ${_e};`),s.inAsyncStateMachine=he,s.stateMachineVariables=Ke,s.variableIdRemapping=ie}let $e=s.inAsyncStateMachine,X=s.stateMachineVariables,re=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ce=new Map;for(let he of i.capturedVariables)ce.set(he.id,he);if(a)for(let he of a.fields)ce.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ce;let Me=P(K.conditionExpr," ",s);s.inAsyncStateMachine=$e,s.stateMachineVariables=X,s.variableIdRemapping=re,s.declaredTempVars=te,l.emitLine(` if (!(${Me})) {`),l.emitLine(` sm->while_loop_${N.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 Oe=N.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${Oe};`),l.emitLine(` goto while_loop_${Oe}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${N.index}:`),K.condBranchPostWhileExprs){let he=K.condBranchPostWhileExprs,Ke=he.condBranchFieldIndex,ie=he.branchIndex;he.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_${Ke} == ${ie}) {`));let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping,be=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let le=new Map;for(let Be of i.capturedVariables)le.set(Be.id,Be);if(a)for(let Be of a.fields)le.set(Be.label,{id:Be.label,name:Be.label,type:Be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=le;let ye=y.awaitPoint!=null,Fe=!1,je=[];for(let Be=0;Be<he.exprs.length;Be++){let Je=he.exprs[Be];if(Fe){je.push(Je);continue}if(ye&&gn(Je)){Fe=!0,Ll(Je,y.awaitPoint,i," ",s);continue}let Vt=P(Je," ",s);!Vt||!Je.$||ut(Je.$.env.modulePath,Vt)||l.emitLine(` ${Vt};`)}if(Fe&&y.awaitPoint){let Be=y.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let Je=he.skipCondBranchCheck?-1:he.condBranchFieldIndex,Vt=ne.asyncCondBranchInfo.get(Be);Vt?(Vt.chainedBranches||(Vt.chainedBranches=[]),Vt.chainedBranches.push({branches:[{index:he.branchIndex,value:he.exprs[0],hasAwait:je.length>0||je.some(Nt=>gn(Nt)),remainingExprs:je,deferredDropExpressions:he.deferredDropExpressions}],condBranchFieldIndex:Je})):ne.asyncCondBranchInfo.set(Be,{branches:[{index:he.branchIndex,value:he.exprs[0],hasAwait:je.length>0||je.some(Nt=>gn(Nt)),remainingExprs:je,deferredDropExpressions:he.deferredDropExpressions}],condBranchFieldIndex:Je})}if(!Fe&&he.deferredDropExpressions)for(let Be of he.deferredDropExpressions){let Je=P(Be," ",s);Je&&Je.includes("sm->")&&l.emitLine(` ${Je};`)}l.emitLine(" }"),s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae,s.pendingDeferredDrops=be}if(K.outerWhileLoop){let he=K.outerWhileLoop,Ke=he.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ke}_active) {`),he.bodyExprsAfterAwait.length>0){let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping,be=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...he.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let le=new Map;for(let Be of i.capturedVariables)le.set(Be.id,Be);if(a)for(let Be of a.fields)le.set(Be.label,{id:Be.label,name:Be.label,type:Be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=le;let ye=s.smWhileBreakInfo,Fe=s.smWhileContinueInfo,je=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ke}`,activeIndex:Ke},s.smWhileContinueInfo={label:`while_loop_${Ke}_continue`},s.smWhileBodyDrops=[...he.bodyExpr.$?.deferredDropExpressions??[]];for(let Be of he.bodyExprsAfterAwait){let Je=P(Be," ",s);!Je||!Be.$||ut(Be.$.env.modulePath,Je)||l.emitLine(` ${Je};`)}s.smWhileBreakInfo=ye,s.smWhileContinueInfo=Fe,s.smWhileBodyDrops=je,s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae,s.pendingDeferredDrops=be}l.emitLine(` while_loop_${Ke}_continue:`);{let Z=he.bodyExpr.$?.deferredDropExpressions??[];if(Z.length>0){let _e=s.inAsyncStateMachine,ae=s.stateMachineVariables,be=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let le=new Map;for(let ye of i.capturedVariables)le.set(ye.id,ye);if(a)for(let ye of a.fields)le.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=le;for(let ye of Z){let Fe=P(ye," ",s);Fe&&Fe.includes("sm->")&&l.emitLine(` ${Fe};`)}s.inAsyncStateMachine=_e,s.stateMachineVariables=ae,s.variableIdRemapping=be}}let ie=s.declaredTempVars;if(s.declaredTempVars=void 0,he.stepExpr){let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let be=new Map;for(let ye of i.capturedVariables)be.set(ye.id,ye);if(a)for(let ye of a.fields)be.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=be;let le=P(he.stepExpr," ",s);le&&l.emitLine(` ${le};`),s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae}{let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let be=new Map;for(let ye of i.capturedVariables)be.set(ye.id,ye);if(a)for(let ye of a.fields)be.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=be;let le=P(he.conditionExpr," ",s);s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae,l.emitLine(` if (!(${le})) {`),l.emitLine(` sm->while_loop_${Ke}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${N.index};`),l.emitLine(` goto while_loop_${Ke}_start;`),l.emitLine(" }")}s.declaredTempVars=ie,l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ke}:`)}}}}let $=s.inAsyncStateMachine,C=s.stateMachineVariables,L=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let b=new Map;for(let N of i.capturedVariables)b.set(N.id,N);if(a)for(let N of a.fields)b.set(N.label,{id:N.label,name:N.label,type:N.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=b;let S=s.pendingDeferredDrops;s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let I=T&&!_&&y.expressions.length>0,z=y.expressions.length>0?y.expressions[y.expressions.length-1]:void 0,M=s.asyncBodyReturnExpr;if(!_&&z&&d&&z===d&&y.awaitPoint?s.asyncBodyReturnExpr=z:s.asyncBodyReturnExpr=void 0,Hc(y," ",s,I),s.asyncBodyReturnExpr=M,s.pendingDeferredDrops=S,l.emitLine(""),y.awaitPoint){s.inAsyncStateMachine=$,s.stateMachineVariables=C,s.variableIdRemapping=L;let N=v+1;{let O=Il(y.awaitPoint,i),ne=y.awaitPoint.expr.args?.[0],j=sa(ne?.$?.type),K=y.awaitPoint?.isInsideCond;K&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${O} != NULL) {`));let te=y.awaitPoint?.isInsideWhile,$e=te?s.asyncWhileLoopInfo?.get(y.awaitPoint.index):void 0;if(te&&$e){let X=y.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${X}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${N};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${O}->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(""),j?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->${O}); // event loop reference`)),j||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),Ug(y.awaitPoint.expr,`sm->${O}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${O}->__yo_resume_fn((void*)sm->${O});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${O}->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->${O}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${O}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),te&&$e){let X=y.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${X};`),l.emitLine(" }")}K&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${N};`),l.emitLine(` goto state_${N};`),l.emitLine(" }"))}}else if(T){if(!y.expressions.some(O=>Qc(O))){if(e.$?.deferredDropExpressions){let O=new Pi,Q=s.emitter;s.emitter=O;for(let j of e.$.deferredDropExpressions){let K=P(j,"",s);K&&O.emitLine(`${K};`)}s.emitter=Q;let ne=O.print().trim();if(ne){l.emitLine(" // Drop local variables before completion");for(let j of ne.split(`
|
|
199
|
-
`)){let K=j.trim();K&&(l.emitLine(` ${K}`),h.push(K))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),Br({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=$,s.stateMachineVariables=C,s.variableIdRemapping=L}else s.inAsyncStateMachine=$,s.stateMachineVariables=C,s.variableIdRemapping=L;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),h}function Ll(e,t,n,r,i){let o=i.emitter,a=Il(t,n);if(e.tag==="FnCall"&&E(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&En(s)){let l=s.args[0];if(l){let u=P(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"&&En(e)){let s=e.args[0];if(s){let l=P(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"&&E(e,V.cond)){yo(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,V.match)){yo(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,V.while)){yo(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,V.begin)){yo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Qc(e){if(Et(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Qc(t))return!0}return!1}function Pg(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Ug(e,t,n,r){let i=e.args?.[0];if(!i?.$?.type)return;let o=Bt(i.$.type);if(!o?.isFuture.effects?.length)return;let a=Pg(o.isFuture.effects),s=r.emitter,l=e.args?.find(u=>F(u)&&E(u,V.using));if(l){let u=l.args;for(let c=0;c<a.length&&c<u.length;c++){let _=a[c],p=u[c];if(G(_.type)){if(_.type.forallParameters.length>0)continue;let f=P(p,n,r),d=_.label;s.emitLine(`${n}${t}->__capture.${d} = (void*)${f};`)}else Ce(_.type)&&Kc(_.type,t,n,p.$?.value,r,e)}}else for(let u of a)if(G(u.type)){if(u.type.forallParameters.length>0)continue;let c=zg(u.label,r,e);c&&s.emitLine(`${n}${t}->__capture.${u.label} = (void*)${c};`)}else Ce(u.type)&&Kc(u.type,t,n,void 0,r,e)}function Kc(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!G(s.type))continue;let l;if(i.stateMachineVariables){for(let[,u]of i.stateMachineVariables)if(u.name===s.label&&u.kind==="outer"){l=`sm->__capture.${s.label}`;break}}if(!l&&r&&Ye(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&ee(c)){let _=i.functions[c.funcId];_&&(l=_.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}if(!l){let u=o.$?.env??o.func.$?.env;if(u){let c=$n(u,_=>_.isImplicit===!0);for(let _=c.length-1;_>=0;_--){let p=c[_],f=p.value?.[p.value.length-1];if(f&&Ye(f)){let d=f.type.fields.findIndex(h=>h.label===s.label);if(d>=0){let h=f.fields[d];if(h&&ee(h)){let g=i.functions[h.funcId]?.cName;if(g){l=g;break}}}}}}}l&&a.emitLine(`${n}${t}->__capture.${s.label} = (void*)${l};`)}}function zg(e,t,n){if(t.currentEvidenceParams){for(let r of t.currentEvidenceParams.values())if(r.fieldLabel===e)return r.cParamName}if(t.stateMachineVariables){for(let[,r]of t.stateMachineVariables)if(r.name===e&&r.kind==="outer")return`sm->__capture.${e}`}}var Bg=new Set(["__yo_mutex_init","__yo_mutex_destroy","__yo_mutex_lock","__yo_mutex_unlock","__yo_cond_init","__yo_cond_destroy","__yo_cond_wait","__yo_cond_signal","__yo_cond_broadcast","__yo_thread_join","__yo_thread_self"]);function Zc(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:i}=e.externFunctions[n];if(i.isExtern==="yo"){if(Bg.has(r))continue;Al(i,r,!0,e);continue}i.isExtern==="c"&&i.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||Al(i,r,!0,e)}t.emitDeclarationLine(""),e.usesAsync&&(t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("static void __yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("")),t.emitDeclarationLine("/// Object constructors"),Wg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),qg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let n in e.functions){let{cName:r,value:i}=e.functions[n],o=r==="__yo_user_main",a=i.body?.$?.effectAnalysis,s=a&&a.hasEffects;if(!o&&!i.type.isClosure&&i.specializedFunctionCaches?.length>0||!o&&!s&&!i.isModuleEffectMember&&!i.type.isClosure&&!i.specializedType&&(i.specializedFunctionCaches?.length??0)===0&&kt(i.specializedType??i.type).length===0&&[...i.type.implicitParameters,...i.type.parameters.filter(h=>h.isImplicit)].some(h=>G(h.type)))continue;let u=i.specializedType??i.type,c=kt(u).length>0;if(!o&&i.isIoAsyncStateMachineClosure||!o&&!s&&!c&&!i.isModuleEffectMember&&(hr(i.type)&&!i.type.isClosure||i.specializedFunctionCaches?.length>0&&!i.type.isClosure||oi(i)||Fr(i)||i.isIoAsyncStateMachineClosure))continue;let _=i.specializedType??i.type,p=!s&&!i.isModuleEffectMember&&(_.parameters.some(h=>me(h.type))||_.forallParameters.length>0),f=me(_.return.type),d=D(_.return.type)&&_.return.type.requiredTraits.length>0;p||f&&!d&&!i.isModuleEffectMember||Al(_,r,!1,e,i.isModuleEffectMember?void 0:i.body,i.specializedType&&kt(_).length===0&&kt(i.type).some(h=>h.fieldFunctionType.forallParameters&&h.fieldFunctionType.forallParameters.length>0)?i.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function kt(e){let t=[],n=Gg(e.implicitParameters);for(let r of n)Ce(r.type)?Jc(r.label,r.type,[],t):G(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:oe(r.label)});return t}function Jc(e,t,n,r){for(let i of t.fields)if(G(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:oe(`${e}__${a}`)})}else Ce(i.type)&&Jc(e,i.type,[...n,i.label],r)}function Gg(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Ir(e,t,n,r,i){let o=r||U(e.return.type,n),a=e.parameters.filter(_=>!_.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((_,p)=>{let f=oe(_.label||`param${p}`);if(G(_.type))return Ir(_.type,"(*)",n).replace(" (*)(",` (*${f})(`);{let d;return D(_.type)&&Ie(_.type)?_.type.resolvedConcreteType?d=U(_.type.resolvedConcreteType,n)+"*":d=U(_.type,n):d=U(_.type,n),`${d} ${f}`}});s.push(...l);let u=kt(i??e);for(let _ of u)if(_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)s.push(`void* ${_.cParamName}`);else{let p=Ir(_.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${_.cParamName})(`);s.push(p)}let c=s.join(", ");return`${o} ${t}(${c})`}function Al(e,t,n,r,i,o){let a;if(i&&Ie(e.return.type)){let p=ia(i);p?.$?.asyncStateMachineStructName?a=`${p.$.asyncStateMachineStructName}*`:i.$?.type&&D(i.$.type)&&Ie(i.$.type)&&(a=U(i.$.type,r))}if(i&&D(e.return.type)&&!Ie(e.return.type)&&i.$?.type&&(a=U(i.$.type,r)),!a&&i&&i.$?.type&&!Ie(e.return.type)){let p=U(e.return.type,r),f=U(i.$.type,r);p!==f&&(a=f)}let s=a?Ir(e,t,r,a,o):Ir(e,t,r,void 0,o),l=A(e),u=t==="__yo_user_main"||r.exportedFunctionLabels&&[...r.exportedFunctionLabels.values()].some(p=>oe(p)===t),c=!n&&!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=n?"extern ":u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitter.emitDeclarationLine(`${_}${s}; // ${l}`)}function Wg(e){let t=e.emitter;t.emitDeclarationLine("static inline void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("static inline void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("static void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("static void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("static void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("static void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("static 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(pe(r)&&r.isReferenceSemantics){if(r.fields.some(l=>me(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=U(l.type,e),c=oe(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function qg(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(`static void ${r}(void* closure_ptr);`)}}function e_(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(oi(r)||!o||!Xn(r.type)||Xn(o))continue;let a=o.parameters.some(_=>me(_.type)),s=me(o.return.type);if(a||s||kt(r.type).some(_=>_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)||t.has(n))continue;t.add(n);let c=i.includes("___drop")||i.includes("___dup")||i.includes("___dispose")?"static inline __attribute__((always_inline)) ":"static inline ";e.emitter.emitDeclarationLine(`${c}${Ir(o,i,e)}; // specialized function: ${A(r.type)}`)}}function Ar(e,t,n){let r=Y(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function t_(e){return!!(e.$?.closureFunctionValue&&e.$?.type&&Jt(e.$.type))}function Yg(e,t,n,r,i,o=!1){let a=Object.values(i.types).find(f=>f.type===e);if(!a)return i.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if(n.$?.deferredDupExpressions)for(let f of n.$.deferredDupExpressions){let d=Za(f);d&&l.set(d,f)}let u=e.fields.map(f=>{if(f.isEffectParam)return"NULL";let d,h=f.exprs.expr;if(h.$?.deferredDupExpressions?.length&&(d=h.$.deferredDupExpressions[0]),!d){let y=[f.label];B(h)&&y.push(h.token.value);for(let v of y){let T=l.get(v);if(T){d=T;break}}}if(d)return P(d,r,i);let g={tag:"Atom",token:h.token,$:h.$};return P(g,r,i)}),c=`(${s}){ ${u.map((f,d)=>{let h=e.fields[d];return h?`.${h.label} = ${f}`:`/* Error: missing field at index ${d} */`}).join(", ")} }`,_=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=`__capture_${t}_${_}`;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 n_(e,t,n){if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=cn(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=n.functions[o.funcId]?.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=Ae(e.$.type),u;if(l){let d=n.types[e.$.type.id];if(!d)return"// Error: Dyn closure type not found in context";u=d.cName}let c=a&&pe(a)&&a.fields.length>0,_=U(i.return.type,n),p=i.parameters.map(d=>U(d.type,n)).join(", "),f=`(${_} (*)(void*${p?", "+p:""}))${s}`;if(c&&a&&pe(a)){let d=!l,h=Yg(a,i.id,e,t,n,d);if(!h)return"// Error: Failed to allocate closure capture";let{captureTempVar:g}=h;if(l){let y=`__yo_create_${u}`,v=`__yo_dispose_${u}`;return`${y}(${g}, ${v}, ${f})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),g}else if(l){let d=`__yo_create_${u}`,h=`__yo_dispose_${u}`;return`${d}(NULL, ${h}, ${f})`}else{if(e.$.type.tag==="SomeType"){let d=e.$.type;if(d.resolvedConcreteType)return n.implClosureCallMap.set(d.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),`(${U(d.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=P(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function go(e,t,n=""){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 a=t.emitter;for(let s of r.smWhileBodyDrops){let l=P(s,n,t);l&&l.includes("sm->")&&a.emitLine(`${n}${l};`)}}if(r.smWhileContinueInfo.stepExpr){let a=t.emitter,s=P(r.smWhileContinueInfo.stepExpr,n,t);s&&a.emitLine(`${n}${s};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return xl(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:a,activeIndex:s}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let l=t.emitter;for(let u of r.smWhileBodyDrops){let c=P(u,n,t);c&&c.includes("sm->")&&l.emitLine(`${n}${c};`)}}return s!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${s}_active = false;`),`goto ${a}`):`goto ${a}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let a=t.emitter,s=r.inAsyncStateMachine.futureType,u=Bt(s).isFuture.outputType,c=de(u);if(e.$?.deferredDropExpressions)for(let p of e.$.deferredDropExpressions){let f=P(p,n,t);f&&f.includes("sm->")&&a.emitLine(`${n}${f};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){a.emitLine(`${n}// Drop local variables before early completion`);for(let p of r.pendingDeferredDrops){let f=P(p,n,t);f&&f.includes("sm->")&&a.emitLine(`${n}${f};`)}}a.emitLine(`${n}// Early return - complete the result Future`);let _=c?void 0:`(${U(u,t)}){0}`;return Br({emitter:a,indent:n,resultCode:_,debugLabel:t.currentFunctionName}),""}return"return"}if(e.$?.type&&de(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let a=e.token.value;if(r.localShadowedVariables?.has(a))return oe(a);let s=!1;if(e.$?.env){let l=Y(e.$.env,a);if(l.length>0){let u=l[l.length-1],c=u.isOwningTheSameRcValueAs?u.isOwningTheSameRcValueAs.id:u.id;r.variableIdRemapping?.has(c)&&(c=r.variableIdRemapping.get(c));let _=r.stateMachineVariables.get(c);if(_){let p=r.stateMachineFieldAliases?.get(c);if(p)return s=!0,`sm->${p}`;let f=_.kind==="outer"?`__capture.${a}`:`var_${_.id}`;return s=!0,`sm->${f}`}}}if(!s){for(let[l,u]of r.stateMachineVariables)if(u.name===a){let c=r.stateMachineFieldAliases?.get(l);if(c)return s=!0,`sm->${c}`;let _=u.kind==="outer"?`__capture.${a}`:`var_${l}`;return s=!0,`sm->${_}`}}if(e.$?.env){let l=Y(e.$.env,a);if(l.length>0){let u=l[l.length-1];if(u.isOwningTheSameRcValueAs){let c=u.isOwningTheSameRcValueAs.name,_=u.isOwningTheSameRcValueAs.id;for(let[p,f]of r.stateMachineVariables)if(f.name===c||p===_)return`sm->${f.kind==="outer"?`__capture.${c}`:`var_${p}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(a)&&r.currentClosureCaptureFrameLevel!==void 0){let l=r.currentClosureCaptureTypeCName;return l?`((${l}*)closure_context)->${Te(a,e.$?.env)}`:`closure_context->${Te(a,e.$?.env)}`}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!ue(e.$.value)){let l=Y(e.$.env,e.$.variableName);if(l.length>0&&l[l.length-1].isCompileTimeOnly)return an(e.$.value,t,e)}return Te(e.$.variableName,e.$.env)}}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!ue(e.$.value)){let a=Y(e.$.env,e.$.variableName);if(a.length>0&&a[a.length-1].isCompileTimeOnly)return an(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0&&Ar(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Te(e.$.variableName,e.$?.env)}if(e.$?.value&&!ue(e.$.value))return an(e.$.value,t,e);let i=e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0?Ar(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!e.$?.env||i)){let a=r.currentClosureCaptureTypeCName;return a?`((${a}*)closure_context)->${Te(e.token.value,e.$?.env)}`:`closure_context->${Te(e.token.value,e.$?.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let a=Object.values(r.functions).find(s=>s.cName===r.currentFunctionName);if(a&&a.value.type.isClosure){let s=Object.values(r.types).find(l=>G(l.type)&&l.type.isClosure&&l.type===a.value.type);if(s)return`((${`${s.cName}_capture`}*)closure_context->data)->${Te(e.token.value,e.$?.env)}`}}if(e.$?.env){let a=Y(e.$.env,e.token.value);if(a.length>0){let s=a[a.length-1];if(s.value?.[0]&&ee(s.value[0])){let l=t.functions[s.value[0].funcId]?.cName;if(l)return l}else if(G(s.type)&&(ue(s.value?.[0])||s.value===void 0)){let l=Object.entries(t.functions).find(([u,c])=>c.value.funcName===e.token.value);if(l)return l[1].cName}}}return Te(e.token.value,e.$?.env)}function r_(e,t,n){let r;if(Yt(e)){let y=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;y&&ee(y)&&(r=y.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=e.$?.type;if(!i||!Ie(i))return"/* Error: async block must have Future type */";let o=Bt(i);if(!o)return"/* Error: Could not extract Future module type */";let a=e.$?.variableName||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,c=`${a}_state_dispose`;n.types[i.id]={type:i,cName:s};let _=e.$?.awaitAnalysis;if(!_)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let p=o.isFuture.outputType;if(D(p))if(p.resolvedConcreteType)p=p.resolvedConcreteType;else{let y=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;if(y&&ee(y)){let v=y.type?.return?.type;if(v&&D(v)&&v.resolvedConcreteType)p=v.resolvedConcreteType;else if(y.body?.$?.type){let T=y.body.$.type;D(T)&&T.resolvedConcreteType?p=T.resolvedConcreteType:D(T)||(p=T)}}}let f=U(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(""),e.$?.captureType){let g=e.$.captureType,y=Object.values(n.types).find(T=>T.type===g),v=y?y.cName:`async_capture_${g.id}`;d.emitDeclarationLine(`${s}* ${u}(${v} __capture);`)}else d.emitDeclarationLine(`${s}* ${u}();`);d.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:p,resultTypeCName:f,captureType:e.$?.captureType,analysis:_});let h=e.$?.captureType;if(h){let g=Object.values(n.types).find(I=>I.type===h),y=g?g.cName:`async_capture_${h.id}`,v=n,T=v.currentClosureCaptures!==void 0||v.inAsyncStateMachine!==void 0||v.inEffectStateMachine!==void 0,$=!1,C=h.fields.map(I=>{if(I.isEffectParam)return`.${I.label} = NULL`;let z;if(!T&&e.$?.deferredDupExpressions)for(let N of e.$.deferredDupExpressions){let O;if(F(N)&&(N.args.length>0&&B(N.args[0])?O=N.args[0].token.value:N.args.length===0&&F(N.func)&&E(N.func,".")&&N.func.args.length>=2&&B(N.func.args[0])&&(O=N.func.args[0].token.value)),O===I.label){z=N;break}}if(z)return $=!0,z.$?.variableName?(P(z,t,n),`.${I.label} = ${z.$.variableName}`):`.${I.label} = ${P(z,t,n)}`;let M={tag:"Atom",token:I.exprs.expr.token,$:I.exprs.expr.$};return`.${I.label} = ${go(M,n)}`}).join(", "),L=`(${y}){${C}}`;if(!$){let I=Un(h,n);I&&(L=`${I}(${L})`)}let b=e.$?.variableName||"async_result",S=`${u}(${L})`;if(b&&e.$?.type){let I=_t(e.$.type,b,n);return n.emitter.emitLine(`${t}${I} = ${S};`),b}else return S}else{let g=e.$?.variableName||"async_result",y=`${u}()`;if(g&&e.$?.type){let v=_t(e.$.type,g,n);return n.emitter.emitLine(`${t}${v} = ${y};`),g}else return y}}function i_(e,t){let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:_,overlappingSlots:p}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${A(o)})`),n.emitDeclarationLine(`struct ${i}_struct {`),n.emitDeclarationLine(" __yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(" int state; // Current state (0 = cold, 1..N = intermediate, -1 = completed, -2 = aborted)"),de(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${A(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let g=Object.values(t.types).find(v=>v.type===s),y=g?g.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${y} __capture;`),n.emitDeclarationLine("")}let f=l.capturedVariables.filter(g=>g.kind!=="outer");if(u&&(f=f.filter(g=>u.has(g.id)&&!c?.has(g.id)&&!_?.has(g.id))),f.length>0){n.emitDeclarationLine(" // Local variables");for(let g of f){let y=U(g.type,t),v=_n(g.id,"local");n.emitDeclarationLine(` ${y} ${v}; // ${g.name}`)}n.emitDeclarationLine("")}if(p&&p.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let g of p)n.emitDeclarationLine(` ${g.cType} ${g.fieldName}; // shared: ${g.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let g=[];for(let y of l.awaitPoints)if(!(de(y.resultType)||D(y.resultType)&&!y.resultType.resolvedConcreteType)&&y.isInsideCond){let $=y.resultType;if(y.futureType){let L=Bt(y.futureType);L&&($=L.isFuture.outputType)}let C=U($,t);g.push(` ${C} await_result_${y.index};`)}if(g.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let y of g)n.emitDeclarationLine(y);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let g=l.awaitPoints.filter(y=>y.futureVariableId===void 0);if(g.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let y of g){let v=y.expr;if(v.tag!=="FnCall")continue;let $=v.args[0]?.$?.type;if(!$)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let C=U($,t);n.emitDeclarationLine(` ${C} await_future_${y.index};`)}n.emitDeclarationLine("")}}let d=l.awaitPoints.filter(g=>g.needsOwnCondBranchField);if(d.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let g of d)n.emitDeclarationLine(` int cond_branch_${g.index}; // Which branch was taken in cond with await ${g.index}`);n.emitDeclarationLine("")}let h=l.awaitPoints.filter(g=>g.isInsideWhile);if(h.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let g=l.awaitPoints.length;for(let y of h){n.emitDeclarationLine(` _Bool while_loop_${y.index}_active; // Whether while loop ${y.index} should continue`);let v=(y.whileNestingDepth??1)-1;for(let T=0;T<v;T++)n.emitDeclarationLine(` _Bool while_loop_${g}_active; // Whether outer while loop ${g} should continue`),g++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function Hg(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let l of t)n.set(l.structName,l);let r=new Map,i=new Map;for(let l of t)r.set(l.structName,new Set),i.set(l.structName,0);for(let l of t){let u=c=>{let _=r.get(c);_.has(l.structName)||(_.add(l.structName),i.set(l.structName,(i.get(l.structName)??0)+1))};for(let c of l.analysis.capturedVariables){let _;try{_=U(c.type,e)}catch{continue}let p=n.get(_);p&&p.structName!==l.structName&&u(p.structName)}for(let c of l.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let _=c.expr;if(_.tag!=="FnCall")continue;let f=_.args[0]?.$?.type;if(!f)continue;let d;try{d=U(f,e)}catch{continue}let h=n.get(d);h&&h.structName!==l.structName&&u(h.structName)}}let o=[];for(let[l,u]of i.entries())u===0&&o.push(l);let a=[];for(;o.length>0;){let l=o.shift();a.push(l);let u=r.get(l);if(u)for(let c of u){let _=(i.get(c)??0)-1;i.set(c,_),_===0&&o.push(c)}}let s=a.length===t.length?a.map(l=>n.get(l)).filter(Boolean):t;for(let l of s){let{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:_}=Ja(l.bodyExpr,l.analysis),{slotAliases:p,slots:f}=es(u,_,l.analysis.capturedVariables,c,e);i_({asyncBlockId:l.asyncBlockId,structName:l.structName,resultType:l.resultType,resultTypeCName:l.resultTypeCName,captureType:l.captureType,analysis:l.analysis,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:p,overlappingSlots:f},e)}}function jg(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(c.emitLine(`// Dispose function for async block ${e} state machine`),c.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),c.emitLine(`void ${n}(void* sm_ptr) {`),c.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),c.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),c.emitLine(""),i&&Ve(i)){let _=Object.values(u.types).find(p=>p.type===i);if(!_)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=_.cName,f=i.trait.fields.find(d=>d.label===k.___drop[0]);if(f&&f.assignedValue&&ee(f.assignedValue)){let d=u.functions[f.assignedValue.funcId]?.cName;d&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${d}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!de(r)&&Ve(r)){let _=U(r,u);c.emitLine(" // Drop result field if it was set (state == -1 means completed)"),c.emitLine(" int final_state = sm->state;"),c.emitLine(" if (final_state == -1) {"),c.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let p=Lr(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${_} */`),c.emitLine(" }")}c.emitLine("");{let _=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let d=`sm->${_n(p.id,"local")}`;if(Ae(p.type))_.push(` if ((${d}).data != NULL) { __yo_decr_rc((void*)(${d}).data); }`);else if(xt(p.type)||wt(p.type))_.push(` if (${d} != NULL) { __yo_decr_rc_atomic((void*)${d}); }`);else if(dt(p.type)||D(p.type)&&mn(p.type)){let h=Lr(p.type,u);h?_.push(` if (${d} != NULL) { ${h}(${d}); }`):_.push(` if (${d} != NULL) { __yo_decr_rc((void*)${d}); }`)}else if(Ve(p.type)){let h=Lr(p.type,u);h&&_.push(` ${h}(${d});`)}}if(_.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of _)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function Kg(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let _=Object.values(u.types).find(f=>f.type===l),p=_?_.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${p} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);if(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);`),u.needsCycleGC&&(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;")),u.needsCycleGC)c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`);else{u.disposeTypeIds||(u.disposeTypeIds=new Map,u.nextDisposeTypeId=1);let _=u.disposeTypeIds.get(i);_===void 0&&(_=u.nextDisposeTypeId,u.nextDisposeTypeId=_+1,u.disposeTypeIds.set(i,_)),c.emitLine(` sm->header.type_id = ${_};`)}u.needsCycleGC&&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)"),de(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 o_(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;Hg(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:_,resultType:p,resultTypeCName:f,captureType:d,analysis:h}=r,g=e.stateMachineVariables,y=e.currentEvidenceParams,v=new Map,{crossBoundaryIds:T,awaitFutureTempVarAliases:$,variableSegments:C}=Ja(o,h),{slotAliases:L}=es(T,C,h.capturedVariables,$,e),b=h.capturedVariables.filter(N=>N.kind==="outer"||T.has(N.id)||$.has(N.id)||L.has(N.id)),S={...h,capturedVariables:b};for(let N of b)v.set(N.id,N);if(d)for(let N of d.fields)v.set(N.label,{id:N.label,name:N.label,type:N.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let I=e.stateMachineFieldAliases,z=new Map($);for(let[N,O]of L)z.set(N,O);e.stateMachineFieldAliases=z;let M=Xc(o,a,s,l,S,_,d,e);if(e.stateMachineVariables=g,e.currentEvidenceParams=y,e.stateMachineFieldAliases=I,t.emitLine(""),jg(a,s,c,p,d,S,M,T,$,e),t.emitLine(""),Kg(a,s,l,u,c,_,p,f,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let N=e.deferredAsyncBlocks.slice(i);for(let O of N){let{crossBoundaryIds:Q,awaitFutureTempVarAliases:ne,variableSegments:j}=Ja(O.bodyExpr,O.analysis),{slotAliases:K,slots:te}=es(Q,j,O.analysis.capturedVariables,ne,e);i_({asyncBlockId:O.asyncBlockId,structName:O.structName,resultType:O.resultType,resultTypeCName:O.resultTypeCName,captureType:O.captureType,analysis:O.analysis,crossBoundaryIds:Q,awaitFutureTempVarAliases:ne,overlappingSlotAliases:K,overlappingSlots:te},e)}}n++}}function a_(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&s_(n.body,e)}}var Xg=["__yo_poll_","__yo_fs_event_","__yo_async_"];function Qg(e){return Xg.some(t=>e.startsWith(t))}function s_(e,t){if(e&&F(e)){let n=e;if(Yt(e)){t.usesAsync=!0;let r=e.$?.type;if(r&&Ie(r)&&Bt(r)){let a=`${e.$?.variableName||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=a),t.types[r.id]={type:r,cName:a},t.emitter.emitDeclarationLine(`typedef struct ${a}_struct ${a}; // Forward declaration for async state machine`)}}if(Yt(e)){let r=e.$?.type;if(r&&Ie(r)&&Bt(r)){let o=e.$?.variableName||`io_async_block_${Date.now()}`,a=!!e.$?.awaitAnalysis,s=a?`${o}_state_t`:`${o}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=s),t.types[r.id]={type:r,cName:s},t.emitter.emitDeclarationLine(`typedef struct ${s}_struct ${s}; // Forward declaration for io.async ${a?"state machine":"sync future"}`)}}(En(e)||Ua(e))&&(t.usesAsync=!0);{let r=n.func.$?.type;r&&"isExtern"in r&&r.isExtern==="yo"&&"externName"in r&&typeof r.externName=="string"&&Qg(r.externName)&&(t.usesAsync=!0)}{let r=n.func.$?.type;r&&"isExtern"in r&&r.isExtern==="yo"&&"externName"in r&&typeof r.externName=="string"&&(r.externName==="__yo_thread_spawn"||r.externName==="__yo_worker_spawn")&&(t.usesParallelism=!0)}for(let r of n.args)s_(r,t)}}function l_(e,t,n){let r=e.$?.type;if(!r||!Ie(r))return"/* Error: io.async must return a Future type */";let i=Bt(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(D(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let S=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;if(S&&ee(S)){let I=S.type?.return?.type;if(I&&D(I)&&I.resolvedConcreteType)o=I.resolvedConcreteType;else if(S.body?.$?.type){let z=S.body.$.type;D(z)&&z.resolvedConcreteType?o=z.resolvedConcreteType:D(z)||(o=z)}}}let a=U(o,n),s=e.$?.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,_=e.$?.runtimeArgExprsInOrder?.[0];if(!_?.$)return"/* Error: Missing closure argument for io.async */";let p=P(_,t,n),f=_.$.type,d,h;if(D(f)&&f.resolvedConcreteType){let b=f.resolvedConcreteType,S=n.implClosureCallMap.get(b.id);S&&(d=S.functionCName);let I=n.types[b.id];I&&(h=I.cName)}if(!d||!h)return"/* Error: no closure function or capture type for io.async sync path */";c.emitDeclarationLine(`struct ${s}_struct {`),c.emitDeclarationLine(" __yo_ref_header_t header;"),c.emitDeclarationLine(" int state;"),de(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(` ${h} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let g="";for(let b in n.functions){let S=n.functions[b];if(S.cName===d){let I=kt(S.value.type);I.length>0&&(g=", "+I.map(z=>`(void*)sm->__capture.${z.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),de(o)?c.emitDeclarationLine(` ${d}(&sm->__capture${g});`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture${g});`),g&&(c.emitDeclarationLine(" if (__yo_effect_escaped) {"),c.emitDeclarationLine(" __yo_effect_escaped = 0;"),c.emitDeclarationLine(" sm->state = -2;"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" return;"),c.emitDeclarationLine(" }")),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let y=_.$.captureType,v=y&&Ve(y)?Lr(y,n):void 0,T=y&&Ve(y)?Un(y,n):void 0,$=Lr(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||$)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),$&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${$}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let C=e.$?.variableName||"__io_async_result",L=_t(r,C,n);if(c.emitLine(`${t}${L} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${C}, 0, sizeof(${s}));`),c.emitLine(`${t}${C}->header.ref_count = 1;`),n.needsCycleGC&&(c.emitLine(`${t}${C}->header.gc_flags = 0;`),c.emitLine(`${t}${C}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${C}->header.gc_next = NULL;`),c.emitLine(`${t}${C}->header.gc_prev = NULL;`)),n.needsCycleGC)c.emitLine(`${t}${C}->header.dispose_fn = (void(*)(void*))${l};`);else{n.disposeTypeIds||(n.disposeTypeIds=new Map,n.nextDisposeTypeId=1);let b=n.disposeTypeIds.get(l);b===void 0&&(b=n.nextDisposeTypeId,n.nextDisposeTypeId=b+1,n.disposeTypeIds.set(l,b)),c.emitLine(`${t}${C}->header.type_id = ${b};`)}return n.needsCycleGC&&c.emitLine(`${t}${C}->header.traverse_fn = NULL;`),c.emitLine(`${t}${C}->__capture = ${p};`),T&&c.emitLine(`${t}${C}->__capture = ${T}(${C}->__capture);`),c.emitLine(`${t}${C}->state = 0;`),c.emitLine(`${t}${C}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${C}->continuation_fn = NULL;`),c.emitLine(`${t}${C}->continuation_sm = NULL;`),C}function u_(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];ee(o)&&(Wr(o.type,t),si(o.body,t))}if(t.moduleLevelInitExprs)for(let i of t.moduleLevelInitExprs)si(i,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(Wr(o.value.type,t),o.value.specializedType&&Wr(o.value.specializedType,t),si(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&Gt(a.value.type,t),si(a.body,t)}}}function Wr(e,t){for(let n of e.parameters)Gt(n.type,t);for(let n of e.forallParameters)Gt(n.type,t);Gt(e.return.type,t)}function si(e,t){if(e.$&&e.$.type&&Gt(e.$.type,t),e.$&&e.$.value&&ee(e.$.value)){let n=e.$.value;n.isControlFunction?(Wr(n.type,t),Wt(n.body,t)):t.functions[n.funcId]||n.type.parameters.map(o=>o.type).some(o=>D(o)&&Ie(o)&&!o.resolvedConcreteType)||(t.functions[n.funcId]={value:n,cName:oe(n.funcId)},Wr(n.type,t),Wt(n.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let n of e.$.deferredDropExpressions)si(n,t);if(e.$&&e.$.macroExpansion&&si(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:n}of e.$.runtimeDestructurings)Gt(n,t);if(e.$&&e.$.captureType&&pe(e.$.captureType)){let n=e.$.captureType;if(!t.types[n.id]){t.types[n.id]={type:n,cName:`__yo_${n.id}`};for(let r of n.fields)Gt(r.type,t);for(let r of n.trait.fields)if(r.assignedValue&&ee(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},Wr(i.type,t),Wt(i.body,t))}}}switch(e.tag){case"FnCall":if(E(e,V.test))break;si(e.func,t);for(let n of e.args)si(n,t);break;case"Atom":e.$?.value&&R(e.$.value)&&Gt(e.$.value.value,t);break}}function Gt(e,t){if(!t.types[e.id]){if(D(e)&&Jt(e)){if(e.resolvedConcreteType){Gt(e.resolvedConcreteType,t);return}let n=cn(e);n&&Gt(n,t);return}if(D(e)&&Ie(e)){let n=Bt(e);n&&Gt(n.isFuture.outputType,t);return}if(D(e)&&e.resolvedConcreteType){Gt(e.resolvedConcreteType,t);return}if(!me(e)){if(pe(e)||ot(e)||ge(e)||Se(e)||Ae(e)||Ce(e)||Le(e)||Ge(e)||xt(e)||wt(e)){let n=Ge(e)?U(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},pe(e))for(let r of e.fields)Gt(r.type,t);if(ge(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)Gt(i.type,t)}if(ot(e))for(let r of e.fields)Gt(r.type,t);if(Ae(e)){let r=e;for(let i of r.requiredTraits)Gt(i.traitType,t)}if(xt(e)){let r=e;Gt(r.childType,t),U(r,t)}if(wt(e)){let r=e;Gt(r.childType,t),U(r,t)}if(Ge(e)&&Gt(e.childType,t),Ce(e)||Le(e)){for(let r of e.fields)Gt(r.type,t);for(let r of e.fields)if(r.assignedValue&&ee(r.assignedValue)){let i=r.assignedValue,o=i.type;if(o.parameters.every(s=>s.isCompileTimeOnly)&&o.return.isCompileTimeOnly)continue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:oe(i.funcId)},Wr(i.type,t),Wt(i.body,t))}else if(r.assignedValue&&(Ye(r.assignedValue)||mt(r.assignedValue))){let i=r.assignedValue;la(i,t,!1)}}}else if(ke(e)){let n=e,r=n.childType,i=n.length;if(Ue(i)){Gt(r,t);let o=U(r,t),a=`Array_${oe(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(Ee(e)){if(Gt(e.childType,t),Ge(e.childType)){let r=e.childType.childType;Gt(r,t);let i=U(r,t),o=`Slice_${oe(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:U(e,t)}}else Wc.has(e.tag)&&(t.types[e.id]={type:e,cName:U(e,t)});e.trait&&Gt(e.trait,t)}}}function Ni(e){if(e.$&&e.$.value&&ue(e.$.value)&&!(G(e.$.type)&&e.$.type.isExtern)){if(!de(e.$.type))return!0}if(F(e)){if(Ni(e.func))return!0;for(let t of e.args)if(!(t.$?.type&&de(t.$.type))&&Ni(t))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&de(e.$.type))return!1;if(Ni(e.$.macroExpansion))return!0}if(e.$?.deferredDupExpressions){for(let t of e.$.deferredDupExpressions)if(Ni(t))return!0}if(e.$?.deferredDropExpressions){for(let t of e.$.deferredDropExpressions)if(Ni(t))return!0}return!1}function la(e,t,n=!0){for(let r=0;r<e.fields.length;r++){let i=e.fields[r],o=e.type.fields[r];if(ee(i)){let a=o.label;if(a==="main")t.functions[i.funcId]={value:i,cName:"__yo_user_main"};else if(t.isLibrary)if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=oe(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:oe(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:oe(i.funcId)};else if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=oe(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:oe(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:oe(i.funcId)};Wt(i.body,t)}}}function c_(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&ee(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:oe(r.funcId)},Wt(r.body,t)):r&&Ye(r)&&c_(r,t)}}function Wt(e,t){if(e.$?.value&&Ye(e.$.value)){let i=e.$.value;c_(i,t)}if(F(e)&&E(e,V.test)||F(e)&&E(e,k.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Wt(e.$.macroExpansion,t),e.$?.effectAnalysis){let i=e.$.effectAnalysis.handlerValue;i&&ee(i)&&Wt(i.body,t)}if(e.$&&e.$.closureFunctionValue){let i=e.$.closureFunctionValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:oe(i.funcId)},Wt(i.body,t))}if(e.$?.indexMethodValue&&ee(e.$.indexMethodValue)){let i=e.$.indexMethodValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:oe(i.funcId)},Wt(i.body,t))}if(F(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let i=e.$.type,o=e.args[0];if(Ae(i)&&o&&o.$?.type){let a=o.$.type,s=e.$.dynCallTraitValues;if(s.length>0&&(dt(a)||xn(a))){let l=xn(a)?a.fields[0].type:a,u=`${l.id}_${i.id}`;t.dynImpls.set(u,{dynType:i,concreteType:l,dataType:a,traitValues:s})}}}if(F(e)){let i=e.func.$?.type,o=e.func.$?.value;if(e.func.token.value==="?=")return;if(G(i)){if(ee(o)&&o.isControlFunction){Wt(o.body,t);for(let a of e.args)Wt(a,t);return}if(ee(o)){if(o.type.return.isCompileTimeOnly||Cs(o)&&!o.specializedType)return;if(o.specializedType&&hr(o.specializedType)&&kt(o.specializedType).length===0){Wt(e.func,t);for(let s of e.args)Wt(s,t);return}if(!t.functions[o.funcId]){let a=!1;if(Ni(o.body)){let s=o.specializedType??o.type;if(a=s.implicitParameters.length>0&&(kt(s).length>0||!hr(o.type)&&o.type.implicitParameters.length>0),!a)return}if(!a&&!(kt(o.specializedType??o.type).length>0)&&(o.specializedType??o.type).parameters.map(c=>c.type).some(c=>D(c)&&Ie(c)&&!c.resolvedConcreteType))return;t.functions[o.funcId]={value:o,cName:oe(o.funcId)},Wt(o.body,t)}}else if(i.isExtern==="c"){let a=i.externName?i.externName:B(e.func)?e.func.token.value:i.id;t.externFunctions[i.id]={type:i,cName:a}}else if(i.isExtern==="yo"){let a=i.externName;if(!(a&&a.startsWith("__yo_"))){let s=a?oe(a):B(e.func)?oe(e.func.token.value):oe(i.id);t.externFunctions[i.id]={type:i,cName:s}}}}Wt(e.func,t);for(let a of e.args)Wt(a,t)}let n=e.$?.type,r=e.$?.value;if(G(n)){if(ee(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:oe(r.funcId)}),r.specializedFunctionCaches)for(let i of r.specializedFunctionCaches){let o=i.specializedFunction;o&&!t.functions[o.funcId]&&(o.isModuleEffectMember=!0,t.functions[o.funcId]={value:o,cName:oe(o.funcId)},Wt(o.body,t))}Wt(r.body,t);return}if(ee(r)){if(Cs(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(Ni(r.body))return;t.functions[r.funcId]={value:r,cName:oe(r.funcId)},Wt(r.body,t)}}if(R(e.$?.value)&&Gt(e.$.value.value,t),e.$?.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)Wt(i,t);if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions)Wt(i,t);if(e.$?.dynCallTraitValues)for(let i of e.$.dynCallTraitValues)la(i,t,!1)}function __(e){let t=k.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!pe(r)||!r.isReferenceSemantics)continue;let i=jn({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&ee(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:oe(a.funcId)},Wr(a.type,e),Wt(a.body,e)}}}function p_(e){let t=e.emitter,n=new Set;for(let[,r]of e.dynImpls){let i=e.types[r.dynType.id]?.cName||`__yo_dyn_${r.dynType.id}`;n.has(i)||(n.add(i),t.emitLine(`${i} __yo_dup_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function f_(e){let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,r]of e.dynImpls){let i=D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,a=`__yo_dyn_box_${e.types[i.id]?.cName||`unknown_${i.id}`}`;if(n.has(a))continue;n.add(a);let s=U(i,e);t.emitLine(`static ${a}* __yo_new_${a}(${s} value) {`),t.emitLine(` ${a}* box = (${a}*)__yo_malloc(sizeof(${a}));`),t.emitLine(" box->header.ref_count = 1;"),e.needsCycleGC&&(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;"));let l=`__yo_dispose_${a}`;if(e.needsCycleGC)t.emitLine(` box->header.dispose_fn = ${l};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let _=e.disposeTypeIds.get(l);_===void 0&&(_=e.nextDisposeTypeId,e.nextDisposeTypeId=_+1,e.disposeTypeIds.set(l,_)),t.emitLine(` box->header.type_id = ${_};`)}e.needsCycleGC&&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(`static void __yo_dispose_${a}(void* ptr) {`),t.emitLine(` ${a}* box = (${a}*)ptr;`);let c=(D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType).trait?.fields.find(_=>_.label===k.___drop[0]);if(c&&c.assignedValue&&ee(c.assignedValue)){let _=e.functions[c.assignedValue.funcId]?.cName;_&&t.emitLine(` ${_}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function d_(e){let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[n,r]of e.dynImpls){let i=r.dataType,o=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:a}of r.dynType.requiredTraits){if(!At(a))continue;let s=a.isFn.callType,l=U(s.return.type,e),u=`__yo_wrap_${n}_call`,c=["void* self_ptr"];for(let _=0;_<s.parameters.length;_++){let p=s.parameters[_],f=U(p.type,e);c.push(`${f} arg${_+1}`)}if(t.emitDeclarationLine(`static ${l} ${u}(${c.join(", ")}) {`),xn(i)){let _=e.types[i.id]?.cName||`unknown_${i.id}`,p=oe(i.fields[0].label);t.emitDeclarationLine(` ${_}* box = (${_}*)self_ptr;`);let f=i.fields[0].type,d=D(f)&&f.resolvedConcreteType?f.resolvedConcreteType:f,h=e.implClosureCallMap.get(d.id),g=(()=>{if(h)return h.functionCName;for(let[,v]of Object.entries(e.functions))if(v.value.closureInfo?.captureType?.id===d.id)return v.cName})(),y=[];if(g){y.push(`(void*)&box->${p}`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);Nr(s.return.type)?t.emitDeclarationLine(` ${g}(${y.join(", ")});`):t.emitDeclarationLine(` return ${g}(${y.join(", ")});`)}else{y.push(`box->${p}.data`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);Nr(s.return.type)?t.emitDeclarationLine(` box->${p}.call(${y.join(", ")});`):t.emitDeclarationLine(` return box->${p}.call(${y.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let _=0;_<s.parameters.length;_++)t.emitDeclarationLine(` (void)arg${_+1};`);Nr(s.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${l} zero = (${l})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let a=0;a<r.dynType.requiredTraits.length;a++){let{traitType:s}=r.dynType.requiredTraits[a];if(At(s))continue;let l=r.traitValues[a];if(!l){t.emitDeclarationLine(`/* Warning: Module value missing for module ${a} */`);continue}let c=l.type.fields;for(let _=0;_<c.length;_++){let p=c[_];if(p.label==="Self"||o.has(p.label))continue;let f=l.fields[_];if(!f||!ee(f)){t.emitDeclarationLine(`/* Warning: Module field ${p.label} is not a function value */`);continue}let d=p.type;if(!G(d)){t.emitDeclarationLine(`/* Warning: Module field ${p.label} is not a function type */`);continue}let h=f.funcId,g=e.functions[h]?.cName;if(!g){t.emitDeclarationLine(`/* Warning: Impl function for ${p.label} not found */`);continue}let y=`__yo_wrap_${n}_${p.label}`,v=U(d.return.type,e),T=["void* self_ptr"];for(let b=1;b<d.parameters.length;b++){let S=d.parameters[b],I=U(S.type,e);T.push(`${I} arg${b}`)}t.emitDeclarationLine(`static ${v} ${y}(${T.join(", ")}) {`);let $=d.parameters[0]?.type,C;if(xn(i)){let b=e.types[i.id]?.cName||`unknown_${i.id}`,S=oe(i.fields[0].label);t.emitDeclarationLine(` ${b}* box = (${b}*)self_ptr;`),$&&Ee($)?C=`&box->${S}`:C=`box->${S}`}else{let b=U(r.concreteType,e);t.emitDeclarationLine(` ${b} concrete_value = (${b})self_ptr;`),$&&Ee($)?C="&concrete_value":C="concrete_value"}let L=[C];for(let b=1;b<d.parameters.length;b++)L.push(`arg${b}`);Nr(d.return.type)?t.emitDeclarationLine(` ${g}(${L.join(", ")});`):t.emitDeclarationLine(` return ${g}(${L.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function m_(e){let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn TypeId Statics ==="),t.emitDeclarationLine("// Unique static per concrete type \u2014 address is the runtime TypeId"),t.emitDeclarationLine("");let n=new Set;e.typeIdStatics||(e.typeIdStatics=new Map);for(let[,r]of e.dynImpls){let i=D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,o=e.types[i.id]?.cName||`unknown_${i.id}`,a=`__yo_typeid_${o}`;!n.has(a)&&!e.typeIdStatics.has(i.id)&&(n.add(a),e.typeIdStatics.set(i.id,a),t.emitDeclarationLine(`static const char ${a} = 0; // TypeId for ${o}`))}t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[r,i]of e.dynImpls){let o=e.types[i.dynType.id]?.cName||`__yo_dyn_${i.dynType.id}`,a=D(i.concreteType)&&i.concreteType.resolvedConcreteType?i.concreteType.resolvedConcreteType:i.concreteType,s=e.types[a.id]?.cName||`unknown_${a.id}`,l=`__yo_vtable_${r}`,u=`${o}_vtable`,c=`__yo_typeid_${s}`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${i.dynType.requiredTraits.map(({traitType:f})=>f.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${c},`);let _=new Set,p=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:f}of i.dynType.requiredTraits){if(At(f)){let d=`__yo_wrap_${r}_call`;t.emitDeclarationLine(` .call = ${d},`),_.add("call");continue}for(let d of f.fields)if(d.label!=="Self"&&!p.has(d.label)&&!_.has(d.label)&&(_.add(d.label),G(d.type))){let h=d.type;if(h.parameters.length>0){let g=h.parameters[0];if(g&&g.label==="self"){let y=`__yo_wrap_${r}_${d.label}`;t.emitDeclarationLine(` .${oe(d.label)} = ${y},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function y_(e,t){let r=Ht(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
|
|
194
|
+
registered type IDs: ${Object.keys(t.types).filter(o=>o.startsWith("sometype")).join(", ")}`)}return Jt(n)&&n.resolvedConcreteType||n.resolvedConcreteType?U(n.resolvedConcreteType,t):"void*"}case"Ptr":{let r=e.childType;if(Ge(r)){let a=U(r.childType,t),s=`Slice_${oe(a)}`;return t.sliceStructTypes.has(s)||t.sliceStructTypes.set(s,{childType:a}),`${s}*`}let i=U(r,t);return dt(r)?`${i}*`:ge(r)&&tn(r)?`${i}*`:`${i}*`}case"Iso":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Iso_${oe(o)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(a)||t.isoTypes.set(a,{childTypeCName:i,isoType:n}),a}case"Arc":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Arc_${oe(o)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(a)||t.arcTypes.set(a,{childTypeCName:i,arcType:n}),a}}return`// Unknown type: ${A(e)}`}function _t(e,t,n){let r=oe(t);return`${U(e,n)} ${r}`}function Qt(e,t,n){let r=n.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${A(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function oi(e){return e.type.return.isCompileTimeOnly}function Fr(e){let t=e.body,n=null;return F(t)&&E(t,"begin")&&t.args.length===1&&F(t.args[0])&&E(t.args[0],Si)?n=t.args[0].func.token.value:F(t)&&E(t,Si)&&(n=t.func.token.value),n&&k.__yo_as.includes(n)?null:n}function tn(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(Ee(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function Pn(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Te(e,t){if(!t)return oe(e);let n=Y(t,e);if(n.length>0){let r=n[n.length-1];return oe(r.name,r.type.isExtern==="c")}return oe(e)}function Za(e){if(F(e)&&e.args.length>=1){let t=e.args[0];if(t&&B(t))return t.token.value}if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[0])&&B(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0])return e.func.args[0].token.value}function Nn(e){if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(!F(e)||!E(e,k.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!B(t)))return t.token.value}function ia(e){if(e){if(Yt(e))return e;if(F(e)){let t=e;for(let n of t.args){let r=ia(n);if(r)return r}}}}var kl;function Yc(e){kl=e}function P(e,t,n){if(!kl)throw new Error("Internal Error: generateExpr function is not set.");return kl(e,t,n)}function Gr(e,t,n){let r=D(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Ve(r))return"";if(ke(r)){let i=r.length;if(!Ue(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=Gr(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Se(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=D(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Ve(s)){let l=Gr(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Ae(r))return`__yo_decr_rc((void*)(${e}).data)`;if(dt(r))return`__yo_decr_rc((void*)(${e}))`;if(xt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(wt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(pe(r)||ge(r)){let i=Lr(r,n);if(i)return`${i}(${e})`}return""}function co(e,t,n){let r=D(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(ke(r)){let i=r.length;if(!Ue(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Re("")}`,a=`i_${Re("")}`,s=U(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=co(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Se(r)){let i=n.emitter,o=`temp_dup_tuple_${Re("")}`,a=U(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Ve(u)){let c=co(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Ae(r))return`((${U(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(dt(r))return`((${U(r,n)})__yo_incr_rc((void*)(${e})))`;if(xt(r))return`((${U(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(wt(r))return`((${U(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(pe(r)||ge(r)){let i=Un(r,n);if(i)return`${i}(${e})`}return e}function Lr(e,t){if(pe(e)||ge(e)||Ae(e)||D(e)||xt(e)||wt(e)){let n=e.trait.fields.find(r=>r.label===k.___drop[0]);if(n&&n.assignedValue&&ee(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function Un(e,t){if(pe(e)||ge(e)||Ae(e)||D(e)||xt(e)||wt(e)){let n=e.trait.fields.find(r=>r.label===k.___dup[0]);if(n&&n.assignedValue&&ee(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function bt(e,t,n){let r=n.emitter;if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){if(n.shortCircuitHandledDropVarNames){let a=Nn(i);if(a&&n.shortCircuitHandledDropVarNames.has(a)){n.shortCircuitHandledDropVarNames.delete(a);continue}}let o=P(i,t,n);o&&r.emitLine(`${t}${o};`)}}function st(e,t,n){let r=n.emitter;if(e.$?.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(F(i)){let o=P(i,t,n);o&&r.emitLine(`${t}${o};`)}}}function sn(e,t,n){if(Ue(e)){let r=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(r.includes(".")?r:r+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?r.includes(".")?r:r+".0":e.tag==="U64"||e.tag==="Usize"?r+"ULL":e.tag==="I64"||e.tag==="Isize"?r+"LL":e.tag==="U32"?r+"U":r}else{if(We(e))return e.value?"true":"false";if(we(e)){let r=n?.$?.convertedRuntimeType||n?.$?.type;if(r&&An(r)&&r.fields.length===1){let i=r.fields[0].type;if(Ge(i)){let o=U(r,t),a=JSON.stringify(e.value),s=Buffer.byteLength(e.value,"utf8");return`(${o}){ .data = (uint8_t*)${a}, .length = ${s} }`}}if(r&&Ge(r)){let i=U(r,t),o=JSON.stringify(e.value),a=Buffer.byteLength(e.value,"utf8");return`(${i}){ .data = (uint8_t*)${o}, .length = ${a} }`}if(!r||ht(r)){for(let i of Object.values(t.types))if(An(i.type)&&i.type.fields.length===1&&Ge(i.type.fields[0].type)){let o=JSON.stringify(e.value),a=Buffer.byteLength(e.value,"utf8");return`(${i.cName}){ .data = (uint8_t*)${o}, .length = ${a} }`}}return JSON.stringify(e.value)}else if(Lt(e)){let r=e.type,i=tn(r);if(i){let l=r.variants.find(u=>u.name===e.variantName);if(!l)return`// Error: Variant ${e.variantName} not found in enum`;if(!l.fields||l.fields.length===0)return"NULL";if(l.fields.length===1&&e.fields.length===1)return sn(e.fields[0],t,{$:{type:i,convertedRuntimeType:i}})}if(Pn(r))return Qt(r,e.variantName,t);let a=t.types[r.id]?.cName;if(!a)return`// Error: No C type name found for enum ${A(r)}`;let s=Qt(r,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${a}){ .tag = ${s} }`;{let l=r.variants.find(c=>c.name===e.variantName);if(!l||!l.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let u=e.fields.map((c,_)=>{let p=l.fields[_];if(p&&!de(p.type)){let f=oe(p.label),d=sn(c,t);return`.${f} = ${d}`}return null}).filter(c=>c!==null);return u.length===0?`(${a}){ .tag = ${s} }`:`(${a}){ .tag = ${s}, .data = { .${e.variantName} = { ${u.join(", ")} } } }`}}else if(pn(e)){let r=e.type,i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for tuple ${A(r)}
|
|
195
|
+
`;let o=e.fields.map((a,s)=>{let l=sn(a,t);return`._${s} = ${l}`});return`(${i}){ ${o.join(", ")} }`}else if(Pt(e)){let r=e.type;if(r&&pe(r)){let i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for struct ${A(r)}
|
|
196
|
+
`;if(r.isNewtype&&r.fields.length===1&&e.fields.length===1){let o=sn(e.fields[0],t);return`((${i})(${o}))`}if(r.isReferenceSemantics){let o=e.fields.map(s=>sn(s,t));return`${`__yo_new_${i}`}(${o.join(", ")})`}else{let o=e.fields.map((a,s)=>{let l=a,u=Se(r)?`_${s}`:oe(r.fields[s].label),c=sn(l,t);return`.${u} = ${c}`});return`(${i}){ ${o.join(", ")} }`}}}else if(Fn(e)){let r=e.type,i=U(r,t),o=e.elements.map(a=>sn(a,t));return`(${i}){ .data = { ${o.join(", ")} } }`}else if(ee(e)){let r=t.functions[e.funcId]?.cName;return r||`// Error: No C function name found for function value with ID ${e.funcId}
|
|
197
|
+
`}else if(R(e)){let r=e.value;if(r)return t.types[r.id]?t.types[r.id].cName:`/* Error: No C type name found for type ${A(r)} */`}else if(Yn(e)){let r=e.targetValue[0];if(r){let i=n?.$?.convertedRuntimeType||n?.$?.type;if(i&&Ee(i)){let o=i.childType,a=sn(r,t,{$:{type:o,convertedRuntimeType:o}});if(a&&!a.startsWith("/*")&&!a.startsWith("//"))return`(&${a})`}}return`/* Error: Cannot generate pointer value ${De(e)} */`}}return`/* skip generating: ${De(e)} */`}function _o(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(_o(e.func,t,n))return!0;for(let r of e.args)if(_o(r,t,n))return!0}return!1}function Ng(e,t,n){for(let r=0;r<t.length;r++)if(_o(e,t[r].expr,n))return r;return-1}function Hc(e,t,n){let r=[],i=n?.shouldSkipBody;if(e.tag!=="FnCall"||!E(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=Ng(l,t,i),c=n?.handleReturnStatements&&(Et(l,"return")||E(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n?.handleSequentialSuspensions)for(let _=u+1;_<t.length&&_o(l,t[_].expr,i);_++)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 Fl(e,t){let r=Hc(e,t,{shouldSkipBody:Yt,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 Mg(e,t){return _o(e,t,Yt)}function jc(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&&Mg(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(E(a,V.while)||E(a,V.cond)||E(a,V.match))&&gn(a);if((l||u)&&e.awaitPoint)yo(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=P(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=P(a,t,n);!c||!a.$||ut(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function yo(e,t,n,r,i){let o=i.emitter;if(e.tag==="FnCall"&&En(e)){let a=e.args[0];if(!a){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let s=P(a,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${s};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&E(e,":=")){let a=e.args[0],s=e.args[1];if(!a||!s){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(s.tag==="FnCall"&&En(s)){let l=s.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}let u=a.token?.value;if(!u||!a.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let c=P(l,r,i);o.emitLine(`${r}// Store Future for await (variable: ${u})`),o.emitLine(`${r}sm->await_future_${t.index} = ${c};`)}else o.emitLine(`${r}// Store Future for await (variable: ${u}) - future already in state machine`);return}if(s.tag==="FnCall"&&E(s,V.cond)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=Y(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}oa(s,t,r,i,l);return}if(s.tag==="FnCall"&&E(s,V.match)){let l;if(a.tag==="Atom"&&a.token.type==="identifier"&&a.$){let u=a.token.value,c=Y(a.$.env,u);c.length>0&&(l=c[c.length-1].id)}aa(s,t,r,i,l);return}}if(e.tag==="FnCall"&&E(e,"=")){let a=e.args[0],s=e.args[1];if(a&&s){if(s.tag==="FnCall"&&E(s,V.cond)){let l=P(a,r,i);oa(s,t,r,i,void 0,l||void 0);return}if(s.tag==="FnCall"&&E(s,V.match)){let l=P(a,r,i);aa(s,t,r,i,void 0,l||void 0);return}}}if(e.tag==="FnCall"&&E(e,V.cond)){oa(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,V.match)){aa(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,V.while)){Ll(e,t,r,i);return}o.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),o.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FnCall"?e.func.tag==="Atom"?e.func.token?.value:e.func.tag:"N/A"}`)}function oa(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!E(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 g=0;g<s.length;g++){let y=s[g];if(y.tag==="FnCall"&&E(y,"=>")){let v=y.args[0];if(v&&!(We(v.$?.value)&&v.$.value.value===!1)){u=g;break}}}let c=!1;if(u>=0){let g=s[u];if(g.tag==="FnCall"&&E(g,"=>")){let y=g.args[0];y&&We(y.$?.value)&&y.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let g=s[u],y=F(g)?g.args[1]:void 0;if(y)if(ai(y)){let C=mo(y,t,n,r),L=r.asyncWhileLoopInfo?.get(t.index);if(L&&C.length>0){let S=r.asyncCondBranchInfo?.get(t.index)?.branches.some(I=>I.hasAwait&&I.remainingExprs&&I.remainingExprs.length>0)??!1;L.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:C,deferredDropExpressions:y.$?.deferredDropExpressions,skipCondBranchCheck:S},l.push({index:u,value:y,hasAwait:!0,remainingExprs:[],deferredDropExpressions:y.$?.deferredDropExpressions})}else l.push({index:u,value:y,hasAwait:!0,remainingExprs:C,deferredDropExpressions:y.$?.deferredDropExpressions})}else{if(po(e,y,r,i,o))fo(y,n,r);else if(F(y)&&E(y,V.begin)){let C=y.args;for(let L=0;L<C.length;L++){let b=C[L],S=P(b,n,r);if(S==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let I=S==="break"||S==="continue"||S?.includes("return");S&&(I||b.$&&!ut(b.$.env.modulePath,S))&&a.emitLine(`${n}${S};`)}}if(y.$?.deferredDropExpressions)for(let L of y.$.deferredDropExpressions){let b=P(L,n,r);b&&a.emitLine(`${n}${b};`)}}else{let C=P(y,n,r);if(C==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let L=C==="break"||C==="continue"||C?.includes("return");C&&(L||y.$&&!ut(y.$.env.modulePath,C))&&a.emitLine(`${n}${C};`)}}l.push({index:u,value:y,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some($=>$.hasAwait&&$.remainingExprs&&$.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let _=!1,p=0,f=n;for(let g=0;g<s.length;g++){let y=s[g];if(y.tag!=="FnCall"||!E(y,"=>")){a.emitLine(`${f}// Error: Expected => pair in cond`);continue}let v=y.args[0],T=y.args[1];if(!v||!T){a.emitLine(`${f}// Error: Invalid pair in cond`);continue}if(We(v.$?.value)&&v.$.value.value===!1)continue;_&&(a.emitLine(`${f}else {`),p++,f+=" ");let $=g===s.length-1&&v.tag==="Atom"&&v.token?.value==="true"?null:P(v,f,r);$?a.emitLine(`${f}if (${$}) {`):a.emitLine(`${f}{`),_=!0;let C=`${f} `;if(ai(T)){a.emitLine(`${C}sm->cond_branch_${t.index} = ${g};`);let b=mo(T,t,C,r),S=r.asyncWhileLoopInfo?.get(t.index);if(S&&b.length>0){let z=r.asyncCondBranchInfo?.get(t.index)?.branches.some(M=>M.hasAwait&&M.remainingExprs&&M.remainingExprs.length>0)??!1;S.condBranchPostWhileExprs={branchIndex:g,condBranchFieldIndex:t.index,exprs:b,deferredDropExpressions:T.$?.deferredDropExpressions,skipCondBranchCheck:z},l.push({index:g,value:T,hasAwait:!0,remainingExprs:[],deferredDropExpressions:T.$?.deferredDropExpressions})}else l.push({index:g,value:T,hasAwait:!0,remainingExprs:b,deferredDropExpressions:T.$?.deferredDropExpressions})}else{if(po(e,T,r,i,o))fo(T,C,r);else if(F(T)&&E(T,V.begin)){let b=T.args;for(let S=0;S<b.length;S++){let I=b[S],z=P(I,C,r);if(z==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let M=z==="break"||z==="continue"||z?.includes("return");z&&(M||I.$&&!ut(I.$.env.modulePath,z))&&a.emitLine(`${C}${z};`)}}if(T.$?.deferredDropExpressions)for(let S of T.$.deferredDropExpressions){let I=P(S,C,r);I&&a.emitLine(`${C}${I};`)}}else{let b=P(T,C,r);if(b==="break"&&t.isInsideWhile)a.emitLine(`${C}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${C}goto while_loop_${t.index}_end;`);else{let S=b==="break"||b==="continue"||b?.includes("return");b&&(S||T.$&&!ut(T.$.env.modulePath,b))&&a.emitLine(`${C}${b};`)}}l.push({index:g,value:T,hasAwait:!1})}a.emitLine(`${f}}`)}for(let g=0;g<p;g++)f=f.slice(0,-2),a.emitLine(`${f}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map),(r.asyncCondBranchInfo.get(t.index)?.branches.some(g=>g.hasAwait&&g.remainingExprs&&g.remainingExprs.length>0)??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function po(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!Kc(t)}function fo(e,t,n){let r=n.emitter,i=de(e.$?.type);if(F(e)&&E(e,V.begin)){let o=e.args;for(let s=0;s<o.length-1;s++){let l=o[s],u=P(l,t,n);u&&l.$&&!ut(l.$.env.modulePath,u)&&r.emitLine(`${t}${u};`)}let a=o[o.length-1];if(a&&!i){let s=P(a,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions){let l=P(s,t,n);l&&r.emitLine(`${t}${l};`)}}else if(!i){let o=P(e,t,n);o&&r.emitLine(`${t}sm->result = ${o};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let o of n.pendingDeferredDrops){let a=P(o,t,n);a&&a.includes("sm->")&&r.emitLine(`${t}${a};`)}Br({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function ai(e){if(e.tag==="FnCall"&&En(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(ai(t))return!0}return!1}function Kc(e){if(Et(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Kc(t))return!0}return!1}function aa(e,t,n,r,i,o){let a=r.emitter;if(e.tag!=="FnCall"||!E(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=P(s,n,r),c=s.$?.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if(e.$?.isPrimitiveMatch){Og(e,l,u,t,n,r,i,o);return}if(!ge(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let _=c,p=r.types[_.id]?.cName;if(!p){a.emitLine(`${n}// Error: enum type has no C name`);return}let f=tn(_);if(f){let d=-1,h=-1,g;for(let y=0;y<l.length;y++){let v=l[y];if(F(v)&&E(v,"=>",2)){let T=v.args[0];if(T&&F(T)&&E(T,"."))d=y;else if(T&&F(T)){let $=T.func;$&&F($)&&E($,".")&&(h=y,T.args.length>0&&B(T.args[0])&&(g=T.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),h>=0){let y=l[h];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(g){let T=r,$=!1,C;if(T.stateMachineVariables){for(let[L,b]of T.stateMachineVariables)if(b.name===g){$=!0,C=L;break}}if($&&C){let L=_n(C,"local",T.stateMachineFieldAliases);a.emitLine(`${n} sm->${L} = ${u};`)}else a.emitLine(`${n} ${U(f,r)} ${g} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${h};`),ai(v)){let T=mo(v,t,n+" ",r);if(T.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:h,value:v,hasAwait:!0,remainingExprs:T,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(po(e,v,r,i,o))fo(v,n+" ",r);else{let T=P(v,n+" ",r);if(i){let $=oe(`var_${i}`);T&&a.emitLine(`${n} sm->${$} = ${T};`)}else o?T&&a.emitLine(`${n} ${o} = ${T};`):T&&v.$&&!ut(v.$.env.modulePath,T)&&a.emitLine(`${n} ${T};`)}}}if(a.emitLine(`${n}} else {`),d>=0){let y=l[d];if(!F(y))a.emitLine(`${n} // Error: Expected => in case`);else{let v=y.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${d};`),ai(v)){let T=mo(v,t,n+" ",r);if(T.length>0){let $=r;$.asyncCondBranchInfo||($.asyncCondBranchInfo=new Map);let C=$.asyncCondBranchInfo.get(t.index)||{branches:[]};C.branches.push({index:d,value:v,hasAwait:!0,remainingExprs:T,deferredDropExpressions:v.$?.deferredDropExpressions}),$.asyncCondBranchInfo.set(t.index,C)}}else if(po(e,v,r,i,o))fo(v,n+" ",r);else{let T=P(v,n+" ",r);if(i){let $=oe(`var_${i}`);T&&a.emitLine(`${n} sm->${$} = ${T};`)}else o?T&&a.emitLine(`${n} ${o} = ${T};`):T&&v.$&&!ut(v.$.env.modulePath,T)&&a.emitLine(`${n} ${T};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let d=!1;for(let h=0;h<l.length;h++){let g=l[h];if(!F(g)||!E(g,"=>",2))continue;let y=g.args[0],v=g.args[1],T=B(y)&&y.token.value==="_",$;if(!T){if(F(y)&&E(y,".",1))$=y.args[0].token.value;else if(F(y)){let C=y.func;C&&F(C)&&E(C,".",1)&&($=C.args[0].token.value)}}if(!T&&!$){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(T)d=!0,a.emitLine(`${n} default: {`);else{let C=`${p.toUpperCase()}_${$.toUpperCase()}`;a.emitLine(`${n} case ${C}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${h};`),F(y)&&y.args.length>=1){let C=y.func;if(C&&F(C)&&E(C,".")){let L=_.variants.find(b=>b.name===$);if(L&&L.fields)for(let b=0;b<Math.min(y.args.length,L.fields.length);b++){let S=y.args[b],I=L.fields[b];if(B(S)&&I){let z=S.token.value,M=oe(z),N=r,O=!1,Q;if(N.stateMachineVariables){for(let[K,te]of N.stateMachineVariables)if(te.name===z){O=!0,Q=K;break}}let ne=oe(I.label,I.type.isExtern==="c"),j=`${u}.data.${$}.${ne}`;if(O&&Q){let K=_n(Q,"local",N.stateMachineFieldAliases);a.emitLine(`${n} sm->${K} = ${j};`)}else{let K=U(I.type,r);a.emitLine(`${n} ${K} ${M} = ${j};`)}}}}}if(ai(v)){let C=mo(v,t,n+" ",r);if(C.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let b=L.asyncCondBranchInfo.get(t.index)||{branches:[]};b.branches.push({index:h,value:v,hasAwait:!0,remainingExprs:C,deferredDropExpressions:v.$?.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,b)}}else if(po(e,v,r,i,o))fo(v,n+" ",r);else{let C=P(v,n+" ",r);if(i){let L=oe(`var_${i}`);C&&a.emitLine(`${n} sm->${L} = ${C};`)}else o?C&&a.emitLine(`${n} ${o} = ${C};`):C&&v.$&&!ut(v.$.env.modulePath,C)&&a.emitLine(`${n} ${C};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}d||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function Dg(e){return F(e)?E(e,"|",2):!1}function wl(e){if(!Dg(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...wl(t),...wl(n)]}function Og(e,t,n,r,i,o,a,s){let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let c=0;c<t.length;c++){let _=t[c];if(!F(_)||!E(_,"=>",2))continue;let p=_.args[0],f=_.args[1];if(Et(p,"_"))l.emitLine(`${i} default:`);else{let d=p.$?.primitivePatternValues;if(d&&d.length>0){for(let h of d)if(h!==void 0){let g=sn(h,o);l.emitLine(`${i} case ${g}:`)}}else{let h=wl(p);for(let g of h){let y=g.$?.value;if(y!==void 0){let v=sn(y,o);l.emitLine(`${i} case ${v}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${c};`),ai(f)){let d=mo(f,r,i+" ",o);u.push({index:c,value:f,hasAwait:!0,remainingExprs:d,deferredDropExpressions:f.$?.deferredDropExpressions})}else{if(po(e,f,o,a,s))fo(f,i+" ",o);else{let d=P(f,i+" ",o);if(a){let h=oe(`var_${a}`);d&&l.emitLine(`${i} sm->${h} = ${d};`)}else s?d&&l.emitLine(`${i} ${s} = ${d};`):d&&f.$&&!ut(f.$.env.modulePath,d)&&l.emitLine(`${i} ${d};`)}u.push({index:c,value:f,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 mo(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!E(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(ai(l))if(s=!0,l.tag==="FnCall"&&E(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&En(u)){let c=u.args[0];if(c){let _=P(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${_};`)}}}else if(l.tag==="FnCall"&&En(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=P(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"&&E(l,V.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),oa(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&E(l,V.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),aa(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&E(l,V.while)&&Ll(l,t,n,r);else{let u=P(l,n,r);u&&l.$&&!ut(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Ll(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!E(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length<2||o.length>3){i.emitLine(`${n}// Error: while must have 2 or 3 arguments (condition, [step,] body)`);return}let a=o[0],s=o.length===3?o[1]:void 0,l=o.length===3?o[2]:o[1],u=Pg(l),c;u?(c=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=c+1):c=t.index,i.emitLine(`${n}sm->while_loop_${c}_active = true;`),i.emitLine(`${n}while_loop_${c}_start:`);let _=P(a,n,r);i.emitLine(`${n}if (!(${_})) {`),i.emitLine(`${n} sm->while_loop_${c}_active = false;`),i.emitLine(`${n} goto while_loop_${c}_end;`),i.emitLine(`${n}}`);let p=Rg(l,t,n,r,c);if(i.emitLine(`${n}while_loop_${c}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),u){let f=r.asyncWhileLoopInfo.get(t.index);f&&(f.outerWhileLoop={whileLoopIndex:c,conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:p})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:p})}function Rg(e,t,n,r,i){let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&E(e,"begin")?s=e.args:s=[e];let l=-1;for(let f=0;f<s.length;f++){let d=s[f];if(gn(d)){l=f;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,_=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...e.$?.deferredDropExpressions??[]];for(let f=0;f<l;f++){let d=s[f],h=P(d,n,r);h&&d.$&&!ut(d.$.env.modulePath,h)&&o.emitLine(`${n}${h};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=_;let p=s[l];if(F(p)&&E(p,V.while)&&gn(p)){Ll(p,t,n,r);for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}if(F(p)&&E(p,":=")){let f=p.args[1];if(f&&f.tag==="FnCall"&&En(f)){let d=f.args[0];if(d){let h=P(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${h};`)}}}else if(p.tag==="FnCall"&&En(p)){let f=p.args[0];if(f&&t.futureVariableId===void 0){let d=P(f,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}}else if(F(p)&&E(p,V.cond)){oa(p,t,n,r,void 0);for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}else if(F(p)&&E(p,V.match)){aa(p,t,n,r);for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}for(let f=l+1;f<s.length;f++)a.push(s[f]);return a}function Pg(e){let t=e.tag==="FnCall"&&E(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&E(n,V.while)&&gn(n))return!0;return!1}function Vi(e,t,n){if(e)switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let r=e.token.value,i=Y(e.$.env,r);if(i.length>0){let o=i[i.length-1];if(o&&!o.isCompileTimeOnly){let a=n.get(o.id)??o.id,s=o.isOwningTheSameRcValueAs?o.isOwningTheSameRcValueAs.id:a;t.add(s)}}}break;case"FnCall":if(Yt(e)){if(e.$?.deferredDupExpressions)for(let r of e.$.deferredDupExpressions)Vi(r,t,n);break}Vi(e.func,t,n);for(let r of e.args)Vi(r,t,n);if(e.$?.deferredDropExpressions)for(let r of e.$.deferredDropExpressions)Vi(r,t,n);if(e.$?.deferredDupExpressions)for(let r of e.$.deferredDupExpressions)Vi(r,t,n);break}}function Ja(e,t){let{awaitPoints:n,capturedVariables:r,variableIdRemapping:i}=t;if(n.length===0)return{crossBoundaryIds:new Set,awaitFutureTempVarAliases:new Map,variableSegments:new Map};let o=new Set,a=Fl(e,n);for(let _ of a)(_.awaitPoint?.isInsideCond||_.awaitPoint?.isInsideWhile)&&o.add(_.stateNumber);let s=new Map;for(let _ of a){let p=new Set;for(let f of _.expressions)Vi(f,p,i);for(let f of p){let d=s.get(f);d||(d=new Set,s.set(f,d)),d.add(_.stateNumber)}}let l=-1;if(e.$?.deferredDropExpressions){let _=new Set;for(let p of e.$.deferredDropExpressions)Vi(p,_,i);for(let p of _){let f=s.get(p);f||(f=new Set,s.set(p,f)),f.add(l)}}let u=new Set;for(let _ of r){if(_.kind==="outer")continue;let p=s.get(_.id);if(!p)u.add(_.id);else if(p.size>1)u.add(_.id);else if(p.has(l))u.add(_.id);else{let f=p.values().next().value;o.has(f)&&u.add(_.id)}}let c=new Map;for(let _ of n){if(_.futureVariableId!==void 0)continue;let p=_.expr;if(!F(p))continue;let f=p.args[0];if(!f)continue;let d=f.$?.variableName;if(!d)continue;let h=r.find(g=>g.kind==="local"&&(g.name===d||g.id===d));h&&(c.set(h.id,`await_future_${_.index}`),u.delete(h.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function es(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(p=>p.kind==="local"&&e.has(p.id)&&!r.has(p.id)&&!Ve(p.type));if(a.length<2)return o;let s=new Map;for(let p of a){let f=t.get(p.id);if(!f||f.size===0)continue;let d=[...f].filter(y=>y>=0);if(d.length===0)continue;let h=Math.min(...d),g=Math.max(...d);s.set(p.id,[h,g])}if(s.size<2)return o;let l=new Map;for(let[p]of s){let f=a.find(g=>g.id===p);if(!f)continue;let d=U(f.type,i),h=l.get(d);h||(h=[],l.set(d,h)),h.push(p)}let u=new Map,c=[],_=0;for(let[p,f]of l){if(f.length<2)continue;let d=new Map;for(let y of f)d.set(y,new Set);for(let y=0;y<f.length;y++)for(let v=y+1;v<f.length;v++){let[T,$]=s.get(f[y]),[C,L]=s.get(f[v]);T<=L&&C<=$&&(d.get(f[y]).add(f[v]),d.get(f[v]).add(f[y]))}let h=new Map;for(let y of f){let v=new Set;for(let $ of d.get(y))h.has($)&&v.add(h.get($));let T=0;for(;v.has(T);)T++;h.set(y,T)}let g=new Map;for(let[y,v]of h){let T=g.get(v);T||(T=[],g.set(v,T)),T.push(y)}for(let[,y]of g){if(y.length<2)continue;let v=`slot_${_}`,T=y.map($=>a.find(C=>C.id===$)?.name??$);for(let $ of y)u.set($,v);c.push({fieldName:v,cType:p,variableNames:T}),_++}}return{slotAliases:u,slots:c}}function Al(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 sa(e){return!e||!D(e)?!1:e.resolvedConcreteType&&D(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Ea(t.traitType))}function _n(e,t,n){if(t==="outer")return`__capture.${oe(e)}`;let r=n?.get(e);return r||oe(`var_${e}`)}function Qc(e,t,n,r,i,o,a,s){let l=s.emitter,c=Bt(o).isFuture.outputType,_=de(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let p=Fl(e,i.awaitPoints),f=e.tag==="FnCall"&&E(e,"begin")?e.args:[e],d=f.length>0?f[f.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) {");let h=[];for(let g=0;g<p.length;g++){let y=p[g];if(!y)continue;let v=y.stateNumber,T=g===p.length-1;if(l.emitLine(`
|
|
198
|
+
state_${v}:`),l.emitLine(` case ${v}: { // State ${v}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${v}\\n");`),v>0&&i.awaitPoints[v-1]){let N=i.awaitPoints[v-1],O=Al(N,i);N.isInsideCond&&l.emitLine(` if (sm->${O} != NULL) {`);let Q=de(N.resultType)||D(N.resultType)&&!N.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${O}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${O});`),l.emitLine(` sm->${O} = NULL;`),Wn({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),N&&!Q){l.emitLine(` // Extract result from await ${v-1}`),l.emitLine(` int state_before_read = sm->${O}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${v-1}, state=%d\\n", state_before_read);`);let j=!!N.isInsideCond,K;if(j?K=`sm->await_result_${v-1}`:N.targetVariableId&&(K=`sm->${_n(N.targetVariableId,"local",s.stateMachineFieldAliases)}`),K)if(Ve(N.resultType)){let te=Un(N.resultType,s);te?l.emitLine(` ${K} = ${te}(sm->${O}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${K} = sm->${O}->result;`))}else l.emitLine(` ${K} = sm->${O}->result;`);if(j&&N.targetVariableId){let te=_n(N.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${te} = sm->await_result_${v-1};`)}l.emitLine("")}if(!N.futureVariableId){let j=N.expr;if(j.tag==="FnCall"){let te=j.args[0]?.$?.type;te&&(D(te)||Ae(te))&&(l.emitLine(` if (sm->${O} != NULL) { __yo_decr_rc((void*)sm->${O}); sm->${O} = NULL; }`),l.emitLine(""))}}let ne=s;if(N){let j=ne.asyncCondBranchInfo?.get(N.index);if(j&&j.branches.some(te=>te.hasAwait)){let te=j.condBranchFieldIndex??N.index,$e=te===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),$e||l.emitLine(` switch (sm->cond_branch_${te}) {`);let X=y.awaitPoint?.isInsideCond??!1;for(let re of j.branches)if(re.hasAwait){if($e||l.emitLine(` case ${re.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${re.index}\\n");`),re.remainingExprs&&re.remainingExprs.length>0){let ce=s.inAsyncStateMachine,Me=s.stateMachineVariables,Oe=s.variableIdRemapping,he=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ke=ne.asyncWhileLoopInfo?.get(N.index);s.pendingDeferredDrops=[...re.deferredDropExpressions??[],...Ke?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let ie=new Map;for(let be of i.capturedVariables)ie.set(be.id,be);if(a)for(let be of a.fields)ie.set(be.label,{id:be.label,name:be.label,type:be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ie;let Z=!1,_e=[],ae=j.targetAssignmentCode;for(let be=0;be<re.remainingExprs.length;be++){let le=re.remainingExprs[be],ye=be===re.remainingExprs.length-1;if(Z){_e.push(le);continue}if(X&&gn(le)){Z=!0,Il(le,y.awaitPoint,i," ",s);continue}let Fe=P(le," ",s);!Fe||!le.$||ut(le.$.env.modulePath,Fe)||(ye&&ae?l.emitLine(` ${ae} = ${Fe};`):l.emitLine(` ${Fe};`))}if(re.remainingExprs.length===0&&ae&&l.emitLine(` ${ae} = sm->await_result_${N.index};`),Z&&y.awaitPoint){let be=y.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let le=ne.asyncCondBranchInfo.get(be);if(le)le.chainedBranches||(le.chainedBranches=[]),le.chainedBranches.push({branches:[{index:re.index,value:re.value,hasAwait:_e.length>0||_e.some(ye=>gn(ye)),remainingExprs:_e,deferredDropExpressions:re.deferredDropExpressions}],condBranchFieldIndex:te});else{let ye={branches:[{index:re.index,value:re.value,hasAwait:_e.length>0||_e.some(Fe=>gn(Fe)),remainingExprs:_e,deferredDropExpressions:re.deferredDropExpressions}],condBranchFieldIndex:te};ne.asyncCondBranchInfo.set(be,ye)}}else if(re.deferredDropExpressions)for(let be of re.deferredDropExpressions){let le=P(be," ",s);le&&le.includes("sm->")&&l.emitLine(` ${le};`)}s.inAsyncStateMachine=ce,s.stateMachineVariables=Me,s.variableIdRemapping=Oe,s.pendingDeferredDrops=he}$e||(l.emitLine(" break;"),l.emitLine(" }"))}if($e||l.emitLine(" }"),j.chainedBranches){for(let re of j.chainedBranches)for(let ce of re.branches)if(ce.hasAwait&&ce.remainingExprs&&ce.remainingExprs.length>0){let Me=s.inAsyncStateMachine,Oe=s.stateMachineVariables,he=s.variableIdRemapping,Ke=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ie=ne.asyncWhileLoopInfo?.get(N.index);s.pendingDeferredDrops=[...ce.deferredDropExpressions??[],...ie?.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let Z=new Map;for(let le of i.capturedVariables)Z.set(le.id,le);if(a)for(let le of a.fields)Z.set(le.label,{id:le.label,name:le.label,type:le.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;let _e=y.awaitPoint?.isInsideCond??!1,ae=!1,be=[];for(let le of ce.remainingExprs){if(ae){be.push(le);continue}if(_e&&gn(le)){ae=!0,Il(le,y.awaitPoint,i," ",s);continue}let ye=P(le," ",s);!ye||!le.$||ut(le.$.env.modulePath,ye)||l.emitLine(` ${ye};`)}if(ae&&y.awaitPoint){let le=y.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let ye=ne.asyncCondBranchInfo.get(le);ye?(ye.chainedBranches||(ye.chainedBranches=[]),ye.chainedBranches.push({branches:[{index:ce.index,value:ce.value,hasAwait:be.length>0||be.some(Fe=>gn(Fe)),remainingExprs:be,deferredDropExpressions:ce.deferredDropExpressions}],condBranchFieldIndex:re.condBranchFieldIndex})):ne.asyncCondBranchInfo.set(le,{branches:[{index:ce.index,value:ce.value,hasAwait:be.length>0||be.some(Fe=>gn(Fe)),remainingExprs:be,deferredDropExpressions:ce.deferredDropExpressions}],condBranchFieldIndex:re.condBranchFieldIndex})}else if(ce.deferredDropExpressions)for(let le of ce.deferredDropExpressions){let ye=P(le," ",s);ye&&ye.includes("sm->")&&l.emitLine(` ${ye};`)}s.inAsyncStateMachine=Me,s.stateMachineVariables=Oe,s.variableIdRemapping=he,s.pendingDeferredDrops=Ke}}if(j.targetVariableId){let re=_n(j.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${re} = sm->await_result_${N.index};`)}l.emitLine("")}N.isInsideCond&&l.emitLine(" }");let K=ne.asyncWhileLoopInfo?.get(N.index);if(K){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${N.index}_active) {`),K.bodyExprsAfterAwait&&K.bodyExprsAfterAwait.length>0){let he=s.inAsyncStateMachine,Ke=s.stateMachineVariables,ie=s.variableIdRemapping,Z=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...K.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let _e=new Map;for(let ye of i.capturedVariables)_e.set(ye.id,ye);if(a)for(let ye of a.fields)_e.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=_e;let ae=s.smWhileBreakInfo,be=s.smWhileContinueInfo,le=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${N.index}`,activeIndex:N.index},s.smWhileContinueInfo={label:`while_loop_${N.index}_continue`},s.smWhileBodyDrops=[...K.bodyExpr.$?.deferredDropExpressions??[]];for(let ye of K.bodyExprsAfterAwait){let Fe=P(ye," ",s);!Fe||!ye.$||ut(ye.$.env.modulePath,Fe)||l.emitLine(` ${Fe};`)}s.smWhileBreakInfo=ae,s.smWhileContinueInfo=be,s.smWhileBodyDrops=le,s.inAsyncStateMachine=he,s.stateMachineVariables=Ke,s.variableIdRemapping=ie,s.pendingDeferredDrops=Z}l.emitLine(` while_loop_${N.index}_continue:`);{let he=K.bodyExpr.$?.deferredDropExpressions??[];if(he.length>0){let Ke=s.inAsyncStateMachine,ie=s.stateMachineVariables,Z=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let _e=new Map;for(let ae of i.capturedVariables)_e.set(ae.id,ae);if(a)for(let ae of a.fields)_e.set(ae.label,{id:ae.label,name:ae.label,type:ae.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=_e;for(let ae of he){let be=P(ae," ",s);be&&be.includes("sm->")&&l.emitLine(` ${be};`)}s.inAsyncStateMachine=Ke,s.stateMachineVariables=ie,s.variableIdRemapping=Z}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let te=s.declaredTempVars;if(s.declaredTempVars=void 0,K.stepExpr){let he=s.inAsyncStateMachine,Ke=s.stateMachineVariables,ie=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Z=new Map;for(let ae of i.capturedVariables)Z.set(ae.id,ae);if(a)for(let ae of a.fields)Z.set(ae.label,{id:ae.label,name:ae.label,type:ae.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Z;let _e=P(K.stepExpr," ",s);_e&&l.emitLine(` ${_e};`),s.inAsyncStateMachine=he,s.stateMachineVariables=Ke,s.variableIdRemapping=ie}let $e=s.inAsyncStateMachine,X=s.stateMachineVariables,re=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ce=new Map;for(let he of i.capturedVariables)ce.set(he.id,he);if(a)for(let he of a.fields)ce.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ce;let Me=P(K.conditionExpr," ",s);s.inAsyncStateMachine=$e,s.stateMachineVariables=X,s.variableIdRemapping=re,s.declaredTempVars=te,l.emitLine(` if (!(${Me})) {`),l.emitLine(` sm->while_loop_${N.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 Oe=N.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${Oe};`),l.emitLine(` goto while_loop_${Oe}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${N.index}:`),K.condBranchPostWhileExprs){let he=K.condBranchPostWhileExprs,Ke=he.condBranchFieldIndex,ie=he.branchIndex;he.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_${Ke} == ${ie}) {`));let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping,be=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let le=new Map;for(let Be of i.capturedVariables)le.set(Be.id,Be);if(a)for(let Be of a.fields)le.set(Be.label,{id:Be.label,name:Be.label,type:Be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=le;let ye=y.awaitPoint!=null,Fe=!1,je=[];for(let Be=0;Be<he.exprs.length;Be++){let Je=he.exprs[Be];if(Fe){je.push(Je);continue}if(ye&&gn(Je)){Fe=!0,Il(Je,y.awaitPoint,i," ",s);continue}let Vt=P(Je," ",s);!Vt||!Je.$||ut(Je.$.env.modulePath,Vt)||l.emitLine(` ${Vt};`)}if(Fe&&y.awaitPoint){let Be=y.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let Je=he.skipCondBranchCheck?-1:he.condBranchFieldIndex,Vt=ne.asyncCondBranchInfo.get(Be);Vt?(Vt.chainedBranches||(Vt.chainedBranches=[]),Vt.chainedBranches.push({branches:[{index:he.branchIndex,value:he.exprs[0],hasAwait:je.length>0||je.some(Nt=>gn(Nt)),remainingExprs:je,deferredDropExpressions:he.deferredDropExpressions}],condBranchFieldIndex:Je})):ne.asyncCondBranchInfo.set(Be,{branches:[{index:he.branchIndex,value:he.exprs[0],hasAwait:je.length>0||je.some(Nt=>gn(Nt)),remainingExprs:je,deferredDropExpressions:he.deferredDropExpressions}],condBranchFieldIndex:Je})}if(!Fe&&he.deferredDropExpressions)for(let Be of he.deferredDropExpressions){let Je=P(Be," ",s);Je&&Je.includes("sm->")&&l.emitLine(` ${Je};`)}l.emitLine(" }"),s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae,s.pendingDeferredDrops=be}if(K.outerWhileLoop){let he=K.outerWhileLoop,Ke=he.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ke}_active) {`),he.bodyExprsAfterAwait.length>0){let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping,be=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...he.bodyExpr.$?.deferredDropExpressions??[],...e.$?.deferredDropExpressions??[]];let le=new Map;for(let Be of i.capturedVariables)le.set(Be.id,Be);if(a)for(let Be of a.fields)le.set(Be.label,{id:Be.label,name:Be.label,type:Be.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=le;let ye=s.smWhileBreakInfo,Fe=s.smWhileContinueInfo,je=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ke}`,activeIndex:Ke},s.smWhileContinueInfo={label:`while_loop_${Ke}_continue`},s.smWhileBodyDrops=[...he.bodyExpr.$?.deferredDropExpressions??[]];for(let Be of he.bodyExprsAfterAwait){let Je=P(Be," ",s);!Je||!Be.$||ut(Be.$.env.modulePath,Je)||l.emitLine(` ${Je};`)}s.smWhileBreakInfo=ye,s.smWhileContinueInfo=Fe,s.smWhileBodyDrops=je,s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae,s.pendingDeferredDrops=be}l.emitLine(` while_loop_${Ke}_continue:`);{let Z=he.bodyExpr.$?.deferredDropExpressions??[];if(Z.length>0){let _e=s.inAsyncStateMachine,ae=s.stateMachineVariables,be=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let le=new Map;for(let ye of i.capturedVariables)le.set(ye.id,ye);if(a)for(let ye of a.fields)le.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=le;for(let ye of Z){let Fe=P(ye," ",s);Fe&&Fe.includes("sm->")&&l.emitLine(` ${Fe};`)}s.inAsyncStateMachine=_e,s.stateMachineVariables=ae,s.variableIdRemapping=be}}let ie=s.declaredTempVars;if(s.declaredTempVars=void 0,he.stepExpr){let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let be=new Map;for(let ye of i.capturedVariables)be.set(ye.id,ye);if(a)for(let ye of a.fields)be.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=be;let le=P(he.stepExpr," ",s);le&&l.emitLine(` ${le};`),s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae}{let Z=s.inAsyncStateMachine,_e=s.stateMachineVariables,ae=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let be=new Map;for(let ye of i.capturedVariables)be.set(ye.id,ye);if(a)for(let ye of a.fields)be.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=be;let le=P(he.conditionExpr," ",s);s.inAsyncStateMachine=Z,s.stateMachineVariables=_e,s.variableIdRemapping=ae,l.emitLine(` if (!(${le})) {`),l.emitLine(` sm->while_loop_${Ke}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${N.index};`),l.emitLine(` goto while_loop_${Ke}_start;`),l.emitLine(" }")}s.declaredTempVars=ie,l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ke}:`)}}}}let $=s.inAsyncStateMachine,C=s.stateMachineVariables,L=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let b=new Map;for(let N of i.capturedVariables)b.set(N.id,N);if(a)for(let N of a.fields)b.set(N.label,{id:N.label,name:N.label,type:N.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=b;let S=s.pendingDeferredDrops;s.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]];let I=T&&!_&&y.expressions.length>0,z=y.expressions.length>0?y.expressions[y.expressions.length-1]:void 0,M=s.asyncBodyReturnExpr;if(!_&&z&&d&&z===d&&y.awaitPoint?s.asyncBodyReturnExpr=z:s.asyncBodyReturnExpr=void 0,jc(y," ",s,I),s.asyncBodyReturnExpr=M,s.pendingDeferredDrops=S,l.emitLine(""),y.awaitPoint){s.inAsyncStateMachine=$,s.stateMachineVariables=C,s.variableIdRemapping=L;let N=v+1;{let O=Al(y.awaitPoint,i),ne=y.awaitPoint.expr.args?.[0],j=sa(ne?.$?.type),K=y.awaitPoint?.isInsideCond;K&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${O} != NULL) {`));let te=y.awaitPoint?.isInsideWhile,$e=te?s.asyncWhileLoopInfo?.get(y.awaitPoint.index):void 0;if(te&&$e){let X=y.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${X}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${N};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${O}->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(""),j?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->${O}); // event loop reference`)),j||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),zg(y.awaitPoint.expr,`sm->${O}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${O}->__yo_resume_fn((void*)sm->${O});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${O}->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->${O}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${O}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),te&&$e){let X=y.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${X};`),l.emitLine(" }")}K&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${N};`),l.emitLine(` goto state_${N};`),l.emitLine(" }"))}}else if(T){if(!y.expressions.some(O=>Zc(O))){if(e.$?.deferredDropExpressions){let O=new Pi,Q=s.emitter;s.emitter=O;for(let j of e.$.deferredDropExpressions){let K=P(j,"",s);K&&O.emitLine(`${K};`)}s.emitter=Q;let ne=O.print().trim();if(ne){l.emitLine(" // Drop local variables before completion");for(let j of ne.split(`
|
|
199
|
+
`)){let K=j.trim();K&&(l.emitLine(` ${K}`),h.push(K))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),Br({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=$,s.stateMachineVariables=C,s.variableIdRemapping=L}else s.inAsyncStateMachine=$,s.stateMachineVariables=C,s.variableIdRemapping=L;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),h}function Il(e,t,n,r,i){let o=i.emitter,a=Al(t,n);if(e.tag==="FnCall"&&E(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&En(s)){let l=s.args[0];if(l){let u=P(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"&&En(e)){let s=e.args[0];if(s){let l=P(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"&&E(e,V.cond)){yo(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,V.match)){yo(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,V.while)){yo(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,V.begin)){yo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Zc(e){if(Et(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Zc(t))return!0}return!1}function Ug(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function zg(e,t,n,r){let i=e.args?.[0];if(!i?.$?.type)return;let o=Bt(i.$.type);if(!o?.isFuture.effects?.length)return;let a=Ug(o.isFuture.effects),s=r.emitter,l=e.args?.find(u=>F(u)&&E(u,V.using));if(l){let u=l.args;for(let c=0;c<a.length&&c<u.length;c++){let _=a[c],p=u[c];if(G(_.type)){if(_.type.forallParameters.length>0)continue;let f=P(p,n,r),d=_.label;s.emitLine(`${n}${t}->__capture.${d} = (void*)${f};`)}else Ce(_.type)&&Xc(_.type,t,n,p.$?.value,r,e)}}else for(let u of a)if(G(u.type)){if(u.type.forallParameters.length>0)continue;let c=Bg(u.label,r,e);c&&s.emitLine(`${n}${t}->__capture.${u.label} = (void*)${c};`)}else Ce(u.type)&&Xc(u.type,t,n,void 0,r,e)}function Xc(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!G(s.type))continue;let l;if(i.stateMachineVariables){for(let[,u]of i.stateMachineVariables)if(u.name===s.label&&u.kind==="outer"){l=`sm->__capture.${s.label}`;break}}if(!l&&r&&Ye(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&ee(c)){let _=i.functions[c.funcId];_&&(l=_.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}if(!l){let u=o.$?.env??o.func.$?.env;if(u){let c=$n(u,_=>_.isImplicit===!0);for(let _=c.length-1;_>=0;_--){let p=c[_],f=p.value?.[p.value.length-1];if(f&&Ye(f)){let d=f.type.fields.findIndex(h=>h.label===s.label);if(d>=0){let h=f.fields[d];if(h&&ee(h)){let g=i.functions[h.funcId]?.cName;if(g){l=g;break}}}}}}}l&&a.emitLine(`${n}${t}->__capture.${s.label} = (void*)${l};`)}}function Bg(e,t,n){if(t.currentEvidenceParams){for(let r of t.currentEvidenceParams.values())if(r.fieldLabel===e)return r.cParamName}if(t.stateMachineVariables){for(let[,r]of t.stateMachineVariables)if(r.name===e&&r.kind==="outer")return`sm->__capture.${e}`}}var Gg=new Set(["__yo_mutex_init","__yo_mutex_destroy","__yo_mutex_lock","__yo_mutex_unlock","__yo_cond_init","__yo_cond_destroy","__yo_cond_wait","__yo_cond_signal","__yo_cond_broadcast","__yo_thread_join","__yo_thread_self"]);function Jc(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:i}=e.externFunctions[n];if(i.isExtern==="yo"){if(Gg.has(r))continue;xl(i,r,!0,e);continue}i.isExtern==="c"&&i.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||xl(i,r,!0,e)}t.emitDeclarationLine(""),e.usesAsync&&(t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("static void __yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("")),t.emitDeclarationLine("/// Object constructors"),qg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Yg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let n in e.functions){let{cName:r,value:i}=e.functions[n],o=r==="__yo_user_main",a=i.body?.$?.effectAnalysis,s=a&&a.hasEffects;if(!o&&!i.type.isClosure&&i.specializedFunctionCaches?.length>0||!o&&!s&&!i.isModuleEffectMember&&!i.type.isClosure&&!i.specializedType&&(i.specializedFunctionCaches?.length??0)===0&&kt(i.specializedType??i.type).length===0&&[...i.type.implicitParameters,...i.type.parameters.filter(h=>h.isImplicit)].some(h=>G(h.type)))continue;let u=i.specializedType??i.type,c=kt(u).length>0;if(!o&&i.isIoAsyncStateMachineClosure||!o&&!s&&!c&&!i.isModuleEffectMember&&(hr(i.type)&&!i.type.isClosure||i.specializedFunctionCaches?.length>0&&!i.type.isClosure||oi(i)||Fr(i)||i.isIoAsyncStateMachineClosure))continue;let _=i.specializedType??i.type,p=!s&&!i.isModuleEffectMember&&(_.parameters.some(h=>me(h.type))||_.forallParameters.length>0),f=me(_.return.type),d=D(_.return.type)&&_.return.type.requiredTraits.length>0;p||f&&!d&&!i.isModuleEffectMember||xl(_,r,!1,e,i.isModuleEffectMember?void 0:i.body,i.specializedType&&kt(_).length===0&&kt(i.type).some(h=>h.fieldFunctionType.forallParameters&&h.fieldFunctionType.forallParameters.length>0)?i.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function kt(e){let t=[],n=Wg(e.implicitParameters);for(let r of n)Ce(r.type)?e_(r.label,r.type,[],t):G(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:oe(r.label)});return t}function e_(e,t,n,r){for(let i of t.fields)if(G(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:oe(`${e}__${a}`)})}else Ce(i.type)&&e_(e,i.type,[...n,i.label],r)}function Wg(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Ir(e,t,n,r,i){let o=r||U(e.return.type,n),a=e.parameters.filter(_=>!_.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((_,p)=>{let f=oe(_.label||`param${p}`);if(G(_.type))return Ir(_.type,"(*)",n).replace(" (*)(",` (*${f})(`);{let d;return D(_.type)&&Ie(_.type)?_.type.resolvedConcreteType?d=U(_.type.resolvedConcreteType,n)+"*":d=U(_.type,n):d=U(_.type,n),`${d} ${f}`}});s.push(...l);let u=kt(i??e);for(let _ of u)if(_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)s.push(`void* ${_.cParamName}`);else{let p=Ir(_.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${_.cParamName})(`);s.push(p)}let c=s.join(", ");return`${o} ${t}(${c})`}function xl(e,t,n,r,i,o){let a;if(i&&Ie(e.return.type)){let p=ia(i);p?.$?.asyncStateMachineStructName?a=`${p.$.asyncStateMachineStructName}*`:i.$?.type&&D(i.$.type)&&Ie(i.$.type)&&(a=U(i.$.type,r))}if(i&&D(e.return.type)&&!Ie(e.return.type)&&i.$?.type&&(a=U(i.$.type,r)),!a&&i&&i.$?.type&&!Ie(e.return.type)){let p=U(e.return.type,r),f=U(i.$.type,r);p!==f&&(a=f)}let s=a?Ir(e,t,r,a,o):Ir(e,t,r,void 0,o),l=A(e),u=t==="__yo_user_main"||r.exportedFunctionLabels&&[...r.exportedFunctionLabels.values()].some(p=>oe(p)===t),c=!n&&!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=n?"extern ":u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitter.emitDeclarationLine(`${_}${s}; // ${l}`)}function qg(e){let t=e.emitter;t.emitDeclarationLine("static inline void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("static inline void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("static void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("static void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("static void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("static void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("static 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(pe(r)&&r.isReferenceSemantics){if(r.fields.some(l=>me(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=U(l.type,e),c=oe(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function Yg(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(`static void ${r}(void* closure_ptr);`)}}function t_(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(oi(r)||!o||!Xn(r.type)||Xn(o))continue;let a=o.parameters.some(_=>me(_.type)),s=me(o.return.type);if(a||s||kt(r.type).some(_=>_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)||t.has(n))continue;t.add(n);let c=i.includes("___drop")||i.includes("___dup")||i.includes("___dispose")?"static inline __attribute__((always_inline)) ":"static inline ";e.emitter.emitDeclarationLine(`${c}${Ir(o,i,e)}; // specialized function: ${A(r.type)}`)}}function Ar(e,t,n){let r=Y(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function n_(e){return!!(e.$?.closureFunctionValue&&e.$?.type&&Jt(e.$.type))}function Hg(e,t,n,r,i,o=!1){let a=Object.values(i.types).find(f=>f.type===e);if(!a)return i.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if(n.$?.deferredDupExpressions)for(let f of n.$.deferredDupExpressions){let d=Za(f);d&&l.set(d,f)}let u=e.fields.map(f=>{if(f.isEffectParam)return"NULL";let d,h=f.exprs.expr;if(h.$?.deferredDupExpressions?.length&&(d=h.$.deferredDupExpressions[0]),!d){let y=[f.label];B(h)&&y.push(h.token.value);for(let v of y){let T=l.get(v);if(T){d=T;break}}}if(d)return P(d,r,i);let g={tag:"Atom",token:h.token,$:h.$};return P(g,r,i)}),c=`(${s}){ ${u.map((f,d)=>{let h=e.fields[d];return h?`.${h.label} = ${f}`:`/* Error: missing field at index ${d} */`}).join(", ")} }`,_=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=`__capture_${t}_${_}`;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 r_(e,t,n){if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=cn(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=n.functions[o.funcId]?.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=Ae(e.$.type),u;if(l){let d=n.types[e.$.type.id];if(!d)return"// Error: Dyn closure type not found in context";u=d.cName}let c=a&&pe(a)&&a.fields.length>0,_=U(i.return.type,n),p=i.parameters.map(d=>U(d.type,n)).join(", "),f=`(${_} (*)(void*${p?", "+p:""}))${s}`;if(c&&a&&pe(a)){let d=!l,h=Hg(a,i.id,e,t,n,d);if(!h)return"// Error: Failed to allocate closure capture";let{captureTempVar:g}=h;if(l){let y=`__yo_create_${u}`,v=`__yo_dispose_${u}`;return`${y}(${g}, ${v}, ${f})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),g}else if(l){let d=`__yo_create_${u}`,h=`__yo_dispose_${u}`;return`${d}(NULL, ${h}, ${f})`}else{if(e.$.type.tag==="SomeType"){let d=e.$.type;if(d.resolvedConcreteType)return n.implClosureCallMap.set(d.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),`(${U(d.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function Sl(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=P(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function go(e,t,n=""){let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return Sl(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return Sl(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let a=t.emitter;for(let s of r.smWhileBodyDrops){let l=P(s,n,t);l&&l.includes("sm->")&&a.emitLine(`${n}${l};`)}}if(r.smWhileContinueInfo.stepExpr){let a=t.emitter,s=P(r.smWhileContinueInfo.stepExpr,n,t);s&&a.emitLine(`${n}${s};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return Sl(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:a,activeIndex:s}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let l=t.emitter;for(let u of r.smWhileBodyDrops){let c=P(u,n,t);c&&c.includes("sm->")&&l.emitLine(`${n}${c};`)}}return s!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${s}_active = false;`),`goto ${a}`):`goto ${a}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let a=t.emitter,s=r.inAsyncStateMachine.futureType,u=Bt(s).isFuture.outputType,c=de(u);if(e.$?.deferredDropExpressions)for(let p of e.$.deferredDropExpressions){let f=P(p,n,t);f&&f.includes("sm->")&&a.emitLine(`${n}${f};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){a.emitLine(`${n}// Drop local variables before early completion`);for(let p of r.pendingDeferredDrops){let f=P(p,n,t);f&&f.includes("sm->")&&a.emitLine(`${n}${f};`)}}a.emitLine(`${n}// Early return - complete the result Future`);let _=c?void 0:`(${U(u,t)}){0}`;return Br({emitter:a,indent:n,resultCode:_,debugLabel:t.currentFunctionName}),""}return"return"}if(e.$?.type&&de(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let a=e.token.value;if(r.localShadowedVariables?.has(a))return oe(a);let s=!1;if(e.$?.env){let l=Y(e.$.env,a);if(l.length>0){let u=l[l.length-1],c=u.isOwningTheSameRcValueAs?u.isOwningTheSameRcValueAs.id:u.id;r.variableIdRemapping?.has(c)&&(c=r.variableIdRemapping.get(c));let _=r.stateMachineVariables.get(c);if(_){let p=r.stateMachineFieldAliases?.get(c);if(p)return s=!0,`sm->${p}`;let f=_.kind==="outer"?`__capture.${a}`:`var_${_.id}`;return s=!0,`sm->${f}`}}}if(!s){for(let[l,u]of r.stateMachineVariables)if(u.name===a){let c=r.stateMachineFieldAliases?.get(l);if(c)return s=!0,`sm->${c}`;let _=u.kind==="outer"?`__capture.${a}`:`var_${l}`;return s=!0,`sm->${_}`}}if(e.$?.env){let l=Y(e.$.env,a);if(l.length>0){let u=l[l.length-1];if(u.isOwningTheSameRcValueAs){let c=u.isOwningTheSameRcValueAs.name,_=u.isOwningTheSameRcValueAs.id;for(let[p,f]of r.stateMachineVariables)if(f.name===c||p===_)return`sm->${f.kind==="outer"?`__capture.${c}`:`var_${p}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(a)&&r.currentClosureCaptureFrameLevel!==void 0){let l=r.currentClosureCaptureTypeCName;return l?`((${l}*)closure_context)->${Te(a,e.$?.env)}`:`closure_context->${Te(a,e.$?.env)}`}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!ue(e.$.value)){let l=Y(e.$.env,e.$.variableName);if(l.length>0&&l[l.length-1].isCompileTimeOnly)return sn(e.$.value,t,e)}return Te(e.$.variableName,e.$.env)}}if(e.$?.variableName){if(e.$?.env&&e.$?.value&&!ue(e.$.value)){let a=Y(e.$.env,e.$.variableName);if(a.length>0&&a[a.length-1].isCompileTimeOnly)return sn(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0&&Ar(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Te(e.$.variableName,e.$?.env)}if(e.$?.value&&!ue(e.$.value))return sn(e.$.value,t,e);let i=e.$?.env&&r.currentClosureCaptureFrameLevel!==void 0?Ar(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!e.$?.env||i)){let a=r.currentClosureCaptureTypeCName;return a?`((${a}*)closure_context)->${Te(e.token.value,e.$?.env)}`:`closure_context->${Te(e.token.value,e.$?.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let a=Object.values(r.functions).find(s=>s.cName===r.currentFunctionName);if(a&&a.value.type.isClosure){let s=Object.values(r.types).find(l=>G(l.type)&&l.type.isClosure&&l.type===a.value.type);if(s)return`((${`${s.cName}_capture`}*)closure_context->data)->${Te(e.token.value,e.$?.env)}`}}if(e.$?.env){let a=Y(e.$.env,e.token.value);if(a.length>0){let s=a[a.length-1];if(s.value?.[0]&&ee(s.value[0])){let l=t.functions[s.value[0].funcId]?.cName;if(l)return l}else if(G(s.type)&&(ue(s.value?.[0])||s.value===void 0)){let l=Object.entries(t.functions).find(([u,c])=>c.value.funcName===e.token.value);if(l)return l[1].cName}}}return Te(e.token.value,e.$?.env)}function i_(e,t,n){let r;if(Yt(e)){let y=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;y&&ee(y)&&(r=y.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=e.$?.type;if(!i||!Ie(i))return"/* Error: async block must have Future type */";let o=Bt(i);if(!o)return"/* Error: Could not extract Future module type */";let a=e.$?.variableName||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,c=`${a}_state_dispose`;n.types[i.id]={type:i,cName:s};let _=e.$?.awaitAnalysis;if(!_)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let p=o.isFuture.outputType;if(D(p))if(p.resolvedConcreteType)p=p.resolvedConcreteType;else{let y=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;if(y&&ee(y)){let v=y.type?.return?.type;if(v&&D(v)&&v.resolvedConcreteType)p=v.resolvedConcreteType;else if(y.body?.$?.type){let T=y.body.$.type;D(T)&&T.resolvedConcreteType?p=T.resolvedConcreteType:D(T)||(p=T)}}}let f=U(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(""),e.$?.captureType){let g=e.$.captureType,y=Object.values(n.types).find(T=>T.type===g),v=y?y.cName:`async_capture_${g.id}`;d.emitDeclarationLine(`${s}* ${u}(${v} __capture);`)}else d.emitDeclarationLine(`${s}* ${u}();`);d.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:p,resultTypeCName:f,captureType:e.$?.captureType,analysis:_});let h=e.$?.captureType;if(h){let g=Object.values(n.types).find(I=>I.type===h),y=g?g.cName:`async_capture_${h.id}`,v=n,T=v.currentClosureCaptures!==void 0||v.inAsyncStateMachine!==void 0||v.inEffectStateMachine!==void 0,$=!1,C=h.fields.map(I=>{if(I.isEffectParam)return`.${I.label} = NULL`;let z;if(!T&&e.$?.deferredDupExpressions)for(let N of e.$.deferredDupExpressions){let O;if(F(N)&&(N.args.length>0&&B(N.args[0])?O=N.args[0].token.value:N.args.length===0&&F(N.func)&&E(N.func,".")&&N.func.args.length>=2&&B(N.func.args[0])&&(O=N.func.args[0].token.value)),O===I.label){z=N;break}}if(z)return $=!0,z.$?.variableName?(P(z,t,n),`.${I.label} = ${z.$.variableName}`):`.${I.label} = ${P(z,t,n)}`;let M={tag:"Atom",token:I.exprs.expr.token,$:I.exprs.expr.$};return`.${I.label} = ${go(M,n)}`}).join(", "),L=`(${y}){${C}}`;if(!$){let I=Un(h,n);I&&(L=`${I}(${L})`)}let b=e.$?.variableName||"async_result",S=`${u}(${L})`;if(b&&e.$?.type){let I=_t(e.$.type,b,n);return n.emitter.emitLine(`${t}${I} = ${S};`),b}else return S}else{let g=e.$?.variableName||"async_result",y=`${u}()`;if(g&&e.$?.type){let v=_t(e.$.type,g,n);return n.emitter.emitLine(`${t}${v} = ${y};`),g}else return y}}function o_(e,t){let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:_,overlappingSlots:p}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${A(o)})`),n.emitDeclarationLine(`struct ${i}_struct {`),n.emitDeclarationLine(" __yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(" int state; // Current state (0 = cold, 1..N = intermediate, -1 = completed, -2 = aborted)"),de(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${A(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let g=Object.values(t.types).find(v=>v.type===s),y=g?g.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${y} __capture;`),n.emitDeclarationLine("")}let f=l.capturedVariables.filter(g=>g.kind!=="outer");if(u&&(f=f.filter(g=>u.has(g.id)&&!c?.has(g.id)&&!_?.has(g.id))),f.length>0){n.emitDeclarationLine(" // Local variables");for(let g of f){let y=U(g.type,t),v=_n(g.id,"local");n.emitDeclarationLine(` ${y} ${v}; // ${g.name}`)}n.emitDeclarationLine("")}if(p&&p.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let g of p)n.emitDeclarationLine(` ${g.cType} ${g.fieldName}; // shared: ${g.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let g=[];for(let y of l.awaitPoints)if(!(de(y.resultType)||D(y.resultType)&&!y.resultType.resolvedConcreteType)&&y.isInsideCond){let $=y.resultType;if(y.futureType){let L=Bt(y.futureType);L&&($=L.isFuture.outputType)}let C=U($,t);g.push(` ${C} await_result_${y.index};`)}if(g.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let y of g)n.emitDeclarationLine(y);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let g=l.awaitPoints.filter(y=>y.futureVariableId===void 0);if(g.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let y of g){let v=y.expr;if(v.tag!=="FnCall")continue;let $=v.args[0]?.$?.type;if(!$)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let C=U($,t);n.emitDeclarationLine(` ${C} await_future_${y.index};`)}n.emitDeclarationLine("")}}let d=l.awaitPoints.filter(g=>g.needsOwnCondBranchField);if(d.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let g of d)n.emitDeclarationLine(` int cond_branch_${g.index}; // Which branch was taken in cond with await ${g.index}`);n.emitDeclarationLine("")}let h=l.awaitPoints.filter(g=>g.isInsideWhile);if(h.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let g=l.awaitPoints.length;for(let y of h){n.emitDeclarationLine(` _Bool while_loop_${y.index}_active; // Whether while loop ${y.index} should continue`);let v=(y.whileNestingDepth??1)-1;for(let T=0;T<v;T++)n.emitDeclarationLine(` _Bool while_loop_${g}_active; // Whether outer while loop ${g} should continue`),g++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function jg(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let l of t)n.set(l.structName,l);let r=new Map,i=new Map;for(let l of t)r.set(l.structName,new Set),i.set(l.structName,0);for(let l of t){let u=c=>{let _=r.get(c);_.has(l.structName)||(_.add(l.structName),i.set(l.structName,(i.get(l.structName)??0)+1))};for(let c of l.analysis.capturedVariables){let _;try{_=U(c.type,e)}catch{continue}let p=n.get(_);p&&p.structName!==l.structName&&u(p.structName)}for(let c of l.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let _=c.expr;if(_.tag!=="FnCall")continue;let f=_.args[0]?.$?.type;if(!f)continue;let d;try{d=U(f,e)}catch{continue}let h=n.get(d);h&&h.structName!==l.structName&&u(h.structName)}}let o=[];for(let[l,u]of i.entries())u===0&&o.push(l);let a=[];for(;o.length>0;){let l=o.shift();a.push(l);let u=r.get(l);if(u)for(let c of u){let _=(i.get(c)??0)-1;i.set(c,_),_===0&&o.push(c)}}let s=a.length===t.length?a.map(l=>n.get(l)).filter(Boolean):t;for(let l of s){let{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:_}=Ja(l.bodyExpr,l.analysis),{slotAliases:p,slots:f}=es(u,_,l.analysis.capturedVariables,c,e);o_({asyncBlockId:l.asyncBlockId,structName:l.structName,resultType:l.resultType,resultTypeCName:l.resultTypeCName,captureType:l.captureType,analysis:l.analysis,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:p,overlappingSlots:f},e)}}function Kg(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(c.emitLine(`// Dispose function for async block ${e} state machine`),c.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),c.emitLine(`void ${n}(void* sm_ptr) {`),c.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),c.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),c.emitLine(""),i&&Ve(i)){let _=Object.values(u.types).find(p=>p.type===i);if(!_)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=_.cName,f=i.trait.fields.find(d=>d.label===k.___drop[0]);if(f&&f.assignedValue&&ee(f.assignedValue)){let d=u.functions[f.assignedValue.funcId]?.cName;d&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${d}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!de(r)&&Ve(r)){let _=U(r,u);c.emitLine(" // Drop result field if it was set (state == -1 means completed)"),c.emitLine(" int final_state = sm->state;"),c.emitLine(" if (final_state == -1) {"),c.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let p=Lr(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${_} */`),c.emitLine(" }")}c.emitLine("");{let _=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let d=`sm->${_n(p.id,"local")}`;if(Ae(p.type))_.push(` if ((${d}).data != NULL) { __yo_decr_rc((void*)(${d}).data); }`);else if(xt(p.type)||wt(p.type))_.push(` if (${d} != NULL) { __yo_decr_rc_atomic((void*)${d}); }`);else if(dt(p.type)||D(p.type)&&mn(p.type)){let h=Lr(p.type,u);h?_.push(` if (${d} != NULL) { ${h}(${d}); }`):_.push(` if (${d} != NULL) { __yo_decr_rc((void*)${d}); }`)}else if(Ve(p.type)){let h=Lr(p.type,u);h&&_.push(` ${h}(${d});`)}}if(_.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of _)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function Xg(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let _=Object.values(u.types).find(f=>f.type===l),p=_?_.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${p} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);if(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);`),u.needsCycleGC&&(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;")),u.needsCycleGC)c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`);else{u.disposeTypeIds||(u.disposeTypeIds=new Map,u.nextDisposeTypeId=1);let _=u.disposeTypeIds.get(i);_===void 0&&(_=u.nextDisposeTypeId,u.nextDisposeTypeId=_+1,u.disposeTypeIds.set(i,_)),c.emitLine(` sm->header.type_id = ${_};`)}u.needsCycleGC&&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)"),de(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 a_(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;jg(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:_,resultType:p,resultTypeCName:f,captureType:d,analysis:h}=r,g=e.stateMachineVariables,y=e.currentEvidenceParams,v=new Map,{crossBoundaryIds:T,awaitFutureTempVarAliases:$,variableSegments:C}=Ja(o,h),{slotAliases:L}=es(T,C,h.capturedVariables,$,e),b=h.capturedVariables.filter(N=>N.kind==="outer"||T.has(N.id)||$.has(N.id)||L.has(N.id)),S={...h,capturedVariables:b};for(let N of b)v.set(N.id,N);if(d)for(let N of d.fields)v.set(N.label,{id:N.label,name:N.label,type:N.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let I=e.stateMachineFieldAliases,z=new Map($);for(let[N,O]of L)z.set(N,O);e.stateMachineFieldAliases=z;let M=Qc(o,a,s,l,S,_,d,e);if(e.stateMachineVariables=g,e.currentEvidenceParams=y,e.stateMachineFieldAliases=I,t.emitLine(""),Kg(a,s,c,p,d,S,M,T,$,e),t.emitLine(""),Xg(a,s,l,u,c,_,p,f,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let N=e.deferredAsyncBlocks.slice(i);for(let O of N){let{crossBoundaryIds:Q,awaitFutureTempVarAliases:ne,variableSegments:j}=Ja(O.bodyExpr,O.analysis),{slotAliases:K,slots:te}=es(Q,j,O.analysis.capturedVariables,ne,e);o_({asyncBlockId:O.asyncBlockId,structName:O.structName,resultType:O.resultType,resultTypeCName:O.resultTypeCName,captureType:O.captureType,analysis:O.analysis,crossBoundaryIds:Q,awaitFutureTempVarAliases:ne,overlappingSlotAliases:K,overlappingSlots:te},e)}}n++}}function s_(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&l_(n.body,e)}}var Qg=["__yo_poll_","__yo_fs_event_","__yo_async_"];function Zg(e){return Qg.some(t=>e.startsWith(t))}function l_(e,t){if(e&&F(e)){let n=e;if(Yt(e)){t.usesAsync=!0;let r=e.$?.type;if(r&&Ie(r)&&Bt(r)){let a=`${e.$?.variableName||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=a),t.types[r.id]={type:r,cName:a},t.emitter.emitDeclarationLine(`typedef struct ${a}_struct ${a}; // Forward declaration for async state machine`)}}if(Yt(e)){let r=e.$?.type;if(r&&Ie(r)&&Bt(r)){let o=e.$?.variableName||`io_async_block_${Date.now()}`,a=!!e.$?.awaitAnalysis,s=a?`${o}_state_t`:`${o}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=s),t.types[r.id]={type:r,cName:s},t.emitter.emitDeclarationLine(`typedef struct ${s}_struct ${s}; // Forward declaration for io.async ${a?"state machine":"sync future"}`)}}(En(e)||Ua(e))&&(t.usesAsync=!0);{let r=n.func.$?.type;r&&"isExtern"in r&&r.isExtern==="yo"&&"externName"in r&&typeof r.externName=="string"&&Zg(r.externName)&&(t.usesAsync=!0)}{let r=n.func.$?.type;r&&"isExtern"in r&&r.isExtern==="yo"&&"externName"in r&&typeof r.externName=="string"&&(r.externName==="__yo_thread_spawn"||r.externName==="__yo_worker_spawn")&&(t.usesParallelism=!0)}for(let r of n.args)l_(r,t)}}function u_(e,t,n){let r=e.$?.type;if(!r||!Ie(r))return"/* Error: io.async must return a Future type */";let i=Bt(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(D(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let S=e.$?.runtimeArgExprsInOrder?.[0]?.$?.closureFunctionValue;if(S&&ee(S)){let I=S.type?.return?.type;if(I&&D(I)&&I.resolvedConcreteType)o=I.resolvedConcreteType;else if(S.body?.$?.type){let z=S.body.$.type;D(z)&&z.resolvedConcreteType?o=z.resolvedConcreteType:D(z)||(o=z)}}}let a=U(o,n),s=e.$?.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,_=e.$?.runtimeArgExprsInOrder?.[0];if(!_?.$)return"/* Error: Missing closure argument for io.async */";let p=P(_,t,n),f=_.$.type,d,h;if(D(f)&&f.resolvedConcreteType){let b=f.resolvedConcreteType,S=n.implClosureCallMap.get(b.id);S&&(d=S.functionCName);let I=n.types[b.id];I&&(h=I.cName)}if(!d||!h)return"/* Error: no closure function or capture type for io.async sync path */";c.emitDeclarationLine(`struct ${s}_struct {`),c.emitDeclarationLine(" __yo_ref_header_t header;"),c.emitDeclarationLine(" int state;"),de(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(` ${h} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let g="";for(let b in n.functions){let S=n.functions[b];if(S.cName===d){let I=kt(S.value.type);I.length>0&&(g=", "+I.map(z=>`(void*)sm->__capture.${z.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),de(o)?c.emitDeclarationLine(` ${d}(&sm->__capture${g});`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture${g});`),g&&(c.emitDeclarationLine(" if (__yo_effect_escaped) {"),c.emitDeclarationLine(" __yo_effect_escaped = 0;"),c.emitDeclarationLine(" sm->state = -2;"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" return;"),c.emitDeclarationLine(" }")),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let y=_.$.captureType,v=y&&Ve(y)?Lr(y,n):void 0,T=y&&Ve(y)?Un(y,n):void 0,$=Lr(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||$)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),$&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${$}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let C=e.$?.variableName||"__io_async_result",L=_t(r,C,n);if(c.emitLine(`${t}${L} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${C}, 0, sizeof(${s}));`),c.emitLine(`${t}${C}->header.ref_count = 1;`),n.needsCycleGC&&(c.emitLine(`${t}${C}->header.gc_flags = 0;`),c.emitLine(`${t}${C}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${C}->header.gc_next = NULL;`),c.emitLine(`${t}${C}->header.gc_prev = NULL;`)),n.needsCycleGC)c.emitLine(`${t}${C}->header.dispose_fn = (void(*)(void*))${l};`);else{n.disposeTypeIds||(n.disposeTypeIds=new Map,n.nextDisposeTypeId=1);let b=n.disposeTypeIds.get(l);b===void 0&&(b=n.nextDisposeTypeId,n.nextDisposeTypeId=b+1,n.disposeTypeIds.set(l,b)),c.emitLine(`${t}${C}->header.type_id = ${b};`)}return n.needsCycleGC&&c.emitLine(`${t}${C}->header.traverse_fn = NULL;`),c.emitLine(`${t}${C}->__capture = ${p};`),T&&c.emitLine(`${t}${C}->__capture = ${T}(${C}->__capture);`),c.emitLine(`${t}${C}->state = 0;`),c.emitLine(`${t}${C}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${C}->continuation_fn = NULL;`),c.emitLine(`${t}${C}->continuation_sm = NULL;`),C}function c_(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];ee(o)&&(Wr(o.type,t),si(o.body,t))}if(t.moduleLevelInitExprs)for(let i of t.moduleLevelInitExprs)si(i,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(Wr(o.value.type,t),o.value.specializedType&&Wr(o.value.specializedType,t),si(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&Gt(a.value.type,t),si(a.body,t)}}}function Wr(e,t){for(let n of e.parameters)Gt(n.type,t);for(let n of e.forallParameters)Gt(n.type,t);Gt(e.return.type,t)}function si(e,t){if(e.$&&e.$.type&&Gt(e.$.type,t),e.$&&e.$.value&&ee(e.$.value)){let n=e.$.value;n.isControlFunction?(Wr(n.type,t),Wt(n.body,t)):t.functions[n.funcId]||n.type.parameters.map(o=>o.type).some(o=>D(o)&&Ie(o)&&!o.resolvedConcreteType)||(t.functions[n.funcId]={value:n,cName:oe(n.funcId)},Wr(n.type,t),Wt(n.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let n of e.$.deferredDropExpressions)si(n,t);if(e.$&&e.$.macroExpansion&&si(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:n}of e.$.runtimeDestructurings)Gt(n,t);if(e.$&&e.$.captureType&&pe(e.$.captureType)){let n=e.$.captureType;if(!t.types[n.id]){t.types[n.id]={type:n,cName:`__yo_${n.id}`};for(let r of n.fields)Gt(r.type,t);for(let r of n.trait.fields)if(r.assignedValue&&ee(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},Wr(i.type,t),Wt(i.body,t))}}}switch(e.tag){case"FnCall":if(E(e,V.test))break;si(e.func,t);for(let n of e.args)si(n,t);break;case"Atom":e.$?.value&&R(e.$.value)&&Gt(e.$.value.value,t);break}}function Gt(e,t){if(!t.types[e.id]){if(D(e)&&Jt(e)){if(e.resolvedConcreteType){Gt(e.resolvedConcreteType,t);return}let n=cn(e);n&&Gt(n,t);return}if(D(e)&&Ie(e)){let n=Bt(e);n&&Gt(n.isFuture.outputType,t);return}if(D(e)&&e.resolvedConcreteType){Gt(e.resolvedConcreteType,t);return}if(!me(e)){if(pe(e)||ot(e)||ge(e)||Se(e)||Ae(e)||Ce(e)||Le(e)||Ge(e)||xt(e)||wt(e)){let n=Ge(e)?U(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},pe(e))for(let r of e.fields)Gt(r.type,t);if(ge(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)Gt(i.type,t)}if(ot(e))for(let r of e.fields)Gt(r.type,t);if(Ae(e)){let r=e;for(let i of r.requiredTraits)Gt(i.traitType,t)}if(xt(e)){let r=e;Gt(r.childType,t),U(r,t)}if(wt(e)){let r=e;Gt(r.childType,t),U(r,t)}if(Ge(e)&&Gt(e.childType,t),Ce(e)||Le(e)){for(let r of e.fields)Gt(r.type,t);for(let r of e.fields)if(r.assignedValue&&ee(r.assignedValue)){let i=r.assignedValue,o=i.type;if(o.parameters.every(s=>s.isCompileTimeOnly)&&o.return.isCompileTimeOnly)continue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:oe(i.funcId)},Wr(i.type,t),Wt(i.body,t))}else if(r.assignedValue&&(Ye(r.assignedValue)||mt(r.assignedValue))){let i=r.assignedValue;la(i,t,!1)}}}else if(ke(e)){let n=e,r=n.childType,i=n.length;if(Ue(i)){Gt(r,t);let o=U(r,t),a=`Array_${oe(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(Ee(e)){if(Gt(e.childType,t),Ge(e.childType)){let r=e.childType.childType;Gt(r,t);let i=U(r,t),o=`Slice_${oe(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:U(e,t)}}else qc.has(e.tag)&&(t.types[e.id]={type:e,cName:U(e,t)});e.trait&&Gt(e.trait,t)}}}function Ni(e){if(e.$&&e.$.value&&ue(e.$.value)&&!(G(e.$.type)&&e.$.type.isExtern)){if(!de(e.$.type))return!0}if(F(e)){if(Ni(e.func))return!0;for(let t of e.args)if(!(t.$?.type&&de(t.$.type))&&Ni(t))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&de(e.$.type))return!1;if(Ni(e.$.macroExpansion))return!0}if(e.$?.deferredDupExpressions){for(let t of e.$.deferredDupExpressions)if(Ni(t))return!0}if(e.$?.deferredDropExpressions){for(let t of e.$.deferredDropExpressions)if(Ni(t))return!0}return!1}function la(e,t,n=!0){for(let r=0;r<e.fields.length;r++){let i=e.fields[r],o=e.type.fields[r];if(ee(i)){let a=o.label;if(a==="main")t.functions[i.funcId]={value:i,cName:"__yo_user_main"};else if(t.isLibrary)if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=oe(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:oe(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:oe(i.funcId)};else if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=oe(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:oe(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:oe(i.funcId)};Wt(i.body,t)}}}function __(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&ee(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:oe(r.funcId)},Wt(r.body,t)):r&&Ye(r)&&__(r,t)}}function Wt(e,t){if(e.$?.value&&Ye(e.$.value)){let i=e.$.value;__(i,t)}if(F(e)&&E(e,V.test)||F(e)&&E(e,k.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Wt(e.$.macroExpansion,t),e.$?.effectAnalysis){let i=e.$.effectAnalysis.handlerValue;i&&ee(i)&&Wt(i.body,t)}if(e.$&&e.$.closureFunctionValue){let i=e.$.closureFunctionValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:oe(i.funcId)},Wt(i.body,t))}if(e.$?.indexMethodValue&&ee(e.$.indexMethodValue)){let i=e.$.indexMethodValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:oe(i.funcId)},Wt(i.body,t))}if(F(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let i=e.$.type,o=e.args[0];if(Ae(i)&&o&&o.$?.type){let a=o.$.type,s=e.$.dynCallTraitValues;if(s.length>0&&(dt(a)||xn(a))){let l=xn(a)?a.fields[0].type:a,u=`${l.id}_${i.id}`;t.dynImpls.set(u,{dynType:i,concreteType:l,dataType:a,traitValues:s})}}}if(F(e)){let i=e.func.$?.type,o=e.func.$?.value;if(e.func.token.value==="?=")return;if(G(i)){if(ee(o)&&o.isControlFunction){Wt(o.body,t);for(let a of e.args)Wt(a,t);return}if(ee(o)){if(o.type.return.isCompileTimeOnly||bs(o)&&!o.specializedType)return;if(o.specializedType&&hr(o.specializedType)&&kt(o.specializedType).length===0){Wt(e.func,t);for(let s of e.args)Wt(s,t);return}if(!t.functions[o.funcId]){let a=!1;if(Ni(o.body)){let s=o.specializedType??o.type;if(a=s.implicitParameters.length>0&&(kt(s).length>0||!hr(o.type)&&o.type.implicitParameters.length>0),!a)return}if(!a&&!(kt(o.specializedType??o.type).length>0)&&(o.specializedType??o.type).parameters.map(c=>c.type).some(c=>D(c)&&Ie(c)&&!c.resolvedConcreteType))return;t.functions[o.funcId]={value:o,cName:oe(o.funcId)},Wt(o.body,t)}}else if(i.isExtern==="c"){let a=i.externName?i.externName:B(e.func)?e.func.token.value:i.id;t.externFunctions[i.id]={type:i,cName:a}}else if(i.isExtern==="yo"){let a=i.externName;if(!(a&&a.startsWith("__yo_"))){let s=a?oe(a):B(e.func)?oe(e.func.token.value):oe(i.id);t.externFunctions[i.id]={type:i,cName:s}}}}Wt(e.func,t);for(let a of e.args)Wt(a,t)}let n=e.$?.type,r=e.$?.value;if(G(n)){if(ee(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:oe(r.funcId)}),r.specializedFunctionCaches)for(let i of r.specializedFunctionCaches){let o=i.specializedFunction;o&&!t.functions[o.funcId]&&(o.isModuleEffectMember=!0,t.functions[o.funcId]={value:o,cName:oe(o.funcId)},Wt(o.body,t))}Wt(r.body,t);return}if(ee(r)){if(bs(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(Ni(r.body))return;t.functions[r.funcId]={value:r,cName:oe(r.funcId)},Wt(r.body,t)}}if(R(e.$?.value)&&Gt(e.$.value.value,t),e.$?.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)Wt(i,t);if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions)Wt(i,t);if(e.$?.dynCallTraitValues)for(let i of e.$.dynCallTraitValues)la(i,t,!1)}function p_(e){let t=k.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!pe(r)||!r.isReferenceSemantics)continue;let i=jn({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&ee(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:oe(a.funcId)},Wr(a.type,e),Wt(a.body,e)}}}function f_(e){let t=e.emitter,n=new Set;for(let[,r]of e.dynImpls){let i=e.types[r.dynType.id]?.cName||`__yo_dyn_${r.dynType.id}`;n.has(i)||(n.add(i),t.emitLine(`${i} __yo_dup_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function d_(e){let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,r]of e.dynImpls){let i=D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,a=`__yo_dyn_box_${e.types[i.id]?.cName||`unknown_${i.id}`}`;if(n.has(a))continue;n.add(a);let s=U(i,e);t.emitLine(`static ${a}* __yo_new_${a}(${s} value) {`),t.emitLine(` ${a}* box = (${a}*)__yo_malloc(sizeof(${a}));`),t.emitLine(" box->header.ref_count = 1;"),e.needsCycleGC&&(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;"));let l=`__yo_dispose_${a}`;if(e.needsCycleGC)t.emitLine(` box->header.dispose_fn = ${l};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let _=e.disposeTypeIds.get(l);_===void 0&&(_=e.nextDisposeTypeId,e.nextDisposeTypeId=_+1,e.disposeTypeIds.set(l,_)),t.emitLine(` box->header.type_id = ${_};`)}e.needsCycleGC&&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(`static void __yo_dispose_${a}(void* ptr) {`),t.emitLine(` ${a}* box = (${a}*)ptr;`);let c=(D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType).trait?.fields.find(_=>_.label===k.___drop[0]);if(c&&c.assignedValue&&ee(c.assignedValue)){let _=e.functions[c.assignedValue.funcId]?.cName;_&&t.emitLine(` ${_}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function m_(e){let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[n,r]of e.dynImpls){let i=r.dataType,o=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:a}of r.dynType.requiredTraits){if(!At(a))continue;let s=a.isFn.callType,l=U(s.return.type,e),u=`__yo_wrap_${n}_call`,c=["void* self_ptr"];for(let _=0;_<s.parameters.length;_++){let p=s.parameters[_],f=U(p.type,e);c.push(`${f} arg${_+1}`)}if(t.emitDeclarationLine(`static ${l} ${u}(${c.join(", ")}) {`),xn(i)){let _=e.types[i.id]?.cName||`unknown_${i.id}`,p=oe(i.fields[0].label);t.emitDeclarationLine(` ${_}* box = (${_}*)self_ptr;`);let f=i.fields[0].type,d=D(f)&&f.resolvedConcreteType?f.resolvedConcreteType:f,h=e.implClosureCallMap.get(d.id),g=(()=>{if(h)return h.functionCName;for(let[,v]of Object.entries(e.functions))if(v.value.closureInfo?.captureType?.id===d.id)return v.cName})(),y=[];if(g){y.push(`(void*)&box->${p}`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);Nr(s.return.type)?t.emitDeclarationLine(` ${g}(${y.join(", ")});`):t.emitDeclarationLine(` return ${g}(${y.join(", ")});`)}else{y.push(`box->${p}.data`);for(let v=0;v<s.parameters.length;v++)y.push(`arg${v+1}`);Nr(s.return.type)?t.emitDeclarationLine(` box->${p}.call(${y.join(", ")});`):t.emitDeclarationLine(` return box->${p}.call(${y.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let _=0;_<s.parameters.length;_++)t.emitDeclarationLine(` (void)arg${_+1};`);Nr(s.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${l} zero = (${l})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let a=0;a<r.dynType.requiredTraits.length;a++){let{traitType:s}=r.dynType.requiredTraits[a];if(At(s))continue;let l=r.traitValues[a];if(!l){t.emitDeclarationLine(`/* Warning: Module value missing for module ${a} */`);continue}let c=l.type.fields;for(let _=0;_<c.length;_++){let p=c[_];if(p.label==="Self"||o.has(p.label))continue;let f=l.fields[_];if(!f||!ee(f)){t.emitDeclarationLine(`/* Warning: Module field ${p.label} is not a function value */`);continue}let d=p.type;if(!G(d)){t.emitDeclarationLine(`/* Warning: Module field ${p.label} is not a function type */`);continue}let h=f.funcId,g=e.functions[h]?.cName;if(!g){t.emitDeclarationLine(`/* Warning: Impl function for ${p.label} not found */`);continue}let y=`__yo_wrap_${n}_${p.label}`,v=U(d.return.type,e),T=["void* self_ptr"];for(let b=1;b<d.parameters.length;b++){let S=d.parameters[b],I=U(S.type,e);T.push(`${I} arg${b}`)}t.emitDeclarationLine(`static ${v} ${y}(${T.join(", ")}) {`);let $=d.parameters[0]?.type,C;if(xn(i)){let b=e.types[i.id]?.cName||`unknown_${i.id}`,S=oe(i.fields[0].label);t.emitDeclarationLine(` ${b}* box = (${b}*)self_ptr;`),$&&Ee($)?C=`&box->${S}`:C=`box->${S}`}else{let b=U(r.concreteType,e);t.emitDeclarationLine(` ${b} concrete_value = (${b})self_ptr;`),$&&Ee($)?C="&concrete_value":C="concrete_value"}let L=[C];for(let b=1;b<d.parameters.length;b++)L.push(`arg${b}`);Nr(d.return.type)?t.emitDeclarationLine(` ${g}(${L.join(", ")});`):t.emitDeclarationLine(` return ${g}(${L.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function y_(e){let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn TypeId Statics ==="),t.emitDeclarationLine("// Unique static per concrete type \u2014 address is the runtime TypeId"),t.emitDeclarationLine("");let n=new Set;e.typeIdStatics||(e.typeIdStatics=new Map);for(let[,r]of e.dynImpls){let i=D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,o=e.types[i.id]?.cName||`unknown_${i.id}`,a=`__yo_typeid_${o}`;!n.has(a)&&!e.typeIdStatics.has(i.id)&&(n.add(a),e.typeIdStatics.set(i.id,a),t.emitDeclarationLine(`static const char ${a} = 0; // TypeId for ${o}`))}t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[r,i]of e.dynImpls){let o=e.types[i.dynType.id]?.cName||`__yo_dyn_${i.dynType.id}`,a=D(i.concreteType)&&i.concreteType.resolvedConcreteType?i.concreteType.resolvedConcreteType:i.concreteType,s=e.types[a.id]?.cName||`unknown_${a.id}`,l=`__yo_vtable_${r}`,u=`${o}_vtable`,c=`__yo_typeid_${s}`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${i.dynType.requiredTraits.map(({traitType:f})=>f.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${c},`);let _=new Set,p=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:f}of i.dynType.requiredTraits){if(At(f)){let d=`__yo_wrap_${r}_call`;t.emitDeclarationLine(` .call = ${d},`),_.add("call");continue}for(let d of f.fields)if(d.label!=="Self"&&!p.has(d.label)&&!_.has(d.label)&&(_.add(d.label),G(d.type))){let h=d.type;if(h.parameters.length>0){let g=h.parameters[0];if(g&&g.label==="self"){let y=`__yo_wrap_${r}_${d.label}`;t.emitDeclarationLine(` .${oe(d.label)} = ${y},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function g_(e,t){let r=Ht(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
|
|
200
200
|
// ============================================================================
|
|
201
201
|
// Async/Await Runtime - Per-Thread Cooperative Scheduler
|
|
202
202
|
// ============================================================================
|
|
@@ -479,7 +479,7 @@ static __yo_yield_future_t __yo_async_yield(void) {
|
|
|
479
479
|
future.continuation_sm = NULL;
|
|
480
480
|
return future;
|
|
481
481
|
}
|
|
482
|
-
`)}function
|
|
482
|
+
`)}function h_(e){e.emitLine(`
|
|
483
483
|
// ============================================================================
|
|
484
484
|
// Platform-specific sync helpers (macOS)
|
|
485
485
|
// ============================================================================
|
|
@@ -1029,7 +1029,7 @@ static uint64_t __yo_statx_blocks(void* statxbuf) {
|
|
|
1029
1029
|
return (uint64_t)((struct stat*)statxbuf)->st_blocks;
|
|
1030
1030
|
}
|
|
1031
1031
|
|
|
1032
|
-
`)}function
|
|
1032
|
+
`)}function v_(e){e.emitLine(`
|
|
1033
1033
|
// ============================================================================
|
|
1034
1034
|
// Async I/O Runtime (macOS - kqueue)
|
|
1035
1035
|
// ============================================================================
|
|
@@ -2058,7 +2058,7 @@ static __yo_io_future_t* __yo_async_getsockopt_start(int32_t sockfd, int32_t lev
|
|
|
2058
2058
|
return future;
|
|
2059
2059
|
}
|
|
2060
2060
|
|
|
2061
|
-
`)}function
|
|
2061
|
+
`)}function T_(e){e.emitLine(`
|
|
2062
2062
|
// ============================================================================
|
|
2063
2063
|
// Platform-specific sync helpers (Linux)
|
|
2064
2064
|
// ============================================================================
|
|
@@ -2544,7 +2544,7 @@ static uint64_t __yo_statx_blocks(void* statxbuf) {
|
|
|
2544
2544
|
}
|
|
2545
2545
|
|
|
2546
2546
|
|
|
2547
|
-
`)}function
|
|
2547
|
+
`)}function E_(e){e.emitLine(`
|
|
2548
2548
|
// ============================================================================
|
|
2549
2549
|
// Async I/O Runtime (Linux - io_uring via liburing)
|
|
2550
2550
|
// ============================================================================
|
|
@@ -3609,7 +3609,7 @@ static inline void* __yo_async_getsockopt_start(int32_t sockfd, int32_t level, i
|
|
|
3609
3609
|
|
|
3610
3610
|
#endif // __YO_HAS_LIBURING
|
|
3611
3611
|
|
|
3612
|
-
`)}function
|
|
3612
|
+
`)}function $_(e){e.emitLine(`
|
|
3613
3613
|
// ============================================================================
|
|
3614
3614
|
// Platform-specific sync helpers (Windows)
|
|
3615
3615
|
// ============================================================================
|
|
@@ -5485,7 +5485,7 @@ static int32_t __yo_tty_get_winsize(int32_t fd, int32_t* width, int32_t* height)
|
|
|
5485
5485
|
|
|
5486
5486
|
static int32_t __yo_isatty(int32_t fd) { return _isatty(fd) ? 1 : 0; }
|
|
5487
5487
|
|
|
5488
|
-
`)}function
|
|
5488
|
+
`)}function C_(e){e.emitLine(`
|
|
5489
5489
|
// ============================================================================
|
|
5490
5490
|
// Async I/O Runtime (Windows - IOCP)
|
|
5491
5491
|
// ============================================================================
|
|
@@ -7738,7 +7738,7 @@ static int __yo_poll_and_fs_event_tick(void) {
|
|
|
7738
7738
|
}
|
|
7739
7739
|
|
|
7740
7740
|
|
|
7741
|
-
`)}function
|
|
7741
|
+
`)}function b_(e,t){e.emitLine(`
|
|
7742
7742
|
// ============================================================================
|
|
7743
7743
|
// WASM Platform \u2014 Synchronous System Helpers (Emscripten POSIX)
|
|
7744
7744
|
// ============================================================================
|
|
@@ -8015,7 +8015,7 @@ static int64_t __yo_sync_lseek(int32_t fd, int64_t offset, int32_t whence) {
|
|
|
8015
8015
|
off_t result = lseek(fd, (off_t)offset, whence);
|
|
8016
8016
|
return (result < 0) ? (int64_t)(-errno) : (int64_t)result;
|
|
8017
8017
|
}
|
|
8018
|
-
`)}function
|
|
8018
|
+
`)}function k_(e,t){let n=t?Bc(t):!1;e.emitLine(`
|
|
8019
8019
|
// ============================================================================
|
|
8020
8020
|
// WASM Platform \u2014 Async I/O (Sync-wrapped IOFutures via Emscripten POSIX)
|
|
8021
8021
|
// ============================================================================
|
|
@@ -8473,7 +8473,7 @@ static int32_t __yo_fs_event_start(void* h, const char* path, uint32_t flags, vo
|
|
|
8473
8473
|
}
|
|
8474
8474
|
static int32_t __yo_fs_event_stop(void* h) { (void)h; return -ENOSYS; }
|
|
8475
8475
|
static void __yo_fs_event_close(void* h) { (void)h; }
|
|
8476
|
-
`)}function
|
|
8476
|
+
`)}function w_(e,t){let n=Ht(t),r=xi(t),i=Jn(t),o=er(t);if(n){$_(e);return}e.emitLine(`
|
|
8477
8477
|
// ============================================================================
|
|
8478
8478
|
// File System Helper Functions
|
|
8479
8479
|
// ============================================================================
|
|
@@ -8895,7 +8895,7 @@ static int32_t __yo_tty_get_winsize(int32_t fd, int32_t* width, int32_t* height)
|
|
|
8895
8895
|
static int32_t __yo_isatty(int32_t fd) {
|
|
8896
8896
|
return isatty(fd) ? 1 : 0;
|
|
8897
8897
|
}
|
|
8898
|
-
`),i&&
|
|
8898
|
+
`),i&&h_(e),r&&T_(e),o&&b_(e,t)}function F_(e,t,n){let r=Ht(t),i=xi(t),o=Jn(t);if(i){let a;n.needsCycleGC?a=" future->header.dispose_fn = __yo_timer_future_dispose;":n.registerDisposeTypeId?a=` future->header.type_id = ${n.registerDisposeTypeId("__yo_timer_future_dispose")};`:a=" // No dispose registration available",e.emitLine(`
|
|
8899
8899
|
// ============================================================================
|
|
8900
8900
|
// Timer Operations (Linux - timerfd + io_uring)
|
|
8901
8901
|
// ============================================================================
|
|
@@ -9948,7 +9948,7 @@ ${o?` {
|
|
|
9948
9948
|
|
|
9949
9949
|
return count;
|
|
9950
9950
|
}
|
|
9951
|
-
`))}function
|
|
9951
|
+
`))}function L_(e,t,n,r){g_(e,t),xi(t)?E_(e):Jn(t)?v_(e):Ht(t)?C_(e):er(t)&&k_(e,t),er(t)||F_(e,t,r)}function Jg(e,t,n,r){if(e.$?.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){st(e,n,r);let i=e.$.deferredDupExpressions[0];if(F(i)&&i.$?.variableName)return Te(i.$.variableName,i.$.env)}return t}function eh(e,t,n){if(e.$?.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if(e.$?.variableName){let i=e.$.variableName;e.$.variableName=void 0;let o=P(e,t,n);e.$.variableName=i;let a=U(e.$.type,n),s=oe(i);s!==o&&n.emitter.emitLine(`${t}${a} ${s} = ${o};`)}else{let i=P(e,t,n);n.emitter.emitLine(`${t}${i};`)}st(e,t,n);let r=e.$.deferredDupExpressions[0];if(F(r)&&r.$?.variableName)return Te(r.$.variableName,r.$.env)}return P(e,t,n)}function th(e){if(F(e)&&E(e,k.___drop)&&e.args.length>=1){let t=e.args[0];if(t&&B(t))return Te(t.token.value,t.$?.env)}if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0])){let t=e.func.args[0];return Te(t.token.value,t.$?.env)}}function hn(e,t,n,r=!1,i=!1,o=!1){if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let a=new Set;if(!i&&n.$?.deferredDropExpressions)for(let u of n.$.deferredDropExpressions){let c=Nn(u);c&&a.add(c)}let s=t.effectSmConsumedArgCNames,l=n.$?.env&&!o?t.pendingDeferredDrops.filter(u=>{let c=Nn(u);return!c||a.has(c)?!1:Y(n.$.env,c).length>0}):t.pendingDeferredDrops.filter(u=>{let c=Nn(u);if(!c||a.has(c))return!1;if(s&&s.size>0){let _=th(u);if(_&&s.has(_))return!1}return!0});if(l.length>0){let u=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${u}`);for(let c of l){let _=P(c,e,t);_&&t.emitter.emitLine(`${e}${_};`)}}}}function tr(e,t,n,r=!1){if(!t.consumedVarPendingDrops||t.consumedVarPendingDrops.length===0)return;let i=n.$?.env&&!r?t.consumedVarPendingDrops.filter(o=>{let a=Nn(o);return a?Y(n.$.env,a).length>0:!1}):[...t.consumedVarPendingDrops];if(i.length>0){t.emitter.emitLine(`${e}// Drop consumed variables (escape propagation)`);for(let o of i){let a=P(o,e,t);a&&t.emitter.emitLine(`${e}${a};`)}}}function I_(e,t,n){let r=n;if(r.continuationVariables){let o=r.continuationVariables.get("resume");if(o&&"directReturnVar"in o){if(!o.isUnitReturn){let a=e.args[0];if(a){let s=P(a,t,n);s&&n.emitter.emitLine(`${t}${o.directReturnVar} = ${s};`)}}return hn(t,r,e,!1,!0),o.directExitLabel&&n.emitter.emitLine(`${t}goto ${o.directExitLabel};`),""}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!de(e.$.type))return"// Error: return expression missing temporary variable name";let o,a=!1;if(r.inAsyncStateMachine&&i.$?.variableName){let _=i.$.variableName;i.$.variableName=void 0,o=P(i,t,n),i.$.variableName=_,a=!0}else if(i.$?.variableName&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){let _=i.$.variableName;i.$.variableName=void 0;let p=P(i,t,n);i.$.variableName=_;let f=U(i.$.type,n),d=Te(_,i.$.env);d!==p&&n.emitter.emitLine(`${t}${f} ${d} = ${p};`),o=d}else o=P(i,t,n);let s=!1;if(i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,r);let _=i.$.deferredDupExpressions[0];F(_)&&_.$?.variableName&&(o=Te(_.$.variableName,_.$.env),s=!0)}let l=U(e.$.type,n),u=e.$.variableName?Te(e.$.variableName,e.$.env):void 0;if(!s&&!de(e.$.type)&&u&&u!==o&&n.emitter.emitLine(`${t}${l} ${u} = ${o};`),e.$.deferredDropExpressions&&bt(e,t,n),r.inAsyncStateMachine){let _=r.inAsyncStateMachine.futureType,f=Bt(_).isFuture.outputType,d=de(f);hn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let h;return d||(h=e.$.variableName&&a?e.$.variableName:e.$.variableName||o),Br({emitter:n.emitter,indent:t,resultCode:h,debugLabel:n.currentFunctionName}),""}return hn(t,r,e),de(e.$.type)?"return":`return ${s?o:u??o}`}else{if(e.$?.deferredDropExpressions&&bt(e,t,n),r.inAsyncStateMachine){let o=r.inAsyncStateMachine.futureType,s=Bt(o).isFuture.outputType,l=de(s);hn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let u=l?void 0:`(${U(s,n)}){0}`;return Br({emitter:n.emitter,indent:t,resultCode:u,debugLabel:n.currentFunctionName}),""}return hn(t,r,e),"return"}}function A_(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=go(e,n),o=Jg(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(E(e,V.return)){let i=P(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=eh(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function x_(e,t,n,r){let i=Ht(n),o=xi(n),a=Jn(n),s=i?"static unsigned __stdcall __yo_thread_entry(void* arg) {":"static void* __yo_thread_entry(void* arg) {",l=i?"return 0;":"return NULL;",u=i?"static unsigned __stdcall __yo_worker_thread_entry(void* arg) {":"static void* __yo_worker_thread_entry(void* arg) {",c=i?"return 0;":"return NULL;",_=i?"SwitchToThread();":"sched_yield();",p=i?`static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex; // Pool-level mutex (initialized in __yo_worker_init_mutex)
|
|
9952
9952
|
static volatile int __yo_worker_pool_mutex_initialized = 0;`:"static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex = __YO_THREAD_SYNC_INIT; // Pool-level mutex",f=i?`
|
|
9953
9953
|
// Initialize the worker pool mutex on Windows (must be called before any use)
|
|
9954
9954
|
static void __yo_worker_init_mutex(void) {
|
|
@@ -10330,7 +10330,7 @@ static void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
|
|
|
10330
10330
|
__yo_cond_signal(&worker->cond);
|
|
10331
10331
|
__yo_mutex_unlock(&worker->mutex);
|
|
10332
10332
|
}
|
|
10333
|
-
`)}function
|
|
10333
|
+
`)}function Vl(e){let t=e.emitter,n=!1;for(let r in e.types){let{type:i,cName:o}=e.types[r];if(!("requiredTraits"in i&&"negativeTraits"in i))continue;n||(t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Type Forward Declarations ==="),n=!0);let a=`${o}_vtable`;t.emitDeclarationLine(`typedef struct ${a}_s ${a};`),t.emitDeclarationLine(`typedef struct { // ${i.typeName||"Dyn"} : ${A(i)} (value type - fat pointer)`),t.emitDeclarationLine(" void* data; // Pointer to boxed data (with __yo_ref_header_t)"),t.emitDeclarationLine(` const ${a}* vtable; // Pointer to static vtable (no allocation needed)`),t.emitDeclarationLine(`} ${o};`),t.emitDeclarationLine("")}}function Nl(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct ${i}_s { // Vtable for ${A(e)}`),r.emitDeclarationLine(" uintptr_t __yo_type_id; // Runtime type identity (address of unique static per concrete type)");let o=new Set,a=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(At(s)){let l=s.isFn.callType,u=U(l.return.type,n),c=l.parameters.map(_=>{let p=U(_.type,n),f=oe(_.label);return`${p} ${f}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=oe(l.label);if(G(l.type)){let c=l.type;if(c.parameters.length>0){let _=c.parameters[0];if(_&&_.label==="self"){let p=U(c.return.type,n),f=c.parameters.map((d,h)=>{if(h===0)return"void* self";{let g=U(d.type,n),y=oe(d.label);return`${g} ${y}`}}).join(", ");r.emitDeclarationLine(` ${p} (*${u})(${f}); // Method pointer for ${l.label}`)}}}else{let c=U(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine("")}function Ml(e){let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,r]of e.dynImpls){let i=D(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,a=`__yo_dyn_box_${e.types[i.id]?.cName||`unknown_${i.id}`}`;if(n.has(a))continue;n.add(a);let s=U(i,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" __yo_ref_header_t header;"),t.emitDeclarationLine(` ${s} value;`),t.emitDeclarationLine(`} ${a};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`static ${a}* __yo_new_${a}(${s} value);`),t.emitDeclarationLine(`static void __yo_dispose_${a}(void* ptr);`),t.emitDeclarationLine("")}}function S_(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
|
|
10334
10334
|
// Based on QuickJS trial deletion algorithm
|
|
10335
10335
|
// See CYCLE_COLLECTION.md for design details
|
|
10336
10336
|
|
|
@@ -10510,7 +10510,7 @@ typedef struct __yo_io_future_t {
|
|
|
10510
10510
|
} __yo_io_future_t;
|
|
10511
10511
|
|
|
10512
10512
|
// Forward declarations will be added here if needed
|
|
10513
|
-
`);for(let p in e.types){let{type:f,cName:d}=e.types[p];if(!me(f)&&!(f.isExtern==="c"&&f.externName)){if(
|
|
10513
|
+
`);for(let p in e.types){let{type:f,cName:d}=e.types[p];if(!me(f)&&!(f.isExtern==="c"&&f.externName)){if(on(f))e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`);else if(pe(f)){if(f.isNewtype&&f.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}else if(ge(f)){let h=tn(f),g=Pn(f);!h&&!g&&e.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),nh(e),rh(e),Ol(e),ih(e);for(let p in e.types){let{type:f,cName:d}=e.types[p];me(f)||f.isExtern==="c"&&f.externName||ge(f)&&Pn(f)&&Dl(f,d,e)}let i=[];for(let p in e.types){let{type:f,cName:d}=e.types[p];me(f)||f.isExtern==="c"&&f.externName||(pe(f)?i.push({typeId:p,type:f,cName:d,kind:"struct"}):ge(f)&&!Pn(f)&&!tn(f)?i.push({typeId:p,type:f,cName:d,kind:"enum"}):Se(f)&&i.push({typeId:p,type:f,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(Ee(p)){let d=p.childType;if(pe(d)&&d.isNewtype)return d}else if(ge(p)){let f=tn(p);if(f&&Ee(f)){let h=f.childType;if(pe(h)&&h.isNewtype)return h}}return null}for(let{typeId:p,type:f,kind:d}of i)if(o.set(p,new Set),d==="struct"&&pe(f))for(let h of f.fields){let g=h.type;D(g)&&g.resolvedConcreteType&&(g=g.resolvedConcreteType);let y=l(g);if(y){let v=U(y,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}if(ge(g)){if(!tn(g)){let v=U(g,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}}else if(pe(g)&&g.isNewtype){let v=U(g,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}else if(pe(g)&&!g.isReferenceSemantics&&!g.isNewtype){let v=U(g,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}else if(Se(g)){let v=U(g,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}}else if(d==="enum"&&ge(f)){for(let h of f.variants)if(h.fields)for(let g of h.fields){let y=g.type;if(D(y)&&y.resolvedConcreteType&&(y=y.resolvedConcreteType),ge(y)){let v=U(y,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}else if(pe(y)&&y.isNewtype){let v=U(y,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}else if(Se(y)){let v=U(y,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}else if(pe(y)&&!y.isReferenceSemantics&&!y.isNewtype){let v=U(y,e),T=s.get(v);T&&T!==p&&a.has(T)&&o.get(p).add(T)}}}else if(d==="tuple"&&Se(f))for(let h of f.fields){let g=h.type;if(D(g)&&g.resolvedConcreteType&&(g=g.resolvedConcreteType),Se(g)){let y=U(g,e),v=s.get(y);v&&v!==p&&a.has(v)&&o.get(p).add(v)}else if(ge(g)){let y=U(g,e),v=s.get(y);v&&v!==p&&a.has(v)&&o.get(p).add(v)}else if(pe(g)&&g.isNewtype){let y=U(g,e),v=s.get(y);v&&v!==p&&a.has(v)&&o.get(p).add(v)}else if(pe(g)&&!g.isReferenceSemantics&&!g.isNewtype){let y=U(g,e),v=s.get(y);v&&v!==p&&a.has(v)&&o.get(p).add(v)}}let u=new Map;for(let[p,f]of o)u.set(p,f.size);let c=[];for(let[p,f]of u)f===0&&c.push(p);let _=[];for(;c.length>0;){let p=c.shift(),f=a.get(p);_.push({type:f.type,cName:f.cName,kind:f.kind});for(let[d,h]of o)if(h.has(p)){let g=(u.get(d)||1)-1;u.set(d,g),g===0&&c.push(d)}}if(_.length<i.length)for(let p of i)_.find(f=>f.cName===p.cName)||_.push({type:p.type,cName:p.cName,kind:p.kind});Vl(e);for(let{type:p,cName:f,kind:d}of _)d==="struct"&&pe(p)?ah(p,f,e):d==="enum"&&ge(p)?Dl(p,f,e):d==="tuple"&&Se(p)&&sh(p,f,e);for(let p in e.types){let{type:f,cName:d}=e.types[p];me(f)||f.isExtern==="c"&&f.externName||ge(f)&&tn(f)&&Dl(f,d,e)}for(let p in e.types){let{type:f,cName:d}=e.types[p];me(f)||f.isExtern==="c"&&f.externName||(Ae(f)?Nl(f,d,e):ot(f)&&lh(f,d,e))}oh(e)}function nh(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 rh(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 Ol(e){let t=e.emitter;if(e.isoTypes){for(let[n,r]of e.isoTypes){let{childTypeCName:i,structGenerated:o}=r;o||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" __yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine(`} ${n}_struct;`),t.emitDeclarationLine(`typedef ${n}_struct* ${n};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${n} __yo_create_iso_${n}(${i} value);`),t.emitDeclarationLine(""),r.structGenerated=!0)}for(let[n,r]of e.isoTypes){let{optionTypeCName:i,extractGenerated:o}=r;o||!i||t.emitDeclarationLine(`${i} __yo_iso_extract_${n}(${n} iso);`)}for(let[n,r]of e.isoTypes){let{structGenerated:i}=r;i&&(t.emitDeclarationLine(`void __yo_iso_dispose_${n}(${n} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${n}(void* ptr);`))}for(let[n,r]of e.isoTypes){let{childTypeCName:i,createGenerated:o}=r;if(o)continue;let a=`__yo_dispose_iso_${n}`,s;if(e.needsCycleGC)s=` iso->header.dispose_fn = ${a};`;else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let u=e.disposeTypeIds.get(a);u===void 0&&(u=e.nextDisposeTypeId,e.nextDisposeTypeId=u+1,e.disposeTypeIds.set(a,u)),s=` iso->header.type_id = ${u};`}let l=e.needsCycleGC?`
|
|
10514
10514
|
iso->header.gc_mark = __YO_GC_UNMARKED;
|
|
10515
10515
|
iso->header.gc_flags = 0;`:"";t.emitLine(`
|
|
10516
10516
|
${n} __yo_create_iso_${n}(${i} value) {
|
|
@@ -10543,7 +10543,7 @@ ${i} __yo_iso_extract_${n}(${n} iso) {
|
|
|
10543
10543
|
result.data.Some.value = iso->value;
|
|
10544
10544
|
}
|
|
10545
10545
|
return result;
|
|
10546
|
-
}`)}r.extractGenerated=!0}}}}function
|
|
10546
|
+
}`)}r.extractGenerated=!0}}}}function ih(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 oh(e){let t=e.emitter;if(e.arcTypes){for(let[n,r]of e.arcTypes){let{childTypeCName:i}=r;r.structGenerated||(t.emitDeclarationLine(`struct ${n}_struct { // Arc wrapper`),t.emitDeclarationLine(" __yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine("};"),t.emitDeclarationLine(""),t.emitDeclarationLine(`${n} __yo_create_arc_${n}(${i} value);`),t.emitDeclarationLine(""),r.structGenerated=!0)}for(let[n,r]of e.arcTypes)r.structGenerated&&(t.emitDeclarationLine(`void __yo_arc_dispose_${n}(${n} arc);`),t.emitDeclarationLine(`static void __yo_dispose_arc_${n}(void* ptr);`));for(let[n,r]of e.arcTypes){let{childTypeCName:i,createGenerated:o}=r;if(o)continue;let a=`__yo_dispose_arc_${n}`,s;if(e.needsCycleGC)s=` arc->header.dispose_fn = ${a};`;else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let u=e.disposeTypeIds.get(a);u===void 0&&(u=e.nextDisposeTypeId,e.nextDisposeTypeId=u+1,e.disposeTypeIds.set(a,u)),s=` arc->header.type_id = ${u};`}let l=e.needsCycleGC?`
|
|
10547
10547
|
arc->header.gc_mark = __YO_GC_UNMARKED;
|
|
10548
10548
|
arc->header.gc_flags = 0;`:"";t.emitLine(`
|
|
10549
10549
|
${n} __yo_create_arc_${n}(${i} value) {
|
|
@@ -10558,10 +10558,10 @@ void __yo_arc_dispose_${n}(${n} arc) {
|
|
|
10558
10558
|
}`),t.emitLine(`
|
|
10559
10559
|
static void __yo_dispose_arc_${n}(void* ptr) {
|
|
10560
10560
|
__yo_arc_dispose_${n}((${n})ptr);
|
|
10561
|
-
}`),r.disposeGenerated=!0}}}function
|
|
10561
|
+
}`),r.disposeGenerated=!0}}}function ah(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=U(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${A(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)} (reference counted)`),r.emitDeclarationLine(" __yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=U(i.type,n),a=oe(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)}`);for(let i of e.fields){let o=U(i.type,n),a=oe(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function sh(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${A(e)}`),e.fields.length===0)r.emitDeclarationLine(" uint8_t _dummy; // zero-sized type marker");else for(let i=0;i<e.fields.length;i++){let o=e.fields[i],a=U(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function lh(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${A(e)}`);for(let i of e.fields){let o=U(i.type,n),a=oe(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Dl(e,t,n){let r=n.emitter,i=tn(e);if(i){let l=U(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${A(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(Pn(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${A(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Qt(e,u.name,n),_=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${_}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Qt(e,u.name,n),_=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${_}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!de(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let _ of u){let p=U(_.type,n),f=oe(_.label);r.emitDeclarationLine(` ${p} ${f};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${A(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function uh(e,t){let n=Gn(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!mt(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(q({type:r,env:t},{type:s,env:t}))return a}let i=Ha({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function ch(e,t,n){let r=uh(e,t);if(!r)return;let i=r.type.fields.findIndex(s=>s.label===k.dispose[0]);if(i<0)return;let o=r.fields[i];if(!ee(o))return;let a=n.functions[o.funcId]?.cName;if(a)return a;for(let s in n.functions){let l=n.functions[s],u=l.value,c=u.specializedType??u.type;if(u.funcName===k.dispose[0]&&c.SelfType&&q({type:c.SelfType,env:t},{type:e,env:t}))return l.cName}}function V_(e){e.emitter.emitLine("// Function implementations"),w_(e.emitter,e.targetInfo),e.usesAsync&&L_(e.emitter,e.targetInfo,e.debugAsyncAwait,{needsCycleGC:e.needsCycleGC??!1,registerDisposeTypeId:t=>{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let n=e.disposeTypeIds.get(t);return n===void 0&&(n=e.nextDisposeTypeId,e.nextDisposeTypeId=n+1,e.disposeTypeIds.set(t,n)),n}}),e.usesParallelism&&x_(e.emitter,e.debugParallelism,e.targetInfo,e.usesAsync??!1),ph(e),yh(e);for(let t in e.functions){let{value:n,cName:r}=e.functions[t],i=r==="__yo_user_main",o=n.body?.$?.effectAnalysis,a=o&&o.hasEffects;if(!i&&!n.type.isClosure&&n.specializedFunctionCaches?.length>0||!i&&!a&&!n.isModuleEffectMember&&!n.type.isClosure&&!n.specializedType&&(n.specializedFunctionCaches?.length??0)===0&&kt(n.specializedType??n.type).length===0&&[...n.type.implicitParameters,...n.type.parameters.filter(y=>y.isImplicit)].some(y=>G(y.type)))continue;let l=n.specializedType&&!Xn(n.type),u=n.specializedType??n.type,c=kt(u).length>0,_=n.type.parameters.some(y=>y.isCompileTimeOnly);if(!i&&(!n.isModuleEffectMember||_)&&!n.specializedType&&(n.specializedFunctionCaches?.length??0)===0&&(hr(n.type)||oi(n))||!i&&n.isIoAsyncStateMachineClosure||!i&&!a&&!c&&!n.isModuleEffectMember&&(hr(n.type)&&!n.type.isClosure||n.specializedFunctionCaches?.length>0&&!n.type.isClosure||n.specializedType&&!l||oi(n)||Fr(n)||n.isIoAsyncStateMachineClosure))continue;let p=n.specializedType??n.type,f=!a&&!n.isModuleEffectMember&&(p.parameters.some(y=>me(y.type))||p.forallParameters.length>0),d=me(p.return.type),h=D(p.return.type)&&p.return.type.requiredTraits.length>0;if(f||d&&!h&&!n.isModuleEffectMember)continue;let g=n.body?.$?.effectAnalysis;g&&g.hasEffects,R_(n,r,e)}Ol(e)}function N_(e){let t=e.emitter,n=[];if(!e.moduleLevelInitExprs||e.moduleLevelInitExprs.length===0)return n;for(let r of e.moduleLevelInitExprs){if(!F(r)||r.args.length<2)continue;let i=r.args[0],o=r.args[1],a;if(B(i)&&i.$?.type)a=i;else if(F(i)&&E(i,":",2)){let c=i.args[0];B(c)&&c.$?.type&&(a=c)}if(!a||!a.$?.type)continue;let s=a.$?.variableName??a.token.value,l=Te(s,a.$.env),u=U(a.$.type,e);t.emitDeclarationLine(`static ${u} ${l}; // module-level mutable variable`),n.push({cVarName:l,cTypeStr:u,rhs:o})}return n}function M_(e,t){if(t.length===0)return;let n=e.emitter;n.emitLine(`
|
|
10562
10562
|
// Library initialization - call before using library functions
|
|
10563
10563
|
void __yo_module_init(void) {`),n.emitLine(" // Initialize module-level mutable variables");for(let{cVarName:r,rhs:i}of t){let o=P(i," ",e);n.emitLine(` ${r} = ${o};`)}n.emitLine(`}
|
|
10564
|
-
`)}function
|
|
10564
|
+
`)}function D_(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(!de(i))throw new Error(`main function must return unit , but it returns ${A(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);{let s=kt(r.type).map(()=>"NULL").join(", "),l=s?`(${s})`:"()",u=e.usesAsync?`
|
|
10565
10565
|
// Initialize async runtime
|
|
10566
10566
|
__yo_async_scheduler_init();`:"",c=e.usesAsync?`
|
|
10567
10567
|
// Wait for all async tasks to complete
|
|
@@ -10577,7 +10577,7 @@ int main(int argc, char** argv) {
|
|
|
10577
10577
|
${c}
|
|
10578
10578
|
return 0;
|
|
10579
10579
|
}
|
|
10580
|
-
`)}}function
|
|
10580
|
+
`)}}function O_(e){for(let t in e.functions){let{value:n}=e.functions[t];if(oi(n))continue;let r=n.body?.$?.effectAnalysis;if(!r||!r.hasEffects)continue;if(n.specializedType){let a=n.specializedType,s=a.forallParameters.length>0||a.parameters.some(_=>_.isCompileTimeOnly),l=a.parameters.some(_=>!_.isCompileTimeOnly&&D(_.type)&&!Ie(_.type));if(s||l)continue;let u=n.specializedType.parameters.some(_=>me(_.type)),c=me(n.specializedType.return.type);if(u||c)continue}let i=kt(n.specializedType??n.type);if(i.length===0&&n.specializedType){let a=kt(n.type);a.some(s=>s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0)&&(i=a)}i.length>0}}function R_(e,t,n){let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&Ie(o.return.type)){let b=ia(e.body);b?.$?.asyncStateMachineStructName?a=`${b.$.asyncStateMachineStructName}*`:e.body.$?.type&&D(e.body.$.type)&&Ie(e.body.$.type)&&(a=U(e.body.$.type,n))}e.body&&D(o.return.type)&&!Ie(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&e.body.$?.type&&(a=U(e.body.$.type,n));let s=e.specializedType&&kt(o).length===0&&kt(e.type).some(b=>b.fieldFunctionType.forallParameters&&b.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?Ir(o,t,n,a,s):Ir(o,t,n,void 0,s),u=t==="__yo_user_main"||n.exportedFunctionLabels?.has(e.funcId),c=!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitLine(`${_}${l} {`);let p=n.currentFunctionName,f=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let d=n.isModuleEffectMemberFunction,h=n.overrideReturnTypeStr;e.isModuleEffectMember&&(n.isModuleEffectMemberFunction=!0),n.overrideReturnTypeStr=a;let g=n.currentEvidenceParams,y=kt(o);if(y.length===0&&e.specializedType){let b=kt(e.type);b.some(S=>S.fieldFunctionType.forallParameters&&S.fieldFunctionType.forallParameters.length>0)&&(y=b)}if(y.length>0){let b=new Map;for(let S of y)b.set(`${S.implicitLabel}.${S.fieldLabel}`,S);n.currentEvidenceParams=b}let v=n.currentClosureCaptures,T=n.currentClosureCaptureFrameLevel,$=n.currentClosureType,C=n.currentClosureCaptureTypeCName;if(o.isClosure){let b=e.closureInfo;if(b){let S=b.closureType.isFn,I=b.captureType;if(n.currentClosureType=S.callType,I&&pe(I)&&I.fields.length>0){let z=I.fields.map(N=>N.label);n.currentClosureCaptures=z,n.currentClosureCaptureFrameLevel=e.frameLevel;let M=n.types[I.id]?.cName;M&&(n.currentClosureCaptureTypeCName=M)}}}if(e.funcName===k.___dispose[0]&&o.SelfType){let b=ch(o.SelfType,e.type.env,n);if(b){let S=o.parameters[0]?.label==="__yo_self"?"__yo_self":o.parameters[0]?.label??"__yo_self";r.emitLine(` ${b}(${S}); // Call user's dispose method`)}}_h(e.body,o," ",n),n.currentFunctionName=p,n.currentFunctionType=f,n.isModuleEffectMemberFunction=d,n.overrideReturnTypeStr=h,n.currentEvidenceParams=g,n.currentClosureCaptures=v,n.currentClosureCaptureFrameLevel=T,n.currentClosureType=$,n.currentClosureCaptureTypeCName=C,r.emitLine("}")}function _h(e,t,n,r){let i=r.emitter;if(F(e)&&E(e,V.begin)){let o=e.args;r.pendingDeferredDrops=[...e.$?.deferredDropExpressions??[]],r.consumedVarPendingDrops=[...e.$?.consumedVariableDropExpressions??[]];let a=!1;for(let s=0;s<o.length-1;s++){let l=o[s];E(l,V.return)&&(a=!0);let u=P(l,n,r);if(u&&(!l.$||!ut(l.$.env.modulePath,u))&&i.emitLine(`${n}${u};`),a)break;if(at(l.$?.controlFlow)){a=!0;break}}if(!a&&o.length>0){let s=o[o.length-1];if(Ie(t.return.type)&&s){let u=Yt(s),c=s.$?.type,_=c&&Ie(c);if(u||_){let p=P(s,n,r);if(e.$?.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&c){let f=U(c,r),d=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${f} ${d} = ${p};`),bt(e,n,r),i.emitLine(`${n}return ${d};`)}else i.emitLine(`${n}return ${p};`);return}}else if(s&&de(t.return.type)){let u=P(s,n,r);u&&i.emitLine(`${n}${u};`),bt(e,n,r)}else if(s){let u=at(s.$?.controlFlow),c=de(s.$?.type)||F(s)&&E(s,V.tuple)&&s.args.length===0,_=o.length>1?o[o.length-2]:null,p=at(_?.$?.controlFlow);if(!(c&&p))if(u){let f=P(s,n,r);f&&i.emitLine(`${n}${f};`)}else{if(s.$?.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){if(s.$?.variableName){let h=U(t.return.type,r),g=Te(s.$.variableName,s.$.env),y=P(s,n,r);g!==y&&i.emitLine(`${n}${h} ${g} = ${y};`)}st(s,n,r);let d=s.$.deferredDupExpressions[0];if(F(d)&&d.$?.variableName){let h=oe(d.$.variableName);bt(e,n,r),i.emitLine(`${n}return ${h};`);return}}let f=P(s,n,r);bt(e,n,r),f&&i.emitLine(`${n}return ${f};`)}}}else if(a&&o.length>0){let s=o[o.length-1];s&&de(s.$?.type)}}else if(bt(e,n,r),de(t.return.type)){let o=P(e,n,r);o&&i.emitLine(`${n}${o};`)}else A_(e,n,r)}function P_(e){for(let t in e.functions){let{value:n,cName:r}=e.functions[t];if(oi(n)||!n.specializedType||!Xn(n.type))continue;let i=n.specializedType,o=i.forallParameters.length>0||i.parameters.some(_=>_.isCompileTimeOnly),a=i.parameters.some(_=>!_.isCompileTimeOnly&&D(_.type)&&!Ie(_.type));if(o||a)continue;let s=n.specializedType.parameters.some(_=>me(_.type)),l=me(n.specializedType.return.type);if(s||l)continue;let u=n.body?.$?.effectAnalysis;u&&u.hasEffects||n.isModuleEffectMember||kt(n.specializedType??n.type).length>0||R_(n,r,e)}}function ph(e){e.needsCycleGC?dh(e):fh(e)}function fh(e){let t=e.emitter;t.emitDeclarationLine("static void __yo_dispose_dispatch(void* ptr); // Type-tag based dispose dispatch"),t.emitLine(`// Lightweight reference counting \u2014 no cycle detection needed
|
|
10581
10581
|
// Uses type_id dispatch instead of function pointer for dispose
|
|
10582
10582
|
// (WASM: br_table ~2 cycles vs call_indirect ~20+ cycles)
|
|
10583
10583
|
static inline void __yo_decr_rc(void* ptr) {
|
|
@@ -10624,7 +10624,7 @@ static void __yo_gc_collect() {}
|
|
|
10624
10624
|
static size_t __yo_gc_tracked_count() { return 0; }
|
|
10625
10625
|
static void __yo_gc_init_thread() {}
|
|
10626
10626
|
static void __yo_cleanup_thread_gc() {}
|
|
10627
|
-
static void __yo_init_process_cleanup(void) {}`)}function
|
|
10627
|
+
static void __yo_init_process_cleanup(void) {}`)}function dh(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
|
|
10628
10628
|
// Flag to prevent double RC decrements during GC collection.
|
|
10629
10629
|
// When set, __yo_decr_rc skips all tracked objects because the GC
|
|
10630
10630
|
// already accounts for their references via trial deletion.
|
|
@@ -11059,101 +11059,101 @@ static void __yo_init_process_cleanup(void) {
|
|
|
11059
11059
|
if (cleanup_initialized) return;
|
|
11060
11060
|
cleanup_initialized = true;
|
|
11061
11061
|
atexit(__yo_process_cleanup);
|
|
11062
|
-
}`}`)}function
|
|
11063
|
-
// Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${to(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>","<errno.h>","<fcntl.h>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,targetInfo:ra(),deferredAsyncBlocks:[],allocator:r.allocator??"libc",isLibrary:r.isLibrary??!1,currentModuleId:to(t),moduleLevelInitExprs:r.allModuleLevelInitExprs??n.moduleLevelInitExprs};if(la(n,i),i.moduleLevelInitExprs)for(let a of i.moduleLevelInitExprs)Wt(a,i);if(
|
|
11062
|
+
}`}`)}function mh(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(pe(r)&&r.isReferenceSemantics){if(r.fields.some(s=>me(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`static void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=oe(s.label),u=s.type;if(pe(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(ge(u)){let c=u;if(!tn(c)){if(!Pn(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let p of c.variants||[])if(p.fields&&p.fields.length>0){let f=p.fields.filter(d=>pe(d.type)&&d.type.isReferenceSemantics);if(f.length>0){let d=Qt(c,p.name,e);t.emitLine(` case ${d}:`);for(let h of f)t.emitLine(` if (obj->${l}.data.${p.name}.${oe(h.label)}) {`),t.emitLine(` visit(obj->${l}.data.${p.name}.${oe(h.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function yh(e){let t=e.emitter;e.needsCycleGC&&mh(e);for(let n in e.types){let{type:r,cName:i}=e.types[n];if(pe(r)&&r.isReferenceSemantics){if(r.fields.some(u=>me(u.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(u=>{let c=U(u.type,e),_=oe(u.label);return`${c} ${_}`}).join(", ");t.emitLine(`static ${i}* ${a}(${s}) {`),t.emitLine(` ${i}* obj = (${i}*)__yo_malloc(sizeof(${i}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),e.needsCycleGC&&(t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;"));let l=r.trait.fields.find(u=>u.label===k.___dispose[0]&&u.assignedValue&&ee(u.assignedValue));if(l&&ee(l.assignedValue)){let u=l.assignedValue,c=e.functions[u.funcId]?.cName||u.funcId;if(e.needsCycleGC)t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${c};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let _=e.disposeTypeIds.get(c);_===void 0&&(_=e.nextDisposeTypeId,e.nextDisposeTypeId=_+1,e.disposeTypeIds.set(c,_)),t.emitLine(` obj->header.type_id = ${_};`)}}else e.needsCycleGC?t.emitLine(" obj->header.dispose_fn = NULL;"):t.emitLine(" obj->header.type_id = 0;");if(e.needsCycleGC){let u=`__yo_traverse_${i}`;t.emitLine(` obj->header.traverse_fn = ${u};`)}r.fields.forEach(u=>{let c=oe(u.label);t.emitLine(` obj->${c} = ${c};`)}),e.needsCycleGC&&sr(r,new Set,r.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function U_(e){let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`static void ${r}(void* closure_ptr);`)}for(let[n,{closureCName:r,captureType:i,captureCName:o}]of e.closureCaptureMap){let a=`__yo_dispose_closure_${n}`,s=i.trait.fields.find(c=>c.label===k.___drop[0]);if(!s||!s.assignedValue||!ee(s.assignedValue))continue;let l=s.assignedValue,u=e.functions[l.funcId]?.cName;u&&(t.emitLine(`static void ${a}(void* closure_ptr) { // Dispose for ${r} with ${o} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${r}* closure = (${r}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${u}(*(${o}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function z_(e){let t=new Map;for(let[,n]of e.dynImpls){let r=e.types[n.dynType.id]?.cName||`__yo_dyn_${n.dynType.id}`,i=D(n.concreteType)&&n.concreteType.resolvedConcreteType?n.concreteType.resolvedConcreteType:n.concreteType,a=`${(()=>{let s=e.types[i.id]?.cName;if(s)return s;let l=cn(i);return(l?e.types[l.id]?.cName:void 0)||`unknown_${i.id}`})()}_${r}`;t.set(a,n)}e.dynImpls=t}var ts=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this._usesParallelism=!1;this.emitter=new Pi}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
|
|
11063
|
+
// Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${to(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>","<errno.h>","<fcntl.h>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,targetInfo:ra(),deferredAsyncBlocks:[],allocator:r.allocator??"libc",isLibrary:r.isLibrary??!1,currentModuleId:to(t),moduleLevelInitExprs:r.allModuleLevelInitExprs??n.moduleLevelInitExprs};if(la(n,i),i.moduleLevelInitExprs)for(let a of i.moduleLevelInitExprs)Wt(a,i);if(c_(n,i),r.isLibrary&&i.exportedFunctionLabels)for(let[a]of i.exportedFunctionLabels){let s=i.functions[a];s&&this.exportedFunctionNames.add(s.cName)}p_(i),Gc(i),Wc(i),this.emitter.emitDeclarationLine(`
|
|
11064
11064
|
// Future state enum - shared by all Future types
|
|
11065
11065
|
typedef enum {
|
|
11066
11066
|
__YO_FUTURE_RUNNING = 0, // Task is in progress (queued or executing)
|
|
11067
11067
|
__YO_FUTURE_COMPLETED = 1, // Task completed successfully
|
|
11068
11068
|
__YO_FUTURE_ERROR = 2 // Task failed with error
|
|
11069
11069
|
} __yo_future_state_t;
|
|
11070
|
-
`),i.needsCycleGC=!1;for(let a in i.types){let{type:s}=i.types[a];if(pe(s)&&s.isReferenceSemantics&&!s.fields.some(l=>me(l.type))&&sr(s,new Set,s.env)){i.needsCycleGC=!0;break}}i.needsCycleGC||(i.disposeTypeIds=new Map,i.nextDisposeTypeId=1),
|
|
11070
|
+
`),i.needsCycleGC=!1;for(let a in i.types){let{type:s}=i.types[a];if(pe(s)&&s.isReferenceSemantics&&!s.fields.some(l=>me(l.type))&&sr(s,new Set,s.env)){i.needsCycleGC=!0;break}}i.needsCycleGC||(i.disposeTypeIds=new Map,i.nextDisposeTypeId=1),S_(i),this.emitter.emitDeclarationLine(`
|
|
11071
11071
|
// Command-line arguments (initialized in main)
|
|
11072
11072
|
static int32_t __yo_argc;
|
|
11073
11073
|
static uint8_t** __yo_argv;
|
|
11074
11074
|
static Slice_uint8_t_u42_ __yo_args;
|
|
11075
|
-
`),
|
|
11075
|
+
`),z_(i),Ml(i),s_(i),Jc(i),O_(i),V_(i),d_(i),m_(i),y_(i),f_(i),a_(i);let o=N_(i);if(r.isLibrary?M_(i,o):D_(i),U_(i),t_(i),P_(i),!i.needsCycleGC&&i.disposeTypeIds&&i.disposeTypeIds.size>0){this.emitter.emitLine(`// Type-tag dispatch for dispose \u2014 replaces function pointers
|
|
11076
11076
|
// WASM: br_table (~2 cycles) vs call_indirect (~20+ cycles)
|
|
11077
11077
|
static void __yo_dispose_dispatch(void* ptr) {
|
|
11078
11078
|
__yo_ref_header_t* header = (__yo_ref_header_t*)ptr;
|
|
11079
11079
|
switch (header->type_id) {`);for(let[a,s]of i.disposeTypeIds)this.emitter.emitLine(` case ${s}: ${a}(ptr); return;`);this.emitter.emitLine(` default: return;
|
|
11080
11080
|
}
|
|
11081
|
-
}`)}else i.needsCycleGC||this.emitter.emitLine("static void __yo_dispose_dispatch(void* ptr) { (void)ptr; }");i.needsIntelAsmSyntax&&(this._needsIntelAsmSyntax=!0),i.usesParallelism&&(this._usesParallelism=!0)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}get needsIntelAsmSyntax(){return this._needsIntelAsmSyntax}get usesParallelism(){return this._usesParallelism}};var
|
|
11082
|
-
`;let a=P(r,t,n),s=!1;if(e.$?.variableName){let l=e.$.variableName,u=n;if((u.inAsyncStateMachine||u.inEffectStateMachine)&&a.startsWith("sm->")){let _=u.stateMachineVariables?.get(l);if(!_&&u.stateMachineVariables){for(let[,p]of u.stateMachineVariables)if(p.name===l){_=p;break}}if(_&&_.kind!=="outer"){let p=`var_${_.id}`;de(r.$.type)||n.emitter.emitLine(`${t}sm->${p} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let _=_t(r.$.type,l,n);ke(r.$.type)?n.emitter.emitLine(`${t}${_} = ${a}; // Save old value for later use`):de(r.$.type)||n.emitter.emitLine(`${t}${_} = ${a}; // Save old value for later use`)}}if(ke(r.$.type)){let l=P(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Jt(i.$.type),c=n,_=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let f=Te(i.$.variableName,i.$.env);if(f!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,h=U(d,n);n.emitter.emitLine(`${t}${h} ${f} = ${l};`)}}st(i,t,c);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(_=Te(p.$.variableName,p.$.env))}if(o){let p=_t(r.$.type,P(r,t,n),n);n.emitter.emitLine(`${t}${p} = ${_};`)}else n.emitter.emitLine(`${t}${a} = ${_};`)}else{let l=P(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Jt(i.$.type),c=n,_=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let f=Te(i.$.variableName,i.$.env);if(f!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,h=U(d,n);n.emitter.emitLine(`${t}${h} ${f} = ${l};`)}}st(i,t,c);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(_=Te(p.$.variableName,p.$.env))}if(!de(r.$.type)){let p=r.$.type,f=i.$?.type,d,h=ut(i.$.env.modulePath,_.trim());h&&n.tempVarAsyncStructNames&&(d=n.tempVarAsyncStructNames.get(_.trim()));let g=o&&f&&Ie(p)&&Ie(f),y;h&&g?d?y=`${d}*`:y=U(f,n):g&&d?y=`${d}*`:y=U(g?f:p,n);let v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!v?y+" ":""}${a} = ${_};`)}}return s?"":e.$?.variableName??""}function Q_(e,t,n){let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=r.$?.type;if(!i||!Ie(i))return"// Error: await argument must be a Future type";let o=Bt(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(En(e)){let s=P(r,t,n),l=U(i,n),u=o.isFuture.outputType;D(u)&&(u.resolvedConcreteType?u=u.resolvedConcreteType:e.$?.type&&!D(e.$.type)?u=e.$.type:e.$?.type&&D(e.$.type)&&e.$.type.resolvedConcreteType&&(u=e.$.type.resolvedConcreteType));let c=a.emitter,_=de(u)||D(u)&&de(e.$?.type??u),p=e.$?.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",f=e.$?.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";c.emitLine(`${t}// Synchronous await (io.await outside state machine)`),c.emitLine(`${t}${l} ${p} = ${s};`),c.emitLine(`${t}int ${f} = ${p}->state;`),sa(r.$?.type)||(c.emitLine(`${t}if (${f} == 0 && ${p}->__yo_resume_fn) {`),gh(e,p,t,n),c.emitLine(`${t} __yo_incr_rc((void*)${p}); // event loop reference`),c.emitLine(`${t} ${p}->__yo_resume_fn((void*)${p});`),c.emitLine(`${t}}`)),c.emitLine(`${t}{`),c.emitLine(`${t} int __await_state = ${p}->state;`),c.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),c.emitLine(`${t} __yo_async_poll_step();`),c.emitLine(`${t} __await_state = ${p}->state;`),c.emitLine(`${t} }`),c.emitLine(`${t} if (__await_state == -2) {`);let h=Bt(i),g=h?.isFuture.effects?.some(y=>G(y.type)||Ce(y.type)||y.isEffectRowSpread)??!1;if(g){c.emitLine(`${t} if (${f} == -2) {`),c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`),c.emitLine(`${t} }`);let y=a.pendingDeferredDrops;if(y){let $=e.$?.variableName;a.pendingDeferredDrops=y.filter(C=>Nn(C)!==$)}hn(t+" ",a,e),a.pendingDeferredDrops=y;let v=yh(h,a),T=a.currentFunctionType?.return?.type;if(v)if(c.emitLine(`${t} __yo_effect_escaped = 0;`),T&&!de(T)){let $=U(T,n);$!=="void"?(c.emitLine(`${t} ${$} _esc_result;`),c.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${$}));`),c.emitLine(`${t} return _esc_result;`)):c.emitLine(`${t} return;`)}else c.emitLine(`${t} return;`);else if(c.emitLine(`${t} __yo_effect_escaped = 1;`),T&&!de(T)){let $=U(T,n);c.emitLine(`${t} return (${$}){0};`)}else c.emitLine(`${t} return;`)}else c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`);if(c.emitLine(`${t} }`),c.emitLine(`${t}}`),_)return"";{let y=e.$?.variableName||"__sync_await_result",v=U(u,n),T=_t(u,y,n);if(g){if(c.emitLine(`${t}${T};`),c.emitLine(`${t}if (${p}->state == -1) {`),Ve(u)){let $=Un(u,n);$?c.emitLine(`${t} ${y} = ${$}(${p}->result);`):c.emitLine(`${t} ${y} = ${p}->result;`)}else c.emitLine(`${t} ${y} = ${p}->result;`);c.emitLine(`${t}} else {`),c.emitLine(`${t} ${y} = (${v}){0};`),c.emitLine(`${t}}`)}else if(Ve(u)){let $=Un(u,n);$?c.emitLine(`${t}${T} = ${$}(${p}->result);`):c.emitLine(`${t}${T} = ${p}->result;`)}else c.emitLine(`${t}${T} = ${p}->result;`);return y}}return"// Error: await should only be used inside async blocks"}function Z_(e,t,n){let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=r.$?.type;if(!i||!Ie(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=P(r,t,n),l=e.$?.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=e.$?.variableName||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function J_(e,t,n){let i=n.emitter,o=F(e.func)?e.func.args[0]:e.args[0];if(!o)return"// Error: JoinHandle.await requires a self argument";let a=P(o,t,n),s=e.$?.type;if(!s||!ge(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=U(s,n),c=s.variants.find(C=>C.name==="Some")?.fields?.[0]?.type,_=!c||de(c),p=_?"uint8_t":c?U(c,n):"uint8_t",f=Qt(s,"Some",n),d=Qt(s,"None",n),h=e.$?.variableName||"jh",g=`__jh_future_${h}`,y=`__jh_header_${h}`,v=e.$?.variableName||"__jh_result",T=`__yo_jh_header_${h}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let $=_t(s,v,n);if(i.emitLine(`${t}${$};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${g} = ${a}.__future;`),i.emitLine(`${t} struct ${T} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${p} result;`),i.emitLine(`${t} void (*continuation_fn)(void*);`),i.emitLine(`${t} void* continuation_sm;`),i.emitLine(`${t} void (*__yo_resume_fn)(void*);`),i.emitLine(`${t} };`),i.emitLine(`${t} struct ${T}* ${y} = (struct ${T}*)${g};`),i.emitLine(`${t} int __jh_state = ${y}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${y}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),_)i.emitLine(`${t} ${v} = (${l}){ .tag = ${f} };`);else if(c&&Ve(c)){let C=Un(c,n);C?i.emitLine(`${t} ${v} = (${l}){ .tag = ${f}, .data = { .Some = { .value = ${C}(${y}->result) } } };`):i.emitLine(`${t} ${v} = (${l}){ .tag = ${f}, .data = { .Some = { .value = ${y}->result } } };`)}else i.emitLine(`${t} ${v} = (${l}){ .tag = ${f}, .data = { .Some = { .value = ${y}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${v} = (${l}){ .tag = ${d} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),v}function yh(e,t){let n=e.isFuture.effects;if(!n?.length)return!1;let r=ep(n),i=t.currentEvidenceParams;for(let o of r)if(G(o.type)){let a=`${o.label}.${o.label}`;if(!i?.has(a))return!0}else if(Ce(o.type)){let a=!1;if(i){for(let[s]of i)if(s.startsWith(`${o.label}.`)){a=!0;break}}if(!a)return!0}return!1}function ep(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function gh(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=Bt(i.$.type);if(!o?.isFuture.effects?.length)return;let a=ep(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(c=>F(c)&&E(c,V.using));if(u){let c=u.args;for(let _=0;_<a.length&&_<c.length;_++){let p=a[_],f=c[_];if(G(p.type)){let d=P(f,n,r),h=p.label;l.emitLine(`${n} ${t}->__capture.${h} = (void*)${d};`)}else Ce(p.type)&&X_(p.type,t,n,f.$?.value,s,e)}}else for(let c of a)if(G(c.type)){let _=vh(c.label,s,e);_&&l.emitLine(`${n} ${t}->__capture.${c.label} = (void*)${_};`)}else Ce(c.type)&&X_(c.type,t,n,void 0,s,e)}function X_(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!G(s.type))continue;let l;if(i.stateMachineVariables){for(let[,u]of i.stateMachineVariables)if(u.name===s.label&&u.kind==="outer"){l=`sm->__capture.${s.label}`;break}}if(!l&&r&&Ye(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&ee(c)){let _=i.functions[c.funcId];_&&(l=_.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}l||(l=hh(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function hh(e,t,n,r){let i=r.$?.env??r.func.$?.env;if(!i)return;let o=$n(i,a=>a.isImplicit===!0);for(let a=o.length-1;a>=0;a--){let s=o[a],l=s.value?.[s.value.length-1];if(l&&Ye(l)){let u=l.type.fields.findIndex(c=>c.label===e);if(u>=0){let c=l.fields[u];if(c&&ee(c)){let _=n.functions[c.funcId]?.cName;if(_)return _}}}}}function vh(e,t,n){if(t.currentEvidenceParams){for(let r of t.currentEvidenceParams.values())if(r.fieldLabel===e)return r.cParamName}if(t.stateMachineVariables){for(let[,r]of t.stateMachineVariables)if(r.name===e&&r.kind==="outer")return`sm->__capture.${e}`}}function tp(e,t,n){let r=e.$?.variableName,i=e.$?.type,o=n;if(r&&i){!de(i)&&!at(e.$?.controlFlow)&&n.emitter.emitLine(`${t}${U(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];o.pendingDeferredDrops=[...s,...a??[]];let l=o.consumedVarPendingDrops,u=e.$?.consumedVariableDropExpressions??[];o.consumedVarPendingDrops=[...u,...l??[]];let c=[],_=!de(i)&&!at(e.$?.controlFlow);for(let p=0;p<e.args.length;p++){let f=e.args[p],d=P(f,t+" ",n);c.push(d);let h=p===e.args.length-1;d&&!(h&&_)&&(f.$&&ut(f.$.env.modulePath,d)||n.emitter.emitLine(`${t} ${d};`))}if(_){let p=e.args[e.args.length-1],f=c[c.length-1];if(p.$?.deferredDupExpressions&&p.$.deferredDupExpressions.length>0){if(p.$?.variableName){let h=p.$.variableName;p.$.variableName=void 0;let g=P(p,t+" ",n);p.$.variableName=h;let y=U(p.$.type,n),v=Te(h,p.$.env);v!==g&&n.emitter.emitLine(`${t} ${y} ${v} = ${g};`),f=v}st(p,t+" ",n);let d=p.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(f=Te(d.$.variableName,d.$.env))}n.emitter.emitLine(`${t} ${r} = ${f};`)}if(e.$?.deferredDropExpressions)for(let p of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let d=Nn(p);if(d&&o.shortCircuitHandledDropVarNames.has(d)){o.shortCircuitHandledDropVarNames.delete(d);continue}}let f=P(p,t+" ",n);f&&n.emitter.emitLine(`${t} ${f};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,o.consumedVarPendingDrops=l,de(i)||at(e.$?.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];o.pendingDeferredDrops=[...s,...a??[]];let l=o.consumedVarPendingDrops,u=e.$?.consumedVariableDropExpressions??[];if(o.consumedVarPendingDrops=[...u,...l??[]],e.args.map(_=>P(_,t+" ",n)).forEach(_=>{_&&n.emitter.emitLine(`${t} ${_};`)}),e.$?.deferredDropExpressions)for(let _ of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let f=Nn(_);if(f&&o.shortCircuitHandledDropVarNames.has(f)){o.shortCircuitHandledDropVarNames.delete(f);continue}}let p=P(_,t+" ",n);p&&n.emitter.emitLine(`${t} ${p};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,o.consumedVarPendingDrops=l,""}}function np(e,t,n){let r=e.args[0];if(F(r)&&E(r,V.comptime,1)||F(r)&&E(r,V.given,1))return"";if(!r.$?.type)return`// Error: No type information for left-hand side ${w(r)}
|
|
11083
|
-
`;let i=r.token.value,o=_t(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function
|
|
11084
|
-
`;if(r.$?.env){let u=Y(r.$.env,a);if(u.length>0&&u[u.length-1].isCompileTimeOnly||u.length>0&&u[u.length-1].isModuleLevel)return""}let s=!1,l;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&r.$?.env){let u=Y(r.$.env,a);if(u.length>0){let c=u[u.length-1],_=c.isOwningTheSameRcValueAs?c.isOwningTheSameRcValueAs.id:c.id;o.stateMachineVariables.has(_)&&(s=!0,l=_)}}if(ke(r.$.type))if(F(i)&&E(i,V.array)){let u=P(i,t,n);if(s&&l){let c=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${c} = ${u};`)}else if(!de(r.$.type)){let c=_t(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u;if(i.$?.variableName){let c=Te(i.$.variableName,i.$.env),_=P(i,t,n);if(!s){let p=_t(i.$.type,c,n);c!==_&&n.emitter.emitLine(`${t}${p} = ${_};`)}u=c}else u=P(i,t,n);if(s&&l){let c=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${c} = ${u};`)}else if(!de(r.$.type)){let c=_t(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u,c=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Jt(i.$.type),_=F(i)&&Yt(i);if(i.$?.variableName){let p=Te(i.$.variableName,i.$.env),f=Te(a,r.$.env);if(p===f){if(u=P(i,t,n),!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=Te(d.$.variableName,d.$.env))}}else if(B(i)&&p===Te(i.token.value,i.$.env)){if(u=P(i,t,n),!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=Te(d.$.variableName,d.$.env))}}else if(B(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&i.$?.env&&o.currentClosureCaptureFrameLevel!==void 0&&Ar(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let d=o.currentClosureType;if(d&&d.isClosure){let h=Object.values(o.types).find(g=>g.type===d);h?u=`((${`${h.cName}_capture`}*)closure_context->data)->${Te(i.token.value,i.$.env)}`:u=`closure_context->${Te(i.token.value,i.$.env)}`}else u=`closure_context->${Te(i.token.value,i.$.env)}`}else{let d=P(i,t,n);if(d.trim()!==p){let h=i.$.convertedRuntimeType||i.$.type,g=_t(h,p,n);n.emitter.emitLine(`${t}${g} = ${d};`)}if(!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let h=i.$.deferredDupExpressions[0];F(h)&&h.$?.variableName?u=Te(h.$.variableName,h.$.env):u=p}else u=p}}else if(u=P(i,t,n),!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(u=Te(p.$.variableName,p.$.env))}if(Ge(r.$.type)){let p=r.$.type;if(s&&l){let f=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${f} = ${u};`)}else if(!de(p)){let f=_t(p,a,n);n.emitter.emitLine(`${t}${f} = ${u};`)}}else if(s&&l){let p=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${p} = ${u};`)}else{let p=ut(i.$.env.modulePath,u.trim()),f;if(p&&n.tempVarAsyncStructNames){let d=n.tempVarAsyncStructNames.get(u.trim());d?f=`${d}*`:f=U(r.$.type,n)}else f=U(r.$.type,n);de(r.$.type)||n.emitter.emitLine(`${t}${f} ${Te(a,r.$.env)} = ${u};`)}}return""}}var Th=0;function ca(e,t,n,r,i=" "){if(k.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(k.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(k.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(k.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(k.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(k.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(k.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(k.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(k.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(k.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(k.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(k.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(k.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(k.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(k.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(k.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(k.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(k.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(k.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(k.__yo_noop.includes(e))return"";if(k.__yo_return_self.includes(e))return`(*${t[0]})`;if(k.__yo_ms_sleep.includes(e))return Ht(r.targetInfo)?`Sleep(${t[0]})`:`usleep((${t[0]}) * 1000)`;if(k.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(k.__yo_as.includes(e)&&n.$?.type){let o=U(n.$.type,r),a=n.args[0]?.$?.type;return a&&ge(a)&&!Pn(a)?`((${o})((${t[0]}).tag))`:`((${o})(${t[0]}))`}else{if(k.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(k.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(k.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(k.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(k.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(k.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(k.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(k.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(k.__yo_slice_ptr.includes(e))return`(${t[0]}.data)`;if(k.__yo_slice_new.includes(e)&&n.$?.type)return`(${U(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(k.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(k.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(k.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(k.__yo_getentropy.includes(e))return`getentropy(${t[0]}, ${t[1]})`;if(k.__yo_maybe_uninit_new.includes(e)&&n.$?.type){let o=U(n.$.type,r),a=`__yo_uninit_${Th++}`;return r.emitter.emitLine(`${i}${o} ${a};`),a}else return k.__yo_maybe_uninit_as_ptr.includes(e)&&n.$?.type?`((${U(n.$.type,r)})(${t[0]}))`:k.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:k.__yo_array_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:k.__yo_slice_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:k.__yo_array_index_range.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:k.__yo_array_index_range_inclusive.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:k.__yo_slice_index_range.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:k.__yo_slice_index_range_inclusive.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:`/* Unhandled operator ${e} */`}}function up(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type;if(!o||!xt(o))return"// Error: __yo_iso_extract requires an Iso type";let a=U(o,n),s=e.$?.type;if(s&&n.isoTypes?.has(a)){let c=n.isoTypes.get(a);c.optionTypeCName||(c.optionTypeCName=U(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=e.$?.variableName;return u&&s?(n.emitter.emitLine(`${t}${U(s,n)} ${u} = ${l};`),u):l}function cp(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type;return!o||!xt(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${U(o,n)}(${i})`}function Rl(e){let t=e.func.$?.value;return R(t)&&xt(t.value)&&e.args.length===1}function _p(e,t,n){if(!Rl(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=P(a,t,n),l=U(i,n),u=U(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 qr(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function Yr(e,t,n){if(F(e)&&E(e,V.begin)){let r=e.args,i=n,o=i.pendingDeferredDrops,a=e.$?.deferredDropExpressions??[];i.pendingDeferredDrops=[...a,...o??[]];let s=i.consumedVarPendingDrops,l=e.$?.consumedVariableDropExpressions??[];i.consumedVarPendingDrops=[...l,...s??[]];for(let c=0;c<r.length-1;c++){let _=r[c],p=P(_,t,n);if(p&&n.emitter.emitLine(`${t}${p};`),at(_.$?.controlFlow))break}let u="";if(r.length>0){let c=r[r.length-1];if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){if(c.$?.variableName){let p=c.$.variableName;c.$.variableName=void 0;let f=P(c,t,n);c.$.variableName=p;let d=U(c.$.type,n),h=Te(p,c.$.env);h!==f&&n.emitter.emitLine(`${t}${d} ${h} = ${f};`)}st(c,t,n);let _=c.$.deferredDupExpressions[0];F(_)&&_.$?.variableName?u=Te(_.$.variableName,_.$.env):u=P(c,t,n)}else u=P(c,t,n)}return e.$?.deferredDropExpressions&&bt(e,t,n),i.pendingDeferredDrops=o,i.consumedVarPendingDrops=s,u}else return e.$?.deferredDupExpressions&&st(e,t,n),P(e,t,n)}function fp(e,t,n){if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&de(i);if(!o&&r){let h=U(i,n);n.emitter.emitLine(`${t}${h} ${r};`)}let a=P(e.args[0],t,n),s=e.args[0].$?.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return $h(e,t,n,a,s,r,o);let l,u;if(Ee(s)?(u=s.childType,l=s.tag):dt(s)?(u=s,l="ref_semantics"):u=s,!ge(u))return'// Error: "match" expression requires an enum type';if(!n.types[u.id]?.cName)return`// Error: "match" expression enum type ${u.typeName} has no C name`;let _=tn(u);if(_){let h=e.args.slice(1),g=null,y=null;for(let v of h)if(F(v)&&E(v,"=>",2)){if(!v.args[0]?.$?.caseExecuted)continue;let T=v.args[0],$=v.args[1];if(T&&$&&F(T)&&E(T,"."))g={caseBody:$};else{let C=T.func;if(C&&F(C)&&E(C,".")){let L=C.args[0];if(L&&B(L)){let b=L.token.value;y={caseBody:$,variantName:b,casePattern:T}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),y){let v;if(F(y.casePattern)&&y.casePattern.args.length>0){let L=y.casePattern.args[0];if(L&&B(L)){v=oe(L.token.value);let b=_;n.emitter.emitLine(`${t} ${U(b,n)} ${v} = ${a};`)}}let T=n;v&&(T.inAsyncStateMachine||T.inEffectStateMachine)&&(T.localShadowedVariables||(T.localShadowedVariables=new Set),T.localShadowedVariables.add(v));let $=Yr(y.caseBody,t+" ",n);v&&T.localShadowedVariables&&T.localShadowedVariables.delete(v);let C=qr($);if(!o&&r&&!C){let L=$||a;n.emitter.emitLine(`${t} ${r} = ${L};`)}else $&&$!==""&&n.emitter.emitLine(`${t} ${$};`)}if(n.emitter.emitLine(`${t}} else {`),g){let v=Yr(g.caseBody,t+" ",n),T=qr(v);!o&&r&&!T?n.emitter.emitLine(`${t} ${r} = ${v};`):v&&v!==""&&n.emitter.emitLine(`${t} ${v};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(Pn(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let h=n.insideMatch;n.insideMatch=!0;let g=e.args.slice(1);for(let y=0;y<g.length;y++){let v=g[y];if(F(v)&&E(v,"=>",2)){if(!v.args[0]?.$?.caseExecuted)continue;let T=v.args[0],$=v.args[1];if(T&&$&&B(T)&&T.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let C=Yr($,t+" ",n);!o&&r&&C&&!qr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(T&&$&&F(T)&&E(T,".",1)){let C=T.args[0].token.value,L=Qt(u,C,n);n.emitter.emitLine(`${t}case ${L}: {`);let b=Yr($,t+" ",n);!o&&r&&b&&!qr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=h,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let f=n.insideMatch;n.insideMatch=!0;let d=e.args.slice(1);for(let h=0;h<d.length;h++){let g=d[h];if(F(g)&&E(g,"=>",2)){if(!g.args[0]?.$?.caseExecuted)continue;let y=g.args[0],v=g.args[1];if(y&&v&&B(y)&&y.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let T=Yr(v,t+" ",n);!o&&r&&T&&!qr(T)?n.emitter.emitLine(`${t} ${r} = ${T};`):T&&n.emitter.emitLine(`${t} ${T};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&y.func.tag==="Atom"&&y.func.token.value==="."&&y.args.length>=1){let T=y.args[0].token.value,$=Qt(u,T,n);if(n.emitter.emitLine(`${t}case ${$}: {`),y.args.length>1){let L=u.variants.find(b=>b.name===T);if(L&&L.fields){let b=y.args.slice(1);if(b.some(I=>F(I)&&E(I,":",2))){for(let I of b)if(F(I)&&E(I,":",2)){let z=I.args[0],M=I.args[1];if(!B(z))continue;let N=z.token.value,O=L.fields.find(Q=>Q.label===N);if(!O||de(O.type))continue;if(B(M)){let Q=M.token.value;if(Q!=="_"){let ne=oe(Q),j=oe(N),K=U(O.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${K} ${ne} = ${a}${te}data.${T}.${j};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let X;if(M.$?.env){let re=Y(M.$.env,Q);re.length>0&&(X=re[re.length-1].id)}if(X&&$e.stateMachineVariables.has(X)){let re=_n(X,"local",$e.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${re} = ${ne};`)}}}}}}else for(let I=0;I<b.length&&I<L.fields.length;I++){let z=b[I],M=L.fields[I];if(B(z)&&M){if(de(M.type))continue;let N=z.token.value;if(N!=="_"){let O=oe(N),Q=oe(M.label),ne=U(M.type,n),j=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ne} ${O} = ${a}${j}data.${T}.${Q};`);let K=n;if((K?.inAsyncStateMachine||K?.inEffectStateMachine)&&K.stateMachineVariables){let te;if(z.$?.env){let $e=Y(z.$.env,N);$e.length>0&&(te=$e[$e.length-1].id)}te&&K.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${_n(te,"local",K.stateMachineFieldAliases)} = ${O};`)}}}}}}if(F(v)&&E(v,"=>",2)){let L=v.args[0];n.emitter.emitLine(`${t} ${U(s,n)} ${oe(L.token.value)} = ${a};`),v=v.args[1]}let C=Yr(v,t+" ",n);!o&&r&&C&&!qr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&F(y.func)&&y.func.func.tag==="Atom"&&y.func.func.token.value==="."&&y.func.args.length===1){let T=y.func.args[0].token.value,$=Qt(u,T,n),C=y.args;n.emitter.emitLine(`${t}case ${$}: {`);let L=u.variants.find(S=>S.name===T);if(L&&L.fields&&C.length>0)if(C.some(I=>F(I)&&E(I,":",2))){for(let I of C)if(F(I)&&E(I,":",2)){let z=I.args[0],M=I.args[1];if(!B(z))continue;let N=z.token.value,O=L.fields.find(Q=>Q.label===N);if(!O)continue;if(B(M)){let Q=M.token.value;if(Q!=="_"){let ne=oe(Q);if(de(O.type))n.emitter.emitLine(`${t} // ${ne} is unit type (no value)`);else{let j=oe(N),K=U(O.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${K} ${ne} = ${a}${te}data.${T}.${j};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let X;if(M.$?.env){let re=Y(M.$.env,ne);re.length>0&&(X=re[re.length-1].id)}X&&$e.stateMachineVariables.has(X)&&n.emitter.emitLine(`${t} sm->${_n(X,"local",$e.stateMachineFieldAliases)} = ${ne};`)}}}}}}else for(let I=0;I<Math.min(C.length,L.fields.length);I++){let z=C[I],M=L.fields[I];if(z.tag==="Atom"&&M){let N=z.token.value;if(N!=="_"){let O=oe(N);if(de(M.type))n.emitter.emitLine(`${t} // ${O} is unit type (no value)`);else{let Q=oe(M.label),ne=U(M.type,n),j=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ne} ${O} = ${a}${j}data.${T}.${Q};`);let K=n;if((K?.inAsyncStateMachine||K?.inEffectStateMachine)&&K.stateMachineVariables){let te;if(z.$?.env){let $e=Y(z.$.env,N);$e.length>0&&(te=$e[$e.length-1].id)}te&&K.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${_n(te,"local",K.stateMachineFieldAliases)} = ${O};`)}}}}}if(F(v)&&E(v,"=>",2)){let S=v.args[0];n.emitter.emitLine(`${t} ${U(s,n)} ${oe(S.token.value)} = ${a};`),v=v.args[1]}let b=Yr(v,t+" ",n);!o&&r&&b&&!qr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=f,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&bt(e,t,n),o?"":r??""}function Eh(e){return F(e)?E(e,"|",2):!1}function Pl(e){if(!Eh(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Pl(n),...Pl(r)]}function pp(e){if(e!==void 0){if(Ue(e))return String(e.value);if(We(e))return e.value?"true":"false"}}function $h(e,t,n,r,i,o,a){let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let u=0;u<l.length;u++){let c=l[u];if(F(c)&&E(c,"=>",2)){if(!c.args[0]?.$?.caseExecuted)continue;let _=c.args[0],p=c.args[1];if(!_||!p)continue;if(B(_)&&_.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let g=Yr(p,t+" ",n);!a&&o&&g&&!qr(g)?n.emitter.emitLine(`${t} ${o} = ${g};`):g&&n.emitter.emitLine(`${t} ${g};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let f=Pl(_),d=_.$?.primitivePatternValues;if(d&&d.length>0)for(let g of d){let y=pp(g);y!==void 0&&n.emitter.emitLine(`${t}case ${y}:`)}else for(let g of f){let y=g.$?.value,v=pp(y);v!==void 0&&n.emitter.emitLine(`${t}case ${v}:`)}n.emitter.emitLine(`${t}{`);let h=Yr(p,t+" ",n);!a&&o&&h&&!qr(h)?n.emitter.emitLine(`${t} ${o} = ${h};`):h&&n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&bt(e,t,n),a?"":o??""}function dp(e,t,n){if(e.$?.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let r=e.args[0];if(!r||!r.$?.type)return"// Error: open expression has no argument or type";let i=r.$.type,o=r.$.value;if(pe(i)&&o===void 0){let a=P(r,t,n),s=e.$.runtimeDestructurings;for(let l of s){let u=U(l.type,n),c=oe(l.variableName),_=oe(l.label);n.emitter.emitLine(`${t}${u} ${c} = ${a}.${_};`)}}}return""}function mp(e,t,n,r){if(!t.callType)return e;let i=kt(t.callType);if(i.length===0)return e;let o=i.map(()=>"NULL").join(", "),s=`__yo_spawn_wrapper_${Re(r)}`;return n.emitter.emitDeclarationLine(`
|
|
11081
|
+
}`)}else i.needsCycleGC||this.emitter.emitLine("static void __yo_dispose_dispatch(void* ptr) { (void)ptr; }");i.needsIntelAsmSyntax&&(this._needsIntelAsmSyntax=!0),i.usesParallelism&&(this._usesParallelism=!0)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}get needsIntelAsmSyntax(){return this._needsIntelAsmSyntax}get usesParallelism(){return this._usesParallelism}};var B_=0;function ns(e){if(e.$?.variableName)return!0;if(e.$?.value!==void 0)return!1;if(F(e)){for(let t of e.args)if(ns(t))return!0;if(e.func&&ns(e.func))return!0}return!1}function ua(e,t){if(F(e)){e.$?.variableName&&t.add(e.$.variableName);let n=e.func,r=n.tag==="Atom"&&(n.token.value==="&&"||n.token.value==="||");if(r)e.args.length>0&&ua(e.args[0],t);else for(let i of e.args)ua(i,t);e.func&&!r&&ua(e.func,t)}}function G_(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=Nn(o);if(a&&e.has(a)){let s=P(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function W_(e,t,n){if(e.args.length===0)return"true";if(e.args.length===1)return P(e.args[0],t,n);let r=[];for(let l of e.args){let u=l.$?.value;if(We(u)){if(u.value===!1)return"false";continue}r.push(l)}if(r.length===0)return"true";if(r.length===1)return P(r[0],t,n);if(!r.slice(1).some(l=>ns(l)))return`(${r.map(u=>P(u,t,n)).join(" && ")})`;let o=`__yo_sc_${B_++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let l=0;l<r.length;l++){let u=P(r[l],a,n);l<r.length-1?(n.emitter.emitLine(`${a}if (${u}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${u};`)}for(let l=s-1;l>=0;l--){let u=r[l+1],c=new Set;ua(u,c),G_(c,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function q_(e,t,n){if(e.args.length===0)return"false";if(e.args.length===1)return P(e.args[0],t,n);let r=[];for(let l of e.args){let u=l.$?.value;if(We(u)){if(u.value===!0)return"true";continue}r.push(l)}if(r.length===0)return"false";if(r.length===1)return P(r[0],t,n);if(!r.slice(1).some(l=>ns(l)))return`(${r.map(u=>P(u,t,n)).join(" || ")})`;let o=`__yo_sc_${B_++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let l=0;l<r.length;l++){let u=P(r[l],a,n);l<r.length-1?(n.emitter.emitLine(`${a}if (!(${u})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${u};`)}for(let l=s-1;l>=0;l--){let u=r[l+1],c=new Set;ua(u,c),G_(c,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Y_(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type;return!o||!wt(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${U(o,n)}(${i})`}function Rl(e){let t=e.func.$?.value;return R(t)&&wt(t.value)&&e.args.length===1}function H_(e,t,n){if(!Rl(e))return"/* Error: generateArcTypeCall called on non-Arc type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=P(a,t,n),l=U(i,n),u=U(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 j_(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=e.$?.type,o=e.$?.variableName;if(ke(i)&&r){let a=n,s=r.map(u=>{let c=P(u,t,n);if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){st(u,t,a);let _=u.$.deferredDupExpressions[0];if(F(_)&&_.$?.variableName)return Te(_.$.variableName,_.$.env)}return c}).join(", "),l=U(i,n);if(o&&e.$?.type){let u=`(${l}){ .data = { ${s} } }`,c=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${c} = ${u};`),o}else return`(${l}){ .data = { ${s} } }`}}function K_(e,t,n){let r=n.emitter,i=e.args[0],o=e.args[1],a=i.$?.value;if(!a||!R(a)||!ke(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!Ue(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=U(s,n),c=P(o,t,n),_=e.$?.variableName||`temp_array_${Date.now()}`,p=`i_${Re(e.$?.env.modulePath??"")}`;return r.emitLine(`${t}${u} ${_};`),r.emitLine(`${t}for (int ${p} = 0; ${p} < ${l.value}; ${p}++) {`),r.emitLine(`${t} ${_}.data[${p}] = ${c};`),r.emitLine(`${t}}`),_}function X_(e,t,n){if(e.$?.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(F(r)&&E(r,":",2)&&(o=!0,r=r.args[0]),o&&B(r)&&r.$?.env){let l=r.token.value,u=Y(r.$.env,l);if(u.length>0&&u[u.length-1].isModuleLevel)return""}if(F(r)&&E(r,V.comptime)||F(r)&&E(r,V.given))return"";if(r.$?.pathCollection&&r.$?.pathCollection.length>0){let l=r.$.pathCollection[0];if(l&&l.length>=2){let u=l[0];if(typeof u=="string"&&r.$?.env){let c=Y(r.$.env,u);if(c.length>0&&c[c.length-1].isCompileTimeOnly)return""}}}if(B(r)&&r.$?.env){let l=r.token.value,u=Y(r.$.env,l);if(u.length>0&&u[u.length-1].isCompileTimeOnly)return""}if(!r.$?.type)return`// Error: No type information for left-hand side ${w(r)}
|
|
11082
|
+
`;let a=P(r,t,n),s=!1;if(e.$?.variableName){let l=e.$.variableName,u=n;if((u.inAsyncStateMachine||u.inEffectStateMachine)&&a.startsWith("sm->")){let _=u.stateMachineVariables?.get(l);if(!_&&u.stateMachineVariables){for(let[,p]of u.stateMachineVariables)if(p.name===l){_=p;break}}if(_&&_.kind!=="outer"){let p=`var_${_.id}`;de(r.$.type)||n.emitter.emitLine(`${t}sm->${p} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let _=_t(r.$.type,l,n);ke(r.$.type)?n.emitter.emitLine(`${t}${_} = ${a}; // Save old value for later use`):de(r.$.type)||n.emitter.emitLine(`${t}${_} = ${a}; // Save old value for later use`)}}if(ke(r.$.type)){let l=P(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Jt(i.$.type),c=n,_=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let f=Te(i.$.variableName,i.$.env);if(f!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,h=U(d,n);n.emitter.emitLine(`${t}${h} ${f} = ${l};`)}}st(i,t,c);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(_=Te(p.$.variableName,p.$.env))}if(o){let p=_t(r.$.type,P(r,t,n),n);n.emitter.emitLine(`${t}${p} = ${_};`)}else n.emitter.emitLine(`${t}${a} = ${_};`)}else{let l=P(i,t,n),u=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Jt(i.$.type),c=n,_=l;if(!u&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){if(i.$?.variableName&&i.$?.type){let f=Te(i.$.variableName,i.$.env);if(f!==l.trim()){let d=i.$.convertedRuntimeType||i.$.type,h=U(d,n);n.emitter.emitLine(`${t}${h} ${f} = ${l};`)}}st(i,t,c);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(_=Te(p.$.variableName,p.$.env))}if(!de(r.$.type)){let p=r.$.type,f=i.$?.type,d,h=ut(i.$.env.modulePath,_.trim());h&&n.tempVarAsyncStructNames&&(d=n.tempVarAsyncStructNames.get(_.trim()));let g=o&&f&&Ie(p)&&Ie(f),y;h&&g?d?y=`${d}*`:y=U(f,n):g&&d?y=`${d}*`:y=U(g?f:p,n);let v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!v?y+" ":""}${a} = ${_};`)}}return s?"":e.$?.variableName??""}function Z_(e,t,n){let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=r.$?.type;if(!i||!Ie(i))return"// Error: await argument must be a Future type";let o=Bt(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(En(e)){let s=P(r,t,n),l=U(i,n),u=o.isFuture.outputType;D(u)&&(u.resolvedConcreteType?u=u.resolvedConcreteType:e.$?.type&&!D(e.$.type)?u=e.$.type:e.$?.type&&D(e.$.type)&&e.$.type.resolvedConcreteType&&(u=e.$.type.resolvedConcreteType));let c=a.emitter,_=de(u)||D(u)&&de(e.$?.type??u),p=e.$?.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",f=e.$?.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";c.emitLine(`${t}// Synchronous await (io.await outside state machine)`),c.emitLine(`${t}${l} ${p} = ${s};`),c.emitLine(`${t}int ${f} = ${p}->state;`),sa(r.$?.type)||(c.emitLine(`${t}if (${f} == 0 && ${p}->__yo_resume_fn) {`),hh(e,p,t,n),c.emitLine(`${t} __yo_incr_rc((void*)${p}); // event loop reference`),c.emitLine(`${t} ${p}->__yo_resume_fn((void*)${p});`),c.emitLine(`${t}}`)),c.emitLine(`${t}{`),c.emitLine(`${t} int __await_state = ${p}->state;`),c.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),c.emitLine(`${t} __yo_async_poll_step();`),c.emitLine(`${t} __await_state = ${p}->state;`),c.emitLine(`${t} }`),c.emitLine(`${t} if (__await_state == -2) {`);let h=Bt(i),g=h?.isFuture.effects?.some(y=>G(y.type)||Ce(y.type)||y.isEffectRowSpread)??!1;if(g){c.emitLine(`${t} if (${f} == -2) {`),c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`),c.emitLine(`${t} }`);let y=a.pendingDeferredDrops;if(y){let $=e.$?.variableName;a.pendingDeferredDrops=y.filter(C=>Nn(C)!==$)}hn(t+" ",a,e),a.pendingDeferredDrops=y;let v=gh(h,a),T=a.currentFunctionType?.return?.type;if(v)if(c.emitLine(`${t} __yo_effect_escaped = 0;`),T&&!de(T)){let $=U(T,n);$!=="void"?(c.emitLine(`${t} ${$} _esc_result;`),c.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${$}));`),c.emitLine(`${t} return _esc_result;`)):c.emitLine(`${t} return;`)}else c.emitLine(`${t} return;`);else if(c.emitLine(`${t} __yo_effect_escaped = 1;`),T&&!de(T)){let $=U(T,n);c.emitLine(`${t} return (${$}){0};`)}else c.emitLine(`${t} return;`)}else c.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),c.emitLine(`${t} abort();`);if(c.emitLine(`${t} }`),c.emitLine(`${t}}`),_)return"";{let y=e.$?.variableName||"__sync_await_result",v=U(u,n),T=_t(u,y,n);if(g){if(c.emitLine(`${t}${T};`),c.emitLine(`${t}if (${p}->state == -1) {`),Ve(u)){let $=Un(u,n);$?c.emitLine(`${t} ${y} = ${$}(${p}->result);`):c.emitLine(`${t} ${y} = ${p}->result;`)}else c.emitLine(`${t} ${y} = ${p}->result;`);c.emitLine(`${t}} else {`),c.emitLine(`${t} ${y} = (${v}){0};`),c.emitLine(`${t}}`)}else if(Ve(u)){let $=Un(u,n);$?c.emitLine(`${t}${T} = ${$}(${p}->result);`):c.emitLine(`${t}${T} = ${p}->result;`)}else c.emitLine(`${t}${T} = ${p}->result;`);return y}}return"// Error: await should only be used inside async blocks"}function J_(e,t,n){let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=r.$?.type;if(!i||!Ie(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=P(r,t,n),l=e.$?.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=e.$?.variableName||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function ep(e,t,n){let i=n.emitter,o=F(e.func)?e.func.args[0]:e.args[0];if(!o)return"// Error: JoinHandle.await requires a self argument";let a=P(o,t,n),s=e.$?.type;if(!s||!ge(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=U(s,n),c=s.variants.find(C=>C.name==="Some")?.fields?.[0]?.type,_=!c||de(c),p=_?"uint8_t":c?U(c,n):"uint8_t",f=Qt(s,"Some",n),d=Qt(s,"None",n),h=e.$?.variableName||"jh",g=`__jh_future_${h}`,y=`__jh_header_${h}`,v=e.$?.variableName||"__jh_result",T=`__yo_jh_header_${h}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let $=_t(s,v,n);if(i.emitLine(`${t}${$};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${g} = ${a}.__future;`),i.emitLine(`${t} struct ${T} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${p} result;`),i.emitLine(`${t} void (*continuation_fn)(void*);`),i.emitLine(`${t} void* continuation_sm;`),i.emitLine(`${t} void (*__yo_resume_fn)(void*);`),i.emitLine(`${t} };`),i.emitLine(`${t} struct ${T}* ${y} = (struct ${T}*)${g};`),i.emitLine(`${t} int __jh_state = ${y}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${y}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),_)i.emitLine(`${t} ${v} = (${l}){ .tag = ${f} };`);else if(c&&Ve(c)){let C=Un(c,n);C?i.emitLine(`${t} ${v} = (${l}){ .tag = ${f}, .data = { .Some = { .value = ${C}(${y}->result) } } };`):i.emitLine(`${t} ${v} = (${l}){ .tag = ${f}, .data = { .Some = { .value = ${y}->result } } };`)}else i.emitLine(`${t} ${v} = (${l}){ .tag = ${f}, .data = { .Some = { .value = ${y}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${v} = (${l}){ .tag = ${d} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),v}function gh(e,t){let n=e.isFuture.effects;if(!n?.length)return!1;let r=tp(n),i=t.currentEvidenceParams;for(let o of r)if(G(o.type)){let a=`${o.label}.${o.label}`;if(!i?.has(a))return!0}else if(Ce(o.type)){let a=!1;if(i){for(let[s]of i)if(s.startsWith(`${o.label}.`)){a=!0;break}}if(!a)return!0}return!1}function tp(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function hh(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=Bt(i.$.type);if(!o?.isFuture.effects?.length)return;let a=tp(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(c=>F(c)&&E(c,V.using));if(u){let c=u.args;for(let _=0;_<a.length&&_<c.length;_++){let p=a[_],f=c[_];if(G(p.type)){let d=P(f,n,r),h=p.label;l.emitLine(`${n} ${t}->__capture.${h} = (void*)${d};`)}else Ce(p.type)&&Q_(p.type,t,n,f.$?.value,s,e)}}else for(let c of a)if(G(c.type)){let _=Th(c.label,s,e);_&&l.emitLine(`${n} ${t}->__capture.${c.label} = (void*)${_};`)}else Ce(c.type)&&Q_(c.type,t,n,void 0,s,e)}function Q_(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!G(s.type))continue;let l;if(i.stateMachineVariables){for(let[,u]of i.stateMachineVariables)if(u.name===s.label&&u.kind==="outer"){l=`sm->__capture.${s.label}`;break}}if(!l&&r&&Ye(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&ee(c)){let _=i.functions[c.funcId];_&&(l=_.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}l||(l=vh(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function vh(e,t,n,r){let i=r.$?.env??r.func.$?.env;if(!i)return;let o=$n(i,a=>a.isImplicit===!0);for(let a=o.length-1;a>=0;a--){let s=o[a],l=s.value?.[s.value.length-1];if(l&&Ye(l)){let u=l.type.fields.findIndex(c=>c.label===e);if(u>=0){let c=l.fields[u];if(c&&ee(c)){let _=n.functions[c.funcId]?.cName;if(_)return _}}}}}function Th(e,t,n){if(t.currentEvidenceParams){for(let r of t.currentEvidenceParams.values())if(r.fieldLabel===e)return r.cParamName}if(t.stateMachineVariables){for(let[,r]of t.stateMachineVariables)if(r.name===e&&r.kind==="outer")return`sm->__capture.${e}`}}function np(e,t,n){let r=e.$?.variableName,i=e.$?.type,o=n;if(r&&i){!de(i)&&!at(e.$?.controlFlow)&&n.emitter.emitLine(`${t}${U(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];o.pendingDeferredDrops=[...s,...a??[]];let l=o.consumedVarPendingDrops,u=e.$?.consumedVariableDropExpressions??[];o.consumedVarPendingDrops=[...u,...l??[]];let c=[],_=!de(i)&&!at(e.$?.controlFlow);for(let p=0;p<e.args.length;p++){let f=e.args[p],d=P(f,t+" ",n);c.push(d);let h=p===e.args.length-1;d&&!(h&&_)&&(f.$&&ut(f.$.env.modulePath,d)||n.emitter.emitLine(`${t} ${d};`))}if(_){let p=e.args[e.args.length-1],f=c[c.length-1];if(p.$?.deferredDupExpressions&&p.$.deferredDupExpressions.length>0){if(p.$?.variableName){let h=p.$.variableName;p.$.variableName=void 0;let g=P(p,t+" ",n);p.$.variableName=h;let y=U(p.$.type,n),v=Te(h,p.$.env);v!==g&&n.emitter.emitLine(`${t} ${y} ${v} = ${g};`),f=v}st(p,t+" ",n);let d=p.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(f=Te(d.$.variableName,d.$.env))}n.emitter.emitLine(`${t} ${r} = ${f};`)}if(e.$?.deferredDropExpressions)for(let p of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let d=Nn(p);if(d&&o.shortCircuitHandledDropVarNames.has(d)){o.shortCircuitHandledDropVarNames.delete(d);continue}}let f=P(p,t+" ",n);f&&n.emitter.emitLine(`${t} ${f};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,o.consumedVarPendingDrops=l,de(i)||at(e.$?.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let a=o.pendingDeferredDrops,s=e.$?.deferredDropExpressions??[];o.pendingDeferredDrops=[...s,...a??[]];let l=o.consumedVarPendingDrops,u=e.$?.consumedVariableDropExpressions??[];if(o.consumedVarPendingDrops=[...u,...l??[]],e.args.map(_=>P(_,t+" ",n)).forEach(_=>{_&&n.emitter.emitLine(`${t} ${_};`)}),e.$?.deferredDropExpressions)for(let _ of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let f=Nn(_);if(f&&o.shortCircuitHandledDropVarNames.has(f)){o.shortCircuitHandledDropVarNames.delete(f);continue}}let p=P(_,t+" ",n);p&&n.emitter.emitLine(`${t} ${p};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=a,o.consumedVarPendingDrops=l,""}}function rp(e,t,n){let r=e.args[0];if(F(r)&&E(r,V.comptime,1)||F(r)&&E(r,V.given,1))return"";if(!r.$?.type)return`// Error: No type information for left-hand side ${w(r)}
|
|
11083
|
+
`;let i=r.token.value,o=_t(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function ip(e,t,n){if(e.$){let r=e.$.variableName,i=e.$.type,o=i&&de(i),a=-1;for(let _=0;_<e.args.length;_++){let p=e.args[_];if(F(p)&&E(p,"=>",2)){let f=p.args[0];if(f&&!(We(f.$?.value)&&f.$.value.value===!1)){a=_;break}}}let s=!1;if(a>=0){let _=e.args[a];if(_&&F(_)&&E(_,"=>",2)){let p=_.args[0];p&&We(p.$?.value)&&p.$.value.value===!0&&(s=!0)}}if(!o&&r&&!s){let _=U(i,n);n.emitter.emitLine(`${t}${_} ${r};`)}if(s&&a>=0){let _=e.args[a];if(_&&F(_)&&E(_,"=>",2)){let p=_.args[1];if(p){let f=P(p,t,n);r&&!o&&(f&&f!==""&&!f.startsWith("goto")&&f!=="continue"&&f!=="break"&&!f.includes("return")?n.emitter.emitLine(`${t}${r} = ${f};`):f&&(f.startsWith("goto")||f==="continue"||f==="break"||f.includes("return"))&&n.emitter.emitLine(`${t}${f};`))}}return o?"":r??""}let l=t,u=0,c=!1;for(let _=0;_<e.args.length;_++){let p=e.args[_];if(F(p)&&E(p,"=>",2)){let f=p.args[0],d=p.args[1];if(f&&d){if(We(f.$?.value)&&f.$.value.value===!1)continue;if(c){if(n.emitter.emitLine(`${l}else {`),u++,l+=" ",!(We(f.$?.value)&&f.$.value.value===!0)){let T=P(f,l,n);n.emitter.emitLine(`${l}if (${T}) {`)}}else{if(We(f.$?.value)&&f.$.value.value===!0)n.emitter.emitLine(`${l}{`);else{let v=P(f,l,n);n.emitter.emitLine(`${l}if (${v}) {`)}c=!0}let h=We(f.$?.value)&&f.$.value.value===!0,g=c&&h?l:l+" ";if(F(d)&&E(d,V.begin)){let v=d.args,T=n,$=T.pendingDeferredDrops,C=d.$?.deferredDropExpressions??[];T.pendingDeferredDrops=[...C,...$??[]];let L=T.consumedVarPendingDrops,b=d.$?.consumedVariableDropExpressions??[];T.consumedVarPendingDrops=[...b,...L??[]];for(let S=0;S<v.length-1;S++){let I=v[S],z=P(I,g,n);if(z&&I.$&&!ut(I.$.env.modulePath,z)&&n.emitter.emitLine(`${g}${z};`),at(I.$?.controlFlow))break}if(v.length>0){let S=v[v.length-1];if(S.$?.deferredDupExpressions){if(S.$?.variableName){let z=S.$.variableName;S.$.variableName=void 0;let M=P(S,g,n);S.$.variableName=z;let N=U(S.$.type,n),O=Te(z,S.$.env);O!==M&&n.emitter.emitLine(`${g}${N} ${O} = ${M};`)}st(S,g,n);let I=S.$.deferredDupExpressions[0];if(F(I)&&I.$?.variableName){let z=Te(I.$.variableName,I.$.env);r&&!o&&n.emitter.emitLine(`${g}${r} = ${z};`)}else{let z=P(S,g,n);z&&r&&!o&&n.emitter.emitLine(`${g}${r} = ${z};`)}}else{let I=P(S,g,n);I&&(I==="continue"||I==="break"||I.startsWith("goto")||F(S)&&E(S,V.return)||I.includes("return")?n.emitter.emitLine(`${g}${I};`):r&&!o&&n.emitter.emitLine(`${g}${r} = ${I};`))}}d.$?.deferredDropExpressions&&bt(d,g,n),T.pendingDeferredDrops=$,T.consumedVarPendingDrops=L}else if(d.$?.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if(d.$?.variableName){let T=d.$.variableName;d.$.variableName=void 0;let $=P(d,g,n);d.$.variableName=T;let C=U(d.$.type,n),L=Te(T,d.$.env);L!==$&&n.emitter.emitLine(`${g}${C} ${L} = ${$};`)}st(d,g,n);let v=d.$.deferredDupExpressions[0];if(F(v)&&v.$?.variableName){let T=Te(v.$.variableName,v.$.env);r&&!o&&n.emitter.emitLine(`${g}${r} = ${T};`)}else{let T=P(d,g,n);T&&r&&!o&&n.emitter.emitLine(`${g}${r} = ${T};`)}}else{let v=P(d,g,n);v==="continue"||v==="break"||v.startsWith("goto")||F(d)&&E(d,V.return)||v.includes("return")?n.emitter.emitLine(`${g}${v};`):v===""||!v||r&&(o||n.emitter.emitLine(`${g}${r} = ${v};`))}!(c&&h)&&n.emitter.emitLine(`${l}}`)}}}for(let _=0;_<u;_++)l=l.slice(0,-2),n.emitter.emitLine(`${l}}`);return o?"":r??""}return'/* "cond" expression is not evaluated */'}function op(e,t,n){let r=e.args[0];return P(r,t,n)}function ap(e,t,n){let r=e.args[0],i=r.$?.type;if(!i||!Ae(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=P(r,t,n),s=e.args[1].$?.value;if(!s||!R(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=U(l,n),c=n.types[l.id]?.cName||u,_=`__yo_typeid_${oe(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,_),n.emitter.emitDeclarationLine(`static const char ${_} = 0;`)),n.cIncludes.add("<stdint.h>");let p=`${o}.vtable->__yo_type_id == (uintptr_t)&${_}`,f,d=!1,h="",g="";for(let[,S]of n.dynImpls){if(S.dynType.id!==i.id)continue;if((D(S.concreteType)&&S.concreteType.resolvedConcreteType?S.concreteType.resolvedConcreteType:S.concreteType).id===l.id&&xn(S.dataType)){d=!0,h=n.types[S.dataType.id]?.cName||`unknown_box_${S.dataType.id}`,g=oe(S.dataType.fields[0].label);break}}if(d){let S=`((${h}*)${o}.data)->${g}`,I=Un(l,n);if(dt(l))f=`((${u})__yo_incr_rc((void*)${S}))`;else if(I)f=`${I}((${u})${S})`;else{let z=!1,M=l;for(;An(M)&&M.fields.length===1;)M=M.fields[0].type;z=dt(M),z?f=`((${u})__yo_incr_rc((void*)${S}))`:f=`((${u})${S})`}}else f=`((${u})__yo_incr_rc((void*)${o}.data))`;let y=e.$?.type;if(!y||!ge(y))throw new Error("downcast codegen: expected Option enum as result type");if(tn(y))return`((${p}) ? ${f} : NULL)`;let T=U(y,n),$=Qt(y,"Some",n),C=Qt(y,"None",n),L=`(${T}){ .tag = ${$}, .data = { .Some = { .value = ${f} } } }`,b=`(${T}){ .tag = ${C} }`;return`((${p}) ? ${L} : ${b})`}function sp(e,t,n){if(!e.$?.dynCallTraitValues||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=e.$?.runtimeArgExprsInOrder?.[0]??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!Ae(i))return"/* Error: dyn() result type is not DynType */";let o=r.$?.type;if(!o)return"/* Error: dyn() value has no type */";let a=e.$.dynCallTraitValues;if(!a||a.length===0)return"/* Error: dyn() call missing trait values */";if(!dt(o)&&!xn(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=xn(o)?o.fields[0].type:o,l=D(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=n.types[i.id]?.cName||`__yo_dyn_${i.id}`,_=`${(()=>{let y=n.types[l.id]?.cName;if(y)return y;let v=cn(l);return(v?n.types[v.id]?.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(_,{dynType:i,concreteType:s,dataType:o,traitValues:a});let p=P(r,t,n);if(r.$?.variableName&&p!==r.$.variableName){let y=_t(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${y} = ${p};`),p=r.$.variableName}if(r.$?.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){st(r,t,n);let y=r.$.deferredDupExpressions[0];F(y)&&y.$?.variableName&&(p=Te(y.$.variableName,y.$.env))}let f=e.$?.variableName;if(!f)return"/* Error: dyn() expression missing temp variable name */";let d=n,h;if(d.inAsyncStateMachine&&d.stateMachineVariables){for(let[,y]of d.stateMachineVariables)if(y.kind==="local"&&y.id===f){h=`sm->${_n(y.id,"local",d.stateMachineFieldAliases)}`;break}}let g=`__yo_vtable_${_}`;return h?(n.emitter.emitLine(`${t}${h} = (${u}){`),n.emitter.emitLine(`${t} .data = ${p},`),n.emitter.emitLine(`${t} .vtable = &${g}`),n.emitter.emitLine(`${t}};`),h):(n.emitter.emitLine(`${t}${u} ${f} = {`),n.emitter.emitLine(`${t} .data = ${p},`),n.emitter.emitLine(`${t} .vtable = &${g}`),n.emitter.emitLine(`${t}};`),f)}function lp(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function up(e,t,n){let r=e.args[0],i=e.args[1],o=n;if(F(r)&&E(r,V.comptime,1)||F(r)&&E(r,V.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&B(r)&&B(i)){let a=r.token.value,s=i.token.value,l=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(c=>c.name===a),u=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(c=>c.name===s);if(a===s&&(l||u))return""}if(e.$?.runtimeDestructurings){let a=e.$.runtimeDestructurings,s=P(i,t,n),l=i.$?.type;return a.forEach(({label:u,type:c,variableName:_})=>{if(_==="_")return;let p=oe(_,c.isExtern==="c"),f=_t(c,p,n);if(l&&pe(l)&&l.isNewtype&&l.fields.length===1){let g=l.fields[0];if(g&&g.label===u){n.emitter.emitLine(`${t}${f} = ${s}; // Destructuring ${u} (newtype)`);return}}let d=u.match(/^\d+$/)?`_${u}`:oe(u,c.isExtern==="c");if(l&&Se(l)&&!u.match(/^\d+$/)){let g=l.fields.findIndex(y=>y.label===u);d=g>=0?`_${g}`:d}let h=l&&dt(l)?"->":".";n.emitter.emitLine(`${t}${f} = ${s}${h}${d}; // Destructuring ${u}`)}),""}if(B(r)){let a=r.$?.variableName??r.token.value;if(!r.$?.type)return`// Error: No type information for variable ${a}
|
|
11084
|
+
`;if(r.$?.env){let u=Y(r.$.env,a);if(u.length>0&&u[u.length-1].isCompileTimeOnly||u.length>0&&u[u.length-1].isModuleLevel)return""}let s=!1,l;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&r.$?.env){let u=Y(r.$.env,a);if(u.length>0){let c=u[u.length-1],_=c.isOwningTheSameRcValueAs?c.isOwningTheSameRcValueAs.id:c.id;o.stateMachineVariables.has(_)&&(s=!0,l=_)}}if(ke(r.$.type))if(F(i)&&E(i,V.array)){let u=P(i,t,n);if(s&&l){let c=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${c} = ${u};`)}else if(!de(r.$.type)){let c=_t(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u;if(i.$?.variableName){let c=Te(i.$.variableName,i.$.env),_=P(i,t,n);if(!s){let p=_t(i.$.type,c,n);c!==_&&n.emitter.emitLine(`${t}${p} = ${_};`)}u=c}else u=P(i,t,n);if(s&&l){let c=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${c} = ${u};`)}else if(!de(r.$.type)){let c=_t(r.$.type,a,n);n.emitter.emitLine(`${t}${c} = ${u};`)}}else{let u,c=F(i)&&i.$?.closureFunctionValue&&i.$?.type&&Jt(i.$.type),_=F(i)&&Yt(i);if(i.$?.variableName){let p=Te(i.$.variableName,i.$.env),f=Te(a,r.$.env);if(p===f){if(u=P(i,t,n),!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=Te(d.$.variableName,d.$.env))}}else if(B(i)&&p===Te(i.token.value,i.$.env)){if(u=P(i,t,n),!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let d=i.$.deferredDupExpressions[0];F(d)&&d.$?.variableName&&(u=Te(d.$.variableName,d.$.env))}}else if(B(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&i.$?.env&&o.currentClosureCaptureFrameLevel!==void 0&&Ar(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let d=o.currentClosureType;if(d&&d.isClosure){let h=Object.values(o.types).find(g=>g.type===d);h?u=`((${`${h.cName}_capture`}*)closure_context->data)->${Te(i.token.value,i.$.env)}`:u=`closure_context->${Te(i.token.value,i.$.env)}`}else u=`closure_context->${Te(i.token.value,i.$.env)}`}else{let d=P(i,t,n);if(d.trim()!==p){let h=i.$.convertedRuntimeType||i.$.type,g=_t(h,p,n);n.emitter.emitLine(`${t}${g} = ${d};`)}if(!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let h=i.$.deferredDupExpressions[0];F(h)&&h.$?.variableName?u=Te(h.$.variableName,h.$.env):u=p}else u=p}}else if(u=P(i,t,n),!c&&!_&&i.$?.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){st(i,t,o);let p=i.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(u=Te(p.$.variableName,p.$.env))}if(Ge(r.$.type)){let p=r.$.type;if(s&&l){let f=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${f} = ${u};`)}else if(!de(p)){let f=_t(p,a,n);n.emitter.emitLine(`${t}${f} = ${u};`)}}else if(s&&l){let p=_n(l,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${p} = ${u};`)}else{let p=ut(i.$.env.modulePath,u.trim()),f;if(p&&n.tempVarAsyncStructNames){let d=n.tempVarAsyncStructNames.get(u.trim());d?f=`${d}*`:f=U(r.$.type,n)}else f=U(r.$.type,n);de(r.$.type)||n.emitter.emitLine(`${t}${f} ${Te(a,r.$.env)} = ${u};`)}}return""}}var Eh=0;function ca(e,t,n,r,i=" "){if(k.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(k.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(k.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(k.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(k.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(k.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(k.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(k.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(k.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(k.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(k.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(k.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(k.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(k.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(k.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(k.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(k.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(k.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(k.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(k.__yo_noop.includes(e))return"";if(k.__yo_return_self.includes(e))return`(*${t[0]})`;if(k.__yo_ms_sleep.includes(e))return Ht(r.targetInfo)?`Sleep(${t[0]})`:`usleep((${t[0]}) * 1000)`;if(k.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(k.__yo_as.includes(e)&&n.$?.type){let o=U(n.$.type,r),a=n.args[0]?.$?.type;return a&&ge(a)&&!Pn(a)?`((${o})((${t[0]}).tag))`:`((${o})(${t[0]}))`}else{if(k.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(k.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(k.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(k.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(k.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(k.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(k.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(k.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(k.__yo_slice_ptr.includes(e))return`(${t[0]}.data)`;if(k.__yo_slice_new.includes(e)&&n.$?.type)return`(${U(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(k.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(k.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(k.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(k.__yo_getentropy.includes(e))return`getentropy(${t[0]}, ${t[1]})`;if(k.__yo_maybe_uninit_new.includes(e)&&n.$?.type){let o=U(n.$.type,r),a=`__yo_uninit_${Eh++}`;return r.emitter.emitLine(`${i}${o} ${a};`),a}else return k.__yo_maybe_uninit_as_ptr.includes(e)&&n.$?.type?`((${U(n.$.type,r)})(${t[0]}))`:k.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:k.__yo_array_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:k.__yo_slice_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:k.__yo_array_index_range.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:k.__yo_array_index_range_inclusive.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:k.__yo_slice_index_range.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:k.__yo_slice_index_range_inclusive.includes(e)&&n.$?.type&&Ee(n.$.type)?`(&(${U(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:`/* Unhandled operator ${e} */`}}function cp(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type;if(!o||!xt(o))return"// Error: __yo_iso_extract requires an Iso type";let a=U(o,n),s=e.$?.type;if(s&&n.isoTypes?.has(a)){let c=n.isoTypes.get(a);c.optionTypeCName||(c.optionTypeCName=U(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=e.$?.variableName;return u&&s?(n.emitter.emitLine(`${t}${U(s,n)} ${u} = ${l};`),u):l}function _p(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type;return!o||!xt(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${U(o,n)}(${i})`}function Pl(e){let t=e.func.$?.value;return R(t)&&xt(t.value)&&e.args.length===1}function pp(e,t,n){if(!Pl(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=(e.func.$?.value).value,o=i.childType,a=e.args[0],s=P(a,t,n),l=U(i,n),u=U(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 qr(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function Yr(e,t,n){if(F(e)&&E(e,V.begin)){let r=e.args,i=n,o=i.pendingDeferredDrops,a=e.$?.deferredDropExpressions??[];i.pendingDeferredDrops=[...a,...o??[]];let s=i.consumedVarPendingDrops,l=e.$?.consumedVariableDropExpressions??[];i.consumedVarPendingDrops=[...l,...s??[]];for(let c=0;c<r.length-1;c++){let _=r[c],p=P(_,t,n);if(p&&n.emitter.emitLine(`${t}${p};`),at(_.$?.controlFlow))break}let u="";if(r.length>0){let c=r[r.length-1];if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){if(c.$?.variableName){let p=c.$.variableName;c.$.variableName=void 0;let f=P(c,t,n);c.$.variableName=p;let d=U(c.$.type,n),h=Te(p,c.$.env);h!==f&&n.emitter.emitLine(`${t}${d} ${h} = ${f};`)}st(c,t,n);let _=c.$.deferredDupExpressions[0];F(_)&&_.$?.variableName?u=Te(_.$.variableName,_.$.env):u=P(c,t,n)}else u=P(c,t,n)}return e.$?.deferredDropExpressions&&bt(e,t,n),i.pendingDeferredDrops=o,i.consumedVarPendingDrops=s,u}else return e.$?.deferredDupExpressions&&st(e,t,n),P(e,t,n)}function dp(e,t,n){if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&de(i);if(!o&&r){let h=U(i,n);n.emitter.emitLine(`${t}${h} ${r};`)}let a=P(e.args[0],t,n),s=e.args[0].$?.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return Ch(e,t,n,a,s,r,o);let l,u;if(Ee(s)?(u=s.childType,l=s.tag):dt(s)?(u=s,l="ref_semantics"):u=s,!ge(u))return'// Error: "match" expression requires an enum type';if(!n.types[u.id]?.cName)return`// Error: "match" expression enum type ${u.typeName} has no C name`;let _=tn(u);if(_){let h=e.args.slice(1),g=null,y=null;for(let v of h)if(F(v)&&E(v,"=>",2)){if(!v.args[0]?.$?.caseExecuted)continue;let T=v.args[0],$=v.args[1];if(T&&$&&F(T)&&E(T,"."))g={caseBody:$};else{let C=T.func;if(C&&F(C)&&E(C,".")){let L=C.args[0];if(L&&B(L)){let b=L.token.value;y={caseBody:$,variantName:b,casePattern:T}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),y){let v;if(F(y.casePattern)&&y.casePattern.args.length>0){let L=y.casePattern.args[0];if(L&&B(L)){v=oe(L.token.value);let b=_;n.emitter.emitLine(`${t} ${U(b,n)} ${v} = ${a};`)}}let T=n;v&&(T.inAsyncStateMachine||T.inEffectStateMachine)&&(T.localShadowedVariables||(T.localShadowedVariables=new Set),T.localShadowedVariables.add(v));let $=Yr(y.caseBody,t+" ",n);v&&T.localShadowedVariables&&T.localShadowedVariables.delete(v);let C=qr($);if(!o&&r&&!C){let L=$||a;n.emitter.emitLine(`${t} ${r} = ${L};`)}else $&&$!==""&&n.emitter.emitLine(`${t} ${$};`)}if(n.emitter.emitLine(`${t}} else {`),g){let v=Yr(g.caseBody,t+" ",n),T=qr(v);!o&&r&&!T?n.emitter.emitLine(`${t} ${r} = ${v};`):v&&v!==""&&n.emitter.emitLine(`${t} ${v};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(Pn(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let h=n.insideMatch;n.insideMatch=!0;let g=e.args.slice(1);for(let y=0;y<g.length;y++){let v=g[y];if(F(v)&&E(v,"=>",2)){if(!v.args[0]?.$?.caseExecuted)continue;let T=v.args[0],$=v.args[1];if(T&&$&&B(T)&&T.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let C=Yr($,t+" ",n);!o&&r&&C&&!qr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(T&&$&&F(T)&&E(T,".",1)){let C=T.args[0].token.value,L=Qt(u,C,n);n.emitter.emitLine(`${t}case ${L}: {`);let b=Yr($,t+" ",n);!o&&r&&b&&!qr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=h,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let f=n.insideMatch;n.insideMatch=!0;let d=e.args.slice(1);for(let h=0;h<d.length;h++){let g=d[h];if(F(g)&&E(g,"=>",2)){if(!g.args[0]?.$?.caseExecuted)continue;let y=g.args[0],v=g.args[1];if(y&&v&&B(y)&&y.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let T=Yr(v,t+" ",n);!o&&r&&T&&!qr(T)?n.emitter.emitLine(`${t} ${r} = ${T};`):T&&n.emitter.emitLine(`${t} ${T};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&y.func.tag==="Atom"&&y.func.token.value==="."&&y.args.length>=1){let T=y.args[0].token.value,$=Qt(u,T,n);if(n.emitter.emitLine(`${t}case ${$}: {`),y.args.length>1){let L=u.variants.find(b=>b.name===T);if(L&&L.fields){let b=y.args.slice(1);if(b.some(I=>F(I)&&E(I,":",2))){for(let I of b)if(F(I)&&E(I,":",2)){let z=I.args[0],M=I.args[1];if(!B(z))continue;let N=z.token.value,O=L.fields.find(Q=>Q.label===N);if(!O||de(O.type))continue;if(B(M)){let Q=M.token.value;if(Q!=="_"){let ne=oe(Q),j=oe(N),K=U(O.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${K} ${ne} = ${a}${te}data.${T}.${j};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let X;if(M.$?.env){let re=Y(M.$.env,Q);re.length>0&&(X=re[re.length-1].id)}if(X&&$e.stateMachineVariables.has(X)){let re=_n(X,"local",$e.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${re} = ${ne};`)}}}}}}else for(let I=0;I<b.length&&I<L.fields.length;I++){let z=b[I],M=L.fields[I];if(B(z)&&M){if(de(M.type))continue;let N=z.token.value;if(N!=="_"){let O=oe(N),Q=oe(M.label),ne=U(M.type,n),j=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ne} ${O} = ${a}${j}data.${T}.${Q};`);let K=n;if((K?.inAsyncStateMachine||K?.inEffectStateMachine)&&K.stateMachineVariables){let te;if(z.$?.env){let $e=Y(z.$.env,N);$e.length>0&&(te=$e[$e.length-1].id)}te&&K.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${_n(te,"local",K.stateMachineFieldAliases)} = ${O};`)}}}}}}if(F(v)&&E(v,"=>",2)){let L=v.args[0];n.emitter.emitLine(`${t} ${U(s,n)} ${oe(L.token.value)} = ${a};`),v=v.args[1]}let C=Yr(v,t+" ",n);!o&&r&&C&&!qr(C)?n.emitter.emitLine(`${t} ${r} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(y&&v&&F(y)&&F(y.func)&&y.func.func.tag==="Atom"&&y.func.func.token.value==="."&&y.func.args.length===1){let T=y.func.args[0].token.value,$=Qt(u,T,n),C=y.args;n.emitter.emitLine(`${t}case ${$}: {`);let L=u.variants.find(S=>S.name===T);if(L&&L.fields&&C.length>0)if(C.some(I=>F(I)&&E(I,":",2))){for(let I of C)if(F(I)&&E(I,":",2)){let z=I.args[0],M=I.args[1];if(!B(z))continue;let N=z.token.value,O=L.fields.find(Q=>Q.label===N);if(!O)continue;if(B(M)){let Q=M.token.value;if(Q!=="_"){let ne=oe(Q);if(de(O.type))n.emitter.emitLine(`${t} // ${ne} is unit type (no value)`);else{let j=oe(N),K=U(O.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${K} ${ne} = ${a}${te}data.${T}.${j};`);let $e=n;if(($e?.inAsyncStateMachine||$e?.inEffectStateMachine)&&$e.stateMachineVariables){let X;if(M.$?.env){let re=Y(M.$.env,ne);re.length>0&&(X=re[re.length-1].id)}X&&$e.stateMachineVariables.has(X)&&n.emitter.emitLine(`${t} sm->${_n(X,"local",$e.stateMachineFieldAliases)} = ${ne};`)}}}}}}else for(let I=0;I<Math.min(C.length,L.fields.length);I++){let z=C[I],M=L.fields[I];if(z.tag==="Atom"&&M){let N=z.token.value;if(N!=="_"){let O=oe(N);if(de(M.type))n.emitter.emitLine(`${t} // ${O} is unit type (no value)`);else{let Q=oe(M.label),ne=U(M.type,n),j=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ne} ${O} = ${a}${j}data.${T}.${Q};`);let K=n;if((K?.inAsyncStateMachine||K?.inEffectStateMachine)&&K.stateMachineVariables){let te;if(z.$?.env){let $e=Y(z.$.env,N);$e.length>0&&(te=$e[$e.length-1].id)}te&&K.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${_n(te,"local",K.stateMachineFieldAliases)} = ${O};`)}}}}}if(F(v)&&E(v,"=>",2)){let S=v.args[0];n.emitter.emitLine(`${t} ${U(s,n)} ${oe(S.token.value)} = ${a};`),v=v.args[1]}let b=Yr(v,t+" ",n);!o&&r&&b&&!qr(b)?n.emitter.emitLine(`${t} ${r} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=f,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&bt(e,t,n),o?"":r??""}function $h(e){return F(e)?E(e,"|",2):!1}function Ul(e){if(!$h(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Ul(n),...Ul(r)]}function fp(e){if(e!==void 0){if(Ue(e))return String(e.value);if(We(e))return e.value?"true":"false"}}function Ch(e,t,n,r,i,o,a){let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let u=0;u<l.length;u++){let c=l[u];if(F(c)&&E(c,"=>",2)){if(!c.args[0]?.$?.caseExecuted)continue;let _=c.args[0],p=c.args[1];if(!_||!p)continue;if(B(_)&&_.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let g=Yr(p,t+" ",n);!a&&o&&g&&!qr(g)?n.emitter.emitLine(`${t} ${o} = ${g};`):g&&n.emitter.emitLine(`${t} ${g};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let f=Ul(_),d=_.$?.primitivePatternValues;if(d&&d.length>0)for(let g of d){let y=fp(g);y!==void 0&&n.emitter.emitLine(`${t}case ${y}:`)}else for(let g of f){let y=g.$?.value,v=fp(y);v!==void 0&&n.emitter.emitLine(`${t}case ${v}:`)}n.emitter.emitLine(`${t}{`);let h=Yr(p,t+" ",n);!a&&o&&h&&!qr(h)?n.emitter.emitLine(`${t} ${o} = ${h};`):h&&n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),e.$?.deferredDropExpressions&&bt(e,t,n),a?"":o??""}function mp(e,t,n){if(e.$?.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let r=e.args[0];if(!r||!r.$?.type)return"// Error: open expression has no argument or type";let i=r.$.type,o=r.$.value;if(pe(i)&&o===void 0){let a=P(r,t,n),s=e.$.runtimeDestructurings;for(let l of s){let u=U(l.type,n),c=oe(l.variableName),_=oe(l.label);n.emitter.emitLine(`${t}${u} ${c} = ${a}.${_};`)}}}return""}function yp(e,t,n,r){if(!t.callType)return e;let i=kt(t.callType);if(i.length===0)return e;let o=i.map(()=>"NULL").join(", "),s=`__yo_spawn_wrapper_${Re(r)}`;return n.emitter.emitDeclarationLine(`
|
|
11085
11085
|
// Spawn wrapper: bridges __yo_thread_fn to closure with evidence params
|
|
11086
11086
|
static void ${s}(void* closure) {
|
|
11087
11087
|
${e}(closure, ${o});
|
|
11088
11088
|
}
|
|
11089
|
-
`),s}function yp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(D(o)){let g=o;g.resolvedConcreteType&&(a=g.resolvedConcreteType.id,s=g.resolvedConcreteType)}else pe(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=U(s,n),_=mp(u,l,n,e.$?.env.modulePath??""),p=P(i,t,n),f=i.$?.variableName?Te(i.$.variableName,i.$.env):p,d=`_thread_closure_data_${Re(e.$?.env.modulePath??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${f};`);let h=e.$?.variableName;return h?(n.emitter.emitLine(`${t}__yo_thread_t ${h} = __yo_thread_spawn(${_}, ${d});`),h):`__yo_thread_spawn(${_}, ${d})`}function gp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(D(o)){let h=o;h.resolvedConcreteType&&(a=h.resolvedConcreteType.id,s=h.resolvedConcreteType)}else pe(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=U(s,n),_=mp(u,l,n,e.$?.env.modulePath??""),p=P(i,t,n),f=i.$?.variableName?Te(i.$.variableName,i.$.env):p,d=`_worker_closure_data_${Re(e.$?.env.modulePath??"")}`;return n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${_}, ${d});`),""}function hp(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${P(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function vp(e,t){let n=t;if(!(n.inAsyncStateMachine||n.inEffectStateMachine)||!n.stateMachineVariables)return e;for(let[r,i]of n.stateMachineVariables)if(i.name===e)return`sm->${i.kind==="outer"?`__capture.${i.name}`:`var_${r}`}`;return e}function Mn(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&&Ie(i.type))return;let o=`var_${i.id}`,a=oe(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function $p(e,t,n){if(e.$?.value!==void 0&&!ue(e.$.value))return e.$?.deferredDropExpressions&&bt(e,t,n),de(e.$.type)?"":an(e.$.value,n,e);let r=e.func.$?.value,i=e.func.$?.type??(ee(r)?r.specializedType??r.type:void 0);if(G(i)){let o=e.$?.runtimeArgExprsInOrder;if(o){let a=!1;if(F(e.func)&&E(e.func,".",2)){let c=e.func.args[0]?.$?.type;c&&Ae(c)&&(a=!0)}let s=o.map((u,c)=>{if(u.$?.variableName&&u.$?.type){let _=n,p=_.currentClosureCaptures&&_.currentClosureCaptures.includes(u.$.variableName)&&B(u)&&u.$.env&&_.currentClosureCaptureFrameLevel!==void 0&&Ar(u.token.value,u.$.env,_.currentClosureCaptureFrameLevel),f=P(u,t,n),d=!1;if(B(u)&&u.$.env&&u.$.variableName){let v=Y(u.$.env,u.$.variableName);v.length>0&&v[v.length-1].isCompileTimeOnly&&(d=!0)}let h=(_.inAsyncStateMachine||_.inEffectStateMachine)&&f.startsWith("sm->"),g=!1;if(f&&f!==u.$.variableName&&!p&&!h&&!d){let v=Te(u.$.variableName,u.$.env);if(f!==v){let T=u.$.convertedRuntimeType||u.$.type,$=_t(T,u.$.variableName,n);n.emitter.emitLine(`${t}${$} = ${f};`),g=!0,Mn(u.$.variableName,t,n)}}let y=g?u.$.variableName:f;if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){let v=new Set;u.$?.variableName&&v.add(Te(u.$.variableName,u.$.env)),f&&v.add(f),B(u)&&v.add(Te(u.token.value,u.$.env));let T=u.$.deferredDupExpressions.find($=>{let C=Za($);return C?v.has(Te(C,$.$?.env)):!1});T&&(st(u,t,_),F(T)&&T.$?.variableName&&(y=Te(T.$.variableName,T.$.env)))}if(a&&c===0){if(F(e.func)&&E(e.func,".",2)){let $=e.func.args[0]?.$?.type,C=e.func.args[1];if(B(C)&&Ae($)){let L=C.token.value;if($.trait.fields.find(S=>S.label===L))return h?f:oe(y,u.$.type.isExtern==="c")}}let v=u.$?.type;return v&&Ee(v)?h?`${f}->data`:`${oe(y,u.$.type.isExtern==="c")}->data`:h?`(${f}).data`:`(${oe(y,u.$.type.isExtern==="c")}).data`}else return p||h||d?f:oe(y,u.$.type.isExtern==="c")}else if(a&&c===0){let _=P(u,t,n);if(F(e.func)&&E(e.func,".",2)){let d=e.func.args[0]?.$?.type,h=e.func.args[1];if(B(h)&&Ae(d)){let g=h.token.value;if(d.trait.fields.find(v=>v.label===g))return _}}let p=u.$?.type;return p&&Ee(p)?`(${_})->data`:`(${_}).data`}else return P(u,t,n)}),l=s.join(", ");if(i.isExtern==="yo"&&i.externName){let u=i.externName;return Si.includes(u)?ca(u,s,e,n,t):u==="__yo_thread_spawn"?yp(e,t,n):u==="__yo_worker_spawn"?gp(e,t,n):de(i.return.type)?(n.emitter.emitLine(`${t}${u}(${l});`),e.$?.deferredDropExpressions&&bt(e,t,n),""):`${u}(${l})`}{let u=n;if(u.currentEvidenceParams?.size){let c=e.func.token?.value,_;if(c==="."&&F(e.func)&&E(e.func,".",2)){let p=e.func.args[1];p&&B(p)&&(c=p.token.value);let f=e.func.args[0];if(f&&B(f))_=f.token.value;else if(f&&F(f)&&E(f,".",2)){let d=f.args[0];d&&B(d)&&(_=d.token.value)}}if(c&&c!=="."){for(let p of u.currentEvidenceParams.values())if(p.fieldLabel===c||p.implicitLabel===c||p.fieldPath[p.fieldPath.length-1]===c){if(_&&_!==p.implicitLabel)continue;return Ep(p.cParamName,i,s,o,e,t,u,p)}}}}if(ee(r)){let u=Fr(r);if(u)return ca(u,s,e,n,t);let c=r.specializedType??r.type,_=n;if(_.currentEvidenceParams&&r.isModuleEffectMember){let f,d=e.func.$?.env??e.$?.env;if(d)for(let h of _.currentEvidenceParams.values()){let g=Y(d,h.implicitLabel),v=g[g.length-1]?.value?.[0];if(v&&Ye(v)){let T=v,$=!0;for(let C=0;C<h.fieldPath.length-1;C++){let L=h.fieldPath[C],b=T.type.fields.findIndex(S=>S.label===L);if(b>=0&&T.fields[b]&&Ye(T.fields[b]))T=T.fields[b];else{$=!1;break}}if($){let C=h.fieldPath[h.fieldPath.length-1],L=T.type.fields.findIndex(b=>b.label===C);if(L>=0){let b=T.fields[L];if(b&&ee(b)&&b.funcId===r.funcId){f=h;break}}}}}if(f){let h=f.cParamName;return Ep(h,c,s,o,e,t,_,f)}}let p=n.functions[r.funcId]?.cName;if(p){let f=r.specializedType??r.type,d=kt(f);if(d.length===0&&r.specializedType){let y=kt(r.type);y.length>0&&y.some(v=>v.fieldFunctionType.forallParameters&&v.fieldFunctionType.forallParameters.length>0)&&(d=y)}if(d.length>0){let{args:y,isHandlerInstallation:v}=Ul(d,r,e,n);if(y.length>0){let T=l?`${l}, ${y.join(", ")}`:y.join(", ");return zl(p,T,c,e,o,t,n,v)}}let h=r.isControlFunction||r.isModuleEffectMember||r.body?.$?.effectAnalysis?.hasEffects,g=!1;if(h){if(r.isControlFunction||r.isModuleEffectMember){let y=e.func?.$?.env??e.$?.env;if(y){let v=ta(y,T=>T.isImplicit===!0&&ee(T.value?.[0])&&T.value[0].funcId===r.funcId);v>=0&&v>y.functionDeclarationFrameLevel&&y.frames[v]?.isBeginBlockFrame&&(g=!0)}}else if(r.specializedType){let y=kt(r.type);if(y.length>0){let v=e.func?.$?.env??e.$?.env;if(v)for(let T of y){let $=ta(v,C=>C.isImplicit===!0&&(C.name===T.implicitLabel||C.name===T.fieldLabel));if($>=0&&$>v.functionDeclarationFrameLevel&&v.frames[$]?.isBeginBlockFrame){g=!0;break}}}}}if(de(c.return.type))return n.emitter.emitLine(`${t}${p}(${l});`),e.$?.deferredDropExpressions&&bt(e,t,n),h&&Tp(t,n,g,e),"";{let y=e.$?.variableName;if(y){let v=r.specializedType?.return.type??c.return.type,T=e.$?.type,$=T&&Ie(T),C=v&&Ie(v),L;if($&&C){let S=r.body;if(S&&E(S,"begin")){let I=S.args;if(I.length>0){let z=I[I.length-1];Yt(z)&&(S=z)}}if(S&&Yt(S)&&S.$?.asyncStateMachineStructName){let I=S.$.asyncStateMachineStructName;L=`${I}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(y,I)}else T&&D(T)&&T.resolvedConcreteType?L=U(T,n):L=U(v,n)}else L=U(v??T,n);let b=n;return b.declaredTempVars||(b.declaredTempVars=new Set),b.declaredTempVars.has(y)||(b.declaredTempVars.add(y),n.emitter.emitLine(`${t}${L} ${y} = ${p}(${l});`)),Mn(y,t,n),e.$?.deferredDropExpressions&&bt(e,t,n),h&&Tp(t,n,g,e),y}else return`// Error: Regular function call returns ${U(r.specializedType?.return.type??c.return.type,n)} but no temp variable assigned`}}}else{let u=n.externFunctions[i.id];if(u){let c=u.cName;return e.$?.deferredDropExpressions&&bt(e,t,n),`${c}(${l})`}else{let c=P(e.func,t,n);if(r&&G(r.type)){let y=kt(r.type);if(y.length>0){let{args:v,isHandlerInstallation:T}=Ul(y,r,e,n);if(v.length>0){let $=l?`${l}, ${v.join(", ")}`:v.join(", ");return zl(c,$,i,e,o,t,n,T)}}}let _=e.$?.type??i.return.type,p=U(_,n),f=i.parameters.filter(y=>!y.isCompileTimeOnly).map(y=>U(y.type,n)),d=`((${p} (*)(${f.join(", ")}))${c})`,h=n,g=c.includes("__capture.")&&!!h.inAsyncStateMachine;if(g&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),de(i.return.type)||de(_)){if(n.emitter.emitLine(`${t}${d}(${l});`),e.$?.deferredDropExpressions&&bt(e,t,n),g){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),o){for(let y of o)if(y.$?.variableName&&y.$?.type&&Ve(y.$.type)){let v=vp(oe(y.$.variableName),n),T=Gr(v,y.$.type,n);T&&(n.emitter.emitLine(`${t} ${T};`),n.emitter.emitLine(`${t} memset(&${v}, 0, sizeof(${v}));`))}}Wn({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let y=e.$?.variableName;if(y){let v=i.return.type,T=e.$?.type,$=T&&v&&Ie(T)&&Ie(v)?v:T??v,C=n;if(C.declaredTempVars||(C.declaredTempVars=new Set),C.declaredTempVars.has(y)||(C.declaredTempVars.add(y),n.emitter.emitLine(`${t}${U($,n)} ${y} = ${d}(${l});`)),Mn(y,t,n),e.$?.deferredDropExpressions&&bt(e,t,n),g){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),o){for(let L of o)if(L.$?.variableName&&L.$?.type&&Ve(L.$.type)){let b=vp(oe(L.$.variableName),n),S=Gr(b,L.$.type,n);S&&(n.emitter.emitLine(`${t} ${S};`),n.emitter.emitLine(`${t} memset(&${b}, 0, sizeof(${b}));`))}}Wn({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return y}else return`// Error: Function parameter call returns ${U(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&Jt(i)){let o=i,a=cn(o),s=Ae(o);{let l=a.isFn.callType,u=e.$?.runtimeArgExprsInOrder;if(u){let c=n;for(let h of u)if(h.$?.variableName&&h.$?.type){let g=c.currentClosureCaptures&&c.currentClosureCaptures.includes(h.$.variableName)&&B(h)&&h.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&Ar(h.token.value,h.$.env,c.currentClosureCaptureFrameLevel),y=P(h,t,n),v=!1;if(B(h)&&h.$.env&&h.$.variableName){let $=Y(h.$.env,h.$.variableName);$.length>0&&$[$.length-1].isCompileTimeOnly&&(v=!0)}let T=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->");if(y&&y!==h.$.variableName&&!g&&!T&&!v){let $=h.$.convertedRuntimeType||h.$.type,C=_t($,h.$.variableName,n);n.emitter.emitLine(`${t}${C} = ${y};`),Mn(h.$.variableName,t,n)}}let _=P(e.func,t,n),p=u.map(h=>{if(h.$?.variableName&&h.$?.type){if(c.currentClosureCaptures&&c.currentClosureCaptures.includes(h.$.variableName)&&B(h)&&h.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&Ar(h.token.value,h.$.env,c.currentClosureCaptureFrameLevel))return P(h,t,n);{let y=Te(h.$.variableName,h.$.env),v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->"),T=y;if(h.$?.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){st(h,t,c);let $=h.$.deferredDupExpressions[0];F($)&&$.$?.variableName&&(T=Te($.$.variableName,$.$.env))}return v?y:T}}else return P(h,t,n)}),f;if(s){let h=[`(${_}).data`,...p];f=`(${_}).vtable->call(${h.join(", ")})`}else{let h;if(D(o)){let y=o;y.resolvedConcreteType&&(h=y.resolvedConcreteType.id)}let g=h?n.implClosureCallMap.get(h):void 0;if(g){let y=kt(l);if(y.length>0){let{args:T,isHandlerInstallation:$}=Ul(y,{},e,c);if(T.length>0){let C=[`&(${_})`,...p,...T];return zl(g.functionCName,C.join(", "),l,e,u,t,c,$)}}let v=[`&(${_})`,...p];f=`${g.functionCName}(${v.join(", ")})`}else{let y=[`(${_}).data`,...p];f=`(${_}).call(${y.join(", ")})`}}let d=l.return.type;if(de(d))return n.emitter.emitLine(`${t}${f};`),e.$?.deferredDropExpressions&&bt(e,t,n),"";{let h=e.$?.variableName;return h?(n.emitter.emitLine(`${t}${U(d,n)} ${h} = ${f};`),Mn(h,t,n),e.$?.deferredDropExpressions&&bt(e,t,n),h):`// Error: Closure call returns ${U(d,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(R(r))if(pe(r.value)){let o=r.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=o.fields.map(c=>c.label),u=e.$?.variableName;if(a&&s&&l.length===a.length){if(o.isNewtype&&o.fields.length===1){let c=a[0],_=P(c,t,n),p=_;if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){let d=n;if(c.$?.variableName&&c.$?.type){let g=Te(c.$.variableName,c.$.env);if(_!==g){let y=c.$.type,v=U(y,n);n.emitter.emitLine(`${t}${v} ${g} = ${_};`)}}st(c,t,d);let h=c.$.deferredDupExpressions[0];F(h)&&h.$?.variableName&&(p=Te(h.$.variableName,h.$.env))}let f=`((${s})(${p}))`;if(u&&e.$?.type){let d=_t(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${f};`),Mn(u,t,n),u}else return f}if(o.isReferenceSemantics){let c=n,_=a.map(d=>{let h=P(d,t,n);if(d.$?.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if(d.$?.variableName&&d.$?.type){let y=Te(d.$.variableName,d.$.env);if(h!==y){let v=d.$.type,T=U(v,n);n.emitter.emitLine(`${t}${T} ${y} = ${h};`)}}st(d,t,c);let g=d.$.deferredDupExpressions[0];if(F(g)&&g.$?.variableName)return Te(g.$.variableName,g.$.env)}return h}).join(", "),f=`${`__yo_new_${s}`}(${_})`;if(u&&e.$?.type){let d=_t(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${f};`),Mn(u,t,n),u}else return f}else{let c=n,_=a.map((f,d)=>{let h=P(f,t,n),g=Se(o)?`_${d}`:oe(l[d],o.isExtern==="c"),y=h;if(f.$?.deferredDupExpressions&&f.$.deferredDupExpressions.length>0){if(f.$?.variableName&&f.$?.type){let T=Te(f.$.variableName,f.$.env),$=f.$.type,C=U($,n);h!==T&&n.emitter.emitLine(`${t}${C} ${T} = ${h};`)}st(f,t,c);let v=f.$.deferredDupExpressions[0];F(v)&&v.$?.variableName&&(y=Te(v.$.variableName,v.$.env))}return`.${g} = `+y}).join(", "),p=`(${s}){ ${_} }`;if(u&&e.$?.type){let f=_t(e.$.type,u,n);return n.emitter.emitLine(`${t}${f} = ${p};`),Mn(u,t,n),u}else return p}}}else{if(Jt(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(ot(r.value)){let o=e.$?.variableName,a=e.args[0];if(a&&F(a)&&E(a,":",2)){let s=a.args[0],l=a.args[1],u=n.types[r.value.id]?.cName;if(u&&B(s)&&l){let c=n,_=s.token.value,p=Te(_,s.$?.env),d=P(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){st(l,t,c);let g=l.$.deferredDupExpressions[0];F(g)&&g.$?.variableName&&(d=Te(g.$.variableName,g.$.env))}let h=`(${u}){ .${p} = ${d} }`;if(o&&e.$?.type){let g=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${g} = ${h};`),Mn(o,t,n),o}else return h}}}else if(ge(r.value)){let o=r.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=e.$?.variableName;if(o.selectedVariantName&&a&&s){if(tn(o)){let f=o.selectedVariantName,d=o.variants.find(h=>h.name===f);if(d){if(!d.fields||d.fields.length===0){let h="NULL";if(l&&e.$?.type){let g=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${g} = ${h};`),Mn(l,t,n),l}else return h}else if(d.fields.length===1){let h=P(a[0],t,n);if(l&&e.$?.type){let g=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${g} = ${h};`),Mn(l,t,n),l}else return h}}}if(Pn(o)){let f=o.selectedVariantName,d=Qt(o,f,n);if(l&&e.$?.type){let h=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${h} = ${d};`),Mn(l,t,n),l}else return d}let _=o.selectedVariantName,p=o.variants.find(f=>f.name===_);if(p){let f=p.fields?.filter(y=>!de(y.type))||[],d=n,h=a.map((y,v)=>{if(p.fields){let T=p.fields[v];if(T&&!de(T.type)){let $=P(y,t,n),C=Te(T.label,y.$?.env),L=$;if(y.$?.variableName&&y.$?.type){let b=d.currentClosureCaptures&&d.currentClosureCaptures.includes(y.$.variableName)&&B(y)&&y.$.env&&d.currentClosureCaptureFrameLevel!==void 0&&Ar(y.token.value,y.$.env,d.currentClosureCaptureFrameLevel),S=(d.inAsyncStateMachine||d.inEffectStateMachine)&&$.startsWith("sm->"),I=!1;if(B(y)&&y.$.env&&y.$.variableName){let M=Y(y.$.env,y.$.variableName);M.length>0&&M[M.length-1].isCompileTimeOnly&&(I=!0)}let z=!1;if($&&$!==y.$.variableName&&!b&&!S&&!I){let M=Te(y.$.variableName,y.$.env);if($!==M){let N=_t(y.$.type,y.$.variableName,n);n.emitter.emitLine(`${t}${N} = ${$};`),z=!0,Mn(y.$.variableName,t,n)}}z&&(L=Te(y.$.variableName,y.$.env))}if(y.$?.deferredDupExpressions&&y.$.deferredDupExpressions.length>0){st(y,t,d);let b=y.$.deferredDupExpressions[0];F(b)&&b.$?.variableName&&(L=Te(b.$.variableName,b.$.env))}return`.${C} = `+L}return""}else return""}).filter(y=>y).join(", "),g=f.length>0?`(${s}){ .tag = ${Qt(o,_,n)}, .data = { .${_} = { ${h} } } }`:`(${s}){ .tag = ${Qt(o,_,n)} }`;if(l&&e.$?.type){let y=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${y} = ${g};`),Mn(l,t,n),l}else return g}}}}else if(ke(i)){let o=e.args[0];if(o&&F(o)&&(E(o,"..")||E(o,"..="))){let l=E(o,"..="),u=P(e.func,t,n),c=P(o.args[0],t,n),_=P(o.args[1],t,n),p=`Slice_${oe(U(i.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:U(i.childType,n)}),l?`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) + 1 }`:`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) }`}let a=P(e.func,t,n),s=P(o,t,n);return`${a}.data[${s}]`}else if(Ge(i)){let o=e.args[0];if(o&&F(o)&&(E(o,"..")||E(o,"..="))){let l=E(o,"..="),u=P(e.func,t,n),c=P(o.args[0],t,n),_=P(o.args[1],t,n),p=`Slice_${oe(U(i.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:U(i.childType,n)}),l?`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) + 1 }`:`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) }`}let a=P(e.func,t,n),s=P(o,t,n);return`${a}.data[${s}]`}else if(i&&Ee(i)&&Ge(i.childType)){let o=P(e.func,t,n),a=P(e.args[0],t,n);return`${o}.data[${a}]`}}function Tp(e,t,n,r){let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(hn(e+" ",t,r,!1,!0,!1),tr(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),Wn({emitter:i,indent:e+" ",resultCode:void 0,debugLabel:void 0});else if(n){i.emitLine(`${e} __yo_effect_escaped = 0;`);let o=t.currentFunctionType?.return.type;if(o&&!de(o)){let a=U(o,t);a!=="void"?(i.emitLine(`${e} ${a} _esc_result;`),i.emitLine(`${e} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${a}));`),i.emitLine(`${e} return _esc_result;`)):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}else{let o=t.currentFunctionType?.return.type;if(o&&!de(o)){let a=U(o,t);a!=="void"?i.emitLine(`${e} return (${a}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function Ep(e,t,n,r,i,o,a,s){let l=n.join(", "),u=t.return.type,c=a.emitter,_,p=!1;if(s?.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let f=s.fieldFunctionType.return.type;p=D(f);let d=p?"void":i.$?.type?U(i.$.type,a):U(u,a),h=[],y=s.fieldFunctionType.parameters.filter(T=>!T.isCompileTimeOnly);for(let T=0;T<y.length;T++){let $=y[T].type,C=D($)&&r?.[T]?.$?.type?r[T].$.type:$,L=G(C)?Ir(C,"(*)",a):U(C,a);h.push(L)}let v=h.join(", ");_=`((${d} (*)(${v}))${e})`}else _=e;if(de(u)){if(c.emitLine(`${o}${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let f=a.currentFunctionType?.return.type;if(f&&!de(f)){let d=U(f,a);d!=="void"?c.emitLine(`${o} return (${d}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let f=i.$?.variableName;if(f){let d=s?.fieldFunctionType.forallParameters?.length&&i.$?.type?i.$.type:u,h=U(d,a);if(h==="void"||de(d)){if(c.emitLine(`${o}${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=a.currentFunctionType?.return.type;if(g&&!de(g)){let y=U(g,a);y!=="void"?c.emitLine(`${o} return (${y}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(p){if(c.emitLine(`${o}${h} ${f} = (${h}){0};`),c.emitLine(`${o}${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=a.currentFunctionType?.return.type;if(g&&!de(g)){let y=U(g,a);y!=="void"?c.emitLine(`${o} return (${y}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),Mn(f,o,a),f}if(c.emitLine(`${o}${h} ${f} = ${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=a.currentFunctionType?.return.type;if(g&&!de(g)){let y=U(g,a);y!=="void"?c.emitLine(`${o} return (${y}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),f}else return`${_}(${l})`}}function Ul(e,t,n,r){let i=[],o=t.body?.$?.effectAnalysis,a=!1;for(let s of e){let l=`${s.implicitLabel}.${s.fieldLabel}`,u=!1;if(r.currentEvidenceParams){let c=r.currentEvidenceParams.get(l);c&&(i.push(c.cParamName),u=!0)}if(!u){if(o){if(o.effectHandlerInfos)for(let c of o.effectHandlerInfos){if(c.effectParameterName!==s.fieldLabel&&c.effectParameterName!==s.implicitLabel)continue;let _=c.handlerValue;if(_&&ee(_)){if(_.specializedFunctionCaches?.length){let f=_.specializedFunctionCaches[0].specializedFunction,d=r.functions[f.funcId]?.cName;if(d){i.push(`(void*)${d}`),u=!0,a=!0;break}}let p=r.functions[_.funcId]?.cName;if(p){i.push(p),u=!0,a=!0;break}}}if(!u&&o.handlerValue&&e.length===1){let c=o.handlerValue;if(c&&ee(c)){if(c.specializedFunctionCaches?.length){let _=c.specializedFunctionCaches[0].specializedFunction,p=r.functions[_.funcId]?.cName;p&&(i.push(`(void*)${p}`),u=!0,a=!0)}if(!u){let _=r.functions[c.funcId]?.cName;_&&(i.push(_),u=!0,a=!0)}}}}if(!u){let c=n.func.$?.env??n.$?.env;if(c){let _=Y(c,s.implicitLabel),p=$n(c,y=>y.isImplicit===!0&&G(y.type)&&G(s.fieldFunctionType)&&y.type===s.fieldFunctionType),f=_[_.length-1],d=p[p.length-1],g=(d&&d!==f?d:f??d)?.value?.[0];if(g&&Ye(g)){let y=g,v=!0;for(let T=0;T<s.fieldPath.length-1;T++){let $=s.fieldPath[T],C=y.type.fields.findIndex(L=>L.label===$);if(C>=0&&y.fields[C]&&Ye(y.fields[C]))y=y.fields[C];else{v=!1;break}}if(v){let T=s.fieldPath[s.fieldPath.length-1],$=y.type.fields.findIndex(C=>C.label===T);if($>=0){let C=y.fields[$];if(C&&ee(C)){if(C.specializedFunctionCaches?.length>0){let L=C.specializedFunctionCaches[0].specializedFunction,b=r.functions[L.funcId]?.cName;b&&(i.push(`(void*)${b}`),u=!0)}if(!u){let L=r.functions[C.funcId]?.cName;L&&(i.push(L),u=!0)}}}}}else if(g&&ee(g)){if(g.specializedFunctionCaches?.length){let y=g.specializedFunctionCaches[0].specializedFunction,v=r.functions[y.funcId]?.cName;v&&(i.push(`(void*)${v}`),u=!0)}if(!u){let y=r.functions[g.funcId]?.cName;y&&(i.push(y),u=!0)}}u&&(a=!0)}}if(!u&&r.stateMachineVariables){let c=s.fieldPath[s.fieldPath.length-1];for(let[,_]of r.stateMachineVariables)if(_.name===c&&_.kind==="outer"){i.push(`sm->__capture.${c}`),u=!0;break}}if(!u)break}}return{args:i,isHandlerInstallation:a}}function zl(e,t,n,r,i,o,a,s=!1){let l=a.emitter,u=n.return.type;if(l.emitLine(`${o}__yo_effect_escaped = 0;`),de(u)){if(l.emitLine(`${o}${e}(${t});`),r.$?.deferredDropExpressions&&bt(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,r,!1,!0,!1),tr(o+" ",a,r)),a.inAsyncStateMachine)Wn({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let c=a.currentFunctionType?.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),c&&!de(c))if(s){let _=U(c,a);_!=="void"?(l.emitLine(`${o} ${_} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${_}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let _=U(c,a);_!=="void"?l.emitLine(`${o} return (${_}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let c=r.$?.variableName;if(c){let _=U(u,a);if(l.emitLine(`${o}${_} ${c} = ${e}(${t});`),Mn(c,o,a),r.$?.deferredDropExpressions&&bt(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,r,!1,!0,!1),tr(o+" ",a,r)),a.inAsyncStateMachine)Wn({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let p=a.currentFunctionType?.return.type;if(s&&p&&!de(p)){let f=U(p,a);l.emitLine(`${o} ${f} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${f}));`),l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return _esc_result;`)}else if(p&&!de(p)){let f=U(p,a);f!=="void"?l.emitLine(`${o} return (${f}){0};`):l.emitLine(`${o} return;`)}else s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),c}else return`${e}(${t})`}}function Cp(e,t,n){let r=n.emitter,i=e.$?.type;if(!i)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let a=e.args[0];if(a.$?.value&&we(a.$.value)){let s=a.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(s)});`),r.emitLine(`${t}abort();`)}else{let s=P(a,t,n),l=a.$?.type;l&&pe(l)&&An(l)&&l.typeName==="str"?r.emitLine(`${t}fprintf(stderr, "%.*s\\n", (int)${s}.length, ${s}.data);`):r.emitLine(`${t}fprintf(stderr, "%s\\n", ${s});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${U(i,n)}*)NULL))`}var Ch={reg:{x86_64:"r",aarch64:"r",x86:"r",arm:"r"},reg_byte:{x86_64:"q",x86:"q"},reg_abcd:{x86_64:"Q",x86:"Q"},xmm_reg:{x86_64:"x",aarch64:"w"},ymm_reg:{x86_64:"x"},imm:{x86_64:"i",aarch64:"i",x86:"i",arm:"i"},mem:{x86_64:"m",aarch64:"m",x86:"m",arm:"m"}},bh={rax:"a",eax:"a",ax:"a",al:"a",rbx:"b",ebx:"b",bx:"b",bl:"b",rcx:"c",ecx:"c",cx:"c",cl:"c",rdx:"d",edx:"d",dx:"d",dl:"d",rsi:"S",esi:"S",si:"S",rdi:"D",edi:"D",di:"D"},kh={e:"k",x:"w",l:"b",h:"h",w:"w"};function wh(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=bh[e];if(n)return n;let r=Ch[e];return r?r[t]??r.x86_64??"r":e}function Fh(e,t){let n="",r=0;for(;r<e.length;)if(e[r]==="{"){if(r+1<e.length&&e[r+1]==="{"){n+="{",r+=2;continue}let i=e.indexOf("}",r+1);if(i===-1){n+=e[r],r++;continue}let o=e.slice(r+1,i),a=o.indexOf(":"),s,l;a>=0?(s=o.slice(0,a),l=o.slice(a+1)):s=o;let u=l?kh[l]??l:void 0,c=parseInt(s,10);isNaN(c)?u?n+=`%${u}[${s}]`:n+=`%[${s}]`:u?n+=`%${u}${c}`:n+=`%${c}`,r=i+1}else e[r]==="}"&&r+1<e.length&&e[r+1]==="}"?(n+="}",r+=2):(n+=e[r],r++);return n}function Lh(e,t,n,r){let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let y,v=0;i.length===2&&i[0].$?.value&&we(i[0].$.value)&&(y=i[0].$.value.value,v=1);let T=P(i[v],t,n);return{kind:"const_val",name:y,constraint:"",cExpr:T,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let y,v=0;i.length===2&&i[0].$?.value&&we(i[0].$.value)&&(y=i[0].$.value.value,v=1);let T=P(i[v],t,n);return{kind:"sym",name:y,constraint:"i",cExpr:T,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let y=i[0];y.$?.value&&we(y.$.value)&&!(y.tag==="Atom"&&bp(y.token.value))&&(a=y.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=Ih(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let _=wh(u,o),p=i[c];if(p.tag==="Atom"&&p.token.value==="_")return{kind:r,name:a,constraint:_,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if(p.$?.value&&R(p.$.value)){let y=p.$.value.value,v=U(y,n);return{kind:r,name:a,constraint:_,cExpr:"",cType:v,isDiscarded:!1,isVariableTarget:!1}}let f=P(p,t,n),d=U(p.$?.type,n),g=(r==="out"||r==="lateout")&&p.tag==="Atom";return{kind:r,name:a,constraint:_,cExpr:f,cType:d,isDiscarded:!1,isVariableTarget:g}}function bp(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function Ih(e,t,n){if(e.tag==="Atom"&&bp(e.token.value))return e.token.value;if(e.$?.value&&we(e.$.value))return e.$.value.value;if(E(e,"raw",1)){let r=e;if(r.args[0].$?.value&&we(r.args[0].$.value))return`raw:${r.args[0].$.value.value}`}return"r"}function Ah(e,t){let n=[];if((e.func.tag==="Atom"?e.func.token.value:"clobber")==="clobber_abi"){let i=t.targetInfo.arch;if(i==="x86_64")n.push("rax","rcx","rdx","rsi","rdi","r8","r9","r10","r11","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","xmm8","xmm9","xmm10","xmm11","xmm12","xmm13","xmm14","xmm15","cc","memory");else if(i==="aarch64"){for(let o=0;o<=18;o++)n.push(`x${o}`);n.push("x30");for(let o=0;o<=31;o++)n.push(`v${o}`);n.push("cc","memory")}return n}for(let i of e.args)i.$?.value&&we(i.$.value)?n.push(i.$.value.value):i.tag==="Atom"&&n.push(i.token.value);return n}function xh(e){let t={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(let n of e.args)if(n.tag==="Atom")switch(n.token.value){case"pure":t.pure=!0,t.isVolatile=!1;break;case"intel_syntax":t.intelSyntax=!0;break;case"noreturn":t.noreturn=!0;break;case"volatile":t.isVolatile=!0;break}return t}var Bl=0;function kp(e,t,n){let r=n.emitter,i=e.$?.type;if(!i)return"/* Error: asm() missing type information */";if(er(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${U(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let M=e.args[a];if(F(M))break;if(M.$?.value&&we(M.$.value))o.push(M.$.value.value),a++;else break}let s=o.join(`
|
|
11090
|
-
`),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let M=e.args[a];if(!F(M)){a++;continue}let N=M.func.tag==="Atom"?M.func.token.value:void 0;if(!N){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(N)?l.push(
|
|
11091
|
-
`;let i=e.args[0];if(F(i)){let l=i.func.$?.type;if(l&&ke(l)){let u=i.args[0];if(u&&F(u)&&(E(u,"..")||E(u,"..="))){let c=E(u,"..="),_=P(i.func,t,n),p=P(u.args[0],t,n),f=P(u.args[1],t,n),d=`Slice_${oe(U(l.childType,n))}`;return n.sliceStructTypes.has(d)||n.sliceStructTypes.set(d,{childType:U(l.childType,n)}),c?`(${d}){ .data = &${_}.data[${p}], .length = (${f}) - (${p}) + 1 }`:`(${d}){ .data = &${_}.data[${p}], .length = (${f}) - (${p}) }`}}else if(l&&(Ge(l)||Ee(l)&&Ge(l.childType))){let u=Ge(l)?l:l.childType,c=i.args[0];if(c&&F(c)&&(E(c,"..")||E(c,"..="))){let _=E(c,"..="),p=P(i.func,t,n),f=P(c.args[0],t,n),d=P(c.args[1],t,n),h=`Slice_${oe(U(u.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:U(u.childType,n)}),_?`(${h}){ .data = &${p}.data[${f}], .length = (${d}) - (${f}) + 1 }`:`(${h}){ .data = &${p}.data[${f}], .length = (${d}) - (${f}) }`}}}let o=i.$?.value,a=i.$?.type;if(o!==void 0&&a){if(Ue(o)||We(o)){let l=P(i,t,n);return`(&(${U(a,n)}){${l}})`}if(we(o)&&i.$?.convertedRuntimeType)return`(&${P(i,t,n)})`}if(e.$?.isIndexTraitAddressOf&&F(i)&&i.$?.indexMethodValue){let l=i.$.indexMethodValue;if(ee(l)){let u=i.func,c=P(u,t,n);if(F(u)&&!B(u)&&!E(u,".")&&u.$?.type&&!(u.$?.variableName&&c===Te(u.$.variableName,u.$.env))){let g=U(u.$.type,n),y=`__yo_ptr_idx_tmp_${
|
|
11092
|
-
`}function Yp(e,t,n){let r=e.args[0];return`sizeof(${P(r,t,n)})`}function Hp(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=n.types[e.$?.type?.id??""]?.cName,o=e.$?.variableName;if(r&&i){let a=n,s=r.map((l,u)=>{let _=P(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){st(l,t,a);let p=l.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(_=Te(p.$.variableName,p.$.env))}return`._${u} = ${_}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}else{if(e.args.length===0)return"";{let a=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${e.$?.type?.id??"none"} */`;let s=a.map((l,u)=>{let c=P(l,t,n);return`._${u} = ${c}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}}}function jp(e,t,n){let i=e.args[0].$?.value;if(!i||!R(i))throw new Error("typeid codegen: expected TypeValue argument");let o=i.value,a=o.id,s=n.types[a]?.cName||U(o,n),l=`__yo_typeid_${oe(s)}`;return n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(a)||(n.typeIdStatics.set(a,l),n.emitter.emitDeclarationLine(`static const char ${l} = 0;`)),n.cIncludes.add("<stdint.h>"),`(uintptr_t)&${l}`}function Vh(e,t){if(F(e)&&E(e,V.begin)){let n=[];for(let r of e.args)if(F(r)&&E(r,"=",2)){let i=r.args[0],o=r.args[1],a=P(i,"",t),s=P(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(F(e)&&E(e,"=",2)){let n=e.args[0],r=e.args[1],i=P(n,"",t),o=P(r,"",t);return`${i} = ${o}`}return P(e,"",t)}function Gl(e,t,n){if(F(e)&&E(e,V.begin)){let r=n,i=r.pendingDeferredDrops,o=e.$?.deferredDropExpressions??[],a=new Map;for(let c of o){let _=Nn(c);_&&a.set(_,c)}r.pendingDeferredDrops=[...i??[]];let s=r.consumedVarPendingDrops,l=e.$?.consumedVariableDropExpressions??[];r.consumedVarPendingDrops=[...l,...s??[]];let u=new Set;for(let c of e.args){let _=P(c,t,n);if(_&&n.emitter.emitLine(`${t}${_};`),c.$?.env&&a.size>u.size)for(let p of c.$.env.frames)for(let f of p.variables)a.has(f.name)&&!u.has(f.name)&&(u.add(f.name),r.pendingDeferredDrops.unshift(a.get(f.name)))}if(e.$?.deferredDropExpressions)for(let c of e.$.deferredDropExpressions){let _=P(c,t,n);_&&n.emitter.emitLine(`${t}${_};`)}r.pendingDeferredDrops=i,r.consumedVarPendingDrops=s}else{let r=P(e,t,n);r&&n.emitter.emitLine(`${t}${r};`)}}function Kp(e,t,n){if(e.$?.comptimeUnrolledBodies){for(let i of e.$.comptimeUnrolledBodies)Gl(i,t,n);return""}let r=e.args;if(r.length===2){let i=r[0],o=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s;let l=n,u=l.loopBodyDropsBaselineCount;l.loopBodyDropsBaselineCount=l.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let c=P(i,t+" ",n);return n.emitter.emitLine(`${t} if (!(${c})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Gl(o,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),l.loopBodyDropsBaselineCount=u,n.currentLoopLabel=a,""}else if(r.length===3){let i=r[0],o=r[1],a=r[2],s=n.currentLoopLabel,l=n.currentContinueLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`,c=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u,n.currentContinueLabel=c;let _=n,p=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=_.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let f=P(i,t+" ",n);n.emitter.emitLine(`${t} if (!(${f})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Gl(a,t+" ",n),n.emitter.emitLine(`${t}${c}:;`);let d=Vh(o,n);return n.emitter.emitLine(`${t} ${d};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),_.loopBodyDropsBaselineCount=p,n.currentLoopLabel=s,n.currentContinueLabel=l,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}var Nh=0;function Mh(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Dh(e,t,n){let r=e.$?.indexMethodValue;if(!r||!ee(r))return"/* Error: Index trait method value missing */";let i=e.func,o=P(i,t,n);if(F(i)&&!B(i)&&!E(i,".")&&i.$?.type&&!(i.$?.variableName&&o===Te(i.$.variableName,i.$.env))){let _=U(i.$.type,n),p=`__yo_idx_tmp_${Nh++}`;n.emitter.emitLine(`${t}${_} ${p} = ${o};`),o=p}let a=e.args[0],s=a?P(a,t,n):"0",l,u=Fr(r);if(u)if(k.__yo_array_index.includes(u)||k.__yo_slice_index.includes(u))l=`(&((&${o})->data[${s}]))`;else if((k.__yo_array_index_range.includes(u)||k.__yo_slice_index_range.includes(u))&&e.$?.indexTraitPtrType&&Ee(e.$.indexTraitPtrType))l=`(&(${U(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start })`;else if((k.__yo_array_index_range_inclusive.includes(u)||k.__yo_slice_index_range_inclusive.includes(u))&&e.$?.indexTraitPtrType&&Ee(e.$.indexTraitPtrType))l=`(&(${U(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start + 1 })`;else{let c=n.functions[r.funcId]?.cName;if(!c)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${c}(&${o}, ${s})`}else{let c=n.functions[r.funcId]?.cName;if(!c)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${c}(&${o}, ${s})`}return e.$?.isIndexTraitAddressOf?l:`(*${l})`}function Oh(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=e.args.find(_=>F(_)&&E(_,V.using));if(!o)return;let a=Bt(i.$.type);if(!a?.isFuture.effects?.length)return;let s=Mh(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let _=0;_<s.length&&_<l.length;_++){let p=s[_],f=l[_];if(G(p.type)){let d=p.label,h;if(u.currentEvidenceParams){for(let g of u.currentEvidenceParams.values())if(g.fieldLabel===d){h=g.cParamName;break}}if(!h&&u.stateMachineVariables){for(let[,g]of u.stateMachineVariables)if(g.name===d&&g.kind==="outer"){h=`sm->__capture.${d}`;break}}if(!h){let g=f.$?.value;if(g&&ee(g)){let y=r.functions[g.funcId];y&&(h=y.cName)}}h||(h=P(f,n,r)),h&&c.emitLine(`${n} ${t}->__capture.${d} = (void*)${h};`)}else if(Ce(p.type)){let d=p.type;for(let h of d.fields){if(!G(h.type))continue;let g;if(u.stateMachineVariables){for(let[,y]of u.stateMachineVariables)if(y.name===h.label&&y.kind==="outer"){g=`sm->__capture.${h.label}`;break}}if(!g){let y=f.$?.value;if(y&&Ye(y)){let v=d.fields.indexOf(h),T=y.fields[v];if(T&&ee(T)){let $=r.functions[T.funcId];$&&(g=$.cName)}}}if(!g&&u.currentEvidenceParams){for(let y of u.currentEvidenceParams.values())if(y.fieldLabel===h.label){g=y.cParamName;break}}g||(g=Rh(h.label,d,u,e)),g&&c.emitLine(`${n} ${t}->__capture.${h.label} = (void*)${g};`)}}}}function Rh(e,t,n,r){let i=r.$?.env??r.func.$?.env;if(!i)return;let o=$n(i,a=>a.isImplicit===!0);for(let a=o.length-1;a>=0;a--){let s=o[a],l=s.value?.[s.value.length-1];if(l&&Ye(l)){let u=l.type.fields.findIndex(c=>c.label===e);if(u>=0){let c=l.fields[u];if(c&&ee(c)){let _=n.functions[c.funcId]?.cName;if(_)return _}}}}}function Ph(e,t,n){let r=n,i=e.args[0],o=r.continuationVariables?.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let l=P(i,t,n);if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${l};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let l=r.emitter;if(i){let u=P(i,t,n);u&&u!=="(void)0"&&l.emitLine(`${t}(void)${u};`)}if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)l.emitLine(`${t}${u};`);return hn(t,r,e,!1,!0,!0),tr(t,r,e,!0),Wn({emitter:l,indent:t,debugLabel:r.currentFunctionName}),""}if((r.isModuleEffectMemberFunction||r.currentEvidenceParams&&r.currentEvidenceParams.size>0)&&r.emitter.emitLine(`${t}__yo_effect_escaped = 1;`),!i){if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);if(hn(t,r,e,!1,!0,!0),tr(t,r,e,!0),r.currentFunctionType){let l=r.currentFunctionType.return.type;if(!de(l)){let u=r.overrideReturnTypeStr??U(l,n);if(u!=="void")return`return (${u}){0}`}}return"return"}let s=P(i,t,n);if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);if(hn(t,r,e,!1,!0,!0),tr(t,r,e,!0),(r.isModuleEffectMemberFunction||r.currentEvidenceParams&&r.currentEvidenceParams.size>0)&&r.currentFunctionType){let l=i.$?.type;if(l&&!de(l)){let c=U(l,n);r.emitter.emitLine(`${t}{ ${c} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${c})); }`)}let u=r.currentFunctionType.return.type;if(!de(u)){let c=r.overrideReturnTypeStr??U(u,n);if(c!=="void")return`return (${c}){0}`}return"return"}return`return ${s}`}function Xp(e,t,n){let r;switch(e.tag){case"FnCall":r=Uh(e,t,n);break;case"Atom":r=go(e,n,t);break}return r}function Uh(e,t,n){if(e.$?.macroExpansion)return P(e.$.macroExpansion,t,n);if(F(e.func)&&E(e.func,".",2)&&e.func.args[1]&&B(e.func.args[1])){let r=e.func.args[1].token.value,i=e.func.args[0],o=i?.$?.type;if(o&&D(o)&&Ie(o)){if(r===k.___drop[0]){let a=P(i,t,n);return`if (${a} != NULL) { __yo_decr_rc((void*)${a}); }`}if(r===k.___dup[0])return`__yo_incr_rc((void*)${P(i,t,n)})`}}if(t_(e))return n_(e,t,n);if(E(e,k.__yo_decr_rc))return Ip(e,t,n);if(E(e,k.__yo_incr_rc))return Ap(e,t,n);if(E(e,k.__yo_rc_own))return xp(e,t,n);if(E(e,k.__yo_drop_array_element))return Sp(e,t,n);if(E(e,k.__yo_dup_array_element))return Vp(e,t,n);if(E(e,k.__yo_drop_tuple_element))return Np(e,t,n);if(E(e,k.__yo_dup_tuple_element))return Mp(e,t,n);if(E(e,k.___dup))return Dp(e,t,n);if(E(e,k.___drop))return Op(e,t,n);if(E(e,k.__yo_dyn_drop))return Rp(e,t,n);if(E(e,k.__yo_dyn_dup))return Pp(e,t,n);if(E(e,k.__yo_incr_rc_atomic))return Up(e,t,n);if(E(e,k.__yo_decr_rc_atomic))return zp(e,t,n);if(E(e,k.__yo_iso_extract))return up(e,t,n);if(E(e,k.__yo_iso_dispose))return cp(e,t,n);if(E(e,k.__yo_arc_dispose))return q_(e,t,n);if(Rl(e))return _p(e,t,n);if(Ol(e))return Y_(e,t,n);if(E(e,k.__yo_sometype_drop))return Bp(e,t,n);if(E(e,k.__yo_sometype_dup))return Gp(e,t,n);if(E(e,k.__yo_gc_collect))return sp(e,t,n);if(E(e,k.rc))return Wp(e,t,n);if(E(e,k.panic))return Cp(e,t,n);if(E(e,k.asm))return kp(e,t,n);if(E(e,k.global_asm))return wp(e,t,n);if(E(e,V.test))return"/* test declaration skipped */";if(E(e,k.__yo_thread_set_maximum_threads))return hp(e,t,n);if(E(e,V.op_and))return G_(e,t,n);if(E(e,V.op_or))return W_(e,t,n);if(Yt(e))return e.$?.awaitAnalysis?r_(e,t,n):l_(e,t,n);if(E(e,V.dyn))return ap(e,t,n);if(En(e))return Q_(e,t,n);if(_c(e))return Z_(e,t,n);if(Ua(e)){let r=e.args[0];if(!r)return"// Error: spawn requires a Future argument";let o=n.emitter,a=P(r,t,n),s=r.$?.type,l=s?U(s,n):"void*",u=e.$?.type,c=u?U(u,n):null,_=e.$?.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",p=e.$?.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return o.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),o.emitLine(`${t}${l} ${_} = ${a};`),o.emitLine(`${t}int ${p} = ${_}->state;`),o.emitLine(`${t}if (${p} == -2) {`),o.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),o.emitLine(`${t} abort();`),o.emitLine(`${t}}`),sa(r.$?.type)||(o.emitLine(`${t}if (${p} == 0 && ${_}->__yo_resume_fn) {`),Oh(e,_,t,n),o.emitLine(`${t} __yo_incr_rc((void*)${_});`),o.emitLine(`${t} ${_}->__yo_resume_fn((void*)${_});`),o.emitLine(`${t}}`)),c?`(${c}){ .__future = (void*)${_} }`:`(void*)${_}`}if(pc(e))return J_(e,t,n);if(E(e,V.return))return L_(e,t,n);if(E(e,V.escape))return Ph(e,t,n);if(E(e,k.__yo_array_fill,2))return j_(e,t,n);if(E(e,"::",2))return"";if(E(e,":",2))return np(e,t,n);if(E(e,":=",2)){let r=lp(e,t,n);if(r!==void 0)return r}else{if(E(e,"=",2))return K_(e,t,n);if(e.$?.value&&!ue(e.$?.value)&&!de(e.$.type)&&!at(e.$?.controlFlow))return an(e.$.value,n,e);if(E(e,".",2))return Fp(e,t,n);if(E(e,V.begin))return tp(e,t,n);if(E(e,V.cond))return rp(e,t,n);if(E(e,V.match))return fp(e,t,n);if(E(e,k.__yo_address_of,1))return Lp(e,t,n);if(E(e,V.tuple))return Hp(e,t,n);if(E(e,V.array)){let r=H_(e,t,n);if(r!==void 0)return r}else{if(E(e,V.recur))return qp(e,t,n);if(E(e,V.runtime,1))return P(e.args[0],t,n);if(E(e,k.sizeof,1))return Yp(e,t,n);if(E(e,k.typeid,1))return jp(e,t,n);if(E(e,k.downcast,2))return op(e,t,n);if(E(e,Si)){let r=e.$?.runtimeArgExprsInOrder||e.args;if(r){let i=n,o=r.map(a=>{let s=P(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){st(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return Te(l.$.variableName,l.$.env)}return s});return ca(e.func.token.value,o,e,n,t)}}else{if(E(e,V.while))return Kp(e,t,n);if(E(e,"->",2)&&F(e.args[0])&&E(e.args[0],V.fn)){let r=e.$?.value;return ee(r)?an(r,n):"// Error: Anonymous function missing function value"}else{if(E(e,k.consume))return ip(e,t,n);if(E(e,k.comptime_expect_error)||E(e,k.comptime_assert)||E(e,k.__yo_var_print_info)||E(e,k.__yo_var_is_owning_the_rc_value)||E(e,k.__yo_var_has_other_aliases))return"";if(E(e,V.open))return dp(e,t,n);if(e.$?.indexTraitPtrType&&e.$?.indexMethodType)return Dh(e,t,n);{let r=$p(e,t,n);if(r!==void 0)return r}}}}}if(F(e))throw new Error(`Unhandled function call: ${w(e)}`);return`// Failed to transpile ${w(e)}`}function Qp({expr:e,env:t,context:n}){ve(e,k.alignof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=or(o),s;return a===null?s=W(St(),{env:t,context:n}):s=on("Usize",a),e.$={env:t,type:St(),value:s,pathCollection:[]},e}function Zp({expr:e,env:t,context:n}){let r=E(e,V.op_and)?"and":"or",i=e.args;if(i.length===0){let u=ft(r==="and");return e.$={env:t,type:rt(),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],_=x({expr:c,env:o,context:{...n}});if(!_.$||!vn(_.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
|
|
11093
|
-
${w(c)}`});o=_.$.env;let p=_.$.value;if(ue(p)){s=!0;continue}if(We(p)){let f=p.value;if(r==="and"){if(!f){a=ft(!1);break}!s&&!l&&(a=ft(!0))}else{if(f){a=ft(!0);break}!s&&!l&&(a=ft(!1))}}else l=!0}return We(a)||(l||s)&&(l?a=void 0:a=W(rt(),{env:o,context:n})),e.$={env:o,type:rt(),value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11089
|
+
`),s}function gp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(D(o)){let g=o;g.resolvedConcreteType&&(a=g.resolvedConcreteType.id,s=g.resolvedConcreteType)}else pe(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=U(s,n),_=yp(u,l,n,e.$?.env.modulePath??""),p=P(i,t,n),f=i.$?.variableName?Te(i.$.variableName,i.$.env):p,d=`_thread_closure_data_${Re(e.$?.env.modulePath??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${f};`);let h=e.$?.variableName;return h?(n.emitter.emitLine(`${t}__yo_thread_t ${h} = __yo_thread_spawn(${_}, ${d});`),h):`__yo_thread_spawn(${_}, ${d})`}function hp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=i.$?.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(D(o)){let h=o;h.resolvedConcreteType&&(a=h.resolvedConcreteType.id,s=h.resolvedConcreteType)}else pe(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=U(s,n),_=yp(u,l,n,e.$?.env.modulePath??""),p=P(i,t,n),f=i.$?.variableName?Te(i.$.variableName,i.$.env):p,d=`_worker_closure_data_${Re(e.$?.env.modulePath??"")}`;return n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${_}, ${d});`),""}function vp(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${P(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function Tp(e,t){let n=t;if(!(n.inAsyncStateMachine||n.inEffectStateMachine)||!n.stateMachineVariables)return e;for(let[r,i]of n.stateMachineVariables)if(i.name===e)return`sm->${i.kind==="outer"?`__capture.${i.name}`:`var_${r}`}`;return e}function Mn(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&&Ie(i.type))return;let o=`var_${i.id}`,a=oe(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function Cp(e,t,n){if(e.$?.value!==void 0&&!ue(e.$.value))return e.$?.deferredDropExpressions&&bt(e,t,n),de(e.$.type)?"":sn(e.$.value,n,e);let r=e.func.$?.value,i=e.func.$?.type??(ee(r)?r.specializedType??r.type:void 0);if(G(i)){let o=e.$?.runtimeArgExprsInOrder;if(o){let a=!1;if(F(e.func)&&E(e.func,".",2)){let c=e.func.args[0]?.$?.type;c&&Ae(c)&&(a=!0)}let s=o.map((u,c)=>{if(u.$?.variableName&&u.$?.type){let _=n,p=_.currentClosureCaptures&&_.currentClosureCaptures.includes(u.$.variableName)&&B(u)&&u.$.env&&_.currentClosureCaptureFrameLevel!==void 0&&Ar(u.token.value,u.$.env,_.currentClosureCaptureFrameLevel),f=P(u,t,n),d=!1;if(B(u)&&u.$.env&&u.$.variableName){let v=Y(u.$.env,u.$.variableName);v.length>0&&v[v.length-1].isCompileTimeOnly&&(d=!0)}let h=(_.inAsyncStateMachine||_.inEffectStateMachine)&&f.startsWith("sm->"),g=!1;if(f&&f!==u.$.variableName&&!p&&!h&&!d){let v=Te(u.$.variableName,u.$.env);if(f!==v){let T=u.$.convertedRuntimeType||u.$.type,$=_t(T,u.$.variableName,n);n.emitter.emitLine(`${t}${$} = ${f};`),g=!0,Mn(u.$.variableName,t,n)}}let y=g?u.$.variableName:f;if(u.$?.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){let v=new Set;u.$?.variableName&&v.add(Te(u.$.variableName,u.$.env)),f&&v.add(f),B(u)&&v.add(Te(u.token.value,u.$.env));let T=u.$.deferredDupExpressions.find($=>{let C=Za($);return C?v.has(Te(C,$.$?.env)):!1});T&&(st(u,t,_),F(T)&&T.$?.variableName&&(y=Te(T.$.variableName,T.$.env)))}if(a&&c===0){if(F(e.func)&&E(e.func,".",2)){let $=e.func.args[0]?.$?.type,C=e.func.args[1];if(B(C)&&Ae($)){let L=C.token.value;if($.trait.fields.find(S=>S.label===L))return h?f:oe(y,u.$.type.isExtern==="c")}}let v=u.$?.type;return v&&Ee(v)?h?`${f}->data`:`${oe(y,u.$.type.isExtern==="c")}->data`:h?`(${f}).data`:`(${oe(y,u.$.type.isExtern==="c")}).data`}else return p||h||d?f:oe(y,u.$.type.isExtern==="c")}else if(a&&c===0){let _=P(u,t,n);if(F(e.func)&&E(e.func,".",2)){let d=e.func.args[0]?.$?.type,h=e.func.args[1];if(B(h)&&Ae(d)){let g=h.token.value;if(d.trait.fields.find(v=>v.label===g))return _}}let p=u.$?.type;return p&&Ee(p)?`(${_})->data`:`(${_}).data`}else return P(u,t,n)}),l=s.join(", ");if(i.isExtern==="yo"&&i.externName){let u=i.externName;return Si.includes(u)?ca(u,s,e,n,t):u==="__yo_thread_spawn"?gp(e,t,n):u==="__yo_worker_spawn"?hp(e,t,n):de(i.return.type)?(n.emitter.emitLine(`${t}${u}(${l});`),e.$?.deferredDropExpressions&&bt(e,t,n),""):`${u}(${l})`}{let u=n;if(u.currentEvidenceParams?.size){let c=e.func.token?.value,_;if(c==="."&&F(e.func)&&E(e.func,".",2)){let p=e.func.args[1];p&&B(p)&&(c=p.token.value);let f=e.func.args[0];if(f&&B(f))_=f.token.value;else if(f&&F(f)&&E(f,".",2)){let d=f.args[0];d&&B(d)&&(_=d.token.value)}}if(c&&c!=="."){for(let p of u.currentEvidenceParams.values())if(p.fieldLabel===c||p.implicitLabel===c||p.fieldPath[p.fieldPath.length-1]===c){if(_&&_!==p.implicitLabel)continue;return $p(p.cParamName,i,s,o,e,t,u,p)}}}}if(ee(r)){let u=Fr(r);if(u)return ca(u,s,e,n,t);let c=r.specializedType??r.type,_=n;if(_.currentEvidenceParams&&r.isModuleEffectMember){let f,d=e.func.$?.env??e.$?.env;if(d)for(let h of _.currentEvidenceParams.values()){let g=Y(d,h.implicitLabel),v=g[g.length-1]?.value?.[0];if(v&&Ye(v)){let T=v,$=!0;for(let C=0;C<h.fieldPath.length-1;C++){let L=h.fieldPath[C],b=T.type.fields.findIndex(S=>S.label===L);if(b>=0&&T.fields[b]&&Ye(T.fields[b]))T=T.fields[b];else{$=!1;break}}if($){let C=h.fieldPath[h.fieldPath.length-1],L=T.type.fields.findIndex(b=>b.label===C);if(L>=0){let b=T.fields[L];if(b&&ee(b)&&b.funcId===r.funcId){f=h;break}}}}}if(f){let h=f.cParamName;return $p(h,c,s,o,e,t,_,f)}}let p=n.functions[r.funcId]?.cName;if(p){let f=r.specializedType??r.type,d=kt(f);if(d.length===0&&r.specializedType){let y=kt(r.type);y.length>0&&y.some(v=>v.fieldFunctionType.forallParameters&&v.fieldFunctionType.forallParameters.length>0)&&(d=y)}if(d.length>0){let{args:y,isHandlerInstallation:v}=zl(d,r,e,n);if(y.length>0){let T=l?`${l}, ${y.join(", ")}`:y.join(", ");return Bl(p,T,c,e,o,t,n,v)}}let h=r.isControlFunction||r.isModuleEffectMember||r.body?.$?.effectAnalysis?.hasEffects,g=!1;if(h){if(r.isControlFunction||r.isModuleEffectMember){let y=e.func?.$?.env??e.$?.env;if(y){let v=ta(y,T=>T.isImplicit===!0&&ee(T.value?.[0])&&T.value[0].funcId===r.funcId);v>=0&&v>y.functionDeclarationFrameLevel&&y.frames[v]?.isBeginBlockFrame&&(g=!0)}}else if(r.specializedType){let y=kt(r.type);if(y.length>0){let v=e.func?.$?.env??e.$?.env;if(v)for(let T of y){let $=ta(v,C=>C.isImplicit===!0&&(C.name===T.implicitLabel||C.name===T.fieldLabel));if($>=0&&$>v.functionDeclarationFrameLevel&&v.frames[$]?.isBeginBlockFrame){g=!0;break}}}}}if(de(c.return.type))return n.emitter.emitLine(`${t}${p}(${l});`),e.$?.deferredDropExpressions&&bt(e,t,n),h&&Ep(t,n,g,e),"";{let y=e.$?.variableName;if(y){let v=r.specializedType?.return.type??c.return.type,T=e.$?.type,$=T&&Ie(T),C=v&&Ie(v),L;if($&&C){let S=r.body;if(S&&E(S,"begin")){let I=S.args;if(I.length>0){let z=I[I.length-1];Yt(z)&&(S=z)}}if(S&&Yt(S)&&S.$?.asyncStateMachineStructName){let I=S.$.asyncStateMachineStructName;L=`${I}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(y,I)}else T&&D(T)&&T.resolvedConcreteType?L=U(T,n):L=U(v,n)}else L=U(v??T,n);let b=n;return b.declaredTempVars||(b.declaredTempVars=new Set),b.declaredTempVars.has(y)||(b.declaredTempVars.add(y),n.emitter.emitLine(`${t}${L} ${y} = ${p}(${l});`)),Mn(y,t,n),e.$?.deferredDropExpressions&&bt(e,t,n),h&&Ep(t,n,g,e),y}else return`// Error: Regular function call returns ${U(r.specializedType?.return.type??c.return.type,n)} but no temp variable assigned`}}}else{let u=n.externFunctions[i.id];if(u){let c=u.cName;return e.$?.deferredDropExpressions&&bt(e,t,n),`${c}(${l})`}else{let c=P(e.func,t,n);if(r&&G(r.type)){let y=kt(r.type);if(y.length>0){let{args:v,isHandlerInstallation:T}=zl(y,r,e,n);if(v.length>0){let $=l?`${l}, ${v.join(", ")}`:v.join(", ");return Bl(c,$,i,e,o,t,n,T)}}}let _=e.$?.type??i.return.type,p=U(_,n),f=i.parameters.filter(y=>!y.isCompileTimeOnly).map(y=>U(y.type,n)),d=`((${p} (*)(${f.join(", ")}))${c})`,h=n,g=c.includes("__capture.")&&!!h.inAsyncStateMachine;if(g&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),de(i.return.type)||de(_)){if(n.emitter.emitLine(`${t}${d}(${l});`),e.$?.deferredDropExpressions&&bt(e,t,n),g){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),o){for(let y of o)if(y.$?.variableName&&y.$?.type&&Ve(y.$.type)){let v=Tp(oe(y.$.variableName),n),T=Gr(v,y.$.type,n);T&&(n.emitter.emitLine(`${t} ${T};`),n.emitter.emitLine(`${t} memset(&${v}, 0, sizeof(${v}));`))}}Wn({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let y=e.$?.variableName;if(y){let v=i.return.type,T=e.$?.type,$=T&&v&&Ie(T)&&Ie(v)?v:T??v,C=n;if(C.declaredTempVars||(C.declaredTempVars=new Set),C.declaredTempVars.has(y)||(C.declaredTempVars.add(y),n.emitter.emitLine(`${t}${U($,n)} ${y} = ${d}(${l});`)),Mn(y,t,n),e.$?.deferredDropExpressions&&bt(e,t,n),g){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),o){for(let L of o)if(L.$?.variableName&&L.$?.type&&Ve(L.$.type)){let b=Tp(oe(L.$.variableName),n),S=Gr(b,L.$.type,n);S&&(n.emitter.emitLine(`${t} ${S};`),n.emitter.emitLine(`${t} memset(&${b}, 0, sizeof(${b}));`))}}Wn({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return y}else return`// Error: Function parameter call returns ${U(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&Jt(i)){let o=i,a=cn(o),s=Ae(o);{let l=a.isFn.callType,u=e.$?.runtimeArgExprsInOrder;if(u){let c=n;for(let h of u)if(h.$?.variableName&&h.$?.type){let g=c.currentClosureCaptures&&c.currentClosureCaptures.includes(h.$.variableName)&&B(h)&&h.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&Ar(h.token.value,h.$.env,c.currentClosureCaptureFrameLevel),y=P(h,t,n),v=!1;if(B(h)&&h.$.env&&h.$.variableName){let $=Y(h.$.env,h.$.variableName);$.length>0&&$[$.length-1].isCompileTimeOnly&&(v=!0)}let T=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->");if(y&&y!==h.$.variableName&&!g&&!T&&!v){let $=h.$.convertedRuntimeType||h.$.type,C=_t($,h.$.variableName,n);n.emitter.emitLine(`${t}${C} = ${y};`),Mn(h.$.variableName,t,n)}}let _=P(e.func,t,n),p=u.map(h=>{if(h.$?.variableName&&h.$?.type){if(c.currentClosureCaptures&&c.currentClosureCaptures.includes(h.$.variableName)&&B(h)&&h.$.env&&c.currentClosureCaptureFrameLevel!==void 0&&Ar(h.token.value,h.$.env,c.currentClosureCaptureFrameLevel))return P(h,t,n);{let y=Te(h.$.variableName,h.$.env),v=(c.inAsyncStateMachine||c.inEffectStateMachine)&&y.startsWith("sm->"),T=y;if(h.$?.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){st(h,t,c);let $=h.$.deferredDupExpressions[0];F($)&&$.$?.variableName&&(T=Te($.$.variableName,$.$.env))}return v?y:T}}else return P(h,t,n)}),f;if(s){let h=[`(${_}).data`,...p];f=`(${_}).vtable->call(${h.join(", ")})`}else{let h;if(D(o)){let y=o;y.resolvedConcreteType&&(h=y.resolvedConcreteType.id)}let g=h?n.implClosureCallMap.get(h):void 0;if(g){let y=kt(l);if(y.length>0){let{args:T,isHandlerInstallation:$}=zl(y,{},e,c);if(T.length>0){let C=[`&(${_})`,...p,...T];return Bl(g.functionCName,C.join(", "),l,e,u,t,c,$)}}let v=[`&(${_})`,...p];f=`${g.functionCName}(${v.join(", ")})`}else{let y=[`(${_}).data`,...p];f=`(${_}).call(${y.join(", ")})`}}let d=l.return.type;if(de(d))return n.emitter.emitLine(`${t}${f};`),e.$?.deferredDropExpressions&&bt(e,t,n),"";{let h=e.$?.variableName;return h?(n.emitter.emitLine(`${t}${U(d,n)} ${h} = ${f};`),Mn(h,t,n),e.$?.deferredDropExpressions&&bt(e,t,n),h):`// Error: Closure call returns ${U(d,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(R(r))if(pe(r.value)){let o=r.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=o.fields.map(c=>c.label),u=e.$?.variableName;if(a&&s&&l.length===a.length){if(o.isNewtype&&o.fields.length===1){let c=a[0],_=P(c,t,n),p=_;if(c.$?.deferredDupExpressions&&c.$.deferredDupExpressions.length>0){let d=n;if(c.$?.variableName&&c.$?.type){let g=Te(c.$.variableName,c.$.env);if(_!==g){let y=c.$.type,v=U(y,n);n.emitter.emitLine(`${t}${v} ${g} = ${_};`)}}st(c,t,d);let h=c.$.deferredDupExpressions[0];F(h)&&h.$?.variableName&&(p=Te(h.$.variableName,h.$.env))}let f=`((${s})(${p}))`;if(u&&e.$?.type){let d=_t(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${f};`),Mn(u,t,n),u}else return f}if(o.isReferenceSemantics){let c=n,_=a.map(d=>{let h=P(d,t,n);if(d.$?.deferredDupExpressions&&d.$.deferredDupExpressions.length>0){if(d.$?.variableName&&d.$?.type){let y=Te(d.$.variableName,d.$.env);if(h!==y){let v=d.$.type,T=U(v,n);n.emitter.emitLine(`${t}${T} ${y} = ${h};`)}}st(d,t,c);let g=d.$.deferredDupExpressions[0];if(F(g)&&g.$?.variableName)return Te(g.$.variableName,g.$.env)}return h}).join(", "),f=`${`__yo_new_${s}`}(${_})`;if(u&&e.$?.type){let d=_t(e.$.type,u,n);return n.emitter.emitLine(`${t}${d} = ${f};`),Mn(u,t,n),u}else return f}else{let c=n,_=a.map((f,d)=>{let h=P(f,t,n),g=Se(o)?`_${d}`:oe(l[d],o.isExtern==="c"),y=h;if(f.$?.deferredDupExpressions&&f.$.deferredDupExpressions.length>0){if(f.$?.variableName&&f.$?.type){let T=Te(f.$.variableName,f.$.env),$=f.$.type,C=U($,n);h!==T&&n.emitter.emitLine(`${t}${C} ${T} = ${h};`)}st(f,t,c);let v=f.$.deferredDupExpressions[0];F(v)&&v.$?.variableName&&(y=Te(v.$.variableName,v.$.env))}return`.${g} = `+y}).join(", "),p=`(${s}){ ${_} }`;if(u&&e.$?.type){let f=_t(e.$.type,u,n);return n.emitter.emitLine(`${t}${f} = ${p};`),Mn(u,t,n),u}else return p}}}else{if(Jt(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(ot(r.value)){let o=e.$?.variableName,a=e.args[0];if(a&&F(a)&&E(a,":",2)){let s=a.args[0],l=a.args[1],u=n.types[r.value.id]?.cName;if(u&&B(s)&&l){let c=n,_=s.token.value,p=Te(_,s.$?.env),d=P(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){st(l,t,c);let g=l.$.deferredDupExpressions[0];F(g)&&g.$?.variableName&&(d=Te(g.$.variableName,g.$.env))}let h=`(${u}){ .${p} = ${d} }`;if(o&&e.$?.type){let g=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${g} = ${h};`),Mn(o,t,n),o}else return h}}}else if(ge(r.value)){let o=r.value,a=e.$?.runtimeArgExprsInOrder,s=n.types[o.id]?.cName,l=e.$?.variableName;if(o.selectedVariantName&&a&&s){if(tn(o)){let f=o.selectedVariantName,d=o.variants.find(h=>h.name===f);if(d){if(!d.fields||d.fields.length===0){let h="NULL";if(l&&e.$?.type){let g=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${g} = ${h};`),Mn(l,t,n),l}else return h}else if(d.fields.length===1){let h=P(a[0],t,n);if(l&&e.$?.type){let g=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${g} = ${h};`),Mn(l,t,n),l}else return h}}}if(Pn(o)){let f=o.selectedVariantName,d=Qt(o,f,n);if(l&&e.$?.type){let h=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${h} = ${d};`),Mn(l,t,n),l}else return d}let _=o.selectedVariantName,p=o.variants.find(f=>f.name===_);if(p){let f=p.fields?.filter(y=>!de(y.type))||[],d=n,h=a.map((y,v)=>{if(p.fields){let T=p.fields[v];if(T&&!de(T.type)){let $=P(y,t,n),C=Te(T.label,y.$?.env),L=$;if(y.$?.variableName&&y.$?.type){let b=d.currentClosureCaptures&&d.currentClosureCaptures.includes(y.$.variableName)&&B(y)&&y.$.env&&d.currentClosureCaptureFrameLevel!==void 0&&Ar(y.token.value,y.$.env,d.currentClosureCaptureFrameLevel),S=(d.inAsyncStateMachine||d.inEffectStateMachine)&&$.startsWith("sm->"),I=!1;if(B(y)&&y.$.env&&y.$.variableName){let M=Y(y.$.env,y.$.variableName);M.length>0&&M[M.length-1].isCompileTimeOnly&&(I=!0)}let z=!1;if($&&$!==y.$.variableName&&!b&&!S&&!I){let M=Te(y.$.variableName,y.$.env);if($!==M){let N=_t(y.$.type,y.$.variableName,n);n.emitter.emitLine(`${t}${N} = ${$};`),z=!0,Mn(y.$.variableName,t,n)}}z&&(L=Te(y.$.variableName,y.$.env))}if(y.$?.deferredDupExpressions&&y.$.deferredDupExpressions.length>0){st(y,t,d);let b=y.$.deferredDupExpressions[0];F(b)&&b.$?.variableName&&(L=Te(b.$.variableName,b.$.env))}return`.${C} = `+L}return""}else return""}).filter(y=>y).join(", "),g=f.length>0?`(${s}){ .tag = ${Qt(o,_,n)}, .data = { .${_} = { ${h} } } }`:`(${s}){ .tag = ${Qt(o,_,n)} }`;if(l&&e.$?.type){let y=_t(e.$.type,l,n);return n.emitter.emitLine(`${t}${y} = ${g};`),Mn(l,t,n),l}else return g}}}}else if(ke(i)){let o=e.args[0];if(o&&F(o)&&(E(o,"..")||E(o,"..="))){let l=E(o,"..="),u=P(e.func,t,n),c=P(o.args[0],t,n),_=P(o.args[1],t,n),p=`Slice_${oe(U(i.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:U(i.childType,n)}),l?`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) + 1 }`:`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) }`}let a=P(e.func,t,n),s=P(o,t,n);return`${a}.data[${s}]`}else if(Ge(i)){let o=e.args[0];if(o&&F(o)&&(E(o,"..")||E(o,"..="))){let l=E(o,"..="),u=P(e.func,t,n),c=P(o.args[0],t,n),_=P(o.args[1],t,n),p=`Slice_${oe(U(i.childType,n))}`;return n.sliceStructTypes.has(p)||n.sliceStructTypes.set(p,{childType:U(i.childType,n)}),l?`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) + 1 }`:`(${p}){ .data = &${u}.data[${c}], .length = (${_}) - (${c}) }`}let a=P(e.func,t,n),s=P(o,t,n);return`${a}.data[${s}]`}else if(i&&Ee(i)&&Ge(i.childType)){let o=P(e.func,t,n),a=P(e.args[0],t,n);return`${o}.data[${a}]`}}function Ep(e,t,n,r){let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(hn(e+" ",t,r,!1,!0,!1),tr(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),Wn({emitter:i,indent:e+" ",resultCode:void 0,debugLabel:void 0});else if(n){i.emitLine(`${e} __yo_effect_escaped = 0;`);let o=t.currentFunctionType?.return.type;if(o&&!de(o)){let a=U(o,t);a!=="void"?(i.emitLine(`${e} ${a} _esc_result;`),i.emitLine(`${e} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${a}));`),i.emitLine(`${e} return _esc_result;`)):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}else{let o=t.currentFunctionType?.return.type;if(o&&!de(o)){let a=U(o,t);a!=="void"?i.emitLine(`${e} return (${a}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function $p(e,t,n,r,i,o,a,s){let l=n.join(", "),u=t.return.type,c=a.emitter,_,p=!1;if(s?.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let f=s.fieldFunctionType.return.type;p=D(f);let d=p?"void":i.$?.type?U(i.$.type,a):U(u,a),h=[],y=s.fieldFunctionType.parameters.filter(T=>!T.isCompileTimeOnly);for(let T=0;T<y.length;T++){let $=y[T].type,C=D($)&&r?.[T]?.$?.type?r[T].$.type:$,L=G(C)?Ir(C,"(*)",a):U(C,a);h.push(L)}let v=h.join(", ");_=`((${d} (*)(${v}))${e})`}else _=e;if(de(u)){if(c.emitLine(`${o}${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let f=a.currentFunctionType?.return.type;if(f&&!de(f)){let d=U(f,a);d!=="void"?c.emitLine(`${o} return (${d}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let f=i.$?.variableName;if(f){let d=s?.fieldFunctionType.forallParameters?.length&&i.$?.type?i.$.type:u,h=U(d,a);if(h==="void"||de(d)){if(c.emitLine(`${o}${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=a.currentFunctionType?.return.type;if(g&&!de(g)){let y=U(g,a);y!=="void"?c.emitLine(`${o} return (${y}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(p){if(c.emitLine(`${o}${h} ${f} = (${h}){0};`),c.emitLine(`${o}${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=a.currentFunctionType?.return.type;if(g&&!de(g)){let y=U(g,a);y!=="void"?c.emitLine(`${o} return (${y}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),Mn(f,o,a),f}if(c.emitLine(`${o}${h} ${f} = ${_}(${l});`),i.$?.deferredDropExpressions&&bt(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,i,!1,!0,!1),tr(o+" ",a,i)),a.inAsyncStateMachine)Wn({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=a.currentFunctionType?.return.type;if(g&&!de(g)){let y=U(g,a);y!=="void"?c.emitLine(`${o} return (${y}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),f}else return`${_}(${l})`}}function zl(e,t,n,r){let i=[],o=t.body?.$?.effectAnalysis,a=!1;for(let s of e){let l=`${s.implicitLabel}.${s.fieldLabel}`,u=!1;if(r.currentEvidenceParams){let c=r.currentEvidenceParams.get(l);c&&(i.push(c.cParamName),u=!0)}if(!u){if(o){if(o.effectHandlerInfos)for(let c of o.effectHandlerInfos){if(c.effectParameterName!==s.fieldLabel&&c.effectParameterName!==s.implicitLabel)continue;let _=c.handlerValue;if(_&&ee(_)){if(_.specializedFunctionCaches?.length){let f=_.specializedFunctionCaches[0].specializedFunction,d=r.functions[f.funcId]?.cName;if(d){i.push(`(void*)${d}`),u=!0,a=!0;break}}let p=r.functions[_.funcId]?.cName;if(p){i.push(p),u=!0,a=!0;break}}}if(!u&&o.handlerValue&&e.length===1){let c=o.handlerValue;if(c&&ee(c)){if(c.specializedFunctionCaches?.length){let _=c.specializedFunctionCaches[0].specializedFunction,p=r.functions[_.funcId]?.cName;p&&(i.push(`(void*)${p}`),u=!0,a=!0)}if(!u){let _=r.functions[c.funcId]?.cName;_&&(i.push(_),u=!0,a=!0)}}}}if(!u){let c=n.func.$?.env??n.$?.env;if(c){let _=Y(c,s.implicitLabel),p=$n(c,y=>y.isImplicit===!0&&G(y.type)&&G(s.fieldFunctionType)&&y.type===s.fieldFunctionType),f=_[_.length-1],d=p[p.length-1],g=(d&&d!==f?d:f??d)?.value?.[0];if(g&&Ye(g)){let y=g,v=!0;for(let T=0;T<s.fieldPath.length-1;T++){let $=s.fieldPath[T],C=y.type.fields.findIndex(L=>L.label===$);if(C>=0&&y.fields[C]&&Ye(y.fields[C]))y=y.fields[C];else{v=!1;break}}if(v){let T=s.fieldPath[s.fieldPath.length-1],$=y.type.fields.findIndex(C=>C.label===T);if($>=0){let C=y.fields[$];if(C&&ee(C)){if(C.specializedFunctionCaches?.length>0){let L=C.specializedFunctionCaches[0].specializedFunction,b=r.functions[L.funcId]?.cName;b&&(i.push(`(void*)${b}`),u=!0)}if(!u){let L=r.functions[C.funcId]?.cName;L&&(i.push(L),u=!0)}}}}}else if(g&&ee(g)){if(g.specializedFunctionCaches?.length){let y=g.specializedFunctionCaches[0].specializedFunction,v=r.functions[y.funcId]?.cName;v&&(i.push(`(void*)${v}`),u=!0)}if(!u){let y=r.functions[g.funcId]?.cName;y&&(i.push(y),u=!0)}}u&&(a=!0)}}if(!u&&r.stateMachineVariables){let c=s.fieldPath[s.fieldPath.length-1];for(let[,_]of r.stateMachineVariables)if(_.name===c&&_.kind==="outer"){i.push(`sm->__capture.${c}`),u=!0;break}}if(!u)break}}return{args:i,isHandlerInstallation:a}}function Bl(e,t,n,r,i,o,a,s=!1){let l=a.emitter,u=n.return.type;if(l.emitLine(`${o}__yo_effect_escaped = 0;`),de(u)){if(l.emitLine(`${o}${e}(${t});`),r.$?.deferredDropExpressions&&bt(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,r,!1,!0,!1),tr(o+" ",a,r)),a.inAsyncStateMachine)Wn({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let c=a.currentFunctionType?.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),c&&!de(c))if(s){let _=U(c,a);_!=="void"?(l.emitLine(`${o} ${_} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${_}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let _=U(c,a);_!=="void"?l.emitLine(`${o} return (${_}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let c=r.$?.variableName;if(c){let _=U(u,a);if(l.emitLine(`${o}${_} ${c} = ${e}(${t});`),Mn(c,o,a),r.$?.deferredDropExpressions&&bt(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(hn(o+" ",a,r,!1,!0,!1),tr(o+" ",a,r)),a.inAsyncStateMachine)Wn({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let p=a.currentFunctionType?.return.type;if(s&&p&&!de(p)){let f=U(p,a);l.emitLine(`${o} ${f} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${f}));`),l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return _esc_result;`)}else if(p&&!de(p)){let f=U(p,a);f!=="void"?l.emitLine(`${o} return (${f}){0};`):l.emitLine(`${o} return;`)}else s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),c}else return`${e}(${t})`}}function bp(e,t,n){let r=n.emitter,i=e.$?.type;if(!i)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let a=e.args[0];if(a.$?.value&&we(a.$.value)){let s=a.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(s)});`),r.emitLine(`${t}abort();`)}else{let s=P(a,t,n),l=a.$?.type;l&&pe(l)&&An(l)&&l.typeName==="str"?r.emitLine(`${t}fprintf(stderr, "%.*s\\n", (int)${s}.length, ${s}.data);`):r.emitLine(`${t}fprintf(stderr, "%s\\n", ${s});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${U(i,n)}*)NULL))`}var bh={reg:{x86_64:"r",aarch64:"r",x86:"r",arm:"r"},reg_byte:{x86_64:"q",x86:"q"},reg_abcd:{x86_64:"Q",x86:"Q"},xmm_reg:{x86_64:"x",aarch64:"w"},ymm_reg:{x86_64:"x"},imm:{x86_64:"i",aarch64:"i",x86:"i",arm:"i"},mem:{x86_64:"m",aarch64:"m",x86:"m",arm:"m"}},kh={rax:"a",eax:"a",ax:"a",al:"a",rbx:"b",ebx:"b",bx:"b",bl:"b",rcx:"c",ecx:"c",cx:"c",cl:"c",rdx:"d",edx:"d",dx:"d",dl:"d",rsi:"S",esi:"S",si:"S",rdi:"D",edi:"D",di:"D"},wh={e:"k",x:"w",l:"b",h:"h",w:"w"};function Fh(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=kh[e];if(n)return n;let r=bh[e];return r?r[t]??r.x86_64??"r":e}function Lh(e,t){let n="",r=0;for(;r<e.length;)if(e[r]==="{"){if(r+1<e.length&&e[r+1]==="{"){n+="{",r+=2;continue}let i=e.indexOf("}",r+1);if(i===-1){n+=e[r],r++;continue}let o=e.slice(r+1,i),a=o.indexOf(":"),s,l;a>=0?(s=o.slice(0,a),l=o.slice(a+1)):s=o;let u=l?wh[l]??l:void 0,c=parseInt(s,10);isNaN(c)?u?n+=`%${u}[${s}]`:n+=`%[${s}]`:u?n+=`%${u}${c}`:n+=`%${c}`,r=i+1}else e[r]==="}"&&r+1<e.length&&e[r+1]==="}"?(n+="}",r+=2):(n+=e[r],r++);return n}function Ih(e,t,n,r){let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let y,v=0;i.length===2&&i[0].$?.value&&we(i[0].$.value)&&(y=i[0].$.value.value,v=1);let T=P(i[v],t,n);return{kind:"const_val",name:y,constraint:"",cExpr:T,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let y,v=0;i.length===2&&i[0].$?.value&&we(i[0].$.value)&&(y=i[0].$.value.value,v=1);let T=P(i[v],t,n);return{kind:"sym",name:y,constraint:"i",cExpr:T,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let y=i[0];y.$?.value&&we(y.$.value)&&!(y.tag==="Atom"&&kp(y.token.value))&&(a=y.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=Ah(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let _=Fh(u,o),p=i[c];if(p.tag==="Atom"&&p.token.value==="_")return{kind:r,name:a,constraint:_,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if(p.$?.value&&R(p.$.value)){let y=p.$.value.value,v=U(y,n);return{kind:r,name:a,constraint:_,cExpr:"",cType:v,isDiscarded:!1,isVariableTarget:!1}}let f=P(p,t,n),d=U(p.$?.type,n),g=(r==="out"||r==="lateout")&&p.tag==="Atom";return{kind:r,name:a,constraint:_,cExpr:f,cType:d,isDiscarded:!1,isVariableTarget:g}}function kp(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function Ah(e,t,n){if(e.tag==="Atom"&&kp(e.token.value))return e.token.value;if(e.$?.value&&we(e.$.value))return e.$.value.value;if(E(e,"raw",1)){let r=e;if(r.args[0].$?.value&&we(r.args[0].$.value))return`raw:${r.args[0].$.value.value}`}return"r"}function xh(e,t){let n=[];if((e.func.tag==="Atom"?e.func.token.value:"clobber")==="clobber_abi"){let i=t.targetInfo.arch;if(i==="x86_64")n.push("rax","rcx","rdx","rsi","rdi","r8","r9","r10","r11","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","xmm8","xmm9","xmm10","xmm11","xmm12","xmm13","xmm14","xmm15","cc","memory");else if(i==="aarch64"){for(let o=0;o<=18;o++)n.push(`x${o}`);n.push("x30");for(let o=0;o<=31;o++)n.push(`v${o}`);n.push("cc","memory")}return n}for(let i of e.args)i.$?.value&&we(i.$.value)?n.push(i.$.value.value):i.tag==="Atom"&&n.push(i.token.value);return n}function Sh(e){let t={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(let n of e.args)if(n.tag==="Atom")switch(n.token.value){case"pure":t.pure=!0,t.isVolatile=!1;break;case"intel_syntax":t.intelSyntax=!0;break;case"noreturn":t.noreturn=!0;break;case"volatile":t.isVolatile=!0;break}return t}var Gl=0;function wp(e,t,n){let r=n.emitter,i=e.$?.type;if(!i)return"/* Error: asm() missing type information */";if(er(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${U(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let M=e.args[a];if(F(M))break;if(M.$?.value&&we(M.$.value))o.push(M.$.value.value),a++;else break}let s=o.join(`
|
|
11090
|
+
`),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let M=e.args[a];if(!F(M)){a++;continue}let N=M.func.tag==="Atom"?M.func.token.value:void 0;if(!N){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(N)?l.push(Ih(M,t,n,N)):N==="clobber"||N==="clobber_abi"?u.push(...xh(M,n)):N==="asm_options"&&(c=Sh(M)),a++}let _=new Map;for(let M=0;M<l.length;M++)l[M].name&&_.set(l[M].name,M);let p=s;for(let M=0;M<l.length;M++){let N=l[M];N.kind==="const_val"&&(N.name&&(p=p.replace(new RegExp(`\\{${N.name}(?::[^}]*)?\\}`,"g"),N.cExpr)),p=p.replace(new RegExp(`\\{${M}(?::[^}]*)?\\}`,"g"),N.cExpr))}let f=Lh(p,_),d=[],h=[],g=[];for(let M=0;M<l.length;M++){let N=l[M];if(N.isDiscarded){let O=`__asm_discard_${Gl++}`;g.push({varName:O,cType:N.cType,operandIdx:M}),r.emitLine(`${t}${N.cType} ${O};`)}else if(N.kind==="out"||N.kind==="lateout"){if(!N.isVariableTarget){if(N.cType){let O=`__asm_out_${Gl++}`;d.push({varName:O,cType:N.cType,operandIdx:M}),r.emitLine(`${t}${N.cType} ${O};`)}}}else if(N.kind==="inout"||N.kind==="inlateout"){let O=`__asm_inout_${Gl++}`;h.push({varName:O,cType:N.cType,initExpr:N.cExpr,operandIdx:M}),r.emitLine(`${t}${N.cType} ${O} = ${N.cExpr};`)}}let y=c.isVolatile?" __volatile__":"",v=f;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let T=JSON.stringify(v),$=[];for(let M=0;M<l.length;M++){let N=l[M];if(N.kind==="in"||N.kind==="const_val"||N.kind==="sym")continue;let O;N.kind==="out"||N.kind==="lateout"?O=N.kind==="lateout"?"=&":"=":O=N.kind==="inlateout"?"+&":"+";let Q=`${O}${N.constraint}`,ne=N.name?`[${N.name}] `:"",j;N.isDiscarded?j=g.find(te=>te.operandIdx===M).varName:N.isVariableTarget?j=N.cExpr:N.kind==="out"||N.kind==="lateout"?j=d.find(te=>te.operandIdx===M).varName:j=h.find(te=>te.operandIdx===M).varName,$.push(`${ne}"${Q}" (${j})`)}let C=[];for(let M=0;M<l.length;M++){let N=l[M];if(N.kind!=="in"&&N.kind!=="sym")continue;let O=N.constraint,Q=N.name?`[${N.name}] `:"";C.push(`${Q}"${O}" (${N.cExpr})`)}let L=u.map(M=>`"${M}"`),b=$.join(", "),S=C.join(", "),I=L.join(", ");if(r.emitLine(`${t}__asm__${y} (`),r.emitLine(`${t} ${T}`),r.emitLine(`${t} : ${b}`),r.emitLine(`${t} : ${S}`),r.emitLine(`${t} : ${I}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${U(i,n)}*)NULL))`;if(de(i))return"";let z=[];for(let M=0;M<l.length;M++){let N=l[M];if(!(N.isDiscarded||N.isVariableTarget)&&!(N.kind==="in"||N.kind==="const_val"||N.kind==="sym"))if(N.kind==="out"||N.kind==="lateout"){let O=d.find(Q=>Q.operandIdx===M);O&&z.push(O.varName)}else{let O=h.find(Q=>Q.operandIdx===M);O&&z.push(O.varName)}}if(z.length===1)return z[0];if(z.length>1){let M=U(i,n),N=z.map((O,Q)=>`._${Q} = ${O}`).join(", ");return`((${M}){ ${N} })`}return""}function Fp(e,t,n){if(er(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if(r.$?.value&&we(r.$.value)){let i=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(i)});`)}return""}function Lp(e,t,n){if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=P(r,t,n),a=r.$?.type,s=r.$?.value;if(B(i)){let l=i.token.value,u=n;if(u.currentEvidenceParams&&B(r)){let _=`${r.token.value}.${l}`,p=u.currentEvidenceParams.get(_);if(p)return p.cParamName}if(e.$?.value&&ee(e.$.value)){let c=e.$.value;return n.functions[c.funcId]?.cName||c.funcId}if(!e.$?.value&&(k.___dispose.includes(l)||k.___drop.includes(l)||k.___dup.includes(l))&&a){let c=null;if((pe(a)||ge(a))&&(c=a.trait),c){let _=c.fields.find(p=>p.label===l&&p.assignedValue&&ee(p.assignedValue));if(_&&ee(_.assignedValue)){let p=_.assignedValue;return n.functions[p.funcId]?.cName||p.funcId}else return`/* ERROR: Rc method ${l} not found in type module */`}else return`/* ERROR: No module found for Rc method ${l} */`}if(Ce(a)||Ye(s)){let c=e.$?.value;if(c){if(ue(c)){if(c.variableName)return Te(c.variableName,e.$?.env);if((u.inAsyncStateMachine||u.inEffectStateMachine)&&u.stateMachineVariables){for(let[,_]of u.stateMachineVariables)if(_.name===l&&_.kind==="outer")return`sm->__capture.${l}`}}else if(!Ye(c))return sn(c,n,e)}return Te(l,e.$?.env)}if(An(a)&&a.fields.length===1){let c=a.fields[0];if(c&&c.label===l)return o}if(ge(a)){let c=a;if(tn(c))return o;for(let p of c.variants)if(p.fields){for(let f of p.fields)if(f.label===l){let d=p.name;return`${o}.data.${d}.${oe(l)}`}}return`/* ERROR: field ${l} not found in enum ${c.typeName} */`}else if(R(s)&&ge(s.value)){let c=s.value,_=c.variants.find(f=>f.name===l),p=n.types[c.id]?.cName;if(_&&!_.fields&&p){let f=Qt(c,_.name,n);return`(${p}){ .tag = ${f}, .data = { } }`}}else{if(wt(a)&&l==="*")return`${o}->value`;if(Ee(a)){if(l==="*")return`(*${o})`;if(Ge(a.childType))return`${o}->${oe(l)}`;{let c=0,_=a;for(;Ee(_);)c++,_=_.childType;if(c>0&&pe(_)&&_.isReferenceSemantics&&c++,An(_)&&_.fields.length===1){let p=_.fields[0];if(p&&p.label===l)return c===1?`(*${o})`:`${"*".repeat(c)}(${o})`}return c>0?c===1?`${o}->${oe(l)}`:`${`(${"*".repeat(c-1)}${o})`}->${oe(l)}`:`${o}.${oe(l)}`}}else if(Se(a)){if(l.match(/^\d+$/))return`${o}._${l}`;{let c=a.fields.findIndex(_=>_.label===l);return`${o}._${c}`}}else return Ae(a)?`${o}.vtable->${oe(l)}`:dt(a)?`${o}->${oe(l)}`:`${o}.${oe(l)}`}}return"/* ERROR: field name must be an identifier */"}var Vh=0;function Ip(e,t,n){if(!e.$?.type)return`// Error: No type information for pointer/reference expression ${w(e)}
|
|
11091
|
+
`;let i=e.args[0];if(F(i)){let l=i.func.$?.type;if(l&&ke(l)){let u=i.args[0];if(u&&F(u)&&(E(u,"..")||E(u,"..="))){let c=E(u,"..="),_=P(i.func,t,n),p=P(u.args[0],t,n),f=P(u.args[1],t,n),d=`Slice_${oe(U(l.childType,n))}`;return n.sliceStructTypes.has(d)||n.sliceStructTypes.set(d,{childType:U(l.childType,n)}),c?`(${d}){ .data = &${_}.data[${p}], .length = (${f}) - (${p}) + 1 }`:`(${d}){ .data = &${_}.data[${p}], .length = (${f}) - (${p}) }`}}else if(l&&(Ge(l)||Ee(l)&&Ge(l.childType))){let u=Ge(l)?l:l.childType,c=i.args[0];if(c&&F(c)&&(E(c,"..")||E(c,"..="))){let _=E(c,"..="),p=P(i.func,t,n),f=P(c.args[0],t,n),d=P(c.args[1],t,n),h=`Slice_${oe(U(u.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:U(u.childType,n)}),_?`(${h}){ .data = &${p}.data[${f}], .length = (${d}) - (${f}) + 1 }`:`(${h}){ .data = &${p}.data[${f}], .length = (${d}) - (${f}) }`}}}let o=i.$?.value,a=i.$?.type;if(o!==void 0&&a){if(Ue(o)||We(o)){let l=P(i,t,n);return`(&(${U(a,n)}){${l}})`}if(we(o)&&i.$?.convertedRuntimeType)return`(&${P(i,t,n)})`}if(e.$?.isIndexTraitAddressOf&&F(i)&&i.$?.indexMethodValue){let l=i.$.indexMethodValue;if(ee(l)){let u=i.func,c=P(u,t,n);if(F(u)&&!B(u)&&!E(u,".")&&u.$?.type&&!(u.$?.variableName&&c===Te(u.$.variableName,u.$.env))){let g=U(u.$.type,n),y=`__yo_ptr_idx_tmp_${Vh++}`;n.emitter.emitLine(`${t}${g} ${y} = ${c};`),c=y}let _=i.args[0],p=_?P(_,t,n):"0",f=Fr(l);if(f&&(k.__yo_array_index.includes(f)||k.__yo_slice_index.includes(f)))return`(&((&${c})->data[${p}]))`;let d=n.functions[l.funcId]?.cName;if(d)return`${d}(&${c}, ${p})`}}return`(&${P(i,t,n)})`}function Ap(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${P(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function xp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${P(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function Sp(e,t,n){let r=e.args[0];return r?P(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function Vp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=P(r,t,n),a=P(i,t,n),s=r.$?.type;if(!s||!ke(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ke(u)){let _=u.length;if(!Ue(_))return"// Error: array element has non-constant length";let p=`i_${Math.floor(Math.random()*1e6)}`,f=n.emitter;f.emitLine(`for (size_t ${p} = 0; ${p} < ${_.value}; ${p}++) {`);let d=`(${o}).data[${a}].data[${p}]`;f.emitLine(" { // drop nested array element");let h=Gr(d,u.childType,n);return h&&f.emitLine(` ${h};`),f.emitLine(" }"),f.emitLine("}"),""}let c=Lr(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function Np(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=P(r,t,n),a=P(i,t,n),s=r.$?.type;if(!s||!ke(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ke(u)){let _=u.length;if(!Ue(_))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,f=`i_${Math.floor(Math.random()*1e6)}`,d=U(u,n),h=n.emitter;h.emitLine(`${d} ${p} = (${o}).data[${a}];`),h.emitLine(`for (size_t ${f} = 0; ${f} < ${_.value}; ${f}++) {`);let g=co(`${p}.data[${f}]`,u.childType,n);return h.emitLine(` ${p}.data[${f}] = ${g};`),h.emitLine("}"),p}let c=Un(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function Mp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=P(r,t,n);P(i,t,n);let a=r.$?.type;if(!a||!Se(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=i.$?.value;if(!Ue(s))return"// Error: __yo_drop_tuple_element requires a constant index";let l=Number(s.value);if(l<0||l>=a.fields.length)return"// Error: __yo_drop_tuple_element index out of bounds";let u=a.fields[l].type,c=D(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Se(c)){let p=`(${o})._${l}`;return Gr(p,c,n)}let _=Lr(c,n);return _?`${_}((${o})._${l})`:"// No drop function for tuple element type"}function Dp(e,t,n){let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=P(r,t,n);P(i,t,n);let a=r.$?.type;if(!a||!Se(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=i.$?.value;if(!Ue(s))return"// Error: __yo_dup_tuple_element requires a constant index";let l=Number(s.value);if(l<0||l>=a.fields.length)return"// Error: __yo_dup_tuple_element index out of bounds";let u=a.fields[l].type,c=D(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Se(c)){let p=`(${o})._${l}`;return co(p,c,n)}let _=Un(c,n);return _?`${_}((${o})._${l})`:"// No dup function for tuple element type"}function Op(e,t,n){let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type??e.$?.type;return o?co(i,o,n):i}function Rp(e,t,n){let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=P(r,t,n),o=r.$?.type??e.$?.type;return o?Gr(i,o,n):""}function Pp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${P(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function Up(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${P(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function zp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${P(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function Bp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${P(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function Gp(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_sometype_drop requires exactly 1 argument";let i=r.$?.type;if(i&&D(i)&&Ie(i)){let o=P(r,t,n);return`if (${o} != NULL) { __yo_decr_rc((void*)${o}); }`}if(i&&D(i)&&i.resolvedConcreteType){let a=i.resolvedConcreteType.trait?.fields.find(s=>s.label===k.___drop[0]);if(a&&a.assignedValue&&ee(a.assignedValue)){let s=n.functions[a.assignedValue.funcId]?.cName;if(s){let l=P(r,t,n);return`${s}(${l})`}}}return"/* __yo_sometype_drop: no-op */"}function Wp(e,t,n){let r=e.args[0];if(!r)return"// Error: __yo_sometype_dup requires exactly 1 argument";let i=r.$?.type;if(i&&D(i)&&Ie(i))return`__yo_incr_rc((void*)${P(r,t,n)})`;if(i&&D(i)&&i.resolvedConcreteType){let a=i.resolvedConcreteType.trait?.fields.find(s=>s.label===k.___dup[0]);if(a&&a.assignedValue&&ee(a.assignedValue)){let s=n.functions[a.assignedValue.funcId]?.cName;if(s){let l=P(r,t,n);return`${s}(${l})`}}}return"/* __yo_sometype_dup: no-op */"}function qp(e,t,n){if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let r=e.args[0],i=r.$?.type;if(!i)return"// Error: rc argument missing type information";let o=P(r,t,n);return mn(i)?`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}function Yp(e,t,n){let r=e.$?.runtimeArgExprsInOrder;if(r){let i=n,o=r.map(a=>{let s=P(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){st(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return Te(l.$.variableName,l.$.env)}return s}).join(", ");return`${n.currentFunctionName}(${o})`}else return`// Error: No arguments for recur call ${w(e)}
|
|
11092
|
+
`}function Hp(e,t,n){let r=e.args[0];return`sizeof(${P(r,t,n)})`}function jp(e,t,n){let r=e.$?.runtimeArgExprsInOrder,i=n.types[e.$?.type?.id??""]?.cName,o=e.$?.variableName;if(r&&i){let a=n,s=r.map((l,u)=>{let _=P(l,t,n);if(l.$?.deferredDupExpressions&&l.$.deferredDupExpressions.length>0){st(l,t,a);let p=l.$.deferredDupExpressions[0];F(p)&&p.$?.variableName&&(_=Te(p.$.variableName,p.$.env))}return`._${u} = ${_}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}else{if(e.args.length===0)return"";{let a=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${e.$?.type?.id??"none"} */`;let s=a.map((l,u)=>{let c=P(l,t,n);return`._${u} = ${c}`}).join(", ");if(o&&e.$?.type){let l=`(${i}){ ${s} }`,u=_t(e.$.type,o,n);return n.emitter.emitLine(`${t}${u} = ${l};`),o}else return`(${i}){ ${s} }`}}}function Kp(e,t,n){let i=e.args[0].$?.value;if(!i||!R(i))throw new Error("typeid codegen: expected TypeValue argument");let o=i.value,a=o.id,s=n.types[a]?.cName||U(o,n),l=`__yo_typeid_${oe(s)}`;return n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(a)||(n.typeIdStatics.set(a,l),n.emitter.emitDeclarationLine(`static const char ${l} = 0;`)),n.cIncludes.add("<stdint.h>"),`(uintptr_t)&${l}`}function Nh(e,t){if(F(e)&&E(e,V.begin)){let n=[];for(let r of e.args)if(F(r)&&E(r,"=",2)){let i=r.args[0],o=r.args[1],a=P(i,"",t),s=P(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(F(e)&&E(e,"=",2)){let n=e.args[0],r=e.args[1],i=P(n,"",t),o=P(r,"",t);return`${i} = ${o}`}return P(e,"",t)}function Wl(e,t,n){if(F(e)&&E(e,V.begin)){let r=n,i=r.pendingDeferredDrops,o=e.$?.deferredDropExpressions??[],a=new Map;for(let c of o){let _=Nn(c);_&&a.set(_,c)}r.pendingDeferredDrops=[...i??[]];let s=r.consumedVarPendingDrops,l=e.$?.consumedVariableDropExpressions??[];r.consumedVarPendingDrops=[...l,...s??[]];let u=new Set;for(let c of e.args){let _=P(c,t,n);if(_&&n.emitter.emitLine(`${t}${_};`),c.$?.env&&a.size>u.size)for(let p of c.$.env.frames)for(let f of p.variables)a.has(f.name)&&!u.has(f.name)&&(u.add(f.name),r.pendingDeferredDrops.unshift(a.get(f.name)))}if(e.$?.deferredDropExpressions)for(let c of e.$.deferredDropExpressions){let _=P(c,t,n);_&&n.emitter.emitLine(`${t}${_};`)}r.pendingDeferredDrops=i,r.consumedVarPendingDrops=s}else{let r=P(e,t,n);r&&n.emitter.emitLine(`${t}${r};`)}}function Xp(e,t,n){if(e.$?.comptimeUnrolledBodies){for(let i of e.$.comptimeUnrolledBodies)Wl(i,t,n);return""}let r=e.args;if(r.length===2){let i=r[0],o=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s;let l=n,u=l.loopBodyDropsBaselineCount;l.loopBodyDropsBaselineCount=l.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let c=P(i,t+" ",n);return n.emitter.emitLine(`${t} if (!(${c})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Wl(o,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),l.loopBodyDropsBaselineCount=u,n.currentLoopLabel=a,""}else if(r.length===3){let i=r[0],o=r[1],a=r[2],s=n.currentLoopLabel,l=n.currentContinueLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`,c=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u,n.currentContinueLabel=c;let _=n,p=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=_.pendingDeferredDrops?.length??0,n.emitter.emitLine(`${t}while (true) {`);let f=P(i,t+" ",n);n.emitter.emitLine(`${t} if (!(${f})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Wl(a,t+" ",n),n.emitter.emitLine(`${t}${c}:;`);let d=Nh(o,n);return n.emitter.emitLine(`${t} ${d};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),_.loopBodyDropsBaselineCount=p,n.currentLoopLabel=s,n.currentContinueLabel=l,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}var Mh=0;function Dh(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;D(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),lt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Oh(e,t,n){let r=e.$?.indexMethodValue;if(!r||!ee(r))return"/* Error: Index trait method value missing */";let i=e.func,o=P(i,t,n);if(F(i)&&!B(i)&&!E(i,".")&&i.$?.type&&!(i.$?.variableName&&o===Te(i.$.variableName,i.$.env))){let _=U(i.$.type,n),p=`__yo_idx_tmp_${Mh++}`;n.emitter.emitLine(`${t}${_} ${p} = ${o};`),o=p}let a=e.args[0],s=a?P(a,t,n):"0",l,u=Fr(r);if(u)if(k.__yo_array_index.includes(u)||k.__yo_slice_index.includes(u))l=`(&((&${o})->data[${s}]))`;else if((k.__yo_array_index_range.includes(u)||k.__yo_slice_index_range.includes(u))&&e.$?.indexTraitPtrType&&Ee(e.$.indexTraitPtrType))l=`(&(${U(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start })`;else if((k.__yo_array_index_range_inclusive.includes(u)||k.__yo_slice_index_range_inclusive.includes(u))&&e.$?.indexTraitPtrType&&Ee(e.$.indexTraitPtrType))l=`(&(${U(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start + 1 })`;else{let c=n.functions[r.funcId]?.cName;if(!c)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${c}(&${o}, ${s})`}else{let c=n.functions[r.funcId]?.cName;if(!c)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${c}(&${o}, ${s})`}return e.$?.isIndexTraitAddressOf?l:`(*${l})`}function Rh(e,t,n,r){let i=e.args[0];if(!i?.$?.type)return;let o=e.args.find(_=>F(_)&&E(_,V.using));if(!o)return;let a=Bt(i.$.type);if(!a?.isFuture.effects?.length)return;let s=Dh(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let _=0;_<s.length&&_<l.length;_++){let p=s[_],f=l[_];if(G(p.type)){let d=p.label,h;if(u.currentEvidenceParams){for(let g of u.currentEvidenceParams.values())if(g.fieldLabel===d){h=g.cParamName;break}}if(!h&&u.stateMachineVariables){for(let[,g]of u.stateMachineVariables)if(g.name===d&&g.kind==="outer"){h=`sm->__capture.${d}`;break}}if(!h){let g=f.$?.value;if(g&&ee(g)){let y=r.functions[g.funcId];y&&(h=y.cName)}}h||(h=P(f,n,r)),h&&c.emitLine(`${n} ${t}->__capture.${d} = (void*)${h};`)}else if(Ce(p.type)){let d=p.type;for(let h of d.fields){if(!G(h.type))continue;let g;if(u.stateMachineVariables){for(let[,y]of u.stateMachineVariables)if(y.name===h.label&&y.kind==="outer"){g=`sm->__capture.${h.label}`;break}}if(!g){let y=f.$?.value;if(y&&Ye(y)){let v=d.fields.indexOf(h),T=y.fields[v];if(T&&ee(T)){let $=r.functions[T.funcId];$&&(g=$.cName)}}}if(!g&&u.currentEvidenceParams){for(let y of u.currentEvidenceParams.values())if(y.fieldLabel===h.label){g=y.cParamName;break}}g||(g=Ph(h.label,d,u,e)),g&&c.emitLine(`${n} ${t}->__capture.${h.label} = (void*)${g};`)}}}}function Ph(e,t,n,r){let i=r.$?.env??r.func.$?.env;if(!i)return;let o=$n(i,a=>a.isImplicit===!0);for(let a=o.length-1;a>=0;a--){let s=o[a],l=s.value?.[s.value.length-1];if(l&&Ye(l)){let u=l.type.fields.findIndex(c=>c.label===e);if(u>=0){let c=l.fields[u];if(c&&ee(c)){let _=n.functions[c.funcId]?.cName;if(_)return _}}}}}function Uh(e,t,n){let r=n,i=e.args[0],o=r.continuationVariables?.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let l=P(i,t,n);if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${u};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${l};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let l=r.emitter;if(i){let u=P(i,t,n);u&&u!=="(void)0"&&l.emitLine(`${t}(void)${u};`)}if(r.effectHandlerParamDrops)for(let u of r.effectHandlerParamDrops)l.emitLine(`${t}${u};`);return hn(t,r,e,!1,!0,!0),tr(t,r,e,!0),Wn({emitter:l,indent:t,debugLabel:r.currentFunctionName}),""}if((r.isModuleEffectMemberFunction||r.currentEvidenceParams&&r.currentEvidenceParams.size>0)&&r.emitter.emitLine(`${t}__yo_effect_escaped = 1;`),!i){if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);if(hn(t,r,e,!1,!0,!0),tr(t,r,e,!0),r.currentFunctionType){let l=r.currentFunctionType.return.type;if(!de(l)){let u=r.overrideReturnTypeStr??U(l,n);if(u!=="void")return`return (${u}){0}`}}return"return"}let s=P(i,t,n);if(r.effectHandlerParamDrops)for(let l of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${l};`);if(hn(t,r,e,!1,!0,!0),tr(t,r,e,!0),(r.isModuleEffectMemberFunction||r.currentEvidenceParams&&r.currentEvidenceParams.size>0)&&r.currentFunctionType){let l=i.$?.type;if(l&&!de(l)){let c=U(l,n);r.emitter.emitLine(`${t}{ ${c} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${c})); }`)}let u=r.currentFunctionType.return.type;if(!de(u)){let c=r.overrideReturnTypeStr??U(u,n);if(c!=="void")return`return (${c}){0}`}return"return"}return`return ${s}`}function Qp(e,t,n){let r;switch(e.tag){case"FnCall":r=zh(e,t,n);break;case"Atom":r=go(e,n,t);break}return r}function zh(e,t,n){if(e.$?.macroExpansion)return P(e.$.macroExpansion,t,n);if(F(e.func)&&E(e.func,".",2)&&e.func.args[1]&&B(e.func.args[1])){let r=e.func.args[1].token.value,i=e.func.args[0],o=i?.$?.type;if(o&&D(o)&&Ie(o)){if(r===k.___drop[0]){let a=P(i,t,n);return`if (${a} != NULL) { __yo_decr_rc((void*)${a}); }`}if(r===k.___dup[0])return`__yo_incr_rc((void*)${P(i,t,n)})`}}if(n_(e))return r_(e,t,n);if(E(e,k.__yo_decr_rc))return Ap(e,t,n);if(E(e,k.__yo_incr_rc))return xp(e,t,n);if(E(e,k.__yo_rc_own))return Sp(e,t,n);if(E(e,k.__yo_drop_array_element))return Vp(e,t,n);if(E(e,k.__yo_dup_array_element))return Np(e,t,n);if(E(e,k.__yo_drop_tuple_element))return Mp(e,t,n);if(E(e,k.__yo_dup_tuple_element))return Dp(e,t,n);if(E(e,k.___dup))return Op(e,t,n);if(E(e,k.___drop))return Rp(e,t,n);if(E(e,k.__yo_dyn_drop))return Pp(e,t,n);if(E(e,k.__yo_dyn_dup))return Up(e,t,n);if(E(e,k.__yo_incr_rc_atomic))return zp(e,t,n);if(E(e,k.__yo_decr_rc_atomic))return Bp(e,t,n);if(E(e,k.__yo_iso_extract))return cp(e,t,n);if(E(e,k.__yo_iso_dispose))return _p(e,t,n);if(E(e,k.__yo_arc_dispose))return Y_(e,t,n);if(Pl(e))return pp(e,t,n);if(Rl(e))return H_(e,t,n);if(E(e,k.__yo_sometype_drop))return Gp(e,t,n);if(E(e,k.__yo_sometype_dup))return Wp(e,t,n);if(E(e,k.__yo_gc_collect))return lp(e,t,n);if(E(e,k.rc))return qp(e,t,n);if(E(e,k.panic))return bp(e,t,n);if(E(e,k.asm))return wp(e,t,n);if(E(e,k.global_asm))return Fp(e,t,n);if(E(e,V.test))return"/* test declaration skipped */";if(E(e,k.__yo_thread_set_maximum_threads))return vp(e,t,n);if(E(e,V.op_and))return W_(e,t,n);if(E(e,V.op_or))return q_(e,t,n);if(Yt(e))return e.$?.awaitAnalysis?i_(e,t,n):u_(e,t,n);if(E(e,V.dyn))return sp(e,t,n);if(En(e))return Z_(e,t,n);if(pc(e))return J_(e,t,n);if(Ua(e)){let r=e.args[0];if(!r)return"// Error: spawn requires a Future argument";let o=n.emitter,a=P(r,t,n),s=r.$?.type,l=s?U(s,n):"void*",u=e.$?.type,c=u?U(u,n):null,_=e.$?.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",p=e.$?.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return o.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),o.emitLine(`${t}${l} ${_} = ${a};`),o.emitLine(`${t}int ${p} = ${_}->state;`),o.emitLine(`${t}if (${p} == -2) {`),o.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),o.emitLine(`${t} abort();`),o.emitLine(`${t}}`),sa(r.$?.type)||(o.emitLine(`${t}if (${p} == 0 && ${_}->__yo_resume_fn) {`),Rh(e,_,t,n),o.emitLine(`${t} __yo_incr_rc((void*)${_});`),o.emitLine(`${t} ${_}->__yo_resume_fn((void*)${_});`),o.emitLine(`${t}}`)),c?`(${c}){ .__future = (void*)${_} }`:`(void*)${_}`}if(fc(e))return ep(e,t,n);if(E(e,V.return))return I_(e,t,n);if(E(e,V.escape))return Uh(e,t,n);if(E(e,k.__yo_array_fill,2))return K_(e,t,n);if(E(e,"::",2))return"";if(E(e,":",2))return rp(e,t,n);if(E(e,":=",2)){let r=up(e,t,n);if(r!==void 0)return r}else{if(E(e,"=",2))return X_(e,t,n);if(e.$?.value&&!ue(e.$?.value)&&!de(e.$.type)&&!at(e.$?.controlFlow))return sn(e.$.value,n,e);if(E(e,".",2))return Lp(e,t,n);if(E(e,V.begin))return np(e,t,n);if(E(e,V.cond))return ip(e,t,n);if(E(e,V.match))return dp(e,t,n);if(E(e,k.__yo_address_of,1))return Ip(e,t,n);if(E(e,V.tuple))return jp(e,t,n);if(E(e,V.array)){let r=j_(e,t,n);if(r!==void 0)return r}else{if(E(e,V.recur))return Yp(e,t,n);if(E(e,V.runtime,1))return P(e.args[0],t,n);if(E(e,k.sizeof,1))return Hp(e,t,n);if(E(e,k.typeid,1))return Kp(e,t,n);if(E(e,k.downcast,2))return ap(e,t,n);if(E(e,Si)){let r=e.$?.runtimeArgExprsInOrder||e.args;if(r){let i=n,o=r.map(a=>{let s=P(a,t,n);if(a.$?.deferredDupExpressions&&a.$.deferredDupExpressions.length>0){st(a,t,i);let l=a.$.deferredDupExpressions[0];if(F(l)&&l.$?.variableName)return Te(l.$.variableName,l.$.env)}return s});return ca(e.func.token.value,o,e,n,t)}}else{if(E(e,V.while))return Xp(e,t,n);if(E(e,"->",2)&&F(e.args[0])&&E(e.args[0],V.fn)){let r=e.$?.value;return ee(r)?sn(r,n):"// Error: Anonymous function missing function value"}else{if(E(e,k.consume))return op(e,t,n);if(E(e,k.comptime_expect_error)||E(e,k.comptime_assert)||E(e,k.__yo_var_print_info)||E(e,k.__yo_var_is_owning_the_rc_value)||E(e,k.__yo_var_has_other_aliases))return"";if(E(e,V.open))return mp(e,t,n);if(e.$?.indexTraitPtrType&&e.$?.indexMethodType)return Oh(e,t,n);{let r=Cp(e,t,n);if(r!==void 0)return r}}}}}if(F(e))throw new Error(`Unhandled function call: ${w(e)}`);return`// Failed to transpile ${w(e)}`}function Zp({expr:e,env:t,context:n}){ve(e,k.alignof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=or(o),s;return a===null?s=W(St(),{env:t,context:n}):s=an("Usize",a),e.$={env:t,type:St(),value:s,pathCollection:[]},e}function Jp({expr:e,env:t,context:n}){let r=E(e,V.op_and)?"and":"or",i=e.args;if(i.length===0){let u=ft(r==="and");return e.$={env:t,type:rt(),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],_=x({expr:c,env:o,context:{...n}});if(!_.$||!vn(_.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
|
|
11093
|
+
${w(c)}`});o=_.$.env;let p=_.$.value;if(ue(p)){s=!0;continue}if(We(p)){let f=p.value;if(r==="and"){if(!f){a=ft(!1);break}!s&&!l&&(a=ft(!0))}else{if(f){a=ft(!0);break}!s&&!l&&(a=ft(!1))}}else l=!0}return We(a)||(l||s)&&(l?a=void 0:a=W(rt(),{env:o,context:n})),e.$={env:o,type:rt(),value:a,pathCollection:[],isAccessingProperty:!1},e}function ef({expr:e,env:t,context:n}){ve(e,k.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});o.$?.env&&(t=o.$.env);let a=o.$?.value;if(!R(a)||!ke(a.value))throw m({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?De(a):"undefined"}`});let s=a.value,l=x({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});l.$?.env&&(t=l.$.env);let u=l.$?.type,c=l.$?.value;if(!u)throw m({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw m({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!q({type:s.childType,env:t},{type:u,env:t}))throw m({token:i.token,errorMessage:`Fill value type ${A(u)} is not compatible with array element type ${A(s.childType)}`});let _=s.length;if(ue(_)){let h=W(s,{env:t,context:n});return e.$={env:t,type:s,value:h,pathCollection:[]},e}let p;if(Ue(_)){let h=_.value;if(p=typeof h=="bigint"?Number(h):h,!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 ${De(_)}`});let f=[];if(ue(c)){let h=W(s,{env:t,context:n});return e.$={env:t,type:s,value:h,pathCollection:[]},e}for(let h=0;h<p;h++)f.push(c);let d=Qr(s,f);return e.$={env:t,type:s,value:d,pathCollection:[]},e}function tf({expr:e,env:t,context:n}){if(n.isValidatingFunctionDefinition||!n.isExecuting){let s=n.expectedType?.type??H.type;return e.$={env:t,type:s,value:de(s)?H:W(s,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!We(o.$.value))throw m({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
|
|
11094
11094
|
${w(r)}
|
|
11095
11095
|
|
|
11096
11096
|
Value:
|
|
11097
11097
|
${De(o.$?.value)}`,isAssertionError:!0});if(o.$.value.value)return e.$={env:t,type:H.type,value:H,pathCollection:[]},e;if(i){let s=x({expr:i,env:t,context:{...n}});if(s.$?.value)throw m({token:e.token,errorMessage:we(s.$.value)?s.$.value.value:De(s.$.value),isAssertionError:!0})}throw m({token:e.token,errorMessage:`Assertion failed for "comptime_assert":
|
|
11098
|
-
${w(r)}`,isAssertionError:!0})}function
|
|
11098
|
+
${w(r)}`,isAssertionError:!0})}function nf({expr:e,env:t,context:n}){if(E(e,k.__yo_comptime_bool_not)||E(e,k.__yo_comptime_bool_to_comptime_string)){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!vn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
|
|
11099
11099
|
${w(r)}`});t=r.$.env;let i;if(E(e,k.__yo_comptime_bool_not))We(r.$.value)?i=ft(!r.$.value.value):i=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_to_comptime_string))We(r.$.value)?i=Ut(r.$.value.value.toString()):i=W(zt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_comptime_bool_not" or "__yo_comptime_bool_to_comptime_string" function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else{let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!vn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
|
|
11100
11100
|
${w(r)}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$||!vn(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
|
|
11101
|
-
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(E(e,k.__yo_comptime_bool_and))We(o)&&We(a)?s=ft(o.value&&a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_or))We(o)&&We(a)?s=ft(o.value||a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_eq))We(o)&&We(a)?s=ft(o.value===a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_neq))We(o)&&We(a)?s=ft(o.value!==a.value):s=W(rt(),{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
|
|
11102
|
-
${w(r)}`})}function
|
|
11101
|
+
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(E(e,k.__yo_comptime_bool_and))We(o)&&We(a)?s=ft(o.value&&a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_or))We(o)&&We(a)?s=ft(o.value||a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_eq))We(o)&&We(a)?s=ft(o.value===a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_bool_neq))We(o)&&We(a)?s=ft(o.value!==a.value):s=W(rt(),{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 rf({expr:e,env:t,context:n}){let r=Ne(e.args[0]),i=e.args[1]?Ne(e.args[1]):void 0;try{x({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:H.type,value:H,pathCollection:[]},e}if(i){let o=x({expr:i,env:t,context:{...n}});if(o.$?.value)throw m({token:e.token,errorMessage:we(o.$.value)?o.$.value.value:De(o.$.value)})}throw m({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
|
|
11102
|
+
${w(r)}`})}function Bh(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 ho(e,t,n){if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let i of e.type.parameters)if($r(i.type,t))return;if($r(e.type.return.type,t))return;let r=Bh(e.type);try{let i=Ne(e.body),o=xe(r.env);for(let l of r.parameters){let{env:u}=fe({env:o,variable:{name:l.label,type:l.type,isCompileTimeOnly:!0,value:[W(l.type,{variableName:l.label,env:o,context:n})],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});o=u}let a={tag:"Function",type:r,body:i,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},s=$t({expr:i,env:o,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:a,evaluationEnv:o},expectedType:{type:r.return.type,env:o}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(s.$?.value!==void 0)return a.body=s,nt(o,!0),a;nt(o,!0);return}catch{return}}function of({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=x({expr:r,env:t,context:n});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!ee(o))throw m({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${De(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=ho(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 af({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_car,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11103
11103
|
${w(r)}`});if(!Tt(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
11104
11104
|
${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:
|
|
11105
|
-
${w(r)}`});if(e.$={env:i.$.env,type:o.childType,value:W(o.childType,{variableName:`__comptime_list_car_${Re(t.modulePath)}`,env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(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
|
|
11105
|
+
${w(r)}`});if(e.$={env:i.$.env,type:o.childType,value:W(o.childType,{variableName:`__comptime_list_car_${Re(t.modulePath)}`,env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(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 sf({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_cdr,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11106
11106
|
${w(r)}`});if(!Tt(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
11107
11107
|
${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:
|
|
11108
|
-
${w(r)}`});if(e.$={env:i.$.env,type:o,value:W(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(a)){let s=a.elements;if(s.length>0)e.$.value=fn(o.childType,[...s.slice(1)]);else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function
|
|
11108
|
+
${w(r)}`});if(e.$={env:i.$.env,type:o,value:W(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(a)){let s=a.elements;if(s.length>0)e.$.value=fn(o.childType,[...s.slice(1)]);else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function lf({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_cons,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
|
|
11109
11109
|
${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:
|
|
11110
11110
|
${w(r)}`});let o=x({expr:e.args[1],env:t,context:{...n}});if(!o.$)throw m({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
|
|
11111
11111
|
${w(o)}`});if(t=o.$.env,!Tt(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
|
|
11112
11112
|
${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:
|
|
11113
|
-
${w(o)}`});let s=o.$.type,l=r.$.type;if(!q({type:l,env:t},{type:s.childType,env:t}))throw m({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${A(l)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:W(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(a)){let u=[i,...a.elements];e.$.value=fn(s.childType,u)}return e}function
|
|
11113
|
+
${w(o)}`});let s=o.$.type,l=r.$.type;if(!q({type:l,env:t},{type:s.childType,env:t}))throw m({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${A(l)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:W(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(a)){let u=[i,...a.elements];e.$.value=fn(s.childType,u)}return e}function uf({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_append,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
|
|
11114
11114
|
${w(r)}`});if(t=r.$.env,!Tt(r.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" first argument, got:
|
|
11115
11115
|
${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:
|
|
11116
11116
|
${w(r)}`});let o=x({expr:e.args[1],env:t,context:{...n}});if(!o.$)throw m({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
|
|
11117
11117
|
${w(o)}`});if(t=o.$.env,!Tt(o.$.type))throw m({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
|
|
11118
11118
|
${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:
|
|
11119
|
-
${w(o)}`});let s=r.$.type,l=o.$.type;if(!q({type:s,env:t},{type:l,env:t}))throw m({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${A(l.childType)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:W(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(i)&&Sn(a)){let u=[...i.elements,...a.elements];e.$.value=fn(s.childType,u)}return e}function
|
|
11119
|
+
${w(o)}`});let s=r.$.type,l=o.$.type;if(!q({type:s,env:t},{type:l,env:t}))throw m({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${A(l.childType)}" to ComptimeList of base type "${A(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:W(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(i)&&Sn(a)){let u=[...i.elements,...a.elements];e.$.value=fn(s.childType,u)}return e}function cf({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_length,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11120
11120
|
${w(r)}`});if(!Tt(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
11121
11121
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
|
|
11122
|
-
${w(r)}`});if(e.$={env:i.$.env,type:St(),value:W(St(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(o)){let a=o.elements.length,s=
|
|
11122
|
+
${w(r)}`});if(e.$={env:i.$.env,type:St(),value:W(St(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(o)){let a=o.elements.length,s=an("Usize",a);e.$.value=s}return e}function _f({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_element_type,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11123
11123
|
${w(r)}`});if(!R(i.$?.value))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
11124
11124
|
${w(r)}`});let o=i.$.value.value;if(!Tt(o))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
11125
|
-
${A(o)}`});let a=J(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11125
|
+
${A(o)}`});let a=J(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function pf({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_list_get,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:e.args[0].token,errorMessage:"__yo_comptime_list_get: failed to evaluate list argument"});if(!Tt(r.$.type))throw m({token:e.args[0].token,errorMessage:`__yo_comptime_list_get: first argument must be a ComptimeList, got: ${A(r.$.type)}`});t=r.$.env;let i=r.$.type;if(e.$={env:t,type:i.childType,value:W(i.childType,{variableName:`__comptime_list_get_${Re(t.modulePath)}`,env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Sn(r.$.value)){let o=r.$.value,a=x({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw m({token:e.args[1].token,errorMessage:"__yo_comptime_list_get: failed to evaluate index argument"});if(Ue(a.$.value)){t=a.$.env;let s=Number(a.$.value.value);if(s<0||s>=o.elements.length)throw m({token:e.args[1].token,errorMessage:`__yo_comptime_list_get: index ${s} out of bounds for list of length ${o.elements.length}`});let l=o.elements[s];e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1}}}return e}function is(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":{let t=ar();return{min:0n,max:(1n<<BigInt(t))-1n}}case"isize":{let t=ar();return{min:-(1n<<BigInt(t-1)),max:(1n<<BigInt(t-1))-1n}}case"comptime_int":return{min:-1/0,max:1/0};case"f32":case"f64":return;default:return}}function ff(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 yr(e)||gr(e)||gt(e)||Mt(e)||ir(e)||e.isExtern==="c"&&D(e)}function Gh(e){return e.type.variants.find(r=>r.name===e.variantName)?.discriminant}function Wh(e){if(e&&Ue(e))return e.value}function qh(e){return Ln(e)||Ca(e)||Ue(e)}function rs(e,t,n){let r=is(t);if(r){let i=e,o=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),c=typeof l=="bigint"?l:BigInt(Math.floor(l));return u<c}return s<l},a=(s,l)=>{if(typeof s=="bigint"||typeof l=="bigint"){let u=typeof s=="bigint"?s:BigInt(Math.floor(s)),c=typeof l=="bigint"?l:BigInt(Math.floor(l));return u>c}return s>l};if(o(i,r.min)||a(i,r.max))throw m({token:n,errorMessage:`Value ${e} is out of range for type ${A(t)} (${r.min} to ${r.max})`})}if(gt(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return Qn(i)}if(Mt(t)){let i=typeof e=="bigint"?Number(e):e;return ba(i)}if(gr(t)){let i=ff(t);if(i){let o=typeof e=="bigint"?Number(e):e;return an(i,o)}}if(yr(t)){let i=ff(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return an(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return an(i,a)}}throw m({token:n,errorMessage:`Cannot create compile-time value for type ${A(t)}`})}function df({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!_a(e))return;let o=x({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${w(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(ge(l)&&Lt(s)){let c=Gh(s);if(c===void 0)throw m({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(lr(e,a)){let _=rs(c,e,n.token);return n.$={env:a,type:e,value:_,pathCollection:[]},{expr:n,env:a}}}if(!_a(l)&&!gt(l)&&!Mt(l)&&!ge(l))throw m({token:t.token,errorMessage:`Cannot convert ${A(l)} to ${A(e)}. Expected a numeric type.`});let u=Wh(s);if(u!==void 0&&lr(e,a)){let c=rs(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((gt(e)||Mt(e))&&u===void 0)throw m({token:t.token,errorMessage:`Cannot convert runtime value to ${A(e)}. Only compile-time values can be converted to ${A(e)}.`});if((gt(l)||Mt(l))&&lr(e,a))if(u!==void 0){let c=rs(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:W(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(ir(e)||!qh(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:k.__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 xa(n,c),{expr:n,env:a}}if(u!==void 0){let c=rs(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 jt(e){return e&&(Ln(e)||Ca(e)||Ue(e))?e.value:null}function li(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Qn(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return ba(a)}if(ir(t))return W(t,{env:n,context:r});let i=Yh(t),o=jh(e,t);return an(i,o)}function Yh(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=is(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 _=typeof u=="bigint"?u:BigInt(Math.floor(u)),p=typeof c=="bigint"?c:BigInt(Math.floor(c));return _<p}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let _=typeof u=="bigint"?u:BigInt(Math.floor(u)),p=typeof c=="bigint"?c:BigInt(Math.floor(c));return _>p}return u>c};if(s(e,a.min)||l(e,a.max))throw m({token:o,errorMessage:`Integer overflow in compile-time evaluation
|
|
11126
11126
|
${r} ${n==="multiply"?"*":n==="add"?"+":"-"} ${i} = ${e}
|
|
11127
|
-
Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function
|
|
11128
|
-
${w(g)}`});t=g.$.env;let y;if(s==="neg")if(Ue(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}`});y=
|
|
11127
|
+
Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function Hh(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 ar();default:return null}}function jh(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=is(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=jt(e),s=jt(t);return a===null||s===null?W(n,{env:i,context:o}):li(r(a,s),n,i,o)??W(n,{env:i,context:o})}function vo(e,t,n,r,i){let o=jt(e),a=jt(t);if(o===null||a===null)return W(rt(),{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 ft(n(s,l))}return ft(n(o,a))}function Kh(e,t,n,r,i){let o=jt(e);return o===null?W(t,{env:r,context:i}):li(n(o),t,r,i)??W(t,{env:r,context:i})}function mf({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 Yi();case"u16":return Hi();case"i16":return ji();case"u32":return Ki();case"i32":return Jr();case"u64":return Xi();case"i64":return Qi();case"usize":return St();case"isize":return Wi();case"f32":return Zi();case"f64":return ei();case"int":case"comptime_int":return vr();case"float":case"comptime_float":return Gi();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let g=x({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:
|
|
11128
|
+
${w(g)}`});t=g.$.env;let y;if(s==="neg")if(Ue(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}`});y=Kh(g.$.value,u,v=>-v,t,n)}else y=W(u,{env:t,context:n});else if(s==="bit_not")if(Ue(g.$.value)||Ln(g.$.value)){let v=jt(g.$.value);if(v!==null){let T=typeof v=="bigint"?v:BigInt(Math.floor(v)),$=Hh(u),C;if($!==null){let b=(1n<<BigInt($))-1n;if(C=T^b,Eu(u)){let S=1n<<BigInt($-1);C>=S&&(C=C-(1n<<BigInt($)))}}else C=~T;y=li(C,u,t,n)??W(u,{env:t,context:n})}else y=W(u,{env:t,context:n})}else y=W(u,{env:t,context:n});else if(s==="to_comptime_string")if(Ue(g.$.value)){let v=jt(g.$.value);v!==null?y=Ut(v.toString()):y=W(zt(),{env:t,context:n})}else y=W(zt(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?zt():u,value:y,pathCollection:[]},e}let c=x({expr:e.args[0],env:t,context:{...n}});if(!c.$||!c.$.value)throw m({token:c.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
|
|
11129
11129
|
${w(c)}`});t=c.$.env;let _=x({expr:e.args[1],env:t,context:{...n}});if(!_.$||!_.$.value)throw m({token:_.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
|
|
11130
|
-
${w(_)}`});t=_.$.env;let p=c.$.value,f=_.$.value,d,h;switch(s){case"add":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"||typeof y=="bigint"?(typeof g=="bigint"?g:BigInt(g))+(typeof y=="bigint"?y:BigInt(y)):g+y;
|
|
11130
|
+
${w(_)}`});t=_.$.env;let p=c.$.value,f=_.$.value,d,h;switch(s){case"add":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"||typeof y=="bigint"?(typeof g=="bigint"?g:BigInt(g))+(typeof y=="bigint"?y:BigInt(y)):g+y;ql(v,u,"add",g,y,e.token)}d=pa(p,f,u,(v,T)=>{if(typeof v=="bigint"||typeof T=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof T=="bigint"?T:BigInt(T);return $+C}return v+T},t,n),h=u;break}case"sub":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"||typeof y=="bigint"?(typeof g=="bigint"?g:BigInt(g))-(typeof y=="bigint"?y:BigInt(y)):g-y;ql(v,u,"subtract",g,y,e.token)}d=pa(p,f,u,(v,T)=>{if(typeof v=="bigint"||typeof T=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof T=="bigint"?T:BigInt(T);return $-C}return v-T},t,n),h=u;break}case"mul":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"||typeof y=="bigint"?(typeof g=="bigint"?g:BigInt(g))*(typeof y=="bigint"?y:BigInt(y)):g*y;ql(v,u,"multiply",g,y,e.token)}d=pa(p,f,u,(v,T)=>{if(typeof v=="bigint"||typeof T=="bigint"){let $=typeof v=="bigint"?v:BigInt(v),C=typeof T=="bigint"?T:BigInt(T);return $*C}return v*T},t,n),h=u;break}case"div":{let g=jt(f);if(g===0||g===0n)throw m({token:_.token,errorMessage:`Division by zero in "${r}" operation`});d=pa(p,f,u,(y,v)=>{if(typeof y=="bigint"||typeof v=="bigint"){let T=typeof y=="bigint"?y:BigInt(y),$=typeof v=="bigint"?v:BigInt(v);return T/$}return yr(u)||u.tag==="comptime_int"?Math.trunc(y/v):y/v},t,n),h=u;break}case"mod":{if(gr(u))throw m({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let g=jt(f);if(g===0||g===0n)throw m({token:_.token,errorMessage:`Modulo by zero in "${r}" operation`});d=pa(p,f,u,(y,v)=>{if(typeof y=="bigint"||typeof v=="bigint"){let T=typeof y=="bigint"?y:BigInt(y),$=typeof v=="bigint"?v:BigInt(v);return T%$}return y%v},t,n),h=u;break}case"eq":d=vo(p,f,(g,y)=>g===y,t,n),h=rt();break;case"neq":d=vo(p,f,(g,y)=>g!==y,t,n),h=rt();break;case"lt":d=vo(p,f,(g,y)=>g<y,t,n),h=rt();break;case"lte":d=vo(p,f,(g,y)=>g<=y,t,n),h=rt();break;case"gt":d=vo(p,f,(g,y)=>g>y,t,n),h=rt();break;case"gte":d=vo(p,f,(g,y)=>g>=y,t,n),h=rt();break;case"bit_and":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),T=typeof y=="bigint"?y:BigInt(Math.floor(y));d=li(v&T,u,t,n)??W(u,{env:t,context:n})}else d=W(u,{env:t,context:n});h=u;break}case"bit_or":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),T=typeof y=="bigint"?y:BigInt(Math.floor(y));d=li(v|T,u,t,n)??W(u,{env:t,context:n})}else d=W(u,{env:t,context:n});h=u;break}case"bit_xor":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),T=typeof y=="bigint"?y:BigInt(Math.floor(y));d=li(v^T,u,t,n)??W(u,{env:t,context:n})}else d=W(u,{env:t,context:n});h=u;break}case"shl":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),T=typeof y=="bigint"?Number(y):Math.floor(y);d=li(v<<BigInt(T),u,t,n)??W(u,{env:t,context:n})}else d=W(u,{env:t,context:n});h=u;break}case"shr":{let g=jt(p),y=jt(f);if(g!==null&&y!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),T=typeof y=="bigint"?Number(y):Math.floor(y);d=li(v>>BigInt(T),u,t,n)??W(u,{env:t,context:n})}else d=W(u,{env:t,context:n});h=u;break}default:throw m({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:h,value:d,pathCollection:[]},e}function yf({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:'Expected at least 1 argument for "comptime_print", got 0'});let r=[];for(let i of e.args){let o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${w(i)}`});t=o.$.env,we(o.$.value)?r.push(o.$.value.value):r.push(De(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function gf({expr:e,env:t,context:n}){if(E(e,k.__yo_comptime_string_length)||E(e,k.__yo_comptime_string_to_upper)||E(e,k.__yo_comptime_string_to_lower)){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ht(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
|
|
11131
11131
|
${w(r)}`});t=r.$.env;let i;if(E(e,k.__yo_comptime_string_length))we(r.$.value)?i=Qn(BigInt(r.$.value.value.length)):i=W(vr(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_to_upper))we(r.$.value)?i=Ut(r.$.value.value.toUpperCase()):i=W(zt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_to_lower))we(r.$.value)?i=Ut(r.$.value.value.toLowerCase()):i=W(zt(),{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(E(e,k.__yo_comptime_string_slice)){if(e.args.length<2||e.args.length>3)throw m({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ht(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" string argument, got:
|
|
11132
11132
|
${w(r)}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$||!gt(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" start argument, got:
|
|
11133
11133
|
${w(i)}`});t=i.$.env;let o;if(e.args.length===3){if(o=x({expr:e.args[2],env:t,context:{...n}}),!o.$||!gt(o.$.type)||!o.$.value)throw m({token:o.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" end argument, got:
|
|
11134
11134
|
${w(o)}`});t=o.$.env}let a;if(we(r.$.value)&&Ln(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&&Ln(o.$.value)){let _=o.$.value.value;c=typeof _=="bigint"?Number(_):_}a=Ut(s.slice(u,c))}else a=W(zt(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ht(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
|
|
11135
11135
|
${w(r)}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$||!ht(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" second argument, got:
|
|
11136
|
-
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(E(e,k.__yo_comptime_string_concat))we(o)&&we(a)?s=Ut(o.value+a.value):s=W(zt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_eq))we(o)&&we(a)?s=ft(o.value===a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_neq))we(o)&&we(a)?s=ft(o.value!==a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_lt))we(o)&&we(a)?s=ft(o.value<a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_lte))we(o)&&we(a)?s=ft(o.value<=a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_gt))we(o)&&we(a)?s=ft(o.value>a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_gte))we(o)&&we(a)?s=ft(o.value>=a.value):s=W(rt(),{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 Mi(e){return typeof e=="bigint"?Number(e):e}function as(e,t){let n=e.fields[0],r=e.fields[1];if(!n||!r||!Ue(n)||!Ue(r))return;let i=Mi(n.value),o=Mi(r.value);return t&&(o+=1),{start:i,end:o}}function gf({expr:e,env:t,context:n,isSlice:r}){let i=e.args[0],o=e.args[1],a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime index"});t=a.$.env;let s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate index for comptime index"});t=s.$.env;let l=a.$.value;if(r&&l&&mi(l)){let _=l,p=_.type.childType;if(s.$.value&&Ue(s.$.value)){let f=Mi(s.$.value.value),d=_.endIndex-_.startIndex;if(f<0||f>=d)throw m({token:o.token,errorMessage:`Slice index out of bounds: ${f}. Expected index in range [0, ${d-1}].`});let h=_.startIndex+f,g=_.sourceArray[0],y=g.elements[h];return e.$={env:t,type:p,value:y,pathCollection:[],comptimeRef:{kind:"array",arrayValue:g,index:h}},e}return e.$={env:t,type:p,value:W(p,{env:t,context:n}),pathCollection:[]},e}if(!r&&l&&Fn(l)){let _=l,p=_.type.childType;if(s.$.value&&Ue(s.$.value)){let f=Mi(s.$.value.value);if(f<0||f>=_.elements.length)throw m({token:o.token,errorMessage:`Array index out of bounds: ${f}. Expected index in range [0, ${_.elements.length-1}].`});let d=_.elements[f];return e.$={env:t,type:p,value:d,pathCollection:[],comptimeRef:{kind:"array",arrayValue:_,index:f}},e}return e.$={env:t,type:p,value:W(p,{env:t,context:n}),pathCollection:[]},e}let u=a.$.type,c=Ef(u);return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Ef(e){if(Ee(e)){let t=e.childType;if(ke(t))return It(t.childType);if(Ge(t))return It(t.childType);if(Tt(t))return It(t.childType)}return ke(e)?It(e.childType):Ge(e)?It(e.childType):Tt(e)?It(e.childType):e}function Kh({expr:e,env:t,context:n}){let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate self for comptime list index"});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate index for comptime list index"});t=a.$.env;let s=o.$.value,l;if(Sn(s)?l=s:s&&Yn(s)&&Sn(s.targetValue[0])&&(l=s.targetValue[0]),l){let _=l.type.childType;if(a.$.value&&Ue(a.$.value)){let p=Mi(a.$.value.value);if(p<0||p>=l.elements.length)throw m({token:i.token,errorMessage:`ComptimeList index out of bounds: ${p}. Expected index in range [0, ${l.elements.length-1}].`});let f=l.elements[p];return e.$={env:t,type:_,value:f,pathCollection:[],comptimeRef:{kind:"comptime_list",listValue:l,index:p}},e}return e.$={env:t,type:_,value:W(_,{env:t,context:n}),pathCollection:[]},e}let u=o.$.type,c=Ef(u);return e.$={env:t,type:c,value:W(c,{env:t,context:n}),pathCollection:[]},e}function hf({expr:e,env:t,context:n,isInclusive:r}){let i=e.args[0],o=e.args[1],a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime list range index"});t=a.$.env;let s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate range for comptime list range index"});t=s.$.env;let l=a.$.value,u=s.$.value;if(!u||ue(u)||!Pt(u)){let g=a.$.type,y=vf(g);return e.$={env:t,type:y,value:W(y,{env:t,context:n}),pathCollection:[]},e}let c=as(u,r);if(!c)throw m({token:o.token,errorMessage:"Expected numeric start/end in Range for comptime list range index"});let{start:_,end:p}=c,f;if(Sn(l)?f=l:l&&Yn(l)&&Sn(l.targetValue[0])&&(f=l.targetValue[0]),f){let g=f.type.childType,y=Mr(g);if(_<0||_>f.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range start out of bounds: ${_}. Expected in range [0, ${f.elements.length}].`});if(p<_||p>f.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range end out of bounds: ${p}. Expected in range [${_}, ${f.elements.length}].`});let v=f.elements.slice(_,p),T=fn(g,v);return e.$={env:t,type:y,value:T,pathCollection:[]},e}let d=a.$.type,h=vf(d);return e.$={env:t,type:h,value:W(h,{env:t,context:n}),pathCollection:[]},e}function vf(e){if(Ee(e)){let t=e.childType;if(Tt(t))return It(t)}return Tt(e)?It(e):e}function os({expr:e,env:t,context:n,isSlice:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime range index"});t=s.$.env;let l=x({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate range index for comptime index"});t=l.$.env;let u=s.$.value,c=l.$.value;if(!c||ue(c)||!Pt(c)){let g=s.$.type,y=Tf(g);return e.$={env:t,type:y,value:void 0,pathCollection:[]},e}let _=as(c,i);if(!_)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime range index"});let{start:p,end:f}=_;if(!r&&u&&Fn(u)){let g=u,y=g.type.childType,v=Pr(y);if(p<0||p>g.elements.length)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${p}. Expected index in range [0, ${g.elements.length}].`});if(f<p||f>g.elements.length)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${f}. Expected index in range [${p}, ${g.elements.length}].`});let T=Bi(v,[g],p,f);return e.$={env:t,type:v,value:T,pathCollection:[]},e}if(r&&u&&mi(u)){let g=u,y=g.type.childType,v=Pr(y),T=g.endIndex-g.startIndex;if(p<0||p>T)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${p}. Expected index in range [0, ${T}].`});if(f<p||f>T)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${f}. Expected index in range [${p}, ${T}].`});let $=g.startIndex+p,C=g.startIndex+f,L=Bi(v,g.sourceArray,$,C);return e.$={env:t,type:v,value:L,pathCollection:[]},e}let d=s.$.type,h=Tf(d);return e.$={env:t,type:h,value:void 0,pathCollection:[]},e}function Tf(e){if(Ee(e)){let t=e.childType;if(ke(t)){let n=t.childType;return It(Pr(n))}if(Ge(t))return e}if(ke(e)){let t=e.childType;return It(Pr(t))}return Ge(e)?It(e):e}function ql({expr:e,env:t,context:n,isRange:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime string index"});t=s.$.env;let l=x({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate index for comptime string index"});t=l.$.env;let u=s.$.value,c=s.$.type;if(!u||!we(u))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let _=u.value;if(!r){let g=l.$.value;if(!g||ue(g)||!Ln(g))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let y=Mi(g.value);if(y<0||y>=_.length)throw m({token:a.token,errorMessage:`String index out of bounds: ${y}. Expected index in range [0, ${_.length-1}].`});return e.$={env:t,type:c,value:Ut(_[y]),pathCollection:[]},e}let p=l.$.value;if(!p||ue(p)||!Pt(p))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let f=as(p,i);if(!f)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:d,end:h}=f;if(d<0||d>_.length)throw m({token:a.token,errorMessage:`String slice start index out of bounds: ${d}. Expected index in range [0, ${_.length}].`});if(h<d||h>_.length)throw m({token:a.token,errorMessage:`String slice end index out of bounds: ${h}. Expected index in range [${d}, ${_.length}].`});return e.$={env:t,type:c,value:Ut(_.slice(d,h)),pathCollection:[]},e}function $f({expr:e,env:t,context:n}){if(E(e,k.__yo_comptime_array_index))return gf({expr:e,env:t,context:n,isSlice:!1});if(E(e,k.__yo_comptime_slice_index))return gf({expr:e,env:t,context:n,isSlice:!0});if(E(e,k.__yo_comptime_list_index))return Kh({expr:e,env:t,context:n});if(E(e,k.__yo_comptime_list_index_range))return hf({expr:e,env:t,context:n,isInclusive:!1});if(E(e,k.__yo_comptime_list_index_range_inclusive))return hf({expr:e,env:t,context:n,isInclusive:!0});if(E(e,k.__yo_comptime_array_index_range))return os({expr:e,env:t,context:n,isSlice:!1,isInclusive:!1});if(E(e,k.__yo_comptime_array_index_range_inclusive))return os({expr:e,env:t,context:n,isSlice:!1,isInclusive:!0});if(E(e,k.__yo_comptime_slice_index_range))return os({expr:e,env:t,context:n,isSlice:!0,isInclusive:!1});if(E(e,k.__yo_comptime_slice_index_range_inclusive))return os({expr:e,env:t,context:n,isSlice:!0,isInclusive:!0});if(E(e,k.__yo_comptime_string_index))return ql({expr:e,env:t,context:n,isRange:!1,isInclusive:!1});if(E(e,k.__yo_comptime_string_index_range))return ql({expr:e,env:t,context:n,isRange:!0,isInclusive:!1});if(E(e,k.__yo_comptime_string_index_range_inclusive))return ql({expr:e,env:t,context:n,isRange:!0,isInclusive:!0});throw m({token:e.token,errorMessage:`Unexpected comptime index builtin: ${w(e)}`})}function Cf({strValue:e,argValue:t,token:n,isRange:r,isInclusive:i}){if(ue(t))return Ut("");if(!r){if(!Ln(t))throw m({token:n,errorMessage:"Expected comptime_int index for comptime string index"});let l=Mi(t.value);if(l<0||l>=e.length)throw m({token:n,errorMessage:`String index out of bounds: ${l}. Expected index in range [0, ${e.length-1}].`});return Ut(e[l])}if(!Pt(t))throw m({token:n,errorMessage:"Expected comptime Range value for comptime string range index"});let o=as(t,i);if(!o)throw m({token:n,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:a,end:s}=o;if(a<0||a>e.length)throw m({token:n,errorMessage:`String slice start index out of bounds: ${a}. Expected index in range [0, ${e.length}].`});if(s<a||s>e.length)throw m({token:n,errorMessage:`String slice end index out of bounds: ${s}. Expected index in range [${a}, ${e.length}].`});return Ut(e.slice(a,s))}function bf({expr:e,env:t,context:n}){ve(e,k.consume,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=In(i,t),e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Hr({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:W(t.return.type,{variableName:"ctfe_analysis_result_"+Re(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map(T=>T.value),...r.args.map(T=>T.value),...r.variadicArgs.map(T=>T.value)];if(s.some(T=>!T))throw m({token:e?.token??se,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=Xe(u),_=n.funcId,p=n.calledComptimeFunctionCaches,f=c?p.find(T=>T.argValues.length===l.length&&T.argValues.every(($,C)=>{let L=l[C];return R($)&&R(L)?D($.value)&&D(L.value)||me($.value)||me(L.value)?$.value.id===L.value.id:D($.value)&&!D(L.value)?!1:q({type:$.value,env:T.env},{type:L.value,env:i},!0):Ot({value:$,env:T.env},{value:L,env:i})})):void 0;if(f)return{callerEnv:i,calleeEnv:o,value:f.value};let d=n.body,h={funcId:_,argValues:l,value:W(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:Ne(d)};n.calledComptimeFunctionCaches.push(h);let g=n.calledComptimeFunctionCaches.length-1,y;try{y=$t({expr:h.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(T){throw n.calledComptimeFunctionCaches.splice(g,1),T}if(!y.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=y.$.value;if(!v)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=y.$.env,R(v)){let T=v.value;!T.typeName&&n.funcName&&(T.typeName=n.funcName+`(${l.map($=>De($)).join(", ")})`),(pe(T)||ge(T)||ot(T)||Ce(T)||Le(T))&&(T.functionValue||(T.functionValue=n))}return c?n.calledComptimeFunctionCaches[g]={funcId:_,argValues:l,value:v,env:y.$.env,body:y}:n.calledComptimeFunctionCaches.splice(g,1),{value:v,callerEnv:i,calleeEnv:o,comptimeRef:y.$.comptimeRef}}function Yl(e,t,n){let i=Y(t,"Option").find(f=>f.value?.[0]&&ee(f.value[0])&&G(f.type));if(!i||!i.value?.[0]||!ee(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=J(e),u=xe(a.env),{env:c}=fe({env:u,variable:{name:s.label,token:se,type:l.type,isCompileTimeOnly:!0,initializedAtToken:se,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:p}=Hr({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:tt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(_))throw new Error("Option type constructor did not return a type value");return{optionType:_.value,env:p}}function kf({expr:e,env:t,context:n}){ve(e,[k.__yo_decr_rc[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_decr_rc[0]}":
|
|
11137
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11138
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11139
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11140
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11141
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function
|
|
11142
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11143
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11144
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11145
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11146
|
-
${w(r)}`});t=i.$.env;let o=i.$.type;if(!xt(o))throw m({token:r.token,errorMessage:`${k.__yo_iso_extract[0]} expects an Iso type, but got: ${A(o)}`});let a=o.childType,{optionType:s,env:l}=
|
|
11147
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11148
|
-
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11136
|
+
${w(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(E(e,k.__yo_comptime_string_concat))we(o)&&we(a)?s=Ut(o.value+a.value):s=W(zt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_eq))we(o)&&we(a)?s=ft(o.value===a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_neq))we(o)&&we(a)?s=ft(o.value!==a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_lt))we(o)&&we(a)?s=ft(o.value<a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_lte))we(o)&&we(a)?s=ft(o.value<=a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_gt))we(o)&&we(a)?s=ft(o.value>a.value):s=W(rt(),{env:t,context:n});else if(E(e,k.__yo_comptime_string_gte))we(o)&&we(a)?s=ft(o.value>=a.value):s=W(rt(),{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 Mi(e){return typeof e=="bigint"?Number(e):e}function as(e,t){let n=e.fields[0],r=e.fields[1];if(!n||!r||!Ue(n)||!Ue(r))return;let i=Mi(n.value),o=Mi(r.value);return t&&(o+=1),{start:i,end:o}}function hf({expr:e,env:t,context:n,isSlice:r}){let i=e.args[0],o=e.args[1],a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime index"});t=a.$.env;let s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate index for comptime index"});t=s.$.env;let l=a.$.value;if(r&&l&&mi(l)){let _=l,p=_.type.childType;if(s.$.value&&Ue(s.$.value)){let f=Mi(s.$.value.value),d=_.endIndex-_.startIndex;if(f<0||f>=d)throw m({token:o.token,errorMessage:`Slice index out of bounds: ${f}. Expected index in range [0, ${d-1}].`});let h=_.startIndex+f,g=_.sourceArray[0],y=g.elements[h];return e.$={env:t,type:p,value:y,pathCollection:[],comptimeRef:{kind:"array",arrayValue:g,index:h}},e}return e.$={env:t,type:p,value:W(p,{env:t,context:n}),pathCollection:[]},e}if(!r&&l&&Fn(l)){let _=l,p=_.type.childType;if(s.$.value&&Ue(s.$.value)){let f=Mi(s.$.value.value);if(f<0||f>=_.elements.length)throw m({token:o.token,errorMessage:`Array index out of bounds: ${f}. Expected index in range [0, ${_.elements.length-1}].`});let d=_.elements[f];return e.$={env:t,type:p,value:d,pathCollection:[],comptimeRef:{kind:"array",arrayValue:_,index:f}},e}return e.$={env:t,type:p,value:W(p,{env:t,context:n}),pathCollection:[]},e}let u=a.$.type,c=$f(u);return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function $f(e){if(Ee(e)){let t=e.childType;if(ke(t))return It(t.childType);if(Ge(t))return It(t.childType);if(Tt(t))return It(t.childType)}return ke(e)?It(e.childType):Ge(e)?It(e.childType):Tt(e)?It(e.childType):e}function Xh({expr:e,env:t,context:n}){let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate self for comptime list index"});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate index for comptime list index"});t=a.$.env;let s=o.$.value,l;if(Sn(s)?l=s:s&&Yn(s)&&Sn(s.targetValue[0])&&(l=s.targetValue[0]),l){let _=l.type.childType;if(a.$.value&&Ue(a.$.value)){let p=Mi(a.$.value.value);if(p<0||p>=l.elements.length)throw m({token:i.token,errorMessage:`ComptimeList index out of bounds: ${p}. Expected index in range [0, ${l.elements.length-1}].`});let f=l.elements[p];return e.$={env:t,type:_,value:f,pathCollection:[],comptimeRef:{kind:"comptime_list",listValue:l,index:p}},e}return e.$={env:t,type:_,value:W(_,{env:t,context:n}),pathCollection:[]},e}let u=o.$.type,c=$f(u);return e.$={env:t,type:c,value:W(c,{env:t,context:n}),pathCollection:[]},e}function vf({expr:e,env:t,context:n,isInclusive:r}){let i=e.args[0],o=e.args[1],a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime list range index"});t=a.$.env;let s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate range for comptime list range index"});t=s.$.env;let l=a.$.value,u=s.$.value;if(!u||ue(u)||!Pt(u)){let g=a.$.type,y=Tf(g);return e.$={env:t,type:y,value:W(y,{env:t,context:n}),pathCollection:[]},e}let c=as(u,r);if(!c)throw m({token:o.token,errorMessage:"Expected numeric start/end in Range for comptime list range index"});let{start:_,end:p}=c,f;if(Sn(l)?f=l:l&&Yn(l)&&Sn(l.targetValue[0])&&(f=l.targetValue[0]),f){let g=f.type.childType,y=Mr(g);if(_<0||_>f.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range start out of bounds: ${_}. Expected in range [0, ${f.elements.length}].`});if(p<_||p>f.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range end out of bounds: ${p}. Expected in range [${_}, ${f.elements.length}].`});let v=f.elements.slice(_,p),T=fn(g,v);return e.$={env:t,type:y,value:T,pathCollection:[]},e}let d=a.$.type,h=Tf(d);return e.$={env:t,type:h,value:W(h,{env:t,context:n}),pathCollection:[]},e}function Tf(e){if(Ee(e)){let t=e.childType;if(Tt(t))return It(t)}return Tt(e)?It(e):e}function os({expr:e,env:t,context:n,isSlice:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime range index"});t=s.$.env;let l=x({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate range index for comptime index"});t=l.$.env;let u=s.$.value,c=l.$.value;if(!c||ue(c)||!Pt(c)){let g=s.$.type,y=Ef(g);return e.$={env:t,type:y,value:void 0,pathCollection:[]},e}let _=as(c,i);if(!_)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime range index"});let{start:p,end:f}=_;if(!r&&u&&Fn(u)){let g=u,y=g.type.childType,v=Pr(y);if(p<0||p>g.elements.length)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${p}. Expected index in range [0, ${g.elements.length}].`});if(f<p||f>g.elements.length)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${f}. Expected index in range [${p}, ${g.elements.length}].`});let T=Bi(v,[g],p,f);return e.$={env:t,type:v,value:T,pathCollection:[]},e}if(r&&u&&mi(u)){let g=u,y=g.type.childType,v=Pr(y),T=g.endIndex-g.startIndex;if(p<0||p>T)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${p}. Expected index in range [0, ${T}].`});if(f<p||f>T)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${f}. Expected index in range [${p}, ${T}].`});let $=g.startIndex+p,C=g.startIndex+f,L=Bi(v,g.sourceArray,$,C);return e.$={env:t,type:v,value:L,pathCollection:[]},e}let d=s.$.type,h=Ef(d);return e.$={env:t,type:h,value:void 0,pathCollection:[]},e}function Ef(e){if(Ee(e)){let t=e.childType;if(ke(t)){let n=t.childType;return It(Pr(n))}if(Ge(t))return e}if(ke(e)){let t=e.childType;return It(Pr(t))}return Ge(e)?It(e):e}function Yl({expr:e,env:t,context:n,isRange:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=x({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime string index"});t=s.$.env;let l=x({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate index for comptime string index"});t=l.$.env;let u=s.$.value,c=s.$.type;if(!u||!we(u))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let _=u.value;if(!r){let g=l.$.value;if(!g||ue(g)||!Ln(g))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let y=Mi(g.value);if(y<0||y>=_.length)throw m({token:a.token,errorMessage:`String index out of bounds: ${y}. Expected index in range [0, ${_.length-1}].`});return e.$={env:t,type:c,value:Ut(_[y]),pathCollection:[]},e}let p=l.$.value;if(!p||ue(p)||!Pt(p))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let f=as(p,i);if(!f)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:d,end:h}=f;if(d<0||d>_.length)throw m({token:a.token,errorMessage:`String slice start index out of bounds: ${d}. Expected index in range [0, ${_.length}].`});if(h<d||h>_.length)throw m({token:a.token,errorMessage:`String slice end index out of bounds: ${h}. Expected index in range [${d}, ${_.length}].`});return e.$={env:t,type:c,value:Ut(_.slice(d,h)),pathCollection:[]},e}function Cf({expr:e,env:t,context:n}){if(E(e,k.__yo_comptime_array_index))return hf({expr:e,env:t,context:n,isSlice:!1});if(E(e,k.__yo_comptime_slice_index))return hf({expr:e,env:t,context:n,isSlice:!0});if(E(e,k.__yo_comptime_list_index))return Xh({expr:e,env:t,context:n});if(E(e,k.__yo_comptime_list_index_range))return vf({expr:e,env:t,context:n,isInclusive:!1});if(E(e,k.__yo_comptime_list_index_range_inclusive))return vf({expr:e,env:t,context:n,isInclusive:!0});if(E(e,k.__yo_comptime_array_index_range))return os({expr:e,env:t,context:n,isSlice:!1,isInclusive:!1});if(E(e,k.__yo_comptime_array_index_range_inclusive))return os({expr:e,env:t,context:n,isSlice:!1,isInclusive:!0});if(E(e,k.__yo_comptime_slice_index_range))return os({expr:e,env:t,context:n,isSlice:!0,isInclusive:!1});if(E(e,k.__yo_comptime_slice_index_range_inclusive))return os({expr:e,env:t,context:n,isSlice:!0,isInclusive:!0});if(E(e,k.__yo_comptime_string_index))return Yl({expr:e,env:t,context:n,isRange:!1,isInclusive:!1});if(E(e,k.__yo_comptime_string_index_range))return Yl({expr:e,env:t,context:n,isRange:!0,isInclusive:!1});if(E(e,k.__yo_comptime_string_index_range_inclusive))return Yl({expr:e,env:t,context:n,isRange:!0,isInclusive:!0});throw m({token:e.token,errorMessage:`Unexpected comptime index builtin: ${w(e)}`})}function bf({strValue:e,argValue:t,token:n,isRange:r,isInclusive:i}){if(ue(t))return Ut("");if(!r){if(!Ln(t))throw m({token:n,errorMessage:"Expected comptime_int index for comptime string index"});let l=Mi(t.value);if(l<0||l>=e.length)throw m({token:n,errorMessage:`String index out of bounds: ${l}. Expected index in range [0, ${e.length-1}].`});return Ut(e[l])}if(!Pt(t))throw m({token:n,errorMessage:"Expected comptime Range value for comptime string range index"});let o=as(t,i);if(!o)throw m({token:n,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:a,end:s}=o;if(a<0||a>e.length)throw m({token:n,errorMessage:`String slice start index out of bounds: ${a}. Expected index in range [0, ${e.length}].`});if(s<a||s>e.length)throw m({token:n,errorMessage:`String slice end index out of bounds: ${s}. Expected index in range [${a}, ${e.length}].`});return Ut(e.slice(a,s))}function kf({expr:e,env:t,context:n}){ve(e,k.consume,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=In(i,t),e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Hr({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:W(t.return.type,{variableName:"ctfe_analysis_result_"+Re(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map(T=>T.value),...r.args.map(T=>T.value),...r.variadicArgs.map(T=>T.value)];if(s.some(T=>!T))throw m({token:e?.token??se,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=Xe(u),_=n.funcId,p=n.calledComptimeFunctionCaches,f=c?p.find(T=>T.argValues.length===l.length&&T.argValues.every(($,C)=>{let L=l[C];return R($)&&R(L)?D($.value)&&D(L.value)||me($.value)||me(L.value)?$.value.id===L.value.id:D($.value)&&!D(L.value)?!1:q({type:$.value,env:T.env},{type:L.value,env:i},!0):Ot({value:$,env:T.env},{value:L,env:i})})):void 0;if(f)return{callerEnv:i,calleeEnv:o,value:f.value};let d=n.body,h={funcId:_,argValues:l,value:W(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:Ne(d)};n.calledComptimeFunctionCaches.push(h);let g=n.calledComptimeFunctionCaches.length-1,y;try{y=$t({expr:h.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(T){throw n.calledComptimeFunctionCaches.splice(g,1),T}if(!y.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=y.$.value;if(!v)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=y.$.env,R(v)){let T=v.value;!T.typeName&&n.funcName&&(T.typeName=n.funcName+`(${l.map($=>De($)).join(", ")})`),(pe(T)||ge(T)||ot(T)||Ce(T)||Le(T))&&(T.functionValue||(T.functionValue=n))}return c?n.calledComptimeFunctionCaches[g]={funcId:_,argValues:l,value:v,env:y.$.env,body:y}:n.calledComptimeFunctionCaches.splice(g,1),{value:v,callerEnv:i,calleeEnv:o,comptimeRef:y.$.comptimeRef}}function Hl(e,t,n){let i=Y(t,"Option").find(f=>f.value?.[0]&&ee(f.value[0])&&G(f.type));if(!i||!i.value?.[0]||!ee(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=J(e),u=xe(a.env),{env:c}=fe({env:u,variable:{name:s.label,token:se,type:l.type,isCompileTimeOnly:!0,initializedAtToken:se,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:p}=Hr({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:tt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(_))throw new Error("Option type constructor did not return a type value");return{optionType:_.value,env:p}}function wf({expr:e,env:t,context:n}){ve(e,[k.__yo_decr_rc[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_decr_rc[0]}":
|
|
11137
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Ff({expr:e,env:t,context:n}){ve(e,[k.__yo_incr_rc[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_incr_rc[0]}":
|
|
11138
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Lf({expr:e,env:t,context:n}){ve(e,[k.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_incr_rc_atomic[0]}":
|
|
11139
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function If({expr:e,env:t,context:n}){ve(e,[k.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_decr_rc_atomic[0]}":
|
|
11140
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Af({expr:e,env:t,context:n}){ve(e,[k.__yo_rc_own[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_incr_rc[0]}":
|
|
11141
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function xf({expr:e,env:t,context:n}){ve(e,[k.__yo_dyn_drop[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_dyn_drop[0]}":
|
|
11142
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Sf({expr:e,env:t,context:n}){ve(e,[k.__yo_dyn_dup[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_dyn_dup[0]}":
|
|
11143
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Vf({expr:e,env:t,context:n}){ve(e,[k.__yo_sometype_drop[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_sometype_drop[0]}":
|
|
11144
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Nf({expr:e,env:t,context:n}){ve(e,[k.__yo_sometype_dup[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_sometype_dup[0]}":
|
|
11145
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Mf({expr:e,env:t,context:n}){ve(e,[k.__yo_iso_extract[0]],1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_iso_extract[0]}":
|
|
11146
|
+
${w(r)}`});t=i.$.env;let o=i.$.type;if(!xt(o))throw m({token:r.token,errorMessage:`${k.__yo_iso_extract[0]} expects an Iso type, but got: ${A(o)}`});let a=o.childType,{optionType:s,env:l}=Hl(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection||[]},He(e,!0),e}function Df({expr:e,env:t,context:n}){ve(e,[k.__yo_iso_dispose[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_iso_dispose[0]}":
|
|
11147
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Of({expr:e,env:t,context:n}){ve(e,[k.__yo_arc_dispose[0]]);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.__yo_arc_dispose[0]}":
|
|
11148
|
+
${w(r)}`});return t=i.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Rf({expr:e,env:t,context:n}){ve(e,[k.__yo_drop_array_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${k.__yo_drop_array_element[0]}":
|
|
11149
11149
|
${w(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${k.__yo_drop_array_element[0]}":
|
|
11150
|
-
${w(i)}`});return t=a.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11150
|
+
${w(i)}`});return t=a.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Pf({expr:e,env:t,context:n}){ve(e,[k.__yo_dup_array_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the array argument for "${k.__yo_dup_array_element[0]}":
|
|
11151
11151
|
${w(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${k.__yo_dup_array_element[0]}":
|
|
11152
|
-
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!ke(s))throw m({token:r.token,errorMessage:`Expected array type for "${k.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function
|
|
11152
|
+
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!ke(s))throw m({token:r.token,errorMessage:`Expected array type for "${k.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function Uf({expr:e,env:t,context:n}){ve(e,[k.__yo_drop_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${k.__yo_drop_tuple_element[0]}":
|
|
11153
11153
|
${w(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${k.__yo_drop_tuple_element[0]}":
|
|
11154
|
-
${w(i)}`});return t=a.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11154
|
+
${w(i)}`});return t=a.$.env,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function zf({expr:e,env:t,context:n}){ve(e,[k.__yo_dup_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${k.__yo_dup_tuple_element[0]}":
|
|
11155
11155
|
${w(r)}`});t=o.$.env;let a=x({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:`Failed to evaluate the index argument for "${k.__yo_dup_tuple_element[0]}":
|
|
11156
|
-
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Se(s))throw m({token:r.token,errorMessage:`Expected tuple type for "${k.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!Ue(l))throw m({token:i.token,errorMessage:`Expected number value for index in "${k.__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 "${k.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function
|
|
11156
|
+
${w(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Se(s))throw m({token:r.token,errorMessage:`Expected tuple type for "${k.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!Ue(l))throw m({token:i.token,errorMessage:`Expected number value for index in "${k.__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 "${k.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Bf({expr:e,env:t,context:n}){ve(e,k.downcast,2);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate dyn value argument for downcast."});t=i.$.env;let o=i.$.type;if(!o||!Ae(o))throw m({token:r.token,errorMessage:`downcast expects a Dyn type as first argument, got ${o?A(o):"unknown"}.`});let a=e.args[1],s=x({expr:a,env:t,context:{...n}});if(!s.$)throw m({token:a.token,errorMessage:"Failed to evaluate type argument for downcast."});if(t=s.$.env,!s.$.value||!R(s.$.value))throw m({token:a.token,errorMessage:`downcast expects a type as second argument, got ${s.$.type?A(s.$.type):"unknown"}.`});let l=s.$.value.value,{optionType:u,env:c}=Hl(l,t,n);t=c;let _=W(u,{env:t,context:n});return e.$={env:t,type:u,value:_,pathCollection:[]},He(e,!0),e}function fa(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Gf(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function Wf(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function qf(e){if(e.result.kind!=="index")throw new Error("Expected index call result");return e.result.result}function To(e,t,n,r,i){if(!i.isEvaluatingFunctionBodyOrAsyncBlock)return;let o;if(i.isEvaluatingFunctionBodyOrAsyncBlock&&(o=i.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!o||t>=o.frames.length)return;let a,s=-1;for(let c=0;c<o.frames.length;c++){let _=o.frames[c]?.variables.find(p=>p.name===e);if(_){a=_,s=c;break}}if(!a||s<0||a.isCompileTimeOnly)return;i.capturedVariables||(i.capturedVariables=new Map);let l=i.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;i.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function Qh(e){let t=e;if(F(t)&&E(t,"?=",2)&&(t=t.args[0]),F(t)&&E(t,"=",2)&&(t=t.args[0]),!F(t)||!E(t,":",2))return;let n=t.args[0],r=t.args[1];if(!F(n)||!E(n,V.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!B(i)||!Qe(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function jl({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){let o,a=r,s=!1,l=!1,u,c,_,p,f,d=e,h,g,y,v;if(F(d)&&E(d,"=")){let I=d.args[0];if(I&&F(I)&&E(I,":",2))u=I,c=d.args[1],v=c,d=u;else throw m({token:d.func.token,errorMessage:'Use "?=" for default parameter values. Assigned values require an explicit type: (name : Type) = value.'})}if(F(d)&&E(d,":=",2))throw m({token:d.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(F(d)&&E(d,"?=",2)&&(c=d.args[1],u=d.args[0],y=c,d=u),F(d)&&E(d,":",2)?(c=d.args[1],u=d.args[0],h=c):v?u=d:y?(h=void 0,u=d):h=d,!h)throw m({token:e.token,errorMessage:y?"Default parameters must specify a type: (name : Type) ?= value.":'Expected an explicit type annotation for function parameter. Use "(name : Type)".'});if(u){if(F(u)&&E(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(F(u)&&E(u,"own")){if(l=!0,u.args.length!==1)throw m({token:u.token,errorMessage:`Expected one argument for "own", got ${u.args.length}`});u=u.args[0]}if(F(u)&&E(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(!B(u)||!Qe(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?.token??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let I=x({expr:v,env:t,context:{...n}});if(!I.$)throw m({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${w(v)}`});t=I.$.env;let z=I.$.value;if(!R(z))throw m({token:v.token,errorMessage:`Expected type value for = assignment, got ${De(z)}`});if(_=tt(),f=z,!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(h){let I=x({expr:h,env:t,context:{...n}});if(!I.$)throw m({token:h.token,errorMessage:`(3) Failed to evaluate type expression: ${w(h)}`});t=I.$.env;let z=I.$.value;if(R(z))_=z.value;else throw m({token:h.token,errorMessage:`Expected type for function parameter, got ${De(z)}`})}if(y){let I=x({expr:y,env:t,context:{...n}});if(I.$?.env&&(t=I.$?.env),p=I.$?.value,!p)throw m({token:y.token,errorMessage:`Expected a compile-time known value for default parameter, got ${w(y)}`});if(!_)_=p.type;else if(!q({type:_,env:t},{type:p.type,env:t}))throw m({token:y.token,errorMessage:`Incompatible default value type:
|
|
11157
11157
|
- Expected: ${A(_)}
|
|
11158
11158
|
- Got : ${A(p.type)}`})}if(!_)throw m({token:e.token,errorMessage:"Expected type for function parameter}"});if(a&&!me(_)&&$r(_,t))throw m({token:u?.token??e.token,errorMessage:`Parameter marked as "comptime" but type is not available at compile-time:
|
|
11159
11159
|
${A(_)}`});if(a&&me(_)&&!n.SelfTraitType){let I=Ai(_,t);if(I)throw m({token:u?.token??e.token,errorMessage:`Parameter type "${A(_)}" is used with "comptime" but type parameter "${A(I)}" does not implement the Comptime trait. Add "${I.name} <: Comptime" to the where clause.`})}if(!a&&Er(_,t))throw m({token:u?.token??e.token,errorMessage:`Parameter marked as runtime but type is not available at runtime:
|
|
@@ -11175,36 +11175,36 @@ use_id :: (fn(forall(T : Type),
|
|
|
11175
11175
|
) -> T) {
|
|
11176
11176
|
return val.id();
|
|
11177
11177
|
}
|
|
11178
|
-
`});let $=Y(t,o),C=$.length>0?$[$.length-1]:void 0,L=$.find(I=>{if(I.value&&R(I.value[0])){let z=I.value[0];if(D(z.value))return!0}return!1}),b=T,S=_;if(L){let I=L.value[0],z=I.value;if(f&&R(f)&&D(f.value)){let M=f.value,N=[...z.requiredTraits];for(let Q of M.requiredTraits)N.some(ne=>ne.traitType.id===Q.traitType.id)||N.push(Q);let O=[...z.negativeTraits??[]];if(M.negativeTraits)for(let Q of M.negativeTraits)O.some(ne=>ne.traitType.id===Q.traitType.id)||O.push(Q);z.requiredTraits=N,z.negativeTraits=O}b=I,S=Ft(z)}else if(C&&C.isCompileTimeOnly&&C.value&&C.frameLevel===t.frames.length-1)b=C.value[0],S=C.type;else{let{env:I}=fe({env:t,variable:{name:o,type:_,isCompileTimeOnly:a,value:f?[f]:a?[W(_,{variableName:o,env:t,context:n})]:void 0,token:u?.token??e.token,initializedAtToken:u?.token??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=I}return u&&(u.$={env:t,type:S,value:b,pathCollection:[]}),u!==e&&h!==e&&(e.$={env:t,type:H.type,value:H,pathCollection:[]}),At(_),{parameter:{label:o,type:_,exprs:Li({expr:e,labelExpr:g,typeExpr:h,defaultValueExpr:y,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:f},env:t}}function Qh({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!F(i)||!E(i,"<:",2))continue;let o=i.args[0];if(B(o)){let s=o.token.value;if(Y(t,s).length===0){let u=Vn(tt(),s,{env:t,context:n}),c=J(u),{env:_}=fe({env:t,variable:{name:s,type:Ft(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,o.$={env:t,type:Ft(u),value:c,pathCollection:[]}}}let a=jl({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function qf({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=Zh({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 Yf({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=x({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!R(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!Le(s.value))throw m({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(s.value)}`});let l=s.value,u=Rt({targetType:e,traitType:l,env:i});if(n){if(u)throw m({token:r.token,errorMessage:`Type ${A(e)} must NOT implement ${A(l)}, but it does.`})}else if(!u)throw m({token:r.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(l)}.`});return{env:i,success:!0}}function Zh({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;F(t)&&E(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(B(e)){let _=e.token.value,p=Y(r,_);if(p.length===0)return{env:r,success:!1};let f=p[p.length-1];if(f.value&&R(f.value[0])&&D(f.value[0].value))s=f.value[0].value;else if(f.value&&R(f.value[0]))try{return Yf({concreteType:f.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 _;try{_=x({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!_.$||!_.$.value||!R(_.$.value))return{env:r,success:!1};r=_.$.env;let p=_.$.value;if(!D(p.value))try{return Yf({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=x({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!R(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!Le(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value;if(c.receiverType)throw m({token:a.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return r=_r({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function jl({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!F(o)||!E(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(B(a)){let c=a.token.value,_=Y(t,c);if(_.length>0){let p=_[_.length-1];if(p.value&&R(p.value[0])&&D(p.value[0].value))l=p.value[0].value;else if(p.value&&R(p.value[0])){let f=p.value[0].value;t=Hf({concreteType:f,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=Vn(tt(),c,{env:t,context:n});let p=J(l),{env:f}=fe({env:t,variable:{name:c,type:Ft(l),isCompileTimeOnly:!0,value:[p],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=f,a.$={env:t,type:Ft(l),value:p,pathCollection:[]}}}else{let c=x({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!R(c.$.value))throw m({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let _=c.$.value;if(Vr(_.value)){let p=_.value,f=[];F(s)&&E(s,V.tuple)?f.push(...s.args):f.push(s);for(let d of f){let h=!1,g=d;F(d)&&E(d,"!")&&d.args.length===1&&(h=!0,g=d.args[0]);let y;try{y=x({expr:g,env:t,context:{...n}})}catch($){if(r){i.push({lhsExpr:a,traitExpr:d,originalConstraintExpr:o});continue}throw $}if(!y.$||!y.$.value||!R(y.$.value)){if(r){i.push({lhsExpr:a,traitExpr:d,originalConstraintExpr:o});continue}throw m({token:g.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=y.$.env;let v=y.$.value;if(!Le(v.value))throw m({token:g.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(v.value)}`});let T=v.value;t=kc({env:t,typeApp:p,traitType:T,isNegated:h})}continue}if(!D(_.value)){t=Hf({concreteType:_.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=_.value}let u=[];F(s)&&E(s,V.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let _=u[c],p=!1,f=_;F(_)&&E(_,"!")&&_.args.length===1&&(p=!0,f=_.args[0]);let d;try{d=x({expr:f,env:t,context:{...n}})}catch(y){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw y}if(!d.$||!d.$.value||!R(d.$.value)){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw m({token:f.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=d.$.env;let h=d.$.value;if(!Le(h.value))throw m({token:f.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(h.value)}`});let g=h.value;if(g.receiverType)throw m({token:f.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=_r({env:t,someType:l,traitType:g,isNegated:p})}}return{env:t,pendingTraits:i}}function jr({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:jl({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function Hf({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(F(t)&&E(t,V.tuple))for(let a of t.args)F(a)&&E(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else F(t)&&E(t,"!")&&t.args.length===1?o.push({expr:t.args[0],isNegated:!0}):o.push({expr:t,isNegated:!1});for(let{expr:a,isNegated:s}of o){let l=x({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!R(l.$.value))throw m({token:a.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."});r=l.$.env;let u=l.$.value;if(!Le(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value,_=Rt({targetType:e,traitType:c,env:r});if(s){if(_)throw m({token:n.token,errorMessage:`Type ${A(e)} must NOT implement ${A(c)}, but it does.`})}else if(!_)throw m({token:n.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(c)}.`})}return r}function Kl({parameterExprs:e,env:t,context:n}){t=xe(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let p=e[0];if(F(p)&&E(p,V.forall)){let f=p.args;for(let d=0;d<f.length;d++){let h=f[d];if(F(h)&&E(h,"...")&&h.args.length===1&&B(h.args[0])){let T=h.args[0].token.value;if(i.find(I=>I.label===T))throw m({token:h.token,errorMessage:`Duplicate label "${T}" in type parameter`});let C=Fi(T,t),L=wn(1),{env:b}=fe({env:t,variable:{name:T,type:L,isCompileTimeOnly:!0,value:[J(C)],token:h.args[0].token,initializedAtToken:h.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=b,h.$={env:t,type:L,value:J(C),pathCollection:[]};let S={label:T,type:L,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:Li({expr:h,labelExpr:h.args[0],typeExpr:h.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(S);continue}let{parameter:g,env:y}=Hl({expr:h,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(T=>T.label===g.label))throw m({token:h.token,errorMessage:`Duplicate label "${g.label}" in type parameter`});i.push(g),t=y}}}let u=0;for(let p=0;p<e.length;p++){let f=e[p];if(F(f)&&E(f,V.using)){if(u++,u>1)throw m({token:f.token,errorMessage:'Only one "using(...)" clause is allowed per function signature. Combine all implicit parameters into a single using(), e.g.: using(a : TypeA, b : TypeB)'});let d=f.args;for(let h=0;h<d.length;h++){let g=d[h];if(F(g)&&E(g,"...")&&g.args.length===1&&B(g.args[0])){let I=g.args[0].token.value,M=Y(t,I).at(-1);if(!M)throw m({token:g.token,errorMessage:`Effect row variable "${I}" not found in scope. Declare it with forall(..., ...(${I}))`});let N,O=M.value?.[0];if(O&&R(O)&<(O.value)){let ne=O.value;for(let j of ne.implicitParameters)o.push({...j,isEffectRowSpread:!1});continue}else if(O&&R(O)){if(!(D(O.value)&&O.value.isEffectsRow||lt(O.value)))throw m({token:g.token,errorMessage:`"...(${I})" requires "${I}" 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 : ${I}) instead of using(...(${I}))`});N=O.value}else if(O&&ue(O)&<(O.type)){let ne=O.type;for(let j of ne.implicitParameters)o.push({...j,isEffectRowSpread:!1});continue}else if(O&&ue(O))N=Fi(I,t);else throw m({token:g.token,errorMessage:`Effect row variable "${I}" has invalid value. Expected a type.`});let Q={label:I,type:N,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Li({expr:g,labelExpr:g.args[0],typeExpr:g.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(Q);continue}if(!(F(g)&&(E(g,":")||E(g,"=")||E(g,"?=")||E(g,":="))))throw m({token:g.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:v,env:T}=Hl({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(I=>I.label===v.label))throw m({token:g.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter (already in forall)`});if(o.find(I=>I.label===v.label))throw m({token:g.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter`});let L={...v,isCompileTimeOnly:!0,isImplicit:!0};o.push(L);let S=T.frames[T.frames.length-1].variables.find(I=>I.name===v.label);S&&(S.isImplicit=!0),t=T}}}let c=new Set;for(let p=0;p<e.length;p++){let f=e[p];if(F(f)&&(E(f,V.forall)||E(f,V.using)||E(f,V.where)||E(f,"...")))continue;let d=Xh(f);if(d){let h=x({expr:d.typeExpr,env:t,context:{...n}});if(h.$?.env&&(t=h.$.env),!h.$||!h.$.value||!R(h.$.value))continue;let g=h.$.value.value,y=W(g,{variableName:d.name,env:t,context:n}),{env:v}=fe({env:t,variable:{name:d.name,type:g,isCompileTimeOnly:!0,value:[y],token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=v,c.add(p)}}let _=[];if(e.length>0){let p=e[e.length-1];if(F(p)&&E(p,V.where)){if(s=p.args,s.length===0)throw m({token:p.token,errorMessage:"The where clause must have at least one constraint."});let f=Qh({constraintExprs:s,env:t,context:n});t=f.env,_=f.pendingConstraints}}for(let p=0;p<e.length;p++){let f=e[p];if(F(f)&&E(f,V.forall)){if(p!==0)throw m({token:f.token,errorMessage:`Expected type parameters to be the first argument, got ${p+1}`});continue}else{if(F(f)&&E(f,V.using))continue;if(F(f)&&E(f,V.where)){if(p!==e.length-1)throw m({token:f.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(B(f)&&Et(f,"...")||F(f)&&E(f,"...")){l=!0;let d=!1,h=!1,g="...",y=f,v=H.type;if(F(f)){let C=f.args[0];if(C)if(F(C)&&E(C,V.quote)&&C.args.length===2){let L=C.args[0],b=C.args[1];if(F(L)&&E(L,V.comptime)){if(d=!0,L.args.length!==1)throw m({token:L.token,errorMessage:`Expected one argument for "comptime", got ${L.args.length}`});y=L.args[0],g=L.args[0].token.value}else if(F(L)&&E(L,V.quote)){if(d=!0,h=!0,L.args.length!==1)throw m({token:L.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${L.args.length}`});y=L.args[0],g=L.args[0].token.value}else if(B(L)&&Qe(L))y=L,g=L.token.value;else throw m({token:L.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${w(L)}`});let S=x({expr:b,env:t,context:{...n}});if(!S.$)throw m({token:b.token,errorMessage:`Failed to evaluate type expression: ${w(b)}`});t=S.$.env;let I=S.$.value;if(R(I))v=I.value;else throw m({token:b.token,errorMessage:`Expected type for variadic parameter, got ${De(I)}`})}else if(F(C)&&E(C,V.comptime)){if(d=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "comptime", got ${C.args.length}`});y=C.args[0],g=C.args[0].token.value,v=Mr(tt())}else if(F(C)&&E(C,V.quote)){if(d=!0,h=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});y=C.args[0],g=C.args[0].token.value,v=Yo()}else throw Qe(C)?(y=C,g=C.token.value,v=H.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:f.token,errorMessage:`Expected a name for variadic parameter, got ${w(f)}`})}else v=H.type;let T=et(A(v)),$={exprs:{expr:f,labelExpr:y,typeExpr:T},isCompileTimeOnly:d,isQuote:h,label:g,type:v,isOwningTheRcValue:!1,isImplicit:!1};if(a=$,g!=="..."){let{env:C}=fe({env:t,variable:{name:g,type:v,isCompileTimeOnly:$.isCompileTimeOnly,value:d?[W(v,{variableName:g,env:t,context:n})]:void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheRcValue:$.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,y.$={env:t,type:v,value:d?W(v,{variableName:g,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw m({token:f.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:d,env:h}=Hl({expr:f,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(y=>y.label===d.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label "${d.label}" in function parameter`});if(r.push(d),t=h,_.length>0){let y=qf({pendingConstraints:_,env:t,context:n});t=y.env,_=y.pendingConstraints}}}}if(r.forEach((p,f)=>{if(p.isQuote&&di(p.type)&&f!==r.length-1)throw m({token:p.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),_.length>0){let p=qf({pendingConstraints:_,env:t,context:n});if(t=p.env,p.pendingConstraints.length>0){let f=p.pendingConstraints[0];jl({constraintExprs:[f.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}){if(!E(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> for function type, got:
|
|
11178
|
+
`});let $=Y(t,o),C=$.length>0?$[$.length-1]:void 0,L=$.find(I=>{if(I.value&&R(I.value[0])){let z=I.value[0];if(D(z.value))return!0}return!1}),b=T,S=_;if(L){let I=L.value[0],z=I.value;if(f&&R(f)&&D(f.value)){let M=f.value,N=[...z.requiredTraits];for(let Q of M.requiredTraits)N.some(ne=>ne.traitType.id===Q.traitType.id)||N.push(Q);let O=[...z.negativeTraits??[]];if(M.negativeTraits)for(let Q of M.negativeTraits)O.some(ne=>ne.traitType.id===Q.traitType.id)||O.push(Q);z.requiredTraits=N,z.negativeTraits=O}b=I,S=Ft(z)}else if(C&&C.isCompileTimeOnly&&C.value&&C.frameLevel===t.frames.length-1)b=C.value[0],S=C.type;else{let{env:I}=fe({env:t,variable:{name:o,type:_,isCompileTimeOnly:a,value:f?[f]:a?[W(_,{variableName:o,env:t,context:n})]:void 0,token:u?.token??e.token,initializedAtToken:u?.token??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=I}return u&&(u.$={env:t,type:S,value:b,pathCollection:[]}),u!==e&&h!==e&&(e.$={env:t,type:H.type,value:H,pathCollection:[]}),At(_),{parameter:{label:o,type:_,exprs:Li({expr:e,labelExpr:g,typeExpr:h,defaultValueExpr:y,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:f},env:t}}function Zh({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!F(i)||!E(i,"<:",2))continue;let o=i.args[0];if(B(o)){let s=o.token.value;if(Y(t,s).length===0){let u=Vn(tt(),s,{env:t,context:n}),c=J(u),{env:_}=fe({env:t,variable:{name:s,type:Ft(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,o.$={env:t,type:Ft(u),value:c,pathCollection:[]}}}let a=Kl({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function Yf({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=Jh({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 Hf({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=x({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!R(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!Le(s.value))throw m({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(s.value)}`});let l=s.value,u=Rt({targetType:e,traitType:l,env:i});if(n){if(u)throw m({token:r.token,errorMessage:`Type ${A(e)} must NOT implement ${A(l)}, but it does.`})}else if(!u)throw m({token:r.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(l)}.`});return{env:i,success:!0}}function Jh({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;F(t)&&E(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(B(e)){let _=e.token.value,p=Y(r,_);if(p.length===0)return{env:r,success:!1};let f=p[p.length-1];if(f.value&&R(f.value[0])&&D(f.value[0].value))s=f.value[0].value;else if(f.value&&R(f.value[0]))try{return Hf({concreteType:f.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 _;try{_=x({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!_.$||!_.$.value||!R(_.$.value))return{env:r,success:!1};r=_.$.env;let p=_.$.value;if(!D(p.value))try{return Hf({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=x({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!R(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!Le(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value;if(c.receiverType)throw m({token:a.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return r=_r({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function Kl({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!F(o)||!E(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(B(a)){let c=a.token.value,_=Y(t,c);if(_.length>0){let p=_[_.length-1];if(p.value&&R(p.value[0])&&D(p.value[0].value))l=p.value[0].value;else if(p.value&&R(p.value[0])){let f=p.value[0].value;t=jf({concreteType:f,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=Vn(tt(),c,{env:t,context:n});let p=J(l),{env:f}=fe({env:t,variable:{name:c,type:Ft(l),isCompileTimeOnly:!0,value:[p],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=f,a.$={env:t,type:Ft(l),value:p,pathCollection:[]}}}else{let c=x({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!R(c.$.value))throw m({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let _=c.$.value;if(Vr(_.value)){let p=_.value,f=[];F(s)&&E(s,V.tuple)?f.push(...s.args):f.push(s);for(let d of f){let h=!1,g=d;F(d)&&E(d,"!")&&d.args.length===1&&(h=!0,g=d.args[0]);let y;try{y=x({expr:g,env:t,context:{...n}})}catch($){if(r){i.push({lhsExpr:a,traitExpr:d,originalConstraintExpr:o});continue}throw $}if(!y.$||!y.$.value||!R(y.$.value)){if(r){i.push({lhsExpr:a,traitExpr:d,originalConstraintExpr:o});continue}throw m({token:g.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=y.$.env;let v=y.$.value;if(!Le(v.value))throw m({token:g.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(v.value)}`});let T=v.value;t=wc({env:t,typeApp:p,traitType:T,isNegated:h})}continue}if(!D(_.value)){t=jf({concreteType:_.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=_.value}let u=[];F(s)&&E(s,V.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let _=u[c],p=!1,f=_;F(_)&&E(_,"!")&&_.args.length===1&&(p=!0,f=_.args[0]);let d;try{d=x({expr:f,env:t,context:{...n}})}catch(y){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw y}if(!d.$||!d.$.value||!R(d.$.value)){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw m({token:f.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=d.$.env;let h=d.$.value;if(!Le(h.value))throw m({token:f.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(h.value)}`});let g=h.value;if(g.receiverType)throw m({token:f.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=_r({env:t,someType:l,traitType:g,isNegated:p})}}return{env:t,pendingTraits:i}}function jr({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:Kl({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function jf({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(F(t)&&E(t,V.tuple))for(let a of t.args)F(a)&&E(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else F(t)&&E(t,"!")&&t.args.length===1?o.push({expr:t.args[0],isNegated:!0}):o.push({expr:t,isNegated:!1});for(let{expr:a,isNegated:s}of o){let l=x({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!R(l.$.value))throw m({token:a.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."});r=l.$.env;let u=l.$.value;if(!Le(u.value))throw m({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(u.value)}`});let c=u.value,_=Rt({targetType:e,traitType:c,env:r});if(s){if(_)throw m({token:n.token,errorMessage:`Type ${A(e)} must NOT implement ${A(c)}, but it does.`})}else if(!_)throw m({token:n.token,errorMessage:`Type ${A(e)} does not implement required trait ${A(c)}.`})}return r}function Xl({parameterExprs:e,env:t,context:n}){t=xe(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let p=e[0];if(F(p)&&E(p,V.forall)){let f=p.args;for(let d=0;d<f.length;d++){let h=f[d];if(F(h)&&E(h,"...")&&h.args.length===1&&B(h.args[0])){let T=h.args[0].token.value;if(i.find(I=>I.label===T))throw m({token:h.token,errorMessage:`Duplicate label "${T}" in type parameter`});let C=Fi(T,t),L=wn(1),{env:b}=fe({env:t,variable:{name:T,type:L,isCompileTimeOnly:!0,value:[J(C)],token:h.args[0].token,initializedAtToken:h.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=b,h.$={env:t,type:L,value:J(C),pathCollection:[]};let S={label:T,type:L,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:Li({expr:h,labelExpr:h.args[0],typeExpr:h.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(S);continue}let{parameter:g,env:y}=jl({expr:h,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(T=>T.label===g.label))throw m({token:h.token,errorMessage:`Duplicate label "${g.label}" in type parameter`});i.push(g),t=y}}}let u=0;for(let p=0;p<e.length;p++){let f=e[p];if(F(f)&&E(f,V.using)){if(u++,u>1)throw m({token:f.token,errorMessage:'Only one "using(...)" clause is allowed per function signature. Combine all implicit parameters into a single using(), e.g.: using(a : TypeA, b : TypeB)'});let d=f.args;for(let h=0;h<d.length;h++){let g=d[h];if(F(g)&&E(g,"...")&&g.args.length===1&&B(g.args[0])){let I=g.args[0].token.value,M=Y(t,I).at(-1);if(!M)throw m({token:g.token,errorMessage:`Effect row variable "${I}" not found in scope. Declare it with forall(..., ...(${I}))`});let N,O=M.value?.[0];if(O&&R(O)&<(O.value)){let ne=O.value;for(let j of ne.implicitParameters)o.push({...j,isEffectRowSpread:!1});continue}else if(O&&R(O)){if(!(D(O.value)&&O.value.isEffectsRow||lt(O.value)))throw m({token:g.token,errorMessage:`"...(${I})" requires "${I}" 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 : ${I}) instead of using(...(${I}))`});N=O.value}else if(O&&ue(O)&<(O.type)){let ne=O.type;for(let j of ne.implicitParameters)o.push({...j,isEffectRowSpread:!1});continue}else if(O&&ue(O))N=Fi(I,t);else throw m({token:g.token,errorMessage:`Effect row variable "${I}" has invalid value. Expected a type.`});let Q={label:I,type:N,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:Li({expr:g,labelExpr:g.args[0],typeExpr:g.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(Q);continue}if(!(F(g)&&(E(g,":")||E(g,"=")||E(g,"?=")||E(g,":="))))throw m({token:g.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:v,env:T}=jl({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(I=>I.label===v.label))throw m({token:g.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter (already in forall)`});if(o.find(I=>I.label===v.label))throw m({token:g.token,errorMessage:`Duplicate label "${v.label}" in implicit parameter`});let L={...v,isCompileTimeOnly:!0,isImplicit:!0};o.push(L);let S=T.frames[T.frames.length-1].variables.find(I=>I.name===v.label);S&&(S.isImplicit=!0),t=T}}}let c=new Set;for(let p=0;p<e.length;p++){let f=e[p];if(F(f)&&(E(f,V.forall)||E(f,V.using)||E(f,V.where)||E(f,"...")))continue;let d=Qh(f);if(d){let h=x({expr:d.typeExpr,env:t,context:{...n}});if(h.$?.env&&(t=h.$.env),!h.$||!h.$.value||!R(h.$.value))continue;let g=h.$.value.value,y=W(g,{variableName:d.name,env:t,context:n}),{env:v}=fe({env:t,variable:{name:d.name,type:g,isCompileTimeOnly:!0,value:[y],token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=v,c.add(p)}}let _=[];if(e.length>0){let p=e[e.length-1];if(F(p)&&E(p,V.where)){if(s=p.args,s.length===0)throw m({token:p.token,errorMessage:"The where clause must have at least one constraint."});let f=Zh({constraintExprs:s,env:t,context:n});t=f.env,_=f.pendingConstraints}}for(let p=0;p<e.length;p++){let f=e[p];if(F(f)&&E(f,V.forall)){if(p!==0)throw m({token:f.token,errorMessage:`Expected type parameters to be the first argument, got ${p+1}`});continue}else{if(F(f)&&E(f,V.using))continue;if(F(f)&&E(f,V.where)){if(p!==e.length-1)throw m({token:f.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(B(f)&&Et(f,"...")||F(f)&&E(f,"...")){l=!0;let d=!1,h=!1,g="...",y=f,v=H.type;if(F(f)){let C=f.args[0];if(C)if(F(C)&&E(C,V.quote)&&C.args.length===2){let L=C.args[0],b=C.args[1];if(F(L)&&E(L,V.comptime)){if(d=!0,L.args.length!==1)throw m({token:L.token,errorMessage:`Expected one argument for "comptime", got ${L.args.length}`});y=L.args[0],g=L.args[0].token.value}else if(F(L)&&E(L,V.quote)){if(d=!0,h=!0,L.args.length!==1)throw m({token:L.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${L.args.length}`});y=L.args[0],g=L.args[0].token.value}else if(B(L)&&Qe(L))y=L,g=L.token.value;else throw m({token:L.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${w(L)}`});let S=x({expr:b,env:t,context:{...n}});if(!S.$)throw m({token:b.token,errorMessage:`Failed to evaluate type expression: ${w(b)}`});t=S.$.env;let I=S.$.value;if(R(I))v=I.value;else throw m({token:b.token,errorMessage:`Expected type for variadic parameter, got ${De(I)}`})}else if(F(C)&&E(C,V.comptime)){if(d=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "comptime", got ${C.args.length}`});y=C.args[0],g=C.args[0].token.value,v=Mr(tt())}else if(F(C)&&E(C,V.quote)){if(d=!0,h=!0,C.args.length!==1)throw m({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});y=C.args[0],g=C.args[0].token.value,v=Yo()}else throw Qe(C)?(y=C,g=C.token.value,v=H.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:f.token,errorMessage:`Expected a name for variadic parameter, got ${w(f)}`})}else v=H.type;let T=et(A(v)),$={exprs:{expr:f,labelExpr:y,typeExpr:T},isCompileTimeOnly:d,isQuote:h,label:g,type:v,isOwningTheRcValue:!1,isImplicit:!1};if(a=$,g!=="..."){let{env:C}=fe({env:t,variable:{name:g,type:v,isCompileTimeOnly:$.isCompileTimeOnly,value:d?[W(v,{variableName:g,env:t,context:n})]:void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheRcValue:$.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,y.$={env:t,type:v,value:d?W(v,{variableName:g,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw m({token:f.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:d,env:h}=jl({expr:f,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(y=>y.label===d.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label "${d.label}" in function parameter`});if(r.push(d),t=h,_.length>0){let y=Yf({pendingConstraints:_,env:t,context:n});t=y.env,_=y.pendingConstraints}}}}if(r.forEach((p,f)=>{if(p.isQuote&&di(p.type)&&f!==r.length-1)throw m({token:p.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),_.length>0){let p=Yf({pendingConstraints:_,env:t,context:n});if(t=p.env,p.pendingConstraints.length>0){let f=p.pendingConstraints[0];Kl({constraintExprs:[f.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}){if(!E(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> for function type, got:
|
|
11179
11179
|
${w(e)}
|
|
11180
11180
|
|
|
11181
11181
|
Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],i=e.args[1],o=[];if(F(r)&&(E(r,V.fn)||E(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:
|
|
11182
|
-
${w(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:_}=
|
|
11182
|
+
${w(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:_}=Xl({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=_;let p,f=!1,d=!1,h=i;if(F(i)&&E(i,":",2)){let $=i.args[0];if(h=i.args[1],F($)&&E($,V.comptime)){if(f=!0,$.args.length!==1)throw m({token:$.token,errorMessage:`Expected one argument for "comptime" , got ${$.args.length}`});$=$.args[0]}if(F($)&&E($,V.unquote)){if(d=!0,$.args.length!==1)throw m({token:$.token,errorMessage:`Expected one argument for "unquote", got ${$.args.length}`});if(f)throw m({token:$.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});f=!0,$=$.args[0]}if(F($)&&E($,V.quote))throw m({token:$.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!Qe($))throw m({token:$.token,errorMessage:`Expected a valid variable name for return label, got ${w($)}`});p=$.token.value}else{if(F(h)&&E(h,V.comptime)){if(f=!0,h.args.length!==1)throw m({token:h.token,errorMessage:`Expected one argument for "comptime" , got ${h.args.length}`});h=h.args[0]}if(F(h)&&E(h,V.unquote)){if(d=!0,h.args.length!==1)throw m({token:h.token,errorMessage:`Expected one argument for "unquote", got ${h.args.length}`});if(f)throw m({token:h.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});f=!0,h=h.args[0]}if(F(h)&&E(h,V.quote))throw m({token:h.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let g=x({expr:h,env:t,context:{...n,isEvaluatingFunctionType:!0}}),y,v=g.$?.value;if(R(v))y=v.value;else throw m({token:h.token,errorMessage:`Expected a type for function return type, got:
|
|
11183
11183
|
${w(h)}`});if(Er(y,t)&&!f&&(y=vt({type:y,expectedType:void 0,expr:void 0,env:t}),Er(y,t)))throw m({token:h.token,errorMessage:`Expected a "comptime" for return type, like:
|
|
11184
11184
|
|
|
11185
11185
|
comptime(${w(h)})
|
|
11186
11186
|
|
|
11187
11187
|
Given type:
|
|
11188
|
-
${A(y)}`});if(n.isUnsafeFunctionType||Or(y,h.token),f&&!me(y)&&$r(y,t))throw m({token:h.token,errorMessage:`Unexpected "comptime" for return type of ${A(y)} which can only be used at runtime.`});if(f&&me(y)&&!n.SelfTraitType){let $=Ai(y,t);if($)throw m({token:h.token,errorMessage:`Return type "${A(y)}" is used with "comptime" but type parameter "${A($)}" does not implement the Comptime trait. Add "${$.name} <: Comptime" to the where clause.`})}if(f){for(let $ of a)if(!$.isCompileTimeOnly)throw m({token
|
|
11188
|
+
${A(y)}`});if(n.isUnsafeFunctionType||Or(y,h.token),f&&!me(y)&&$r(y,t))throw m({token:h.token,errorMessage:`Unexpected "comptime" for return type of ${A(y)} which can only be used at runtime.`});if(f&&me(y)&&!n.SelfTraitType){let $=Ai(y,t);if($)throw m({token:h.token,errorMessage:`Return type "${A(y)}" is used with "comptime" but type parameter "${A($)}" does not implement the Comptime trait. Add "${$.name} <: Comptime" to the where clause.`})}if(f){for(let $ of a)if(!$.isCompileTimeOnly)throw m({token:$u($),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(d&&!Dt(y))throw m({token:h.token,errorMessage:`Expected Expr type for "unquote" return type, got ${A(y)}`});let T=Ur({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:y,typeExpr:h,isCompileTimeOnly:f,isUnquote:d,label:p??`fn_return_${Re(t.modulePath)}`},env:nt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,SelfTraitType:n.SelfTraitType,SelfModuleType:n.SelfModuleType});return t=nt(t,!0),e.$={env:t,value:J(T),type:Ft(T),pathCollection:[]},e}function da({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let s=r??(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),l=x({expr:Ne(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType,isEvaluatingFunctionBodyOrAsyncBlock:s?{kind:"function-body",type:s,evaluationEnv:t}:void 0}});if(!R(l.$?.value))throw m({token:o.token,errorMessage:`Expected type for parameter, got:
|
|
11189
11189
|
${w(l)}`});return l.$?.env&&(t=l.$?.env),{parameterType:l.$?.value.value,calleeEnv:t}}else if(a){let s=x({expr:Ne(a),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType}});if(!s.$)throw m({token:a.token,errorMessage:`Failed to evaluate default value expression:
|
|
11190
|
-
${w(a)}`});return t=s.$?.env,{parameterType:s.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Di({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){let i=e.return,o=x({expr:Ne(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType,SelfTraitType:e.SelfTraitType??n.SelfTraitType,SelfModuleType:e.SelfModuleType??n.SelfModuleType}}),a,s=o.$?.value;if(R(s))a=s.value;else throw m({token:r?.token??se,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return D(a)&&(a=qt(t,a)),{returnType:a,calleeEnv:o.$?.env??t}}function
|
|
11190
|
+
${w(a)}`});return t=s.$?.env,{parameterType:s.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Di({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){let i=e.return,o=x({expr:Ne(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType,SelfTraitType:e.SelfTraitType??n.SelfTraitType,SelfModuleType:e.SelfModuleType??n.SelfModuleType}}),a,s=o.$?.value;if(R(s))a=s.value;else throw m({token:r?.token??se,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return D(a)&&(a=qt(t,a)),{returnType:a,calleeEnv:o.$?.env??t}}function Kf({expr:e,env:t,context:n}){let r=e.func,i=e.args;if(!B(r)||r.token.value!=="_")throw m({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
|
|
11191
11191
|
${w(r)}`});let o=wi(t),a=o.fields,s=[],l=[];for(let p=0;p<i.length;p++){let f=i[p],d,h=f,g;if(F(f)&&E(f,":",2)){if(d=f.args[0],h=f.args[1],!Qe(d))throw m({token:d.token,errorMessage:`Expected identifier for anonymous struct field label, got:
|
|
11192
|
-
${w(d)}`});g=d.token.value}{let y=x({expr:h,env:t,context:{...n,SelfType:o}});if(en(y,n),!y.$)throw m({token:h.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${w(h)}`});t=y.$.env;let v=y.$.type,T={exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:h},type:v,label:g??`__field_${Re(t.modulePath)}`};a.push(T),l.push(y),y.$.value?s.push(y.$?.value):s.push(void 0),d&&(d.$=y.$)}}t=bi({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(p=>!p)?void 0:Zn(o,s);let c=J(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:_}=fe({env:t,variable:{name:o.id,type:c.type,value:[c],initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheRcValue:!1}});return t=_,e.$={env:t,type:o,value:u,pathCollection:[],runtimeArgExprsInOrder:l},He(e,!0),e}function
|
|
11192
|
+
${w(d)}`});g=d.token.value}{let y=x({expr:h,env:t,context:{...n,SelfType:o}});if(en(y,n),!y.$)throw m({token:h.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${w(h)}`});t=y.$.env;let v=y.$.type,T={exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:h},type:v,label:g??`__field_${Re(t.modulePath)}`};a.push(T),l.push(y),y.$.value?s.push(y.$?.value):s.push(void 0),d&&(d.$=y.$)}}t=bi({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(p=>!p)?void 0:Zn(o,s);let c=J(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:_}=fe({env:t,variable:{name:o.id,type:c.type,value:[c],initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheRcValue:!1}});return t=_,e.$={env:t,type:o,value:u,pathCollection:[],runtimeArgExprsInOrder:l},He(e,!0),e}function Xf({expr:e,env:t,context:n}){let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Arc:
|
|
11193
11193
|
${w(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Arc expects a type as argument, but got:
|
|
11194
|
-
${w(r)}`});let a=i.$.value.value,s=
|
|
11195
|
-
${w(i)}`});return t=o.$.env,t=In(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},He(e,!0),e}function
|
|
11194
|
+
${w(r)}`});let a=i.$.value.value,s=ic(a,t);t=Ou({arcType:s,env:t,context:n});let l=J(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Qf({expr:e,env:t,context:n,arcType:r}){let i=e.args[0],o=x({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Arc value constructor:
|
|
11195
|
+
${w(i)}`});return t=o.$.env,t=In(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},He(e,!0),e}function Zf({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(Ue(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(ue(o)){s=n.length;let p=Qn(BigInt(s));a=kr(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 f=n[p],d=x({expr:f,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!d.$)throw m({token:f.token,errorMessage:`Failed to evaluate array element at index ${p}.`});if(en(d,i),u=d.$.env,p===0&&ke(c)&&ue(c.length)&&ke(d.$.type)&&(c=d.$.type,a=kr(c,a.length)),!q({type:c,env:u},{type:d.$.type,env:u}))throw m({token:f.token,errorMessage:`Array element at index ${p} has incompatible type:
|
|
11196
11196
|
- Expected: ${A(c)}
|
|
11197
|
-
- Given : ${A(d.$.type)}`});d.$.value!==void 0?l.push(d.$.value):l.push(W(c,{env:u,context:i}))}let _=Qr(a,l);return e.$={env:u,value:_,type:a,pathCollection:[]},e}function
|
|
11198
|
-
`);throw m({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function us({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=wi(n),l=Array.from(t.entries()).map(([c,_])=>({label:c,type:_.type,isCompileTimeOnly:!1,assignedValue:void 0,isEffectParam:_.isEffectParam||void 0,exprs:{expr:{tag:"Atom",token:_.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,o=s,n=bi({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=Zn(s,u):a=void 0}else{let s=wi(n);s.fields=[],n=bi({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=Zn(s,[])}else if(t&&t.size>0){let s=o,l=Array.from(t.keys()),u=s.fields.map(_=>_.label);for(let _ of l)if(!u.includes(_))throw m({token:r,errorMessage:`Captured variable "${_}" does not exist in expected capture struct "${A(s)}"`});for(let _ of s.fields)if(!l.includes(_.label))throw m({token:r,errorMessage:`Expected capture struct field "${_.label}" is not captured by this closure`});for(let[_,p]of t.entries()){let f=s.fields.find(d=>d.label===_);if(f&&!q({type:f.type,env:n},{type:p.type,env:n}))throw m({token:p.token,errorMessage:`Captured variable "${_}" has type "${A(p.type)}" but expected struct field has type "${A(f.type)}"`})}let c=Array.from(t.values()).map(_=>_.value);c.every(_=>_!==void 0)?a=Zn(o,c):a=void 0}else a=Zn(o,[]);return{captureType:o,captureValue:a}}function cs({capturedVariables:e,env:t}){let n=new Map;for(let[r,i]of e.entries())if(i.frameLevel<t.frames.length){let a=t.frames[i.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...i,value:a.value?.[0],type:a.type})}return n}function _s({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(Ve(a.type)){let s=et(`${k.___dup[0]}(${o})`),l=x({expr:s,env:i,context:{...n}});r.push(l),l.$&&l.$.env&&(i=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:i}}function
|
|
11197
|
+
- Given : ${A(d.$.type)}`});d.$.value!==void 0?l.push(d.$.value):l.push(W(c,{env:u,context:i}))}let _=Qr(a,l);return e.$={env:u,value:_,type:a,pathCollection:[]},e}function Jf({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=Y(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=qe(r,s,{...s,consumedAtToken:n}))}}return r}function Eo(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function ls({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!At(i)&&!Rt({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!Rt({targetType:l.type,traitType:i,env:n})),a=A(i),s=o.map(l=>`\`${l.label}\` has type \`${A(l.type)}\` which does not implement \`${a}\``).join(`
|
|
11198
|
+
`);throw m({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function us({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=wi(n),l=Array.from(t.entries()).map(([c,_])=>({label:c,type:_.type,isCompileTimeOnly:!1,assignedValue:void 0,isEffectParam:_.isEffectParam||void 0,exprs:{expr:{tag:"Atom",token:_.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,o=s,n=bi({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=Zn(s,u):a=void 0}else{let s=wi(n);s.fields=[],n=bi({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=Zn(s,[])}else if(t&&t.size>0){let s=o,l=Array.from(t.keys()),u=s.fields.map(_=>_.label);for(let _ of l)if(!u.includes(_))throw m({token:r,errorMessage:`Captured variable "${_}" does not exist in expected capture struct "${A(s)}"`});for(let _ of s.fields)if(!l.includes(_.label))throw m({token:r,errorMessage:`Expected capture struct field "${_.label}" is not captured by this closure`});for(let[_,p]of t.entries()){let f=s.fields.find(d=>d.label===_);if(f&&!q({type:f.type,env:n},{type:p.type,env:n}))throw m({token:p.token,errorMessage:`Captured variable "${_}" has type "${A(p.type)}" but expected struct field has type "${A(f.type)}"`})}let c=Array.from(t.values()).map(_=>_.value);c.every(_=>_!==void 0)?a=Zn(o,c):a=void 0}else a=Zn(o,[]);return{captureType:o,captureValue:a}}function cs({capturedVariables:e,env:t}){let n=new Map;for(let[r,i]of e.entries())if(i.frameLevel<t.frames.length){let a=t.frames[i.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...i,value:a.value?.[0],type:a.type})}return n}function _s({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(Ve(a.type)){let s=et(`${k.___dup[0]}(${o})`),l=x({expr:s,env:i,context:{...n}});r.push(l),l.$&&l.$.env&&(i=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:i}}function Ql({functionBodyExpr:e,functionType:t,functionValue:n,env:r,context:i}){if(!me(t.return.type))return;let o;try{let a=Ne(e),s=$o({...i,capturedVariables:void 0},t,{...n},r),l=$t({expr:a,env:r,context:s.evaluationContext,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(o=l.$?.type,it(l.$?.controlFlow,"escape")&&!it(l.$?.controlFlow,"return"))return}catch{return}if(o&&!q({type:t.return.type,env:r},{type:o,env:r},!0))throw m({token:t.return.typeExpr.token,errorMessage:`Incompatible function return type for:
|
|
11199
11199
|
- Expected: ${A(t.return.type)}
|
|
11200
|
-
- Given : ${A(o)}`})}function $o(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=Hn()}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
|
|
11200
|
+
- Given : ${A(o)}`})}function $o(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=Hn()}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 ed({expr:e,functionType:t,callerEnv:n,context:r}){let i=e.func,o=e.args;if(o.length!==1)throw m({token:i.token,errorMessage:`Failed to implement the function. Expected 1 argument for the function body, got ${o.length}.`});let a=o[0],s=!1,l=r.expectedType?.type,u=l&&G(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((b,S)=>b.label!==t.parameters[S].label),c=!r.isEvaluatingFunctionBodyOrAsyncBlock,_=xe(s||c?n:Xa(n));if(u&&l&&G(l)){for(let b of t.forallParameters){let{env:S}=fe({env:_,variable:{name:b.label,type:b.type,isCompileTimeOnly:!0,value:[W(b.type,{variableName:b.label,env:_,context:r})],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=S}for(let b=0;b<t.parameters.length;b++){let S=t.parameters[b],I=l.parameters[b],z=S.label,M=I.label,{env:N}=fe({env:_,variable:{name:z,type:S.type,isCompileTimeOnly:S.isCompileTimeOnly,value:S.isCompileTimeOnly?[W(S.type,{variableName:M,env:_,context:r})]:void 0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:S.isOwningTheRcValue,parameterAlias:z!==M?M:void 0}});_=N}}else _=xe(_,t.parametersFrame);let p=_.frames[_.frames.length-1],f={...t,parametersFrame:p,env:t.env},d={tag:"Function",type:f,body:a,frameLevel:_.frames.length-1,funcName:void 0,funcId:`fn_${Re(_.modulePath)}`,definitionSiteEnclosingFunctionType:r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if(f.whereClauseExprs?.length){let b=f.whereClauseExprs.map(I=>Ne(I));_=jr({constraintExprs:b,env:_,context:{...r,isEvaluatingFunctionType:!0}}).env}let h=f.forallParameters.length>0||f.parameters.some(b=>me(b.type))||f.SelfType&&me(f.SelfType),g,y;if(h)Ql({functionBodyExpr:a,functionType:f,functionValue:d,env:_,context:r}),a.$={env:_,type:t.return.type,value:t.return.isCompileTimeOnly?W(t.return.type,{variableName:"function_body",env:_,context:r}):void 0,pathCollection:[]},y={...r,capturedVariables:void 0},g=a;else{if(y=$o({...r,capturedVariables:void 0},f,d,_).evaluationContext,g=$t({expr:a,env:_,context:y,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!g.$)throw m({token:a.token,errorMessage:"Failed to evaluate the function body."});_=g.$.env}let v=y.capturedVariables,T=g.$?.type;if(ur(g)&&(d.isControlFunction=!0),!d.isControlFunction&&T&&!q({type:f.return.type,env:_},{type:T,env:_}))throw m({token:f.return.typeExpr.token,errorMessage:`Incompatible function return type for:
|
|
11201
11201
|
- Expected: ${A(f.return.type)}
|
|
11202
|
-
- Given : ${A(T)}`});if(D(f.return.type)&&!f.return.type.resolvedConcreteType&&(D(T)?D(T)&&T.resolvedConcreteType&&(f.return.type.resolvedConcreteType=T.resolvedConcreteType):f.return.type.resolvedConcreteType=T),f.return.isCompileTimeOnly&&g.$&&!g.$.value)throw m({token:f.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});_=nt(_,!0);let $=n;s&&v&&v.size>0&&($=
|
|
11202
|
+
- Given : ${A(T)}`});if(D(f.return.type)&&!f.return.type.resolvedConcreteType&&(D(T)?D(T)&&T.resolvedConcreteType&&(f.return.type.resolvedConcreteType=T.resolvedConcreteType):f.return.type.resolvedConcreteType=T),f.return.isCompileTimeOnly&&g.$&&!g.$.value)throw m({token:f.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});_=nt(_,!0);let $=n;s&&v&&v.size>0&&($=Jf({capturedVariables:v,env:n,closureToken:e.token}));let C=d,L=f;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let b=ho(d,$,r);b&&(C=b,L=b.type)}return e.$={env:$,value:C,type:L,pathCollection:v&&v.size>0?Eo(v):[]},e}function td({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){let o=e.func,a=e.args;if(a.length!==1)throw m({token:o.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=xe(r,t.isFn.callType.parametersFrame);if(t.isFn.callType.whereClauseExprs?.length){let $=t.isFn.callType.whereClauseExprs.map(L=>Ne(L));l=jr({constraintExprs:$,env:l,context:{...i,isEvaluatingFunctionType:!0}}).env}let u={tag:"Function",type:t.isFn.callType,body:s,frameLevel:l.frames.length-1,funcName:void 0,funcId:`closure_${Re(l.modulePath)}`,definitionSiteEnclosingFunctionType:i.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=$o(i,t.isFn.callType,u,l),_=$t({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!_.$)throw m({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=_.$.env;let p=c.capturedVariables,f=_.$.type;if(!q({type:t.isFn.callType.return.type,env:l},{type:f,env:l}))throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:`Incompatible closure return type:
|
|
11203
11203
|
- Expected: ${A(t.isFn.callType.return.type)}
|
|
11204
|
-
- Given : ${A(f)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!_.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=nt(l,!0);let d=p&&p.size>0?cs({capturedVariables:p,env:r}):void 0,h=r,{capturedVariableDupExpressions:g,env:y}=_s({capturedVariablesWithValues:d,env:r,context:i});h=y;let{captureType:v}=us({expectedCaptureType:void 0,capturedVariablesWithValues:d,env:h,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},D(n)&&v&&ls({wrapperType:n,captureType:v,env:h,errorToken:e.token});let T;return D(n)?(n.resolvedConcreteType=v,T={...n,resolvedConcreteType:v}):Ae(n)?T=n:T=t,e.$={env:h,value:void 0,type:T,pathCollection:p&&p.size>0?Eo(p):[],deferredDupExpressions:g&&g.length>0?g:void 0,captureType:v,closureFunctionValue:u},Ae(n)&&He(e,!0),e}function
|
|
11204
|
+
- Given : ${A(f)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!_.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=nt(l,!0);let d=p&&p.size>0?cs({capturedVariables:p,env:r}):void 0,h=r,{capturedVariableDupExpressions:g,env:y}=_s({capturedVariablesWithValues:d,env:r,context:i});h=y;let{captureType:v}=us({expectedCaptureType:void 0,capturedVariablesWithValues:d,env:h,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},D(n)&&v&&ls({wrapperType:n,captureType:v,env:h,errorToken:e.token});let T;return D(n)?(n.resolvedConcreteType=v,T={...n,resolvedConcreteType:v}):Ae(n)?T=n:T=t,e.$={env:h,value:void 0,type:T,pathCollection:p&&p.size>0?Eo(p):[],deferredDupExpressions:g&&g.length>0?g:void 0,captureType:v,closureFunctionValue:u},Ae(n)&&He(e,!0),e}function nd({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],_=x({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!_.$)throw m({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(en(_,i),a=_.$.env,!q({type:s,env:a},{type:_.$.type,env:a}))throw m({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
|
|
11205
11205
|
- Expected: ${A(s)}
|
|
11206
|
-
- Given : ${A(_.$.type)}`});if(_.$.value!==void 0)o.push(_.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${A(_.$.type)}`})}let l=fn(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function
|
|
11207
|
-
${w(a)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function
|
|
11206
|
+
- Given : ${A(_.$.type)}`});if(_.$.value!==void 0)o.push(_.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${A(_.$.type)}`})}let l=fn(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function od(e,t,n,r=!1,i){let o=G(n)?n:void 0,s=Pa(e,{detect(u,c,_){if(u.tag!=="FnCall")return;if(rd(u,t,i,!0)){let f=[];for(let h of u.args)h.$?.type&&f.push(h.$.type);if(f.length===0&&o)for(let h of o.parameters)h.isCompileTimeOnly||f.push(h.type);let d=u.$?.type??o?.return.type;if(f.length>0&&d){let h=jo(c);_.push({index:_.length,expr:u,operationArgTypes:f,operationResultType:d,targetVariableId:h})}}if(r&&!rd(u,t,i)){let f=ev(u,t);if(f){let d=n,h=d.parameters.filter(y=>!y.isCompileTimeOnly).map(y=>y.type),g=f.viaClosure?d.return.type:u.$?.type;if(h.length>0&&g){let y=jo(c);_.push({index:_.length,expr:u,operationArgTypes:h,operationResultType:g,targetVariableId:y,isTransitiveEffectCall:!0,isTransitiveClosureCall:f.viaClosure})}}}},shouldSkipBody(u){return Yt(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 rd(e,t,n,r=!1){if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let l=i.$?.type;return!(!r&&(!l||!G(l))||r&&l&&!G(l))}let o=[],a=i;for(;a.tag==="FnCall"&&E(a,".")&&a.args.length>=2;){let l=a.args[1];if(!l||l.tag!=="Atom")return!1;o.unshift(l.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let l=0;l<o.length;l++)if(o[l]!==n[l])return!1;let s=i.$?.type;return!(!r&&(!s||!G(s))||r&&s&&!G(s))}function ev(e,t){if(e.tag!=="FnCall")return;let n=e.func.$?.type;if(!n)return;if(G(n)){if(!n.implicitParameters)return;for(let i of n.implicitParameters){if(i.label===t&&(G(i.type)||Ce(i.type)))return{matched:!0,viaClosure:!1};if(i.isEffectRowSpread&&id(i,t,e.func.$?.env))return{matched:!0,viaClosure:!1}}return}let r=cn(n);if(r){let i=r.isFn.callType;if(i.implicitParameters)for(let o of i.implicitParameters){if(o.label===t&&(G(o.type)||Ce(o.type)))return{matched:!0,viaClosure:!0};if(o.isEffectRowSpread&&id(o,t,e.func.$?.env))return{matched:!0,viaClosure:!0}}}}function id(e,t,n){if(!n)return!1;let r=e.type,i;if(D(r)&&r.isEffectsRow){let a=Y(n,e.label).at(-1)?.value?.[0];if(a&&R(a)&<(a.value))i=a.value;else{let s=qt(n,r);lt(s)&&(i=s)}}else lt(r)&&(i=r);if(i){for(let o of i.implicitParameters)if(o.label===t&&(G(o.type)||Ce(o.type)))return!0}return!1}function sd(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(G(r.type)){let i=t?.fields[n];if(i&&ee(i)&&i.isControlFunction)return!0}if(Ce(r.type)){let i=t?.fields[n];if(sd(r.type,i&&Ye(i)?i:void 0))return!0}}return!1}function tv({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=et(`${k.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:void 0}});if(r.push(s),s.$?.env)i=s.$.env;else throw m({token:a.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${o.name}":
|
|
11207
|
+
${w(a)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function nv({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){let c=r[i],_;if(c&&F(c)&&E(c,":",2)){if(_=c.args[0],c=c.args[1],!B(_))throw m({token:_.token,errorMessage:`Expected identifier for label, got:
|
|
11208
11208
|
${w(_)}`});let b=_.token.value;if(n.label==="")throw m({token:_.token,errorMessage:"Named argument call is not allowed for this parameter (it has no label)."});if(n.label!==b)throw m({token:_.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
|
|
11209
11209
|
Expected ${n?`label "${n.label}"`:"no label"} at the argument position, but got "${b}".`})}let{parameterType:p,calleeEnv:f}=da({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=f;let d;if(!c||B(c)&&Et(c,V.undefined))if(n.exprs.defaultValueExpr)d=x({expr:Ne(n.exprs.defaultValueExpr),env:o,context:{...s,expectedType:{type:p,env:o}}}),d.$?.env&&(o=d.$?.env),c&&(c.$=d.$),n.isCompileTimeOnly||u.push(d);else throw m({token:c?.token??se,errorMessage:`Expected default value for parameter "${n.label}"`});else if(n.isQuote)if(Dt(p))d=Ne(c),d.$={type:Xt(),value:ln(c),env:a,pathCollection:[]};else throw m({token:c.token,errorMessage:`Expected "Expr" type for "quote" parameter "${n.label}", got:
|
|
11210
11210
|
${A(p)}`});else{let b=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"||e.ioBuiltin==="join_handle_await"?void 0:{type:p,env:o};if(d=x({expr:c,env:a,context:{...s,expectedType:b}}),d.$?.env&&(a=d.$?.env),n.isCompileTimeOnly||u.push(d),Ei(d,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let S=d.$?.variableName,I=S?Y(a,S):[];(I.length?I[I.length-1]:void 0)?.isOwningTheRcValue?a=In(d,a,!0):(en(d,s),d.$?.env&&(a=d.$.env),a=In(d,a,!0))}}if(!d.$)throw m({token:c?.token??se,errorMessage:"Failed to evaluate argument expression."});let h=d.$.type;if(n.isCompileTimeOnly&&(!d.$?.value||ue(d.$.value)&&d.$.value.isRuntimeOnly))throw m({token:c?.token??se,errorMessage:`Cannot assign runtime argument to compile-time parameter:
|
|
@@ -11214,7 +11214,7 @@ Got: ${De(d.$.value)}`});let g=d.$.value;if(!n.isCompileTimeOnly&&hi(h,d.$.env
|
|
|
11214
11214
|
${w(d)}`});let y=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,T=!y&&D(p)&&(Rn(o,p)?.requiredTraits?.length??0)>0?{...p,resolvedConcreteType:h}:h,{env:$}=fe({env:o,variable:{name:n.label,type:T,isCompileTimeOnly:y,value:g?[g]:void 0,token:c?.token??se,initializedAtToken:c?.token??se,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=$,g&&R(g)&&D(g.value)){let b=g.value,S=Rn(a,b);if(S){for(let I of S.requiredTraits){let z={...I,receiverType:b};o=_r({env:o,someType:b,traitType:z,isNegated:!1})}for(let I of S.negativeTraits){let z={...I,receiverType:b};o=_r({env:o,someType:b,traitType:z,isNegated:!0})}}}try{let{expectedEnv:b}=Ze({type:p,env:o},{type:h,env:a});o=b}catch(b){throw m({token:c?.token??se,errorMessage:`Failed to synthesize types for parameter "${n.label}":
|
|
11215
11215
|
${b.message}`})}let{parameterType:C,calleeEnv:L}=da({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=L,!q({type:C,env:o},{type:h,env:a},i===0&&l))throw m({token:c?.token??se,errorMessage:`Type mismatch for parameter "${n.label}":
|
|
11216
11216
|
Expected: ${A(C)}
|
|
11217
|
-
Got: ${A(h)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:g,argType:h,parameterType:C}}function Co(e){if(e&&ee(e))return e}function ps(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var fs=ps("YO_DEBUG_CALL")||ps("YO_DEBUG_CALL_PROFILE")||ps("YO_DEBUG_EVAL")||ps("YO_DEBUG_EVAL_PROFILE"),
|
|
11217
|
+
Got: ${A(h)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:g,argType:h,parameterType:C}}function Co(e){if(e&&ee(e))return e}function ps(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var fs=ps("YO_DEBUG_CALL")||ps("YO_DEBUG_CALL_PROFILE")||ps("YO_DEBUG_EVAL")||ps("YO_DEBUG_EVAL_PROFILE"),ad=globalThis,xr=ad.__yoCallProfilerState??(ad.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function ui({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){if(fs){xr.tryCallCount++;let ie="(unknown)";t&&"funcName"in t&&t.funcName?ie=t.funcName:t&&"funcId"in t?ie=String(t.funcId):r&&(ie=w(r).slice(0,60)),xr.tryCallNames.set(ie,(xr.tryCallNames.get(ie)??0)+1),xr.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${xr.tryCallCount}: name=${ie}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,_=[],p=[],f=[],d=t?.definitionSiteEnclosingFunctionType,h=0;i.length>0&&F(i[0])&&E(i[0],V.forall)?(c=i[0],h=1):s&&i.length>1&&F(i[1])&&E(i[1],V.forall)&&(c=i[1],i=[i[0],...i.slice(2)]);let g,y=i.slice(h),v=y.findIndex(ie=>F(ie)&&E(ie,V.using));if(v!==-1){let ie=y.findIndex((Z,_e)=>_e>v&&F(Z)&&E(Z,V.using));if(ie!==-1)throw m({token:y[ie].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=y[v],y=[...y.slice(0,v),...y.slice(v+1)]}let T=n.parameters.length,$=y;if(!n.variadicParameter){if($.length>T){let ie=n.parameters.at(-1);if(!(ie&&ie.isQuote&&di(ie.type)))throw m({token:r?.token??se,errorMessage:`Too many arguments for function call:
|
|
11218
11218
|
Expected: ${T} arguments
|
|
11219
11219
|
Got: ${$.length} arguments`})}else if($.length<T&&!n.parameters.slice($.length).every(Z=>Z.exprs.defaultValueExpr!==void 0))throw m({token:r?.token??se,errorMessage:`Too few arguments for function call:
|
|
11220
11220
|
Expected: ${T} arguments
|
|
@@ -11224,8 +11224,8 @@ ${w(ae)}`:"Expected type for default value."});le=je.$?.value}else throw m({toke
|
|
|
11224
11224
|
${w(ae)}`});le=je.$?.value}else{if(!R(je.$?.value))throw m({token:ae.token,errorMessage:`Expected type for argument, got:
|
|
11225
11225
|
${w(ae)}`});le=je.$?.value}}be&&(be.$={env:b,type:le.type,value:le,pathCollection:[]});let ye=G(Z.type),Fe=Z.type;if(!ye){let{parameterType:je,calleeEnv:Be}=da({parameter:Z,calleeEnv:b,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});b=Be,Fe=je;let{expectedEnv:Je,givenEnv:Vt}=Ze({type:Fe,env:b},{type:le.type,env:o});if(b=Je,o=Vt,!q({type:Fe,env:b},{type:le.type,env:o}))throw m({token:ae?.token??r?.token??se,errorMessage:`Type mismatch for type parameter "${Z.label}":
|
|
11226
11226
|
Expected: ${A(Fe)}
|
|
11227
|
-
Got: ${A(le.type)}`})}if(Z.label)if(_e)b=qe(b,_e,{..._e,value:[le]});else{let je=ae?.token??r?.token??se,{env:Be}=fe({env:b,variable:{name:Z.label,type:le.type,isCompileTimeOnly:!0,value:[le],token:je,initializedAtToken:je,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Be}_.push({value:le,argType:le.type,parameterType:Fe})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:ie,calleeEnv:Z}=Di({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:_e}=Ze({type:ie,env:Z},{type:a.expectedType.type,env:a.expectedType.env});b=_e}catch{}if(g&&n.implicitParameters.length>0&&n.implicitParameters.some(Z=>Z.isEffectRowSpread)){let _e=n.implicitParameters.filter(be=>!be.isEffectRowSpread).length,ae=g.args.slice(_e);if(ae.length>0){let be=[];for(let Fe of ae){if(!B(Fe))throw m({token:Fe.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${w(Fe)}`});let je=Fe.token.value,Je=Y(o,je).at(-1);if(!Je)throw m({token:Fe.token,errorMessage:`Variable "${je}" not found for using() argument in effect row spread.`});Fe.$={env:o,type:Je.type,value:Je.value?.[0],variableName:je,pathCollection:[]},be.push({label:je,type:Je.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:Fe,labelExpr:Fe,typeExpr:void 0,defaultValueExpr:void 0}})}let le=zr(be),ye=J(le);for(let Fe of n.implicitParameters){if(!Fe.isEffectRowSpread)continue;let je=Fe.label,Je=Y(b,je).at(-1);Je&&(b=qe(b,Je,{...Je,value:[ye]})),D(Fe.type)&&Fe.type.isEffectsRow&&(Fe.type.resolvedConcreteType=le)}}}if(n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0}),n.whereClauseExprs?.length&&n.whereClauseExprs.every(Z=>{if(!F(Z)||!E(Z,"<:"))return!1;let _e=Z.args[0];if(!_e)return!1;let ae=_e.tag==="Atom"?_e.token.value:void 0;return ae?Y(b,ae).length>0:!1})){let Z=n.whereClauseExprs.map(ae=>Ne(ae));b=jr({constraintExprs:Z,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let S=n.parameters.length;for(let ie=0;ie<S;ie++){let Z=n.parameters[ie],{calleeEnv:_e,callerEnv:ae,context:be,argValue:le,argType:ye,parameterType:Fe}=
|
|
11228
|
-
${w(Z)}`});o=_e.$.env,M.push({value:_e.$.value,argType:_e.$.type}),n.variadicParameter.isCompileTimeOnly||f.push(Z)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let ie=fn(Xt(),M.map(_e=>_e.value)),{env:Z}=fe({env:b,variable:{name:n.variadicParameter.label,type:ie.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:[ie],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Z}else if(n.variadicParameter.isCompileTimeOnly&&Tt(n.variadicParameter.type)){let ie=n.variadicParameter.type.childType,Z=fn(ie,M.map(ae=>ae.value)),{env:_e}=fe({env:b,variable:{name:n.variadicParameter.label,type:Z.type,isCompileTimeOnly:!0,value:[Z],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=_e}}}let N=[],O=[];if(n.implicitParameters.length>0)for(let ie=0;ie<n.implicitParameters.length;ie++){let Z=n.implicitParameters[ie],_e=!1;if(Z.isEffectRowSpread){let le=[],Fe=Y(b,Z.label).at(-1)?.value?.[0],je;if(Fe&&R(Fe)&<(Fe.value))je=Fe.value;else if(D(Z.type)&&Z.type.isEffectsRow){let Be=qt(b,Z.type);lt(Be)&&(je=Be)}else lt(Z.type)&&(je=Z.type);if(!je&&D(Z.type)&&Z.type.isEffectsRow){let Be=$n(o,Nt=>Nt.isImplicit===!0&&Nt.isCompileTimeOnly===!0&&(G(Nt.type)||Ce(Nt.type))),Je=new Set(n.implicitParameters.filter(Nt=>!Nt.isEffectRowSpread).map(Nt=>Nt.label)),Vt=Be.filter(Nt=>!Je.has(Nt.name));if(Vt.length>0){for(let dr of Vt){let pi=dr.value?.[0];if(pi){O.push({value:pi,parameterType:dr.type,argType:dr.type});let{env
|
|
11227
|
+
Got: ${A(le.type)}`})}if(Z.label)if(_e)b=qe(b,_e,{..._e,value:[le]});else{let je=ae?.token??r?.token??se,{env:Be}=fe({env:b,variable:{name:Z.label,type:le.type,isCompileTimeOnly:!0,value:[le],token:je,initializedAtToken:je,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Be}_.push({value:le,argType:le.type,parameterType:Fe})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:ie,calleeEnv:Z}=Di({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:_e}=Ze({type:ie,env:Z},{type:a.expectedType.type,env:a.expectedType.env});b=_e}catch{}if(g&&n.implicitParameters.length>0&&n.implicitParameters.some(Z=>Z.isEffectRowSpread)){let _e=n.implicitParameters.filter(be=>!be.isEffectRowSpread).length,ae=g.args.slice(_e);if(ae.length>0){let be=[];for(let Fe of ae){if(!B(Fe))throw m({token:Fe.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${w(Fe)}`});let je=Fe.token.value,Je=Y(o,je).at(-1);if(!Je)throw m({token:Fe.token,errorMessage:`Variable "${je}" not found for using() argument in effect row spread.`});Fe.$={env:o,type:Je.type,value:Je.value?.[0],variableName:je,pathCollection:[]},be.push({label:je,type:Je.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:Fe,labelExpr:Fe,typeExpr:void 0,defaultValueExpr:void 0}})}let le=zr(be),ye=J(le);for(let Fe of n.implicitParameters){if(!Fe.isEffectRowSpread)continue;let je=Fe.label,Je=Y(b,je).at(-1);Je&&(b=qe(b,Je,{...Je,value:[ye]})),D(Fe.type)&&Fe.type.isEffectsRow&&(Fe.type.resolvedConcreteType=le)}}}if(n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0}),n.whereClauseExprs?.length&&n.whereClauseExprs.every(Z=>{if(!F(Z)||!E(Z,"<:"))return!1;let _e=Z.args[0];if(!_e)return!1;let ae=_e.tag==="Atom"?_e.token.value:void 0;return ae?Y(b,ae).length>0:!1})){let Z=n.whereClauseExprs.map(ae=>Ne(ae));b=jr({constraintExprs:Z,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let S=n.parameters.length;for(let ie=0;ie<S;ie++){let Z=n.parameters[ie],{calleeEnv:_e,callerEnv:ae,context:be,argValue:le,argType:ye,parameterType:Fe}=nv({functionType:n,definitionSiteEnclosingFunctionType:d,parameter:Z,argExprs:i,argIndex:ie,callerEnv:o,calleeEnv:b,context:a,isMethodCall:s,runtimeArgExprsInOrder:f});b=_e,o=ae,a=be,p.push({value:le,parameterType:Fe,argType:ye})}if(!c&&n.forallParameters.length>0){for(let ie of n.forallParameters)if(ie.label){let _e=Y(b,ie.label).at(-1);if(_e?.value?.[0]&&R(_e.value[0])){let ae=_e.value[0];if(D(ae.value)&&ae.value.resolvedConcreteType&&(!ae.value.requiredTraits||ae.value.requiredTraits.length===0)){let be=J(ae.value.resolvedConcreteType);b=qe(b,_e,{..._e,value:[be]})}}}}if(!c&&n.forallParameters.length>0){for(let ie of n.forallParameters)if(ie.label){let _e=Y(b,ie.label).at(-1);_e?.value?.[0]&&R(_e.value[0])&&_.push({value:_e.value[0],argType:_e.value[0].type,parameterType:ie.type})}}if(n.whereClauseExprs?.length){let ie=n.whereClauseExprs.map(_e=>Ne(_e));b=jr({constraintExprs:ie,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let{returnType:I,calleeEnv:z}=Di({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(b=z,a.expectedType&&!n.return.isUnquote){let{expectedEnv:ie}=Ze({type:I,env:b},{type:a.expectedType.type,env:a.expectedType.env});b=ie;let Z=Di({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});I=Z.returnType,b=Z.calleeEnv,q({type:a.expectedType.type,env:a.expectedType.env},{type:I,env:b})&&(I=a.expectedType.type)}let M=[];if(n.variadicParameter){for(let ie=0;ie<L.length;ie++){let Z=L[ie],_e;if(n.variadicParameter.isQuote)_e=Ne(Z),_e.$={type:Xt(),value:ln(Z),env:o,pathCollection:[]},M.push({value:_e.$.value,argType:_e.$.type});else{if(_e=x({expr:Z,env:o,context:{...a}}),!_e.$?.env)throw m({token:Z.token,errorMessage:`Failed to evaluate the expression:
|
|
11228
|
+
${w(Z)}`});o=_e.$.env,M.push({value:_e.$.value,argType:_e.$.type}),n.variadicParameter.isCompileTimeOnly||f.push(Z)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let ie=fn(Xt(),M.map(_e=>_e.value)),{env:Z}=fe({env:b,variable:{name:n.variadicParameter.label,type:ie.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:[ie],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=Z}else if(n.variadicParameter.isCompileTimeOnly&&Tt(n.variadicParameter.type)){let ie=n.variadicParameter.type.childType,Z=fn(ie,M.map(ae=>ae.value)),{env:_e}=fe({env:b,variable:{name:n.variadicParameter.label,type:Z.type,isCompileTimeOnly:!0,value:[Z],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=_e}}}let N=[],O=[];if(n.implicitParameters.length>0)for(let ie=0;ie<n.implicitParameters.length;ie++){let Z=n.implicitParameters[ie],_e=!1;if(Z.isEffectRowSpread){let le=[],Fe=Y(b,Z.label).at(-1)?.value?.[0],je;if(Fe&&R(Fe)&<(Fe.value))je=Fe.value;else if(D(Z.type)&&Z.type.isEffectsRow){let Be=qt(b,Z.type);lt(Be)&&(je=Be)}else lt(Z.type)&&(je=Z.type);if(!je&&D(Z.type)&&Z.type.isEffectsRow){let Be=$n(o,Nt=>Nt.isImplicit===!0&&Nt.isCompileTimeOnly===!0&&(G(Nt.type)||Ce(Nt.type))),Je=new Set(n.implicitParameters.filter(Nt=>!Nt.isEffectRowSpread).map(Nt=>Nt.label)),Vt=Be.filter(Nt=>!Je.has(Nt.name));if(Vt.length>0){for(let dr of Vt){let pi=dr.value?.[0];if(pi){O.push({value:pi,parameterType:dr.type,argType:dr.type});let{env:$y}=fe({env:b,variable:{name:dr.name,type:dr.type,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[pi],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=$y}}let Nt=zr(Vt.map(dr=>({label:dr.name,type:dr.type,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!0,exprs:{expr:void 0,labelExpr:void 0,typeExpr:void 0}}))),bn=J(Nt),Xr=Y(b,Z.label).at(-1);Xr&&(b=qe(b,Xr,{...Xr,value:[bn],type:Nt})),_e=!0;continue}}le=je?.implicitParameters??[];for(let Be of le){let Je=Be.type,Nt=$n(o,bn=>bn.isImplicit===!0&&bn.isCompileTimeOnly===!0&&bn.name===Be.label&&q({type:Je,env:b},{type:bn.type,env:o})).at(-1);if(Nt?.value?.[0]){let bn=Nt.value[0];O.push({value:bn,parameterType:Je,argType:Nt.type});let{env:nr}=fe({env:b,variable:{name:Be.label,type:Je,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[bn],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=nr}else{let nr=$n(o,pi=>pi.isImplicit===!0&&pi.isCompileTimeOnly===!0&&q({type:Je,env:b},{type:pi.type,env:o})).at(-1);if(!nr?.value?.[0])throw m({token:r?.token??e?.token??se,errorMessage:`No "given" variable found for effect row parameter "${Be.label}" of type ${A(Je)} (expanded from effect row ...(${Z.label})).
|
|
11229
11229
|
Please ensure a given variable of matching type is in scope.`});let Xr=nr.value[0];O.push({value:Xr,parameterType:Je,argType:nr.type});let{env:dr}=fe({env:b,variable:{name:Be.label,type:Je,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[Xr],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=dr}}continue}let{parameterType:ae,calleeEnv:be}=da({parameter:Z,calleeEnv:b,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});if(b=be,g){let le=g.args[ie],ye=le&&B(le)&&Et(le,V.undefined);if(le&&!ye){let Fe=x({expr:le,env:o,context:{...a}});if(!Fe.$)throw m({token:le.token,errorMessage:`Failed to evaluate using() argument: ${w(le)}`});o=Fe.$.env;let je=Fe.$.value,Be=Fe.$.type;if(!je)throw m({token:le.token,errorMessage:`Expected compile-time value for using() argument, got runtime value: ${w(le)}`});if(!q({type:ae,env:b},{type:Be,env:o}))throw m({token:le.token,errorMessage:`Incompatible type for implicit parameter "${Z.label}":
|
|
11230
11230
|
Expected: ${A(ae)}
|
|
11231
11231
|
Got: ${A(Be)}`});O.push({value:je,parameterType:ae,argType:Be});let Je=Y(b,Z.label);if(Je.length>0){let Vt=Je[Je.length-1];b=qe(b,Vt,{...Vt,type:ae,isImplicit:!0,value:[je]})}else{let{env:Vt}=fe({env:b,variable:{name:Z.label,type:ae,isCompileTimeOnly:!0,isImplicit:!0,value:[je],token:Z.exprs.labelExpr?.token??se,initializedAtToken:Z.exprs.labelExpr?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Vt}_e=!0}}if(!_e){let le=$n(o,Vt=>Vt.isImplicit===!0&&Vt.isCompileTimeOnly===!0&&q({type:ae,env:b},{type:Vt.type,env:o}));if(le.length===0)throw m({token:r?.token??e?.token??se,errorMessage:`No "given" variable found for implicit parameter "${Z.label}" of type ${A(ae)}.
|
|
@@ -11235,22 +11235,22 @@ Or pass it explicitly:
|
|
|
11235
11235
|
${t?.funcName??"func"}(..., using(<value>))`});if(le[le.length-1].isFromEffectSpread&&!(()=>{if(!r||!B(r))return!1;let Nt=r.token.value,bn=a.isEvaluatingFunctionBodyOrAsyncBlock;return!bn||bn.kind!=="function-body"?!1:bn.type.parameters.some(Xr=>Xr.label===Nt)})())throw m({token:r?.token??e?.token??se,errorMessage:`Effect "${Z.label}" of type ${A(ae)} is available through an effect row spread but not explicitly declared in the function's using clause.
|
|
11236
11236
|
Add it explicitly:
|
|
11237
11237
|
using(${Z.label} : ${A(ae)}, ...(E))`});let Fe=le;if(Fe.length>1){let Vt=ta(o,Nt=>Nt.isImplicit===!0&&Nt.isCompileTimeOnly===!0&&q({type:ae,env:b},{type:Nt.type,env:o}));if(Vt>=0){let bn=o.frames[Vt].variables.filter(nr=>nr.isImplicit===!0&&nr.isCompileTimeOnly===!0&&q({type:ae,env:b},{type:nr.type,env:o}));bn.length>0&&(Fe=bn)}}if(Fe.length>1)throw m({token:r?.token??e?.token??se,errorMessage:`Ambiguous implicit parameter "${Z.label}": found ${Fe.length} "given" variables with compatible type ${A(ae)} in the same scope.
|
|
11238
|
-
Please use explicit using() to disambiguate.`});let je=Fe[Fe.length-1],Be=je.value?.[0];if(!Be)throw m({token:r?.token??e?.token??se,errorMessage:`The "given" variable "${je.name}" has no compile-time value.`});O.push({value:Be,parameterType:ae,argType:je.type});let{env:Je}=fe({env:b,variable:{name:Z.label,type:ae,isCompileTimeOnly:!0,isImplicit:!0,value:[Be],token:Z.exprs.labelExpr?.token??se,initializedAtToken:Z.exprs.labelExpr?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Je}}let Q={args:p,forallArgs:_,implicitArgs:O,variadicArgs:M},ne;if(n.return.isCompileTimeOnly)if(u)ne=W(I,{variableName:n.return.label,env:n.env,context:a});else if(ee(t)){let{value:ie,callerEnv:Z,calleeEnv:_e}=Hr({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:Q,callerEnv:o,calleeEnv:b,context:{...a}});ne=ie,I=ie.type,o=Z,b=_e}else{let ie=Xe(I)&&I.level===0,Z=`${n.id}_return_sometype`;if(ie)if(a.expectedType?.type)ne=J(a.expectedType.type);else if(a.isEvaluatingFunctionType){let _e=Vn(I,n.return.label,{id:Z,env:b,context:a});_e.functionApplication=e;let ae=qt(b,_e);ne=J(ae)}else throw m({token:e?.token??r?.token??se,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else ne=W(I,{variableName:n.return.label,env:n.env,context:a})}iv({returnType:I,env:b,expr:e,context:a});let j,K=a.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&ee(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&ee(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,te=Q.implicitArgs?.some(ie=>ue(ie.value)),$e=te&&!Q.implicitArgs?.some(ie=>ue(ie.value)&&!Ce(ie.parameterType)),X=Q.args.some(ie=>ie.argType&&D(ie.argType)),re=$e&&X,ce=(()=>{if(!te||!n.implicitParameters.some(ae=>ae.isEffectRowSpread))return!1;let Z=0;for(let ae of n.implicitParameters)ae.isEffectRowSpread||Z++;let _e=Q.implicitArgs??[];for(let ae=0;ae<Z&&ae<_e.length;ae++)if(ue(_e[ae].value))return!1;return!0})(),Oe=Xn(n)&&!hr(n)&&n.implicitParameters.some(ie=>Ce(ie.type)?ie.type.fields.some(Z=>G(Z.type)&&Z.type.forallParameters.length===0):!!ie.isEffectRowSpread);if(!l&&!Oe&&t&&ee(t)&&!t.isControlFunction&&Xn(n)&&!K&&(!te||re||ce)){if(j=nv({originalFunction:t,argValues:Q,calleeEnv:b,callerEnv:o,context:a}),j&&D(I)){let ie=j.body?.$?.type;ie&&!D(ie)&&(I=ie,j.specializedType&&(j.specializedType={...j.specializedType,return:{...j.specializedType.return,type:ie}}))}if(j){let ie=new Set,Z=0;for(let _e=0;_e<n.parameters.length;_e++)if(!n.parameters[_e].isCompileTimeOnly){let le=Q.args[_e]?.value;le&&ee(le)&&le.type.implicitParameters.some(ye=>G(ye.type)||Ce(ye.type))&&ie.add(Z),Z++}if(ie.size>0)for(let _e=f.length-1;_e>=0;_e--)ie.has(_e)&&f.splice(_e,1)}}if(!l&&t&&ee(t)&&t.isControlFunction&&n.forallParameters.length>0&&!j&&(j=rv({originalFunction:t,argValues:Q,calleeEnv:b,callerEnv:o,context:a}),j&&D(I))){let ie=j.body?.$?.type;ie&&!D(ie)&&(I=ie,j.specializedType&&(j.specializedType={...j.specializedType,return:{...j.specializedType.return,type:ie}}))}let he=uo(o),Ke;if(he.length>0){let ie=ev({variablesToDrop:he,env:o,context:a});Ke=ie.deferredDropExpressions,o=ie.env}return{returnType:I,calleeEnv:b,callerEnv:o,pathCollection:N,argValues:Q,returnValue:ne,specializedFunctionValue:j,runtimeArgExprsInOrder:f,deferredDropExpressions:Ke}}function nv({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){if(fs){xr.specializeCount++;let M=e.funcName??e.funcId;xr.specializeNames.set(M,(xr.specializeNames.get(M)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(M=>M.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(M=>M.value)),o.parameters.forEach((M,N)=>{let O=t.args[N];if(M.isCompileTimeOnly)O.value&&a.push(O.value);else if(O.value&&ee(O.value)&&O.value.type.implicitParameters.some(ne=>G(ne.type)||Ce(ne.type)))O.value&&a.push(O.value);else{let j=D(O.argType)&&O.argType.resolvedConcreteType&&!Ie(O.argType)?O.argType.resolvedConcreteType:O.argType;s.push({...M,type:j})}});let l=s.map(M=>M.type),u=e.specializedFunctionCaches.find(M=>M.compileTimeArgValues.length===a.length&&M.compileTimeArgValues.every((Q,ne)=>{let j=a[ne];return Ot({value:Q,env:M.env},{value:j,env:r})})?M.runtimeParameterTypes.length===l.length&&M.runtimeParameterTypes.every((Q,ne)=>{let j=l[ne];return q({type:Q,env:M.env},{type:j,env:r},!0)}):!1);if(u)return fs&&xr.cacheHitCount++,u.specializedFunction;fs&&xr.cacheMissCount++;let c=n;for(let M of r.frames)for(let N of M.variables){if(!N.isCompileTimeOnly||Y(c,N.name).length>0)continue;let{env:Q}=fe({env:c,variable:{...N},allowVariableShadowing:!0});c=Q}for(let M of s){let N=Y(c,M.label);if(N.length>0){let O=N[N.length-1],Q={...O,value:void 0};c=qe(c,O,Q)}}let _=Ne(e.body),{returnType:p,calleeEnv:f}=Di({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=f;let d=i.enclosingFunctionReturnType,h=t.implicitArgs?.some(M=>ee(M.value)&&M.value.isControlFunction||Ye(M.value)&&ad(M.value.type,M.value))??!1,g=$t({expr:_,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:h,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let y=[],v=0;for(let M=0;M<o.implicitParameters.length;M++){let N=o.implicitParameters[M];if(G(N.type)){let O=t.implicitArgs?.[v];(O&&ee(O.value)?O.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v,label:N.label,type:N.type,fromSpread:!1}),v+=1}else if(N.isEffectRowSpread){let O=N.type;if(D(O)){let ne=Y(c,N.label).at(-1)?.value?.[0];if(ne&&R(ne)&<(ne.value))O=ne.value;else{let j=qt(c,O);j&&(O=j)}}if(lt(O)){for(let Q=0;Q<O.implicitParameters.length;Q++){let ne=O.implicitParameters[Q];if(G(ne.type)){let j=t.implicitArgs?.[v+Q];(j&&ee(j.value)?j.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v+Q,label:ne.label,type:ne.type,fromSpread:!0})}else if(Ce(ne.type)){let j=t.implicitArgs?.[v+Q],K=j&&Ye(j.value)?j.value:void 0,te=[],$e=(X,re,ce)=>{for(let Me=0;Me<X.fields.length;Me++){let Oe=X.fields[Me];if(G(Oe.type)){let he=ce?.fields[Me];if(he&&ee(he)&&he.isControlFunction){let Ke=he.specializedType??Oe.type;te.push({path:[...re,Oe.label],type:Ke})}}else if(Ce(Oe.type)){let he=ce?.fields[Me];$e(Oe.type,[...re,Oe.label],he&&Ye(he)?he:void 0)}}};$e(ne.type,[],K);for(let X of te)y.push({handlerArgIndex:v+Q,label:ne.label,type:X.type,fromSpread:!0,effectFieldPath:X.path})}}v+=O.implicitParameters.length}else v+=1}else if(Ce(N.type)){let O=[],Q=t.implicitArgs?.[v],ne=(j,K,te)=>{for(let $e=0;$e<j.fields.length;$e++){let X=j.fields[$e];if(G(X.type)){let re=te?.fields[$e];if(re&&ee(re)&&re.isControlFunction){let ce=re.specializedType??X.type;O.push({path:[...K,X.label],type:ce})}}else if(Ce(X.type)){let re=te?.fields[$e];ne(X.type,[...K,X.label],re&&Ye(re)?re:void 0)}}};ne(N.type,[],Q&&Ye(Q.value)?Q.value:void 0);for(let j of O)y.push({handlerArgIndex:v,label:N.label,type:j.type,fromSpread:!1,effectFieldPath:j.path});v+=1}else v+=1}let T=[];for(let M of y){let N=id(g,M.label,M.type,!0,M.effectFieldPath);if(N.hasEffects){let O=t.implicitArgs?.[M.handlerArgIndex],Q,ne=M.effectFieldPath;if(O&&ee(O.value))Q=O.value;else if(O&&Ye(O.value)&&ne&&ne.length>0){let j=O.value;for(let K of ne){if(!Ye(j)){j=void 0;break}let te=j.type.fields.findIndex($e=>$e.label===K);if(te<0||!j.fields[te]){j=void 0;break}j=j.fields[te]}j&&ee(j)&&(Q=j)}if(Q){let j=Q,K=M.type,te=!j.body.$;if(!te&&j.isControlFunction&&F(j.body)&&j.body.args.length>0&&!j.body.args[0]?.$&&(te=!0),te&&G(K)&&K.forallParameters.length>0&&N.effectCallPoints.length>0){let $e=new Map,X=K.return.type,re=N.effectCallPoints[0].operationResultType;if(D(X)&&$e.set(X.name,re),$e.size===0&&K.forallParameters.length===1){let ie=K.forallParameters[0];$e.set(ie.label,re)}let ce=Ne(j.body),Me=j.body.$?.env??c;Me=xe(Me);for(let ie of K.forallParameters){let Z=$e.get(ie.label);Z&&(Me=fe({env:Me,variable:{name:ie.label,type:ie.type,isCompileTimeOnly:!0,value:[J(Z)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let Oe=j.specializedType??j.type,he=j.definitionSiteEnclosingFunctionType?.return.type??Hn(),Ke={...i,expectedType:void 0,enclosingFunctionReturnType:he,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:Oe,value:j,evaluationEnv:Me}};try{let ie=ci({expr:ce,env:Me,context:Ke}),Z=Oe.parameters.map(le=>{if(le.isCompileTimeOnly)return le;if(D(le.type)){let ye=$e.get(le.type.name);if(ye)return{...le,type:ye}}return le}),_e=Oe.return.type;if(D(_e)){let le=$e.get(_e.name);le&&(_e=le)}let ae={...Oe,parameters:Z,return:{...Oe.return,type:_e}},be={...j,body:ie,specializedType:ae};N.handlerValue=be,N.effectParameterType=ae;for(let le of N.effectCallPoints)le.isTransitiveEffectCall&&(le.operationArgTypes=le.operationArgTypes.map(ye=>D(ye)?$e.get(ye.name)??ye:ye))}catch(ie){if(F(j.body)&&j.body.args.length>0&&!j.body.args[0]?.$)throw ie;N.handlerValue=j}}else N.handlerValue=j}else O&&(N.handlerValue=O.value);T.push({analysis:N,ctlParam:M})}}if(T.length===1)g.$.effectAnalysis=T[0].analysis;else if(T.length>1){let M=[],N=new Map,O=new Map,Q=[];for(let K=0;K<T.length;K++){let{analysis:te}=T[K];Q.push({effectParameterName:te.effectParameterName,effectParameterType:te.effectParameterType,effectFieldPath:te.effectFieldPath,handlerValue:te.handlerValue,operationArgTypes:te.effectCallPoints.length>0?te.effectCallPoints[0].operationArgTypes:[],operationResultType:te.effectCallPoints.length>0?te.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let $e of te.effectCallPoints)M.push({...$e,effectIndex:K});for(let $e of te.capturedVariables)N.has($e.id)||N.set($e.id,$e);for(let[$e,X]of te.variableIdRemapping)O.set($e,X)}if(F(g)&&E(g,V.begin)){let K=g.args,te=new Map;for(let X=0;X<K.length;X++)te.set(K[X],X);let $e=X=>{for(let re=0;re<K.length;re++)if(Ql(K[re],X.expr))return re;return 999};M.sort((X,re)=>$e(X)-$e(re))}for(let K=0;K<M.length;K++)M[K].index=K;let ne=T[0].analysis,j={effectCallPoints:M,capturedVariables:Array.from(N.values()),hasEffects:!0,variableIdRemapping:O,effectParameterName:ne.effectParameterName,effectParameterType:ne.effectParameterType,effectFieldPath:ne.effectFieldPath,handlerValue:ne.handlerValue,effectHandlerInfos:Q};g.$.effectAnalysis=j}let $=[],C=M=>{if(R(M)){let N=M.value;if(N.id)return`${De(M)}_id${N.id}`}return ee(M)?`fn_${M.funcId}`:De(M)};o.forallParameters.forEach((M,N)=>{if(N<t.forallArgs.length){let O=t.forallArgs[N];$.push(oe(C(O.value)))}else{let O=M.label,Q=Y(n,O);Q.length>0&&Q[Q.length-1]?.value?.[0]?$.push(oe(C(Q[Q.length-1].value[0]))):$.push("unknown")}}),o.parameters.forEach((M,N)=>{if(M.isCompileTimeOnly&&N<t.args.length){let O=t.args[N];O?$.push(oe(C(O.value))):$.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(M=>{$.push(oe(C(M.value)))}),s.forEach((M,N)=>{let O=M.type;(O.id||me(O))&&$.push(`rtparam${N}_${oe(A(O))}_id${O.id}`)});let L=$.join("_"),b=[];for(let M of o.implicitParameters)if(M.isEffectRowSpread){let N=M.type;if(D(N)){if(t.forallArgs){for(let O=0;O<o.forallParameters.length;O++)if(o.forallParameters[O].label===N.name&&O<t.forallArgs.length){let ne=t.forallArgs[O].value;R(ne)&<(ne.value)&&(N=ne.value);break}}if(D(N)&&N.resolvedConcreteType&<(N.resolvedConcreteType)&&(N=N.resolvedConcreteType),D(N)){let O=Y(c,N.name);if(O.length>0){let ne=O[O.length-1].value?.[0];ne&&R(ne)&<(ne.value)&&(N=ne.value)}}}lt(N)&&b.push(...N.implicitParameters)}else Ce(M.type)&&b.push(M);let S=Ur({forallParameters:[],parameters:s,implicitParameters:b.length>0?b:void 0,variadicParameter:void 0,return_:{...o.return,type:p},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),I={...e,specializedType:S,body:g,isControlFunction:e.isControlFunction||ur(g),funcId:`${e.funcId}_${L}`,funcName:`${e.funcName}_${L}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},z={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:I,env:g.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,z],I}function rv({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){let i=e.type,o=r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=e.definitionSiteEnclosingFunctionType?.return.type??Hn(),s=oe(A(o)),l=e.specializedFunctionCaches.find(y=>y.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=xe(t);for(let y of n.frames)for(let v of y.variables){if(!v.isCompileTimeOnly||Y(u,v.name).length>0)continue;let{env:$}=fe({env:u,variable:{...v},allowVariableShadowing:!0});u=$}for(let y of i.forallParameters){let v=o,{env:T}=fe({env:u,variable:{name:y.label,type:y.type,isCompileTimeOnly:!0,value:[J(v)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=T}let c=Ne(e.body),_={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},p=ci({expr:c,env:u,context:_}),f={...e,body:p,isControlFunction:e.isControlFunction||ur(p),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},d=new Set(i.forallParameters.map(y=>y.type)),h=y=>D(y)&&d.has(y)?o:y,g=Ur({forallParameters:[],parameters:i.parameters.map(y=>({...y,type:h(y.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:h(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return f.specializedType=g,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:f,env:p.$?.env??u}],f}function iv({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let i=ks(e);for(let o of i){if(Ie(o)||Jt(o)||o.resolvedConcreteType||o.requiredTraits&&o.requiredTraits.length>0)continue;if(!Y(n,o.name).length){let s=$n(n,()=>!0),l=!1;for(let u of s)if(R(u.value?.[0])){let c=u.value[0].value,_=ks(c);for(let p of _)if(p.name===o.name){l=!0;break}if(l)break}if(l)continue;throw m({token:t?.token??se,errorMessage:`Failed to infer the function call return type.
|
|
11239
|
-
Please consider providing the expected type.`})}}}function
|
|
11240
|
-
${w(a)}`});i=_.$.env;let p=_.$.type,f=ds({concreteType:t,argType:p,env:i});if(!f)throw m({token:e.func.token,errorMessage:`Type "${A(t)}" does not implement Index(${A(p)}).`});let d=f.type,h=d.return.type;if(!Ee(h))throw m({token:e.func.token,errorMessage:`Index method must return a pointer type, got: ${A(h)}`});let g=h.childType,y=W(g,{env:i,context:o});return ue(y)&&(y.isRuntimeOnly=!0),{value:y,type:g,ptrType:h,indexMethodType:d,indexMethodValue:f.value,callerEnv:i}}function
|
|
11241
|
-
${w(e)}`});let s=a.$.env,l=a.$.type,u=a.$.value,{isRange:c,isInclusive:_}=
|
|
11238
|
+
Please use explicit using() to disambiguate.`});let je=Fe[Fe.length-1],Be=je.value?.[0];if(!Be)throw m({token:r?.token??e?.token??se,errorMessage:`The "given" variable "${je.name}" has no compile-time value.`});O.push({value:Be,parameterType:ae,argType:je.type});let{env:Je}=fe({env:b,variable:{name:Z.label,type:ae,isCompileTimeOnly:!0,isImplicit:!0,value:[Be],token:Z.exprs.labelExpr?.token??se,initializedAtToken:Z.exprs.labelExpr?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Je}}let Q={args:p,forallArgs:_,implicitArgs:O,variadicArgs:M},ne;if(n.return.isCompileTimeOnly)if(u)ne=W(I,{variableName:n.return.label,env:n.env,context:a});else if(ee(t)){let{value:ie,callerEnv:Z,calleeEnv:_e}=Hr({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:Q,callerEnv:o,calleeEnv:b,context:{...a}});ne=ie,I=ie.type,o=Z,b=_e}else{let ie=Xe(I)&&I.level===0,Z=`${n.id}_return_sometype`;if(ie)if(a.expectedType?.type)ne=J(a.expectedType.type);else if(a.isEvaluatingFunctionType){let _e=Vn(I,n.return.label,{id:Z,env:b,context:a});_e.functionApplication=e;let ae=qt(b,_e);ne=J(ae)}else throw m({token:e?.token??r?.token??se,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else ne=W(I,{variableName:n.return.label,env:n.env,context:a})}ov({returnType:I,env:b,expr:e,context:a});let j,K=a.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&ee(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&ee(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,te=Q.implicitArgs?.some(ie=>ue(ie.value)),$e=te&&!Q.implicitArgs?.some(ie=>ue(ie.value)&&!Ce(ie.parameterType)),X=Q.args.some(ie=>ie.argType&&D(ie.argType)),re=$e&&X,ce=(()=>{if(!te||!n.implicitParameters.some(ae=>ae.isEffectRowSpread))return!1;let Z=0;for(let ae of n.implicitParameters)ae.isEffectRowSpread||Z++;let _e=Q.implicitArgs??[];for(let ae=0;ae<Z&&ae<_e.length;ae++)if(ue(_e[ae].value))return!1;return!0})(),Oe=Xn(n)&&!hr(n)&&n.implicitParameters.some(ie=>Ce(ie.type)?ie.type.fields.some(Z=>G(Z.type)&&Z.type.forallParameters.length===0):!!ie.isEffectRowSpread);if(!l&&!Oe&&t&&ee(t)&&!t.isControlFunction&&Xn(n)&&!K&&(!te||re||ce)){if(j=rv({originalFunction:t,argValues:Q,calleeEnv:b,callerEnv:o,context:a}),j&&D(I)){let ie=j.body?.$?.type;ie&&!D(ie)&&(I=ie,j.specializedType&&(j.specializedType={...j.specializedType,return:{...j.specializedType.return,type:ie}}))}if(j){let ie=new Set,Z=0;for(let _e=0;_e<n.parameters.length;_e++)if(!n.parameters[_e].isCompileTimeOnly){let le=Q.args[_e]?.value;le&&ee(le)&&le.type.implicitParameters.some(ye=>G(ye.type)||Ce(ye.type))&&ie.add(Z),Z++}if(ie.size>0)for(let _e=f.length-1;_e>=0;_e--)ie.has(_e)&&f.splice(_e,1)}}if(!l&&t&&ee(t)&&t.isControlFunction&&n.forallParameters.length>0&&!j&&(j=iv({originalFunction:t,argValues:Q,calleeEnv:b,callerEnv:o,context:a}),j&&D(I))){let ie=j.body?.$?.type;ie&&!D(ie)&&(I=ie,j.specializedType&&(j.specializedType={...j.specializedType,return:{...j.specializedType.return,type:ie}}))}let he=uo(o),Ke;if(he.length>0){let ie=tv({variablesToDrop:he,env:o,context:a});Ke=ie.deferredDropExpressions,o=ie.env}return{returnType:I,calleeEnv:b,callerEnv:o,pathCollection:N,argValues:Q,returnValue:ne,specializedFunctionValue:j,runtimeArgExprsInOrder:f,deferredDropExpressions:Ke}}function rv({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){if(fs){xr.specializeCount++;let M=e.funcName??e.funcId;xr.specializeNames.set(M,(xr.specializeNames.get(M)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(M=>M.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(M=>M.value)),o.parameters.forEach((M,N)=>{let O=t.args[N];if(M.isCompileTimeOnly)O.value&&a.push(O.value);else if(O.value&&ee(O.value)&&O.value.type.implicitParameters.some(ne=>G(ne.type)||Ce(ne.type)))O.value&&a.push(O.value);else{let j=D(O.argType)&&O.argType.resolvedConcreteType&&!Ie(O.argType)?O.argType.resolvedConcreteType:O.argType;s.push({...M,type:j})}});let l=s.map(M=>M.type),u=e.specializedFunctionCaches.find(M=>M.compileTimeArgValues.length===a.length&&M.compileTimeArgValues.every((Q,ne)=>{let j=a[ne];return Ot({value:Q,env:M.env},{value:j,env:r})})?M.runtimeParameterTypes.length===l.length&&M.runtimeParameterTypes.every((Q,ne)=>{let j=l[ne];return q({type:Q,env:M.env},{type:j,env:r},!0)}):!1);if(u)return fs&&xr.cacheHitCount++,u.specializedFunction;fs&&xr.cacheMissCount++;let c=n;for(let M of r.frames)for(let N of M.variables){if(!N.isCompileTimeOnly||Y(c,N.name).length>0)continue;let{env:Q}=fe({env:c,variable:{...N},allowVariableShadowing:!0});c=Q}for(let M of s){let N=Y(c,M.label);if(N.length>0){let O=N[N.length-1],Q={...O,value:void 0};c=qe(c,O,Q)}}let _=Ne(e.body),{returnType:p,calleeEnv:f}=Di({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=f;let d=i.enclosingFunctionReturnType,h=t.implicitArgs?.some(M=>ee(M.value)&&M.value.isControlFunction||Ye(M.value)&&sd(M.value.type,M.value))??!1,g=$t({expr:_,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:h,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let y=[],v=0;for(let M=0;M<o.implicitParameters.length;M++){let N=o.implicitParameters[M];if(G(N.type)){let O=t.implicitArgs?.[v];(O&&ee(O.value)?O.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v,label:N.label,type:N.type,fromSpread:!1}),v+=1}else if(N.isEffectRowSpread){let O=N.type;if(D(O)){let ne=Y(c,N.label).at(-1)?.value?.[0];if(ne&&R(ne)&<(ne.value))O=ne.value;else{let j=qt(c,O);j&&(O=j)}}if(lt(O)){for(let Q=0;Q<O.implicitParameters.length;Q++){let ne=O.implicitParameters[Q];if(G(ne.type)){let j=t.implicitArgs?.[v+Q];(j&&ee(j.value)?j.value:void 0)?.isControlFunction&&y.push({handlerArgIndex:v+Q,label:ne.label,type:ne.type,fromSpread:!0})}else if(Ce(ne.type)){let j=t.implicitArgs?.[v+Q],K=j&&Ye(j.value)?j.value:void 0,te=[],$e=(X,re,ce)=>{for(let Me=0;Me<X.fields.length;Me++){let Oe=X.fields[Me];if(G(Oe.type)){let he=ce?.fields[Me];if(he&&ee(he)&&he.isControlFunction){let Ke=he.specializedType??Oe.type;te.push({path:[...re,Oe.label],type:Ke})}}else if(Ce(Oe.type)){let he=ce?.fields[Me];$e(Oe.type,[...re,Oe.label],he&&Ye(he)?he:void 0)}}};$e(ne.type,[],K);for(let X of te)y.push({handlerArgIndex:v+Q,label:ne.label,type:X.type,fromSpread:!0,effectFieldPath:X.path})}}v+=O.implicitParameters.length}else v+=1}else if(Ce(N.type)){let O=[],Q=t.implicitArgs?.[v],ne=(j,K,te)=>{for(let $e=0;$e<j.fields.length;$e++){let X=j.fields[$e];if(G(X.type)){let re=te?.fields[$e];if(re&&ee(re)&&re.isControlFunction){let ce=re.specializedType??X.type;O.push({path:[...K,X.label],type:ce})}}else if(Ce(X.type)){let re=te?.fields[$e];ne(X.type,[...K,X.label],re&&Ye(re)?re:void 0)}}};ne(N.type,[],Q&&Ye(Q.value)?Q.value:void 0);for(let j of O)y.push({handlerArgIndex:v,label:N.label,type:j.type,fromSpread:!1,effectFieldPath:j.path});v+=1}else v+=1}let T=[];for(let M of y){let N=od(g,M.label,M.type,!0,M.effectFieldPath);if(N.hasEffects){let O=t.implicitArgs?.[M.handlerArgIndex],Q,ne=M.effectFieldPath;if(O&&ee(O.value))Q=O.value;else if(O&&Ye(O.value)&&ne&&ne.length>0){let j=O.value;for(let K of ne){if(!Ye(j)){j=void 0;break}let te=j.type.fields.findIndex($e=>$e.label===K);if(te<0||!j.fields[te]){j=void 0;break}j=j.fields[te]}j&&ee(j)&&(Q=j)}if(Q){let j=Q,K=M.type,te=!j.body.$;if(!te&&j.isControlFunction&&F(j.body)&&j.body.args.length>0&&!j.body.args[0]?.$&&(te=!0),te&&G(K)&&K.forallParameters.length>0&&N.effectCallPoints.length>0){let $e=new Map,X=K.return.type,re=N.effectCallPoints[0].operationResultType;if(D(X)&&$e.set(X.name,re),$e.size===0&&K.forallParameters.length===1){let ie=K.forallParameters[0];$e.set(ie.label,re)}let ce=Ne(j.body),Me=j.body.$?.env??c;Me=xe(Me);for(let ie of K.forallParameters){let Z=$e.get(ie.label);Z&&(Me=fe({env:Me,variable:{name:ie.label,type:ie.type,isCompileTimeOnly:!0,value:[J(Z)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let Oe=j.specializedType??j.type,he=j.definitionSiteEnclosingFunctionType?.return.type??Hn(),Ke={...i,expectedType:void 0,enclosingFunctionReturnType:he,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:Oe,value:j,evaluationEnv:Me}};try{let ie=ci({expr:ce,env:Me,context:Ke}),Z=Oe.parameters.map(le=>{if(le.isCompileTimeOnly)return le;if(D(le.type)){let ye=$e.get(le.type.name);if(ye)return{...le,type:ye}}return le}),_e=Oe.return.type;if(D(_e)){let le=$e.get(_e.name);le&&(_e=le)}let ae={...Oe,parameters:Z,return:{...Oe.return,type:_e}},be={...j,body:ie,specializedType:ae};N.handlerValue=be,N.effectParameterType=ae;for(let le of N.effectCallPoints)le.isTransitiveEffectCall&&(le.operationArgTypes=le.operationArgTypes.map(ye=>D(ye)?$e.get(ye.name)??ye:ye))}catch(ie){if(F(j.body)&&j.body.args.length>0&&!j.body.args[0]?.$)throw ie;N.handlerValue=j}}else N.handlerValue=j}else O&&(N.handlerValue=O.value);T.push({analysis:N,ctlParam:M})}}if(T.length===1)g.$.effectAnalysis=T[0].analysis;else if(T.length>1){let M=[],N=new Map,O=new Map,Q=[];for(let K=0;K<T.length;K++){let{analysis:te}=T[K];Q.push({effectParameterName:te.effectParameterName,effectParameterType:te.effectParameterType,effectFieldPath:te.effectFieldPath,handlerValue:te.handlerValue,operationArgTypes:te.effectCallPoints.length>0?te.effectCallPoints[0].operationArgTypes:[],operationResultType:te.effectCallPoints.length>0?te.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let $e of te.effectCallPoints)M.push({...$e,effectIndex:K});for(let $e of te.capturedVariables)N.has($e.id)||N.set($e.id,$e);for(let[$e,X]of te.variableIdRemapping)O.set($e,X)}if(F(g)&&E(g,V.begin)){let K=g.args,te=new Map;for(let X=0;X<K.length;X++)te.set(K[X],X);let $e=X=>{for(let re=0;re<K.length;re++)if(Zl(K[re],X.expr))return re;return 999};M.sort((X,re)=>$e(X)-$e(re))}for(let K=0;K<M.length;K++)M[K].index=K;let ne=T[0].analysis,j={effectCallPoints:M,capturedVariables:Array.from(N.values()),hasEffects:!0,variableIdRemapping:O,effectParameterName:ne.effectParameterName,effectParameterType:ne.effectParameterType,effectFieldPath:ne.effectFieldPath,handlerValue:ne.handlerValue,effectHandlerInfos:Q};g.$.effectAnalysis=j}let $=[],C=M=>{if(R(M)){let N=M.value;if(N.id)return`${De(M)}_id${N.id}`}return ee(M)?`fn_${M.funcId}`:De(M)};o.forallParameters.forEach((M,N)=>{if(N<t.forallArgs.length){let O=t.forallArgs[N];$.push(oe(C(O.value)))}else{let O=M.label,Q=Y(n,O);Q.length>0&&Q[Q.length-1]?.value?.[0]?$.push(oe(C(Q[Q.length-1].value[0]))):$.push("unknown")}}),o.parameters.forEach((M,N)=>{if(M.isCompileTimeOnly&&N<t.args.length){let O=t.args[N];O?$.push(oe(C(O.value))):$.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(M=>{$.push(oe(C(M.value)))}),s.forEach((M,N)=>{let O=M.type;(O.id||me(O))&&$.push(`rtparam${N}_${oe(A(O))}_id${O.id}`)});let L=$.join("_"),b=[];for(let M of o.implicitParameters)if(M.isEffectRowSpread){let N=M.type;if(D(N)){if(t.forallArgs){for(let O=0;O<o.forallParameters.length;O++)if(o.forallParameters[O].label===N.name&&O<t.forallArgs.length){let ne=t.forallArgs[O].value;R(ne)&<(ne.value)&&(N=ne.value);break}}if(D(N)&&N.resolvedConcreteType&<(N.resolvedConcreteType)&&(N=N.resolvedConcreteType),D(N)){let O=Y(c,N.name);if(O.length>0){let ne=O[O.length-1].value?.[0];ne&&R(ne)&<(ne.value)&&(N=ne.value)}}}lt(N)&&b.push(...N.implicitParameters)}else Ce(M.type)&&b.push(M);let S=Ur({forallParameters:[],parameters:s,implicitParameters:b.length>0?b:void 0,variadicParameter:void 0,return_:{...o.return,type:p},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),I={...e,specializedType:S,body:g,isControlFunction:e.isControlFunction||ur(g),funcId:`${e.funcId}_${L}`,funcName:`${e.funcName}_${L}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},z={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:I,env:g.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,z],I}function iv({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){let i=e.type,o=r.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=e.definitionSiteEnclosingFunctionType?.return.type??Hn(),s=oe(A(o)),l=e.specializedFunctionCaches.find(y=>y.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=xe(t);for(let y of n.frames)for(let v of y.variables){if(!v.isCompileTimeOnly||Y(u,v.name).length>0)continue;let{env:$}=fe({env:u,variable:{...v},allowVariableShadowing:!0});u=$}for(let y of i.forallParameters){let v=o,{env:T}=fe({env:u,variable:{name:y.label,type:y.type,isCompileTimeOnly:!0,value:[J(v)],token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=T}let c=Ne(e.body),_={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},p=ci({expr:c,env:u,context:_}),f={...e,body:p,isControlFunction:e.isControlFunction||ur(p),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},d=new Set(i.forallParameters.map(y=>y.type)),h=y=>D(y)&&d.has(y)?o:y,g=Ur({forallParameters:[],parameters:i.parameters.map(y=>({...y,type:h(y.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:h(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return f.specializedType=g,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:f,env:p.$?.env??u}],f}function ov({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let i=ws(e);for(let o of i){if(Ie(o)||Jt(o)||o.resolvedConcreteType||o.requiredTraits&&o.requiredTraits.length>0)continue;if(!Y(n,o.name).length){let s=$n(n,()=>!0),l=!1;for(let u of s)if(R(u.value?.[0])){let c=u.value[0].value,_=ws(c);for(let p of _)if(p.name===o.name){l=!0;break}if(l)break}if(l)continue;throw m({token:t?.token??se,errorMessage:`Failed to infer the function call return type.
|
|
11239
|
+
Please consider providing the expected type.`})}}}function Zl(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(Zl(e.func,t))return!0;for(let n of e.args)if(Zl(n,t))return!0}return!1}function Jl({concreteType:e,env:t}){let n=[];if(e.trait)for(let i of e.trait.fields){if(i.label===""&&i.assignedValue&&mt(i.assignedValue)){let o=i.assignedValue,a=o.type,s=a.fields.findIndex(l=>l.label==="index"&&G(l.type));if(s>=0){let l=a.fields[s];if(G(l.type)){let u=o.fields[s],c=l.type;ee(u)&&u.specializedType&&(c=u.specializedType),n.push({type:c,value:u})}}}i.label==="index"&&G(i.type)&&n.push({type:i.type,value:i.assignedValue})}let r=jn({concreteType:e,methodName:"index",env:t});return n.push(...r),n}function ds({concreteType:e,argType:t,env:n}){let r=Jl({concreteType:e,env:n});if(r.length!==0)for(let i of r){let o=i.type;if(o.parameters.length!==2)continue;let a=o.parameters[0],s=o.parameters[1];if(Ee(a.type)&&q({type:s.type,env:n},{type:t,env:n})&&Ee(o.return.type))return i}}function _d({expr:e,valueType:t,selfValue:n,argExprs:r,callerEnv:i,context:o}){if(r.length!==1)throw m({token:e.func.token,errorMessage:`Index trait expects exactly 1 argument, got ${r.length}.`});let a=r[0],s=n&&Fn(n)?n:void 0,l=n&&mi(n)?n:void 0,u=n&&we(n)?n.value:void 0;if(!!(s||l||u!==void 0)&&(s||l)&&(ke(t)||Ge(t))){let v=uv({argExpr:a,arrayValue:s,sliceValue:l,arrayType:t,env:i,context:o});if(v){let T=ld({concreteType:t,argExpr:a,callerEnv:i,context:o});return T&&(v.indexMethodType=T.fnType,v.indexMethodValue=T.value),v}}if(u!==void 0){let v=pv({argExpr:a,strValue:u,env:i,context:o}),T=ld({concreteType:t,argExpr:a,callerEnv:i,context:o});return T&&(v.indexMethodType=T.fnType,v.indexMethodValue=T.value),v}if(n&&!ue(n)&&!s&&!l&&u===void 0){let v=sv({expr:e,argExpr:a,selfValue:n,valueType:t,callerEnv:i,context:o});if(v)return v}let _=x({expr:a,env:i,context:{...o,expectedType:void 0}});if(!_.$)throw m({token:a.token,errorMessage:`Failed to evaluate index argument:
|
|
11240
|
+
${w(a)}`});i=_.$.env;let p=_.$.type,f=ds({concreteType:t,argType:p,env:i});if(!f)throw m({token:e.func.token,errorMessage:`Type "${A(t)}" does not implement Index(${A(p)}).`});let d=f.type,h=d.return.type;if(!Ee(h))throw m({token:e.func.token,errorMessage:`Index method must return a pointer type, got: ${A(h)}`});let g=h.childType,y=W(g,{env:i,context:o});return ue(y)&&(y.isRuntimeOnly=!0),{value:y,type:g,ptrType:h,indexMethodType:d,indexMethodValue:f.value,callerEnv:i}}function ld({concreteType:e,argExpr:t,callerEnv:n,context:r}){try{let i=x({expr:t,env:n,context:{...r,expectedType:void 0}});if(!i.$)return;let o=ds({concreteType:e,argType:i.$.type,env:i.$.env});return o?{fnType:o.type,value:o.value}:void 0}catch{return}}function av({concreteType:e,argType:t,env:n}){let r=Jl({concreteType:e,env:n});for(let i of r){let o=i.type;if(o.parameters.length!==2)continue;let a=o.parameters[0],s=o.parameters[1];if(Ee(a.type)&&q({type:s.type,env:n},{type:t,env:n})&&Ee(o.return.type)&&a.isCompileTimeOnly&&s.isCompileTimeOnly)return i}}function sv({expr:e,argExpr:t,selfValue:n,valueType:r,callerEnv:i,context:o}){let a=x({expr:t,env:i,context:{...o,expectedType:void 0}});if(!a.$||!a.$.value)return;let s=a.$.type,l=a.$.value;i=a.$.env;let u=av({concreteType:r,argType:s,env:i});if(!u||!ee(u.value))return;let c=u.type,_=u.value,p=It(r),f=Zr(p,[n]),d=xe(c.env),h=c.parameters[0],g=c.parameters[1],y=e.func.token??se;({env:d}=fe({env:d,variable:{name:h.label,type:h.type,value:[f],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:y,consumedAtToken:void 0,token:y}})),{env:d}=fe({env:d,variable:{name:g.label,type:g.type,value:[l],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:y,consumedAtToken:void 0,token:y}});let v={...o,isValidatingFunctionDefinition:void 0},T=Hr({functionCalleeExpr:e.func,functionType:c,functionValue:_,argValues:{forallArgs:[],args:[{value:f,parameterType:h.type,argType:p},{value:l,parameterType:g.type,argType:s}],variadicArgs:[]},callerEnv:i,calleeEnv:d,context:v}),$=T.value,C=c.return.type;if(!Ee(C))return;let L=C.childType;if(Yn($)){let S=$.targetValue[0],I,z;Fn(S)?(I=S.elements[$.targetIndex],z={kind:"array",arrayValue:S,index:$.targetIndex}):Pt(S)?(I=S.fields[$.targetIndex]??S,z={kind:"struct",structValue:S,fieldIndex:$.targetIndex}):pn(S)?(I=S.fields[$.targetIndex]??S,z={kind:"tuple",tupleValue:S,fieldIndex:$.targetIndex}):I=S;let M=ds({concreteType:r,argType:s,env:i});return{value:I,type:L,ptrType:C,indexMethodType:M?.type,indexMethodValue:M?.value,callerEnv:i,comptimeRef:z}}let b=ds({concreteType:r,argType:s,env:i});return{value:$,type:L,ptrType:C,indexMethodType:b?.type,indexMethodValue:b?.value,callerEnv:i,comptimeRef:T.comptimeRef}}function pd({concreteType:e,argExprs:t,callerEnv:n,_context:r}){if(t.length!==1)return!1;if(ke(e)||Ge(e))return!0;try{return Jl({concreteType:e,env:n}).length>0}catch{return!1}}function ud(e,t,n){let i=Y(t,e).find(l=>l.value?.[0]&&ee(l.value[0])&&G(l.type));if(!i||!i.value?.[0]||!ee(i.value[0]))return;let o=i.value[0],a=o.type,s=J(St());try{let{value:l}=Hr({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:s,parameterType:a.parameters[0].type,argType:s.type}],variadicArgs:[]},callerEnv:t,calleeEnv:t,context:n});if(R(l)&&pe(l.value))return l.value}catch{}}var cd=new WeakMap;function lv(e,t){let n=e.frames[0],r=cd.get(n);return r||(r={range:ud("Range",e,t),rangeInclusive:ud("RangeInclusive",e,t)},cd.set(n,r)),r}function fd(e,t,n){if(!pe(e))return{isRange:!1,isInclusive:!1};let{range:r,rangeInclusive:i}=lv(t,n);return i&&q({type:i,env:t},{type:e,env:t})?{isRange:!0,isInclusive:!0}:r&&q({type:r,env:t},{type:e,env:t})?{isRange:!0,isInclusive:!1}:{isRange:!1,isInclusive:!1}}function uv({argExpr:e,arrayValue:t,sliceValue:n,arrayType:r,env:i,context:o}){let a=x({expr:e,env:i,context:{...o,expectedType:void 0}});if(!a.$)throw m({token:e.token,errorMessage:`Failed to evaluate argument expression:
|
|
11241
|
+
${w(e)}`});let s=a.$.env,l=a.$.type,u=a.$.value,{isRange:c,isInclusive:_}=fd(l,i,o);return c?cv({argExpr:e,argValue:u,isInclusive:_,arrayValue:t,sliceValue:n,arrayType:r,callerEnv:s}):_v({argExpr:e,argValue:u,arrayValue:t,sliceValue:n,arrayType:r,callerEnv:s,context:o})}function cv({argExpr:e,argValue:t,isInclusive:n,arrayValue:r,sliceValue:i,arrayType:o,callerEnv:a}){let s=Pr(o.childType);if(!Pt(t))return;let l=t.fields[0],u=t.fields[1];if(!l||!u||!Ue(l)||!Ue(u))return;let c=l.value,_=u.value,p=typeof c=="bigint"?Number(c):c,f=(typeof _=="bigint"?Number(_):_)+(n?1:0);if(r){if(p<0||p>r.elements.length)throw m({token:e.token,errorMessage:`Slice start index out of bounds: ${p}. Expected index in range [0, ${r.elements.length}].`});if(f<p||f>r.elements.length)throw m({token:e.token,errorMessage:`Slice end index out of bounds: ${f}. Expected index in range [${p}, ${r.elements.length}].`});return{value:Bi(s,[r],p,f),type:s,ptrType:It(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:a}}if(i){let d=i.endIndex-i.startIndex;if(p<0||p>d)throw m({token:e.token,errorMessage:`Slice start index out of bounds: ${p}. Expected index in range [0, ${d}].`});if(f<p||f>d)throw m({token:e.token,errorMessage:`Slice end index out of bounds: ${f}. Expected index in range [${p}, ${d}].`});let h=i.startIndex+p,g=i.startIndex+f;return{value:Bi(s,i.sourceArray,h,g),type:s,ptrType:It(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:a}}}function _v({argExpr:e,argValue:t,arrayValue:n,sliceValue:r,arrayType:i,callerEnv:o,context:a}){let s=i.childType;if(Ue(t)){let l=t.value,u=typeof l=="bigint"?Number(l):l;if(n){if(u<0||u>=n.elements.length)throw m({token:e.token,errorMessage:`Array index out of bounds: ${u}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[u],type:s,ptrType:It(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o,index:u,comptimeRef:{kind:"array",arrayValue:n,index:u}}}if(r){let c=r.endIndex-r.startIndex;if(u<0||u>=c)throw m({token:e.token,errorMessage:`Slice index out of bounds: ${u}. Expected index in range [0, ${c-1}].`});let _=r.startIndex+u,p=r.sourceArray[0];return{value:p.elements[_],type:s,ptrType:It(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o,index:u,comptimeRef:{kind:"array",arrayValue:p,index:_}}}}else return t?{value:W(s,{env:o,context:a}),type:s,ptrType:It(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o}:{value:void 0,type:vt({type:s,env:o}),ptrType:It(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o}}function pv({argExpr:e,strValue:t,env:n,context:r}){let i=x({expr:e,env:n,context:{...r,expectedType:void 0}});if(!i.$||!i.$.value)throw m({token:e.token,errorMessage:"Failed to evaluate index argument for comptime string indexing"});let o=i.$.type,a=i.$.value,s=i.$.env,{isRange:l,isInclusive:u}=fd(o,n,r),c=bf({strValue:t,argValue:a,token:e.token,isRange:l,isInclusive:u}),_=c.type,p=It(_);return{value:c,type:_,ptrType:p,indexMethodType:void 0,indexMethodValue:void 0,callerEnv:s}}function dd({expr:e,env:t,context:n}){let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
|
|
11242
11242
|
${w(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Iso expects a type as argument, but got:
|
|
11243
|
-
${w(r)}`});let a=i.$.value.value,s=
|
|
11243
|
+
${w(r)}`});let a=i.$.value.value,s=rc(a,t);t=Du({isoType:s,env:t,context:n});let l=J(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function md({expr:e,env:t,context:n,isoType:r}){let i=e.args[0],o=x({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
|
|
11244
11244
|
${w(i)}`});t=o.$.env;let a=o.$?.variableName;if(a){let s=Y(t,a);if(s.length>0){let l=s[s.length-1];if(sr(l.type,new Set,t))throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because its type may form RC cycles.`});if(!l.isOwningTheRcValue)throw m({token:i.token,errorMessage:`Cannot isolate variable ${a} because it does not own its RC value.`});let c=t.frames.flatMap(_=>_.variables).filter(_=>_.isOwningTheSameRcValueAs?.id===l.id&&_.id!==l.id);if(c.length>0){let _=c.map(p=>p.name).join(", ");throw m({token:i.token,errorMessage:`Cannot isolate ${a}, also owned by: ${_}
|
|
11245
|
-
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=In(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},He(e,!0),e}function
|
|
11245
|
+
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=In(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},He(e,!0),e}function yd({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:i}){if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the module. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((l,u)=>({...l,assignedValue:o[u]}))};for(let l=0;l<t.fields.length;l++){let u=t.fields[l],c=!1,_;for(let p=0;p<n.length;p++){let f=n[p],d;if(F(f)&&E(f,":",2)){if(d=f.args[0],f=f.args[1],!B(d))throw m({token:d.token,errorMessage:`Expected identifier for label, got:
|
|
11246
11246
|
${w(d)}`});_=d.token.value}else throw m({token:f.token,errorMessage:`Expected member label, but got:
|
|
11247
11247
|
${w(f)}`});if(!t.fields.find(h=>h.label===_))throw m({token:d.token,errorMessage:`Module member with label "${_}" does not exist in the module type.`});if(u.label===_){if(c=!0,u.assignedValue)throw m({token:f.token,errorMessage:`Module member "${u.label}" already has a assigned value:
|
|
11248
11248
|
${De(u.assignedValue)}`});let h,g=u.exprs.typeExpr,y=u.exprs.defaultValueExpr;if(g){let L=x({expr:Ne(g),env:xe(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0,SelfModuleType:t}}).$?.value;if(!R(L))throw m({token:f.token,errorMessage:`Failed to evaluate the module member "${_}"`});h=L.value}else if(y){let L=x({expr:Ne(y),env:xe(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$?.value;if(!L)throw m({token:f.token,errorMessage:`Failed to evaluate the module member "${_}"`});h=L.type}else throw m({token:f.token,errorMessage:`Module member "${_}" has no type or default value or assigned value.`});let v=x({expr:f,env:r,context:{...i,expectedType:{type:h,env:r},ReceiverType:void 0,SelfType:void 0}}),T=v.$?.type;if(!T)throw m({token:f.token,errorMessage:`Failed to evaluate the module member "${_}"`});if(v.$?.env&&(r=v.$.env),!q({type:h,env:r},{type:T,env:r}))throw m({token:f.token,errorMessage:`Type mismatch for the module member "${_}":
|
|
11249
11249
|
Expected: ${A(h)}
|
|
11250
|
-
Got: ${A(T)}`});let $=v.$?.value;T.ioBuiltin&&(t.fields[l].type.ioBuiltin=T.ioBuiltin),ee($)&&($.funcId+=`_${u.label}`,!$.specializedType&&G(h)&&($.specializedType={...h,parameters:$.type.parameters,parametersFrame:$.type.parametersFrame})),o[l]=$,a.fields[l].assignedValue=$,f.$={env:r,type:T,value:$,pathCollection:[]},d&&(d.$=f.$);break}}if(!c){let p=u.defaultValue,f=u.assignedValue,d=f;if(!f&&p&&(d=p),!d)throw m({token:e.token,errorMessage:`Module member "${u.label}" is not provided and has no required/default value.`});o[l]=d,a.fields[l].assignedValue=d}}return{moduleValue:
|
|
11250
|
+
Got: ${A(T)}`});let $=v.$?.value;T.ioBuiltin&&(t.fields[l].type.ioBuiltin=T.ioBuiltin),ee($)&&($.funcId+=`_${u.label}`,!$.specializedType&&G(h)&&($.specializedType={...h,parameters:$.type.parameters,parametersFrame:$.type.parametersFrame})),o[l]=$,a.fields[l].assignedValue=$,f.$={env:r,type:T,value:$,pathCollection:[]},d&&(d.$=f.$);break}}if(!c){let p=u.defaultValue,f=u.assignedValue,d=f;if(!f&&p&&(d=p),!d)throw m({token:e.token,errorMessage:`Module member "${u.label}" is not provided and has no required/default value.`});o[l]=d,a.fields[l].assignedValue=d}}return{moduleValue:bu({...t},o),callerEnv:r}}function gd({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!Ee(e))return;let o=x({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${w(t)}`});let a=o.$.env,s=o.$.type;if(ht(s)&&(rr(e.childType)||Ui(e.childType))){let u=vt({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(!Ee(s))throw m({token:t.token,errorMessage:`Cannot cast ${A(s)} to ${A(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:k.__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 xa(n,l),{expr:n,env:a}}function hd({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!F(a)||!E(a,":=",2))throw m({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
|
|
11251
11251
|
${w(a)}`});let s=a.args[0],l=a.args[1];if(!B(s))throw m({token:s.token,errorMessage:`Expected identifier for associated type label, got:
|
|
11252
11252
|
${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&&!Xe(c.type))throw m({token:s.token,errorMessage:`Field "${u}" is not an associated type. Only associated type fields can be constrained with ":=".`});let _=x({expr:l,env:n,context:{...r}});if(!_.$||!R(_.$.value))throw m({token:l.token,errorMessage:`Expected type for associated type constraint "${u}", got:
|
|
11253
|
-
${w(l)}`});n=_.$.env,i.push({label:u,constraintType:_.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function
|
|
11253
|
+
${w(l)}`});n=_.$.env,i.push({label:u,constraintType:_.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function vd({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the trait. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((_,p)=>({..._,assignedValue:o[p]}))},s=i.ReceiverType,l=i.ReceiverType??a;if(!s)throw m({token:e.token,errorMessage:`Receiver type is undefined when implementing trait.
|
|
11254
11254
|
Please consider using "impl" to specify the receiver type explicitly, like:
|
|
11255
11255
|
|
|
11256
11256
|
// impl receiverType, traitImplementation
|
|
@@ -11268,12 +11268,12 @@ ${w(f)}`});if(f){let y=f.token.value,v=e.find(T=>T.label===y);if(v){if(v.assigne
|
|
|
11268
11268
|
${Ji(v)}`});_=v}else throw m({token:p.token,errorMessage:`Failed to find "${y}" in the type.`})}if(a.has(_))throw m({token:p.token,errorMessage:`Type member "${_.label}" is already implemented.`});let d=e.indexOf(_),h=x({expr:p,env:r,context:{...i,expectedType:{type:_.type,env:r}}});if(!h.$)throw m({token:p.token,errorMessage:`Failed to evaluate argument expression:
|
|
11269
11269
|
${w(p)}`});en(h,i),r=h.$.env;let g=h.$.type;if(hi(_.type,r)||(g=vt({type:g,expectedType:_.type,expr:h,env:r})),f&&(f.$=h.$),!q({type:_.type,env:r},{type:g,env:r}))throw m({token:p.token,errorMessage:`Type mismatch for type member "${_.label}":
|
|
11270
11270
|
Expected: ${A(_.type)}
|
|
11271
|
-
Got: ${A(g)}`});s[d]=h.$?.value,l[d]=h,a.add(_)}if(!o)for(let c=0;c<e.length;c++){let _=e[c];if(!a.has(_)){if(!_.defaultValue&&!_.assignedValue)throw m({token:t.token,errorMessage:`Type member "${_.label}" is not provided and has no default value or assigned value.`});s[c]=_.defaultValue??_.assignedValue,l[c]=_.exprs.defaultValueExpr??_.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function
|
|
11272
|
-
${w(o)}`});let C=x({expr:T,env:t,context:{...n,expectedType:void 0}}).$?.type;if(!C)throw m({token:T.token,errorMessage:"Expected to be evaluated."});let L=v;s=o,l
|
|
11273
|
-
`},...$.tokenAndErrorList],$.isAssertionError);return{...v,result:{kind:"error",error:$}}}else if((D(v.type)||Ae(v.type))&&cn(v.type)){let $=cn(v.type);try{let C=ui({functionValue:Co(v.value),functionType:$.isFn.callType,expr:Ne(e),functionCalleeExpr:o,argExprs:T.map(L=>Ne(L)),callerEnv
|
|
11274
|
-
`},...C.tokenAndErrorList],C.isAssertionError);return{...v,result:{kind:"error",error:C}}}}else{let $=v.value;if(R($)&&D($.value)&&$.value.recursiveTypeRef){let C=
|
|
11275
|
-
${w(N)}`});S.push(O.$.value.value)}let I=
|
|
11276
|
-
${R($)?A($.value):A(v.type)}`})}}}else if(ke(v.type)||Ge(v.type)||!R($)&&
|
|
11271
|
+
Got: ${A(g)}`});s[d]=h.$?.value,l[d]=h,a.add(_)}if(!o)for(let c=0;c<e.length;c++){let _=e[c];if(!a.has(_)){if(!_.defaultValue&&!_.assignedValue)throw m({token:t.token,errorMessage:`Type member "${_.label}" is not provided and has no default value or assigned value.`});s[c]=_.defaultValue??_.assignedValue,l[c]=_.exprs.defaultValueExpr??_.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function fv(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:i}=e.recursiveTypeRef,o=r.calledComptimeFunctionCaches.find(s=>s.argValues.length===i.length&&s.argValues.every((l,u)=>{let c=i[u];return R(l)&&R(c)?q({type:l.value,env:s.env},{type:c.value,env:t},!0):Ot({value:l,env:s.env},{value:c,env:t})}));if(o&&R(o.value)&&!(D(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n?.SelfType&&dt(n.SelfType)||n?.SelfType&&pe(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!R(s.value)||D(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&R(a.value))return a.value.value}function Kn({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(F(o)){let v=E(o,"."),T=x({expr:o,env:t,context:v?{...n}:{...n,expectedType:void 0}});if(o=T,o.$?.env&&(t=o.$.env),T.$?.type)l=[{type:T.$.type,value:T.$.value}];else if(F(T)&&E(T,".",2)){let $=T.args[0];s=T.args[1];let C=$.$?.type;if(!C)throw m({token:$.token,errorMessage:"Expected to be evaluated."});let L=$.$?.value,b=R(L);if(B(s)){let S=s.token.value;if(b){let I=L.value;l=xc({env:t,context:n,methodName:S,type:I}).map(M=>({type:M.type,value:M.value,args:a}))}else l=Cl({env:t,context:n,methodName:S,receiverType:C,isInfixOperatorCall:!1}).map(z=>{let M;if(z.needsPointerConversion){let N={tag:"Atom",token:$.token,$:void 0};N.token={...$.token,value:"&",type:"identifier"},M=[{tag:"FnCall",func:N,args:[$],token:$.token,$:void 0},...a]}else M=[$,...a];return{type:z.type,value:z.value,needsPointerConversion:z.needsPointerConversion,args:M}})}else{let S=x({expr:s,env:t,context:{...n}});S.$?.env&&(t=S.$?.env),s=S;let I=s.$?.type,z=s.$?.value;if(!I)throw m({token:s.token,errorMessage:"Expected to be a function."});l=[{type:I,value:z}],a=[$,...a]}}else throw m({token:o.token,errorMessage:`Expected type for function call, got ${w(T)}`})}else{let v=o.token.value;if(v==="_"){let T=n.expectedType;if(!T||D(T.type))return Kf({expr:e,env:t,context:n});l=[{type:Ft(T.type),value:J(T.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(mr(v)&&e.isInfix){let T=a[0];if(!T)throw m({token:o.token,errorMessage:`Expected first argument for operator, got:
|
|
11272
|
+
${w(o)}`});let C=x({expr:T,env:t,context:{...n,expectedType:void 0}}).$?.type;if(!C)throw m({token:T.token,errorMessage:"Expected to be evaluated."});let L=v;s=o,l=Cl({env:t,context:n,methodName:L,receiverType:C,isInfixOperatorCall:!0}).map(S=>({type:S.type,value:S.value,needsPointerConversion:S.needsPointerConversion}))}else if(v==="Call"&&n.SelfType){let T=J(n.SelfType);l=[{type:T.type,value:T}]}else{let T=x({expr:o,env:t,context:{...n}});if(o=T,!T.$)throw m({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(Ce(T.$.type)){let $=T.$.type,C=$.fields.findIndex(b=>b.label==="Call");if(C<0)throw m({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let L=$.fields[C];if(L.assignedValue){let b=L.assignedValue;pn(b)?l=b.fields.map(S=>({type:S.type,value:S})):l=[{type:b.type,value:b}]}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:T.$.type,value:T.$.value}]}}if(a.some(T=>B(T)&&T.token.value==="_")&&l.length===1&&ee(l[0].value)&&G(l[0].type)&&l[0].type.return.isCompileTimeOnly){let T=l[0].value,$=l[0].type,C=$.parameters;if(a.length!==C.length)throw m({token:o.token,errorMessage:`Partial application: expected ${C.length} argument(s), got ${a.length}`});let L=xe(t),b=`__pa_fn_${Re(t.modulePath)}`;{let{env:Q}=fe({env:L,variable:{name:b,type:$,isCompileTimeOnly:!0,value:[T],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});L=Q}let S=[],I=[];for(let Q=0;Q<a.length;Q++){let ne=a[Q],j=C[Q];if(B(ne)&&ne.token.value==="_"){let K=`__pa_${Q}_${Re(t.modulePath)}`;S.push({...j,label:K}),I.push({tag:"Atom",token:{type:"identifier",value:K,position:ne.token.position,modulePath:t.modulePath,inputString:t.inputString}})}else{let K=`__pa_cap_${Q}_${Re(t.modulePath)}`,te=x({expr:ne,env:L,context:{...n}});if(!te.$)throw m({token:ne.token,errorMessage:"Failed to evaluate partial application argument"});L=te.$.env;let{env:$e}=fe({env:L,variable:{name:K,type:te.$.type,isCompileTimeOnly:!0,value:te.$.value?[te.$.value]:void 0,token:ne.token,initializedAtToken:ne.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});L=$e,I.push({tag:"Atom",token:{type:"identifier",value:K,position:ne.token.position,modulePath:t.modulePath,inputString:t.inputString}})}}let z={tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:b,position:o.token.position,modulePath:t.modulePath,inputString:t.inputString}},args:I,token:o.token},M={id:`pa_frame_${Re(t.modulePath)}`,variables:S.map(Q=>({id:`pa_var_${Re(t.modulePath)}`,name:Q.label,type:Q.type,isCompileTimeOnly:!0,value:void 0,token:se,initializedAtToken:se,consumedAtToken:void 0,isOwningTheRcValue:!1,frameLevel:L.frames.length})),isBeginBlockFrame:!1,whereClauseConstraints:new Map},N=Ur({parameters:S,forallParameters:[],variadicParameter:void 0,return_:{...$.return},env:L,parametersFrame:M}),O={tag:"Function",type:N,body:z,frameLevel:L.frames.length-1,funcName:`partial_${T.funcName??"anon"}`,funcId:`partial_${Re(t.modulePath)}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};return e.$={env:t,type:N,value:O,pathCollection:[]},e}let u=l.length===1&&G(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!Xe(l[0].type.return.type)&&l[0].type.forallParameters.length===0,p=l.length===1&&(G(l[0].type)||(D(l[0].type)||Ae(l[0].type))&&!!cn(l[0].type))?l.map(v=>({...v,result:{kind:"function",result:void 0}})):l.map(v=>{let T=v.args??a;if(G(v.type))try{let $=ui({functionValue:Co(v.value),functionType:v.type,expr:Ne(e),functionCalleeExpr:o,argExprs:T.map(C=>Ne(C)),callerEnv:$l(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...v,result:{kind:"function",result:$}}}catch($){if($ instanceof kn&&$.kind==="overflow")throw pt([{token:e.token,errorMessage:`Failed to call the function:
|
|
11273
|
+
`},...$.tokenAndErrorList],$.isAssertionError);return{...v,result:{kind:"error",error:$}}}else if((D(v.type)||Ae(v.type))&&cn(v.type)){let $=cn(v.type);try{let C=ui({functionValue:Co(v.value),functionType:$.isFn.callType,expr:Ne(e),functionCalleeExpr:o,argExprs:T.map(L=>Ne(L)),callerEnv:$l(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...v,result:{kind:"function",result:C}}}catch(C){if(C instanceof kn&&C.kind==="overflow")throw pt([{token:e.token,errorMessage:`Failed to call the function:
|
|
11274
|
+
`},...C.tokenAndErrorList],C.isAssertionError);return{...v,result:{kind:"error",error:C}}}}else{let $=v.value;if(R($)&&D($.value)&&$.value.recursiveTypeRef){let C=fv($.value,t,n);C&&($=J(C),v.value=$,v.type=$.type)}if(R($)&&pe($.value))try{let C=ms({typeFields:$.value.fields,functionCalleeExpr:o,argExprs:T,callerEnv:t,context:{...n}});return{...v,result:{kind:"type",result:C}}}catch(C){return{...v,result:{kind:"error",error:C}}}else if(R($)&&ge($.value)){let C=$.value,L=C.variants.find(b=>b.name===C.selectedVariantName);if(L)try{let b=ms({typeFields:L.fields||[],functionCalleeExpr:o,argExprs:T,callerEnv:t,context:{...n}});return{...v,result:{kind:"type",result:b}}}catch(b){return{...v,result:{kind:"error",error:b}}}else return{...v,result:{kind:"error",error:m({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(R($)&&ot($.value))try{let C=ms({typeFields:$.value.fields,functionCalleeExpr:o,argExprs:T,callerEnv:t,context:{...n},isUnionType:!0});return{...v,result:{kind:"type",result:C}}}catch(C){return{...v,result:{kind:"error",error:C}}}else if(R($)&&Ce($.value)){let C=$.value;try{let L=yd({moduleExpr:o,moduleType:C,argExprs:T,callerEnv:t,context:{...n}});return{...v,result:{kind:"module-type",result:L}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&Le($.value)){let C=$.value;if(T.some(b=>F(b)&&E(b,":=",2)))try{let b=hd({traitExpr:o,traitType:C,argExprs:T,callerEnv:t,context:{...n}});return{...v,result:{kind:"trait-specialization",result:b}}}catch(b){return{...v,result:{kind:"error",error:b}}}try{let b=vd({traitExpr:o,traitType:C,argExprs:T,callerEnv:t,context:{...n}});return{...v,result:{kind:"trait-type",result:b}}}catch(b){return{...v,result:{kind:"error",error:b}}}}else if(R($)&&G($.value)){let C=$.value;try{return ed({expr:e,functionType:C,callerEnv:t,context:{...n}}),{...v,result:{kind:"function-type"}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&ke($.value)){let C=$.value;try{return Zf({expr:e,arrayType:C,argExprs:T,callerEnv:t,context:{...n}}),{...v,result:{kind:"array-type"}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&Tt($.value)){let C=$.value;try{return nd({expr:e,comptimeListType:C,argExprs:T,callerEnv:t,context:{...n}}),{...v,result:{kind:"array-type"}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&(D($.value)||Ae($.value))){let C=$.value,L=cn(C);if(L)try{return td({expr:e,fnModuleType:L,wrapperType:C,callerEnv:t,context:{...n}}),{...v,result:{kind:"closure-type"}}}catch(b){return{...v,result:{kind:"error",error:b}}}else if(D(C)&&C.kindFunctionType)try{let b=C.kindFunctionType,S=[];if(T.length!==b.parameters.length)throw m({token:o.token,errorMessage:`Type constructor "${C.name}" expects ${b.parameters.length} argument(s), got ${T.length}`});for(let M=0;M<T.length;M++){let N=T[M],O=x({expr:N,env:t,context:{...n}});if(!O.$)throw m({token:N.token,errorMessage:"Failed to evaluate HKT argument"});if(t=O.$.env,!R(O.$.value))throw m({token:N.token,errorMessage:`Expected type argument for type constructor "${C.name}", got:
|
|
11275
|
+
${w(N)}`});S.push(O.$.value.value)}let I=ac(C,S,b.return.type,t),z=J(I);return e.$={env:t,type:Ft(I),value:z,pathCollection:[]},{...v,result:{kind:"type",result:{values:[z],pathCollection:[],runtimeArgExprsInOrder:[],callerEnv:t}}}}catch(b){return{...v,result:{kind:"error",error:b}}}else if(D(C)&&C.recursiveTypeRef)try{let b=[];for(let S of T){let I=x({expr:S,env:t,context:{...n}});if(!I.$)throw m({token:S.token,errorMessage:"Failed to evaluate argument"});t=I.$.env,b.push(I)}return{...v,result:{kind:"type",result:{values:b.map(S=>S.$.value),pathCollection:[],runtimeArgExprsInOrder:b,callerEnv:t}}}}catch(b){return{...v,result:{kind:"error",error:b}}}else return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
|
|
11276
|
+
${R($)?A($.value):A(v.type)}`})}}}else if(ke(v.type)||Ge(v.type)||!R($)&&pd({concreteType:v.type,argExprs:T,callerEnv:t,_context:n})){try{let C=_d({expr:e,valueType:v.type,selfValue:v.value,argExprs:T,callerEnv:t,context:{...n}});return{...v,result:{kind:"index",result:C}}}catch{}if(ke(v.type)||Ge(v.type)){let L=v.type.childType;return{...v,result:{kind:"index",result:{value:void 0,type:L,ptrType:It(L),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:t}}}}return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Index trait dispatch failed for type: ${A(v.type)}`})}}}else if(R($)&&_a($.value)){let C=$.value;if(T.length!==1)return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${T.length}`})}};try{let L=df({targetType:C,argExpr:T[0],expr:e,callerEnv:t,context:{...n}});return L?{...v,result:{kind:"numeric-type",result:L}}:{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to convert to numeric type ${A(C)}`})}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&Ee($.value)){let C=$.value;if(T.length!==1)return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${T.length}`})}};try{let L=gd({targetType:C,argExpr:T[0],expr:e,callerEnv:t,context:{...n}});return L?{...v,result:{kind:"pointer-type",result:L}}:{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Failed to cast to pointer type ${A(C)}`})}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&xt($.value)){let C=$.value;if(T.length!==1)return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${T.length}`})}};try{let L=md({expr:e,env:t,context:{...n},isoType:C});return{...v,result:{kind:"iso-value",result:L}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else if(R($)&&wt($.value)){let C=$.value;if(T.length!==1)return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Arc value constructor expects exactly 1 argument, got ${T.length}`})}};try{let L=Qf({expr:e,env:t,context:{...n},arcType:C});return{...v,result:{kind:"arc-value",result:L}}}catch(L){return{...v,result:{kind:"error",error:L}}}}else return{...v,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
|
|
11277
11277
|
${R($)?A($.value):A(v.type)}`})}}}}),f=p.filter(v=>v.result.kind!=="error"),d=a.some(v=>v.$?.value&&ue(v.$.value)&&v.$.value.isRuntimeOnly),h=f.filter(v=>G(v.type)&&v.type.return.isCompileTimeOnly);if(d&&h.length>0?f=f.filter(v=>!h.includes(v)):h.length===1&&(f=h),f.length>1){let v=f.filter(T=>G(T.type)?T.type.parameters.some(C=>gt(C.type)||Mt(C.type)||ht(C.type)):!1);v.length===1&&(f=v)}if(f.length===0){if(p.length===1&&p[0].result.kind==="error"){let v=p[0].result.error;throw v instanceof kn?pt([{token:e.token,errorMessage:`Failed to call the function:
|
|
11278
11278
|
|
|
11279
11279
|
${v.tokenAndErrorList.filter(({token:T})=>T.modulePath!==e.token.modulePath).map(({errorMessage:T})=>`- ${T}`).join(`
|
|
@@ -11292,96 +11292,96 @@ ${f.map(v=>`${A(v.type)}`).join(`
|
|
|
11292
11292
|
`)}
|
|
11293
11293
|
`});let g=f[0];if(n.isInFunctionCallCheckingPhase&&u){let v=g.type,{returnType:T}=Di({functionType:v,calleeEnv:v.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=nt(t),e.$={env:t,type:T,value:W(T,{variableName:"checking_phase_placeholder_"+Re(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(G(g.type)&&g.type.return.isUnquote){let{returnValue:v,callerEnv:T,pathCollection:$,deferredDropExpressions:C}=ui({functionValue:Co(g.value),functionType:g.type,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=nt(T),e.$={env:t,type:Xt(),value:v,originType:Xt(),pathCollection:$,deferredDropExpressions:C},e}else throw m({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(G(g.type)){let v=g.type;{let{returnType:T,returnValue:$,callerEnv:C,pathCollection:L,specializedFunctionValue:b,runtimeArgExprsInOrder:S,deferredDropExpressions:I}=ui({functionValue:Co(g.value),functionType:g.type,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=nt(C),v.return.isUnquote)if(Kt($)){let O=x({expr:$.value,env:t,context:{...n}});return e.$={env:O.$?.env||t,type:O.$?.type||T,value:O.$?.value,originType:O.$?.originType||O.$?.type||T,pathCollection:O.$?.pathCollection||[],macroExpansion:O,variableName:O.$?.variableName},e}else throw m({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
|
|
11294
11294
|
${De($)}`});let z=e.$?.variableName,M=T;if(D(T))if(g.value&&ee(g.value)){let O=g.value.body;if(O.$?.type){let Q=O.$.type;D(Q)&&Q.resolvedConcreteType&&(Q=Q.resolvedConcreteType),M={...T,resolvedConcreteType:Q}}}else G(g.type)&&g.type.return?.type&&!D(g.type.return.type)&&(M={...T,resolvedConcreteType:g.type.return.type});if(e.$={env:t,type:M,value:$,originType:M,pathCollection:L,runtimeArgExprsInOrder:S,deferredDropExpressions:I,variableName:z},v.ioBuiltin==="io_async"&&S[0]){let O=S[0],Q=O.$?.closureFunctionValue;if(Q?.body?.$?.awaitAnalysis){e.$.awaitAnalysis=Q.body.$.awaitAnalysis,e.$.captureType=O.$?.captureType,e.$.deferredDupExpressions=O.$?.deferredDupExpressions,O.$?.deferredDupExpressions&&(O.$.deferredDupExpressions=void 0);let j=O.$?.captureType;if(j&&e.$.awaitAnalysis){let K=new Set(j.fields.map(te=>te.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(te=>K.has(te.name)?{...te,kind:"outer"}:te)}}Q.isIoAsyncStateMachineClosure=!0}else O.$?.deferredDupExpressions&&(O.$.deferredDupExpressions=void 0);let ne=O.$?.variableName;if(ne&&e.$.env){let j=Y(e.$.env,ne),K=j[j.length-1];K&&(e.$.env=qe(e.$.env,K,{...K,consumedAtToken:e.token}))}}He(e,!0);let N=F(o);o.$={env:t,type:g.type,value:b||g.value,pathCollection:[],runtimeArgExprsInOrder:o.$?.runtimeArgExprsInOrder,deferredDropExpressions:o.$?.deferredDropExpressions,variableName:N?o.$?.variableName:void 0},s&&(s.$={env:t,type:g.type,value:b||g.value,pathCollection:[]})}return e}else if((D(g.type)||Ae(g.type))&&cn(g.type)){let v=cn(g.type),{returnType:T,returnValue:$,callerEnv:C,pathCollection:L,specializedFunctionValue:b,runtimeArgExprsInOrder:S,deferredDropExpressions:I}=ui({functionValue:Co(g.value),functionType:v.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:g.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=nt(C),v.isFn.callType.return.isUnquote)if(Kt($)){let M=x({expr:$.value,env:t,context:{...n}});return e.$={env:M.$?.env||t,type:M.$?.type||T,value:M.$?.value,originType:M.$?.originType||M.$?.type||T,pathCollection:M.$?.pathCollection||[],macroExpansion:M},e}else throw m({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
|
|
11295
|
-
${De($)}`});e.$={env:t,type:T,value:$,originType:T,pathCollection:L,runtimeArgExprsInOrder:S,deferredDropExpressions:I},He(e,!0);let z=F(o);return o.$={env:t,type:g.type,value:b||g.value,pathCollection:[],runtimeArgExprsInOrder:o.$?.runtimeArgExprsInOrder,deferredDropExpressions:o.$?.deferredDropExpressions,variableName:z?o.$?.variableName:void 0},s&&(s.$={env:t,type:g.type,value:b||g.value,pathCollection:[]}),e}else{let v=g.value;if(R(v)&&pe(v.value)){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let{values:$,pathCollection:C,callerEnv:L,runtimeArgExprsInOrder:b}=fa(g);if(t=L,!$)throw m({token:o.token,errorMessage:"Error evaluating struct call."});let S=$.some(I=>!I||ue(I)&&I.isRuntimeOnly)?void 0:Zn(T,$);return e.$.value=dt(T)?void 0:S,e.$.pathCollection=C,e.$.env=t,e.$.runtimeArgExprsInOrder=b,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&ge(v.value)){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let $=T.variants.find(I=>I.name===T.selectedVariantName);if(!$)throw m({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:C,pathCollection:L,callerEnv:b,runtimeArgExprsInOrder:S}=fa(g);if(t=b,C.every(I=>!!I&&!(ue(I)&&I.isRuntimeOnly))){let I=yi(T,$.name,C);e.$.value=I}return e.$.pathCollection=L,e.$.env=t,e.$.runtimeArgExprsInOrder=S,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&ot(v.value)){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let{pathCollection:$,callerEnv:C,runtimeArgExprsInOrder:L}=fa(g);return t=C,e.$.value=void 0,e.$.pathCollection=$,e.$.env=t,e.$.runtimeArgExprsInOrder=L,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&Ce(v.value)){let{moduleValue:T,callerEnv:$}=
|
|
11296
|
-
${w(e)}`})}function
|
|
11295
|
+
${De($)}`});e.$={env:t,type:T,value:$,originType:T,pathCollection:L,runtimeArgExprsInOrder:S,deferredDropExpressions:I},He(e,!0);let z=F(o);return o.$={env:t,type:g.type,value:b||g.value,pathCollection:[],runtimeArgExprsInOrder:o.$?.runtimeArgExprsInOrder,deferredDropExpressions:o.$?.deferredDropExpressions,variableName:z?o.$?.variableName:void 0},s&&(s.$={env:t,type:g.type,value:b||g.value,pathCollection:[]}),e}else{let v=g.value;if(R(v)&&pe(v.value)){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let{values:$,pathCollection:C,callerEnv:L,runtimeArgExprsInOrder:b}=fa(g);if(t=L,!$)throw m({token:o.token,errorMessage:"Error evaluating struct call."});let S=$.some(I=>!I||ue(I)&&I.isRuntimeOnly)?void 0:Zn(T,$);return e.$.value=dt(T)?void 0:S,e.$.pathCollection=C,e.$.env=t,e.$.runtimeArgExprsInOrder=b,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&ge(v.value)){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let $=T.variants.find(I=>I.name===T.selectedVariantName);if(!$)throw m({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:C,pathCollection:L,callerEnv:b,runtimeArgExprsInOrder:S}=fa(g);if(t=b,C.every(I=>!!I&&!(ue(I)&&I.isRuntimeOnly))){let I=yi(T,$.name,C);e.$.value=I}return e.$.pathCollection=L,e.$.env=t,e.$.runtimeArgExprsInOrder=S,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&ot(v.value)){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let{pathCollection:$,callerEnv:C,runtimeArgExprsInOrder:L}=fa(g);return t=C,e.$.value=void 0,e.$.pathCollection=$,e.$.env=t,e.$.runtimeArgExprsInOrder=L,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&Ce(v.value)){let{moduleValue:T,callerEnv:$}=Gf(g);return t=$,e.$={env:t,type:T.type,value:T,originType:T.type,pathCollection:[]},o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else if(R(v)&&Le(v.value)){if(g.result.kind==="trait-specialization"){let C=g.result.result;t=C.callerEnv;let L=J(C.specializedTraitType);return e.$={env:t,type:L.type,value:L,pathCollection:[]},o.$={env:t,type:v.type,value:v,pathCollection:[]},e}let{traitValue:T,callerEnv:$}=Wf(g);return t=$,e.$={env:t,type:T.type,value:T,originType:T.type,pathCollection:[]},o.$={env:t,type:v.type,value:v,pathCollection:[]},e}else{if(R(v)&&G(v.value))return e;if(R(v)&&ke(v.value))return e;if(R(v)&&Tt(v.value))return e;if(R(v)&&(D(v.value)||Ae(v.value))){if(g.result.kind==="type"&&D(v.value)&&v.value.recursiveTypeRef){let T=v.value;e.$={env:t,type:T,originType:T,pathCollection:[]};let{pathCollection:$,callerEnv:C,runtimeArgExprsInOrder:L}=fa(g);return t=C,e.$.value=void 0,e.$.pathCollection=$,e.$.env=t,e.$.runtimeArgExprsInOrder=L,He(e,!0),o.$={env:t,type:v.type,value:v,pathCollection:[]},e}return e}else{if(R(v)&&_a(v.value))return e;if(R(v)&&Ee(v.value))return e;if(R(v)&&xt(v.value))return e;if(R(v)&&wt(v.value))return e;if(g.result.kind==="index"){let{value:T,type:$,ptrType:C,indexMethodType:L,indexMethodValue:b,callerEnv:S,index:I,comptimeRef:z}=qf(g),M=o.$?.pathCollection??[];return a.length===1&&typeof I=="number"&&(M.length>0?M=M.map(N=>[...N,I.toString()]):o.$?.variableName&&(M=[[o.$.variableName,I.toString()]])),e.$={env:S,type:$,value:T,originType:o.$?.originType??g.type,pathCollection:M,sourceVariable:o.$?.sourceVariable,indexTraitPtrType:C,indexMethodType:L,indexMethodValue:b,comptimeRef:z,isAccessingProperty:!0},o.$={env:t,type:g.type,value:g.value,pathCollection:o.$?.pathCollection??[],isAccessingProperty:!0,runtimeArgExprsInOrder:o.$?.runtimeArgExprsInOrder,deferredDropExpressions:o.$?.deferredDropExpressions,variableName:o.$?.variableName},He(e,!1),e}}}}throw m({token:e.token,errorMessage:`Function call is not implemented yet:
|
|
11296
|
+
${w(e)}`})}function dv(e){if(!e.$?.type||!Se(e.$.type))throw m({token:e.token,errorMessage:`Expected tuple type for drop generation:
|
|
11297
11297
|
${w(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
|
|
11298
11298
|
${w(e)}`});let n=e.$.type.fields.map((i,o)=>({index:o,element:i,needsDrop:Ve(D(i.type)&&i.type.resolvedConcreteType?i.type.resolvedConcreteType:i.type)})).filter(({needsDrop:i})=>i);return n.length===0?"":`begin(
|
|
11299
11299
|
${n.map(({index:i})=>`${k.__yo_drop_tuple_element[0]}(${e.$.variableName}, ${i})`).join(`,
|
|
11300
11300
|
`)}
|
|
11301
|
-
)`}function
|
|
11301
|
+
)`}function mv(e){if(!e.$?.type||!ke(e.$.type))throw m({token:e.token,errorMessage:`Expected array type for drop generation:
|
|
11302
11302
|
${w(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
|
|
11303
11303
|
${w(e)}`});let t=e.$.type,n=t.childType,r=D(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!Ve(r))return"";let i=t.length;if(!Ue(i))return"";let o=i.value,a=[];for(let s=0;s<o;s++)a.push(`${k.__yo_drop_array_element[0]}(${e.$.variableName}, ${s})`);return`begin(
|
|
11304
11304
|
${a.join(`,
|
|
11305
11305
|
`)}
|
|
11306
|
-
)`}function
|
|
11306
|
+
)`}function Td({expr:e,env:t,context:n}){ve(e,k.___drop,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.___drop[0]}":
|
|
11307
11307
|
${w(r)}`});t=i.$.env;let o=i.$?.variableName;if(!o)throw m({token:r.token,errorMessage:`Expected variable name as argument to "${k.___drop[0]}":
|
|
11308
11308
|
${w(i)}
|
|
11309
11309
|
|
|
11310
11310
|
Original expression:
|
|
11311
|
-
${w(r)}`});let a=i.$.type,l=D(a)&&a.resolvedConcreteType&&!Ie(a)?a.resolvedConcreteType:a;if(Ve(l))if(Se(l)){let u=
|
|
11311
|
+
${w(r)}`});let a=i.$.type,l=D(a)&&a.resolvedConcreteType&&!Ie(a)?a.resolvedConcreteType:a;if(Ve(l))if(Se(l)){let u=dv(i);if(u){let c=et(u);t=In(i,t,!0);let _=x({expr:c,env:t,context:{...n}});return F(_)?(br(e,_),e):_}else return t=In(i,t,!0),e.$={env:t,type:H.type,value:H,pathCollection:[]},e}else if(ke(l)){let u=mv(i);if(u){let c=et(u);t=In(i,t,!0);let _=x({expr:c,env:t,context:{...n}});return F(_)?(br(e,_),e):_}else return t=In(i,t,!0),e.$={env:t,type:H.type,value:H,pathCollection:[]},e}else{if(D(l)&&!Ie(l))return t=In(i,t,!0),e.$={env:t,type:H.type,value:void 0,pathCollection:[]},e;{let u=i.$?.variableName;if(u){let h=Y(t,u),g=h.length?h[h.length-1]:void 0;if(g&&!g.isOwningTheRcValue)return t=In(i,t,!0),e.$={env:t,type:H.type,value:void 0,pathCollection:[]},e}let c=et(`(${w(i)}).___drop()`),_=Kn({env:t,context:{...n},expr:c});if(!_.$?.env)throw m({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${k.___drop[0]}" method call:
|
|
11312
11312
|
${w(c)}`});let f=Y(_.$.env,o).at(-1);if(!f)throw m({token:e.token,errorMessage:`Variable "${o}" not found in environment after evaluating "${k.___drop[0]}" method call:
|
|
11313
|
-
${w(c)}`});let d=qe(_.$.env,f,{...f,consumedAtToken:e.token});return _.$.env=d,_}}else return t=In(i,t,!0),e.$={env:t,type:H.type,value:void 0,pathCollection:[]},e}function
|
|
11313
|
+
${w(c)}`});let d=qe(_.$.env,f,{...f,consumedAtToken:e.token});return _.$.env=d,_}}else return t=In(i,t,!0),e.$={env:t,type:H.type,value:void 0,pathCollection:[]},e}function yv(e){if(!e.$?.type||!Se(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:
|
|
11314
11314
|
${w(e)}`});let n=e.$.type.fields.map((i,o)=>({index:o,element:i,needsDup:Ve(i.type)}));return n.every(({needsDup:i})=>!i)?"":`begin(
|
|
11315
11315
|
${n.map(({index:i,needsDup:o})=>o?`${k.__yo_dup_tuple_element[0]}(${e.$?.variableName}, ${i})`:"").filter(i=>i.length>0).join(`,
|
|
11316
11316
|
`)}
|
|
11317
|
-
)`}function
|
|
11317
|
+
)`}function gv(e){if(!e.$?.type||!ke(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:
|
|
11318
11318
|
${w(e)}`});let t=e.$.type,n=t.childType;if(!Ve(n))return"";if(Ue(t.length)){let r=t.length.value;return`begin(
|
|
11319
11319
|
${Array.from({length:Number(r)},(i,o)=>`${k.__yo_dup_array_element[0]}(${e.$?.variableName}, ${o})`).join(", ")}
|
|
11320
|
-
)`}else return""}function
|
|
11321
|
-
${w(r)}`});t=i.$.env;let o=i.$.type,a=D(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Ve(a))if(Se(a)){let s=
|
|
11322
|
-
${w(s)}`});let c=Y(l.$.env,u);if(c.length){let _=c[c.length-1];if(_.isOwningTheRcValue){let p=qe(l.$.env,_,{..._,isOwningTheRcValue:!1});l.$.env=p}}return l}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function
|
|
11320
|
+
)`}else return""}function Ed({expr:e,env:t,context:n}){ve(e,k.___dup,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.___dup[0]}":
|
|
11321
|
+
${w(r)}`});t=i.$.env;let o=i.$.type,a=D(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Ve(a))if(Se(a)){let s=yv(i);if(s){let l=et(s),u=x({expr:l,env:t,context:{...n}});return F(u)?(br(e,u),e):u}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(ke(a)){let s=gv(i);if(s){let l=et(s),u=x({expr:l,env:t,context:{...n}});return F(u)?(br(e,u),e):u}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(D(a)&&!Ie(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let s=et(`(${w(i)}).___dup()`),l=Kn({env:t,context:{...n},expr:s}),u=l.$?.variableName;if(!u||!l.$)throw m({token:e.token,errorMessage:`Failed to evaluate the "${k.___dup[0]}" method call:
|
|
11322
|
+
${w(s)}`});let c=Y(l.$.env,u);if(c.length){let _=c[c.length-1];if(_.isOwningTheRcValue){let p=qe(l.$.env,_,{..._,isOwningTheRcValue:!1});l.$.env=p}}return l}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function $d({expr:e,env:t,context:n}){ve(e,k.__yo_expr_is_atom,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11323
11323
|
${w(r)}`});if(!Dt(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
11324
11324
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
11325
|
-
${w(r)}`});let a=Kt(o)?ft(B(o.value)):W(rt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11325
|
+
${w(r)}`});let a=Kt(o)?ft(B(o.value)):W(rt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Cd({expr:e,env:t,context:n}){ve(e,k.__yo_expr_is_fn_call,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11326
11326
|
${w(r)}`});if(!Dt(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
11327
11327
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
11328
|
-
${w(r)}`});let a=Kt(o)?ft(F(o.value)):W(rt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11328
|
+
${w(r)}`});let a=Kt(o)?ft(F(o.value)):W(rt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function bd({expr:e,env:t,context:n}){ve(e,k.__yo_expr_get_callee,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11329
11329
|
${w(r)}`});if(!Dt(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
11330
11330
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
11331
11331
|
${w(r)}`});if(e.$={env:i.$.env,type:Xt(),value:W(Xt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kt(o))if(F(o.value)){let a=o.value.func,s=ln(a);e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
|
|
11332
|
-
${w(e)}`});return e}function
|
|
11332
|
+
${w(e)}`});return e}function kd({expr:e,env:t,context:n}){ve(e,k.__yo_expr_get_args,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11333
11333
|
${w(r)}`});if(!Dt(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
11334
11334
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
11335
11335
|
${w(r)}`});if(e.$={env:i.$.env,type:Yo(),value:W(Yo(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kt(o))if(F(o.value)){let a=o.value.args,s=fn(Xt(),a.map(l=>ln(l)));e.$.value=s}else throw m({token:r.token,errorMessage:`Expected function call expression for argument, got:
|
|
11336
|
-
${w(e)}`});return e}function
|
|
11336
|
+
${w(e)}`});return e}function wd({expr:e,env:t,context:n}){ve(e,k.__yo_expr_to_string,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11337
11337
|
${w(r)}`});if(!Dt(i.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
11338
11338
|
${w(r)}`});let o=i.$.value;if(!o)throw m({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
11339
|
-
${w(r)}`});return e.$={env:i.$.env,type:zt(),value:W(zt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kt(o)&&(e.$.value=Ut(w(o.value))),e}function
|
|
11339
|
+
${w(r)}`});return e.$={env:i.$.env,type:zt(),value:W(zt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kt(o)&&(e.$.value=Ut(w(o.value))),e}function Fd({expr:e,env:t,context:n}){ve(e,k.__yo_expr_eq,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
|
|
11340
11340
|
${w(r)}`});if(!Dt(o.$.type))throw m({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
|
|
11341
11341
|
${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:
|
|
11342
11342
|
${w(r)}`});t=o.$.env;let s=x({expr:i,env:t,context:{...n}});if(!s.$)throw m({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
|
|
11343
11343
|
${w(i)}`});if(!Dt(s.$.type))throw m({token:i.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
|
|
11344
11344
|
${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:
|
|
11345
|
-
${w(i)}`});t=s.$.env;let u;return Kt(a)&&Kt(l)?u=ft(Ot({value:a,env:t},{value:l,env:t})):u=W(rt(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11345
|
+
${w(i)}`});t=s.$.env;let u;return Kt(a)&&Kt(l)?u=ft(Ot({value:a,env:t},{value:l,env:t})):u=W(rt(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function Ld({expr:e,env:t}){return ve(e,k.__yo_gc_collect,0),e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Id({expr:e,env:t,context:n}){let r=e.args[0],i="";if(r){if(e.args.length>1)throw m({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=x({expr:r,env:t,context:{...n}});if(!l.$)throw m({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
|
|
11346
11346
|
${w(r)}`});if(!we(l.$.value))throw m({token:r.token,errorMessage:`Expected comptime_string for prefix argument, got:
|
|
11347
|
-
${w(r)}`});i=l.$.value.value}let o=i+Re(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=ln(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function
|
|
11347
|
+
${w(r)}`});i=l.$.value.value}let o=i+Re(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=ln(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function Ad({expr:e,env:t,context:n}){if(!E(e,V.Impl))throw m({token:e.token,errorMessage:`Expected "Impl", got:
|
|
11348
11348
|
${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=F(l)&&E(l,"!")&&l.args.length===1,c=u?l.args[0]:l,_=x({expr:c,env:t,context:{...n}});if(!_.$)throw m({token:c.token,errorMessage:"Failed to evaluate Impl argument."});if(t=_.$.env,!_.$.value||!R(_.$.value)||!Le(_.$.value.value))throw m({token:c.token,errorMessage:`Impl argument must be a trait type, got: ${w(c)}`});let p=_.$.value.value;if(Ea(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=Vn(tt(),"Impl",{requiredTraits:r,negativeTraits:i,env:t,context:n});o!==void 0&&(a.resolvedConcreteType=o);let s=J(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function ma({expr:e,env:t,context:n}){if(B(e))return e;{let r=e.func,i=e.args;if(B(r)&&Et(r,V.unquote)&&i.length===1){let o=i[0],a=x({expr:o,env:t,context:{...n}});if(!a.$||!a.$.value)throw m({token:o.token,errorMessage:`Expected expression type for "unquote" argument, got:
|
|
11349
11349
|
${w(o)}`});if(!Dt(a.$.type)){if(ue(a.$.value))return e;throw m({token:o.token,errorMessage:`Expected expression type for "unquote" argument, got:
|
|
11350
11350
|
${w(o)}`})}let s=a.$.value;if(ue(s))return e;if(Kt(s))return s.value;throw m({token:o.token,errorMessage:`Expected expression value for "unquote" argument, got:
|
|
11351
11351
|
${De(s)}`})}else{let o=ma({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<i.length;l++){let u=i[l],c=F(u)&&E(u,V.unquote_splicing),_=!c&&F(u)&&E(u,"...")&&u.args.length===1&&F(u.args[0])&&E(u.args[0],V.unquote);if(c||_){let p,f=u,d=_?f.args[0].args[0]:f.args[0],h=x({expr:d,env:t,context:{...n}});if(!h.$||!h.$.value)throw m({token:d.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
|
|
11352
|
-
${w(d)}`});if(di(h.$.type)){let g=h.$.value
|
|
11353
|
-
${w(d)}`})}else a.push(ma({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function
|
|
11352
|
+
${w(d)}`});if(di(h.$.type)){let g=h.$.value;Cu(g)&&g.elements.every(y=>Kt(y))&&(p=g.elements.map(y=>y.value)),p?p.forEach(y=>{a.push(y)}):a.push(u)}else if(ue(h.$.value))a.push(u);else throw m({token:d.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
|
|
11353
|
+
${w(d)}`})}else a.push(ma({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function xd({expr:e,env:t,context:n}){ve(e,V.quote,1);let r=ma({expr:e.args[0],env:t,context:{...n}}),i=ln(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function Sd({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw m({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
|
|
11354
11354
|
${r.toString()}`});if(t=i.$.env,!Dt(i.$.type))throw m({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${A(i.$.type)}`});let o=null;if(e.args.length===2){let s=e.args[1],l=x({expr:s,env:t,context:{...n}});if(!l.$)throw m({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
|
|
11355
|
-
${s.toString()}`});if(!gt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${A(l.$.type)}`});if(!Ln(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(Kt(a)){let s=a.value,l=t,u=0;for(;F(s)&&(o===null||u<o);)try{let c=Kn({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Kt(c.$.value)){let _=c.$.value.value;if(w(_)===w(s))break;s=_,u++}else break}catch(c){if(c instanceof kn&&c.isAssertionError)throw c;break}s=ma({expr:s,env:l,context:{...n}}),e.$={env:l,type:Xt(),value:ln(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function
|
|
11356
|
-
`),_=/\{([^}:]+)(?::[^}]*)?\}/g,p,f=new Set;for(let d=0;d<o.length;d++)if(o[d].name){if(f.has(o[d].name))throw m({token:e.token,errorMessage:`Duplicate asm operand name: '${o[d].name}'.`});f.add(o[d].name)}for(;(p=_.exec(c))!==null;){let d=p[1];if(d==="{"||d==="}")continue;let h=parseInt(d,10);if(isNaN(h)){if(!f.has(d))throw m({token:e.token,errorMessage:`asm template references undefined operand '{${d}}'.`})}else if(h<0||h>=o.length)throw m({token:e.token,errorMessage:`asm template references positional operand {${h}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function Pd({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$?.value||!we(i.$.value)&&!(ue(i.$.value)&&ht(i.$.value.type)))throw m({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:H.type,value:void 0,pathCollection:[]},e}function Ud({expr:e,env:t}){if(E(e,k.__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=ra(),r=n.os,i=Ut(r);return e.$={env:t,type:zt(),value:i,pathCollection:[]},e}if(E(e,k.__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=ra(),r=n.arch,i=Ut(r);return e.$={env:t,type:zt(),value:i,pathCollection:[]},e}if(E(e,k.__yo_pointer_size_bits)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_pointer_size_bits expects 0 arguments, got ${e.args.length}`});let n=ar(),r=Qn(BigInt(n));return e.$={env:t,type:vr(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var ru=class{constructor(){this.artifacts=[];this.testSuites=[];this.runSteps=[];this.steps=[];this.dependencies=[];this.pathDependencies=[];this.systemLibraries=[];this.dependencyArtifacts=[];this.modules=[];this.cliOptions=new Map;this.declaredOptions=new Map}setCliOptions(t){this.cliOptions=t}registerExecutable(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"executable",...t})}registerStaticLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"static_library",...t})}registerSharedLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"shared_library",...t})}registerTest(t){this.testSuites.push(t)}registerRun(t,n){let r=`run:${t}`;this.runSteps.push({name:r,artifactName:t,args:n})}registerStep(t,n,r=[]){this.steps.push({name:t,description:n,dependencyNames:r})}addStepDependency(t,n){let r=this.findStep(t);r&&(r.dependencyNames.includes(n)||r.dependencyNames.push(n))}registerDependency(t){this.dependencies.push(t)}registerPathDependency(t){this.pathDependencies.push(t)}registerSystemLibrary(t){this.systemLibraries.push(t)}registerDependencyArtifact(t){this.dependencyArtifacts.some(n=>n.dependencyName===t.dependencyName&&n.artifactName===t.artifactName)||this.dependencyArtifacts.push(t)}registerModule(t){this.modules.some(n=>n.name===t.name)||this.modules.push(t)}registerModuleLink(t,n){let r=this.modules.find(i=>i.name===t);r&&!r.linkedSystemLibraries.includes(n)&&r.linkedSystemLibraries.push(n)}registerImportedModule(t,n){let r=this.findArtifact(t);if(r){if(r.importedModules.some(i=>i.importName===n.importName))return;r.importedModules.push(n)}}findModule(t){return this.modules.find(n=>n.name===t)}registerLink(t,n){let r=this.findArtifact(t);r&&(r.linkedArtifacts.includes(n)||r.linkedArtifacts.push(n))}findArtifact(t){return this.artifacts.find(n=>n.name===t)}findTest(t){return this.testSuites.find(n=>n.name===t)}findRunStep(t){return this.runSteps.find(n=>n.name===t)}findStep(t){return this.steps.find(n=>n.name===t)}checkDuplicateArtifactName(t){let n=this.artifacts.find(r=>r.name===t);if(n)throw new Error(`Build error: Artifact "${t}" already registered as ${n.kind}. Use a unique name for each artifact.`)}findDependency(t){return this.dependencies.find(n=>n.name===t)}findPathDependency(t){return this.pathDependencies.find(n=>n.name===t)}findSystemLibrary(t){return this.systemLibraries.find(n=>n.name===t)}getStepNames(){return this.steps.map(t=>t.name)}resolveDependency(t){let n=this.findArtifact(t);if(n)return{kind:"artifact",value:n};let r=this.findTest(t);if(r)return{kind:"test",value:r};let i=this.findRunStep(t);if(i)return{kind:"run",value:i};let o=this.findStep(t);if(o)return{kind:"step",value:o}}resolveDependencies(t){let n=[],r=[],i=[];for(let o of t.dependencyNames){let a=this.resolveDependency(o);if(a)switch(a.kind){case"artifact":n.some(s=>s.name===a.value.name)||n.push(a.value);break;case"test":r.some(s=>s.name===a.value.name)||r.push(a.value);break;case"run":i.some(s=>s.name===a.value.name)||i.push(a.value);{let s=this.findArtifact(a.value.artifactName);s&&!n.some(l=>l.name===s.name)&&n.push(s)}break;case"step":{let s=this.resolveDependencies(a.value);for(let l of s.artifacts)n.some(u=>u.name===l.name)||n.push(l);for(let l of s.tests)r.some(u=>u.name===l.name)||r.push(l);for(let l of s.runs)i.some(u=>u.name===l.name)||i.push(l);break}}}return{artifacts:n,tests:r,runs:i}}clear(){this.artifacts=[],this.testSuites=[],this.runSteps=[],this.steps=[],this.dependencies=[],this.pathDependencies=[],this.systemLibraries=[],this.dependencyArtifacts=[],this.modules=[]}},nu,bv,kv=new Map;function zd(){return bv}function Bd(e){return kv.get(e)}function iu(){return nu||(nu=new ru),nu}function ze(e,t,n){if(!we(e))throw m({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function Cn(e,t){return e.$={env:t,type:Hn(),value:H,pathCollection:[]},e}function bo(e,t,n){return e.$={env:t,type:zt(),value:Ut(n),pathCollection:[]},e}function wv(e){for(let t of e.args){if(t===void 0)continue;let n=t.$?.value;if(n===void 0||ue(n))return!0}return!1}function Gd({expr:e,env:t}){if(wv(e)){if(E(e,k.__yo_build_target_host)){let r=ii();return bo(e,t,r.triple)}return E(e,k.__yo_build_option)?bo(e,t,""):Cn(e,t)}let n=iu();if(E(e,k.__yo_build_executable)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple,a=e.args.length>3?ze(e.args[3].$?.value,"optimize",e.token):"debug",s=e.args.length>4?ze(e.args[4].$?.value,"allocator",e.token):"mimalloc",l=e.args.length>5?ze(e.args[5].$?.value,"sanitize",e.token):"none";return n.registerExecutable({name:r,root:i,target:o,optimize:a,allocator:s,sanitize:l,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Cn(e,t)}if(E(e,k.__yo_build_static_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple,a=e.args.length>3?ze(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Cn(e,t)}if(E(e,k.__yo_build_shared_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple,a=e.args.length>3?ze(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Cn(e,t)}if(E(e,k.__yo_build_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"library_name",e.token);if(n.findSystemLibrary(i)){let o=n.findArtifact(r);o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i))}else n.registerLink(r,i);return Cn(e,t)}if(E(e,k.__yo_build_link_system_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"system_lib_name",e.token),o=n.findArtifact(r);return o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i)),Cn(e,t)}if(E(e,k.__yo_build_test)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple;return n.registerTest({name:r,root:i,target:o,verbose:!1,bail:!1,parallel:1}),Cn(e,t)}if(E(e,k.__yo_build_run)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token);return n.registerRun(r,[]),Cn(e,t)}if(E(e,k.__yo_build_step)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"description",e.token);return n.registerStep(r,i),Cn(e,t)}if(E(e,k.__yo_build_step_depend_on)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"step_name",e.token),i=ze(e.args[1].$?.value,"dep_name",e.token),o=e.args[2].$?.value,a=i;return o&&Lt(o)&&o.variantName==="Run"&&(a=`run:${i}`),n.addStepDependency(r,a),Cn(e,t)}if(E(e,k.__yo_build_target_host)){let r=ii();return bo(e,t,r.triple)}if(E(e,k.__yo_build_target_parse)){if(e.args.length!==1)throw m({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"triple",e.token),i=Uc(r);return bo(e,t,i.triple)}if(E(e,k.__yo_build_dependency)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"url",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"ref",e.token):"HEAD",a=e.args.length>3?ze(e.args[3].$?.value,"path",e.token):"";return n.registerDependency({name:r,url:i,ref:o,path:a}),Cn(e,t)}if(E(e,k.__yo_build_path_dependency)){if(e.args.length!==2)throw m({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"path",e.token);return n.registerPathDependency({name:r,path:i}),Cn(e,t)}if(E(e,k.__yo_build_system_library)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=e.args.length>1?ze(e.args[1].$?.value,"fallback_include",e.token):"",o=e.args.length>2?ze(e.args[2].$?.value,"fallback_lib",e.token):"",a=e.args.length>3?ze(e.args[3].$?.value,"fallback_link",e.token):"",s=e.args.length>4?ze(e.args[4].$?.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:r,fallbackInclude:i,fallbackLib:o,fallbackLink:a,defines:s}),Cn(e,t)}if(E(e,k.__yo_build_option)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"description",e.token),o=ze(e.args[2].$?.value,"default",e.token);n.declaredOptions.set(r,{description:i,defaultValue:o});let a=n.cliOptions.get(r)??o;return bo(e,t,a)}if(E(e,k.__yo_build_dep_artifact)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"dependency_name",e.token),i=ze(e.args[1].$?.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:r,artifactName:i}),Cn(e,t)}if(E(e,k.__yo_build_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token);return n.registerModule({name:r,root:i,linkedSystemLibraries:[]}),Cn(e,t)}if(E(e,k.__yo_build_module_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"module_name",e.token),i=ze(e.args[1].$?.value,"system_library_name",e.token);return n.registerModuleLink(r,i),Cn(e,t)}if(E(e,k.__yo_build_add_import)){if(e.args.length<4)throw m({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"import_name",e.token),o=ze(e.args[2].$?.value,"module_name",e.token),a=ze(e.args[3].$?.value,"dependency_name",e.token),s=n.findArtifact(r);if(s){let l=s.importedModules.find(u=>u.importName===i);if(l)throw m({token:e.token,errorMessage:`Duplicate import name "${i}" on artifact "${r}". Already imported from module "${l.moduleName}".`})}return n.registerImportedModule(r,{importName:i,moduleName:o,dependencyName:a}),Cn(e,t)}if(E(e,k.__yo_build_add_cflags)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_add_cflags expects 2 arguments (artifact_name, flags), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"flags",e.token),o=n.findArtifact(r);if(o){let a=i.trim().split(/\s+/).filter(s=>s.length>0);o.cFlags.push(...a)}return Cn(e,t)}if(E(e,k.__yo_build_dep_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"dependency_name",e.token),i=ze(e.args[1].$?.value,"module_name",e.token);return bo(e,t,`${r}\0${i}`)}throw m({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}function Wd({expr:e,env:t,context:n}){ve(e,k.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Ee(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
|
|
11355
|
+
${s.toString()}`});if(!gt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${A(l.$.type)}`});if(!Ln(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(Kt(a)){let s=a.value,l=t,u=0;for(;F(s)&&(o===null||u<o);)try{let c=Kn({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Kt(c.$.value)){let _=c.$.value.value;if(w(_)===w(s))break;s=_,u++}else break}catch(c){if(c instanceof kn&&c.isAssertionError)throw c;break}s=ma({expr:s,env:l,context:{...n}}),e.$={env:l,type:Xt(),value:ln(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Vd({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="test-block")throw m({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "panic" during compile-time function evaluation analysis. Functions containing "panic" cannot be evaluated at compile time.'});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:H.type;if(e.args.length>0){let i=e.args[0],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate panic message"});let a=o.$.type,s=o.$.value,l=a&&An(a)&&a.typeName==="str",u=s&&(we(s)||ue(s)&&ht(s.type));if(!l&&!u)throw m({token:i.token,errorMessage:"panic message must be a comptime_string or str"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}var Dd=new Set(["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"]),tu=new Set(["in"]),nu=new Set(["out","lateout"]),Od=new Set(["inout","inlateout"]),Rd=new Set(["const_val","sym"]),hv=new Set([...tu,...nu,...Od,...Rd,"clobber","clobber_abi","asm_options"]),Nd=new Set(["pure","nomem","readonly","nostack","preserves_flags","att_syntax","intel_syntax","volatile","noreturn"]);function eu(e){return yr(e)||gr(e)||Ee(e)||vn(e)}function vv(e){return e.tag==="Atom"&&Dd.has(e.token.value)}function Tv(e){return!F(e)||e.func.tag!=="Atom"?!1:hv.has(e.func.token.value)}function Md(e){return e.tag==="Atom"&&e.token.value==="_"}function Ev(e,t,n){if(e.tag==="Atom"&&Dd.has(e.token.value))return e.token.value;let r=x({expr:e,env:t,context:{...n}});if(r.$?.value&&we(r.$.value))return r.$.value.value;if(E(e,"raw",1)){let o=e.args[0],a=x({expr:o,env:t,context:{...n}});if(a.$?.value&&we(a.$.value))return`raw:${a.$.value.value}`}throw m({token:e.token,errorMessage:'Invalid asm constraint. Expected a register class (reg, imm, mem, ...), an explicit register name string, or raw("constraint").'})}function $v(e,t,n,r){let i=e.args;if(r==="const_val"||r==="sym")return Cv(e,t,n,r);if(i.length<1||i.length>3)throw m({token:e.token,errorMessage:`asm ${r}() expects 1 to 3 arguments, got ${i.length}.`});let o,a;if(i.length>=2){let h=i[0];if(vv(h))a=0;else if(Md(h))a=0;else{let g=x({expr:h,env:t,context:{...n}});g.$?.value&&we(g.$.value)?(o=g.$.value.value,a=1):a=0}}else a=0;let s=a<i.length-1,l,u;s?(l=Ev(i[a],t,n),u=a+1):(o!==void 0&&(l=o),u=a);let c=i[u];if(!c)throw m({token:e.token,errorMessage:`asm ${r}() is missing its value/type argument.`});let _=tu.has(r);if(nu.has(r)){if(Md(c))return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:void 0,targetVarName:void 0,discarded:!0};if(c.tag==="Atom"){let g=c.token.value,y=Y(t,g);if(y.length>0){let v=y[y.length-1];if(!(v.value&&R(v.value[0]))){let T=v.type;if(!eu(T))throw m({token:c.token,errorMessage:`asm ${r}() target variable '${g}' has type that is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});let $;return v.initializedAtToken?$=x({expr:c,env:t,context:{...n}}):($=c,$.$={env:t,type:T,value:void 0,pathCollection:[]}),{kind:r,name:o,constraint:l,valueExpr:$,outputType:T,targetVarName:g,discarded:!1}}}}let h=x({expr:c,env:t,context:{...n}});if(h.$?.value&&R(h.$.value)){let g=h.$.value.value;if(!eu(g))throw m({token:c.token,errorMessage:`asm ${r}() output type must be a primitive numeric, pointer, or bool type.`});return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:g,targetVarName:void 0,discarded:!1}}throw m({token:c.token,errorMessage:`asm ${r}() last argument must be a type, variable, or _ (discard).`})}let f=x({expr:c,env:t,context:{...n}});if(!f.$)throw m({token:c.token,errorMessage:`Failed to evaluate asm ${r}() value expression.`});let d=f.$.type;if(!eu(d))throw m({token:c.token,errorMessage:`asm ${r}() value type is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});return _?{kind:r,name:o,constraint:l,valueExpr:f,outputType:void 0,targetVarName:void 0,discarded:!1}:{kind:r,name:o,constraint:l,valueExpr:f,outputType:d,targetVarName:void 0,discarded:!1}}function Cv(e,t,n,r){let i=e.args;if(i.length<1||i.length>2)throw m({token:e.token,errorMessage:`asm ${r}() expects 1 or 2 arguments, got ${i.length}.`});let o,a=0;if(i.length===2){let u=x({expr:i[0],env:t,context:{...n}});u.$?.value&&we(u.$.value)&&(o=u.$.value.value,a=1)}let s=i[a],l=x({expr:s,env:t,context:{...n}});return{kind:r,name:o,constraint:void 0,valueExpr:l,outputType:void 0,targetVarName:void 0,discarded:!1}}function bv(e,t,n){let r={noreturn:!1};for(let i of e.args)if(i.tag==="Atom"){let o=i.token.value;if(!Nd.has(o))throw m({token:i.token,errorMessage:`Unknown asm_options flag: '${o}'. Valid flags: ${[...Nd].join(", ")}.`});o==="noreturn"&&(r.noreturn=!0)}else throw m({token:e.token,errorMessage:"asm_options() arguments must be flag identifiers (e.g., pure, nomem, noreturn)."});return r}function Pd({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="test-block")throw m({token:e.token,errorMessage:"asm() can only be called inside a function body or test block."});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "asm" during compile-time function evaluation analysis.'});if(e.args.length===0)throw m({token:e.token,errorMessage:"asm() requires at least one argument (the assembly template string)."});let r=[],i=0;for(;i<e.args.length;){let d=e.args[i];if(Tv(d))break;let h=x({expr:d,env:t,context:{...n}});if(h.$?.value&&we(h.$.value))r.push(h.$.value.value),i++;else if(h.$?.value&&ue(h.$.value)&&ht(h.$.value.type))r.push(""),i++;else break}if(r.length===0)throw m({token:e.args[0].token,errorMessage:"First argument to asm() must be a compile-time string (the assembly template)."});let o=[],a={noreturn:!1};for(;i<e.args.length;){let d=e.args[i];if(!F(d))throw m({token:d.token,errorMessage:"asm() arguments after the template must be operand or option calls (in, out, inout, clobber, asm_options, etc.)."});let h=d.func.tag==="Atom"?d.func.token.value:void 0;if(!h)throw m({token:d.token,errorMessage:"asm() operand must be a named call like in(...), out(...), etc."});if(tu.has(h)||nu.has(h)||Od.has(h)||Rd.has(h))o.push($v(d,t,n,h));else if(h==="clobber"||h==="clobber_abi")for(let g of d.args){if(g.tag==="Atom"&&(g.token.value==="memory"||g.token.value==="cc"))continue;let y=x({expr:g,env:t,context:{...n}});if((!y.$?.value||!we(y.$.value))&&!(g.tag==="Atom"&&g.token.value==="memory")&&!(g.tag==="Atom"&&g.token.value==="cc"))throw m({token:g.token,errorMessage:`${h}() arguments must be compile-time strings (e.g., "memory", "cc", "rax").`})}else if(h==="asm_options")a=bv(d,t,n);else throw m({token:d.token,errorMessage:`Unknown asm() operand or option: '${h}'. Expected: in, out, inout, lateout, inlateout, const_val, sym, clobber, clobber_abi, asm_options.`});i++}let s=t;for(let d of o){if(d.targetVarName===void 0||d.kind!=="out"&&d.kind!=="lateout")continue;let h=Y(s,d.targetVarName);if(h.length>0){let g=h[h.length-1];g.initializedAtToken||(s=qe(s,g,{...g,initializedAtToken:e.token}))}}t=s;let l=[];for(let d of o)d.discarded||d.targetVarName===void 0&&(d.kind==="const_val"||d.kind==="sym"||d.kind!=="in"&&d.outputType&&l.push(d.outputType));let u;if(a.noreturn)u=n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:H.type;else if(l.length===0)u=H.type;else if(l.length===1)u=l[0];else{let d=l.map((h,g)=>({label:g.toString(),type:h,exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}}));u=ao(d)}let c=r.join(`
|
|
11356
|
+
`),_=/\{([^}:]+)(?::[^}]*)?\}/g,p,f=new Set;for(let d=0;d<o.length;d++)if(o[d].name){if(f.has(o[d].name))throw m({token:e.token,errorMessage:`Duplicate asm operand name: '${o[d].name}'.`});f.add(o[d].name)}for(;(p=_.exec(c))!==null;){let d=p[1];if(d==="{"||d==="}")continue;let h=parseInt(d,10);if(isNaN(h)){if(!f.has(d))throw m({token:e.token,errorMessage:`asm template references undefined operand '{${d}}'.`})}else if(h<0||h>=o.length)throw m({token:e.token,errorMessage:`asm template references positional operand {${h}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function Ud({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$?.value||!we(i.$.value)&&!(ue(i.$.value)&&ht(i.$.value.type)))throw m({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:H.type,value:void 0,pathCollection:[]},e}function zd({expr:e,env:t}){if(E(e,k.__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=ra(),r=n.os,i=Ut(r);return e.$={env:t,type:zt(),value:i,pathCollection:[]},e}if(E(e,k.__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=ra(),r=n.arch,i=Ut(r);return e.$={env:t,type:zt(),value:i,pathCollection:[]},e}if(E(e,k.__yo_pointer_size_bits)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_pointer_size_bits expects 0 arguments, got ${e.args.length}`});let n=ar(),r=Qn(BigInt(n));return e.$={env:t,type:vr(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var iu=class{constructor(){this.artifacts=[];this.testSuites=[];this.runSteps=[];this.steps=[];this.dependencies=[];this.pathDependencies=[];this.systemLibraries=[];this.dependencyArtifacts=[];this.modules=[];this.cliOptions=new Map;this.declaredOptions=new Map}setCliOptions(t){this.cliOptions=t}registerExecutable(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"executable",...t})}registerStaticLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"static_library",...t})}registerSharedLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"shared_library",...t})}registerTest(t){this.testSuites.push(t)}registerRun(t,n){let r=`run:${t}`;this.runSteps.push({name:r,artifactName:t,args:n})}registerStep(t,n,r=[]){this.steps.push({name:t,description:n,dependencyNames:r})}addStepDependency(t,n){let r=this.findStep(t);r&&(r.dependencyNames.includes(n)||r.dependencyNames.push(n))}registerDependency(t){this.dependencies.push(t)}registerPathDependency(t){this.pathDependencies.push(t)}registerSystemLibrary(t){this.systemLibraries.push(t)}registerDependencyArtifact(t){this.dependencyArtifacts.some(n=>n.dependencyName===t.dependencyName&&n.artifactName===t.artifactName)||this.dependencyArtifacts.push(t)}registerModule(t){this.modules.some(n=>n.name===t.name)||this.modules.push(t)}registerModuleLink(t,n){let r=this.modules.find(i=>i.name===t);r&&!r.linkedSystemLibraries.includes(n)&&r.linkedSystemLibraries.push(n)}registerImportedModule(t,n){let r=this.findArtifact(t);if(r){if(r.importedModules.some(i=>i.importName===n.importName))return;r.importedModules.push(n)}}findModule(t){return this.modules.find(n=>n.name===t)}registerLink(t,n){let r=this.findArtifact(t);r&&(r.linkedArtifacts.includes(n)||r.linkedArtifacts.push(n))}findArtifact(t){return this.artifacts.find(n=>n.name===t)}findTest(t){return this.testSuites.find(n=>n.name===t)}findRunStep(t){return this.runSteps.find(n=>n.name===t)}findStep(t){return this.steps.find(n=>n.name===t)}checkDuplicateArtifactName(t){let n=this.artifacts.find(r=>r.name===t);if(n)throw new Error(`Build error: Artifact "${t}" already registered as ${n.kind}. Use a unique name for each artifact.`)}findDependency(t){return this.dependencies.find(n=>n.name===t)}findPathDependency(t){return this.pathDependencies.find(n=>n.name===t)}findSystemLibrary(t){return this.systemLibraries.find(n=>n.name===t)}getStepNames(){return this.steps.map(t=>t.name)}resolveDependency(t){let n=this.findArtifact(t);if(n)return{kind:"artifact",value:n};let r=this.findTest(t);if(r)return{kind:"test",value:r};let i=this.findRunStep(t);if(i)return{kind:"run",value:i};let o=this.findStep(t);if(o)return{kind:"step",value:o}}resolveDependencies(t){let n=[],r=[],i=[];for(let o of t.dependencyNames){let a=this.resolveDependency(o);if(a)switch(a.kind){case"artifact":n.some(s=>s.name===a.value.name)||n.push(a.value);break;case"test":r.some(s=>s.name===a.value.name)||r.push(a.value);break;case"run":i.some(s=>s.name===a.value.name)||i.push(a.value);{let s=this.findArtifact(a.value.artifactName);s&&!n.some(l=>l.name===s.name)&&n.push(s)}break;case"step":{let s=this.resolveDependencies(a.value);for(let l of s.artifacts)n.some(u=>u.name===l.name)||n.push(l);for(let l of s.tests)r.some(u=>u.name===l.name)||r.push(l);for(let l of s.runs)i.some(u=>u.name===l.name)||i.push(l);break}}}return{artifacts:n,tests:r,runs:i}}clear(){this.artifacts=[],this.testSuites=[],this.runSteps=[],this.steps=[],this.dependencies=[],this.pathDependencies=[],this.systemLibraries=[],this.dependencyArtifacts=[],this.modules=[]}},ru,kv,wv=new Map;function Bd(){return kv}function Gd(e){return wv.get(e)}function ou(){return ru||(ru=new iu),ru}function ze(e,t,n){if(!we(e))throw m({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function Cn(e,t){return e.$={env:t,type:Hn(),value:H,pathCollection:[]},e}function bo(e,t,n){return e.$={env:t,type:zt(),value:Ut(n),pathCollection:[]},e}function Fv(e){for(let t of e.args){if(t===void 0)continue;let n=t.$?.value;if(n===void 0||ue(n))return!0}return!1}function Wd({expr:e,env:t}){if(Fv(e)){if(E(e,k.__yo_build_target_host)){let r=ii();return bo(e,t,r.triple)}return E(e,k.__yo_build_option)?bo(e,t,""):Cn(e,t)}let n=ou();if(E(e,k.__yo_build_executable)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple,a=e.args.length>3?ze(e.args[3].$?.value,"optimize",e.token):"debug",s=e.args.length>4?ze(e.args[4].$?.value,"allocator",e.token):"mimalloc",l=e.args.length>5?ze(e.args[5].$?.value,"sanitize",e.token):"none";return n.registerExecutable({name:r,root:i,target:o,optimize:a,allocator:s,sanitize:l,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Cn(e,t)}if(E(e,k.__yo_build_static_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple,a=e.args.length>3?ze(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Cn(e,t)}if(E(e,k.__yo_build_shared_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple,a=e.args.length>3?ze(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Cn(e,t)}if(E(e,k.__yo_build_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"library_name",e.token);if(n.findSystemLibrary(i)){let o=n.findArtifact(r);o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i))}else n.registerLink(r,i);return Cn(e,t)}if(E(e,k.__yo_build_link_system_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"system_lib_name",e.token),o=n.findArtifact(r);return o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i)),Cn(e,t)}if(E(e,k.__yo_build_test)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"target",e.token):ii().triple;return n.registerTest({name:r,root:i,target:o,verbose:!1,bail:!1,parallel:1}),Cn(e,t)}if(E(e,k.__yo_build_run)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token);return n.registerRun(r,[]),Cn(e,t)}if(E(e,k.__yo_build_step)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"description",e.token);return n.registerStep(r,i),Cn(e,t)}if(E(e,k.__yo_build_step_depend_on)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"step_name",e.token),i=ze(e.args[1].$?.value,"dep_name",e.token),o=e.args[2].$?.value,a=i;return o&&Lt(o)&&o.variantName==="Run"&&(a=`run:${i}`),n.addStepDependency(r,a),Cn(e,t)}if(E(e,k.__yo_build_target_host)){let r=ii();return bo(e,t,r.triple)}if(E(e,k.__yo_build_target_parse)){if(e.args.length!==1)throw m({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"triple",e.token),i=zc(r);return bo(e,t,i.triple)}if(E(e,k.__yo_build_dependency)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"url",e.token),o=e.args.length>2?ze(e.args[2].$?.value,"ref",e.token):"HEAD",a=e.args.length>3?ze(e.args[3].$?.value,"path",e.token):"";return n.registerDependency({name:r,url:i,ref:o,path:a}),Cn(e,t)}if(E(e,k.__yo_build_path_dependency)){if(e.args.length!==2)throw m({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"path",e.token);return n.registerPathDependency({name:r,path:i}),Cn(e,t)}if(E(e,k.__yo_build_system_library)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=e.args.length>1?ze(e.args[1].$?.value,"fallback_include",e.token):"",o=e.args.length>2?ze(e.args[2].$?.value,"fallback_lib",e.token):"",a=e.args.length>3?ze(e.args[3].$?.value,"fallback_link",e.token):"",s=e.args.length>4?ze(e.args[4].$?.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:r,fallbackInclude:i,fallbackLib:o,fallbackLink:a,defines:s}),Cn(e,t)}if(E(e,k.__yo_build_option)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"description",e.token),o=ze(e.args[2].$?.value,"default",e.token);n.declaredOptions.set(r,{description:i,defaultValue:o});let a=n.cliOptions.get(r)??o;return bo(e,t,a)}if(E(e,k.__yo_build_dep_artifact)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"dependency_name",e.token),i=ze(e.args[1].$?.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:r,artifactName:i}),Cn(e,t)}if(E(e,k.__yo_build_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"name",e.token),i=ze(e.args[1].$?.value,"root",e.token);return n.registerModule({name:r,root:i,linkedSystemLibraries:[]}),Cn(e,t)}if(E(e,k.__yo_build_module_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"module_name",e.token),i=ze(e.args[1].$?.value,"system_library_name",e.token);return n.registerModuleLink(r,i),Cn(e,t)}if(E(e,k.__yo_build_add_import)){if(e.args.length<4)throw m({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"import_name",e.token),o=ze(e.args[2].$?.value,"module_name",e.token),a=ze(e.args[3].$?.value,"dependency_name",e.token),s=n.findArtifact(r);if(s){let l=s.importedModules.find(u=>u.importName===i);if(l)throw m({token:e.token,errorMessage:`Duplicate import name "${i}" on artifact "${r}". Already imported from module "${l.moduleName}".`})}return n.registerImportedModule(r,{importName:i,moduleName:o,dependencyName:a}),Cn(e,t)}if(E(e,k.__yo_build_add_cflags)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_add_cflags expects 2 arguments (artifact_name, flags), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"artifact_name",e.token),i=ze(e.args[1].$?.value,"flags",e.token),o=n.findArtifact(r);if(o){let a=i.trim().split(/\s+/).filter(s=>s.length>0);o.cFlags.push(...a)}return Cn(e,t)}if(E(e,k.__yo_build_dep_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let r=ze(e.args[0].$?.value,"dependency_name",e.token),i=ze(e.args[1].$?.value,"module_name",e.token);return bo(e,t,`${r}\0${i}`)}throw m({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}function qd({expr:e,env:t,context:n}){ve(e,k.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Ee(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
|
|
11357
11357
|
${w(r)}`});if(t=o.$.env,R(o.$.value))throw m({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
|
|
11358
|
-
${w(r)}`});{let a=o.$.type;if(gt(a)||Mt(a)||ht(a)){let c=vt({type:a,expectedType:i?.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=It(a),l=o.$.sourceVariable,u=o.$.comptimeRef;if(u){let c;switch(u.kind){case"array":c=Zr(s,[u.arrayValue],u.index);break;case"comptime_list":c=Zr(s,[u.listValue],u.index);break;case"struct":c=Zr(s,[u.structValue],u.fieldIndex);break;case"tuple":c=Zr(s,[u.tupleValue],u.fieldIndex);break}e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection,comptimeRef:u}}else if(l&&l.value){let c=Zr(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else{let c=o.$.indexTraitPtrType;if(c)e.$={env:t,type:c,value:void 0,pathCollection:o.$.pathCollection,isIndexTraitAddressOf:!0};else if(ue(o.$.value)){let _=W(s,{env:t,context:n});e.$={env:t,type:s,value:_,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection}}return He(e,!1),e}}function
|
|
11358
|
+
${w(r)}`});{let a=o.$.type;if(gt(a)||Mt(a)||ht(a)){let c=vt({type:a,expectedType:i?.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=It(a),l=o.$.sourceVariable,u=o.$.comptimeRef;if(u){let c;switch(u.kind){case"array":c=Zr(s,[u.arrayValue],u.index);break;case"comptime_list":c=Zr(s,[u.listValue],u.index);break;case"struct":c=Zr(s,[u.structValue],u.fieldIndex);break;case"tuple":c=Zr(s,[u.tupleValue],u.fieldIndex);break}e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection,comptimeRef:u}}else if(l&&l.value){let c=Zr(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else{let c=o.$.indexTraitPtrType;if(c)e.$={env:t,type:c,value:void 0,pathCollection:o.$.pathCollection,isIndexTraitAddressOf:!0};else if(ue(o.$.value)){let _=W(s,{env:t,context:n});e.$={env:t,type:s,value:_,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection}}return He(e,!1),e}}function Yd({expr:e,env:t,context:n}){ve(e,k.rc,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,mn(i.$.type)?e.$={env:t,type:St(),value:void 0,pathCollection:[]}:e.$={env:t,type:St(),value:an("Usize",1),pathCollection:[]},e}function Hd({expr:e,env:t,context:n}){ve(e,k.sizeof,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&R(i.$.value)?o=i.$.value.value:o=i.$.type;let a=ti(o),s;return a===null?s=W(St(),{env:t,context:n}):s=an("Usize",Math.ceil(a/8)),e.$={env:t,type:St(),value:s,pathCollection:[]},e}function Kr({expr:e,type:t,env:n,context:r}){if(Se(t)&&F(e)&&E(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 i=0;i<t.fields.length;i++){let o=t.fields[i].type,a=e.args[i],{env:s}=Kr({expr:a,type:o,env:n,context:{...r}});n=s}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(F(e)&&E(e,"_"))if(pe(t)||ot(t)||Ce(t)||Le(t)){let i=Kn({expr:e,env:n,givenFunc:{type:Ft(t),value:J(t)},context:{...r}});if(!i.$?.type||!i.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
|
|
11359
11359
|
${w(e)}`});return{expr:i,type:i.$?.type,env:i.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use _ with type ${A(t)}. Only supported with struct types.`});else if(F(e)&&E(e,".",1))if(ge(t)){let i=e.args[0];if(!B(i))throw m({token:e.token,errorMessage:`Expected identifier for enum variant, got ${w(i)}`});let o=i.token.value;if(!t.variants.find(l=>l.name===o))throw m({token:e.token,errorMessage:`Enum variant "${o}" not found in ${A(t)}`});let s={...t,selectedVariantName:o};return e.$={type:s,env:n,pathCollection:[]},{expr:e,type:s,env:n}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(F(e)&&F(e.func)&&E(e.func,".",1))if(ge(t)){let i=e.func,o=i.args[0];if(!B(o))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got ${w(o)}`});let a=o.token.value;if(!t.variants.find(c=>c.name===a))throw m({token:e.token,errorMessage:`Enum variant "${a}" not found in ${A(t)}`});let l={...t,selectedVariantName:a},u=Kn({expr:e,env:n,givenFunc:{type:Ft(l),value:J(l)},context:{...r}});if(!u.$?.type||!u.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
|
|
11360
|
-
${w(e)}`});return{expr:u,type:u.$?.type,env:u.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(e.$?.type&&t)try{let{expectedEnv:i}=Ze({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:i}}catch{return{expr:e,type:e.$?.type,env:n}}else throw m({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${w(e)}`})}function
|
|
11360
|
+
${w(e)}`});return{expr:u,type:u.$?.type,env:u.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${A(t)}. Only supported with enum types.`});else if(e.$?.type&&t)try{let{expectedEnv:i}=Ze({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:i}}catch{return{expr:e,type:e.$?.type,env:n}}else throw m({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${w(e)}`})}function jd({expr:e,env:t,context:n}){ve(e,k.the,2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=o.$.env,!o.$.value||!R(o.$.value))throw m({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${o.$.type}`});let a=o.$.value.value,s=x({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw m({token:i.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!q({type:a,env:t},{type:s.$.type,env:t})){if(eo(a))try{let{expr:l,type:u,env:c}=Kr({expr:i,type:a,env:t,context:{...n}});if(q({type:a,env:c},{type:u,env:c}))return e.$={env:c,type:a,value:l.$?.value,pathCollection:l.$?.pathCollection||[]},e}catch{}throw m({token:i.token,errorMessage:`Type mismatch: expected '${A(a)}', got '${A(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function Xd({expr:e,env:t,context:n}){ve(e,k.__yo_type_to_comptime_string,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11361
11361
|
${w(r)}`});if(!Xe(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
|
|
11362
11362
|
${w(r)}`});let i=r.$.value;if(!i)throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
|
|
11363
|
-
${w(r)}`});return e.$={env:r.$.env,type:zt(),value:W(zt(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},R(i)&&(e.$.value=Ut(A(i.value))),e}function
|
|
11363
|
+
${w(r)}`});return e.$={env:r.$.env,type:zt(),value:W(zt(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},R(i)&&(e.$.value=Ut(A(i.value))),e}function Qd({expr:e,env:t,context:n}){let r=e.args,i=r[0],o=r[1],a=x({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(a.$?.value))throw m({token:i.token,errorMessage:`Expected type, got:
|
|
11364
11364
|
${w(i)}`});let s=a.$.value.value;t=a.$.env;let l=x({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(l.$?.value))throw m({token:o.token,errorMessage:`Expected type, got:
|
|
11365
|
-
${w(o)}`});let u=l.$.value.value;t=l.$.env;let c=q({type:s,env:t},{type:u,env:t}),_=ft(c);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}function
|
|
11365
|
+
${w(o)}`});let u=l.$.value.value;t=l.$.env;let c=q({type:s,env:t},{type:u,env:t}),_=ft(c);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}function Zd({expr:e,env:t,context:n}){let r=e.args,i=r[0],o=r[1],a=x({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(a.$?.value))throw m({token:i.token,errorMessage:`Expected type, got:
|
|
11366
11366
|
${w(i)}`});let s=a.$.value.value;t=a.$.env;let l=x({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!R(l.$?.value))throw m({token:o.token,errorMessage:`Expected type, got:
|
|
11367
|
-
${w(o)}`});let u=l.$.value.value;t=l.$.env;let c=q({type:s,env:t},{type:u,env:t},!0),_=ft(c);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}function
|
|
11367
|
+
${w(o)}`});let u=l.$.value.value;t=l.$.env;let c=q({type:s,env:t},{type:u,env:t},!0),_=ft(c);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}function Jd({expr:e,env:t,context:n}){ve(e,k.__yo_type_contains_rc_type,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11368
11368
|
${w(r)}`});if(!Xe(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
|
|
11369
11369
|
${w(r)}`});let i=r.$.value;if(!i||!R(i))throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
|
|
11370
|
-
${w(r)}`});let o=Ve(i.value),a=ft(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11370
|
+
${w(r)}`});let o=Ve(i.value),a=ft(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function em({expr:e,env:t,context:n}){ve(e,k.__yo_type_can_form_rc_cycle,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
|
|
11371
11371
|
${w(r)}`});if(!Xe(r.$.type))throw m({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
|
|
11372
11372
|
${w(r)}`});let i=r.$.value;if(!i||!R(i))throw m({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
|
|
11373
|
-
${w(r)}`});let o=sr(i.value,new Set,r.$.env),a=ft(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11373
|
+
${w(r)}`});let o=sr(i.value,new Set,r.$.env),a=ft(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function tm({expr:e,env:t,context:n}){ve(e,k.__yo_type_impls,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
|
|
11374
11374
|
${w(r)}`});if(!Xe(r.$.type))throw m({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
|
|
11375
11375
|
${w(r)}`});let i=r.$.value;if(!i||!R(i))throw m({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
|
|
11376
11376
|
${w(r)}`});t=r.$.env;let o=i.value,a=x({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw m({token:a.token,errorMessage:`Failed to evaluate the trait argument for "${e.func.token.value}":
|
|
11377
11377
|
${w(a)}`});let s;if(R(a.$.value)){let u=a.$.value;if(!Le(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(Le(a.$.type))s=a.$.type;else{if(Xe(a.$.type))return e.$={env:a.$.env,type:rt(),value:W(rt(),{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:
|
|
11378
|
-
${w(a)}`})}t=a.$.env;let l=ft(Rt({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function
|
|
11379
|
-
${i}`});t=s.$.env}return e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function
|
|
11380
|
-
${w(r[i])}`});t=l.$.env;let u=l.$.value.value;if(i++,r[i]&&F(r[i])&&E(r[i],V.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});if(a)throw m({token:r[i].token,errorMessage:"derive supports only a single where(...) clause."});a=r[i],i++}if(!pe(u)&&!ge(u))throw m({token:r[0].token,errorMessage:`derive only works on struct and enum types. Got: ${A(u)}`});let c=r.slice(i);if(c.length===0)throw m({token:e.token,errorMessage:"derive requires at least one trait argument after the target type."});let _=t;o&&(t=nt(t));let p=t;for(let f of c)t=
|
|
11381
|
-
${s}`});return u.$.env}function
|
|
11382
|
-
${w(r)}`});if(n===0){let i=r.token.value,o=Y(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=qe(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(Y(t,i).length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:H.type,value:H,env:t,pathCollection:[]},e}function
|
|
11378
|
+
${w(a)}`})}t=a.$.env;let l=ft(Rt({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function Lv({expr:e,env:t,context:n,builtinName:r}){let i=x({expr:e.args[0],env:t,context:{...n}});if(!i.$||!R(i.$.value))throw m({token:e.args[0].token,errorMessage:`${r}: expected a Type argument, got: ${w(e.args[0])}`});return{type:i.$.value.value,env:i.$.env}}function Iv(e){switch(e){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"comptime_int":return"ComptimeInt";case"comptime_float":return"ComptimeFloat";case"comptime_string":return"ComptimeString";case"char":return"Char";case"short":return"Short";case"ushort":return"UShort";case"int":return"Int";case"uint":return"UInt";case"long":return"Long";case"ulong":return"ULong";case"longlong":return"LongLong";case"ulonglong":return"ULongLong";case"longdouble":return"LongDouble";case"void":return"Void";case"Type":return"Type";case"Array":return"Array";case"Tuple":return"Tuple";case"Struct":return"Struct";case"Enum":return"Enum";case"Union":return"Union";case"Function":return"Function";case"SomeType":return"Some";case"Slice":return"Slice";case"Module":return"Module";case"Trait":return"Trait";case"Ptr":return"Ptr";case"Iso":return"Iso";case"Arc":return"Arc";case"Dyn":return"Dyn";case"Expr":return"Expr";case"ComptimeList":return"ComptimeList";case"EffectsRow":return"EffectsRow";case"TypeApplication":return"TypeApplication";default:throw new Error(`Unknown TypeTag: ${e}`)}}function nm({expr:e,env:t,context:n}){let{type:r,env:i}=Lv({expr:e,env:t,context:n,builtinName:"__yo_type_get_info"});if(D(r)){let u=et("TypeInfo.Unit"),c=x({expr:u,env:i,context:{...n,forceCompileTimeBindings:!0}});if(c.$){let _=W(c.$.type,{env:i,context:n});e.$={env:i,type:_.type,value:_,pathCollection:[]}}return e}let o,a=i;switch(r.tag){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"comptime_int":case"comptime_float":case"comptime_string":case"char":case"short":case"ushort":case"int":case"uint":case"long":case"ulong":case"longlong":case"ulonglong":case"longdouble":case"void":case"Expr":case"EffectsRow":case"TypeApplication":{o=`TypeInfo.${Iv(r.tag)}`;break}case"Array":{let u=r,c=zn(a,u.childType,n);a=c.env;let _=u.length,p;Ue(_)?p=String(_.value):p="0",o=`TypeInfo.Array(${c.name}, ${p})`;break}case"Slice":{let c=zn(a,r.childType,n);a=c.env,o=`TypeInfo.Slice(${c.name})`;break}case"Ptr":{let c=zn(a,r.childType,n);a=c.env,o=`TypeInfo.Ptr(${c.name})`;break}case"Iso":{let c=zn(a,r.childType,n);a=c.env,o=`TypeInfo.Iso(${c.name})`;break}case"Arc":{let c=zn(a,r.childType,n);a=c.env,o=`TypeInfo.Arc(${c.name})`;break}case"ComptimeList":{let c=zn(a,r.childType,n);a=c.env,o=`TypeInfo.ComptimeList(${c.name})`;break}case"Type":{o=`TypeInfo.Type(${r.level})`;break}case"Struct":{let u=r,c=ga(a,u.fields,n);a=c.env;let _;u.isNewtype?_="StructKind.NewType":u.isReferenceSemantics?_="StructKind.Object":_="StructKind.Struct",o=`TypeInfo.Struct(${c.name}, ${_})`;break}case"Enum":{let c=xv(a,r,n);a=c.env,o=`TypeInfo.Enum(${c.name})`;break}case"Union":{let c=ga(a,r.fields,n);a=c.env,o=`TypeInfo.Union(${c.name})`;break}case"Tuple":{let c=ga(a,r.fields,n);a=c.env,o=`TypeInfo.Tuple(${c.name})`;break}case"Function":{let c=rm(a,r,n);a=c.env,o=`TypeInfo.Function(${c.name})`;break}case"Module":{let c=Mv(a,r.fields,n);a=c.env,o=`TypeInfo.Module(${c.name})`;break}case"Trait":{let u=r,c=Dv(a,u,n);a=c.env;let _=Ov(a,u,n);a=_.env,o=`TypeInfo.Trait(${c.name}, ${_.name})`;break}case"Dyn":{let u=r,c=ya(a,u.requiredTraits.map(p=>p.traitType),n,"req");a=c.env;let _=ya(a,u.negativeTraits.map(p=>p.traitType),n,"neg");a=_.env,o=`TypeInfo.Dyn(${c.name}, ${_.name})`;break}case"SomeType":{let u=r,c=JSON.stringify(u.name),_=ya(a,u.requiredTraits.map(d=>d.traitType),n,"req");a=_.env;let p=ya(a,u.negativeTraits.map(d=>d.traitType),n,"neg");a=p.env;let f;u.resolvedConcreteType?f=zn(a,u.resolvedConcreteType,n):f={name:"unit",env:a},a=f.env,o=`TypeInfo.SomeType(${c}, ${_.name}, ${p.name}, ${f.name})`;break}default:throw m({token:e.token,errorMessage:`__yo_type_get_info: unsupported type tag: ${r.tag}`})}let s=et(o),l=x({expr:s,env:a,context:{...n,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw m({token:e.token,errorMessage:`__yo_type_get_info: failed to create TypeInfo for type tag: ${r.tag}`});return e.$={env:i,type:l.$.type,value:l.$.value,pathCollection:[]},e}function zn(e,t,n){let r=`__ti_t_${Ct(e.modulePath,"tit")}`,i=J(t);return e=Sr({env:e,name:r,type:i.type,value:i}),{name:r,env:e}}function ga(e,t,n){let r=[];for(let i of t){let o=Av(e,i,n);e=o.env,r.push(o.value)}return Oi(e,r,"TypeFieldInfo","fl",n)}function Av(e,t,n){let r=`__ti_fi_${Ct(e.modulePath,"tifi")}`,i=zn(e,t.type,n);e=i.env;let a=`TypeFieldInfo(${JSON.stringify(t.label)}, ${i.name})`,s=et(a),l=x({expr:s,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw new Error(`Failed to create TypeFieldInfo for field "${t.label}"`);let u=l.$.value;return e=Sr({env:e,name:r,type:l.$.type,value:u}),{name:r,env:e,value:u}}function xv(e,t,n){let r=[];for(let i=0;i<t.variants.length;i++){let o=t.variants[i],a=um(e,o.name,o.fields??[],t,i,n);e=a.env,r.push(a.value)}return Oi(e,r,"VariantInfo","vl",n)}function rm(e,t,n){let r=`__ti_fni_${Ct(e.modulePath,"tifni")}`,i=Sv(e,t.parameters,t.variadicParameter,n);e=i.env;let o=zn(e,t.return.type,n);e=o.env;let a=Vv(e,t.forallParameters,n);e=a.env;let s=Nv(e,t.implicitParameters,n);e=s.env;let l=t.isClosure?"true":"false",u=`FunctionInfo(${i.name}, ${o.name}, ${a.name}, ${s.name}, ${l})`,c=et(u),_=x({expr:c,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!_.$||!_.$.value)throw new Error("Failed to create FunctionInfo");return e=Sr({env:e,name:r,type:_.$.type,value:_.$.value}),{name:r,env:e}}function Sv(e,t,n,r){let i=[],o=n?[...t,n]:t;for(let a of o){let s=zn(e,a.type,r);e=s.env;let l=JSON.stringify(a.label),u=a.isCompileTimeOnly?"true":"false",c=a.isQuote?"true":"false",_=a===n?"true":"false",p=`ParamInfo(${l}, ${s.name}, ${u}, ${c}, ${_})`,f=et(p),d=x({expr:f,env:e,context:{...r,forceCompileTimeBindings:!0}});if(!d.$||!d.$.value)throw new Error(`Failed to create ParamInfo for param "${a.label}"`);e=d.$.env,i.push(d.$.value)}return Oi(e,i,"ParamInfo","pl",r)}function Vv(e,t,n){let r=[];for(let i of t){let o=zn(e,i.type,n);e=o.env;let s=`ForallParamInfo(${JSON.stringify(i.label)}, ${o.name})`,l=et(s),u=x({expr:l,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value)throw new Error(`Failed to create ForallParamInfo for param "${i.label}"`);e=u.$.env,r.push(u.$.value)}return Oi(e,r,"ForallParamInfo","fpl",n)}function Nv(e,t,n){let r=[];for(let i of t){let o=zn(e,i.type,n);e=o.env;let s=`ImplicitParamInfo(${JSON.stringify(i.label)}, ${o.name})`,l=et(s),u=x({expr:l,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value)throw new Error(`Failed to create ImplicitParamInfo for param "${i.label}"`);e=u.$.env,r.push(u.$.value)}return Oi(e,r,"ImplicitParamInfo","ipl",n)}function Mv(e,t,n){let r=t.map(i=>({type:i.type,label:i.label}));return ga(e,r,n)}function Dv(e,t,n){let r=[];for(let i of t.fields){let o=zn(e,i.type,n);e=o.env;let a=JSON.stringify(i.label),s=i.unassignedSomeType?"true":"false",l=`TraitFieldInfo(${a}, ${o.name}, ${s})`,u=et(l),c=x({expr:u,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!c.$||!c.$.value)throw new Error(`Failed to create TraitFieldInfo for field "${i.label}"`);e=c.$.env,r.push(c.$.value)}return Oi(e,r,"TraitFieldInfo","tfl",n)}function Ov(e,t,n){let r=`__ti_tk_${Ct(e.modulePath,"titk")}`,i;if(t.isFuture){let s=zn(e,t.isFuture.outputType,n);e=s.env;let l=t.isFuture.effects.map(c=>c.type),u=ya(e,l,n,"eff");e=u.env,i=`TraitKind.Future(${s.name}, ${u.name})`}else if(t.isFn){let s=rm(e,t.isFn.callType,n);e=s.env,i=`TraitKind.Fn(${s.name})`}else i="TraitKind.Normal";let o=et(i),a=x({expr:o,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!a.$||!a.$.value)throw new Error("Failed to create TraitKind");return e=Sr({env:e,name:r,type:a.$.type,value:a.$.value}),{name:r,env:e}}function ya(e,t,n,r){let i=[];for(let o of t){let a=zn(e,o,n);e=a.env;let s=`TraitInfo(${a.name})`,l=et(s),u=x({expr:l,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value)throw new Error("Failed to create TraitInfo");e=u.$.env,i.push(u.$.value)}return Oi(e,i,"TraitInfo","trl_"+r,n)}function im({expr:e,env:t,context:n}){let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:e.args[0].token,errorMessage:"comptime_eval: failed to evaluate argument"});if(!we(r.$.value))return e.$={env:r.$.env,type:H.type,value:H,pathCollection:[]},e;let i=r.$.value.value;t=r.$.env;let o=vu(i);for(let a of o){let s=x({expr:a,env:t,context:{...n,forceCompileTimeBindings:!1}});if(!s.$)throw m({token:e.args[0].token,errorMessage:`comptime_eval: failed to evaluate code:
|
|
11379
|
+
${i}`});t=s.$.env}return e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function om({expr:e,env:t,context:n}){ve(e,k.__yo_comptime_string_to_expr,1);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!we(r.$.value)){if(r.$?.value&&we(r.$.value)===!1){let s=W(Xt(),{env:r.$.env,context:n});return e.$={env:r.$.env,type:s.type,value:s,pathCollection:[]},e}throw m({token:e.args[0].token,errorMessage:"__yo_comptime_string_to_expr: expected a comptime_string argument"})}let i=r.$.value.value,o=et(i),a=ln(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[]},e}function Sr({env:e,name:t,type:n,value:r}){return fe({env:e,variable:{name:t,type:n,value:[r],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:se,consumedAtToken:void 0,token:se}}).env}function Oi(e,t,n,r,i){let o;if(t.length>0)o=t[0].type;else{let l=et(n),u=x({expr:l,env:e,context:{...i,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value||!R(u.$.value))throw new Error(`Failed to resolve type "${n}" for empty ComptimeList`);o=u.$.value.value}let a=`__ti_${r}_${Ct(e.modulePath,"ti"+r)}`,s=fn(o,t);return e=Sr({env:e,name:a,type:s.type,value:s}),{name:a,env:e}}function Rv(e,t,n,r){let i=`__derive_ft_${Ct(e.modulePath,"dft")}`;e=Sr({env:e,name:i,type:J(n).type,value:J(n)});let a=`FieldInfo(${JSON.stringify(t)}, ${i})`,s=et(a),l=x({expr:s,env:e,context:{...r,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw new Error(`Failed to create FieldInfo for field "${t}"`);return{value:l.$.value,env:l.$.env}}function am({env:e,context:t,mapperVarName:n,argValue:r,argType:i,token:o}){let a=`__derive_arg_${Ct(e.modulePath,"da")}`;e=Sr({env:e,name:a,type:i,value:r});let s=`${n}(${a})`,l=et(s),u=x({expr:l,env:e,context:{...t,forceCompileTimeBindings:!0}});if(!u.$||!Kt(u.$.value))throw m({token:o,errorMessage:`derive mapper function must return comptime(Expr), got: ${u.$?w(u):"nothing"}`});return{exprValue:u.$.value.value,env:u.$.env}}function Pv(e,t){if(e.length===0)throw new Error("combineExprsWithOperator: empty exprs list");if(e.length===1)return e[0];let n=e[0];for(let r=1;r<e.length;r++)n={tag:"FnCall",func:{tag:"Atom",token:t.token},args:[n,e[r]],isInfix:!0,token:t.token};return n}function sm({expr:e,env:t,context:n}){ve(e,k.__yo_type_join_fields,3);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!R(r.$.value))throw m({token:e.args[0].token,errorMessage:"__yo_type_join_fields: first argument must be a Type"});t=r.$.env;let i=r.$.value.value;if(D(i)){let d=W(Xt(),{env:t,context:n});return e.$={env:t,type:d.type,value:d,pathCollection:[]},e}if(!pe(i))throw m({token:e.args[0].token,errorMessage:`__yo_type_join_fields: expected a struct type, got: ${A(i)}`});let o=x({expr:e.args[1],env:t,context:{...n}});if(!o.$||!ee(o.$.value))throw m({token:e.args[1].token,errorMessage:"__yo_type_join_fields: second argument must be a function"});t=o.$.env;let a=o.$.value,s=`__derive_mapper_${Ct(t.modulePath,"dm")}`,l=x({expr:e.args[2],env:t,context:{...n}});if(!l.$||!Kt(l.$.value))throw m({token:e.args[2].token,errorMessage:"__yo_type_join_fields: third argument must be a quoted expression (e.g., quote(&&))"});t=l.$.env;let u=l.$.value.value;t=xe(t),t=Sr({env:t,name:s,type:o.$.type,value:a});let c=[],_=i;for(let d=0;d<_.fields.length;d++){let h=_.fields[d],{value:g,env:y}=Rv(t,h.label,h.type,n);t=y;let{exprValue:v,env:T}=am({env:t,context:{...n,expectedType:void 0},mapperVarName:s,argValue:g,argType:g.type,token:e.args[1].token});t=T,c.push(v)}if(t=nt(t,!0),c.length===0)throw m({token:e.token,errorMessage:"__yo_type_join_fields: struct has no fields"});let p=Pv(c,u),f=ln(p);return e.$={env:t,type:f.type,value:f,pathCollection:[]},e}function lm({expr:e,env:t,context:n}){ve(e,k.__yo_type_map_variants,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$||!R(r.$.value))throw m({token:e.args[0].token,errorMessage:"__yo_type_map_variants: first argument must be a Type"});t=r.$.env;let i=r.$.value.value;if(D(i)){let _=Kd([]),p=W(_.type,{env:t,context:n});return e.$={env:t,type:p.type,value:p,pathCollection:[]},e}if(!ge(i))throw m({token:e.args[0].token,errorMessage:`__yo_type_map_variants: expected an enum type, got: ${A(i)}`});let o=x({expr:e.args[1],env:t,context:{...n}});if(!o.$||!ee(o.$.value))throw m({token:e.args[1].token,errorMessage:"__yo_type_map_variants: second argument must be a function"});t=o.$.env;let a=o.$.value,s=`__derive_vmap_${Ct(t.modulePath,"dvm")}`,l=i;t=xe(t),t=Sr({env:t,name:s,type:o.$.type,value:a});let u=[];for(let _=0;_<l.variants.length;_++){let p=l.variants[_],{value:f,env:d}=um(t,p.name,p.fields??[],i,_,n);t=d;let{exprValue:h,env:g}=am({env:t,context:{...n,expectedType:void 0},mapperVarName:s,argValue:f,argType:f.type,token:e.args[1].token});t=g,u.push(ln(h))}t=nt(t,!0);let c=Kd(u);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}function um(e,t,n,r,i,o){let a=`__derive_et_${Ct(e.modulePath,"det")}`;e=Sr({env:e,name:a,type:J(r).type,value:J(r)});let s=ga(e,n,o);e=s.env;let u=`VariantInfo(${JSON.stringify(t)}, ${s.name}, ${a}, usize(${i}))`,c=et(u),_=x({expr:c,env:e,context:{...o,forceCompileTimeBindings:!0}});if(!_.$||!_.$.value)throw new Error(`Failed to create VariantInfo for variant "${t}"`);return{value:_.$.value,env:_.$.env}}function Kd(e){return fn(Xt(),e)}function _m({expr:e,env:t,context:n}){if(n.isValidatingFunctionDefinition||!n.isExecuting)return e.$={env:t,type:H.type,value:H,pathCollection:[]},e;if(e.args.length<2)throw m({token:e.token,errorMessage:`derive requires at least 2 arguments: derive(Type, Trait1, ...). Got ${e.args.length}.`});let r=e.args,i=0,o,a;if(r[i]&&F(r[i])&&E(r[i],V.forall)){o=r[i],i++,t=xe(t);for(let f of o.args){let d,h;if(F(f)&&E(f,":",2)){let $=f.args[0];if(!B($))throw m({token:$.token,errorMessage:`Expected identifier for forall parameter name, got: ${w($)}`});d=$.token.value,h=f.args[1]}else if(B(f))d=f.token.value;else throw m({token:f.token,errorMessage:`Expected parameter name for forall parameter, got: ${w(f)}`});let g;if(h){let $=x({expr:h,env:t,context:{...n}});$.$?.env&&(t=$.$.env),$.$&&R($.$.value)&&(g=$.$.value.value)}let y=g||tt(),v=W(y,{variableName:d,env:t,context:n}),{env:T}=fe({env:t,variable:{name:d,type:y,isCompileTimeOnly:!0,value:[v],token:f.token,initializedAtToken:f.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=T}}if(r[i]&&F(r[i])&&E(r[i],V.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});a=r[i],i++}if(!r[i])throw m({token:e.token,errorMessage:"derive requires a target type."});let s=r[i],l=x({expr:r[i],env:t,context:{...n}});if(!l.$||!R(l.$.value))throw m({token:r[i].token,errorMessage:`derive: expected a type, got:
|
|
11380
|
+
${w(r[i])}`});t=l.$.env;let u=l.$.value.value;if(i++,r[i]&&F(r[i])&&E(r[i],V.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});if(a)throw m({token:r[i].token,errorMessage:"derive supports only a single where(...) clause."});a=r[i],i++}if(!pe(u)&&!ge(u))throw m({token:r[0].token,errorMessage:`derive only works on struct and enum types. Got: ${A(u)}`});let c=r.slice(i);if(c.length===0)throw m({token:e.token,errorMessage:"derive requires at least one trait argument after the target type."});let _=t;o&&(t=nt(t));let p=t;for(let f of c)t=Uv({traitArgExpr:f,targetType:u,env:p,envForTraitEval:o?_:p,context:n,forallArg:o,whereArg:a,targetTypeExpr:s});return e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function Uv({traitArgExpr:e,targetType:t,env:n,envForTraitEval:r,context:i,forallArg:o,whereArg:a,targetTypeExpr:s}){let l=x({expr:e,env:r,context:{...i}});if(!l.$)throw m({token:e.token,errorMessage:`derive: failed to evaluate trait argument: ${w(e)}`});if(Le(l.$.type)){let u=l.$.type,c=u.deriveRule??u.functionValue?.deriveRule;if(c){let _=cm(e);return au({deriveRule:c,targetType:t,env:n,context:i,token:e.token,traitParams:_,forallArg:o,whereArg:a,targetTypeExpr:s})}throw m({token:e.token,errorMessage:`derive: trait '${A(u)}' does not have a derive rule. Use derive_rule() to register one, or provide a derive function.`})}if(R(l.$.value)&&Le(l.$.value.value)){let u=l.$.value.value,c=u.deriveRule??u.functionValue?.deriveRule;if(c){let _=cm(e);return au({deriveRule:c,targetType:t,env:n,context:i,token:e.token,traitParams:_,forallArg:o,whereArg:a,targetTypeExpr:s})}throw m({token:e.token,errorMessage:`derive: trait '${A(u)}' does not have a derive rule. Use derive_rule() to register one, or provide a derive function.`})}if(ee(l.$.value)){let u=l.$.value;return u.deriveRule?au({deriveRule:u.deriveRule,targetType:t,env:n,context:i,token:e.token,traitParams:[],forallArg:o,whereArg:a,targetTypeExpr:s}):zv({funcValue:u,targetType:t,env:n,context:i,token:e.token})}throw m({token:e.token,errorMessage:`derive: expected a trait or derive function, got: ${w(e)}`})}function zv({funcValue:e,targetType:t,env:n,context:r,token:i}){let o=t.typeName??A(t),a=e.funcName;if(!a)throw m({token:i,errorMessage:"derive: user-defined derive function must be a named function."});let s=`${a}(${o})`,l=et(s),u=x({expr:l,env:n,context:{...r,forceCompileTimeBindings:!1}});if(!u.$)throw m({token:i,errorMessage:`derive: user-defined derive function failed:
|
|
11381
|
+
${s}`});return u.$.env}function cm(e){return F(e)?e.args??[]:[]}function au({deriveRule:e,targetType:t,env:n,context:r,token:i,traitParams:o,forallArg:a,whereArg:s,targetTypeExpr:l}){n=xe(n);let u=`__derive_T_${Ct(n.modulePath,"dT")}`,c=J(t);n=pr(n,u,c.type,c);let _=`__derive_rule_${Ct(n.modulePath,"dr")}`;n=pr(n,_,e.type,e);let p=ln(l),f=`__derive_te_${Ct(n.modulePath,"dte")}`;n=pr(n,f,p.type,p);let d=`__derive_fp_${Ct(n.modulePath,"dfp")}`;{let M=`__derive_fp_tmp_${Ct(n.modulePath,"dfpt")}`,N;if(a){let ne=ln(a),j=`__derive_fpe_${Ct(n.modulePath,"dfpe")}`;n=pr(n,j,ne.type,ne),N=`((${M} : Option(Expr)) = .Some(${j}))`}else N=`((${M} : Option(Expr)) = .None)`;let O=et(N),Q=x({expr:O,env:n,context:{...r,forceCompileTimeBindings:!0}});if(Q.$){n=Q.$.env;let ne=Y(n,M),j=ne[ne.length-1];j&&j.value&&j.value[0]&&(n=pr(n,d,j.type,j.value[0]))}}let h=`__derive_wp_${Ct(n.modulePath,"dwp")}`;{let M=`__derive_wp_tmp_${Ct(n.modulePath,"dwpt")}`,N;if(s){let ne=ln(s),j=`__derive_wpe_${Ct(n.modulePath,"dwpe")}`;n=pr(n,j,ne.type,ne),N=`((${M} : Option(Expr)) = .Some(${j}))`}else N=`((${M} : Option(Expr)) = .None)`;let O=et(N),Q=x({expr:O,env:n,context:{...r,forceCompileTimeBindings:!0}});if(Q.$){n=Q.$.env;let ne=Y(n,M),j=ne[ne.length-1];j&&j.value&&j.value[0]&&(n=pr(n,h,j.type,j.value[0]))}}let g=`__derive_ctx_${Ct(n.modulePath,"dctx")}`,y=`DeriveContext(${f}, ${d}, ${h})`,v=et(y),T=x({expr:v,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!T.$||!T.$.value)throw m({token:i,errorMessage:"derive: failed to create DeriveContext"});n=T.$.env,n=pr(n,g,T.$.type,T.$.value);let $=[];for(let M=0;M<o.length;M++){let N=ln(o[M]),O=`__derive_tp_${Ct(n.modulePath,"dtp")}`;n=pr(n,O,N.type,N),$.push(O)}let C=`__derive_tps_${Ct(n.modulePath,"dtps")}`;if($.length>0){let M=`comptime_list(${$.join(", ")})`,N=et(M),O=x({expr:N,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!O.$||!O.$.value)throw m({token:i,errorMessage:"derive: failed to create trait params list"});n=O.$.env,n=pr(n,C,O.$.type,O.$.value)}else{let M=Xt(),N=fn(M,[]);n=pr(n,C,N.type,N)}let L=`${_}(${u}, ${g}, ${C})`,b=et(L),S=x({expr:b,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!S.$||!S.$.value)throw m({token:i,errorMessage:"derive: derive rule function failed"});if(n=S.$.env,!Kt(S.$.value))throw m({token:i,errorMessage:"derive: derive rule must return comptime(Expr), got something else"});let I=S.$.value.value;n=nt(n,!0);let z=x({expr:I,env:n,context:{...r,forceCompileTimeBindings:!1}});if(!z.$)throw m({token:i,errorMessage:"derive: failed to evaluate derive rule output"});return z.$.env}function pr(e,t,n,r){return fe({env:e,variable:{name:t,type:n,value:[r],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:se,consumedAtToken:void 0,token:se}}).env}function pm({expr:e,env:t,context:n}){ve(e,k.derive_rule,2);let r=x({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:e.args[0].token,errorMessage:`derive_rule: failed to evaluate trait argument: ${w(e.args[0])}`});t=r.$.env;let i=x({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw m({token:e.args[1].token,errorMessage:`derive_rule: failed to evaluate derive function: ${w(e.args[1])}`});if(t=i.$.env,!ee(i.$.value))throw m({token:e.args[1].token,errorMessage:`derive_rule: second argument must be a function, got: ${w(e.args[1])}`});let o=i.$.value;if(ee(r.$.value))r.$.value.deriveRule=o;else if(Le(r.$.type))r.$.type.deriveRule=o;else if(R(r.$.value)&&Le(r.$.value.value))r.$.value.value.deriveRule=o;else throw m({token:e.args[0].token,errorMessage:`derive_rule: first argument must be a trait constructor or trait type, got: ${w(e.args[0])}`});return e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function fm({expr:e,env:t,context:n}){ve(e,k.typeid,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression for typeid."});if(t=i.$.env,!i.$.value||!R(i.$.value))throw m({token:r.token,errorMessage:`typeid expects a type argument, got ${i.$.type?A(i.$.type):"unknown"}. Use is() or downcast() for runtime type checks on Dyn values.`});let o=W(St(),{env:t,context:n});return e.$={env:t,type:St(),value:o,pathCollection:[]},e}function dm({expr:e,env:t}){ve(e,k.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!B(r)||!Qe(r))throw m({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
|
|
11382
|
+
${w(r)}`});if(n===0){let i=r.token.value,o=Y(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=qe(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(Y(t,i).length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:H.type,value:H,env:t,pathCollection:[]},e}function mm({expr:e,env:t,context:n}){ve(e,k.__yo_var_print_info,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName;if(o){let a=Y(t,o);if(a.length>0){let s=a.at(-1);console.log(Ac(s))}}return e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function ym({expr:e,env:t,context:n}){ve(e,k.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName,a=!1;if(o){let s=Y(t,o);s.length>0&&(a=s.at(-1).isOwningTheRcValue)}return e.$={env:t,type:rt(),value:ft(a),pathCollection:[]},e}function gm({expr:e,env:t,context:n}){ve(e,k.__yo_var_has_other_aliases,1);let r=e.args[0],i=x({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=i.$?.variableName,a=!1;if(o){let s=Y(t,o);if(s.length>0){let l=s.at(-1);if(l.isOwningTheSameRcValueAs)a=!0;else{let c=l.id;for(let _=t.frames.length-1;_>=0;_--){let p=t.frames[_];for(let f=0;f<p.variables.length;f++){let d=p.variables[f];if(d.isOwningTheSameRcValueAs&&d.isOwningTheSameRcValueAs.id===c){a=!0;break}}}}}}return e.$={env:t,type:rt(),value:ft(a),pathCollection:[]},e}function hm({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&Ee(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
|
|
11383
11383
|
${w(r)}`});if(t=o.$.env,R(o.$.value)){let s=o.$.value.value,l=It(s),u=J(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw m({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
|
|
11384
|
-
${w(r)}`})}function
|
|
11384
|
+
${w(r)}`})}function vm({expr:e,env:t,context:n}){if(!E(e,V.Array,2))throw m({token:e.token,errorMessage:`Expected "Array(comptime(Type), comptime(usize))" with 2 arguments, like "Array(i32, 10)"
|
|
11385
11385
|
Got:
|
|
11386
11386
|
${w(e)}`});let r=e.args[0],i=e.args[1],o=B(i)&&i.token.value==="_",a=x({expr:r,env:t,context:{...n}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
11387
11387
|
${w(r)}`});if(!R(a.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
|
|
@@ -11390,26 +11390,26 @@ ${w(r)}
|
|
|
11390
11390
|
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)}`,f=W(St(),{variableName:p,env:a.$.env,context:n}),{env:d}=fe({env:a.$.env,variable:{name:p,value:[f],type:St(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),h=kr(s,f),g=J(h);return e.$={env:d,type:g.type,value:g,pathCollection:[]},e}let l=x({expr:i,env:t,context:{...n,expectedType:{type:St(),env:t}}});if(!l.$)throw m({token:i.token,errorMessage:`Failed to evaluate the length expression:
|
|
11391
11391
|
${w(i)}`});if(!q({type:St(),env:t},{type:l.$.type,env:t}))throw m({token:i.token,errorMessage:`Expected usize for length, got:
|
|
11392
11392
|
${w(i)}`});let u=l.$.value;if(!u)throw m({token:i.token,errorMessage:`Expected compile-time known value for length, got:
|
|
11393
|
-
${w(i)}`});ue(u)&&(u.type=St());let c=kr(s,u),_=J(c);return e.$={env:l.$.env,type:_.type,value:_,pathCollection:[]},e}function
|
|
11393
|
+
${w(i)}`});ue(u)&&(u.type=St());let c=kr(s,u),_=J(c);return e.$={env:l.$.env,type:_.type,value:_,pathCollection:[]},e}function Tm({expr:e,env:t,context:n}){return ss({expr:e,env:t,context:n})}function Em({expr:e,env:t,context:n}){ve(e,V.ComptimeList,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
11394
11394
|
${w(r)}`});if(!R(i.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
|
|
11395
|
-
${w(r)}`});let o=i.$.value.value,a=Mr(o),s=J(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function
|
|
11395
|
+
${w(r)}`});let o=i.$.value.value,a=Mr(o),s=J(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function $m({expr:e,env:t,context:n}){if(e.args.length!==1)throw m({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
|
|
11396
11396
|
${w(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
|
|
11397
|
-
${w(r)}`});let o=i.$.value.value,a=Pe(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:Ft(a),value:J(a),pathCollection:[]},e}function
|
|
11397
|
+
${w(r)}`});let o=i.$.value.value,a=Pe(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:Ft(a),value:J(a),pathCollection:[]},e}function Cm({expr:e,env:t,context:n}){ve(e,V.Dyn);let r=e.args,i=[],o=[];for(let u=0;u<r.length;u++){let c=r[u],_=F(c)&&E(c,"!")&&c.args.length===1,p=_?c.args[0]:c,f=x({expr:p,env:t,context:{...n}});if(!f.$||!f.$.value||!R(f.$.value)||!Le(f.$.value.value))throw new Error(`Expected a trait type for argument ${u+1} of 'dyn' expression.`);t=f.$.env;let d=f.$.value.value;if(_){if(o.some(h=>h.id===d.id))throw m({token:p.token,errorMessage:`Trait type ${A(d)} is already included in negative constraints of '${V.Dyn}' expression.`});o.push(d)}else{if(i.some(h=>h.id===d.id))throw m({token:p.token,errorMessage:`Trait type ${A(d)} is already included in '${V.Dyn}' expression.`});i.push(d)}}{let u=new Set(i.map(_=>_.id)),c=[...i];for(;c.length>0;){let _=c.pop();if(_.selfConstraints)for(let p of _.selfConstraints)u.has(p.id)||(u.add(p.id),i.push(p),c.push(p))}}for(let u=0;u<i.length;u++){let c=i[u];for(let _=u+1;_<i.length;_++){let p=i[_];for(let f of c.fields)for(let d of p.fields)if(f.label===d.label&&f.label!=="")throw m({token:e.token,errorMessage:`Trait types ${A(c)} and ${A(p)} have conflicting function name '${f.label}' in '${V.Dyn[0]}' expression.`})}}let a=[k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]];for(let u of i)for(let c of u.fields)if(a.includes(c.label)&&G(c.type))throw m({token:e.token,errorMessage:`Trait type ${A(u)} cannot have function '${c.label}' as it is reserved in 'dyn' expression.`});let s=Ho({requiredTraits:i,env:t,negativeTraits:o});t=Wo({dynType:s,env:t,context:n});let l=J(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function _i({expr:e,tupleFieldIndex:t,env:n,context:r,forType:i}){let o,a=e,s,l,u,c,_,p,f=!1,d;if(F(e)&&E(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(E(a,"=",2)||E(a,"::",2))){if(E(a,"::",2)){if(f=!0,s=a.args[0],!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${w(s)}`});o=s.token.value}_=a.args[1],a=a.args[0]}if(u&&_)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(F(a)&&E(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&E(s,V.comptime,1)){if(f)throw m({token:s.token,errorMessage:'Cannot combine the use of "comptime" with ::'});f=!0,s=s.args[0]}if(!B(s)||!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${w(s)}`});o=s.token.value}else if(F(a)&&E(a,V.comptime,1)){if(f)throw m({token:a.token,errorMessage:'Cannot combine the use of "comptime" with "::"'});if(f=!0,s=a.args[0],!B(s)||!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for element label, got ${w(s)}`});o=s.token.value}else!u&&!_&&(l=a);let h=r.expectedType?.type,g;if(h&&(Se(h)||pe(h)||Ce(h)||Le(h))){let v=h.fields[t];if(!v)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=v.type}if(l){let v=x({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});v.$?.env&&(n=v.$?.env);let T=v.$?.value;if(!R(T))throw m({token:l.token,errorMessage:`(1) Expected type for element, got ${w(l)}`});d=T.value}if(_){if(!f)throw m({token:_.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
|
|
11398
11398
|
Please consider adding "comptime" modifier to the field label.`});let v=d?{type:d,env:n}:g?{type:g,env:n}:void 0,T=x({expr:_,env:n,context:{...r,expectedType:v,forceCompileTimeBindings:void 0}});if(!T.$)throw m({token:_.token,errorMessage:`Failed to evaluate required value expression: ${w(_)}`});if(n=T.$?.env,p=T.$.value,!p)throw m({token:_.token,errorMessage:`Expected compile-time known value for required value, got ${w(_)}`});let $=T.$.type;if(v){if(!q({type:v.type,env:n},{type:$,env:n}))throw m({token:_.token,errorMessage:`Assigned value type mismatch:
|
|
11399
11399
|
Expected type: ${A(v.type)}
|
|
11400
11400
|
Given type: ${A($)}`});d=v.type}else d=$}if(u){let v=d?{type:d,env:n}:g?{type:g,env:n}:void 0,T=x({expr:u,env:n,context:{...r,expectedType:v}});if(!T.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${w(u)}`});if(n=T.$.env,c=T.$?.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${w(u)}`});let $=T.$.type;if(v){if(!q({type:v.type,env:n},{type:$,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
|
|
11401
11401
|
Expected type: ${A(v.type)}
|
|
11402
|
-
Given type: ${A($)}`});d=v.type}else d=$}if(!d)throw m({token:e.token,errorMessage:"Failed to infer the element type"});if(i!=="tuple"&&!s)throw m({token:e.token,errorMessage:`Expected label for ${i} field, got ${w(a)}`});return s&&(s.$={env:n,type:d,value:p??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:H,type:H.type,pathCollection:[]}),Or(d,e.token),{field:{label:o??`${t}`,type:d,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:p},env:n}}function
|
|
11403
|
-
${w(e)}`});let r=
|
|
11402
|
+
Given type: ${A($)}`});d=v.type}else d=$}if(!d)throw m({token:e.token,errorMessage:"Failed to infer the element type"});if(i!=="tuple"&&!s)throw m({token:e.token,errorMessage:`Expected label for ${i} field, got ${w(a)}`});return s&&(s.$={env:n,type:d,value:p??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:H,type:H.type,pathCollection:[]}),Or(d,e.token),{field:{label:o??`${t}`,type:d,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:p},env:n}}function bm({expr:e,env:t,context:n}){if(!E(e,V.enum))throw m({token:e.token,errorMessage:`Expected "enum", got:
|
|
11403
|
+
${w(e)}`});let r=tc(t);Ss({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=r.variants,o=0n;for(let s=0;s<e.args.length;s++){let l=e.args[s],u;if(E(l,"->",2))u=l.args[1],l=l.args[0];else if(E(l,"=",2)&&E(l.args[0],"->",2)){let c=l,_=c.args[0];u=_.args[1],l={...c,args:[_.args[0],c.args[1]]}}if(F(l)&&E(l,"=",2)&&B(l.args[0])){let c=l.args[0],_=l.args[1];if(!Qe(c))throw m({token:c.token,errorMessage:`Expected identifier for enum variant, got:
|
|
11404
11404
|
${w(c)}`});let p=c.token.value;if(i.some(y=>y.name===p))throw m({token:c.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=x({expr:_,env:t,context:{...n,SelfType:r}});if(!f.$)throw m({token:_.token,errorMessage:`Failed to evaluate discriminant value: ${w(_)}`});t=f.$.env;let d=f.$.value,h=f.$.type;if(!Ln(d)&&!gt(h))throw m({token:_.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${w(_)}`});if(!Ln(d))throw m({token:_.token,errorMessage:`Enum discriminant must be a compile-time known value, got: ${w(_)}`});let g=typeof d.value=="bigint"?d.value:BigInt(d.value);i.push({name:p,discriminant:g}),o=g+1n}else{if(F(l)&&(E(l,"::",2)||E(l,"?=",2)))throw m({token:l.token,errorMessage:'Please use "impl" block to define members/methods for enum types.'});if(B(l)){let c=l.token.value;if(!Qe(l))throw m({token:l.token,errorMessage:`Expected identifier for enum variant, got:
|
|
11405
11405
|
${w(l)}`});if(i.some(_=>_.name===c))throw m({token:l.token,errorMessage:`Duplicate variant name "${c}" in enum`});i.push({name:c,discriminant:o}),o+=1n}else{let c=l,_;if(E(l,"=",2)){c=l.args[0];let h=l.args[1],g=x({expr:h,env:t,context:{...n,SelfType:r}});if(!g.$)throw m({token:h.token,errorMessage:`Failed to evaluate discriminant value: ${w(h)}`});t=g.$.env;let y=g.$.value;if(!Ln(y))throw m({token:h.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${w(h)}`});_=typeof y.value=="bigint"?y.value:BigInt(y.value)}if(E(c,":"))throw m({token:c.token,errorMessage:"Enum variant with : is not implemented yet"});if(!F(c)||!Qe(c.func))throw m({token:c.token,errorMessage:`Expected identifier for enum variant, got:
|
|
11406
|
-
${w(c)}`});let p=c.func.token.value;if(i.some(h=>h.name===p))throw m({token:c.func.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=[];for(let h=0;h<c.args.length;h++){let g=c.args[h],{field:y,env:v}=_i({expr:g,env:t,tupleFieldIndex:h,context:{...n,SelfType:r},forType:"enum"});if(f.find($=>$.label===y.label))throw m({token:F(g)?g.args[0]?.token??g.token:g.token,errorMessage:`Duplicate field label "${y.label}" in enum variant`});if(y.assignedValue)throw m({token:y.exprs.assignedValueExpr?.token??y.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});f.push(y),t=v}let d=_??o;i.push({name:p,fields:f,discriminant:d}),o=d+1n}}if(u){if(!E(u,V.recur))throw m({token:u.token,errorMessage:`Expected "recur(...)" for GADT return type, got: ${w(u)}`});let c=[];for(let _ of u.args){let p=x({expr:_,env:t,context:{...n,SelfType:r}});if(!p.$)throw m({token:_.token,errorMessage:`Failed to evaluate GADT return type argument: ${w(_)}`});if(!R(p.$.value))throw m({token:_.token,errorMessage:`GADT return type argument must be a type, got: ${w(_)}`});c.push(p.$.value.value),t=p.$.env}if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.type.parameters.filter(f=>f.isCompileTimeOnly);if(p.length!==c.length)throw m({token:u.token,errorMessage:`GADT return type has ${c.length} argument(s), but the type constructor has ${p.length} type parameter(s)`})}i[i.length-1].gadtReturnTypeArgs=c,r.isGadt=!0}}if(r.isGadt&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.type.parameters.filter(u=>u.isCompileTimeOnly);if(l.length>0){let u=[];for(let c of l){let _=Y(t,c.label);if(_.length>0&&_[_.length-1].value){let p=_[_.length-1].value[0];R(p)&&u.push(p.value)}}u.length===l.length&&(r.typeConstructorArgs=u)}}t=
|
|
11406
|
+
${w(c)}`});let p=c.func.token.value;if(i.some(h=>h.name===p))throw m({token:c.func.token,errorMessage:`Duplicate variant name "${p}" in enum`});let f=[];for(let h=0;h<c.args.length;h++){let g=c.args[h],{field:y,env:v}=_i({expr:g,env:t,tupleFieldIndex:h,context:{...n,SelfType:r},forType:"enum"});if(f.find($=>$.label===y.label))throw m({token:F(g)?g.args[0]?.token??g.token:g.token,errorMessage:`Duplicate field label "${y.label}" in enum variant`});if(y.assignedValue)throw m({token:y.exprs.assignedValueExpr?.token??y.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});f.push(y),t=v}let d=_??o;i.push({name:p,fields:f,discriminant:d}),o=d+1n}}if(u){if(!E(u,V.recur))throw m({token:u.token,errorMessage:`Expected "recur(...)" for GADT return type, got: ${w(u)}`});let c=[];for(let _ of u.args){let p=x({expr:_,env:t,context:{...n,SelfType:r}});if(!p.$)throw m({token:_.token,errorMessage:`Failed to evaluate GADT return type argument: ${w(_)}`});if(!R(p.$.value))throw m({token:_.token,errorMessage:`GADT return type argument must be a type, got: ${w(_)}`});c.push(p.$.value.value),t=p.$.env}if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.type.parameters.filter(f=>f.isCompileTimeOnly);if(p.length!==c.length)throw m({token:u.token,errorMessage:`GADT return type has ${c.length} argument(s), but the type constructor has ${p.length} type parameter(s)`})}i[i.length-1].gadtReturnTypeArgs=c,r.isGadt=!0}}if(r.isGadt&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.type.parameters.filter(u=>u.isCompileTimeOnly);if(l.length>0){let u=[];for(let c of l){let _=Y(t,c.label);if(_.length>0&&_[_.length-1].value){let p=_[_.length-1].value[0];R(p)&&u.push(p.value)}}u.length===l.length&&(r.typeConstructorArgs=u)}}t=zu({enumType:r,env:t,context:n,errorToken:e.token});let a=J(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function km({expr:e,env:t,context:n}){if(!E(e,"->",2))throw m({token:e.token,errorMessage:`Expected -> operator for Fn trait type, got:
|
|
11407
11407
|
${w(e)}`});let r=e.args[0],i=e.args[1];if(!F(r)||!E(r,V.Fn))throw m({token:r.token,errorMessage:`Expected Fn(...) for function trait, got:
|
|
11408
|
-
${w(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:_}=
|
|
11409
|
-
${w(i)}`});let h=Ur({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:d,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${Re(t.modulePath)}`},env:nt(_,!0),parametersFrame:_.frames[_.frames.length-1],isClosure:!0}),g=Pe(nt(_,!0));return g.isFn={callType:h},t=nt(_,!0),e.$={env:t,type:Ft(g),value:J(g),pathCollection:[]},e}function
|
|
11408
|
+
${w(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:_}=Xl({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}}),p=x({expr:i,env:_,context:{...n,isEvaluatingFunctionType:!0}});if(!p.$)throw m({token:i.token,errorMessage:"Failed to evaluate return type for Fn trait."});let f=p.$.value,d;if(R(f))d=f.value;else throw m({token:i.token,errorMessage:`Expected a type for Fn return type, got:
|
|
11409
|
+
${w(i)}`});let h=Ur({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:d,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${Re(t.modulePath)}`},env:nt(_,!0),parametersFrame:_.frames[_.frames.length-1],isClosure:!0}),g=Pe(nt(_,!0));return g.isFn={callType:h},t=nt(_,!0),e.$={env:t,type:Ft(g),value:J(g),pathCollection:[]},e}function wm({expr:e,env:t,context:n}){if(e.args.length<1)throw m({token:e.token,errorMessage:"Future type constructor expects at least 1 argument (output type). Usage: Future(T), Future(T, ...(E)), Future(T, Raise, ...(E))"});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
|
|
11410
11410
|
${w(r)}`});if(t=i.$.env,!R(i.$.value))throw m({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
|
|
11411
|
-
${w(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],_=
|
|
11412
|
-
${w(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:
|
|
11411
|
+
${w(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],_=Bv(c,t,n);a.push(_.effect),t=_.env}let s=Pe(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:Ft(s),value:J(s),pathCollection:[]},e}function Bv(e,t,n){if(F(e)&&E(e,"...")&&e.args.length===1&&B(e.args[0]))return Gv(e,t);let r=x({expr:e,env:t,context:{...n}});if(!r.$||!R(r.$.value))throw m({token:e.token,errorMessage:`Future effect argument must be an effect type or ...(E) spread, but got:
|
|
11412
|
+
${w(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:Wv(i,e),type:i,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!1,isQuote:!1,isOwningTheRcValue:!1,exprs:Li({expr:e,labelExpr:void 0,typeExpr:e,defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function Gv(e,t){let n=e.args[0].token.value,i=Y(t,n).at(-1);if(!i)throw m({token:e.token,errorMessage:`Effect row variable "${n}" not found in scope. Declare it with forall(..., ...(${n}))`});let o=i.value?.[0],a;if(o&&R(o))if(D(o.value)&&o.value.isEffectsRow||lt(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&&ue(o)&<(o.type))a=o.type;else if(o&&ue(o)&&D(o.type)&&o.type.isEffectsRow)a=o.type;else if(o&&ue(o)&&Xe(o.type))a=Fi(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:Li({expr:e,labelExpr:e.args[0],typeExpr:e.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function Wv(e,t){return Ce(e)&&e.typeName?e.typeName:D(e)&&e.name?e.name:w(t)}function ha({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:i}){let o,a=e,s,l,u,c,_,p,f;if(F(e)&&E(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(E(a,"=",2)||E(a,"::",2)||E(a,":=",2))){if(E(a,"::",2))throw m({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
|
|
11413
11413
|
All module fields are compile-time only by default.`});_=a.args[1],a=a.args[0]}if(u&&_)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(F(a)&&E(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&E(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(!B(s)&&!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${w(s)}`});o=s.token.value}else{if(F(a)&&E(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&&!_)throw m({token:e.token,errorMessage:`Expected label for module field, got ${w(a)}`});if(s=a,!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${w(s)}`});if(!B(s)&&!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for module field label, got ${w(s)}`});o=s.token.value}let d=r.expectedType?.type,h;if(d&&Ce(d)){let g=d.fields[t];if(!g)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=g.type}if(l){let g=x({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});g.$?.env&&(n=g.$?.env);let y=g.$?.value;if(!R(y))throw m({token:l.token,errorMessage:`Expected type for module field, got ${w(l)}`});f=y.value}if(_){let g=f?{type:f,env:n}:h?{type:h,env:n}:void 0,y=x({expr:_,env:n,context:{...r,expectedType:g}});if(!y.$)throw m({token:_.token,errorMessage:`Failed to evaluate required value expression: ${w(_)}`});if(n=y.$?.env,p=y.$.value,!p)throw m({token:_.token,errorMessage:`Expected compile-time known value for required value, got ${w(_)}`});let v=y.$.type;if(g){if(!q({type:g.type,env:n},{type:v,env:n}))throw m({token:_.token,errorMessage:`Assigned value type mismatch:
|
|
11414
11414
|
Expected type: ${A(g.type)}
|
|
11415
11415
|
Given type: ${A(v)}`});f=g.type}else f=v}if(u){let g=f?{type:f,env:n}:h?{type:h,env:n}:void 0,y=x({expr:u,env:n,context:{...r,expectedType:g}});if(!y.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${w(u)}`});if(n=y.$.env,c=y.$?.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${w(u)}`});let v=y.$.type;if(g){if(!q({type:g.type,env:n},{type:v,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
|
|
@@ -11420,16 +11420,16 @@ Type expressions are required for all function parameters in module fields to su
|
|
|
11420
11420
|
Type expressions are required for return types in module fields to support proper type specialization.`})}if(i&&u&&!G(f))throw m({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elements (excluding closures).
|
|
11421
11421
|
Module field "${o??"unnamed"}" has type: ${A(f)}
|
|
11422
11422
|
|
|
11423
|
-
To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:f,value:p??W(f,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:H,type:H.type,pathCollection:[]}),{field:{label:o??`__field_${Re(n.modulePath)}`,type:f,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:p},env:n}}function
|
|
11423
|
+
To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:f,value:p??W(f,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:H,type:H.type,pathCollection:[]}),{field:{label:o??`__field_${Re(n.modulePath)}`,type:f,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:p},env:n}}function Fm({expr:e,env:t,context:n}){if(!E(e,V.module))throw m({token:e.token,errorMessage:`Expected "module", got:
|
|
11424
11424
|
${w(e)}`});let r=Da(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let o=e.args;for(let s=0;s<o.length;s++){let l=o[s];if(F(l)&&E(l,"...",1)){let u=l.args[0],c=x({expr:u,env:t,context:{...n,SelfType:void 0}});if(!c.$)throw m({token:u.token,errorMessage:`Failed to evaluate the extended struct expression: ${w(u)}`});let _=c.$.value;if(R(_)&&Ce(_.value)||ue(_)&&Ce(_.type)){let p;R(_)&&Ce(_.value)?p=_.value:p=_.type;for(let f of p.fields){let d=i.findIndex(h=>h.label===f.label);if(d>=0){if(i[d].assignedValue&&f.assignedValue&&Ot({value:i[d].assignedValue,env:t},{value:f.assignedValue,env:t})||!i[d].assignedValue&&!f.assignedValue&&q({type:i[d].type,env:t},{type:f.type,env:t}))continue;throw console.log(!!i[d].assignedValue,!!f.assignedValue),console.log(A(i[d].type),`
|
|
11425
11425
|
`,A(f.type),`
|
|
11426
11426
|
`,q({type:i[d].type,env:t},{type:f.type,env:t})),m({token:u.token,errorMessage:`Duplicate label 1 "${f.label}" in module`})}else i.push(f)}}else if(Ye(_)){let p=_;for(let f=0;f<p.fields.length;f++){let d=p.fields[f],h=p.type.fields[f],g=i.findIndex(y=>y.label===h.label);if(g>=0){if(i[g].assignedValue&&h.assignedValue&&Ot({value:i[g].assignedValue,env:t},{value:h.assignedValue,env:t})||!i[g].assignedValue&&!h.assignedValue&&q({type:i[g].type,env:t},{type:h.type,env:t}))continue;throw m({token:u.token,errorMessage:`Duplicate label 2 "${h.label}" in module`})}else i.push({...p.type.fields[f],assignedValue:d})}}else throw m({token:u.token,errorMessage:`Expected a Module type or value for extending, got ${w(u)}`})}else{let{field:u,env:c}=ha({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0,SelfModuleType:r},isForEvaluatingModuleType:!0});if(i.find(p=>p.label===u.label))throw m({token:F(l)?l.args[0]?.token??l.token:l.token,errorMessage:`Duplicate label 3 "${u.label}" in module`});i.push(u),t=c}}let a=J(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function ko({expr:e,env:t,context:n}){let r=E(e,V.object),i=E(e,V.struct),o=E(e,V.newtype);if(!i&&!r&&!o)throw m({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
|
|
11427
|
-
${w(e)}`});let a=r,s=o,l=wi(t,a,s);
|
|
11428
|
-
${w(e)}`});return ko({expr:e,env:t,context:n})}function
|
|
11427
|
+
${w(e)}`});let a=r,s=o,l=wi(t,a,s);xs({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.trait.definedInModulePath=n.currentModulePath);let u=l.fields;for(let _=0;_<e.args.length;_++){let p=e.args[_];{let{field:f,env:d}=_i({expr:p,env:t,tupleFieldIndex:_,context:{...n,SelfType:l},forType:"struct"});if(u.find(g=>g.label===f.label))throw m({token:F(p)?p.args[0]?.token??p.token:p.token,errorMessage:`Duplicate label "${f.label}" in struct`});u.push(f),t=d}}if(s&&u.length!==1)throw m({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=bi({structType:l,env:t,context:n,errorToken:e.token});let c=J(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e.func.$=e.$,e}function Lm({expr:e,env:t,context:n}){return ve(e,V.newtype),ko({expr:e,env:t,context:n})}function Im({expr:e,env:t,context:n}){if(!E(e,V.object))throw m({token:e.token,errorMessage:`Expected "object", got:
|
|
11428
|
+
${w(e)}`});return ko({expr:e,env:t,context:n})}function Am({expr:e,env:t,context:n}){ve(e,V.Slice,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
11429
11429
|
${w(r)}`});if(!R(i.$.value))throw m({token:r.token,errorMessage:`Expected type for element type, got:
|
|
11430
11430
|
${w(r)}
|
|
11431
11431
|
|
|
11432
|
-
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=Pr(o),s=J(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function
|
|
11432
|
+
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=Pr(o),s=J(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function Sm({lhsExpr:e,env:t,context:n,selfType:r}){if(B(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(B(e)){let a=e.token.value,s=Y(t,a);if(s.length>0){let _=s[s.length-1];if(_.value&&R(_.value[0])&&D(_.value[0].value))return{env:t,someType:_.value[0].value,isSelf:!1}}let l=Vn(tt(),a,{env:t,context:n}),u=J(l),{env:c}=fe({env:t,variable:{name:a,type:Ft(l),isCompileTimeOnly:!0,value:[u],token:e.token,initializedAtToken:e.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});return{env:c,someType:l,isSelf:!1}}let i=x({expr:e,env:t,context:{...n,SelfType:r}});if(!i.$||!i.$.value||!R(i.$.value))throw m({token:e.token,errorMessage:"Expected type for left-hand side of where clause constraint."});let o=i.$.value;if(!D(o.value))throw m({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${A(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function qv({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;F(t)&&E(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=Sm({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=x({expr:s,env:n,context:{...r,SelfType:i}})}catch{return{env:n,success:!1}}if(!u.$||!u.$.value||!R(u.$.value))return{env:n,success:!1};n=u.$.env;let c=u.$.value;if(!Le(c.value))throw m({token:s.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(c.value)}`});let _=c.value;if(_.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(_):o.selfConstraints.push(_)),!l.isSelf){let p=n.frames.length-1;a?l.someType.negativeTraits.some(f=>f.traitType.id===_.id)||l.someType.negativeTraits.push({traitType:_,frameLevel:p}):l.someType.requiredTraits.some(f=>f.traitType.id===_.id)||l.someType.requiredTraits.push({traitType:_,frameLevel:p})}return n=_r({env:n,someType:l.someType,traitType:_,isNegated:a}),{env:n,success:!0}}function xm({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!F(s)||!E(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=Sm({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(u)&&E(u,V.tuple)?_.push(...u.args):_.push(u);for(let p of _){let f=!1,d=p;F(p)&&E(p,"!")&&p.args.length===1&&(f=!0,d=p.args[0]);let h;try{h=x({expr:d,env:t,context:{...n,SelfType:r,SelfTraitType:i}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:p,originalConstraintExpr:s});continue}throw v}if(!h.$||!h.$.value||!R(h.$.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=h.$.env;let g=h.$.value;if(!Le(g.value))throw m({token:d.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${A(g.value)}`});let y=g.value;if(y.receiverType)throw m({token:d.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});c.isSelf&&(i.selfConstraints||(i.selfConstraints=[]),i.negativeSelfConstraints||(i.negativeSelfConstraints=[]),f?i.negativeSelfConstraints.push(y):i.selfConstraints.push(y)),t=_r({env:t,someType:c.someType,traitType:y,isNegated:f})}}return{env:t,pendingTraits:a}}function Yv({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){let o,a=e,s,l,u,c,_,p,f;if(F(e)&&E(e,"?=",2)&&(u=e.args[1],a=e.args[0]),F(a)&&(E(a,"=",2)||E(a,"::",2)||E(a,":=",2))){if(E(a,"::",2))throw m({token:a.token,errorMessage:`Cannot use "::" for trait field. Use ":=" instead.
|
|
11433
11433
|
All trait fields are compile-time only by default.`});_=a.args[1],a=a.args[0]}if(u&&_)throw m({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(F(a)&&E(a,":",2)){if(s=a.args[0],l=a.args[1],F(s)&&E(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(!B(s)&&!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${w(s)}`});o=s.token.value}else{if(F(a)&&E(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&&!_)throw m({token:e.token,errorMessage:`Expected label for trait field, got ${w(a)}`});if(s=a,!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${w(s)}`});if(!B(s)&&!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for trait field label, got ${w(s)}`});o=s.token.value}let d=r.expectedType?.type,h;if(d&&Le(d)){let y=d.fields[t];if(!y)throw m({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=y.type}if(l){let y=x({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});y.$?.env&&(n=y.$?.env);let v=y.$?.value;if(!R(v))throw m({token:l.token,errorMessage:`Expected type for trait field, got ${w(l)}`});f=v.value}if(_){let y=f?{type:f,env:n}:h?{type:h,env:n}:void 0,v=x({expr:_,env:n,context:{...r,expectedType:y}});if(!v.$)throw m({token:_.token,errorMessage:`Failed to evaluate required value expression: ${w(_)}`});if(n=v.$?.env,p=v.$.value,!p)throw m({token:_.token,errorMessage:`Expected compile-time known value for required value, got ${w(_)}`});let T=v.$.type;if(y){if(!q({type:y.type,env:n},{type:T,env:n}))throw m({token:_.token,errorMessage:`Assigned value type mismatch:
|
|
11434
11434
|
Expected type: ${A(y.type)}
|
|
11435
11435
|
Given type: ${A(T)}`});f=y.type}else f=T}if(u){let y=f?{type:f,env:n}:h?{type:h,env:n}:void 0,v=x({expr:u,env:n,context:{...r,expectedType:y}});if(!v.$)throw m({token:u.token,errorMessage:`Failed to evaluate default value expression: ${w(u)}`});if(n=v.$.env,c=v.$?.value,!c)throw m({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${w(u)}`});let T=v.$.type;if(y){if(!q({type:y.type,env:n},{type:T,env:n}))throw m({token:u.token,errorMessage:`Default value type mismatch:
|
|
@@ -11441,27 +11441,27 @@ Type expressions are required for all function parameters in trait fields to sup
|
|
|
11441
11441
|
Type expressions are required for return types in trait fields to support proper type specialization.`})}if(i&&u&&!G(f))throw m({token:u.token,errorMessage:`Default values (?=) are only allowed for function type trait elements (excluding closures).
|
|
11442
11442
|
Trait field "${o??"unnamed"}" has type: ${A(f)}
|
|
11443
11443
|
|
|
11444
|
-
To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:f,value:p??W(f,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:H,type:H.type,pathCollection:[]});let g;if(i&&!p&&Xe(f)&&f.level===0){if(o){let y=Y(n,o),v=y[y.length-1];v?.value&&R(v.value[0])&&D(v.value[0].value)&&(g=v.value[0].value)}g||(g=Vn(f,o??`__associated_type_${Re(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${Re(n.modulePath)}`,type:f,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:p,unassignedSomeType:g},env:n}}function
|
|
11445
|
-
${w(e)}`});let r=Pe(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=xe(t);let o=e.args,a=Vn(tt(),"Self",{env:t,context:n});a.trait=r,Gn(t,"Runtime")&&(t=un("Runtime",a,t,n));let l;if(o.length>0){let p=o[o.length-1];if(F(p)&&E(p,V.where)&&(l=p.args,l.length===0))throw m({token:p.token,errorMessage:"The where clause must have at least one constraint."})}let u=[],c={...n,SelfTraitType:r};if(l&&l.length>0){let p=
|
|
11446
|
-
${w(e)}`});let r=
|
|
11444
|
+
To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:f,value:p??W(f,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:H,type:H.type,pathCollection:[]});let g;if(i&&!p&&Xe(f)&&f.level===0){if(o){let y=Y(n,o),v=y[y.length-1];v?.value&&R(v.value[0])&&D(v.value[0].value)&&(g=v.value[0].value)}g||(g=Vn(f,o??`__associated_type_${Re(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${Re(n.modulePath)}`,type:f,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:p,unassignedSomeType:g},env:n}}function Vm({expr:e,env:t,context:n}){if(!E(e,V.trait))throw m({token:e.token,errorMessage:`Expected "trait", got:
|
|
11445
|
+
${w(e)}`});let r=Pe(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=xe(t);let o=e.args,a=Vn(tt(),"Self",{env:t,context:n});a.trait=r,Gn(t,"Runtime")&&(t=un("Runtime",a,t,n));let l;if(o.length>0){let p=o[o.length-1];if(F(p)&&E(p,V.where)&&(l=p.args,l.length===0))throw m({token:p.token,errorMessage:"The where clause must have at least one constraint."})}let u=[],c={...n,SelfTraitType:r};if(l&&l.length>0){let p=xm({constraintExprs:l,env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!0});t=p.env,u=p.pendingTraits}for(let p=0;p<o.length;p++){let f=o[p];if(F(f)&&E(f,V.where)){if(p!==o.length-1)throw m({token:f.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:d,env:h}=Yv({expr:f,env:t,traitFieldIndex:p,context:{...c,SelfType:a,SelfTraitType:r},isForEvaluatingTraitType:!0});if(i.find(y=>y.label===d.label))throw m({token:F(f)?f.args[0]?.token??f.token:f.token,errorMessage:`Duplicate label 3 "${d.label}" in trait`});if(i.push(d),t=h,d.unassignedSomeType){let y=Y(t,d.label),v=y[y.length-1];if((v?.value&&R(v.value[0])&&D(v.value[0].value)?v.value[0].value:void 0)?.id!==d.unassignedSomeType.id){let $=J(d.unassignedSomeType),C=d.exprs.labelExpr?.token??d.exprs.expr.token??f.token,{env:L}=fe({env:t,variable:{name:d.label,type:$.type,isCompileTimeOnly:!0,value:[$],token:C,initializedAtToken:C,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=L}}}}if(u.length>0){let p=[];for(let f of u){let d=qv({lhsExpr:f.lhsExpr,traitExpr:f.traitExpr,originalConstraintExpr:f.originalConstraintExpr,env:t,context:c,selfType:a,traitType:r});t=d.env,d.success||p.push(f)}if(p.length>0){let f=p[0];xm({constraintExprs:[f.originalConstraintExpr],env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!1})}}for(let p of i){if(!G(p.type))continue;let f=p.type;if(f.return.isCompileTimeOnly&&me(f.return.type)){let d=Ai(f.return.type,t);if(d){let h=f.return.typeExpr?.token??e.token;throw m({token:h,errorMessage:`Return type "${A(f.return.type)}" in trait field "${p.label}" is used with "comptime" but type parameter "${A(d)}" does not implement the Comptime trait. Add "${d.name} <: Comptime" to the where clause.`})}}for(let d of f.parameters)if(d.isCompileTimeOnly&&me(d.type)){let h=Ai(d.type,t);if(h){let g=d.exprs.typeExpr?.token??e.token;throw m({token:g,errorMessage:`Parameter type "${A(d.type)}" in trait field "${p.label}" is used with "comptime" but type parameter "${A(h)}" does not implement the Comptime trait. Add "${h.name} <: Comptime" to the where clause.`})}}}t=nt(t,!0);let _=J(r);return e.$={env:t,value:_,type:_.type,pathCollection:[]},e.func.$=e.$,e}function Hv({args:e,env:t,context:n,forType:r}){let i=[];for(let a=0;a<e.length;a++){let s=e[a],{field:l,env:u}=_i({expr:s,env:t,tupleFieldIndex:a,context:{...n},forType:r});if(l.label&&i.find(_=>_.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in tuple`});i.push(l),t=u}return{type:ao(i),env:t}}function Nm({expr:e,env:t,context:n}){if(e.args.length===0){let o=J(Hn());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=Hv({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=Bu({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:J(r),type:Ft(r),pathCollection:[]},e}function Mm({expr:e,env:t,context:n}){if(!E(e,V.union))throw m({token:e.token,errorMessage:`Expected "union", got:
|
|
11446
|
+
${w(e)}`});let r=nc(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:c}=_i({expr:l,env:t,tupleFieldIndex:s,context:{...n,SelfType:r},forType:"union"});if(i.find(p=>p.label===u.label))throw m({token:F(l)?l.args[0]?.token??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in union field.`});if(u.defaultValue)throw m({token:u.exprs.defaultValueExpr?.token??u.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(ki(u.type,t)||!Rr(u.type,t))throw m({token:u.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(Ve(u.type))throw m({token:u.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(u),t=c}t=Ru({unionType:r,env:t,context:n}),t=Pu({unionType:r,env:t,context:n}),t=Uu({unionType:r,env:t,context:n});let a=J(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function ys({expr:e,env:t,context:n}){let r=n.expectedType?.type;if(!r)throw m({token:e.token,errorMessage:`Expected a function type, got:
|
|
11447
11447
|
${w(e)}`});let i,o=!1,a,s;if(G(r))i=r;else if(D(r)){let X=cn(r);if(X)a=X,i=X.isFn.callType,o=!0,s=r;else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
|
|
11448
11448
|
${A(r)}`})}else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
|
|
11449
11449
|
${A(r)}${Ae(r)?`
|
|
11450
11450
|
Use 'dyn((x) => expr)' for dynamic dispatch`:""}`});let l=o?"=>":"->",u=o?"closure":"function";if(!E(e,l,2))throw m({token:e.token,errorMessage:`Expected ${l} for anonymous ${u}, got:
|
|
11451
|
-
${w(e)}`});let c=e.args[0],_=e.args[1],p=[];F(c)&&E(c,V.tuple)?p=c.args:p=[c];let f=[],d=[],h=[];for(let X=0;X<p.length;X++){let re=p[X];if(F(re)&&E(re,V.forall)){if(X!==0)throw m({token:re.token,errorMessage:"forall(...) must be the first parameter expression"});f=re.args}else F(re)&&E(re,V.using)?d=re.args:h.push(re)}if(h.length!==i.parameters.length)throw m({token:e.token,errorMessage:`Expected ${i.parameters.length} regular parameters, got ${h.length}`});let g=t;t=xe(
|
|
11451
|
+
${w(e)}`});let c=e.args[0],_=e.args[1],p=[];F(c)&&E(c,V.tuple)?p=c.args:p=[c];let f=[],d=[],h=[];for(let X=0;X<p.length;X++){let re=p[X];if(F(re)&&E(re,V.forall)){if(X!==0)throw m({token:re.token,errorMessage:"forall(...) must be the first parameter expression"});f=re.args}else F(re)&&E(re,V.using)?d=re.args:h.push(re)}if(h.length!==i.parameters.length)throw m({token:e.token,errorMessage:`Expected ${i.parameters.length} regular parameters, got ${h.length}`});let g=t;t=xe(Sc(t));for(let X=0;X<f.length;X++){let re=f[X],ce=i.forallParameters[X];if(!B(re))throw m({token:re.token,errorMessage:`Expected parameter name for forall parameter, got ${w(re)}`});let Me=re.token.value;if(Me!==ce.label)throw m({token:re.token,errorMessage:`Forall parameter name must match expected name.
|
|
11452
11452
|
Expected: "${ce.label}"
|
|
11453
11453
|
Got: "${Me}"`})}for(let X=0;X<i.forallParameters.length;X++){let re=f[X],ce=i.forallParameters[X],{env:Me}=fe({env:t,variable:{name:ce.label,type:ce.type,isCompileTimeOnly:ce.isCompileTimeOnly,value:[W(ce.type,{variableName:ce.label,env:t,context:n})],token:re?.token??se,initializedAtToken:re?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=Me,re&&(re.$={env:t,type:ce.type,value:W(ce.type,{variableName:ce.label,env:t,context:n}),pathCollection:[]})}let y=i.implicitParameters.some(X=>X.isEffectRowSpread),v,T;if(y&&d.length>0){v=[];for(let X of d)if(F(X)&&E(X,":",2)){let re=X.args[0],ce=X.args[1];if(!B(re))throw m({token:re.token,errorMessage:`Expected identifier for effect name, got ${w(re)}`});let Me=re.token.value,Oe=x({expr:Ne(ce),env:g,context:{...n,isEvaluatingFunctionType:!0}});if(!Oe.$?.value||!R(Oe.$.value))throw m({token:ce.token,errorMessage:`Expected a type for effect parameter "${Me}", got ${w(ce)}`});let he=Oe.$.value.value;v.push({label:Me,type:he,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:X,labelExpr:re,typeExpr:ce,defaultValueExpr:void 0}})}else if(B(X)){let re=X.token.value,Me=Y(g,re).at(-1);if(!Me)throw m({token:X.token,errorMessage:`Variable "${re}" not found. Cannot infer type for using() parameter.`});v.push({label:re,type:Me.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:X,labelExpr:X,typeExpr:X,defaultValueExpr:void 0}})}else throw m({token:X.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${w(X)}`});T=zr(v);for(let X of i.implicitParameters)X.isEffectRowSpread&&D(X.type)&&X.type.isEffectsRow&&(X.type.resolvedConcreteType=T)}else if(d.length>0){let X=[];for(let ce of d)if(F(ce)&&E(ce,":",2)){let Me=ce.args[0],Oe=ce.args[1];if(!B(Me))throw m({token:Me.token,errorMessage:`Expected identifier for effect name, got ${w(Me)}`});let he=x({expr:Ne(Oe),env:g,context:{...n,isEvaluatingFunctionType:!0}});if(!he.$?.value||!R(he.$.value))throw m({token:Oe.token,errorMessage:`Expected a type for effect parameter "${Me.token.value}", got ${w(Oe)}`});X.push({name:Me.token.value,type:he.$.value.value,nameExpr:Me})}else if(B(ce))X.push({name:ce.token.value,type:void 0,nameExpr:ce});else throw m({token:ce.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${w(ce)}`});if(X.some(ce=>ce.type!==void 0)){if(X.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Effect row mismatch: closure declares ${X.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let ce=new Set,Me=[];for(let Oe=0;Oe<X.length;Oe++){let he=X[Oe];if(!he.type){Me.push({...i.implicitParameters[Oe],label:he.name,exprs:{...i.implicitParameters[Oe].exprs,expr:he.nameExpr,labelExpr:he.nameExpr}}),ce.add(Oe);continue}let Ke=!1;for(let ie=0;ie<i.implicitParameters.length;ie++){if(ce.has(ie))continue;let Z=i.implicitParameters[ie];if(q({type:he.type,env:g},{type:Z.type,env:g})){Me.push({...Z,label:he.name,exprs:{...Z.exprs,expr:he.nameExpr,labelExpr:he.nameExpr}}),ce.add(ie),Ke=!0;break}}if(!Ke)throw m({token:he.nameExpr.token,errorMessage:`Effect row type mismatch for "${he.name}": closure declares ${A(he.type)}, but no matching resolved effect found.`})}v=Me,T=zr(v)}else{if(d.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Expected ${i.implicitParameters.length} implicit parameters in using(...), got ${d.length}`});v=i.implicitParameters}}else v=i.implicitParameters;let $=[];for(let X=0;X<v.length;X++){let re=v[X],ce=T?re.exprs?.labelExpr:d[X],Me=re.label;ce&&B(ce)&&(Me=ce.token.value);let Oe;if(G(re.type)){let _e=i.implicitParameters[X]?.label,ae=[re.label];_e&&_e!==re.label&&ae.push(_e);for(let be of ae){let le=Y(g,be),ye=le[le.length-1];if(ye?.value&&ye.value.length>0){let Fe=ye.value[0];if(Fe&&ee(Fe)){Oe=Fe;break}}}if(!Oe){let le=$n(g,ye=>ye.isImplicit===!0&&ye.isCompileTimeOnly===!0&&ee(ye.value?.[0])&&q({type:re.type,env:g},{type:ye.type,env:g})).at(-1);le?.value?.[0]&&ee(le.value[0])&&(Oe=le.value[0])}}let he=Oe||W(re.type,{variableName:Me,env:t,context:n}),Ke=n.isInsideIoAsyncCall&&o&&G(re.type)&&!Oe;if(Ke&&$.push({name:Me,type:re.type,token:ce?.token??se}),!Ke&&n.isInsideIoAsyncCall&&o&&Ce(re.type)&&!Oe){let _e=re.type;for(let ae of _e.fields)G(ae.type)&&$.push({name:ae.label,type:ae.type,token:ce?.token??se})}let{env:Z}=fe({env:t,variable:{name:Me,type:re.type,isCompileTimeOnly:!Ke,isImplicit:!0,value:Ke?void 0:[he],token:ce?.token??se,initializedAtToken:ce?.token??se,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:Ke||void 0},allowVariableShadowing:!0});t=Z,ce&&(ce.$={env:t,type:re.type,value:Ke?void 0:he,pathCollection:[]})}for(let X=0;X<h.length;X++){let re=h[X],ce=i.parameters[X];if(ce.isCompileTimeOnly){if(!B(re))throw m({token:re.token,errorMessage:`Expected parameter name for compile-time parameter, got ${w(re)}`});let Ke=re.token.value;if(Ke!=="_"&&Ke!==ce.label)throw m({token:re.token,errorMessage:`Compile-time parameter name must match expected name.
|
|
11454
11454
|
Expected: "${ce.label}"
|
|
11455
|
-
Got: "${Ke}"`})}let Me=re.token.value,Oe=ce.label,{env:he}=fe({env:t,variable:{name:Me,type:ce.type,isCompileTimeOnly:ce.isCompileTimeOnly,value:ce.isCompileTimeOnly?[W(ce.type,{variableName:ce.label,env:t,context:n})]:void 0,token:re.token,initializedAtToken:re.token,consumedAtToken:void 0,isOwningTheRcValue:ce.isOwningTheRcValue,parameterAlias:Me!==Oe?Oe:void 0}});t=he,re.$={env:t,type:ce.type,value:ce.isCompileTimeOnly?W(ce.type,{variableName:ce.label,env:t,context:n}):void 0,pathCollection:[]}}let C=t.frames[t.frames.length-1],L={...i,forallParameters:i.forallParameters,implicitParameters:T?v:v.map((X,re)=>{let ce=d[re];if(ce&&B(ce)){let Me=ce.token.value;if(Me!==X.label)return{...X,label:Me}}return X}),parameters:i.parameters.map((X,re)=>{if(X.isCompileTimeOnly)return X;{let ce=h[re];return{...X,label:B(ce)?ce.token.value:X.label,exprs:{...X.exprs,expr:ce,labelExpr:ce,typeExpr:X.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:C,env:Xa(i.env)};if(L.whereClauseExprs?.length){let X=L.whereClauseExprs.map(ce=>Ne(ce));t=jr({constraintExprs:X,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:L,body:_,frameLevel:t.frames.length-1,funcId:`fn_${Re(t.modulePath)}`,definitionSiteEnclosingFunctionType:n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},S=!!a,I=f.length>0||i.parameters.some(X=>me(X.type))||i.SelfType&&me(i.SelfType),z,M;if(I)
|
|
11455
|
+
Got: "${Ke}"`})}let Me=re.token.value,Oe=ce.label,{env:he}=fe({env:t,variable:{name:Me,type:ce.type,isCompileTimeOnly:ce.isCompileTimeOnly,value:ce.isCompileTimeOnly?[W(ce.type,{variableName:ce.label,env:t,context:n})]:void 0,token:re.token,initializedAtToken:re.token,consumedAtToken:void 0,isOwningTheRcValue:ce.isOwningTheRcValue,parameterAlias:Me!==Oe?Oe:void 0}});t=he,re.$={env:t,type:ce.type,value:ce.isCompileTimeOnly?W(ce.type,{variableName:ce.label,env:t,context:n}):void 0,pathCollection:[]}}let C=t.frames[t.frames.length-1],L={...i,forallParameters:i.forallParameters,implicitParameters:T?v:v.map((X,re)=>{let ce=d[re];if(ce&&B(ce)){let Me=ce.token.value;if(Me!==X.label)return{...X,label:Me}}return X}),parameters:i.parameters.map((X,re)=>{if(X.isCompileTimeOnly)return X;{let ce=h[re];return{...X,label:B(ce)?ce.token.value:X.label,exprs:{...X.exprs,expr:ce,labelExpr:ce,typeExpr:X.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:C,env:Xa(i.env)};if(L.whereClauseExprs?.length){let X=L.whereClauseExprs.map(ce=>Ne(ce));t=jr({constraintExprs:X,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:L,body:_,frameLevel:t.frames.length-1,funcId:`fn_${Re(t.modulePath)}`,definitionSiteEnclosingFunctionType:n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},S=!!a,I=f.length>0||i.parameters.some(X=>me(X.type))||i.SelfType&&me(i.SelfType),z,M;if(I)Ql({functionBodyExpr:_,functionType:i,functionValue:b,env:t,context:n}),_.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?W(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},z={...n,isExecuting:!1,capturedVariables:new Map},M=_;else{let{evaluationContext:X}=$o({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,b,t);if(z=X,n.isInsideIoAsyncCall&&o&&(z={...z,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),M=$t({expr:_,env:t,context:z,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!M.$)throw m({token:_.token,errorMessage:"Failed to evaluate the function body."});t=M.$.env}let N=z.capturedVariables;if(ur(M)&&(b.isControlFunction=!0),M.$&&(i.implicitParameters.some(X=>Ce(X.type))||n.isInsideIoAsyncCall)){let X=_c(M);X.hasAwaits&&(M.$.awaitAnalysis=X)}let O=M.$?.type;if(D(i.return.type)&&!i.return.type.resolvedConcreteType&&O){let X=O;if(D(X)&&X.resolvedConcreteType&&(X=X.resolvedConcreteType),!D(X)){let re=vt({type:X,expectedType:void 0,expr:M,env:t});i.return.type.resolvedConcreteType=re}}if(!D(i.return.type)&&me(i.return.type)&&O&&!D(O)&&!me(O)&&(Ze({type:i.return.type,env:t},{type:O,env:t},[],{setResolvedConcreteType:!0}),i.return.type=O,L.return.type=O),!b.isControlFunction&&O&&!q({type:i.return.type,env:t},{type:O,env:t}))throw m({token:_.token,errorMessage:`Incompatible return type:
|
|
11456
11456
|
- Expected: ${A(i.return.type)}
|
|
11457
|
-
- Got : ${A(O)}`});M.$?.env&&(t=M.$?.env),t=nt(t,!0),t=g;let Q;if(S&&N&&N.size>0&&(Q=cs({capturedVariables:N,env:t})),S&&$.length>0){Q||(Q=new Map);for(let X of $)Q.set(X.name,{frameLevel:0,usageType:"read",token:X.token,value:void 0,type:X.type,isEffectParam:!0})}let ne,j,K,te,$e=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let X=ho(b,t,n);X&&($e=X)}if(o&&a&&s){te=us({expectedCaptureType:void 0,capturedVariablesWithValues:Q,env:t,closureToken:e.token,context:{...n}}).captureType;let re=
|
|
11457
|
+
- Got : ${A(O)}`});M.$?.env&&(t=M.$?.env),t=nt(t,!0),t=g;let Q;if(S&&N&&N.size>0&&(Q=cs({capturedVariables:N,env:t})),S&&$.length>0){Q||(Q=new Map);for(let X of $)Q.set(X.name,{frameLevel:0,usageType:"read",token:X.token,value:void 0,type:X.type,isEffectParam:!0})}let ne,j,K,te,$e=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let X=ho(b,t,n);X&&($e=X)}if(o&&a&&s){te=us({expectedCaptureType:void 0,capturedVariablesWithValues:Q,env:t,closureToken:e.token,context:{...n}}).captureType;let re=oc(L,t),{capturedVariableDupExpressions:ce,env:Me}=_s({capturedVariablesWithValues:Q,env:t,context:n});K=ce,t=Me,b.funcId=`closure_${Re(t.modulePath)}`,b.closureInfo={closureType:re,captureType:te,effectParamNames:$.length>0?$.map(Oe=>Oe.name):void 0},D(s)&&te&&ls({wrapperType:s,captureType:te,env:t,errorToken:e.token}),s.resolvedConcreteType=te,ne={...s,resolvedConcreteType:te},j=void 0}else ne=$e.type,j=$e;return e.$={env:t,type:ne,value:j,pathCollection:S&&N?Eo(N):[],deferredDupExpressions:o&&K?K:void 0,captureType:o?te:void 0,closureFunctionValue:o?$e:void 0,isAnonymousFunctionDefinition:!0},S&&He(e,!0),e}function Dm({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&&ke(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let _=0;_<r.length;_++){let p=r[_],f=x({expr:p,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(en(f,n),!f.$)throw m({token:p.token,errorMessage:`Failed to evaluate array element: ${w(p)}`});if(t=f.$.env,s.push(f.$.value),!o)o=a||f.$.type;else if(!q({type:o,env:t},{type:f.$.type,env:t}))if(q({type:vt({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:f.$.type,env:t}))o=f.$.type;else throw m({token:p.token,errorMessage:`Array element type mismatch:
|
|
11458
11458
|
Expected type: ${A(o)}
|
|
11459
|
-
Given type: ${A(f.$.type)}`});l.push(f)}let u=kr(o,
|
|
11460
|
-
${w(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!q({type:o,env:t},{type:u.$.type,env:t}))throw m({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${A(o)}, got ${A(u.$.type)}`})}let a=fn(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function
|
|
11461
|
-
${w(r)}`});let s=a.$.type,l=s,u=a;if(!dt(l)&&!(D(l)&&Ie(l))){let{boxType:g,env:y}=
|
|
11462
|
-
${w(r)}`});t=$.$.env,l=$.$.type,u=$,e.args[0]=$}else t=a.$.env;en(u,n),t=u.$.env;let c=[],_=[],p=new Set,f;if(n.expectedType&&Ae(n.expectedType.type))f=n.expectedType.type;else if(xn(l)){let g=l.fields[0].type;if(g.trait){let y=[];for(let v of g.trait.fields)v.assignedValue&&mt(v.assignedValue)&&y.push(v.assignedValue.type);f=Ho({requiredTraits:y,negativeTraits:[],env:t}),t=Wo({dynType:f,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: ${A(g)}`})}else if(l.trait){let g=[];for(let y of l.trait.fields)y.assignedValue&&mt(y.assignedValue)&&g.push(y.assignedValue.type);f=Ho({requiredTraits:g,negativeTraits:[],env:t}),t=Wo({dynType:f,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: ${A(l)}`});let d=[];if(xn(l)){let g=l.fields[0].type;(D(g)||Ae(g))&&d.push(...g.negativeTraits.map(y=>y.traitType)??[])}for(let{traitType:g}of f.requiredTraits)for(let y of d)if(q({type:g,env:t},{type:y,env:t}))throw m({token:e.token,errorMessage:`Required trait ${A(g)} is in the negative traits list and cannot be used.`});for(let{traitType:g}of f.requiredTraits)if(!p.has(g))if(xn(l)&&(D(l.fields[0].type)||Ae(l.fields[0].type))){let y=l.fields[0].type,v=!1,T=D(y)&&y.resolvedConcreteType?y.resolvedConcreteType:s!==l?s:void 0;if(T?.trait){for(let $ of T.trait.fields)if($.assignedValue&&mt($.assignedValue)&&q({type:g,env:t},{type:$.assignedValue.type,env:t})){_.push($.assignedValue),c.push($.assignedValue.type),p.add(g),v=!0;break}}if(!v){let $=y.requiredTraits.map(C=>C.traitType);for(let C of $)if(q({type:g,env:t},{type:C,env:t})){let L=[];for(let S=0;S<g.fields.length;S++){let I=g.fields[S],z=C.fields.findIndex(M=>M.label===I.label);z===-1?L.push(void 0):L.push(C.fields[z].assignedValue)}let b=zi(g,L);_.push(b),c.push(b.type),p.add(g),v=!0;break}if(!v)throw m({token:e.token,errorMessage:`Required trait ${A(g)} not found in SomeType's requiredTraits.`})}}else{let y=xn(l)?l.fields[0].type:l;if(y.trait){let v=!1;for(let T of y.trait.fields)if(T.assignedValue&&mt(T.assignedValue)&&q({type:g,env:t},{type:T.assignedValue.type,env:t})){_.push(T.assignedValue),c.push(T.assignedValue.type),p.add(g),v=!0;break}if(!v)throw m({token:e.token,errorMessage:`Required trait ${A(g)} is not implemented by type ${A(l)}.`})}else throw m({token:e.token,errorMessage:`Cannot find trait ${A(g)} for value type ${A(l)}.`})}let h=[];for(let{traitType:g}of f.requiredTraits){let y=c.findIndex(v=>q({type:g,env:t},{type:v,env:t}));if(y===-1)throw m({token:e.token,errorMessage:`No trait value found for expected trait type ${A(g)}.`});h.push(_[y])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallTraitValues:h},He(e,!0),e}function
|
|
11459
|
+
Given type: ${A(f.$.type)}`});l.push(f)}let u=kr(o,an("Usize",i)),c=s.every(_=>!!_)?Qr(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},He(e,!0),e}function Om(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=ft(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 Rm(e,t){if(e.token.type==="char"){let n=jv(e.token.value),r=Qn(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function jv(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 Pm({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&&Tt(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=x({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw m({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
|
|
11460
|
+
${w(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!q({type:o,env:t},{type:u.$.type,env:t}))throw m({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${A(o)}, got ${A(u.$.type)}`})}let a=fn(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Um(e,t,n){let i=Y(t,"Box").find(f=>f.value&&ee(f.value[0])&&G(f.type));if(!i||!i.value||!ee(i.value[0]))throw new Error("Cannot find Box type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=J(e),u=xe(a.env),{env:c}=fe({env:u,variable:{name:s.label,token:se,type:l.type,isCompileTimeOnly:!0,initializedAtToken:se,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:p}=Hr({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:tt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!R(_)||!dt(_.value))throw new Error("Box type constructor did not return a type value");return{boxType:_.value,env:p}}function Kv(e,t,n){try{let r=x({expr:e,env:t,context:n});if(!r.$)return!1;let i=r.$.value;return ee(i)?!!Y(t,"box").find(s=>s.value&&ee(s.value[0])&&s.value[0]===i):R(i)?!!i.value?.typeName?.startsWith("Box("):!1}catch{return!1}}function zm({expr:e,env:t,context:n}){ve(e,V.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&Ae(n.expectedType.type)){let g=n.expectedType.type;if(o=Vn(tt(),"",{requiredTraits:g.requiredTraits.map(y=>y.traitType),negativeTraits:g.negativeTraits.map(y=>y.traitType),env:t,context:n}),F(r)&&Kv(r.func,t,{...n})&&E(r.args[0],"=>")){let{boxType:y,env:v}=Um(o,t,n);t=v,i={type:y,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=x({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
|
|
11461
|
+
${w(r)}`});let s=a.$.type,l=s,u=a;if(!dt(l)&&!(D(l)&&Ie(l))){let{boxType:g,env:y}=Um(l,t,{...n});t=y;let v={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},T={tag:"FnCall",func:v,args:[a],token:r.token,$:void 0},$=x({expr:T,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!$.$)throw m({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
|
|
11462
|
+
${w(r)}`});t=$.$.env,l=$.$.type,u=$,e.args[0]=$}else t=a.$.env;en(u,n),t=u.$.env;let c=[],_=[],p=new Set,f;if(n.expectedType&&Ae(n.expectedType.type))f=n.expectedType.type;else if(xn(l)){let g=l.fields[0].type;if(g.trait){let y=[];for(let v of g.trait.fields)v.assignedValue&&mt(v.assignedValue)&&y.push(v.assignedValue.type);f=Ho({requiredTraits:y,negativeTraits:[],env:t}),t=Wo({dynType:f,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: ${A(g)}`})}else if(l.trait){let g=[];for(let y of l.trait.fields)y.assignedValue&&mt(y.assignedValue)&&g.push(y.assignedValue.type);f=Ho({requiredTraits:g,negativeTraits:[],env:t}),t=Wo({dynType:f,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: ${A(l)}`});let d=[];if(xn(l)){let g=l.fields[0].type;(D(g)||Ae(g))&&d.push(...g.negativeTraits.map(y=>y.traitType)??[])}for(let{traitType:g}of f.requiredTraits)for(let y of d)if(q({type:g,env:t},{type:y,env:t}))throw m({token:e.token,errorMessage:`Required trait ${A(g)} is in the negative traits list and cannot be used.`});for(let{traitType:g}of f.requiredTraits)if(!p.has(g))if(xn(l)&&(D(l.fields[0].type)||Ae(l.fields[0].type))){let y=l.fields[0].type,v=!1,T=D(y)&&y.resolvedConcreteType?y.resolvedConcreteType:s!==l?s:void 0;if(T?.trait){for(let $ of T.trait.fields)if($.assignedValue&&mt($.assignedValue)&&q({type:g,env:t},{type:$.assignedValue.type,env:t})){_.push($.assignedValue),c.push($.assignedValue.type),p.add(g),v=!0;break}}if(!v){let $=y.requiredTraits.map(C=>C.traitType);for(let C of $)if(q({type:g,env:t},{type:C,env:t})){let L=[];for(let S=0;S<g.fields.length;S++){let I=g.fields[S],z=C.fields.findIndex(M=>M.label===I.label);z===-1?L.push(void 0):L.push(C.fields[z].assignedValue)}let b=zi(g,L);_.push(b),c.push(b.type),p.add(g),v=!0;break}if(!v)throw m({token:e.token,errorMessage:`Required trait ${A(g)} not found in SomeType's requiredTraits.`})}}else{let y=xn(l)?l.fields[0].type:l;if(y.trait){let v=!1;for(let T of y.trait.fields)if(T.assignedValue&&mt(T.assignedValue)&&q({type:g,env:t},{type:T.assignedValue.type,env:t})){_.push(T.assignedValue),c.push(T.assignedValue.type),p.add(g),v=!0;break}if(!v)throw m({token:e.token,errorMessage:`Required trait ${A(g)} is not implemented by type ${A(l)}.`})}else throw m({token:e.token,errorMessage:`Cannot find trait ${A(g)} for value type ${A(l)}.`})}let h=[];for(let{traitType:g}of f.requiredTraits){let y=c.findIndex(v=>q({type:g,env:t},{type:v,env:t}));if(y===-1)throw m({token:e.token,errorMessage:`No trait value found for expected trait type ${A(g)}.`});h.push(_[y])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallTraitValues:h},He(e,!0),e}function Bm(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;Uo(a)?i="F32":zo(a)&&(i="F64")}let o=an(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 Gm(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;xo(u)?o="Usize":So(u)?o="Isize":rr(u)?o="U8":Vo(u)?o="I8":No(u)?o="U16":Mo(u)?o="I16":Do(u)?o="U32":Oo(u)?o="I32":Ro(u)?o="U64":Po(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=an(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 Wm(e,t){if(e.token.type==="string"){let n=Ut(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 Xv({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){let a=e,s=e,l;if(F(a)&&E(a,":",2)){let f=a.args[0];throw m({token:f.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=r.expectedType?.type,c;if(u){if(!Se(u))throw m({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
|
|
11463
11463
|
${A(u)}`});let f=u.fields[t];if(!f)throw m({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});c=f.type}let _=x({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(en(_,r),!_.$)throw m({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${w(s)}`});n=_.$.env;let p=_.$.value;if(p&&R(_.$.value))throw m({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
|
|
11464
|
-
${w(s)}`});return!c||!hi(c,n)?l=vt({type:_.$.type,expectedType:void 0,expr:void 0,env:n}):l=_.$.type,o.push(_),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
|
|
11464
|
+
${w(s)}`});return!c||!hi(c,n)?l=vt({type:_.$.type,expectedType:void 0,expr:void 0,env:n}):l=_.$.type,o.push(_),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 Qv({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:_,env:p}=Xv({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(_),t=p}let a=ao(r),s=i.some(l=>!l)?void 0:ka(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function qm({expr:e,env:t,context:n}){if(!E(e,V.tuple))throw m({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:H,type:H.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=Qv({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},He(e,!0),e}function gs({expr:e,env:t,context:n}){if(!E(e,":",2))throw m({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],i=e.args[1],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate rhs expression:
|
|
11465
11465
|
${w(i)}`});t=o.$.env;let a=o.$.value;if(!R(a))throw m({token:i.token,errorMessage:`Expected type for rhs, got ${w(i)}`});let s=a.value;if(ke(s)&&ue(s.length))throw m({token:i.token,errorMessage:`Array type with inferred length '_' is not allowed in type annotations.
|
|
11466
11466
|
Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});Or(s,o.token);let l=!1,u=!1;if(F(r)&&E(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(F(r)&&E(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&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.type.return.isCompileTimeOnly)throw m({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!Qe(r))throw m({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(Er(s,t)&&!l)throw m({token:r.token,errorMessage:`Expected "comptime" for compile-time known value binding:
|
|
11467
11467
|
${A(s)}`});if($r(s,t)&&l)throw m({token:r.token,errorMessage:`Unexpected "comptime" for ${A(s)} which can only be used at runtime.`});let c=r.token.value;if(!l&&G(s)&&Xn(s))throw m({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
|
|
@@ -11469,9 +11469,9 @@ ${A(s)}
|
|
|
11469
11469
|
|
|
11470
11470
|
Generic functions must be compile-time known to enable monomorphization. Consider using:
|
|
11471
11471
|
comptime(${c}) : ${A(s)}`});if(!l&&!n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isInsideImplBlock)throw m({token:r.token,errorMessage:`Mutable runtime variable "${c}" is not allowed inside an impl block.
|
|
11472
|
-
Use \`::\` for compile-time definitions inside impl.`});let _=!l&&!n.isEvaluatingFunctionBodyOrAsyncBlock,{env:p}=fe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[W(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Ve(s),isImplicit:u,isModuleLevel:_}});return t=p,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:H.type,value:H,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function hs({expr:e,env:t,context:n,throwErrorOnUndefined:r}){let i=e.token.value;if(i==="Type"){let o=J(tt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Module"){let o=J(wn(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Trait"){let o=J(wn(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="unit"){let o=J(Hn());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_int"){let o=J(vr());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_float"){let o=J(Gi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_string"){let o=J(zt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="bool"){let o=J(rt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="usize"){let o=J(St());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="isize"){let o=J(Wi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u8"){let o=J(qi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i8"){let o=J(Yi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u16"){let o=J(Hi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i16"){let o=J(ji());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u32"){let o=J(Ki());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i32"){let o=J(Jr());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u64"){let o=J(Xi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i64"){let o=J(Qi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f32"){let o=J(Zi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f64"){let o=J(ei());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="char"){let o=J(
|
|
11473
|
-
You can mutate fields (e.g., ${o}.field = value) but cannot reassign itself.`});if(i=x({expr:i,env:t,context:{...n,expectedType:{type:s.type,env:t},isInsideGivenHandler:s.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${w(i)}`});t=i.$.env,Ei(i,t),ri(i),en(i,n),t=i.$.env,at(i.$?.controlFlow)&&
|
|
11474
|
-
${y}`})}if(s.isCompileTimeOnly||(l=vt({type:l,expectedType:s.type,expr:i,env:t})),!q({type:s.type,env:t},{type:l,env:t}))if(eo(s.type))try{let{expr:y,type:v,env:T}=Kr({expr:i,type:s.type,env:t,context:{...n}});if(q({type:s.type,env:T},{type:v,env:T})){i=y,l=v,t=T;let $=
|
|
11472
|
+
Use \`::\` for compile-time definitions inside impl.`});let _=!l&&!n.isEvaluatingFunctionBodyOrAsyncBlock,{env:p}=fe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[W(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Ve(s),isImplicit:u,isModuleLevel:_}});return t=p,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:H.type,value:H,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function hs({expr:e,env:t,context:n,throwErrorOnUndefined:r}){let i=e.token.value;if(i==="Type"){let o=J(tt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Module"){let o=J(wn(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Trait"){let o=J(wn(1));return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="unit"){let o=J(Hn());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_int"){let o=J(vr());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_float"){let o=J(Gi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="comptime_string"){let o=J(zt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="bool"){let o=J(rt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="usize"){let o=J(St());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="isize"){let o=J(Wi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u8"){let o=J(qi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i8"){let o=J(Yi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u16"){let o=J(Hi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i16"){let o=J(ji());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u32"){let o=J(Ki());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i32"){let o=J(Jr());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="u64"){let o=J(Xi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="i64"){let o=J(Qi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f32"){let o=J(Zi());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="f64"){let o=J(ei());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="char"){let o=J(Wu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="short"){let o=J(qu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ushort"){let o=J(Yu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="int"){let o=J(Hu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="uint"){let o=J(ju());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="long"){let o=J(Ku());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ulong"){let o=J(Xu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="longlong"){let o=J(Qu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="ulonglong"){let o=J(Zu());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="longdouble"){let o=J(Ju());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="void"){let o=J(ec());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Expr"){let o=J(Xt());return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let o=J(n.SelfType);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="SelfTrait"&&n.SelfTraitType){let o=J(n.SelfTraitType);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else if(i==="SelfModule"&&n.SelfModuleType){let o=J(n.SelfModuleType);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}else{let o=Y(t,i);if(o.length){let a=o[o.length-1];if(!a.initializedAtToken&&r&&!G(a.type)&&!R(a.value?.[0]))throw m({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let s=a.type.isExtern==="c"&&ue(a.value?.[0])&&!(G(a.type)||Xe(a.type))?void 0:a.value?.[0];if(e.$={env:t,type:a.type,value:s,originType:a.type,variableName:a.name,pathCollection:[[a.name]],sourceVariable:a},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;a.frameLevel<l&&To(a.name,a.frameLevel,"own",e.token,n)}if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="async-block"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;a.frameLevel<l&&To(a.name,a.frameLevel,"own",e.token,n)}return e}else throw m({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function su(e,t){let n=Vu(t),r=`Right-hand side contains "${n}" from function.`;throw F(e)&&E(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.`:F(e)&&E(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.`:F(e)&&E(e,V.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),m({token:e.token,errorMessage:r})}function Zv(e,t){if(ke(e)&&ue(e.length)){let n=e.length;if(n.variableName){let r=Y(t,n.variableName);if(r.length>0){let i=r[r.length-1];if(i.value?.[0]&&!ue(i.value[0]))return kr(e.childType,i.value[0])}}}return e}function Ym({expr:e,env:t,context:n}){if(!E(e,"=",2))throw m({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(B(r)||F(r)&&E(r,":",2)){let o;if(B(r)){let y=hs({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!y.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${w(r)}`});t=y.$.env,r=y,o=r.token.value}else{let{expr:y,variableExpr:v,variableName:T}=gs({expr:r,env:t,context:{...n}});y.$?.env&&(t=y.$?.env),r=v,o=T}if(o==="_")throw m({token:r.token,errorMessage:'Cannot reassign "_". Use ":=" to discard a value, or use a named variable for reassignment.'});let a=Y(t,o);if(!a.length)throw m({token:r.token,errorMessage:`Variable ${o} not found in the environment`});let s=a[a.length-1];if(!s.isReassignable)throw m({token:r.token,errorMessage:`Cannot reassign "${o}".
|
|
11473
|
+
You can mutate fields (e.g., ${o}.field = value) but cannot reassign itself.`});if(i=x({expr:i,env:t,context:{...n,expectedType:{type:s.type,env:t},isInsideGivenHandler:s.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${w(i)}`});t=i.$.env,Ei(i,t),ri(i),en(i,n),t=i.$.env,at(i.$?.controlFlow)&&su(i,i.$.controlFlow);let l=i.$?.type;if(!l)try{let{expr:y,type:v,env:T}=Kr({expr:i,type:s.type,env:t,context:{...n}});i=y,l=v,t=T}catch(y){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${w(i)}
|
|
11474
|
+
${y}`})}if(s.isCompileTimeOnly||(l=vt({type:l,expectedType:s.type,expr:i,env:t})),!q({type:s.type,env:t},{type:l,env:t}))if(eo(s.type))try{let{expr:y,type:v,env:T}=Kr({expr:i,type:s.type,env:t,context:{...n}});if(q({type:s.type,env:T},{type:v,env:T})){i=y,l=v,t=T;let $=Zv(s.type,t);t=qe(t,s,{...s,type:$})}else throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11475
11475
|
- Expected: ${A(s.type)}
|
|
11476
11476
|
- Given : ${A(l)}`})}catch{throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11477
11477
|
- Expected: ${A(s.type)}
|
|
@@ -11482,36 +11482,36 @@ Impl(...) uses static dispatch and the concrete type is fixed at first assignmen
|
|
|
11482
11482
|
Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:s.initializedAtToken??s.token,errorMessage:"First assigned here:"}]);if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let C=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<C&&To(s.name,s.frameLevel,"own",r.token,n)}let y=s.isCompileTimeOnly&&_?dn(_):void 0,v=Ct(t.modulePath,o),T=Ko(i,t,t.modulePath),$=T;T?.consumedAtToken&&($=void 0),t=qe(t,s,{...s,id:v,value:y?[y]:void 0,type:p,isOwningTheRcValue:Ve(p),isOwningTheSameRcValueAs:$}),f=!0}else{if(n.isEvaluatingLoopBody&&s.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw pt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:s.token,errorMessage:"Defined here:"}]);if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&s.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw pt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:s.token,errorMessage:"Defined here:"}]);let y=s.isCompileTimeOnly&&_?dn(_):void 0,v=Ko(i,t,t.modulePath),T=v;v?.consumedAtToken&&(T=void 0),t=qe(t,s,{...s,initializedAtToken:r.token,value:y?[y]:void 0,type:p,isOwningTheRcValue:Ve(p),isOwningTheSameRcValueAs:T})}let h=Y(t,o),g=h[h.length-1];return r.$={env:t,type:g.type,value:g.isCompileTimeOnly?_:void 0,pathCollection:[[o]]},f?(e.$={env:t,value:s.value?.[0],type:s.type,pathCollection:[],isCompileTimeOnlyAssignment:s.isCompileTimeOnly},He(e,!0,d?.frameLevel===t.frames.length-1?d:void 0)):e.$={env:t,value:H,type:H.type,pathCollection:[],isCompileTimeOnlyAssignment:s.isCompileTimeOnly},e}else{let o=x({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${w(r)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&o.$.pathCollection){for(let p of o.$.pathCollection)if(p.length>0){let f=p[0];if(typeof f=="string"){let d=Y(t,f);if(d.length>0){let h=d[d.length-1];To(f,h.frameLevel,"write",r.token,n)}}}}let a=o.$.type;if(i=x({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${w(i)}`});t=i.$.env,Ei(i,t),ri(i),en(i,n),t=i.$.env;let s=i.$?.type;if(!s)try{let{expr:p,type:f,env:d}=Kr({expr:i,type:a,env:t,context:{...n}});i=p,s=f,t=d}catch(p){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${w(i)}
|
|
11483
11483
|
${p}`})}if(!gt(a)&&!Mt(a)&&!ht(a)&&(s=vt({type:s,expectedType:a,expr:i,env:t})),!q({type:a,env:t},{type:s,env:t}))throw m({token:r.token,errorMessage:`Incompatible types:
|
|
11484
11484
|
- Expected: ${A(a)}
|
|
11485
|
-
- Given : ${A(s)}`});let l=!1;if(o.$.pathCollection&&o.$.pathCollection.length>0){let p=o.$.pathCollection[0];if(p&&p.length>=2){let f=p[0],d=p[1],h=Y(t,f);if(h.length>0){let g=h[h.length-1];if(g.isCompileTimeOnly&&g.value?.[0]){let y=g.value[0];if(i.$?.value&&(l=!0),Pt(y)||pn(y)){let v=g.type,T=v.fields.findIndex($=>$.label===d);if(T>=0&&i.$?.value)if(pe(g.type)&&g.type.isReferenceSemantics){let $=[...y.fields];$[T]=i.$.value;let C=Zn(g.type,$),L=$n(t,b=>b.isCompileTimeOnly&&b.value?.[0]===y);for(let b of L)t=qe(t,b,{...b,value:[C]})}else{let $=[...y.fields];$[T]=i.$.value;let C;Pt(y)?C=Zn(v,$):C=ka(v,$),t=qe(t,g,{...g,value:[C]})}}else if(Fn(y)){let v=parseInt(d,10);if(!isNaN(v)&&v>=0&&v<y.elements.length&&i.$?.value){let T=[...y.elements];T[v]=i.$.value;let $=g.type,C=Qr($,T);t=qe(t,g,{...g,value:[C]})}}else if(Lt(y)){let v=g.type,T=v.variants.find($=>$.name===y.variantName);if(T){let $=(T.fields??[]).findIndex(C=>C.label===d);if($>=0&&i.$?.value){let C=[...y.fields];C[$]=i.$.value;let L=yi(v,y.variantName,C);t=qe(t,g,{...g,value:[L]})}}}}}}}let u=o.$.ptrTargetValue,c=o.$.ptrTargetIndex??0;if(u&&i.$?.value){let p=u[0];Fn(p)?p.elements[c]=i.$.value:Pt(p)?p.fields[c]=i.$.value:u[0]=i.$.value,l=!0}let _=o.$.comptimeRef;if(_&&i.$?.value){switch(_.kind){case"array":_.arrayValue.elements[_.index]=i.$.value;break;case"comptime_list":_.listValue.elements[_.index]=i.$.value;break;case"struct":_.structValue.fields[_.fieldIndex]=i.$.value;break;case"tuple":_.tupleValue.fields[_.fieldIndex]=i.$.value;break}l=!0}return!l&&o.$?.value!==void 0&&!(ue(o.$.value)&&o.$.value.isRuntimeOnly)&&i.$?.value!==void 0&&(l=!0),e.$={env:t,value:o.$.value,type:o.$.type,pathCollection:[],isCompileTimeOnlyAssignment:l},l||He(e,!0),e}}function
|
|
11485
|
+
- Given : ${A(s)}`});let l=!1;if(o.$.pathCollection&&o.$.pathCollection.length>0){let p=o.$.pathCollection[0];if(p&&p.length>=2){let f=p[0],d=p[1],h=Y(t,f);if(h.length>0){let g=h[h.length-1];if(g.isCompileTimeOnly&&g.value?.[0]){let y=g.value[0];if(i.$?.value&&(l=!0),Pt(y)||pn(y)){let v=g.type,T=v.fields.findIndex($=>$.label===d);if(T>=0&&i.$?.value)if(pe(g.type)&&g.type.isReferenceSemantics){let $=[...y.fields];$[T]=i.$.value;let C=Zn(g.type,$),L=$n(t,b=>b.isCompileTimeOnly&&b.value?.[0]===y);for(let b of L)t=qe(t,b,{...b,value:[C]})}else{let $=[...y.fields];$[T]=i.$.value;let C;Pt(y)?C=Zn(v,$):C=ka(v,$),t=qe(t,g,{...g,value:[C]})}}else if(Fn(y)){let v=parseInt(d,10);if(!isNaN(v)&&v>=0&&v<y.elements.length&&i.$?.value){let T=[...y.elements];T[v]=i.$.value;let $=g.type,C=Qr($,T);t=qe(t,g,{...g,value:[C]})}}else if(Lt(y)){let v=g.type,T=v.variants.find($=>$.name===y.variantName);if(T){let $=(T.fields??[]).findIndex(C=>C.label===d);if($>=0&&i.$?.value){let C=[...y.fields];C[$]=i.$.value;let L=yi(v,y.variantName,C);t=qe(t,g,{...g,value:[L]})}}}}}}}let u=o.$.ptrTargetValue,c=o.$.ptrTargetIndex??0;if(u&&i.$?.value){let p=u[0];Fn(p)?p.elements[c]=i.$.value:Pt(p)?p.fields[c]=i.$.value:u[0]=i.$.value,l=!0}let _=o.$.comptimeRef;if(_&&i.$?.value){switch(_.kind){case"array":_.arrayValue.elements[_.index]=i.$.value;break;case"comptime_list":_.listValue.elements[_.index]=i.$.value;break;case"struct":_.structValue.fields[_.fieldIndex]=i.$.value;break;case"tuple":_.tupleValue.fields[_.fieldIndex]=i.$.value;break}l=!0}return!l&&o.$?.value!==void 0&&!(ue(o.$.value)&&o.$.value.isRuntimeOnly)&&i.$?.value!==void 0&&(l=!0),e.$={env:t,value:o.$.value,type:o.$.type,pathCollection:[],isCompileTimeOnlyAssignment:l},l||He(e,!0),e}}function Hm({expr:e,env:t,context:n}){if(!E(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]&&B(e.args[0])){let a=e.args[0];i=e.args.slice(1);let s=x({expr:a,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:a.token,errorMessage:`Failed to evaluate C header file argument: ${w(a)}`});t=s.$.env;let l=s.$.value;if(!we(l))throw m({token:a.token,errorMessage:`Expected string for C header file argument, got ${w(a)}`});r=l.value}if(!r)throw m({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
|
|
11486
11486
|
|
|
11487
|
-
c_include "<stdio.h>" ...;`});let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=ha({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});if(Xe(l.type)||G(l.type)?l.type={...l.type,isExtern:"c",cInclude:r,externName:l.label}:l.type={...l.type,isExtern:"c",cInclude:r},l.assignedValue&&R(l.assignedValue)&&(pe(l.assignedValue.value)||ge(l.assignedValue.value)||ot(l.assignedValue.value))){let p=l.assignedValue.value;p.isExtern="c",p.cInclude=r,p.externName=l.label}o.push(l),t=u;let{env:_}=fe({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??W(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=_}return e.$={env:t,value:H,type:H.type,pathCollection:[]},e.func.$={env:t,value:H,type:H.type,pathCollection:[]},e}function
|
|
11487
|
+
c_include "<stdio.h>" ...;`});let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=ha({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});if(Xe(l.type)||G(l.type)?l.type={...l.type,isExtern:"c",cInclude:r,externName:l.label}:l.type={...l.type,isExtern:"c",cInclude:r},l.assignedValue&&R(l.assignedValue)&&(pe(l.assignedValue.value)||ge(l.assignedValue.value)||ot(l.assignedValue.value))){let p=l.assignedValue.value;p.isExtern="c",p.cInclude=r,p.externName=l.label}o.push(l),t=u;let{env:_}=fe({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??W(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=_}return e.$={env:t,value:H,type:H.type,pathCollection:[]},e.func.$={env:t,value:H,type:H.type,pathCollection:[]},e}function jm({expr:e,env:t,context:n}){if(!E(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 c=0;c<r.length;c++){let _=r[c];if(!F(_)||!E(_,"=>",2))throw m({token:_.token,errorMessage:`Expected => for cond statement, got ${_.tag}`});let p=_.args[0],f=_.args[1],d=t;i.push({condExpr:p,caseBodyExpr:f,caseEnv:d})}let o=[];for(let c=0;c<i.length;c++){let{condExpr:_,caseBodyExpr:p,caseEnv:f}=i[c],d=B(_)?x({expr:_,env:f,context:{...n,expectedType:{type:rt(),env:f}}}):$t({expr:_,env:f,context:{...n,expectedType:{type:rt(),env:f}},variablesToAdd:[]});if(!d.$)throw m({token:d.token,errorMessage:`Failed to evaluate condition expression: ${w(d)}`});if(!vn(d.$.type))throw m({token:d.token,errorMessage:`Expected bool for cond statement, got ${w(d)} of type ${A(d.$.type)}`});let h=d.$.value,g=d.$.env;if(c===i.length-1&&!(We(h)&&h.value===!0))throw m({token:d.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:d,caseBodyExpr:p,caseEnv:g,condValue:h}),We(h)&&h.value===!0)break}let a=-1;for(let c=0;c<o.length;c++){let{condValue:_}=o[c];if(We(_)&&_.value===!0&&o.slice(0,c).every(({condValue:p})=>We(p)&&p.value===!1)){a=c;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:c,caseEnv:_,condExpr:p}=o[a];p.$&&(p.$.caseExecuted=!0);let f=$t({expr:c,env:_,context:{...n},variablesToAdd:[]});if(at(f.$?.controlFlow))return e.$={env:f.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:f.$.type,value:f.$.value,pathCollection:f.$.pathCollection,controlFlow:f.$.controlFlow},e;{if(!f.$?.type)throw m({token:f.token,errorMessage:`Expected type for cond statement, got ${w(f)}`});s.push(f),l.push(f.$.value),u={type:f.$.type,env:f.$.env},t=f.$.env;let d;return d=l[0],e.$={env:t,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:u.type,value:d,pathCollection:[],variableName:f.$.variableName},f.$.variableName||He(e,!0),e}}else{let c=!1,_=[],p=[];for(let{condExpr:d,condValue:h,caseBodyExpr:g,caseEnv:y}of o){if(We(h)&&h.value===!1)continue;d.$&&(d.$.caseExecuted=!0);let v=$t({expr:g,env:y,context:{...n,isExecuting:!1},variablesToAdd:[]});if(v.$){let T=Ti(v,v.$.env);v.$.env=T}if(at(v.$?.controlFlow)){_.push(v.$.controlFlow),it(v.$.controlFlow,"return")&&p.push(v);continue}else c=!0;if(!v.$?.type)throw m({token:v.token,errorMessage:`Expected type for cond statement, got ${w(v)}`});if(s.push(v),l.push(v.$.value),n.expectedType&&!q(n.expectedType,{type:v.$.type,env:v.$.env}))throw m({token:v.token,errorMessage:`Incompatible type with expected type:
|
|
11488
11488
|
- Expected: ${A(n.expectedType.type)}
|
|
11489
11489
|
- Actual : ${A(v.$.type)}`});if(!at(v.$.controlFlow)){if(!u)u={type:v.$.type,env:v.$.env};else if(!q({type:u.type,env:u.env},{type:v.$.type,env:v.$.env}))if(q({type:vt({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:v.$.type,env:v.$.env}))u={type:v.$.type,env:v.$.env};else throw m({token:v.token,errorMessage:`Incompatible types:
|
|
11490
11490
|
- Previous: ${A(u.type)}
|
|
11491
|
-
- Current : ${A(v.$.type)}`})}}let f=_.length>0?Go(_):void 0;if(c||!at(f)){if(c&&!u)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:H.type,env:t}),t=io(t,s.filter(h=>h.$&&!it(h.$.controlFlow,"return")&&!it(h.$.controlFlow,"escape")));let d;return l.some(h=>h===void 0)?d=void 0:d=W(u.type,{env:t,context:n}),e.$={env:t,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:u.type,value:d,pathCollection:[]},He(e,!0),e}else{if(_.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(it(f,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let d;if(p.length>0&&p[0].$?d=p[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?d=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(d=n.expectedType.type),!d)throw m({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:d,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Bo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?W(d,{env:t,context:n}):void 0,pathCollection:[],controlFlow:f}}else if(it(f,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in cond use "escape", but not inside a function with an enclosing function.'});let d=n.enclosingFunctionReturnType;e.$={env:t,type:d,value:void 0,pathCollection:[],controlFlow:f}}else if(it(f,"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:H.type,value:H,pathCollection:[],controlFlow:f}}else if(it(f,"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:H.type,value:H,pathCollection:[],controlFlow:f}}return e}}}function
|
|
11491
|
+
- Current : ${A(v.$.type)}`})}}let f=_.length>0?Go(_):void 0;if(c||!at(f)){if(c&&!u)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:H.type,env:t}),t=io(t,s.filter(h=>h.$&&!it(h.$.controlFlow,"return")&&!it(h.$.controlFlow,"escape")));let d;return l.some(h=>h===void 0)?d=void 0:d=W(u.type,{env:t,context:n}),e.$={env:t,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:u.type,value:d,pathCollection:[]},He(e,!0),e}else{if(_.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(it(f,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let d;if(p.length>0&&p[0].$?d=p[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?d=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(d=n.expectedType.type),!d)throw m({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:d,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Bo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?W(d,{env:t,context:n}):void 0,pathCollection:[],controlFlow:f}}else if(it(f,"escape")){if(!n.enclosingFunctionReturnType)throw m({token:e.token,errorMessage:'All cases in cond use "escape", but not inside a function with an enclosing function.'});let d=n.enclosingFunctionReturnType;e.$={env:t,type:d,value:void 0,pathCollection:[],controlFlow:f}}else if(it(f,"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:H.type,value:H,pathCollection:[],controlFlow:f}}else if(it(f,"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:H.type,value:H,pathCollection:[],controlFlow:f}}return e}}}function Km({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=ci({expr:i,env:t,context:{...n,expectedType:{type:r,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate the argument of `escape`."});if(!D(r)&&!q({type:r,env:t},{type:o.$.type,env:t}))throw m({token:i.token,errorMessage:`Incompatible type for \`escape\` argument:
|
|
11492
11492
|
- Expected (enclosing function return type): ${A(r)}
|
|
11493
|
-
- Got: ${A(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:ni("escape")},e}function
|
|
11494
|
-
`),r;for(let i of n){let o=i.trim();if(o===""||o.startsWith("#"))continue;if(o==="[[dependencies]]"){r&&r.name&&t.push(
|
|
11495
|
-
`),
|
|
11496
|
-
`);let s=fr.readFileSync(Ri.join(t,a));e.update(
|
|
11497
|
-
`,"utf-8")}function
|
|
11493
|
+
- Got: ${A(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:ni("escape")},e}function Xm({expr:e,env:t,context:n}){if(!E(e,V.extern))throw m({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",i=e.args;if(e.args[0]&&B(e.args[0])){let a=e.args[0];i=e.args.slice(1);let s=x({expr:a,env:t,context:{...n}});if(!s.$||!s.$.value)throw m({token:a.token,errorMessage:`Failed to evaluate language argument: ${w(a)}`});t=s.$.env;let l=s.$.value;if(!we(l))throw m({token:a.token,errorMessage:`Expected string for language argument, got ${w(a)}`});if(l.value.toLocaleLowerCase()==="yo")r="yo";else if(l.value.toLocaleLowerCase()==="c")r="c";else throw m({token:a.token,errorMessage:`Unsupported language "${l.value}" for extern, expected "c" or "yo"`})}let o=[];for(let a=0;a<i.length;a++){let s=i[a],{field:l,env:u}=ha({expr:s,env:t,moduleFieldIndex:a,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===l.label))throw m({token:F(s)?s.args[0]?.token??s.token:s.token,errorMessage:`Duplicate label "${l.label}" in module`});if(Xe(l.type)||G(l.type)?l.type={...l.type,isExtern:r,externName:l.label,...l.label==="__yo_io_async"?{ioBuiltin:"io_async"}:{},...l.label==="__yo_io_await"?{ioBuiltin:"io_await"}:{},...l.label==="__yo_io_state"?{ioBuiltin:"io_state"}:{},...l.label==="__yo_io_spawn"?{ioBuiltin:"io_spawn"}:{},...l.label==="__yo_join_handle_await"?{ioBuiltin:"join_handle_await"}:{}}:l.type={...l.type,isExtern:r},l.assignedValue&&R(l.assignedValue)&&(pe(l.assignedValue.value)||ge(l.assignedValue.value)||ot(l.assignedValue.value))){let p=l.assignedValue.value;p.isExtern=r,p.externName=l.label}o.push(l),t=u;let{env:_}=fe({env:t,variable:{name:l.label,type:l.type,value:[l.assignedValue??W(l.type,{variableName:l.label,env:t,context:n})],isCompileTimeOnly:!0,token:l.exprs.expr.token,initializedAtToken:l.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=_}return e.$={env:t,value:H,type:H.type,pathCollection:[]},e.func.$={env:t,value:H,type:H.type,pathCollection:[]},e}import{existsSync as Fo}from"fs";import nn from"path";import*as fr from"fs";import*as Ri from"path";import*as ry from"crypto";import{execSync as o6}from"child_process";import*as va from"fs";import*as Zm from"path";function Jv(e){let t=[],n=e.split(`
|
|
11494
|
+
`),r;for(let i of n){let o=i.trim();if(o===""||o.startsWith("#"))continue;if(o==="[[dependencies]]"){r&&r.name&&t.push(Qm(r)),r={};continue}if(r===void 0)continue;let a=o.indexOf("=");if(a===-1)continue;let s=o.slice(0,a).trim(),l=o.slice(a+1).trim();switch(l.length>=2&&l.startsWith('"')&&l.endsWith('"')&&(l=l.slice(1,-1)),s){case"name":r.name=l;break;case"url":r.url=l;break;case"ref":r.ref=l;break;case"commit":r.commit=l;break;case"hash":r.hash=l;break}}return r&&r.name&&t.push(Qm(r)),{dependencies:t}}function Qm(e){return{name:e.name??"",url:e.url??"",ref:e.ref??"HEAD",commit:e.commit??"",hash:e.hash??""}}function Jm(e){let t=Zm.join(e,"yo.lock");if(!va.existsSync(t))return{dependencies:[]};let n=va.readFileSync(t,"utf-8");return Jv(n)}function ey(e,t){return e.dependencies.find(n=>n.name===t)}import*as eT from"fs";import*as lu from"os";import*as wo from"path";function tT(){let e=process.env.YO_CACHE_DIR;if(e)return e;let t=process.env.XDG_CACHE_HOME;if(t)return wo.join(t,"yo");if(process.platform==="win32"){let n=process.env.LOCALAPPDATA??wo.join(lu.homedir(),"AppData","Local");return wo.join(n,"yo","cache")}return wo.join(lu.homedir(),".cache","yo")}function ty(){return wo.join(tT(),"deps")}var l6={...process.env,GIT_TERMINAL_PROMPT:"0"};function nT(e){return ty()}function rT(e){let t=ry.createHash("sha256");return iy(t,e,""),`sha256-${t.digest("hex")}`}function iy(e,t,n){let r=n?Ri.join(t,n):t,i=fr.readdirSync(r,{withFileTypes:!0});i.sort((o,a)=>iT(o.name,a.name));for(let o of i){let a=n?`${n}/${o.name}`:o.name;if(o.isDirectory()){if(o.name.startsWith("."))continue;e.update(`dir:${a}
|
|
11495
|
+
`),iy(e,t,a)}else if(o.isFile()){if(o.name===uu)continue;e.update(`file:${a}
|
|
11496
|
+
`);let s=fr.readFileSync(Ri.join(t,a));e.update(aT(s))}}}function iT(e,t){let n=e.toLowerCase(),r=t.toLowerCase();return n<r?-1:n>r?1:e<t?-1:e>t?1:0}var ny=13,oT=10;function aT(e){if(!e.includes(ny))return e;let t=[];for(let n=0;n<e.length;n++)e[n]===ny&&n+1<e.length&&e[n+1]===oT||t.push(e[n]);return Buffer.from(t)}var uu=".yo-content-hash";function sT(e,t){fr.writeFileSync(Ri.join(e,uu),t+`
|
|
11497
|
+
`,"utf-8")}function lT(e,t,n){return Ri.join(e,`${t}-${n.slice(0,12)}`)}function uT(e,t,n){let r=lT(e,t,n.commit);if(!fr.existsSync(r))return{status:"missing_path",cachedPath:r};if(!n.hash)return{status:"missing_hash",cachedPath:r};let i=Ri.join(r,uu),o;try{o=fr.readFileSync(i,"utf-8").trim()}catch{o=rT(r),sT(r,o)}return o!==n.hash?{status:"hash_mismatch",cachedPath:r,actualHash:o}:{status:"ok",cachedPath:r,actualHash:o}}function cT(e,t,n,r){return`Cached dependency "${e}" failed integrity check.
|
|
11498
11498
|
Expected: ${t}
|
|
11499
11499
|
Actual: ${n}
|
|
11500
11500
|
Path: ${r}
|
|
11501
|
-
Run 'yo fetch' to refetch this dependency.`}function
|
|
11501
|
+
Run 'yo fetch' to refetch this dependency.`}function oy(e,t,n=""){let r=Jm(e),i=ey(r,t);if(!i||!i.commit)return;let o=nT(),a=uT(o,t,i);if(a.status!=="missing_path"){if(a.status==="missing_hash")throw new Error(`Dependency "${t}" is cached at "${a.cachedPath}" but its yo.lock entry is missing a content hash. Run 'yo fetch' to refresh yo.lock.`);if(a.status==="hash_mismatch")throw new Error(cT(t,i.hash,a.actualHash??"<unknown>",a.cachedPath));return n?Ri.join(a.cachedPath,n):a.cachedPath}}function vs(e,t,n=nn){let r=n.relative(e,t);return n.isAbsolute(r)?t:r.startsWith(".")?r:"./"+r}function ay({expr:e,env:t,context:n,stdPath:r}){if(!E(e,V.import,1))throw m({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
|
|
11502
11502
|
${w(e)}`});let i=e.args[0],a=x({expr:i,env:t,context:{...n}}).$?.value;if(!we(a))throw m({token:i.token,errorMessage:`Expected comptime_string for module path, got:
|
|
11503
|
-
${w(i)}`});let s=a.value;if(s==="std/prelude"||s==="std/prelude.yo")throw m({token:i.token,errorMessage:"Importing the prelude module is not allowed \u2014 it is automatically loaded for every file."});if(s.startsWith("std/")?
|
|
11504
|
-
${w(e)}`})}let l="file://"+
|
|
11505
|
-
${c instanceof kn||c instanceof qn?c.toString():c instanceof Error?c.message:String(c)}`})}}function
|
|
11503
|
+
${w(i)}`});let s=a.value;if(s==="std/prelude"||s==="std/prelude.yo")throw m({token:i.token,errorMessage:"Importing the prelude module is not allowed \u2014 it is automatically loaded for every file."});if(s.startsWith("std/")?s=vs(nn.dirname(t.modulePath.replace(/^file:\/\//,"")),nn.resolve(r,s.replace("std/","./"))):s==="std"&&(s=vs(nn.dirname(t.modulePath.replace(/^file:\/\//,"")),nn.resolve(r,"./index.yo"))),!s.startsWith(".")&&!nn.isAbsolute(s)){let c=Gd(s);if(c){let _=t.modulePath.replace(/^file:\/\//,"");s=vs(nn.dirname(_),c)}}if(!s.startsWith(".")&&!nn.isAbsolute(s)){let c=t.modulePath.replace(/^file:\/\//,""),_=_T(c);if(_){let p=g=>{try{return oy(g,s)}catch(y){throw m({token:i.token,errorMessage:y instanceof Error?y.message:String(y)})}},d=ou().findPathDependency(s),h;if(d?h=nn.resolve(_,d.path):h=p(_),!h){let g=Bd();g&&g!==_&&(h=p(g))}if(h){let g=pT(h,s);s=vs(nn.dirname(c),g)}}if(!s.startsWith(".")&&!nn.isAbsolute(s))throw m({token:i.token,errorMessage:`Module "${s}" not found. If this is a dependency, add it to build.yo and run 'yo fetch'.
|
|
11504
|
+
${w(e)}`})}let l="file://"+(nn.isAbsolute(s)?s:nn.resolve(nn.dirname(t.modulePath.replace(/^file:\/\//,"")),s));if(!nn.extname(l)){let c=l.replace(/^file:\/\//,"")+".yo",_=nn.join(l.replace(/^file:\/\//,""),"index.yo"),p=Fo(c),f=Fo(_);if(p&&f)throw m({token:i.token,errorMessage:`Ambiguous import "${s}": both "${s}.yo" and "${s}/index.yo" exist. Use an explicit path to resolve the ambiguity.`});if(p)l="file://"+c;else if(f)l="file://"+_;else throw m({token:i.token,errorMessage:`Module not found: tried "${"file://"+c}" and "${_}"`})}if(!n.loadModule)throw m({token:i.token,errorMessage:"Module loader is not provided in the context."});try{let{moduleValue:c}=n.loadModule(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}catch(c){throw m({token:i.token,errorMessage:`Failed to import module "${s}":
|
|
11505
|
+
${c instanceof kn||c instanceof qn?c.toString():c instanceof Error?c.message:String(c)}`})}}function _T(e){let t=nn.dirname(e),n=nn.parse(t).root;for(;t!==n;){if(Fo(nn.join(t,"yo.lock"))||Fo(nn.join(t,"build.yo")))return t;t=nn.dirname(t)}}function pT(e,t){let n=nn.join(e,"index.yo"),r=nn.join(e,t+".yo");return Fo(n)?n:Fo(r)?r:e}function cu({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:i,lhs:o,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!Se(i),c=e.token.value;if(u&&c!=="_")throw m({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${c}"`});if(ot(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 r&&Ye(r)&&r.isLoading?m({token:o.token,errorMessage:"Cannot destructure from a module that is still being evaluated (circular import). The requested fields are not yet available. Reorder your exports or break the cycle."}):m({token:o.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let _={};for(let f=0;f<t.length;f++){let d=t[f],h=f,g,y=n[h],v,T,$,C;if(F(d)&&E(d,":",2)&&d.args[0].token.value==="..."&&d.args[1].token.value==="..."||B(d)&&d.token.value==="..."){if(ot(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with _, got ${A(i)}`});for(let L=0;L<n.length;L++){let b=n[L];if(_[b.label])continue;_[b.label]={label:b.label,variableName:b.label,type:b.type};let S=pn(r)||Pt(r)||Ye(r)||Lt(r)?r.fields[L]:void 0;if(!S&&s)throw m({token:d.token,errorMessage:`Destructuring field "${b.label}" is not defined in compile-time only context.`});let{env:I}=fe({env:a,variable:{name:b.label,value:S?[dn(S)]:void 0,type:b.type,isCompileTimeOnly:s,token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=I}d.$={env:a,type:i,value:r,pathCollection:[]};continue}else if(F(d)&&E(d,":",2)){let L=d.args[0],b=d.args[1];if(!B(L)||!Qe(L))throw m({token:L.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${w(L)}`});$=L;let S=$.token.value,I=n.findIndex(M=>M.label===S);if(I===-1)throw r&&Ye(r)&&r.isLoading?m({token:d.token,errorMessage:`Field "${S}" is not yet available \u2014 the module is still being evaluated (circular import). Reorder your exports so "${S}" is exported before the circular import occurs.`}):m({token:d.token,errorMessage:`Label "${S}" being destructured not found.`});h=I,y=n[h];let z;if((pn(r)||Pt(r)||Ye(r)||Lt(r))&&(z=r.fields[h]),g=z,B(b)&&Qe(b))C=b,v=b.token.value,T=b.token;else throw m({token:b.token,errorMessage:`Nested destructuring is not supported:
|
|
11506
11506
|
|
|
11507
11507
|
${w(b)}`});if(_[y.label])throw m({token:d.token,errorMessage:`Label "${S}" being destructured already exists.`});_[y.label]={label:y.label,variableName:v,type:y.type}}else{if(F(d))throw m({token:d.token,errorMessage:`Nested destructuring is not supported:
|
|
11508
11508
|
|
|
11509
|
-
${w(d)}`});if(B(d)&&Qe(d)){if(ot(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${A(i)}`});if(_[y.label])throw m({token:d.token,errorMessage:`Label "${y.label}" being destructured already exists.`});_[y.label]={label:y.label,variableName:d.token.value,type:y.type},(pn(r)||Pt(r)||Lt(r)||Ye(r))&&(g=r.fields[h]),v=d.token.value,T=d.token}else throw m({token:d.token,errorMessage:`Unsupported destructuring pattern for: ${w(d)}`})}if(v&&T){if(!g&&s)throw m({token:d.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:L}=fe({env:a,variable:{name:v,type:y.type,isCompileTimeOnly:s,value:g?[dn(g)]:void 0,token:T,initializedAtToken:T,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=L,d.$={env:a,type:y.type,value:g,pathCollection:[]},$&&($.$={env:a,type:y.type,value:g,pathCollection:[]}),C&&(C.$={env:a,type:y.type,value:g,pathCollection:[]})}}let p=[];for(let f in _){let d=_[f];p.push({label:d.label,type:d.type,variableName:d.variableName})}return{env:a,runtimeDestructurings:p}}function
|
|
11509
|
+
${w(d)}`});if(B(d)&&Qe(d)){if(ot(i))throw m({token:d.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${A(i)}`});if(_[y.label])throw m({token:d.token,errorMessage:`Label "${y.label}" being destructured already exists.`});_[y.label]={label:y.label,variableName:d.token.value,type:y.type},(pn(r)||Pt(r)||Lt(r)||Ye(r))&&(g=r.fields[h]),v=d.token.value,T=d.token}else throw m({token:d.token,errorMessage:`Unsupported destructuring pattern for: ${w(d)}`})}if(v&&T){if(!g&&s)throw m({token:d.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:L}=fe({env:a,variable:{name:v,type:y.type,isCompileTimeOnly:s,value:g?[dn(g)]:void 0,token:T,initializedAtToken:T,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=L,d.$={env:a,type:y.type,value:g,pathCollection:[]},$&&($.$={env:a,type:y.type,value:g,pathCollection:[]}),C&&(C.$={env:a,type:y.type,value:g,pathCollection:[]})}}let p=[];for(let f in _){let d=_[f];p.push({label:d.label,type:d.type,variableName:d.variableName})}return{env:a,runtimeDestructurings:p}}function sy({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:i}){if(!t.$?.type)throw m({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${w(t)}`});let o=t.$.type,a=t.$.value;if((pe(o)||ot(o)||Ce(o))&&F(e))return cu({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:B(t)});if(Se(o)&&F(e)&&E(e,V.tuple))return cu({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:B(t)});if(ge(o)&&F(e)){let s=o.selectedVariantName;if(!s)throw m({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${A(o)}`});let l=o.variants.find(u=>u.name===s);if(!l)throw m({token:t.token,errorMessage:`Expected enum variant "${s}" to be defined, got ${A(o)}`});if(!l.fields)throw m({token:t.token,errorMessage:`Cannot destructure enum variant "${s}" without fields, got ${A(o)}`});return cu({lhsFunc:e.func,lhsFields:e.args,rhsFields:l.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:B(t)})}throw Se(o)||pe(o)||ot(o)||Ce(o)?m({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
|
|
11510
11510
|
|
|
11511
11511
|
${w(e)}`}):m({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
|
|
11512
11512
|
|
|
11513
|
-
${A(o)}`})}function
|
|
11514
|
-
(${w(l)}) = ${w(a)}`});if(a=x({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),a.$?.env&&(t=a.$?.env),a.$?.type&&Or(a.$.type,a.token),at(a.$?.controlFlow)&&
|
|
11513
|
+
${A(o)}`})}function ly({expr:e,env:t,context:n}){if(!E(e,":=",2)&&!E(e,"::",2))throw m({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=E(e,"::")||n.forceCompileTimeBindings===!0,i=!E(e,"::");if(!r&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw m({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],a=e.args[1],s=!1,l=o;if(F(o)&&E(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(F(l)&&E(l,":"))throw m({token:l.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
|
|
11514
|
+
(${w(l)}) = ${w(a)}`});if(a=x({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),a.$?.env&&(t=a.$?.env),a.$?.type&&Or(a.$.type,a.token),at(a.$?.controlFlow)&&su(a,a.$.controlFlow),ri(a),B(l)){if(Ei(a,t),en(a,{...n}),a.$?.env&&(t=a.$?.env),!Qe(l))throw m({token:l.token,errorMessage:`Invalid assignment to ${l.token.value}, expected identifier or operator`});let u=s||r,c=s?!1:i,_=a.$?.type;if(l.$?.type){try{let{expr:T,type:$,env:C}=Kr({expr:a,type:l.$?.type,env:t,context:{...n}});a=T,_=$,t=C}catch(T){throw m({token:a.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${w(a)}
|
|
11515
11515
|
${T}`})}if(!q({type:l.$.type,env:t},{type:_,env:t}))throw m({token:l.token,errorMessage:`Incompatible types:
|
|
11516
11516
|
- Defined: ${A(l.$.type)}
|
|
11517
11517
|
- Given : ${A(_)}`})}else{if(!_)throw m({token:a.token,errorMessage:`Failed to evaluate, got ${w(a)}`});let T=_;c&&(T=vt({type:_,expectedType:void 0,expr:a,env:t})),l.$={...l.$,env:t,type:T,pathCollection:[]}}if(!u&&Er(l.$.type,t))throw m({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
|
|
@@ -11522,15 +11522,15 @@ ${A(l.$.type)}`});if(u&&$r(l.$.type,t))throw m({token:e.token,errorMessage:`Expe
|
|
|
11522
11522
|
${w(e)}`});let p=a.$?.value;if(R(p)&&!p.value.typeName&&p.value!==n.SelfType?p.value.typeName=l.token.value:ee(p)&&!p.funcName?(p.funcName=l.token.value,p.funcId+=`_${l.token.value}`):(Ye(p)||mt(p))&&!p.type.typeName&&p.type!==n.SelfType&&(p.type.typeName=l.token.value),s&&ee(p)&&(p.isModuleEffectMember=!0),!p&&u)throw m({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
|
|
11523
11523
|
Got runtime value. Please consider using ":=" instead of "::":
|
|
11524
11524
|
${w(a)}`});l.$={...l.$,env:t,type:l.$.type,value:u?p?dn(p):W(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let f=l.$.type;D(f)&&_&&D(_)&&_.resolvedConcreteType&&(f={...f,resolvedConcreteType:_.resolvedConcreteType},l.$.type=f);let d=Ko(a,t,t.modulePath),h=d;d?.consumedAtToken&&(h=void 0);let g=l.token.value==="_"?Aa(t.modulePath):l.token.value;if(!u&&!n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isInsideImplBlock)throw m({token:l.token,errorMessage:`Mutable runtime variable "${g}" is not allowed inside an impl block.
|
|
11525
|
-
Use \`::\` for compile-time definitions inside impl.`});let y=!u&&!n.isEvaluatingFunctionBodyOrAsyncBlock,{env:v}=fe({env:t,variable:{name:g,type:f,isCompileTimeOnly:u,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Ve(f),isOwningTheSameRcValueAs:h,isReassignable:!s,isImplicit:s,isModuleLevel:y}});return t=v,l.token.value==="_"&&(l.$.variableName=g),l.$.env=t,s&&(o.$={env:t,value:H,type:H.type,pathCollection:[]}),e.$={env:t,value:H,type:H.type,pathCollection:[],isCompileTimeOnlyAssignment:u},e}else{let u=s||r,{env:c,runtimeDestructurings:_}=
|
|
11525
|
+
Use \`::\` for compile-time definitions inside impl.`});let y=!u&&!n.isEvaluatingFunctionBodyOrAsyncBlock,{env:v}=fe({env:t,variable:{name:g,type:f,isCompileTimeOnly:u,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Ve(f),isOwningTheSameRcValueAs:h,isReassignable:!s,isImplicit:s,isModuleLevel:y}});return t=v,l.token.value==="_"&&(l.$.variableName=g),l.$.env=t,s&&(o.$={env:t,value:H,type:H.type,pathCollection:[]}),e.$={env:t,value:H,type:H.type,pathCollection:[],isCompileTimeOnlyAssignment:u},e}else{let u=s||r,{env:c,runtimeDestructurings:_}=sy({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=c,e.$={env:t,value:H,type:H.type,pathCollection:[],runtimeDestructurings:_,isCompileTimeOnlyAssignment:u},e}}function fT(e){return F(e)?E(e,"|",2):!1}function pu(e){if(!fT(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...pu(n),...pu(r)]}function uy(e,t,n){if(D(e))for(let r=0;r<t.length;r++){let i=t[r];if(i&&D(i)&&e.id===i.id){let o=n[r];if(o)return o}}return e}function _u(e,t){if(!e.isGadt||!t.gadtReturnTypeArgs||!e.typeConstructorArgs)return!0;for(let n=0;n<e.typeConstructorArgs.length;n++){let r=e.typeConstructorArgs[n],i=t.gadtReturnTypeArgs[n];if(r&&i&&!D(r)&&!q({type:r,env:e.env},{type:i,env:e.env}))return!1}return!0}function dT(e){return yr(e)||gr(e)||ir(e)||vn(e)||gt(e)||Mt(e)||ht(e)}function cy({expr:e,env:t,context:n}){if(!E(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=B(i)?x({expr:i,env:t,context:{...n,expectedType:void 0}}):$t({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(Ee(a)?(u=a.childType,l=a.tag):u=a,dT(u))return mT({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!ge(u))throw m({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?A(a):"unknown type"}`});let c=u,_=c.isGadt===!0&&n.expectedType?.type!==void 0&&c.typeConstructorArgs!==void 0&&c.typeConstructorArgs.length>0,p=r.slice(1),f=[],d,h=new Set,g=!1,y=!1,v=[],T=[],$=-1;for(let L=0;L<p.length;L++){let b=p[L],S=t;if(!F(b)||!E(b,"=>",2))throw m({token:b.token,errorMessage:`Expected ":" for match pattern, got ${w(b)}`});let I=b.args[0],z=b.args[1];if(F(I)&&E(I,".",1)||Et(I,"_")){if(y)throw m({token:I.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let M;if(F(I)){if(M=I.args[0],!B(M))throw m({token:I.token,errorMessage:`Expected identifier for enum variant, got ${w(M)}`})}else y=!0,M=I;let N=M.token.value,O=c.variants.find($e=>$e.name===N);if(!O&&N!=="_")throw m({token:I.token,errorMessage:`Enum variant "${N}" not found in ${A(c)}`});if(O&&O.fields&&O.fields.length>0)throw m({token:I.token,errorMessage:`Enum variant "${N}" has ${O.fields.length} field(s) and must be destructured. Use .${N}(...) instead of .${N}`});if(h.add(N),O&&!_u(c,O)||N!=="_"&&Lt(s)&&s.variantName!==N)continue;let Q={...c,selectedVariantName:N==="_"?void 0:N};M.$={env:S,type:Q,value:void 0,pathCollection:[]};let ne=Q;l&&l==="Ptr"&&(ne=It(Q));let j=z;S=xe(S),I.$={env:S,type:ne,value:void 0,pathCollection:[],caseExecuted:!0};let K=$t({expr:j,env:S,context:{...n,isExecuting:Lt(s)&&s.variantName===N},variablesToAdd:[]});if(!K.$?.type)throw m({token:j.token,errorMessage:`Expected type for match result expression, got ${w(j)}`});let te=nt(K.$.env,!0);if(S=te,K.$={...K.$,env:te},S=Ti(K,S),K.$.env=S,s===void 0&&K.$&&(K.$.value=void 0),at(K.$.controlFlow))v.push(K.$.controlFlow),it(K.$.controlFlow,"return")&&T.push(K),s&&!ue(s)&&Lt(s)?e.$={env:K.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:K.$.type,value:K.$.value,pathCollection:K.$.pathCollection,controlFlow:K.$.controlFlow}:s===void 0&&(e.$={env:K.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:K.$.type,value:void 0,pathCollection:K.$.pathCollection,controlFlow:K.$.controlFlow});else if(g=!0,n.expectedType&&!q(n.expectedType,{type:K.$.type,env:K.$.env}))throw m({token:K.token,errorMessage:`Incompatible type with expected type:
|
|
11526
11526
|
- Expected: ${A(n.expectedType.type)}
|
|
11527
11527
|
- Actual : ${A(K.$.type)}`});if(S=K.$.env,f.push(K),$===-1&&Lt(s)&&!ue(s)&&(s.variantName===N||N==="_")&&($=f.length-1),!at(K.$.controlFlow)){if(n.expectedType&&!q(n.expectedType,{type:K.$.type,env:K.$.env}))throw m({token:K.token,errorMessage:`Incompatible type with expected type:
|
|
11528
11528
|
- Expected: ${A(n.expectedType.type)}
|
|
11529
|
-
- Actual : ${A(K.$.type)}`});if(_){if(O?.gadtReturnTypeArgs&&n.expectedType){let $e=
|
|
11529
|
+
- Actual : ${A(K.$.type)}`});if(_){if(O?.gadtReturnTypeArgs&&n.expectedType){let $e=uy(n.expectedType.type,c.typeConstructorArgs,O.gadtReturnTypeArgs);if(!q({type:$e,env:S},{type:K.$.type,env:S}))throw m({token:K.token,errorMessage:`GADT type mismatch in branch ".${N}":
|
|
11530
11530
|
- Expected: ${A($e)}
|
|
11531
11531
|
- Actual : ${A(K.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:K.$?.type,env:S};else if(!q({type:d.type,env:S},{type:K.$?.type,env:t}))if(q({type:vt({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:K.$.type,env:S}))d={type:K.$.type,env:S};else throw m({token:K.token,errorMessage:`Incompatible types:
|
|
11532
11532
|
- Previous: ${A(d.type)}
|
|
11533
|
-
- Current : ${A(K.$.type)}`})}}else if(F(I)&&F(I.func)&&E(I.func,".",1)){if(y)throw m({token:I.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let M=I.func.args[0];if(!B(M))throw m({token:I.token,errorMessage:`Expected identifier for enum variant, got ${w(M)}`});let N=M.token.value,O=c.variants.find(X=>X.name===N);if(!O)throw m({token:I.token,errorMessage:`Enum variant "${N}" not found in ${A(c)}`});if(h.add(N),!
|
|
11533
|
+
- Current : ${A(K.$.type)}`})}}else if(F(I)&&F(I.func)&&E(I.func,".",1)){if(y)throw m({token:I.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let M=I.func.args[0];if(!B(M))throw m({token:I.token,errorMessage:`Expected identifier for enum variant, got ${w(M)}`});let N=M.token.value,O=c.variants.find(X=>X.name===N);if(!O)throw m({token:I.token,errorMessage:`Enum variant "${N}" not found in ${A(c)}`});if(h.add(N),!_u(c,O)||Lt(s)&&s.variantName!==N)continue;let Q=I.args;if(O.fields&&O.fields.length>0){if(!Q.some(re=>F(re)&&E(re,":",2))&&Q.length!==O.fields.length)throw m({token:I.token,errorMessage:`Variant "${N}" expects ${O.fields.length} parameters, got ${Q.length}`})}else if(Q.length>0)throw m({token:I.token,errorMessage:`Variant "${N}" has no fields, but destructuring parameters were provided`});let ne={...c,selectedVariantName:N};M.$={env:S,type:ne,value:void 0,pathCollection:[]};let j=ne;if(l&&l==="Ptr"&&(j=It(ne)),S=xe(S),O.fields&&O.fields.length>0){let X=new Set;for(let re=0;re<Q.length;re++){let ce=Q[re];if(F(ce)&&E(ce,":",2)){let Me=ce.args[0],Oe=ce.args[1];if(!B(Me))throw m({token:Me.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${w(Me)}`});let he=Me.token.value,Ke=O.fields.findIndex(ae=>ae.label===he);if(Ke===-1)throw m({token:Me.token,errorMessage:`Label "${he}" not found in variant "${N}". Available labels: ${O.fields.map(ae=>ae.label).join(", ")}`});if(X.has(he))throw m({token:Me.token,errorMessage:`Label "${he}" is already destructured`});X.add(he);let ie=O.fields[Ke],Z=Lt(s)&&!ue(s),_e=Z?s.fields[Ke]:void 0;if(B(Oe)){let ae=Oe.token.value;if(ae!=="_"){let{env:be}=fe({env:S,variable:{name:ae,type:ie.type,isCompileTimeOnly:Z,value:_e!==void 0?[_e]:void 0,token:Oe.token,initializedAtToken:Oe.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});S=be}Oe.$={env:S,type:ie.type,value:void 0,pathCollection:[]},Me.$={env:S,type:ie.type,value:void 0,pathCollection:[]}}else throw m({token:Oe.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${w(Oe)}`})}else if(B(ce)){let Me=ce.token.value,Oe=O.fields[re],he=Lt(s)&&!ue(s),Ke=he?s.fields[re]:void 0;if(Me!=="_"){let{env:ie}=fe({env:S,variable:{name:Me,type:Oe.type,isCompileTimeOnly:he,value:Ke!==void 0?[Ke]:void 0,token:ce.token,initializedAtToken:ce.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});S=ie}ce.$={env:S,type:Oe.type,value:void 0,pathCollection:[]}}else throw m({token:ce.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${w(ce)}`})}}I.$={env:S,type:j,value:void 0,pathCollection:[],caseExecuted:!0};let K=z,te=$t({expr:K,env:S,context:{...n,isExecuting:Lt(s)&&s.variantName===N},variablesToAdd:[]});if(!te.$?.type)throw m({token:K.token,errorMessage:`Expected type for match result expression, got ${w(K)}`});let $e=nt(te.$.env,!0);if(S=$e,te.$={...te.$,env:$e},S=Ti(te,S),te.$.env=S,s===void 0&&te.$&&(te.$.value=void 0),at(te.$.controlFlow)?(v.push(te.$.controlFlow),it(te.$.controlFlow,"return")&&T.push(te),s&&!ue(s)&&Lt(s)?e.$={env:te.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:te.$.type,value:te.$.value,pathCollection:te.$.pathCollection,controlFlow:te.$.controlFlow}:s===void 0&&(e.$={env:te.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:te.$.type,value:void 0,pathCollection:te.$.pathCollection,controlFlow:te.$.controlFlow})):g=!0,S=te.$.env,f.push(te),$===-1&&Lt(s)&&!ue(s)&&(s.variantName===N||N==="_")&&($=f.length-1),!at(te.$.controlFlow)){if(_){if(O.gadtReturnTypeArgs&&n.expectedType){let X=uy(n.expectedType.type,c.typeConstructorArgs,O.gadtReturnTypeArgs);if(!q({type:X,env:S},{type:te.$.type,env:S}))throw m({token:te.token,errorMessage:`GADT type mismatch in branch ".${N}":
|
|
11534
11534
|
- Expected: ${A(X)}
|
|
11535
11535
|
- Actual : ${A(te.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:te.$?.type,env:S};else if(!q({type:d.type,env:S},{type:te.$?.type,env:t}))if(q({type:vt({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:te.$.type,env:S}))d={type:te.$.type,env:S};else throw m({token:te.token,errorMessage:`Incompatible types:
|
|
11536
11536
|
- Previous: ${A(d.type)}
|
|
@@ -11538,45 +11538,45 @@ Use \`::\` for compile-time definitions inside impl.`});let y=!u&&!n.isEvaluatin
|
|
|
11538
11538
|
Supported patterns:
|
|
11539
11539
|
- .VariantName (for variants without fields)
|
|
11540
11540
|
- .VariantName(param1, param2, ...) (for variants with fields)
|
|
11541
|
-
- _ (wildcard pattern)`})}let C=v.length>0?Go(v):void 0;if(g||!at(C)){if(g&&!d)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(d||(d={type:H.type,env:t}),!h.has("_")){let S=c.variants.filter(I=>!h.has(I.name)&&
|
|
11541
|
+
- _ (wildcard pattern)`})}let C=v.length>0?Go(v):void 0;if(g||!at(C)){if(g&&!d)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(d||(d={type:H.type,env:t}),!h.has("_")){let S=c.variants.filter(I=>!h.has(I.name)&&_u(c,I));if(S.length>0)throw m({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
|
|
11542
11542
|
|
|
11543
11543
|
- ${S.map(I=>I.name).join(`
|
|
11544
|
-
- `)}`})}let L=f.filter(S=>S.$&&!it(S.$.controlFlow,"return")&&!it(S.$.controlFlow,"escape")),b;if(Lt(s)&&!ue(s)&&$>=0&&$<f.length&&f[$].$){let S=f[$].$;t=S.env,b=S.value}else Lt(s)&&!ue(s)&&L.length===1&&L[0].$?(t=L[0].$.env,b=L[0].$.value):Lt(s)&&L.length===1&&L[0].$?t=L[0].$.env:t=io(t,L);e.$={env:t,type:_&&n.expectedType?.type||n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:d.type,value:s===void 0?void 0:b!==void 0?b:W(d.type,{env:t,context:n}),pathCollection:[]},He(e,!0)}else{if(v.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(it(C,"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 L;if(T.length>0&&T[0].$?L=T[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?L=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(L=n.expectedType.type),!L)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:L,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Bo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?W(L,{env:t,context:n}):void 0,pathCollection:[],controlFlow:C}}else if(it(C,"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 L=n.enclosingFunctionReturnType;e.$={env:t,type:L,value:void 0,pathCollection:[],controlFlow:C}}else if(it(C,"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:H.type,value:H,pathCollection:[],controlFlow:C}}else if(it(C,"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:H.type,value:H,pathCollection:[],controlFlow:C}}return e}return e}function
|
|
11544
|
+
- `)}`})}let L=f.filter(S=>S.$&&!it(S.$.controlFlow,"return")&&!it(S.$.controlFlow,"escape")),b;if(Lt(s)&&!ue(s)&&$>=0&&$<f.length&&f[$].$){let S=f[$].$;t=S.env,b=S.value}else Lt(s)&&!ue(s)&&L.length===1&&L[0].$?(t=L[0].$.env,b=L[0].$.value):Lt(s)&&L.length===1&&L[0].$?t=L[0].$.env:t=io(t,L);e.$={env:t,type:_&&n.expectedType?.type||n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:d.type,value:s===void 0?void 0:b!==void 0?b:W(d.type,{env:t,context:n}),pathCollection:[]},He(e,!0)}else{if(v.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(it(C,"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 L;if(T.length>0&&T[0].$?L=T[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?L=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(L=n.expectedType.type),!L)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:L,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Bo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?W(L,{env:t,context:n}):void 0,pathCollection:[],controlFlow:C}}else if(it(C,"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 L=n.enclosingFunctionReturnType;e.$={env:t,type:L,value:void 0,pathCollection:[],controlFlow:C}}else if(it(C,"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:H.type,value:H,pathCollection:[],controlFlow:C}}else if(it(C,"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:H.type,value:H,pathCollection:[],controlFlow:C}}return e}return e}function mT({expr:e,env:t,context:n,scrutineeExpr:r,scrutineeType:i,scrutineeValue:o}){let a=e.args.slice(1),s=[],l,u=new Set,c=!1,_=!1,p=[],f=[];for(let h=0;h<a.length;h++){let g=a[h],y=t;if(!F(g)||!E(g,"=>",2))throw m({token:g.token,errorMessage:`Expected "=>" for match pattern, got ${w(g)}`});let v=g.args[0],T=g.args[1];if(Et(v,"_")){if(_)throw m({token:v.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});_=!0,v.$={env:y,type:i,value:void 0,pathCollection:[],caseExecuted:!0},y=xe(y);let I=$t({expr:T,env:y,context:{...n,isExecuting:o!==void 0&&!ue(o)},variablesToAdd:[]});if(!I.$?.type)throw m({token:T.token,errorMessage:`Expected type for match result expression, got ${w(T)}`});let z=nt(I.$.env,!0);if(y=z,I.$={...I.$,env:z},y=Ti(I,y),I.$.env=y,o===void 0&&I.$&&(I.$.value=void 0),at(I.$.controlFlow))p.push(I.$.controlFlow),it(I.$.controlFlow,"return")&&f.push(I),o!==void 0&&!ue(o)?e.$={env:I.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:I.$.type,value:I.$.value,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow}:o===void 0&&(e.$={env:I.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:I.$.type,value:void 0,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow});else{if(c=!0,n.expectedType&&!q(n.expectedType,{type:I.$.type,env:I.$.env}))throw m({token:I.token,errorMessage:`Incompatible type with expected type:
|
|
11545
11545
|
- Expected: ${A(n.expectedType.type)}
|
|
11546
11546
|
- Actual : ${A(I.$.type)}`});if(o!==void 0&&!ue(o))return t=io(t,s.filter(M=>M.$&&!it(M.$.controlFlow,"return")&&!it(M.$.controlFlow,"escape"))),e.$={env:t,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:I.$.type,value:I.$.value,pathCollection:[],isPrimitiveMatch:!0},He(e,!0),e}if(y=I.$.env,s.push(I),!at(I.$.controlFlow)){if(!l)l={type:I.$.type,env:y};else if(!q({type:l.type,env:y},{type:I.$.type,env:t}))throw m({token:I.token,errorMessage:`Incompatible types in match branches:
|
|
11547
11547
|
- Previous: ${A(l.type)}
|
|
11548
|
-
- Current : ${A(I.$.type)}`})}continue}let $=
|
|
11548
|
+
- Current : ${A(I.$.type)}`})}continue}let $=pu(v),C=[];for(let I of $){let z=x({expr:I,env:y,context:{...n,expectedType:{type:i,env:y}}});if(!z.$)throw m({token:I.token,errorMessage:`Failed to evaluate pattern expression: ${w(I)}`});if(!q({type:i,env:y},{type:z.$.type,env:z.$.env}))throw m({token:I.token,errorMessage:`Pattern type ${A(z.$.type)} is not compatible with scrutinee type ${A(i)}`});let M=z.$.value;if(M===void 0)throw m({token:I.token,errorMessage:`Match patterns must be compile-time known values. "${w(I)}" is a runtime value.
|
|
11549
11549
|
Hint: Use "::" to define compile-time constants, e.g., "myConst :: 42"`});let N=De(M);if(N){if(u.has(N))throw m({token:I.token,errorMessage:`Duplicate pattern value: ${De(M)}`});u.add(N)}C.push({expr:z,value:M})}let L=!1;if(o!==void 0&&!ue(o)){for(let{value:I,expr:z}of C)if(Ot({value:o,env:r.$.env},{value:I,env:z.$.env})){L=!0;break}}v.$={env:y,type:i,value:void 0,pathCollection:[],caseExecuted:!0,primitivePatternValues:C.map(I=>I.value)},y=xe(y);let b=$t({expr:T,env:y,context:{...n,isExecuting:L},variablesToAdd:[]});if(!b.$?.type)throw m({token:T.token,errorMessage:`Expected type for match result expression, got ${w(T)}`});let S=nt(b.$.env,!0);if(y=S,b.$={...b.$,env:S},y=Ti(b,y),b.$.env=y,o===void 0&&b.$&&(b.$.value=void 0),at(b.$.controlFlow)){if(p.push(b.$.controlFlow),it(b.$.controlFlow,"return")&&f.push(b),o!==void 0&&L)return e.$={env:b.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow},e;o===void 0&&(e.$={env:b.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:b.$.type,value:void 0,pathCollection:b.$.pathCollection,controlFlow:b.$.controlFlow})}else{if(c=!0,n.expectedType&&!q(n.expectedType,{type:b.$.type,env:b.$.env}))throw m({token:b.token,errorMessage:`Incompatible type with expected type:
|
|
11550
11550
|
- Expected: ${A(n.expectedType.type)}
|
|
11551
11551
|
- Actual : ${A(b.$.type)}`});if(o!==void 0&&!ue(o)&&L)return e.$={env:b.$.env,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:b.$.type,value:b.$.value,pathCollection:b.$.pathCollection,isPrimitiveMatch:!0},He(e,!0),e}if(y=b.$.env,s.push(b),!at(b.$.controlFlow)){if(!l)l={type:b.$.type,env:y};else if(!q({type:l.type,env:y},{type:b.$.type,env:t}))if(q({type:vt({type:l.type,expectedType:void 0,expr:void 0,env:l.env}),env:l.env},{type:b.$.type,env:y}))l={type:b.$.type,env:y};else throw m({token:b.token,errorMessage:`Incompatible types in match branches:
|
|
11552
11552
|
- Previous: ${A(l.type)}
|
|
11553
|
-
- Current : ${A(b.$.type)}`})}}if(!_)if(vn(i)){let h=u.has("true"),g=u.has("false");if(!h||!g)throw m({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${h?"":"true"}${!h&&!g?", ":""}${g?"":"false"}`})}else throw m({token:e.token,errorMessage:`Match expression on ${A(i)} requires a wildcard pattern "_" for exhaustiveness.`});let d=p.length>0?Go(p):void 0;if(c||!at(d)){if(c&&!l)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:H.type,env:t});let h=s.filter(g=>g.$&&!it(g.$.controlFlow,"return")&&!it(g.$.controlFlow,"escape"));o!==void 0&&!ue(o)&&h.length===1&&h[0].$?t=h[0].$.env:t=io(t,h),e.$={env:t,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:l.type,value:o===void 0?void 0:W(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},He(e,!0)}else{if(p.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(it(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 h;if(f.length>0&&f[0].$?h=f[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?h=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(h=n.expectedType.type),!h)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:h,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Bo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?W(h,{env:t,context:n}):void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(it(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 h=n.enclosingFunctionReturnType;e.$={env:t,type:h,value:void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(it(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:H.type,value:H,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(it(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:H.type,value:H,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}return e}return e}function
|
|
11553
|
+
- Current : ${A(b.$.type)}`})}}if(!_)if(vn(i)){let h=u.has("true"),g=u.has("false");if(!h||!g)throw m({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${h?"":"true"}${!h&&!g?", ":""}${g?"":"false"}`})}else throw m({token:e.token,errorMessage:`Match expression on ${A(i)} requires a wildcard pattern "_" for exhaustiveness.`});let d=p.length>0?Go(p):void 0;if(c||!at(d)){if(c&&!l)throw m({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:H.type,env:t});let h=s.filter(g=>g.$&&!it(g.$.controlFlow,"return")&&!it(g.$.controlFlow,"escape"));o!==void 0&&!ue(o)&&h.length===1&&h[0].$?t=h[0].$.env:t=io(t,h),e.$={env:t,type:n.expectedType?.type&&!me(n.expectedType.type)?n.expectedType.type:l.type,value:o===void 0?void 0:W(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},He(e,!0)}else{if(p.length===0)throw m({token:e.token,errorMessage:"No control flows found but expected some."});if(it(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 h;if(f.length>0&&f[0].$?h=f[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?h=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(h=n.expectedType.type),!h)throw m({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:h,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Bo(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?W(h,{env:t,context:n}):void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(it(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 h=n.enclosingFunctionReturnType;e.$={env:t,type:h,value:void 0,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(it(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:H.type,value:H,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}else if(it(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:H.type,value:H,pathCollection:[],controlFlow:d,isPrimitiveMatch:!0}}return e}return e}function _y({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
|
|
11554
11554
|
${w(e)}`});{let l=r;for(;E(l,".")&&l.args.length>=1;)l=l.args[0];if(B(l)){let u=Y(t,l.token.value),c=u[u.length-1];if(c?.isImplicit)throw m({token:r.token,errorMessage:`Cannot use "open" on implicit variable "${c.name}". Implicit variables must be passed via using() parameters.`})}}let i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate the module argument:
|
|
11555
11555
|
${w(i)}`});let o=i.$.type,a=i.$.value,s;if(Ye(a)){let l=a,u=l.type;for(let c=0;c<u.fields.length;c++){let _=l.fields[c],p=u.fields[c],{env:f}=fe({env:t,variable:{name:p.label,type:p.type,isCompileTimeOnly:!0,value:[_],token:p.exprs.labelExpr?.token??p.exprs.expr.token,initializedAtToken:p.exprs.labelExpr?.token??p.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=f}}else if(pe(o)){let l=a,u=o;s=[];for(let c=0;c<u.fields.length;c++){let _;Pt(l)&&(_=l.fields[c]);let p=u.fields[c];try{let{env:f}=fe({env:t,variable:{name:p.label,type:p.type,isCompileTimeOnly:!!_,value:_?[_]:void 0,token:p.exprs.labelExpr?.token??p.exprs.expr.token,initializedAtToken:p.exprs.labelExpr?.token??p.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=f,s.push({label:p.label,variableName:p.label,type:p.type})}catch(f){throw pt([{token:r.token,errorMessage:`Failed to import struct field "${p.label}"`},...f instanceof kn?f.tokenAndErrorList:[{token:r.token,errorMessage:f instanceof Error?f.message:String(f)}]])}}}else throw m({token:r.token,errorMessage:`Expected module/struct for "${V.open}", got:
|
|
11556
|
-
${w(r)}`});return e.$={env:t,value:H,type:H.type,pathCollection:[],runtimeDestructurings:s},e}function
|
|
11556
|
+
${w(r)}`});return e.$={env:t,value:H,type:H.type,pathCollection:[],runtimeDestructurings:s},e}function py({expr:e,env:t,context:n}){if(!E(e,"."))throw m({token:e.token,errorMessage:`Expected "." for property access, got:
|
|
11557
11557
|
${w(e)}`});if(E(e,".",1)){let s=e.args[0];if(!B(s)&&!Qe(s))throw m({token:s.token,errorMessage:`Expected identifier for enum variant access, got:
|
|
11558
11558
|
${w(s)}`});let l=n.expectedType?.type;if(!ge(l))throw m({token:e.token,errorMessage:"Failed to infer enum variant type."});let u=s.token.value,c=l,_=c.variants.find(f=>f.name===u);if(!_)throw m({token:s.token,errorMessage:`Enum variant "${u}" not found in enum`});let p={...c,selectedVariantName:u};if(!_.fields)e.$={env:t,type:p,value:yi(p,u,[]),pathCollection:[]},s.$={env:t,type:p,pathCollection:[]};else{let f=J(p);e.$={env:t,value:f,type:f.type,pathCollection:[]},s.$=e.$}return e}if(!E(e,".",2))throw m({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
|
|
11559
11559
|
${w(e)}`});let r=e.args[0],i=e.args[1];if(r=x({expr:r,env:t,context:{...n,expectedType:void 0}}),r.$?.env&&(t=r.$?.env),B(i)&&i.token.value==="*"){if(Ee(r.$?.type)){let s=r.$.type,l=s.childType;D(l)&&(l=qt(t,l));let u=r.$?.value;if(Yn(u)){let c=u.targetValue[0],_;return Fn(c)?_=c.elements[u.targetIndex]:_=c,e.$={env:t,type:l,value:_,originType:s,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=u.targetValue,e.$.ptrTargetIndex=u.targetIndex,i.$=e.$,e}if(ue(u)){let c=W(l,{variableName:u.variableName?`${u.variableName}.*`:void 0,env:t,context:n});return u.isRuntimeOnly&&ue(c)&&(c.isRuntimeOnly=!0),e.$={env:t,type:l,value:c,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:l,value:void 0,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,He(e,!1),e}if(wt(r.$?.type)){let s=r.$.type,l=s.childType;return D(l)&&(l=qt(t,l)),e.$={env:t,type:l,value:void 0,originType:s,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,He(e,!1),e}}if(R(r.$?.value)){let s=r.$.value;if(ge(s.value)){if(!B(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got:
|
|
11560
11560
|
${w(i)}`});{let p=i.token.value,f=s.value.trait.fields.find(d=>d.label===p);if(f)return e.$={env:t,type:f.type,value:f.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let l=i.token.value,u=s.value,c=u.variants.find(p=>p.name===l);if(!c){let p=jn({concreteType:s.value,methodName:l,env:t});if(p.length===1){let f=p[0];return e.$={env:t,type:f.type,value:f.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(p.length>1)return e.$=void 0,e;throw m({token:i.token,errorMessage:`Enum variant "${l}" not found in enum`})}let _={...u,selectedVariantName:l};if(!c.fields)e.$={env:t,type:_,value:yi(_,l,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let p=J(_);e.$={env:t,type:p.type,value:p,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if(s.value.trait){if(!Qe(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11561
11561
|
${w(i)}`});let l=i.token.value,u=s.value.trait.fields.findLast(c=>c.label===l);if(u){if(u.assignedValue){let c=u.assignedValue.type;return e.$={env:t,type:c,value:u.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(u.unassignedSomeType){let c=J(u.unassignedSomeType);return e.$={env:t,type:c.type,value:c,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:u.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let p of s.value.trait.fields)if(p.label===""&&p.assignedValue&&mt(p.assignedValue)){let f=p.assignedValue,d=f.type,h=d.fields.findIndex(g=>g.label===l);if(h>=0){let g=d.fields[h],y=f.fields[h];if(G(g.type))continue;if(y)return e.$={env:t,type:y.type,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(g.unassignedSomeType){let v=J(g.unassignedSomeType);return e.$={env:t,type:v.type,value:v,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let c=jn({concreteType:s.value,methodName:l,env:t});if(c.length===1){let p=c[0];return e.$={env:t,type:p.type,value:p.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(n.isEvaluatingGenericImplSpecialization){let p=Y(t,l);if(p.length>0){let f=p[p.length-1];if(f.value&&f.value.length>0&&R(f.value[0]))return e.$={env:t,type:f.value[0].type,value:f.value[0],pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}let _=ja({concreteType:s.value,propertyName:l,env:t});return _?(e.$={env:t,type:_.type,value:_.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}else if(Ce(s.value)){if(!Qe(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11562
11562
|
${w(i)}`});let l=i.token.value,c=s.value.fields.find(_=>_.label===l);return c?(e.$={env:t,type:c.type,value:c.assignedValue??W(c.type,{variableName:c.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(Le(s.value)){if(!Qe(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11563
|
-
${w(i)}`});let l=i.token.value,u=s.value;if(u.receiverType&&u.receiverType.trait){for(let p of u.receiverType.trait.fields)if(p.label===""&&p.assignedValue&&mt(p.assignedValue)){let f=p.assignedValue,d=f.type;if(!q({type:u,env:t},{type:d,env:t}))continue;let h=d.fields.findIndex(g=>g.label===l&&G(g.type));if(h>=0){let g=d.fields[h];if(G(g.type)){let y=f.fields[h];if(y){let v=g.type;return ee(y)&&y.specializedType&&(v=y.specializedType),e.$={env:t,type:v,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let _=
|
|
11563
|
+
${w(i)}`});let l=i.token.value,u=s.value;if(u.receiverType&&u.receiverType.trait){for(let p of u.receiverType.trait.fields)if(p.label===""&&p.assignedValue&&mt(p.assignedValue)){let f=p.assignedValue,d=f.type;if(!q({type:u,env:t},{type:d,env:t}))continue;let h=d.fields.findIndex(g=>g.label===l&&G(g.type));if(h>=0){let g=d.fields[h];if(G(g.type)){let y=f.fields[h];if(y){let v=g.type;return ee(y)&&y.specializedType&&(v=y.specializedType),e.$={env:t,type:v,value:y,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let _=Tc({concreteType:u.receiverType,traitType:u,methodName:l,env:t});if(_)return e.$={env:t,type:_.type,value:_.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let c=u.fields.find(_=>_.label===l);return c?(e.$={env:t,type:c.type,value:c.assignedValue??W(c.type,{variableName:c.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=r.$?.type,a=r.$?.type;for(;o&&Ee(o);)o=o.childType;if(Se(o)||pe(o)||ot(o)){let s=o.fields,l=r.$.value;if(B(i)){if(i.token.type==="integer"){if(!Se(r.$?.type))throw m({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let u=parseInt(i.token.value,10);if(isNaN(u))throw m({token:i.token,errorMessage:`Expected integer for tuple index, got:
|
|
11564
11564
|
${w(i)}`});let c=s.length;if(u<0||u>=c)throw m({token:i.token,errorMessage:`Index out of bounds: ${u} for accessing field in:
|
|
11565
11565
|
${A(r.$?.type)}`});let _=s[u],p=r.$.originType||a,f=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(d=>[...d,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:_.type,originType:p,isAccessingProperty:!0,pathCollection:f},i.$=e.$,l){let d=[];(pn(l)||Pt(l))&&(d=l.fields),e.$.value=d?.[u]}return He(e,!1),e}else if(Qe(i)){let u=i.token.value;{let c=s.findIndex(d=>d.label===u);if(c<0){if(Ce(r.$?.type))throw m({token:i.token,errorMessage:`Module field "${u}" not found in module type`});return e.$=void 0,e}let _=s[c],p=r.$?.originType||a,f=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(d=>[...d,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:_.type,originType:p,isAccessingProperty:!0,pathCollection:f},i.$=e.$,l)if(ue(l)){let d=W(_.type,{env:t,context:n});l.isRuntimeOnly&&ue(d)&&(d.isRuntimeOnly=!0),e.$.value=d}else{let d=l;if(Yn(l)){let y=l.targetValue[0];Fn(y)?d=y.elements[l.targetIndex]:d=y}let h=[];(pn(d)||Pt(d))&&(h=d.fields);let g=h?.[c];g||(g=W(_.type,{env:t,context:n})),e.$.value=g,Yn(l)&&(Pt(d)?e.$.comptimeRef={kind:"struct",structValue:d,fieldIndex:c}:pn(d)&&(e.$.comptimeRef={kind:"tuple",tupleValue:d,fieldIndex:c}))}return He(e,!1),e}}}}else if(Ce(o)){let s=o.fields,l=r.$.value;if(B(i)){if(i.token.type==="integer")throw m({token:i.token,errorMessage:`Accessomg module field by index is not allowed, got:
|
|
11566
11566
|
${w(i)}`});if(Qe(i)){let u=i.token.value;{let c=s.findIndex(f=>f.label===u);if(c<0){if(Ce(r.$?.type))throw l&&Ye(l)&&l.isLoading?m({token:i.token,errorMessage:`Field "${u}" is not yet available from this module. In a circular import, only fields exported before the import of the current module are accessible. Reorder your exports or break the cycle.`}):m({token:i.token,errorMessage:`Module field "${u}" not found in module type`});return e.$=void 0,e}let _=s[c],p=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(f=>[...f,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:_.type,isAccessingProperty:!0,pathCollection:p},i.$=e.$,l)if(ue(l)){let f=W(_.type,{env:t,context:n});l.isRuntimeOnly&&ue(f)&&(f.isRuntimeOnly=!0),e.$.value=f}else{let f=[];Ye(l)&&(f=l.fields);let d=f?.[c];d||(d=W(_.type,{env:t,context:n})),e.$.value=d}return e}}}}else if(ge(o)&&B(i)){if(!Qe(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant property, got:
|
|
11567
|
-
${w(i)}`});let s=i.token.value,l=o.variants.find(u=>u.name===o.selectedVariantName);if(l){let u=(l.fields??[]).findIndex(p=>p.label===s);if(u<0)return e.$=void 0,e;let c=(l.fields??[])[u];e.$={env:t,type:c.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let _=r.$?.value;return _&&Lt(_)&&_.variantName===l.name&&(e.$.value=_.fields[u]),i.$=e.$,e}}return e.$=void 0,e}function
|
|
11567
|
+
${w(i)}`});let s=i.token.value,l=o.variants.find(u=>u.name===o.selectedVariantName);if(l){let u=(l.fields??[]).findIndex(p=>p.label===s);if(u<0)return e.$=void 0,e;let c=(l.fields??[])[u];e.$={env:t,type:c.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let _=r.$?.value;return _&&Lt(_)&&_.variantName===l.name&&(e.$.value=_.fields[u]),i.$=e.$,e}}return e.$=void 0,e}function fy({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body")throw m({token:e.token,errorMessage:`Expected a function type for recur, got:
|
|
11568
11568
|
${w(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!E(e,V.recur))throw m({token:e.token,errorMessage:`Expected recur, got:
|
|
11569
|
-
${w(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let o=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:a,runtimeArgExprsInOrder:s,callerEnv:l}=ui({functionValue:ee(o)?o:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=nt(l),e.$={type:a,value:W(a,{variableName:"recur_result_"+Re(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:s},e}return Kn({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function
|
|
11569
|
+
${w(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let o=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:a,runtimeArgExprsInOrder:s,callerEnv:l}=ui({functionValue:ee(o)?o:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=nt(l),e.$={type:a,value:W(a,{variableName:"recur_result_"+Re(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:s},e}return Kn({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function dy({expr:e,env:t,context:n}){if(!E(e,V.runtime,1))throw m({token:e.token,errorMessage:`Expected runtime(expr), got:
|
|
11570
11570
|
${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=x({expr:r,env:t,context:{...n}});if(!i.$?.type)throw m({token:i.token,errorMessage:`Failed to evaluate runtime argument:
|
|
11571
|
-
${w(i)}`});let o=vt({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
|
|
11571
|
+
${w(i)}`});let o=vt({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 my({expr:e,env:t,context:n}){ve(e,"<:",2);let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!R(o.$.value))throw m({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=o.$.env;let a=o.$.value;if(n.isInsideWhereClause&&!D(a.value))throw m({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${w(r)} of type ${A(a.value)}`});let s=[];if(F(i)&&E(i,V.tuple))for(let f of i.args)F(f)&&E(f,"!")&&f.args.length===1?s.push({expr:f.args[0],isNegated:!0}):s.push({expr:f,isNegated:!1});else F(i)&&E(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:f,isNegated:d}of s){let h=x({expr:f,env:t,context:{...n}});if(!h.$||!h.$.value||!R(h.$.value)||!Le(h.$.value.value))throw m({token:f.token,errorMessage:"Expected trait type for right-hand side expression."});t=h.$.env;let g=h.$.value.value;if(g.receiverType)throw m({token:f.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(d&&!n.isInsideWhereClause)throw m({token:f.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:g,expr:f,isNegated:d})}if(n.isInsideWhereClause&&D(a.value)){let f=a.value;for(let{traitType:d,isNegated:h}of l){let g={...d,receiverType:f};t=_r({env:t,someType:f,traitType:g,isNegated:h})}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw m({token:i.token,errorMessage:"Multiple trait constraints (tuple form) are only allowed in where clauses."});let{traitType:u}=l[0],c=a.value;if(!D(c)&&!Rt({targetType:c,traitType:u,env:t}))throw m({token:e.token,errorMessage:`Type "${A(c)}" does not implement trait "${u.typeName??A(u)}".`});let _={...u,receiverType:a.value},p=J(_);return e.$={env:t,value:p,type:p.type,pathCollection:[]},e}function yy({expr:e,env:t,context:n}){if(!E(e,V.test))throw m({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2)throw m({token:e.token,errorMessage:`test expects 2 arguments (name, body), got ${e.args.length}. IO is implicitly available via "io" \u2014 no using clause needed.`});let r=e.args[0],i=e.args[1],o=x({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value)throw m({token:r.token,errorMessage:`Failed to evaluate test name: ${w(r)}`});if(t=o.$.env,!we(o.$.value))throw m({token:r.token,errorMessage:`Expected string for test name, got ${w(r)}`});let a=Y(t,"IO"),s=a[a.length-1];if(!s)throw m({token:e.token,errorMessage:"IO module not found in environment. Is the prelude loaded?"});let l=Array.isArray(s.value)?s.value[0]:s.value,u=l&&R(l)?l.value:s.type,c=xe(t),_=W(u,{variableName:"io",env:c,context:n}),p={name:"io",type:u,value:[_],isCompileTimeOnly:!0,isOwningTheRcValue:!1,isImplicit:!0,isReassignable:!1,initializedAtToken:e.token,consumedAtToken:void 0,token:e.token};c=fe({env:c,variable:p,allowVariableShadowing:!0}).env;let d=Ne(i),h=x({expr:i,env:c,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:c}}});if(!h.$)throw m({token:i.token,errorMessage:`Failed to evaluate test body: ${w(i)}`});if(!de(h.$.type))throw m({token:i.token,errorMessage:`Test body must have 'unit' type, got ${A(h.$.type)}`});return h.$.originalExpr=d,e.$={env:t,type:H.type,value:H,pathCollection:[]},e}function gy({expr:e,env:t,context:n}){if(!E(e,k.typeof,1))throw m({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
|
|
11572
11572
|
${w(e)}`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(i.$?.env&&(t=i.$.env),!i.$?.type)throw m({token:r.token,errorMessage:`Expected type for expression, got:
|
|
11573
|
-
${w(r)}`});let o=i.$.type,a=J(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}var
|
|
11573
|
+
${w(r)}`});let o=i.$.type,a=J(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}var du=(()=>{let e=process.env.YO_MAX_COMPTIME_LOOP_ITERATIONS;if(e!==void 0){let t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}return 1e4})();function hy(e,t){let n=it(t,"break")||it(t,"return")||it(t,"escape"),r=n||lo(e);return{guaranteed:n,possible:r}}function fu(e,t,n){let{possible:r}=hy(t,n);throw r?m({token:e.token,errorMessage:`Compile-time while loop exceeded the maximum iteration count (${du}). The loop body contains a conditional \`break\`, \`return\`, or \`escape\`, but the loop did not terminate within the limit.
|
|
11574
11574
|
If this is an infinite runtime loop, use \`while runtime(true), { ... }\` instead.
|
|
11575
|
-
To increase the limit, set the YO_MAX_COMPTIME_LOOP_ITERATIONS environment variable.`}):m({token:e.token,errorMessage:"Infinite compile-time while loop detected. The condition is compile-time `true` but the loop body has no `break`, `return`, or `escape` to terminate it.\nIf you need an infinite runtime loop, use `while runtime(true), { ... }` instead of `while true, { ... }`.\nTo increase the limit, set the YO_MAX_COMPTIME_LOOP_ITERATIONS environment variable."})}function
|
|
11575
|
+
To increase the limit, set the YO_MAX_COMPTIME_LOOP_ITERATIONS environment variable.`}):m({token:e.token,errorMessage:"Infinite compile-time while loop detected. The condition is compile-time `true` but the loop body has no `break`, `return`, or `escape` to terminate it.\nIf you need an infinite runtime loop, use `while runtime(true), { ... }` instead of `while true, { ... }`.\nTo increase the limit, set the YO_MAX_COMPTIME_LOOP_ITERATIONS environment variable."})}function Ts({expr:e,env:t,context:n,_comptimeIterationCount:r=0}){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 i=e.args[0],o,a;e.args.length===3?(o=e.args[1],a=e.args[2]):a=e.args[1];let s=$t({expr:i,env:t,context:{...n},variablesToAdd:[]});if(!s.$)throw m({token:i.token,errorMessage:`Failed to evaluate the condition expression:
|
|
11576
11576
|
${w(i)}`});if(!vn(s.$.type))throw m({token:i.token,errorMessage:`Expected bool type for condition expression, got:
|
|
11577
11577
|
${w(i)}`});let l=s.$.value,u=l!==void 0;if(We(l)&&l.value===!1)return e.$={env:t,pathCollection:[],type:H.type,value:u?H:void 0},e;{let c=$t({expr:a,env:t,context:{...n,isEvaluatingLoopBody:{kind:"while",env:t}},variablesToAdd:[]});if(!c.$)throw m({token:a.token,errorMessage:`Failed to evaluate the body expression:
|
|
11578
11578
|
${w(a)}`});if(at(c.$.controlFlow)){if(it(c.$.controlFlow,"return")||it(c.$.controlFlow,"escape"))if(We(l)&&l.value===!0){let f={};it(c.$.controlFlow,"return")&&(f.return=!0),it(c.$.controlFlow,"escape")&&(f.escape=!0),e.$={env:c.$.env,pathCollection:c.$.pathCollection,type:c.$.type,value:c.$.value,controlFlow:f}}else e.$={env:t,pathCollection:[],type:H.type,value:u?H:void 0};else if(it(c.$.controlFlow,"break"))e.$={env:c.$.env,pathCollection:[],type:H.type,value:u?H:void 0};else if(it(c.$.controlFlow,"continue")){let f=c.$.env;if(o){let d=x({expr:o,env:f,context:{...n}});if(!d.$)throw m({token:o.token,errorMessage:`Failed to evaluate the step expression:
|
|
11579
|
-
${w(o)}`});f=d.$.env}if(We(l))return
|
|
11579
|
+
${w(o)}`});f=d.$.env}if(We(l))return Ts({expr:e,env:f,context:{...n},_comptimeIterationCount:r+1});e.$={env:f,pathCollection:[],type:H.type,value:u?H:void 0}}return e}if(!We(l)||l.value!==!0?!1:!!(Et(i,"true")||E(i,"begin")&&i.args.length===1&&Et(i.args[0],"true"))){let{guaranteed:f,possible:d}=hy(a,c.$.controlFlow);if(!f&&!d&&fu(e,a,c.$.controlFlow),!f&&d)return e.$={env:c.$.env,pathCollection:[],type:H.type,value:void 0},e}if(!de(c.$.type))throw m({token:a.token,errorMessage:`Expected the while loop body to return unit, but got:
|
|
11580
11580
|
${A(c.$.type)}`});let p=c.$.value===void 0;if(t=c.$.env,o){let f=x({expr:o,env:t,context:{...n}});if(!f.$)throw m({token:o.token,errorMessage:`Failed to evaluate the step expression:
|
|
11581
|
-
${w(o)}`});t=f.$.env}if(We(l)&&l.value===!0&&p){let f=Ne(i),h=$t({expr:f,env:t,context:{...n},variablesToAdd:[]}).$?.value;if(We(h)){let g=[a],y=t,v=h.value;for(let T=1;v&&T<
|
|
11582
|
-
${w(e)}`})}else if(E(e,":",2)){let{expr:r}=gs({expr:e,env:t,context:n});return r}else{if(E(e,":=",2)||E(e,"::",2))return sy({expr:e,env:t,context:n});if(E(e,"=",2))return qm({expr:e,env:t,context:n});if(E(e,"->",2))return F(e.args[0])&&(E(e.args[0],V.fn)||E(e.args[0],V.unsafe_fn))?ss({expr:e,env:t,context:{...n,isUnsafeFunctionType:E(e.args[0],V.unsafe_fn)}}):F(e.args[0])&&E(e.args[0],V.Fn)?bm({expr:e,env:t,context:{...n}}):ys({expr:e,env:t,context:{...n}});if(E(e,"=>",2))return F(e.args[0])&&E(e.args[0],V.fn)?vm({expr:e,env:t,context:{...n}}):ys({expr:e,env:t,context:{...n}});if(E(e,"=>>",2))return ys({expr:e,env:t,context:{...n}});if(E(e,V.recur))return py({expr:e,env:t,context:{...n}});if(E(e,V.runtime))return fy({expr:e,env:t,context:{...n}});if(E(e,V.extern))return Km({expr:e,env:t,context:{...n}});if(E(e,V.c_include))return Ym({expr:e,env:t,context:{...n}});if(E(e,V.test))return my({expr:e,env:t,context:{...n}});if(E(e,V.cond))return Hm({expr:e,env:t,context:{...n}});if(E(e,V.match))return uy({expr:e,env:t,context:{...n}});if(E(e,V.tuple))return Wm({expr:e,env:t,context:{...n}});if(E(e,V.array))return Mm({expr:e,env:t,context:{...n}});if(E(e,V.comptime_list))return Rm({expr:e,env:t,context:{...n}});if(E(e,V.dyn))return Um({expr:e,env:t,context:{...n}});if(E(e,V.struct))return ko({expr:e,env:t,context:{...n}});if(E(e,V.object))return Lm({expr:e,env:t,context:{...n}});if(E(e,V.newtype))return Fm({expr:e,env:t,context:{...n}});if(E(e,V.enum))return Cm({expr:e,env:t,context:{...n}});if(E(e,V.union))return Nm({expr:e,env:t,context:{...n}});if(E(e,"."))return _y({expr:e,env:t,context:{...n}});if(E(e,V.begin))return $t({expr:e,env:t,context:{...n},variablesToAdd:[]});if(E(e,V.module))return wm({expr:e,env:t,context:{...n}});if(E(e,V.trait))return Sm({expr:e,env:t,context:{...n}});if(E(e,V.Impl))return Id({expr:e,env:t,context:{...n}});if(E(e,V.impl))return Tc({expr:e,env:t,context:{...n}});if(E(e,k.typeof))return yy({expr:e,env:t,context:{...n}});if(E(e,k.sizeof))return Yd({expr:e,env:t,context:{...n}});if(E(e,k.alignof))return Qp({expr:e,env:t,context:{...n}});if(E(e,k.typeid))return pm({expr:e,env:t,context:{...n}});if(E(e,k.downcast))return zf({expr:e,env:t,context:{...n}});if(E(e,k.rc))return qd({expr:e,env:t,context:{...n}});if(E(e,"<:"))return dy({expr:e,env:t,context:{...n}});if(E(e,k.the))return Hd({expr:e,env:t,context:{...n}});if(E(e,V.import))return oy({expr:e,env:t,context:{...n},stdPath:n.stdPath});if(E(e,V.open))return cy({expr:e,env:t,context:{...n}});if(E(e,V.Ptr,1))return gm({expr:e,env:t,context:{...n}});if(E(e,V.Iso,1))return fd({expr:e,env:t,context:{...n}});if(E(e,V.Arc,1))return Kf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_address_of,1))return Wd({expr:e,env:t,context:{...n}});if(E(e,V.Tuple))return Vm({expr:e,env:t,context:{...n}});if(E(e,V.Array))return hm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_array_fill,2))return Jp({expr:e,env:t,context:{...n}});if(E(e,V.Slice))return Im({expr:e,env:t,context:{...n}});if(E(e,V.ComptimeList))return Tm({expr:e,env:t,context:{...n}});if(E(e,V.Future))return km({expr:e,env:t,context:{...n}});if(E(e,V.Concrete))return Em({expr:e,env:t,context:{...n}});if(E(e,V.Dyn))return $m({expr:e,env:t,context:{...n}});if(E(e,k.comptime_expect_error))return nf({expr:e,env:t,context:{...n}});if(E(e,k.comptime_assert))return ef({expr:e,env:t,context:{...n}});if(E(e,k.comptime_fn))return rf({expr:e,env:t,context:{...n}});if(E(e,k.comptime_print))return mf({expr:e,env:t,context:{...n}});if(E(e,k.panic))return Sd({expr:e,env:t,context:{...n}});if(E(e,k.asm))return Rd({expr:e,env:t,context:{...n}});if(E(e,k.global_asm))return Pd({expr:e,env:t,context:{...n}});if(E(e,k.macro_expand))return xd({expr:e,env:t,context:{...n}});if(E(e,V.op_and)||E(e,V.op_or))return Zp({expr:e,env:t,context:{...n}});if(E(e,V.escape))return jm({expr:e,env:t,context:{...n}});if(E(e,k.consume))return bf({expr:e,env:t,context:{...n}});if(E(e,k.___drop))return vd({expr:e,env:t,context:{...n}});if(E(e,k.___dup))return Td({expr:e,env:t,context:{...n}});if(E(e,k.__yo_decr_rc))return kf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_incr_rc))return wf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_decr_rc_atomic))return Lf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_incr_rc_atomic))return Ff({expr:e,env:t,context:{...n}});if(E(e,k.__yo_iso_extract))return Nf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_iso_dispose))return Mf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_arc_dispose))return Df({expr:e,env:t,context:{...n}});if(E(e,k.__yo_drop_array_element))return Of({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dup_array_element))return Rf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_drop_tuple_element))return Pf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dup_tuple_element))return Uf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_rc_own))return If({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dyn_drop))return Af({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dyn_dup))return xf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_sometype_drop))return Sf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_sometype_dup))return Vf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_gc_collect))return Fd({expr:e,env:t,context:{...n}});if(E(e,V.quote))return Ad({expr:e,env:t,context:{...n}});if(E(e,V.gensym))return Ld({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_is_atom))return Ed({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_is_fn_call))return $d({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_get_callee))return Cd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_get_args))return bd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_to_string))return kd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_eq))return wd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_car))return of({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_cdr))return af({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_cons))return sf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_append))return lf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_length))return uf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_element_type))return cf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_get))return _f({expr:e,env:t,context:{...n}});if(F(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_")))return df({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_bool_and,2)||E(e,k.__yo_comptime_bool_or,2)||E(e,k.__yo_comptime_bool_eq,2)||E(e,k.__yo_comptime_bool_neq,2)||E(e,k.__yo_comptime_bool_not,1)||E(e,k.__yo_comptime_bool_to_comptime_string,1))return tf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_string_concat,2)||E(e,k.__yo_comptime_string_eq,2)||E(e,k.__yo_comptime_string_neq,2)||E(e,k.__yo_comptime_string_lt,2)||E(e,k.__yo_comptime_string_lte,2)||E(e,k.__yo_comptime_string_gt,2)||E(e,k.__yo_comptime_string_gte,2)||E(e,k.__yo_comptime_string_length,1)||E(e,k.__yo_comptime_string_to_upper,1)||E(e,k.__yo_comptime_string_to_lower,1)||E(e,k.__yo_comptime_string_slice))return yf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_array_index)||E(e,k.__yo_comptime_slice_index)||E(e,k.__yo_comptime_array_index_range)||E(e,k.__yo_comptime_array_index_range_inclusive)||E(e,k.__yo_comptime_slice_index_range)||E(e,k.__yo_comptime_slice_index_range_inclusive)||E(e,k.__yo_comptime_string_index)||E(e,k.__yo_comptime_string_index_range)||E(e,k.__yo_comptime_string_index_range_inclusive)||E(e,k.__yo_comptime_list_index)||E(e,k.__yo_comptime_list_index_range)||E(e,k.__yo_comptime_list_index_range_inclusive))return $f({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_to_comptime_string,1))return Kd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_are_types_compatible,2))return Xd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_are_types_equal,2))return Qd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_contains_rc_type,1))return Zd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_can_form_rc_cycle,1))return Jd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_impls,2))return em({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_get_info,1))return tm({expr:e,env:t,context:{...n}});if(E(e,k.comptime_eval,1))return rm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_string_to_expr,1))return im({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_join_fields,3))return am({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_map_variants,2))return sm({expr:e,env:t,context:{...n}});if(E(e,k.derive_rule,2))return _m({expr:e,env:t,context:{...n}});if(E(e,k.derive))return cm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_var_print_info,1))return dm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_var_is_owning_the_rc_value))return mm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_var_has_other_aliases))return ym({expr:e,env:t,context:{...n}});if(E(e,k.__yo_process_platform)||E(e,k.__yo_process_arch)||E(e,k.__yo_pointer_size_bits))return Ud({expr:e,env:t,context:{...n}});if(E(e,k.__yo_build_executable)||E(e,k.__yo_build_static_library)||E(e,k.__yo_build_shared_library)||E(e,k.__yo_build_test)||E(e,k.__yo_build_run)||E(e,k.__yo_build_step)||E(e,k.__yo_build_step_depend_on)||E(e,k.__yo_build_target_host)||E(e,k.__yo_build_target_parse)||E(e,k.__yo_build_dependency)||E(e,k.__yo_build_path_dependency)||E(e,k.__yo_build_system_library)||E(e,k.__yo_build_link)||E(e,k.__yo_build_link_system_library)||E(e,k.__yo_build_option)||E(e,k.__yo_build_dep_artifact)||E(e,k.__yo_build_module)||E(e,k.__yo_build_module_link)||E(e,k.__yo_build_add_import)||E(e,k.__yo_build_add_cflags)||E(e,k.__yo_build_dep_module)){for(let r=0;r<e.args.length;r++)e.args[r]=ci({expr:e.args[r],env:t,context:{...n}});return Gd({expr:e,env:t,context:{...n}})}else return E(e,V.while)?vs({expr:e,env:t,context:{...n}}):E(e,k.va_start)?fm({expr:e,env:t,context:{...n}}):Kn({expr:e,env:t,context:{...n}})}}function gT(e){let t=e;for(;;){let n=Ta.join(t,"std");if(yT(n))return n;let r=Ta.dirname(t);if(r===t)break;t=r}return Ta.join(__dirname,"../std")}var Ty=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.loadingModules=new Map;this.allowPartialModule=t?.allowPartialModule??!1,this.stdPath=t?.stdPath??gT(__dirname),this.codeGenratorC=new ts,yu(ci),qc(Xp)}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)ea(r),Jo(r),this.clearDependencies(r),Ia(r),this.modules.delete(r);ea(t),Jo(t),this.clearDependencies(t),Ia(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())ea(t),Jo(t),Ia(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),this.loadingModules.clear(),gl(),Lc(),xu()}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.loadingModules.get(t);if(o)return{moduleValue:o,moduleError:void 0};let a=this.findExtensionDuplicates(t);for(let _ of a)this.deleteModuleAndDependents(_);let s=t,l=new na({modulePath:t,stdPath:this.stdPath,loadModule:_=>this.loadModule(_,void 0,s),inputString:n,allowPartialModule:this.allowPartialModule,registerPartialModule:_=>{this.loadingModules.set(t,_)}});this.loadingModules.delete(t);let u=l.getModuleValue(),c=l.getModuleError();return this.modules.set(t,{moduleValue:u,moduleError:c,evaluator:l}),{moduleValue:u,moduleError:c}}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,isLibrary:s}={}){let{moduleValue:l,moduleError:u}=this.loadModule(t);if(u)throw u.toString();if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);let _=[];for(let[,p]of this.modules){let f=p.moduleValue;f.moduleLevelInitExprs&&f.moduleLevelInitExprs.length>0&&_.push(...f.moduleLevelInitExprs)}this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s,allModuleLevelInitExprs:_.length>0?_:void 0}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}get usesParallelism(){return this.codeGenratorC.usesParallelism}};export{Pi as Emitter,Es as IdentifierRegex,Ty as ModuleManager,Ts as Operators,se as PlaceholderToken,TT as RAIIToken,nn as TokenType,Io as charIsOperator,gl as clearAllGlobalImplState,Jo as clearGenericImplsFromModule,ea as clearImplsFromModule,KC as debug,mu as findMatchingBracketTokenIndex,et as generateExprFromCode,hu as generateExprsFromCode,mr as stringIsOperator,gu as tokenize};
|
|
11581
|
+
${w(o)}`});t=f.$.env}if(We(l)&&l.value===!0&&p){let f=Ne(i),h=$t({expr:f,env:t,context:{...n},variablesToAdd:[]}).$?.value;if(We(h)){let g=[a],y=t,v=h.value;for(let T=1;v&&T<du;T++){let $=Ne(a),C=$t({expr:$,env:y,context:{...n,isEvaluatingLoopBody:{kind:"while",env:y}},variablesToAdd:[]});if(!C.$)break;if(g.push($),y=C.$.env,o){let I=Ne(o),z=x({expr:I,env:y,context:{...n}});if(!z.$)break;y=z.$.env}let L=Ne(i),S=$t({expr:L,env:y,context:{...n},variablesToAdd:[]}).$?.value;if(We(S)&&S.value===!1)v=!1;else if(We(S)&&S.value===!0)v=!0;else return e.$={env:y,pathCollection:[],type:H.type,value:void 0,comptimeUnrolledBodies:g},e}if(!v)return e.$={env:y,pathCollection:[],type:H.type,value:void 0,comptimeUnrolledBodies:g},e}fu(e,a,c.$.controlFlow)}if(We(l)&&l.value===!0){let f=r+1;return f>=du&&fu(e,a,c.$.controlFlow),Ts({expr:e,env:t,context:{...n},_comptimeIterationCount:f})}else return e.$={env:t,pathCollection:[],type:H.type,value:u?H:void 0},e}}function vy(e){let t=process.env[e];return t==="1"||t?.toLowerCase()==="true"}var yT=vy("YO_DEBUG_EVAL")||vy("YO_DEBUG_EVAL_PROFILE"),Ty=globalThis,Lo=Ty.__yoEvalProfilerState??(Ty.__yoEvalProfilerState={evalCount:0,evalStart:0});function ci({expr:e,env:t,context:n}){if(yT&&(Lo.evalStart||(Lo.evalStart=Date.now()),Lo.evalCount++,Lo.evalCount%1e5===0&&console.log(`[EVAL] ${Lo.evalCount} calls, ${Date.now()-Lo.evalStart}ms elapsed`)),B(e))switch(e.token.type){case"identifier":case"operator":return hs({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return Gm(e,t,{...n});case"float":return Bm(e,t,{...n});case"string":return Wm(e,t);case"char":return Rm(e,t);case"bool":return Om(e,t);default:throw m({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
|
|
11582
|
+
${w(e)}`})}else if(E(e,":",2)){let{expr:r}=gs({expr:e,env:t,context:n});return r}else{if(E(e,":=",2)||E(e,"::",2))return ly({expr:e,env:t,context:n});if(E(e,"=",2))return Ym({expr:e,env:t,context:n});if(E(e,"->",2))return F(e.args[0])&&(E(e.args[0],V.fn)||E(e.args[0],V.unsafe_fn))?ss({expr:e,env:t,context:{...n,isUnsafeFunctionType:E(e.args[0],V.unsafe_fn)}}):F(e.args[0])&&E(e.args[0],V.Fn)?km({expr:e,env:t,context:{...n}}):ys({expr:e,env:t,context:{...n}});if(E(e,"=>",2))return F(e.args[0])&&E(e.args[0],V.fn)?Tm({expr:e,env:t,context:{...n}}):ys({expr:e,env:t,context:{...n}});if(E(e,"=>>",2))return ys({expr:e,env:t,context:{...n}});if(E(e,V.recur))return fy({expr:e,env:t,context:{...n}});if(E(e,V.runtime))return dy({expr:e,env:t,context:{...n}});if(E(e,V.extern))return Xm({expr:e,env:t,context:{...n}});if(E(e,V.c_include))return Hm({expr:e,env:t,context:{...n}});if(E(e,V.test))return yy({expr:e,env:t,context:{...n}});if(E(e,V.cond))return jm({expr:e,env:t,context:{...n}});if(E(e,V.match))return cy({expr:e,env:t,context:{...n}});if(E(e,V.tuple))return qm({expr:e,env:t,context:{...n}});if(E(e,V.array))return Dm({expr:e,env:t,context:{...n}});if(E(e,V.comptime_list))return Pm({expr:e,env:t,context:{...n}});if(E(e,V.dyn))return zm({expr:e,env:t,context:{...n}});if(E(e,V.struct))return ko({expr:e,env:t,context:{...n}});if(E(e,V.object))return Im({expr:e,env:t,context:{...n}});if(E(e,V.newtype))return Lm({expr:e,env:t,context:{...n}});if(E(e,V.enum))return bm({expr:e,env:t,context:{...n}});if(E(e,V.union))return Mm({expr:e,env:t,context:{...n}});if(E(e,"."))return py({expr:e,env:t,context:{...n}});if(E(e,V.begin))return $t({expr:e,env:t,context:{...n},variablesToAdd:[]});if(E(e,V.module))return Fm({expr:e,env:t,context:{...n}});if(E(e,V.trait))return Vm({expr:e,env:t,context:{...n}});if(E(e,V.Impl))return Ad({expr:e,env:t,context:{...n}});if(E(e,V.impl))return Ec({expr:e,env:t,context:{...n}});if(E(e,k.typeof))return gy({expr:e,env:t,context:{...n}});if(E(e,k.sizeof))return Hd({expr:e,env:t,context:{...n}});if(E(e,k.alignof))return Zp({expr:e,env:t,context:{...n}});if(E(e,k.typeid))return fm({expr:e,env:t,context:{...n}});if(E(e,k.downcast))return Bf({expr:e,env:t,context:{...n}});if(E(e,k.rc))return Yd({expr:e,env:t,context:{...n}});if(E(e,"<:"))return my({expr:e,env:t,context:{...n}});if(E(e,k.the))return jd({expr:e,env:t,context:{...n}});if(E(e,V.import))return ay({expr:e,env:t,context:{...n},stdPath:n.stdPath});if(E(e,V.open))return _y({expr:e,env:t,context:{...n}});if(E(e,V.Ptr,1))return hm({expr:e,env:t,context:{...n}});if(E(e,V.Iso,1))return dd({expr:e,env:t,context:{...n}});if(E(e,V.Arc,1))return Xf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_address_of,1))return qd({expr:e,env:t,context:{...n}});if(E(e,V.Tuple))return Nm({expr:e,env:t,context:{...n}});if(E(e,V.Array))return vm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_array_fill,2))return ef({expr:e,env:t,context:{...n}});if(E(e,V.Slice))return Am({expr:e,env:t,context:{...n}});if(E(e,V.ComptimeList))return Em({expr:e,env:t,context:{...n}});if(E(e,V.Future))return wm({expr:e,env:t,context:{...n}});if(E(e,V.Concrete))return $m({expr:e,env:t,context:{...n}});if(E(e,V.Dyn))return Cm({expr:e,env:t,context:{...n}});if(E(e,k.comptime_expect_error))return rf({expr:e,env:t,context:{...n}});if(E(e,k.comptime_assert))return tf({expr:e,env:t,context:{...n}});if(E(e,k.comptime_fn))return of({expr:e,env:t,context:{...n}});if(E(e,k.comptime_print))return yf({expr:e,env:t,context:{...n}});if(E(e,k.panic))return Vd({expr:e,env:t,context:{...n}});if(E(e,k.asm))return Pd({expr:e,env:t,context:{...n}});if(E(e,k.global_asm))return Ud({expr:e,env:t,context:{...n}});if(E(e,k.macro_expand))return Sd({expr:e,env:t,context:{...n}});if(E(e,V.op_and)||E(e,V.op_or))return Jp({expr:e,env:t,context:{...n}});if(E(e,V.escape))return Km({expr:e,env:t,context:{...n}});if(E(e,k.consume))return kf({expr:e,env:t,context:{...n}});if(E(e,k.___drop))return Td({expr:e,env:t,context:{...n}});if(E(e,k.___dup))return Ed({expr:e,env:t,context:{...n}});if(E(e,k.__yo_decr_rc))return wf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_incr_rc))return Ff({expr:e,env:t,context:{...n}});if(E(e,k.__yo_decr_rc_atomic))return If({expr:e,env:t,context:{...n}});if(E(e,k.__yo_incr_rc_atomic))return Lf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_iso_extract))return Mf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_iso_dispose))return Df({expr:e,env:t,context:{...n}});if(E(e,k.__yo_arc_dispose))return Of({expr:e,env:t,context:{...n}});if(E(e,k.__yo_drop_array_element))return Rf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dup_array_element))return Pf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_drop_tuple_element))return Uf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dup_tuple_element))return zf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_rc_own))return Af({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dyn_drop))return xf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_dyn_dup))return Sf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_sometype_drop))return Vf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_sometype_dup))return Nf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_gc_collect))return Ld({expr:e,env:t,context:{...n}});if(E(e,V.quote))return xd({expr:e,env:t,context:{...n}});if(E(e,V.gensym))return Id({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_is_atom))return $d({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_is_fn_call))return Cd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_get_callee))return bd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_get_args))return kd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_to_string))return wd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_expr_eq))return Fd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_car))return af({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_cdr))return sf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_cons))return lf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_append))return uf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_length))return cf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_element_type))return _f({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_list_get))return pf({expr:e,env:t,context:{...n}});if(F(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_")))return mf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_bool_and,2)||E(e,k.__yo_comptime_bool_or,2)||E(e,k.__yo_comptime_bool_eq,2)||E(e,k.__yo_comptime_bool_neq,2)||E(e,k.__yo_comptime_bool_not,1)||E(e,k.__yo_comptime_bool_to_comptime_string,1))return nf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_string_concat,2)||E(e,k.__yo_comptime_string_eq,2)||E(e,k.__yo_comptime_string_neq,2)||E(e,k.__yo_comptime_string_lt,2)||E(e,k.__yo_comptime_string_lte,2)||E(e,k.__yo_comptime_string_gt,2)||E(e,k.__yo_comptime_string_gte,2)||E(e,k.__yo_comptime_string_length,1)||E(e,k.__yo_comptime_string_to_upper,1)||E(e,k.__yo_comptime_string_to_lower,1)||E(e,k.__yo_comptime_string_slice))return gf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_array_index)||E(e,k.__yo_comptime_slice_index)||E(e,k.__yo_comptime_array_index_range)||E(e,k.__yo_comptime_array_index_range_inclusive)||E(e,k.__yo_comptime_slice_index_range)||E(e,k.__yo_comptime_slice_index_range_inclusive)||E(e,k.__yo_comptime_string_index)||E(e,k.__yo_comptime_string_index_range)||E(e,k.__yo_comptime_string_index_range_inclusive)||E(e,k.__yo_comptime_list_index)||E(e,k.__yo_comptime_list_index_range)||E(e,k.__yo_comptime_list_index_range_inclusive))return Cf({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_to_comptime_string,1))return Xd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_are_types_compatible,2))return Qd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_are_types_equal,2))return Zd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_contains_rc_type,1))return Jd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_can_form_rc_cycle,1))return em({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_impls,2))return tm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_get_info,1))return nm({expr:e,env:t,context:{...n}});if(E(e,k.comptime_eval,1))return im({expr:e,env:t,context:{...n}});if(E(e,k.__yo_comptime_string_to_expr,1))return om({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_join_fields,3))return sm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_type_map_variants,2))return lm({expr:e,env:t,context:{...n}});if(E(e,k.derive_rule,2))return pm({expr:e,env:t,context:{...n}});if(E(e,k.derive))return _m({expr:e,env:t,context:{...n}});if(E(e,k.__yo_var_print_info,1))return mm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_var_is_owning_the_rc_value))return ym({expr:e,env:t,context:{...n}});if(E(e,k.__yo_var_has_other_aliases))return gm({expr:e,env:t,context:{...n}});if(E(e,k.__yo_process_platform)||E(e,k.__yo_process_arch)||E(e,k.__yo_pointer_size_bits))return zd({expr:e,env:t,context:{...n}});if(E(e,k.__yo_build_executable)||E(e,k.__yo_build_static_library)||E(e,k.__yo_build_shared_library)||E(e,k.__yo_build_test)||E(e,k.__yo_build_run)||E(e,k.__yo_build_step)||E(e,k.__yo_build_step_depend_on)||E(e,k.__yo_build_target_host)||E(e,k.__yo_build_target_parse)||E(e,k.__yo_build_dependency)||E(e,k.__yo_build_path_dependency)||E(e,k.__yo_build_system_library)||E(e,k.__yo_build_link)||E(e,k.__yo_build_link_system_library)||E(e,k.__yo_build_option)||E(e,k.__yo_build_dep_artifact)||E(e,k.__yo_build_module)||E(e,k.__yo_build_module_link)||E(e,k.__yo_build_add_import)||E(e,k.__yo_build_add_cflags)||E(e,k.__yo_build_dep_module)){for(let r=0;r<e.args.length;r++)e.args[r]=ci({expr:e.args[r],env:t,context:{...n}});return Wd({expr:e,env:t,context:{...n}})}else return E(e,V.while)?Ts({expr:e,env:t,context:{...n}}):E(e,k.va_start)?dm({expr:e,env:t,context:{...n}}):Kn({expr:e,env:t,context:{...n}})}}function hT(e){let t=e;for(;;){let n=Ta.join(t,"std");if(gT(n))return n;let r=Ta.dirname(t);if(r===t)break;t=r}return Ta.join(__dirname,"../std")}var Ey=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.loadingModules=new Map;this.allowPartialModule=t?.allowPartialModule??!1,this.stdPath=t?.stdPath??hT(__dirname),this.codeGenratorC=new ts,gu(ci),Yc(Qp)}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)ea(r),Jo(r),this.clearDependencies(r),Ia(r),this.modules.delete(r);ea(t),Jo(t),this.clearDependencies(t),Ia(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())ea(t),Jo(t),Ia(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),this.loadingModules.clear(),hl(),Ic(),Su()}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.loadingModules.get(t);if(o)return{moduleValue:o,moduleError:void 0};let a=this.findExtensionDuplicates(t);for(let _ of a)this.deleteModuleAndDependents(_);let s=t,l=new na({modulePath:t,stdPath:this.stdPath,loadModule:_=>this.loadModule(_,void 0,s),inputString:n,allowPartialModule:this.allowPartialModule,registerPartialModule:_=>{this.loadingModules.set(t,_)}});this.loadingModules.delete(t);let u=l.getModuleValue(),c=l.getModuleError();return this.modules.set(t,{moduleValue:u,moduleError:c,evaluator:l}),{moduleValue:u,moduleError:c}}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,isLibrary:s}={}){let{moduleValue:l,moduleError:u}=this.loadModule(t);if(u)throw u.toString();if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);let _=[];for(let[,p]of this.modules){let f=p.moduleValue;f.moduleLevelInitExprs&&f.moduleLevelInitExprs.length>0&&_.push(...f.moduleLevelInitExprs)}this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s,allModuleLevelInitExprs:_.length>0?_:void 0}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}get usesParallelism(){return this.codeGenratorC.usesParallelism}};export{Pi as Emitter,$s as IdentifierRegex,Ey as ModuleManager,Es as Operators,se as PlaceholderToken,ET as RAIIToken,rn as TokenType,Io as charIsOperator,hl as clearAllGlobalImplState,Jo as clearGenericImplsFromModule,ea as clearImplsFromModule,XC as debug,yu as findMatchingBracketTokenIndex,et as generateExprFromCode,vu as generateExprsFromCode,mr as stringIsOperator,hu as tokenize};
|