@shd101wyy/yo 0.0.33 → 0.1.0

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 CHANGED
@@ -1,4 +1,4 @@
1
- var py=Object.create;var Ka=Object.defineProperty;var dy=Object.getOwnPropertyDescriptor;var my=Object.getOwnPropertyNames;var yy=Object.getPrototypeOf,gy=Object.prototype.hasOwnProperty;var hy=(e,t)=>{for(var n in t)Ka(e,n,{get:t[n],enumerable:!0})},Bu=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of my(t))!gy.call(e,i)&&i!==n&&Ka(e,i,{get:()=>t[i],enumerable:!(r=dy(t,i))||r.enumerable});return e};var xr=(e,t,n)=>(n=e!=null?py(yy(e)):{},Bu(t||!e||!e.__esModule?Ka(n,"default",{value:e,enumerable:!0}):n,e)),vy=e=>Bu(Ka({},"__esModule",{value:!0}),e);var Rv={};hy(Rv,{Emitter:()=>zi,IdentifierRegex:()=>Qa,ModuleManager:()=>zu,Operators:()=>Xa,PlaceholderToken:()=>Ae,RAIIToken:()=>Ty,TokenType:()=>Sn,charIsOperator:()=>yo,clearAllGlobalImplState:()=>ws,clearGenericImplsFromModule:()=>Bo,clearImplsFromModule:()=>Go,debug:()=>$g,findMatchingBracketTokenIndex:()=>Zs,generateExprFromCode:()=>On,stringIsOperator:()=>Dr,tokenize:()=>el});module.exports=vy(Rv);var zi=class{constructor(){this.headers="";this.declarations="";this.code=""}emit(t,n=""){return this.code+=n+t,this.code}emitLine(t,n=""){return this.code+=n+t+`
1
+ var dy=Object.create;var Ka=Object.defineProperty;var my=Object.getOwnPropertyDescriptor;var yy=Object.getOwnPropertyNames;var gy=Object.getPrototypeOf,hy=Object.prototype.hasOwnProperty;var vy=(e,t)=>{for(var n in t)Ka(e,n,{get:t[n],enumerable:!0})},Bu=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of yy(t))!hy.call(e,i)&&i!==n&&Ka(e,i,{get:()=>t[i],enumerable:!(r=my(t,i))||r.enumerable});return e};var xr=(e,t,n)=>(n=e!=null?dy(gy(e)):{},Bu(t||!e||!e.__esModule?Ka(n,"default",{value:e,enumerable:!0}):n,e)),Ty=e=>Bu(Ka({},"__esModule",{value:!0}),e);var Pv={};vy(Pv,{Emitter:()=>zi,IdentifierRegex:()=>Qa,ModuleManager:()=>zu,Operators:()=>Xa,PlaceholderToken:()=>Ae,RAIIToken:()=>Ey,TokenType:()=>Sn,charIsOperator:()=>yo,clearAllGlobalImplState:()=>ws,clearGenericImplsFromModule:()=>Bo,clearImplsFromModule:()=>Go,debug:()=>Cg,findMatchingBracketTokenIndex:()=>Zs,generateExprFromCode:()=>On,stringIsOperator:()=>Dr,tokenize:()=>el});module.exports=Ty(Pv);var zi=class{constructor(){this.headers="";this.declarations="";this.code=""}emit(t,n=""){return this.code+=n+t,this.code}emitLine(t,n=""){return this.code+=n+t+`
2
2
  `,this.code}emitHeaderLine(t,n=""){return this.headers+=n+t+`
3
3
  `,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
4
4
  `,this.declarations}print(){return this.headers+`
@@ -12,7 +12,7 @@ ${s}
12
12
  ${" ".repeat(o+Math.floor(e.value.length/2))}^`}function d({token:e,errorMessage:t,cause:n,isAssertionError:r,kind:i}){let o=`${t.trim()}
13
13
 
14
14
  ${Gu({token:e})}`;return new rr([{token:e,errorMessage:o+(n!=null&&n.message?`
15
- `+n.message:"")}],r,i)}function Wt(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new rr(e,t,n)}var Sn=(E=>(E.Operator="operator",E.Dot=".",E.LParen="(",E.RParen=")",E.LBracket="[",E.RBracket="]",E.LCurlyBracket="{",E.RCurlyBracket="}",E.Char="char",E.String="string",E.Identifier="identifier",E.Integer="integer",E.Float="float",E.Bool="bool",E.Semicolon=";",E.Comma=",",E.SingleLineComment="single_line_comment",E.MultiLineComment="multi_line_comment",E.Whitespace="whitespace",E.TemplateString="template_string",E))(Sn||{}),Ae={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}},Ty={modulePath:"drop",inputString:"drop",type:"identifier",value:"drop",position:{row:0,column:0,character:0}},Xa=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function yo(e){return Xa.includes(e)}function Dr(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!yo(r)){t=!1;break}}return t}var Qa=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function Zs(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 Js;function Wu(e){Js=e}function U({expr:e,env:t,context:n}){if(!Js)throw new Error("Internal Error: evaluateExpression function is not set.");return Js({expr:e,env:t,context:n})}function el(e,t){let n=[],r=0,i=0;for(let o=0;o<e.length;o++){let a=e[o],s=o-i,l=o,u="",c=o;if(e[c]===".")for(;e[c]===".";)u+=e[c],c=c+1;else for(;yo(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`
15
+ `+n.message:"")}],r,i)}function Wt(e,t,n){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new rr(e,t,n)}var Sn=(E=>(E.Operator="operator",E.Dot=".",E.LParen="(",E.RParen=")",E.LBracket="[",E.RBracket="]",E.LCurlyBracket="{",E.RCurlyBracket="}",E.Char="char",E.String="string",E.Identifier="identifier",E.Integer="integer",E.Float="float",E.Bool="bool",E.Semicolon=";",E.Comma=",",E.SingleLineComment="single_line_comment",E.MultiLineComment="multi_line_comment",E.Whitespace="whitespace",E.TemplateString="template_string",E))(Sn||{}),Ae={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}},Ey={modulePath:"drop",inputString:"drop",type:"identifier",value:"drop",position:{row:0,column:0,character:0}},Xa=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function yo(e){return Xa.includes(e)}function Dr(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!yo(r)){t=!1;break}}return t}var Qa=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function Zs(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 Js;function Wu(e){Js=e}function U({expr:e,env:t,context:n}){if(!Js)throw new Error("Internal Error: evaluateExpression function is not set.");return Js({expr:e,env:t,context:n})}function el(e,t){let n=[],r=0,i=0;for(let o=0;o<e.length;o++){let a=e[o],s=o-i,l=o,u="",c=o;if(e[c]===".")for(;e[c]===".";)u+=e[c],c=c+1;else for(;yo(e[c])&&e[c]!==".";)u+=e[c],c=c+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),o=c-1;continue}switch(a){case" ":case" ":case`
16
16
  `:case"\r":{let _="",f=o,p=r;for(;e[f]===" "||e[f]===" "||e[f]===`
17
17
  `||e[f]==="\r";)_+=e[f],e[f]===`
18
18
  `&&(r++,i=f+1),f=f+1;n.push({type:"whitespace",value:_,position:{row:p,column:s,character:l},modulePath:t,inputString:e}),o=f-1;break}case"/":if(e[o+1]==="/"){let _="",f=o;for(;e[f]!==`
@@ -40,8 +40,8 @@ ${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=>L(r)).join(`
42
42
  `)}
43
- `);return n[0]}function ua(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function De(e){return(e==null?void 0:e.tag)==="unit"}function rn(e){return(e==null?void 0:e.tag)==="comptime_int"}function Tn(e){return(e==null?void 0:e.tag)==="comptime_float"}function ln(e){return(e==null?void 0:e.tag)==="comptime_string"}function En(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Bi(e){return En(e)&&yn(e.childType)}function Zn(e){return(e==null?void 0:e.tag)==="bool"}function ca(e){return(e==null?void 0:e.tag)==="usize"}function _a(e){return(e==null?void 0:e.tag)==="isize"}function Mr(e){return(e==null?void 0:e.tag)==="u8"}function fa(e){return(e==null?void 0:e.tag)==="i8"}function pa(e){return(e==null?void 0:e.tag)==="u16"}function da(e){return(e==null?void 0:e.tag)==="i16"}function ma(e){return(e==null?void 0:e.tag)==="u32"}function ya(e){return(e==null?void 0:e.tag)==="i32"}function ga(e){return(e==null?void 0:e.tag)==="u64"}function ha(e){return(e==null?void 0:e.tag)==="i64"}function va(e){return(e==null?void 0:e.tag)==="f32"}function Ta(e){return(e==null?void 0:e.tag)==="f64"}function yn(e){return(e==null?void 0:e.tag)==="Expr"}function Xe(e){return(e==null?void 0:e.tag)==="Array"}function Lt(e){return(e==null?void 0:e.tag)==="Slice"}function Qe(e){return(e==null?void 0:e.tag)==="Tuple"}function Pt(e){return(e==null?void 0:e.tag)==="Union"}function ze(e){return(e==null?void 0:e.tag)==="Enum"}function xe(e){return(e==null?void 0:e.tag)==="Struct"}function Ht(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function ui(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function We(e){return(e==null?void 0:e.tag)==="Module"}function st(e){return(e==null?void 0:e.tag)==="Trait"}function _n(e){return st(e)&&e.isFn!==void 0}function J(e){return(e==null?void 0:e.tag)==="Function"}function Ea(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function bt(e){return(e==null?void 0:e.tag)==="Type"}function qu(e){return bt(e)&&e.tag==="Type"&&e.level===0}function z(e){return(e==null?void 0:e.tag)==="SomeType"}function tt(e){return(e==null?void 0:e.tag)==="Ptr"}function fn(e){return(e==null?void 0:e.tag)==="Iso"}function un(e){return(e==null?void 0:e.tag)==="Arc"}function Ke(e){return(e==null?void 0:e.tag)==="Dyn"}function jn(e){if(z(e)){let t=e;if(je(t))return!0;if(t.resolvedConcreteType)return jn(t.resolvedConcreteType)}return Ht(e)||Ke(e)||fn(e)||un(e)}function Yr(e){return(e==null?void 0:e.tag)==="u8"||(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="u16"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="u32"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="u64"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="usize"||(e==null?void 0:e.tag)==="isize"}function Hr(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function Yu(e){return(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="isize"}function ho(e){return(e==null?void 0:e.tag)==="char"}function ci(e){return(e==null?void 0:e.tag)==="void"}function Rn(e){return st(e)&&e.isFuture!==void 0}function Za(e){return st(e)&&e.isConcrete!==void 0}function Or(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 Fr(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(i=>i.isCompileTimeOnly)||e.forallParameters.length>0||e.implicitParameters.length>0,n=e.parameters.some(i=>!i.isCompileTimeOnly&&z(i.type)&&!je(i.type));return t||n}function jr(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(i=>i.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(i=>!i.isCompileTimeOnly&&z(i.type)&&!je(i.type));return t||n}function tl(e){var n;let t=e.type;return t?Fr(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function cr(e){var t;return Ht(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function Ut(e){return(e==null?void 0:e.tag)==="EffectsRow"}function Ja(e,t,n){let r=!1,i=0;for(let o of t){let a=o.type;if(n.includes(o))throw d({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
44
- Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(Ht(a))continue;let s=[...n,o],l=pn(a,s);bt(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?ir(i):r?Mt(e):Mt(e)}function pn(e,t=[]){if(Ke(e))return Mt(e);if(ua(e))return Mt(e);if(bt(e))return ir(e.level+1);if(rn(e)||Tn(e)||ln(e)||En(e))return Mt(e);if(yn(e))return Mt(e);if(J(e))return Mt(e);if(_n(e))return Mt(e);if(Xe(e))return pn(e.childType,t);if(Lt(e))return Mt(e);if(Qe(e))return Ja(e,e.fields,t);if(xe(e))return Ja(e,e.fields,t);if(ze(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Ja(e,n,t)}else{if(Pt(e))return Ja(e,e.fields,t);if(We(e))return ir(1,e);if(st(e))return ir(1,e);if(z(e))return e.parentType;if(tt(e))return Mt(e);if(fn(e))return Mt(e);if(un(e))return Mt(e);if(Rn(e))return Mt(e);if(ci(e))return Mt(e);if(Ut(e))return ir(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function Hu(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function lt(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return D(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(lt).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(lt).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(lt).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(lt).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Dr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let i=(t==null?void 0:t.fields[r].label)??"_";return Dr(i)&&(i=`(${i})`),`${i}: ${lt(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 Dr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Dr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${L(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${D(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return Lr(t)?`<ptr to ${lt(t.elements[e.targetIndex])}>`:`<ptr to ${lt(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function W(e){return(e==null?void 0:e.tag)==="Type"}function gr(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function ts(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function rt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function Kr(e){return(e==null?void 0:e.tag)==="ComptimeList"}function ju(e){return Kr(e)&&yn(e.type.childType)}function ht(e){return(e==null?void 0:e.tag)==="ComptimeInt"||(e==null?void 0:e.tag)==="ComptimeFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function dt(e){return(e==null?void 0:e.tag)==="Bool"}function Ce(e){return(e==null?void 0:e.tag)==="Function"}function Oe(e){return(e==null?void 0:e.tag)==="Unknown"}function or(e){return(e==null?void 0:e.tag)==="Tuple"}function _r(e){return(e==null?void 0:e.tag)==="Struct"}function Lr(e){return(e==null?void 0:e.tag)==="Array"}function es(e){return(e==null?void 0:e.tag)==="Slice"}function hn(e){return(e==null?void 0:e.tag)==="Enum"}function Et(e){return(e==null?void 0:e.tag)==="Module"}function on(e){return(e==null?void 0:e.tag)==="Trait"}function vo(e){return(e==null?void 0:e.tag)==="Ptr"}function Kn(e){return(e==null?void 0:e.tag)==="Expr"}function ye(e){return{tag:"Type",type:pn(e),value:e}}function qn(e){return{tag:"ComptimeString",type:$n(),value:e}}function Ar(e,t){return{tag:"ComptimeList",type:$a(e),elements:t}}function Pn(e,t){let n;if(e==="ComptimeInt")n=wi();else if(e==="ComptimeFloat")n=Eo();else if(e==="U8")n=Co();else if(e==="I8")n=bo();else if(e==="U16")n=ko();else if(e==="I16")n=wo();else if(e==="U32")n=Fo();else if(e==="I32")n=Fi();else if(e==="U64")n=Lo();else if(e==="I64")n=Ao();else if(e==="F32")n=Io();else if(e==="F64")n=Li();else if(e==="Usize")n=tn();else if(e==="Isize")n=$o();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Xr(e){return Pn("ComptimeInt",e)}function ns(e){return Pn("ComptimeFloat",e)}function jt(e){return{tag:"Bool",type:Nt(),value:e}}function ue(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(bt(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${D(e)}`);let o=fr(e,t,{recursiveTypeRef:n,env:r,context:i});return ye(o)}return{tag:"Unknown",type:e,variableName:t}}function Ir(e,t){return{tag:"Struct",type:e,fields:t}}function rs(e,t){return{tag:"Module",type:e,fields:t}}function To(e,t){return{tag:"Trait",type:e,fields:t}}function is(e,t){return{tag:"Tuple",type:e,fields:t}}function Gi(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function ki(e,t){return{tag:"Array",type:e,elements:t}}function os(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function Sr(e){return{tag:"Expr",type:Jn(),value:e}}function nl(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function gn(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 ae({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(rt(n)&&rt(r))return n.value===r.value;if(Kr(n)&&Kr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!gn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(ht(n)&&ht(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(dt(n)&&dt(r))return n.value===r.value;if(Lr(n)&&Lr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!gn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(es(n)&&es(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(!gn({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(or(n)&&or(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(_r(n)&&_r(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(hn(n)&&hn(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Et(n)&&Et(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(on(n)&&on(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Kn(n)&&Kn(r))return n.value===r.value||as(n.value,r.value);if(Oe(n)&&Oe(r)){let i,o;if(n.variableName){let a=_e(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Oe(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=_e(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Oe(s.value[0])&&(o=s.value[0])}}return i&&o?gn({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:ae({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Oe(n)&&!Oe(r)){if(n.variableName){let i=_e(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Oe(o.value[0]))return gn({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Oe(n)&&Oe(r)){if(r.variableName){let i=_e(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Oe(o.value[0]))return gn({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return vo(n)&&vo(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Zr(e,t){return e?qi(e,t):!1}function Jr(e,t){return e?Ey(e,t):!1}function qi(e,t){return Pr(e,t)&&!mi(e,t)}function Ey(e,t){let n=Pr(e,t),r=mi(e,t);return!n&&r}function Je(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(jn(e))return!0;switch(e.tag){case"Array":return Je(e.childType,t);case"Tuple":return e.fields.some(n=>Je(n.type,t));case"Union":return e.fields.some(n=>Je(n.type,t));case"Struct":return e.fields.some(n=>Je(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Je(i.type,t))});case"Iso":return Je(e.childType,t);case"Arc":return Je(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return je(n)?!0:n.resolvedConcreteType?Je(n.resolvedConcreteType,t):!0}default:return!1}}function Ze(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),z(e))return e.isExtern?!1:e.resolvedConcreteType?Ze(e.resolvedConcreteType,t):!(Nn(e)||je(e));switch(e.tag){case"Array":return Ze(e.childType,t);case"Tuple":return e.fields.some(n=>Ze(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Ze(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Ze(i.type,t))});case"Union":return e.fields.some(n=>Ze(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ze(r.type,t))||Ze(n.return.type,t)}case"Module":return e.fields.some(n=>Ze(n.type,t));case"Ptr":return Ze(e.childType,t);default:return!1}}function _i(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),Xe(e)?Oe(e.length)?!0:_i(e.childType,t):tt(e)||Lt(e)?_i(e.childType,t):Qe(e)?e.fields.some(n=>_i(n.type,t)):xe(e)?e.fields.some(n=>_i(n.type,t)):ze(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>_i(i.type,t))}):Pt(e)?e.fields.some(n=>_i(n.type,t)):!1)}function il(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),z(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{var a;(a=o.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function No(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Oe(t.length)||No(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?No(t.isFn.callType):!1}default:return!1}}function Qt({type:e,expectedType:t,expr:n,env:r}){let i;if(rn(e))i=Fi();else if(Tn(e))i=Li();else if(ln(e))t&&(tt(t)&&(Mr(t.childType)||ho(t.childType))||Lt(t))&&(i=t),i||(i=Zu(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function rl(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=D(e.type,t),i=e.exprs.defaultValueExpr?L(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function So(e,t=new Set){let n=e.label;Dr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n}: ${D(e.type,t)}) ?= ${r}`:i?`(${n}: ${D(e.type,t)}) = ${i}`:`${n}: ${D(e.type,t)}`}function Ku(e,t=new Set){let n=e.label;Dr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n} : ${D(e.type,t)}) ?= ${r}`:i?`(${n} : ${D(e.type,t)}) = ${i}`:`${n} : ${D(e.type,t)}`}function Xu(e,t=new Set){var _;let n=e.parameters.map(f=>rl(f,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(f=>rl(f,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=D(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(f=>f.isEffectRowSpread?`...(${f.label})`:rl(f,t)).join(", ")})`:"",l=[r,n,s,i].filter(f=>!!f).join(", "),u=(_=e.SelfType)==null?void 0:_.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function D(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 $y(e,t)}finally{e.id&&t.delete(e.id)}}function $y(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`[${D(e.childType,t)}; ${lt(e.length)}]`;case"Slice":return`[${D(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>So(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=>So(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=>So(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=>So(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(_n(n))return`Fn${Xu(n.isFn.callType,t).slice(2)}`;if(Rn(n)){let i=[D(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(D(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=`(${D(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:Xu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return L(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(D(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${D(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${D(e.childType,t)})`;case"Iso":return`Iso(${D(e.childType,t)})`;case"Arc":return`Arc(${D(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${D(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${D(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(D(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${D(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var Qu=64;function fi(){return Qu}function ss(){return Qu/8}function Cy(e){let t=Ai(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(ht(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function by(e){let t=0,n=1;for(let r of e.fields){let i=Ai(r.type);if(i===null)return null;if(i===-1)return-1;let o=Rr(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 ky(e){let t=0,n=1;for(let r of e.fields){let i=Ai(r.type);if(i===null)return null;if(i===-1)return-1;let o=Rr(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=0;for(let m of e.variants){let y=0,g=1;if(m.fields)for(let v of m.fields){let $=Ai(v.type);if($===null)return null;if($===-1)return-1;let E=Rr(v.type);if(E===null)return null;let C=Math.ceil($/8);y=Math.ceil(y/E)*E,y+=C,g=Math.max(g,E),n=Math.max(n,E*8)}y=Math.ceil(y/g)*g;let h=y*8;t=Math.max(t,h)}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,f=a/8,p=(f-_%f)%f*8;return c+p}function Fy(e){let t=0;for(let n of e.fields){let r=Ai(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Rr(e){if(z(e))return null;if(De(e)||bt(e)||rn(e)||Tn(e)||ln(e)||En(e)||We(e)||st(e)||yn(e))return 1;if(Zn(e))return 1;if(ca(e)||_a(e))return ss();if(Mr(e)||fa(e))return 1;if(pa(e)||da(e))return 2;if(ma(e)||ya(e))return 4;if(ga(e)||ha(e))return 8;if(va(e))return 4;if(Ta(e))return 8;if(Xe(e))return Rr(e.childType);if(Qe(e)){let t=1;for(let n of e.fields){let r=Rr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(xe(e)){if(e.isReferenceSemantics)return ss();if(e.isNewtype)return Rr(e.fields[0].type);let t=1;for(let n of e.fields){let r=Rr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ze(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Rr(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(Pt(e)){let t=1;for(let n of e.fields){let r=Rr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(J(e))return ss();if(tt(e))return ss()}return null}function Ai(e){return z(e)?null:De(e)||bt(e)||rn(e)||Tn(e)||ln(e)||En(e)||We(e)||st(e)||yn(e)?0:Zn(e)?8:ca(e)||_a(e)?fi():Mr(e)||fa(e)?8:pa(e)||da(e)?16:ma(e)||ya(e)?32:ga(e)||ha(e)?64:va(e)?32:Ta(e)?64:Xe(e)?Cy(e):Qe(e)?by(e):xe(e)?e.isReferenceSemantics?fi():e.isNewtype?Ai(e.fields[0].type):ky(e):ze(e)?wy(e):Pt(e)?Fy(e):J(e)||tt(e)?fi():null}function pi(e,t){if(ci(e))throw Wt([{token:t,errorMessage:`Cannot use 'void' type here.
43
+ `);return n[0]}function ua(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function De(e){return(e==null?void 0:e.tag)==="unit"}function rn(e){return(e==null?void 0:e.tag)==="comptime_int"}function Tn(e){return(e==null?void 0:e.tag)==="comptime_float"}function ln(e){return(e==null?void 0:e.tag)==="comptime_string"}function En(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Bi(e){return En(e)&&yn(e.childType)}function Zn(e){return(e==null?void 0:e.tag)==="bool"}function ca(e){return(e==null?void 0:e.tag)==="usize"}function _a(e){return(e==null?void 0:e.tag)==="isize"}function Mr(e){return(e==null?void 0:e.tag)==="u8"}function fa(e){return(e==null?void 0:e.tag)==="i8"}function pa(e){return(e==null?void 0:e.tag)==="u16"}function da(e){return(e==null?void 0:e.tag)==="i16"}function ma(e){return(e==null?void 0:e.tag)==="u32"}function ya(e){return(e==null?void 0:e.tag)==="i32"}function ga(e){return(e==null?void 0:e.tag)==="u64"}function ha(e){return(e==null?void 0:e.tag)==="i64"}function va(e){return(e==null?void 0:e.tag)==="f32"}function Ta(e){return(e==null?void 0:e.tag)==="f64"}function yn(e){return(e==null?void 0:e.tag)==="Expr"}function Xe(e){return(e==null?void 0:e.tag)==="Array"}function Lt(e){return(e==null?void 0:e.tag)==="Slice"}function Qe(e){return(e==null?void 0:e.tag)==="Tuple"}function Pt(e){return(e==null?void 0:e.tag)==="Union"}function ze(e){return(e==null?void 0:e.tag)==="Enum"}function xe(e){return(e==null?void 0:e.tag)==="Struct"}function Ht(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function ui(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function We(e){return(e==null?void 0:e.tag)==="Module"}function st(e){return(e==null?void 0:e.tag)==="Trait"}function fn(e){return st(e)&&e.isFn!==void 0}function J(e){return(e==null?void 0:e.tag)==="Function"}function Ea(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function bt(e){return(e==null?void 0:e.tag)==="Type"}function qu(e){return bt(e)&&e.tag==="Type"&&e.level===0}function z(e){return(e==null?void 0:e.tag)==="SomeType"}function tt(e){return(e==null?void 0:e.tag)==="Ptr"}function pn(e){return(e==null?void 0:e.tag)==="Iso"}function cn(e){return(e==null?void 0:e.tag)==="Arc"}function Ke(e){return(e==null?void 0:e.tag)==="Dyn"}function jn(e){if(z(e)){let t=e;if(je(t))return!0;if(t.resolvedConcreteType)return jn(t.resolvedConcreteType)}return Ht(e)||Ke(e)||pn(e)||cn(e)}function Yr(e){return(e==null?void 0:e.tag)==="u8"||(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="u16"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="u32"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="u64"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="usize"||(e==null?void 0:e.tag)==="isize"}function Hr(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function Yu(e){return(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="isize"}function ho(e){return(e==null?void 0:e.tag)==="char"}function ci(e){return(e==null?void 0:e.tag)==="void"}function Rn(e){return st(e)&&e.isFuture!==void 0}function Za(e){return st(e)&&e.isConcrete!==void 0}function Or(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 Fr(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(i=>i.isCompileTimeOnly)||e.forallParameters.length>0||e.implicitParameters.length>0,n=e.parameters.some(i=>!i.isCompileTimeOnly&&z(i.type)&&!je(i.type));return t||n}function jr(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(i=>i.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(i=>!i.isCompileTimeOnly&&z(i.type)&&!je(i.type));return t||n}function tl(e){var n;let t=e.type;return t?Fr(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function cr(e){var t;return Ht(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function Ut(e){return(e==null?void 0:e.tag)==="EffectsRow"}function Ja(e,t,n){let r=!1,i=0;for(let o of t){let a=o.type;if(n.includes(o))throw d({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
44
+ Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(Ht(a))continue;let s=[...n,o],l=dn(a,s);bt(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?ir(i):r?Mt(e):Mt(e)}function dn(e,t=[]){if(Ke(e))return Mt(e);if(ua(e))return Mt(e);if(bt(e))return ir(e.level+1);if(rn(e)||Tn(e)||ln(e)||En(e))return Mt(e);if(yn(e))return Mt(e);if(J(e))return Mt(e);if(fn(e))return Mt(e);if(Xe(e))return dn(e.childType,t);if(Lt(e))return Mt(e);if(Qe(e))return Ja(e,e.fields,t);if(xe(e))return Ja(e,e.fields,t);if(ze(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Ja(e,n,t)}else{if(Pt(e))return Ja(e,e.fields,t);if(We(e))return ir(1,e);if(st(e))return ir(1,e);if(z(e))return e.parentType;if(tt(e))return Mt(e);if(pn(e))return Mt(e);if(cn(e))return Mt(e);if(Rn(e))return Mt(e);if(ci(e))return Mt(e);if(Ut(e))return ir(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function Hu(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function lt(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return D(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(lt).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(lt).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(lt).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(lt).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Dr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let i=(t==null?void 0:t.fields[r].label)??"_";return Dr(i)&&(i=`(${i})`),`${i}: ${lt(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 Dr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Dr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${L(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${D(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return Lr(t)?`<ptr to ${lt(t.elements[e.targetIndex])}>`:`<ptr to ${lt(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function W(e){return(e==null?void 0:e.tag)==="Type"}function gr(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function ts(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function rt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function Kr(e){return(e==null?void 0:e.tag)==="ComptimeList"}function ju(e){return Kr(e)&&yn(e.type.childType)}function ht(e){return(e==null?void 0:e.tag)==="ComptimeInt"||(e==null?void 0:e.tag)==="ComptimeFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function dt(e){return(e==null?void 0:e.tag)==="Bool"}function Ce(e){return(e==null?void 0:e.tag)==="Function"}function Oe(e){return(e==null?void 0:e.tag)==="Unknown"}function or(e){return(e==null?void 0:e.tag)==="Tuple"}function _r(e){return(e==null?void 0:e.tag)==="Struct"}function Lr(e){return(e==null?void 0:e.tag)==="Array"}function es(e){return(e==null?void 0:e.tag)==="Slice"}function hn(e){return(e==null?void 0:e.tag)==="Enum"}function Et(e){return(e==null?void 0:e.tag)==="Module"}function on(e){return(e==null?void 0:e.tag)==="Trait"}function vo(e){return(e==null?void 0:e.tag)==="Ptr"}function Kn(e){return(e==null?void 0:e.tag)==="Expr"}function ye(e){return{tag:"Type",type:dn(e),value:e}}function qn(e){return{tag:"ComptimeString",type:$n(),value:e}}function Ar(e,t){return{tag:"ComptimeList",type:$a(e),elements:t}}function Pn(e,t){let n;if(e==="ComptimeInt")n=wi();else if(e==="ComptimeFloat")n=Eo();else if(e==="U8")n=Co();else if(e==="I8")n=bo();else if(e==="U16")n=ko();else if(e==="I16")n=wo();else if(e==="U32")n=Fo();else if(e==="I32")n=Fi();else if(e==="U64")n=Lo();else if(e==="I64")n=Ao();else if(e==="F32")n=Io();else if(e==="F64")n=Li();else if(e==="Usize")n=tn();else if(e==="Isize")n=$o();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Xr(e){return Pn("ComptimeInt",e)}function ns(e){return Pn("ComptimeFloat",e)}function jt(e){return{tag:"Bool",type:Nt(),value:e}}function ue(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(bt(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${D(e)}`);let o=fr(e,t,{recursiveTypeRef:n,env:r,context:i});return ye(o)}return{tag:"Unknown",type:e,variableName:t}}function Ir(e,t){return{tag:"Struct",type:e,fields:t}}function rs(e,t){return{tag:"Module",type:e,fields:t}}function To(e,t){return{tag:"Trait",type:e,fields:t}}function is(e,t){return{tag:"Tuple",type:e,fields:t}}function Gi(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function ki(e,t){return{tag:"Array",type:e,elements:t}}function os(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function Sr(e){return{tag:"Expr",type:Jn(),value:e}}function nl(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function gn(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 ae({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(rt(n)&&rt(r))return n.value===r.value;if(Kr(n)&&Kr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!gn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(ht(n)&&ht(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(dt(n)&&dt(r))return n.value===r.value;if(Lr(n)&&Lr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!gn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(es(n)&&es(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(!gn({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(or(n)&&or(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(_r(n)&&_r(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(hn(n)&&hn(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Et(n)&&Et(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(on(n)&&on(r)){if(n.fields.length!==r.fields.length||!ae({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(!gn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Kn(n)&&Kn(r))return n.value===r.value||as(n.value,r.value);if(Oe(n)&&Oe(r)){let i,o;if(n.variableName){let a=_e(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Oe(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=_e(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Oe(s.value[0])&&(o=s.value[0])}}return i&&o?gn({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:ae({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Oe(n)&&!Oe(r)){if(n.variableName){let i=_e(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Oe(o.value[0]))return gn({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Oe(n)&&Oe(r)){if(r.variableName){let i=_e(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Oe(o.value[0]))return gn({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return vo(n)&&vo(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Zr(e,t){return e?qi(e,t):!1}function Jr(e,t){return e?$y(e,t):!1}function qi(e,t){return Pr(e,t)&&!mi(e,t)}function $y(e,t){let n=Pr(e,t),r=mi(e,t);return!n&&r}function Je(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(jn(e))return!0;switch(e.tag){case"Array":return Je(e.childType,t);case"Tuple":return e.fields.some(n=>Je(n.type,t));case"Union":return e.fields.some(n=>Je(n.type,t));case"Struct":return e.fields.some(n=>Je(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Je(i.type,t))});case"Iso":return Je(e.childType,t);case"Arc":return Je(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return je(n)?!0:n.resolvedConcreteType?Je(n.resolvedConcreteType,t):!0}default:return!1}}function Ze(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),z(e))return e.isExtern?!1:e.resolvedConcreteType?Ze(e.resolvedConcreteType,t):!(Nn(e)||je(e));switch(e.tag){case"Array":return Ze(e.childType,t);case"Tuple":return e.fields.some(n=>Ze(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Ze(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Ze(i.type,t))});case"Union":return e.fields.some(n=>Ze(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ze(r.type,t))||Ze(n.return.type,t)}case"Module":return e.fields.some(n=>Ze(n.type,t));case"Ptr":return Ze(e.childType,t);default:return!1}}function _i(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),Xe(e)?Oe(e.length)?!0:_i(e.childType,t):tt(e)||Lt(e)?_i(e.childType,t):Qe(e)?e.fields.some(n=>_i(n.type,t)):xe(e)?e.fields.some(n=>_i(n.type,t)):ze(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>_i(i.type,t))}):Pt(e)?e.fields.some(n=>_i(n.type,t)):!1)}function il(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),z(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{var a;(a=o.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function No(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Oe(t.length)||No(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?No(t.isFn.callType):!1}default:return!1}}function Qt({type:e,expectedType:t,expr:n,env:r}){let i;if(rn(e))i=Fi();else if(Tn(e))i=Li();else if(ln(e))t&&(tt(t)&&(Mr(t.childType)||ho(t.childType))||Lt(t))&&(i=t),i||(i=Zu(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function rl(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=D(e.type,t),i=e.exprs.defaultValueExpr?L(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function So(e,t=new Set){let n=e.label;Dr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n}: ${D(e.type,t)}) ?= ${r}`:i?`(${n}: ${D(e.type,t)}) = ${i}`:`${n}: ${D(e.type,t)}`}function Ku(e,t=new Set){let n=e.label;Dr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n} : ${D(e.type,t)}) ?= ${r}`:i?`(${n} : ${D(e.type,t)}) = ${i}`:`${n} : ${D(e.type,t)}`}function Xu(e,t=new Set){var _;let n=e.parameters.map(f=>rl(f,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(f=>rl(f,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=D(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(f=>f.isEffectRowSpread?`...(${f.label})`:rl(f,t)).join(", ")})`:"",l=[r,n,s,i].filter(f=>!!f).join(", "),u=(_=e.SelfType)==null?void 0:_.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function D(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`[${D(e.childType,t)}; ${lt(e.length)}]`;case"Slice":return`[${D(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>So(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=>So(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=>So(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=>So(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(fn(n))return`Fn${Xu(n.isFn.callType,t).slice(2)}`;if(Rn(n)){let i=[D(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(D(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=`(${D(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:Xu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return L(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(D(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${D(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${D(e.childType,t)})`;case"Iso":return`Iso(${D(e.childType,t)})`;case"Arc":return`Arc(${D(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${D(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${D(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(D(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${D(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var Qu=64;function fi(){return Qu}function ss(){return Qu/8}function by(e){let t=Ai(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(ht(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=Ai(r.type);if(i===null)return null;if(i===-1)return-1;let o=Rr(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=Ai(r.type);if(i===null)return null;if(i===-1)return-1;let o=Rr(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 m of e.variants){let y=0,g=1;if(m.fields)for(let v of m.fields){let $=Ai(v.type);if($===null)return null;if($===-1)return-1;let E=Rr(v.type);if(E===null)return null;let C=Math.ceil($/8);y=Math.ceil(y/E)*E,y+=C,g=Math.max(g,E),n=Math.max(n,E*8)}y=Math.ceil(y/g)*g;let h=y*8;t=Math.max(t,h)}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,f=a/8,p=(f-_%f)%f*8;return c+p}function Ly(e){let t=0;for(let n of e.fields){let r=Ai(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Rr(e){if(z(e))return null;if(De(e)||bt(e)||rn(e)||Tn(e)||ln(e)||En(e)||We(e)||st(e)||yn(e))return 1;if(Zn(e))return 1;if(ca(e)||_a(e))return ss();if(Mr(e)||fa(e))return 1;if(pa(e)||da(e))return 2;if(ma(e)||ya(e))return 4;if(ga(e)||ha(e))return 8;if(va(e))return 4;if(Ta(e))return 8;if(Xe(e))return Rr(e.childType);if(Qe(e)){let t=1;for(let n of e.fields){let r=Rr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(xe(e)){if(e.isReferenceSemantics)return ss();if(e.isNewtype)return Rr(e.fields[0].type);let t=1;for(let n of e.fields){let r=Rr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(ze(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Rr(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(Pt(e)){let t=1;for(let n of e.fields){let r=Rr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(J(e))return ss();if(tt(e))return ss()}return null}function Ai(e){return z(e)?null:De(e)||bt(e)||rn(e)||Tn(e)||ln(e)||En(e)||We(e)||st(e)||yn(e)?0:Zn(e)?8:ca(e)||_a(e)?fi():Mr(e)||fa(e)?8:pa(e)||da(e)?16:ma(e)||ya(e)?32:ga(e)||ha(e)?64:va(e)?32:Ta(e)?64:Xe(e)?by(e):Qe(e)?ky(e):xe(e)?e.isReferenceSemantics?fi():e.isNewtype?Ai(e.fields[0].type):wy(e):ze(e)?Fy(e):Pt(e)?Ly(e):J(e)||tt(e)?fi():null}function pi(e,t){if(ci(e))throw Wt([{token:t,errorMessage:`Cannot use 'void' type here.
45
45
  Please consider use 'unit' type instead.
46
46
  `}])}function di(e,t,n){if(!Ht(e)||Yi(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(Wi(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function Wi(e,t,n,r){if(xe(e)&&e.id===t.id)return!0;if(xe(e)&&e.isReferenceSemantics)return di(e,new Set(n),r);if(ze(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(Wi(o.type,t,n,r))return!0}}if(z(e))return Yi(e,r)?!1:e.resolvedConcreteType?Wi(e.resolvedConcreteType,t,n,r):!0;if(Xe(e)||Lt(e))return Wi(e.childType,t,n,r);if(Qe(e)){for(let i of e.fields)if(Wi(i.type,t,n,r))return!0}if(Pt(e)){for(let i of e.fields)if(Wi(i.type,t,n,r))return!0}return Ke(e)?!0:(tt(e),!1)}function Qr(e,t){return t?e.id===t.id?!0:Xe(e)||Lt(e)||tt(e)?Qr(e.childType,t):Qe(e)?e.fields.some(n=>Qr(n.type,t)):xe(e)?e.fields.some(n=>Qr(n.type,t)):Pt(e)?e.fields.some(n=>Qr(n.type,t)):ze(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Qr(i.type,t))}):J(e)?Qr(e.return.type,t):!1:!1}var al=require("crypto");function Vo(e){return"yo"+(0,al.createHash)("sha1").update(e).digest("hex").slice(0,8)}var ls=new Map;function $t(e){let t=ls.get(e);return t===void 0&&(t=0),ls.set(e,t+1),`${Vo(e)}_id_${t}`}function us(e){ls.delete(e)}var Ju=1;function ec(e){return`_${Vo(e)}_temp_`}function tc(e){return`${ec(e)}${Ju++}`}function qt(e,t){return t.startsWith(ec(e))}var ol=new Map;function Hi(e,t){let n="";for(let o=0;o<t.length;o++)if(yo(t[o])){let a=Xa.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=Vo(e)+"_"+n,i=ol.get(r);return i===void 0?i=0:i++,ol.set(r,i),r+(i==0?"":`_${i}`)}function sl(e){return(0,al.createHash)("sha1").update(e).digest("hex").slice(0,10)}function nc(){ls.clear(),ol.clear(),Ju=1}function Ii(e){return{[e]:!0}}function Vt(e,t){return(e==null?void 0:e[t])===!0}function Ot(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function Ca(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 rc(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 et(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:et(e.func),args:e.args.map(et),$:void 0}}}function I(e){return(e==null?void 0:e.tag)==="FnCall"}function X(e){return(e==null?void 0:e.tag)==="Atom"}function Kt(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function xo(e){return e.tag==="Atom"&&e.token.type==="operator"}function T(e,t,n){if(e.tag!=="FnCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.tag==="FnCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function Ge(e,t,n){if(!I(e))throw d({token:e.token,errorMessage:`Expected function call, got atom:
47
47
  ${L(e)}`});if(!T(e,t))throw d({token:e.token,errorMessage:`Expected function call of ${Array.isArray(t)?t.map(r=>`"${r}"`).join(" or "):`"${t}"`}, got:
@@ -69,14 +69,14 @@ Consider using Dyn(...) for dynamic dispatch if different concrete types are nee
69
69
  `:"")+(b?"Might be initialized here:":"Not initialized here:"),token:b??t[k].token})))}if(y.length===1){if(y[0]&&!s[_].consumedAtToken){let C={...s[_],consumedAtToken:y[0]};e=vt(e,s[_],C),s[_]=C}}else if(!s[_].consumedAtToken&&y.every(C=>C)){let C={...s[_],consumedAtToken:y[0]};e=vt(e,s[_],C),s[_]=C}else{let C=y.filter(b=>!!b),w=y.filter(b=>!b);if(C.length>0&&w.length>0)throw Wt(y.map((b,k)=>({errorMessage:(k===0?`Variable "${f}" is consumed in some cases but not in other cases:
70
70
  `:"")+(b?"Consumed here:":"Not consumed here:"),token:b??t[k].token})))}if(!s[_].isOwningTheRcValue&&m.every(C=>C)){let C={...s[_],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=vt(e,s[_],C),s[_]=C}else{let C=m.filter(b=>!!b),w=m.filter(b=>!b);if(C.length>0&&w.length>0)throw Wt(m.map((b,k)=>({errorMessage:(k===0?`Variable "${f}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
71
71
  `:"")+(b?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:b??t[k].token})))}let v=s[_].id,$=[];for(let C=1;C<u;C++){let k=r[C-1].frames[o].variables[_];$.push(k.id)}if($.some(C=>C!==v)){let C=Hi(e.modulePath,f),w={...s[_],id:C,isOwningTheSameRcValueAs:void 0};e=vt(e,s[_],w),s[_]=w}}}return e}function ti(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 cs(e,t){I(e)||(e.tag=t.tag),ti(e,t)}function sr(e,t,n=!1){var a,s,l;if((a=e.$)!=null&&a.value&&W((s=e.$)==null?void 0:s.value))return t;let r=(l=e.$)==null?void 0:l.variableName;if(!r)return t;let i=_e(t,r);if(i.length===0)throw Wt([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let o=i[i.length-1];if(o.consumedAtToken&&!n){let u=`use of moved value: \`${r}\``;throw Wt([{token:e.token,errorMessage:u},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=vt(t,o,{...o,consumedAtToken:e.token});return t}function Vn(e,t){var r;if(!e.$||!e.$.variableName)return;if(e.$.value){let i=e.$.variableName;if(i&&qt(e.$.env.modulePath,i)&&Je(e.$.type)){let o=_e(e.$.env,i);if(o.length>0){let a=o[o.length-1];a.isOwningTheRcValue&&!a.consumedAtToken&&(e.$.env=vt(e.$.env,a,{...a,consumedAtToken:e.token}))}}return}let n=e.$.variableName;if(!n)throw d({token:e.token,errorMessage:`Expression does not have a variable name to call ${F.___dup} on:
72
- ${L(e)}`});if(Je(e.$.type)){if(qt(e.$.env.modulePath,n)&&!(X(e)&&e.token.value!==n)){let a=_e(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=vt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=On(`${F.___dup[0]}(${n})`),o=U({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=_e(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=vt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function ji(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=_e(t,n);if(r.length===0)throw Wt([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let a=`use of moved value: \`${n}\``;throw Wt([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var Xt="__yo_self";function Ki(e,t,n){if(xe(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ki(i.type,t,n));return n.delete(e.id),r}if(Qe(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ki(i.type,t,n));return n.delete(e.id),r}if(ze(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Ki(o.type,t,n)));return n.delete(e.id),r}return Xe(e)||Lt(e)||tt(e)?Ki(e.childType,t,n):Pr(e,t)}function Xi(e,t,n){if(xe(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Xi(i.type,t,n));return n.delete(e.id),r}if(Qe(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Xi(i.type,t,n));return n.delete(e.id),r}if(ze(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Xi(o.type,t,n)));return n.delete(e.id),r}return Xe(e)||Lt(e)||tt(e)?Xi(e.childType,t,n):mi(e,t)}function ic(e,t,n,r){let i=On(e),o=U({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${L(i)}`);return{expr:o,env:o.$.env}}function Oo({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=ic(t,n,r,i);if(I(o)&&o.$&&o.$.value&&W(o.$.value)&&J(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 dr({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=ic(t,n,r,i);if(I(o)&&o.$&&o.$.value&&Ce(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 ll=`(fn(${Xt} : Self) -> unit)`,_s=`(fn(${Xt} : Self) -> unit)`,fs=`(fn(${Xt} : Self) -> Self)`;function Ly(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function Ay(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function ul(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(Ay(i)){let o=$t("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=$t("field_"+Ly(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${Xt};`,callsExpr:r.join(`
73
- `)}}function Iy(e){let t=ll;if(!jn(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>Je(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=ul(n,F.___drop[0]),o=`
72
+ ${L(e)}`});if(Je(e.$.type)){if(qt(e.$.env.modulePath,n)&&!(X(e)&&e.token.value!==n)){let a=_e(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=vt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=On(`${F.___dup[0]}(${n})`),o=U({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=_e(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=vt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function ji(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=_e(t,n);if(r.length===0)throw Wt([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let a=`use of moved value: \`${n}\``;throw Wt([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var Xt="__yo_self";function Ki(e,t,n){if(xe(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ki(i.type,t,n));return n.delete(e.id),r}if(Qe(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ki(i.type,t,n));return n.delete(e.id),r}if(ze(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Ki(o.type,t,n)));return n.delete(e.id),r}return Xe(e)||Lt(e)||tt(e)?Ki(e.childType,t,n):Pr(e,t)}function Xi(e,t,n){if(xe(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Xi(i.type,t,n));return n.delete(e.id),r}if(Qe(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Xi(i.type,t,n));return n.delete(e.id),r}if(ze(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Xi(o.type,t,n)));return n.delete(e.id),r}return Xe(e)||Lt(e)||tt(e)?Xi(e.childType,t,n):mi(e,t)}function ic(e,t,n,r){let i=On(e),o=U({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${L(i)}`);return{expr:o,env:o.$.env}}function Oo({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=ic(t,n,r,i);if(I(o)&&o.$&&o.$.value&&W(o.$.value)&&J(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 dr({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=ic(t,n,r,i);if(I(o)&&o.$&&o.$.value&&Ce(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 ll=`(fn(${Xt} : Self) -> unit)`,_s=`(fn(${Xt} : Self) -> unit)`,fs=`(fn(${Xt} : Self) -> Self)`;function Ay(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function Iy(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function ul(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(Iy(i)){let o=$t("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=$t("field_"+Ay(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${Xt};`,callsExpr:r.join(`
73
+ `)}}function Sy(e){let t=ll;if(!jn(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>Je(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=ul(n,F.___drop[0]),o=`
74
74
  ${r}
75
75
  ${i}
76
76
  `;return{signature:t,code:`(${t} { // ___dispose
77
77
  ${o}
78
78
  return ();
79
- })`}}function Sy(e){let t=_s,n=e.fields.filter(a=>Je(a.type)).map(a=>a.label),r=jn(e)?`
79
+ })`}}function Ny(e){let t=_s,n=e.fields.filter(a=>Je(a.type)).map(a=>a.label),r=jn(e)?`
80
80
  ${F.__yo_decr_rc[0]}(${Xt});`:"",i="";if(!jn(e)&&n.length){let{destructuringExpr:a,callsExpr:s}=ul(n,F.___drop[0]);i=`
81
81
  ${a}
82
82
  ${s}
@@ -84,7 +84,7 @@ ${L(e)}`});if(Je(e.$.type)){if(qt(e.$.env.modulePath,n)&&!(X(e)&&e.token.value!=
84
84
  ${i}
85
85
  ${r}
86
86
  return ();
87
- })`;return{signature:t,code:o}}function Ny(e){let t=fs,n=e.fields.filter(o=>Je(o.type)).map(o=>o.label),r=jn(e)?`
87
+ })`;return{signature:t,code:o}}function Vy(e){let t=fs,n=e.fields.filter(o=>Je(o.type)).map(o=>o.label),r=jn(e)?`
88
88
  ${F.__yo_incr_rc[0]}(${Xt});`:"",i="";if(!jn(e)&&n.length){let{destructuringExpr:o,callsExpr:a}=ul(n,F.___dup[0]);i=`
89
89
  ${o}
90
90
  ${a}
@@ -92,7 +92,7 @@ ${L(e)}`});if(Je(e.$.type)){if(qt(e.$.env.modulePath,n)&&!(X(e)&&e.token.value!=
92
92
  ${i}
93
93
  ${r}
94
94
  return ${F.__yo_rc_own[0]}(${Xt});
95
- })`}}function Vy({structType:e,env:t,context:n}){if(Zi(e,t))return t;pn(e);let r=Ze(e),{code:i}=Iy(e),{code:o}=Sy(e),{code:a}=Ny(e);return cl({structType:e,env:t,context:n}),r||(t=dr({label:F.___dispose[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function cl({structType:e,env:t,context:n}){Zi(e,t)||(Oo({label:F.___dispose[0],functionSignature:ll,SelfType:e,env:t,context:n}),Oo({label:F.___drop[0],functionSignature:_s,SelfType:e,env:t,context:n}),Oo({label:F.___dup[0],functionSignature:fs,SelfType:e,env:t,context:n}))}function xy(e){let t=_s,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Je(a.type))),r=jn(e)?`
95
+ })`}}function xy({structType:e,env:t,context:n}){if(Zi(e,t))return t;dn(e);let r=Ze(e),{code:i}=Sy(e),{code:o}=Ny(e),{code:a}=Vy(e);return cl({structType:e,env:t,context:n}),r||(t=dr({label:F.___dispose[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function cl({structType:e,env:t,context:n}){Zi(e,t)||(Oo({label:F.___dispose[0],functionSignature:ll,SelfType:e,env:t,context:n}),Oo({label:F.___drop[0],functionSignature:_s,SelfType:e,env:t,context:n}),Oo({label:F.___dup[0],functionSignature:fs,SelfType:e,env:t,context:n}))}function Dy(e){let t=_s,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Je(a.type))),r=jn(e)?`
96
96
  ${F.__yo_decr_rc[0]}(${Xt});`:"",i=jn(e)?"":n.length?`
97
97
  match(${Xt},
98
98
  ${n.map(o=>{let a=o.fields.filter(u=>Je(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${F.___drop[0]})(${u});`).join(`
@@ -105,7 +105,7 @@ ${l}
105
105
  ${i}
106
106
  ${r}
107
107
  return ();
108
- })`}}function Dy(e){let t=fs,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Je(a.type))),r=jn(e)?`
108
+ })`}}function My(e){let t=fs,n=e.variants.filter(o=>o.fields&&o.fields.some(a=>Je(a.type))),r=jn(e)?`
109
109
  ${F.__yo_incr_rc[0]}(${Xt});`:"",i=jn(e)?"":n.length?`
110
110
  match(${Xt},
111
111
  ${n.map(o=>{let a=o.fields.filter(u=>Je(u.type)).map(u=>u.label),s=o.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${F.___dup[0]})(${u});`).join(`
@@ -118,37 +118,37 @@ ${l}
118
118
  ${i}
119
119
  ${r}
120
120
  return ${F.__yo_rc_own[0]}(${Xt});
121
- })`}}function My({enumType:e,env:t,context:n}){if(Zi(e,t))return t;pn(e);let r=Ze(e),{code:i}=xy(e),{code:o}=Dy(e);return _l({enumType:e,env:t,context:n}),r||(t=dr({label:F.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),t}function _l({enumType:e,env:t,context:n}){if(Zi(e,t))return t;Oo({label:F.___dispose[0],functionSignature:ll,SelfType:e,env:t,context:n}),Oo({label:F.___drop[0],functionSignature:_s,SelfType:e,env:t,context:n}),Oo({label:F.___dup[0],functionSignature:fs,SelfType:e,env:t,context:n})}function ba({dynType:e,env:t,context:n}){let r=Oy(e),i=Ry(e);return i&&(t=dr({label:F.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),r&&(t=dr({label:F.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function Oy(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for ${D(e)}
121
+ })`}}function Oy({enumType:e,env:t,context:n}){if(Zi(e,t))return t;dn(e);let r=Ze(e),{code:i}=Dy(e),{code:o}=My(e);return _l({enumType:e,env:t,context:n}),r||(t=dr({label:F.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),t}function _l({enumType:e,env:t,context:n}){if(Zi(e,t))return t;Oo({label:F.___dispose[0],functionSignature:ll,SelfType:e,env:t,context:n}),Oo({label:F.___drop[0],functionSignature:_s,SelfType:e,env:t,context:n}),Oo({label:F.___dup[0],functionSignature:fs,SelfType:e,env:t,context:n})}function ba({dynType:e,env:t,context:n}){let r=Ry(e),i=Py(e);return i&&(t=dr({label:F.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),r&&(t=dr({label:F.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function Ry(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for ${D(e)}
122
122
  ${F.__yo_dyn_drop[0]}(${Xt});
123
- })`}function Ry(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for ${D(e)}
123
+ })`}function Py(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for ${D(e)}
124
124
  ${F.__yo_dyn_dup[0]}(${Xt});
125
125
  return ${F.__yo_rc_own[0]}(${Xt});
126
- })`}function Py(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for ${D(e)}
126
+ })`}function Uy(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for ${D(e)}
127
127
  ${F.__yo_sometype_drop[0]}(${Xt});
128
- })`}function Uy(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for ${D(e)}
128
+ })`}function zy(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for ${D(e)}
129
129
  ${F.__yo_sometype_dup[0]}(${Xt});
130
130
  return ${F.__yo_rc_own[0]}(${Xt});
131
- })`}function oc({someType:e,env:t,context:n}){let r=Py(e),i=Uy(e);return t=dr({label:F.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function zy(e){return`((fn(${Xt} : Self) -> unit) { // ___dispose for Iso
131
+ })`}function oc({someType:e,env:t,context:n}){let r=Uy(e),i=zy(e);return t=dr({label:F.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function By(e){return`((fn(${Xt} : Self) -> unit) { // ___dispose for Iso
132
132
  ${F.__yo_iso_dispose[0]}(${Xt});
133
133
  return ();
134
- })`}function By(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for Iso
134
+ })`}function Gy(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for Iso
135
135
  ${F.__yo_decr_rc_atomic[0]}(${Xt});
136
136
  return ();
137
- })`}function Gy(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for Iso
137
+ })`}function Wy(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for Iso
138
138
  ${F.__yo_incr_rc_atomic[0]}(${Xt});
139
139
  return ${F.__yo_rc_own[0]}(${Xt});
140
- })`}function ac({isoType:e,env:t,context:n}){let r=zy(e),i=By(e),o=Gy(e);return t=dr({label:F.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=dr({label:F.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Wy(e){return`((fn(${Xt} : Self) -> unit) { // ___dispose for Arc
140
+ })`}function ac({isoType:e,env:t,context:n}){let r=By(e),i=Gy(e),o=Wy(e);return t=dr({label:F.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=dr({label:F.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function qy(e){return`((fn(${Xt} : Self) -> unit) { // ___dispose for Arc
141
141
  ${F.__yo_arc_dispose[0]}(${Xt});
142
142
  return ();
143
- })`}function qy(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for Arc
143
+ })`}function Yy(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for Arc
144
144
  ${F.__yo_decr_rc_atomic[0]}(${Xt});
145
145
  return ();
146
- })`}function Yy(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for Arc
146
+ })`}function Hy(e){return`((fn(${Xt} : Self) -> Self) { // ___dup for Arc
147
147
  ${F.__yo_incr_rc_atomic[0]}(${Xt});
148
148
  return ${F.__yo_rc_own[0]}(${Xt});
149
- })`}function sc({arcType:e,env:t,context:n}){let r=Wy(e),i=qy(e),o=Yy(e);return t=dr({label:F.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=dr({label:F.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Bn(e,t,n,r){let i=`${e}()`,o=On(i),a=U({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!on(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:ir(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function Hy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>ka(i.type,t))&&(t=Bn("Send",e,t,n)),t}function jy({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=Bn("Rc",e,t,n)),t}function Ky({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>ka(o.type,t)))&&(t=Bn("Send",e,t,n)),t}function lc({unionType:e,env:t,context:n}){return e.fields.every(i=>ka(i.type,t))&&(t=Bn("Send",e,t,n)),t}function Xy({structType:e,env:t,context:n}){return e.isReferenceSemantics?di(e,new Set,t)||(t=Bn("Acyclic",e,t,n)):e.fields.every(i=>Yi(i.type,t))&&(t=Bn("Acyclic",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=>Yi(o.type,t)))&&(t=Bn("Acyclic",e,t,n)),t}function uc({unionType:e,env:t,context:n}){return e.fields.every(i=>Yi(i.type,t))&&(t=Bn("Acyclic",e,t,n)),t}function Zy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Ki(i.type,t,new Set([e.id])))&&(t=Bn("Comptime",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=>Ki(o.type,t,new Set([e.id]))))&&(t=Bn("Comptime",e,t,n)),t}function eg({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=Bn("Runtime",e,t,n),t):(e.fields.every(i=>Xi(i.type,t,new Set([e.id])))&&(t=Bn("Runtime",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=>Xi(o.type,t,new Set([e.id]))))&&(t=Bn("Runtime",e,t,n)),t}function cc({unionType:e,env:t,context:n}){return t=Bn("Runtime",e,t,n),t}function ng({tupleType:e,env:t,context:n}){return e.fields.every(i=>ka(i.type,t))&&(t=Bn("Send",e,t,n)),t}function rg({tupleType:e,env:t,context:n}){return e.fields.every(i=>Ki(i.type,t,new Set([e.id])))&&(t=Bn("Comptime",e,t,n)),t}function ig({tupleType:e,env:t,context:n}){return e.fields.every(i=>Xi(i.type,t,new Set([e.id])))&&(t=Bn("Runtime",e,t,n)),t}function Qi({structType:e,env:t,context:n,errorToken:r}){return t=Hy({structType:e,env:t,context:n}),t=jy({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=Vy({structType:e,env:t,context:n}),ps(e,t,r,n),t}function _c({enumType:e,env:t,context:n,errorToken:r}){return t=Ky({enumType:e,env:t,context:n}),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=My({enumType:e,env:t,context:n}),ps(e,t,r,n),t}function fc({tupleType:e,env:t,context:n,errorToken:r}){return t=ng({tupleType:e,env:t,context:n}),t=rg({tupleType:e,env:t,context:n}),t=ig({tupleType:e,env:t,context:n}),ps(e,t,r,n),t}function Er(e,t){let n=_e(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&W(r.value[0])){let i=r.value[0];if(st(i.value))return i.value}}function kn(e,t){let n=t.definitionFrameLevel;if(n!==void 0&&n>=0){let o=e.frames[n];if(o){let a=o.variables.find(s=>{var l,u;return s.name===t.name&&((u=(l=s.value)==null?void 0:l[0])==null?void 0:u.tag)==="Type"});if(a&&a.value){let s=a.value[0];if(s.value===t||z(s.value)&&s.value.id===t.id)return t;z(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=_e(e,t.name,a=>{var s,l;return((l=(s=a.value)==null?void 0:s[0])==null?void 0:l.tag)==="Type"});if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(z(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"){let _=c;if(_.value===t){a=!0;break}if(z(_.value)&&_.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(z(t));return r.value}var fl=null;function wi(){if(fl)return fl;let e=zt(),t=ut(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,fl=n,n}var pl=null;function Eo(){if(pl)return pl;let e=zt(),t=ut(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,pl=n,n}var dl=null;function $n(){if(dl)return dl;let e=zt(),t=ut(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,dl=n,n}var ml=null;function Jn(){if(ml)return ml;let e=zt(),t=ut(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,ml=n,n}var yl=new Map;function $a(e){if(yl.has(e))return yl.get(e);let t=zt(),n=ut(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,yl.set(e,i),i}function wa(){return $a(Jn())}var gl=null;function Nt(){if(gl)return gl;let e=zt(),t=ut(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,gl=n,n}var hl=null;function tn(){if(hl)return hl;let e=zt(),t=ut(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,hl=n,n}var vl=null;function $o(){if(vl)return vl;let e=zt(),t=ut(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,vl=n,n}var Tl=null;function Co(){if(Tl)return Tl;let e=zt(),t=ut(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,Tl=n,n}var El=null;function bo(){if(El)return El;let e=zt(),t=ut(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,El=n,n}var $l=null;function ko(){if($l)return $l;let e=zt(),t=ut(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,$l=n,n}var Cl=null;function wo(){if(Cl)return Cl;let e=zt(),t=ut(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,Cl=n,n}var bl=null;function Fo(){if(bl)return bl;let e=zt(),t=ut(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,bl=n,n}var kl=null;function Fi(){if(kl)return kl;let e=zt(),t=ut(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,kl=n,n}var wl=null;function Lo(){if(wl)return wl;let e=zt(),t=ut(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,wl=n,n}var Fl=null;function Ao(){if(Fl)return Fl;let e=zt(),t=ut(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,Fl=n,n}var Ll=null;function Io(){if(Ll)return Ll;let e=zt(),t=ut(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,Ll=n,n}var Al=null;function Li(){if(Al)return Al;let e=zt(),t=ut(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,Al=n,n}var Il=null;function $r(){if(Il)return Il;let e=zt(),t=ut(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,Il=n,n}var Sl=null;function dc(){if(Sl)return Sl;let e=zt(),t=ut(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,Sl=n,n}var Nl=null;function mc(){if(Nl)return Nl;let e=zt(),t=ut(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,Nl=n,n}var Vl=null;function yc(){if(Vl)return Vl;let e=zt(),t=ut(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,Vl=n,n}var xl=null;function gc(){if(xl)return xl;let e=zt(),t=ut(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,xl=n,n}var Dl=null;function hc(){if(Dl)return Dl;let e=zt(),t=ut(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,Dl=n,n}var Ml=null;function vc(){if(Ml)return Ml;let e=zt(),t=ut(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,Ml=n,n}var Ol=null;function Tc(){if(Ol)return Ol;let e=zt(),t=ut(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,Ol=n,n}var Rl=null;function Ec(){if(Rl)return Rl;let e=zt(),t=ut(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,Rl=n,n}var Pl=null;function $c(){if(Pl)return Pl;let e=zt(),t=ut(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,Pl=n,n}var Ul=null;function Cc(){if(Ul)return Ul;let e=zt(),t=ut(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,Ul=n,n}function Mt(e){return ir(0,e)}function ni(e,t){let n=zt(),r=ut(n),i={id:`array_${e.id+"_"+sl(lt(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var zl=new Map;function ms(e){if(zl.has(e))return zl.get(e);let t=zt(),n=ut(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,zl.set(e,r),r}function Zu(e){var r;let n=_e(e,"str").find(i=>{var o;return W((o=i.value)==null?void 0:o[0])&&i.value[0].type});if(!n||!W((r=n.value)==null?void 0:r[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var Bl;function bc(){if(Bl)return Bl;let e=zt(),t=ut(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,Bl=n,n}function Ro(e){let t=zt(),n=ut(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Ji(e,t=!1,n=!1){let r=ut(e),i={id:`struct_${$t(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function ys(e){return{id:`module_${$t(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function ut(e){return{id:`trait_${$t(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function kc(e){let t=ut(e),n={id:`enum_${$t(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function wc(e){let t=ut(e),n={id:`union_${$t(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function eo({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,isClosure:_}){let f=zt(),p=ut(f),m={id:`fn_${$t(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:p,isClosure:_};return p.receiverType=m,m}var Gl=new Map;function to(e){if(Gl.has(e))return Gl.get(e);let t=zt(),n=ut(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,Gl.set(e,r),r}var Wl=new Map;function Fc(e,t){if(Wl.has(e))return Wl.get(e);let n=ut(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,Wl.set(e,r),r}var ql=new Map;function Lc(e,t){if(ql.has(e))return ql.get(e);let n=ut(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,ql.set(e,r),r}function fr(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=ut(a),u=(r==null?void 0:r.map(f=>({traitType:f,frameLevel:-1})))??[],c=(i==null?void 0:i.map(f=>({traitType:f,frameLevel:-1})))??[],_={id:n??`sometype_${$t(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=_,Er(a,"Runtime")&&Bn("Runtime",_,a,s),oc({someType:_,env:a,context:{SelfType:_,stdPath:""}}),_}var ds=new Map;function no(e,t){let n=ut(t),r=ir(1),i={id:`effects_row_sometype_${$t(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 yi(e){let t=zt(),n=ut(t),r={id:`EffectsRow_${$t(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function ir(e,t){if(ds.has(e)){let i=ds.get(e);if(i.has(t))return i.get(t)}else ds.set(e,new Map);let n=ut(zt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,ds.get(e).set(t,r),r}function ro({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function Ac(e,t){let n=`fn_trait_${e.id}`,r=ut(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function pc(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${D(a.type)}`).join(","),o=D(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${D(n.type)}`}).join(";")}function Fa({requiredTraits:e,env:t,negativeTraits:n}){let r=ut(t),i=e.map(c=>pc(c)).join("__"),o=n?n.map(c=>pc(c)).join("__"):"",a=`dyn_${sl(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=(n==null?void 0:n.map(c=>({traitType:c,frameLevel:-1})))??[],u={id:a,tag:"Dyn",requiredTraits:s,negativeTraits:l,trait:r,env:t};return r.receiverType=u,u}function Ic(e,t){return!bt(e)||!bt(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Cr(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),z(t))return e===t.id;if(xe(t))return t.fields.some(r=>Cr(e,r.type,n));if(ze(t))return t.variants.some(r=>r.fields?r.fields.some(i=>Cr(e,i.type,n)):!1);if(Qe(t))return t.fields.some(r=>Cr(e,r.type,n));if(Xe(t)||Lt(t)||En(t))return Cr(e,t.childType,n);if(tt(t))return!1;if(fn(t)||un(t))return Cr(e,t.childType,n);if(J(t))return t.parameters.some(r=>Cr(e,r.type,n))||Cr(e,t.return.type,n);if(Rn(t)){if(Cr(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(Cr(e,r.type,n))return!0;return!1}return _n(t)?Cr(e,t.isFn.callType,n):!1}function It(e,t,n=[]){if(n.find(r=>r.expected===e.type&&r.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),z(e.type)&&z(t.type)){let r=kn(e.env,e.type),i=kn(t.env,t.type);if(z(r))if(z(i)){if(r!==i){let o=ye(t.type);{let a=_e(e.env,e.type.name),s=a[a.length-1];if(s)e.env=vt(e.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=_e(t.env,t.type.name),s=a[a.length-1];if(s)t.env=vt(t.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=ye(i),a=_e(e.env,e.type.name),s=a[a.length-1];if(s)e.env=vt(e.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=ye(r),a=_e(t.env,t.type.name),s=a[a.length-1];if(s)t.env=vt(t.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}if(e.type.id!==t.type.id&&e.type.requiredTraits&&t.type.requiredTraits){let o=e.type.requiredTraits,a=t.type.requiredTraits;for(let s=0;s<o.length;s++){let l=o[s].traitType;if(_n(l)){let u=a.find(c=>_n(c.traitType));if(u&&_n(u.traitType)){let{expectedEnv:c,givenEnv:_}=It({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=_}}else if(Rn(l)){let u=a.find(c=>Rn(c.traitType));if(u&&Rn(u.traitType)){let{expectedEnv:c,givenEnv:_}=It({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=_,Yl(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(z(e.type)){let r=kn(e.env,e.type);if(z(r)&&(r.id===e.type.id||r.name===e.type.name)){if(Cr(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${D(t.type)}" because it would create an infinite type.`);let i=ye(t.type),o=_e(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=vt(e.env,a,{...a,value:[i]}));else{let{env:s}=Pe({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(_n(s)&&J(t.type)){let l=s.isFn.callType,{expectedEnv:u,givenEnv:c}=It({type:l,env:e.env},{type:t.type,env:t.env},n);e.env=u,t.env=c}else if(Rn(s)&&Rn(t.type)){let{expectedEnv:l,givenEnv:u}=It({type:s.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=l,t.env=u,Yl(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!z(r)){let{expectedEnv:i,givenEnv:o}=It({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=i,t.env=o}}else if(z(t.type)){let r=kn(t.env,t.type);if(z(r)){if(Cr(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${D(e.type)}" because it would create an infinite type.`);let i=ye(e.type),o=_e(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=vt(t.env,a,{...a,value:[i]}));else{let{env:s}=Pe({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:i,givenEnv:o}=It({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=i,t.env=o}}else if(Qe(e.type)&&Qe(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:i,givenEnv:o}=It({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=i,t.env=o}else{if(Qe(e.type)&&Qe(t.type))throw new Error(`Cannot unify incompatible tuple types: "${D(e.type)}" and "${D(t.type)}"`);if(xe(e.type)&&xe(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: "${D(e.type)}" and "${D(t.type)}"`)}for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=It({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&W(i.assignedValue)&&W(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=It({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(ze(e.type)&&ze(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.variants.length;r++){let i=e.type.variants[r],o=t.type.variants[r],a=i.fields??[],s=o.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:c}=It({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=c}}else{if(ze(e.type)&&ze(t.type))throw new Error(`Cannot unify incompatible enum types: "${D(e.type)}" and "${D(t.type)}"`);if(We(e.type)&&We(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=It({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&W(i.assignedValue)&&W(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=It({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(st(e.type)&&st(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=It({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&W(i.assignedValue)&&W(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=It({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(tt(e.type)&&tt(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(fn(e.type)&&fn(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(un(e.type)&&un(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(Xe(e.type)&&Xe(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=i,Oe(e.type.length)&&e.type.length.variableName&&!Oe(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=_e(e.env,o),l=s[s.length-1];if(l)l&&(e.env=vt(e.env,l,{...l,value:[a]}));else{let{env:u}=Pe({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(Lt(e.type)&&Lt(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(En(e.type)&&En(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(Rn(e.type)&&Rn(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=i,Yl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(_n(e.type)&&_n(t.type)){let r=e.type,i=t.type,{expectedEnv:o,givenEnv:a}=It({type:r.isFn.callType,env:e.env},{type:i.isFn.callType,env:t.env},n);e.env=o,t.env=a}else if(J(e.type)&&J(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,i=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=i.forallParameters[s],{expectedEnv:c,givenEnv:_}=It({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=_}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=It({type:r.parameters[s].type,env:e.env},{type:i.parameters[s].type,env:t.env},n);e.env=l,t.env=u}{let s=r.implicitParameters,l=[];for(let p of i.implicitParameters)p.isEffectRowSpread?Ut(p.type)&&l.push(...p.type.implicitParameters):l.push(p);let u=[],c=[],_=[];for(let p of s)p.isEffectRowSpread?Ut(p.type)?c.push(p):z(p.type)&&p.type.isEffectsRow&&_.push(p):u.push(p);if(_.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${_.map(p=>p.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let f=new Set;for(let p of u)for(let m=0;m<l.length;m++)if(!f.has(m)&&p.type.id===l[m].type.id){let{expectedEnv:y,givenEnv:g}=It({type:p.type,env:e.env},{type:l[m].type,env:t.env},n);e.env=y,t.env=g,f.add(m);break}for(let p of c){let m=p.type.implicitParameters;for(let y of m)for(let g=0;g<l.length;g++)if(!f.has(g)&&y.type.id===l[g].type.id){let{expectedEnv:h,givenEnv:v}=It({type:y.type,env:e.env},{type:l[g].type,env:t.env},n);e.env=h,t.env=v,f.add(g);break}}if(_.length===1){let p=_[0],m=[];for(let y=0;y<l.length;y++)f.has(y)||m.push(l[y]);if(z(p.type)&&p.type.isEffectsRow){let y=yi(m),g=ye(y),h=_e(e.env,p.type.name),v=h[h.length-1];if(v)e.env=vt(e.env,v,{...v,value:[g]});else{let{env:$}=Pe({env:e.env,variable:{name:p.type.name,value:[g],type:g.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=$}}}}let{expectedEnv:o,givenEnv:a}=It({type:r.return.type,env:e.env},{type:i.return.type,env:t.env},n);e.env=o,t.env=a}else if(!(bt(e.type)&&!bt(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
149
+ })`}function sc({arcType:e,env:t,context:n}){let r=qy(e),i=Yy(e),o=Hy(e);return t=dr({label:F.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=dr({label:F.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=dr({label:F.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Bn(e,t,n,r){let i=`${e}()`,o=On(i),a=U({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!on(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:ir(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=>ka(i.type,t))&&(t=Bn("Send",e,t,n)),t}function Ky({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=Bn("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=>ka(o.type,t)))&&(t=Bn("Send",e,t,n)),t}function lc({unionType:e,env:t,context:n}){return e.fields.every(i=>ka(i.type,t))&&(t=Bn("Send",e,t,n)),t}function Qy({structType:e,env:t,context:n}){return e.isReferenceSemantics?di(e,new Set,t)||(t=Bn("Acyclic",e,t,n)):e.fields.every(i=>Yi(i.type,t))&&(t=Bn("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=>Yi(o.type,t)))&&(t=Bn("Acyclic",e,t,n)),t}function uc({unionType:e,env:t,context:n}){return e.fields.every(i=>Yi(i.type,t))&&(t=Bn("Acyclic",e,t,n)),t}function Jy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Ki(i.type,t,new Set([e.id])))&&(t=Bn("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=>Ki(o.type,t,new Set([e.id]))))&&(t=Bn("Comptime",e,t,n)),t}function tg({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=Bn("Runtime",e,t,n),t):(e.fields.every(i=>Xi(i.type,t,new Set([e.id])))&&(t=Bn("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=>Xi(o.type,t,new Set([e.id]))))&&(t=Bn("Runtime",e,t,n)),t}function cc({unionType:e,env:t,context:n}){return t=Bn("Runtime",e,t,n),t}function rg({tupleType:e,env:t,context:n}){return e.fields.every(i=>ka(i.type,t))&&(t=Bn("Send",e,t,n)),t}function ig({tupleType:e,env:t,context:n}){return e.fields.every(i=>Ki(i.type,t,new Set([e.id])))&&(t=Bn("Comptime",e,t,n)),t}function og({tupleType:e,env:t,context:n}){return e.fields.every(i=>Xi(i.type,t,new Set([e.id])))&&(t=Bn("Runtime",e,t,n)),t}function Qi({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=xy({structType:e,env:t,context:n}),ps(e,t,r,n),t}function _c({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}),ps(e,t,r,n),t}function fc({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}),ps(e,t,r,n),t}function Er(e,t){let n=_e(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&W(r.value[0])){let i=r.value[0];if(st(i.value))return i.value}}function kn(e,t){let n=t.definitionFrameLevel;if(n!==void 0&&n>=0){let o=e.frames[n];if(o){let a=o.variables.find(s=>{var l,u;return s.name===t.name&&((u=(l=s.value)==null?void 0:l[0])==null?void 0:u.tag)==="Type"});if(a&&a.value){let s=a.value[0];if(s.value===t||z(s.value)&&s.value.id===t.id)return t;z(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=_e(e,t.name,a=>{var s,l;return((l=(s=a.value)==null?void 0:s[0])==null?void 0:l.tag)==="Type"});if(!o.length||(r=o[o.length-1].value[0],r.value===t))return t;if(z(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"){let _=c;if(_.value===t){a=!0;break}if(z(_.value)&&_.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(z(t));return r.value}var fl=null;function wi(){if(fl)return fl;let e=zt(),t=ut(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,fl=n,n}var pl=null;function Eo(){if(pl)return pl;let e=zt(),t=ut(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,pl=n,n}var dl=null;function $n(){if(dl)return dl;let e=zt(),t=ut(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,dl=n,n}var ml=null;function Jn(){if(ml)return ml;let e=zt(),t=ut(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,ml=n,n}var yl=new Map;function $a(e){if(yl.has(e))return yl.get(e);let t=zt(),n=ut(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,yl.set(e,i),i}function wa(){return $a(Jn())}var gl=null;function Nt(){if(gl)return gl;let e=zt(),t=ut(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,gl=n,n}var hl=null;function tn(){if(hl)return hl;let e=zt(),t=ut(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,hl=n,n}var vl=null;function $o(){if(vl)return vl;let e=zt(),t=ut(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,vl=n,n}var Tl=null;function Co(){if(Tl)return Tl;let e=zt(),t=ut(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,Tl=n,n}var El=null;function bo(){if(El)return El;let e=zt(),t=ut(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,El=n,n}var $l=null;function ko(){if($l)return $l;let e=zt(),t=ut(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,$l=n,n}var Cl=null;function wo(){if(Cl)return Cl;let e=zt(),t=ut(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,Cl=n,n}var bl=null;function Fo(){if(bl)return bl;let e=zt(),t=ut(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,bl=n,n}var kl=null;function Fi(){if(kl)return kl;let e=zt(),t=ut(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,kl=n,n}var wl=null;function Lo(){if(wl)return wl;let e=zt(),t=ut(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,wl=n,n}var Fl=null;function Ao(){if(Fl)return Fl;let e=zt(),t=ut(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,Fl=n,n}var Ll=null;function Io(){if(Ll)return Ll;let e=zt(),t=ut(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,Ll=n,n}var Al=null;function Li(){if(Al)return Al;let e=zt(),t=ut(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,Al=n,n}var Il=null;function $r(){if(Il)return Il;let e=zt(),t=ut(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,Il=n,n}var Sl=null;function dc(){if(Sl)return Sl;let e=zt(),t=ut(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,Sl=n,n}var Nl=null;function mc(){if(Nl)return Nl;let e=zt(),t=ut(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,Nl=n,n}var Vl=null;function yc(){if(Vl)return Vl;let e=zt(),t=ut(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,Vl=n,n}var xl=null;function gc(){if(xl)return xl;let e=zt(),t=ut(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,xl=n,n}var Dl=null;function hc(){if(Dl)return Dl;let e=zt(),t=ut(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,Dl=n,n}var Ml=null;function vc(){if(Ml)return Ml;let e=zt(),t=ut(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,Ml=n,n}var Ol=null;function Tc(){if(Ol)return Ol;let e=zt(),t=ut(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,Ol=n,n}var Rl=null;function Ec(){if(Rl)return Rl;let e=zt(),t=ut(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,Rl=n,n}var Pl=null;function $c(){if(Pl)return Pl;let e=zt(),t=ut(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,Pl=n,n}var Ul=null;function Cc(){if(Ul)return Ul;let e=zt(),t=ut(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,Ul=n,n}function Mt(e){return ir(0,e)}function ni(e,t){let n=zt(),r=ut(n),i={id:`array_${e.id+"_"+sl(lt(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var zl=new Map;function ms(e){if(zl.has(e))return zl.get(e);let t=zt(),n=ut(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,zl.set(e,r),r}function Zu(e){var r;let n=_e(e,"str").find(i=>{var o;return W((o=i.value)==null?void 0:o[0])&&i.value[0].type});if(!n||!W((r=n.value)==null?void 0:r[0]))throw new Error("'str' type not found in environment. Make sure prelude is loaded.");return n.value[0].value}var Bl;function bc(){if(Bl)return Bl;let e=zt(),t=ut(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,Bl=n,n}function Ro(e){let t=zt(),n=ut(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Ji(e,t=!1,n=!1){let r=ut(e),i={id:`struct_${$t(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function ys(e){return{id:`module_${$t(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function ut(e){return{id:`trait_${$t(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function kc(e){let t=ut(e),n={id:`enum_${$t(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function wc(e){let t=ut(e),n={id:`union_${$t(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function eo({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,isClosure:_}){let f=zt(),p=ut(f),m={id:`fn_${$t(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:p,isClosure:_};return p.receiverType=m,m}var Gl=new Map;function to(e){if(Gl.has(e))return Gl.get(e);let t=zt(),n=ut(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,Gl.set(e,r),r}var Wl=new Map;function Fc(e,t){if(Wl.has(e))return Wl.get(e);let n=ut(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,Wl.set(e,r),r}var ql=new Map;function Lc(e,t){if(ql.has(e))return ql.get(e);let n=ut(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,ql.set(e,r),r}function fr(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=ut(a),u=(r==null?void 0:r.map(f=>({traitType:f,frameLevel:-1})))??[],c=(i==null?void 0:i.map(f=>({traitType:f,frameLevel:-1})))??[],_={id:n??`sometype_${$t(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=_,Er(a,"Runtime")&&Bn("Runtime",_,a,s),oc({someType:_,env:a,context:{SelfType:_,stdPath:""}}),_}var ds=new Map;function no(e,t){let n=ut(t),r=ir(1),i={id:`effects_row_sometype_${$t(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 yi(e){let t=zt(),n=ut(t),r={id:`EffectsRow_${$t(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function ir(e,t){if(ds.has(e)){let i=ds.get(e);if(i.has(t))return i.get(t)}else ds.set(e,new Map);let n=ut(zt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,ds.get(e).set(t,r),r}function ro({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function Ac(e,t){let n=`fn_trait_${e.id}`,r=ut(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function pc(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${D(a.type)}`).join(","),o=D(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${D(n.type)}`}).join(";")}function Fa({requiredTraits:e,env:t,negativeTraits:n}){let r=ut(t),i=e.map(c=>pc(c)).join("__"),o=n?n.map(c=>pc(c)).join("__"):"",a=`dyn_${sl(i+(o?`_neg_${o}`:""))}`,s=e.map(c=>({traitType:c,frameLevel:-1}))??[],l=(n==null?void 0:n.map(c=>({traitType:c,frameLevel:-1})))??[],u={id:a,tag:"Dyn",requiredTraits:s,negativeTraits:l,trait:r,env:t};return r.receiverType=u,u}function Ic(e,t){return!bt(e)||!bt(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Cr(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),z(t))return e===t.id;if(xe(t))return t.fields.some(r=>Cr(e,r.type,n));if(ze(t))return t.variants.some(r=>r.fields?r.fields.some(i=>Cr(e,i.type,n)):!1);if(Qe(t))return t.fields.some(r=>Cr(e,r.type,n));if(Xe(t)||Lt(t)||En(t))return Cr(e,t.childType,n);if(tt(t))return!1;if(pn(t)||cn(t))return Cr(e,t.childType,n);if(J(t))return t.parameters.some(r=>Cr(e,r.type,n))||Cr(e,t.return.type,n);if(Rn(t)){if(Cr(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(Cr(e,r.type,n))return!0;return!1}return fn(t)?Cr(e,t.isFn.callType,n):!1}function It(e,t,n=[]){if(n.find(r=>r.expected===e.type&&r.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),z(e.type)&&z(t.type)){let r=kn(e.env,e.type),i=kn(t.env,t.type);if(z(r))if(z(i)){if(r!==i){let o=ye(t.type);{let a=_e(e.env,e.type.name),s=a[a.length-1];if(s)e.env=vt(e.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=_e(t.env,t.type.name),s=a[a.length-1];if(s)t.env=vt(t.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=ye(i),a=_e(e.env,e.type.name),s=a[a.length-1];if(s)e.env=vt(e.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=ye(r),a=_e(t.env,t.type.name),s=a[a.length-1];if(s)t.env=vt(t.env,s,{...s,value:[o]});else{let{env:l}=Pe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}if(e.type.id!==t.type.id&&e.type.requiredTraits&&t.type.requiredTraits){let o=e.type.requiredTraits,a=t.type.requiredTraits;for(let s=0;s<o.length;s++){let l=o[s].traitType;if(fn(l)){let u=a.find(c=>fn(c.traitType));if(u&&fn(u.traitType)){let{expectedEnv:c,givenEnv:_}=It({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=_}}else if(Rn(l)){let u=a.find(c=>Rn(c.traitType));if(u&&Rn(u.traitType)){let{expectedEnv:c,givenEnv:_}=It({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=_,Yl(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(z(e.type)){let r=kn(e.env,e.type);if(z(r)&&(r.id===e.type.id||r.name===e.type.name)){if(Cr(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${D(t.type)}" because it would create an infinite type.`);let i=ye(t.type),o=_e(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=vt(e.env,a,{...a,value:[i]}));else{let{env:s}=Pe({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(fn(s)&&J(t.type)){let l=s.isFn.callType,{expectedEnv:u,givenEnv:c}=It({type:l,env:e.env},{type:t.type,env:t.env},n);e.env=u,t.env=c}else if(Rn(s)&&Rn(t.type)){let{expectedEnv:l,givenEnv:u}=It({type:s.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=l,t.env=u,Yl(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!z(r)){let{expectedEnv:i,givenEnv:o}=It({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=i,t.env=o}}else if(z(t.type)){let r=kn(t.env,t.type);if(z(r)){if(Cr(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${D(e.type)}" because it would create an infinite type.`);let i=ye(e.type),o=_e(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=vt(t.env,a,{...a,value:[i]}));else{let{env:s}=Pe({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=s}}else{let{expectedEnv:i,givenEnv:o}=It({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=i,t.env=o}}else if(Qe(e.type)&&Qe(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:i,givenEnv:o}=It({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=i,t.env=o}else{if(Qe(e.type)&&Qe(t.type))throw new Error(`Cannot unify incompatible tuple types: "${D(e.type)}" and "${D(t.type)}"`);if(xe(e.type)&&xe(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: "${D(e.type)}" and "${D(t.type)}"`)}for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=It({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&W(i.assignedValue)&&W(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=It({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}}else if(ze(e.type)&&ze(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.variants.length;r++){let i=e.type.variants[r],o=t.type.variants[r],a=i.fields??[],s=o.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:c}=It({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=c}}else{if(ze(e.type)&&ze(t.type))throw new Error(`Cannot unify incompatible enum types: "${D(e.type)}" and "${D(t.type)}"`);if(We(e.type)&&We(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=It({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&W(i.assignedValue)&&W(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=It({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(st(e.type)&&st(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let i=e.type.fields[r],o=t.type.fields[r],{expectedEnv:a,givenEnv:s}=It({type:i.type,env:e.env},{type:o.type,env:t.env},n);if(e.env=a,t.env=s,i.assignedValue&&o.assignedValue&&W(i.assignedValue)&&W(o.assignedValue)){let{expectedEnv:l,givenEnv:u}=It({type:i.assignedValue.value,env:e.env},{type:o.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(tt(e.type)&&tt(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(pn(e.type)&&pn(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(cn(e.type)&&cn(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(Xe(e.type)&&Xe(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=i,Oe(e.type.length)&&e.type.length.variableName&&!Oe(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=_e(e.env,o),l=s[s.length-1];if(l)l&&(e.env=vt(e.env,l,{...l,value:[a]}));else{let{env:u}=Pe({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=u}}}else if(Lt(e.type)&&Lt(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(En(e.type)&&En(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=i}else if(Rn(e.type)&&Rn(t.type)){let{expectedEnv:r,givenEnv:i}=It({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=i,Yl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(fn(e.type)&&fn(t.type)){let r=e.type,i=t.type,{expectedEnv:o,givenEnv:a}=It({type:r.isFn.callType,env:e.env},{type:i.isFn.callType,env:t.env},n);e.env=o,t.env=a}else if(J(e.type)&&J(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,i=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=i.forallParameters[s],{expectedEnv:c,givenEnv:_}=It({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=_}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=It({type:r.parameters[s].type,env:e.env},{type:i.parameters[s].type,env:t.env},n);e.env=l,t.env=u}{let s=r.implicitParameters,l=[];for(let p of i.implicitParameters)p.isEffectRowSpread?Ut(p.type)&&l.push(...p.type.implicitParameters):l.push(p);let u=[],c=[],_=[];for(let p of s)p.isEffectRowSpread?Ut(p.type)?c.push(p):z(p.type)&&p.type.isEffectsRow&&_.push(p):u.push(p);if(_.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${_.map(p=>p.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let f=new Set;for(let p of u)for(let m=0;m<l.length;m++)if(!f.has(m)&&p.type.id===l[m].type.id){let{expectedEnv:y,givenEnv:g}=It({type:p.type,env:e.env},{type:l[m].type,env:t.env},n);e.env=y,t.env=g,f.add(m);break}for(let p of c){let m=p.type.implicitParameters;for(let y of m)for(let g=0;g<l.length;g++)if(!f.has(g)&&y.type.id===l[g].type.id){let{expectedEnv:h,givenEnv:v}=It({type:y.type,env:e.env},{type:l[g].type,env:t.env},n);e.env=h,t.env=v,f.add(g);break}}if(_.length===1){let p=_[0],m=[];for(let y=0;y<l.length;y++)f.has(y)||m.push(l[y]);if(z(p.type)&&p.type.isEffectsRow){let y=yi(m),g=ye(y),h=_e(e.env,p.type.name),v=h[h.length-1];if(v)e.env=vt(e.env,v,{...v,value:[g]});else{let{env:$}=Pe({env:e.env,variable:{name:p.type.name,value:[g],type:g.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=$}}}}let{expectedEnv:o,givenEnv:a}=It({type:r.return.type,env:e.env},{type:i.return.type,env:t.env},n);e.env=o,t.env=a}else if(!(bt(e.type)&&!bt(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
150
150
  Expected: "${D(e.type)}"
151
- Given: "${D(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function Yl(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?Ut(c.type)?a.push(c):z(c.type)&&c.type.isEffectsRow&&s.push(c):o.push(c);if(s.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${s.map(c=>c.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let l=[];for(let c of t)c.isEffectRowSpread?Ut(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let _=0;_<l.length;_++)if(!u.has(_)&&c.type.id===l[_].type.id){let{expectedEnv:f,givenEnv:p}=It({type:c.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=f,r.env=p,u.add(_);break}for(let c of a){let _=c.type.implicitParameters;for(let f of _)for(let p=0;p<l.length;p++)if(!u.has(p)&&f.type.id===l[p].type.id){let{expectedEnv:m,givenEnv:y}=It({type:f.type,env:n.env},{type:l[p].type,env:r.env},i);n.env=m,r.env=y,u.add(p);break}}if(s.length===1){let c=s[0],_=[];for(let f=0;f<l.length;f++)u.has(f)||_.push(l[f]);if(z(c.type)&&c.type.isEffectsRow){let f=yi(_),p=ye(f),m=_e(n.env,c.type.name),y=m[m.length-1];if(y)n.env=vt(n.env,y,{...y,value:[p]});else{let{env:g}=Pe({env:n.env,variable:{name:c.type.name,value:[p],type:p.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=g}}}}function Hl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Nr(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=Nr(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function jl(e){let t=[];for(let n of e)n.isEffectRowSpread&&Ut(n.type)?t.push(...jl(n.type.implicitParameters)):(n.isEffectRowSpread&&z(n.type)&&n.type.isEffectsRow,t.push(n));return t}function ae(e,t,n=!1,r=new Set){var a,s;let i=e.type.id,o=t.type.id;if(i&&o&&(xe(e.type)||ze(e.type)||Pt(e.type))&&(xe(t.type)||ze(t.type)||Pt(t.type))){let l=`${i}:${o}`;if(r.has(l))return!0;r.add(l)}if(ua(e.type)&&ua(t.type))return e.type.tag===t.type.tag;if((rn(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"||Or(e.type))&&rn(t.type))return!(n&&!rn(e.type));if((Tn(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Tn(t.type))return!(n&&!Tn(e.type));if((ln(e.type)||Lt(e.type)&&Mr(e.type.childType)||tt(e.type)&&(Mr(e.type.childType)||ho(e.type.childType))||ui(e.type)&&e.type.typeName==="str")&&ln(t.type))return!0;if(Or(e.type)&&Or(t.type))return e.type.tag===t.type.tag;if(yn(e.type)&&yn(t.type))return!0;if(En(e.type)&&En(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Xe(e.type)&&Xe(t.type))return gn({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Lt(e.type)&&Lt(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Qe(e.type)&&Qe(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(!ae({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(xe(e.type)&&xe(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ze(e.type)&&!Ze(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 l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ae({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(ze(e.type)&&ze(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],c=t.type.variants[l];if(u.name!==c.name||((a=u.fields)==null?void 0:a.length)!==((s=c.fields)==null?void 0:s.length))return!1;if(u.fields)for(let _=0;_<u.fields.length;_++){let f=u.fields[_],p=c.fields[_];if(f.label!==p.label||!ae({type:f.type,env:e.env},{type:p.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(Pt(e.type)&&Pt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ze(e.type)&&!Ze(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ae({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(We(e.type)&&We(t.type)){for(let l of e.type.fields){let u=t.type.fields.find(c=>c.label===l.label);if(!u||!ae({type:l.type,env:e.env},{type:u.type,env:t.env},n,r))return!1}return!0}if(st(e.type)){if(st(t.type)){if(_n(e.type))return!(!_n(t.type)||!Nc({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(Rn(e.type)){if(!Rn(t.type)||!ae({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let l=jl(e.type.isFuture.effects),u=jl(t.type.isFuture.effects);if(l.length>0&&u.length>0){if(l.length!==u.length)return!1;let c=new Set;for(let _ of l){let f=!1;for(let p=0;p<u.length;p++)if(!c.has(p)&&ae({type:_.type,env:e.env},{type:u[p].type,env:t.env},n,r)){c.add(p),f=!0;break}if(!f)return!1}}return!0}return e.type.id===t.type.id}return bt(t.type)&&t.type.baseType&&t.type.baseType.trait&&st(e.type)?ae({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(J(e.type)&&J(t.type))return Nc({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(bt(e.type)&&bt(t.type))return Ic(e.type,t.type);if(tt(e.type)&&tt(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(fn(e.type)&&fn(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(un(e.type)&&un(t.type))return ae({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(Ke(e.type)&&Ke(t.type)){for(let{traitType:l}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:c})=>ae({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:l}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:c})=>ae({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1}return!0}if(z(e.type)){if(Ke(t.type))return!0;if(z(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?ae({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=Hl(e.env,e.type),u=Hl(t.env,t.type);if(n&&l.length!==u.length)return!1;for(let _ of l)if(!u.find(p=>ae({type:_,env:e.env},{type:p,env:t.env},n,r)))return!1;let c=Sc(e.env,e.type);if(c.length>0){for(let _ of c)if(u.find(p=>ae({type:_,env:e.env},{type:p,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!ae({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 ae({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let l=Hl(e.env,e.type);if(l.length===0)return!n;if(l.length>0){for(let f of l)if(!vn({targetType:t.type,traitType:f,env:e.env}))break;let c=Sc(e.env,e.type);if(c.length>0){for(let f of c)if(vn({targetType:t.type,traitType:f,env:e.env}))return!1}let _=!0;for(let f of l)if(!vn({targetType:t.type,traitType:f,env:e.env})){_=!1;break}if(_)return!0}let u=kn(e.env,e.type);return e.type===u?!1:ae({type:u,env:e.env},t,n,r)}}else if(z(t.type)){if(t.type.resolvedConcreteType&&ae(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=kn(t.env,t.type);return t.type===l?!1:ae(e,{type:l,env:t.env},n,r)}return!1}function Nc(e,t,n=!1){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:i,givenEnv:o}=It({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=i,t.env=o}catch{return!1}for(let i=0;i<e.type.forallParameters.length;i++){let o=e.type.forallParameters[i],a=t.type.forallParameters[i];if(!ae({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let i=0;i<e.type.parameters.length;i++){let o=e.type.parameters[i],a=t.type.parameters[i];if(o.isCompileTimeOnly!==a.isCompileTimeOnly||!ae({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return ae({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function gs(e){var t;return T(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||I(e)&&I(e.func)&&(T(e.func,M.fn)||T(e.func,M.unsafe_fn)||T(e.func,M.Fn))||!e.$):!1}function hs(e,t){if(!I(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(I(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Ur(e){var t,n,r;if(X(e))return Kt(e,M.escape);if(I(e)){if((t=e.$)!=null&&t.macroExpansion)return Ur(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Ur);if(gs(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&J(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Ur(e.func))return!0;for(let i of e.args)if(Ur(i))return!0}return!1}function Po(e){var t,n,r;if(X(e))return Kt(e,M.return)||Kt(e,M.escape);if(I(e)){if(T(e,M.return)||T(e,M.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Po(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Po);if(gs(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&J(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Po(e.func))return!0;for(let i of e.args)if(Po(i))return!0}return!1}function Xn(e){var t,n,r,i,o,a,s;if(I(e)){if(((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await")return!0;if((r=e.$)!=null&&r.macroExpansion)return Xn(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Xn);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||gs(e)||W((a=e.func.$)==null?void 0:a.value)&&J(e.func.$.value.value)||I(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Xn(e.func))return!0;for(let l of e.args)if(Xn(l))return!0}return!1}function Uo(e){var t,n,r;if(X(e))return Kt(e,M.break)||Kt(e,M.return)||Kt(e,M.escape);if(I(e)){if(T(e,M.return)||T(e,M.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Uo(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Uo);if(gs(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&J(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Uo(e.func))return!0;for(let i of e.args)if(Uo(i))return!0}return!1}var se={tag:"Unit",type:$r()};function La(e){if(e&&e.tag==="FnCall"&&T(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=_e(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function vs(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(ri(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)ri(s,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function ri(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,_=_e(e.$.env,u);if(_.length>0){let f=_[_.length-1];if(f&&!n.has(f.id)&&!f.isCompileTimeOnly){let p=`${f.name}:${f.frameLevel}`,m=r.get(p);if(m&&m!==f.id)i.set(f.id,m);else if(f.isOwningTheSameRcValueAs){let y=f.isOwningTheSameRcValueAs;if(!n.has(y.id)){let g={id:y.id,name:y.name,type:y.type,isOwningTheSameRcValueAs:void 0};n.set(y.id,g);let h=`${y.name}:${y.frameLevel}`;r.has(h)||r.set(h,y.id)}}else n.set(f.id,{id:f.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(p)||r.set(p,f.id)}}}break;case"FnCall":{if(T(e,M.while)){let u=t.length;ri(e.func,t,n,r,i,o,e);for(let _ of e.args)ri(_,t,n,r,i,o,e);let c=t.length;if(c>u)for(let _=u;_<c;_++)t[_].isInsideWhile=!0,t[_].whileNestingDepth=(t[_].whileNestingDepth??0)+1,t[_].enclosingWhileExpr||(t[_].enclosingWhileExpr=e);break}if(T(e,M.cond)){Vc(e,t,n,r,i,o);break}if(T(e,M.match)){Vc(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)ri(u,t,n,r,i,o,e);break}ri(e.func,t,n,r,i,o,e);for(let u of e.args)ri(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)ri(u,t,n,r,i,o,e);break}}}function Vc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;ri(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let _=t.length;ri(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 f;for(let p of l)if(_<p.length){f=p[_];break}f&&(f.index=t.length,f.isInsideCond=!0,_===0&&(f.needsOwnCondBranchField=!0),_>0&&(f.condBranchSourceIndex=c),t.push(f))}}}function xc(e){let n=vs(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&er(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&je(u)){let c=Cn(u);if(!c)return;let _=c.isFuture.outputType,f;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let m=l.token.value,y=_e(l.$.env,m);if(y.length>0){let g=y[y.length-1];g.isOwningTheSameRcValueAs?f=g.isOwningTheSameRcValueAs.id:f=g.id}}let p=La(o);a.push({index:a.length,expr:i,resultType:_,futureType:c,targetVariableId:p,futureVariableId:f})}}},shouldSkipBody(i){return wn(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 wn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_async"}function er(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await"}function Dc(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_state"}function Ts(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_spawn"}function Mc(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="join_handle_await"}function kt(e){return X(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Aa(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=_e(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 Si(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else X(e)&&(n=e.token.value);if(n){let o=_e(t,n),a=o[o.length-1];if(a!=null&&a.isImplicit)throw d({token:e.token,errorMessage:`Cannot use implicit variable "${a.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Es=!0;function Oc({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=On(`${F.___drop[0]}(${o.name})`),s=U({expr:a,env:i,context:{...n,expectedType:{env:i,type:se.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Ia(e,t,n){var s,l;if(I(e)&&wn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)Ia(u,t,n);if(I(e)&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[0])&&X(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=_e(e.$.env,u);if(c.length>0){let _=c[c.length-1];t.has(_.id)||t.set(_.id,[]),t.get(_.id).push(e)}return}if(I(e)&&T(e,M.while))return;function i(u){var c,_;if(Ot((c=u.$)==null?void 0:c.controlFlow))return!0;if(I(u)&&T(u,M.begin)){let f=u.args[u.args.length-1];if(Ot((_=f==null?void 0:f.$)==null?void 0:_.controlFlow)||I(f)&&T(f,M.return))return!0}return!!(I(u)&&T(u,M.return))}function o(u){if(I(u)&&T(u,M.tuple,0))return!0;if(I(u)&&T(u,M.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(I(c)&&T(c,M.tuple,0))return!0}}return!1}function a(u,c){let _=[],f=[],p=[];for(let y=c;y<u.args.length;y++){let g=u.args[y];if(I(g)&&T(g,"=>",2)){let h=g.args[1],v=Rc(h);_.push(v),f.push(i(h)),p.push(o(h))}}let m=new Set;for(let y of _){for(let g of y.dupCalls.keys())m.add(g);for(let g of y.varsWithPartialBranchDups)n.add(g)}if(_.length>0)for(let y of m){let g=[],h=[];for(let v=0;v<_.length;v++){let $=_[v],E=$.dupCalls.has(y),C=f[v];if(E){let w=$.dupCalls.get(y);C?g.push(...w):h.push(...w)}}for(let v of g)t.has(y)||t.set(y,[]),v.__isEarlyReturnDup=!0,t.get(y).push(v);if(h.length>0){let v=0,$=0;for(let E=0;E<_.length;E++)f[E]||(v++,_[E].dupCalls.has(y)&&$++);if($===v){t.has(y)||t.set(y,[]);for(let E of h)t.get(y).push(E)}else n.add(y)}}}if(I(e)&&T(e,M.cond)){a(e,0);return}if(I(e)&&T(e,M.match)){e.args[0]&&Ia(e.args[0],t,n),a(e,1);return}if(I(e)){Ia(e.func,t,n);for(let u of e.args)Ia(u,t,n)}}function Rc(e){let t=new Map,n=new Set;return Ia(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function $s(e){return I(e)&&T(e,M.tuple,0)}function Kl(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),I(e)){Kl(e.func,t);for(let r of e.args)Kl(r,t)}}function nn({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var E,C,w,b,k,A,S,V,O;if(I(e)&&T(e,"_")&&!T(e,M.begin)){let x=e;x.args.some(P=>I(P)&&T(P,":"))||(x.func={...x.func,token:{...x.func.token,value:M.begin[0]}})}if(!I(e)||!T(e,M.begin)){let x={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:M.begin[0]}},args:[et(e)],token:{...e.token,value:M.begin[0]}};ti(e,x),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:se.type,value:se,pathCollection:[]},e;t=yt(t,void 0,!0);for(let x=0;x<r.length;x++){let N=r[x],{env:P}=Pe({env:t,variable:N});t=P}let s=o[o.length-1],l,u=!1;for(let x=0;x<o.length;x++){let N=o[x];if(X(N)&&Kt(N,M.return)||I(N)&&T(N,M.return)){if(x!==o.length-1&&!(x===o.length-2&&$s(o[o.length-1])))throw d({token:N.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(I(N)&&Ge(N,M.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:N.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=N,X(N)){N.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:Ii("return")},s=N;break}else{Ge(N,M.return,1);let P=N.args[0],R=U({expr:P,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!R.$)throw d({token:P.token,errorMessage:`Return expression is not evaluated correctly:
151
+ Given: "${D(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function Yl(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?Ut(c.type)?a.push(c):z(c.type)&&c.type.isEffectsRow&&s.push(c):o.push(c);if(s.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${s.map(c=>c.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let l=[];for(let c of t)c.isEffectRowSpread?Ut(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let _=0;_<l.length;_++)if(!u.has(_)&&c.type.id===l[_].type.id){let{expectedEnv:f,givenEnv:p}=It({type:c.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=f,r.env=p,u.add(_);break}for(let c of a){let _=c.type.implicitParameters;for(let f of _)for(let p=0;p<l.length;p++)if(!u.has(p)&&f.type.id===l[p].type.id){let{expectedEnv:m,givenEnv:y}=It({type:f.type,env:n.env},{type:l[p].type,env:r.env},i);n.env=m,r.env=y,u.add(p);break}}if(s.length===1){let c=s[0],_=[];for(let f=0;f<l.length;f++)u.has(f)||_.push(l[f]);if(z(c.type)&&c.type.isEffectsRow){let f=yi(_),p=ye(f),m=_e(n.env,c.type.name),y=m[m.length-1];if(y)n.env=vt(n.env,y,{...y,value:[p]});else{let{env:g}=Pe({env:n.env,variable:{name:c.type.name,value:[p],type:p.type,isCompileTimeOnly:!0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=g}}}}function Hl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Nr(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=Nr(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function jl(e){let t=[];for(let n of e)n.isEffectRowSpread&&Ut(n.type)?t.push(...jl(n.type.implicitParameters)):(n.isEffectRowSpread&&z(n.type)&&n.type.isEffectsRow,t.push(n));return t}function ae(e,t,n=!1,r=new Set){var a,s;let i=e.type.id,o=t.type.id;if(i&&o&&(xe(e.type)||ze(e.type)||Pt(e.type))&&(xe(t.type)||ze(t.type)||Pt(t.type))){let l=`${i}:${o}`;if(r.has(l))return!0;r.add(l)}if(ua(e.type)&&ua(t.type))return e.type.tag===t.type.tag;if((rn(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"||Or(e.type))&&rn(t.type))return!(n&&!rn(e.type));if((Tn(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Tn(t.type))return!(n&&!Tn(e.type));if((ln(e.type)||Lt(e.type)&&Mr(e.type.childType)||tt(e.type)&&(Mr(e.type.childType)||ho(e.type.childType))||ui(e.type)&&e.type.typeName==="str")&&ln(t.type))return!0;if(Or(e.type)&&Or(t.type))return e.type.tag===t.type.tag;if(yn(e.type)&&yn(t.type))return!0;if(En(e.type)&&En(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Xe(e.type)&&Xe(t.type))return gn({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Lt(e.type)&&Lt(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Qe(e.type)&&Qe(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(!ae({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(xe(e.type)&&xe(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ze(e.type)&&!Ze(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 l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ae({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(ze(e.type)&&ze(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],c=t.type.variants[l];if(u.name!==c.name||((a=u.fields)==null?void 0:a.length)!==((s=c.fields)==null?void 0:s.length))return!1;if(u.fields)for(let _=0;_<u.fields.length;_++){let f=u.fields[_],p=c.fields[_];if(f.label!==p.label||!ae({type:f.type,env:e.env},{type:p.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(Pt(e.type)&&Pt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ze(e.type)&&!Ze(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],c=t.type.fields[l];if(u.label!==c.label||!ae({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(We(e.type)&&We(t.type)){for(let l of e.type.fields){let u=t.type.fields.find(c=>c.label===l.label);if(!u||!ae({type:l.type,env:e.env},{type:u.type,env:t.env},n,r))return!1}return!0}if(st(e.type)){if(st(t.type)){if(fn(e.type))return!(!fn(t.type)||!Nc({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(Rn(e.type)){if(!Rn(t.type)||!ae({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let l=jl(e.type.isFuture.effects),u=jl(t.type.isFuture.effects);if(l.length>0&&u.length>0){if(l.length!==u.length)return!1;let c=new Set;for(let _ of l){let f=!1;for(let p=0;p<u.length;p++)if(!c.has(p)&&ae({type:_.type,env:e.env},{type:u[p].type,env:t.env},n,r)){c.add(p),f=!0;break}if(!f)return!1}}return!0}return e.type.id===t.type.id}return bt(t.type)&&t.type.baseType&&t.type.baseType.trait&&st(e.type)?ae({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(J(e.type)&&J(t.type))return Nc({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(bt(e.type)&&bt(t.type))return Ic(e.type,t.type);if(tt(e.type)&&tt(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(pn(e.type)&&pn(t.type))return ae({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(cn(e.type)&&cn(t.type))return ae({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(Ke(e.type)&&Ke(t.type)){for(let{traitType:l}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:c})=>ae({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1;if(e.type.negativeTraits&&e.type.negativeTraits.length>0){for(let{traitType:l}of e.type.negativeTraits)if(t.type.requiredTraits.find(({traitType:c})=>ae({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1}return!0}if(z(e.type)){if(Ke(t.type))return!0;if(z(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?ae({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=Hl(e.env,e.type),u=Hl(t.env,t.type);if(n&&l.length!==u.length)return!1;for(let _ of l)if(!u.find(p=>ae({type:_,env:e.env},{type:p,env:t.env},n,r)))return!1;let c=Sc(e.env,e.type);if(c.length>0){for(let _ of c)if(u.find(p=>ae({type:_,env:e.env},{type:p,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!ae({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 ae({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let l=Hl(e.env,e.type);if(l.length===0)return!n;if(l.length>0){for(let f of l)if(!vn({targetType:t.type,traitType:f,env:e.env}))break;let c=Sc(e.env,e.type);if(c.length>0){for(let f of c)if(vn({targetType:t.type,traitType:f,env:e.env}))return!1}let _=!0;for(let f of l)if(!vn({targetType:t.type,traitType:f,env:e.env})){_=!1;break}if(_)return!0}let u=kn(e.env,e.type);return e.type===u?!1:ae({type:u,env:e.env},t,n,r)}}else if(z(t.type)){if(t.type.resolvedConcreteType&&ae(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=kn(t.env,t.type);return t.type===l?!1:ae(e,{type:l,env:t.env},n,r)}return!1}function Nc(e,t,n=!1){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:i,givenEnv:o}=It({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=i,t.env=o}catch{return!1}for(let i=0;i<e.type.forallParameters.length;i++){let o=e.type.forallParameters[i],a=t.type.forallParameters[i];if(!ae({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let i=0;i<e.type.parameters.length;i++){let o=e.type.parameters[i],a=t.type.parameters[i];if(o.isCompileTimeOnly!==a.isCompileTimeOnly||!ae({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return ae({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function gs(e){var t;return T(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||I(e)&&I(e.func)&&(T(e.func,M.fn)||T(e.func,M.unsafe_fn)||T(e.func,M.Fn))||!e.$):!1}function hs(e,t){if(!I(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(I(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Ur(e){var t,n,r;if(X(e))return Kt(e,M.escape);if(I(e)){if((t=e.$)!=null&&t.macroExpansion)return Ur(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Ur);if(gs(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&J(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Ur(e.func))return!0;for(let i of e.args)if(Ur(i))return!0}return!1}function Po(e){var t,n,r;if(X(e))return Kt(e,M.return)||Kt(e,M.escape);if(I(e)){if(T(e,M.return)||T(e,M.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Po(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Po);if(gs(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&J(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Po(e.func))return!0;for(let i of e.args)if(Po(i))return!0}return!1}function Xn(e){var t,n,r,i,o,a,s;if(I(e)){if(((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await")return!0;if((r=e.$)!=null&&r.macroExpansion)return Xn(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Xn);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||gs(e)||W((a=e.func.$)==null?void 0:a.value)&&J(e.func.$.value.value)||I(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Xn(e.func))return!0;for(let l of e.args)if(Xn(l))return!0}return!1}function Uo(e){var t,n,r;if(X(e))return Kt(e,M.break)||Kt(e,M.return)||Kt(e,M.escape);if(I(e)){if(T(e,M.return)||T(e,M.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Uo(e.$.macroExpansion);if(T(e,M.cond)||T(e,M.match))return hs(e,Uo);if(gs(e)||I(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&J(e.func.$.value.value)||I(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&Nn(e.func.$.value.value))return!1;if(Uo(e.func))return!0;for(let i of e.args)if(Uo(i))return!0}return!1}var se={tag:"Unit",type:$r()};function La(e){if(e&&e.tag==="FnCall"&&T(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=_e(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function vs(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(ri(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)ri(s,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function ri(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,_=_e(e.$.env,u);if(_.length>0){let f=_[_.length-1];if(f&&!n.has(f.id)&&!f.isCompileTimeOnly){let p=`${f.name}:${f.frameLevel}`,m=r.get(p);if(m&&m!==f.id)i.set(f.id,m);else if(f.isOwningTheSameRcValueAs){let y=f.isOwningTheSameRcValueAs;if(!n.has(y.id)){let g={id:y.id,name:y.name,type:y.type,isOwningTheSameRcValueAs:void 0};n.set(y.id,g);let h=`${y.name}:${y.frameLevel}`;r.has(h)||r.set(h,y.id)}}else n.set(f.id,{id:f.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(p)||r.set(p,f.id)}}}break;case"FnCall":{if(T(e,M.while)){let u=t.length;ri(e.func,t,n,r,i,o,e);for(let _ of e.args)ri(_,t,n,r,i,o,e);let c=t.length;if(c>u)for(let _=u;_<c;_++)t[_].isInsideWhile=!0,t[_].whileNestingDepth=(t[_].whileNestingDepth??0)+1,t[_].enclosingWhileExpr||(t[_].enclosingWhileExpr=e);break}if(T(e,M.cond)){Vc(e,t,n,r,i,o);break}if(T(e,M.match)){Vc(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)ri(u,t,n,r,i,o,e);break}ri(e.func,t,n,r,i,o,e);for(let u of e.args)ri(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)ri(u,t,n,r,i,o,e);break}}}function Vc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;ri(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let _=t.length;ri(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 f;for(let p of l)if(_<p.length){f=p[_];break}f&&(f.index=t.length,f.isInsideCond=!0,_===0&&(f.needsOwnCondBranchField=!0),_>0&&(f.condBranchSourceIndex=c),t.push(f))}}}function xc(e){let n=vs(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&er(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&je(u)){let c=Cn(u);if(!c)return;let _=c.isFuture.outputType,f;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let m=l.token.value,y=_e(l.$.env,m);if(y.length>0){let g=y[y.length-1];g.isOwningTheSameRcValueAs?f=g.isOwningTheSameRcValueAs.id:f=g.id}}let p=La(o);a.push({index:a.length,expr:i,resultType:_,futureType:c,targetVariableId:p,futureVariableId:f})}}},shouldSkipBody(i){return wn(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 wn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_async"}function er(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await"}function Dc(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_state"}function Ts(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_spawn"}function Mc(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="join_handle_await"}function kt(e){return X(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Aa(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=_e(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 Si(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else X(e)&&(n=e.token.value);if(n){let o=_e(t,n),a=o[o.length-1];if(a!=null&&a.isImplicit)throw d({token:e.token,errorMessage:`Cannot use implicit variable "${a.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Es=!0;function Oc({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=On(`${F.___drop[0]}(${o.name})`),s=U({expr:a,env:i,context:{...n,expectedType:{env:i,type:se.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Ia(e,t,n){var s,l;if(I(e)&&wn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)Ia(u,t,n);if(I(e)&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[0])&&X(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=_e(e.$.env,u);if(c.length>0){let _=c[c.length-1];t.has(_.id)||t.set(_.id,[]),t.get(_.id).push(e)}return}if(I(e)&&T(e,M.while))return;function i(u){var c,_;if(Ot((c=u.$)==null?void 0:c.controlFlow))return!0;if(I(u)&&T(u,M.begin)){let f=u.args[u.args.length-1];if(Ot((_=f==null?void 0:f.$)==null?void 0:_.controlFlow)||I(f)&&T(f,M.return))return!0}return!!(I(u)&&T(u,M.return))}function o(u){if(I(u)&&T(u,M.tuple,0))return!0;if(I(u)&&T(u,M.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(I(c)&&T(c,M.tuple,0))return!0}}return!1}function a(u,c){let _=[],f=[],p=[];for(let y=c;y<u.args.length;y++){let g=u.args[y];if(I(g)&&T(g,"=>",2)){let h=g.args[1],v=Rc(h);_.push(v),f.push(i(h)),p.push(o(h))}}let m=new Set;for(let y of _){for(let g of y.dupCalls.keys())m.add(g);for(let g of y.varsWithPartialBranchDups)n.add(g)}if(_.length>0)for(let y of m){let g=[],h=[];for(let v=0;v<_.length;v++){let $=_[v],E=$.dupCalls.has(y),C=f[v];if(E){let w=$.dupCalls.get(y);C?g.push(...w):h.push(...w)}}for(let v of g)t.has(y)||t.set(y,[]),v.__isEarlyReturnDup=!0,t.get(y).push(v);if(h.length>0){let v=0,$=0;for(let E=0;E<_.length;E++)f[E]||(v++,_[E].dupCalls.has(y)&&$++);if($===v){t.has(y)||t.set(y,[]);for(let E of h)t.get(y).push(E)}else n.add(y)}}}if(I(e)&&T(e,M.cond)){a(e,0);return}if(I(e)&&T(e,M.match)){e.args[0]&&Ia(e.args[0],t,n),a(e,1);return}if(I(e)){Ia(e.func,t,n);for(let u of e.args)Ia(u,t,n)}}function Rc(e){let t=new Map,n=new Set;return Ia(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function $s(e){return I(e)&&T(e,M.tuple,0)}function Kl(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),I(e)){Kl(e.func,t);for(let r of e.args)Kl(r,t)}}function nn({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var E,C,w,b,k,A,S,V,O;if(I(e)&&T(e,"_")&&!T(e,M.begin)){let x=e;x.args.some(P=>I(P)&&T(P,":"))||(x.func={...x.func,token:{...x.func.token,value:M.begin[0]}})}if(!I(e)||!T(e,M.begin)){let x={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:M.begin[0]}},args:[et(e)],token:{...e.token,value:M.begin[0]}};ti(e,x),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:se.type,value:se,pathCollection:[]},e;t=yt(t,void 0,!0);for(let x=0;x<r.length;x++){let N=r[x],{env:P}=Pe({env:t,variable:N});t=P}let s=o[o.length-1],l,u=!1;for(let x=0;x<o.length;x++){let N=o[x];if(X(N)&&Kt(N,M.return)||I(N)&&T(N,M.return)){if(x!==o.length-1&&!(x===o.length-2&&$s(o[o.length-1])))throw d({token:N.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(I(N)&&Ge(N,M.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:N.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=N,X(N)){N.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:Ii("return")},s=N;break}else{Ge(N,M.return,1);let P=N.args[0],R=U({expr:P,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!R.$)throw d({token:P.token,errorMessage:`Return expression is not evaluated correctly:
152
152
  ${L(P)}`});if(((E=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:E.kind)==="function-body"&&z(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let H=R.$.type;if(n.functionReturnImplConcreteType.length>0){let G=n.functionReturnImplConcreteType[0];if(!ae({type:G.concreteType,env:G.env},{type:H,env:t}))throw Wt([{token:N.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
153
153
  Impl(...) uses static dispatch and requires the same concrete type across all returns.
154
154
  Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:G.token,errorMessage:`First return has concrete type: ${D(G.concreteType)}`},{token:N.token,errorMessage:`Conflicting return has concrete type: ${D(H)}`}])}else n.functionReturnImplConcreteType.push({concreteType:H,env:t,token:N.token})}Tt(R,!0),t=R.$.env,N.$={env:t,type:R.$.type,value:R.$.value,pathCollection:R.$.pathCollection,variableName:R.$.variableName,controlFlow:Ii("return")},s=N;break}}else if(X(N)&&Kt(N,M.break)){if(x!==o.length-1&&!(x===o.length-2&&$s(o[o.length-1])))throw d({token:N.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw d({token:N.token,errorMessage:'The "break" keyword can only be used inside a loop.'});N.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:Ii("break")},s=N;break}else if(X(N)&&Kt(N,M.continue)){if(x!==o.length-1&&!(x===o.length-2&&$s(o[o.length-1])))throw d({token:N.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw d({token:N.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});N.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:Ii("continue")},s=N;break}else if(I(N)&&T(N,M.escape)){if(x!==o.length-1&&!(x===o.length-2&&$s(o[o.length-1])))throw d({token:N.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw d({token:N.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=N,Ge(N,M.escape,1);let P=N.args[0],R=U({expr:P,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!R.$)throw d({token:P.token,errorMessage:`Escape expression is not evaluated correctly:
@@ -164,39 +164,40 @@ ${L(h)}`});v=h.token.value,$=v}else if(I(h)&&T(h,":",2)){let b=h.args[0],k=h.arg
164
164
  ${L(b)}`});if(!kt(b))throw d({token:b.token,errorMessage:`Expected identifier for export, got:
165
165
  ${L(b)}`});if(v=b.token.value,!X(k))throw d({token:k.token,errorMessage:`Expected identifier for export, got:
166
166
  ${L(k)}`});if(!kt(k))throw d({token:k.token,errorMessage:`Expected identifier for export, got:
167
- ${L(k)}`});$=k.token.value}let E=_e(t,$);if(E.length===0)throw d({token:h.token,errorMessage:`Variable "${$}" is not defined in the module.`});let C=E[E.length-1];if(i.fields.findIndex(b=>b.label===$)>=0)throw d({token:h.token,errorMessage:`Variable "${$}" is already exported in the module.`});if(!C.isCompileTimeOnly)throw d({token:h.token,errorMessage:`Variable "${$}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:v,type:C.type,assignedValue:C.isCompileTimeOnly?(l=C.value)==null?void 0:l[0]:void 0,defaultValue:void 0,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),o.push((u=C.value)==null?void 0:u[0]),h.$={env:t,type:C.type,value:(c=C.value)==null?void 0:c[0],pathCollection:[]}}}}else{let y=U({expr:m,env:t,context:{...n,expectedType:void 0}});(_=y.$)!=null&&_.env&&(t=(f=y.$)==null?void 0:f.env)}}catch(y){if(r){a=y;break}else throw y}}try{a||(t=Yt(t))}catch(p){if(r)a=p;else throw p}return{moduleValue:rs({...i},o),moduleType:i,env:t,partialModuleError:a}}function bs({functionType:e,specializedEnv:t,SelfType:n}){var u;let r=e.parameters.map(c=>{var p;if(!c.exprs.typeExpr)return c;let _=et(c.exprs.typeExpr),f=U({expr:_,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return W((p=f.$)==null?void 0:p.value)?{...c,type:f.$.value.value,exprs:{...c.exprs}}:c}),i=e.return.type,o=et(e.return.typeExpr),a=U({expr:o,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});W((u=a.$)==null?void 0:u.value)&&(i=a.$.value.value);let s=e.SelfType;n&&(s=n);let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(c=>{let _=r.find(p=>p.label===c.name),f=_?_.type:c.type;return f!==c.type?{...c,type:f}:c})};return{...e,env:t,forallParameters:[],parameters:r,parametersFrame:l,return:{...e.return,type:i},SelfType:s}}var Sa=new Map;function og({traitExpr:e,traitType:t}){if(!e||!I(e))return{};let n=e.func;if(I(n)){let r=n.args.map(o=>et(o)),i;if(t.functionValue&&J(t.functionValue.type)){let o=t.functionValue.type;o.parameters.length>0?i=o.parameters.map(a=>a.label):o.forallParameters.length>0&&(i=o.forallParameters.map(a=>a.label))}return{traitTypeArgExprs:r,traitFunctionParamNames:i}}if(!t.functionValue){let r=[],i=[];for(let o of e.args)if(I(o)&&T(o,":",2)){let a=o.args[0],s=o.args[1];if(X(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!J(u.type)&&(r.push(et(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function Pc({fieldExprs:e,env:t,context:n,receiverType:r}){var u;let i=[],o=ut(t),a=[],s=!1,l=r==null?void 0:r.trait;r!=null&&r.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=yt(t);for(let c of e){if(I(c)&&T(c,M.begin))throw d({token:c.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(I(c)&&(T(c,"::",2)||T(c,":=",2)))throw d({token:c.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(I(c)&&T(c,":",2)){let f=c.args[0],p=c.args[1];if(!X(f)||!kt(f))throw d({token:f.token,errorMessage:`Expected identifier for impl field name, got:
167
+ ${L(k)}`});$=k.token.value}let E=_e(t,$);if(E.length===0)throw d({token:h.token,errorMessage:`Variable "${$}" is not defined in the module.`});let C=E[E.length-1];if(i.fields.findIndex(b=>b.label===$)>=0)throw d({token:h.token,errorMessage:`Variable "${$}" is already exported in the module.`});if(!C.isCompileTimeOnly)throw d({token:h.token,errorMessage:`Variable "${$}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:v,type:C.type,assignedValue:C.isCompileTimeOnly?(l=C.value)==null?void 0:l[0]:void 0,defaultValue:void 0,exprs:{expr:h,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),o.push((u=C.value)==null?void 0:u[0]),h.$={env:t,type:C.type,value:(c=C.value)==null?void 0:c[0],pathCollection:[]}}}}else{let y=U({expr:m,env:t,context:{...n,expectedType:void 0}});(_=y.$)!=null&&_.env&&(t=(f=y.$)==null?void 0:f.env)}}catch(y){if(r){a=y;break}else throw y}}try{a||(t=Yt(t))}catch(p){if(r)a=p;else throw p}return{moduleValue:rs({...i},o),moduleType:i,env:t,partialModuleError:a}}function bs({functionType:e,specializedEnv:t,SelfType:n}){var u;let r=e.parameters.map(c=>{var p;if(!c.exprs.typeExpr)return c;let _=et(c.exprs.typeExpr),f=U({expr:_,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return W((p=f.$)==null?void 0:p.value)?{...c,type:f.$.value.value,exprs:{...c.exprs}}:c}),i=e.return.type,o=et(e.return.typeExpr),a=U({expr:o,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});W((u=a.$)==null?void 0:u.value)&&(i=a.$.value.value);let s=e.SelfType;n&&(s=n);let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(c=>{let _=r.find(p=>p.label===c.name),f=_?_.type:c.type;return f!==c.type?{...c,type:f}:c})};return{...e,env:t,forallParameters:[],parameters:r,parametersFrame:l,return:{...e.return,type:i},SelfType:s}}var Sa=new Map;function ag({traitExpr:e,traitType:t}){if(!e||!I(e))return{};let n=e.func;if(I(n)){let r=n.args.map(o=>et(o)),i;if(t.functionValue&&J(t.functionValue.type)){let o=t.functionValue.type;o.parameters.length>0?i=o.parameters.map(a=>a.label):o.forallParameters.length>0&&(i=o.forallParameters.map(a=>a.label))}return{traitTypeArgExprs:r,traitFunctionParamNames:i}}if(!t.functionValue){let r=[],i=[];for(let o of e.args)if(I(o)&&T(o,":",2)){let a=o.args[0],s=o.args[1];if(X(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!J(u.type)&&(r.push(et(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function Pc({fieldExprs:e,env:t,context:n,receiverType:r}){var u;let i=[],o=ut(t),a=[],s=!1,l=r==null?void 0:r.trait;r!=null&&r.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=yt(t);for(let c of e){if(I(c)&&T(c,M.begin))throw d({token:c.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(I(c)&&(T(c,"::",2)||T(c,":=",2)))throw d({token:c.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(I(c)&&T(c,":",2)){let f=c.args[0],p=c.args[1];if(!X(f)||!kt(f))throw d({token:f.token,errorMessage:`Expected identifier for impl field name, got:
168
168
  ${L(f)}`});let m=f.token.value,y=U({expr:p,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!((u=y.$)!=null&&u.type))throw d({token:p.token,errorMessage:`Failed to evaluate impl field value for "${m}".`});t=y.$.env;let g=y.$.type,h=y.$.value;if(!h)throw d({token:p.token,errorMessage:`impl field "${m}" must be a compile-time value.`});Ce(h)&&!h.funcName&&(h.funcName=m,h.funcId+=`_${m}`);let{env:v}=Pe({env:t,variable:{name:m,type:g,isCompileTimeOnly:!0,value:[h],token:f.token,initializedAtToken:f.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=v,o.fields.push({label:m,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:c}}),a.push(h),s=!0,r!=null&&r.trait&&r.trait.fields.push({label:m,type:g,assignedValue:h,defaultValue:void 0,exprs:{expr:c}});continue}let _=U({expr:c,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!_.$||!on(_.$.value))throw d({token:c.token,errorMessage:`Expected trait value in impl field list, got:
169
- ${L(c)}`});t=_.$.env,i.push({traitValue:_.$.value,sourceExpr:c,isAnonymousTrait:!1})}if(t=Yt(t),r&&(r.trait=l),s){let c=To({...o,receiverType:r},a);i.unshift({traitValue:c,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var zr=new Map,io=new Map;function Bo(e){for(let[t,n]of zr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?zr.delete(t):zr.set(t,r)}}function ag(e){for(let[t,n]of io.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?io.delete(t):io.set(t,r)}}function ws(){Sa.clear(),zr.clear(),io.clear()}function ks(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function Uc(e){if("functionValue"in e){let t=e.functionValue;if(t)return t.funcId}return e.id}function zc(e,t){if(!t.traitType.typeName){let r=t.traitType.fields.filter(i=>i.label&&J(i.type)).map(i=>i.label);if(r.length>0){let i=Uc(t.receiverTypePattern);if(i){for(let[o,a]of zr.entries())for(let s of a)if(!(s.traitType.typeName||Uc(s.receiverTypePattern)!==i)){for(let u of s.traitType.fields)if(u.label&&J(u.type)&&r.includes(u.label))throw d({token:t.expr.token,errorMessage:`Method "${u.label}" is already defined for type "${D(t.receiverTypePattern)}".
170
- Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${u.label}") for the comptime variant.`})}}}}let n=zr.get(e);n||(n=[],zr.set(e,n)),n.push(t)}function sg({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(io.get(i)||[]).find(s=>s.traitTypeId===t.id);if(a)throw d({token:r.token,errorMessage:`Trait "${t.typeName??t.id}" is already implemented for type "${D(e)}".
171
- First implementation was in: ${a.modulePath||"unknown"}`})}function lg({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=io.get(i);o||(o=[],io.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function ug({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 d({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign trait "${t.typeName??t.id}" for foreign type "${D(e)}".
169
+ ${L(c)}`});t=_.$.env,i.push({traitValue:_.$.value,sourceExpr:c,isAnonymousTrait:!1})}if(t=Yt(t),r&&(r.trait=l),s){let c=To({...o,receiverType:r},a);i.unshift({traitValue:c,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var zr=new Map,io=new Map;function Bo(e){for(let[t,n]of zr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?zr.delete(t):zr.set(t,r)}}function sg(e){for(let[t,n]of io.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?io.delete(t):io.set(t,r)}}function ws(){Sa.clear(),zr.clear(),io.clear()}function ks(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function Uc(e){if("functionValue"in e){let t=e.functionValue;if(t)return t.funcId}return e.id}function zc(e,t){if(!t.traitType.typeName){let r=t.traitType.fields.filter(i=>i.label&&J(i.type)).map(i=>i.label);if(r.length>0){let i=Uc(t.receiverTypePattern);if(i){for(let[o,a]of zr.entries())for(let s of a)if(!(s.traitType.typeName||Uc(s.receiverTypePattern)!==i)){for(let u of s.traitType.fields)if(u.label&&J(u.type)&&r.includes(u.label))throw d({token:t.expr.token,errorMessage:`Method "${u.label}" is already defined for type "${D(t.receiverTypePattern)}".
170
+ Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${u.label}") for the comptime variant.`})}}}}let n=zr.get(e);n||(n=[],zr.set(e,n)),n.push(t)}function lg({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(io.get(i)||[]).find(s=>s.traitTypeId===t.id);if(a)throw d({token:r.token,errorMessage:`Trait "${t.typeName??t.id}" is already implemented for type "${D(e)}".
171
+ First implementation was in: ${a.modulePath||"unknown"}`})}function ug({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=io.get(i);o||(o=[],io.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function cg({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 d({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign trait "${t.typeName??t.id}" for foreign type "${D(e)}".
172
172
  At least one of the trait or the type must be defined in this module.
173
173
  Trait defined in: ${t.definedInModulePath||"unknown"}
174
174
  Type defined in: ${e.definedInModulePath||"unknown"}
175
- Current module: ${n}`})}function Fs({concreteType:e,traitType:t,env:n}){let r=ks(t),i=zr.get(r);if(!(!i||i.length===0)){for(let o of i)if(As({concreteType:e,impl:o,env:n}).matched)return o}}function Br({concreteType:e,methodName:t,env:n}){if(z(e)){let i=kn(n,e);z(i)||(e=i)}let r=[];for(let[i,o]of zr.entries())for(let a of o){let s=As({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(_=>_.label===t&&J(_.type));if(c>=0){let _=l.fields[c];if(J(_.type)){let f=u.fields[c],p=_i(e);if(Ce(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!p){let y=a.definitionEnv,g=yt(y);for(let[C,w]of s.substitutions){let{env:b}=Pe({env:g,variable:{name:C,type:Mt(),isCompileTimeOnly:!0,value:[ye(w)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=b}for(let[C,w]of s.valueSubstitutions){let{env:b}=Pe({env:g,variable:{name:C,type:w.type,isCompileTimeOnly:!0,value:[w],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=b}if(a.traitTypeArgExprs&&a.traitFunctionParamNames&&a.traitTypeArgExprs.length===a.traitFunctionParamNames.length)for(let C=0;C<a.traitTypeArgExprs.length;C++){let w=a.traitTypeArgExprs[C],b=a.traitFunctionParamNames[C],k=U({expr:et(w),env:g,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(k.$&&W(k.$.value)){let{env:A}=Pe({env:g,variable:{name:b,type:Mt(),isCompileTimeOnly:!0,value:[k.$.value],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});g=A}}let h=bs({functionType:_.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});g=yt(g,h.parametersFrame);let v=et(f.body),$=nn({expr:v,env:g,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:h.return.type,env:g},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:h,value:f,evaluationEnv:g},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),E={...f,specializedType:h,body:$,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([C,w])=>`${C}_${D(w)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([C,w])=>`${C}_${lt(w)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};r.push({type:h,value:E})}else if(p){let y=a.definitionEnv,g=yt(y);for(let[v,$]of s.substitutions){let{env:E}=Pe({env:g,variable:{name:v,type:Mt(),isCompileTimeOnly:!0,value:[ye($)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}for(let[v,$]of s.valueSubstitutions){let{env:E}=Pe({env:g,variable:{name:v,type:$.type,isCompileTimeOnly:!0,value:[$],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}let h=bs({functionType:_.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});r.push({type:h,value:void 0})}else if(Ce(f)){let y={...f,specializedType:_.type};r.push({type:_.type,value:y})}else if(!Ce(f)&&(s.substitutions.size>0||s.valueSubstitutions.size>0)){let y=a.definitionEnv,g=yt(y);for(let[v,$]of s.substitutions){let{env:E}=Pe({env:g,variable:{name:v,type:Mt(),isCompileTimeOnly:!0,value:[ye($)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}for(let[v,$]of s.valueSubstitutions){let{env:E}=Pe({env:g,variable:{name:v,type:$.type,isCompileTimeOnly:!0,value:[$],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}let h=bs({functionType:_.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});r.push({type:h,value:f})}else r.push({type:_.type,value:f})}}}return r}function Ls({concreteType:e,propertyName:t,env:n}){if(z(e)){let r=kn(n,e);z(r)||(e=r)}for(let[r,i]of zr.entries())for(let o of i){let a;try{a=As({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(_=>_.label===t&&!J(_.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let _=o.definitionEnv,f=yt(_);for(let[p,m]of a.substitutions){let{env:y}=Pe({env:f,variable:{name:p,type:Mt(),isCompileTimeOnly:!0,value:[ye(m)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});f=y}for(let p=0;p<o.traitTypeArgExprs.length;p++){let m=o.traitTypeArgExprs[p];if(o.traitFunctionParamNames[p]===t)try{let g=et(m),h=U({expr:g,env:f,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(h.$&&W(h.$.value))return{type:h.$.value.type,value:h.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!W(c))){if(!z(c.value))return{type:c.type,value:c};for(let _ of o.forallParameters)if(_.kind==="type"&&_.someType===c.value){let f=a.substitutions.get(_.name);if(f){let p=ye(f);return{type:p.type,value:p}}}}}}function Gc({concreteType:e,traitType:t,methodName:n,env:r}){let i=ks(t),o=zr.get(i);if(!(!o||o.length===0))for(let a of o){let s=As({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(_=>_.label===n&&J(_.type));if(c>=0){let _=l.fields[c];if(J(_.type)){let f=u.fields[c];if(Ce(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let p=a.definitionEnv,m=yt(p);for(let[$,E]of s.substitutions){let{env:C}=Pe({env:m,variable:{name:$,type:Mt(),isCompileTimeOnly:!0,value:[ye(E)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});m=C}for(let[$,E]of s.valueSubstitutions){let{env:C}=Pe({env:m,variable:{name:$,type:E.type,isCompileTimeOnly:!0,value:[E],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});m=C}let y=bs({functionType:_.type,specializedEnv:m,SelfType:s.substitutions.get("Self")});m=yt(m,y.parametersFrame);let g=et(f.body),h=nn({expr:g,env:m,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:m},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:f,evaluationEnv:m},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...f,specializedType:y,body:h,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([$,E])=>`${$}_${D(E)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([$,E])=>`${$}_${lt(E)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};return{type:y,value:v}}else if(Ce(f)){let p={...f,specializedType:_.type};return{type:_.type,value:p}}else return{type:_.type,value:f}}}}}function As({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(z(e)){let o=kn(n,e);if(z(o))return r;e=o}let i=yt(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=Pe({env:i,variable:{name:o.name,type:Mt(),isCompileTimeOnly:!0,value:[ye(o.someType)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=Pe({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=It({type:t.receiverTypePattern,env:i},{type:e,env:n});for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let _=Bc(o,l);if(!_)return r;let f=u;if(c)try{let p=et(c),m=U({expr:p,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});m.$&&W(m.$.value)&&st(m.$.value.value)&&(f=m.$.value.value)}catch{}if(f.isNegatedConstraint){if(z(_)){if(!_g(_,f,n))return r;continue}if(vn({targetType:_,traitType:f,env:n}))return r;continue}if(z(_)){if(!cg(_,f,n))return r;continue}if(!vn({targetType:_,traitType:f,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=Bc(o,l.someType);u&&!z(u)&&a.set(l.name,u)}else{let u=_e(o,l.name),c=u[u.length-1];if(c&&c.value&&!Oe(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 cg(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=Nr(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(on(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function _g(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=Nr(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function fg({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(vn({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 d({token:i,errorMessage:`Generic impl receiver type "${D(e)}" does not satisfy constraint "${o.typeName??D(o)}" required by trait "${t.typeName??D(t)}".
175
+ Current module: ${n}`})}function Fs({concreteType:e,traitType:t,env:n}){let r=ks(t),i=zr.get(r);if(!(!i||i.length===0)){for(let o of i)if(As({concreteType:e,impl:o,env:n}).matched)return o}}function Br({concreteType:e,methodName:t,env:n}){if(z(e)){let i=kn(n,e);z(i)||(e=i)}let r=[];for(let[i,o]of zr.entries())for(let a of o){let s=As({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(_=>_.label===t&&J(_.type));if(c>=0){let _=l.fields[c];if(J(_.type)){let f=u.fields[c],p=_i(e);if(Ce(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!p){let y=a.definitionEnv,g=yt(y);for(let[C,w]of s.substitutions){let{env:b}=Pe({env:g,variable:{name:C,type:Mt(),isCompileTimeOnly:!0,value:[ye(w)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=b}for(let[C,w]of s.valueSubstitutions){let{env:b}=Pe({env:g,variable:{name:C,type:w.type,isCompileTimeOnly:!0,value:[w],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=b}if(a.traitTypeArgExprs&&a.traitFunctionParamNames&&a.traitTypeArgExprs.length===a.traitFunctionParamNames.length)for(let C=0;C<a.traitTypeArgExprs.length;C++){let w=a.traitTypeArgExprs[C],b=a.traitFunctionParamNames[C],k=U({expr:et(w),env:g,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(k.$&&W(k.$.value)){let{env:A}=Pe({env:g,variable:{name:b,type:Mt(),isCompileTimeOnly:!0,value:[k.$.value],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});g=A}}let h=bs({functionType:_.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});g=yt(g,h.parametersFrame);let v=et(f.body),$=nn({expr:v,env:g,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:h.return.type,env:g},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:h,value:f,evaluationEnv:g},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),E={...f,specializedType:h,body:$,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([C,w])=>`${C}_${D(w)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([C,w])=>`${C}_${lt(w)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};r.push({type:h,value:E})}else if(p){let y=a.definitionEnv,g=yt(y);for(let[v,$]of s.substitutions){let{env:E}=Pe({env:g,variable:{name:v,type:Mt(),isCompileTimeOnly:!0,value:[ye($)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}for(let[v,$]of s.valueSubstitutions){let{env:E}=Pe({env:g,variable:{name:v,type:$.type,isCompileTimeOnly:!0,value:[$],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}let h=bs({functionType:_.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});r.push({type:h,value:void 0})}else if(Ce(f)){let y={...f,specializedType:_.type};r.push({type:_.type,value:y})}else if(!Ce(f)&&(s.substitutions.size>0||s.valueSubstitutions.size>0)){let y=a.definitionEnv,g=yt(y);for(let[v,$]of s.substitutions){let{env:E}=Pe({env:g,variable:{name:v,type:Mt(),isCompileTimeOnly:!0,value:[ye($)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}for(let[v,$]of s.valueSubstitutions){let{env:E}=Pe({env:g,variable:{name:v,type:$.type,isCompileTimeOnly:!0,value:[$],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});g=E}let h=bs({functionType:_.type,specializedEnv:g,SelfType:s.substitutions.get("Self")});r.push({type:h,value:f})}else r.push({type:_.type,value:f})}}}return r}function Ls({concreteType:e,propertyName:t,env:n}){if(z(e)){let r=kn(n,e);z(r)||(e=r)}for(let[r,i]of zr.entries())for(let o of i){let a;try{a=As({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(_=>_.label===t&&!J(_.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let _=o.definitionEnv,f=yt(_);for(let[p,m]of a.substitutions){let{env:y}=Pe({env:f,variable:{name:p,type:Mt(),isCompileTimeOnly:!0,value:[ye(m)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});f=y}for(let p=0;p<o.traitTypeArgExprs.length;p++){let m=o.traitTypeArgExprs[p];if(o.traitFunctionParamNames[p]===t)try{let g=et(m),h=U({expr:g,env:f,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(h.$&&W(h.$.value))return{type:h.$.value.type,value:h.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!W(c))){if(!z(c.value))return{type:c.type,value:c};for(let _ of o.forallParameters)if(_.kind==="type"&&_.someType===c.value){let f=a.substitutions.get(_.name);if(f){let p=ye(f);return{type:p.type,value:p}}}}}}function Gc({concreteType:e,traitType:t,methodName:n,env:r}){let i=ks(t),o=zr.get(i);if(!(!o||o.length===0))for(let a of o){let s=As({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(_=>_.label===n&&J(_.type));if(c>=0){let _=l.fields[c];if(J(_.type)){let f=u.fields[c];if(Ce(f)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let p=a.definitionEnv,m=yt(p);for(let[$,E]of s.substitutions){let{env:C}=Pe({env:m,variable:{name:$,type:Mt(),isCompileTimeOnly:!0,value:[ye(E)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});m=C}for(let[$,E]of s.valueSubstitutions){let{env:C}=Pe({env:m,variable:{name:$,type:E.type,isCompileTimeOnly:!0,value:[E],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});m=C}let y=bs({functionType:_.type,specializedEnv:m,SelfType:s.substitutions.get("Self")});m=yt(m,y.parametersFrame);let g=et(f.body),h=nn({expr:g,env:m,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:m},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:f,evaluationEnv:m},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...f,specializedType:y,body:h,funcId:`${f.funcId}_specialized_${[...s.substitutions.entries()].map(([$,E])=>`${$}_${D(E)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([$,E])=>`${$}_${lt(E)}`).join("_")}`,funcName:f.funcName?`${f.funcName}_specialized`:void 0};return{type:y,value:v}}else if(Ce(f)){let p={...f,specializedType:_.type};return{type:_.type,value:p}}else return{type:_.type,value:f}}}}}function As({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(z(e)){let o=kn(n,e);if(z(o))return r;e=o}let i=yt(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=Pe({env:i,variable:{name:o.name,type:Mt(),isCompileTimeOnly:!0,value:[ye(o.someType)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=Pe({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=It({type:t.receiverTypePattern,env:i},{type:e,env:n});for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let _=Bc(o,l);if(!_)return r;let f=u;if(c)try{let p=et(c),m=U({expr:p,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});m.$&&W(m.$.value)&&st(m.$.value.value)&&(f=m.$.value.value)}catch{}if(f.isNegatedConstraint){if(z(_)){if(!fg(_,f,n))return r;continue}if(vn({targetType:_,traitType:f,env:n}))return r;continue}if(z(_)){if(!_g(_,f,n))return r;continue}if(!vn({targetType:_,traitType:f,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=Bc(o,l.someType);u&&!z(u)&&a.set(l.name,u)}else{let u=_e(o,l.name),c=u[u.length-1];if(c&&c.value&&!Oe(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 _g(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=Nr(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(on(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function fg(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=Nr(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function pg({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(vn({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 d({token:i,errorMessage:`Generic impl receiver type "${D(e)}" does not satisfy constraint "${o.typeName??D(o)}" required by trait "${t.typeName??D(t)}".
176
176
  Consider adding "where(T <: ${o.typeName??D(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(vn({targetType:e,traitType:o,env:r}))throw d({token:i,errorMessage:`Generic impl receiver type "${D(e)}" implements "${o.typeName??D(o)}" but trait "${t.typeName??D(t)}" requires it to NOT implement this trait.
177
- Consider adding "where(T <: !(${o.typeName??D(o)}))" to the impl.`})}}function Bc(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&&W(i.value[0]))return i.value[0].value}return t}function Go(e){let t=Sa.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Sa.delete(e),ag(e)}}function pg(e,t){let n=Sa.get(e);n||(n=new Set,Sa.set(e,n)),n.add(t)}function dg(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(ug({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),sg({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),lg({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&pg(n,r.trait),e.type.typeName){let i={label:"",type:ir(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&&J(o.type)&&r.trait.fields.find(u=>u.label===o.label&&J(u.type)))throw d({token:t.token,errorMessage:`Method "${o.label}" is already defined for type "${D(r)}".
177
+ Consider adding "where(T <: !(${o.typeName??D(o)}))" to the impl.`})}}function Bc(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&&W(i.value[0]))return i.value[0].value}return t}function Go(e){let t=Sa.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Sa.delete(e),sg(e)}}function dg(e,t){let n=Sa.get(e);n||(n=new Set,Sa.set(e,n)),n.add(t)}function mg(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(cg({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),lg({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),ug({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&dg(n,r.trait),e.type.typeName){let i={label:"",type:ir(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&&J(o.type)&&r.trait.fields.find(u=>u.label===o.label&&J(u.type)))throw d({token:t.token,errorMessage:`Method "${o.label}" is already defined for type "${D(r)}".
178
178
  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 Wc({expr:e,env:t,context:n}){var E,C;if(!T(e,M.impl))throw d({token:e.token,errorMessage:`Expected "impl", got:
179
- ${L(e)}`});if(e.args.length===1&&I(e.args[0])&&T(e.args[0],M.begin)){let w=e.args[0].args,{moduleType:b,moduleValue:k,env:A}=Cs({beginExprs:w,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=A,e.$={env:t,type:b,value:k,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&I(r[i])&&T(r[i],M.forall)&&(o=r[i],i++),r[i]&&I(r[i])&&T(r[i],M.where)){if(!o)throw d({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 d({token:e.token,errorMessage:"impl requires a receiver type and at least one field."});let s=r[i];if(i++,r[i]&&I(r[i])&&T(r[i],M.where)){if(!o)throw d({token:r[i].token,errorMessage:"impl where(...) requires forall(...) and may appear before or after the receiver type."});if(a)throw d({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 d({token:e.token,errorMessage:"impl requires at least one field after the receiver type."});if(!o){let w=U({expr:s,env:t,context:{...n}});if(!w.$||!w.$.value||!W(w.$.value))throw d({token:s.token,errorMessage:"Expected type for receiver type argument."});t=w.$.env;let b=w.$.value.value,k=Lt(b)||Xe(b),{env:A,traitEntries:S}=Pc({fieldExprs:l,env:t,context:{...n},receiverType:b});if(t=A,S.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let O of S){let x=O.traitValue,N=x.type;if(O.isAnonymousTrait||qc({targetType:b,traitType:N,env:t,errorToken:e.token}),k){let P=ks(N),R={forallParameters:[],whereConstraints:[],receiverTypePattern:b,traitType:N,traitValue:x,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};zc(P,R)}else dg(x,e,n.currentModulePath)}let V=S[0].traitValue;return e.$={env:t,type:V.type,value:V,pathCollection:[]},e}let c=o.args,_=[];t=yt(t);for(let w of c){let b,k;if(I(w)&&T(w,":",2)){let N=w.args[0];if(!X(N))throw d({token:N.token,errorMessage:`Expected identifier for forall parameter name, got: ${L(N)}`});b=N.token.value,k=w.args[1]}else if(X(w))b=w.token.value;else throw d({token:w.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${L(w)}`});let A;if(k){let N=U({expr:k,env:t,context:{...n}});if((E=N.$)!=null&&E.env&&(t=N.$.env),!N.$||!N.$.value||!W(N.$.value))throw d({token:k.token,errorMessage:`Expected type for forall parameter type, got: ${L(k)}`});A=N.$.value.value}let S=!A||qu(A),V=A||Mt(),O=ue(V,{variableName:b,env:t,context:n}),{env:x}=Pe({env:t,variable:{name:b,type:V,isCompileTimeOnly:!0,value:[O],token:w.token,initializedAtToken:w.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=x,S){let N=O.value;_.push({kind:"type",name:b,someType:N})}else _.push({kind:"value",name:b,type:V,unknownValue:O})}let f=new Map;if(a)for(let w of a.args){if(!I(w)||!T(w,"<:",2))throw d({token:w.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${L(w)}`});let b=U({expr:w,env:t,context:{...n,isInsideWhereClause:!0}});(C=b.$)!=null&&C.env&&(t=b.$.env);let k=w.args[0],A=w.args[1],S=U({expr:k,env:t,context:{...n}});if(!S.$||!S.$.value||!W(S.$.value)||!z(S.$.value.value))throw d({token:k.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${L(k)}`});t=S.$.env;let V=[];if(I(A)&&T(A,M.tuple))for(let O of A.args)I(O)&&T(O,"!")&&O.args.length===1?V.push({expr:O.args[0],isNegated:!0}):V.push({expr:O,isNegated:!1});else I(A)&&T(A,"!")&&A.args.length===1?V.push({expr:A.args[0],isNegated:!0}):V.push({expr:A,isNegated:!1});for(let{expr:O}of V){let x=U({expr:O,env:t,context:{...n}});if(!x.$||!x.$.value||!W(x.$.value)||!st(x.$.value.value))throw d({token:O.token,errorMessage:"Expected trait type for right-hand side expression."});t=x.$.env;let N=x.$.value.value;f.set(N.id,et(O))}}let p=[];for(let w of _){if(w.kind!=="type")continue;let{someType:b}=w,k=Nr(t,b);if(k){for(let A of k.requiredTraits)p.push({someType:b,traitType:A,traitExpr:f.get(A.id)});for(let A of k.negativeTraits){let S={...A,isNegatedConstraint:!0};p.push({someType:b,traitType:S,traitExpr:f.get(A.id)})}}}let m=U({expr:s,env:t,context:{...n}});if(!m.$||!m.$.value||!W(m.$.value))throw d({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=m.$.env;let y=m.$.value.value,{env:g,traitEntries:h}=Pc({fieldExprs:l,env:t,context:{...n},receiverType:y});if(t=g,h.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let w of h){let b=w.traitValue,k=b.type;fg({receiverTypePattern:y,traitType:k,whereConstraints:p,env:t,errorToken:e.token});let{traitTypeArgExprs:A,traitFunctionParamNames:S}=w.isAnonymousTrait?{}:og({traitExpr:w.sourceExpr,traitType:k});v.push({traitType:k,traitValue:b,traitTypeArgExprs:A,traitFunctionParamNames:S})}t=Yt(t);for(let w of v){let b=ks(w.traitType),k={forallParameters:_,whereConstraints:p,receiverTypePattern:y,traitType:w.traitType,traitValue:w.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:w.traitTypeArgExprs,traitFunctionParamNames:w.traitFunctionParamNames};zc(b,k)}let $=v[0].traitValue;return e.$={env:t,type:$.type,value:$,pathCollection:[]},e}var Xl=new Set;function Hc(e){if(!e||xe(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(bt(e))return!0}function jc(e){if(!e)return!1;if(xe(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 Yc(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&&W(o.assignedValue)){i=o.assignedValue.value;break}if(o.assignedValue&&on(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&&W(u)&&(i=u.value);break}}if(i)break}}if(!i){let o=Ls({concreteType:e,propertyName:r.label,env:n});o&&W(o.value)&&(i=o.value.value)}if(!i||!ae({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function vn({targetType:e,traitType:t,env:n}){let r=Er(n,"Comptime");if(r&&t.id===r.id){let l=Hc(e);if(l!==void 0)return l}let i=Er(n,"Runtime");if(i&&t.id===i.id){let l=jc(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||!on(l.assignedValue))continue;let c=l.assignedValue.type;if(ae({type:o,env:n},{type:c,env:n})&&Yc(e,t,n))return!0}if(Ke(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(z(e)){let l=!1,u=!1;for(let _ of e.requiredTraits)_.traitType.id===t.id&&(l=!0);let c=Nr(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(z(e)){let l=kn(n,e);if(z(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(Xl.has(s))return!1;Xl.add(s);try{return Fs({concreteType:e,traitType:t,env:n})===void 0?!1:Yc(e,t,n)}finally{Xl.delete(s)}}function qc({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!vn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${D(e)}" does not implement required constraint "${i.typeName??D(i)}" from trait "${t.typeName??D(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(vn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${D(e)}" implements "${i.typeName??D(i)}" but the trait "${t.typeName??D(t)}"'s where clause requires it to NOT implement this trait.`})}}function Pr(e,t){let n=Hc(e);if(n!==void 0)return n;let r=Er(t,"Comptime");return r?vn({targetType:e,traitType:r,env:t}):!1}function mi(e,t){let n=jc(e);if(n!==void 0)return n;let r=Er(t,"Runtime");return r?vn({targetType:e,traitType:r,env:t}):!1}function ka(e,t){if(!e)return!1;let n=Er(t,"Send");return n?vn({targetType:e,traitType:n,env:t}):!1}function Yi(e,t){if(!e)return!1;let n=Er(t,"Acyclic");return n?vn({targetType:e,traitType:n,env:t}):!1}function Zi(e,t){return Pr(e,t)&&!mi(e,t)}function Nn(e){if(!e)return!1;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(_n(t))return!0}return!1}function Gn(e){if(_n(e))return e;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(_n(t))return t}}function je(e){if(!e)return!1;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(Rn(t))return!0}return!1}function Cn(e){if(Rn(e))return e;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(Rn(t))return t}}function ps(e,t,n,r){if(!Ze(e)&&!Pr(e,t)&&!mi(e,t))throw d({token:n,errorMessage:`Type ${D(e)} has incompatible field contexts and cannot be used in any evaluation context.
179
+ ${L(e)}`});if(e.args.length===1&&I(e.args[0])&&T(e.args[0],M.begin)){let w=e.args[0].args,{moduleType:b,moduleValue:k,env:A}=Cs({beginExprs:w,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=A,e.$={env:t,type:b,value:k,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&I(r[i])&&T(r[i],M.forall)&&(o=r[i],i++),r[i]&&I(r[i])&&T(r[i],M.where)){if(!o)throw d({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 d({token:e.token,errorMessage:"impl requires a receiver type and at least one field."});let s=r[i];if(i++,r[i]&&I(r[i])&&T(r[i],M.where)){if(!o)throw d({token:r[i].token,errorMessage:"impl where(...) requires forall(...) and may appear before or after the receiver type."});if(a)throw d({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 d({token:e.token,errorMessage:"impl requires at least one field after the receiver type."});if(!o){let w=U({expr:s,env:t,context:{...n}});if(!w.$||!w.$.value||!W(w.$.value))throw d({token:s.token,errorMessage:"Expected type for receiver type argument."});t=w.$.env;let b=w.$.value.value,k=Lt(b)||Xe(b),{env:A,traitEntries:S}=Pc({fieldExprs:l,env:t,context:{...n},receiverType:b});if(t=A,S.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let O of S){let x=O.traitValue,N=x.type;if(O.isAnonymousTrait||qc({targetType:b,traitType:N,env:t,errorToken:e.token}),k){let P=ks(N),R={forallParameters:[],whereConstraints:[],receiverTypePattern:b,traitType:N,traitValue:x,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};zc(P,R)}else mg(x,e,n.currentModulePath)}let V=S[0].traitValue;return e.$={env:t,type:V.type,value:V,pathCollection:[]},e}let c=o.args,_=[];t=yt(t);for(let w of c){let b,k;if(I(w)&&T(w,":",2)){let N=w.args[0];if(!X(N))throw d({token:N.token,errorMessage:`Expected identifier for forall parameter name, got: ${L(N)}`});b=N.token.value,k=w.args[1]}else if(X(w))b=w.token.value;else throw d({token:w.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${L(w)}`});let A;if(k){let N=U({expr:k,env:t,context:{...n}});if((E=N.$)!=null&&E.env&&(t=N.$.env),!N.$||!N.$.value||!W(N.$.value))throw d({token:k.token,errorMessage:`Expected type for forall parameter type, got: ${L(k)}`});A=N.$.value.value}let S=!A||qu(A),V=A||Mt(),O=ue(V,{variableName:b,env:t,context:n}),{env:x}=Pe({env:t,variable:{name:b,type:V,isCompileTimeOnly:!0,value:[O],token:w.token,initializedAtToken:w.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=x,S){let N=O.value;_.push({kind:"type",name:b,someType:N})}else _.push({kind:"value",name:b,type:V,unknownValue:O})}let f=new Map;if(a)for(let w of a.args){if(!I(w)||!T(w,"<:",2))throw d({token:w.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${L(w)}`});let b=U({expr:w,env:t,context:{...n,isInsideWhereClause:!0}});(C=b.$)!=null&&C.env&&(t=b.$.env);let k=w.args[0],A=w.args[1],S=U({expr:k,env:t,context:{...n}});if(!S.$||!S.$.value||!W(S.$.value)||!z(S.$.value.value))throw d({token:k.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${L(k)}`});t=S.$.env;let V=[];if(I(A)&&T(A,M.tuple))for(let O of A.args)I(O)&&T(O,"!")&&O.args.length===1?V.push({expr:O.args[0],isNegated:!0}):V.push({expr:O,isNegated:!1});else I(A)&&T(A,"!")&&A.args.length===1?V.push({expr:A.args[0],isNegated:!0}):V.push({expr:A,isNegated:!1});for(let{expr:O}of V){let x=U({expr:O,env:t,context:{...n}});if(!x.$||!x.$.value||!W(x.$.value)||!st(x.$.value.value))throw d({token:O.token,errorMessage:"Expected trait type for right-hand side expression."});t=x.$.env;let N=x.$.value.value;f.set(N.id,et(O))}}let p=[];for(let w of _){if(w.kind!=="type")continue;let{someType:b}=w,k=Nr(t,b);if(k){for(let A of k.requiredTraits)p.push({someType:b,traitType:A,traitExpr:f.get(A.id)});for(let A of k.negativeTraits){let S={...A,isNegatedConstraint:!0};p.push({someType:b,traitType:S,traitExpr:f.get(A.id)})}}}let m=U({expr:s,env:t,context:{...n}});if(!m.$||!m.$.value||!W(m.$.value))throw d({token:s.token,errorMessage:"Expected type for receiver type pattern."});t=m.$.env;let y=m.$.value.value,{env:g,traitEntries:h}=Pc({fieldExprs:l,env:t,context:{...n},receiverType:y});if(t=g,h.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let w of h){let b=w.traitValue,k=b.type;pg({receiverTypePattern:y,traitType:k,whereConstraints:p,env:t,errorToken:e.token});let{traitTypeArgExprs:A,traitFunctionParamNames:S}=w.isAnonymousTrait?{}:ag({traitExpr:w.sourceExpr,traitType:k});v.push({traitType:k,traitValue:b,traitTypeArgExprs:A,traitFunctionParamNames:S})}t=Yt(t);for(let w of v){let b=ks(w.traitType),k={forallParameters:_,whereConstraints:p,receiverTypePattern:y,traitType:w.traitType,traitValue:w.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:w.traitTypeArgExprs,traitFunctionParamNames:w.traitFunctionParamNames};zc(b,k)}let $=v[0].traitValue;return e.$={env:t,type:$.type,value:$,pathCollection:[]},e}var Xl=new Set;function Hc(e){if(!e||xe(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(bt(e))return!0}function jc(e){if(!e)return!1;if(xe(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 Yc(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&&W(o.assignedValue)){i=o.assignedValue.value;break}if(o.assignedValue&&on(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&&W(u)&&(i=u.value);break}}if(i)break}}if(!i){let o=Ls({concreteType:e,propertyName:r.label,env:n});o&&W(o.value)&&(i=o.value.value)}if(!i||!ae({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function vn({targetType:e,traitType:t,env:n}){let r=Er(n,"Comptime");if(r&&t.id===r.id){let l=Hc(e);if(l!==void 0)return l}let i=Er(n,"Runtime");if(i&&t.id===i.id){let l=jc(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||!on(l.assignedValue))continue;let c=l.assignedValue.type;if(ae({type:o,env:n},{type:c,env:n})&&Yc(e,t,n))return!0}if(Ke(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(z(e)){let l=!1,u=!1;for(let _ of e.requiredTraits)_.traitType.id===t.id&&(l=!0);let c=Nr(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(z(e)){let l=kn(n,e);if(z(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(Xl.has(s))return!1;Xl.add(s);try{return Fs({concreteType:e,traitType:t,env:n})===void 0?!1:Yc(e,t,n)}finally{Xl.delete(s)}}function qc({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!vn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${D(e)}" does not implement required constraint "${i.typeName??D(i)}" from trait "${t.typeName??D(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(vn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${D(e)}" implements "${i.typeName??D(i)}" but the trait "${t.typeName??D(t)}"'s where clause requires it to NOT implement this trait.`})}}function Pr(e,t){let n=Hc(e);if(n!==void 0)return n;let r=Er(t,"Comptime");return r?vn({targetType:e,traitType:r,env:t}):!1}function mi(e,t){let n=jc(e);if(n!==void 0)return n;let r=Er(t,"Runtime");return r?vn({targetType:e,traitType:r,env:t}):!1}function ka(e,t){if(!e)return!1;let n=Er(t,"Send");return n?vn({targetType:e,traitType:n,env:t}):!1}function Yi(e,t){if(!e)return!1;let n=Er(t,"Acyclic");return n?vn({targetType:e,traitType:n,env:t}):!1}function Zi(e,t){return Pr(e,t)&&!mi(e,t)}function Nn(e){if(!e)return!1;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(fn(t))return!0}return!1}function Gn(e){if(fn(e))return e;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(fn(t))return t}}function je(e){if(!e)return!1;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(Rn(t))return!0}return!1}function Cn(e){if(Rn(e))return e;if(z(e)||Ke(e)){for(let{traitType:t}of e.requiredTraits)if(Rn(t))return t}}function ps(e,t,n,r){if(!Ze(e)&&!Pr(e,t)&&!mi(e,t))throw d({token:n,errorMessage:`Type ${D(e)} has incompatible field contexts and cannot be used in any evaluation context.
180
180
 
181
181
  This typically happens when a struct/enum/array/tuple contains fields with conflicting availability:
182
182
  - Compile-time only fields (e.g., comptime_int, Type, Module)
183
183
  - Runtime only fields (e.g., *(T), [T], void, C-compatible types)
184
184
 
185
- Consider restructuring the type to avoid mixing incompatible field types.`})}function Yn(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=[Yn(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=>Yn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Yn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Yn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Yn(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=[Yn(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=>Yn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Yn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Yn(i,t,n):void 0)}}default:return e}}function Ql({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function zt(){let e=Ql({modulePath:"",inputString:""});return yt(e)}function Zl(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=Yn(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=Yn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:mg(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function mg(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 Gr({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 Nr(e,t){var l;let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let u of e.frames)for(let c of u.variables){let _=(l=c.value)==null?void 0:l[0];W(_)&&z(_.value)&&_.value.id===t.id&&s.add(c.name)}for(let u of e.frames)for(let c of u.whereClauseConstraints.values())if(!(c.someType.id!==t.id&&!s.has(c.someType.name))){a=!0;for(let _ of c.requiredTraits)i.has(_.id)||(i.add(_.id),n.push(_));for(let _ of c.negativeTraits)o.has(_.id)||(o.add(_.id),r.push(_))}if(a)return{requiredTraits:n,negativeTraits:r}}var Kc=null;function Xc(e){Kc=e}function Qc(){Kc=null}var yg="__yo_self";function Pe({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0);if(i){let p=vg(e);p>=0&&(a=p)}if(t.name!==yg){let p=_e(e,t.name);if(p.length>0&&!o){let m=p[p.length-1];throw Wt([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:m.token,errorMessage:`Variable "${t.name}" is already defined here (variable shadowing is not allowed):`}])}}let s=e.frames[a];if(!s)throw console.trace(`Frame at level ${a} does not exist in the environment.`),new Error(`Frame at level ${a} does not exist in the environment.`);let l=qt(e.modulePath,t.name)?t.name:r??Hi(e.modulePath,t.name),u={...t,frameLevel:a,id:l},c=gg({frame:s,variable:u}),_=e.frames.slice();return _[a]=c,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:_,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function gg({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw Wt([{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 hg(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function _e(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=hg(o,t,n);r.push(...a)}return n?r.filter(n):r}function tr(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let o=e.frames[r].variables.filter(t);n.push(...o)}return n}function Na(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function yt(e,t={id:Hi(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 Yt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=zo(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw Wt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
186
- Typeof "${a.name}": ${D(a.type)}`})));if(o.length>0)throw Wt(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 vt(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 Zc(e){var t,n;return{id:e.id,name:e.name,type:D(e.type),typeId:e.type.id,value:lt((t=e.value)==null?void 0:t[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:(n=e.isOwningTheSameRcValueAs)==null?void 0:n.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function Jc({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&&J(a.type));if(o&&J(o.type)){let a=o.assignedValue;Oe(a)&&(a=ue(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&&on(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&J(c.type));if(u>=0){let c=l.fields[u];if(J(c.type)){let _=s.fields[u],f=c.type;Ce(_)&&_.specializedType&&(f=_.specializedType),i.push({type:f,value:_})}}}if(i.length===0){let a=Br({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Jl({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){var f;let o=[],a=r;for(;tt(a);)a=a.childType;function s(p,m){let y=p.fields.find(g=>g.label===n&&(J(g.type)||st(g.type)));if(y){let g;if(J(y.type)){if(Oe(m))g=ue(y.type,{variableName:y.label,env:e,context:t});else if(on(m)){let h=p.fields.findIndex(v=>v.label===y.label);g=m.fields[h]}o.push({type:y.type,value:g})}else if(We(y.type)){let h=y.assignedValue;Et(h)&&l(h)}}if(!y)for(let g of p.fields)st(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}function l(p){let m=p.type.fields.findIndex(y=>y.label==="Call");if(m>=0){let y=p.type.fields[m];if(y.assignedValue){let g=y.assignedValue;or(g)?g.fields.forEach(h=>{o.push({type:h.type,value:h})}):o.push({type:g.type,value:g})}}}function u(p){return p.filter(y=>{if(J(y.type)){if(y.type.parameters.length===0)return!1;let h=y.type.parameters[0].type;if(!i&&tt(h)){let $=h.childType,E=r;if((rn(r)||Tn(r)||ln(r))&&(E=Qt({type:r,expectedType:void 0,expr:void 0,env:e})),ae({type:$,env:y.type.env},{type:E,env:e},!0))return y.needsPointerConversion=!0,!0}if(Ze(h)||Ze(h)&&!Ze(r)||z(r)&&r.resolvedConcreteType&&!je(r)&&!Ze(h)&&ae({type:h,env:y.type.env},{type:r.resolvedConcreteType,env:e},!0))return!0;if(!Ze(h)&&Ze(r))return!1;if(rn(r)||Tn(r)||ln(r)){let $=Qt({type:r,expectedType:void 0,expr:void 0,env:e});if(ae({type:h,env:y.type.env},{type:$,env:e},!0))return!0}if(Ke(r)&&y.value===void 0){if(y.type.parameters.length>0&&y.type.SelfType){let E=y.type.parameters[0];if(E){let C=E.type;if(!Ht(C)&&!Ke(C)&&!tt(C))return!1}}let $=y.type.return.type;if(Qr($,y.type.SelfType))return!1}return ae({type:h,env:y.type.env},{type:r,env:e},!0)}return!0})}function c(p,m,y=new Set){if(y.has(p.id))return;y.add(p.id);let g=p.fields.find(h=>h.label===m&&J(h.type));if(g&&J(g.type)){let h=g.assignedValue;Oe(h)&&(h=ue(g.type,{variableName:g.label,env:e,context:t})),o.push({type:g.type,value:h});return}for(let h of p.fields)st(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}if(r!==a&&r.trait){let p=r.trait.fields.find(m=>m.label===n&&J(m.type));if(p&&J(p.type)){let m=p.assignedValue;Oe(m)&&(m=ue(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:m})}else c(r.trait,n);for(let m of r.trait.fields)if(m.label===""&&m.assignedValue&&on(m.assignedValue)){let y=m.assignedValue,g=y.type,h=g.fields.findIndex(v=>v.label===n&&J(v.type));if(h>=0){let v=g.fields[h];if(J(v.type)){let $=y.fields[h],E=v.type;Ce($)&&$.specializedType&&(E=$.specializedType),o.push({type:E,value:$})}}}}if(o.length===0&&r!==a){let p=Br({concreteType:r,methodName:n,env:e});o.push(...p)}let _=z(a)&&a.resolvedConcreteType&&!je(a);if(a.trait&&!Ke(a)&&!_){let p=a.trait.fields.find(m=>m.label===n&&(J(m.type)||We(m.type)));if(p&&J(p.type)){let m=p.assignedValue;Oe(m)&&(m=ue(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:m})}else if(p&&We(p.type)){let m=p.assignedValue;Et(m)&&l(m)}else c(a.trait,n);for(let m of a.trait.fields)if(m.label===""&&m.assignedValue&&on(m.assignedValue)){let y=m.assignedValue,g=y.type,h=g.fields.findIndex(v=>v.label===n&&J(v.type));if(h>=0){let v=g.fields[h];if(J(v.type)){let $=y.fields[h],E=v.type;Ce($)&&$.specializedType&&(E=$.specializedType),o.push({type:E,value:$})}}}if(o.length===0){let m=Br({concreteType:a,methodName:n,env:e});o.push(...m)}}if(rn(a)||Tn(a)||ln(a)){let p=Qt({type:a,expectedType:void 0,expr:void 0,env:e});if(p.trait){let m=p.trait.fields.find(y=>y.label===n&&J(y.type));if(m&&J(m.type)){let y=m.assignedValue;Oe(y)&&(y=ue(m.type,{variableName:m.label,env:e,context:t})),o.push({type:m.type,value:y})}else c(p.trait,n);for(let y of p.trait.fields)if(y.label===""&&y.assignedValue&&on(y.assignedValue)){let g=y.assignedValue,h=g.type,v=h.fields.findIndex($=>$.label===n&&J($.type));if(v>=0){let $=h.fields[v];if(J($.type)){let E=g.fields[v],C=$.type;Ce(E)&&E.specializedType&&(C=E.specializedType),o.push({type:C,value:E})}}}if(o.length===0){let y=Br({concreteType:p,methodName:n,env:e});o.push(...y)}}}if(z(a)){if((f=a.resolvedConcreteType)!=null&&f.trait&&!je(a)){let p=a.resolvedConcreteType,m=p.trait,y=m==null?void 0:m.fields.find(g=>g.label===n&&J(g.type));if(y&&J(y.type)){let g=y.assignedValue||ue(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:g})}if(o.length===0){for(let g of(m==null?void 0:m.fields)??[])if(g.label===""&&g.assignedValue&&on(g.assignedValue)){let h=g.assignedValue,v=h.type,$=v.fields.findIndex(E=>E.label===n&&J(E.type));if($>=0){let E=v.fields[$];if(J(E.type)){let C=h.fields[$],w=E.type;Ce(C)&&C.specializedType&&(w=C.specializedType),o.push({type:w,value:C});break}}}}if(o.length===0){let g=Br({concreteType:p,methodName:n,env:e});o.push(...g)}}if(!(o.length>0)){let p=[],m=new Set;for(let g of a.requiredTraits??[])m.has(g.traitType.id)||(m.add(g.traitType.id),p.push(g.traitType));let y=Nr(e,a);if(y)for(let g of y.requiredTraits)m.has(g.id)||(m.add(g.id),p.push(g));if(z(a))for(let g=e.frames.length-1;g>=0;g--){let h=e.frames[g];for(let v of h.whereClauseConstraints.values())if(ae({type:v.someType,env:e},{type:a,env:e},!1))for(let $ of v.requiredTraits)m.has($.id)||(m.add($.id),p.push($))}for(let g of p){let h=g.fields.find(v=>v.label===n&&J(v.type));if(h&&J(h.type)){let v={...h.type,SelfType:a},$=!1;if(v.parameters.length>0&&tt(v.parameters[0].type)){let C=v.parameters[0].type.childType;(z(C)&&C.name==="Self"||ae({type:C,env:v.env},{type:r,env:e},!0))&&($=!0)}let E=ue(v,{variableName:h.label,env:e,context:t});o.push({type:v,value:E,needsPointerConversion:$})}}if(o.length===0){for(let g of a.trait.fields)if(g.label===""&&g.assignedValue&&W(g.assignedValue)&&st(g.assignedValue.value)){let v=g.assignedValue.value.fields.find($=>$.label===n&&J($.type));if(v&&J(v.type)){let $=ue(v.type,{variableName:v.label,env:e,context:t});o.push({type:v.type,value:$})}}}}}if(Ke(a)){let p=a.trait.fields.find(y=>y.label===n&&(J(y.type)||st(y.type)));if(p&&J(p.type)){let y=p.assignedValue||ue(p.type,{variableName:p.label,env:e,context:t});o.push({type:p.type,value:y})}let m=a.requiredTraits;for(let{traitType:y}of m){let g=y.fields.find(h=>h.label===n&&(J(h.type)||st(h.type)));g&&J(g.type)&&g.type.parameters.length>0&&(Ze(g.type.parameters[0].type)||Ze(r)||ae({type:g.type.parameters[0].type,env:g.type.env},{type:r,env:e},!0))&&o.push({type:g.type,value:void 0})}}return o.length>0,u(o)}function e_(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function Is(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 zo(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Je(r.type))return!1;let i=r.type;return!(z(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function vg(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}var Tg=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Eg(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var Va=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1}){if(this.modulePath=t,this.allowPartialModule=o,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??(0,t_.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new go({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(a){throw new Error(`Failed to import module "${t}":
187
- ${a instanceof rr||a instanceof vr?a.toString():a instanceof Error?a.message:String(a)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var l,u;let r=Ql({modulePath:this.modulePath,inputString:this.inputString});if(!Eg(this.tokens,"@skip_prelude")&&!Tg){let c="file://"+n_.default.join(t,"prelude.yo"),{moduleValue:_,moduleError:f}=n(c);if(f)throw f;if(_&&We(_.type)){r=yt(r);for(let p=0;p<_.type.fields.length;p++){let m=_.type.fields[p],y=_.fields[p],{env:g}=Pe({env:r,variable:{name:m.label,type:m.type,value:y?[y]:void 0,isCompileTimeOnly:!0,initializedAtToken:((l=m.exprs.labelExpr)==null?void 0:l.token)??m.exprs.expr.token,consumedAtToken:void 0,token:((u=m.exprs.labelExpr)==null?void 0:u.token)??m.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}Xc(r)}let{moduleValue:o,env:a,partialModuleError:s}=Cs({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:this.allowPartialModule});r=a,this.moduleValue=o,this.moduleError=s}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};function $g(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}var fy=require("fs"),ja=xr(require("path"));function Cg(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var r_={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},i_={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Ss;function bg(){if(Ss)return Ss;let e=r_[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(r_).join(", ")}`);let t=i_[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(i_).join(", ")}`);return Ss={platform:e,arch:t},Ss}function l_(e){switch(e){case"linux":return"gnu";case"windows":return"msvc";case"wasi":return"wasm";case"macos":case"freebsd":return}}function kg(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function u_(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:Cg(e),triple:kg(e,t,n)}}function Ni(){let e=bg(),t=l_(e.platform);return u_(e.arch,e.platform,t)}var o_=new Set(["x86_64","aarch64","x86","arm","wasm32"]),a_=new Set(["linux","macos","windows","freebsd","wasi"]),s_=new Set(["gnu","musl","msvc","none","wasm"]);function c_(e){let t=e.split("-");if(t.length<2||t.length>3)throw new Error(`Invalid target triple "${e}". Expected format: <arch>-<os> or <arch>-<os>-<abi>. Example: x86_64-linux-gnu`);let n=t[0],r=t[1],i=t[2];if(!o_.has(n))throw new Error(`Unknown architecture "${n}" in target triple "${e}". Supported: ${[...o_].join(", ")}`);if(!a_.has(r))throw new Error(`Unknown OS "${r}" in target triple "${e}". Supported: ${[...a_].join(", ")}`);let o=n,a=r,s;if(i!==void 0)if(i==="none")s=void 0;else if(s_.has(i))s=i;else throw new Error(`Unknown ABI "${i}" in target triple "${e}". Supported: ${[...s_].join(", ")}`);else s=l_(a);return u_(o,a,s)}var eu;function xa(){return eu||(eu=Ni()),eu}function An(e){return e.os==="windows"}function oo(e){return e.os==="linux"}function Vr(e){return e.os==="macos"}function ao(e){return e.arch==="wasm32"||e.os==="wasi"}function __(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 f_(e){let t=An(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 gi(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 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 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 so=[...F.__yo_op_add,...F.__yo_op_sub,...F.__yo_op_mul,...F.__yo_op_div,...F.__yo_op_mod,...F.__yo_op_neg,...F.__yo_op_eq,...F.__yo_op_neq,...F.__yo_op_lt,...F.__yo_op_lte,...F.__yo_op_gt,...F.__yo_op_gte,...F.__yo_op_not,...F.__yo_op_bit_and,...F.__yo_op_bit_or,...F.__yo_op_bit_xor,...F.__yo_op_bit_complement,...F.__yo_op_bit_left_shift,...F.__yo_op_bit_right_shift,...F.__yo_ptr_add,...F.__yo_ptr_sub,...F.__yo_ptr_diff,...F.__yo_ptr_eq,...F.__yo_ptr_neq,...F.__yo_ptr_lt,...F.__yo_ptr_lte,...F.__yo_ptr_gt,...F.__yo_ptr_gte,...F.__yo_slice_len,...F.__yo_slice_new,...F.__yo_as,...F.__yo_getrandom,...F.__yo_arc4random_buf,...F.__yo_bcrypt_gen_random,...F.__yo_maybe_uninit_new,...F.__yo_maybe_uninit_as_ptr,...F.__yo_maybe_uninit_assume_init,...F.__yo_noop,...F.__yo_return_self,...F.__yo_ms_sleep],p_=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 ve(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 Y(e,t){var n,r,i,o,a,s,l;if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_string":return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let _=xn(e);if(_)return Y(_,t)}let u;switch(e.tag){case"Tuple":u="tuple";break;case"Struct":u="struct";break;case"Union":u="union";break;case"Enum":u="enum";break;default:throw new Error("Unreachable")}let c=(n=t.types[e.id])==null?void 0:n.cName;if(!c)throw new Error(`No C type name found for ${u} ${D(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&xe(e)&&e.isReferenceSemantics?`${c}*`:c}case"Function":return"void*";case"Dyn":{let u=(r=t.types[e.id])==null?void 0:r.cName;if(!u)throw new Error(`No C type name found for dynamic dispatch type ${D(e)}`);return u}case"Array":{let u=e,c=u.childType,_=u.length;if(ht(_)){let f=Y(c,t),p=`Array_${ve(f)}_${_.value}`;return t.arrayStructTypes.has(p)||t.arrayStructTypes.set(p,{childType:f,length:typeof _.value=="bigint"?Number(_.value):_.value}),p}break}case"Slice":{let u=e,_=`Slice_${ve(Y(u.childType,t))}`;return t.sliceStructTypes.has(_)||t.sliceStructTypes.set(_,{childType:Y(u.childType,t)}),_}case"SomeType":{let u=e;if(je(u)){if((i=u.resolvedConcreteType)!=null&&i.isExtern)return`${Y(u.resolvedConcreteType,t)}*`;let c=(o=t.types[u.id])==null?void 0:o.cName;if(c)return`${c}*`;if(u.resolvedConcreteType&&z(u.resolvedConcreteType)&&je(u.resolvedConcreteType)){let f=u.resolvedConcreteType,p=(a=t.types[f.id])==null?void 0:a.cName;if(p)return`${p}*`}if(u.resolvedConcreteType&&xe(u.resolvedConcreteType)){let f=u.resolvedConcreteType.id;for(let[p,m]of Object.entries(t.types))if(z(m.type)&&je(m.type)&&m.type.resolvedConcreteType&&xe(m.type.resolvedConcreteType)&&m.type.resolvedConcreteType.id===f)return`${m.cName}*`}let _=Cn(u);if(_){let f=(s=t.types[_.id])==null?void 0:s.cName;if(f)return`${f}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(_==null?void 0:_.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
185
+ Consider restructuring the type to avoid mixing incompatible field types.`})}function Yn(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=[Yn(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=>Yn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Yn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Yn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Yn(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=[Yn(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=>Yn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Yn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Yn(i,t,n):void 0)}}default:return e}}function Ql({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function zt(){let e=Ql({modulePath:"",inputString:""});return yt(e)}function Zl(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=Yn(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=Yn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:yg(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function yg(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 Gr({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 Nr(e,t){var l;let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let u of e.frames)for(let c of u.variables){let _=(l=c.value)==null?void 0:l[0];W(_)&&z(_.value)&&_.value.id===t.id&&s.add(c.name)}for(let u of e.frames)for(let c of u.whereClauseConstraints.values())if(!(c.someType.id!==t.id&&!s.has(c.someType.name))){a=!0;for(let _ of c.requiredTraits)i.has(_.id)||(i.add(_.id),n.push(_));for(let _ of c.negativeTraits)o.has(_.id)||(o.add(_.id),r.push(_))}if(a)return{requiredTraits:n,negativeTraits:r}}var Kc=null;function Xc(e){Kc=e}function Qc(){Kc=null}var gg="__yo_self";function Pe({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0);if(i){let p=Tg(e);p>=0&&(a=p)}if(t.name!==gg){let p=_e(e,t.name);if(p.length>0&&!o){let m=p[p.length-1];throw Wt([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:m.token,errorMessage:`Variable "${t.name}" is already defined here (variable shadowing is not allowed):`}])}}let s=e.frames[a];if(!s)throw console.trace(`Frame at level ${a} does not exist in the environment.`),new Error(`Frame at level ${a} does not exist in the environment.`);let l=qt(e.modulePath,t.name)?t.name:r??Hi(e.modulePath,t.name),u={...t,frameLevel:a,id:l},c=hg({frame:s,variable:u}),_=e.frames.slice();return _[a]=c,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:_,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function hg({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw Wt([{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 vg(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function _e(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=vg(o,t,n);r.push(...a)}return n?r.filter(n):r}function tr(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let o=e.frames[r].variables.filter(t);n.push(...o)}return n}function Na(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function yt(e,t={id:Hi(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 Yt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=zo(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw Wt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
186
+ Typeof "${a.name}": ${D(a.type)}`})));if(o.length>0)throw Wt(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 vt(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 Zc(e){var t,n;return{id:e.id,name:e.name,type:D(e.type),typeId:e.type.id,value:lt((t=e.value)==null?void 0:t[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:(n=e.isOwningTheSameRcValueAs)==null?void 0:n.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function Jc({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&&J(a.type));if(o&&J(o.type)){let a=o.assignedValue;Oe(a)&&(a=ue(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&&on(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&J(c.type));if(u>=0){let c=l.fields[u];if(J(c.type)){let _=s.fields[u],f=c.type;Ce(_)&&_.specializedType&&(f=_.specializedType),i.push({type:f,value:_})}}}if(i.length===0){let a=Br({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Jl({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){var f;let o=[],a=r;for(;tt(a);)a=a.childType;function s(p,m){let y=p.fields.find(g=>g.label===n&&(J(g.type)||st(g.type)));if(y){let g;if(J(y.type)){if(Oe(m))g=ue(y.type,{variableName:y.label,env:e,context:t});else if(on(m)){let h=p.fields.findIndex(v=>v.label===y.label);g=m.fields[h]}o.push({type:y.type,value:g})}else if(We(y.type)){let h=y.assignedValue;Et(h)&&l(h)}}if(!y)for(let g of p.fields)st(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}function l(p){let m=p.type.fields.findIndex(y=>y.label==="Call");if(m>=0){let y=p.type.fields[m];if(y.assignedValue){let g=y.assignedValue;or(g)?g.fields.forEach(h=>{o.push({type:h.type,value:h})}):o.push({type:g.type,value:g})}}}function u(p){return p.filter(y=>{if(J(y.type)){if(y.type.parameters.length===0)return!1;let h=y.type.parameters[0].type;if(!i&&tt(h)){let $=h.childType,E=r;if((rn(r)||Tn(r)||ln(r))&&(E=Qt({type:r,expectedType:void 0,expr:void 0,env:e})),ae({type:$,env:y.type.env},{type:E,env:e},!0))return y.needsPointerConversion=!0,!0}if(Ze(h)||Ze(h)&&!Ze(r)||z(r)&&r.resolvedConcreteType&&!je(r)&&!Ze(h)&&ae({type:h,env:y.type.env},{type:r.resolvedConcreteType,env:e},!0))return!0;if(!Ze(h)&&Ze(r))return!1;if(rn(r)||Tn(r)||ln(r)){let $=Qt({type:r,expectedType:void 0,expr:void 0,env:e});if(ae({type:h,env:y.type.env},{type:$,env:e},!0))return!0}if(Ke(r)&&y.value===void 0){if(y.type.parameters.length>0&&y.type.SelfType){let E=y.type.parameters[0];if(E){let C=E.type;if(!Ht(C)&&!Ke(C)&&!tt(C))return!1}}let $=y.type.return.type;if(Qr($,y.type.SelfType))return!1}return ae({type:h,env:y.type.env},{type:r,env:e},!0)}return!0})}function c(p,m,y=new Set){if(y.has(p.id))return;y.add(p.id);let g=p.fields.find(h=>h.label===m&&J(h.type));if(g&&J(g.type)){let h=g.assignedValue;Oe(h)&&(h=ue(g.type,{variableName:g.label,env:e,context:t})),o.push({type:g.type,value:h});return}for(let h of p.fields)st(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}if(r!==a&&r.trait){let p=r.trait.fields.find(m=>m.label===n&&J(m.type));if(p&&J(p.type)){let m=p.assignedValue;Oe(m)&&(m=ue(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:m})}else c(r.trait,n);for(let m of r.trait.fields)if(m.label===""&&m.assignedValue&&on(m.assignedValue)){let y=m.assignedValue,g=y.type,h=g.fields.findIndex(v=>v.label===n&&J(v.type));if(h>=0){let v=g.fields[h];if(J(v.type)){let $=y.fields[h],E=v.type;Ce($)&&$.specializedType&&(E=$.specializedType),o.push({type:E,value:$})}}}}if(o.length===0&&r!==a){let p=Br({concreteType:r,methodName:n,env:e});o.push(...p)}let _=z(a)&&a.resolvedConcreteType&&!je(a);if(a.trait&&!Ke(a)&&!_){let p=a.trait.fields.find(m=>m.label===n&&(J(m.type)||We(m.type)));if(p&&J(p.type)){let m=p.assignedValue;Oe(m)&&(m=ue(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:m})}else if(p&&We(p.type)){let m=p.assignedValue;Et(m)&&l(m)}else c(a.trait,n);for(let m of a.trait.fields)if(m.label===""&&m.assignedValue&&on(m.assignedValue)){let y=m.assignedValue,g=y.type,h=g.fields.findIndex(v=>v.label===n&&J(v.type));if(h>=0){let v=g.fields[h];if(J(v.type)){let $=y.fields[h],E=v.type;Ce($)&&$.specializedType&&(E=$.specializedType),o.push({type:E,value:$})}}}if(o.length===0){let m=Br({concreteType:a,methodName:n,env:e});o.push(...m)}}if(rn(a)||Tn(a)||ln(a)){let p=Qt({type:a,expectedType:void 0,expr:void 0,env:e});if(p.trait){let m=p.trait.fields.find(y=>y.label===n&&J(y.type));if(m&&J(m.type)){let y=m.assignedValue;Oe(y)&&(y=ue(m.type,{variableName:m.label,env:e,context:t})),o.push({type:m.type,value:y})}else c(p.trait,n);for(let y of p.trait.fields)if(y.label===""&&y.assignedValue&&on(y.assignedValue)){let g=y.assignedValue,h=g.type,v=h.fields.findIndex($=>$.label===n&&J($.type));if(v>=0){let $=h.fields[v];if(J($.type)){let E=g.fields[v],C=$.type;Ce(E)&&E.specializedType&&(C=E.specializedType),o.push({type:C,value:E})}}}if(o.length===0){let y=Br({concreteType:p,methodName:n,env:e});o.push(...y)}}}if(z(a)){if((f=a.resolvedConcreteType)!=null&&f.trait&&!je(a)){let p=a.resolvedConcreteType,m=p.trait,y=m==null?void 0:m.fields.find(g=>g.label===n&&J(g.type));if(y&&J(y.type)){let g=y.assignedValue||ue(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:g})}if(o.length===0){for(let g of(m==null?void 0:m.fields)??[])if(g.label===""&&g.assignedValue&&on(g.assignedValue)){let h=g.assignedValue,v=h.type,$=v.fields.findIndex(E=>E.label===n&&J(E.type));if($>=0){let E=v.fields[$];if(J(E.type)){let C=h.fields[$],w=E.type;Ce(C)&&C.specializedType&&(w=C.specializedType),o.push({type:w,value:C});break}}}}if(o.length===0){let g=Br({concreteType:p,methodName:n,env:e});o.push(...g)}}if(!(o.length>0)){let p=[],m=new Set;for(let g of a.requiredTraits??[])m.has(g.traitType.id)||(m.add(g.traitType.id),p.push(g.traitType));let y=Nr(e,a);if(y)for(let g of y.requiredTraits)m.has(g.id)||(m.add(g.id),p.push(g));if(z(a))for(let g=e.frames.length-1;g>=0;g--){let h=e.frames[g];for(let v of h.whereClauseConstraints.values())if(ae({type:v.someType,env:e},{type:a,env:e},!1))for(let $ of v.requiredTraits)m.has($.id)||(m.add($.id),p.push($))}for(let g of p){let h=g.fields.find(v=>v.label===n&&J(v.type));if(h&&J(h.type)){let v={...h.type,SelfType:a},$=!1;if(v.parameters.length>0&&tt(v.parameters[0].type)){let C=v.parameters[0].type.childType;(z(C)&&C.name==="Self"||ae({type:C,env:v.env},{type:r,env:e},!0))&&($=!0)}let E=ue(v,{variableName:h.label,env:e,context:t});o.push({type:v,value:E,needsPointerConversion:$})}}if(o.length===0){for(let g of a.trait.fields)if(g.label===""&&g.assignedValue&&W(g.assignedValue)&&st(g.assignedValue.value)){let v=g.assignedValue.value.fields.find($=>$.label===n&&J($.type));if(v&&J(v.type)){let $=ue(v.type,{variableName:v.label,env:e,context:t});o.push({type:v.type,value:$})}}}}}if(Ke(a)){let p=a.trait.fields.find(y=>y.label===n&&(J(y.type)||st(y.type)));if(p&&J(p.type)){let y=p.assignedValue||ue(p.type,{variableName:p.label,env:e,context:t});o.push({type:p.type,value:y})}let m=a.requiredTraits;for(let{traitType:y}of m){let g=y.fields.find(h=>h.label===n&&(J(h.type)||st(h.type)));g&&J(g.type)&&g.type.parameters.length>0&&(Ze(g.type.parameters[0].type)||Ze(r)||ae({type:g.type.parameters[0].type,env:g.type.env},{type:r,env:e},!0))&&o.push({type:g.type,value:void 0})}}return o.length>0,u(o)}function e_(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function Is(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 zo(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Je(r.type))return!1;let i=r.type;return!(z(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function Tg(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}var Eg=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function $g(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var Va=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1}){if(this.modulePath=t,this.allowPartialModule=o,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??(0,t_.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new go({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(a){throw new Error(`Failed to import module "${t}":
187
+ ${a instanceof rr||a instanceof vr?a.toString():a instanceof Error?a.message:String(a)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var l,u;let r=Ql({modulePath:this.modulePath,inputString:this.inputString});if(!$g(this.tokens,"@skip_prelude")&&!Eg){let c="file://"+n_.default.join(t,"prelude.yo"),{moduleValue:_,moduleError:f}=n(c);if(f)throw f;if(_&&We(_.type)){r=yt(r);for(let p=0;p<_.type.fields.length;p++){let m=_.type.fields[p],y=_.fields[p],{env:g}=Pe({env:r,variable:{name:m.label,type:m.type,value:y?[y]:void 0,isCompileTimeOnly:!0,initializedAtToken:((l=m.exprs.labelExpr)==null?void 0:l.token)??m.exprs.expr.token,consumedAtToken:void 0,token:((u=m.exprs.labelExpr)==null?void 0:u.token)??m.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}Xc(r)}let{moduleValue:o,env:a,partialModuleError:s}=Cs({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:this.allowPartialModule});r=a,this.moduleValue=o,this.moduleError=s}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};function Cg(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}var py=require("fs"),ja=xr(require("path"));function bg(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var r_={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},i_={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Ss;function kg(){if(Ss)return Ss;let e=r_[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(r_).join(", ")}`);let t=i_[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(i_).join(", ")}`);return Ss={platform:e,arch:t},Ss}function l_(e){switch(e){case"linux":return"gnu";case"windows":return"msvc";case"wasi":return"wasm";case"macos":case"freebsd":return}}function wg(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function u_(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:bg(e),triple:wg(e,t,n)}}function Ni(){let e=kg(),t=l_(e.platform);return u_(e.arch,e.platform,t)}var o_=new Set(["x86_64","aarch64","x86","arm","wasm32"]),a_=new Set(["linux","macos","windows","freebsd","wasi"]),s_=new Set(["gnu","musl","msvc","none","wasm"]);function c_(e){let t=e.split("-");if(t.length<2||t.length>3)throw new Error(`Invalid target triple "${e}". Expected format: <arch>-<os> or <arch>-<os>-<abi>. Example: x86_64-linux-gnu`);let n=t[0],r=t[1],i=t[2];if(!o_.has(n))throw new Error(`Unknown architecture "${n}" in target triple "${e}". Supported: ${[...o_].join(", ")}`);if(!a_.has(r))throw new Error(`Unknown OS "${r}" in target triple "${e}". Supported: ${[...a_].join(", ")}`);let o=n,a=r,s;if(i!==void 0)if(i==="none")s=void 0;else if(s_.has(i))s=i;else throw new Error(`Unknown ABI "${i}" in target triple "${e}". Supported: ${[...s_].join(", ")}`);else s=l_(a);return u_(o,a,s)}var eu;function xa(){return eu||(eu=Ni()),eu}function Fn(e){return e.os==="windows"}function oo(e){return e.os==="linux"}function Vr(e){return e.os==="macos"}function ao(e){return e.arch==="wasm32"||e.os==="wasi"}function __(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 f_(e){let t=Fn(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 gi(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 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 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 so=[...F.__yo_op_add,...F.__yo_op_sub,...F.__yo_op_mul,...F.__yo_op_div,...F.__yo_op_mod,...F.__yo_op_neg,...F.__yo_op_eq,...F.__yo_op_neq,...F.__yo_op_lt,...F.__yo_op_lte,...F.__yo_op_gt,...F.__yo_op_gte,...F.__yo_op_not,...F.__yo_op_bit_and,...F.__yo_op_bit_or,...F.__yo_op_bit_xor,...F.__yo_op_bit_complement,...F.__yo_op_bit_left_shift,...F.__yo_op_bit_right_shift,...F.__yo_ptr_add,...F.__yo_ptr_sub,...F.__yo_ptr_diff,...F.__yo_ptr_eq,...F.__yo_ptr_neq,...F.__yo_ptr_lt,...F.__yo_ptr_lte,...F.__yo_ptr_gt,...F.__yo_ptr_gte,...F.__yo_slice_len,...F.__yo_slice_new,...F.__yo_as,...F.__yo_getrandom,...F.__yo_arc4random_buf,...F.__yo_bcrypt_gen_random,...F.__yo_maybe_uninit_new,...F.__yo_maybe_uninit_as_ptr,...F.__yo_maybe_uninit_assume_init,...F.__yo_noop,...F.__yo_return_self,...F.__yo_ms_sleep],p_=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 ve(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 Y(e,t){var n,r,i,o,a,s,l;if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_string":return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let _=xn(e);if(_)return Y(_,t)}let u;switch(e.tag){case"Tuple":u="tuple";break;case"Struct":u="struct";break;case"Union":u="union";break;case"Enum":u="enum";break;default:throw new Error("Unreachable")}let c=(n=t.types[e.id])==null?void 0:n.cName;if(!c)throw new Error(`No C type name found for ${u} ${D(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&xe(e)&&e.isReferenceSemantics?`${c}*`:c}case"Function":return"void*";case"Dyn":{let u=(r=t.types[e.id])==null?void 0:r.cName;if(!u)throw new Error(`No C type name found for dynamic dispatch type ${D(e)}`);return u}case"Array":{let u=e,c=u.childType,_=u.length;if(ht(_)){let f=Y(c,t),p=`Array_${ve(f)}_${_.value}`;return t.arrayStructTypes.has(p)||t.arrayStructTypes.set(p,{childType:f,length:typeof _.value=="bigint"?Number(_.value):_.value}),p}break}case"Slice":{let u=e,_=`Slice_${ve(Y(u.childType,t))}`;return t.sliceStructTypes.has(_)||t.sliceStructTypes.set(_,{childType:Y(u.childType,t)}),_}case"SomeType":{let u=e;if(je(u)){if((i=u.resolvedConcreteType)!=null&&i.isExtern)return`${Y(u.resolvedConcreteType,t)}*`;let c=(o=t.types[u.id])==null?void 0:o.cName;if(c)return`${c}*`;if(u.resolvedConcreteType&&z(u.resolvedConcreteType)&&je(u.resolvedConcreteType)){let f=u.resolvedConcreteType,p=(a=t.types[f.id])==null?void 0:a.cName;if(p)return`${p}*`}if(u.resolvedConcreteType&&xe(u.resolvedConcreteType)){let f=u.resolvedConcreteType.id;for(let[p,m]of Object.entries(t.types))if(z(m.type)&&je(m.type)&&m.type.resolvedConcreteType&&xe(m.type.resolvedConcreteType)&&m.type.resolvedConcreteType.id===f)return`${m.cName}*`}let _=Cn(u);if(_){let f=(s=t.types[_.id])==null?void 0:s.cName;if(f)return`${f}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(_==null?void 0:_.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
188
188
  resolvedConcreteType: ${((l=u.resolvedConcreteType)==null?void 0:l.id)??"none"}
189
- registered type IDs: ${Object.keys(t.types).filter(f=>f.startsWith("sometype")).join(", ")}`)}return Nn(u)&&u.resolvedConcreteType||u.resolvedConcreteType?Y(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Lt(c)){let p=Y(c.childType,t),m=`Slice_${ve(p)}`;return t.sliceStructTypes.has(m)||t.sliceStructTypes.set(m,{childType:p}),`${m}*`}let _=Y(c,t);return Ht(c)?`${_}*`:ze(c)&&xn(c)?`${_}*`:`${_}*`}case"Iso":{let u=e,c=u.childType,_=Y(c,t),f=_.replace(/\*/g,"").trim(),p=`Iso_${ve(f)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(p)||t.isoTypes.set(p,{childTypeCName:_,isoType:u}),p}case"Arc":{let u=e,c=u.childType,_=Y(c,t),f=_.replace(/\*/g,"").trim(),p=`Arc_${ve(f)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(p)||t.arcTypes.set(p,{childTypeCName:_,arcType:u}),p}}return`// Unknown type: ${D(e)}`}function Bt(e,t,n){let r=ve(t);return`${Y(e,n)} ${r}`}function In(e,t,n){var i;let r=(i=n.types[e.id])==null?void 0:i.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${D(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Vi(e){return e.type.return.isCompileTimeOnly}function Wo(e){let t=e.body,n=null;return I(t)&&T(t,"begin")&&t.args.length===1&&I(t.args[0])&&T(t.args[0],so)?n=t.args[0].func.token.value:I(t)&&T(t,so)&&(n=t.func.token.value),n&&F.__yo_as.includes(n)?null:n}function xn(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(tt(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function mr(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Ye(e,t){if(!t)return ve(e);let n=_e(t,e);if(n.length>0){let r=n[n.length-1];return ve(r.name,r.type.isExtern==="c")}return ve(e)}function Ns(e){if(I(e)&&e.args.length>=1){let t=e.args[0];if(t&&X(t))return t.token.value}if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[0])&&X(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0])return e.func.args[0].token.value}function hr(e){if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&X(e.func.args[0]))return e.func.args[0].token.value;if(!I(e)||!T(e,F.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!X(t)))return t.token.value}function Da(e){if(e){if(wn(e))return e;if(I(e)){let t=e;for(let n of t.args){let r=Da(n);if(r)return r}}}}var tu;function d_(e){tu=e}function B(e,t,n){if(!tu)throw new Error("Internal Error: generateExpr function is not set.");return tu(e,t,n)}function hi(e,t,n){let r=z(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Je(r))return"";if(Xe(r)){let i=r.length;if(!ht(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=hi(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Qe(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=z(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Je(s)){let l=hi(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Ke(r))return`__yo_decr_rc((void*)(${e}).data)`;if(Ht(r))return`__yo_decr_rc((void*)(${e}))`;if(fn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(un(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(xe(r)||ze(r)){let i=ii(r,n);if(i)return`${i}(${e})`}return""}function qo(e,t,n){let r=z(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(Xe(r)){let i=r.length;if(!ht(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${$t("")}`,a=`i_${$t("")}`,s=Y(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=qo(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Qe(r)){let i=n.emitter,o=`temp_dup_tuple_${$t("")}`,a=Y(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=z(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Je(u)){let c=qo(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Ke(r))return`((${Y(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(Ht(r))return`((${Y(r,n)})__yo_incr_rc((void*)(${e})))`;if(fn(r))return`((${Y(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(un(r))return`((${Y(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(xe(r)||ze(r)){let i=kr(r,n);if(i)return`${i}(${e})`}return e}function ii(e,t){var n;if(xe(e)||ze(e)||Ke(e)||z(e)||fn(e)||un(e)){let r=e.trait.fields.find(i=>i.label===F.___drop[0]);if(r&&r.assignedValue&&Ce(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function kr(e,t){var n;if(xe(e)||ze(e)||Ke(e)||z(e)||fn(e)||un(e)){let r=e.trait.fields.find(i=>i.label===F.___dup[0]);if(r&&r.assignedValue&&Ce(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function cn(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){let a=B(o,t,n);a&&r.emitLine(`${t}${a};`)}}function Rt(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(I(o)){let a=B(o,t,n);a&&r.emitLine(`${t}${a};`)}}}function Un(e,t,n){var r,i,o,a,s,l,u,c;if(ht(e)){let _=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(_.includes(".")?_:_+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?_.includes(".")?_:_+".0":e.tag==="U64"||e.tag==="Usize"?_+"ULL":e.tag==="I64"||e.tag==="Isize"?_+"LL":e.tag==="U32"?_+"U":_}else{if(dt(e))return e.value?"true":"false";if(rt(e)){let _=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(_&&ui(_)&&_.fields.length===1){let f=_.fields[0].type;if(Lt(f)){let p=Y(_,t),m=JSON.stringify(e.value),y=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${m}, .length = ${y} }`}}if(_&&Lt(_)){let f=Y(_,t),p=JSON.stringify(e.value),m=Buffer.byteLength(e.value,"utf8");return`(${f}){ .data = (uint8_t*)${p}, .length = ${m} }`}return JSON.stringify(e.value)}else if(hn(e)){let _=e.type;if(xn(_)){let g=_.variants.find(h=>h.name===e.variantName);if(!g)return`// Error: Variant ${e.variantName} not found in enum`;if(!g.fields||g.fields.length===0)return"NULL";if(g.fields.length===1&&e.fields.length===1)return Un(e.fields[0],t)}if(mr(_))return In(_,e.variantName,t);let m=(o=t.types[_.id])==null?void 0:o.cName;if(!m)return`// Error: No C type name found for enum ${D(_)}`;let y=In(_,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${m}){ .tag = ${y} }`;{let g=_.variants.find(v=>v.name===e.variantName);if(!g||!g.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((v,$)=>{let E=g.fields[$];if(E&&!De(E.type)){let C=ve(E.label),w=Un(v,t);return`.${C} = ${w}`}return null}).filter(v=>v!==null);return h.length===0?`(${m}){ .tag = ${y} }`:`(${m}){ .tag = ${y}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(or(e)){let _=e.type,f=(a=t.types[_.id])==null?void 0:a.cName;if(!f)return`// Error: No C type name found for tuple ${D(_)}
189
+ registered type IDs: ${Object.keys(t.types).filter(f=>f.startsWith("sometype")).join(", ")}`)}return Nn(u)&&u.resolvedConcreteType||u.resolvedConcreteType?Y(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Lt(c)){let p=Y(c.childType,t),m=`Slice_${ve(p)}`;return t.sliceStructTypes.has(m)||t.sliceStructTypes.set(m,{childType:p}),`${m}*`}let _=Y(c,t);return Ht(c)?`${_}*`:ze(c)&&xn(c)?`${_}*`:`${_}*`}case"Iso":{let u=e,c=u.childType,_=Y(c,t),f=_.replace(/\*/g,"").trim(),p=`Iso_${ve(f)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(p)||t.isoTypes.set(p,{childTypeCName:_,isoType:u}),p}case"Arc":{let u=e,c=u.childType,_=Y(c,t),f=_.replace(/\*/g,"").trim(),p=`Arc_${ve(f)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(p)||t.arcTypes.set(p,{childTypeCName:_,arcType:u}),p}}return`// Unknown type: ${D(e)}`}function Bt(e,t,n){let r=ve(t);return`${Y(e,n)} ${r}`}function In(e,t,n){var i;let r=(i=n.types[e.id])==null?void 0:i.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${D(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Vi(e){return e.type.return.isCompileTimeOnly}function Wo(e){let t=e.body,n=null;return I(t)&&T(t,"begin")&&t.args.length===1&&I(t.args[0])&&T(t.args[0],so)?n=t.args[0].func.token.value:I(t)&&T(t,so)&&(n=t.func.token.value),n&&F.__yo_as.includes(n)?null:n}function xn(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(tt(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function mr(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Ye(e,t){if(!t)return ve(e);let n=_e(t,e);if(n.length>0){let r=n[n.length-1];return ve(r.name,r.type.isExtern==="c")}return ve(e)}function Ns(e){if(I(e)&&e.args.length>=1){let t=e.args[0];if(t&&X(t))return t.token.value}if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[0])&&X(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0])return e.func.args[0].token.value}function hr(e){if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&X(e.func.args[0]))return e.func.args[0].token.value;if(!I(e)||!T(e,F.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!X(t)))return t.token.value}function Da(e){if(e){if(wn(e))return e;if(I(e)){let t=e;for(let n of t.args){let r=Da(n);if(r)return r}}}}var tu;function d_(e){tu=e}function B(e,t,n){if(!tu)throw new Error("Internal Error: generateExpr function is not set.");return tu(e,t,n)}function hi(e,t,n){let r=z(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Je(r))return"";if(Xe(r)){let i=r.length;if(!ht(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=hi(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Qe(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=z(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Je(s)){let l=hi(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Ke(r))return`__yo_decr_rc((void*)(${e}).data)`;if(Ht(r))return`__yo_decr_rc((void*)(${e}))`;if(pn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(cn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(xe(r)||ze(r)){let i=ii(r,n);if(i)return`${i}(${e})`}return""}function qo(e,t,n){let r=z(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(Xe(r)){let i=r.length;if(!ht(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${$t("")}`,a=`i_${$t("")}`,s=Y(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=qo(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Qe(r)){let i=n.emitter,o=`temp_dup_tuple_${$t("")}`,a=Y(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=z(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Je(u)){let c=qo(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Ke(r))return`((${Y(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(Ht(r))return`((${Y(r,n)})__yo_incr_rc((void*)(${e})))`;if(pn(r))return`((${Y(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(cn(r))return`((${Y(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(xe(r)||ze(r)){let i=kr(r,n);if(i)return`${i}(${e})`}return e}function ii(e,t){var n;if(xe(e)||ze(e)||Ke(e)||z(e)||pn(e)||cn(e)){let r=e.trait.fields.find(i=>i.label===F.___drop[0]);if(r&&r.assignedValue&&Ce(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function kr(e,t){var n;if(xe(e)||ze(e)||Ke(e)||z(e)||pn(e)||cn(e)){let r=e.trait.fields.find(i=>i.label===F.___dup[0]);if(r&&r.assignedValue&&Ce(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function _n(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){let a=B(o,t,n);a&&r.emitLine(`${t}${a};`)}}function Rt(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(I(o)){let a=B(o,t,n);a&&r.emitLine(`${t}${a};`)}}}function Un(e,t,n){var r,i,o,a,s,l,u,c;if(ht(e)){let _=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(_.includes(".")?_:_+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?_.includes(".")?_:_+".0":e.tag==="U64"||e.tag==="Usize"?_+"ULL":e.tag==="I64"||e.tag==="Isize"?_+"LL":e.tag==="U32"?_+"U":_}else{if(dt(e))return e.value?"true":"false";if(rt(e)){let _=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(_&&ui(_)&&_.fields.length===1){let f=_.fields[0].type;if(Lt(f)){let p=Y(_,t),m=JSON.stringify(e.value),y=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${m}, .length = ${y} }`}}if(_&&Lt(_)){let f=Y(_,t),p=JSON.stringify(e.value),m=Buffer.byteLength(e.value,"utf8");return`(${f}){ .data = (uint8_t*)${p}, .length = ${m} }`}return JSON.stringify(e.value)}else if(hn(e)){let _=e.type;if(xn(_)){let g=_.variants.find(h=>h.name===e.variantName);if(!g)return`// Error: Variant ${e.variantName} not found in enum`;if(!g.fields||g.fields.length===0)return"NULL";if(g.fields.length===1&&e.fields.length===1)return Un(e.fields[0],t)}if(mr(_))return In(_,e.variantName,t);let m=(o=t.types[_.id])==null?void 0:o.cName;if(!m)return`// Error: No C type name found for enum ${D(_)}`;let y=In(_,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${m}){ .tag = ${y} }`;{let g=_.variants.find(v=>v.name===e.variantName);if(!g||!g.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((v,$)=>{let E=g.fields[$];if(E&&!De(E.type)){let C=ve(E.label),w=Un(v,t);return`.${C} = ${w}`}return null}).filter(v=>v!==null);return h.length===0?`(${m}){ .tag = ${y} }`:`(${m}){ .tag = ${y}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(or(e)){let _=e.type,f=(a=t.types[_.id])==null?void 0:a.cName;if(!f)return`// Error: No C type name found for tuple ${D(_)}
190
190
  `;let p=e.fields.map((m,y)=>{let g=Un(m,t);return`._${y} = ${g}`});return`(${f}){ ${p.join(", ")} }`}else if(_r(e)){let _=e.type;if(_&&xe(_)){let f=(s=t.types[_.id])==null?void 0:s.cName;if(!f)return`// Error: No C type name found for struct ${D(_)}
191
191
  `;if(_.isNewtype&&_.fields.length===1&&e.fields.length===1){let p=Un(e.fields[0],t);return`((${f})(${p}))`}if(_.isReferenceSemantics){let p=e.fields.map(y=>Un(y,t));return`${`__yo_new_${f}`}(${p.join(", ")})`}else{let p=e.fields.map((m,y)=>{let g=m,h=Qe(_)?`_${y}`:ve(_.fields[y].label),v=Un(g,t);return`.${h} = ${v}`});return`(${f}){ ${p.join(", ")} }`}}}else if(Lr(e)){let _=e.type,f=Y(_,t),p=e.elements.map(m=>Un(m,t));return`(${f}){ .data = { ${p.join(", ")} } }`}else if(Ce(e)){let _=(l=t.functions[e.funcId])==null?void 0:l.cName;return _||`// Error: No C function name found for function value with ID ${e.funcId}
192
- `}else if(W(e)){let _=e.value;if(_)return t.types[_.id]?t.types[_.id].cName:`/* Error: No C type name found for type ${D(_)} */`}else if(vo(e)){let _=e.targetValue[0];if(_){let f=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(f&&tt(f)){let p=f.childType,m=Un(_,t,{$:{type:p,convertedRuntimeType:p}});if(m&&!m.startsWith("/*")&&!m.startsWith("//"))return`(&${m})`}}return`/* Error: Cannot generate pointer value ${lt(e)} */`}}return`/* skip generating: ${lt(e)} */`}function Yo(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(Yo(e.func,t,n))return!0;for(let r of e.args)if(Yo(r,t,n))return!0}return!1}function wg(e,t,n){for(let r=0;r<t.length;r++)if(Yo(e,t[r].expr,n))return r;return-1}function m_(e,t,n){let r=[],i=n==null?void 0:n.shouldSkipBody;if(e.tag!=="FnCall"||!T(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],suspensionPoint:null}]:[{stateNumber:0,expressions:[e],suspensionPoint:t[0]??null}];let o=e.args,a=[],s=[];for(let l of o){let u=wg(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(Kt(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let _=u+1;_<t.length&&Yo(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 ru(e,t){let r=m_(e,t,{shouldSkipBody:wn,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 Fg(e,t){return Yo(e,t,wn)}function y_(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&&Fg(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,M.while)||T(a,M.cond)||T(a,M.match))&&Xn(a);if((l||u)&&e.awaitPoint)Xo(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=B(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=B(a,t,n);!c||!a.$||qt(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Xo(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&er(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=B(l,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&T(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FnCall"&&er(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let _=(a=l.token)==null?void 0:a.value;if(!_||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=B(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${_})`),o.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else o.emitLine(`${r}// Store Future for await (variable: ${_}) - future already in state machine`);return}if(u.tag==="FnCall"&&T(u,M.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=_e(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}Ma(u,t,r,i,c);return}if(u.tag==="FnCall"&&T(u,M.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=_e(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}Oa(u,t,r,i,c);return}}if(e.tag==="FnCall"&&T(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&T(u,M.cond)){let c=B(l,r,i);Ma(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&T(u,M.match)){let c=B(l,r,i);Oa(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&T(e,M.cond)){Ma(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,M.match)){Oa(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,M.while)){iu(e,t,r,i);return}o.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),o.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FnCall"?e.func.tag==="Atom"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function Ma(e,t,n,r,i,o){var g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,M.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let R=0;R<s.length;R++){let H=s[R];if(H.tag==="FnCall"&&T(H,"=>")){let G=H.args[0];if(G&&!(dt((g=G.$)==null?void 0:g.value)&&G.$.value.value===!1)){u=R;break}}}let c=!1;if(u>=0){let R=s[u];if(R.tag==="FnCall"&&T(R,"=>")){let H=R.args[0];H&&dt((h=H.$)==null?void 0:h.value)&&H.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let R=s[u],H=I(R)?R.args[1]:void 0;if(H)if(xi(H)){let j=Ko(H,t,n,r),ie=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(ie&&j.length>0){let ce=($=r.asyncCondBranchInfo)==null?void 0:$.get(t.index),ee=(ce==null?void 0:ce.branches.some(pe=>pe.hasAwait&&pe.remainingExprs&&pe.remainingExprs.length>0))??!1;ie.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:j,deferredDropExpressions:(E=H.$)==null?void 0:E.deferredDropExpressions,skipCondBranchCheck:ee},l.push({index:u,value:H,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(C=H.$)==null?void 0:C.deferredDropExpressions})}else l.push({index:u,value:H,hasAwait:!0,remainingExprs:j,deferredDropExpressions:(w=H.$)==null?void 0:w.deferredDropExpressions})}else{if(Ho(e,H,r,i,o))jo(H,n,r);else if(I(H)&&T(H,M.begin)){let j=H.args;for(let ie=0;ie<j.length;ie++){let ce=j[ie],ee=B(ce,n,r);if(ee==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let pe=ee==="break"||ee==="continue"||(ee==null?void 0:ee.includes("return"));ee&&(pe||ce.$&&!qt(ce.$.env.modulePath,ee))&&a.emitLine(`${n}${ee};`)}}if((b=H.$)!=null&&b.deferredDropExpressions)for(let ie of H.$.deferredDropExpressions){let ce=B(ie,n,r);ce&&a.emitLine(`${n}${ce};`)}}else{let j=B(H,n,r);if(j==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ie=j==="break"||j==="continue"||(j==null?void 0:j.includes("return"));j&&(ie||H.$&&!qt(H.$.env.modulePath,j))&&a.emitLine(`${n}${j};`)}}l.push({index:u,value:H,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let G=r.asyncCondBranchInfo.get(t.index);((G==null?void 0:G.branches.some(K=>K.hasAwait&&K.remainingExprs&&K.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let _=!1,f=0,p=n;for(let R=0;R<s.length;R++){let H=s[R];if(H.tag!=="FnCall"||!T(H,"=>")){a.emitLine(`${p}// Error: Expected => pair in cond`);continue}let G=H.args[0],Q=H.args[1];if(!G||!Q){a.emitLine(`${p}// Error: Invalid pair in cond`);continue}if(dt((k=G.$)==null?void 0:k.value)&&G.$.value.value===!1)continue;_&&(a.emitLine(`${p}else {`),f++,p+=" ");let K=R===s.length-1&&G.tag==="Atom"&&((A=G.token)==null?void 0:A.value)==="true"?null:B(G,p,r);K?a.emitLine(`${p}if (${K}) {`):a.emitLine(`${p}{`),_=!0;let j=`${p} `;if(xi(Q)){a.emitLine(`${j}sm->cond_branch_${t.index} = ${R};`);let ce=Ko(Q,t,j,r),ee=(S=r.asyncWhileLoopInfo)==null?void 0:S.get(t.index);if(ee&&ce.length>0){let pe=(V=r.asyncCondBranchInfo)==null?void 0:V.get(t.index),Z=(pe==null?void 0:pe.branches.some(Ee=>Ee.hasAwait&&Ee.remainingExprs&&Ee.remainingExprs.length>0))??!1;ee.condBranchPostWhileExprs={branchIndex:R,condBranchFieldIndex:t.index,exprs:ce,deferredDropExpressions:(O=Q.$)==null?void 0:O.deferredDropExpressions,skipCondBranchCheck:Z},l.push({index:R,value:Q,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(x=Q.$)==null?void 0:x.deferredDropExpressions})}else l.push({index:R,value:Q,hasAwait:!0,remainingExprs:ce,deferredDropExpressions:(N=Q.$)==null?void 0:N.deferredDropExpressions})}else{if(Ho(e,Q,r,i,o))jo(Q,j,r);else if(I(Q)&&T(Q,M.begin)){let ce=Q.args;for(let ee=0;ee<ce.length;ee++){let pe=ce[ee],Z=B(pe,j,r);if(Z==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let Ee=Z==="break"||Z==="continue"||(Z==null?void 0:Z.includes("return"));Z&&(Ee||pe.$&&!qt(pe.$.env.modulePath,Z))&&a.emitLine(`${j}${Z};`)}}if((P=Q.$)!=null&&P.deferredDropExpressions)for(let ee of Q.$.deferredDropExpressions){let pe=B(ee,j,r);pe&&a.emitLine(`${j}${pe};`)}}else{let ce=B(Q,j,r);if(ce==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let ee=ce==="break"||ce==="continue"||(ce==null?void 0:ce.includes("return"));ce&&(ee||Q.$&&!qt(Q.$.env.modulePath,ce))&&a.emitLine(`${j}${ce};`)}}l.push({index:R,value:Q,hasAwait:!1})}a.emitLine(`${p}}`)}for(let R=0;R<f;R++)p=p.slice(0,-2),a.emitLine(`${p}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let m=r.asyncCondBranchInfo.get(t.index);((m==null?void 0:m.branches.some(R=>R.hasAwait&&R.remainingExprs&&R.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function Ho(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!g_(t)}function jo(e,t,n){var o,a;let r=n.emitter,i=De((o=e.$)==null?void 0:o.type);if(I(e)&&T(e,M.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],_=B(c,t,n);_&&c.$&&!qt(c.$.env.modulePath,_)&&r.emitLine(`${t}${_};`)}let l=s[s.length-1];if(l&&!i){let u=B(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=B(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=B(e,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let s of n.pendingDeferredDrops){let l=B(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}gi({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function xi(e){if(e.tag==="FnCall"&&er(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(xi(t))return!0}return!1}function g_(e){if(Kt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(g_(t))return!0}return!1}function Oa(e,t,n,r,i,o){var m,y,g,h,v,$;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,M.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=B(s,n,r),c=(m=s.$)==null?void 0:m.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((y=e.$)!=null&&y.isPrimitiveMatch){Ag(e,l,u,t,n,r,i,o);return}if(!ze(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let _=c,f=(g=r.types[_.id])==null?void 0:g.cName;if(!f){a.emitLine(`${n}// Error: enum type has no C name`);return}let p=xn(_);if(p){let E=-1,C=-1,w;for(let b=0;b<l.length;b++){let k=l[b];if(I(k)&&T(k,"=>",2)){let A=k.args[0];if(A&&I(A)&&T(A,"."))E=b;else if(A&&I(A)){let S=A.func;S&&I(S)&&T(S,".")&&(C=b,A.args.length>0&&X(A.args[0])&&(w=A.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),C>=0){let b=l[C];if(!I(b))a.emitLine(`${n} // Error: Expected => in case`);else{let k=b.args[1];if(w){let A=r,S=!1,V;if(A.stateMachineVariables){for(let[O,x]of A.stateMachineVariables)if(x.name===w){S=!0,V=O;break}}if(S&&V){let O=Wn(V,"local",A.stateMachineFieldAliases);a.emitLine(`${n} sm->${O} = ${u};`)}else a.emitLine(`${n} ${Y(p,r)} ${w} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${C};`),xi(k)){let A=Ko(k,t,n+" ",r);if(A.length>0){let S=r;S.asyncCondBranchInfo||(S.asyncCondBranchInfo=new Map);let V=S.asyncCondBranchInfo.get(t.index)||{branches:[]};V.branches.push({index:C,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(h=k.$)==null?void 0:h.deferredDropExpressions}),S.asyncCondBranchInfo.set(t.index,V)}}else if(Ho(e,k,r,i,o))jo(k,n+" ",r);else{let A=B(k,n+" ",r);if(i){let S=ve(`var_${i}`);A&&a.emitLine(`${n} sm->${S} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!qt(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}if(a.emitLine(`${n}} else {`),E>=0){let b=l[E];if(!I(b))a.emitLine(`${n} // Error: Expected => in case`);else{let k=b.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`),xi(k)){let A=Ko(k,t,n+" ",r);if(A.length>0){let S=r;S.asyncCondBranchInfo||(S.asyncCondBranchInfo=new Map);let V=S.asyncCondBranchInfo.get(t.index)||{branches:[]};V.branches.push({index:E,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(v=k.$)==null?void 0:v.deferredDropExpressions}),S.asyncCondBranchInfo.set(t.index,V)}}else if(Ho(e,k,r,i,o))jo(k,n+" ",r);else{let A=B(k,n+" ",r);if(i){let S=ve(`var_${i}`);A&&a.emitLine(`${n} sm->${S} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!qt(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let E=!1;for(let C=0;C<l.length;C++){let w=l[C];if(!I(w)||!T(w,"=>",2))continue;let b=w.args[0],k=w.args[1],A=X(b)&&b.token.value==="_",S;if(!A){if(I(b)&&T(b,".",1))S=b.args[0].token.value;else if(I(b)){let V=b.func;V&&I(V)&&T(V,".",1)&&(S=V.args[0].token.value)}}if(!A&&!S){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(A)E=!0,a.emitLine(`${n} default: {`);else{let V=`${f.toUpperCase()}_${S.toUpperCase()}`;a.emitLine(`${n} case ${V}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${C};`),I(b)&&b.args.length>=1){let V=b.func;if(V&&I(V)&&T(V,".")){let O=_.variants.find(x=>x.name===S);if(O&&O.fields)for(let x=0;x<Math.min(b.args.length,O.fields.length);x++){let N=b.args[x],P=O.fields[x];if(X(N)&&P){let R=N.token.value,H=ve(R),G=r,Q=!1,K;if(G.stateMachineVariables){for(let[ce,ee]of G.stateMachineVariables)if(ee.name===R){Q=!0,K=ce;break}}let j=ve(P.label,P.type.isExtern==="c"),ie=`${u}.data.${S}.${j}`;if(Q&&K){let ce=Wn(K,"local",G.stateMachineFieldAliases);a.emitLine(`${n} sm->${ce} = ${ie};`)}else{let ce=Y(P.type,r);a.emitLine(`${n} ${ce} ${H} = ${ie};`)}}}}}if(xi(k)){let V=Ko(k,t,n+" ",r);if(V.length>0){let O=r;O.asyncCondBranchInfo||(O.asyncCondBranchInfo=new Map);let x=O.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:C,value:k,hasAwait:!0,remainingExprs:V,deferredDropExpressions:($=k.$)==null?void 0:$.deferredDropExpressions}),O.asyncCondBranchInfo.set(t.index,x)}}else if(Ho(e,k,r,i,o))jo(k,n+" ",r);else{let V=B(k,n+" ",r);if(i){let O=ve(`var_${i}`);V&&a.emitLine(`${n} sm->${O} = ${V};`)}else o?V&&a.emitLine(`${n} ${o} = ${V};`):V&&k.$&&!qt(k.$.env.modulePath,V)&&a.emitLine(`${n} ${V};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}E||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function Lg(e){return I(e)?T(e,"|",2):!1}function nu(e){if(!Lg(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...nu(t),...nu(n)]}function Ag(e,t,n,r,i,o,a,s){var c,_,f;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let p=0;p<t.length;p++){let m=t[p];if(!I(m)||!T(m,"=>",2))continue;let y=m.args[0],g=m.args[1];if(Kt(y,"_"))l.emitLine(`${i} default:`);else{let h=(c=y.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let v of h)if(v!==void 0){let $=Un(v,o);l.emitLine(`${i} case ${$}:`)}}else{let v=nu(y);for(let $ of v){let E=(_=$.$)==null?void 0:_.value;if(E!==void 0){let C=Un(E,o);l.emitLine(`${i} case ${C}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${p};`),xi(g)){let h=Ko(g,r,i+" ",o);u.push({index:p,value:g,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(f=g.$)==null?void 0:f.deferredDropExpressions})}else{if(Ho(e,g,o,a,s))jo(g,i+" ",o);else{let h=B(g,i+" ",o);if(a){let v=ve(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&g.$&&!qt(g.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:p,value:g,hasAwait:!1})}l.emitLine(`${i} break;`)}l.emitLine(`${i}}`),o.asyncCondBranchInfo||(o.asyncCondBranchInfo=new Map),o.asyncCondBranchInfo.set(r.index,{branches:u,targetVariableId:a,targetAssignmentCode:s})}function Ko(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!T(e,"begin"))return i.emitLine(`${n}// Error: Expected begin block in cond branch with await`),o;let a=e.args,s=!1;for(let l of a){if(s){o.push(l);continue}if(xi(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&er(u)){let c=u.args[0];if(c){let _=B(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"&&er(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=B(u,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}else i.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else if(l.tag==="FnCall"&&T(l,M.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),Ma(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,M.match)){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 l.tag==="FnCall"&&T(l,M.while)&&iu(l,t,n,r);else{let u=B(l,n,r);u&&l.$&&!qt(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function iu(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!T(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length<2||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=Sg(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 _=B(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 f=Ig(l,t,n,r,c);if(i.emitLine(`${n}while_loop_${c}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),u){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:c,conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}function Ig(e,t,n,r,i){var p;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let m=0;m<s.length;m++){let y=s[m];if(Xn(y)){l=m;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=[...((p=e.$)==null?void 0:p.deferredDropExpressions)??[]];for(let m=0;m<l;m++){let y=s[m],g=B(y,n,r);g&&y.$&&!qt(y.$.env.modulePath,g)&&o.emitLine(`${n}${g};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=_;let f=s[l];if(I(f)&&T(f,M.while)&&Xn(f)){iu(f,t,n,r);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}if(I(f)&&T(f,":=")){let m=f.args[1];if(m&&m.tag==="FnCall"&&er(m)){let y=m.args[0];if(y){let g=B(y,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${g};`)}}}else if(f.tag==="FnCall"&&er(f)){let m=f.args[0];if(m&&t.futureVariableId===void 0){let y=B(m,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${y};`)}}else if(I(f)&&T(f,M.cond)){Ma(f,t,n,r,void 0);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}else if(I(f)&&T(f,M.match)){Oa(f,t,n,r);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}function Sg(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,M.while)&&Xn(n))return!0;return!1}function lo(e,t,n){var r,i,o;if(e)switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let a=e.token.value,s=_e(e.$.env,a);if(s.length>0){let l=s[s.length-1];if(l&&!l.isCompileTimeOnly){let u=n.get(l.id)??l.id,c=l.isOwningTheSameRcValueAs?l.isOwningTheSameRcValueAs.id:u;t.add(c)}}}break;case"FnCall":if(wn(e)){if((r=e.$)!=null&&r.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)lo(a,t,n);break}lo(e.func,t,n);for(let a of e.args)lo(a,t,n);if((i=e.$)!=null&&i.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)lo(a,t,n);if((o=e.$)!=null&&o.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)lo(a,t,n);break}}function Vs(e,t){var _,f,p,m;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=ru(e,n);for(let y of a)((_=y.awaitPoint)!=null&&_.isInsideCond||(f=y.awaitPoint)!=null&&f.isInsideWhile)&&o.add(y.stateNumber);let s=new Map;for(let y of a){let g=new Set;for(let h of y.expressions)lo(h,g,i);for(let h of g){let v=s.get(h);v||(v=new Set,s.set(h,v)),v.add(y.stateNumber)}}let l=-1;if((p=e.$)!=null&&p.deferredDropExpressions){let y=new Set;for(let g of e.$.deferredDropExpressions)lo(g,y,i);for(let g of y){let h=s.get(g);h||(h=new Set,s.set(g,h)),h.add(l)}}let u=new Set;for(let y of r){if(y.kind==="outer")continue;let g=s.get(y.id);if(!g)u.add(y.id);else if(g.size>1)u.add(y.id);else if(g.has(l))u.add(y.id);else{let h=g.values().next().value;o.has(h)&&u.add(y.id)}}let c=new Map;for(let y of n){if(y.futureVariableId!==void 0)continue;let g=y.expr;if(!I(g))continue;let h=g.args[0];if(!h)continue;let v=(m=h.$)==null?void 0:m.variableName;if(!v)continue;let $=r.find(E=>E.kind==="local"&&(E.name===v||E.id===v));$&&(c.set($.id,`await_future_${y.index}`),u.delete($.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function xs(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(f=>f.kind==="local"&&e.has(f.id)&&!r.has(f.id)&&!Je(f.type));if(a.length<2)return o;let s=new Map;for(let f of a){let p=t.get(f.id);if(!p||p.size===0)continue;let m=[...p].filter(h=>h>=0);if(m.length===0)continue;let y=Math.min(...m),g=Math.max(...m);s.set(f.id,[y,g])}if(s.size<2)return o;let l=new Map;for(let[f]of s){let p=a.find(g=>g.id===f);if(!p)continue;let m=Y(p.type,i),y=l.get(m);y||(y=[],l.set(m,y)),y.push(f)}let u=new Map,c=[],_=0;for(let[f,p]of l){if(p.length<2)continue;let m=new Map;for(let h of p)m.set(h,new Set);for(let h=0;h<p.length;h++)for(let v=h+1;v<p.length;v++){let[$,E]=s.get(p[h]),[C,w]=s.get(p[v]);$<=w&&C<=E&&(m.get(p[h]).add(p[v]),m.get(p[v]).add(p[h]))}let y=new Map;for(let h of p){let v=new Set;for(let E of m.get(h))y.has(E)&&v.add(y.get(E));let $=0;for(;v.has($);)$++;y.set(h,$)}let g=new Map;for(let[h,v]of y){let $=g.get(v);$||($=[],g.set(v,$)),$.push(h)}for(let[,h]of g){if(h.length<2)continue;let v=`slot_${_}`,$=h.map(E=>{var C;return((C=a.find(w=>w.id===E))==null?void 0:C.name)??E});for(let E of h)u.set(E,v);c.push({fieldName:v,cType:f,variableNames:$}),_++}}return{slotAliases:u,slots:c}}function au(e,t){if(e.futureVariableId){let n=t.capturedVariables.find(r=>r.id===e.futureVariableId);if(n)return n.kind==="outer"?n.name:`var_${n.id}`}return`await_future_${e.index}`}function Ra(e){return!e||!z(e)?!1:e.resolvedConcreteType&&z(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Za(t.traitType))}function Wn(e,t,n){if(t==="outer")return`__capture.${ve(e)}`;let r=n==null?void 0:n.get(e);return r||ve(`var_${e}`)}function v_(e,t,n,r,i,o,a,s){var g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z;let l=s.emitter,c=Cn(o).isFuture.outputType,_=De(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let f=ru(e,i.awaitPoints),p=e.tag==="FnCall"&&T(e,"begin")?e.args:[e],m=p.length>0?p[p.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 y=[];for(let Ee=0;Ee<f.length;Ee++){let Fe=f[Ee];if(!Fe)continue;let be=Fe.stateNumber,Ue=Ee===f.length-1;if(l.emitLine(`
193
- state_${be}:`),l.emitLine(` case ${be}: { // State ${be}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${be}\\n");`),be>0&&i.awaitPoints[be-1]){let q=i.awaitPoints[be-1],oe=au(q,i);q.isInsideCond&&l.emitLine(` if (sm->${oe} != NULL) {`);let re=De(q.resultType)||z(q.resultType)&&!q.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${oe}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${oe});`),l.emitLine(` sm->${oe} = NULL;`),br({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),q&&!re){l.emitLine(` // Extract result from await ${be-1}`),l.emitLine(` int state_before_read = sm->${oe}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${be-1}, state=%d\\n", state_before_read);`);let me=!!q.isInsideCond,$e;if(me?$e=`sm->await_result_${be-1}`:q.targetVariableId&&($e=`sm->${Wn(q.targetVariableId,"local",s.stateMachineFieldAliases)}`),$e)if(Je(q.resultType)){let Re=kr(q.resultType,s);Re?l.emitLine(` ${$e} = ${Re}(sm->${oe}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${$e} = sm->${oe}->result;`))}else l.emitLine(` ${$e} = sm->${oe}->result;`);if(me&&q.targetVariableId){let Re=Wn(q.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${Re} = sm->await_result_${be-1};`)}l.emitLine("")}if(!q.futureVariableId){let me=q.expr;if(me.tag==="FnCall"){let $e=me.args[0],Re=(g=$e==null?void 0:$e.$)==null?void 0:g.type;Re&&(z(Re)||Ke(Re))&&(l.emitLine(` if (sm->${oe} != NULL) { __yo_decr_rc((void*)sm->${oe}); sm->${oe} = NULL; }`),l.emitLine(""))}}let ne=s;if(q){let me=(h=ne.asyncCondBranchInfo)==null?void 0:h.get(q.index);if(me&&me.branches.some(Re=>Re.hasAwait)){let Re=me.condBranchFieldIndex??q.index,ft=Re===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),ft||l.emitLine(` switch (sm->cond_branch_${Re}) {`);let an=((v=Fe.awaitPoint)==null?void 0:v.isInsideCond)??!1;for(let St of me.branches)if(St.hasAwait){if(ft||l.emitLine(` case ${St.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${St.index}\\n");`),St.remainingExprs&&St.remainingExprs.length>0){let wt=s.inAsyncStateMachine,Ln=s.stateMachineVariables,mt=s.variableIdRemapping,sn=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Jt=($=ne.asyncWhileLoopInfo)==null?void 0:$.get(q.index);s.pendingDeferredDrops=[...St.deferredDropExpressions??[],...((E=Jt==null?void 0:Jt.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...((C=e.$)==null?void 0:C.deferredDropExpressions)??[]];let Gt=new Map;for(let Te of i.capturedVariables)Gt.set(Te.id,Te);if(a)for(let Te of a.fields)Gt.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Gt;let en=!1,de=[],ke=me.targetAssignmentCode;for(let Te=0;Te<St.remainingExprs.length;Te++){let he=St.remainingExprs[Te],we=Te===St.remainingExprs.length-1;if(en){de.push(he);continue}if(an&&Xn(he)){en=!0,ou(he,Fe.awaitPoint,i," ",s);continue}let Ne=B(he," ",s);!Ne||!he.$||qt(he.$.env.modulePath,Ne)||(we&&ke?l.emitLine(` ${ke} = ${Ne};`):l.emitLine(` ${Ne};`))}if(St.remainingExprs.length===0&&ke&&l.emitLine(` ${ke} = sm->await_result_${q.index};`),en&&Fe.awaitPoint){let Te=Fe.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let he=ne.asyncCondBranchInfo.get(Te);if(he)he.chainedBranches||(he.chainedBranches=[]),he.chainedBranches.push({branches:[{index:St.index,value:St.value,hasAwait:de.length>0||de.some(we=>Xn(we)),remainingExprs:de,deferredDropExpressions:St.deferredDropExpressions}],condBranchFieldIndex:Re});else{let we={branches:[{index:St.index,value:St.value,hasAwait:de.length>0||de.some(Ne=>Xn(Ne)),remainingExprs:de,deferredDropExpressions:St.deferredDropExpressions}],condBranchFieldIndex:Re};ne.asyncCondBranchInfo.set(Te,we)}}else if(St.deferredDropExpressions)for(let Te of St.deferredDropExpressions){let he=B(Te," ",s);he&&he.includes("sm->")&&l.emitLine(` ${he};`)}s.inAsyncStateMachine=wt,s.stateMachineVariables=Ln,s.variableIdRemapping=mt,s.pendingDeferredDrops=sn}ft||(l.emitLine(" break;"),l.emitLine(" }"))}if(ft||l.emitLine(" }"),me.chainedBranches){for(let St of me.chainedBranches)for(let wt of St.branches)if(wt.hasAwait&&wt.remainingExprs&&wt.remainingExprs.length>0){let Ln=s.inAsyncStateMachine,mt=s.stateMachineVariables,sn=s.variableIdRemapping,Jt=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Gt=(w=ne.asyncWhileLoopInfo)==null?void 0:w.get(q.index);s.pendingDeferredDrops=[...wt.deferredDropExpressions??[],...((b=Gt==null?void 0:Gt.bodyExpr.$)==null?void 0:b.deferredDropExpressions)??[],...((k=e.$)==null?void 0:k.deferredDropExpressions)??[]];let en=new Map;for(let he of i.capturedVariables)en.set(he.id,he);if(a)for(let he of a.fields)en.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=en;let de=((A=Fe.awaitPoint)==null?void 0:A.isInsideCond)??!1,ke=!1,Te=[];for(let he of wt.remainingExprs){if(ke){Te.push(he);continue}if(de&&Xn(he)){ke=!0,ou(he,Fe.awaitPoint,i," ",s);continue}let we=B(he," ",s);!we||!he.$||qt(he.$.env.modulePath,we)||l.emitLine(` ${we};`)}if(ke&&Fe.awaitPoint){let he=Fe.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let we=ne.asyncCondBranchInfo.get(he);we?(we.chainedBranches||(we.chainedBranches=[]),we.chainedBranches.push({branches:[{index:wt.index,value:wt.value,hasAwait:Te.length>0||Te.some(Ne=>Xn(Ne)),remainingExprs:Te,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:St.condBranchFieldIndex})):ne.asyncCondBranchInfo.set(he,{branches:[{index:wt.index,value:wt.value,hasAwait:Te.length>0||Te.some(Ne=>Xn(Ne)),remainingExprs:Te,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:St.condBranchFieldIndex})}else if(wt.deferredDropExpressions)for(let he of wt.deferredDropExpressions){let we=B(he," ",s);we&&we.includes("sm->")&&l.emitLine(` ${we};`)}s.inAsyncStateMachine=Ln,s.stateMachineVariables=mt,s.variableIdRemapping=sn,s.pendingDeferredDrops=Jt}}if(me.targetVariableId){let St=Wn(me.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${St} = sm->await_result_${q.index};`)}l.emitLine("")}q.isInsideCond&&l.emitLine(" }");let $e=(S=ne.asyncWhileLoopInfo)==null?void 0:S.get(q.index);if($e){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${q.index}_active) {`),$e.bodyExprsAfterAwait&&$e.bodyExprsAfterAwait.length>0){let mt=s.inAsyncStateMachine,sn=s.stateMachineVariables,Jt=s.variableIdRemapping,Gt=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((V=$e.bodyExpr.$)==null?void 0:V.deferredDropExpressions)??[],...((O=e.$)==null?void 0:O.deferredDropExpressions)??[]];let en=new Map;for(let he of i.capturedVariables)en.set(he.id,he);if(a)for(let he of a.fields)en.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=en;let de=s.smWhileBreakInfo,ke=s.smWhileContinueInfo,Te=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${q.index}`,activeIndex:q.index},s.smWhileContinueInfo={label:`while_loop_${q.index}_continue`},s.smWhileBodyDrops=[...((x=$e.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[]];for(let he of $e.bodyExprsAfterAwait){let we=B(he," ",s);!we||!he.$||qt(he.$.env.modulePath,we)||l.emitLine(` ${we};`)}s.smWhileBreakInfo=de,s.smWhileContinueInfo=ke,s.smWhileBodyDrops=Te,s.inAsyncStateMachine=mt,s.stateMachineVariables=sn,s.variableIdRemapping=Jt,s.pendingDeferredDrops=Gt}l.emitLine(` while_loop_${q.index}_continue:`);{let mt=((N=$e.bodyExpr.$)==null?void 0:N.deferredDropExpressions)??[];if(mt.length>0){let sn=s.inAsyncStateMachine,Jt=s.stateMachineVariables,Gt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let en=new Map;for(let de of i.capturedVariables)en.set(de.id,de);if(a)for(let de of a.fields)en.set(de.label,{id:de.label,name:de.label,type:de.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=en;for(let de of mt){let ke=B(de," ",s);ke&&ke.includes("sm->")&&l.emitLine(` ${ke};`)}s.inAsyncStateMachine=sn,s.stateMachineVariables=Jt,s.variableIdRemapping=Gt}}if(l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`),$e.stepExpr){let mt=s.inAsyncStateMachine,sn=s.stateMachineVariables,Jt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Gt=new Map;for(let de of i.capturedVariables)Gt.set(de.id,de);if(a)for(let de of a.fields)Gt.set(de.label,{id:de.label,name:de.label,type:de.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Gt;let en=B($e.stepExpr," ",s);en&&l.emitLine(` ${en};`),s.inAsyncStateMachine=mt,s.stateMachineVariables=sn,s.variableIdRemapping=Jt}let Re=s.inAsyncStateMachine,ft=s.stateMachineVariables,an=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let St=new Map;for(let mt of i.capturedVariables)St.set(mt.id,mt);if(a)for(let mt of a.fields)St.set(mt.label,{id:mt.label,name:mt.label,type:mt.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=St;let wt=B($e.conditionExpr," ",s);s.inAsyncStateMachine=Re,s.stateMachineVariables=ft,s.variableIdRemapping=an,l.emitLine(` if (!(${wt})) {`),l.emitLine(` sm->while_loop_${q.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 Ln=q.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${Ln};`),l.emitLine(` goto while_loop_${Ln}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${q.index}:`),$e.condBranchPostWhileExprs){let mt=$e.condBranchPostWhileExprs,sn=mt.condBranchFieldIndex,Jt=mt.branchIndex;mt.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_${sn} == ${Jt}) {`));let Gt=s.inAsyncStateMachine,en=s.stateMachineVariables,de=s.variableIdRemapping,ke=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=e.$)==null?void 0:P.deferredDropExpressions)??[]];let Te=new Map;for(let ot of i.capturedVariables)Te.set(ot.id,ot);if(a)for(let ot of a.fields)Te.set(ot.label,{id:ot.label,name:ot.label,type:ot.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Te;let he=Fe.awaitPoint!=null,we=!1,Ne=[];for(let ot=0;ot<mt.exprs.length;ot++){let Ve=mt.exprs[ot];if(we){Ne.push(Ve);continue}if(he&&Xn(Ve)){we=!0,ou(Ve,Fe.awaitPoint,i," ",s);continue}let ge=B(Ve," ",s);!ge||!Ve.$||qt(Ve.$.env.modulePath,ge)||l.emitLine(` ${ge};`)}if(we&&Fe.awaitPoint){let ot=Fe.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let Ve=mt.skipCondBranchCheck?-1:mt.condBranchFieldIndex,ge=ne.asyncCondBranchInfo.get(ot);ge?(ge.chainedBranches||(ge.chainedBranches=[]),ge.chainedBranches.push({branches:[{index:mt.branchIndex,value:mt.exprs[0],hasAwait:Ne.length>0||Ne.some(Me=>Xn(Me)),remainingExprs:Ne,deferredDropExpressions:mt.deferredDropExpressions}],condBranchFieldIndex:Ve})):ne.asyncCondBranchInfo.set(ot,{branches:[{index:mt.branchIndex,value:mt.exprs[0],hasAwait:Ne.length>0||Ne.some(Me=>Xn(Me)),remainingExprs:Ne,deferredDropExpressions:mt.deferredDropExpressions}],condBranchFieldIndex:Ve})}if(!we&&mt.deferredDropExpressions)for(let ot of mt.deferredDropExpressions){let Ve=B(ot," ",s);Ve&&Ve.includes("sm->")&&l.emitLine(` ${Ve};`)}l.emitLine(" }"),s.inAsyncStateMachine=Gt,s.stateMachineVariables=en,s.variableIdRemapping=de,s.pendingDeferredDrops=ke}if($e.outerWhileLoop){let mt=$e.outerWhileLoop,sn=mt.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${sn}_active) {`),mt.bodyExprsAfterAwait.length>0){let Jt=s.inAsyncStateMachine,Gt=s.stateMachineVariables,en=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((R=mt.bodyExpr.$)==null?void 0:R.deferredDropExpressions)??[],...((H=e.$)==null?void 0:H.deferredDropExpressions)??[]];let ke=new Map;for(let Ne of i.capturedVariables)ke.set(Ne.id,Ne);if(a)for(let Ne of a.fields)ke.set(Ne.label,{id:Ne.label,name:Ne.label,type:Ne.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ke;let Te=s.smWhileBreakInfo,he=s.smWhileContinueInfo,we=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${sn}`,activeIndex:sn},s.smWhileContinueInfo={label:`while_loop_${sn}_continue`},s.smWhileBodyDrops=[...((G=mt.bodyExpr.$)==null?void 0:G.deferredDropExpressions)??[]];for(let Ne of mt.bodyExprsAfterAwait){let ot=B(Ne," ",s);!ot||!Ne.$||qt(Ne.$.env.modulePath,ot)||l.emitLine(` ${ot};`)}s.smWhileBreakInfo=Te,s.smWhileContinueInfo=he,s.smWhileBodyDrops=we,s.inAsyncStateMachine=Jt,s.stateMachineVariables=Gt,s.variableIdRemapping=en,s.pendingDeferredDrops=de}l.emitLine(` while_loop_${sn}_continue:`);{let Jt=((Q=mt.bodyExpr.$)==null?void 0:Q.deferredDropExpressions)??[];if(Jt.length>0){let Gt=s.inAsyncStateMachine,en=s.stateMachineVariables,de=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ke=new Map;for(let Te of i.capturedVariables)ke.set(Te.id,Te);if(a)for(let Te of a.fields)ke.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ke;for(let Te of Jt){let he=B(Te," ",s);he&&he.includes("sm->")&&l.emitLine(` ${he};`)}s.inAsyncStateMachine=Gt,s.stateMachineVariables=en,s.variableIdRemapping=de}}if(mt.stepExpr){let Jt=s.inAsyncStateMachine,Gt=s.stateMachineVariables,en=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let Te of i.capturedVariables)de.set(Te.id,Te);if(a)for(let Te of a.fields)de.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ke=B(mt.stepExpr," ",s);ke&&l.emitLine(` ${ke};`),s.inAsyncStateMachine=Jt,s.stateMachineVariables=Gt,s.variableIdRemapping=en}{let Jt=s.inAsyncStateMachine,Gt=s.stateMachineVariables,en=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let Te of i.capturedVariables)de.set(Te.id,Te);if(a)for(let Te of a.fields)de.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ke=B(mt.conditionExpr," ",s);s.inAsyncStateMachine=Jt,s.stateMachineVariables=Gt,s.variableIdRemapping=en,l.emitLine(` if (!(${ke})) {`),l.emitLine(` sm->while_loop_${sn}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${q.index};`),l.emitLine(` goto while_loop_${sn}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${sn}:`)}}}}let te=s.inAsyncStateMachine,le=s.stateMachineVariables,fe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Se=new Map;for(let q of i.capturedVariables)Se.set(q.id,q);if(a)for(let q of a.fields)Se.set(q.label,{id:q.label,name:q.label,type:q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Se;let it=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((K=e.$)==null?void 0:K.deferredDropExpressions)??[]];let ct=Ue&&!_&&Fe.expressions.length>0,Ft=Fe.expressions.length>0?Fe.expressions[Fe.expressions.length-1]:void 0,Zt=s.asyncBodyReturnExpr;if(!_&&Ft&&m&&Ft===m&&Fe.awaitPoint?s.asyncBodyReturnExpr=Ft:s.asyncBodyReturnExpr=void 0,y_(Fe," ",s,ct),s.asyncBodyReturnExpr=Zt,s.pendingDeferredDrops=it,l.emitLine(""),Fe.awaitPoint){s.inAsyncStateMachine=te,s.stateMachineVariables=le,s.variableIdRemapping=fe;let q=be+1;{let oe=au(Fe.awaitPoint,i),ne=(j=Fe.awaitPoint.expr.args)==null?void 0:j[0],me=Ra((ie=ne==null?void 0:ne.$)==null?void 0:ie.type),$e=(ce=Fe.awaitPoint)==null?void 0:ce.isInsideCond;$e&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${oe} != NULL) {`));let Re=(ee=Fe.awaitPoint)==null?void 0:ee.isInsideWhile,ft=Re?(pe=s.asyncWhileLoopInfo)==null?void 0:pe.get(Fe.awaitPoint.index):void 0;if(Re&&ft){let an=Fe.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${an}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${q};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${oe}->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(""),me?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->${oe}); // event loop reference`)),me||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),Vg(Fe.awaitPoint.expr,`sm->${oe}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${oe}->__yo_resume_fn((void*)sm->${oe});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${oe}->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->${oe}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${oe}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),Re&&ft){let an=Fe.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${an};`),l.emitLine(" }")}$e&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${q};`),l.emitLine(` goto state_${q};`),l.emitLine(" }"))}}else if(Ue){if(!Fe.expressions.some(oe=>T_(oe))){if((Z=e.$)!=null&&Z.deferredDropExpressions){let oe=new zi,re=s.emitter;s.emitter=oe;for(let me of e.$.deferredDropExpressions){let $e=B(me,"",s);$e&&oe.emitLine(`${$e};`)}s.emitter=re;let ne=oe.print().trim();if(ne){l.emitLine(" // Drop local variables before completion");for(let me of ne.split(`
194
- `)){let $e=me.trim();$e&&(l.emitLine(` ${$e}`),y.push($e))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),gi({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=te,s.stateMachineVariables=le,s.variableIdRemapping=fe}else s.inAsyncStateMachine=te,s.stateMachineVariables=le,s.variableIdRemapping=fe;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),y}function ou(e,t,n,r,i){let o=i.emitter,a=au(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&er(s)){let l=s.args[0];if(l){let u=B(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"&&er(e)){let s=e.args[0];if(s){let l=B(s,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${l};`)}return}if(e.tag==="FnCall"&&T(e,M.cond)){Xo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,M.match)){Xo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,M.while)){Xo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,M.begin)){Xo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function T_(e){if(Kt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(T_(t))return!0}return!1}function Ng(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Vg(e,t,n,r){var u,c,_,f,p;let i=(u=e.args)==null?void 0:u[0];if(!((c=i==null?void 0:i.$)!=null&&c.type))return;let o=Cn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Ng(o.isFuture.effects),s=r.emitter,l=(f=e.args)==null?void 0:f.find(m=>I(m)&&T(m,M.using));if(l){let m=l.args;for(let y=0;y<a.length&&y<m.length;y++){let g=a[y],h=m[y];if(J(g.type)){if(g.type.forallParameters.length>0)continue;let v=B(h,n,r),$=g.label;s.emitLine(`${n}${t}->__capture.${$} = (void*)${v};`)}else We(g.type)&&h_(g.type,t,n,(p=h.$)==null?void 0:p.value,r,e)}}else for(let m of a)if(J(m.type)){if(m.type.forallParameters.length>0)continue;let y=xg(m.label,r,e);y&&s.emitLine(`${n}${t}->__capture.${m.label} = (void*)${y};`)}else We(m.type)&&h_(m.type,t,n,void 0,r,e)}function h_(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let _ of e.fields){if(!J(_.type))continue;let f;if(i.stateMachineVariables){for(let[,p]of i.stateMachineVariables)if(p.name===_.label&&p.kind==="outer"){f=`sm->__capture.${_.label}`;break}}if(!f&&r&&Et(r)){let p=e.fields.indexOf(_),m=r.fields[p];if(m&&Ce(m)){let y=i.functions[m.funcId];y&&(f=y.cName)}}if(!f&&i.currentEvidenceParams){for(let p of i.currentEvidenceParams.values())if(p.fieldLabel===_.label){f=p.cParamName;break}}if(!f){let p=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(p){let m=tr(p,y=>y.isImplicit===!0);for(let y=m.length-1;y>=0;y--){let g=m[y],h=(u=g.value)==null?void 0:u[g.value.length-1];if(h&&Et(h)){let v=h.type.fields.findIndex($=>$.label===_.label);if(v>=0){let $=h.fields[v];if($&&Ce($)){let E=(c=i.functions[$.funcId])==null?void 0:c.cName;if(E){f=E;break}}}}}}}f&&a.emitLine(`${n}${t}->__capture.${_.label} = (void*)${f};`)}}function xg(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 Dg=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 E_(e){var n,r,i,o,a;let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let s in e.externFunctions){let{cName:l,type:u}=e.externFunctions[s];if(u.isExtern==="yo"){if(Dg.has(l))continue;su(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||su(u,l,!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"),Og(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Rg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",_=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,f=_&&_.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!f&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&dn(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter(E=>E.isImplicit)].some(E=>J(E.type)))continue;let m=u.specializedType??u.type,y=dn(m).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!f&&!y&&!u.isModuleEffectMember&&(jr(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Vi(u)||Wo(u)||u.isIoAsyncStateMachineClosure))continue;let g=u.specializedType??u.type,h=!f&&!u.isModuleEffectMember&&(g.parameters.some(E=>Ze(E.type))||g.forallParameters.length>0),v=Ze(g.return.type),$=z(g.return.type)&&g.return.type.requiredTraits.length>0;h||v&&!$&&!u.isModuleEffectMember||su(g,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&dn(g).length===0&&dn(u.type).some(E=>E.fieldFunctionType.forallParameters&&E.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function dn(e){let t=[],n=Mg(e.implicitParameters);for(let r of n)We(r.type)?$_(r.label,r.type,[],t):J(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:ve(r.label)});return t}function $_(e,t,n,r){for(let i of t.fields)if(J(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:ve(`${e}__${a}`)})}else We(i.type)&&$_(e,i.type,[...n,i.label],r)}function Mg(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function oi(e,t,n,r,i){let o=r||Y(e.return.type,n),a=e.parameters.filter(_=>!_.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((_,f)=>{let p=ve(_.label||`param${f}`);if(J(_.type))return oi(_.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let m;return z(_.type)&&je(_.type)?_.type.resolvedConcreteType?m=Y(_.type.resolvedConcreteType,n)+"*":m=Y(_.type,n):m=Y(_.type,n),`${m} ${p}`}});s.push(...l);let u=dn(i??e);for(let _ of u)if(_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)s.push(`void* ${_.cParamName}`);else{let f=oi(_.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${_.cParamName})(`);s.push(f)}let c=s.join(", ");return`${o} ${t}(${c})`}function su(e,t,n,r,i,o){var c,_,f,p;let a;if(i&&je(e.return.type)){let m=Da(i);(c=m==null?void 0:m.$)!=null&&c.asyncStateMachineStructName?a=`${m.$.asyncStateMachineStructName}*`:(_=i.$)!=null&&_.type&&z(i.$.type)&&je(i.$.type)&&(a=Y(i.$.type,r))}if(i&&z(e.return.type)&&!je(e.return.type)&&(f=i.$)!=null&&f.type&&(a=Y(i.$.type,r)),!a&&i&&((p=i.$)!=null&&p.type)&&!je(e.return.type)){let m=Y(e.return.type,r),y=Y(i.$.type,r);m!==y&&(a=y)}let s=a?oi(e,t,r,a,o):oi(e,t,r,void 0,o),l=D(e),u=n?"extern ":"static ";r.emitter.emitDeclarationLine(`${u}${s}; // ${l}`)}function Og(e){let t=e.emitter;t.emitDeclarationLine("static void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("static 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(xe(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ze(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=Y(l.type,e),c=ve(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function Rg(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 C_(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Vi(r)||!o||!Fr(r.type)||Fr(o))continue;let a=o.parameters.some(u=>Ze(u.type)),s=Ze(o.return.type);a||s||dn(r.type).some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`static ${oi(o,i,e)}; // specialized function: ${D(r.type)}`))}}function ai(e,t,n){let r=_e(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function b_(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&Nn(e.$.type))}function Pg(e,t,n,r,i,o=!1){var p;let a=Object.values(i.types).find(m=>m.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((p=n.$)!=null&&p.deferredDupExpressions)for(let m of n.$.deferredDupExpressions){let y=Ns(m);y&&l.set(y,m)}let u=e.fields.map(m=>{var v,$;if(m.isEffectParam)return"NULL";let y,g=m.exprs.expr;if(($=(v=g.$)==null?void 0:v.deferredDupExpressions)!=null&&$.length&&(y=g.$.deferredDupExpressions[0]),!y){let E=[m.label];X(g)&&E.push(g.token.value);for(let C of E){let w=l.get(C);if(w){y=w;break}}}if(y)return B(y,r,i);let h={tag:"Atom",token:g.token,$:g.$};return B(h,r,i)}),c=`(${s}){ ${u.map((m,y)=>{let g=e.fields[y];return g?`.${g.label} = ${m}`:`/* Error: missing field at index ${y} */`}).join(", ")} }`,_=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${_}`;return o?i.emitter.emitLine(`${r}${s} ${f} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${f} = ${c};`)),{captureTempVar:f,captureCName:s}}function k_(e,t,n){var m;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=Gn(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=(m=n.functions[o.funcId])==null?void 0:m.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=Ke(e.$.type),u;if(l){let y=n.types[e.$.type.id];if(!y)return"// Error: Dyn closure type not found in context";u=y.cName}let c=a&&xe(a)&&a.fields.length>0,_=Y(i.return.type,n),f=i.parameters.map(y=>Y(y.type,n)).join(", "),p=`(${_} (*)(void*${f?", "+f:""}))${s}`;if(c&&a&&xe(a)){let y=!l,g=Pg(a,i.id,e,t,n,y);if(!g)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=g;if(l){let v=`__yo_create_${u}`,$=`__yo_dispose_${u}`;return`${v}(${h}, ${$}, ${p})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let y=`__yo_create_${u}`,g=`__yo_dispose_${u}`;return`${y}(NULL, ${g}, ${p})`}else{if(e.$.type.tag==="SomeType"){let y=e.$.type;if(y.resolvedConcreteType)return n.implClosureCallMap.set(y.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${Y(y.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function lu(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=B(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function Qo(e,t,n=""){var a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return lu(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return lu(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let Q=t.emitter;for(let K of r.smWhileBodyDrops){let j=B(K,n,t);j&&j.includes("sm->")&&Q.emitLine(`${n}${j};`)}}if(r.smWhileContinueInfo.stepExpr){let Q=t.emitter,K=B(r.smWhileContinueInfo.stepExpr,n,t);K&&Q.emitLine(`${n}${K};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return lu(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:Q,activeIndex:K}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let j=t.emitter;for(let ie of r.smWhileBodyDrops){let ce=B(ie,n,t);ce&&ce.includes("sm->")&&j.emitLine(`${n}${ce};`)}}return K!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${K}_active = false;`),`goto ${Q}`):`goto ${Q}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let Q=t.emitter,K=r.inAsyncStateMachine.futureType,ie=Cn(K).isFuture.outputType,ce=De(ie);if((a=e.$)!=null&&a.deferredDropExpressions)for(let pe of e.$.deferredDropExpressions){let Z=B(pe,n,t);Z&&Z.includes("sm->")&&Q.emitLine(`${n}${Z};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){Q.emitLine(`${n}// Drop local variables before early completion`);for(let pe of r.pendingDeferredDrops){let Z=B(pe,n,t);Z&&Z.includes("sm->")&&Q.emitLine(`${n}${Z};`)}}Q.emitLine(`${n}// Early return - complete the result Future`);let ee=ce?void 0:`(${Y(ie,t)}){0}`;return gi({emitter:Q,indent:n,resultCode:ee,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&De(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let Q=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(Q))return ve(Q);let K=!1;if((u=e.$)!=null&&u.env){let j=_e(e.$.env,Q);if(j.length>0){let ie=j[j.length-1],ce=ie.isOwningTheSameRcValueAs?ie.isOwningTheSameRcValueAs.id:ie.id;(c=r.variableIdRemapping)!=null&&c.has(ce)&&(ce=r.variableIdRemapping.get(ce));let ee=r.stateMachineVariables.get(ce);if(ee){let pe=(_=r.stateMachineFieldAliases)==null?void 0:_.get(ce);if(pe)return K=!0,`sm->${pe}`;let Z=ee.kind==="outer"?`__capture.${Q}`:`var_${ee.id}`;return K=!0,`sm->${Z}`}}}if(!K){for(let[j,ie]of r.stateMachineVariables)if(ie.name===Q){let ce=(f=r.stateMachineFieldAliases)==null?void 0:f.get(j);if(ce)return K=!0,`sm->${ce}`;let ee=ie.kind==="outer"?`__capture.${Q}`:`var_${j}`;return K=!0,`sm->${ee}`}}if((p=e.$)!=null&&p.env){let j=_e(e.$.env,Q);if(j.length>0){let ie=j[j.length-1];if(ie.isOwningTheSameRcValueAs){let ce=ie.isOwningTheSameRcValueAs.name,ee=ie.isOwningTheSameRcValueAs.id;for(let[pe,Z]of r.stateMachineVariables)if(Z.name===ce||pe===ee)return`sm->${Z.kind==="outer"?`__capture.${ce}`:`var_${pe}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(Q)&&r.currentClosureCaptureFrameLevel!==void 0){let j=r.currentClosureCaptureTypeCName;return j?`((${j}*)closure_context)->${Ye(Q,(m=e.$)==null?void 0:m.env)}`:`closure_context->${Ye(Q,(y=e.$)==null?void 0:y.env)}`}if((g=e.$)!=null&&g.variableName){if((h=e.$)!=null&&h.env&&((v=e.$)!=null&&v.value)&&!Oe(e.$.value)){let j=_e(e.$.env,e.$.variableName);if(j.length>0&&j[j.length-1].isCompileTimeOnly)return Un(e.$.value,t,e)}return Ye(e.$.variableName,e.$.env)}}if(($=e.$)!=null&&$.variableName){if((E=e.$)!=null&&E.env&&((C=e.$)!=null&&C.value)&&!Oe(e.$.value)){let Q=_e(e.$.env,e.$.variableName);if(Q.length>0&&Q[Q.length-1].isCompileTimeOnly)return Un(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((w=e.$)!=null&&w.env)&&r.currentClosureCaptureFrameLevel!==void 0&&ai(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Ye(e.$.variableName,(b=e.$)==null?void 0:b.env)}if((k=e.$)!=null&&k.value&&!Oe(e.$.value))return Un(e.$.value,t,e);let i=(A=e.$)!=null&&A.env&&r.currentClosureCaptureFrameLevel!==void 0?ai(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((S=e.$)!=null&&S.env)||i)){let Q=r.currentClosureCaptureTypeCName;return Q?`((${Q}*)closure_context)->${Ye(e.token.value,(V=e.$)==null?void 0:V.env)}`:`closure_context->${Ye(e.token.value,(O=e.$)==null?void 0:O.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let Q=Object.values(r.functions).find(K=>K.cName===r.currentFunctionName);if(Q&&Q.value.type.isClosure){let K=Object.values(r.types).find(j=>J(j.type)&&j.type.isClosure&&j.type===Q.value.type);if(K)return`((${`${K.cName}_capture`}*)closure_context->data)->${Ye(e.token.value,(x=e.$)==null?void 0:x.env)}`}}if((N=e.$)!=null&&N.env){let Q=_e(e.$.env,e.token.value);if(Q.length>0){let K=Q[Q.length-1];if((P=K.value)!=null&&P[0]&&Ce(K.value[0])){let j=(R=t.functions[K.value[0].funcId])==null?void 0:R.cName;if(j)return j}else if(J(K.type)&&(Oe((H=K.value)==null?void 0:H[0])||K.value===void 0)){let j=Object.entries(t.functions).find(([ie,ce])=>ce.value.funcName===e.token.value);if(j)return j[1].cName}}}return Ye(e.token.value,(G=e.$)==null?void 0:G.env)}function w_(e,t,n){var g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q;let r;if(wn(e)){let K=(h=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder)==null?void 0:h[0],j=(v=K==null?void 0:K.$)==null?void 0:v.closureFunctionValue;j&&Ce(j)&&(r=j.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=($=e.$)==null?void 0:$.type;if(!i||!je(i))return"/* Error: async block must have Future type */";let o=Cn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=((E=e.$)==null?void 0: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 _=(C=e.$)==null?void 0:C.awaitAnalysis;if(!_)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=o.isFuture.outputType;if(z(f))if(f.resolvedConcreteType)f=f.resolvedConcreteType;else{let K=(b=(w=e.$)==null?void 0:w.runtimeArgExprsInOrder)==null?void 0:b[0],j=(k=K==null?void 0:K.$)==null?void 0:k.closureFunctionValue;if(j&&Ce(j)){let ie=(S=(A=j.type)==null?void 0:A.return)==null?void 0:S.type;if(ie&&z(ie)&&ie.resolvedConcreteType)f=ie.resolvedConcreteType;else if((O=(V=j.body)==null?void 0:V.$)!=null&&O.type){let ce=j.body.$.type;z(ce)&&ce.resolvedConcreteType?f=ce.resolvedConcreteType:z(ce)||(f=ce)}}}let p=Y(f,n),m=n.emitter;if(m.emitDeclarationLine(`void ${c}(void* sm_ptr); // Dispose function for state machine`),m.emitDeclarationLine(""),m.emitDeclarationLine(`void ${l}(${s}* sm);`),m.emitDeclarationLine(""),(x=e.$)!=null&&x.captureType){let K=e.$.captureType,j=Object.values(n.types).find(ce=>ce.type===K),ie=j?j.cName:`async_capture_${K.id}`;m.emitDeclarationLine(`${s}* ${u}(${ie} __capture);`)}else m.emitDeclarationLine(`${s}* ${u}();`);m.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:f,resultTypeCName:p,captureType:(N=e.$)==null?void 0:N.captureType,analysis:_});let y=(P=e.$)==null?void 0:P.captureType;if(y){let K=Object.values(n.types).find(be=>be.type===y),j=K?K.cName:`async_capture_${y.id}`,ie=n,ce=ie.currentClosureCaptures!==void 0||ie.inAsyncStateMachine!==void 0||ie.inEffectStateMachine!==void 0,ee=!1,pe=y.fields.map(be=>{var le,fe;if(be.isEffectParam)return`.${be.label} = NULL`;let Ue;if(!ce&&((le=e.$)!=null&&le.deferredDupExpressions))for(let Se of e.$.deferredDupExpressions){let it;if(I(Se)&&(Se.args.length>0&&X(Se.args[0])?it=Se.args[0].token.value:Se.args.length===0&&I(Se.func)&&T(Se.func,".")&&Se.func.args.length>=2&&X(Se.func.args[0])&&(it=Se.func.args[0].token.value)),it===be.label){Ue=Se;break}}if(Ue)return ee=!0,(fe=Ue.$)!=null&&fe.variableName?(B(Ue,t,n),`.${be.label} = ${Ue.$.variableName}`):`.${be.label} = ${B(Ue,t,n)}`;let te={tag:"Atom",token:be.exprs.expr.token,$:be.exprs.expr.$};return`.${be.label} = ${Qo(te,n)}`}).join(", "),Z=`(${j}){${pe}}`;if(!ee){let be=kr(y,n);be&&(Z=`${be}(${Z})`)}let Ee=((R=e.$)==null?void 0:R.variableName)||"async_result",Fe=`${u}(${Z})`;if(Ee&&((H=e.$)!=null&&H.type)){let be=Bt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${be} = ${Fe};`),Ee}else return Fe}else{let K=((G=e.$)==null?void 0:G.variableName)||"async_result",j=`${u}()`;if(K&&((Q=e.$)!=null&&Q.type)){let ie=Bt(e.$.type,K,n);return n.emitter.emitLine(`${t}${ie} = ${j};`),K}else return j}}function F_(e,t){var g;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:_,overlappingSlots:f}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${D(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 ${D(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 h=Object.values(t.types).find($=>$.type===s),v=h?h.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${v} __capture;`),n.emitDeclarationLine("")}let p=l.capturedVariables.filter(h=>h.kind!=="outer");if(u&&(p=p.filter(h=>u.has(h.id)&&!(c!=null&&c.has(h.id))&&!(_!=null&&_.has(h.id)))),p.length>0){n.emitDeclarationLine(" // Local variables");for(let h of p){let v=Y(h.type,t),$=Wn(h.id,"local");n.emitDeclarationLine(` ${v} ${$}; // ${h.name}`)}n.emitDeclarationLine("")}if(f&&f.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let h of f)n.emitDeclarationLine(` ${h.cType} ${h.fieldName}; // shared: ${h.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let h=[];for(let v of l.awaitPoints)if(!(De(v.resultType)||z(v.resultType)&&!v.resultType.resolvedConcreteType)&&v.isInsideCond){let C=v.resultType;if(v.futureType){let b=Cn(v.futureType);b&&(C=b.isFuture.outputType)}let w=Y(C,t);h.push(` ${w} await_result_${v.index};`)}if(h.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let v of h)n.emitDeclarationLine(v);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let h=l.awaitPoints.filter(v=>v.futureVariableId===void 0);if(h.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let v of h){let $=v.expr;if($.tag!=="FnCall")continue;let E=$.args[0],C=(g=E==null?void 0:E.$)==null?void 0:g.type;if(!C)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let w=Y(C,t);n.emitDeclarationLine(` ${w} await_future_${v.index};`)}n.emitDeclarationLine("")}}let m=l.awaitPoints.filter(h=>h.needsOwnCondBranchField);if(m.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let h of m)n.emitDeclarationLine(` int cond_branch_${h.index}; // Which branch was taken in cond with await ${h.index}`);n.emitDeclarationLine("")}let y=l.awaitPoints.filter(h=>h.isInsideWhile);if(y.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let h=l.awaitPoints.length;for(let v of y){n.emitDeclarationLine(` _Bool while_loop_${v.index}_active; // Whether while loop ${v.index} should continue`);let $=(v.whileNestingDepth??1)-1;for(let E=0;E<$;E++)n.emitDeclarationLine(` _Bool while_loop_${h}_active; // Whether outer while loop ${h} should continue`),h++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function Ug(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=_=>{let f=r.get(_);f.has(u.structName)||(f.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let _ of u.analysis.capturedVariables){let f;try{f=Y(_.type,e)}catch{continue}let p=n.get(f);p&&p.structName!==u.structName&&c(p.structName)}for(let _ of u.analysis.awaitPoints){if(_.futureVariableId!==void 0)continue;let f=_.expr;if(f.tag!=="FnCall")continue;let p=f.args[0],m=(l=p==null?void 0:p.$)==null?void 0:l.type;if(!m)continue;let y;try{y=Y(m,e)}catch{continue}let g=n.get(y);g&&g.structName!==u.structName&&c(g.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let _ of c){let f=(i.get(_)??0)-1;i.set(_,f),f===0&&o.push(_)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s){let{crossBoundaryIds:c,awaitFutureTempVarAliases:_,variableSegments:f}=Vs(u.bodyExpr,u.analysis),{slotAliases:p,slots:m}=xs(c,f,u.analysis.capturedVariables,_,e);F_({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis,crossBoundaryIds:c,awaitFutureTempVarAliases:_,overlappingSlotAliases:p,overlappingSlots:m},e)}}function zg(e,t,n,r,i,o,a,s,l,u){var _;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&&Je(i)){let f=Object.values(u.types).find(p=>p.type===i);if(!f)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=f.cName,m=i.trait.fields.find(y=>y.label===F.___drop[0]);if(m&&m.assignedValue&&Ce(m.assignedValue)){let y=(_=u.functions[m.assignedValue.funcId])==null?void 0:_.cName;y&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${y}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!De(r)&&Je(r)){let f=Y(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=ii(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${f} */`),c.emitLine(" }")}c.emitLine("");{let f=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let y=`sm->${Wn(p.id,"local")}`;if(Ke(p.type))f.push(` if ((${y}).data != NULL) { __yo_decr_rc((void*)(${y}).data); }`);else if(fn(p.type)||un(p.type))f.push(` if (${y} != NULL) { __yo_decr_rc_atomic((void*)${y}); }`);else if(Ht(p.type)||z(p.type)&&jn(p.type)){let g=ii(p.type,u);g?f.push(` if (${y} != NULL) { ${g}(${y}); }`):f.push(` if (${y} != NULL) { __yo_decr_rc((void*)${y}); }`)}else if(Je(p.type)){let g=ii(p.type,u);g&&f.push(` ${g}(${y});`)}}if(f.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of f)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function Bg(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let _=Object.values(u.types).find(p=>p.type===l),f=_?_.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${f} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = __YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;"),c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`),c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),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 L_(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;Ug(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:f,resultTypeCName:p,captureType:m,analysis:y}=r,g=e.stateMachineVariables,h=e.currentEvidenceParams,v=new Map,{crossBoundaryIds:$,awaitFutureTempVarAliases:E,variableSegments:C}=Vs(o,y),{slotAliases:w}=xs($,C,y.capturedVariables,E,e),b=y.capturedVariables.filter(O=>O.kind==="outer"||$.has(O.id)||E.has(O.id)||w.has(O.id)),k={...y,capturedVariables:b};for(let O of b)v.set(O.id,O);if(m)for(let O of m.fields)v.set(O.label,{id:O.label,name:O.label,type:O.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let A=e.stateMachineFieldAliases,S=new Map(E);for(let[O,x]of w)S.set(O,x);e.stateMachineFieldAliases=S;let V=v_(o,a,s,l,k,_,m,e);if(e.stateMachineVariables=g,e.currentEvidenceParams=h,e.stateMachineFieldAliases=A,t.emitLine(""),zg(a,s,c,f,m,k,V,$,E,e),t.emitLine(""),Bg(a,s,l,u,c,_,f,p,m,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let O=e.deferredAsyncBlocks.slice(i);for(let x of O){let{crossBoundaryIds:N,awaitFutureTempVarAliases:P,variableSegments:R}=Vs(x.bodyExpr,x.analysis),{slotAliases:H,slots:G}=xs(N,R,x.analysis.capturedVariables,P,e);F_({asyncBlockId:x.asyncBlockId,structName:x.structName,resultType:x.resultType,resultTypeCName:x.resultTypeCName,captureType:x.captureType,analysis:x.analysis,crossBoundaryIds:N,awaitFutureTempVarAliases:P,overlappingSlotAliases:H,overlappingSlots:G},e)}}n++}}function A_(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&I_(n.body,e)}}var Gg=["__yo_poll_","__yo_fs_event_","__yo_async_"];function Wg(e){return Gg.some(t=>e.startsWith(t))}function I_(e,t){var n,r,i,o,a,s,l;if(e&&I(e)){let u=e;if(wn(e)){t.usesAsync=!0;let c=(n=e.$)==null?void 0:n.type;if(c&&je(c)&&Cn(c)){let p=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[c.id]={type:c,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for async state machine`)}}if(wn(e)){let c=(i=e.$)==null?void 0:i.type;if(c&&je(c)&&Cn(c)){let f=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,p=!!((a=e.$)!=null&&a.awaitAnalysis),m=p?`${f}_state_t`:`${f}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=m),t.types[c.id]={type:c,cName:m},t.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration for io.async ${p?"state machine":"sync future"}`)}}(er(e)||Ts(e))&&(t.usesAsync=!0);{let c=(s=u.func.$)==null?void 0:s.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&Wg(c.externName)&&(t.usesAsync=!0)}{let c=(l=u.func.$)==null?void 0:l.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&(c.externName==="__yo_thread_spawn"||c.externName==="__yo_worker_spawn")&&(t.usesParallelism=!0)}for(let c of u.args)I_(c,t)}}function S_(e,t,n){var b,k,A,S,V,O,x,N,P,R,H,G;let r=(b=e.$)==null?void 0:b.type;if(!r||!je(r))return"/* Error: io.async must return a Future type */";let i=Cn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(z(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let Q=(A=(k=e.$)==null?void 0:k.runtimeArgExprsInOrder)==null?void 0:A[0],K=(S=Q==null?void 0:Q.$)==null?void 0:S.closureFunctionValue;if(K&&Ce(K)){let j=(O=(V=K.type)==null?void 0:V.return)==null?void 0:O.type;if(j&&z(j)&&j.resolvedConcreteType)o=j.resolvedConcreteType;else if((N=(x=K.body)==null?void 0:x.$)!=null&&N.type){let ie=K.body.$.type;z(ie)&&ie.resolvedConcreteType?o=ie.resolvedConcreteType:z(ie)||(o=ie)}}}let a=Y(o,n),s=(P=e.$)==null?void 0:P.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,_=(H=(R=e.$)==null?void 0:R.runtimeArgExprsInOrder)==null?void 0:H[0];if(!(_!=null&&_.$))return"/* Error: Missing closure argument for io.async */";let f=B(_,t,n),p=_.$.type,m,y;if(z(p)&&p.resolvedConcreteType){let Q=p.resolvedConcreteType,K=n.implClosureCallMap.get(Q.id);K&&(m=K.functionCName);let j=n.types[Q.id];j&&(y=j.cName)}if(!m||!y)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(` ${y} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let g="";for(let Q in n.functions){let K=n.functions[Q];if(K.cName===m){let j=dn(K.value.type);j.length>0&&(g=", "+j.map(ie=>`(void*)sm->__capture.${ie.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),De(o)?c.emitDeclarationLine(` ${m}(&sm->__capture${g});`):c.emitDeclarationLine(` sm->result = ${m}(&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 h=_.$.captureType,v=h&&Je(h)?ii(h,n):void 0,$=h&&Je(h)?kr(h,n):void 0,E=ii(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||E)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),E&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${E}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let C=((G=e.$)==null?void 0:G.variableName)||"__io_async_result",w=Bt(r,C,n);return c.emitLine(`${t}${w} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${C}, 0, sizeof(${s}));`),c.emitLine(`${t}${C}->header.ref_count = 1;`),c.emitLine(`${t}${C}->header.gc_flags = 0;`),c.emitLine(`${t}${C}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${C}->header.gc_next = NULL;`),c.emitLine(`${t}${C}->header.gc_prev = NULL;`),c.emitLine(`${t}${C}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${C}->header.traverse_fn = NULL;`),c.emitLine(`${t}${C}->__capture = ${f};`),$&&c.emitLine(`${t}${C}->__capture = ${$}(${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 N_(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];Ce(o)&&(vi(o.type,t),uo(o.body,t))}let n=new Set,r=!0;for(;r;){r=!1;for(let i in t.functions){if(n.has(i))continue;n.add(i),r=!0;let o=t.functions[i];if(vi(o.value.type,t),o.value.specializedType&&vi(o.value.specializedType,t),uo(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&bn(a.value.type,t),uo(a.body,t)}}}function vi(e,t){for(let n of e.parameters)bn(n.type,t);for(let n of e.forallParameters)bn(n.type,t);bn(e.return.type,t)}function uo(e,t){var n;if(e.$&&e.$.type&&bn(e.$.type,t),e.$&&e.$.value&&Ce(e.$.value)){let r=e.$.value;r.isControlFunction?(vi(r.type,t),Dn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>z(a)&&je(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:ve(r.funcId)},vi(r.type,t),Dn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)uo(r,t);if(e.$&&e.$.macroExpansion&&uo(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)bn(r,t);if(e.$&&e.$.captureType&&xe(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`__yo_${r.id}`};for(let i of r.fields)bn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&Ce(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},vi(o.type,t),Dn(o.body,t))}}}switch(e.tag){case"FnCall":if(T(e,M.test))break;uo(e.func,t);for(let r of e.args)uo(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&W(e.$.value)&&bn(e.$.value.value,t);break}}function bn(e,t){if(!t.types[e.id]){if(z(e)&&Nn(e)){if(e.resolvedConcreteType){bn(e.resolvedConcreteType,t);return}let n=Gn(e);n&&bn(n,t);return}if(z(e)&&je(e)){let n=Cn(e);n&&bn(n.isFuture.outputType,t);return}if(z(e)&&e.resolvedConcreteType){bn(e.resolvedConcreteType,t);return}if(!Ze(e)){if(xe(e)||Pt(e)||ze(e)||Qe(e)||Ke(e)||We(e)||st(e)||Lt(e)||fn(e)||un(e)){let n=Lt(e)?Y(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},xe(e))for(let r of e.fields)bn(r.type,t);if(ze(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)bn(i.type,t)}if(Pt(e))for(let r of e.fields)bn(r.type,t);if(Ke(e)){let r=e;for(let i of r.requiredTraits)bn(i.traitType,t)}if(fn(e)){let r=e;bn(r.childType,t),Y(r,t)}if(un(e)){let r=e;bn(r.childType,t),Y(r,t)}if(Lt(e)&&bn(e.childType,t),We(e)||st(e)){for(let r of e.fields)bn(r.type,t);for(let r of e.fields)if(r.assignedValue&&Ce(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:ve(i.funcId)},vi(i.type,t),Dn(i.body,t))}else if(r.assignedValue&&(Et(r.assignedValue)||on(r.assignedValue))){let i=r.assignedValue;Pa(i,t)}}}else if(Xe(e)){let n=e,r=n.childType,i=n.length;if(ht(i)){bn(r,t);let o=Y(r,t),a=`Array_${ve(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(tt(e)){if(bn(e.childType,t),Lt(e.childType)){let r=e.childType.childType;bn(r,t);let i=Y(r,t),o=`Slice_${ve(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:Y(e,t)}}else p_.has(e.tag)&&(t.types[e.id]={type:e,cName:Y(e,t)});e.trait&&bn(e.trait,t)}}}function co(e){var t,n,r;if(e.$&&e.$.value&&Oe(e.$.value)&&!(J(e.$.type)&&e.$.type.isExtern)){if(!De(e.$.type))return!0}if(I(e)){if(co(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&De(i.$.type))&&co(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&De(e.$.type))return!1;if(co(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(co(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(co(i))return!0}return!1}function Pa(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];if(Ce(r)){let o=i.label;if(o==="main")t.functions[r.funcId]={value:r,cName:"__yo_user_main"};else if(t.isLibrary)if(t.currentModuleId&&r.funcId.startsWith(`fn_${t.currentModuleId}_`)){let s=ve(o);t.functions[r.funcId]={value:r,cName:s},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(r.funcId,o)}else t.functions[r.funcId]={value:r,cName:ve(r.funcId)};else t.functions[r.funcId]={value:r,cName:ve(r.funcId)};Dn(r.body,t)}}}function V_(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&Ce(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:ve(r.funcId)},Dn(r.body,t)):r&&Et(r)&&V_(r,t)}}function Dn(e,t){var i,o,a,s,l,u,c,_,f,p,m;if((i=e.$)!=null&&i.value&&Et(e.$.value)){let y=e.$.value;V_(y,t)}if(I(e)&&T(e,M.test)||I(e)&&T(e,F.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Dn(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let y=e.$.effectAnalysis.handlerValue;y&&Ce(y)&&Dn(y.body,t)}if(e.$&&e.$.closureFunctionValue){let y=e.$.closureFunctionValue;t.functions[y.funcId]||(t.functions[y.funcId]={value:y,cName:ve(y.funcId)},Dn(y.body,t))}if(I(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let y=e.$.type,g=e.args[0];if(Ke(y)&&g&&((a=g.$)!=null&&a.type)){let h=g.$.type,v=e.$.dynCallTraitValues;if(v.length>0&&(Ht(h)||cr(h))){let $=cr(h)?h.fields[0].type:h,E=`${$.id}_${y.id}`;t.dynImpls.set(E,{dynType:y,concreteType:$,dataType:h,traitValues:v})}}}if(I(e)){let y=(s=e.func.$)==null?void 0:s.type,g=(l=e.func.$)==null?void 0:l.value;if(e.func.token.value==="?=")return;if(J(y)){if(Ce(g)&&g.isControlFunction){Dn(g.body,t);for(let h of e.args)Dn(h,t);return}if(Ce(g)){if(g.type.return.isCompileTimeOnly||tl(g)&&!g.specializedType)return;if(g.specializedType&&jr(g.specializedType)&&dn(g.specializedType).length===0){Dn(e.func,t);for(let v of e.args)Dn(v,t);return}if(!t.functions[g.funcId]){let h=!1;if(co(g.body)){let v=g.specializedType??g.type;if(h=v.implicitParameters.length>0&&(dn(v).length>0||!jr(g.type)&&g.type.implicitParameters.length>0),!h)return}if(!h&&!(dn(g.specializedType??g.type).length>0)&&(g.specializedType??g.type).parameters.map(C=>C.type).some(C=>z(C)&&je(C)&&!C.resolvedConcreteType))return;t.functions[g.funcId]={value:g,cName:ve(g.funcId)},Dn(g.body,t)}}else if(y.isExtern==="c"){let h=y.externName?y.externName:X(e.func)?e.func.token.value:y.id;t.externFunctions[y.id]={type:y,cName:h}}else if(y.isExtern==="yo"){let h=y.externName;if(!(h&&h.startsWith("__yo_"))){let v=h?ve(h):X(e.func)?ve(e.func.token.value):ve(y.id);t.externFunctions[y.id]={type:y,cName:v}}}}Dn(e.func,t);for(let h of e.args)Dn(h,t)}let n=(u=e.$)==null?void 0:u.type,r=(c=e.$)==null?void 0:c.value;if(J(n)){if(Ce(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:ve(r.funcId)}),r.specializedFunctionCaches)for(let y of r.specializedFunctionCaches){let g=y.specializedFunction;g&&!t.functions[g.funcId]&&(g.isModuleEffectMember=!0,t.functions[g.funcId]={value:g,cName:ve(g.funcId)},Dn(g.body,t))}Dn(r.body,t);return}if(Ce(r)){if(tl(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(co(r.body))return;t.functions[r.funcId]={value:r,cName:ve(r.funcId)},Dn(r.body,t)}}if(W((_=e.$)==null?void 0:_.value)&&bn(e.$.value.value,t),(f=e.$)!=null&&f.deferredDupExpressions)for(let y of e.$.deferredDupExpressions)Dn(y,t);if((p=e.$)!=null&&p.deferredDropExpressions)for(let y of e.$.deferredDropExpressions)Dn(y,t);if((m=e.$)!=null&&m.dynCallTraitValues)for(let y of e.$.dynCallTraitValues)Pa(y,t)}function x_(e){let t=F.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!xe(r)||!r.isReferenceSemantics)continue;let i=Br({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&Ce(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:ve(a.funcId)},vi(a.type,e),Dn(a.body,e)}}}function D_(e){var r;let t=e.emitter,n=new Set;for(let[,i]of e.dynImpls){let o=((r=e.types[i.dynType.id])==null?void 0:r.cName)||`__yo_dyn_${i.dynType.id}`;n.has(o)||(n.add(o),t.emitLine(`${o} __yo_dup_${o}(${o} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${o}(${o} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function M_(e){var r,i,o;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let s=z(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType,u=`__yo_dyn_box_${((r=e.types[s.id])==null?void 0:r.cName)||`unknown_${s.id}`}`;if(n.has(u))continue;n.add(u);let c=Y(s,e);t.emitLine(`static ${u}* __yo_new_${u}(${c} value) {`),t.emitLine(` ${u}* box = (${u}*)__yo_malloc(sizeof(${u}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${u};`),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_${u}(void* ptr) {`),t.emitLine(` ${u}* box = (${u}*)ptr;`);let f=(i=(z(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(p=>p.label===F.___drop[0]);if(f&&f.assignedValue&&Ce(f.assignedValue)){let p=(o=e.functions[f.assignedValue.funcId])==null?void 0:o.cName;p&&t.emitLine(` ${p}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function O_(e){var n,r,i,o;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!_n(c))continue;let _=c.isFn.callType,f=Y(_.return.type,e),p=`__yo_wrap_${a}_call`,m=["void* self_ptr"];for(let y=0;y<_.parameters.length;y++){let g=_.parameters[y],h=Y(g.type,e);m.push(`${h} arg${y+1}`)}if(t.emitDeclarationLine(`static ${f} ${p}(${m.join(", ")}) {`),cr(l)){let y=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,g=ve(l.fields[0].label);t.emitDeclarationLine(` ${y}* box = (${y}*)self_ptr;`);let h=l.fields[0].type,v=z(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,$=e.implClosureCallMap.get(v.id),E=(()=>{var w;if($)return $.functionCName;for(let[,b]of Object.entries(e.functions)){let A=b.value.closureInfo;if(((w=A==null?void 0:A.captureType)==null?void 0:w.id)===v.id)return b.cName}})(),C=[];if(E){C.push(`(void*)&box->${g}`);for(let w=0;w<_.parameters.length;w++)C.push(`arg${w+1}`);ci(_.return.type)?t.emitDeclarationLine(` ${E}(${C.join(", ")});`):t.emitDeclarationLine(` return ${E}(${C.join(", ")});`)}else{C.push(`box->${g}.data`);for(let w=0;w<_.parameters.length;w++)C.push(`arg${w+1}`);ci(_.return.type)?t.emitDeclarationLine(` box->${g}.call(${C.join(", ")});`):t.emitDeclarationLine(` return box->${g}.call(${C.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let y=0;y<_.parameters.length;y++)t.emitDeclarationLine(` (void)arg${y+1};`);ci(_.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${f} zero = (${f})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:_}=s.dynType.requiredTraits[c];if(_n(_))continue;let f=s.traitValues[c];if(!f){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let m=f.type.fields;for(let y=0;y<m.length;y++){let g=m[y];if(g.label==="Self"||u.has(g.label))continue;let h=f.fields[y];if(!h||!Ce(h)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function value */`);continue}let v=g.type;if(!J(v)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function type */`);continue}let $=h.funcId,E=(r=e.functions[$])==null?void 0:r.cName;if(!E){t.emitDeclarationLine(`/* Warning: Impl function for ${g.label} not found */`);continue}let C=`__yo_wrap_${a}_${g.label}`,w=Y(v.return.type,e),b=["void* self_ptr"];for(let V=1;V<v.parameters.length;V++){let O=v.parameters[V],x=Y(O.type,e);b.push(`${x} arg${V}`)}t.emitDeclarationLine(`static ${w} ${C}(${b.join(", ")}) {`);let k=(i=v.parameters[0])==null?void 0:i.type,A;if(cr(l)){let V=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,O=ve(l.fields[0].label);t.emitDeclarationLine(` ${V}* box = (${V}*)self_ptr;`),k&&tt(k)?A=`&box->${O}`:A=`box->${O}`}else{let V=Y(s.concreteType,e);t.emitDeclarationLine(` ${V} concrete_value = (${V})self_ptr;`),k&&tt(k)?A="&concrete_value":A="concrete_value"}let S=[A];for(let V=1;V<v.parameters.length;V++)S.push(`arg${V}`);ci(v.return.type)?t.emitDeclarationLine(` ${E}(${S.join(", ")});`):t.emitDeclarationLine(` return ${E}(${S.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function R_(e){var r,i,o;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[,a]of e.dynImpls){let s=z(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType,l=((r=e.types[s.id])==null?void 0:r.cName)||`unknown_${s.id}`,u=`__yo_typeid_${l}`;!n.has(u)&&!e.typeIdStatics.has(s.id)&&(n.add(u),e.typeIdStatics.set(s.id,u),t.emitDeclarationLine(`static const char ${u} = 0; // TypeId for ${l}`))}t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=((i=e.types[s.dynType.id])==null?void 0:i.cName)||`__yo_dyn_${s.dynType.id}`,u=z(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,_=`__yo_vtable_${a}`,f=`${l}_vtable`,p=`__yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:g})=>g.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${f} ${_} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${p},`);let m=new Set,y=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:g}of s.dynType.requiredTraits){if(_n(g)){let h=`__yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),m.add("call");continue}for(let h of g.fields)if(h.label!=="Self"&&!y.has(h.label)&&!m.has(h.label)&&(m.add(h.label),J(h.type))){let v=h.type;if(v.parameters.length>0){let $=v.parameters[0];if($&&$.label==="self"){let E=`__yo_wrap_${a}_${h.label}`;t.emitDeclarationLine(` .${ve(h.label)} = ${E},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function P_(e,t){let n=!ao(t);e.emitLine(`
192
+ `}else if(W(e)){let _=e.value;if(_)return t.types[_.id]?t.types[_.id].cName:`/* Error: No C type name found for type ${D(_)} */`}else if(vo(e)){let _=e.targetValue[0];if(_){let f=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(f&&tt(f)){let p=f.childType,m=Un(_,t,{$:{type:p,convertedRuntimeType:p}});if(m&&!m.startsWith("/*")&&!m.startsWith("//"))return`(&${m})`}}return`/* Error: Cannot generate pointer value ${lt(e)} */`}}return`/* skip generating: ${lt(e)} */`}function Yo(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(Yo(e.func,t,n))return!0;for(let r of e.args)if(Yo(r,t,n))return!0}return!1}function Fg(e,t,n){for(let r=0;r<t.length;r++)if(Yo(e,t[r].expr,n))return r;return-1}function m_(e,t,n){let r=[],i=n==null?void 0:n.shouldSkipBody;if(e.tag!=="FnCall"||!T(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],suspensionPoint:null}]:[{stateNumber:0,expressions:[e],suspensionPoint:t[0]??null}];let o=e.args,a=[],s=[];for(let l of o){let u=Fg(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(Kt(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let _=u+1;_<t.length&&Yo(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 ru(e,t){let r=m_(e,t,{shouldSkipBody:wn,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 Lg(e,t){return Yo(e,t,wn)}function y_(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&&Lg(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,M.while)||T(a,M.cond)||T(a,M.match))&&Xn(a);if((l||u)&&e.awaitPoint)Xo(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=B(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=B(a,t,n);!c||!a.$||qt(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Xo(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&er(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=B(l,r,i);o.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),o.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else o.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FnCall"&&T(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){o.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FnCall"&&er(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let _=(a=l.token)==null?void 0:a.value;if(!_||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=B(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${_})`),o.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else o.emitLine(`${r}// Store Future for await (variable: ${_}) - future already in state machine`);return}if(u.tag==="FnCall"&&T(u,M.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=_e(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}Ma(u,t,r,i,c);return}if(u.tag==="FnCall"&&T(u,M.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=_e(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}Oa(u,t,r,i,c);return}}if(e.tag==="FnCall"&&T(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&T(u,M.cond)){let c=B(l,r,i);Ma(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&T(u,M.match)){let c=B(l,r,i);Oa(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&T(e,M.cond)){Ma(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,M.match)){Oa(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,M.while)){iu(e,t,r,i);return}o.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),o.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FnCall"?e.func.tag==="Atom"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function Ma(e,t,n,r,i,o){var g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,M.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let R=0;R<s.length;R++){let H=s[R];if(H.tag==="FnCall"&&T(H,"=>")){let G=H.args[0];if(G&&!(dt((g=G.$)==null?void 0:g.value)&&G.$.value.value===!1)){u=R;break}}}let c=!1;if(u>=0){let R=s[u];if(R.tag==="FnCall"&&T(R,"=>")){let H=R.args[0];H&&dt((h=H.$)==null?void 0:h.value)&&H.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let R=s[u],H=I(R)?R.args[1]:void 0;if(H)if(xi(H)){let j=Ko(H,t,n,r),ie=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(ie&&j.length>0){let ce=($=r.asyncCondBranchInfo)==null?void 0:$.get(t.index),ee=(ce==null?void 0:ce.branches.some(pe=>pe.hasAwait&&pe.remainingExprs&&pe.remainingExprs.length>0))??!1;ie.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:j,deferredDropExpressions:(E=H.$)==null?void 0:E.deferredDropExpressions,skipCondBranchCheck:ee},l.push({index:u,value:H,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(C=H.$)==null?void 0:C.deferredDropExpressions})}else l.push({index:u,value:H,hasAwait:!0,remainingExprs:j,deferredDropExpressions:(w=H.$)==null?void 0:w.deferredDropExpressions})}else{if(Ho(e,H,r,i,o))jo(H,n,r);else if(I(H)&&T(H,M.begin)){let j=H.args;for(let ie=0;ie<j.length;ie++){let ce=j[ie],ee=B(ce,n,r);if(ee==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let pe=ee==="break"||ee==="continue"||(ee==null?void 0:ee.includes("return"));ee&&(pe||ce.$&&!qt(ce.$.env.modulePath,ee))&&a.emitLine(`${n}${ee};`)}}if((b=H.$)!=null&&b.deferredDropExpressions)for(let ie of H.$.deferredDropExpressions){let ce=B(ie,n,r);ce&&a.emitLine(`${n}${ce};`)}}else{let j=B(H,n,r);if(j==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ie=j==="break"||j==="continue"||(j==null?void 0:j.includes("return"));j&&(ie||H.$&&!qt(H.$.env.modulePath,j))&&a.emitLine(`${n}${j};`)}}l.push({index:u,value:H,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let G=r.asyncCondBranchInfo.get(t.index);((G==null?void 0:G.branches.some(K=>K.hasAwait&&K.remainingExprs&&K.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let _=!1,f=0,p=n;for(let R=0;R<s.length;R++){let H=s[R];if(H.tag!=="FnCall"||!T(H,"=>")){a.emitLine(`${p}// Error: Expected => pair in cond`);continue}let G=H.args[0],Q=H.args[1];if(!G||!Q){a.emitLine(`${p}// Error: Invalid pair in cond`);continue}if(dt((k=G.$)==null?void 0:k.value)&&G.$.value.value===!1)continue;_&&(a.emitLine(`${p}else {`),f++,p+=" ");let K=R===s.length-1&&G.tag==="Atom"&&((A=G.token)==null?void 0:A.value)==="true"?null:B(G,p,r);K?a.emitLine(`${p}if (${K}) {`):a.emitLine(`${p}{`),_=!0;let j=`${p} `;if(xi(Q)){a.emitLine(`${j}sm->cond_branch_${t.index} = ${R};`);let ce=Ko(Q,t,j,r),ee=(S=r.asyncWhileLoopInfo)==null?void 0:S.get(t.index);if(ee&&ce.length>0){let pe=(V=r.asyncCondBranchInfo)==null?void 0:V.get(t.index),Z=(pe==null?void 0:pe.branches.some(Ee=>Ee.hasAwait&&Ee.remainingExprs&&Ee.remainingExprs.length>0))??!1;ee.condBranchPostWhileExprs={branchIndex:R,condBranchFieldIndex:t.index,exprs:ce,deferredDropExpressions:(O=Q.$)==null?void 0:O.deferredDropExpressions,skipCondBranchCheck:Z},l.push({index:R,value:Q,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(x=Q.$)==null?void 0:x.deferredDropExpressions})}else l.push({index:R,value:Q,hasAwait:!0,remainingExprs:ce,deferredDropExpressions:(N=Q.$)==null?void 0:N.deferredDropExpressions})}else{if(Ho(e,Q,r,i,o))jo(Q,j,r);else if(I(Q)&&T(Q,M.begin)){let ce=Q.args;for(let ee=0;ee<ce.length;ee++){let pe=ce[ee],Z=B(pe,j,r);if(Z==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let Ee=Z==="break"||Z==="continue"||(Z==null?void 0:Z.includes("return"));Z&&(Ee||pe.$&&!qt(pe.$.env.modulePath,Z))&&a.emitLine(`${j}${Z};`)}}if((P=Q.$)!=null&&P.deferredDropExpressions)for(let ee of Q.$.deferredDropExpressions){let pe=B(ee,j,r);pe&&a.emitLine(`${j}${pe};`)}}else{let ce=B(Q,j,r);if(ce==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let ee=ce==="break"||ce==="continue"||(ce==null?void 0:ce.includes("return"));ce&&(ee||Q.$&&!qt(Q.$.env.modulePath,ce))&&a.emitLine(`${j}${ce};`)}}l.push({index:R,value:Q,hasAwait:!1})}a.emitLine(`${p}}`)}for(let R=0;R<f;R++)p=p.slice(0,-2),a.emitLine(`${p}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let m=r.asyncCondBranchInfo.get(t.index);((m==null?void 0:m.branches.some(R=>R.hasAwait&&R.remainingExprs&&R.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function Ho(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!g_(t)}function jo(e,t,n){var o,a;let r=n.emitter,i=De((o=e.$)==null?void 0:o.type);if(I(e)&&T(e,M.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],_=B(c,t,n);_&&c.$&&!qt(c.$.env.modulePath,_)&&r.emitLine(`${t}${_};`)}let l=s[s.length-1];if(l&&!i){let u=B(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=B(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=B(e,t,n);s&&r.emitLine(`${t}sm->result = ${s};`)}if(r.emitLine(`${t}// Drop local variables before early completion`),n.pendingDeferredDrops)for(let s of n.pendingDeferredDrops){let l=B(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}gi({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function xi(e){if(e.tag==="FnCall"&&er(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(xi(t))return!0}return!1}function g_(e){if(Kt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(g_(t))return!0}return!1}function Oa(e,t,n,r,i,o){var m,y,g,h,v,$;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,M.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=B(s,n,r),c=(m=s.$)==null?void 0:m.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((y=e.$)!=null&&y.isPrimitiveMatch){Ig(e,l,u,t,n,r,i,o);return}if(!ze(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let _=c,f=(g=r.types[_.id])==null?void 0:g.cName;if(!f){a.emitLine(`${n}// Error: enum type has no C name`);return}let p=xn(_);if(p){let E=-1,C=-1,w;for(let b=0;b<l.length;b++){let k=l[b];if(I(k)&&T(k,"=>",2)){let A=k.args[0];if(A&&I(A)&&T(A,"."))E=b;else if(A&&I(A)){let S=A.func;S&&I(S)&&T(S,".")&&(C=b,A.args.length>0&&X(A.args[0])&&(w=A.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),C>=0){let b=l[C];if(!I(b))a.emitLine(`${n} // Error: Expected => in case`);else{let k=b.args[1];if(w){let A=r,S=!1,V;if(A.stateMachineVariables){for(let[O,x]of A.stateMachineVariables)if(x.name===w){S=!0,V=O;break}}if(S&&V){let O=Wn(V,"local",A.stateMachineFieldAliases);a.emitLine(`${n} sm->${O} = ${u};`)}else a.emitLine(`${n} ${Y(p,r)} ${w} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${C};`),xi(k)){let A=Ko(k,t,n+" ",r);if(A.length>0){let S=r;S.asyncCondBranchInfo||(S.asyncCondBranchInfo=new Map);let V=S.asyncCondBranchInfo.get(t.index)||{branches:[]};V.branches.push({index:C,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(h=k.$)==null?void 0:h.deferredDropExpressions}),S.asyncCondBranchInfo.set(t.index,V)}}else if(Ho(e,k,r,i,o))jo(k,n+" ",r);else{let A=B(k,n+" ",r);if(i){let S=ve(`var_${i}`);A&&a.emitLine(`${n} sm->${S} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!qt(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}if(a.emitLine(`${n}} else {`),E>=0){let b=l[E];if(!I(b))a.emitLine(`${n} // Error: Expected => in case`);else{let k=b.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`),xi(k)){let A=Ko(k,t,n+" ",r);if(A.length>0){let S=r;S.asyncCondBranchInfo||(S.asyncCondBranchInfo=new Map);let V=S.asyncCondBranchInfo.get(t.index)||{branches:[]};V.branches.push({index:E,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(v=k.$)==null?void 0:v.deferredDropExpressions}),S.asyncCondBranchInfo.set(t.index,V)}}else if(Ho(e,k,r,i,o))jo(k,n+" ",r);else{let A=B(k,n+" ",r);if(i){let S=ve(`var_${i}`);A&&a.emitLine(`${n} sm->${S} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!qt(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let E=!1;for(let C=0;C<l.length;C++){let w=l[C];if(!I(w)||!T(w,"=>",2))continue;let b=w.args[0],k=w.args[1],A=X(b)&&b.token.value==="_",S;if(!A){if(I(b)&&T(b,".",1))S=b.args[0].token.value;else if(I(b)){let V=b.func;V&&I(V)&&T(V,".",1)&&(S=V.args[0].token.value)}}if(!A&&!S){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(A)E=!0,a.emitLine(`${n} default: {`);else{let V=`${f.toUpperCase()}_${S.toUpperCase()}`;a.emitLine(`${n} case ${V}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${C};`),I(b)&&b.args.length>=1){let V=b.func;if(V&&I(V)&&T(V,".")){let O=_.variants.find(x=>x.name===S);if(O&&O.fields)for(let x=0;x<Math.min(b.args.length,O.fields.length);x++){let N=b.args[x],P=O.fields[x];if(X(N)&&P){let R=N.token.value,H=ve(R),G=r,Q=!1,K;if(G.stateMachineVariables){for(let[ce,ee]of G.stateMachineVariables)if(ee.name===R){Q=!0,K=ce;break}}let j=ve(P.label,P.type.isExtern==="c"),ie=`${u}.data.${S}.${j}`;if(Q&&K){let ce=Wn(K,"local",G.stateMachineFieldAliases);a.emitLine(`${n} sm->${ce} = ${ie};`)}else{let ce=Y(P.type,r);a.emitLine(`${n} ${ce} ${H} = ${ie};`)}}}}}if(xi(k)){let V=Ko(k,t,n+" ",r);if(V.length>0){let O=r;O.asyncCondBranchInfo||(O.asyncCondBranchInfo=new Map);let x=O.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:C,value:k,hasAwait:!0,remainingExprs:V,deferredDropExpressions:($=k.$)==null?void 0:$.deferredDropExpressions}),O.asyncCondBranchInfo.set(t.index,x)}}else if(Ho(e,k,r,i,o))jo(k,n+" ",r);else{let V=B(k,n+" ",r);if(i){let O=ve(`var_${i}`);V&&a.emitLine(`${n} sm->${O} = ${V};`)}else o?V&&a.emitLine(`${n} ${o} = ${V};`):V&&k.$&&!qt(k.$.env.modulePath,V)&&a.emitLine(`${n} ${V};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}E||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function Ag(e){return I(e)?T(e,"|",2):!1}function nu(e){if(!Ag(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...nu(t),...nu(n)]}function Ig(e,t,n,r,i,o,a,s){var c,_,f;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let p=0;p<t.length;p++){let m=t[p];if(!I(m)||!T(m,"=>",2))continue;let y=m.args[0],g=m.args[1];if(Kt(y,"_"))l.emitLine(`${i} default:`);else{let h=(c=y.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let v of h)if(v!==void 0){let $=Un(v,o);l.emitLine(`${i} case ${$}:`)}}else{let v=nu(y);for(let $ of v){let E=(_=$.$)==null?void 0:_.value;if(E!==void 0){let C=Un(E,o);l.emitLine(`${i} case ${C}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${p};`),xi(g)){let h=Ko(g,r,i+" ",o);u.push({index:p,value:g,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(f=g.$)==null?void 0:f.deferredDropExpressions})}else{if(Ho(e,g,o,a,s))jo(g,i+" ",o);else{let h=B(g,i+" ",o);if(a){let v=ve(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&g.$&&!qt(g.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:p,value:g,hasAwait:!1})}l.emitLine(`${i} break;`)}l.emitLine(`${i}}`),o.asyncCondBranchInfo||(o.asyncCondBranchInfo=new Map),o.asyncCondBranchInfo.set(r.index,{branches:u,targetVariableId:a,targetAssignmentCode:s})}function Ko(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!T(e,"begin"))return i.emitLine(`${n}// Error: Expected begin block in cond branch with await`),o;let a=e.args,s=!1;for(let l of a){if(s){o.push(l);continue}if(xi(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&er(u)){let c=u.args[0];if(c){let _=B(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"&&er(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=B(u,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}else i.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else if(l.tag==="FnCall"&&T(l,M.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),Ma(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,M.match)){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 l.tag==="FnCall"&&T(l,M.while)&&iu(l,t,n,r);else{let u=B(l,n,r);u&&l.$&&!qt(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function iu(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!T(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length<2||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=Ng(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 _=B(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 f=Sg(l,t,n,r,c);if(i.emitLine(`${n}while_loop_${c}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),u){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:c,conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}function Sg(e,t,n,r,i){var p;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let m=0;m<s.length;m++){let y=s[m];if(Xn(y)){l=m;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=[...((p=e.$)==null?void 0:p.deferredDropExpressions)??[]];for(let m=0;m<l;m++){let y=s[m],g=B(y,n,r);g&&y.$&&!qt(y.$.env.modulePath,g)&&o.emitLine(`${n}${g};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=_;let f=s[l];if(I(f)&&T(f,M.while)&&Xn(f)){iu(f,t,n,r);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}if(I(f)&&T(f,":=")){let m=f.args[1];if(m&&m.tag==="FnCall"&&er(m)){let y=m.args[0];if(y){let g=B(y,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${g};`)}}}else if(f.tag==="FnCall"&&er(f)){let m=f.args[0];if(m&&t.futureVariableId===void 0){let y=B(m,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${y};`)}}else if(I(f)&&T(f,M.cond)){Ma(f,t,n,r,void 0);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}else if(I(f)&&T(f,M.match)){Oa(f,t,n,r);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}function Ng(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,M.while)&&Xn(n))return!0;return!1}function lo(e,t,n){var r,i,o;if(e)switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let a=e.token.value,s=_e(e.$.env,a);if(s.length>0){let l=s[s.length-1];if(l&&!l.isCompileTimeOnly){let u=n.get(l.id)??l.id,c=l.isOwningTheSameRcValueAs?l.isOwningTheSameRcValueAs.id:u;t.add(c)}}}break;case"FnCall":if(wn(e)){if((r=e.$)!=null&&r.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)lo(a,t,n);break}lo(e.func,t,n);for(let a of e.args)lo(a,t,n);if((i=e.$)!=null&&i.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)lo(a,t,n);if((o=e.$)!=null&&o.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)lo(a,t,n);break}}function Vs(e,t){var _,f,p,m;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=ru(e,n);for(let y of a)((_=y.awaitPoint)!=null&&_.isInsideCond||(f=y.awaitPoint)!=null&&f.isInsideWhile)&&o.add(y.stateNumber);let s=new Map;for(let y of a){let g=new Set;for(let h of y.expressions)lo(h,g,i);for(let h of g){let v=s.get(h);v||(v=new Set,s.set(h,v)),v.add(y.stateNumber)}}let l=-1;if((p=e.$)!=null&&p.deferredDropExpressions){let y=new Set;for(let g of e.$.deferredDropExpressions)lo(g,y,i);for(let g of y){let h=s.get(g);h||(h=new Set,s.set(g,h)),h.add(l)}}let u=new Set;for(let y of r){if(y.kind==="outer")continue;let g=s.get(y.id);if(!g)u.add(y.id);else if(g.size>1)u.add(y.id);else if(g.has(l))u.add(y.id);else{let h=g.values().next().value;o.has(h)&&u.add(y.id)}}let c=new Map;for(let y of n){if(y.futureVariableId!==void 0)continue;let g=y.expr;if(!I(g))continue;let h=g.args[0];if(!h)continue;let v=(m=h.$)==null?void 0:m.variableName;if(!v)continue;let $=r.find(E=>E.kind==="local"&&(E.name===v||E.id===v));$&&(c.set($.id,`await_future_${y.index}`),u.delete($.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function xs(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(f=>f.kind==="local"&&e.has(f.id)&&!r.has(f.id)&&!Je(f.type));if(a.length<2)return o;let s=new Map;for(let f of a){let p=t.get(f.id);if(!p||p.size===0)continue;let m=[...p].filter(h=>h>=0);if(m.length===0)continue;let y=Math.min(...m),g=Math.max(...m);s.set(f.id,[y,g])}if(s.size<2)return o;let l=new Map;for(let[f]of s){let p=a.find(g=>g.id===f);if(!p)continue;let m=Y(p.type,i),y=l.get(m);y||(y=[],l.set(m,y)),y.push(f)}let u=new Map,c=[],_=0;for(let[f,p]of l){if(p.length<2)continue;let m=new Map;for(let h of p)m.set(h,new Set);for(let h=0;h<p.length;h++)for(let v=h+1;v<p.length;v++){let[$,E]=s.get(p[h]),[C,w]=s.get(p[v]);$<=w&&C<=E&&(m.get(p[h]).add(p[v]),m.get(p[v]).add(p[h]))}let y=new Map;for(let h of p){let v=new Set;for(let E of m.get(h))y.has(E)&&v.add(y.get(E));let $=0;for(;v.has($);)$++;y.set(h,$)}let g=new Map;for(let[h,v]of y){let $=g.get(v);$||($=[],g.set(v,$)),$.push(h)}for(let[,h]of g){if(h.length<2)continue;let v=`slot_${_}`,$=h.map(E=>{var C;return((C=a.find(w=>w.id===E))==null?void 0:C.name)??E});for(let E of h)u.set(E,v);c.push({fieldName:v,cType:f,variableNames:$}),_++}}return{slotAliases:u,slots:c}}function au(e,t){if(e.futureVariableId){let n=t.capturedVariables.find(r=>r.id===e.futureVariableId);if(n)return n.kind==="outer"?n.name:`var_${n.id}`}return`await_future_${e.index}`}function Ra(e){return!e||!z(e)?!1:e.resolvedConcreteType&&z(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Za(t.traitType))}function Wn(e,t,n){if(t==="outer")return`__capture.${ve(e)}`;let r=n==null?void 0:n.get(e);return r||ve(`var_${e}`)}function v_(e,t,n,r,i,o,a,s){var g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z;let l=s.emitter,c=Cn(o).isFuture.outputType,_=De(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let f=ru(e,i.awaitPoints),p=e.tag==="FnCall"&&T(e,"begin")?e.args:[e],m=p.length>0?p[p.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 y=[];for(let Ee=0;Ee<f.length;Ee++){let Fe=f[Ee];if(!Fe)continue;let be=Fe.stateNumber,Ue=Ee===f.length-1;if(l.emitLine(`
193
+ state_${be}:`),l.emitLine(` case ${be}: { // State ${be}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${be}\\n");`),be>0&&i.awaitPoints[be-1]){let q=i.awaitPoints[be-1],oe=au(q,i);q.isInsideCond&&l.emitLine(` if (sm->${oe} != NULL) {`);let re=De(q.resultType)||z(q.resultType)&&!q.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${oe}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${oe});`),l.emitLine(` sm->${oe} = NULL;`),br({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),q&&!re){l.emitLine(` // Extract result from await ${be-1}`),l.emitLine(` int state_before_read = sm->${oe}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${be-1}, state=%d\\n", state_before_read);`);let me=!!q.isInsideCond,$e;if(me?$e=`sm->await_result_${be-1}`:q.targetVariableId&&($e=`sm->${Wn(q.targetVariableId,"local",s.stateMachineFieldAliases)}`),$e)if(Je(q.resultType)){let Re=kr(q.resultType,s);Re?l.emitLine(` ${$e} = ${Re}(sm->${oe}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${$e} = sm->${oe}->result;`))}else l.emitLine(` ${$e} = sm->${oe}->result;`);if(me&&q.targetVariableId){let Re=Wn(q.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${Re} = sm->await_result_${be-1};`)}l.emitLine("")}if(!q.futureVariableId){let me=q.expr;if(me.tag==="FnCall"){let $e=me.args[0],Re=(g=$e==null?void 0:$e.$)==null?void 0:g.type;Re&&(z(Re)||Ke(Re))&&(l.emitLine(` if (sm->${oe} != NULL) { __yo_decr_rc((void*)sm->${oe}); sm->${oe} = NULL; }`),l.emitLine(""))}}let ne=s;if(q){let me=(h=ne.asyncCondBranchInfo)==null?void 0:h.get(q.index);if(me&&me.branches.some(Re=>Re.hasAwait)){let Re=me.condBranchFieldIndex??q.index,ft=Re===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),ft||l.emitLine(` switch (sm->cond_branch_${Re}) {`);let an=((v=Fe.awaitPoint)==null?void 0:v.isInsideCond)??!1;for(let St of me.branches)if(St.hasAwait){if(ft||l.emitLine(` case ${St.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${St.index}\\n");`),St.remainingExprs&&St.remainingExprs.length>0){let wt=s.inAsyncStateMachine,An=s.stateMachineVariables,mt=s.variableIdRemapping,sn=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Jt=($=ne.asyncWhileLoopInfo)==null?void 0:$.get(q.index);s.pendingDeferredDrops=[...St.deferredDropExpressions??[],...((E=Jt==null?void 0:Jt.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...((C=e.$)==null?void 0:C.deferredDropExpressions)??[]];let Gt=new Map;for(let Te of i.capturedVariables)Gt.set(Te.id,Te);if(a)for(let Te of a.fields)Gt.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Gt;let en=!1,de=[],ke=me.targetAssignmentCode;for(let Te=0;Te<St.remainingExprs.length;Te++){let he=St.remainingExprs[Te],we=Te===St.remainingExprs.length-1;if(en){de.push(he);continue}if(an&&Xn(he)){en=!0,ou(he,Fe.awaitPoint,i," ",s);continue}let Ne=B(he," ",s);!Ne||!he.$||qt(he.$.env.modulePath,Ne)||(we&&ke?l.emitLine(` ${ke} = ${Ne};`):l.emitLine(` ${Ne};`))}if(St.remainingExprs.length===0&&ke&&l.emitLine(` ${ke} = sm->await_result_${q.index};`),en&&Fe.awaitPoint){let Te=Fe.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let he=ne.asyncCondBranchInfo.get(Te);if(he)he.chainedBranches||(he.chainedBranches=[]),he.chainedBranches.push({branches:[{index:St.index,value:St.value,hasAwait:de.length>0||de.some(we=>Xn(we)),remainingExprs:de,deferredDropExpressions:St.deferredDropExpressions}],condBranchFieldIndex:Re});else{let we={branches:[{index:St.index,value:St.value,hasAwait:de.length>0||de.some(Ne=>Xn(Ne)),remainingExprs:de,deferredDropExpressions:St.deferredDropExpressions}],condBranchFieldIndex:Re};ne.asyncCondBranchInfo.set(Te,we)}}else if(St.deferredDropExpressions)for(let Te of St.deferredDropExpressions){let he=B(Te," ",s);he&&he.includes("sm->")&&l.emitLine(` ${he};`)}s.inAsyncStateMachine=wt,s.stateMachineVariables=An,s.variableIdRemapping=mt,s.pendingDeferredDrops=sn}ft||(l.emitLine(" break;"),l.emitLine(" }"))}if(ft||l.emitLine(" }"),me.chainedBranches){for(let St of me.chainedBranches)for(let wt of St.branches)if(wt.hasAwait&&wt.remainingExprs&&wt.remainingExprs.length>0){let An=s.inAsyncStateMachine,mt=s.stateMachineVariables,sn=s.variableIdRemapping,Jt=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Gt=(w=ne.asyncWhileLoopInfo)==null?void 0:w.get(q.index);s.pendingDeferredDrops=[...wt.deferredDropExpressions??[],...((b=Gt==null?void 0:Gt.bodyExpr.$)==null?void 0:b.deferredDropExpressions)??[],...((k=e.$)==null?void 0:k.deferredDropExpressions)??[]];let en=new Map;for(let he of i.capturedVariables)en.set(he.id,he);if(a)for(let he of a.fields)en.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=en;let de=((A=Fe.awaitPoint)==null?void 0:A.isInsideCond)??!1,ke=!1,Te=[];for(let he of wt.remainingExprs){if(ke){Te.push(he);continue}if(de&&Xn(he)){ke=!0,ou(he,Fe.awaitPoint,i," ",s);continue}let we=B(he," ",s);!we||!he.$||qt(he.$.env.modulePath,we)||l.emitLine(` ${we};`)}if(ke&&Fe.awaitPoint){let he=Fe.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let we=ne.asyncCondBranchInfo.get(he);we?(we.chainedBranches||(we.chainedBranches=[]),we.chainedBranches.push({branches:[{index:wt.index,value:wt.value,hasAwait:Te.length>0||Te.some(Ne=>Xn(Ne)),remainingExprs:Te,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:St.condBranchFieldIndex})):ne.asyncCondBranchInfo.set(he,{branches:[{index:wt.index,value:wt.value,hasAwait:Te.length>0||Te.some(Ne=>Xn(Ne)),remainingExprs:Te,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:St.condBranchFieldIndex})}else if(wt.deferredDropExpressions)for(let he of wt.deferredDropExpressions){let we=B(he," ",s);we&&we.includes("sm->")&&l.emitLine(` ${we};`)}s.inAsyncStateMachine=An,s.stateMachineVariables=mt,s.variableIdRemapping=sn,s.pendingDeferredDrops=Jt}}if(me.targetVariableId){let St=Wn(me.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${St} = sm->await_result_${q.index};`)}l.emitLine("")}q.isInsideCond&&l.emitLine(" }");let $e=(S=ne.asyncWhileLoopInfo)==null?void 0:S.get(q.index);if($e){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${q.index}_active) {`),$e.bodyExprsAfterAwait&&$e.bodyExprsAfterAwait.length>0){let mt=s.inAsyncStateMachine,sn=s.stateMachineVariables,Jt=s.variableIdRemapping,Gt=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((V=$e.bodyExpr.$)==null?void 0:V.deferredDropExpressions)??[],...((O=e.$)==null?void 0:O.deferredDropExpressions)??[]];let en=new Map;for(let he of i.capturedVariables)en.set(he.id,he);if(a)for(let he of a.fields)en.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=en;let de=s.smWhileBreakInfo,ke=s.smWhileContinueInfo,Te=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${q.index}`,activeIndex:q.index},s.smWhileContinueInfo={label:`while_loop_${q.index}_continue`},s.smWhileBodyDrops=[...((x=$e.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[]];for(let he of $e.bodyExprsAfterAwait){let we=B(he," ",s);!we||!he.$||qt(he.$.env.modulePath,we)||l.emitLine(` ${we};`)}s.smWhileBreakInfo=de,s.smWhileContinueInfo=ke,s.smWhileBodyDrops=Te,s.inAsyncStateMachine=mt,s.stateMachineVariables=sn,s.variableIdRemapping=Jt,s.pendingDeferredDrops=Gt}l.emitLine(` while_loop_${q.index}_continue:`);{let mt=((N=$e.bodyExpr.$)==null?void 0:N.deferredDropExpressions)??[];if(mt.length>0){let sn=s.inAsyncStateMachine,Jt=s.stateMachineVariables,Gt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let en=new Map;for(let de of i.capturedVariables)en.set(de.id,de);if(a)for(let de of a.fields)en.set(de.label,{id:de.label,name:de.label,type:de.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=en;for(let de of mt){let ke=B(de," ",s);ke&&ke.includes("sm->")&&l.emitLine(` ${ke};`)}s.inAsyncStateMachine=sn,s.stateMachineVariables=Jt,s.variableIdRemapping=Gt}}if(l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`),$e.stepExpr){let mt=s.inAsyncStateMachine,sn=s.stateMachineVariables,Jt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Gt=new Map;for(let de of i.capturedVariables)Gt.set(de.id,de);if(a)for(let de of a.fields)Gt.set(de.label,{id:de.label,name:de.label,type:de.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Gt;let en=B($e.stepExpr," ",s);en&&l.emitLine(` ${en};`),s.inAsyncStateMachine=mt,s.stateMachineVariables=sn,s.variableIdRemapping=Jt}let Re=s.inAsyncStateMachine,ft=s.stateMachineVariables,an=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let St=new Map;for(let mt of i.capturedVariables)St.set(mt.id,mt);if(a)for(let mt of a.fields)St.set(mt.label,{id:mt.label,name:mt.label,type:mt.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=St;let wt=B($e.conditionExpr," ",s);s.inAsyncStateMachine=Re,s.stateMachineVariables=ft,s.variableIdRemapping=an,l.emitLine(` if (!(${wt})) {`),l.emitLine(` sm->while_loop_${q.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 An=q.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${An};`),l.emitLine(` goto while_loop_${An}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${q.index}:`),$e.condBranchPostWhileExprs){let mt=$e.condBranchPostWhileExprs,sn=mt.condBranchFieldIndex,Jt=mt.branchIndex;mt.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_${sn} == ${Jt}) {`));let Gt=s.inAsyncStateMachine,en=s.stateMachineVariables,de=s.variableIdRemapping,ke=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=e.$)==null?void 0:P.deferredDropExpressions)??[]];let Te=new Map;for(let ot of i.capturedVariables)Te.set(ot.id,ot);if(a)for(let ot of a.fields)Te.set(ot.label,{id:ot.label,name:ot.label,type:ot.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Te;let he=Fe.awaitPoint!=null,we=!1,Ne=[];for(let ot=0;ot<mt.exprs.length;ot++){let Ve=mt.exprs[ot];if(we){Ne.push(Ve);continue}if(he&&Xn(Ve)){we=!0,ou(Ve,Fe.awaitPoint,i," ",s);continue}let ge=B(Ve," ",s);!ge||!Ve.$||qt(Ve.$.env.modulePath,ge)||l.emitLine(` ${ge};`)}if(we&&Fe.awaitPoint){let ot=Fe.awaitPoint.index;ne.asyncCondBranchInfo||(ne.asyncCondBranchInfo=new Map);let Ve=mt.skipCondBranchCheck?-1:mt.condBranchFieldIndex,ge=ne.asyncCondBranchInfo.get(ot);ge?(ge.chainedBranches||(ge.chainedBranches=[]),ge.chainedBranches.push({branches:[{index:mt.branchIndex,value:mt.exprs[0],hasAwait:Ne.length>0||Ne.some(Me=>Xn(Me)),remainingExprs:Ne,deferredDropExpressions:mt.deferredDropExpressions}],condBranchFieldIndex:Ve})):ne.asyncCondBranchInfo.set(ot,{branches:[{index:mt.branchIndex,value:mt.exprs[0],hasAwait:Ne.length>0||Ne.some(Me=>Xn(Me)),remainingExprs:Ne,deferredDropExpressions:mt.deferredDropExpressions}],condBranchFieldIndex:Ve})}if(!we&&mt.deferredDropExpressions)for(let ot of mt.deferredDropExpressions){let Ve=B(ot," ",s);Ve&&Ve.includes("sm->")&&l.emitLine(` ${Ve};`)}l.emitLine(" }"),s.inAsyncStateMachine=Gt,s.stateMachineVariables=en,s.variableIdRemapping=de,s.pendingDeferredDrops=ke}if($e.outerWhileLoop){let mt=$e.outerWhileLoop,sn=mt.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${sn}_active) {`),mt.bodyExprsAfterAwait.length>0){let Jt=s.inAsyncStateMachine,Gt=s.stateMachineVariables,en=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((R=mt.bodyExpr.$)==null?void 0:R.deferredDropExpressions)??[],...((H=e.$)==null?void 0:H.deferredDropExpressions)??[]];let ke=new Map;for(let Ne of i.capturedVariables)ke.set(Ne.id,Ne);if(a)for(let Ne of a.fields)ke.set(Ne.label,{id:Ne.label,name:Ne.label,type:Ne.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ke;let Te=s.smWhileBreakInfo,he=s.smWhileContinueInfo,we=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${sn}`,activeIndex:sn},s.smWhileContinueInfo={label:`while_loop_${sn}_continue`},s.smWhileBodyDrops=[...((G=mt.bodyExpr.$)==null?void 0:G.deferredDropExpressions)??[]];for(let Ne of mt.bodyExprsAfterAwait){let ot=B(Ne," ",s);!ot||!Ne.$||qt(Ne.$.env.modulePath,ot)||l.emitLine(` ${ot};`)}s.smWhileBreakInfo=Te,s.smWhileContinueInfo=he,s.smWhileBodyDrops=we,s.inAsyncStateMachine=Jt,s.stateMachineVariables=Gt,s.variableIdRemapping=en,s.pendingDeferredDrops=de}l.emitLine(` while_loop_${sn}_continue:`);{let Jt=((Q=mt.bodyExpr.$)==null?void 0:Q.deferredDropExpressions)??[];if(Jt.length>0){let Gt=s.inAsyncStateMachine,en=s.stateMachineVariables,de=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ke=new Map;for(let Te of i.capturedVariables)ke.set(Te.id,Te);if(a)for(let Te of a.fields)ke.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ke;for(let Te of Jt){let he=B(Te," ",s);he&&he.includes("sm->")&&l.emitLine(` ${he};`)}s.inAsyncStateMachine=Gt,s.stateMachineVariables=en,s.variableIdRemapping=de}}if(mt.stepExpr){let Jt=s.inAsyncStateMachine,Gt=s.stateMachineVariables,en=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let Te of i.capturedVariables)de.set(Te.id,Te);if(a)for(let Te of a.fields)de.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ke=B(mt.stepExpr," ",s);ke&&l.emitLine(` ${ke};`),s.inAsyncStateMachine=Jt,s.stateMachineVariables=Gt,s.variableIdRemapping=en}{let Jt=s.inAsyncStateMachine,Gt=s.stateMachineVariables,en=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let Te of i.capturedVariables)de.set(Te.id,Te);if(a)for(let Te of a.fields)de.set(Te.label,{id:Te.label,name:Te.label,type:Te.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ke=B(mt.conditionExpr," ",s);s.inAsyncStateMachine=Jt,s.stateMachineVariables=Gt,s.variableIdRemapping=en,l.emitLine(` if (!(${ke})) {`),l.emitLine(` sm->while_loop_${sn}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${q.index};`),l.emitLine(` goto while_loop_${sn}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${sn}:`)}}}}let te=s.inAsyncStateMachine,le=s.stateMachineVariables,fe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Se=new Map;for(let q of i.capturedVariables)Se.set(q.id,q);if(a)for(let q of a.fields)Se.set(q.label,{id:q.label,name:q.label,type:q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Se;let it=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((K=e.$)==null?void 0:K.deferredDropExpressions)??[]];let ct=Ue&&!_&&Fe.expressions.length>0,Ft=Fe.expressions.length>0?Fe.expressions[Fe.expressions.length-1]:void 0,Zt=s.asyncBodyReturnExpr;if(!_&&Ft&&m&&Ft===m&&Fe.awaitPoint?s.asyncBodyReturnExpr=Ft:s.asyncBodyReturnExpr=void 0,y_(Fe," ",s,ct),s.asyncBodyReturnExpr=Zt,s.pendingDeferredDrops=it,l.emitLine(""),Fe.awaitPoint){s.inAsyncStateMachine=te,s.stateMachineVariables=le,s.variableIdRemapping=fe;let q=be+1;{let oe=au(Fe.awaitPoint,i),ne=(j=Fe.awaitPoint.expr.args)==null?void 0:j[0],me=Ra((ie=ne==null?void 0:ne.$)==null?void 0:ie.type),$e=(ce=Fe.awaitPoint)==null?void 0:ce.isInsideCond;$e&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${oe} != NULL) {`));let Re=(ee=Fe.awaitPoint)==null?void 0:ee.isInsideWhile,ft=Re?(pe=s.asyncWhileLoopInfo)==null?void 0:pe.get(Fe.awaitPoint.index):void 0;if(Re&&ft){let an=Fe.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${an}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${q};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${oe}->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(""),me?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->${oe}); // event loop reference`)),me||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),xg(Fe.awaitPoint.expr,`sm->${oe}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${oe}->__yo_resume_fn((void*)sm->${oe});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${oe}->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->${oe}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${oe}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),Re&&ft){let an=Fe.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${an};`),l.emitLine(" }")}$e&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${q};`),l.emitLine(` goto state_${q};`),l.emitLine(" }"))}}else if(Ue){if(!Fe.expressions.some(oe=>T_(oe))){if((Z=e.$)!=null&&Z.deferredDropExpressions){let oe=new zi,re=s.emitter;s.emitter=oe;for(let me of e.$.deferredDropExpressions){let $e=B(me,"",s);$e&&oe.emitLine(`${$e};`)}s.emitter=re;let ne=oe.print().trim();if(ne){l.emitLine(" // Drop local variables before completion");for(let me of ne.split(`
194
+ `)){let $e=me.trim();$e&&(l.emitLine(` ${$e}`),y.push($e))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),gi({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=te,s.stateMachineVariables=le,s.variableIdRemapping=fe}else s.inAsyncStateMachine=te,s.stateMachineVariables=le,s.variableIdRemapping=fe;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),y}function ou(e,t,n,r,i){let o=i.emitter,a=au(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&er(s)){let l=s.args[0];if(l){let u=B(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"&&er(e)){let s=e.args[0];if(s){let l=B(s,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${l};`)}return}if(e.tag==="FnCall"&&T(e,M.cond)){Xo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,M.match)){Xo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,M.while)){Xo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,M.begin)){Xo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function T_(e){if(Kt(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(T_(t))return!0}return!1}function Vg(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function xg(e,t,n,r){var u,c,_,f,p;let i=(u=e.args)==null?void 0:u[0];if(!((c=i==null?void 0:i.$)!=null&&c.type))return;let o=Cn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Vg(o.isFuture.effects),s=r.emitter,l=(f=e.args)==null?void 0:f.find(m=>I(m)&&T(m,M.using));if(l){let m=l.args;for(let y=0;y<a.length&&y<m.length;y++){let g=a[y],h=m[y];if(J(g.type)){if(g.type.forallParameters.length>0)continue;let v=B(h,n,r),$=g.label;s.emitLine(`${n}${t}->__capture.${$} = (void*)${v};`)}else We(g.type)&&h_(g.type,t,n,(p=h.$)==null?void 0:p.value,r,e)}}else for(let m of a)if(J(m.type)){if(m.type.forallParameters.length>0)continue;let y=Dg(m.label,r,e);y&&s.emitLine(`${n}${t}->__capture.${m.label} = (void*)${y};`)}else We(m.type)&&h_(m.type,t,n,void 0,r,e)}function h_(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let _ of e.fields){if(!J(_.type))continue;let f;if(i.stateMachineVariables){for(let[,p]of i.stateMachineVariables)if(p.name===_.label&&p.kind==="outer"){f=`sm->__capture.${_.label}`;break}}if(!f&&r&&Et(r)){let p=e.fields.indexOf(_),m=r.fields[p];if(m&&Ce(m)){let y=i.functions[m.funcId];y&&(f=y.cName)}}if(!f&&i.currentEvidenceParams){for(let p of i.currentEvidenceParams.values())if(p.fieldLabel===_.label){f=p.cParamName;break}}if(!f){let p=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(p){let m=tr(p,y=>y.isImplicit===!0);for(let y=m.length-1;y>=0;y--){let g=m[y],h=(u=g.value)==null?void 0:u[g.value.length-1];if(h&&Et(h)){let v=h.type.fields.findIndex($=>$.label===_.label);if(v>=0){let $=h.fields[v];if($&&Ce($)){let E=(c=i.functions[$.funcId])==null?void 0:c.cName;if(E){f=E;break}}}}}}}f&&a.emitLine(`${n}${t}->__capture.${_.label} = (void*)${f};`)}}function Dg(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 Mg=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 E_(e){var n,r,i,o,a;let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let s in e.externFunctions){let{cName:l,type:u}=e.externFunctions[s];if(u.isExtern==="yo"){if(Mg.has(l))continue;su(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||su(u,l,!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"),Rg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Pg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",_=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,f=_&&_.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!f&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&un(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter(E=>E.isImplicit)].some(E=>J(E.type)))continue;let m=u.specializedType??u.type,y=un(m).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!f&&!y&&!u.isModuleEffectMember&&(jr(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Vi(u)||Wo(u)||u.isIoAsyncStateMachineClosure))continue;let g=u.specializedType??u.type,h=!f&&!u.isModuleEffectMember&&(g.parameters.some(E=>Ze(E.type))||g.forallParameters.length>0),v=Ze(g.return.type),$=z(g.return.type)&&g.return.type.requiredTraits.length>0;h||v&&!$&&!u.isModuleEffectMember||su(g,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&un(g).length===0&&un(u.type).some(E=>E.fieldFunctionType.forallParameters&&E.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function un(e){let t=[],n=Og(e.implicitParameters);for(let r of n)We(r.type)?$_(r.label,r.type,[],t):J(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:ve(r.label)});return t}function $_(e,t,n,r){for(let i of t.fields)if(J(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:ve(`${e}__${a}`)})}else We(i.type)&&$_(e,i.type,[...n,i.label],r)}function Og(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function oi(e,t,n,r,i){let o=r||Y(e.return.type,n),a=e.parameters.filter(_=>!_.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((_,f)=>{let p=ve(_.label||`param${f}`);if(J(_.type))return oi(_.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let m;return z(_.type)&&je(_.type)?_.type.resolvedConcreteType?m=Y(_.type.resolvedConcreteType,n)+"*":m=Y(_.type,n):m=Y(_.type,n),`${m} ${p}`}});s.push(...l);let u=un(i??e);for(let _ of u)if(_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)s.push(`void* ${_.cParamName}`);else{let f=oi(_.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${_.cParamName})(`);s.push(f)}let c=s.join(", ");return`${o} ${t}(${c})`}function su(e,t,n,r,i,o){var c,_,f,p;let a;if(i&&je(e.return.type)){let m=Da(i);(c=m==null?void 0:m.$)!=null&&c.asyncStateMachineStructName?a=`${m.$.asyncStateMachineStructName}*`:(_=i.$)!=null&&_.type&&z(i.$.type)&&je(i.$.type)&&(a=Y(i.$.type,r))}if(i&&z(e.return.type)&&!je(e.return.type)&&(f=i.$)!=null&&f.type&&(a=Y(i.$.type,r)),!a&&i&&((p=i.$)!=null&&p.type)&&!je(e.return.type)){let m=Y(e.return.type,r),y=Y(i.$.type,r);m!==y&&(a=y)}let s=a?oi(e,t,r,a,o):oi(e,t,r,void 0,o),l=D(e),u=n?"extern ":"static ";r.emitter.emitDeclarationLine(`${u}${s}; // ${l}`)}function Rg(e){let t=e.emitter;t.emitDeclarationLine("static void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("static 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(xe(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ze(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=Y(l.type,e),c=ve(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function Pg(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 C_(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Vi(r)||!o||!Fr(r.type)||Fr(o))continue;let a=o.parameters.some(u=>Ze(u.type)),s=Ze(o.return.type);a||s||un(r.type).some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`static ${oi(o,i,e)}; // specialized function: ${D(r.type)}`))}}function ai(e,t,n){let r=_e(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function b_(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&Nn(e.$.type))}function Ug(e,t,n,r,i,o=!1){var p;let a=Object.values(i.types).find(m=>m.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((p=n.$)!=null&&p.deferredDupExpressions)for(let m of n.$.deferredDupExpressions){let y=Ns(m);y&&l.set(y,m)}let u=e.fields.map(m=>{var v,$;if(m.isEffectParam)return"NULL";let y,g=m.exprs.expr;if(($=(v=g.$)==null?void 0:v.deferredDupExpressions)!=null&&$.length&&(y=g.$.deferredDupExpressions[0]),!y){let E=[m.label];X(g)&&E.push(g.token.value);for(let C of E){let w=l.get(C);if(w){y=w;break}}}if(y)return B(y,r,i);let h={tag:"Atom",token:g.token,$:g.$};return B(h,r,i)}),c=`(${s}){ ${u.map((m,y)=>{let g=e.fields[y];return g?`.${g.label} = ${m}`:`/* Error: missing field at index ${y} */`}).join(", ")} }`,_=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${_}`;return o?i.emitter.emitLine(`${r}${s} ${f} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${f} = ${c};`)),{captureTempVar:f,captureCName:s}}function k_(e,t,n){var m;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=Gn(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=(m=n.functions[o.funcId])==null?void 0:m.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=Ke(e.$.type),u;if(l){let y=n.types[e.$.type.id];if(!y)return"// Error: Dyn closure type not found in context";u=y.cName}let c=a&&xe(a)&&a.fields.length>0,_=Y(i.return.type,n),f=i.parameters.map(y=>Y(y.type,n)).join(", "),p=`(${_} (*)(void*${f?", "+f:""}))${s}`;if(c&&a&&xe(a)){let y=!l,g=Ug(a,i.id,e,t,n,y);if(!g)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=g;if(l){let v=`__yo_create_${u}`,$=`__yo_dispose_${u}`;return`${v}(${h}, ${$}, ${p})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),h}else if(l){let y=`__yo_create_${u}`,g=`__yo_dispose_${u}`;return`${y}(NULL, ${g}, ${p})`}else{if(e.$.type.tag==="SomeType"){let y=e.$.type;if(y.resolvedConcreteType)return n.implClosureCallMap.set(y.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),`(${Y(y.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function lu(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=B(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function Qo(e,t,n=""){var a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return lu(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return lu(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let Q=t.emitter;for(let K of r.smWhileBodyDrops){let j=B(K,n,t);j&&j.includes("sm->")&&Q.emitLine(`${n}${j};`)}}if(r.smWhileContinueInfo.stepExpr){let Q=t.emitter,K=B(r.smWhileContinueInfo.stepExpr,n,t);K&&Q.emitLine(`${n}${K};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return lu(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:Q,activeIndex:K}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let j=t.emitter;for(let ie of r.smWhileBodyDrops){let ce=B(ie,n,t);ce&&ce.includes("sm->")&&j.emitLine(`${n}${ce};`)}}return K!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${K}_active = false;`),`goto ${Q}`):`goto ${Q}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let Q=t.emitter,K=r.inAsyncStateMachine.futureType,ie=Cn(K).isFuture.outputType,ce=De(ie);if((a=e.$)!=null&&a.deferredDropExpressions)for(let pe of e.$.deferredDropExpressions){let Z=B(pe,n,t);Z&&Z.includes("sm->")&&Q.emitLine(`${n}${Z};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){Q.emitLine(`${n}// Drop local variables before early completion`);for(let pe of r.pendingDeferredDrops){let Z=B(pe,n,t);Z&&Z.includes("sm->")&&Q.emitLine(`${n}${Z};`)}}Q.emitLine(`${n}// Early return - complete the result Future`);let ee=ce?void 0:`(${Y(ie,t)}){0}`;return gi({emitter:Q,indent:n,resultCode:ee,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&De(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let Q=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(Q))return ve(Q);let K=!1;if((u=e.$)!=null&&u.env){let j=_e(e.$.env,Q);if(j.length>0){let ie=j[j.length-1],ce=ie.isOwningTheSameRcValueAs?ie.isOwningTheSameRcValueAs.id:ie.id;(c=r.variableIdRemapping)!=null&&c.has(ce)&&(ce=r.variableIdRemapping.get(ce));let ee=r.stateMachineVariables.get(ce);if(ee){let pe=(_=r.stateMachineFieldAliases)==null?void 0:_.get(ce);if(pe)return K=!0,`sm->${pe}`;let Z=ee.kind==="outer"?`__capture.${Q}`:`var_${ee.id}`;return K=!0,`sm->${Z}`}}}if(!K){for(let[j,ie]of r.stateMachineVariables)if(ie.name===Q){let ce=(f=r.stateMachineFieldAliases)==null?void 0:f.get(j);if(ce)return K=!0,`sm->${ce}`;let ee=ie.kind==="outer"?`__capture.${Q}`:`var_${j}`;return K=!0,`sm->${ee}`}}if((p=e.$)!=null&&p.env){let j=_e(e.$.env,Q);if(j.length>0){let ie=j[j.length-1];if(ie.isOwningTheSameRcValueAs){let ce=ie.isOwningTheSameRcValueAs.name,ee=ie.isOwningTheSameRcValueAs.id;for(let[pe,Z]of r.stateMachineVariables)if(Z.name===ce||pe===ee)return`sm->${Z.kind==="outer"?`__capture.${ce}`:`var_${pe}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(Q)&&r.currentClosureCaptureFrameLevel!==void 0){let j=r.currentClosureCaptureTypeCName;return j?`((${j}*)closure_context)->${Ye(Q,(m=e.$)==null?void 0:m.env)}`:`closure_context->${Ye(Q,(y=e.$)==null?void 0:y.env)}`}if((g=e.$)!=null&&g.variableName){if((h=e.$)!=null&&h.env&&((v=e.$)!=null&&v.value)&&!Oe(e.$.value)){let j=_e(e.$.env,e.$.variableName);if(j.length>0&&j[j.length-1].isCompileTimeOnly)return Un(e.$.value,t,e)}return Ye(e.$.variableName,e.$.env)}}if(($=e.$)!=null&&$.variableName){if((E=e.$)!=null&&E.env&&((C=e.$)!=null&&C.value)&&!Oe(e.$.value)){let Q=_e(e.$.env,e.$.variableName);if(Q.length>0&&Q[Q.length-1].isCompileTimeOnly)return Un(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((w=e.$)!=null&&w.env)&&r.currentClosureCaptureFrameLevel!==void 0&&ai(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Ye(e.$.variableName,(b=e.$)==null?void 0:b.env)}if((k=e.$)!=null&&k.value&&!Oe(e.$.value))return Un(e.$.value,t,e);let i=(A=e.$)!=null&&A.env&&r.currentClosureCaptureFrameLevel!==void 0?ai(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((S=e.$)!=null&&S.env)||i)){let Q=r.currentClosureCaptureTypeCName;return Q?`((${Q}*)closure_context)->${Ye(e.token.value,(V=e.$)==null?void 0:V.env)}`:`closure_context->${Ye(e.token.value,(O=e.$)==null?void 0:O.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let Q=Object.values(r.functions).find(K=>K.cName===r.currentFunctionName);if(Q&&Q.value.type.isClosure){let K=Object.values(r.types).find(j=>J(j.type)&&j.type.isClosure&&j.type===Q.value.type);if(K)return`((${`${K.cName}_capture`}*)closure_context->data)->${Ye(e.token.value,(x=e.$)==null?void 0:x.env)}`}}if((N=e.$)!=null&&N.env){let Q=_e(e.$.env,e.token.value);if(Q.length>0){let K=Q[Q.length-1];if((P=K.value)!=null&&P[0]&&Ce(K.value[0])){let j=(R=t.functions[K.value[0].funcId])==null?void 0:R.cName;if(j)return j}else if(J(K.type)&&(Oe((H=K.value)==null?void 0:H[0])||K.value===void 0)){let j=Object.entries(t.functions).find(([ie,ce])=>ce.value.funcName===e.token.value);if(j)return j[1].cName}}}return Ye(e.token.value,(G=e.$)==null?void 0:G.env)}function w_(e,t,n){var g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q;let r;if(wn(e)){let K=(h=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder)==null?void 0:h[0],j=(v=K==null?void 0:K.$)==null?void 0:v.closureFunctionValue;j&&Ce(j)&&(r=j.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=($=e.$)==null?void 0:$.type;if(!i||!je(i))return"/* Error: async block must have Future type */";let o=Cn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=((E=e.$)==null?void 0: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 _=(C=e.$)==null?void 0:C.awaitAnalysis;if(!_)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=o.isFuture.outputType;if(z(f))if(f.resolvedConcreteType)f=f.resolvedConcreteType;else{let K=(b=(w=e.$)==null?void 0:w.runtimeArgExprsInOrder)==null?void 0:b[0],j=(k=K==null?void 0:K.$)==null?void 0:k.closureFunctionValue;if(j&&Ce(j)){let ie=(S=(A=j.type)==null?void 0:A.return)==null?void 0:S.type;if(ie&&z(ie)&&ie.resolvedConcreteType)f=ie.resolvedConcreteType;else if((O=(V=j.body)==null?void 0:V.$)!=null&&O.type){let ce=j.body.$.type;z(ce)&&ce.resolvedConcreteType?f=ce.resolvedConcreteType:z(ce)||(f=ce)}}}let p=Y(f,n),m=n.emitter;if(m.emitDeclarationLine(`void ${c}(void* sm_ptr); // Dispose function for state machine`),m.emitDeclarationLine(""),m.emitDeclarationLine(`void ${l}(${s}* sm);`),m.emitDeclarationLine(""),(x=e.$)!=null&&x.captureType){let K=e.$.captureType,j=Object.values(n.types).find(ce=>ce.type===K),ie=j?j.cName:`async_capture_${K.id}`;m.emitDeclarationLine(`${s}* ${u}(${ie} __capture);`)}else m.emitDeclarationLine(`${s}* ${u}();`);m.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:f,resultTypeCName:p,captureType:(N=e.$)==null?void 0:N.captureType,analysis:_});let y=(P=e.$)==null?void 0:P.captureType;if(y){let K=Object.values(n.types).find(be=>be.type===y),j=K?K.cName:`async_capture_${y.id}`,ie=n,ce=ie.currentClosureCaptures!==void 0||ie.inAsyncStateMachine!==void 0||ie.inEffectStateMachine!==void 0,ee=!1,pe=y.fields.map(be=>{var le,fe;if(be.isEffectParam)return`.${be.label} = NULL`;let Ue;if(!ce&&((le=e.$)!=null&&le.deferredDupExpressions))for(let Se of e.$.deferredDupExpressions){let it;if(I(Se)&&(Se.args.length>0&&X(Se.args[0])?it=Se.args[0].token.value:Se.args.length===0&&I(Se.func)&&T(Se.func,".")&&Se.func.args.length>=2&&X(Se.func.args[0])&&(it=Se.func.args[0].token.value)),it===be.label){Ue=Se;break}}if(Ue)return ee=!0,(fe=Ue.$)!=null&&fe.variableName?(B(Ue,t,n),`.${be.label} = ${Ue.$.variableName}`):`.${be.label} = ${B(Ue,t,n)}`;let te={tag:"Atom",token:be.exprs.expr.token,$:be.exprs.expr.$};return`.${be.label} = ${Qo(te,n)}`}).join(", "),Z=`(${j}){${pe}}`;if(!ee){let be=kr(y,n);be&&(Z=`${be}(${Z})`)}let Ee=((R=e.$)==null?void 0:R.variableName)||"async_result",Fe=`${u}(${Z})`;if(Ee&&((H=e.$)!=null&&H.type)){let be=Bt(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${be} = ${Fe};`),Ee}else return Fe}else{let K=((G=e.$)==null?void 0:G.variableName)||"async_result",j=`${u}()`;if(K&&((Q=e.$)!=null&&Q.type)){let ie=Bt(e.$.type,K,n);return n.emitter.emitLine(`${t}${ie} = ${j};`),K}else return j}}function F_(e,t){var g;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:_,overlappingSlots:f}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${D(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 ${D(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 h=Object.values(t.types).find($=>$.type===s),v=h?h.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${v} __capture;`),n.emitDeclarationLine("")}let p=l.capturedVariables.filter(h=>h.kind!=="outer");if(u&&(p=p.filter(h=>u.has(h.id)&&!(c!=null&&c.has(h.id))&&!(_!=null&&_.has(h.id)))),p.length>0){n.emitDeclarationLine(" // Local variables");for(let h of p){let v=Y(h.type,t),$=Wn(h.id,"local");n.emitDeclarationLine(` ${v} ${$}; // ${h.name}`)}n.emitDeclarationLine("")}if(f&&f.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let h of f)n.emitDeclarationLine(` ${h.cType} ${h.fieldName}; // shared: ${h.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let h=[];for(let v of l.awaitPoints)if(!(De(v.resultType)||z(v.resultType)&&!v.resultType.resolvedConcreteType)&&v.isInsideCond){let C=v.resultType;if(v.futureType){let b=Cn(v.futureType);b&&(C=b.isFuture.outputType)}let w=Y(C,t);h.push(` ${w} await_result_${v.index};`)}if(h.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let v of h)n.emitDeclarationLine(v);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let h=l.awaitPoints.filter(v=>v.futureVariableId===void 0);if(h.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let v of h){let $=v.expr;if($.tag!=="FnCall")continue;let E=$.args[0],C=(g=E==null?void 0:E.$)==null?void 0:g.type;if(!C)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let w=Y(C,t);n.emitDeclarationLine(` ${w} await_future_${v.index};`)}n.emitDeclarationLine("")}}let m=l.awaitPoints.filter(h=>h.needsOwnCondBranchField);if(m.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let h of m)n.emitDeclarationLine(` int cond_branch_${h.index}; // Which branch was taken in cond with await ${h.index}`);n.emitDeclarationLine("")}let y=l.awaitPoints.filter(h=>h.isInsideWhile);if(y.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let h=l.awaitPoints.length;for(let v of y){n.emitDeclarationLine(` _Bool while_loop_${v.index}_active; // Whether while loop ${v.index} should continue`);let $=(v.whileNestingDepth??1)-1;for(let E=0;E<$;E++)n.emitDeclarationLine(` _Bool while_loop_${h}_active; // Whether outer while loop ${h} should continue`),h++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function zg(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=_=>{let f=r.get(_);f.has(u.structName)||(f.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let _ of u.analysis.capturedVariables){let f;try{f=Y(_.type,e)}catch{continue}let p=n.get(f);p&&p.structName!==u.structName&&c(p.structName)}for(let _ of u.analysis.awaitPoints){if(_.futureVariableId!==void 0)continue;let f=_.expr;if(f.tag!=="FnCall")continue;let p=f.args[0],m=(l=p==null?void 0:p.$)==null?void 0:l.type;if(!m)continue;let y;try{y=Y(m,e)}catch{continue}let g=n.get(y);g&&g.structName!==u.structName&&c(g.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let _ of c){let f=(i.get(_)??0)-1;i.set(_,f),f===0&&o.push(_)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s){let{crossBoundaryIds:c,awaitFutureTempVarAliases:_,variableSegments:f}=Vs(u.bodyExpr,u.analysis),{slotAliases:p,slots:m}=xs(c,f,u.analysis.capturedVariables,_,e);F_({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis,crossBoundaryIds:c,awaitFutureTempVarAliases:_,overlappingSlotAliases:p,overlappingSlots:m},e)}}function Bg(e,t,n,r,i,o,a,s,l,u){var _;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&&Je(i)){let f=Object.values(u.types).find(p=>p.type===i);if(!f)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=f.cName,m=i.trait.fields.find(y=>y.label===F.___drop[0]);if(m&&m.assignedValue&&Ce(m.assignedValue)){let y=(_=u.functions[m.assignedValue.funcId])==null?void 0:_.cName;y&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${y}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!De(r)&&Je(r)){let f=Y(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=ii(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${f} */`),c.emitLine(" }")}c.emitLine("");{let f=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let y=`sm->${Wn(p.id,"local")}`;if(Ke(p.type))f.push(` if ((${y}).data != NULL) { __yo_decr_rc((void*)(${y}).data); }`);else if(pn(p.type)||cn(p.type))f.push(` if (${y} != NULL) { __yo_decr_rc_atomic((void*)${y}); }`);else if(Ht(p.type)||z(p.type)&&jn(p.type)){let g=ii(p.type,u);g?f.push(` if (${y} != NULL) { ${g}(${y}); }`):f.push(` if (${y} != NULL) { __yo_decr_rc((void*)${y}); }`)}else if(Je(p.type)){let g=ii(p.type,u);g&&f.push(` ${g}(${y});`)}}if(f.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of f)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function Gg(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let _=Object.values(u.types).find(p=>p.type===l),f=_?_.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${f} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = __YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;"),c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`),c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),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 L_(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;zg(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:f,resultTypeCName:p,captureType:m,analysis:y}=r,g=e.stateMachineVariables,h=e.currentEvidenceParams,v=new Map,{crossBoundaryIds:$,awaitFutureTempVarAliases:E,variableSegments:C}=Vs(o,y),{slotAliases:w}=xs($,C,y.capturedVariables,E,e),b=y.capturedVariables.filter(O=>O.kind==="outer"||$.has(O.id)||E.has(O.id)||w.has(O.id)),k={...y,capturedVariables:b};for(let O of b)v.set(O.id,O);if(m)for(let O of m.fields)v.set(O.label,{id:O.label,name:O.label,type:O.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let A=e.stateMachineFieldAliases,S=new Map(E);for(let[O,x]of w)S.set(O,x);e.stateMachineFieldAliases=S;let V=v_(o,a,s,l,k,_,m,e);if(e.stateMachineVariables=g,e.currentEvidenceParams=h,e.stateMachineFieldAliases=A,t.emitLine(""),Bg(a,s,c,f,m,k,V,$,E,e),t.emitLine(""),Gg(a,s,l,u,c,_,f,p,m,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let O=e.deferredAsyncBlocks.slice(i);for(let x of O){let{crossBoundaryIds:N,awaitFutureTempVarAliases:P,variableSegments:R}=Vs(x.bodyExpr,x.analysis),{slotAliases:H,slots:G}=xs(N,R,x.analysis.capturedVariables,P,e);F_({asyncBlockId:x.asyncBlockId,structName:x.structName,resultType:x.resultType,resultTypeCName:x.resultTypeCName,captureType:x.captureType,analysis:x.analysis,crossBoundaryIds:N,awaitFutureTempVarAliases:P,overlappingSlotAliases:H,overlappingSlots:G},e)}}n++}}function A_(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&I_(n.body,e)}}var Wg=["__yo_poll_","__yo_fs_event_","__yo_async_"];function qg(e){return Wg.some(t=>e.startsWith(t))}function I_(e,t){var n,r,i,o,a,s,l;if(e&&I(e)){let u=e;if(wn(e)){t.usesAsync=!0;let c=(n=e.$)==null?void 0:n.type;if(c&&je(c)&&Cn(c)){let p=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[c.id]={type:c,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for async state machine`)}}if(wn(e)){let c=(i=e.$)==null?void 0:i.type;if(c&&je(c)&&Cn(c)){let f=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,p=!!((a=e.$)!=null&&a.awaitAnalysis),m=p?`${f}_state_t`:`${f}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=m),t.types[c.id]={type:c,cName:m},t.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration for io.async ${p?"state machine":"sync future"}`)}}(er(e)||Ts(e))&&(t.usesAsync=!0);{let c=(s=u.func.$)==null?void 0:s.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&qg(c.externName)&&(t.usesAsync=!0)}{let c=(l=u.func.$)==null?void 0:l.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&(c.externName==="__yo_thread_spawn"||c.externName==="__yo_worker_spawn")&&(t.usesParallelism=!0)}for(let c of u.args)I_(c,t)}}function S_(e,t,n){var b,k,A,S,V,O,x,N,P,R,H,G;let r=(b=e.$)==null?void 0:b.type;if(!r||!je(r))return"/* Error: io.async must return a Future type */";let i=Cn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(z(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let Q=(A=(k=e.$)==null?void 0:k.runtimeArgExprsInOrder)==null?void 0:A[0],K=(S=Q==null?void 0:Q.$)==null?void 0:S.closureFunctionValue;if(K&&Ce(K)){let j=(O=(V=K.type)==null?void 0:V.return)==null?void 0:O.type;if(j&&z(j)&&j.resolvedConcreteType)o=j.resolvedConcreteType;else if((N=(x=K.body)==null?void 0:x.$)!=null&&N.type){let ie=K.body.$.type;z(ie)&&ie.resolvedConcreteType?o=ie.resolvedConcreteType:z(ie)||(o=ie)}}}let a=Y(o,n),s=(P=e.$)==null?void 0:P.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,_=(H=(R=e.$)==null?void 0:R.runtimeArgExprsInOrder)==null?void 0:H[0];if(!(_!=null&&_.$))return"/* Error: Missing closure argument for io.async */";let f=B(_,t,n),p=_.$.type,m,y;if(z(p)&&p.resolvedConcreteType){let Q=p.resolvedConcreteType,K=n.implClosureCallMap.get(Q.id);K&&(m=K.functionCName);let j=n.types[Q.id];j&&(y=j.cName)}if(!m||!y)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(` ${y} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let g="";for(let Q in n.functions){let K=n.functions[Q];if(K.cName===m){let j=un(K.value.type);j.length>0&&(g=", "+j.map(ie=>`(void*)sm->__capture.${ie.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),De(o)?c.emitDeclarationLine(` ${m}(&sm->__capture${g});`):c.emitDeclarationLine(` sm->result = ${m}(&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 h=_.$.captureType,v=h&&Je(h)?ii(h,n):void 0,$=h&&Je(h)?kr(h,n):void 0,E=ii(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||E)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),E&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${E}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let C=((G=e.$)==null?void 0:G.variableName)||"__io_async_result",w=Bt(r,C,n);return c.emitLine(`${t}${w} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${C}, 0, sizeof(${s}));`),c.emitLine(`${t}${C}->header.ref_count = 1;`),c.emitLine(`${t}${C}->header.gc_flags = 0;`),c.emitLine(`${t}${C}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${C}->header.gc_next = NULL;`),c.emitLine(`${t}${C}->header.gc_prev = NULL;`),c.emitLine(`${t}${C}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${C}->header.traverse_fn = NULL;`),c.emitLine(`${t}${C}->__capture = ${f};`),$&&c.emitLine(`${t}${C}->__capture = ${$}(${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 N_(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];Ce(o)&&(vi(o.type,t),uo(o.body,t))}let n=new Set,r=!0;for(;r;){r=!1;for(let i in t.functions){if(n.has(i))continue;n.add(i),r=!0;let o=t.functions[i];if(vi(o.value.type,t),o.value.specializedType&&vi(o.value.specializedType,t),uo(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&bn(a.value.type,t),uo(a.body,t)}}}function vi(e,t){for(let n of e.parameters)bn(n.type,t);for(let n of e.forallParameters)bn(n.type,t);bn(e.return.type,t)}function uo(e,t){var n;if(e.$&&e.$.type&&bn(e.$.type,t),e.$&&e.$.value&&Ce(e.$.value)){let r=e.$.value;r.isControlFunction?(vi(r.type,t),Dn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>z(a)&&je(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:ve(r.funcId)},vi(r.type,t),Dn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)uo(r,t);if(e.$&&e.$.macroExpansion&&uo(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)bn(r,t);if(e.$&&e.$.captureType&&xe(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`__yo_${r.id}`};for(let i of r.fields)bn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&Ce(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},vi(o.type,t),Dn(o.body,t))}}}switch(e.tag){case"FnCall":if(T(e,M.test))break;uo(e.func,t);for(let r of e.args)uo(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&W(e.$.value)&&bn(e.$.value.value,t);break}}function bn(e,t){if(!t.types[e.id]){if(z(e)&&Nn(e)){if(e.resolvedConcreteType){bn(e.resolvedConcreteType,t);return}let n=Gn(e);n&&bn(n,t);return}if(z(e)&&je(e)){let n=Cn(e);n&&bn(n.isFuture.outputType,t);return}if(z(e)&&e.resolvedConcreteType){bn(e.resolvedConcreteType,t);return}if(!Ze(e)){if(xe(e)||Pt(e)||ze(e)||Qe(e)||Ke(e)||We(e)||st(e)||Lt(e)||pn(e)||cn(e)){let n=Lt(e)?Y(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},xe(e))for(let r of e.fields)bn(r.type,t);if(ze(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)bn(i.type,t)}if(Pt(e))for(let r of e.fields)bn(r.type,t);if(Ke(e)){let r=e;for(let i of r.requiredTraits)bn(i.traitType,t)}if(pn(e)){let r=e;bn(r.childType,t),Y(r,t)}if(cn(e)){let r=e;bn(r.childType,t),Y(r,t)}if(Lt(e)&&bn(e.childType,t),We(e)||st(e)){for(let r of e.fields)bn(r.type,t);for(let r of e.fields)if(r.assignedValue&&Ce(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:ve(i.funcId)},vi(i.type,t),Dn(i.body,t))}else if(r.assignedValue&&(Et(r.assignedValue)||on(r.assignedValue))){let i=r.assignedValue;Pa(i,t)}}}else if(Xe(e)){let n=e,r=n.childType,i=n.length;if(ht(i)){bn(r,t);let o=Y(r,t),a=`Array_${ve(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(tt(e)){if(bn(e.childType,t),Lt(e.childType)){let r=e.childType.childType;bn(r,t);let i=Y(r,t),o=`Slice_${ve(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:Y(e,t)}}else p_.has(e.tag)&&(t.types[e.id]={type:e,cName:Y(e,t)});e.trait&&bn(e.trait,t)}}}function co(e){var t,n,r;if(e.$&&e.$.value&&Oe(e.$.value)&&!(J(e.$.type)&&e.$.type.isExtern)){if(!De(e.$.type))return!0}if(I(e)){if(co(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&De(i.$.type))&&co(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&De(e.$.type))return!1;if(co(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(co(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(co(i))return!0}return!1}function Pa(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];if(Ce(r)){let o=i.label;if(o==="main")t.functions[r.funcId]={value:r,cName:"__yo_user_main"};else if(t.isLibrary)if(t.currentModuleId&&r.funcId.startsWith(`fn_${t.currentModuleId}_`)){let s=ve(o);t.functions[r.funcId]={value:r,cName:s},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(r.funcId,o)}else t.functions[r.funcId]={value:r,cName:ve(r.funcId)};else t.functions[r.funcId]={value:r,cName:ve(r.funcId)};Dn(r.body,t)}}}function V_(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&Ce(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:ve(r.funcId)},Dn(r.body,t)):r&&Et(r)&&V_(r,t)}}function Dn(e,t){var i,o,a,s,l,u,c,_,f,p,m;if((i=e.$)!=null&&i.value&&Et(e.$.value)){let y=e.$.value;V_(y,t)}if(I(e)&&T(e,M.test)||I(e)&&T(e,F.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Dn(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let y=e.$.effectAnalysis.handlerValue;y&&Ce(y)&&Dn(y.body,t)}if(e.$&&e.$.closureFunctionValue){let y=e.$.closureFunctionValue;t.functions[y.funcId]||(t.functions[y.funcId]={value:y,cName:ve(y.funcId)},Dn(y.body,t))}if(I(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let y=e.$.type,g=e.args[0];if(Ke(y)&&g&&((a=g.$)!=null&&a.type)){let h=g.$.type,v=e.$.dynCallTraitValues;if(v.length>0&&(Ht(h)||cr(h))){let $=cr(h)?h.fields[0].type:h,E=`${$.id}_${y.id}`;t.dynImpls.set(E,{dynType:y,concreteType:$,dataType:h,traitValues:v})}}}if(I(e)){let y=(s=e.func.$)==null?void 0:s.type,g=(l=e.func.$)==null?void 0:l.value;if(e.func.token.value==="?=")return;if(J(y)){if(Ce(g)&&g.isControlFunction){Dn(g.body,t);for(let h of e.args)Dn(h,t);return}if(Ce(g)){if(g.type.return.isCompileTimeOnly||tl(g)&&!g.specializedType)return;if(g.specializedType&&jr(g.specializedType)&&un(g.specializedType).length===0){Dn(e.func,t);for(let v of e.args)Dn(v,t);return}if(!t.functions[g.funcId]){let h=!1;if(co(g.body)){let v=g.specializedType??g.type;if(h=v.implicitParameters.length>0&&(un(v).length>0||!jr(g.type)&&g.type.implicitParameters.length>0),!h)return}if(!h&&!(un(g.specializedType??g.type).length>0)&&(g.specializedType??g.type).parameters.map(C=>C.type).some(C=>z(C)&&je(C)&&!C.resolvedConcreteType))return;t.functions[g.funcId]={value:g,cName:ve(g.funcId)},Dn(g.body,t)}}else if(y.isExtern==="c"){let h=y.externName?y.externName:X(e.func)?e.func.token.value:y.id;t.externFunctions[y.id]={type:y,cName:h}}else if(y.isExtern==="yo"){let h=y.externName;if(!(h&&h.startsWith("__yo_"))){let v=h?ve(h):X(e.func)?ve(e.func.token.value):ve(y.id);t.externFunctions[y.id]={type:y,cName:v}}}}Dn(e.func,t);for(let h of e.args)Dn(h,t)}let n=(u=e.$)==null?void 0:u.type,r=(c=e.$)==null?void 0:c.value;if(J(n)){if(Ce(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:ve(r.funcId)}),r.specializedFunctionCaches)for(let y of r.specializedFunctionCaches){let g=y.specializedFunction;g&&!t.functions[g.funcId]&&(g.isModuleEffectMember=!0,t.functions[g.funcId]={value:g,cName:ve(g.funcId)},Dn(g.body,t))}Dn(r.body,t);return}if(Ce(r)){if(tl(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(co(r.body))return;t.functions[r.funcId]={value:r,cName:ve(r.funcId)},Dn(r.body,t)}}if(W((_=e.$)==null?void 0:_.value)&&bn(e.$.value.value,t),(f=e.$)!=null&&f.deferredDupExpressions)for(let y of e.$.deferredDupExpressions)Dn(y,t);if((p=e.$)!=null&&p.deferredDropExpressions)for(let y of e.$.deferredDropExpressions)Dn(y,t);if((m=e.$)!=null&&m.dynCallTraitValues)for(let y of e.$.dynCallTraitValues)Pa(y,t)}function x_(e){let t=F.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!xe(r)||!r.isReferenceSemantics)continue;let i=Br({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&Ce(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:ve(a.funcId)},vi(a.type,e),Dn(a.body,e)}}}function D_(e){var r;let t=e.emitter,n=new Set;for(let[,i]of e.dynImpls){let o=((r=e.types[i.dynType.id])==null?void 0:r.cName)||`__yo_dyn_${i.dynType.id}`;n.has(o)||(n.add(o),t.emitLine(`${o} __yo_dup_${o}(${o} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${o}(${o} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function M_(e){var r,i,o;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let s=z(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType,u=`__yo_dyn_box_${((r=e.types[s.id])==null?void 0:r.cName)||`unknown_${s.id}`}`;if(n.has(u))continue;n.add(u);let c=Y(s,e);t.emitLine(`static ${u}* __yo_new_${u}(${c} value) {`),t.emitLine(` ${u}* box = (${u}*)__yo_malloc(sizeof(${u}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${u};`),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_${u}(void* ptr) {`),t.emitLine(` ${u}* box = (${u}*)ptr;`);let f=(i=(z(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(p=>p.label===F.___drop[0]);if(f&&f.assignedValue&&Ce(f.assignedValue)){let p=(o=e.functions[f.assignedValue.funcId])==null?void 0:o.cName;p&&t.emitLine(` ${p}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function O_(e){var n,r,i,o;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!fn(c))continue;let _=c.isFn.callType,f=Y(_.return.type,e),p=`__yo_wrap_${a}_call`,m=["void* self_ptr"];for(let y=0;y<_.parameters.length;y++){let g=_.parameters[y],h=Y(g.type,e);m.push(`${h} arg${y+1}`)}if(t.emitDeclarationLine(`static ${f} ${p}(${m.join(", ")}) {`),cr(l)){let y=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,g=ve(l.fields[0].label);t.emitDeclarationLine(` ${y}* box = (${y}*)self_ptr;`);let h=l.fields[0].type,v=z(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,$=e.implClosureCallMap.get(v.id),E=(()=>{var w;if($)return $.functionCName;for(let[,b]of Object.entries(e.functions)){let A=b.value.closureInfo;if(((w=A==null?void 0:A.captureType)==null?void 0:w.id)===v.id)return b.cName}})(),C=[];if(E){C.push(`(void*)&box->${g}`);for(let w=0;w<_.parameters.length;w++)C.push(`arg${w+1}`);ci(_.return.type)?t.emitDeclarationLine(` ${E}(${C.join(", ")});`):t.emitDeclarationLine(` return ${E}(${C.join(", ")});`)}else{C.push(`box->${g}.data`);for(let w=0;w<_.parameters.length;w++)C.push(`arg${w+1}`);ci(_.return.type)?t.emitDeclarationLine(` box->${g}.call(${C.join(", ")});`):t.emitDeclarationLine(` return box->${g}.call(${C.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let y=0;y<_.parameters.length;y++)t.emitDeclarationLine(` (void)arg${y+1};`);ci(_.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${f} zero = (${f})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:_}=s.dynType.requiredTraits[c];if(fn(_))continue;let f=s.traitValues[c];if(!f){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let m=f.type.fields;for(let y=0;y<m.length;y++){let g=m[y];if(g.label==="Self"||u.has(g.label))continue;let h=f.fields[y];if(!h||!Ce(h)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function value */`);continue}let v=g.type;if(!J(v)){t.emitDeclarationLine(`/* Warning: Module field ${g.label} is not a function type */`);continue}let $=h.funcId,E=(r=e.functions[$])==null?void 0:r.cName;if(!E){t.emitDeclarationLine(`/* Warning: Impl function for ${g.label} not found */`);continue}let C=`__yo_wrap_${a}_${g.label}`,w=Y(v.return.type,e),b=["void* self_ptr"];for(let V=1;V<v.parameters.length;V++){let O=v.parameters[V],x=Y(O.type,e);b.push(`${x} arg${V}`)}t.emitDeclarationLine(`static ${w} ${C}(${b.join(", ")}) {`);let k=(i=v.parameters[0])==null?void 0:i.type,A;if(cr(l)){let V=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,O=ve(l.fields[0].label);t.emitDeclarationLine(` ${V}* box = (${V}*)self_ptr;`),k&&tt(k)?A=`&box->${O}`:A=`box->${O}`}else{let V=Y(s.concreteType,e);t.emitDeclarationLine(` ${V} concrete_value = (${V})self_ptr;`),k&&tt(k)?A="&concrete_value":A="concrete_value"}let S=[A];for(let V=1;V<v.parameters.length;V++)S.push(`arg${V}`);ci(v.return.type)?t.emitDeclarationLine(` ${E}(${S.join(", ")});`):t.emitDeclarationLine(` return ${E}(${S.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function R_(e){var r,i,o;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[,a]of e.dynImpls){let s=z(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType,l=((r=e.types[s.id])==null?void 0:r.cName)||`unknown_${s.id}`,u=`__yo_typeid_${l}`;!n.has(u)&&!e.typeIdStatics.has(s.id)&&(n.add(u),e.typeIdStatics.set(s.id,u),t.emitDeclarationLine(`static const char ${u} = 0; // TypeId for ${l}`))}t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=((i=e.types[s.dynType.id])==null?void 0:i.cName)||`__yo_dyn_${s.dynType.id}`,u=z(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,_=`__yo_vtable_${a}`,f=`${l}_vtable`,p=`__yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:g})=>g.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${f} ${_} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${p},`);let m=new Set,y=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:g}of s.dynType.requiredTraits){if(fn(g)){let h=`__yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),m.add("call");continue}for(let h of g.fields)if(h.label!=="Self"&&!y.has(h.label)&&!m.has(h.label)&&(m.add(h.label),J(h.type))){let v=h.type;if(v.parameters.length>0){let $=v.parameters[0];if($&&$.label==="self"){let E=`__yo_wrap_${a}_${h.label}`;t.emitDeclarationLine(` .${ve(h.label)} = ${E},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function P_(e,t){let n=!ao(t),r=Fn(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
195
195
  // ============================================================================
196
- // Async/Await Runtime - Single-Threaded Cooperative Scheduler
196
+ // Async/Await Runtime - Per-Thread Cooperative Scheduler
197
197
  // ============================================================================
198
- // This implements a cooperative async runtime for single-threaded concurrency.
199
- // All async tasks run on the SAME thread - no parallelism, just interleaving.
198
+ // This implements a cooperative async runtime with per-thread event loops.
199
+ // Each OS thread has its own scheduler and I/O backend \u2014 no shared state.
200
+ // Multiple workers on the same thread cooperatively share the event loop.
200
201
  // Uses non-atomic reference counting (everything is thread-local).
201
202
  //
202
203
  // LAZY EXECUTION MODEL:
@@ -225,16 +226,16 @@ typedef struct {
225
226
  } __yo_async_task_queue_t;
226
227
 
227
228
  // Thread-local async runtime state
228
- ${An(t)?"static __declspec(thread) __yo_async_task_queue_t __yo_thread_async_queue = {NULL, NULL, 0};":"static __thread __yo_async_task_queue_t __yo_thread_async_queue = {NULL, NULL, 0};"}
229
+ ${Fn(t)?"static __declspec(thread) __yo_async_task_queue_t __yo_thread_async_queue = {NULL, NULL, 0};":"static __thread __yo_async_task_queue_t __yo_thread_async_queue = {NULL, NULL, 0};"}
229
230
 
230
- // Async scheduler initialized flag
231
- static bool __yo_async_scheduler_initialized = false;
231
+ // Async scheduler initialized flag (per-thread \u2014 each thread has its own event loop)
232
+ static ${r} bool __yo_async_scheduler_initialized = false;
232
233
 
233
- // Count of active poll/fs_event watches (used by all platforms)
234
- static size_t __yo_active_watch_count = 0;
234
+ // Count of active poll/fs_event watches (per-thread event loop state)
235
+ static ${r} size_t __yo_active_watch_count = 0;
235
236
 
236
- ${n?`// Whether the I/O subsystem has been initialized
237
- static bool __yo_io_initialized = false;
237
+ ${n?`// Whether the I/O subsystem has been initialized (per-thread)
238
+ static ${r} bool __yo_io_initialized = false;
238
239
 
239
240
  // Forward declarations for I/O functions
240
241
  static void __yo_io_init(void);
@@ -433,7 +434,7 @@ ${n?` __yo_io_poll();
433
434
 
434
435
  // Get the number of hardware threads (CPU cores)
435
436
  static size_t __yo_thread_get_hardware_threads(void) {
436
- ${An(t)?` SYSTEM_INFO sysinfo;
437
+ ${Fn(t)?` SYSTEM_INFO sysinfo;
437
438
  GetSystemInfo(&sysinfo);
438
439
  return (size_t)sysinfo.dwNumberOfProcessors;`:Vr(t)?` int count;
439
440
  size_t size = sizeof(count);
@@ -452,14 +453,14 @@ static void __yo_thread_set_maximum_threads(size_t num) {
452
453
 
453
454
  // Get current thread ID (useful for debugging)
454
455
  static size_t __yo_get_thread_id(void) {
455
- ${An(t)?" return (size_t)GetCurrentThreadId();":Vr(t)?` uint64_t tid;
456
+ ${Fn(t)?" return (size_t)GetCurrentThreadId();":Vr(t)?` uint64_t tid;
456
457
  pthread_threadid_np(NULL, &tid);
457
458
  return (size_t)tid;`:" return (size_t)syscall(SYS_gettid);"}
458
459
  }
459
460
 
460
461
  // Yield execution (allows other tasks to run)
461
462
  static void __yo_thread_yield(void) {
462
- ${An(t)?" SwitchToThread();":" sched_yield();"}
463
+ ${Fn(t)?" SwitchToThread();":" sched_yield();"}
463
464
  }
464
465
 
465
466
  // Async yield - creates an immediately-ready Future for cooperative yielding
@@ -1042,10 +1043,10 @@ static uint64_t __yo_statx_blocks(void* statxbuf) {
1042
1043
  #include <time.h>
1043
1044
  #include <errno.h>
1044
1045
 
1045
- // kqueue file descriptor for async I/O
1046
- static int __yo_io_kq = -1;
1046
+ // kqueue file descriptor for async I/O (per-thread \u2014 each thread has its own event loop)
1047
+ static _Thread_local int __yo_io_kq = -1;
1047
1048
  // __yo_io_initialized is defined in runtime-core
1048
- static size_t __yo_pending_io_count = 0; // no _Atomic \u2014 single-threaded event loop
1049
+ static _Thread_local size_t __yo_pending_io_count = 0; // per-thread event loop counter
1049
1050
 
1050
1051
  // Pending operation types for kqueue completion dispatch
1051
1052
  typedef enum {
@@ -2557,9 +2558,9 @@ static uint64_t __yo_statx_blocks(void* statxbuf) {
2557
2558
  #include <arpa/inet.h>
2558
2559
  #include <sys/un.h>
2559
2560
 
2560
- static struct io_uring __yo_io_ring;
2561
+ static _Thread_local struct io_uring __yo_io_ring;
2561
2562
  // __yo_io_initialized is defined in runtime-core
2562
- static size_t __yo_pending_io_count = 0;
2563
+ static _Thread_local size_t __yo_pending_io_count = 0;
2563
2564
 
2564
2565
  // I/O Future types - __yo_io_future_t is defined in types/generation.ts
2565
2566
  // It has the same layout as async state machines (state, result, continuation_fn, continuation_sm)
@@ -5487,8 +5488,8 @@ static int32_t __yo_isatty(int32_t fd) { return _isatty(fd) ? 1 : 0; }
5487
5488
  // Async I/O Runtime (Windows - IOCP)
5488
5489
  // ============================================================================
5489
5490
  // __yo_io_initialized is defined in runtime-core
5490
- static size_t __yo_pending_io_count = 0;
5491
- static HANDLE __yo_io_iocp = NULL;
5491
+ static __declspec(thread) size_t __yo_pending_io_count = 0;
5492
+ static __declspec(thread) HANDLE __yo_io_iocp = NULL;
5492
5493
  static CRITICAL_SECTION __yo_dir_state_mutex;
5493
5494
 
5494
5495
  typedef struct __yo_win_timer_entry_t {
@@ -5497,7 +5498,7 @@ typedef struct __yo_win_timer_entry_t {
5497
5498
  struct __yo_win_timer_entry_t* next;
5498
5499
  } __yo_win_timer_entry_t;
5499
5500
 
5500
- static __yo_win_timer_entry_t* __yo_win_timer_head = NULL;
5501
+ static __declspec(thread) __yo_win_timer_entry_t* __yo_win_timer_head = NULL;
5501
5502
 
5502
5503
  typedef struct {
5503
5504
  OVERLAPPED overlapped;
@@ -7352,7 +7353,7 @@ typedef struct __yo_fs_event_s {
7352
7353
  struct __yo_fs_event_s* next;
7353
7354
  } __yo_fs_event_t;
7354
7355
 
7355
- static __yo_fs_event_t* __yo_active_fs_events = NULL;
7356
+ static __declspec(thread) __yo_fs_event_t* __yo_active_fs_events = NULL;
7356
7357
 
7357
7358
  static void* __yo_fs_event_init(void) {
7358
7359
  __yo_fs_event_t* handle = (__yo_fs_event_t*)__yo_malloc(sizeof(__yo_fs_event_t));
@@ -7526,7 +7527,7 @@ typedef struct __yo_poll_s {
7526
7527
  struct __yo_poll_s* next;
7527
7528
  } __yo_poll_t;
7528
7529
 
7529
- static __yo_poll_t* __yo_active_polls = NULL;
7530
+ static __declspec(thread) __yo_poll_t* __yo_active_polls = NULL;
7530
7531
 
7531
7532
  static void* __yo_poll_init(int32_t fd) {
7532
7533
  __yo_poll_t* handle = (__yo_poll_t*)__yo_malloc(sizeof(__yo_poll_t));
@@ -7735,7 +7736,7 @@ static int __yo_poll_and_fs_event_tick(void) {
7735
7736
  }
7736
7737
 
7737
7738
 
7738
- `)}function Y_(e,t){let n=An(t),r=oo(t),i=Vr(t);if(n){W_(e);return}e.emitLine(`
7739
+ `)}function Y_(e,t){let n=Fn(t),r=oo(t),i=Vr(t);if(n){W_(e);return}e.emitLine(`
7739
7740
  // ============================================================================
7740
7741
  // File System Helper Functions
7741
7742
  // ============================================================================
@@ -8136,7 +8137,7 @@ static int32_t __yo_tty_get_winsize(int32_t fd, int32_t* width, int32_t* height)
8136
8137
  static int32_t __yo_isatty(int32_t fd) {
8137
8138
  return isatty(fd) ? 1 : 0;
8138
8139
  }
8139
- `),i&&U_(e),r&&B_(e)}function H_(e,t){let n=An(t),r=oo(t),i=Vr(t);r?e.emitLine(`
8140
+ `),i&&U_(e),r&&B_(e)}function H_(e,t){let n=Fn(t),r=oo(t),i=Vr(t);r?e.emitLine(`
8140
8141
  // ============================================================================
8141
8142
  // Timer Operations (Linux - timerfd + io_uring)
8142
8143
  // ============================================================================
@@ -8224,8 +8225,8 @@ static __yo_io_future_t* __yo_async_sleep_start(uint64_t milliseconds) {
8224
8225
  // Timer Operations (macOS - kqueue EVFILT_TIMER)
8225
8226
  // ============================================================================
8226
8227
 
8227
- // Monotonically increasing timer ID for unique kqueue ident values
8228
- static uintptr_t __yo_timer_next_id = 1;
8228
+ // Monotonically increasing timer ID for unique kqueue ident values (per-thread)
8229
+ static _Thread_local uintptr_t __yo_timer_next_id = 1;
8229
8230
 
8230
8231
  // Timer context stored as kevent udata
8231
8232
  typedef struct __yo_timer_ctx_t {
@@ -8683,7 +8684,7 @@ ${i?` char* path;
8683
8684
  struct __yo_fs_event_s* next;
8684
8685
  } __yo_fs_event_t;
8685
8686
 
8686
- static __yo_fs_event_t* __yo_active_fs_events = NULL;
8687
+ static _Thread_local __yo_fs_event_t* __yo_active_fs_events = NULL;
8687
8688
  `),i&&e.emitLine(`
8688
8689
  static void __yo_fs_event_free_entries(__yo_fs_event_entry_t* head) {
8689
8690
  while (head) {
@@ -9032,7 +9033,7 @@ typedef struct __yo_poll_s {
9032
9033
  struct __yo_poll_s* next;
9033
9034
  } __yo_poll_t;
9034
9035
 
9035
- static __yo_poll_t* __yo_active_polls = NULL;
9036
+ static _Thread_local __yo_poll_t* __yo_active_polls = NULL;
9036
9037
 
9037
9038
  static void* __yo_poll_init(int32_t fd) {
9038
9039
  __yo_poll_t* handle = (__yo_poll_t*)__yo_malloc(sizeof(__yo_poll_t));
@@ -9189,8 +9190,8 @@ ${i?` {
9189
9190
 
9190
9191
  return count;
9191
9192
  }
9192
- `))}function j_(e,t,n){P_(e,t),oo(t)?G_(e):Vr(t)?z_(e):An(t)&&q_(e),ao(t)||H_(e,t)}function qg(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Rt(e,n,r);let a=e.$.deferredDupExpressions[0];if(I(a)&&((o=a.$)!=null&&o.variableName))return Ye(a.$.variableName,a.$.env)}return t}function Yg(e,t,n){var r,i,o;if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((i=e.$)!=null&&i.variableName){let s=e.$.variableName;e.$.variableName=void 0;let l=B(e,t,n);e.$.variableName=s;let u=Y(e.$.type,n),c=ve(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=B(e,t,n);n.emitter.emitLine(`${t}${s};`)}Rt(e,t,n);let a=e.$.deferredDupExpressions[0];if(I(a)&&((o=a.$)!=null&&o.variableName))return Ye(a.$.variableName,a.$.env)}return B(e,t,n)}function Hg(e){var t,n;if(I(e)&&T(e,F.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&X(r))return Ye(r.token.value,(t=r.$)==null?void 0:t.env)}if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&X(e.func.args[0])){let r=e.func.args[0];return Ye(r.token.value,(n=r.$)==null?void 0:n.env)}}function nr(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let _ of n.$.deferredDropExpressions){let f=hr(_);f&&l.add(f)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(_=>{let f=hr(_);return!f||l.has(f)?!1:_e(n.$.env,f).length>0}):t.pendingDeferredDrops.filter(_=>{let f=hr(_);if(!f||l.has(f))return!1;if(u&&u.size>0){let p=Hg(_);if(p&&u.has(p))return!1}return!0});if(c.length>0){let _=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${_}`);for(let f of c){let p=B(f,e,t);p&&t.emitter.emitLine(`${e}${p};`)}}}}function Wr(e,t,n,r=!1){var o;if(!t.consumedVarPendingDrops||t.consumedVarPendingDrops.length===0)return;let i=(o=n.$)!=null&&o.env&&!r?t.consumedVarPendingDrops.filter(a=>{let s=hr(a);return s?_e(n.$.env,s).length>0:!1}):[...t.consumedVarPendingDrops];if(i.length>0){t.emitter.emitLine(`${e}// Drop consumed variables (escape propagation)`);for(let a of i){let s=B(a,e,t);s&&t.emitter.emitLine(`${e}${s};`)}}}function K_(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let _=r.continuationVariables.get("resume");if(_&&"directReturnVar"in _){if(!_.isUnitReturn){let f=e.args[0];if(f){let p=B(f,t,n);p&&n.emitter.emitLine(`${t}${_.directReturnVar} = ${p};`)}}return nr(t,r,e,!1,!0),_.directExitLabel&&n.emitter.emitLine(`${t}goto ${_.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 _,f=!1;if(r.inAsyncStateMachine&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,_=B(i,t,n),i.$.variableName=h,f=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=B(i,t,n);i.$.variableName=h;let $=Y(i.$.type,n),E=Ye(h,i.$.env);E!==v&&n.emitter.emitLine(`${t}${$} ${E} = ${v};`),_=E}else _=B(i,t,n);let p=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Rt(i,t,r);let h=i.$.deferredDupExpressions[0];I(h)&&((u=h.$)!=null&&u.variableName)&&(_=Ye(h.$.variableName,h.$.env),p=!0)}let m=Y(e.$.type,n),y=e.$.variableName?Ye(e.$.variableName,e.$.env):void 0;if(!p&&!De(e.$.type)&&y&&y!==_&&n.emitter.emitLine(`${t}${m} ${y} = ${_};`),e.$.deferredDropExpressions&&cn(e,t,n),r.inAsyncStateMachine){let h=r.inAsyncStateMachine.futureType,$=Cn(h).isFuture.outputType,E=De($);nr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let C;return E||(C=e.$.variableName&&f?e.$.variableName:e.$.variableName||_),gi({emitter:n.emitter,indent:t,resultCode:C,debugLabel:n.currentFunctionName}),""}return nr(t,r,e),De(e.$.type)?"return":`return ${p?_:y??_}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&cn(e,t,n),r.inAsyncStateMachine){let _=r.inAsyncStateMachine.futureType,p=Cn(_).isFuture.outputType,m=De(p);nr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let y=m?void 0:`(${Y(p,n)}){0}`;return gi({emitter:n.emitter,indent:t,resultCode:y,debugLabel:n.currentFunctionName}),""}return nr(t,r,e),"return"}}function X_(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=Qo(e,n),o=qg(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,M.return)){let i=B(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=Yg(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function Q_(e,t,n){let r=An(n),i=oo(n),o=Vr(n),a=r?"static unsigned __stdcall __yo_thread_entry(void* arg) {":"static void* __yo_thread_entry(void* arg) {",s=r?"return 0;":"return NULL;",l=r?"static unsigned __stdcall __yo_worker_thread_entry(void* arg) {":"static void* __yo_worker_thread_entry(void* arg) {",u=r?"return 0;":"return NULL;",c=r?"SwitchToThread();":"sched_yield();",_=r?`static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex; // Pool-level mutex (initialized in __yo_worker_init_mutex)
9193
- 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=r?`
9193
+ `))}function j_(e,t,n){P_(e,t),oo(t)?G_(e):Vr(t)?z_(e):Fn(t)&&q_(e),ao(t)||H_(e,t)}function Yg(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Rt(e,n,r);let a=e.$.deferredDupExpressions[0];if(I(a)&&((o=a.$)!=null&&o.variableName))return Ye(a.$.variableName,a.$.env)}return t}function Hg(e,t,n){var r,i,o;if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((i=e.$)!=null&&i.variableName){let s=e.$.variableName;e.$.variableName=void 0;let l=B(e,t,n);e.$.variableName=s;let u=Y(e.$.type,n),c=ve(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=B(e,t,n);n.emitter.emitLine(`${t}${s};`)}Rt(e,t,n);let a=e.$.deferredDupExpressions[0];if(I(a)&&((o=a.$)!=null&&o.variableName))return Ye(a.$.variableName,a.$.env)}return B(e,t,n)}function jg(e){var t,n;if(I(e)&&T(e,F.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&X(r))return Ye(r.token.value,(t=r.$)==null?void 0:t.env)}if(I(e)&&e.args.length===0&&I(e.func)&&T(e.func,".",2)&&X(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&X(e.func.args[0])){let r=e.func.args[0];return Ye(r.token.value,(n=r.$)==null?void 0:n.env)}}function nr(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let _ of n.$.deferredDropExpressions){let f=hr(_);f&&l.add(f)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(_=>{let f=hr(_);return!f||l.has(f)?!1:_e(n.$.env,f).length>0}):t.pendingDeferredDrops.filter(_=>{let f=hr(_);if(!f||l.has(f))return!1;if(u&&u.size>0){let p=jg(_);if(p&&u.has(p))return!1}return!0});if(c.length>0){let _=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${_}`);for(let f of c){let p=B(f,e,t);p&&t.emitter.emitLine(`${e}${p};`)}}}}function Wr(e,t,n,r=!1){var o;if(!t.consumedVarPendingDrops||t.consumedVarPendingDrops.length===0)return;let i=(o=n.$)!=null&&o.env&&!r?t.consumedVarPendingDrops.filter(a=>{let s=hr(a);return s?_e(n.$.env,s).length>0:!1}):[...t.consumedVarPendingDrops];if(i.length>0){t.emitter.emitLine(`${e}// Drop consumed variables (escape propagation)`);for(let a of i){let s=B(a,e,t);s&&t.emitter.emitLine(`${e}${s};`)}}}function K_(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let _=r.continuationVariables.get("resume");if(_&&"directReturnVar"in _){if(!_.isUnitReturn){let f=e.args[0];if(f){let p=B(f,t,n);p&&n.emitter.emitLine(`${t}${_.directReturnVar} = ${p};`)}}return nr(t,r,e,!1,!0),_.directExitLabel&&n.emitter.emitLine(`${t}goto ${_.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 _,f=!1;if(r.inAsyncStateMachine&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,_=B(i,t,n),i.$.variableName=h,f=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=B(i,t,n);i.$.variableName=h;let $=Y(i.$.type,n),E=Ye(h,i.$.env);E!==v&&n.emitter.emitLine(`${t}${$} ${E} = ${v};`),_=E}else _=B(i,t,n);let p=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Rt(i,t,r);let h=i.$.deferredDupExpressions[0];I(h)&&((u=h.$)!=null&&u.variableName)&&(_=Ye(h.$.variableName,h.$.env),p=!0)}let m=Y(e.$.type,n),y=e.$.variableName?Ye(e.$.variableName,e.$.env):void 0;if(!p&&!De(e.$.type)&&y&&y!==_&&n.emitter.emitLine(`${t}${m} ${y} = ${_};`),e.$.deferredDropExpressions&&_n(e,t,n),r.inAsyncStateMachine){let h=r.inAsyncStateMachine.futureType,$=Cn(h).isFuture.outputType,E=De($);nr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let C;return E||(C=e.$.variableName&&f?e.$.variableName:e.$.variableName||_),gi({emitter:n.emitter,indent:t,resultCode:C,debugLabel:n.currentFunctionName}),""}return nr(t,r,e),De(e.$.type)?"return":`return ${p?_:y??_}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&_n(e,t,n),r.inAsyncStateMachine){let _=r.inAsyncStateMachine.futureType,p=Cn(_).isFuture.outputType,m=De(p);nr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let y=m?void 0:`(${Y(p,n)}){0}`;return gi({emitter:n.emitter,indent:t,resultCode:y,debugLabel:n.currentFunctionName}),""}return nr(t,r,e),"return"}}function X_(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=Qo(e,n),o=Yg(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,M.return)){let i=B(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=Hg(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function Q_(e,t,n,r){let i=Fn(n),o=oo(n),a=Vr(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();",f=i?`static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex; // Pool-level mutex (initialized in __yo_worker_init_mutex)
9194
+ 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",p=i?`
9194
9195
  // Initialize the worker pool mutex on Windows (must be called before any use)
9195
9196
  static void __yo_worker_init_mutex(void) {
9196
9197
  if (!__yo_worker_pool_mutex_initialized) {
@@ -9198,16 +9199,16 @@ static void __yo_worker_init_mutex(void) {
9198
9199
  __yo_worker_pool_mutex_initialized = 1;
9199
9200
  }
9200
9201
  }
9201
- `:"",p=r?"__yo_worker_init_mutex();":"",m;r?m=` SYSTEM_INFO sysinfo;
9202
+ `:"",m=i?"__yo_worker_init_mutex();":"",y;i?y=` SYSTEM_INFO sysinfo;
9202
9203
  GetSystemInfo(&sysinfo);
9203
- return (size_t)sysinfo.dwNumberOfProcessors;`:o?m=` int count;
9204
+ return (size_t)sysinfo.dwNumberOfProcessors;`:a?y=` int count;
9204
9205
  size_t size = sizeof(count);
9205
9206
  if (sysctlbyname("hw.ncpu", &count, &size, NULL, 0) == 0) {
9206
9207
  return (size_t)count;
9207
9208
  }
9208
- return 1;`:m=` long count = sysconf(_SC_NPROCESSORS_ONLN);
9209
- return count > 0 ? (size_t)count : 1;`;let y;i?y=` int cpu = sched_getcpu();
9210
- return cpu;`:r?y=" return (int)GetCurrentProcessorNumber();":y=" return -1;",e.emitLine(`
9209
+ return 1;`:y=` long count = sysconf(_SC_NPROCESSORS_ONLN);
9210
+ return count > 0 ? (size_t)count : 1;`;let g;o?g=` int cpu = sched_getcpu();
9211
+ return cpu;`:i?g=" return (int)GetCurrentProcessorNumber();":g=" return -1;",e.emitLine(`
9211
9212
  // ============================================================================
9212
9213
  // Parallelism Runtime - Thread and Worker
9213
9214
  // ============================================================================
@@ -9229,16 +9230,22 @@ typedef struct __yo_thread_entry_args_t {
9229
9230
  } __yo_thread_entry_args_t;
9230
9231
 
9231
9232
  // Thread entry point
9232
- ${a}
9233
+ ${s}
9233
9234
  __yo_thread_entry_args_t* args = (__yo_thread_entry_args_t*)arg;
9234
9235
 
9235
9236
  PARALLELISM_DEBUG("[THREAD] Thread started (tid=%zu)\\n", (size_t)__yo_get_thread_id());
9236
9237
 
9237
9238
  // Initialize thread-local GC for this thread
9238
9239
  __yo_gc_init_thread();
9240
+ ${r?`
9241
+ // Initialize per-thread async event loop (io_uring/kqueue/IOCP)
9242
+ __yo_async_scheduler_init();`:""}
9239
9243
 
9240
9244
  // Call user's function with closure
9241
9245
  args->fn(args->closure);
9246
+ ${r?`
9247
+ // Drain per-thread event loop \u2014 wait for all async tasks spawned in this thread
9248
+ __yo_async_wait_all();`:""}
9242
9249
 
9243
9250
  PARALLELISM_DEBUG("[THREAD] Thread completed (tid=%zu)\\n", (size_t)__yo_get_thread_id());
9244
9251
 
@@ -9253,7 +9260,7 @@ ${a}
9253
9260
  // Free args
9254
9261
  __yo_free(args);
9255
9262
 
9256
- ${s}
9263
+ ${l}
9257
9264
  }
9258
9265
 
9259
9266
  // Spawn a new OS thread (returns by value)
@@ -9322,17 +9329,20 @@ typedef struct __yo_worker_thread_t {
9322
9329
  static __yo_worker_thread_t* __yo_worker_threads = NULL; // Array of worker threads
9323
9330
  static size_t __yo_worker_num_threads = 0; // Number of worker threads
9324
9331
  static size_t __yo_worker_next_thread = 0; // Round-robin counter for task distribution
9325
- ${_}
9326
- static volatile int __yo_worker_pool_initialized = 0; // Pool initialization flag
9327
9332
  ${f}
9333
+ static volatile int __yo_worker_pool_initialized = 0; // Pool initialization flag
9334
+ ${p}
9328
9335
  // Worker thread entry point
9329
- ${l}
9336
+ ${u}
9330
9337
  __yo_worker_thread_t* worker = (__yo_worker_thread_t*)arg;
9331
9338
 
9332
9339
  PARALLELISM_DEBUG("[WORKER] Worker thread started (tid=%zu)\\n", (size_t)__yo_get_thread_id());
9333
9340
 
9334
9341
  // Initialize thread-local GC for this worker thread
9335
9342
  __yo_gc_init_thread();
9343
+ ${r?`
9344
+ // Initialize per-thread async event loop (io_uring/kqueue/IOCP)
9345
+ __yo_async_scheduler_init();`:""}
9336
9346
 
9337
9347
  // Signal that this thread has started
9338
9348
  worker->started = 1;
@@ -9366,6 +9376,9 @@ ${l}
9366
9376
  if (task != NULL) {
9367
9377
  PARALLELISM_DEBUG("[WORKER] Executing task (tid=%zu)\\n", (size_t)__yo_get_thread_id());
9368
9378
  task->fn(task->closure);
9379
+ ${r?`
9380
+ // Drain per-thread event loop \u2014 wait for all async tasks from this task
9381
+ __yo_async_wait_all();`:""}
9369
9382
 
9370
9383
  // Free task closure and task node
9371
9384
  if (task->closure) {
@@ -9383,7 +9396,7 @@ ${l}
9383
9396
  // Final GC cleanup
9384
9397
  __yo_gc_collect();
9385
9398
 
9386
- ${u}
9399
+ ${c}
9387
9400
  }
9388
9401
 
9389
9402
  // Initialize the worker pool with the specified number of threads
@@ -9422,7 +9435,7 @@ static void __yo_worker_pool_init(size_t num_threads) {
9422
9435
  __yo_worker_thread_t* worker = &__yo_worker_threads[i];
9423
9436
  while (!worker->started) {
9424
9437
  // Busy wait with yield to let threads start
9425
- ${c}
9438
+ ${_}
9426
9439
  }
9427
9440
  }
9428
9441
 
@@ -9482,18 +9495,18 @@ static void __yo_worker_pool_shutdown(void) {
9482
9495
 
9483
9496
  // Get number of hardware threads (CPU cores)
9484
9497
  static size_t __yo_get_hardware_threads(void) {
9485
- ${m}
9498
+ ${y}
9486
9499
  }
9487
9500
 
9488
9501
  // Get CPU ID that the current thread is running on
9489
9502
  // Returns -1 if CPU affinity information is not available
9490
9503
  static int __yo_get_cpu_id(void) {
9491
- ${y}
9504
+ ${g}
9492
9505
  }
9493
9506
 
9494
9507
  // Set the number of worker threads (must be called before first spawn)
9495
9508
  static void __yo_worker_set_num_threads(size_t num) {
9496
- ${p}
9509
+ ${m}
9497
9510
  __YO_THREAD_SYNC_LOCK(&__yo_worker_pool_mutex);
9498
9511
  if (!__yo_worker_pool_initialized) {
9499
9512
  // Pool not initialized yet, just set for later
@@ -9507,7 +9520,7 @@ static void __yo_worker_set_num_threads(size_t num) {
9507
9520
 
9508
9521
  // Get the number of worker threads
9509
9522
  static size_t __yo_worker_get_num_threads(void) {
9510
- ${p}
9523
+ ${m}
9511
9524
  __YO_THREAD_SYNC_LOCK(&__yo_worker_pool_mutex);
9512
9525
  size_t num = __yo_worker_num_threads;
9513
9526
  if (num == 0) {
@@ -9520,7 +9533,7 @@ static size_t __yo_worker_get_num_threads(void) {
9520
9533
  // Spawn a task on the worker pool
9521
9534
  // Uses round-robin distribution for thread affinity
9522
9535
  static void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
9523
- ${p}
9536
+ ${m}
9524
9537
  __YO_THREAD_SYNC_LOCK(&__yo_worker_pool_mutex);
9525
9538
 
9526
9539
  // Initialize pool on first spawn if not already done
@@ -9559,7 +9572,7 @@ static void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
9559
9572
  __yo_cond_signal(&worker->cond);
9560
9573
  __yo_mutex_unlock(&worker->mutex);
9561
9574
  }
9562
- `)}function uu(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"} : ${D(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 cu(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct ${i}_s { // Vtable for ${D(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([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(_n(s)){let l=s.isFn.callType,u=Y(l.return.type,n),c=l.parameters.map(_=>{let f=Y(_.type,n),p=ve(_.label);return`${f} ${p}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=ve(l.label);if(J(l.type)){let c=l.type;if(c.parameters.length>0){let _=c.parameters[0];if(_&&_.label==="self"){let f=Y(c.return.type,n),p=c.parameters.map((m,y)=>{if(y===0)return"void* self";{let g=Y(m.type,n),h=ve(m.label);return`${g} ${h}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${p}); // Method pointer for ${l.label}`)}}}else{let c=Y(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine("")}function _u(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,i]of e.dynImpls){let o=z(i.concreteType)&&i.concreteType.resolvedConcreteType?i.concreteType.resolvedConcreteType:i.concreteType,s=`__yo_dyn_box_${((r=e.types[o.id])==null?void 0:r.cName)||`unknown_${o.id}`}`;if(n.has(s))continue;n.add(s);let l=Y(o,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" __yo_ref_header_t header;"),t.emitDeclarationLine(` ${l} value;`),t.emitDeclarationLine(`} ${s};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`static ${s}* __yo_new_${s}(${l} value);`),t.emitDeclarationLine(`static void __yo_dispose_${s}(void* ptr);`),t.emitDeclarationLine("")}}function Z_(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
9575
+ `)}function uu(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"} : ${D(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 cu(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct ${i}_s { // Vtable for ${D(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([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(fn(s)){let l=s.isFn.callType,u=Y(l.return.type,n),c=l.parameters.map(_=>{let f=Y(_.type,n),p=ve(_.label);return`${f} ${p}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=ve(l.label);if(J(l.type)){let c=l.type;if(c.parameters.length>0){let _=c.parameters[0];if(_&&_.label==="self"){let f=Y(c.return.type,n),p=c.parameters.map((m,y)=>{if(y===0)return"void* self";{let g=Y(m.type,n),h=ve(m.label);return`${g} ${h}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${p}); // Method pointer for ${l.label}`)}}}else{let c=Y(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine("")}function _u(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,i]of e.dynImpls){let o=z(i.concreteType)&&i.concreteType.resolvedConcreteType?i.concreteType.resolvedConcreteType:i.concreteType,s=`__yo_dyn_box_${((r=e.types[o.id])==null?void 0:r.cName)||`unknown_${o.id}`}`;if(n.has(s))continue;n.add(s);let l=Y(o,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" __yo_ref_header_t header;"),t.emitDeclarationLine(` ${l} value;`),t.emitDeclarationLine(`} ${s};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`static ${s}* __yo_new_${s}(${l} value);`),t.emitDeclarationLine(`static void __yo_dispose_${s}(void* ptr);`),t.emitDeclarationLine("")}}function Z_(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
9563
9576
  // Based on QuickJS trial deletion algorithm
9564
9577
  // See CYCLE_COLLECTION.md for design details
9565
9578
 
@@ -9601,7 +9614,7 @@ typedef enum {
9601
9614
 
9602
9615
  // GC flags
9603
9616
  #define __YO_GC_TRACKED 0x01 // Object is tracked by GC (might participate in cycles)
9604
- `),An(e.targetInfo)?e.emitter.emitDeclarationLine(`// Thread synchronization for stop-the-world GC (Windows)
9617
+ `),Fn(e.targetInfo)?e.emitter.emitDeclarationLine(`// Thread synchronization for stop-the-world GC (Windows)
9605
9618
  #ifndef WIN32_LEAN_AND_MEAN
9606
9619
  #define WIN32_LEAN_AND_MEAN
9607
9620
  #endif
@@ -9740,7 +9753,7 @@ typedef struct __yo_io_future_t {
9740
9753
  } __yo_io_future_t;
9741
9754
 
9742
9755
  // Forward declarations will be added here if needed
9743
- `);for(let f in e.types){let{type:p,cName:m}=e.types[f];if(!Ze(p)&&!(p.isExtern==="c"&&p.externName)){if(Rn(p))e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`);else if(xe(p)){if(p.isNewtype&&p.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}else if(ze(p)){let y=xn(p),g=mr(p);!y&&!g&&e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),jg(e),Kg(e),pu(e),Xg(e);for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||ze(p)&&mr(p)&&fu(p,m,e)}let i=[];for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||(xe(p)?i.push({typeId:f,type:p,cName:m,kind:"struct"}):ze(p)&&!mr(p)&&!xn(p)?i.push({typeId:f,type:p,cName:m,kind:"enum"}):Qe(p)&&i.push({typeId:f,type:p,cName:m,kind:"tuple"}))}let o=new Map,a=new Map(i.map(f=>[f.typeId,f])),s=new Map(i.map(f=>[f.cName,f.typeId]));function l(f){if(tt(f)){let m=f.childType;if(xe(m)&&m.isNewtype)return m}else if(ze(f)){let p=xn(f);if(p&&tt(p)){let y=p.childType;if(xe(y)&&y.isNewtype)return y}}return null}for(let{typeId:f,type:p,kind:m}of i)if(o.set(f,new Set),m==="struct"&&xe(p))for(let y of p.fields){let g=y.type;z(g)&&g.resolvedConcreteType&&(g=g.resolvedConcreteType);let h=l(g);if(h){let v=Y(h,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}if(ze(g)){if(!xn(g)){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}}else if(xe(g)&&g.isNewtype){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}else if(xe(g)&&!g.isReferenceSemantics&&!g.isNewtype){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}else if(Qe(g)){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}}else if(m==="enum"&&ze(p)){for(let y of p.variants)if(y.fields){for(let g of y.fields)if(ze(g.type)){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(xe(g.type)&&g.type.isNewtype){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(Qe(g.type)){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(xe(g.type)&&!g.type.isReferenceSemantics&&!g.type.isNewtype){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}}}else if(m==="tuple"&&Qe(p)){for(let y of p.fields)if(Qe(y.type)){let g=Y(y.type,e),h=s.get(g);h&&h!==f&&a.has(h)&&o.get(f).add(h)}else if(ze(y.type)){let g=Y(y.type,e),h=s.get(g);h&&h!==f&&a.has(h)&&o.get(f).add(h)}else if(xe(y.type)&&!y.type.isReferenceSemantics&&!y.type.isNewtype){let g=Y(y.type,e),h=s.get(g);h&&h!==f&&a.has(h)&&o.get(f).add(h)}}let u=new Map;for(let[f,p]of o)u.set(f,p.size);let c=[];for(let[f,p]of u)p===0&&c.push(f);let _=[];for(;c.length>0;){let f=c.shift(),p=a.get(f);_.push({type:p.type,cName:p.cName,kind:p.kind});for(let[m,y]of o)if(y.has(f)){let g=(u.get(m)||1)-1;u.set(m,g),g===0&&c.push(m)}}if(_.length<i.length)for(let f of i)_.find(p=>p.cName===f.cName)||_.push({type:f.type,cName:f.cName,kind:f.kind});uu(e);for(let{type:f,cName:p,kind:m}of _)m==="struct"&&xe(f)?Zg(f,p,e):m==="enum"&&ze(f)?fu(f,p,e):m==="tuple"&&Qe(f)&&Jg(f,p,e);for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||ze(p)&&xn(p)&&fu(p,m,e)}for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||(Ke(p)?cu(p,m,e):Pt(p)&&eh(p,m,e))}Qg(e)}function jg(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 Kg(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 pu(e){var n;let t=e.emitter;if(e.isoTypes){for(let[r,i]of e.isoTypes){let{childTypeCName:o,structGenerated:a}=i;a||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" __yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${o} value; // Inner value`),t.emitDeclarationLine(`} ${r}_struct;`),t.emitDeclarationLine(`typedef ${r}_struct* ${r};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_iso_${r}(${o} value);`),t.emitDeclarationLine(""),i.structGenerated=!0)}for(let[r,i]of e.isoTypes){let{optionTypeCName:o,extractGenerated:a}=i;a||!o||t.emitDeclarationLine(`${o} __yo_iso_extract_${r}(${r} iso);`)}for(let[r,i]of e.isoTypes){let{structGenerated:o}=i;o&&(t.emitDeclarationLine(`void __yo_iso_dispose_${r}(${r} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${r}(void* ptr);`))}for(let[r,i]of e.isoTypes){let{childTypeCName:o,createGenerated:a}=i;a||(t.emitLine(`
9756
+ `);for(let f in e.types){let{type:p,cName:m}=e.types[f];if(!Ze(p)&&!(p.isExtern==="c"&&p.externName)){if(Rn(p))e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`);else if(xe(p)){if(p.isNewtype&&p.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}else if(ze(p)){let y=xn(p),g=mr(p);!y&&!g&&e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),Kg(e),Xg(e),pu(e),Qg(e);for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||ze(p)&&mr(p)&&fu(p,m,e)}let i=[];for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||(xe(p)?i.push({typeId:f,type:p,cName:m,kind:"struct"}):ze(p)&&!mr(p)&&!xn(p)?i.push({typeId:f,type:p,cName:m,kind:"enum"}):Qe(p)&&i.push({typeId:f,type:p,cName:m,kind:"tuple"}))}let o=new Map,a=new Map(i.map(f=>[f.typeId,f])),s=new Map(i.map(f=>[f.cName,f.typeId]));function l(f){if(tt(f)){let m=f.childType;if(xe(m)&&m.isNewtype)return m}else if(ze(f)){let p=xn(f);if(p&&tt(p)){let y=p.childType;if(xe(y)&&y.isNewtype)return y}}return null}for(let{typeId:f,type:p,kind:m}of i)if(o.set(f,new Set),m==="struct"&&xe(p))for(let y of p.fields){let g=y.type;z(g)&&g.resolvedConcreteType&&(g=g.resolvedConcreteType);let h=l(g);if(h){let v=Y(h,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}if(ze(g)){if(!xn(g)){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}}else if(xe(g)&&g.isNewtype){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}else if(xe(g)&&!g.isReferenceSemantics&&!g.isNewtype){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}else if(Qe(g)){let v=Y(g,e),$=s.get(v);$&&$!==f&&a.has($)&&o.get(f).add($)}}else if(m==="enum"&&ze(p)){for(let y of p.variants)if(y.fields){for(let g of y.fields)if(ze(g.type)){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(xe(g.type)&&g.type.isNewtype){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(Qe(g.type)){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}else if(xe(g.type)&&!g.type.isReferenceSemantics&&!g.type.isNewtype){let h=Y(g.type,e),v=s.get(h);v&&v!==f&&a.has(v)&&o.get(f).add(v)}}}else if(m==="tuple"&&Qe(p)){for(let y of p.fields)if(Qe(y.type)){let g=Y(y.type,e),h=s.get(g);h&&h!==f&&a.has(h)&&o.get(f).add(h)}else if(ze(y.type)){let g=Y(y.type,e),h=s.get(g);h&&h!==f&&a.has(h)&&o.get(f).add(h)}else if(xe(y.type)&&!y.type.isReferenceSemantics&&!y.type.isNewtype){let g=Y(y.type,e),h=s.get(g);h&&h!==f&&a.has(h)&&o.get(f).add(h)}}let u=new Map;for(let[f,p]of o)u.set(f,p.size);let c=[];for(let[f,p]of u)p===0&&c.push(f);let _=[];for(;c.length>0;){let f=c.shift(),p=a.get(f);_.push({type:p.type,cName:p.cName,kind:p.kind});for(let[m,y]of o)if(y.has(f)){let g=(u.get(m)||1)-1;u.set(m,g),g===0&&c.push(m)}}if(_.length<i.length)for(let f of i)_.find(p=>p.cName===f.cName)||_.push({type:f.type,cName:f.cName,kind:f.kind});uu(e);for(let{type:f,cName:p,kind:m}of _)m==="struct"&&xe(f)?Jg(f,p,e):m==="enum"&&ze(f)?fu(f,p,e):m==="tuple"&&Qe(f)&&eh(f,p,e);for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||ze(p)&&xn(p)&&fu(p,m,e)}for(let f in e.types){let{type:p,cName:m}=e.types[f];Ze(p)||p.isExtern==="c"&&p.externName||(Ke(p)?cu(p,m,e):Pt(p)&&th(p,m,e))}Zg(e)}function Kg(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 Xg(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 pu(e){var n;let t=e.emitter;if(e.isoTypes){for(let[r,i]of e.isoTypes){let{childTypeCName:o,structGenerated:a}=i;a||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" __yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${o} value; // Inner value`),t.emitDeclarationLine(`} ${r}_struct;`),t.emitDeclarationLine(`typedef ${r}_struct* ${r};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_iso_${r}(${o} value);`),t.emitDeclarationLine(""),i.structGenerated=!0)}for(let[r,i]of e.isoTypes){let{optionTypeCName:o,extractGenerated:a}=i;a||!o||t.emitDeclarationLine(`${o} __yo_iso_extract_${r}(${r} iso);`)}for(let[r,i]of e.isoTypes){let{structGenerated:o}=i;o&&(t.emitDeclarationLine(`void __yo_iso_dispose_${r}(${r} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${r}(void* ptr);`))}for(let[r,i]of e.isoTypes){let{childTypeCName:o,createGenerated:a}=i;a||(t.emitLine(`
9744
9757
  ${r} __yo_create_iso_${r}(${o} value) {
9745
9758
  ${r} iso = (${r})__yo_malloc(sizeof(${r}_struct));
9746
9759
  iso->header.ref_count = 1;
@@ -9773,7 +9786,7 @@ ${o} __yo_iso_extract_${r}(${r} iso) {
9773
9786
  result.data.Some.value = iso->value;
9774
9787
  }
9775
9788
  return result;
9776
- }`)}i.extractGenerated=!0}}}}function Xg(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 Qg(e){var n;let t=e.emitter;if(e.arcTypes){for(let[r,i]of e.arcTypes){let{childTypeCName:o}=i;i.structGenerated||(t.emitDeclarationLine(`struct ${r}_struct { // Arc wrapper`),t.emitDeclarationLine(" __yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(` ${o} value; // Inner value`),t.emitDeclarationLine("};"),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_arc_${r}(${o} value);`),t.emitDeclarationLine(""),i.structGenerated=!0)}for(let[r,i]of e.arcTypes)i.structGenerated&&(t.emitDeclarationLine(`void __yo_arc_dispose_${r}(${r} arc);`),t.emitDeclarationLine(`static void __yo_dispose_arc_${r}(void* ptr);`));for(let[r,i]of e.arcTypes){let{childTypeCName:o,createGenerated:a}=i;a||(t.emitLine(`
9789
+ }`)}i.extractGenerated=!0}}}}function Qg(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 Zg(e){var n;let t=e.emitter;if(e.arcTypes){for(let[r,i]of e.arcTypes){let{childTypeCName:o}=i;i.structGenerated||(t.emitDeclarationLine(`struct ${r}_struct { // Arc wrapper`),t.emitDeclarationLine(" __yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(` ${o} value; // Inner value`),t.emitDeclarationLine("};"),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_arc_${r}(${o} value);`),t.emitDeclarationLine(""),i.structGenerated=!0)}for(let[r,i]of e.arcTypes)i.structGenerated&&(t.emitDeclarationLine(`void __yo_arc_dispose_${r}(${r} arc);`),t.emitDeclarationLine(`static void __yo_dispose_arc_${r}(void* ptr);`));for(let[r,i]of e.arcTypes){let{childTypeCName:o,createGenerated:a}=i;a||(t.emitLine(`
9777
9790
  ${r} __yo_create_arc_${r}(${o} value) {
9778
9791
  ${r} arc = (${r})__yo_malloc(sizeof(${r}_struct));
9779
9792
  arc->header.ref_count = 1;
@@ -9788,7 +9801,7 @@ void __yo_arc_dispose_${r}(${r} arc) {
9788
9801
  }`),t.emitLine(`
9789
9802
  static void __yo_dispose_arc_${r}(void* ptr) {
9790
9803
  __yo_arc_dispose_${r}((${r})ptr);
9791
- }`),i.disposeGenerated=!0}}}function Zg(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=Y(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${D(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${D(e)} (reference counted)`),r.emitDeclarationLine(" __yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=Y(i.type,n),a=ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${D(e)}`);for(let i of e.fields){let o=Y(i.type,n),a=ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Jg(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${D(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=Y(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function eh(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${D(e)}`);for(let i of e.fields){let o=Y(i.type,n),a=ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function fu(e,t,n){let r=n.emitter,i=xn(e);if(i){let l=Y(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${D(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(mr(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${D(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=In(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=In(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!De(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let _ of u){let f=Y(_.type,n),p=ve(_.label);r.emitDeclarationLine(` ${f} ${p};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${D(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function th(e,t){let n=Er(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!on(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ae({type:r,env:t},{type:s,env:t}))return a}let i=Fs({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function nh(e,t,n){var s;let r=th(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===F.dispose[0]);if(i<0)return;let o=r.fields[i];if(!Ce(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,_=c.specializedType??c.type;if(c.funcName===F.dispose[0]&&_.SelfType&&ae({type:_.SelfType,env:t},{type:e,env:t}))return u.cName}}function J_(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),Y_(e.emitter,e.targetInfo),e.usesAsync&&j_(e.emitter,e.targetInfo,e.debugAsyncAwait),e.usesParallelism&&Q_(e.emitter,e.debugParallelism,e.targetInfo),ih(e),ah(e);for(let u in e.functions){let{value:c,cName:_}=e.functions[u],f=_==="__yo_user_main",p=(n=(t=c.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,m=p&&p.hasEffects;if(!f&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!f&&!m&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&dn(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(A=>A.isImplicit)].some(A=>J(A.type)))continue;let g=c.specializedType&&!Fr(c.type),h=c.specializedType??c.type,v=dn(h).length>0,$=c.type.parameters.some(A=>A.isCompileTimeOnly);if(!f&&(!c.isModuleEffectMember||$)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(jr(c.type)||Vi(c))||!f&&c.isIoAsyncStateMachineClosure||!f&&!m&&!v&&!c.isModuleEffectMember&&(jr(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!g||Vi(c)||Wo(c)||c.isIoAsyncStateMachineClosure))continue;let E=c.specializedType??c.type,C=!m&&!c.isModuleEffectMember&&(E.parameters.some(A=>Ze(A.type))||E.forallParameters.length>0),w=Ze(E.return.type),b=z(E.return.type)&&E.return.type.requiredTraits.length>0;if(C||w&&!b&&!c.isModuleEffectMember)continue;let k=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;k&&k.hasEffects,nf(c,_,e)}pu(e)}function ef(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 ${D(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);{let s=dn(r.type).map(()=>"NULL").join(", "),l=s?`(${s})`:"()",u=e.usesAsync?`
9804
+ }`),i.disposeGenerated=!0}}}function Jg(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=Y(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${D(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${D(e)} (reference counted)`),r.emitDeclarationLine(" __yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=Y(i.type,n),a=ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${D(e)}`);for(let i of e.fields){let o=Y(i.type,n),a=ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function eh(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${D(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=Y(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function th(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${D(e)}`);for(let i of e.fields){let o=Y(i.type,n),a=ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function fu(e,t,n){let r=n.emitter,i=xn(e);if(i){let l=Y(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${D(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(mr(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${D(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=In(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=In(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!De(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let _ of u){let f=Y(_.type,n),p=ve(_.label);r.emitDeclarationLine(` ${f} ${p};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${D(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function nh(e,t){let n=Er(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!on(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ae({type:r,env:t},{type:s,env:t}))return a}let i=Fs({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function rh(e,t,n){var s;let r=nh(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===F.dispose[0]);if(i<0)return;let o=r.fields[i];if(!Ce(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,_=c.specializedType??c.type;if(c.funcName===F.dispose[0]&&_.SelfType&&ae({type:_.SelfType,env:t},{type:e,env:t}))return u.cName}}function J_(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),Y_(e.emitter,e.targetInfo),e.usesAsync&&j_(e.emitter,e.targetInfo,e.debugAsyncAwait),e.usesParallelism&&Q_(e.emitter,e.debugParallelism,e.targetInfo,e.usesAsync??!1),oh(e),sh(e);for(let u in e.functions){let{value:c,cName:_}=e.functions[u],f=_==="__yo_user_main",p=(n=(t=c.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,m=p&&p.hasEffects;if(!f&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!f&&!m&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&un(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(A=>A.isImplicit)].some(A=>J(A.type)))continue;let g=c.specializedType&&!Fr(c.type),h=c.specializedType??c.type,v=un(h).length>0,$=c.type.parameters.some(A=>A.isCompileTimeOnly);if(!f&&(!c.isModuleEffectMember||$)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(jr(c.type)||Vi(c))||!f&&c.isIoAsyncStateMachineClosure||!f&&!m&&!v&&!c.isModuleEffectMember&&(jr(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!g||Vi(c)||Wo(c)||c.isIoAsyncStateMachineClosure))continue;let E=c.specializedType??c.type,C=!m&&!c.isModuleEffectMember&&(E.parameters.some(A=>Ze(A.type))||E.forallParameters.length>0),w=Ze(E.return.type),b=z(E.return.type)&&E.return.type.requiredTraits.length>0;if(C||w&&!b&&!c.isModuleEffectMember)continue;let k=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;k&&k.hasEffects,nf(c,_,e)}pu(e)}function ef(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 ${D(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);{let s=un(r.type).map(()=>"NULL").join(", "),l=s?`(${s})`:"()",u=e.usesAsync?`
9792
9805
  // Initialize async runtime
9793
9806
  __yo_async_scheduler_init();`:"",c=e.usesAsync?`
9794
9807
  // Wait for all async tasks to complete
@@ -9805,7 +9818,7 @@ int main(int argc, char** argv) {
9805
9818
  ${c}
9806
9819
  return 0;
9807
9820
  }
9808
- `)}}function tf(e){var t,n;for(let r in e.functions){let{value:i}=e.functions[r];if(Vi(i))continue;let o=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;if(!o||!o.hasEffects)continue;if(i.specializedType){let l=i.specializedType,u=l.forallParameters.length>0||l.parameters.some(p=>p.isCompileTimeOnly),c=l.parameters.some(p=>!p.isCompileTimeOnly&&z(p.type)&&!je(p.type));if(u||c)continue;let _=i.specializedType.parameters.some(p=>Ze(p.type)),f=Ze(i.specializedType.return.type);if(_||f)continue}let a=dn(i.specializedType??i.type);if(a.length===0&&i.specializedType){let l=dn(i.type);l.some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)&&(a=l)}a.length>0}}function nf(e,t,n){var w,b,k,A,S,V,O;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&je(o.return.type)){let x=Da(e.body);(w=x==null?void 0:x.$)!=null&&w.asyncStateMachineStructName?a=`${x.$.asyncStateMachineStructName}*`:(b=e.body.$)!=null&&b.type&&z(e.body.$.type)&&je(e.body.$.type)&&(a=Y(e.body.$.type,n))}e.body&&z(o.return.type)&&!je(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&(k=e.body.$)!=null&&k.type&&(a=Y(e.body.$.type,n));let s=e.specializedType&&dn(o).length===0&&dn(e.type).some(x=>x.fieldFunctionType.forallParameters&&x.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?oi(o,t,n,a,s):oi(o,t,n,void 0,s),c=t==="__yo_user_main"||((A=n.exportedFunctionLabels)==null?void 0:A.has(e.funcId))?"":"static ";r.emitLine(`${c}${l} {`);let _=n.currentFunctionName,f=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let p=n.isModuleEffectMemberFunction,m=n.overrideReturnTypeStr;e.isModuleEffectMember&&(n.isModuleEffectMemberFunction=!0),n.overrideReturnTypeStr=a;let y=n.currentEvidenceParams,g=dn(o);if(g.length===0&&e.specializedType){let x=dn(e.type);x.some(N=>N.fieldFunctionType.forallParameters&&N.fieldFunctionType.forallParameters.length>0)&&(g=x)}if(g.length>0){let x=new Map;for(let N of g)x.set(`${N.implicitLabel}.${N.fieldLabel}`,N);n.currentEvidenceParams=x}let h=n.currentClosureCaptures,v=n.currentClosureCaptureFrameLevel,$=n.currentClosureType,E=n.currentClosureCaptureTypeCName;if(o.isClosure){let x=e.closureInfo;if(x){let N=x.closureType.isFn,P=x.captureType;if(n.currentClosureType=N.callType,P&&xe(P)&&P.fields.length>0){let R=P.fields.map(G=>G.label);n.currentClosureCaptures=R,n.currentClosureCaptureFrameLevel=e.frameLevel;let H=(S=n.types[P.id])==null?void 0:S.cName;H&&(n.currentClosureCaptureTypeCName=H)}}}if(e.funcName===F.___dispose[0]&&o.SelfType){let x=nh(o.SelfType,e.type.env,n);if(x){let N=((V=o.parameters[0])==null?void 0:V.label)==="__yo_self"?"__yo_self":((O=o.parameters[0])==null?void 0:O.label)??"__yo_self";r.emitLine(` ${x}(${N}); // Call user's dispose method`)}}rh(e.body,o," ",n),n.currentFunctionName=_,n.currentFunctionType=f,n.isModuleEffectMemberFunction=p,n.overrideReturnTypeStr=m,n.currentEvidenceParams=y,n.currentClosureCaptures=h,n.currentClosureCaptureFrameLevel=v,n.currentClosureType=$,n.currentClosureCaptureTypeCName=E,r.emitLine("}")}function rh(e,t,n,r){var o,a,s,l,u,c,_,f,p,m,y,g;let i=r.emitter;if(I(e)&&T(e,M.begin)){let h=e.args;r.pendingDeferredDrops=[...((o=e.$)==null?void 0:o.deferredDropExpressions)??[]],r.consumedVarPendingDrops=[...((a=e.$)==null?void 0:a.consumedVariableDropExpressions)??[]];let v=!1;for(let $=0;$<h.length-1;$++){let E=h[$];T(E,M.return)&&(v=!0);let C=B(E,n,r);if(C&&(!E.$||!qt(E.$.env.modulePath,C))&&i.emitLine(`${n}${C};`),v)break;if(Ot((s=E.$)==null?void 0:s.controlFlow)){v=!0;break}}if(!v&&h.length>0){let $=h[h.length-1];if(je(t.return.type)&&$){let C=wn($),w=(l=$.$)==null?void 0:l.type,b=w&&je(w);if(C||b){let k=B($,n,r);if((u=e.$)!=null&&u.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&w){let A=Y(w,r),S=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${A} ${S} = ${k};`),cn(e,n,r),i.emitLine(`${n}return ${S};`)}else i.emitLine(`${n}return ${k};`);return}}else if($&&De(t.return.type)){let C=B($,n,r);C&&i.emitLine(`${n}${C};`),cn(e,n,r)}else if($){let C=Ot((c=$.$)==null?void 0:c.controlFlow),w=De((_=$.$)==null?void 0:_.type)||I($)&&T($,M.tuple)&&$.args.length===0,b=h.length>1?h[h.length-2]:null,k=Ot((f=b==null?void 0:b.$)==null?void 0:f.controlFlow);if(!(w&&k))if(C){let A=B($,n,r);A&&i.emitLine(`${n}${A};`)}else{if((p=$.$)!=null&&p.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){if((m=$.$)!=null&&m.variableName){let V=Y(t.return.type,r),O=Ye($.$.variableName,$.$.env),x=B($,n,r);O!==x&&i.emitLine(`${n}${V} ${O} = ${x};`)}Rt($,n,r);let S=$.$.deferredDupExpressions[0];if(I(S)&&((y=S.$)!=null&&y.variableName)){let V=ve(S.$.variableName);cn(e,n,r),i.emitLine(`${n}return ${V};`);return}}let A=B($,n,r);cn(e,n,r),A&&i.emitLine(`${n}return ${A};`)}}}else if(v&&h.length>0){let $=h[h.length-1];$&&De((g=$.$)==null?void 0:g.type)}}else if(cn(e,n,r),De(t.return.type)){let h=B(e,n,r);h&&i.emitLine(`${n}${h};`)}else X_(e,n,r)}function rf(e){var t,n;for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(Vi(i)||!i.specializedType||!Fr(i.type))continue;let a=i.specializedType,s=a.forallParameters.length>0||a.parameters.some(p=>p.isCompileTimeOnly),l=a.parameters.some(p=>!p.isCompileTimeOnly&&z(p.type)&&!je(p.type));if(s||l)continue;let u=i.specializedType.parameters.some(p=>Ze(p.type)),c=Ze(i.specializedType.return.type);if(u||c)continue;let _=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;_&&_.hasEffects||i.isModuleEffectMember||dn(i.specializedType??i.type).length>0||nf(i,o,e)}}function ih(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
9821
+ `)}}function tf(e){var t,n;for(let r in e.functions){let{value:i}=e.functions[r];if(Vi(i))continue;let o=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;if(!o||!o.hasEffects)continue;if(i.specializedType){let l=i.specializedType,u=l.forallParameters.length>0||l.parameters.some(p=>p.isCompileTimeOnly),c=l.parameters.some(p=>!p.isCompileTimeOnly&&z(p.type)&&!je(p.type));if(u||c)continue;let _=i.specializedType.parameters.some(p=>Ze(p.type)),f=Ze(i.specializedType.return.type);if(_||f)continue}let a=un(i.specializedType??i.type);if(a.length===0&&i.specializedType){let l=un(i.type);l.some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)&&(a=l)}a.length>0}}function nf(e,t,n){var w,b,k,A,S,V,O;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&je(o.return.type)){let x=Da(e.body);(w=x==null?void 0:x.$)!=null&&w.asyncStateMachineStructName?a=`${x.$.asyncStateMachineStructName}*`:(b=e.body.$)!=null&&b.type&&z(e.body.$.type)&&je(e.body.$.type)&&(a=Y(e.body.$.type,n))}e.body&&z(o.return.type)&&!je(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&(k=e.body.$)!=null&&k.type&&(a=Y(e.body.$.type,n));let s=e.specializedType&&un(o).length===0&&un(e.type).some(x=>x.fieldFunctionType.forallParameters&&x.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?oi(o,t,n,a,s):oi(o,t,n,void 0,s),c=t==="__yo_user_main"||((A=n.exportedFunctionLabels)==null?void 0:A.has(e.funcId))?"":"static ";r.emitLine(`${c}${l} {`);let _=n.currentFunctionName,f=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let p=n.isModuleEffectMemberFunction,m=n.overrideReturnTypeStr;e.isModuleEffectMember&&(n.isModuleEffectMemberFunction=!0),n.overrideReturnTypeStr=a;let y=n.currentEvidenceParams,g=un(o);if(g.length===0&&e.specializedType){let x=un(e.type);x.some(N=>N.fieldFunctionType.forallParameters&&N.fieldFunctionType.forallParameters.length>0)&&(g=x)}if(g.length>0){let x=new Map;for(let N of g)x.set(`${N.implicitLabel}.${N.fieldLabel}`,N);n.currentEvidenceParams=x}let h=n.currentClosureCaptures,v=n.currentClosureCaptureFrameLevel,$=n.currentClosureType,E=n.currentClosureCaptureTypeCName;if(o.isClosure){let x=e.closureInfo;if(x){let N=x.closureType.isFn,P=x.captureType;if(n.currentClosureType=N.callType,P&&xe(P)&&P.fields.length>0){let R=P.fields.map(G=>G.label);n.currentClosureCaptures=R,n.currentClosureCaptureFrameLevel=e.frameLevel;let H=(S=n.types[P.id])==null?void 0:S.cName;H&&(n.currentClosureCaptureTypeCName=H)}}}if(e.funcName===F.___dispose[0]&&o.SelfType){let x=rh(o.SelfType,e.type.env,n);if(x){let N=((V=o.parameters[0])==null?void 0:V.label)==="__yo_self"?"__yo_self":((O=o.parameters[0])==null?void 0:O.label)??"__yo_self";r.emitLine(` ${x}(${N}); // Call user's dispose method`)}}ih(e.body,o," ",n),n.currentFunctionName=_,n.currentFunctionType=f,n.isModuleEffectMemberFunction=p,n.overrideReturnTypeStr=m,n.currentEvidenceParams=y,n.currentClosureCaptures=h,n.currentClosureCaptureFrameLevel=v,n.currentClosureType=$,n.currentClosureCaptureTypeCName=E,r.emitLine("}")}function ih(e,t,n,r){var o,a,s,l,u,c,_,f,p,m,y,g;let i=r.emitter;if(I(e)&&T(e,M.begin)){let h=e.args;r.pendingDeferredDrops=[...((o=e.$)==null?void 0:o.deferredDropExpressions)??[]],r.consumedVarPendingDrops=[...((a=e.$)==null?void 0:a.consumedVariableDropExpressions)??[]];let v=!1;for(let $=0;$<h.length-1;$++){let E=h[$];T(E,M.return)&&(v=!0);let C=B(E,n,r);if(C&&(!E.$||!qt(E.$.env.modulePath,C))&&i.emitLine(`${n}${C};`),v)break;if(Ot((s=E.$)==null?void 0:s.controlFlow)){v=!0;break}}if(!v&&h.length>0){let $=h[h.length-1];if(je(t.return.type)&&$){let C=wn($),w=(l=$.$)==null?void 0:l.type,b=w&&je(w);if(C||b){let k=B($,n,r);if((u=e.$)!=null&&u.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&w){let A=Y(w,r),S=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${A} ${S} = ${k};`),_n(e,n,r),i.emitLine(`${n}return ${S};`)}else i.emitLine(`${n}return ${k};`);return}}else if($&&De(t.return.type)){let C=B($,n,r);C&&i.emitLine(`${n}${C};`),_n(e,n,r)}else if($){let C=Ot((c=$.$)==null?void 0:c.controlFlow),w=De((_=$.$)==null?void 0:_.type)||I($)&&T($,M.tuple)&&$.args.length===0,b=h.length>1?h[h.length-2]:null,k=Ot((f=b==null?void 0:b.$)==null?void 0:f.controlFlow);if(!(w&&k))if(C){let A=B($,n,r);A&&i.emitLine(`${n}${A};`)}else{if((p=$.$)!=null&&p.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){if((m=$.$)!=null&&m.variableName){let V=Y(t.return.type,r),O=Ye($.$.variableName,$.$.env),x=B($,n,r);O!==x&&i.emitLine(`${n}${V} ${O} = ${x};`)}Rt($,n,r);let S=$.$.deferredDupExpressions[0];if(I(S)&&((y=S.$)!=null&&y.variableName)){let V=ve(S.$.variableName);_n(e,n,r),i.emitLine(`${n}return ${V};`);return}}let A=B($,n,r);_n(e,n,r),A&&i.emitLine(`${n}return ${A};`)}}}else if(v&&h.length>0){let $=h[h.length-1];$&&De((g=$.$)==null?void 0:g.type)}}else if(_n(e,n,r),De(t.return.type)){let h=B(e,n,r);h&&i.emitLine(`${n}${h};`)}else X_(e,n,r)}function rf(e){var t,n;for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(Vi(i)||!i.specializedType||!Fr(i.type))continue;let a=i.specializedType,s=a.forallParameters.length>0||a.parameters.some(p=>p.isCompileTimeOnly),l=a.parameters.some(p=>!p.isCompileTimeOnly&&z(p.type)&&!je(p.type));if(s||l)continue;let u=i.specializedType.parameters.some(p=>Ze(p.type)),c=Ze(i.specializedType.return.type);if(u||c)continue;let _=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;_&&_.hasEffects||i.isModuleEffectMember||un(i.specializedType??i.type).length>0||nf(i,o,e)}}function oh(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
9809
9822
  // Flag to prevent double RC decrements during GC collection.
9810
9823
  // When set, __yo_decr_rc skips all tracked objects because the GC
9811
9824
  // already accounts for their references via trial deletion.
@@ -9877,12 +9890,12 @@ static void __yo_decr_rc_atomic(void* ptr) {
9877
9890
  }`),t.emitDeclarationLine("static _Thread_local int __yo_effect_escaped = 0; // Thread-local flag for module effect escape detection"),t.emitDeclarationLine("static _Thread_local _Alignas(16) char __yo_effect_escape_value[64]; // Thread-local buffer for escape value storage"),t.emitLine(`// Per-thread GC tracking state for cycle collection
9878
9891
  static _Thread_local __yo_thread_gc_state_t* __yo_current_thread_gc = NULL; // Current thread's GC state
9879
9892
  static __yo_thread_gc_state_t* __yo_all_thread_gcs = NULL; // Global list of all thread GC states (for cleanup)
9880
- ${An(e.targetInfo)?"static __YO_THREAD_SYNC_TYPE __yo_thread_list_mutex;":"static __YO_THREAD_SYNC_TYPE __yo_thread_list_mutex = __YO_THREAD_SYNC_INIT;"}
9893
+ ${Fn(e.targetInfo)?"static __YO_THREAD_SYNC_TYPE __yo_thread_list_mutex;":"static __YO_THREAD_SYNC_TYPE __yo_thread_list_mutex = __YO_THREAD_SYNC_INIT;"}
9881
9894
  static size_t __yo_gc_min_threshold = 256; // Minimum threshold for adaptive scaling
9882
9895
  static size_t __yo_gc_collect_threshold = 256; // Adaptive: starts at min, grows to 2x live objects after each GC
9883
9896
 
9884
9897
  // Thread cleanup infrastructure
9885
- ${An(e.targetInfo)?`// Windows: Use native TLS API instead of C11 tss_t (better compiler support)
9898
+ ${Fn(e.targetInfo)?`// Windows: Use native TLS API instead of C11 tss_t (better compiler support)
9886
9899
  static DWORD __yo_thread_cleanup_key = TLS_OUT_OF_INDEXES;
9887
9900
  static volatile LONG __yo_thread_cleanup_init_started = 0;
9888
9901
  static volatile LONG __yo_thread_cleanup_init_done = 0;
@@ -9915,7 +9928,7 @@ static void __yo_init_thread_cleanup_key(void) {
9915
9928
  static void __yo_init_thread_gc() {
9916
9929
  if (__yo_current_thread_gc != NULL) return;
9917
9930
 
9918
- ${An(e.targetInfo)?` __yo_init_thread_cleanup_key();
9931
+ ${Fn(e.targetInfo)?` __yo_init_thread_cleanup_key();
9919
9932
  if (__yo_thread_cleanup_key != TLS_OUT_OF_INDEXES) {
9920
9933
  TlsSetValue(__yo_thread_cleanup_key, (void*)1);
9921
9934
  }`:` pthread_once(&__yo_thread_cleanup_once, __yo_init_thread_cleanup_key);
@@ -10217,7 +10230,7 @@ static void __yo_process_cleanup(void) {
10217
10230
  __yo_cleanup_thread_gc();
10218
10231
  }
10219
10232
 
10220
- ${An(e.targetInfo)?` if (__yo_thread_cleanup_key != TLS_OUT_OF_INDEXES) {
10233
+ ${Fn(e.targetInfo)?` if (__yo_thread_cleanup_key != TLS_OUT_OF_INDEXES) {
10221
10234
  TlsFree(__yo_thread_cleanup_key);
10222
10235
  __yo_thread_cleanup_key = TLS_OUT_OF_INDEXES;
10223
10236
  }`:` if (__yo_thread_cleanup_key != (pthread_key_t)(-1)) {
@@ -10225,7 +10238,7 @@ ${An(e.targetInfo)?` if (__yo_thread_cleanup_key != TLS_OUT_OF_INDEXES) {
10225
10238
  }`}
10226
10239
  }
10227
10240
 
10228
- ${An(e.targetInfo)?`static INIT_ONCE __yo_process_cleanup_once = INIT_ONCE_STATIC_INIT;
10241
+ ${Fn(e.targetInfo)?`static INIT_ONCE __yo_process_cleanup_once = INIT_ONCE_STATIC_INIT;
10229
10242
  static BOOL CALLBACK __yo_process_cleanup_init_callback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) {
10230
10243
  (void)InitOnce; (void)Parameter; (void)Context;
10231
10244
  InitializeCriticalSection(&__yo_thread_list_mutex);
@@ -10240,7 +10253,7 @@ static void __yo_init_process_cleanup(void) {
10240
10253
  if (cleanup_initialized) return;
10241
10254
  cleanup_initialized = true;
10242
10255
  atexit(__yo_process_cleanup);
10243
- }`}`)}function oh(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(xe(r)&&r.isReferenceSemantics){if(r.fields.some(s=>Ze(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=ve(s.label),u=s.type;if(xe(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(ze(u)){let c=u;if(!xn(c)){if(!mr(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let f of c.variants||[])if(f.fields&&f.fields.length>0){let p=f.fields.filter(m=>xe(m.type)&&m.type.isReferenceSemantics);if(p.length>0){let m=In(c,f.name,e);t.emitLine(` case ${m}:`);for(let y of p)t.emitLine(` if (obj->${l}.data.${f.name}.${ve(y.label)}) {`),t.emitLine(` visit(obj->${l}.data.${f.name}.${ve(y.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function ah(e){var n;let t=e.emitter;oh(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(xe(i)&&i.isReferenceSemantics){if(i.fields.some(_=>Ze(_.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(_=>{let f=Y(_.type,e),p=ve(_.label);return`${f} ${p}`}).join(", ");t.emitLine(`static ${o}* ${s}(${l}) {`),t.emitLine(` ${o}* obj = (${o}*)__yo_malloc(sizeof(${o}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;");let u=i.trait.fields.find(_=>_.label===F.___dispose[0]&&_.assignedValue&&Ce(_.assignedValue));if(u&&Ce(u.assignedValue)){let _=u.assignedValue,f=((n=e.functions[_.funcId])==null?void 0:n.cName)||_.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`),i.fields.forEach(_=>{let f=ve(_.label);t.emitLine(` obj->${f} = ${f};`)}),di(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function of(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let i=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`static void ${i}(void* closure_ptr);`)}for(let[r,{closureCName:i,captureType:o,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=o.trait.fields.find(_=>_.label===F.___drop[0]);if(!l||!l.assignedValue||!Ce(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`static void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function af(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let i=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`__yo_dyn_${r.dynType.id}`,o=z(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,s=`${(()=>{var _,f;let l=(_=e.types[o.id])==null?void 0:_.cName;if(l)return l;let u=Gn(o);return(u?(f=e.types[u.id])==null?void 0:f.cName:void 0)||`unknown_${o.id}`})()}_${i}`;t.set(s,r)}e.dynImpls=t}var Ds=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this.emitter=new zi}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
10256
+ }`}`)}function ah(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(xe(r)&&r.isReferenceSemantics){if(r.fields.some(s=>Ze(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=ve(s.label),u=s.type;if(xe(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(ze(u)){let c=u;if(!xn(c)){if(!mr(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let f of c.variants||[])if(f.fields&&f.fields.length>0){let p=f.fields.filter(m=>xe(m.type)&&m.type.isReferenceSemantics);if(p.length>0){let m=In(c,f.name,e);t.emitLine(` case ${m}:`);for(let y of p)t.emitLine(` if (obj->${l}.data.${f.name}.${ve(y.label)}) {`),t.emitLine(` visit(obj->${l}.data.${f.name}.${ve(y.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function sh(e){var n;let t=e.emitter;ah(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(xe(i)&&i.isReferenceSemantics){if(i.fields.some(_=>Ze(_.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(_=>{let f=Y(_.type,e),p=ve(_.label);return`${f} ${p}`}).join(", ");t.emitLine(`static ${o}* ${s}(${l}) {`),t.emitLine(` ${o}* obj = (${o}*)__yo_malloc(sizeof(${o}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;");let u=i.trait.fields.find(_=>_.label===F.___dispose[0]&&_.assignedValue&&Ce(_.assignedValue));if(u&&Ce(u.assignedValue)){let _=u.assignedValue,f=((n=e.functions[_.funcId])==null?void 0:n.cName)||_.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`),i.fields.forEach(_=>{let f=ve(_.label);t.emitLine(` obj->${f} = ${f};`)}),di(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function of(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let i=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`static void ${i}(void* closure_ptr);`)}for(let[r,{closureCName:i,captureType:o,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=o.trait.fields.find(_=>_.label===F.___drop[0]);if(!l||!l.assignedValue||!Ce(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`static void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function af(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let i=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`__yo_dyn_${r.dynType.id}`,o=z(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,s=`${(()=>{var _,f;let l=(_=e.types[o.id])==null?void 0:_.cName;if(l)return l;let u=Gn(o);return(u?(f=e.types[u.id])==null?void 0:f.cName:void 0)||`unknown_${o.id}`})()}_${i}`;t.set(s,r)}e.dynImpls=t}var Ds=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this.emitter=new zi}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
10244
10257
  // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${Vo(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:xa(),deferredAsyncBlocks:[],allocator:r.allocator??"mimalloc",isLibrary:r.isLibrary??!1,currentModuleId:r.isLibrary?Vo(t):void 0};if(Pa(n,i),N_(n,i),r.isLibrary&&i.exportedFunctionLabels)for(let[o]of i.exportedFunctionLabels){let a=i.functions[o];a&&this.exportedFunctionNames.add(a.cName)}x_(i),__(i),f_(i),this.emitter.emitDeclarationLine(`
10245
10258
  // Future state enum - shared by all Future types
10246
10259
  typedef enum {
@@ -10253,77 +10266,82 @@ typedef enum {
10253
10266
  static int32_t __yo_argc;
10254
10267
  static uint8_t** __yo_argv;
10255
10268
  static Slice_uint8_t_u42_ __yo_args;
10256
- `),af(i),_u(i),A_(i),E_(i),tf(i),J_(i),M_(i),O_(i),R_(i),D_(i),L_(i),r.isLibrary||ef(i),of(i),C_(i),rf(i),i.needsIntelAsmSyntax&&(this._needsIntelAsmSyntax=!0)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}get needsIntelAsmSyntax(){return this._needsIntelAsmSyntax}};var sf=0;function lf(e){var t,n;return(t=e.$)!=null&&t.variableName?!0:(((n=e.$)==null?void 0:n.value)!==void 0,!1)}function Ms(e,t){var n;if(I(e)){(n=e.$)!=null&&n.variableName&&t.add(e.$.variableName);for(let r of e.args)Ms(r,t);e.func&&Ms(e.func,t)}}function uf(e,t,n){let r=n,i=r.pendingDeferredDrops;if(!(!i||e.size===0)){r.shortCircuitHandledDropVarNames||(r.shortCircuitHandledDropVarNames=new Set);for(let o of i){let a=hr(o);if(a&&e.has(a)){let s=B(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function cf(e,t,n){var l;if(e.args.length===0)return"true";if(e.args.length===1)return B(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(dt(c)){if(c.value===!1)return"false";continue}r.push(u)}if(r.length===0)return"true";if(r.length===1)return B(r[0],t,n);if(!r.slice(1).some(u=>lf(u)))return`(${r.map(c=>B(c,t,n)).join(" && ")})`;let o=`__yo_sc_${sf++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=B(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (${c}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],_=new Set;Ms(c,_),uf(_,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function _f(e,t,n){var l;if(e.args.length===0)return"false";if(e.args.length===1)return B(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(dt(c)){if(c.value===!0)return"true";continue}r.push(u)}if(r.length===0)return"false";if(r.length===1)return B(r[0],t,n);if(!r.slice(1).some(u=>lf(u)))return`(${r.map(c=>B(c,t,n)).join(" || ")})`;let o=`__yo_sc_${sf++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=B(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (!(${c})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],_=new Set;Ms(c,_),uf(_,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function ff(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=B(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!un(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${Y(o,n)}(${i})`}function du(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&un(t.value)&&e.args.length===1}function pf(e,t,n){var c;if(!du(e))return"/* Error: generateArcTypeCall called on non-Arc type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=B(a,t,n),l=Y(i,n),u=Y(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 df(e,t,n){var a,s,l,u;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(s=e.$)==null?void 0:s.type,o=(l=e.$)==null?void 0:l.variableName;if(Xe(i)&&r){let c=n,_=r.map(p=>{var y,g;let m=B(p,t,n);if((y=p.$)!=null&&y.deferredDupExpressions&&p.$.deferredDupExpressions.length>0){Rt(p,t,c);let h=p.$.deferredDupExpressions[0];if(I(h)&&((g=h.$)!=null&&g.variableName))return Ye(h.$.variableName,h.$.env)}return m}).join(", "),f=Y(i,n);if(o&&((u=e.$)!=null&&u.type)){let p=`(${f}){ .data = { ${_} } }`,m=Bt(e.$.type,o,n);return n.emitter.emitLine(`${t}${m} = ${p};`),o}else return`(${f}){ .data = { ${_} } }`}}function mf(e,t,n){var p,m,y;let r=n.emitter,i=e.args[0],o=e.args[1],a=(p=i.$)==null?void 0:p.value;if(!a||!W(a)||!Xe(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!ht(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=Y(s,n),c=B(o,t,n),_=((m=e.$)==null?void 0:m.variableName)||`temp_array_${Date.now()}`,f=`i_${$t(((y=e.$)==null?void 0:y.env.modulePath)??"")}`;return r.emitLine(`${t}${u} ${_};`),r.emitLine(`${t}for (int ${f} = 0; ${f} < ${l.value}; ${f}++) {`),r.emitLine(`${t} ${_}.data[${f}] = ${c};`),r.emitLine(`${t}}`),_}function yf(e,t,n){var l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x;if((l=e.$)!=null&&l.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(I(r)&&T(r,":",2)&&(o=!0,r=r.args[0]),I(r)&&T(r,M.comptime)||I(r)&&T(r,M.given))return"";if((u=r.$)!=null&&u.pathCollection&&((c=r.$)==null?void 0:c.pathCollection.length)>0){let N=r.$.pathCollection[0];if(N&&N.length>=2){let P=N[0];if(typeof P=="string"&&((_=r.$)!=null&&_.env)){let R=_e(r.$.env,P);if(R.length>0&&R[R.length-1].isCompileTimeOnly)return""}}}if(X(r)&&((f=r.$)!=null&&f.env)){let N=r.token.value,P=_e(r.$.env,N);if(P.length>0&&P[P.length-1].isCompileTimeOnly)return""}if(!((p=r.$)!=null&&p.type))return`// Error: No type information for left-hand side ${L(r)}
10257
- `;let a=B(r,t,n),s=!1;if((m=e.$)!=null&&m.variableName){let N=e.$.variableName,P=n;if((P.inAsyncStateMachine||P.inEffectStateMachine)&&a.startsWith("sm->")){let H=(y=P.stateMachineVariables)==null?void 0:y.get(N);if(!H&&P.stateMachineVariables){for(let[,G]of P.stateMachineVariables)if(G.name===N){H=G;break}}if(H&&H.kind!=="outer"){let G=`var_${H.id}`;De(r.$.type)||n.emitter.emitLine(`${t}sm->${G} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let H=Bt(r.$.type,N,n);Xe(r.$.type)?n.emitter.emitLine(`${t}${H} = ${a}; // Save old value for later use`):De(r.$.type)||n.emitter.emitLine(`${t}${H} = ${a}; // Save old value for later use`)}}if(Xe(r.$.type)){let N=B(i,t,n),P=I(i)&&((g=i.$)==null?void 0:g.closureFunctionValue)&&((h=i.$)==null?void 0:h.type)&&Nn(i.$.type),R=n,H=N;if(!P&&((v=i.$)!=null&&v.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if(($=i.$)!=null&&$.variableName&&((E=i.$)!=null&&E.type)){let Q=Ye(i.$.variableName,i.$.env);if(Q!==N.trim()){let K=i.$.convertedRuntimeType||i.$.type,j=Y(K,n);n.emitter.emitLine(`${t}${j} ${Q} = ${N};`)}}Rt(i,t,R);let G=i.$.deferredDupExpressions[0];I(G)&&((C=G.$)!=null&&C.variableName)&&(H=Ye(G.$.variableName,G.$.env))}if(o){let G=Bt(r.$.type,B(r,t,n),n);n.emitter.emitLine(`${t}${G} = ${H};`)}else n.emitter.emitLine(`${t}${a} = ${H};`)}else{let N=B(i,t,n),P=I(i)&&((w=i.$)==null?void 0:w.closureFunctionValue)&&((b=i.$)==null?void 0:b.type)&&Nn(i.$.type),R=n,H=N;if(!P&&((k=i.$)!=null&&k.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((A=i.$)!=null&&A.variableName&&((S=i.$)!=null&&S.type)){let Q=Ye(i.$.variableName,i.$.env);if(Q!==N.trim()){let K=i.$.convertedRuntimeType||i.$.type,j=Y(K,n);n.emitter.emitLine(`${t}${j} ${Q} = ${N};`)}}Rt(i,t,R);let G=i.$.deferredDupExpressions[0];I(G)&&((V=G.$)!=null&&V.variableName)&&(H=Ye(G.$.variableName,G.$.env))}if(!De(r.$.type)){let G=r.$.type,Q=(O=i.$)==null?void 0:O.type,K,j=qt(i.$.env.modulePath,H.trim());j&&n.tempVarAsyncStructNames&&(K=n.tempVarAsyncStructNames.get(H.trim()));let ie=o&&Q&&je(G)&&je(Q),ce;j&&ie?K?ce=`${K}*`:ce=Y(Q,n):ie&&K?ce=`${K}*`:ce=Y(ie?Q:G,n);let ee=(R.inAsyncStateMachine||R.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!ee?ce+" ":""}${a} = ${H};`)}}return s?"":((x=e.$)==null?void 0:x.variableName)??""}function hf(e,t,n){var s,l,u,c,_,f,p,m,y,g,h,v;let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=(s=r.$)==null?void 0:s.type;if(!i||!je(i))return"// Error: await argument must be a Future type";let o=Cn(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(er(e)){let $=B(r,t,n),E=Y(i,n),C=o.isFuture.outputType;z(C)&&(C.resolvedConcreteType?C=C.resolvedConcreteType:(l=e.$)!=null&&l.type&&!z(e.$.type)?C=e.$.type:(u=e.$)!=null&&u.type&&z(e.$.type)&&e.$.type.resolvedConcreteType&&(C=e.$.type.resolvedConcreteType));let w=a.emitter,b=De(C)||z(C)&&De(((c=e.$)==null?void 0:c.type)??C),k=(_=e.$)!=null&&_.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",A=(f=e.$)!=null&&f.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";w.emitLine(`${t}// Synchronous await (io.await outside state machine)`),w.emitLine(`${t}${E} ${k} = ${$};`),w.emitLine(`${t}int ${A} = ${k}->state;`),Ra((p=r.$)==null?void 0:p.type)||(w.emitLine(`${t}if (${A} == 0 && ${k}->__yo_resume_fn) {`),lh(e,k,t,n),w.emitLine(`${t} __yo_incr_rc((void*)${k}); // event loop reference`),w.emitLine(`${t} ${k}->__yo_resume_fn((void*)${k});`),w.emitLine(`${t}}`)),w.emitLine(`${t}{`),w.emitLine(`${t} int __await_state = ${k}->state;`),w.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),w.emitLine(`${t} __yo_async_poll_step();`),w.emitLine(`${t} __await_state = ${k}->state;`),w.emitLine(`${t} }`),w.emitLine(`${t} if (__await_state == -2) {`);let V=Cn(i),O=((m=V==null?void 0:V.isFuture.effects)==null?void 0:m.some(x=>J(x.type)||We(x.type)||x.isEffectRowSpread))??!1;if(O){w.emitLine(`${t} if (${A} == -2) {`),w.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),w.emitLine(`${t} abort();`),w.emitLine(`${t} }`);let x=a.pendingDeferredDrops;if(x){let R=(y=e.$)==null?void 0:y.variableName;a.pendingDeferredDrops=x.filter(H=>hr(H)!==R)}nr(t+" ",a,e),a.pendingDeferredDrops=x;let N=sh(V,a),P=(h=(g=a.currentFunctionType)==null?void 0:g.return)==null?void 0:h.type;if(N)if(w.emitLine(`${t} __yo_effect_escaped = 0;`),P&&!De(P)){let R=Y(P,n);R!=="void"?(w.emitLine(`${t} ${R} _esc_result;`),w.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${R}));`),w.emitLine(`${t} return _esc_result;`)):w.emitLine(`${t} return;`)}else w.emitLine(`${t} return;`);else if(w.emitLine(`${t} __yo_effect_escaped = 1;`),P&&!De(P)){let R=Y(P,n);w.emitLine(`${t} return (${R}){0};`)}else w.emitLine(`${t} return;`)}else w.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),w.emitLine(`${t} abort();`);if(w.emitLine(`${t} }`),w.emitLine(`${t}}`),b)return"";{let x=((v=e.$)==null?void 0:v.variableName)||"__sync_await_result",N=Y(C,n),P=Bt(C,x,n);if(O){if(w.emitLine(`${t}${P};`),w.emitLine(`${t}if (${k}->state == -1) {`),Je(C)){let R=kr(C,n);R?w.emitLine(`${t} ${x} = ${R}(${k}->result);`):w.emitLine(`${t} ${x} = ${k}->result;`)}else w.emitLine(`${t} ${x} = ${k}->result;`);w.emitLine(`${t}} else {`),w.emitLine(`${t} ${x} = (${N}){0};`),w.emitLine(`${t}}`)}else if(Je(C)){let R=kr(C,n);R?w.emitLine(`${t}${P} = ${R}(${k}->result);`):w.emitLine(`${t}${P} = ${k}->result;`)}else w.emitLine(`${t}${P} = ${k}->result;`);return x}}return"// Error: await should only be used inside async blocks"}function vf(e,t,n){var c,_,f;let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=(c=r.$)==null?void 0:c.type;if(!i||!je(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=B(r,t,n),l=(_=e.$)!=null&&_.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((f=e.$)==null?void 0:f.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Tf(e,t,n){var C,w,b,k,A;let i=n.emitter,o=I(e.func)?e.func.args[0]:e.args[0];if(!o)return"// Error: JoinHandle.await requires a self argument";let a=B(o,t,n),s=(C=e.$)==null?void 0:C.type;if(!s||!ze(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=Y(s,n),u=s.variants.find(S=>S.name==="Some"),c=(b=(w=u==null?void 0:u.fields)==null?void 0:w[0])==null?void 0:b.type,_=!c||De(c),f=_?"uint8_t":c?Y(c,n):"uint8_t",p=In(s,"Some",n),m=In(s,"None",n),y=((k=e.$)==null?void 0:k.variableName)||"jh",g=`__jh_future_${y}`,h=`__jh_header_${y}`,v=((A=e.$)==null?void 0:A.variableName)||"__jh_result",$=`__yo_jh_header_${y}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let E=Bt(s,v,n);if(i.emitLine(`${t}${E};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${g} = ${a}.__future;`),i.emitLine(`${t} struct ${$} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${f} 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 ${$}* ${h} = (struct ${$}*)${g};`),i.emitLine(`${t} int __jh_state = ${h}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${h}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),_)i.emitLine(`${t} ${v} = (${l}){ .tag = ${p} };`);else if(c&&Je(c)){let S=kr(c,n);S?i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${S}(${h}->result) } } };`):i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`)}else i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${v} = (${l}){ .tag = ${m} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),v}function sh(e,t){let n=e.isFuture.effects;if(!(n!=null&&n.length))return!1;let r=Ef(n),i=t.currentEvidenceParams;for(let o of r)if(J(o.type)){let a=`${o.label}.${o.label}`;if(!(i!=null&&i.has(a)))return!0}else if(We(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 Ef(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function lh(e,t,n,r){var c,_,f;let i=e.args[0];if(!((c=i==null?void 0:i.$)!=null&&c.type))return;let o=Cn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Ef(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(p=>I(p)&&T(p,M.using));if(u){let p=u.args;for(let m=0;m<a.length&&m<p.length;m++){let y=a[m],g=p[m];if(J(y.type)){let h=B(g,n,r),v=y.label;l.emitLine(`${n} ${t}->__capture.${v} = (void*)${h};`)}else We(y.type)&&gf(y.type,t,n,(f=g.$)==null?void 0:f.value,s,e)}}else for(let p of a)if(J(p.type)){let m=ch(p.label,s,e);m&&l.emitLine(`${n} ${t}->__capture.${p.label} = (void*)${m};`)}else We(p.type)&&gf(p.type,t,n,void 0,s,e)}function gf(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!J(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&&Et(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&Ce(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=uh(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function uh(e,t,n,r){var a,s,l,u;let i=((a=r.$)==null?void 0:a.env)??((s=r.func.$)==null?void 0:s.env);if(!i)return;let o=tr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&Et(f)){let p=f.type.fields.findIndex(m=>m.label===e);if(p>=0){let m=f.fields[p];if(m&&Ce(m)){let y=(u=n.functions[m.funcId])==null?void 0:u.cName;if(y)return y}}}}}function ch(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 $f(e,t,n){var a,s,l,u,c,_,f,p,m,y,g,h,v,$;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!De(i)&&!Ot((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${Y(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,C=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...C,...E??[]];let w=o.consumedVarPendingDrops,b=((c=e.$)==null?void 0:c.consumedVariableDropExpressions)??[];o.consumedVarPendingDrops=[...b,...w??[]];let k=[],A=!De(i)&&!Ot((_=e.$)==null?void 0:_.controlFlow);for(let S=0;S<e.args.length;S++){let V=e.args[S],O=B(V,t+" ",n);k.push(O);let x=S===e.args.length-1;O&&!(x&&A)&&(V.$&&qt(V.$.env.modulePath,O)||n.emitter.emitLine(`${t} ${O};`))}if(A){let S=e.args[e.args.length-1],V=k[k.length-1];if((f=S.$)!=null&&f.deferredDupExpressions&&S.$.deferredDupExpressions.length>0){if((p=S.$)!=null&&p.variableName){let x=S.$.variableName;S.$.variableName=void 0;let N=B(S,t+" ",n);S.$.variableName=x;let P=Y(S.$.type,n),R=Ye(x,S.$.env);R!==N&&n.emitter.emitLine(`${t} ${P} ${R} = ${N};`),V=R}Rt(S,t+" ",n);let O=S.$.deferredDupExpressions[0];I(O)&&((m=O.$)!=null&&m.variableName)&&(V=Ye(O.$.variableName,O.$.env))}n.emitter.emitLine(`${t} ${r} = ${V};`)}if((y=e.$)!=null&&y.deferredDropExpressions)for(let S of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let O=hr(S);if(O&&o.shortCircuitHandledDropVarNames.has(O)){o.shortCircuitHandledDropVarNames.delete(O);continue}}let V=B(S,t+" ",n);V&&n.emitter.emitLine(`${t} ${V};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=w,De(i)||Ot((g=e.$)==null?void 0:g.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,C=((h=e.$)==null?void 0:h.deferredDropExpressions)??[];o.pendingDeferredDrops=[...C,...E??[]];let w=o.consumedVarPendingDrops,b=((v=e.$)==null?void 0:v.consumedVariableDropExpressions)??[];if(o.consumedVarPendingDrops=[...b,...w??[]],e.args.map(A=>B(A,t+" ",n)).forEach(A=>{A&&n.emitter.emitLine(`${t} ${A};`)}),($=e.$)!=null&&$.deferredDropExpressions)for(let A of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let V=hr(A);if(V&&o.shortCircuitHandledDropVarNames.has(V)){o.shortCircuitHandledDropVarNames.delete(V);continue}}let S=B(A,t+" ",n);S&&n.emitter.emitLine(`${t} ${S};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=w,""}}function Cf(e,t,n){var a;let r=e.args[0];if(I(r)&&T(r,M.comptime,1)||I(r)&&T(r,M.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${L(r)}
10258
- `;let i=r.token.value,o=Bt(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function bf(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,m;if(e.$){let y=e.$.variableName,g=e.$.type,h=g&&De(g),v=-1;for(let b=0;b<e.args.length;b++){let k=e.args[b];if(I(k)&&T(k,"=>",2)){let A=k.args[0];if(A&&!(dt((r=A.$)==null?void 0:r.value)&&A.$.value.value===!1)){v=b;break}}}let $=!1;if(v>=0){let b=e.args[v];if(b&&I(b)&&T(b,"=>",2)){let k=b.args[0];k&&dt((i=k.$)==null?void 0:i.value)&&k.$.value.value===!0&&($=!0)}}if(!h&&y&&!$){let b=Y(g,n);n.emitter.emitLine(`${t}${b} ${y};`)}if($&&v>=0){let b=e.args[v];if(b&&I(b)&&T(b,"=>",2)){let k=b.args[1];if(k){let A=B(k,t,n);y&&!h&&(A&&A!==""&&!A.startsWith("goto")&&A!=="continue"&&A!=="break"&&!A.includes("return")?n.emitter.emitLine(`${t}${y} = ${A};`):A&&(A.startsWith("goto")||A==="continue"||A==="break"||A.includes("return"))&&n.emitter.emitLine(`${t}${A};`))}}return h?"":y??""}let E=t,C=0,w=!1;for(let b=0;b<e.args.length;b++){let k=e.args[b];if(I(k)&&T(k,"=>",2)){let A=k.args[0],S=k.args[1];if(A&&S){if(dt((o=A.$)==null?void 0:o.value)&&A.$.value.value===!1)continue;if(w){if(n.emitter.emitLine(`${E}else {`),C++,E+=" ",!(dt((s=A.$)==null?void 0:s.value)&&A.$.value.value===!0)){let P=B(A,E,n);n.emitter.emitLine(`${E}if (${P}) {`)}}else{if(dt((a=A.$)==null?void 0:a.value)&&A.$.value.value===!0)n.emitter.emitLine(`${E}{`);else{let N=B(A,E,n);n.emitter.emitLine(`${E}if (${N}) {`)}w=!0}let V=dt((l=A.$)==null?void 0:l.value)&&A.$.value.value===!0,O=w&&V?E:E+" ";if(I(S)&&T(S,M.begin)){let N=S.args,P=n,R=P.pendingDeferredDrops,H=((u=S.$)==null?void 0:u.deferredDropExpressions)??[];P.pendingDeferredDrops=[...H,...R??[]];let G=P.consumedVarPendingDrops,Q=((c=S.$)==null?void 0:c.consumedVariableDropExpressions)??[];P.consumedVarPendingDrops=[...Q,...G??[]];for(let K=0;K<N.length-1;K++){let j=N[K],ie=B(j,O,n);if(ie&&j.$&&!qt(j.$.env.modulePath,ie)&&n.emitter.emitLine(`${O}${ie};`),Ot((_=j.$)==null?void 0:_.controlFlow))break}if(N.length>0){let K=N[N.length-1];(f=K.$)!=null&&f.deferredDupExpressions&&Rt(K,O,n);let j=B(K,O,n);j&&(j==="continue"||j==="break"||j.startsWith("goto")||I(K)&&T(K,M.return)||j.includes("return")?n.emitter.emitLine(`${O}${j};`):y&&!h&&n.emitter.emitLine(`${O}${y} = ${j};`))}(p=S.$)!=null&&p.deferredDropExpressions&&cn(S,O,n),P.pendingDeferredDrops=R,P.consumedVarPendingDrops=G}else{(m=S.$)!=null&&m.deferredDupExpressions&&Rt(S,O,n);let N=B(S,O,n);N==="continue"||N==="break"||N.startsWith("goto")||I(S)&&T(S,M.return)||N.includes("return")?n.emitter.emitLine(`${O}${N};`):N===""||!N||y&&(h||n.emitter.emitLine(`${O}${y} = ${N};`))}!(w&&V)&&n.emitter.emitLine(`${E}}`)}}}for(let b=0;b<C;b++)E=E.slice(0,-2),n.emitter.emitLine(`${E}}`);return h?"":y??""}return'/* "cond" expression is not evaluated */'}function kf(e,t,n){let r=e.args[0];return B(r,t,n)}function wf(e,t,n){var k,A,S,V,O;let r=e.args[0],i=(k=r.$)==null?void 0:k.type;if(!i||!Ke(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=B(r,t,n),s=(A=e.args[1].$)==null?void 0:A.value;if(!s||!W(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=Y(l,n),c=((S=n.types[l.id])==null?void 0:S.cName)||u,_=`__yo_typeid_${ve(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 f=`${o}.vtable->__yo_type_id == (uintptr_t)&${_}`,p,m=!1,y="",g="";for(let[,x]of n.dynImpls){if(x.dynType.id!==i.id)continue;if((z(x.concreteType)&&x.concreteType.resolvedConcreteType?x.concreteType.resolvedConcreteType:x.concreteType).id===l.id&&cr(x.dataType)){m=!0,y=((V=n.types[x.dataType.id])==null?void 0:V.cName)||`unknown_box_${x.dataType.id}`,g=ve(x.dataType.fields[0].label);break}}if(m){let x=Ht(l);if(!x){let N=l;for(;ui(N)&&N.fields.length===1;)N=N.fields[0].type;x=Ht(N)}x?p=`((${u})__yo_incr_rc((void*)((${y}*)${o}.data)->${g}))`:p=`((${u})((${y}*)${o}.data)->${g})`}else p=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(O=e.$)==null?void 0:O.type;if(!h||!ze(h))throw new Error("downcast codegen: expected Option enum as result type");if(xn(h))return`((${f}) ? ${p} : NULL)`;let $=Y(h,n),E=In(h,"Some",n),C=In(h,"None",n),w=`(${$}){ .tag = ${E}, .data = { .Some = { .value = ${p} } } }`,b=`(${$}){ .tag = ${C} }`;return`((${f}) ? ${w} : ${b})`}function Ff(e,t,n){var h,v,$,E,C,w,b,k,A;if(!((h=e.$)!=null&&h.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=(($=(v=e.$)==null?void 0:v.runtimeArgExprsInOrder)==null?void 0:$[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!Ke(i))return"/* Error: dyn() result type is not DynType */";let o=(E=r.$)==null?void 0:E.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(!Ht(o)&&!cr(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=cr(o)?o.fields[0].type:o,l=z(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=((C=n.types[i.id])==null?void 0:C.cName)||`__yo_dyn_${i.id}`,_=`${(()=>{var x,N;let S=(x=n.types[l.id])==null?void 0:x.cName;if(S)return S;let V=Gn(l);return(V?(N=n.types[V.id])==null?void 0:N.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(_,{dynType:i,concreteType:s,dataType:o,traitValues:a});let f=B(r,t,n);if((w=r.$)!=null&&w.variableName&&f!==r.$.variableName){let S=Bt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${S} = ${f};`),f=r.$.variableName}if((b=r.$)!=null&&b.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Rt(r,t,n);let S=r.$.deferredDupExpressions[0];I(S)&&((k=S.$)!=null&&k.variableName)&&(f=Ye(S.$.variableName,S.$.env))}let p=(A=e.$)==null?void 0:A.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let m=n,y;if(m.inAsyncStateMachine&&m.stateMachineVariables){for(let[,S]of m.stateMachineVariables)if(S.kind==="local"&&S.id===p){y=`sm->${Wn(S.id,"local",m.stateMachineFieldAliases)}`;break}}let g=`__yo_vtable_${_}`;return y?(n.emitter.emitLine(`${t}${y} = (${u}){`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${g}`),n.emitter.emitLine(`${t}};`),y):(n.emitter.emitLine(`${t}${u} ${p} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${g}`),n.emitter.emitLine(`${t}};`),p)}function Lf(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function Af(e,t,n){var a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b;let r=e.args[0],i=e.args[1],o=n;if(I(r)&&T(r,M.comptime,1)||I(r)&&T(r,M.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&X(r)&&X(i)){let k=r.token.value,A=i.token.value,S=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(O=>O.name===k),V=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(O=>O.name===A);if(k===A&&(S||V))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let k=e.$.runtimeDestructurings,A=B(i,t,n),S=(s=i.$)==null?void 0:s.type;return k.forEach(({label:V,type:O,variableName:x})=>{let N=ve(x,O.isExtern==="c"),P=Bt(O,N,n);if(S&&xe(S)&&S.isNewtype&&S.fields.length===1){let G=S.fields[0];if(G&&G.label===V){n.emitter.emitLine(`${t}${P} = ${A}; // Destructuring ${V} (newtype)`);return}}let R=V.match(/^\d+$/)?`_${V}`:ve(V,O.isExtern==="c");if(S&&Qe(S)&&!V.match(/^\d+$/)){let G=S.fields.findIndex(Q=>Q.label===V);R=G>=0?`_${G}`:R}let H=S&&Ht(S)?"->":".";n.emitter.emitLine(`${t}${P} = ${A}${H}${R}; // Destructuring ${V}`)}),""}if(X(r)){let k=r.token.value;if(!((l=r.$)!=null&&l.type))return`// Error: No type information for variable ${k}
10259
- `;if((u=r.$)!=null&&u.env){let V=_e(r.$.env,k);if(V.length>0&&V[V.length-1].isCompileTimeOnly)return""}let A=!1,S;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((c=r.$)!=null&&c.env)){let V=_e(r.$.env,k);if(V.length>0){let O=V[V.length-1],x=O.isOwningTheSameRcValueAs?O.isOwningTheSameRcValueAs.id:O.id;o.stateMachineVariables.has(x)&&(A=!0,S=x)}}if(Xe(r.$.type))if(I(i)&&T(i,M.array)){let V=B(i,t,n);if(A&&S){let O=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${O} = ${V};`)}else if(!De(r.$.type)){let O=Bt(r.$.type,k,n);n.emitter.emitLine(`${t}${O} = ${V};`)}}else{let V;if((_=i.$)!=null&&_.variableName){let O=Ye(i.$.variableName,i.$.env),x=B(i,t,n);if(!A){let N=Bt(i.$.type,O,n);O!==x&&n.emitter.emitLine(`${t}${N} = ${x};`)}V=O}else V=B(i,t,n);if(A&&S){let O=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${O} = ${V};`)}else if(!De(r.$.type)){let O=Bt(r.$.type,k,n);n.emitter.emitLine(`${t}${O} = ${V};`)}}else{let V,O=I(i)&&((f=i.$)==null?void 0:f.closureFunctionValue)&&((p=i.$)==null?void 0:p.type)&&Nn(i.$.type),x=I(i)&&wn(i);if((m=i.$)!=null&&m.variableName){let N=Ye(i.$.variableName,i.$.env),P=Ye(k,r.$.env);if(N===P){if(V=B(i,t,n),!O&&!x&&((y=i.$)!=null&&y.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let R=i.$.deferredDupExpressions[0];I(R)&&((g=R.$)!=null&&g.variableName)&&(V=Ye(R.$.variableName,R.$.env))}}else if(X(i)&&N===Ye(i.token.value,i.$.env)){if(V=B(i,t,n),!O&&!x&&((h=i.$)!=null&&h.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let R=i.$.deferredDupExpressions[0];I(R)&&((v=R.$)!=null&&v.variableName)&&(V=Ye(R.$.variableName,R.$.env))}}else if(X(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&(($=i.$)!=null&&$.env)&&o.currentClosureCaptureFrameLevel!==void 0&&ai(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let R=o.currentClosureType;if(R&&R.isClosure){let H=Object.values(o.types).find(G=>G.type===R);H?V=`((${`${H.cName}_capture`}*)closure_context->data)->${Ye(i.token.value,i.$.env)}`:V=`closure_context->${Ye(i.token.value,i.$.env)}`}else V=`closure_context->${Ye(i.token.value,i.$.env)}`}else{let R=B(i,t,n);if(R.trim()!==N){let H=i.$.convertedRuntimeType||i.$.type,G=Bt(H,N,n);n.emitter.emitLine(`${t}${G} = ${R};`)}if(!O&&!x&&((E=i.$)!=null&&E.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let H=i.$.deferredDupExpressions[0];I(H)&&((C=H.$)!=null&&C.variableName)?V=Ye(H.$.variableName,H.$.env):V=N}else V=N}}else if(V=B(i,t,n),!O&&!x&&((w=i.$)!=null&&w.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let N=i.$.deferredDupExpressions[0];I(N)&&((b=N.$)!=null&&b.variableName)&&(V=Ye(N.$.variableName,N.$.env))}if(Lt(r.$.type)){let N=r.$.type;if(A&&S){let P=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${P} = ${V};`)}else if(!De(N)){let P=Bt(N,k,n);n.emitter.emitLine(`${t}${P} = ${V};`)}}else if(A&&S){let N=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${N} = ${V};`)}else{let N=qt(i.$.env.modulePath,V.trim()),P;if(N&&n.tempVarAsyncStructNames){let R=n.tempVarAsyncStructNames.get(V.trim());R?P=`${R}*`:P=Y(r.$.type,n)}else P=Y(r.$.type,n);De(r.$.type)||n.emitter.emitLine(`${t}${P} ${Ye(k,r.$.env)} = ${V};`)}}return""}}var _h=0;function Ua(e,t,n,r,i=" "){var o,a,s,l,u,c;if(F.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(F.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(F.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(F.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(F.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(F.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(F.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(F.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(F.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(F.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(F.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(F.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(F.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(F.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(F.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(F.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(F.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(F.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(F.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(F.__yo_noop.includes(e))return"";if(F.__yo_return_self.includes(e))return`(*${t[0]})`;if(F.__yo_ms_sleep.includes(e))return An(r.targetInfo)?`Sleep(${t[0]})`:`usleep((${t[0]}) * 1000)`;if(F.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(F.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let _=Y(n.$.type,r),f=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return f&&ze(f)&&!mr(f)?`((${_})((${t[0]}).tag))`:`((${_})(${t[0]}))`}else{if(F.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(F.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(F.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(F.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(F.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(F.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(F.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(F.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(F.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${Y(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(F.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(F.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(F.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(F.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let _=Y(n.$.type,r),f=`__yo_uninit_${_h++}`;return r.emitter.emitLine(`${i}${_} ${f};`),f}else return F.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${Y(n.$.type,r)})(${t[0]}))`:F.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function If(e,t,n){var c,_,f,p;let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=B(r,t,n),o=(c=r.$)==null?void 0:c.type;if(!o||!fn(o))return"// Error: __yo_iso_extract requires an Iso type";let a=Y(o,n),s=(_=e.$)==null?void 0:_.type;if(s&&((f=n.isoTypes)!=null&&f.has(a))){let m=n.isoTypes.get(a);m.optionTypeCName||(m.optionTypeCName=Y(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(p=e.$)==null?void 0:p.variableName;return u&&s?(n.emitter.emitLine(`${t}${Y(s,n)} ${u} = ${l};`),u):l}function Sf(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=B(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!fn(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${Y(o,n)}(${i})`}function mu(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&fn(t.value)&&e.args.length===1}function Nf(e,t,n){var c;if(!mu(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=B(a,t,n),l=Y(i,n),u=Y(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 Ti(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function Ei(e,t,n){var r,i,o,a,s,l,u,c;if(I(e)&&T(e,M.begin)){let _=e.args,f=n,p=f.pendingDeferredDrops,m=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];f.pendingDeferredDrops=[...m,...p??[]];let y=f.consumedVarPendingDrops,g=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];f.consumedVarPendingDrops=[...g,...y??[]];for(let v=0;v<_.length-1;v++){let $=_[v],E=B($,t,n);if(E&&n.emitter.emitLine(`${t}${E};`),Ot((o=$.$)==null?void 0:o.controlFlow))break}let h="";if(_.length>0){let v=_[_.length-1];if((a=v.$)!=null&&a.deferredDupExpressions&&v.$.deferredDupExpressions.length>0){if((s=v.$)!=null&&s.variableName){let E=v.$.variableName;v.$.variableName=void 0;let C=B(v,t,n);v.$.variableName=E;let w=Y(v.$.type,n),b=Ye(E,v.$.env);b!==C&&n.emitter.emitLine(`${t}${w} ${b} = ${C};`)}Rt(v,t,n);let $=v.$.deferredDupExpressions[0];I($)&&((l=$.$)!=null&&l.variableName)?h=Ye($.$.variableName,$.$.env):h=B(v,t,n)}else h=B(v,t,n)}return(u=e.$)!=null&&u.deferredDropExpressions&&cn(e,t,n),f.pendingDeferredDrops=p,f.consumedVarPendingDrops=y,h}else return(c=e.$)!=null&&c.deferredDupExpressions&&Rt(e,t,n),B(e,t,n)}function xf(e,t,n){var y,g,h,v,$,E,C,w,b,k,A,S,V;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&De(i);if(!o&&r){let O=Y(i,n);n.emitter.emitLine(`${t}${O} ${r};`)}let a=B(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return ph(e,t,n,a,s,r,o);let l,u;if(tt(s)?(u=s.childType,l=s.tag):Ht(s)?(u=s,l="ref_semantics"):u=s,!ze(u))return'// Error: "match" expression requires an enum type';if(!((g=n.types[u.id])==null?void 0:g.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let _=xn(u);if(_){let O=e.args.slice(1),x=null,N=null;for(let P of O)if(I(P)&&T(P,"=>",2)){if(!((v=(h=P.args[0])==null?void 0:h.$)!=null&&v.caseExecuted))continue;let R=P.args[0],H=P.args[1];if(R&&H&&I(R)&&T(R,"."))x={caseBody:H};else{let G=R.func;if(G&&I(G)&&T(G,".")){let Q=G.args[0];if(Q&&X(Q)){let K=Q.token.value;N={caseBody:H,variantName:K,casePattern:R}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),N){let P;if(I(N.casePattern)&&N.casePattern.args.length>0){let Q=N.casePattern.args[0];if(Q&&X(Q)){P=ve(Q.token.value);let K=_;n.emitter.emitLine(`${t} ${Y(K,n)} ${P} = ${a};`)}}let R=n;P&&(R.inAsyncStateMachine||R.inEffectStateMachine)&&(R.localShadowedVariables||(R.localShadowedVariables=new Set),R.localShadowedVariables.add(P));let H=Ei(N.caseBody,t+" ",n);P&&R.localShadowedVariables&&R.localShadowedVariables.delete(P);let G=Ti(H);if(!o&&r&&!G){let Q=H||a;n.emitter.emitLine(`${t} ${r} = ${Q};`)}else H&&H!==""&&n.emitter.emitLine(`${t} ${H};`)}if(n.emitter.emitLine(`${t}} else {`),x){let P=Ei(x.caseBody,t+" ",n),R=Ti(P);!o&&r&&!R?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(mr(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let O=n.insideMatch;n.insideMatch=!0;let x=e.args.slice(1);for(let N=0;N<x.length;N++){let P=x[N];if(I(P)&&T(P,"=>",2)){if(!((E=($=P.args[0])==null?void 0:$.$)!=null&&E.caseExecuted))continue;let R=P.args[0],H=P.args[1];if(R&&H&&X(R)&&R.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let G=Ei(H,t+" ",n);!o&&r&&G&&!Ti(G)?n.emitter.emitLine(`${t} ${r} = ${G};`):G&&n.emitter.emitLine(`${t} ${G};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(R&&H&&I(R)&&T(R,".",1)){let G=R.args[0].token.value,Q=In(u,G,n);n.emitter.emitLine(`${t}case ${Q}: {`);let K=Ei(H,t+" ",n);!o&&r&&K&&!Ti(K)?n.emitter.emitLine(`${t} ${r} = ${K};`):K&&n.emitter.emitLine(`${t} ${K};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=O,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let p=n.insideMatch;n.insideMatch=!0;let m=e.args.slice(1);for(let O=0;O<m.length;O++){let x=m[O];if(I(x)&&T(x,"=>",2)){if(!((w=(C=x.args[0])==null?void 0:C.$)!=null&&w.caseExecuted))continue;let N=x.args[0],P=x.args[1];if(N&&P&&X(N)&&N.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let R=Ei(P,t+" ",n);!o&&r&&R&&!Ti(R)?n.emitter.emitLine(`${t} ${r} = ${R};`):R&&n.emitter.emitLine(`${t} ${R};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(N&&P&&I(N)&&N.func.tag==="Atom"&&N.func.token.value==="."&&N.args.length>=1){let R=N.args[0].token.value,H=In(u,R,n);if(n.emitter.emitLine(`${t}case ${H}: {`),N.args.length>1){let Q=u.variants.find(K=>K.name===R);if(Q&&Q.fields){let K=N.args.slice(1);if(K.some(ie=>I(ie)&&T(ie,":",2))){for(let ie of K)if(I(ie)&&T(ie,":",2)){let ce=ie.args[0],ee=ie.args[1];if(!X(ce))continue;let pe=ce.token.value,Z=Q.fields.find(Ee=>Ee.label===pe);if(!Z||De(Z.type))continue;if(X(ee)){let Ee=ee.token.value;if(Ee!=="_"){let Fe=ve(Ee),be=ve(pe),Ue=Y(Z.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Ue} ${Fe} = ${a}${te}data.${R}.${be};`);let le=n;if((le!=null&&le.inAsyncStateMachine||le!=null&&le.inEffectStateMachine)&&le.stateMachineVariables){let fe;if((b=ee.$)!=null&&b.env){let Se=_e(ee.$.env,Ee);Se.length>0&&(fe=Se[Se.length-1].id)}if(fe&&le.stateMachineVariables.has(fe)){let Se=Wn(fe,"local",le.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${Se} = ${Fe};`)}}}}}}else for(let ie=0;ie<K.length&&ie<Q.fields.length;ie++){let ce=K[ie],ee=Q.fields[ie];if(X(ce)&&ee){if(De(ee.type))continue;let pe=ce.token.value;if(pe!=="_"){let Z=ve(pe),Ee=ve(ee.label),Fe=Y(ee.type,n),be=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Fe} ${Z} = ${a}${be}data.${R}.${Ee};`);let Ue=n;if((Ue!=null&&Ue.inAsyncStateMachine||Ue!=null&&Ue.inEffectStateMachine)&&Ue.stateMachineVariables){let te;if((k=ce.$)!=null&&k.env){let le=_e(ce.$.env,pe);le.length>0&&(te=le[le.length-1].id)}te&&Ue.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${Wn(te,"local",Ue.stateMachineFieldAliases)} = ${Z};`)}}}}}}if(I(P)&&T(P,"=>",2)){let Q=P.args[0];n.emitter.emitLine(`${t} ${Y(s,n)} ${ve(Q.token.value)} = ${a};`),P=P.args[1]}let G=Ei(P,t+" ",n);!o&&r&&G&&!Ti(G)?n.emitter.emitLine(`${t} ${r} = ${G};`):G&&n.emitter.emitLine(`${t} ${G};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(N&&P&&I(N)&&I(N.func)&&N.func.func.tag==="Atom"&&N.func.func.token.value==="."&&N.func.args.length===1){let R=N.func.args[0].token.value,H=In(u,R,n),G=N.args;n.emitter.emitLine(`${t}case ${H}: {`);let Q=u.variants.find(j=>j.name===R);if(Q&&Q.fields&&G.length>0)if(G.some(ie=>I(ie)&&T(ie,":",2))){for(let ie of G)if(I(ie)&&T(ie,":",2)){let ce=ie.args[0],ee=ie.args[1];if(!X(ce))continue;let pe=ce.token.value,Z=Q.fields.find(Ee=>Ee.label===pe);if(!Z)continue;if(X(ee)){let Ee=ee.token.value;if(Ee!=="_"){let Fe=ve(Ee);if(De(Z.type))n.emitter.emitLine(`${t} // ${Fe} is unit type (no value)`);else{let be=ve(pe),Ue=Y(Z.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Ue} ${Fe} = ${a}${te}data.${R}.${be};`);let le=n;if((le!=null&&le.inAsyncStateMachine||le!=null&&le.inEffectStateMachine)&&le.stateMachineVariables){let fe;if((A=ee.$)!=null&&A.env){let Se=_e(ee.$.env,Fe);Se.length>0&&(fe=Se[Se.length-1].id)}fe&&le.stateMachineVariables.has(fe)&&n.emitter.emitLine(`${t} sm->${Wn(fe,"local",le.stateMachineFieldAliases)} = ${Fe};`)}}}}}}else for(let ie=0;ie<Math.min(G.length,Q.fields.length);ie++){let ce=G[ie],ee=Q.fields[ie];if(ce.tag==="Atom"&&ee){let pe=ce.token.value;if(pe!=="_"){let Z=ve(pe);if(De(ee.type))n.emitter.emitLine(`${t} // ${Z} is unit type (no value)`);else{let Ee=ve(ee.label),Fe=Y(ee.type,n),be=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Fe} ${Z} = ${a}${be}data.${R}.${Ee};`);let Ue=n;if((Ue!=null&&Ue.inAsyncStateMachine||Ue!=null&&Ue.inEffectStateMachine)&&Ue.stateMachineVariables){let te;if((S=ce.$)!=null&&S.env){let le=_e(ce.$.env,pe);le.length>0&&(te=le[le.length-1].id)}te&&Ue.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${Wn(te,"local",Ue.stateMachineFieldAliases)} = ${Z};`)}}}}}if(I(P)&&T(P,"=>",2)){let j=P.args[0];n.emitter.emitLine(`${t} ${Y(s,n)} ${ve(j.token.value)} = ${a};`),P=P.args[1]}let K=Ei(P,t+" ",n);!o&&r&&K&&!Ti(K)?n.emitter.emitLine(`${t} ${r} = ${K};`):K&&n.emitter.emitLine(`${t} ${K};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=p,n.emitter.emitLine(`${t}}`),(V=e.$)!=null&&V.deferredDropExpressions&&cn(e,t,n),o?"":r??""}function fh(e){return I(e)?T(e,"|",2):!1}function yu(e){if(!fh(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...yu(n),...yu(r)]}function Vf(e){if(e!==void 0){if(ht(e))return String(e.value);if(dt(e))return e.value?"true":"false"}}function ph(e,t,n,r,i,o,a){var u,c,_,f,p;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let m=0;m<l.length;m++){let y=l[m];if(I(y)&&T(y,"=>",2)){if(!((c=(u=y.args[0])==null?void 0:u.$)!=null&&c.caseExecuted))continue;let g=y.args[0],h=y.args[1];if(!g||!h)continue;if(X(g)&&g.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let C=Ei(h,t+" ",n);!a&&o&&C&&!Ti(C)?n.emitter.emitLine(`${t} ${o} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let v=yu(g),$=(_=g.$)==null?void 0:_.primitivePatternValues;if($&&$.length>0)for(let C of $){let w=Vf(C);w!==void 0&&n.emitter.emitLine(`${t}case ${w}:`)}else for(let C of v){let w=(f=C.$)==null?void 0:f.value,b=Vf(w);b!==void 0&&n.emitter.emitLine(`${t}case ${b}:`)}n.emitter.emitLine(`${t}{`);let E=Ei(h,t+" ",n);!a&&o&&E&&!Ti(E)?n.emitter.emitLine(`${t} ${o} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(p=e.$)!=null&&p.deferredDropExpressions&&cn(e,t,n),a?"":o??""}function Df(e,t,n){var r,i;if((r=e.$)!=null&&r.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let o=e.args[0];if(!o||!((i=o.$)!=null&&i.type))return"// Error: open expression has no argument or type";let a=o.$.type,s=o.$.value;if(xe(a)&&s===void 0){let l=B(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let _=Y(c.type,n),f=ve(c.variableName),p=ve(c.label);n.emitter.emitLine(`${t}${_} ${f} = ${l}.${p};`)}}}return""}function Mf(e,t,n){var y,g,h,v,$;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(z(o)){let E=o;E.resolvedConcreteType&&(a=E.resolvedConcreteType.id,s=E.resolvedConcreteType)}else xe(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=Y(s,n),_=B(i,t,n),f=(h=i.$)!=null&&h.variableName?Ye(i.$.variableName,i.$.env):_,p=`_thread_closure_data_${$t(((v=e.$)==null?void 0:v.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${p} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${p} = ${f};`);let m=($=e.$)==null?void 0:$.variableName;return m?(n.emitter.emitLine(`${t}__yo_thread_t ${m} = __yo_thread_spawn(${u}, ${p});`),m):`__yo_thread_spawn(${u}, ${p})`}function Of(e,t,n){var m,y,g,h;let r=(m=e.$)==null?void 0:m.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(y=i.$)==null?void 0:y.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(z(o)){let v=o;v.resolvedConcreteType&&(a=v.resolvedConcreteType.id,s=v.resolvedConcreteType)}else xe(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=Y(s,n),_=B(i,t,n),f=(g=i.$)!=null&&g.variableName?Ye(i.$.variableName,i.$.env):_,p=`_worker_closure_data_${$t(((h=e.$)==null?void 0:h.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${p} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${p} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${p});`),""}function Rf(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${B(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function Pf(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 yr(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&&je(i.type))return;let o=`var_${i.id}`,a=ve(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function Bf(e,t,n){var o,a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt,q,oe,re,ne,me,$e,Re,ft,an,St,wt,Ln,mt,sn,Jt,Gt,en,de,ke,Te,he;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Oe(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&cn(e,t,n),De(e.$.type)?"":Un(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(Ce(r)?r.specializedType??r.type:void 0);if(J(i)){let we=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(we){let Ne=!1;if(I(e.func)&&T(e.func,".",2)){let ge=e.func.args[0],Me=(c=ge==null?void 0:ge.$)==null?void 0:c.type;Me&&Ke(Me)&&(Ne=!0)}let ot=we.map((ge,Me)=>{var Be,at,qe,He,Ie,pt,Le,nt,_t;if((Be=ge.$)!=null&&Be.variableName&&((at=ge.$)!=null&&at.type)){let Ct=n,xt=Ct.currentClosureCaptures&&Ct.currentClosureCaptures.includes(ge.$.variableName)&&X(ge)&&ge.$.env&&Ct.currentClosureCaptureFrameLevel!==void 0&&ai(ge.token.value,ge.$.env,Ct.currentClosureCaptureFrameLevel),At=B(ge,t,n),Dt=!1;if(X(ge)&&ge.$.env&&ge.$.variableName){let Hn=_e(ge.$.env,ge.$.variableName);Hn.length>0&&Hn[Hn.length-1].isCompileTimeOnly&&(Dt=!0)}let mn=(Ct.inAsyncStateMachine||Ct.inEffectStateMachine)&&At.startsWith("sm->"),ur=!1;if(At&&At!==ge.$.variableName&&!xt&&!mn&&!Dt){let Hn=Ye(ge.$.variableName,ge.$.env);if(At!==Hn){let Qn=ge.$.convertedRuntimeType||ge.$.type,li=Bt(Qn,ge.$.variableName,n);n.emitter.emitLine(`${t}${li} = ${At};`),ur=!0,yr(ge.$.variableName,t,n)}}let Ci=ur?ge.$.variableName:At;if((qe=ge.$)!=null&&qe.deferredDupExpressions&&ge.$.deferredDupExpressions.length>0){let Hn=new Set;(He=ge.$)!=null&&He.variableName&&Hn.add(Ye(ge.$.variableName,ge.$.env)),At&&Hn.add(At),X(ge)&&Hn.add(Ye(ge.token.value,ge.$.env));let Qn=ge.$.deferredDupExpressions.find(li=>{var Ui;let bi=Ns(li);return bi?Hn.has(Ye(bi,(Ui=li.$)==null?void 0:Ui.env)):!1});Qn&&(Rt(ge,t,Ct),I(Qn)&&((Ie=Qn.$)!=null&&Ie.variableName)&&(Ci=Ye(Qn.$.variableName,Qn.$.env)))}if(Ne&&Me===0){if(I(e.func)&&T(e.func,".",2)){let Qn=e.func.args[0],li=(pt=Qn==null?void 0:Qn.$)==null?void 0:pt.type,bi=e.func.args[1];if(X(bi)&&Ke(li)){let Ui=bi.token.value;if(li.trait.fields.find(Qs=>Qs.label===Ui))return mn?At:ve(Ci,ge.$.type.isExtern==="c")}}let Hn=(Le=ge.$)==null?void 0:Le.type;return Hn&&tt(Hn)?mn?`${At}->data`:`${ve(Ci,ge.$.type.isExtern==="c")}->data`:mn?`(${At}).data`:`(${ve(Ci,ge.$.type.isExtern==="c")}).data`}else return xt||mn||Dt?At:ve(Ci,ge.$.type.isExtern==="c")}else if(Ne&&Me===0){let Ct=B(ge,t,n);if(I(e.func)&&T(e.func,".",2)){let At=e.func.args[0],Dt=(nt=At==null?void 0:At.$)==null?void 0:nt.type,mn=e.func.args[1];if(X(mn)&&Ke(Dt)){let ur=mn.token.value;if(Dt.trait.fields.find(Hn=>Hn.label===ur))return Ct}}let xt=(_t=ge.$)==null?void 0:_t.type;return xt&&tt(xt)?`(${Ct})->data`:`(${Ct}).data`}else return B(ge,t,n)}),Ve=ot.join(", ");if(i.isExtern==="yo"&&i.externName){let ge=i.externName;return so.includes(ge)?Ua(ge,ot,e,n,t):ge==="__yo_thread_spawn"?Mf(e,t,n):ge==="__yo_worker_spawn"?Of(e,t,n):De(i.return.type)?(n.emitter.emitLine(`${t}${ge}(${Ve});`),(_=e.$)!=null&&_.deferredDropExpressions&&cn(e,t,n),""):`${ge}(${Ve})`}{let ge=n;if((f=ge.currentEvidenceParams)!=null&&f.size){let Me=(p=e.func.token)==null?void 0:p.value,Be;if(Me==="."&&I(e.func)&&T(e.func,".",2)){let at=e.func.args[1];at&&X(at)&&(Me=at.token.value);let qe=e.func.args[0];if(qe&&X(qe))Be=qe.token.value;else if(qe&&I(qe)&&T(qe,".",2)){let He=qe.args[0];He&&X(He)&&(Be=He.token.value)}}if(Me&&Me!=="."){for(let at of ge.currentEvidenceParams.values())if(at.fieldLabel===Me||at.implicitLabel===Me||at.fieldPath[at.fieldPath.length-1]===Me){if(Be&&Be!==at.implicitLabel)continue;return zf(at.cParamName,i,ot,we,e,t,ge,at)}}}}if(Ce(r)){let ge=Wo(r);if(ge)return Ua(ge,ot,e,n,t);let Me=r.specializedType??r.type,Be=n;if(Be.currentEvidenceParams&&r.isModuleEffectMember){let qe,He=((m=e.func.$)==null?void 0:m.env)??((y=e.$)==null?void 0:y.env);if(He)for(let Ie of Be.currentEvidenceParams.values()){let pt=_e(He,Ie.implicitLabel),Le=pt[pt.length-1],nt=(g=Le==null?void 0:Le.value)==null?void 0:g[0];if(nt&&Et(nt)){let _t=nt,Ct=!0;for(let xt=0;xt<Ie.fieldPath.length-1;xt++){let At=Ie.fieldPath[xt],Dt=_t.type.fields.findIndex(mn=>mn.label===At);if(Dt>=0&&_t.fields[Dt]&&Et(_t.fields[Dt]))_t=_t.fields[Dt];else{Ct=!1;break}}if(Ct){let xt=Ie.fieldPath[Ie.fieldPath.length-1],At=_t.type.fields.findIndex(Dt=>Dt.label===xt);if(At>=0){let Dt=_t.fields[At];if(Dt&&Ce(Dt)&&Dt.funcId===r.funcId){qe=Ie;break}}}}}if(qe){let Ie=qe.cParamName;return zf(Ie,Me,ot,we,e,t,Be,qe)}}let at=(h=n.functions[r.funcId])==null?void 0:h.cName;if(at){let qe=r.specializedType??r.type,He=dn(qe);if(He.length===0&&r.specializedType){let Le=dn(r.type);Le.length>0&&Le.some(nt=>nt.fieldFunctionType.forallParameters&&nt.fieldFunctionType.forallParameters.length>0)&&(He=Le)}if(He.length>0){let{args:Le,isHandlerInstallation:nt}=gu(He,r,e,n);if(Le.length>0){let _t=Ve?`${Ve}, ${Le.join(", ")}`:Le.join(", ");return hu(at,_t,Me,e,we,t,n,nt)}}let Ie=r.isControlFunction||r.isModuleEffectMember||((E=($=(v=r.body)==null?void 0:v.$)==null?void 0:$.effectAnalysis)==null?void 0:E.hasEffects),pt=!1;if(Ie){if(r.isControlFunction||r.isModuleEffectMember){let Le=((w=(C=e.func)==null?void 0:C.$)==null?void 0:w.env)??((b=e.$)==null?void 0:b.env);if(Le){let nt=Na(Le,_t=>{var Ct;return _t.isImplicit===!0&&Ce((Ct=_t.value)==null?void 0:Ct[0])&&_t.value[0].funcId===r.funcId});nt>=0&&nt>Le.functionDeclarationFrameLevel&&((k=Le.frames[nt])!=null&&k.isBeginBlockFrame)&&(pt=!0)}}else if(r.specializedType){let Le=dn(r.type);if(Le.length>0){let nt=((S=(A=e.func)==null?void 0:A.$)==null?void 0:S.env)??((V=e.$)==null?void 0:V.env);if(nt)for(let _t of Le){let Ct=Na(nt,xt=>xt.isImplicit===!0&&(xt.name===_t.implicitLabel||xt.name===_t.fieldLabel));if(Ct>=0&&Ct>nt.functionDeclarationFrameLevel&&((O=nt.frames[Ct])!=null&&O.isBeginBlockFrame)){pt=!0;break}}}}}if(De(Me.return.type))return n.emitter.emitLine(`${t}${at}(${Ve});`),(x=e.$)!=null&&x.deferredDropExpressions&&cn(e,t,n),Ie&&Uf(t,n,pt,e),"";{let Le=(N=e.$)==null?void 0:N.variableName;if(Le){let nt=((P=r.specializedType)==null?void 0:P.return.type)??Me.return.type,_t=(R=e.$)==null?void 0:R.type,Ct=_t&&je(_t),xt=nt&&je(nt),At;if(Ct&&xt){let Dt=r.body;if(Dt&&T(Dt,"begin")){let mn=Dt.args;if(mn.length>0){let ur=mn[mn.length-1];wn(ur)&&(Dt=ur)}}if(Dt&&wn(Dt)&&((H=Dt.$)!=null&&H.asyncStateMachineStructName)){let mn=Dt.$.asyncStateMachineStructName;At=`${mn}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(Le,mn)}else _t&&z(_t)&&_t.resolvedConcreteType?At=Y(_t,n):At=Y(nt,n)}else At=Y(nt??_t,n);return n.emitter.emitLine(`${t}${At} ${Le} = ${at}(${Ve});`),yr(Le,t,n),(G=e.$)!=null&&G.deferredDropExpressions&&cn(e,t,n),Ie&&Uf(t,n,pt,e),Le}else return`// Error: Regular function call returns ${Y(((Q=r.specializedType)==null?void 0:Q.return.type)??Me.return.type,n)} but no temp variable assigned`}}}else{let ge=n.externFunctions[i.id];if(ge){let Me=ge.cName;return(K=e.$)!=null&&K.deferredDropExpressions&&cn(e,t,n),`${Me}(${Ve})`}else{let Me=B(e.func,t,n);if(r&&J(r.type)){let Le=dn(r.type);if(Le.length>0){let{args:nt,isHandlerInstallation:_t}=gu(Le,r,e,n);if(nt.length>0){let Ct=Ve?`${Ve}, ${nt.join(", ")}`:nt.join(", ");return hu(Me,Ct,i,e,we,t,n,_t)}}}let Be=((j=e.$)==null?void 0:j.type)??i.return.type,at=Y(Be,n),qe=i.parameters.filter(Le=>!Le.isCompileTimeOnly).map(Le=>Y(Le.type,n)),He=`((${at} (*)(${qe.join(", ")}))${Me})`,Ie=n,pt=Me.includes("__capture.")&&!!Ie.inAsyncStateMachine;if(pt&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),De(i.return.type)||De(Be)){if(n.emitter.emitLine(`${t}${He}(${Ve});`),(ie=e.$)!=null&&ie.deferredDropExpressions&&cn(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),we){for(let Le of we)if((ce=Le.$)!=null&&ce.variableName&&((ee=Le.$)!=null&&ee.type)&&Je(Le.$.type)){let nt=Pf(ve(Le.$.variableName),n),_t=hi(nt,Le.$.type,n);_t&&(n.emitter.emitLine(`${t} ${_t};`),n.emitter.emitLine(`${t} memset(&${nt}, 0, sizeof(${nt}));`))}}br({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let Le=(pe=e.$)==null?void 0:pe.variableName;if(Le){let nt=i.return.type,_t=(Z=e.$)==null?void 0:Z.type,Ct=_t&&nt&&je(_t)&&je(nt)?nt:_t??nt;if(n.emitter.emitLine(`${t}${Y(Ct,n)} ${Le} = ${He}(${Ve});`),yr(Le,t,n),(Ee=e.$)!=null&&Ee.deferredDropExpressions&&cn(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),we){for(let xt of we)if((Fe=xt.$)!=null&&Fe.variableName&&((be=xt.$)!=null&&be.type)&&Je(xt.$.type)){let At=Pf(ve(xt.$.variableName),n),Dt=hi(At,xt.$.type,n);Dt&&(n.emitter.emitLine(`${t} ${Dt};`),n.emitter.emitLine(`${t} memset(&${At}, 0, sizeof(${At}));`))}}br({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return Le}else return`// Error: Function parameter call returns ${Y(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&Nn(i)){let we=i,Ne=Gn(we),ot=Ke(we);{let Ve=Ne.isFn.callType,ge=(Ue=e.$)==null?void 0:Ue.runtimeArgExprsInOrder;if(ge){let Me=n;for(let Ie of ge)if((te=Ie.$)!=null&&te.variableName&&((le=Ie.$)!=null&&le.type)){let pt=Me.currentClosureCaptures&&Me.currentClosureCaptures.includes(Ie.$.variableName)&&X(Ie)&&Ie.$.env&&Me.currentClosureCaptureFrameLevel!==void 0&&ai(Ie.token.value,Ie.$.env,Me.currentClosureCaptureFrameLevel),Le=B(Ie,t,n),nt=!1;if(X(Ie)&&Ie.$.env&&Ie.$.variableName){let Ct=_e(Ie.$.env,Ie.$.variableName);Ct.length>0&&Ct[Ct.length-1].isCompileTimeOnly&&(nt=!0)}let _t=(Me.inAsyncStateMachine||Me.inEffectStateMachine)&&Le.startsWith("sm->");if(Le&&Le!==Ie.$.variableName&&!pt&&!_t&&!nt){let Ct=Ie.$.convertedRuntimeType||Ie.$.type,xt=Bt(Ct,Ie.$.variableName,n);n.emitter.emitLine(`${t}${xt} = ${Le};`),yr(Ie.$.variableName,t,n)}}let Be=B(e.func,t,n),at=ge.map(Ie=>{var pt,Le,nt,_t;if((pt=Ie.$)!=null&&pt.variableName&&((Le=Ie.$)!=null&&Le.type)){if(Me.currentClosureCaptures&&Me.currentClosureCaptures.includes(Ie.$.variableName)&&X(Ie)&&Ie.$.env&&Me.currentClosureCaptureFrameLevel!==void 0&&ai(Ie.token.value,Ie.$.env,Me.currentClosureCaptureFrameLevel))return B(Ie,t,n);{let xt=Ye(Ie.$.variableName,Ie.$.env),At=(Me.inAsyncStateMachine||Me.inEffectStateMachine)&&xt.startsWith("sm->"),Dt=xt;if((nt=Ie.$)!=null&&nt.deferredDupExpressions&&Ie.$.deferredDupExpressions.length>0){Rt(Ie,t,Me);let mn=Ie.$.deferredDupExpressions[0];I(mn)&&((_t=mn.$)!=null&&_t.variableName)&&(Dt=Ye(mn.$.variableName,mn.$.env))}return At?xt:Dt}}else return B(Ie,t,n)}),qe;if(ot){let Ie=[`(${Be}).data`,...at];qe=`(${Be}).vtable->call(${Ie.join(", ")})`}else{let Ie;if(z(we)){let Le=we;Le.resolvedConcreteType&&(Ie=Le.resolvedConcreteType.id)}let pt=Ie?n.implClosureCallMap.get(Ie):void 0;if(pt){let Le=dn(Ve);if(Le.length>0){let{args:_t,isHandlerInstallation:Ct}=gu(Le,{},e,Me);if(_t.length>0){let xt=[`&(${Be})`,...at,..._t];return hu(pt.functionCName,xt.join(", "),Ve,e,ge,t,Me,Ct)}}let nt=[`&(${Be})`,...at];qe=`${pt.functionCName}(${nt.join(", ")})`}else{let Le=[`(${Be}).data`,...at];qe=`(${Be}).call(${Le.join(", ")})`}}let He=Ve.return.type;if(De(He))return n.emitter.emitLine(`${t}${qe};`),(fe=e.$)!=null&&fe.deferredDropExpressions&&cn(e,t,n),"";{let Ie=(Se=e.$)==null?void 0:Se.variableName;return Ie?(n.emitter.emitLine(`${t}${Y(He,n)} ${Ie} = ${qe};`),yr(Ie,t,n),(it=e.$)!=null&&it.deferredDropExpressions&&cn(e,t,n),Ie):`// Error: Closure call returns ${Y(He,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(W(r))if(xe(r.value)){let we=r.value,Ne=(ct=e.$)==null?void 0:ct.runtimeArgExprsInOrder,ot=(Ft=n.types[we.id])==null?void 0:Ft.cName,Ve=we.fields.map(Me=>Me.label),ge=(Zt=e.$)==null?void 0:Zt.variableName;if(Ne&&ot&&Ve.length===Ne.length){if(we.isNewtype&&we.fields.length===1){let Me=Ne[0],Be=B(Me,t,n),at=Be;if((q=Me.$)!=null&&q.deferredDupExpressions&&Me.$.deferredDupExpressions.length>0){let He=n;if((oe=Me.$)!=null&&oe.variableName&&((re=Me.$)!=null&&re.type)){let pt=Ye(Me.$.variableName,Me.$.env);if(Be!==pt){let Le=Me.$.type,nt=Y(Le,n);n.emitter.emitLine(`${t}${nt} ${pt} = ${Be};`)}}Rt(Me,t,He);let Ie=Me.$.deferredDupExpressions[0];I(Ie)&&((ne=Ie.$)!=null&&ne.variableName)&&(at=Ye(Ie.$.variableName,Ie.$.env))}let qe=`((${ot})(${at}))`;if(ge&&((me=e.$)!=null&&me.type)){let He=Bt(e.$.type,ge,n);return n.emitter.emitLine(`${t}${He} = ${qe};`),yr(ge,t,n),ge}else return qe}if(we.isReferenceSemantics){let Me=n,Be=Ne.map(He=>{var pt,Le,nt,_t;let Ie=B(He,t,n);if((pt=He.$)!=null&&pt.deferredDupExpressions&&He.$.deferredDupExpressions.length>0){if((Le=He.$)!=null&&Le.variableName&&((nt=He.$)!=null&&nt.type)){let xt=Ye(He.$.variableName,He.$.env);if(Ie!==xt){let At=He.$.type,Dt=Y(At,n);n.emitter.emitLine(`${t}${Dt} ${xt} = ${Ie};`)}}Rt(He,t,Me);let Ct=He.$.deferredDupExpressions[0];if(I(Ct)&&((_t=Ct.$)!=null&&_t.variableName))return Ye(Ct.$.variableName,Ct.$.env)}return Ie}).join(", "),qe=`${`__yo_new_${ot}`}(${Be})`;if(ge&&(($e=e.$)!=null&&$e.type)){let He=Bt(e.$.type,ge,n);return n.emitter.emitLine(`${t}${He} = ${qe};`),yr(ge,t,n),ge}else return qe}else{let Me=n,Be=Ne.map((qe,He)=>{var nt,_t,Ct,xt;let Ie=B(qe,t,n),pt=Qe(we)?`_${He}`:ve(Ve[He],we.isExtern==="c"),Le=Ie;if((nt=qe.$)!=null&&nt.deferredDupExpressions&&qe.$.deferredDupExpressions.length>0){if((_t=qe.$)!=null&&_t.variableName&&((Ct=qe.$)!=null&&Ct.type)){let Dt=Ye(qe.$.variableName,qe.$.env),mn=qe.$.type,ur=Y(mn,n);Ie!==Dt&&n.emitter.emitLine(`${t}${ur} ${Dt} = ${Ie};`)}Rt(qe,t,Me);let At=qe.$.deferredDupExpressions[0];I(At)&&((xt=At.$)!=null&&xt.variableName)&&(Le=Ye(At.$.variableName,At.$.env))}return`.${pt} = `+Le}).join(", "),at=`(${ot}){ ${Be} }`;if(ge&&((Re=e.$)!=null&&Re.type)){let qe=Bt(e.$.type,ge,n);return n.emitter.emitLine(`${t}${qe} = ${at};`),yr(ge,t,n),ge}else return at}}}else{if(Nn(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Pt(r.value)){let we=(ft=e.$)==null?void 0:ft.variableName,Ne=e.args[0];if(Ne&&I(Ne)&&T(Ne,":",2)){let ot=Ne.args[0],Ve=Ne.args[1],ge=(an=n.types[r.value.id])==null?void 0:an.cName;if(ge&&X(ot)&&Ve){let Me=n,Be=ot.token.value,at=Ye(Be,(St=ot.$)==null?void 0:St.env),He=B(Ve,t,n);if((wt=Ve.$)!=null&&wt.deferredDupExpressions&&Ve.$.deferredDupExpressions.length>0){Rt(Ve,t,Me);let pt=Ve.$.deferredDupExpressions[0];I(pt)&&((Ln=pt.$)!=null&&Ln.variableName)&&(He=Ye(pt.$.variableName,pt.$.env))}let Ie=`(${ge}){ .${at} = ${He} }`;if(we&&((mt=e.$)!=null&&mt.type)){let pt=Bt(e.$.type,we,n);return n.emitter.emitLine(`${t}${pt} = ${Ie};`),yr(we,t,n),we}else return Ie}}}else if(ze(r.value)){let we=r.value,Ne=(sn=e.$)==null?void 0:sn.runtimeArgExprsInOrder,ot=(Jt=n.types[we.id])==null?void 0:Jt.cName,Ve=(Gt=e.$)==null?void 0:Gt.variableName;if(we.selectedVariantName&&Ne&&ot){if(xn(we)){let qe=we.selectedVariantName,He=we.variants.find(Ie=>Ie.name===qe);if(He){if(!He.fields||He.fields.length===0){let Ie="NULL";if(Ve&&((en=e.$)!=null&&en.type)){let pt=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${pt} = ${Ie};`),yr(Ve,t,n),Ve}else return Ie}else if(He.fields.length===1){let Ie=B(Ne[0],t,n);if(Ve&&((de=e.$)!=null&&de.type)){let pt=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${pt} = ${Ie};`),yr(Ve,t,n),Ve}else return Ie}}}if(mr(we)){let qe=we.selectedVariantName,He=In(we,qe,n);if(Ve&&((ke=e.$)!=null&&ke.type)){let Ie=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${Ie} = ${He};`),yr(Ve,t,n),Ve}else return He}let Be=we.selectedVariantName,at=we.variants.find(qe=>qe.name===Be);if(at){let qe=((Te=at.fields)==null?void 0:Te.filter(Le=>!De(Le.type)))||[],He=n,Ie=Ne.map((Le,nt)=>{var _t,Ct,xt,At,Dt;if(at.fields){let mn=at.fields[nt];if(mn&&!De(mn.type)){let ur=B(Le,t,n),Ci=Ye(mn.label,(_t=Le.$)==null?void 0:_t.env),Hn=ur;if((Ct=Le.$)!=null&&Ct.variableName&&((xt=Le.$)!=null&&xt.type)){let Qn=He.currentClosureCaptures&&He.currentClosureCaptures.includes(Le.$.variableName)&&X(Le)&&Le.$.env&&He.currentClosureCaptureFrameLevel!==void 0&&ai(Le.token.value,Le.$.env,He.currentClosureCaptureFrameLevel),li=(He.inAsyncStateMachine||He.inEffectStateMachine)&&ur.startsWith("sm->"),bi=!1;if(X(Le)&&Le.$.env&&Le.$.variableName){let mo=_e(Le.$.env,Le.$.variableName);mo.length>0&&mo[mo.length-1].isCompileTimeOnly&&(bi=!0)}let Ui=!1;if(ur&&ur!==Le.$.variableName&&!Qn&&!li&&!bi){let mo=Ye(Le.$.variableName,Le.$.env);if(ur!==mo){let Qs=Bt(Le.$.type,Le.$.variableName,n);n.emitter.emitLine(`${t}${Qs} = ${ur};`),Ui=!0,yr(Le.$.variableName,t,n)}}Ui&&(Hn=Ye(Le.$.variableName,Le.$.env))}if((At=Le.$)!=null&&At.deferredDupExpressions&&Le.$.deferredDupExpressions.length>0){Rt(Le,t,He);let Qn=Le.$.deferredDupExpressions[0];I(Qn)&&((Dt=Qn.$)!=null&&Dt.variableName)&&(Hn=Ye(Qn.$.variableName,Qn.$.env))}return`.${Ci} = `+Hn}return""}else return""}).filter(Le=>Le).join(", "),pt=qe.length>0?`(${ot}){ .tag = ${In(we,Be,n)}, .data = { .${Be} = { ${Ie} } } }`:`(${ot}){ .tag = ${In(we,Be,n)} }`;if(Ve&&((he=e.$)!=null&&he.type)){let Le=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${Le} = ${pt};`),yr(Ve,t,n),Ve}else return pt}}}}else if(Xe(i)){let we=e.args[0];if(we&&I(we)&&T(we,":")){let Ve=B(e.func,t,n),ge=B(we.args[0],t,n),Me=B(we.args[1],t,n),Be=`Slice_${ve(Y(i.childType,n))}`;return n.sliceStructTypes.has(Be)||n.sliceStructTypes.set(Be,{childType:Y(i.childType,n)}),`(${Be}){ .data = &${Ve}.data[${ge}], .length = (${Me}) - (${ge}) }`}else if(we&&X(we)&&we.token.value===":"){let Ve=B(e.func,t,n),ge=i,Me=ge.childType,Be=`Slice_${ve(Y(Me,n))}`;return n.sliceStructTypes.has(Be)||n.sliceStructTypes.set(Be,{childType:Y(Me,n)}),ht(ge.length)?`(${Be}){ .data = &${Ve}.data[0], .length = ${ge.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let Ne=B(e.func,t,n),ot=B(we,t,n);return`${Ne}.data[${ot}]`}else if(Lt(i)){let we=e.args[0];if(we&&I(we)&&T(we,":")){let Ve=B(e.func,t,n),ge=B(we.args[0],t,n),Me=B(we.args[1],t,n),Be=`Slice_${ve(Y(i.childType,n))}`;return n.sliceStructTypes.has(Be)||n.sliceStructTypes.set(Be,{childType:Y(i.childType,n)}),`(${Be}){ .data = &${Ve}.data[${ge}], .length = (${Me}) - (${ge}) }`}else if(we&&X(we)&&we.token.value===":"){let Ve=B(e.func,t,n),ge=`Slice_${ve(Y(i.childType,n))}`;return n.sliceStructTypes.has(ge)||n.sliceStructTypes.set(ge,{childType:Y(i.childType,n)}),`(${ge}){ .data = ${Ve}.data, .length = ${Ve}.length }`}let Ne=B(e.func,t,n),ot=B(we,t,n);return`${Ne}.data[${ot}]`}else if(i&&tt(i)&&Lt(i.childType)){let we=B(e.func,t,n),Ne=B(e.args[0],t,n);return`${we}.data[${Ne}]`}}function Uf(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(nr(e+" ",t,r,!1,!0,!1),Wr(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),br({emitter:i,indent:e+" ",resultCode:void 0,debugLabel:void 0});else if(n){i.emitLine(`${e} __yo_effect_escaped = 0;`);let s=(o=t.currentFunctionType)==null?void 0:o.return.type;if(s&&!De(s)){let l=Y(s,t);l!=="void"?(i.emitLine(`${e} ${l} _esc_result;`),i.emitLine(`${e} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${l}));`),i.emitLine(`${e} return _esc_result;`)):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}else{let s=(a=t.currentFunctionType)==null?void 0:a.return.type;if(s&&!De(s)){let l=Y(s,t);l!=="void"?i.emitLine(`${e} return (${l}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function zf(e,t,n,r,i,o,a,s){var f,p,m,y,g,h,v,$,E,C,w,b;let l=n.join(", "),u=t.return.type,c=a.emitter,_;if(s!=null&&s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let k=(f=i.$)!=null&&f.type?Y(i.$.type,a):Y(u,a),A=[],V=s.fieldFunctionType.parameters.filter(x=>!x.isCompileTimeOnly);for(let x=0;x<V.length;x++){let N=V[x].type,P=z(N)&&((m=(p=r==null?void 0:r[x])==null?void 0:p.$)!=null&&m.type)?r[x].$.type:N,R=J(P)?oi(P,"(*)",a):Y(P,a);A.push(R)}let O=A.join(", ");_=`((${k} (*)(${O}))${e})`}else _=e;if(De(u)){if(c.emitLine(`${o}${_}(${l});`),(y=i.$)!=null&&y.deferredDropExpressions&&cn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,i,!1,!0,!1),Wr(o+" ",a,i)),a.inAsyncStateMachine)br({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let k=(g=a.currentFunctionType)==null?void 0:g.return.type;if(k&&!De(k)){let A=Y(k,a);A!=="void"?c.emitLine(`${o} return (${A}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let k=(h=i.$)==null?void 0:h.variableName;if(k){let A=(v=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&v.length&&(($=i.$)!=null&&$.type)?i.$.type:u,S=Y(A,a);if(S==="void"||De(A)){if(c.emitLine(`${o}${_}(${l});`),(E=i.$)!=null&&E.deferredDropExpressions&&cn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,i,!1,!0,!1),Wr(o+" ",a,i)),a.inAsyncStateMachine)br({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let V=(C=a.currentFunctionType)==null?void 0:C.return.type;if(V&&!De(V)){let O=Y(V,a);O!=="void"?c.emitLine(`${o} return (${O}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(c.emitLine(`${o}${S} ${k} = ${_}(${l});`),(w=i.$)!=null&&w.deferredDropExpressions&&cn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,i,!1,!0,!1),Wr(o+" ",a,i)),a.inAsyncStateMachine)br({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let V=(b=a.currentFunctionType)==null?void 0:b.return.type;if(V&&!De(V)){let O=Y(V,a);O!=="void"?c.emitLine(`${o} return (${O}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),k}else return`${_}(${l})`}}function gu(e,t,n,r){var s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let k of e){let A=`${k.implicitLabel}.${k.fieldLabel}`,S=!1;if(r.currentEvidenceParams){let V=r.currentEvidenceParams.get(A);V&&(i.push(V.cParamName),S=!0)}if(!S){if(o){if(o.effectHandlerInfos)for(let V of o.effectHandlerInfos){if(V.effectParameterName!==k.fieldLabel&&V.effectParameterName!==k.implicitLabel)continue;let O=V.handlerValue;if(O&&Ce(O)){if((u=O.specializedFunctionCaches)!=null&&u.length){let N=O.specializedFunctionCaches[0].specializedFunction,P=(c=r.functions[N.funcId])==null?void 0:c.cName;if(P){i.push(`(void*)${P}`),S=!0,a=!0;break}}let x=(_=r.functions[O.funcId])==null?void 0:_.cName;if(x){i.push(x),S=!0,a=!0;break}}}if(!S&&o.handlerValue&&e.length===1){let V=o.handlerValue;if(V&&Ce(V)){if((f=V.specializedFunctionCaches)!=null&&f.length){let O=V.specializedFunctionCaches[0].specializedFunction,x=(p=r.functions[O.funcId])==null?void 0:p.cName;x&&(i.push(`(void*)${x}`),S=!0,a=!0)}if(!S){let O=(m=r.functions[V.funcId])==null?void 0:m.cName;O&&(i.push(O),S=!0,a=!0)}}}}if(!S){let V=((y=n.func.$)==null?void 0:y.env)??((g=n.$)==null?void 0:g.env);if(V){let O=_e(V,k.implicitLabel),x=tr(V,G=>G.isImplicit===!0&&J(G.type)&&J(k.fieldFunctionType)&&G.type===k.fieldFunctionType),N=O[O.length-1],P=x[x.length-1],R=P&&P!==N?P:N??P,H=(h=R==null?void 0:R.value)==null?void 0:h[0];if(H&&Et(H)){let G=H,Q=!0;for(let K=0;K<k.fieldPath.length-1;K++){let j=k.fieldPath[K],ie=G.type.fields.findIndex(ce=>ce.label===j);if(ie>=0&&G.fields[ie]&&Et(G.fields[ie]))G=G.fields[ie];else{Q=!1;break}}if(Q){let K=k.fieldPath[k.fieldPath.length-1],j=G.type.fields.findIndex(ie=>ie.label===K);if(j>=0){let ie=G.fields[j];if(ie&&Ce(ie)){if(((v=ie.specializedFunctionCaches)==null?void 0:v.length)>0){let ce=ie.specializedFunctionCaches[0].specializedFunction,ee=($=r.functions[ce.funcId])==null?void 0:$.cName;ee&&(i.push(`(void*)${ee}`),S=!0)}if(!S){let ce=(E=r.functions[ie.funcId])==null?void 0:E.cName;ce&&(i.push(ce),S=!0)}}}}}else if(H&&Ce(H)){if((C=H.specializedFunctionCaches)!=null&&C.length){let G=H.specializedFunctionCaches[0].specializedFunction,Q=(w=r.functions[G.funcId])==null?void 0:w.cName;Q&&(i.push(`(void*)${Q}`),S=!0)}if(!S){let G=(b=r.functions[H.funcId])==null?void 0:b.cName;G&&(i.push(G),S=!0)}}S&&(a=!0)}}if(!S&&r.stateMachineVariables){let V=k.fieldPath[k.fieldPath.length-1];for(let[,O]of r.stateMachineVariables)if(O.name===V&&O.kind==="outer"){i.push(`sm->__capture.${V}`),S=!0;break}}if(!S)break}}return{args:i,isHandlerInstallation:a}}function hu(e,t,n,r,i,o,a,s=!1){var c,_,f,p,m;let l=a.emitter,u=n.return.type;if(l.emitLine(`${o}__yo_effect_escaped = 0;`),De(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&cn(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,r,!1,!0,!1),Wr(o+" ",a,r)),a.inAsyncStateMachine)br({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let y=(_=a.currentFunctionType)==null?void 0:_.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),y&&!De(y))if(s){let g=Y(y,a);g!=="void"?(l.emitLine(`${o} ${g} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${g}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let g=Y(y,a);g!=="void"?l.emitLine(`${o} return (${g}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let y=(f=r.$)==null?void 0:f.variableName;if(y){let g=Y(u,a);if(l.emitLine(`${o}${g} ${y} = ${e}(${t});`),yr(y,o,a),(p=r.$)!=null&&p.deferredDropExpressions&&cn(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,r,!1,!0,!1),Wr(o+" ",a,r)),a.inAsyncStateMachine)br({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let h=(m=a.currentFunctionType)==null?void 0:m.return.type;if(s&&h&&!De(h)){let v=Y(h,a);l.emitLine(`${o} ${v} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${v}));`),l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return _esc_result;`)}else if(h&&!De(h)){let v=Y(h,a);v!=="void"?l.emitLine(`${o} return (${v}){0};`):l.emitLine(`${o} return;`)}else s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),y}else return`${e}(${t})`}}function Gf(e,t,n){var a,s;let r=n.emitter,i=(a=e.$)==null?void 0:a.type;if(!i)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let l=e.args[0];if((s=l.$)!=null&&s.value&&rt(l.$.value)){let u=l.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(u)});`),r.emitLine(`${t}abort();`)}else{let u=B(l,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${u});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${Y(i,n)}*)NULL))`}var dh={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"}},mh={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"},yh={e:"k",x:"w",l:"b",h:"h",w:"w"};function gh(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=mh[e];if(n)return n;let r=dh[e];return r?r[t]??r.x86_64??"r":e}function hh(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?yh[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 vh(e,t,n,r){var h,v,$,E,C;let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let w,b=0;i.length===2&&((h=i[0].$)!=null&&h.value)&&rt(i[0].$.value)&&(w=i[0].$.value.value,b=1);let k=B(i[b],t,n);return{kind:"const_val",name:w,constraint:"",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let w,b=0;i.length===2&&((v=i[0].$)!=null&&v.value)&&rt(i[0].$.value)&&(w=i[0].$.value.value,b=1);let k=B(i[b],t,n);return{kind:"sym",name:w,constraint:"i",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let w=i[0];($=w.$)!=null&&$.value&&rt(w.$.value)&&!(w.tag==="Atom"&&Wf(w.token.value))&&(a=w.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=Th(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let _=gh(u,o),f=i[c];if(f.tag==="Atom"&&f.token.value==="_")return{kind:r,name:a,constraint:_,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if((E=f.$)!=null&&E.value&&W(f.$.value)){let w=f.$.value.value,b=Y(w,n);return{kind:r,name:a,constraint:_,cExpr:"",cType:b,isDiscarded:!1,isVariableTarget:!1}}let p=B(f,t,n),m=Y((C=f.$)==null?void 0:C.type,n),g=(r==="out"||r==="lateout")&&f.tag==="Atom";return{kind:r,name:a,constraint:_,cExpr:p,cType:m,isDiscarded:!1,isVariableTarget:g}}function Wf(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function Th(e,t,n){var r,i;if(e.tag==="Atom"&&Wf(e.token.value))return e.token.value;if((r=e.$)!=null&&r.value&&rt(e.$.value))return e.$.value.value;if(T(e,"raw",1)){let o=e;if((i=o.args[0].$)!=null&&i.value&&rt(o.args[0].$.value))return`raw:${o.args[0].$.value.value}`}return"r"}function Eh(e,t){var i;let n=[];if((e.func.tag==="Atom"?e.func.token.value:"clobber")==="clobber_abi"){let o=t.targetInfo.arch;if(o==="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(o==="aarch64"){for(let a=0;a<=18;a++)n.push(`x${a}`);n.push("x30");for(let a=0;a<=31;a++)n.push(`v${a}`);n.push("cc","memory")}return n}for(let o of e.args)(i=o.$)!=null&&i.value&&rt(o.$.value)?n.push(o.$.value.value):o.tag==="Atom"&&n.push(o.token.value);return n}function $h(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 vu=0;function qf(e,t,n){var V,O;let r=n.emitter,i=(V=e.$)==null?void 0:V.type;if(!i)return"/* Error: asm() missing type information */";if(ao(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${Y(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let x=e.args[a];if(I(x))break;if((O=x.$)!=null&&O.value&&rt(x.$.value))o.push(x.$.value.value),a++;else break}let s=o.join(`
10260
- `),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let x=e.args[a];if(!I(x)){a++;continue}let N=x.func.tag==="Atom"?x.func.token.value:void 0;if(!N){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(N)?l.push(vh(x,t,n,N)):N==="clobber"||N==="clobber_abi"?u.push(...Eh(x,n)):N==="asm_options"&&(c=$h(x)),a++}let _=new Map;for(let x=0;x<l.length;x++)l[x].name&&_.set(l[x].name,x);let f=s;for(let x=0;x<l.length;x++){let N=l[x];N.kind==="const_val"&&(N.name&&(f=f.replace(new RegExp(`\\{${N.name}(?::[^}]*)?\\}`,"g"),N.cExpr)),f=f.replace(new RegExp(`\\{${x}(?::[^}]*)?\\}`,"g"),N.cExpr))}let p=hh(f,_),m=[],y=[],g=[];for(let x=0;x<l.length;x++){let N=l[x];if(N.isDiscarded){let P=`__asm_discard_${vu++}`;g.push({varName:P,cType:N.cType,operandIdx:x}),r.emitLine(`${t}${N.cType} ${P};`)}else if(N.kind==="out"||N.kind==="lateout"){if(!N.isVariableTarget){if(N.cType){let P=`__asm_out_${vu++}`;m.push({varName:P,cType:N.cType,operandIdx:x}),r.emitLine(`${t}${N.cType} ${P};`)}}}else if(N.kind==="inout"||N.kind==="inlateout"){let P=`__asm_inout_${vu++}`;y.push({varName:P,cType:N.cType,initExpr:N.cExpr,operandIdx:x}),r.emitLine(`${t}${N.cType} ${P} = ${N.cExpr};`)}}let h=c.isVolatile?" __volatile__":"",v=p;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let $=JSON.stringify(v),E=[];for(let x=0;x<l.length;x++){let N=l[x];if(N.kind==="in"||N.kind==="const_val"||N.kind==="sym")continue;let P;N.kind==="out"||N.kind==="lateout"?P=N.kind==="lateout"?"=&":"=":P=N.kind==="inlateout"?"+&":"+";let R=`${P}${N.constraint}`,H=N.name?`[${N.name}] `:"",G;N.isDiscarded?G=g.find(K=>K.operandIdx===x).varName:N.isVariableTarget?G=N.cExpr:N.kind==="out"||N.kind==="lateout"?G=m.find(K=>K.operandIdx===x).varName:G=y.find(K=>K.operandIdx===x).varName,E.push(`${H}"${R}" (${G})`)}let C=[];for(let x=0;x<l.length;x++){let N=l[x];if(N.kind!=="in"&&N.kind!=="sym")continue;let P=N.constraint,R=N.name?`[${N.name}] `:"";C.push(`${R}"${P}" (${N.cExpr})`)}let w=u.map(x=>`"${x}"`),b=E.join(", "),k=C.join(", "),A=w.join(", ");if(r.emitLine(`${t}__asm__${h} (`),r.emitLine(`${t} ${$}`),r.emitLine(`${t} : ${b}`),r.emitLine(`${t} : ${k}`),r.emitLine(`${t} : ${A}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${Y(i,n)}*)NULL))`;if(De(i))return"";let S=[];for(let x=0;x<l.length;x++){let N=l[x];if(!(N.isDiscarded||N.isVariableTarget)&&!(N.kind==="in"||N.kind==="const_val"||N.kind==="sym"))if(N.kind==="out"||N.kind==="lateout"){let P=m.find(R=>R.operandIdx===x);P&&S.push(P.varName)}else{let P=y.find(R=>R.operandIdx===x);P&&S.push(P.varName)}}if(S.length===1)return S[0];if(S.length>1){let x=Y(i,n),N=S.map((P,R)=>`._${R} = ${P}`).join(", ");return`((${x}){ ${N} })`}return""}function Yf(e,t,n){var i;if(ao(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if((i=r.$)!=null&&i.value&&rt(r.$.value)){let o=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(o)});`)}return""}function Hf(e,t,n){var l,u,c,_,f,p,m,y,g,h;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=B(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(X(i)){let v=i.token.value,$=n;if($.currentEvidenceParams&&X(r)){let C=`${r.token.value}.${v}`,w=$.currentEvidenceParams.get(C);if(w)return w.cParamName}if((c=e.$)!=null&&c.value&&Ce(e.$.value)){let E=e.$.value;return((_=n.functions[E.funcId])==null?void 0:_.cName)||E.funcId}if(!((f=e.$)!=null&&f.value)&&(F.___dispose.includes(v)||F.___drop.includes(v)||F.___dup.includes(v))&&a){let E=null;if((xe(a)||ze(a))&&(E=a.trait),E){let C=E.fields.find(w=>w.label===v&&w.assignedValue&&Ce(w.assignedValue));if(C&&Ce(C.assignedValue)){let w=C.assignedValue;return((p=n.functions[w.funcId])==null?void 0:p.cName)||w.funcId}else return`/* ERROR: Rc method ${v} not found in type module */`}else return`/* ERROR: No module found for Rc method ${v} */`}if(We(a)||Et(s)){let E=(m=e.$)==null?void 0:m.value;if(E){if(Oe(E)){if(E.variableName)return Ye(E.variableName,(y=e.$)==null?void 0:y.env);if(($.inAsyncStateMachine||$.inEffectStateMachine)&&$.stateMachineVariables){for(let[,C]of $.stateMachineVariables)if(C.name===v&&C.kind==="outer")return`sm->__capture.${v}`}}else if(!Et(E))return Un(E,n,e)}return Ye(v,(g=e.$)==null?void 0:g.env)}if(ui(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===v)return o}if(ze(a)){let E=a;if(xn(E))return o;for(let w of E.variants)if(w.fields){for(let b of w.fields)if(b.label===v){let k=w.name;return`${o}.data.${k}.${ve(v)}`}}return`/* ERROR: field ${v} not found in enum ${E.typeName} */`}else if(W(s)&&ze(s.value)){let E=s.value,C=E.variants.find(b=>b.name===v),w=(h=n.types[E.id])==null?void 0:h.cName;if(C&&!C.fields&&w){let b=In(E,C.name,n);return`(${w}){ .tag = ${b}, .data = { } }`}}else{if(un(a)&&v==="*")return`${o}->value`;if(tt(a)){if(v==="*")return`(*${o})`;if(Lt(a.childType))return`${o}->${ve(v)}`;{let E=0,C=a;for(;tt(C);)E++,C=C.childType;if(E>0&&xe(C)&&C.isReferenceSemantics&&E++,ui(C)&&C.fields.length===1){let w=C.fields[0];if(w&&w.label===v)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${ve(v)}`:`${`(${"*".repeat(E-1)}${o})`}->${ve(v)}`:`${o}.${ve(v)}`}}else if(Qe(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let E=a.fields.findIndex(C=>C.label===v);return`${o}._${E}`}}else return Ke(a)?`${o}.vtable->${ve(v)}`:Ht(a)?`${o}->${ve(v)}`:`${o}.${ve(v)}`}}return"/* ERROR: field name must be an identifier */"}function jf(e,t,n){var l,u,c,_,f;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${L(e)}
10261
- `;let i=e.args[0];if(I(i)){let p=(u=i.func.$)==null?void 0:u.type;if(p&&Xe(p)){let m=i.args[0];if(m&&I(m)&&T(m,":")){let y=B(i.func,t,n),g=B(m.args[0],t,n),h=B(m.args[1],t,n),v=`Slice_${ve(Y(p.childType,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:Y(p.childType,n)}),`(${v}){ .data = &${y}.data[${g}], .length = ${h} - ${g} }`}else if(m&&X(m)&&m.token.value===":"){let y=B(i.func,t,n),g=p,h=g.childType,v=`Slice_${ve(Y(h,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:Y(h,n)}),ht(g.length)?`(${v}){ .data = &${y}.data[0], .length = ${g.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(p&&(Lt(p)||tt(p)&&Lt(p.childType))){let m=Lt(p)?p:p.childType,y=i.args[0];if(y&&I(y)&&T(y,":")){let g=B(i.func,t,n),h=B(y.args[0],t,n),v=B(y.args[1],t,n),$=`Slice_${ve(Y(m.childType,n))}`;return n.sliceStructTypes.has($)||n.sliceStructTypes.set($,{childType:Y(m.childType,n)}),`(${$}){ .data = &${g}.data[${h}], .length = ${v} - ${h} }`}else if(y&&X(y)&&y.token.value===":"){let g=B(i.func,t,n),h=`Slice_${ve(Y(m.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:Y(m.childType,n)}),`(${h}){ .data = ${g}.data, .length = ${g}.length }`}}}let o=(c=i.$)==null?void 0:c.value,a=(_=i.$)==null?void 0:_.type;if(o!==void 0&&a){if(ht(o)||dt(o)){let p=B(i,t,n);return`(&(${Y(a,n)}){${p}})`}if(rt(o)&&((f=i.$)!=null&&f.convertedRuntimeType))return`(&${B(i,t,n)})`}return`(&${B(i,t,n)})`}function Kf(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${B(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function Xf(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${B(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function Qf(e,t,n){let r=e.args[0];return r?B(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function Zf(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!Xe(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=z(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Xe(u)){let f=u.length;if(!ht(f))return"// Error: array element has non-constant length";let p=`i_${Math.floor(Math.random()*1e6)}`,m=n.emitter;m.emitLine(`for (size_t ${p} = 0; ${p} < ${f.value}; ${p}++) {`);let y=`(${o}).data[${a}].data[${p}]`;m.emitLine(" { // drop nested array element");let g=hi(y,u.childType,n);return g&&m.emitLine(` ${g};`),m.emitLine(" }"),m.emitLine("}"),""}let c=ii(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function Jf(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!Xe(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=z(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Xe(u)){let f=u.length;if(!ht(f))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,m=`i_${Math.floor(Math.random()*1e6)}`,y=Y(u,n),g=n.emitter;g.emitLine(`${y} ${p} = (${o}).data[${a}];`),g.emitLine(`for (size_t ${m} = 0; ${m} < ${f.value}; ${m}++) {`);let h=qo(`${p}.data[${m}]`,u.childType,n);return g.emitLine(` ${p}.data[${m}] = ${h};`),g.emitLine("}"),p}let c=kr(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function ep(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=B(r,t,n);B(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!Qe(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!ht(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=z(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Qe(c)){let m=`(${o})._${l}`;return hi(m,c,n)}let _=ii(c,n);return _?`${_}((${o})._${l})`:"// No drop function for tuple element type"}function tp(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=B(r,t,n);B(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!Qe(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!ht(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=z(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Qe(c)){let m=`(${o})._${l}`;return qo(m,c,n)}let _=kr(c,n);return _?`${_}((${o})._${l})`:"// No dup function for tuple element type"}function np(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=B(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?qo(i,o,n):i}function rp(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=B(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?hi(i,o,n):""}function ip(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${B(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function op(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${B(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function ap(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${B(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function sp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${B(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function lp(e,t,n){var o,a,s;let r=e.args[0];if(!r)return"// Error: __yo_sometype_drop requires exactly 1 argument";let i=(o=r.$)==null?void 0:o.type;if(i&&z(i)&&je(i)){let l=B(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&z(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___drop[0]);if(u&&u.assignedValue&&Ce(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=B(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_drop: no-op */"}function up(e,t,n){var o,a,s;let r=e.args[0];if(!r)return"// Error: __yo_sometype_dup requires exactly 1 argument";let i=(o=r.$)==null?void 0:o.type;if(i&&z(i)&&je(i))return`__yo_incr_rc((void*)${B(r,t,n)})`;if(i&&z(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___dup[0]);if(u&&u.assignedValue&&Ce(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=B(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_dup: no-op */"}function cp(e,t,n){var a;if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let r=e.args[0],i=(a=r.$)==null?void 0:a.type;if(!i)return"// Error: rc argument missing type information";let o=B(r,t,n);return jn(i)?`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}function _p(e,t,n){var i;let r=(i=e.$)==null?void 0:i.runtimeArgExprsInOrder;if(r){let o=n,a=r.map(s=>{var u,c;let l=B(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){Rt(s,t,o);let _=s.$.deferredDupExpressions[0];if(I(_)&&((c=_.$)!=null&&c.variableName))return Ye(_.$.variableName,_.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${L(e)}
10262
- `}function fp(e,t,n){let r=e.args[0];return`sizeof(${B(r,t,n)})`}function pp(e,t,n){var a,s,l,u,c,_,f,p,m;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(u=n.types[((l=(s=e.$)==null?void 0:s.type)==null?void 0:l.id)??""])==null?void 0:u.cName,o=(c=e.$)==null?void 0:c.variableName;if(r&&i){let y=n,g=r.map((h,v)=>{var C,w;let E=B(h,t,n);if((C=h.$)!=null&&C.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Rt(h,t,y);let b=h.$.deferredDupExpressions[0];I(b)&&((w=b.$)!=null&&w.variableName)&&(E=Ye(b.$.variableName,b.$.env))}return`._${v} = ${E}`}).join(", ");if(o&&((_=e.$)!=null&&_.type)){let h=`(${i}){ ${g} }`,v=Bt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}else{if(e.args.length===0)return"";{let y=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((p=(f=e.$)==null?void 0:f.type)==null?void 0:p.id)??"none"} */`;let g=y.map((h,v)=>{let $=B(h,t,n);return`._${v} = ${$}`}).join(", ");if(o&&((m=e.$)!=null&&m.type)){let h=`(${i}){ ${g} }`,v=Bt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}}}function dp(e,t,n){var u,c;let i=(u=e.args[0].$)==null?void 0:u.value;if(!i||!W(i))throw new Error("typeid codegen: expected TypeValue argument");let o=i.value,a=o.id,s=((c=n.types[a])==null?void 0:c.cName)||Y(o,n),l=`__yo_typeid_${ve(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 Ch(e,t){if(I(e)&&T(e,M.begin)){let n=[];for(let r of e.args)if(I(r)&&T(r,"=",2)){let i=r.args[0],o=r.args[1],a=B(i,"",t),s=B(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(I(e)&&T(e,"=",2)){let n=e.args[0],r=e.args[1],i=B(n,"",t),o=B(r,"",t);return`${i} = ${o}`}return B(e,"",t)}function Tu(e,t,n){var r,i,o,a;if(I(e)&&T(e,M.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let m of u){let y=hr(m);y&&c.set(y,m)}s.pendingDeferredDrops=[...l??[]];let _=s.consumedVarPendingDrops,f=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[...f,..._??[]];let p=new Set;for(let m of e.args){let y=B(m,t,n);if(y&&n.emitter.emitLine(`${t}${y};`),(o=m.$)!=null&&o.env&&c.size>p.size)for(let g of m.$.env.frames)for(let h of g.variables)c.has(h.name)&&!p.has(h.name)&&(p.add(h.name),s.pendingDeferredDrops.unshift(c.get(h.name)))}if((a=e.$)!=null&&a.deferredDropExpressions)for(let m of e.$.deferredDropExpressions){let y=B(m,t,n);y&&n.emitter.emitLine(`${t}${y};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=_}else{let s=B(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function mp(e,t,n){var i,o,a;if((i=e.$)!=null&&i.comptimeUnrolledBodies){for(let s of e.$.comptimeUnrolledBodies)Tu(s,t,n);return""}let r=e.args;if(r.length===2){let s=r[0],l=r[1],u=n.currentLoopLabel,c=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=c;let _=n,f=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=B(s,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Tu(l,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${c}:;`),_.loopBodyDropsBaselineCount=f,n.currentLoopLabel=u,""}else if(r.length===3){let s=r[0],l=r[1],u=r[2],c=n.currentLoopLabel,_=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let m=n,y=m.loopBodyDropsBaselineCount;m.loopBodyDropsBaselineCount=((a=m.pendingDeferredDrops)==null?void 0:a.length)??0,n.emitter.emitLine(`${t}while (true) {`);let g=B(s,t+" ",n);n.emitter.emitLine(`${t} if (!(${g})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Tu(u,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let h=Ch(l,n);return n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),m.loopBodyDropsBaselineCount=y,n.currentLoopLabel=c,n.currentContinueLabel=_,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function bh(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function kh(e,t,n,r){var _,f,p,m;let i=e.args[0];if(!((_=i==null?void 0:i.$)!=null&&_.type))return;let o=e.args.find(y=>I(y)&&T(y,M.using));if(!o)return;let a=Cn(i.$.type);if(!((f=a==null?void 0:a.isFuture.effects)!=null&&f.length))return;let s=bh(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let y=0;y<s.length&&y<l.length;y++){let g=s[y],h=l[y];if(J(g.type)){let v=g.label,$;if(u.currentEvidenceParams){for(let E of u.currentEvidenceParams.values())if(E.fieldLabel===v){$=E.cParamName;break}}if(!$&&u.stateMachineVariables){for(let[,E]of u.stateMachineVariables)if(E.name===v&&E.kind==="outer"){$=`sm->__capture.${v}`;break}}if(!$){let E=(p=h.$)==null?void 0:p.value;if(E&&Ce(E)){let C=r.functions[E.funcId];C&&($=C.cName)}}$||($=B(h,n,r)),$&&c.emitLine(`${n} ${t}->__capture.${v} = (void*)${$};`)}else if(We(g.type)){let v=g.type;for(let $ of v.fields){if(!J($.type))continue;let E;if(u.stateMachineVariables){for(let[,C]of u.stateMachineVariables)if(C.name===$.label&&C.kind==="outer"){E=`sm->__capture.${$.label}`;break}}if(!E){let C=(m=h.$)==null?void 0:m.value;if(C&&Et(C)){let w=v.fields.indexOf($),b=C.fields[w];if(b&&Ce(b)){let k=r.functions[b.funcId];k&&(E=k.cName)}}}if(!E&&u.currentEvidenceParams){for(let C of u.currentEvidenceParams.values())if(C.fieldLabel===$.label){E=C.cParamName;break}}E||(E=wh($.label,v,u,e)),E&&c.emitLine(`${n} ${t}->__capture.${$.label} = (void*)${E};`)}}}}function wh(e,t,n,r){var a,s,l,u;let i=((a=r.$)==null?void 0:a.env)??((s=r.func.$)==null?void 0:s.env);if(!i)return;let o=tr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&Et(f)){let p=f.type.fields.findIndex(m=>m.label===e);if(p>=0){let m=f.fields[p];if(m&&Ce(m)){let y=(u=n.functions[m.funcId])==null?void 0:u.cName;if(y)return y}}}}}function Fh(e,t,n){var l,u;let r=n,i=e.args[0],o=(l=r.continuationVariables)==null?void 0:l.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let c=B(i,t,n);if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${_};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${c};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let c=r.emitter;if(i){let _=B(i,t,n);_&&_!=="(void)0"&&c.emitLine(`${t}(void)${_};`)}if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)c.emitLine(`${t}${_};`);return nr(t,r,e,!1,!0,!0),Wr(t,r,e,!0),br({emitter:c,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 c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(nr(t,r,e,!1,!0,!0),Wr(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!De(c)){let _=r.overrideReturnTypeStr??Y(c,n);if(_!=="void")return`return (${_}){0}`}}return"return"}let s=B(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(nr(t,r,e,!1,!0,!0),Wr(t,r,e,!0),(r.isModuleEffectMemberFunction||r.currentEvidenceParams&&r.currentEvidenceParams.size>0)&&r.currentFunctionType){let c=(u=i.$)==null?void 0:u.type;if(c&&!De(c)){let f=Y(c,n);r.emitter.emitLine(`${t}{ ${f} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${f})); }`)}let _=r.currentFunctionType.return.type;if(!De(_)){let f=r.overrideReturnTypeStr??Y(_,n);if(f!=="void")return`return (${f}){0}`}return"return"}return`return ${s}`}function yp(e,t,n){let r;switch(e.tag){case"FnCall":r=Lh(e,t,n);break;case"Atom":r=Qo(e,n,t);break}return r}function Lh(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,m,y;if((r=e.$)!=null&&r.macroExpansion)return B(e.$.macroExpansion,t,n);if(I(e.func)&&T(e.func,".",2)&&e.func.args[1]&&X(e.func.args[1])){let g=e.func.args[1].token.value,h=e.func.args[0],v=(i=h==null?void 0:h.$)==null?void 0:i.type;if(v&&z(v)&&je(v)){if(g===F.___drop[0]){let $=B(h,t,n);return`if (${$} != NULL) { __yo_decr_rc((void*)${$}); }`}if(g===F.___dup[0])return`__yo_incr_rc((void*)${B(h,t,n)})`}}if(b_(e))return k_(e,t,n);if(T(e,F.__yo_decr_rc))return Kf(e,t,n);if(T(e,F.__yo_incr_rc))return Xf(e,t,n);if(T(e,F.__yo_rc_own))return Qf(e,t,n);if(T(e,F.__yo_drop_array_element))return Zf(e,t,n);if(T(e,F.__yo_dup_array_element))return Jf(e,t,n);if(T(e,F.__yo_drop_tuple_element))return ep(e,t,n);if(T(e,F.__yo_dup_tuple_element))return tp(e,t,n);if(T(e,F.___dup))return np(e,t,n);if(T(e,F.___drop))return rp(e,t,n);if(T(e,F.__yo_dyn_drop))return ip(e,t,n);if(T(e,F.__yo_dyn_dup))return op(e,t,n);if(T(e,F.__yo_incr_rc_atomic))return ap(e,t,n);if(T(e,F.__yo_decr_rc_atomic))return sp(e,t,n);if(T(e,F.__yo_iso_extract))return If(e,t,n);if(T(e,F.__yo_iso_dispose))return Sf(e,t,n);if(T(e,F.__yo_arc_dispose))return ff(e,t,n);if(mu(e))return Nf(e,t,n);if(du(e))return pf(e,t,n);if(T(e,F.__yo_sometype_drop))return lp(e,t,n);if(T(e,F.__yo_sometype_dup))return up(e,t,n);if(T(e,F.__yo_gc_collect))return Lf(e,t,n);if(T(e,F.rc))return cp(e,t,n);if(T(e,F.panic))return Gf(e,t,n);if(T(e,F.asm))return qf(e,t,n);if(T(e,F.global_asm))return Yf(e,t,n);if(T(e,M.test))return"/* test declaration skipped */";if(T(e,F.__yo_thread_set_maximum_threads))return Rf(e,t,n);if(T(e,M.op_and))return cf(e,t,n);if(T(e,M.op_or))return _f(e,t,n);if(wn(e))return(o=e.$)!=null&&o.awaitAnalysis?w_(e,t,n):S_(e,t,n);if(T(e,M.dyn))return Ff(e,t,n);if(er(e))return hf(e,t,n);if(Dc(e))return vf(e,t,n);if(Ts(e)){let g=e.args[0];if(!g)return"// Error: spawn requires a Future argument";let v=n.emitter,$=B(g,t,n),E=(a=g.$)==null?void 0:a.type,C=E?Y(E,n):"void*",w=(s=e.$)==null?void 0:s.type,b=w?Y(w,n):null,k=(l=e.$)!=null&&l.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",A=(u=e.$)!=null&&u.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return v.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),v.emitLine(`${t}${C} ${k} = ${$};`),v.emitLine(`${t}int ${A} = ${k}->state;`),v.emitLine(`${t}if (${A} == -2) {`),v.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),v.emitLine(`${t} abort();`),v.emitLine(`${t}}`),Ra((c=g.$)==null?void 0:c.type)||(v.emitLine(`${t}if (${A} == 0 && ${k}->__yo_resume_fn) {`),kh(e,k,t,n),v.emitLine(`${t} __yo_incr_rc((void*)${k});`),v.emitLine(`${t} ${k}->__yo_resume_fn((void*)${k});`),v.emitLine(`${t}}`)),b?`(${b}){ .__future = (void*)${k} }`:`(void*)${k}`}if(Mc(e))return Tf(e,t,n);if(T(e,M.return))return K_(e,t,n);if(T(e,M.escape))return Fh(e,t,n);if(T(e,F.__yo_array_fill,2))return mf(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return Cf(e,t,n);if(T(e,":=",2)){let g=Af(e,t,n);if(g!==void 0)return g}else{if(T(e,"=",2))return yf(e,t,n);if((_=e.$)!=null&&_.value&&!Oe((f=e.$)==null?void 0:f.value)&&!De(e.$.type)&&!Ot((p=e.$)==null?void 0:p.controlFlow)){let g=e.$.value;return Un(g,n,e)}else{if(T(e,".",2))return Hf(e,t,n);if(T(e,M.begin))return $f(e,t,n);if(T(e,M.cond))return bf(e,t,n);if(T(e,M.match))return xf(e,t,n);if(T(e,F.__yo_address_of,1))return jf(e,t,n);if(T(e,M.tuple))return pp(e,t,n);if(T(e,M.array)){let g=df(e,t,n);if(g!==void 0)return g}else{if(T(e,M.recur))return _p(e,t,n);if(T(e,M.runtime,1))return B(e.args[0],t,n);if(T(e,F.sizeof,1))return fp(e,t,n);if(T(e,F.typeid,1))return dp(e,t,n);if(T(e,F.downcast,2))return wf(e,t,n);if(T(e,so)){let g=((m=e.$)==null?void 0:m.runtimeArgExprsInOrder)||e.args;if(g){let h=n,v=g.map($=>{var C,w;let E=B($,t,n);if((C=$.$)!=null&&C.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){Rt($,t,h);let b=$.$.deferredDupExpressions[0];if(I(b)&&((w=b.$)!=null&&w.variableName))return Ye(b.$.variableName,b.$.env)}return E});return Ua(e.func.token.value,v,e,n,t)}}else{if(T(e,M.while))return mp(e,t,n);if(T(e,"->",2)&&I(e.args[0])&&T(e.args[0],M.fn)){let g=(y=e.$)==null?void 0:y.value;return Ce(g)?Un(g,n):"// Error: Anonymous function missing function value"}else{if(T(e,F.consume))return kf(e,t,n);if(T(e,F.comptime_expect_error)||T(e,F.comptime_assert)||T(e,F.__yo_var_print_info)||T(e,F.__yo_var_is_owning_the_rc_value)||T(e,F.__yo_var_has_other_aliases))return"";if(T(e,M.open))return Df(e,t,n);{let g=Bf(e,t,n);if(g!==void 0)return g}}}}}}if(I(e))throw new Error(`Unhandled function call: ${L(e)}`);return`// Failed to transpile ${L(e)}`}function gp({expr:e,env:t,context:n}){Ge(e,F.alignof,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&W(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Rr(o),s;return a===null?s=ue(tn(),{env:t,context:n}):s=Pn("Usize",a),e.$={env:t,type:tn(),value:s,pathCollection:[]},e}function hp({expr:e,env:t,context:n}){let r=T(e,M.op_and)?"and":"or",i=e.args;if(i.length===0){let u=jt(r==="and");return e.$={env:t,type:Nt(),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],_=U({expr:c,env:o,context:{...n}});if(!_.$||!Zn(_.$.type))throw d({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
10263
- ${L(c)}`});o=_.$.env;let f=_.$.value;if(Oe(f)){s=!0;continue}if(dt(f)){let p=f.value;if(r==="and"){if(!p){a=jt(!1);break}!s&&!l&&(a=jt(!0))}else{if(p){a=jt(!0);break}!s&&!l&&(a=jt(!1))}}else l=!0}return dt(a)||(l||s)&&(l?a=void 0:a=ue(Nt(),{env:o,context:n})),e.$={env:o,type:Nt(),value:a,pathCollection:[],isAccessingProperty:!1},e}function vp({expr:e,env:t,context:n}){var y,g,h,v,$;Ge(e,F.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});(y=o.$)!=null&&y.env&&(t=o.$.env);let a=(g=o.$)==null?void 0:g.value;if(!W(a)||!Xe(a.value))throw d({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?lt(a):"undefined"}`});let s=a.value,l=U({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});(h=l.$)!=null&&h.env&&(t=l.$.env);let u=(v=l.$)==null?void 0:v.type,c=($=l.$)==null?void 0:$.value;if(!u)throw d({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw d({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!ae({type:s.childType,env:t},{type:u,env:t}))throw d({token:i.token,errorMessage:`Fill value type ${D(u)} is not compatible with array element type ${D(s.childType)}`});let _=s.length;if(Oe(_)){let E=ue(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}let f;if(ht(_)){let E=_.value;if(f=typeof E=="bigint"?Number(E):E,!Number.isInteger(f)||f<0)throw d({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${f}`})}else throw d({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${lt(_)}`});let p=[];if(Oe(c)){let E=ue(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}for(let E=0;E<f;E++)p.push(c);let m=ki(s,p);return e.$={env:t,type:s,value:m,pathCollection:[]},e}function Tp({expr:e,env:t,context:n}){var s,l,u;if(n.isValidatingFunctionDefinition||!n.isExecuting){let c=((s=n.expectedType)==null?void 0:s.type)??se.type;return e.$={env:t,type:c,value:De(c)?se:ue(c,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!dt(o.$.value))throw d({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
10269
+ `),af(i),_u(i),A_(i),E_(i),tf(i),J_(i),M_(i),O_(i),R_(i),D_(i),L_(i),r.isLibrary||ef(i),of(i),C_(i),rf(i),i.needsIntelAsmSyntax&&(this._needsIntelAsmSyntax=!0)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}get needsIntelAsmSyntax(){return this._needsIntelAsmSyntax}};var sf=0;function lf(e){var t,n;return(t=e.$)!=null&&t.variableName?!0:(((n=e.$)==null?void 0:n.value)!==void 0,!1)}function Ms(e,t){var n;if(I(e)){(n=e.$)!=null&&n.variableName&&t.add(e.$.variableName);for(let r of e.args)Ms(r,t);e.func&&Ms(e.func,t)}}function uf(e,t,n){let r=n,i=r.pendingDeferredDrops;if(!(!i||e.size===0)){r.shortCircuitHandledDropVarNames||(r.shortCircuitHandledDropVarNames=new Set);for(let o of i){let a=hr(o);if(a&&e.has(a)){let s=B(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function cf(e,t,n){var l;if(e.args.length===0)return"true";if(e.args.length===1)return B(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(dt(c)){if(c.value===!1)return"false";continue}r.push(u)}if(r.length===0)return"true";if(r.length===1)return B(r[0],t,n);if(!r.slice(1).some(u=>lf(u)))return`(${r.map(c=>B(c,t,n)).join(" && ")})`;let o=`__yo_sc_${sf++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=B(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (${c}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],_=new Set;Ms(c,_),uf(_,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function _f(e,t,n){var l;if(e.args.length===0)return"false";if(e.args.length===1)return B(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(dt(c)){if(c.value===!0)return"true";continue}r.push(u)}if(r.length===0)return"false";if(r.length===1)return B(r[0],t,n);if(!r.slice(1).some(u=>lf(u)))return`(${r.map(c=>B(c,t,n)).join(" || ")})`;let o=`__yo_sc_${sf++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=B(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (!(${c})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],_=new Set;Ms(c,_),uf(_,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function ff(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=B(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!cn(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${Y(o,n)}(${i})`}function du(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&cn(t.value)&&e.args.length===1}function pf(e,t,n){var c;if(!du(e))return"/* Error: generateArcTypeCall called on non-Arc type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=B(a,t,n),l=Y(i,n),u=Y(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 df(e,t,n){var a,s,l,u;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(s=e.$)==null?void 0:s.type,o=(l=e.$)==null?void 0:l.variableName;if(Xe(i)&&r){let c=n,_=r.map(p=>{var y,g;let m=B(p,t,n);if((y=p.$)!=null&&y.deferredDupExpressions&&p.$.deferredDupExpressions.length>0){Rt(p,t,c);let h=p.$.deferredDupExpressions[0];if(I(h)&&((g=h.$)!=null&&g.variableName))return Ye(h.$.variableName,h.$.env)}return m}).join(", "),f=Y(i,n);if(o&&((u=e.$)!=null&&u.type)){let p=`(${f}){ .data = { ${_} } }`,m=Bt(e.$.type,o,n);return n.emitter.emitLine(`${t}${m} = ${p};`),o}else return`(${f}){ .data = { ${_} } }`}}function mf(e,t,n){var p,m,y;let r=n.emitter,i=e.args[0],o=e.args[1],a=(p=i.$)==null?void 0:p.value;if(!a||!W(a)||!Xe(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!ht(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=Y(s,n),c=B(o,t,n),_=((m=e.$)==null?void 0:m.variableName)||`temp_array_${Date.now()}`,f=`i_${$t(((y=e.$)==null?void 0:y.env.modulePath)??"")}`;return r.emitLine(`${t}${u} ${_};`),r.emitLine(`${t}for (int ${f} = 0; ${f} < ${l.value}; ${f}++) {`),r.emitLine(`${t} ${_}.data[${f}] = ${c};`),r.emitLine(`${t}}`),_}function yf(e,t,n){var l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x;if((l=e.$)!=null&&l.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(I(r)&&T(r,":",2)&&(o=!0,r=r.args[0]),I(r)&&T(r,M.comptime)||I(r)&&T(r,M.given))return"";if((u=r.$)!=null&&u.pathCollection&&((c=r.$)==null?void 0:c.pathCollection.length)>0){let N=r.$.pathCollection[0];if(N&&N.length>=2){let P=N[0];if(typeof P=="string"&&((_=r.$)!=null&&_.env)){let R=_e(r.$.env,P);if(R.length>0&&R[R.length-1].isCompileTimeOnly)return""}}}if(X(r)&&((f=r.$)!=null&&f.env)){let N=r.token.value,P=_e(r.$.env,N);if(P.length>0&&P[P.length-1].isCompileTimeOnly)return""}if(!((p=r.$)!=null&&p.type))return`// Error: No type information for left-hand side ${L(r)}
10270
+ `;let a=B(r,t,n),s=!1;if((m=e.$)!=null&&m.variableName){let N=e.$.variableName,P=n;if((P.inAsyncStateMachine||P.inEffectStateMachine)&&a.startsWith("sm->")){let H=(y=P.stateMachineVariables)==null?void 0:y.get(N);if(!H&&P.stateMachineVariables){for(let[,G]of P.stateMachineVariables)if(G.name===N){H=G;break}}if(H&&H.kind!=="outer"){let G=`var_${H.id}`;De(r.$.type)||n.emitter.emitLine(`${t}sm->${G} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let H=Bt(r.$.type,N,n);Xe(r.$.type)?n.emitter.emitLine(`${t}${H} = ${a}; // Save old value for later use`):De(r.$.type)||n.emitter.emitLine(`${t}${H} = ${a}; // Save old value for later use`)}}if(Xe(r.$.type)){let N=B(i,t,n),P=I(i)&&((g=i.$)==null?void 0:g.closureFunctionValue)&&((h=i.$)==null?void 0:h.type)&&Nn(i.$.type),R=n,H=N;if(!P&&((v=i.$)!=null&&v.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if(($=i.$)!=null&&$.variableName&&((E=i.$)!=null&&E.type)){let Q=Ye(i.$.variableName,i.$.env);if(Q!==N.trim()){let K=i.$.convertedRuntimeType||i.$.type,j=Y(K,n);n.emitter.emitLine(`${t}${j} ${Q} = ${N};`)}}Rt(i,t,R);let G=i.$.deferredDupExpressions[0];I(G)&&((C=G.$)!=null&&C.variableName)&&(H=Ye(G.$.variableName,G.$.env))}if(o){let G=Bt(r.$.type,B(r,t,n),n);n.emitter.emitLine(`${t}${G} = ${H};`)}else n.emitter.emitLine(`${t}${a} = ${H};`)}else{let N=B(i,t,n),P=I(i)&&((w=i.$)==null?void 0:w.closureFunctionValue)&&((b=i.$)==null?void 0:b.type)&&Nn(i.$.type),R=n,H=N;if(!P&&((k=i.$)!=null&&k.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((A=i.$)!=null&&A.variableName&&((S=i.$)!=null&&S.type)){let Q=Ye(i.$.variableName,i.$.env);if(Q!==N.trim()){let K=i.$.convertedRuntimeType||i.$.type,j=Y(K,n);n.emitter.emitLine(`${t}${j} ${Q} = ${N};`)}}Rt(i,t,R);let G=i.$.deferredDupExpressions[0];I(G)&&((V=G.$)!=null&&V.variableName)&&(H=Ye(G.$.variableName,G.$.env))}if(!De(r.$.type)){let G=r.$.type,Q=(O=i.$)==null?void 0:O.type,K,j=qt(i.$.env.modulePath,H.trim());j&&n.tempVarAsyncStructNames&&(K=n.tempVarAsyncStructNames.get(H.trim()));let ie=o&&Q&&je(G)&&je(Q),ce;j&&ie?K?ce=`${K}*`:ce=Y(Q,n):ie&&K?ce=`${K}*`:ce=Y(ie?Q:G,n);let ee=(R.inAsyncStateMachine||R.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!ee?ce+" ":""}${a} = ${H};`)}}return s?"":((x=e.$)==null?void 0:x.variableName)??""}function hf(e,t,n){var s,l,u,c,_,f,p,m,y,g,h,v;let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=(s=r.$)==null?void 0:s.type;if(!i||!je(i))return"// Error: await argument must be a Future type";let o=Cn(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(er(e)){let $=B(r,t,n),E=Y(i,n),C=o.isFuture.outputType;z(C)&&(C.resolvedConcreteType?C=C.resolvedConcreteType:(l=e.$)!=null&&l.type&&!z(e.$.type)?C=e.$.type:(u=e.$)!=null&&u.type&&z(e.$.type)&&e.$.type.resolvedConcreteType&&(C=e.$.type.resolvedConcreteType));let w=a.emitter,b=De(C)||z(C)&&De(((c=e.$)==null?void 0:c.type)??C),k=(_=e.$)!=null&&_.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",A=(f=e.$)!=null&&f.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";w.emitLine(`${t}// Synchronous await (io.await outside state machine)`),w.emitLine(`${t}${E} ${k} = ${$};`),w.emitLine(`${t}int ${A} = ${k}->state;`),Ra((p=r.$)==null?void 0:p.type)||(w.emitLine(`${t}if (${A} == 0 && ${k}->__yo_resume_fn) {`),uh(e,k,t,n),w.emitLine(`${t} __yo_incr_rc((void*)${k}); // event loop reference`),w.emitLine(`${t} ${k}->__yo_resume_fn((void*)${k});`),w.emitLine(`${t}}`)),w.emitLine(`${t}{`),w.emitLine(`${t} int __await_state = ${k}->state;`),w.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),w.emitLine(`${t} __yo_async_poll_step();`),w.emitLine(`${t} __await_state = ${k}->state;`),w.emitLine(`${t} }`),w.emitLine(`${t} if (__await_state == -2) {`);let V=Cn(i),O=((m=V==null?void 0:V.isFuture.effects)==null?void 0:m.some(x=>J(x.type)||We(x.type)||x.isEffectRowSpread))??!1;if(O){w.emitLine(`${t} if (${A} == -2) {`),w.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),w.emitLine(`${t} abort();`),w.emitLine(`${t} }`);let x=a.pendingDeferredDrops;if(x){let R=(y=e.$)==null?void 0:y.variableName;a.pendingDeferredDrops=x.filter(H=>hr(H)!==R)}nr(t+" ",a,e),a.pendingDeferredDrops=x;let N=lh(V,a),P=(h=(g=a.currentFunctionType)==null?void 0:g.return)==null?void 0:h.type;if(N)if(w.emitLine(`${t} __yo_effect_escaped = 0;`),P&&!De(P)){let R=Y(P,n);R!=="void"?(w.emitLine(`${t} ${R} _esc_result;`),w.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${R}));`),w.emitLine(`${t} return _esc_result;`)):w.emitLine(`${t} return;`)}else w.emitLine(`${t} return;`);else if(w.emitLine(`${t} __yo_effect_escaped = 1;`),P&&!De(P)){let R=Y(P,n);w.emitLine(`${t} return (${R}){0};`)}else w.emitLine(`${t} return;`)}else w.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),w.emitLine(`${t} abort();`);if(w.emitLine(`${t} }`),w.emitLine(`${t}}`),b)return"";{let x=((v=e.$)==null?void 0:v.variableName)||"__sync_await_result",N=Y(C,n),P=Bt(C,x,n);if(O){if(w.emitLine(`${t}${P};`),w.emitLine(`${t}if (${k}->state == -1) {`),Je(C)){let R=kr(C,n);R?w.emitLine(`${t} ${x} = ${R}(${k}->result);`):w.emitLine(`${t} ${x} = ${k}->result;`)}else w.emitLine(`${t} ${x} = ${k}->result;`);w.emitLine(`${t}} else {`),w.emitLine(`${t} ${x} = (${N}){0};`),w.emitLine(`${t}}`)}else if(Je(C)){let R=kr(C,n);R?w.emitLine(`${t}${P} = ${R}(${k}->result);`):w.emitLine(`${t}${P} = ${k}->result;`)}else w.emitLine(`${t}${P} = ${k}->result;`);return x}}return"// Error: await should only be used inside async blocks"}function vf(e,t,n){var c,_,f;let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=(c=r.$)==null?void 0:c.type;if(!i||!je(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=B(r,t,n),l=(_=e.$)!=null&&_.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((f=e.$)==null?void 0:f.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Tf(e,t,n){var C,w,b,k,A;let i=n.emitter,o=I(e.func)?e.func.args[0]:e.args[0];if(!o)return"// Error: JoinHandle.await requires a self argument";let a=B(o,t,n),s=(C=e.$)==null?void 0:C.type;if(!s||!ze(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=Y(s,n),u=s.variants.find(S=>S.name==="Some"),c=(b=(w=u==null?void 0:u.fields)==null?void 0:w[0])==null?void 0:b.type,_=!c||De(c),f=_?"uint8_t":c?Y(c,n):"uint8_t",p=In(s,"Some",n),m=In(s,"None",n),y=((k=e.$)==null?void 0:k.variableName)||"jh",g=`__jh_future_${y}`,h=`__jh_header_${y}`,v=((A=e.$)==null?void 0:A.variableName)||"__jh_result",$=`__yo_jh_header_${y}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let E=Bt(s,v,n);if(i.emitLine(`${t}${E};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${g} = ${a}.__future;`),i.emitLine(`${t} struct ${$} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${f} 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 ${$}* ${h} = (struct ${$}*)${g};`),i.emitLine(`${t} int __jh_state = ${h}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${h}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),_)i.emitLine(`${t} ${v} = (${l}){ .tag = ${p} };`);else if(c&&Je(c)){let S=kr(c,n);S?i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${S}(${h}->result) } } };`):i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`)}else i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${v} = (${l}){ .tag = ${m} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),v}function lh(e,t){let n=e.isFuture.effects;if(!(n!=null&&n.length))return!1;let r=Ef(n),i=t.currentEvidenceParams;for(let o of r)if(J(o.type)){let a=`${o.label}.${o.label}`;if(!(i!=null&&i.has(a)))return!0}else if(We(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 Ef(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function uh(e,t,n,r){var c,_,f;let i=e.args[0];if(!((c=i==null?void 0:i.$)!=null&&c.type))return;let o=Cn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Ef(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(p=>I(p)&&T(p,M.using));if(u){let p=u.args;for(let m=0;m<a.length&&m<p.length;m++){let y=a[m],g=p[m];if(J(y.type)){let h=B(g,n,r),v=y.label;l.emitLine(`${n} ${t}->__capture.${v} = (void*)${h};`)}else We(y.type)&&gf(y.type,t,n,(f=g.$)==null?void 0:f.value,s,e)}}else for(let p of a)if(J(p.type)){let m=_h(p.label,s,e);m&&l.emitLine(`${n} ${t}->__capture.${p.label} = (void*)${m};`)}else We(p.type)&&gf(p.type,t,n,void 0,s,e)}function gf(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!J(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&&Et(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&Ce(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=ch(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function ch(e,t,n,r){var a,s,l,u;let i=((a=r.$)==null?void 0:a.env)??((s=r.func.$)==null?void 0:s.env);if(!i)return;let o=tr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&Et(f)){let p=f.type.fields.findIndex(m=>m.label===e);if(p>=0){let m=f.fields[p];if(m&&Ce(m)){let y=(u=n.functions[m.funcId])==null?void 0:u.cName;if(y)return y}}}}}function _h(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 $f(e,t,n){var a,s,l,u,c,_,f,p,m,y,g,h,v,$;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!De(i)&&!Ot((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${Y(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,C=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...C,...E??[]];let w=o.consumedVarPendingDrops,b=((c=e.$)==null?void 0:c.consumedVariableDropExpressions)??[];o.consumedVarPendingDrops=[...b,...w??[]];let k=[],A=!De(i)&&!Ot((_=e.$)==null?void 0:_.controlFlow);for(let S=0;S<e.args.length;S++){let V=e.args[S],O=B(V,t+" ",n);k.push(O);let x=S===e.args.length-1;O&&!(x&&A)&&(V.$&&qt(V.$.env.modulePath,O)||n.emitter.emitLine(`${t} ${O};`))}if(A){let S=e.args[e.args.length-1],V=k[k.length-1];if((f=S.$)!=null&&f.deferredDupExpressions&&S.$.deferredDupExpressions.length>0){if((p=S.$)!=null&&p.variableName){let x=S.$.variableName;S.$.variableName=void 0;let N=B(S,t+" ",n);S.$.variableName=x;let P=Y(S.$.type,n),R=Ye(x,S.$.env);R!==N&&n.emitter.emitLine(`${t} ${P} ${R} = ${N};`),V=R}Rt(S,t+" ",n);let O=S.$.deferredDupExpressions[0];I(O)&&((m=O.$)!=null&&m.variableName)&&(V=Ye(O.$.variableName,O.$.env))}n.emitter.emitLine(`${t} ${r} = ${V};`)}if((y=e.$)!=null&&y.deferredDropExpressions)for(let S of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let O=hr(S);if(O&&o.shortCircuitHandledDropVarNames.has(O)){o.shortCircuitHandledDropVarNames.delete(O);continue}}let V=B(S,t+" ",n);V&&n.emitter.emitLine(`${t} ${V};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=w,De(i)||Ot((g=e.$)==null?void 0:g.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,C=((h=e.$)==null?void 0:h.deferredDropExpressions)??[];o.pendingDeferredDrops=[...C,...E??[]];let w=o.consumedVarPendingDrops,b=((v=e.$)==null?void 0:v.consumedVariableDropExpressions)??[];if(o.consumedVarPendingDrops=[...b,...w??[]],e.args.map(A=>B(A,t+" ",n)).forEach(A=>{A&&n.emitter.emitLine(`${t} ${A};`)}),($=e.$)!=null&&$.deferredDropExpressions)for(let A of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let V=hr(A);if(V&&o.shortCircuitHandledDropVarNames.has(V)){o.shortCircuitHandledDropVarNames.delete(V);continue}}let S=B(A,t+" ",n);S&&n.emitter.emitLine(`${t} ${S};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=w,""}}function Cf(e,t,n){var a;let r=e.args[0];if(I(r)&&T(r,M.comptime,1)||I(r)&&T(r,M.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${L(r)}
10271
+ `;let i=r.token.value,o=Bt(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function bf(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,m;if(e.$){let y=e.$.variableName,g=e.$.type,h=g&&De(g),v=-1;for(let b=0;b<e.args.length;b++){let k=e.args[b];if(I(k)&&T(k,"=>",2)){let A=k.args[0];if(A&&!(dt((r=A.$)==null?void 0:r.value)&&A.$.value.value===!1)){v=b;break}}}let $=!1;if(v>=0){let b=e.args[v];if(b&&I(b)&&T(b,"=>",2)){let k=b.args[0];k&&dt((i=k.$)==null?void 0:i.value)&&k.$.value.value===!0&&($=!0)}}if(!h&&y&&!$){let b=Y(g,n);n.emitter.emitLine(`${t}${b} ${y};`)}if($&&v>=0){let b=e.args[v];if(b&&I(b)&&T(b,"=>",2)){let k=b.args[1];if(k){let A=B(k,t,n);y&&!h&&(A&&A!==""&&!A.startsWith("goto")&&A!=="continue"&&A!=="break"&&!A.includes("return")?n.emitter.emitLine(`${t}${y} = ${A};`):A&&(A.startsWith("goto")||A==="continue"||A==="break"||A.includes("return"))&&n.emitter.emitLine(`${t}${A};`))}}return h?"":y??""}let E=t,C=0,w=!1;for(let b=0;b<e.args.length;b++){let k=e.args[b];if(I(k)&&T(k,"=>",2)){let A=k.args[0],S=k.args[1];if(A&&S){if(dt((o=A.$)==null?void 0:o.value)&&A.$.value.value===!1)continue;if(w){if(n.emitter.emitLine(`${E}else {`),C++,E+=" ",!(dt((s=A.$)==null?void 0:s.value)&&A.$.value.value===!0)){let P=B(A,E,n);n.emitter.emitLine(`${E}if (${P}) {`)}}else{if(dt((a=A.$)==null?void 0:a.value)&&A.$.value.value===!0)n.emitter.emitLine(`${E}{`);else{let N=B(A,E,n);n.emitter.emitLine(`${E}if (${N}) {`)}w=!0}let V=dt((l=A.$)==null?void 0:l.value)&&A.$.value.value===!0,O=w&&V?E:E+" ";if(I(S)&&T(S,M.begin)){let N=S.args,P=n,R=P.pendingDeferredDrops,H=((u=S.$)==null?void 0:u.deferredDropExpressions)??[];P.pendingDeferredDrops=[...H,...R??[]];let G=P.consumedVarPendingDrops,Q=((c=S.$)==null?void 0:c.consumedVariableDropExpressions)??[];P.consumedVarPendingDrops=[...Q,...G??[]];for(let K=0;K<N.length-1;K++){let j=N[K],ie=B(j,O,n);if(ie&&j.$&&!qt(j.$.env.modulePath,ie)&&n.emitter.emitLine(`${O}${ie};`),Ot((_=j.$)==null?void 0:_.controlFlow))break}if(N.length>0){let K=N[N.length-1];(f=K.$)!=null&&f.deferredDupExpressions&&Rt(K,O,n);let j=B(K,O,n);j&&(j==="continue"||j==="break"||j.startsWith("goto")||I(K)&&T(K,M.return)||j.includes("return")?n.emitter.emitLine(`${O}${j};`):y&&!h&&n.emitter.emitLine(`${O}${y} = ${j};`))}(p=S.$)!=null&&p.deferredDropExpressions&&_n(S,O,n),P.pendingDeferredDrops=R,P.consumedVarPendingDrops=G}else{(m=S.$)!=null&&m.deferredDupExpressions&&Rt(S,O,n);let N=B(S,O,n);N==="continue"||N==="break"||N.startsWith("goto")||I(S)&&T(S,M.return)||N.includes("return")?n.emitter.emitLine(`${O}${N};`):N===""||!N||y&&(h||n.emitter.emitLine(`${O}${y} = ${N};`))}!(w&&V)&&n.emitter.emitLine(`${E}}`)}}}for(let b=0;b<C;b++)E=E.slice(0,-2),n.emitter.emitLine(`${E}}`);return h?"":y??""}return'/* "cond" expression is not evaluated */'}function kf(e,t,n){let r=e.args[0];return B(r,t,n)}function wf(e,t,n){var k,A,S,V,O;let r=e.args[0],i=(k=r.$)==null?void 0:k.type;if(!i||!Ke(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=B(r,t,n),s=(A=e.args[1].$)==null?void 0:A.value;if(!s||!W(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=Y(l,n),c=((S=n.types[l.id])==null?void 0:S.cName)||u,_=`__yo_typeid_${ve(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 f=`${o}.vtable->__yo_type_id == (uintptr_t)&${_}`,p,m=!1,y="",g="";for(let[,x]of n.dynImpls){if(x.dynType.id!==i.id)continue;if((z(x.concreteType)&&x.concreteType.resolvedConcreteType?x.concreteType.resolvedConcreteType:x.concreteType).id===l.id&&cr(x.dataType)){m=!0,y=((V=n.types[x.dataType.id])==null?void 0:V.cName)||`unknown_box_${x.dataType.id}`,g=ve(x.dataType.fields[0].label);break}}if(m){let x=Ht(l);if(!x){let N=l;for(;ui(N)&&N.fields.length===1;)N=N.fields[0].type;x=Ht(N)}x?p=`((${u})__yo_incr_rc((void*)((${y}*)${o}.data)->${g}))`:p=`((${u})((${y}*)${o}.data)->${g})`}else p=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(O=e.$)==null?void 0:O.type;if(!h||!ze(h))throw new Error("downcast codegen: expected Option enum as result type");if(xn(h))return`((${f}) ? ${p} : NULL)`;let $=Y(h,n),E=In(h,"Some",n),C=In(h,"None",n),w=`(${$}){ .tag = ${E}, .data = { .Some = { .value = ${p} } } }`,b=`(${$}){ .tag = ${C} }`;return`((${f}) ? ${w} : ${b})`}function Ff(e,t,n){var h,v,$,E,C,w,b,k,A;if(!((h=e.$)!=null&&h.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=(($=(v=e.$)==null?void 0:v.runtimeArgExprsInOrder)==null?void 0:$[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!Ke(i))return"/* Error: dyn() result type is not DynType */";let o=(E=r.$)==null?void 0:E.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(!Ht(o)&&!cr(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=cr(o)?o.fields[0].type:o,l=z(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=((C=n.types[i.id])==null?void 0:C.cName)||`__yo_dyn_${i.id}`,_=`${(()=>{var x,N;let S=(x=n.types[l.id])==null?void 0:x.cName;if(S)return S;let V=Gn(l);return(V?(N=n.types[V.id])==null?void 0:N.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(_,{dynType:i,concreteType:s,dataType:o,traitValues:a});let f=B(r,t,n);if((w=r.$)!=null&&w.variableName&&f!==r.$.variableName){let S=Bt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${S} = ${f};`),f=r.$.variableName}if((b=r.$)!=null&&b.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Rt(r,t,n);let S=r.$.deferredDupExpressions[0];I(S)&&((k=S.$)!=null&&k.variableName)&&(f=Ye(S.$.variableName,S.$.env))}let p=(A=e.$)==null?void 0:A.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let m=n,y;if(m.inAsyncStateMachine&&m.stateMachineVariables){for(let[,S]of m.stateMachineVariables)if(S.kind==="local"&&S.id===p){y=`sm->${Wn(S.id,"local",m.stateMachineFieldAliases)}`;break}}let g=`__yo_vtable_${_}`;return y?(n.emitter.emitLine(`${t}${y} = (${u}){`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${g}`),n.emitter.emitLine(`${t}};`),y):(n.emitter.emitLine(`${t}${u} ${p} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${g}`),n.emitter.emitLine(`${t}};`),p)}function Lf(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function Af(e,t,n){var a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b;let r=e.args[0],i=e.args[1],o=n;if(I(r)&&T(r,M.comptime,1)||I(r)&&T(r,M.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&X(r)&&X(i)){let k=r.token.value,A=i.token.value,S=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(O=>O.name===k),V=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(O=>O.name===A);if(k===A&&(S||V))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let k=e.$.runtimeDestructurings,A=B(i,t,n),S=(s=i.$)==null?void 0:s.type;return k.forEach(({label:V,type:O,variableName:x})=>{let N=ve(x,O.isExtern==="c"),P=Bt(O,N,n);if(S&&xe(S)&&S.isNewtype&&S.fields.length===1){let G=S.fields[0];if(G&&G.label===V){n.emitter.emitLine(`${t}${P} = ${A}; // Destructuring ${V} (newtype)`);return}}let R=V.match(/^\d+$/)?`_${V}`:ve(V,O.isExtern==="c");if(S&&Qe(S)&&!V.match(/^\d+$/)){let G=S.fields.findIndex(Q=>Q.label===V);R=G>=0?`_${G}`:R}let H=S&&Ht(S)?"->":".";n.emitter.emitLine(`${t}${P} = ${A}${H}${R}; // Destructuring ${V}`)}),""}if(X(r)){let k=r.token.value;if(!((l=r.$)!=null&&l.type))return`// Error: No type information for variable ${k}
10272
+ `;if((u=r.$)!=null&&u.env){let V=_e(r.$.env,k);if(V.length>0&&V[V.length-1].isCompileTimeOnly)return""}let A=!1,S;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((c=r.$)!=null&&c.env)){let V=_e(r.$.env,k);if(V.length>0){let O=V[V.length-1],x=O.isOwningTheSameRcValueAs?O.isOwningTheSameRcValueAs.id:O.id;o.stateMachineVariables.has(x)&&(A=!0,S=x)}}if(Xe(r.$.type))if(I(i)&&T(i,M.array)){let V=B(i,t,n);if(A&&S){let O=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${O} = ${V};`)}else if(!De(r.$.type)){let O=Bt(r.$.type,k,n);n.emitter.emitLine(`${t}${O} = ${V};`)}}else{let V;if((_=i.$)!=null&&_.variableName){let O=Ye(i.$.variableName,i.$.env),x=B(i,t,n);if(!A){let N=Bt(i.$.type,O,n);O!==x&&n.emitter.emitLine(`${t}${N} = ${x};`)}V=O}else V=B(i,t,n);if(A&&S){let O=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${O} = ${V};`)}else if(!De(r.$.type)){let O=Bt(r.$.type,k,n);n.emitter.emitLine(`${t}${O} = ${V};`)}}else{let V,O=I(i)&&((f=i.$)==null?void 0:f.closureFunctionValue)&&((p=i.$)==null?void 0:p.type)&&Nn(i.$.type),x=I(i)&&wn(i);if((m=i.$)!=null&&m.variableName){let N=Ye(i.$.variableName,i.$.env),P=Ye(k,r.$.env);if(N===P){if(V=B(i,t,n),!O&&!x&&((y=i.$)!=null&&y.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let R=i.$.deferredDupExpressions[0];I(R)&&((g=R.$)!=null&&g.variableName)&&(V=Ye(R.$.variableName,R.$.env))}}else if(X(i)&&N===Ye(i.token.value,i.$.env)){if(V=B(i,t,n),!O&&!x&&((h=i.$)!=null&&h.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let R=i.$.deferredDupExpressions[0];I(R)&&((v=R.$)!=null&&v.variableName)&&(V=Ye(R.$.variableName,R.$.env))}}else if(X(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&(($=i.$)!=null&&$.env)&&o.currentClosureCaptureFrameLevel!==void 0&&ai(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let R=o.currentClosureType;if(R&&R.isClosure){let H=Object.values(o.types).find(G=>G.type===R);H?V=`((${`${H.cName}_capture`}*)closure_context->data)->${Ye(i.token.value,i.$.env)}`:V=`closure_context->${Ye(i.token.value,i.$.env)}`}else V=`closure_context->${Ye(i.token.value,i.$.env)}`}else{let R=B(i,t,n);if(R.trim()!==N){let H=i.$.convertedRuntimeType||i.$.type,G=Bt(H,N,n);n.emitter.emitLine(`${t}${G} = ${R};`)}if(!O&&!x&&((E=i.$)!=null&&E.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let H=i.$.deferredDupExpressions[0];I(H)&&((C=H.$)!=null&&C.variableName)?V=Ye(H.$.variableName,H.$.env):V=N}else V=N}}else if(V=B(i,t,n),!O&&!x&&((w=i.$)!=null&&w.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Rt(i,t,o);let N=i.$.deferredDupExpressions[0];I(N)&&((b=N.$)!=null&&b.variableName)&&(V=Ye(N.$.variableName,N.$.env))}if(Lt(r.$.type)){let N=r.$.type;if(A&&S){let P=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${P} = ${V};`)}else if(!De(N)){let P=Bt(N,k,n);n.emitter.emitLine(`${t}${P} = ${V};`)}}else if(A&&S){let N=Wn(S,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${N} = ${V};`)}else{let N=qt(i.$.env.modulePath,V.trim()),P;if(N&&n.tempVarAsyncStructNames){let R=n.tempVarAsyncStructNames.get(V.trim());R?P=`${R}*`:P=Y(r.$.type,n)}else P=Y(r.$.type,n);De(r.$.type)||n.emitter.emitLine(`${t}${P} ${Ye(k,r.$.env)} = ${V};`)}}return""}}var fh=0;function Ua(e,t,n,r,i=" "){var o,a,s,l,u,c;if(F.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(F.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(F.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(F.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(F.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(F.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(F.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(F.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(F.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(F.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(F.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(F.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(F.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(F.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(F.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(F.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(F.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(F.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(F.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(F.__yo_noop.includes(e))return"";if(F.__yo_return_self.includes(e))return`(*${t[0]})`;if(F.__yo_ms_sleep.includes(e))return Fn(r.targetInfo)?`Sleep(${t[0]})`:`usleep((${t[0]}) * 1000)`;if(F.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(F.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let _=Y(n.$.type,r),f=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return f&&ze(f)&&!mr(f)?`((${_})((${t[0]}).tag))`:`((${_})(${t[0]}))`}else{if(F.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(F.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(F.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(F.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(F.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(F.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(F.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(F.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(F.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${Y(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(F.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(F.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(F.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(F.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let _=Y(n.$.type,r),f=`__yo_uninit_${fh++}`;return r.emitter.emitLine(`${i}${_} ${f};`),f}else return F.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${Y(n.$.type,r)})(${t[0]}))`:F.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function If(e,t,n){var c,_,f,p;let r=e.args[0];if(!r)return"// Error: __yo_iso_extract requires exactly 1 argument";let i=B(r,t,n),o=(c=r.$)==null?void 0:c.type;if(!o||!pn(o))return"// Error: __yo_iso_extract requires an Iso type";let a=Y(o,n),s=(_=e.$)==null?void 0:_.type;if(s&&((f=n.isoTypes)!=null&&f.has(a))){let m=n.isoTypes.get(a);m.optionTypeCName||(m.optionTypeCName=Y(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(p=e.$)==null?void 0:p.variableName;return u&&s?(n.emitter.emitLine(`${t}${Y(s,n)} ${u} = ${l};`),u):l}function Sf(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=B(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!pn(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${Y(o,n)}(${i})`}function mu(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&pn(t.value)&&e.args.length===1}function Nf(e,t,n){var c;if(!mu(e))return"/* Error: generateIsoTypeCall called on non-Iso type call */";let i=((c=e.func.$)==null?void 0:c.value).value,o=i.childType,a=e.args[0],s=B(a,t,n),l=Y(i,n),u=Y(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 Ti(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function Ei(e,t,n){var r,i,o,a,s,l,u,c;if(I(e)&&T(e,M.begin)){let _=e.args,f=n,p=f.pendingDeferredDrops,m=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];f.pendingDeferredDrops=[...m,...p??[]];let y=f.consumedVarPendingDrops,g=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];f.consumedVarPendingDrops=[...g,...y??[]];for(let v=0;v<_.length-1;v++){let $=_[v],E=B($,t,n);if(E&&n.emitter.emitLine(`${t}${E};`),Ot((o=$.$)==null?void 0:o.controlFlow))break}let h="";if(_.length>0){let v=_[_.length-1];if((a=v.$)!=null&&a.deferredDupExpressions&&v.$.deferredDupExpressions.length>0){if((s=v.$)!=null&&s.variableName){let E=v.$.variableName;v.$.variableName=void 0;let C=B(v,t,n);v.$.variableName=E;let w=Y(v.$.type,n),b=Ye(E,v.$.env);b!==C&&n.emitter.emitLine(`${t}${w} ${b} = ${C};`)}Rt(v,t,n);let $=v.$.deferredDupExpressions[0];I($)&&((l=$.$)!=null&&l.variableName)?h=Ye($.$.variableName,$.$.env):h=B(v,t,n)}else h=B(v,t,n)}return(u=e.$)!=null&&u.deferredDropExpressions&&_n(e,t,n),f.pendingDeferredDrops=p,f.consumedVarPendingDrops=y,h}else return(c=e.$)!=null&&c.deferredDupExpressions&&Rt(e,t,n),B(e,t,n)}function xf(e,t,n){var y,g,h,v,$,E,C,w,b,k,A,S,V;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&De(i);if(!o&&r){let O=Y(i,n);n.emitter.emitLine(`${t}${O} ${r};`)}let a=B(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return dh(e,t,n,a,s,r,o);let l,u;if(tt(s)?(u=s.childType,l=s.tag):Ht(s)?(u=s,l="ref_semantics"):u=s,!ze(u))return'// Error: "match" expression requires an enum type';if(!((g=n.types[u.id])==null?void 0:g.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let _=xn(u);if(_){let O=e.args.slice(1),x=null,N=null;for(let P of O)if(I(P)&&T(P,"=>",2)){if(!((v=(h=P.args[0])==null?void 0:h.$)!=null&&v.caseExecuted))continue;let R=P.args[0],H=P.args[1];if(R&&H&&I(R)&&T(R,"."))x={caseBody:H};else{let G=R.func;if(G&&I(G)&&T(G,".")){let Q=G.args[0];if(Q&&X(Q)){let K=Q.token.value;N={caseBody:H,variantName:K,casePattern:R}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),N){let P;if(I(N.casePattern)&&N.casePattern.args.length>0){let Q=N.casePattern.args[0];if(Q&&X(Q)){P=ve(Q.token.value);let K=_;n.emitter.emitLine(`${t} ${Y(K,n)} ${P} = ${a};`)}}let R=n;P&&(R.inAsyncStateMachine||R.inEffectStateMachine)&&(R.localShadowedVariables||(R.localShadowedVariables=new Set),R.localShadowedVariables.add(P));let H=Ei(N.caseBody,t+" ",n);P&&R.localShadowedVariables&&R.localShadowedVariables.delete(P);let G=Ti(H);if(!o&&r&&!G){let Q=H||a;n.emitter.emitLine(`${t} ${r} = ${Q};`)}else H&&H!==""&&n.emitter.emitLine(`${t} ${H};`)}if(n.emitter.emitLine(`${t}} else {`),x){let P=Ei(x.caseBody,t+" ",n),R=Ti(P);!o&&r&&!R?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(mr(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let O=n.insideMatch;n.insideMatch=!0;let x=e.args.slice(1);for(let N=0;N<x.length;N++){let P=x[N];if(I(P)&&T(P,"=>",2)){if(!((E=($=P.args[0])==null?void 0:$.$)!=null&&E.caseExecuted))continue;let R=P.args[0],H=P.args[1];if(R&&H&&X(R)&&R.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let G=Ei(H,t+" ",n);!o&&r&&G&&!Ti(G)?n.emitter.emitLine(`${t} ${r} = ${G};`):G&&n.emitter.emitLine(`${t} ${G};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(R&&H&&I(R)&&T(R,".",1)){let G=R.args[0].token.value,Q=In(u,G,n);n.emitter.emitLine(`${t}case ${Q}: {`);let K=Ei(H,t+" ",n);!o&&r&&K&&!Ti(K)?n.emitter.emitLine(`${t} ${r} = ${K};`):K&&n.emitter.emitLine(`${t} ${K};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=O,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let p=n.insideMatch;n.insideMatch=!0;let m=e.args.slice(1);for(let O=0;O<m.length;O++){let x=m[O];if(I(x)&&T(x,"=>",2)){if(!((w=(C=x.args[0])==null?void 0:C.$)!=null&&w.caseExecuted))continue;let N=x.args[0],P=x.args[1];if(N&&P&&X(N)&&N.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let R=Ei(P,t+" ",n);!o&&r&&R&&!Ti(R)?n.emitter.emitLine(`${t} ${r} = ${R};`):R&&n.emitter.emitLine(`${t} ${R};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(N&&P&&I(N)&&N.func.tag==="Atom"&&N.func.token.value==="."&&N.args.length>=1){let R=N.args[0].token.value,H=In(u,R,n);if(n.emitter.emitLine(`${t}case ${H}: {`),N.args.length>1){let Q=u.variants.find(K=>K.name===R);if(Q&&Q.fields){let K=N.args.slice(1);if(K.some(ie=>I(ie)&&T(ie,":",2))){for(let ie of K)if(I(ie)&&T(ie,":",2)){let ce=ie.args[0],ee=ie.args[1];if(!X(ce))continue;let pe=ce.token.value,Z=Q.fields.find(Ee=>Ee.label===pe);if(!Z||De(Z.type))continue;if(X(ee)){let Ee=ee.token.value;if(Ee!=="_"){let Fe=ve(Ee),be=ve(pe),Ue=Y(Z.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Ue} ${Fe} = ${a}${te}data.${R}.${be};`);let le=n;if((le!=null&&le.inAsyncStateMachine||le!=null&&le.inEffectStateMachine)&&le.stateMachineVariables){let fe;if((b=ee.$)!=null&&b.env){let Se=_e(ee.$.env,Ee);Se.length>0&&(fe=Se[Se.length-1].id)}if(fe&&le.stateMachineVariables.has(fe)){let Se=Wn(fe,"local",le.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${Se} = ${Fe};`)}}}}}}else for(let ie=0;ie<K.length&&ie<Q.fields.length;ie++){let ce=K[ie],ee=Q.fields[ie];if(X(ce)&&ee){if(De(ee.type))continue;let pe=ce.token.value;if(pe!=="_"){let Z=ve(pe),Ee=ve(ee.label),Fe=Y(ee.type,n),be=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Fe} ${Z} = ${a}${be}data.${R}.${Ee};`);let Ue=n;if((Ue!=null&&Ue.inAsyncStateMachine||Ue!=null&&Ue.inEffectStateMachine)&&Ue.stateMachineVariables){let te;if((k=ce.$)!=null&&k.env){let le=_e(ce.$.env,pe);le.length>0&&(te=le[le.length-1].id)}te&&Ue.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${Wn(te,"local",Ue.stateMachineFieldAliases)} = ${Z};`)}}}}}}if(I(P)&&T(P,"=>",2)){let Q=P.args[0];n.emitter.emitLine(`${t} ${Y(s,n)} ${ve(Q.token.value)} = ${a};`),P=P.args[1]}let G=Ei(P,t+" ",n);!o&&r&&G&&!Ti(G)?n.emitter.emitLine(`${t} ${r} = ${G};`):G&&n.emitter.emitLine(`${t} ${G};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(N&&P&&I(N)&&I(N.func)&&N.func.func.tag==="Atom"&&N.func.func.token.value==="."&&N.func.args.length===1){let R=N.func.args[0].token.value,H=In(u,R,n),G=N.args;n.emitter.emitLine(`${t}case ${H}: {`);let Q=u.variants.find(j=>j.name===R);if(Q&&Q.fields&&G.length>0)if(G.some(ie=>I(ie)&&T(ie,":",2))){for(let ie of G)if(I(ie)&&T(ie,":",2)){let ce=ie.args[0],ee=ie.args[1];if(!X(ce))continue;let pe=ce.token.value,Z=Q.fields.find(Ee=>Ee.label===pe);if(!Z)continue;if(X(ee)){let Ee=ee.token.value;if(Ee!=="_"){let Fe=ve(Ee);if(De(Z.type))n.emitter.emitLine(`${t} // ${Fe} is unit type (no value)`);else{let be=ve(pe),Ue=Y(Z.type,n),te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Ue} ${Fe} = ${a}${te}data.${R}.${be};`);let le=n;if((le!=null&&le.inAsyncStateMachine||le!=null&&le.inEffectStateMachine)&&le.stateMachineVariables){let fe;if((A=ee.$)!=null&&A.env){let Se=_e(ee.$.env,Fe);Se.length>0&&(fe=Se[Se.length-1].id)}fe&&le.stateMachineVariables.has(fe)&&n.emitter.emitLine(`${t} sm->${Wn(fe,"local",le.stateMachineFieldAliases)} = ${Fe};`)}}}}}}else for(let ie=0;ie<Math.min(G.length,Q.fields.length);ie++){let ce=G[ie],ee=Q.fields[ie];if(ce.tag==="Atom"&&ee){let pe=ce.token.value;if(pe!=="_"){let Z=ve(pe);if(De(ee.type))n.emitter.emitLine(`${t} // ${Z} is unit type (no value)`);else{let Ee=ve(ee.label),Fe=Y(ee.type,n),be=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Fe} ${Z} = ${a}${be}data.${R}.${Ee};`);let Ue=n;if((Ue!=null&&Ue.inAsyncStateMachine||Ue!=null&&Ue.inEffectStateMachine)&&Ue.stateMachineVariables){let te;if((S=ce.$)!=null&&S.env){let le=_e(ce.$.env,pe);le.length>0&&(te=le[le.length-1].id)}te&&Ue.stateMachineVariables.has(te)&&n.emitter.emitLine(`${t} sm->${Wn(te,"local",Ue.stateMachineFieldAliases)} = ${Z};`)}}}}}if(I(P)&&T(P,"=>",2)){let j=P.args[0];n.emitter.emitLine(`${t} ${Y(s,n)} ${ve(j.token.value)} = ${a};`),P=P.args[1]}let K=Ei(P,t+" ",n);!o&&r&&K&&!Ti(K)?n.emitter.emitLine(`${t} ${r} = ${K};`):K&&n.emitter.emitLine(`${t} ${K};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=p,n.emitter.emitLine(`${t}}`),(V=e.$)!=null&&V.deferredDropExpressions&&_n(e,t,n),o?"":r??""}function ph(e){return I(e)?T(e,"|",2):!1}function yu(e){if(!ph(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...yu(n),...yu(r)]}function Vf(e){if(e!==void 0){if(ht(e))return String(e.value);if(dt(e))return e.value?"true":"false"}}function dh(e,t,n,r,i,o,a){var u,c,_,f,p;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let m=0;m<l.length;m++){let y=l[m];if(I(y)&&T(y,"=>",2)){if(!((c=(u=y.args[0])==null?void 0:u.$)!=null&&c.caseExecuted))continue;let g=y.args[0],h=y.args[1];if(!g||!h)continue;if(X(g)&&g.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let C=Ei(h,t+" ",n);!a&&o&&C&&!Ti(C)?n.emitter.emitLine(`${t} ${o} = ${C};`):C&&n.emitter.emitLine(`${t} ${C};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let v=yu(g),$=(_=g.$)==null?void 0:_.primitivePatternValues;if($&&$.length>0)for(let C of $){let w=Vf(C);w!==void 0&&n.emitter.emitLine(`${t}case ${w}:`)}else for(let C of v){let w=(f=C.$)==null?void 0:f.value,b=Vf(w);b!==void 0&&n.emitter.emitLine(`${t}case ${b}:`)}n.emitter.emitLine(`${t}{`);let E=Ei(h,t+" ",n);!a&&o&&E&&!Ti(E)?n.emitter.emitLine(`${t} ${o} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(p=e.$)!=null&&p.deferredDropExpressions&&_n(e,t,n),a?"":o??""}function Df(e,t,n){var r,i;if((r=e.$)!=null&&r.runtimeDestructurings&&e.$.runtimeDestructurings.length>0){let o=e.args[0];if(!o||!((i=o.$)!=null&&i.type))return"// Error: open expression has no argument or type";let a=o.$.type,s=o.$.value;if(xe(a)&&s===void 0){let l=B(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let _=Y(c.type,n),f=ve(c.variableName),p=ve(c.label);n.emitter.emitLine(`${t}${_} ${f} = ${l}.${p};`)}}}return""}function Mf(e,t,n,r){if(!t.callType)return e;let i=un(t.callType);if(i.length===0)return e;let o=i.map(()=>"NULL").join(", "),s=`__yo_spawn_wrapper_${$t(r)}`;return n.emitter.emitDeclarationLine(`
10273
+ // Spawn wrapper: bridges __yo_thread_fn to closure with evidence params
10274
+ static void ${s}(void* closure) {
10275
+ ${e}(closure, ${o});
10276
+ }
10277
+ `),s}function Of(e,t,n){var g,h,v,$,E,C;let r=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(h=i.$)==null?void 0:h.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(z(o)){let w=o;w.resolvedConcreteType&&(a=w.resolvedConcreteType.id,s=w.resolvedConcreteType)}else xe(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=Y(s,n),_=Mf(u,l,n,((v=e.$)==null?void 0:v.env.modulePath)??""),f=B(i,t,n),p=($=i.$)!=null&&$.variableName?Ye(i.$.variableName,i.$.env):f,m=`_thread_closure_data_${$t(((E=e.$)==null?void 0:E.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${m} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${m} = ${p};`);let y=(C=e.$)==null?void 0:C.variableName;return y?(n.emitter.emitLine(`${t}__yo_thread_t ${y} = __yo_thread_spawn(${_}, ${m});`),y):`__yo_thread_spawn(${_}, ${m})`}function Rf(e,t,n){var y,g,h,v,$;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(z(o)){let E=o;E.resolvedConcreteType&&(a=E.resolvedConcreteType.id,s=E.resolvedConcreteType)}else xe(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=Y(s,n),_=Mf(u,l,n,((h=e.$)==null?void 0:h.env.modulePath)??""),f=B(i,t,n),p=(v=i.$)!=null&&v.variableName?Ye(i.$.variableName,i.$.env):f,m=`_worker_closure_data_${$t((($=e.$)==null?void 0:$.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${m} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${m} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${_}, ${m});`),""}function Pf(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${B(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function Uf(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 yr(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&&je(i.type))return;let o=`var_${i.id}`,a=ve(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function Gf(e,t,n){var o,a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt,q,oe,re,ne,me,$e,Re,ft,an,St,wt,An,mt,sn,Jt,Gt,en,de,ke,Te,he;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Oe(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&_n(e,t,n),De(e.$.type)?"":Un(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(Ce(r)?r.specializedType??r.type:void 0);if(J(i)){let we=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(we){let Ne=!1;if(I(e.func)&&T(e.func,".",2)){let ge=e.func.args[0],Me=(c=ge==null?void 0:ge.$)==null?void 0:c.type;Me&&Ke(Me)&&(Ne=!0)}let ot=we.map((ge,Me)=>{var Be,at,qe,He,Ie,pt,Le,nt,_t;if((Be=ge.$)!=null&&Be.variableName&&((at=ge.$)!=null&&at.type)){let Ct=n,xt=Ct.currentClosureCaptures&&Ct.currentClosureCaptures.includes(ge.$.variableName)&&X(ge)&&ge.$.env&&Ct.currentClosureCaptureFrameLevel!==void 0&&ai(ge.token.value,ge.$.env,Ct.currentClosureCaptureFrameLevel),At=B(ge,t,n),Dt=!1;if(X(ge)&&ge.$.env&&ge.$.variableName){let Hn=_e(ge.$.env,ge.$.variableName);Hn.length>0&&Hn[Hn.length-1].isCompileTimeOnly&&(Dt=!0)}let mn=(Ct.inAsyncStateMachine||Ct.inEffectStateMachine)&&At.startsWith("sm->"),ur=!1;if(At&&At!==ge.$.variableName&&!xt&&!mn&&!Dt){let Hn=Ye(ge.$.variableName,ge.$.env);if(At!==Hn){let Qn=ge.$.convertedRuntimeType||ge.$.type,li=Bt(Qn,ge.$.variableName,n);n.emitter.emitLine(`${t}${li} = ${At};`),ur=!0,yr(ge.$.variableName,t,n)}}let Ci=ur?ge.$.variableName:At;if((qe=ge.$)!=null&&qe.deferredDupExpressions&&ge.$.deferredDupExpressions.length>0){let Hn=new Set;(He=ge.$)!=null&&He.variableName&&Hn.add(Ye(ge.$.variableName,ge.$.env)),At&&Hn.add(At),X(ge)&&Hn.add(Ye(ge.token.value,ge.$.env));let Qn=ge.$.deferredDupExpressions.find(li=>{var Ui;let bi=Ns(li);return bi?Hn.has(Ye(bi,(Ui=li.$)==null?void 0:Ui.env)):!1});Qn&&(Rt(ge,t,Ct),I(Qn)&&((Ie=Qn.$)!=null&&Ie.variableName)&&(Ci=Ye(Qn.$.variableName,Qn.$.env)))}if(Ne&&Me===0){if(I(e.func)&&T(e.func,".",2)){let Qn=e.func.args[0],li=(pt=Qn==null?void 0:Qn.$)==null?void 0:pt.type,bi=e.func.args[1];if(X(bi)&&Ke(li)){let Ui=bi.token.value;if(li.trait.fields.find(Qs=>Qs.label===Ui))return mn?At:ve(Ci,ge.$.type.isExtern==="c")}}let Hn=(Le=ge.$)==null?void 0:Le.type;return Hn&&tt(Hn)?mn?`${At}->data`:`${ve(Ci,ge.$.type.isExtern==="c")}->data`:mn?`(${At}).data`:`(${ve(Ci,ge.$.type.isExtern==="c")}).data`}else return xt||mn||Dt?At:ve(Ci,ge.$.type.isExtern==="c")}else if(Ne&&Me===0){let Ct=B(ge,t,n);if(I(e.func)&&T(e.func,".",2)){let At=e.func.args[0],Dt=(nt=At==null?void 0:At.$)==null?void 0:nt.type,mn=e.func.args[1];if(X(mn)&&Ke(Dt)){let ur=mn.token.value;if(Dt.trait.fields.find(Hn=>Hn.label===ur))return Ct}}let xt=(_t=ge.$)==null?void 0:_t.type;return xt&&tt(xt)?`(${Ct})->data`:`(${Ct}).data`}else return B(ge,t,n)}),Ve=ot.join(", ");if(i.isExtern==="yo"&&i.externName){let ge=i.externName;return so.includes(ge)?Ua(ge,ot,e,n,t):ge==="__yo_thread_spawn"?Of(e,t,n):ge==="__yo_worker_spawn"?Rf(e,t,n):De(i.return.type)?(n.emitter.emitLine(`${t}${ge}(${Ve});`),(_=e.$)!=null&&_.deferredDropExpressions&&_n(e,t,n),""):`${ge}(${Ve})`}{let ge=n;if((f=ge.currentEvidenceParams)!=null&&f.size){let Me=(p=e.func.token)==null?void 0:p.value,Be;if(Me==="."&&I(e.func)&&T(e.func,".",2)){let at=e.func.args[1];at&&X(at)&&(Me=at.token.value);let qe=e.func.args[0];if(qe&&X(qe))Be=qe.token.value;else if(qe&&I(qe)&&T(qe,".",2)){let He=qe.args[0];He&&X(He)&&(Be=He.token.value)}}if(Me&&Me!=="."){for(let at of ge.currentEvidenceParams.values())if(at.fieldLabel===Me||at.implicitLabel===Me||at.fieldPath[at.fieldPath.length-1]===Me){if(Be&&Be!==at.implicitLabel)continue;return Bf(at.cParamName,i,ot,we,e,t,ge,at)}}}}if(Ce(r)){let ge=Wo(r);if(ge)return Ua(ge,ot,e,n,t);let Me=r.specializedType??r.type,Be=n;if(Be.currentEvidenceParams&&r.isModuleEffectMember){let qe,He=((m=e.func.$)==null?void 0:m.env)??((y=e.$)==null?void 0:y.env);if(He)for(let Ie of Be.currentEvidenceParams.values()){let pt=_e(He,Ie.implicitLabel),Le=pt[pt.length-1],nt=(g=Le==null?void 0:Le.value)==null?void 0:g[0];if(nt&&Et(nt)){let _t=nt,Ct=!0;for(let xt=0;xt<Ie.fieldPath.length-1;xt++){let At=Ie.fieldPath[xt],Dt=_t.type.fields.findIndex(mn=>mn.label===At);if(Dt>=0&&_t.fields[Dt]&&Et(_t.fields[Dt]))_t=_t.fields[Dt];else{Ct=!1;break}}if(Ct){let xt=Ie.fieldPath[Ie.fieldPath.length-1],At=_t.type.fields.findIndex(Dt=>Dt.label===xt);if(At>=0){let Dt=_t.fields[At];if(Dt&&Ce(Dt)&&Dt.funcId===r.funcId){qe=Ie;break}}}}}if(qe){let Ie=qe.cParamName;return Bf(Ie,Me,ot,we,e,t,Be,qe)}}let at=(h=n.functions[r.funcId])==null?void 0:h.cName;if(at){let qe=r.specializedType??r.type,He=un(qe);if(He.length===0&&r.specializedType){let Le=un(r.type);Le.length>0&&Le.some(nt=>nt.fieldFunctionType.forallParameters&&nt.fieldFunctionType.forallParameters.length>0)&&(He=Le)}if(He.length>0){let{args:Le,isHandlerInstallation:nt}=gu(He,r,e,n);if(Le.length>0){let _t=Ve?`${Ve}, ${Le.join(", ")}`:Le.join(", ");return hu(at,_t,Me,e,we,t,n,nt)}}let Ie=r.isControlFunction||r.isModuleEffectMember||((E=($=(v=r.body)==null?void 0:v.$)==null?void 0:$.effectAnalysis)==null?void 0:E.hasEffects),pt=!1;if(Ie){if(r.isControlFunction||r.isModuleEffectMember){let Le=((w=(C=e.func)==null?void 0:C.$)==null?void 0:w.env)??((b=e.$)==null?void 0:b.env);if(Le){let nt=Na(Le,_t=>{var Ct;return _t.isImplicit===!0&&Ce((Ct=_t.value)==null?void 0:Ct[0])&&_t.value[0].funcId===r.funcId});nt>=0&&nt>Le.functionDeclarationFrameLevel&&((k=Le.frames[nt])!=null&&k.isBeginBlockFrame)&&(pt=!0)}}else if(r.specializedType){let Le=un(r.type);if(Le.length>0){let nt=((S=(A=e.func)==null?void 0:A.$)==null?void 0:S.env)??((V=e.$)==null?void 0:V.env);if(nt)for(let _t of Le){let Ct=Na(nt,xt=>xt.isImplicit===!0&&(xt.name===_t.implicitLabel||xt.name===_t.fieldLabel));if(Ct>=0&&Ct>nt.functionDeclarationFrameLevel&&((O=nt.frames[Ct])!=null&&O.isBeginBlockFrame)){pt=!0;break}}}}}if(De(Me.return.type))return n.emitter.emitLine(`${t}${at}(${Ve});`),(x=e.$)!=null&&x.deferredDropExpressions&&_n(e,t,n),Ie&&zf(t,n,pt,e),"";{let Le=(N=e.$)==null?void 0:N.variableName;if(Le){let nt=((P=r.specializedType)==null?void 0:P.return.type)??Me.return.type,_t=(R=e.$)==null?void 0:R.type,Ct=_t&&je(_t),xt=nt&&je(nt),At;if(Ct&&xt){let Dt=r.body;if(Dt&&T(Dt,"begin")){let mn=Dt.args;if(mn.length>0){let ur=mn[mn.length-1];wn(ur)&&(Dt=ur)}}if(Dt&&wn(Dt)&&((H=Dt.$)!=null&&H.asyncStateMachineStructName)){let mn=Dt.$.asyncStateMachineStructName;At=`${mn}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(Le,mn)}else _t&&z(_t)&&_t.resolvedConcreteType?At=Y(_t,n):At=Y(nt,n)}else At=Y(nt??_t,n);return n.emitter.emitLine(`${t}${At} ${Le} = ${at}(${Ve});`),yr(Le,t,n),(G=e.$)!=null&&G.deferredDropExpressions&&_n(e,t,n),Ie&&zf(t,n,pt,e),Le}else return`// Error: Regular function call returns ${Y(((Q=r.specializedType)==null?void 0:Q.return.type)??Me.return.type,n)} but no temp variable assigned`}}}else{let ge=n.externFunctions[i.id];if(ge){let Me=ge.cName;return(K=e.$)!=null&&K.deferredDropExpressions&&_n(e,t,n),`${Me}(${Ve})`}else{let Me=B(e.func,t,n);if(r&&J(r.type)){let Le=un(r.type);if(Le.length>0){let{args:nt,isHandlerInstallation:_t}=gu(Le,r,e,n);if(nt.length>0){let Ct=Ve?`${Ve}, ${nt.join(", ")}`:nt.join(", ");return hu(Me,Ct,i,e,we,t,n,_t)}}}let Be=((j=e.$)==null?void 0:j.type)??i.return.type,at=Y(Be,n),qe=i.parameters.filter(Le=>!Le.isCompileTimeOnly).map(Le=>Y(Le.type,n)),He=`((${at} (*)(${qe.join(", ")}))${Me})`,Ie=n,pt=Me.includes("__capture.")&&!!Ie.inAsyncStateMachine;if(pt&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),De(i.return.type)||De(Be)){if(n.emitter.emitLine(`${t}${He}(${Ve});`),(ie=e.$)!=null&&ie.deferredDropExpressions&&_n(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),we){for(let Le of we)if((ce=Le.$)!=null&&ce.variableName&&((ee=Le.$)!=null&&ee.type)&&Je(Le.$.type)){let nt=Uf(ve(Le.$.variableName),n),_t=hi(nt,Le.$.type,n);_t&&(n.emitter.emitLine(`${t} ${_t};`),n.emitter.emitLine(`${t} memset(&${nt}, 0, sizeof(${nt}));`))}}br({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let Le=(pe=e.$)==null?void 0:pe.variableName;if(Le){let nt=i.return.type,_t=(Z=e.$)==null?void 0:Z.type,Ct=_t&&nt&&je(_t)&&je(nt)?nt:_t??nt;if(n.emitter.emitLine(`${t}${Y(Ct,n)} ${Le} = ${He}(${Ve});`),yr(Le,t,n),(Ee=e.$)!=null&&Ee.deferredDropExpressions&&_n(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),we){for(let xt of we)if((Fe=xt.$)!=null&&Fe.variableName&&((be=xt.$)!=null&&be.type)&&Je(xt.$.type)){let At=Uf(ve(xt.$.variableName),n),Dt=hi(At,xt.$.type,n);Dt&&(n.emitter.emitLine(`${t} ${Dt};`),n.emitter.emitLine(`${t} memset(&${At}, 0, sizeof(${At}));`))}}br({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return Le}else return`// Error: Function parameter call returns ${Y(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&Nn(i)){let we=i,Ne=Gn(we),ot=Ke(we);{let Ve=Ne.isFn.callType,ge=(Ue=e.$)==null?void 0:Ue.runtimeArgExprsInOrder;if(ge){let Me=n;for(let Ie of ge)if((te=Ie.$)!=null&&te.variableName&&((le=Ie.$)!=null&&le.type)){let pt=Me.currentClosureCaptures&&Me.currentClosureCaptures.includes(Ie.$.variableName)&&X(Ie)&&Ie.$.env&&Me.currentClosureCaptureFrameLevel!==void 0&&ai(Ie.token.value,Ie.$.env,Me.currentClosureCaptureFrameLevel),Le=B(Ie,t,n),nt=!1;if(X(Ie)&&Ie.$.env&&Ie.$.variableName){let Ct=_e(Ie.$.env,Ie.$.variableName);Ct.length>0&&Ct[Ct.length-1].isCompileTimeOnly&&(nt=!0)}let _t=(Me.inAsyncStateMachine||Me.inEffectStateMachine)&&Le.startsWith("sm->");if(Le&&Le!==Ie.$.variableName&&!pt&&!_t&&!nt){let Ct=Ie.$.convertedRuntimeType||Ie.$.type,xt=Bt(Ct,Ie.$.variableName,n);n.emitter.emitLine(`${t}${xt} = ${Le};`),yr(Ie.$.variableName,t,n)}}let Be=B(e.func,t,n),at=ge.map(Ie=>{var pt,Le,nt,_t;if((pt=Ie.$)!=null&&pt.variableName&&((Le=Ie.$)!=null&&Le.type)){if(Me.currentClosureCaptures&&Me.currentClosureCaptures.includes(Ie.$.variableName)&&X(Ie)&&Ie.$.env&&Me.currentClosureCaptureFrameLevel!==void 0&&ai(Ie.token.value,Ie.$.env,Me.currentClosureCaptureFrameLevel))return B(Ie,t,n);{let xt=Ye(Ie.$.variableName,Ie.$.env),At=(Me.inAsyncStateMachine||Me.inEffectStateMachine)&&xt.startsWith("sm->"),Dt=xt;if((nt=Ie.$)!=null&&nt.deferredDupExpressions&&Ie.$.deferredDupExpressions.length>0){Rt(Ie,t,Me);let mn=Ie.$.deferredDupExpressions[0];I(mn)&&((_t=mn.$)!=null&&_t.variableName)&&(Dt=Ye(mn.$.variableName,mn.$.env))}return At?xt:Dt}}else return B(Ie,t,n)}),qe;if(ot){let Ie=[`(${Be}).data`,...at];qe=`(${Be}).vtable->call(${Ie.join(", ")})`}else{let Ie;if(z(we)){let Le=we;Le.resolvedConcreteType&&(Ie=Le.resolvedConcreteType.id)}let pt=Ie?n.implClosureCallMap.get(Ie):void 0;if(pt){let Le=un(Ve);if(Le.length>0){let{args:_t,isHandlerInstallation:Ct}=gu(Le,{},e,Me);if(_t.length>0){let xt=[`&(${Be})`,...at,..._t];return hu(pt.functionCName,xt.join(", "),Ve,e,ge,t,Me,Ct)}}let nt=[`&(${Be})`,...at];qe=`${pt.functionCName}(${nt.join(", ")})`}else{let Le=[`(${Be}).data`,...at];qe=`(${Be}).call(${Le.join(", ")})`}}let He=Ve.return.type;if(De(He))return n.emitter.emitLine(`${t}${qe};`),(fe=e.$)!=null&&fe.deferredDropExpressions&&_n(e,t,n),"";{let Ie=(Se=e.$)==null?void 0:Se.variableName;return Ie?(n.emitter.emitLine(`${t}${Y(He,n)} ${Ie} = ${qe};`),yr(Ie,t,n),(it=e.$)!=null&&it.deferredDropExpressions&&_n(e,t,n),Ie):`// Error: Closure call returns ${Y(He,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(W(r))if(xe(r.value)){let we=r.value,Ne=(ct=e.$)==null?void 0:ct.runtimeArgExprsInOrder,ot=(Ft=n.types[we.id])==null?void 0:Ft.cName,Ve=we.fields.map(Me=>Me.label),ge=(Zt=e.$)==null?void 0:Zt.variableName;if(Ne&&ot&&Ve.length===Ne.length){if(we.isNewtype&&we.fields.length===1){let Me=Ne[0],Be=B(Me,t,n),at=Be;if((q=Me.$)!=null&&q.deferredDupExpressions&&Me.$.deferredDupExpressions.length>0){let He=n;if((oe=Me.$)!=null&&oe.variableName&&((re=Me.$)!=null&&re.type)){let pt=Ye(Me.$.variableName,Me.$.env);if(Be!==pt){let Le=Me.$.type,nt=Y(Le,n);n.emitter.emitLine(`${t}${nt} ${pt} = ${Be};`)}}Rt(Me,t,He);let Ie=Me.$.deferredDupExpressions[0];I(Ie)&&((ne=Ie.$)!=null&&ne.variableName)&&(at=Ye(Ie.$.variableName,Ie.$.env))}let qe=`((${ot})(${at}))`;if(ge&&((me=e.$)!=null&&me.type)){let He=Bt(e.$.type,ge,n);return n.emitter.emitLine(`${t}${He} = ${qe};`),yr(ge,t,n),ge}else return qe}if(we.isReferenceSemantics){let Me=n,Be=Ne.map(He=>{var pt,Le,nt,_t;let Ie=B(He,t,n);if((pt=He.$)!=null&&pt.deferredDupExpressions&&He.$.deferredDupExpressions.length>0){if((Le=He.$)!=null&&Le.variableName&&((nt=He.$)!=null&&nt.type)){let xt=Ye(He.$.variableName,He.$.env);if(Ie!==xt){let At=He.$.type,Dt=Y(At,n);n.emitter.emitLine(`${t}${Dt} ${xt} = ${Ie};`)}}Rt(He,t,Me);let Ct=He.$.deferredDupExpressions[0];if(I(Ct)&&((_t=Ct.$)!=null&&_t.variableName))return Ye(Ct.$.variableName,Ct.$.env)}return Ie}).join(", "),qe=`${`__yo_new_${ot}`}(${Be})`;if(ge&&(($e=e.$)!=null&&$e.type)){let He=Bt(e.$.type,ge,n);return n.emitter.emitLine(`${t}${He} = ${qe};`),yr(ge,t,n),ge}else return qe}else{let Me=n,Be=Ne.map((qe,He)=>{var nt,_t,Ct,xt;let Ie=B(qe,t,n),pt=Qe(we)?`_${He}`:ve(Ve[He],we.isExtern==="c"),Le=Ie;if((nt=qe.$)!=null&&nt.deferredDupExpressions&&qe.$.deferredDupExpressions.length>0){if((_t=qe.$)!=null&&_t.variableName&&((Ct=qe.$)!=null&&Ct.type)){let Dt=Ye(qe.$.variableName,qe.$.env),mn=qe.$.type,ur=Y(mn,n);Ie!==Dt&&n.emitter.emitLine(`${t}${ur} ${Dt} = ${Ie};`)}Rt(qe,t,Me);let At=qe.$.deferredDupExpressions[0];I(At)&&((xt=At.$)!=null&&xt.variableName)&&(Le=Ye(At.$.variableName,At.$.env))}return`.${pt} = `+Le}).join(", "),at=`(${ot}){ ${Be} }`;if(ge&&((Re=e.$)!=null&&Re.type)){let qe=Bt(e.$.type,ge,n);return n.emitter.emitLine(`${t}${qe} = ${at};`),yr(ge,t,n),ge}else return at}}}else{if(Nn(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Pt(r.value)){let we=(ft=e.$)==null?void 0:ft.variableName,Ne=e.args[0];if(Ne&&I(Ne)&&T(Ne,":",2)){let ot=Ne.args[0],Ve=Ne.args[1],ge=(an=n.types[r.value.id])==null?void 0:an.cName;if(ge&&X(ot)&&Ve){let Me=n,Be=ot.token.value,at=Ye(Be,(St=ot.$)==null?void 0:St.env),He=B(Ve,t,n);if((wt=Ve.$)!=null&&wt.deferredDupExpressions&&Ve.$.deferredDupExpressions.length>0){Rt(Ve,t,Me);let pt=Ve.$.deferredDupExpressions[0];I(pt)&&((An=pt.$)!=null&&An.variableName)&&(He=Ye(pt.$.variableName,pt.$.env))}let Ie=`(${ge}){ .${at} = ${He} }`;if(we&&((mt=e.$)!=null&&mt.type)){let pt=Bt(e.$.type,we,n);return n.emitter.emitLine(`${t}${pt} = ${Ie};`),yr(we,t,n),we}else return Ie}}}else if(ze(r.value)){let we=r.value,Ne=(sn=e.$)==null?void 0:sn.runtimeArgExprsInOrder,ot=(Jt=n.types[we.id])==null?void 0:Jt.cName,Ve=(Gt=e.$)==null?void 0:Gt.variableName;if(we.selectedVariantName&&Ne&&ot){if(xn(we)){let qe=we.selectedVariantName,He=we.variants.find(Ie=>Ie.name===qe);if(He){if(!He.fields||He.fields.length===0){let Ie="NULL";if(Ve&&((en=e.$)!=null&&en.type)){let pt=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${pt} = ${Ie};`),yr(Ve,t,n),Ve}else return Ie}else if(He.fields.length===1){let Ie=B(Ne[0],t,n);if(Ve&&((de=e.$)!=null&&de.type)){let pt=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${pt} = ${Ie};`),yr(Ve,t,n),Ve}else return Ie}}}if(mr(we)){let qe=we.selectedVariantName,He=In(we,qe,n);if(Ve&&((ke=e.$)!=null&&ke.type)){let Ie=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${Ie} = ${He};`),yr(Ve,t,n),Ve}else return He}let Be=we.selectedVariantName,at=we.variants.find(qe=>qe.name===Be);if(at){let qe=((Te=at.fields)==null?void 0:Te.filter(Le=>!De(Le.type)))||[],He=n,Ie=Ne.map((Le,nt)=>{var _t,Ct,xt,At,Dt;if(at.fields){let mn=at.fields[nt];if(mn&&!De(mn.type)){let ur=B(Le,t,n),Ci=Ye(mn.label,(_t=Le.$)==null?void 0:_t.env),Hn=ur;if((Ct=Le.$)!=null&&Ct.variableName&&((xt=Le.$)!=null&&xt.type)){let Qn=He.currentClosureCaptures&&He.currentClosureCaptures.includes(Le.$.variableName)&&X(Le)&&Le.$.env&&He.currentClosureCaptureFrameLevel!==void 0&&ai(Le.token.value,Le.$.env,He.currentClosureCaptureFrameLevel),li=(He.inAsyncStateMachine||He.inEffectStateMachine)&&ur.startsWith("sm->"),bi=!1;if(X(Le)&&Le.$.env&&Le.$.variableName){let mo=_e(Le.$.env,Le.$.variableName);mo.length>0&&mo[mo.length-1].isCompileTimeOnly&&(bi=!0)}let Ui=!1;if(ur&&ur!==Le.$.variableName&&!Qn&&!li&&!bi){let mo=Ye(Le.$.variableName,Le.$.env);if(ur!==mo){let Qs=Bt(Le.$.type,Le.$.variableName,n);n.emitter.emitLine(`${t}${Qs} = ${ur};`),Ui=!0,yr(Le.$.variableName,t,n)}}Ui&&(Hn=Ye(Le.$.variableName,Le.$.env))}if((At=Le.$)!=null&&At.deferredDupExpressions&&Le.$.deferredDupExpressions.length>0){Rt(Le,t,He);let Qn=Le.$.deferredDupExpressions[0];I(Qn)&&((Dt=Qn.$)!=null&&Dt.variableName)&&(Hn=Ye(Qn.$.variableName,Qn.$.env))}return`.${Ci} = `+Hn}return""}else return""}).filter(Le=>Le).join(", "),pt=qe.length>0?`(${ot}){ .tag = ${In(we,Be,n)}, .data = { .${Be} = { ${Ie} } } }`:`(${ot}){ .tag = ${In(we,Be,n)} }`;if(Ve&&((he=e.$)!=null&&he.type)){let Le=Bt(e.$.type,Ve,n);return n.emitter.emitLine(`${t}${Le} = ${pt};`),yr(Ve,t,n),Ve}else return pt}}}}else if(Xe(i)){let we=e.args[0];if(we&&I(we)&&T(we,":")){let Ve=B(e.func,t,n),ge=B(we.args[0],t,n),Me=B(we.args[1],t,n),Be=`Slice_${ve(Y(i.childType,n))}`;return n.sliceStructTypes.has(Be)||n.sliceStructTypes.set(Be,{childType:Y(i.childType,n)}),`(${Be}){ .data = &${Ve}.data[${ge}], .length = (${Me}) - (${ge}) }`}else if(we&&X(we)&&we.token.value===":"){let Ve=B(e.func,t,n),ge=i,Me=ge.childType,Be=`Slice_${ve(Y(Me,n))}`;return n.sliceStructTypes.has(Be)||n.sliceStructTypes.set(Be,{childType:Y(Me,n)}),ht(ge.length)?`(${Be}){ .data = &${Ve}.data[0], .length = ${ge.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let Ne=B(e.func,t,n),ot=B(we,t,n);return`${Ne}.data[${ot}]`}else if(Lt(i)){let we=e.args[0];if(we&&I(we)&&T(we,":")){let Ve=B(e.func,t,n),ge=B(we.args[0],t,n),Me=B(we.args[1],t,n),Be=`Slice_${ve(Y(i.childType,n))}`;return n.sliceStructTypes.has(Be)||n.sliceStructTypes.set(Be,{childType:Y(i.childType,n)}),`(${Be}){ .data = &${Ve}.data[${ge}], .length = (${Me}) - (${ge}) }`}else if(we&&X(we)&&we.token.value===":"){let Ve=B(e.func,t,n),ge=`Slice_${ve(Y(i.childType,n))}`;return n.sliceStructTypes.has(ge)||n.sliceStructTypes.set(ge,{childType:Y(i.childType,n)}),`(${ge}){ .data = ${Ve}.data, .length = ${Ve}.length }`}let Ne=B(e.func,t,n),ot=B(we,t,n);return`${Ne}.data[${ot}]`}else if(i&&tt(i)&&Lt(i.childType)){let we=B(e.func,t,n),Ne=B(e.args[0],t,n);return`${we}.data[${Ne}]`}}function zf(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(nr(e+" ",t,r,!1,!0,!1),Wr(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),br({emitter:i,indent:e+" ",resultCode:void 0,debugLabel:void 0});else if(n){i.emitLine(`${e} __yo_effect_escaped = 0;`);let s=(o=t.currentFunctionType)==null?void 0:o.return.type;if(s&&!De(s)){let l=Y(s,t);l!=="void"?(i.emitLine(`${e} ${l} _esc_result;`),i.emitLine(`${e} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${l}));`),i.emitLine(`${e} return _esc_result;`)):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}else{let s=(a=t.currentFunctionType)==null?void 0:a.return.type;if(s&&!De(s)){let l=Y(s,t);l!=="void"?i.emitLine(`${e} return (${l}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function Bf(e,t,n,r,i,o,a,s){var f,p,m,y,g,h,v,$,E,C,w,b;let l=n.join(", "),u=t.return.type,c=a.emitter,_;if(s!=null&&s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let k=(f=i.$)!=null&&f.type?Y(i.$.type,a):Y(u,a),A=[],V=s.fieldFunctionType.parameters.filter(x=>!x.isCompileTimeOnly);for(let x=0;x<V.length;x++){let N=V[x].type,P=z(N)&&((m=(p=r==null?void 0:r[x])==null?void 0:p.$)!=null&&m.type)?r[x].$.type:N,R=J(P)?oi(P,"(*)",a):Y(P,a);A.push(R)}let O=A.join(", ");_=`((${k} (*)(${O}))${e})`}else _=e;if(De(u)){if(c.emitLine(`${o}${_}(${l});`),(y=i.$)!=null&&y.deferredDropExpressions&&_n(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,i,!1,!0,!1),Wr(o+" ",a,i)),a.inAsyncStateMachine)br({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let k=(g=a.currentFunctionType)==null?void 0:g.return.type;if(k&&!De(k)){let A=Y(k,a);A!=="void"?c.emitLine(`${o} return (${A}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let k=(h=i.$)==null?void 0:h.variableName;if(k){let A=(v=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&v.length&&(($=i.$)!=null&&$.type)?i.$.type:u,S=Y(A,a);if(S==="void"||De(A)){if(c.emitLine(`${o}${_}(${l});`),(E=i.$)!=null&&E.deferredDropExpressions&&_n(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,i,!1,!0,!1),Wr(o+" ",a,i)),a.inAsyncStateMachine)br({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let V=(C=a.currentFunctionType)==null?void 0:C.return.type;if(V&&!De(V)){let O=Y(V,a);O!=="void"?c.emitLine(`${o} return (${O}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(c.emitLine(`${o}${S} ${k} = ${_}(${l});`),(w=i.$)!=null&&w.deferredDropExpressions&&_n(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,i,!1,!0,!1),Wr(o+" ",a,i)),a.inAsyncStateMachine)br({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let V=(b=a.currentFunctionType)==null?void 0:b.return.type;if(V&&!De(V)){let O=Y(V,a);O!=="void"?c.emitLine(`${o} return (${O}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),k}else return`${_}(${l})`}}function gu(e,t,n,r){var s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let k of e){let A=`${k.implicitLabel}.${k.fieldLabel}`,S=!1;if(r.currentEvidenceParams){let V=r.currentEvidenceParams.get(A);V&&(i.push(V.cParamName),S=!0)}if(!S){if(o){if(o.effectHandlerInfos)for(let V of o.effectHandlerInfos){if(V.effectParameterName!==k.fieldLabel&&V.effectParameterName!==k.implicitLabel)continue;let O=V.handlerValue;if(O&&Ce(O)){if((u=O.specializedFunctionCaches)!=null&&u.length){let N=O.specializedFunctionCaches[0].specializedFunction,P=(c=r.functions[N.funcId])==null?void 0:c.cName;if(P){i.push(`(void*)${P}`),S=!0,a=!0;break}}let x=(_=r.functions[O.funcId])==null?void 0:_.cName;if(x){i.push(x),S=!0,a=!0;break}}}if(!S&&o.handlerValue&&e.length===1){let V=o.handlerValue;if(V&&Ce(V)){if((f=V.specializedFunctionCaches)!=null&&f.length){let O=V.specializedFunctionCaches[0].specializedFunction,x=(p=r.functions[O.funcId])==null?void 0:p.cName;x&&(i.push(`(void*)${x}`),S=!0,a=!0)}if(!S){let O=(m=r.functions[V.funcId])==null?void 0:m.cName;O&&(i.push(O),S=!0,a=!0)}}}}if(!S){let V=((y=n.func.$)==null?void 0:y.env)??((g=n.$)==null?void 0:g.env);if(V){let O=_e(V,k.implicitLabel),x=tr(V,G=>G.isImplicit===!0&&J(G.type)&&J(k.fieldFunctionType)&&G.type===k.fieldFunctionType),N=O[O.length-1],P=x[x.length-1],R=P&&P!==N?P:N??P,H=(h=R==null?void 0:R.value)==null?void 0:h[0];if(H&&Et(H)){let G=H,Q=!0;for(let K=0;K<k.fieldPath.length-1;K++){let j=k.fieldPath[K],ie=G.type.fields.findIndex(ce=>ce.label===j);if(ie>=0&&G.fields[ie]&&Et(G.fields[ie]))G=G.fields[ie];else{Q=!1;break}}if(Q){let K=k.fieldPath[k.fieldPath.length-1],j=G.type.fields.findIndex(ie=>ie.label===K);if(j>=0){let ie=G.fields[j];if(ie&&Ce(ie)){if(((v=ie.specializedFunctionCaches)==null?void 0:v.length)>0){let ce=ie.specializedFunctionCaches[0].specializedFunction,ee=($=r.functions[ce.funcId])==null?void 0:$.cName;ee&&(i.push(`(void*)${ee}`),S=!0)}if(!S){let ce=(E=r.functions[ie.funcId])==null?void 0:E.cName;ce&&(i.push(ce),S=!0)}}}}}else if(H&&Ce(H)){if((C=H.specializedFunctionCaches)!=null&&C.length){let G=H.specializedFunctionCaches[0].specializedFunction,Q=(w=r.functions[G.funcId])==null?void 0:w.cName;Q&&(i.push(`(void*)${Q}`),S=!0)}if(!S){let G=(b=r.functions[H.funcId])==null?void 0:b.cName;G&&(i.push(G),S=!0)}}S&&(a=!0)}}if(!S&&r.stateMachineVariables){let V=k.fieldPath[k.fieldPath.length-1];for(let[,O]of r.stateMachineVariables)if(O.name===V&&O.kind==="outer"){i.push(`sm->__capture.${V}`),S=!0;break}}if(!S)break}}return{args:i,isHandlerInstallation:a}}function hu(e,t,n,r,i,o,a,s=!1){var c,_,f,p,m;let l=a.emitter,u=n.return.type;if(l.emitLine(`${o}__yo_effect_escaped = 0;`),De(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&_n(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,r,!1,!0,!1),Wr(o+" ",a,r)),a.inAsyncStateMachine)br({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let y=(_=a.currentFunctionType)==null?void 0:_.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),y&&!De(y))if(s){let g=Y(y,a);g!=="void"?(l.emitLine(`${o} ${g} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${g}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let g=Y(y,a);g!=="void"?l.emitLine(`${o} return (${g}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let y=(f=r.$)==null?void 0:f.variableName;if(y){let g=Y(u,a);if(l.emitLine(`${o}${g} ${y} = ${e}(${t});`),yr(y,o,a),(p=r.$)!=null&&p.deferredDropExpressions&&_n(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(nr(o+" ",a,r,!1,!0,!1),Wr(o+" ",a,r)),a.inAsyncStateMachine)br({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let h=(m=a.currentFunctionType)==null?void 0:m.return.type;if(s&&h&&!De(h)){let v=Y(h,a);l.emitLine(`${o} ${v} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${v}));`),l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return _esc_result;`)}else if(h&&!De(h)){let v=Y(h,a);v!=="void"?l.emitLine(`${o} return (${v}){0};`):l.emitLine(`${o} return;`)}else s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),y}else return`${e}(${t})`}}function Wf(e,t,n){var a,s;let r=n.emitter,i=(a=e.$)==null?void 0:a.type;if(!i)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let l=e.args[0];if((s=l.$)!=null&&s.value&&rt(l.$.value)){let u=l.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(u)});`),r.emitLine(`${t}abort();`)}else{let u=B(l,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${u});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${Y(i,n)}*)NULL))`}var mh={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"}},yh={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"},gh={e:"k",x:"w",l:"b",h:"h",w:"w"};function hh(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=yh[e];if(n)return n;let r=mh[e];return r?r[t]??r.x86_64??"r":e}function vh(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?gh[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 Th(e,t,n,r){var h,v,$,E,C;let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let w,b=0;i.length===2&&((h=i[0].$)!=null&&h.value)&&rt(i[0].$.value)&&(w=i[0].$.value.value,b=1);let k=B(i[b],t,n);return{kind:"const_val",name:w,constraint:"",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let w,b=0;i.length===2&&((v=i[0].$)!=null&&v.value)&&rt(i[0].$.value)&&(w=i[0].$.value.value,b=1);let k=B(i[b],t,n);return{kind:"sym",name:w,constraint:"i",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let w=i[0];($=w.$)!=null&&$.value&&rt(w.$.value)&&!(w.tag==="Atom"&&qf(w.token.value))&&(a=w.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=Eh(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let _=hh(u,o),f=i[c];if(f.tag==="Atom"&&f.token.value==="_")return{kind:r,name:a,constraint:_,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if((E=f.$)!=null&&E.value&&W(f.$.value)){let w=f.$.value.value,b=Y(w,n);return{kind:r,name:a,constraint:_,cExpr:"",cType:b,isDiscarded:!1,isVariableTarget:!1}}let p=B(f,t,n),m=Y((C=f.$)==null?void 0:C.type,n),g=(r==="out"||r==="lateout")&&f.tag==="Atom";return{kind:r,name:a,constraint:_,cExpr:p,cType:m,isDiscarded:!1,isVariableTarget:g}}function qf(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function Eh(e,t,n){var r,i;if(e.tag==="Atom"&&qf(e.token.value))return e.token.value;if((r=e.$)!=null&&r.value&&rt(e.$.value))return e.$.value.value;if(T(e,"raw",1)){let o=e;if((i=o.args[0].$)!=null&&i.value&&rt(o.args[0].$.value))return`raw:${o.args[0].$.value.value}`}return"r"}function $h(e,t){var i;let n=[];if((e.func.tag==="Atom"?e.func.token.value:"clobber")==="clobber_abi"){let o=t.targetInfo.arch;if(o==="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(o==="aarch64"){for(let a=0;a<=18;a++)n.push(`x${a}`);n.push("x30");for(let a=0;a<=31;a++)n.push(`v${a}`);n.push("cc","memory")}return n}for(let o of e.args)(i=o.$)!=null&&i.value&&rt(o.$.value)?n.push(o.$.value.value):o.tag==="Atom"&&n.push(o.token.value);return n}function Ch(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 vu=0;function Yf(e,t,n){var V,O;let r=n.emitter,i=(V=e.$)==null?void 0:V.type;if(!i)return"/* Error: asm() missing type information */";if(ao(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${Y(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let x=e.args[a];if(I(x))break;if((O=x.$)!=null&&O.value&&rt(x.$.value))o.push(x.$.value.value),a++;else break}let s=o.join(`
10278
+ `),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let x=e.args[a];if(!I(x)){a++;continue}let N=x.func.tag==="Atom"?x.func.token.value:void 0;if(!N){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(N)?l.push(Th(x,t,n,N)):N==="clobber"||N==="clobber_abi"?u.push(...$h(x,n)):N==="asm_options"&&(c=Ch(x)),a++}let _=new Map;for(let x=0;x<l.length;x++)l[x].name&&_.set(l[x].name,x);let f=s;for(let x=0;x<l.length;x++){let N=l[x];N.kind==="const_val"&&(N.name&&(f=f.replace(new RegExp(`\\{${N.name}(?::[^}]*)?\\}`,"g"),N.cExpr)),f=f.replace(new RegExp(`\\{${x}(?::[^}]*)?\\}`,"g"),N.cExpr))}let p=vh(f,_),m=[],y=[],g=[];for(let x=0;x<l.length;x++){let N=l[x];if(N.isDiscarded){let P=`__asm_discard_${vu++}`;g.push({varName:P,cType:N.cType,operandIdx:x}),r.emitLine(`${t}${N.cType} ${P};`)}else if(N.kind==="out"||N.kind==="lateout"){if(!N.isVariableTarget){if(N.cType){let P=`__asm_out_${vu++}`;m.push({varName:P,cType:N.cType,operandIdx:x}),r.emitLine(`${t}${N.cType} ${P};`)}}}else if(N.kind==="inout"||N.kind==="inlateout"){let P=`__asm_inout_${vu++}`;y.push({varName:P,cType:N.cType,initExpr:N.cExpr,operandIdx:x}),r.emitLine(`${t}${N.cType} ${P} = ${N.cExpr};`)}}let h=c.isVolatile?" __volatile__":"",v=p;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let $=JSON.stringify(v),E=[];for(let x=0;x<l.length;x++){let N=l[x];if(N.kind==="in"||N.kind==="const_val"||N.kind==="sym")continue;let P;N.kind==="out"||N.kind==="lateout"?P=N.kind==="lateout"?"=&":"=":P=N.kind==="inlateout"?"+&":"+";let R=`${P}${N.constraint}`,H=N.name?`[${N.name}] `:"",G;N.isDiscarded?G=g.find(K=>K.operandIdx===x).varName:N.isVariableTarget?G=N.cExpr:N.kind==="out"||N.kind==="lateout"?G=m.find(K=>K.operandIdx===x).varName:G=y.find(K=>K.operandIdx===x).varName,E.push(`${H}"${R}" (${G})`)}let C=[];for(let x=0;x<l.length;x++){let N=l[x];if(N.kind!=="in"&&N.kind!=="sym")continue;let P=N.constraint,R=N.name?`[${N.name}] `:"";C.push(`${R}"${P}" (${N.cExpr})`)}let w=u.map(x=>`"${x}"`),b=E.join(", "),k=C.join(", "),A=w.join(", ");if(r.emitLine(`${t}__asm__${h} (`),r.emitLine(`${t} ${$}`),r.emitLine(`${t} : ${b}`),r.emitLine(`${t} : ${k}`),r.emitLine(`${t} : ${A}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${Y(i,n)}*)NULL))`;if(De(i))return"";let S=[];for(let x=0;x<l.length;x++){let N=l[x];if(!(N.isDiscarded||N.isVariableTarget)&&!(N.kind==="in"||N.kind==="const_val"||N.kind==="sym"))if(N.kind==="out"||N.kind==="lateout"){let P=m.find(R=>R.operandIdx===x);P&&S.push(P.varName)}else{let P=y.find(R=>R.operandIdx===x);P&&S.push(P.varName)}}if(S.length===1)return S[0];if(S.length>1){let x=Y(i,n),N=S.map((P,R)=>`._${R} = ${P}`).join(", ");return`((${x}){ ${N} })`}return""}function Hf(e,t,n){var i;if(ao(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if((i=r.$)!=null&&i.value&&rt(r.$.value)){let o=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(o)});`)}return""}function jf(e,t,n){var l,u,c,_,f,p,m,y,g,h;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=B(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(X(i)){let v=i.token.value,$=n;if($.currentEvidenceParams&&X(r)){let C=`${r.token.value}.${v}`,w=$.currentEvidenceParams.get(C);if(w)return w.cParamName}if((c=e.$)!=null&&c.value&&Ce(e.$.value)){let E=e.$.value;return((_=n.functions[E.funcId])==null?void 0:_.cName)||E.funcId}if(!((f=e.$)!=null&&f.value)&&(F.___dispose.includes(v)||F.___drop.includes(v)||F.___dup.includes(v))&&a){let E=null;if((xe(a)||ze(a))&&(E=a.trait),E){let C=E.fields.find(w=>w.label===v&&w.assignedValue&&Ce(w.assignedValue));if(C&&Ce(C.assignedValue)){let w=C.assignedValue;return((p=n.functions[w.funcId])==null?void 0:p.cName)||w.funcId}else return`/* ERROR: Rc method ${v} not found in type module */`}else return`/* ERROR: No module found for Rc method ${v} */`}if(We(a)||Et(s)){let E=(m=e.$)==null?void 0:m.value;if(E){if(Oe(E)){if(E.variableName)return Ye(E.variableName,(y=e.$)==null?void 0:y.env);if(($.inAsyncStateMachine||$.inEffectStateMachine)&&$.stateMachineVariables){for(let[,C]of $.stateMachineVariables)if(C.name===v&&C.kind==="outer")return`sm->__capture.${v}`}}else if(!Et(E))return Un(E,n,e)}return Ye(v,(g=e.$)==null?void 0:g.env)}if(ui(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===v)return o}if(ze(a)){let E=a;if(xn(E))return o;for(let w of E.variants)if(w.fields){for(let b of w.fields)if(b.label===v){let k=w.name;return`${o}.data.${k}.${ve(v)}`}}return`/* ERROR: field ${v} not found in enum ${E.typeName} */`}else if(W(s)&&ze(s.value)){let E=s.value,C=E.variants.find(b=>b.name===v),w=(h=n.types[E.id])==null?void 0:h.cName;if(C&&!C.fields&&w){let b=In(E,C.name,n);return`(${w}){ .tag = ${b}, .data = { } }`}}else{if(cn(a)&&v==="*")return`${o}->value`;if(tt(a)){if(v==="*")return`(*${o})`;if(Lt(a.childType))return`${o}->${ve(v)}`;{let E=0,C=a;for(;tt(C);)E++,C=C.childType;if(E>0&&xe(C)&&C.isReferenceSemantics&&E++,ui(C)&&C.fields.length===1){let w=C.fields[0];if(w&&w.label===v)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${ve(v)}`:`${`(${"*".repeat(E-1)}${o})`}->${ve(v)}`:`${o}.${ve(v)}`}}else if(Qe(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let E=a.fields.findIndex(C=>C.label===v);return`${o}._${E}`}}else return Ke(a)?`${o}.vtable->${ve(v)}`:Ht(a)?`${o}->${ve(v)}`:`${o}.${ve(v)}`}}return"/* ERROR: field name must be an identifier */"}function Kf(e,t,n){var l,u,c,_,f;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${L(e)}
10279
+ `;let i=e.args[0];if(I(i)){let p=(u=i.func.$)==null?void 0:u.type;if(p&&Xe(p)){let m=i.args[0];if(m&&I(m)&&T(m,":")){let y=B(i.func,t,n),g=B(m.args[0],t,n),h=B(m.args[1],t,n),v=`Slice_${ve(Y(p.childType,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:Y(p.childType,n)}),`(${v}){ .data = &${y}.data[${g}], .length = ${h} - ${g} }`}else if(m&&X(m)&&m.token.value===":"){let y=B(i.func,t,n),g=p,h=g.childType,v=`Slice_${ve(Y(h,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:Y(h,n)}),ht(g.length)?`(${v}){ .data = &${y}.data[0], .length = ${g.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(p&&(Lt(p)||tt(p)&&Lt(p.childType))){let m=Lt(p)?p:p.childType,y=i.args[0];if(y&&I(y)&&T(y,":")){let g=B(i.func,t,n),h=B(y.args[0],t,n),v=B(y.args[1],t,n),$=`Slice_${ve(Y(m.childType,n))}`;return n.sliceStructTypes.has($)||n.sliceStructTypes.set($,{childType:Y(m.childType,n)}),`(${$}){ .data = &${g}.data[${h}], .length = ${v} - ${h} }`}else if(y&&X(y)&&y.token.value===":"){let g=B(i.func,t,n),h=`Slice_${ve(Y(m.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:Y(m.childType,n)}),`(${h}){ .data = ${g}.data, .length = ${g}.length }`}}}let o=(c=i.$)==null?void 0:c.value,a=(_=i.$)==null?void 0:_.type;if(o!==void 0&&a){if(ht(o)||dt(o)){let p=B(i,t,n);return`(&(${Y(a,n)}){${p}})`}if(rt(o)&&((f=i.$)!=null&&f.convertedRuntimeType))return`(&${B(i,t,n)})`}return`(&${B(i,t,n)})`}function Xf(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${B(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function Qf(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${B(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function Zf(e,t,n){let r=e.args[0];return r?B(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function Jf(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!Xe(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=z(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Xe(u)){let f=u.length;if(!ht(f))return"// Error: array element has non-constant length";let p=`i_${Math.floor(Math.random()*1e6)}`,m=n.emitter;m.emitLine(`for (size_t ${p} = 0; ${p} < ${f.value}; ${p}++) {`);let y=`(${o}).data[${a}].data[${p}]`;m.emitLine(" { // drop nested array element");let g=hi(y,u.childType,n);return g&&m.emitLine(` ${g};`),m.emitLine(" }"),m.emitLine("}"),""}let c=ii(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function ep(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!Xe(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=z(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Xe(u)){let f=u.length;if(!ht(f))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,m=`i_${Math.floor(Math.random()*1e6)}`,y=Y(u,n),g=n.emitter;g.emitLine(`${y} ${p} = (${o}).data[${a}];`),g.emitLine(`for (size_t ${m} = 0; ${m} < ${f.value}; ${m}++) {`);let h=qo(`${p}.data[${m}]`,u.childType,n);return g.emitLine(` ${p}.data[${m}] = ${h};`),g.emitLine("}"),p}let c=kr(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function tp(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=B(r,t,n);B(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!Qe(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!ht(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=z(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Qe(c)){let m=`(${o})._${l}`;return hi(m,c,n)}let _=ii(c,n);return _?`${_}((${o})._${l})`:"// No drop function for tuple element type"}function np(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=B(r,t,n);B(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!Qe(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!ht(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=z(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Qe(c)){let m=`(${o})._${l}`;return qo(m,c,n)}let _=kr(c,n);return _?`${_}((${o})._${l})`:"// No dup function for tuple element type"}function rp(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=B(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?qo(i,o,n):i}function ip(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=B(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?hi(i,o,n):""}function op(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${B(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function ap(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${B(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function sp(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${B(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function lp(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${B(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function up(e,t,n){var o,a,s;let r=e.args[0];if(!r)return"// Error: __yo_sometype_drop requires exactly 1 argument";let i=(o=r.$)==null?void 0:o.type;if(i&&z(i)&&je(i)){let l=B(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&z(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___drop[0]);if(u&&u.assignedValue&&Ce(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=B(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_drop: no-op */"}function cp(e,t,n){var o,a,s;let r=e.args[0];if(!r)return"// Error: __yo_sometype_dup requires exactly 1 argument";let i=(o=r.$)==null?void 0:o.type;if(i&&z(i)&&je(i))return`__yo_incr_rc((void*)${B(r,t,n)})`;if(i&&z(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___dup[0]);if(u&&u.assignedValue&&Ce(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=B(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_dup: no-op */"}function _p(e,t,n){var a;if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let r=e.args[0],i=(a=r.$)==null?void 0:a.type;if(!i)return"// Error: rc argument missing type information";let o=B(r,t,n);return jn(i)?`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}function fp(e,t,n){var i;let r=(i=e.$)==null?void 0:i.runtimeArgExprsInOrder;if(r){let o=n,a=r.map(s=>{var u,c;let l=B(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){Rt(s,t,o);let _=s.$.deferredDupExpressions[0];if(I(_)&&((c=_.$)!=null&&c.variableName))return Ye(_.$.variableName,_.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${L(e)}
10280
+ `}function pp(e,t,n){let r=e.args[0];return`sizeof(${B(r,t,n)})`}function dp(e,t,n){var a,s,l,u,c,_,f,p,m;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(u=n.types[((l=(s=e.$)==null?void 0:s.type)==null?void 0:l.id)??""])==null?void 0:u.cName,o=(c=e.$)==null?void 0:c.variableName;if(r&&i){let y=n,g=r.map((h,v)=>{var C,w;let E=B(h,t,n);if((C=h.$)!=null&&C.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Rt(h,t,y);let b=h.$.deferredDupExpressions[0];I(b)&&((w=b.$)!=null&&w.variableName)&&(E=Ye(b.$.variableName,b.$.env))}return`._${v} = ${E}`}).join(", ");if(o&&((_=e.$)!=null&&_.type)){let h=`(${i}){ ${g} }`,v=Bt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}else{if(e.args.length===0)return"";{let y=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((p=(f=e.$)==null?void 0:f.type)==null?void 0:p.id)??"none"} */`;let g=y.map((h,v)=>{let $=B(h,t,n);return`._${v} = ${$}`}).join(", ");if(o&&((m=e.$)!=null&&m.type)){let h=`(${i}){ ${g} }`,v=Bt(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${g} }`}}}function mp(e,t,n){var u,c;let i=(u=e.args[0].$)==null?void 0:u.value;if(!i||!W(i))throw new Error("typeid codegen: expected TypeValue argument");let o=i.value,a=o.id,s=((c=n.types[a])==null?void 0:c.cName)||Y(o,n),l=`__yo_typeid_${ve(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 bh(e,t){if(I(e)&&T(e,M.begin)){let n=[];for(let r of e.args)if(I(r)&&T(r,"=",2)){let i=r.args[0],o=r.args[1],a=B(i,"",t),s=B(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(I(e)&&T(e,"=",2)){let n=e.args[0],r=e.args[1],i=B(n,"",t),o=B(r,"",t);return`${i} = ${o}`}return B(e,"",t)}function Tu(e,t,n){var r,i,o,a;if(I(e)&&T(e,M.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let m of u){let y=hr(m);y&&c.set(y,m)}s.pendingDeferredDrops=[...l??[]];let _=s.consumedVarPendingDrops,f=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[...f,..._??[]];let p=new Set;for(let m of e.args){let y=B(m,t,n);if(y&&n.emitter.emitLine(`${t}${y};`),(o=m.$)!=null&&o.env&&c.size>p.size)for(let g of m.$.env.frames)for(let h of g.variables)c.has(h.name)&&!p.has(h.name)&&(p.add(h.name),s.pendingDeferredDrops.unshift(c.get(h.name)))}if((a=e.$)!=null&&a.deferredDropExpressions)for(let m of e.$.deferredDropExpressions){let y=B(m,t,n);y&&n.emitter.emitLine(`${t}${y};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=_}else{let s=B(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function yp(e,t,n){var i,o,a;if((i=e.$)!=null&&i.comptimeUnrolledBodies){for(let s of e.$.comptimeUnrolledBodies)Tu(s,t,n);return""}let r=e.args;if(r.length===2){let s=r[0],l=r[1],u=n.currentLoopLabel,c=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=c;let _=n,f=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=B(s,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Tu(l,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${c}:;`),_.loopBodyDropsBaselineCount=f,n.currentLoopLabel=u,""}else if(r.length===3){let s=r[0],l=r[1],u=r[2],c=n.currentLoopLabel,_=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let m=n,y=m.loopBodyDropsBaselineCount;m.loopBodyDropsBaselineCount=((a=m.pendingDeferredDrops)==null?void 0:a.length)??0,n.emitter.emitLine(`${t}while (true) {`);let g=B(s,t+" ",n);n.emitter.emitLine(`${t} if (!(${g})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Tu(u,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let h=bh(l,n);return n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),m.loopBodyDropsBaselineCount=y,n.currentLoopLabel=c,n.currentContinueLabel=_,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function kh(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;z(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Ut(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function wh(e,t,n,r){var _,f,p,m;let i=e.args[0];if(!((_=i==null?void 0:i.$)!=null&&_.type))return;let o=e.args.find(y=>I(y)&&T(y,M.using));if(!o)return;let a=Cn(i.$.type);if(!((f=a==null?void 0:a.isFuture.effects)!=null&&f.length))return;let s=kh(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let y=0;y<s.length&&y<l.length;y++){let g=s[y],h=l[y];if(J(g.type)){let v=g.label,$;if(u.currentEvidenceParams){for(let E of u.currentEvidenceParams.values())if(E.fieldLabel===v){$=E.cParamName;break}}if(!$&&u.stateMachineVariables){for(let[,E]of u.stateMachineVariables)if(E.name===v&&E.kind==="outer"){$=`sm->__capture.${v}`;break}}if(!$){let E=(p=h.$)==null?void 0:p.value;if(E&&Ce(E)){let C=r.functions[E.funcId];C&&($=C.cName)}}$||($=B(h,n,r)),$&&c.emitLine(`${n} ${t}->__capture.${v} = (void*)${$};`)}else if(We(g.type)){let v=g.type;for(let $ of v.fields){if(!J($.type))continue;let E;if(u.stateMachineVariables){for(let[,C]of u.stateMachineVariables)if(C.name===$.label&&C.kind==="outer"){E=`sm->__capture.${$.label}`;break}}if(!E){let C=(m=h.$)==null?void 0:m.value;if(C&&Et(C)){let w=v.fields.indexOf($),b=C.fields[w];if(b&&Ce(b)){let k=r.functions[b.funcId];k&&(E=k.cName)}}}if(!E&&u.currentEvidenceParams){for(let C of u.currentEvidenceParams.values())if(C.fieldLabel===$.label){E=C.cParamName;break}}E||(E=Fh($.label,v,u,e)),E&&c.emitLine(`${n} ${t}->__capture.${$.label} = (void*)${E};`)}}}}function Fh(e,t,n,r){var a,s,l,u;let i=((a=r.$)==null?void 0:a.env)??((s=r.func.$)==null?void 0:s.env);if(!i)return;let o=tr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&Et(f)){let p=f.type.fields.findIndex(m=>m.label===e);if(p>=0){let m=f.fields[p];if(m&&Ce(m)){let y=(u=n.functions[m.funcId])==null?void 0:u.cName;if(y)return y}}}}}function Lh(e,t,n){var l,u;let r=n,i=e.args[0],o=(l=r.continuationVariables)==null?void 0:l.get("resume");if(o&&"directReturnVar"in o&&o.directExitLabel){if(i){let c=B(i,t,n);if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${_};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${c};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let c=r.emitter;if(i){let _=B(i,t,n);_&&_!=="(void)0"&&c.emitLine(`${t}(void)${_};`)}if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)c.emitLine(`${t}${_};`);return nr(t,r,e,!1,!0,!0),Wr(t,r,e,!0),br({emitter:c,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 c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(nr(t,r,e,!1,!0,!0),Wr(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!De(c)){let _=r.overrideReturnTypeStr??Y(c,n);if(_!=="void")return`return (${_}){0}`}}return"return"}let s=B(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(nr(t,r,e,!1,!0,!0),Wr(t,r,e,!0),(r.isModuleEffectMemberFunction||r.currentEvidenceParams&&r.currentEvidenceParams.size>0)&&r.currentFunctionType){let c=(u=i.$)==null?void 0:u.type;if(c&&!De(c)){let f=Y(c,n);r.emitter.emitLine(`${t}{ ${f} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${f})); }`)}let _=r.currentFunctionType.return.type;if(!De(_)){let f=r.overrideReturnTypeStr??Y(_,n);if(f!=="void")return`return (${f}){0}`}return"return"}return`return ${s}`}function gp(e,t,n){let r;switch(e.tag){case"FnCall":r=Ah(e,t,n);break;case"Atom":r=Qo(e,n,t);break}return r}function Ah(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,m,y;if((r=e.$)!=null&&r.macroExpansion)return B(e.$.macroExpansion,t,n);if(I(e.func)&&T(e.func,".",2)&&e.func.args[1]&&X(e.func.args[1])){let g=e.func.args[1].token.value,h=e.func.args[0],v=(i=h==null?void 0:h.$)==null?void 0:i.type;if(v&&z(v)&&je(v)){if(g===F.___drop[0]){let $=B(h,t,n);return`if (${$} != NULL) { __yo_decr_rc((void*)${$}); }`}if(g===F.___dup[0])return`__yo_incr_rc((void*)${B(h,t,n)})`}}if(b_(e))return k_(e,t,n);if(T(e,F.__yo_decr_rc))return Xf(e,t,n);if(T(e,F.__yo_incr_rc))return Qf(e,t,n);if(T(e,F.__yo_rc_own))return Zf(e,t,n);if(T(e,F.__yo_drop_array_element))return Jf(e,t,n);if(T(e,F.__yo_dup_array_element))return ep(e,t,n);if(T(e,F.__yo_drop_tuple_element))return tp(e,t,n);if(T(e,F.__yo_dup_tuple_element))return np(e,t,n);if(T(e,F.___dup))return rp(e,t,n);if(T(e,F.___drop))return ip(e,t,n);if(T(e,F.__yo_dyn_drop))return op(e,t,n);if(T(e,F.__yo_dyn_dup))return ap(e,t,n);if(T(e,F.__yo_incr_rc_atomic))return sp(e,t,n);if(T(e,F.__yo_decr_rc_atomic))return lp(e,t,n);if(T(e,F.__yo_iso_extract))return If(e,t,n);if(T(e,F.__yo_iso_dispose))return Sf(e,t,n);if(T(e,F.__yo_arc_dispose))return ff(e,t,n);if(mu(e))return Nf(e,t,n);if(du(e))return pf(e,t,n);if(T(e,F.__yo_sometype_drop))return up(e,t,n);if(T(e,F.__yo_sometype_dup))return cp(e,t,n);if(T(e,F.__yo_gc_collect))return Lf(e,t,n);if(T(e,F.rc))return _p(e,t,n);if(T(e,F.panic))return Wf(e,t,n);if(T(e,F.asm))return Yf(e,t,n);if(T(e,F.global_asm))return Hf(e,t,n);if(T(e,M.test))return"/* test declaration skipped */";if(T(e,F.__yo_thread_set_maximum_threads))return Pf(e,t,n);if(T(e,M.op_and))return cf(e,t,n);if(T(e,M.op_or))return _f(e,t,n);if(wn(e))return(o=e.$)!=null&&o.awaitAnalysis?w_(e,t,n):S_(e,t,n);if(T(e,M.dyn))return Ff(e,t,n);if(er(e))return hf(e,t,n);if(Dc(e))return vf(e,t,n);if(Ts(e)){let g=e.args[0];if(!g)return"// Error: spawn requires a Future argument";let v=n.emitter,$=B(g,t,n),E=(a=g.$)==null?void 0:a.type,C=E?Y(E,n):"void*",w=(s=e.$)==null?void 0:s.type,b=w?Y(w,n):null,k=(l=e.$)!=null&&l.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",A=(u=e.$)!=null&&u.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return v.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),v.emitLine(`${t}${C} ${k} = ${$};`),v.emitLine(`${t}int ${A} = ${k}->state;`),v.emitLine(`${t}if (${A} == -2) {`),v.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),v.emitLine(`${t} abort();`),v.emitLine(`${t}}`),Ra((c=g.$)==null?void 0:c.type)||(v.emitLine(`${t}if (${A} == 0 && ${k}->__yo_resume_fn) {`),wh(e,k,t,n),v.emitLine(`${t} __yo_incr_rc((void*)${k});`),v.emitLine(`${t} ${k}->__yo_resume_fn((void*)${k});`),v.emitLine(`${t}}`)),b?`(${b}){ .__future = (void*)${k} }`:`(void*)${k}`}if(Mc(e))return Tf(e,t,n);if(T(e,M.return))return K_(e,t,n);if(T(e,M.escape))return Lh(e,t,n);if(T(e,F.__yo_array_fill,2))return mf(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return Cf(e,t,n);if(T(e,":=",2)){let g=Af(e,t,n);if(g!==void 0)return g}else{if(T(e,"=",2))return yf(e,t,n);if((_=e.$)!=null&&_.value&&!Oe((f=e.$)==null?void 0:f.value)&&!De(e.$.type)&&!Ot((p=e.$)==null?void 0:p.controlFlow)){let g=e.$.value;return Un(g,n,e)}else{if(T(e,".",2))return jf(e,t,n);if(T(e,M.begin))return $f(e,t,n);if(T(e,M.cond))return bf(e,t,n);if(T(e,M.match))return xf(e,t,n);if(T(e,F.__yo_address_of,1))return Kf(e,t,n);if(T(e,M.tuple))return dp(e,t,n);if(T(e,M.array)){let g=df(e,t,n);if(g!==void 0)return g}else{if(T(e,M.recur))return fp(e,t,n);if(T(e,M.runtime,1))return B(e.args[0],t,n);if(T(e,F.sizeof,1))return pp(e,t,n);if(T(e,F.typeid,1))return mp(e,t,n);if(T(e,F.downcast,2))return wf(e,t,n);if(T(e,so)){let g=((m=e.$)==null?void 0:m.runtimeArgExprsInOrder)||e.args;if(g){let h=n,v=g.map($=>{var C,w;let E=B($,t,n);if((C=$.$)!=null&&C.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){Rt($,t,h);let b=$.$.deferredDupExpressions[0];if(I(b)&&((w=b.$)!=null&&w.variableName))return Ye(b.$.variableName,b.$.env)}return E});return Ua(e.func.token.value,v,e,n,t)}}else{if(T(e,M.while))return yp(e,t,n);if(T(e,"->",2)&&I(e.args[0])&&T(e.args[0],M.fn)){let g=(y=e.$)==null?void 0:y.value;return Ce(g)?Un(g,n):"// Error: Anonymous function missing function value"}else{if(T(e,F.consume))return kf(e,t,n);if(T(e,F.comptime_expect_error)||T(e,F.comptime_assert)||T(e,F.__yo_var_print_info)||T(e,F.__yo_var_is_owning_the_rc_value)||T(e,F.__yo_var_has_other_aliases))return"";if(T(e,M.open))return Df(e,t,n);{let g=Gf(e,t,n);if(g!==void 0)return g}}}}}}if(I(e))throw new Error(`Unhandled function call: ${L(e)}`);return`// Failed to transpile ${L(e)}`}function hp({expr:e,env:t,context:n}){Ge(e,F.alignof,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&W(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Rr(o),s;return a===null?s=ue(tn(),{env:t,context:n}):s=Pn("Usize",a),e.$={env:t,type:tn(),value:s,pathCollection:[]},e}function vp({expr:e,env:t,context:n}){let r=T(e,M.op_and)?"and":"or",i=e.args;if(i.length===0){let u=jt(r==="and");return e.$={env:t,type:Nt(),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],_=U({expr:c,env:o,context:{...n}});if(!_.$||!Zn(_.$.type))throw d({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
10281
+ ${L(c)}`});o=_.$.env;let f=_.$.value;if(Oe(f)){s=!0;continue}if(dt(f)){let p=f.value;if(r==="and"){if(!p){a=jt(!1);break}!s&&!l&&(a=jt(!0))}else{if(p){a=jt(!0);break}!s&&!l&&(a=jt(!1))}}else l=!0}return dt(a)||(l||s)&&(l?a=void 0:a=ue(Nt(),{env:o,context:n})),e.$={env:o,type:Nt(),value:a,pathCollection:[],isAccessingProperty:!1},e}function Tp({expr:e,env:t,context:n}){var y,g,h,v,$;Ge(e,F.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});(y=o.$)!=null&&y.env&&(t=o.$.env);let a=(g=o.$)==null?void 0:g.value;if(!W(a)||!Xe(a.value))throw d({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?lt(a):"undefined"}`});let s=a.value,l=U({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});(h=l.$)!=null&&h.env&&(t=l.$.env);let u=(v=l.$)==null?void 0:v.type,c=($=l.$)==null?void 0:$.value;if(!u)throw d({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw d({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!ae({type:s.childType,env:t},{type:u,env:t}))throw d({token:i.token,errorMessage:`Fill value type ${D(u)} is not compatible with array element type ${D(s.childType)}`});let _=s.length;if(Oe(_)){let E=ue(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}let f;if(ht(_)){let E=_.value;if(f=typeof E=="bigint"?Number(E):E,!Number.isInteger(f)||f<0)throw d({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${f}`})}else throw d({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${lt(_)}`});let p=[];if(Oe(c)){let E=ue(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}for(let E=0;E<f;E++)p.push(c);let m=ki(s,p);return e.$={env:t,type:s,value:m,pathCollection:[]},e}function Ep({expr:e,env:t,context:n}){var s,l,u;if(n.isValidatingFunctionDefinition||!n.isExecuting){let c=((s=n.expectedType)==null?void 0:s.type)??se.type;return e.$={env:t,type:c,value:De(c)?se:ue(c,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!dt(o.$.value))throw d({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
10264
10282
  ${L(r)}
10265
10283
 
10266
10284
  Value:
10267
10285
  ${lt((l=o.$)==null?void 0:l.value)}`,isAssertionError:!0});if(o.$.value.value)return e.$={env:t,type:se.type,value:se,pathCollection:[]},e;if(i){let c=U({expr:i,env:t,context:{...n}});if((u=c.$)!=null&&u.value)throw d({token:e.token,errorMessage:rt(c.$.value)?c.$.value.value:lt(c.$.value),isAssertionError:!0})}throw d({token:e.token,errorMessage:`Assertion failed for "comptime_assert":
10268
- ${L(r)}`,isAssertionError:!0})}function Ep({expr:e,env:t,context:n}){if(T(e,F.__yo_comptime_bool_not)||T(e,F.__yo_comptime_bool_to_comptime_string)){let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Zn(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
10286
+ ${L(r)}`,isAssertionError:!0})}function $p({expr:e,env:t,context:n}){if(T(e,F.__yo_comptime_bool_not)||T(e,F.__yo_comptime_bool_to_comptime_string)){let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Zn(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
10269
10287
  ${L(r)}`});t=r.$.env;let i;if(T(e,F.__yo_comptime_bool_not))dt(r.$.value)?i=jt(!r.$.value.value):i=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_to_comptime_string))dt(r.$.value)?i=qn(r.$.value.value.toString()):i=ue($n(),{env:t,context:n});else throw d({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=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Zn(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
10270
10288
  ${L(r)}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$||!Zn(i.$.type)||!i.$.value)throw d({token:i.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
10271
- ${L(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,F.__yo_comptime_bool_and))dt(o)&&dt(a)?s=jt(o.value&&a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_or))dt(o)&&dt(a)?s=jt(o.value||a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_eq))dt(o)&&dt(a)?s=jt(o.value===a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_neq))dt(o)&&dt(a)?s=jt(o.value!==a.value):s=ue(Nt(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${L(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function $p({expr:e,env:t,context:n}){var o;let r=et(e.args[0]),i=e.args[1]?et(e.args[1]):void 0;try{U({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:se.type,value:se,pathCollection:[]},e}if(i){let a=U({expr:i,env:t,context:{...n}});if((o=a.$)!=null&&o.value)throw d({token:e.token,errorMessage:rt(a.$.value)?a.$.value.value:lt(a.$.value)})}throw d({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
10272
- ${L(r)}`})}function Ah(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 Zo(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(Jr(o.type,t))return;if(Jr(e.type.return.type,t))return;let r=Ah(e.type);try{let o=et(e.body),a=yt(r.env);for(let u of r.parameters){let{env:c}=Pe({env:a,variable:{name:u.label,type:u.type,isCompileTimeOnly:!0,value:[ue(u.type,{variableName:u.label,env:a,context:n})],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});a=c}let s={tag:"Function",type:r,body:o,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},l=nn({expr:o,env:a,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:s,evaluationEnv:a},expectedType:{type:r.return.type,env:a}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(((i=l.$)==null?void 0:i.value)!==void 0)return s.body=l,Yt(a,!0),s;Yt(a,!0);return}catch{return}}function Cp({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw d({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=U({expr:r,env:t,context:n});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!Ce(o))throw d({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${lt(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=Zo(o,t,n);if(a)return e.$={env:t,type:a.type,value:a,pathCollection:[]},e;throw d({token:r.token,errorMessage:"comptime_fn: Failed to create compile-time version of function. The function body cannot be evaluated at compile time."})}function bp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_car,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10289
+ ${L(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,F.__yo_comptime_bool_and))dt(o)&&dt(a)?s=jt(o.value&&a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_or))dt(o)&&dt(a)?s=jt(o.value||a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_eq))dt(o)&&dt(a)?s=jt(o.value===a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_bool_neq))dt(o)&&dt(a)?s=jt(o.value!==a.value):s=ue(Nt(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${L(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Cp({expr:e,env:t,context:n}){var o;let r=et(e.args[0]),i=e.args[1]?et(e.args[1]):void 0;try{U({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:se.type,value:se,pathCollection:[]},e}if(i){let a=U({expr:i,env:t,context:{...n}});if((o=a.$)!=null&&o.value)throw d({token:e.token,errorMessage:rt(a.$.value)?a.$.value.value:lt(a.$.value)})}throw d({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
10290
+ ${L(r)}`})}function Ih(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 Zo(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(Jr(o.type,t))return;if(Jr(e.type.return.type,t))return;let r=Ih(e.type);try{let o=et(e.body),a=yt(r.env);for(let u of r.parameters){let{env:c}=Pe({env:a,variable:{name:u.label,type:u.type,isCompileTimeOnly:!0,value:[ue(u.type,{variableName:u.label,env:a,context:n})],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});a=c}let s={tag:"Function",type:r,body:o,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},l=nn({expr:o,env:a,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:s,evaluationEnv:a},expectedType:{type:r.return.type,env:a}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(((i=l.$)==null?void 0:i.value)!==void 0)return s.body=l,Yt(a,!0),s;Yt(a,!0);return}catch{return}}function bp({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw d({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=U({expr:r,env:t,context:n});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!Ce(o))throw d({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${lt(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=Zo(o,t,n);if(a)return e.$={env:t,type:a.type,value:a,pathCollection:[]},e;throw d({token:r.token,errorMessage:"comptime_fn: Failed to create compile-time version of function. The function body cannot be evaluated at compile time."})}function kp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_car,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10273
10291
  ${L(r)}`});if(!En(i.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10274
10292
  ${L(r)}`});let o=i.$.type,a=i.$.value;if(!a)throw d({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
10275
- ${L(r)}`});if(e.$={env:i.$.env,type:o.childType,value:ue(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw d({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function kp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_cdr,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10293
+ ${L(r)}`});if(e.$={env:i.$.env,type:o.childType,value:ue(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw d({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function wp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_cdr,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10276
10294
  ${L(r)}`});if(!En(i.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10277
10295
  ${L(r)}`});let o=i.$.type,a=i.$.value;if(!a)throw d({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
10278
- ${L(r)}`});if(e.$={env:i.$.env,type:o,value:ue(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(a)){let s=a.elements;if(s.length>0)e.$.value=Ar(o.childType,[...s.slice(1)]);else throw d({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function wp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_cons,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10296
+ ${L(r)}`});if(e.$={env:i.$.env,type:o,value:ue(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(a)){let s=a.elements;if(s.length>0)e.$.value=Ar(o.childType,[...s.slice(1)]);else throw d({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function Fp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_cons,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10279
10297
  ${L(r)}`});t=r.$.env;let i=r.$.value;if(!i)throw d({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
10280
10298
  ${L(r)}`});let o=U({expr:e.args[1],env:t,context:{...n}});if(!o.$)throw d({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
10281
10299
  ${L(o)}`});if(t=o.$.env,!En(o.$.type))throw d({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
10282
10300
  ${L(o)}`});let a=o.$.value;if(!a)throw d({token:o.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" second argument, got:
10283
- ${L(o)}`});let s=o.$.type,l=r.$.type;if(!ae({type:l,env:t},{type:s.childType,env:t}))throw d({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${D(l)}" to ComptimeList of base type "${D(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ue(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(a)){let u=[i,...a.elements];e.$.value=Ar(s.childType,u)}return e}function Fp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_append,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10301
+ ${L(o)}`});let s=o.$.type,l=r.$.type;if(!ae({type:l,env:t},{type:s.childType,env:t}))throw d({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${D(l)}" to ComptimeList of base type "${D(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ue(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(a)){let u=[i,...a.elements];e.$.value=Ar(s.childType,u)}return e}function Lp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_append,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10284
10302
  ${L(r)}`});if(t=r.$.env,!En(r.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" first argument, got:
10285
10303
  ${L(r)}`});let i=r.$.value;if(!i)throw d({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
10286
10304
  ${L(r)}`});let o=U({expr:e.args[1],env:t,context:{...n}});if(!o.$)throw d({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
10287
10305
  ${L(o)}`});if(t=o.$.env,!En(o.$.type))throw d({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
10288
10306
  ${L(o)}`});let a=o.$.value;if(!a)throw d({token:o.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" second argument, got:
10289
- ${L(o)}`});let s=r.$.type,l=o.$.type;if(!ae({type:s,env:t},{type:l,env:t}))throw d({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${D(l.childType)}" to ComptimeList of base type "${D(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ue(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(i)&&Kr(a)){let u=[...i.elements,...a.elements];e.$.value=Ar(s.childType,u)}return e}function Lp({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_length,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10307
+ ${L(o)}`});let s=r.$.type,l=o.$.type;if(!ae({type:s,env:t},{type:l,env:t}))throw d({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${D(l.childType)}" to ComptimeList of base type "${D(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ue(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(i)&&Kr(a)){let u=[...i.elements,...a.elements];e.$.value=Ar(s.childType,u)}return e}function Ap({expr:e,env:t,context:n}){Ge(e,F.__yo_comptime_list_length,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10290
10308
  ${L(r)}`});if(!En(i.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10291
10309
  ${L(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
10292
- ${L(r)}`});if(e.$={env:i.$.env,type:tn(),value:ue(tn(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(o)){let a=o.elements.length,s=Pn("Usize",a);e.$.value=s}return e}function Ap({expr:e,env:t,context:n}){var s;Ge(e,F.__yo_comptime_list_element_type,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10310
+ ${L(r)}`});if(e.$={env:i.$.env,type:tn(),value:ue(tn(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kr(o)){let a=o.elements.length,s=Pn("Usize",a);e.$.value=s}return e}function Ip({expr:e,env:t,context:n}){var s;Ge(e,F.__yo_comptime_list_element_type,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10293
10311
  ${L(r)}`});if(!W((s=i.$)==null?void 0:s.value))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10294
10312
  ${L(r)}`});let o=i.$.value.value;if(!En(o))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
10295
- ${D(o)}`});let a=ye(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Rs(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=fi();return{min:0n,max:(1n<<BigInt(t))-1n}}case"isize":{let t=fi();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 Ip(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 za(e){return Yr(e)||Hr(e)||rn(e)||Tn(e)||Or(e)||e.isExtern==="c"&&z(e)}function Ih(e){let n=e.type.variants.find(r=>r.name===e.variantName);return n==null?void 0:n.discriminant}function Sh(e){if(e&&ht(e))return e.value}function Nh(e){return gr(e)||ts(e)||ht(e)}function Os(e,t,n){let r=Rs(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 d({token:n,errorMessage:`Value ${e} is out of range for type ${D(t)} (${r.min} to ${r.max})`})}if(rn(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return Xr(i)}if(Tn(t)){let i=typeof e=="bigint"?Number(e):e;return ns(i)}if(Hr(t)){let i=Ip(t);if(i){let o=typeof e=="bigint"?Number(e):e;return Pn(i,o)}}if(Yr(t)){let i=Ip(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Pn(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return Pn(i,a)}}throw d({token:n,errorMessage:`Cannot create compile-time value for type ${D(t)}`})}function Sp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!za(e))return;let o=U({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw d({token:t.token,errorMessage:`Failed to evaluate argument: ${L(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(ze(l)&&hn(s)){let c=Ih(s);if(c===void 0)throw d({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(Pr(e,a)){let _=Os(c,e,n.token);return n.$={env:a,type:e,value:_,pathCollection:[]},{expr:n,env:a}}}if(!za(l)&&!rn(l)&&!Tn(l)&&!ze(l))throw d({token:t.token,errorMessage:`Cannot convert ${D(l)} to ${D(e)}. Expected a numeric type.`});let u=Sh(s);if(u!==void 0&&Pr(e,a)){let c=Os(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((rn(e)||Tn(e))&&u===void 0)throw d({token:t.token,errorMessage:`Cannot convert runtime value to ${D(e)}. Only compile-time values can be converted to ${D(e)}.`});if((rn(l)||Tn(l))&&Pr(e,a))if(u!==void 0){let c=Os(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:ue(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(Or(e)||!Nh(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:F.__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 cs(n,c),{expr:n,env:a}}if(u!==void 0){let c=Os(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}throw d({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function Fn(e){return e&&(gr(e)||ts(e)||ht(e))?e.value:null}function Di(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Xr(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return ns(a)}if(Or(t))return ue(t,{env:n,context:r});let i=Vh(t),o=Dh(e,t);return Pn(i,o)}function Vh(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 Eu(e,t,n,r,i,o){let a=Rs(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)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return _<f}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let _=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return _>f}return u>c};if(s(e,a.min)||l(e,a.max))throw d({token:o,errorMessage:`Integer overflow in compile-time evaluation
10313
+ ${D(o)}`});let a=ye(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Rs(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=fi();return{min:0n,max:(1n<<BigInt(t))-1n}}case"isize":{let t=fi();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 Sp(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 za(e){return Yr(e)||Hr(e)||rn(e)||Tn(e)||Or(e)||e.isExtern==="c"&&z(e)}function Sh(e){let n=e.type.variants.find(r=>r.name===e.variantName);return n==null?void 0:n.discriminant}function Nh(e){if(e&&ht(e))return e.value}function Vh(e){return gr(e)||ts(e)||ht(e)}function Os(e,t,n){let r=Rs(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 d({token:n,errorMessage:`Value ${e} is out of range for type ${D(t)} (${r.min} to ${r.max})`})}if(rn(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return Xr(i)}if(Tn(t)){let i=typeof e=="bigint"?Number(e):e;return ns(i)}if(Hr(t)){let i=Sp(t);if(i){let o=typeof e=="bigint"?Number(e):e;return Pn(i,o)}}if(Yr(t)){let i=Sp(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Pn(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return Pn(i,a)}}throw d({token:n,errorMessage:`Cannot create compile-time value for type ${D(t)}`})}function Np({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!za(e))return;let o=U({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw d({token:t.token,errorMessage:`Failed to evaluate argument: ${L(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(ze(l)&&hn(s)){let c=Sh(s);if(c===void 0)throw d({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(Pr(e,a)){let _=Os(c,e,n.token);return n.$={env:a,type:e,value:_,pathCollection:[]},{expr:n,env:a}}}if(!za(l)&&!rn(l)&&!Tn(l)&&!ze(l))throw d({token:t.token,errorMessage:`Cannot convert ${D(l)} to ${D(e)}. Expected a numeric type.`});let u=Nh(s);if(u!==void 0&&Pr(e,a)){let c=Os(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((rn(e)||Tn(e))&&u===void 0)throw d({token:t.token,errorMessage:`Cannot convert runtime value to ${D(e)}. Only compile-time values can be converted to ${D(e)}.`});if((rn(l)||Tn(l))&&Pr(e,a))if(u!==void 0){let c=Os(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:ue(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(Or(e)||!Vh(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:F.__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 cs(n,c),{expr:n,env:a}}if(u!==void 0){let c=Os(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}throw d({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function Ln(e){return e&&(gr(e)||ts(e)||ht(e))?e.value:null}function Di(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Xr(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return ns(a)}if(Or(t))return ue(t,{env:n,context:r});let i=xh(t),o=Mh(e,t);return Pn(i,o)}function xh(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 Eu(e,t,n,r,i,o){let a=Rs(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)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return _<f}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let _=typeof u=="bigint"?u:BigInt(Math.floor(u)),f=typeof c=="bigint"?c:BigInt(Math.floor(c));return _>f}return u>c};if(s(e,a.min)||l(e,a.max))throw d({token:o,errorMessage:`Integer overflow in compile-time evaluation
10296
10314
  ${r} ${n==="multiply"?"*":n==="add"?"+":"-"} ${i} = ${e}
10297
- Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function xh(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 fi();default:return null}}function Dh(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=Rs(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 Ba(e,t,n,r,i,o){let a=Fn(e),s=Fn(t);return a===null||s===null?ue(n,{env:i,context:o}):Di(r(a,s),n,i,o)??ue(n,{env:i,context:o})}function Jo(e,t,n,r,i){let o=Fn(e),a=Fn(t);if(o===null||a===null)return ue(Nt(),{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 jt(n(s,l))}return jt(n(o,a))}function Mh(e,t,n,r,i){let o=Fn(e);return o===null?ue(t,{env:r,context:i}):Di(n(o),t,r,i)??ue(t,{env:r,context:i})}function Np({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 d({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=o,u=(()=>{switch(a){case"u8":return Co();case"i8":return bo();case"u16":return ko();case"i16":return wo();case"u32":return Fo();case"i32":return Fi();case"u64":return Lo();case"i64":return Ao();case"usize":return tn();case"isize":return $o();case"f32":return Io();case"f64":return Li();case"int":case"comptime_int":return wi();case"float":case"comptime_float":return Eo();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let g=U({expr:e.args[0],env:t,context:{...n}});if(!g.$||!g.$.value)throw d({token:g.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
10298
- ${L(g)}`});t=g.$.env;let h;if(s==="neg")if(ht(g.$.value)){if(u.tag==="u8"||u.tag==="u16"||u.tag==="u32"||u.tag==="u64"||u.tag==="usize")throw d({token:e.token,errorMessage:`Cannot apply negation to unsigned type: ${a}`});h=Mh(g.$.value,u,v=>-v,t,n)}else h=ue(u,{env:t,context:n});else if(s==="bit_not")if(ht(g.$.value)||gr(g.$.value)){let v=Fn(g.$.value);if(v!==null){let $=typeof v=="bigint"?v:BigInt(Math.floor(v)),E=xh(u),C;if(E!==null){let b=(1n<<BigInt(E))-1n;if(C=$^b,Yu(u)){let k=1n<<BigInt(E-1);C>=k&&(C=C-(1n<<BigInt(E)))}}else C=~$;h=Di(C,u,t,n)??ue(u,{env:t,context:n})}else h=ue(u,{env:t,context:n})}else h=ue(u,{env:t,context:n});else if(s==="to_comptime_string")if(ht(g.$.value)){let v=Fn(g.$.value);v!==null?h=qn(v.toString()):h=ue($n(),{env:t,context:n})}else h=ue($n(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?$n():u,value:h,pathCollection:[]},e}let c=U({expr:e.args[0],env:t,context:{...n}});if(!c.$||!c.$.value)throw d({token:c.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
10315
+ Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function Dh(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 fi();default:return null}}function Mh(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=Rs(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 Ba(e,t,n,r,i,o){let a=Ln(e),s=Ln(t);return a===null||s===null?ue(n,{env:i,context:o}):Di(r(a,s),n,i,o)??ue(n,{env:i,context:o})}function Jo(e,t,n,r,i){let o=Ln(e),a=Ln(t);if(o===null||a===null)return ue(Nt(),{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 jt(n(s,l))}return jt(n(o,a))}function Oh(e,t,n,r,i){let o=Ln(e);return o===null?ue(t,{env:r,context:i}):Di(n(o),t,r,i)??ue(t,{env:r,context:i})}function Vp({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 d({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=o,u=(()=>{switch(a){case"u8":return Co();case"i8":return bo();case"u16":return ko();case"i16":return wo();case"u32":return Fo();case"i32":return Fi();case"u64":return Lo();case"i64":return Ao();case"usize":return tn();case"isize":return $o();case"f32":return Io();case"f64":return Li();case"int":case"comptime_int":return wi();case"float":case"comptime_float":return Eo();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let g=U({expr:e.args[0],env:t,context:{...n}});if(!g.$||!g.$.value)throw d({token:g.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
10316
+ ${L(g)}`});t=g.$.env;let h;if(s==="neg")if(ht(g.$.value)){if(u.tag==="u8"||u.tag==="u16"||u.tag==="u32"||u.tag==="u64"||u.tag==="usize")throw d({token:e.token,errorMessage:`Cannot apply negation to unsigned type: ${a}`});h=Oh(g.$.value,u,v=>-v,t,n)}else h=ue(u,{env:t,context:n});else if(s==="bit_not")if(ht(g.$.value)||gr(g.$.value)){let v=Ln(g.$.value);if(v!==null){let $=typeof v=="bigint"?v:BigInt(Math.floor(v)),E=Dh(u),C;if(E!==null){let b=(1n<<BigInt(E))-1n;if(C=$^b,Yu(u)){let k=1n<<BigInt(E-1);C>=k&&(C=C-(1n<<BigInt(E)))}}else C=~$;h=Di(C,u,t,n)??ue(u,{env:t,context:n})}else h=ue(u,{env:t,context:n})}else h=ue(u,{env:t,context:n});else if(s==="to_comptime_string")if(ht(g.$.value)){let v=Ln(g.$.value);v!==null?h=qn(v.toString()):h=ue($n(),{env:t,context:n})}else h=ue($n(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?$n():u,value:h,pathCollection:[]},e}let c=U({expr:e.args[0],env:t,context:{...n}});if(!c.$||!c.$.value)throw d({token:c.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
10299
10317
  ${L(c)}`});t=c.$.env;let _=U({expr:e.args[1],env:t,context:{...n}});if(!_.$||!_.$.value)throw d({token:_.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
10300
- ${L(_)}`});t=_.$.env;let f=c.$.value,p=_.$.value,m,y;switch(s){case"add":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))+(typeof h=="bigint"?h:BigInt(h)):g+h;Eu(v,u,"add",g,h,e.token)}m=Ba(f,p,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),C=typeof $=="bigint"?$:BigInt($);return E+C}return v+$},t,n),y=u;break}case"sub":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))-(typeof h=="bigint"?h:BigInt(h)):g-h;Eu(v,u,"subtract",g,h,e.token)}m=Ba(f,p,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),C=typeof $=="bigint"?$:BigInt($);return E-C}return v-$},t,n),y=u;break}case"mul":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))*(typeof h=="bigint"?h:BigInt(h)):g*h;Eu(v,u,"multiply",g,h,e.token)}m=Ba(f,p,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),C=typeof $=="bigint"?$:BigInt($);return E*C}return v*$},t,n),y=u;break}case"div":{let g=Fn(p);if(g===0||g===0n)throw d({token:_.token,errorMessage:`Division by zero in "${r}" operation`});m=Ba(f,p,u,(h,v)=>{if(typeof h=="bigint"||typeof v=="bigint"){let $=typeof h=="bigint"?h:BigInt(h),E=typeof v=="bigint"?v:BigInt(v);return $/E}return Yr(u)||u.tag==="comptime_int"?Math.trunc(h/v):h/v},t,n),y=u;break}case"mod":{if(Hr(u))throw d({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let g=Fn(p);if(g===0||g===0n)throw d({token:_.token,errorMessage:`Modulo by zero in "${r}" operation`});m=Ba(f,p,u,(h,v)=>{if(typeof h=="bigint"||typeof v=="bigint"){let $=typeof h=="bigint"?h:BigInt(h),E=typeof v=="bigint"?v:BigInt(v);return $%E}return h%v},t,n),y=u;break}case"eq":m=Jo(f,p,(g,h)=>g===h,t,n),y=Nt();break;case"neq":m=Jo(f,p,(g,h)=>g!==h,t,n),y=Nt();break;case"lt":m=Jo(f,p,(g,h)=>g<h,t,n),y=Nt();break;case"lte":m=Jo(f,p,(g,h)=>g<=h,t,n),y=Nt();break;case"gt":m=Jo(f,p,(g,h)=>g>h,t,n),y=Nt();break;case"gte":m=Jo(f,p,(g,h)=>g>=h,t,n),y=Nt();break;case"bit_and":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Di(v&$,u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"bit_or":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Di(v|$,u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"bit_xor":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Di(v^$,u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"shl":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?Number(h):Math.floor(h);m=Di(v<<BigInt($),u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"shr":{let g=Fn(f),h=Fn(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?Number(h):Math.floor(h);m=Di(v>>BigInt($),u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}default:throw d({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:y,value:m,pathCollection:[]},e}function Vp({expr:e,env:t,context:n}){if(e.args.length===0)throw d({token:e.token,errorMessage:'Expected at least 1 argument for "comptime_print", got 0'});let r=[];for(let i of e.args){let o=U({expr:i,env:t,context:{...n}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${L(i)}`});t=o.$.env,rt(o.$.value)?r.push(o.$.value.value):r.push(lt(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function xp({expr:e,env:t,context:n}){if(T(e,F.__yo_comptime_string_length)||T(e,F.__yo_comptime_string_to_upper)||T(e,F.__yo_comptime_string_to_lower)){let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ln(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
10318
+ ${L(_)}`});t=_.$.env;let f=c.$.value,p=_.$.value,m,y;switch(s){case"add":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))+(typeof h=="bigint"?h:BigInt(h)):g+h;Eu(v,u,"add",g,h,e.token)}m=Ba(f,p,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),C=typeof $=="bigint"?$:BigInt($);return E+C}return v+$},t,n),y=u;break}case"sub":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))-(typeof h=="bigint"?h:BigInt(h)):g-h;Eu(v,u,"subtract",g,h,e.token)}m=Ba(f,p,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),C=typeof $=="bigint"?$:BigInt($);return E-C}return v-$},t,n),y=u;break}case"mul":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"||typeof h=="bigint"?(typeof g=="bigint"?g:BigInt(g))*(typeof h=="bigint"?h:BigInt(h)):g*h;Eu(v,u,"multiply",g,h,e.token)}m=Ba(f,p,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),C=typeof $=="bigint"?$:BigInt($);return E*C}return v*$},t,n),y=u;break}case"div":{let g=Ln(p);if(g===0||g===0n)throw d({token:_.token,errorMessage:`Division by zero in "${r}" operation`});m=Ba(f,p,u,(h,v)=>{if(typeof h=="bigint"||typeof v=="bigint"){let $=typeof h=="bigint"?h:BigInt(h),E=typeof v=="bigint"?v:BigInt(v);return $/E}return Yr(u)||u.tag==="comptime_int"?Math.trunc(h/v):h/v},t,n),y=u;break}case"mod":{if(Hr(u))throw d({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let g=Ln(p);if(g===0||g===0n)throw d({token:_.token,errorMessage:`Modulo by zero in "${r}" operation`});m=Ba(f,p,u,(h,v)=>{if(typeof h=="bigint"||typeof v=="bigint"){let $=typeof h=="bigint"?h:BigInt(h),E=typeof v=="bigint"?v:BigInt(v);return $%E}return h%v},t,n),y=u;break}case"eq":m=Jo(f,p,(g,h)=>g===h,t,n),y=Nt();break;case"neq":m=Jo(f,p,(g,h)=>g!==h,t,n),y=Nt();break;case"lt":m=Jo(f,p,(g,h)=>g<h,t,n),y=Nt();break;case"lte":m=Jo(f,p,(g,h)=>g<=h,t,n),y=Nt();break;case"gt":m=Jo(f,p,(g,h)=>g>h,t,n),y=Nt();break;case"gte":m=Jo(f,p,(g,h)=>g>=h,t,n),y=Nt();break;case"bit_and":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Di(v&$,u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"bit_or":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Di(v|$,u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"bit_xor":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Di(v^$,u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"shl":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?Number(h):Math.floor(h);m=Di(v<<BigInt($),u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}case"shr":{let g=Ln(f),h=Ln(p);if(g!==null&&h!==null){let v=typeof g=="bigint"?g:BigInt(Math.floor(g)),$=typeof h=="bigint"?Number(h):Math.floor(h);m=Di(v>>BigInt($),u,t,n)??ue(u,{env:t,context:n})}else m=ue(u,{env:t,context:n});y=u;break}default:throw d({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:y,value:m,pathCollection:[]},e}function xp({expr:e,env:t,context:n}){if(e.args.length===0)throw d({token:e.token,errorMessage:'Expected at least 1 argument for "comptime_print", got 0'});let r=[];for(let i of e.args){let o=U({expr:i,env:t,context:{...n}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${L(i)}`});t=o.$.env,rt(o.$.value)?r.push(o.$.value.value):r.push(lt(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Dp({expr:e,env:t,context:n}){if(T(e,F.__yo_comptime_string_length)||T(e,F.__yo_comptime_string_to_upper)||T(e,F.__yo_comptime_string_to_lower)){let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ln(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
10301
10319
  ${L(r)}`});t=r.$.env;let i;if(T(e,F.__yo_comptime_string_length))rt(r.$.value)?i=Xr(BigInt(r.$.value.value.length)):i=ue(wi(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_to_upper))rt(r.$.value)?i=qn(r.$.value.value.toUpperCase()):i=ue($n(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_to_lower))rt(r.$.value)?i=qn(r.$.value.value.toLowerCase()):i=ue($n(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected string unary function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else if(T(e,F.__yo_comptime_string_slice)){if(e.args.length<2||e.args.length>3)throw d({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ln(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" string argument, got:
10302
10320
  ${L(r)}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$||!rn(i.$.type)||!i.$.value)throw d({token:i.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" start argument, got:
10303
10321
  ${L(i)}`});t=i.$.env;let o;if(e.args.length===3){if(o=U({expr:e.args[2],env:t,context:{...n}}),!o.$||!rn(o.$.type)||!o.$.value)throw d({token:o.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" end argument, got:
10304
10322
  ${L(o)}`});t=o.$.env}let a;if(rt(r.$.value)&&gr(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&&gr(o.$.value)){let _=o.$.value.value;c=typeof _=="bigint"?Number(_):_}a=qn(s.slice(u,c))}else a=ue($n(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ln(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
10305
10323
  ${L(r)}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$||!ln(i.$.type)||!i.$.value)throw d({token:i.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" second argument, got:
10306
- ${L(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,F.__yo_comptime_string_concat))rt(o)&&rt(a)?s=qn(o.value+a.value):s=ue($n(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_eq))rt(o)&&rt(a)?s=jt(o.value===a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_neq))rt(o)&&rt(a)?s=jt(o.value!==a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_lt))rt(o)&&rt(a)?s=jt(o.value<a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_lte))rt(o)&&rt(a)?s=jt(o.value<=a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_gt))rt(o)&&rt(a)?s=jt(o.value>a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_gte))rt(o)&&rt(a)?s=jt(o.value>=a.value):s=ue(Nt(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${L(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Dp({expr:e,env:t,context:n}){Ge(e,F.consume,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=sr(i,t),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function ea({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:ue(t.return.type,{variableName:"ctfe_analysis_result_"+$t(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map($=>$.value),...r.args.map($=>$.value)];if(s.some($=>!$))throw d({token:(e==null?void 0:e.token)??Ae,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=bt(u),_=n.funcId,f=n.calledComptimeFunctionCaches,p=c?f.find($=>$.argValues.length===l.length&&$.argValues.every((E,C)=>{let w=l[C];return W(E)&&W(w)?z(E.value)&&z(w.value)||Ze(E.value)||Ze(w.value)?E.value.id===w.value.id:z(E.value)&&!z(w.value)?!1:ae({type:E.value,env:$.env},{type:w.value,env:i},!0):gn({value:E,env:$.env},{value:w,env:i})})):void 0;if(p)return{callerEnv:i,calleeEnv:o,value:p.value};let m=n.body,y={funcId:_,argValues:l,value:ue(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:et(m)};n.calledComptimeFunctionCaches.push(y);let g=n.calledComptimeFunctionCaches.length-1,h;try{h=nn({expr:y.body,env:o,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:o},isEvaluatingLoopBody:void 0,capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType,forceCompileTimeBindings:!0},variablesToAdd:[]})}catch($){throw n.calledComptimeFunctionCaches.splice(g,1),$}if(!h.$)throw d({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=h.$.value;if(!v)throw d({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=h.$.env,W(v)){let $=v.value;!$.typeName&&n.funcName&&($.typeName=n.funcName+`(${l.map(E=>lt(E)).join(", ")})`),(xe($)||ze($)||Pt($)||We($)||st($))&&($.functionValue||($.functionValue=n))}return c?n.calledComptimeFunctionCaches[g]={funcId:_,argValues:l,value:v,env:h.$.env,body:h}:n.calledComptimeFunctionCaches.splice(g,1),{value:v,callerEnv:i,calleeEnv:o}}function $u(e,t,n){var p;let i=_e(t,"Option").find(m=>{var y;return((y=m.value)==null?void 0:y[0])&&Ce(m.value[0])&&J(m.type)});if(!i||!((p=i.value)!=null&&p[0])||!Ce(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=ye(e),u=yt(a.env),{env:c}=Pe({env:u,variable:{name:s.label,token:Ae,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ae,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:f}=ea({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Mt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!W(_))throw new Error("Option type constructor did not return a type value");return{optionType:_.value,env:f}}function Mp({expr:e,env:t,context:n}){Ge(e,[F.__yo_decr_rc[0]],1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc[0]}":
10307
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Op({expr:e,env:t,context:n}){Ge(e,[F.__yo_incr_rc[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc[0]}":
10308
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Rp({expr:e,env:t,context:n}){Ge(e,[F.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc_atomic[0]}":
10309
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Pp({expr:e,env:t,context:n}){Ge(e,[F.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc_atomic[0]}":
10310
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Up({expr:e,env:t,context:n}){Ge(e,[F.__yo_rc_own[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc[0]}":
10311
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function zp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dyn_drop[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_dyn_drop[0]}":
10312
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Bp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dyn_dup[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_dyn_dup[0]}":
10313
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Gp({expr:e,env:t,context:n}){Ge(e,[F.__yo_sometype_drop[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_sometype_drop[0]}":
10314
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Wp({expr:e,env:t,context:n}){Ge(e,[F.__yo_sometype_dup[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_sometype_dup[0]}":
10315
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function qp({expr:e,env:t,context:n}){Ge(e,[F.__yo_iso_extract[0]],1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_iso_extract[0]}":
10316
- ${L(r)}`});t=i.$.env;let o=i.$.type;if(!fn(o))throw d({token:r.token,errorMessage:`${F.__yo_iso_extract[0]} expects an Iso type, but got: ${D(o)}`});let a=o.childType,{optionType:s,env:l}=$u(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection||[]},Tt(e,!0),e}function Yp({expr:e,env:t,context:n}){Ge(e,[F.__yo_iso_dispose[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_iso_dispose[0]}":
10317
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Hp({expr:e,env:t,context:n}){Ge(e,[F.__yo_arc_dispose[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_arc_dispose[0]}":
10318
- ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function jp({expr:e,env:t,context:n}){Ge(e,[F.__yo_drop_array_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the array argument for "${F.__yo_drop_array_element[0]}":
10324
+ ${L(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,F.__yo_comptime_string_concat))rt(o)&&rt(a)?s=qn(o.value+a.value):s=ue($n(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_eq))rt(o)&&rt(a)?s=jt(o.value===a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_neq))rt(o)&&rt(a)?s=jt(o.value!==a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_lt))rt(o)&&rt(a)?s=jt(o.value<a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_lte))rt(o)&&rt(a)?s=jt(o.value<=a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_gt))rt(o)&&rt(a)?s=jt(o.value>a.value):s=ue(Nt(),{env:t,context:n});else if(T(e,F.__yo_comptime_string_gte))rt(o)&&rt(a)?s=jt(o.value>=a.value):s=ue(Nt(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${L(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Mp({expr:e,env:t,context:n}){Ge(e,F.consume,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=sr(i,t),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function ea({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:ue(t.return.type,{variableName:"ctfe_analysis_result_"+$t(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map($=>$.value),...r.args.map($=>$.value)];if(s.some($=>!$))throw d({token:(e==null?void 0:e.token)??Ae,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=bt(u),_=n.funcId,f=n.calledComptimeFunctionCaches,p=c?f.find($=>$.argValues.length===l.length&&$.argValues.every((E,C)=>{let w=l[C];return W(E)&&W(w)?z(E.value)&&z(w.value)||Ze(E.value)||Ze(w.value)?E.value.id===w.value.id:z(E.value)&&!z(w.value)?!1:ae({type:E.value,env:$.env},{type:w.value,env:i},!0):gn({value:E,env:$.env},{value:w,env:i})})):void 0;if(p)return{callerEnv:i,calleeEnv:o,value:p.value};let m=n.body,y={funcId:_,argValues:l,value:ue(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:et(m)};n.calledComptimeFunctionCaches.push(y);let g=n.calledComptimeFunctionCaches.length-1,h;try{h=nn({expr:y.body,env:o,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:o},isEvaluatingLoopBody:void 0,capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType,forceCompileTimeBindings:!0},variablesToAdd:[]})}catch($){throw n.calledComptimeFunctionCaches.splice(g,1),$}if(!h.$)throw d({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let v=h.$.value;if(!v)throw d({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=h.$.env,W(v)){let $=v.value;!$.typeName&&n.funcName&&($.typeName=n.funcName+`(${l.map(E=>lt(E)).join(", ")})`),(xe($)||ze($)||Pt($)||We($)||st($))&&($.functionValue||($.functionValue=n))}return c?n.calledComptimeFunctionCaches[g]={funcId:_,argValues:l,value:v,env:h.$.env,body:h}:n.calledComptimeFunctionCaches.splice(g,1),{value:v,callerEnv:i,calleeEnv:o}}function $u(e,t,n){var p;let i=_e(t,"Option").find(m=>{var y;return((y=m.value)==null?void 0:y[0])&&Ce(m.value[0])&&J(m.type)});if(!i||!((p=i.value)!=null&&p[0])||!Ce(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=ye(e),u=yt(a.env),{env:c}=Pe({env:u,variable:{name:s.label,token:Ae,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ae,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:f}=ea({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Mt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!W(_))throw new Error("Option type constructor did not return a type value");return{optionType:_.value,env:f}}function Op({expr:e,env:t,context:n}){Ge(e,[F.__yo_decr_rc[0]],1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc[0]}":
10325
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Rp({expr:e,env:t,context:n}){Ge(e,[F.__yo_incr_rc[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc[0]}":
10326
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Pp({expr:e,env:t,context:n}){Ge(e,[F.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc_atomic[0]}":
10327
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Up({expr:e,env:t,context:n}){Ge(e,[F.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc_atomic[0]}":
10328
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function zp({expr:e,env:t,context:n}){Ge(e,[F.__yo_rc_own[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc[0]}":
10329
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Bp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dyn_drop[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_dyn_drop[0]}":
10330
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Gp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dyn_dup[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_dyn_dup[0]}":
10331
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Wp({expr:e,env:t,context:n}){Ge(e,[F.__yo_sometype_drop[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_sometype_drop[0]}":
10332
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function qp({expr:e,env:t,context:n}){Ge(e,[F.__yo_sometype_dup[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_sometype_dup[0]}":
10333
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Yp({expr:e,env:t,context:n}){Ge(e,[F.__yo_iso_extract[0]],1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_iso_extract[0]}":
10334
+ ${L(r)}`});t=i.$.env;let o=i.$.type;if(!pn(o))throw d({token:r.token,errorMessage:`${F.__yo_iso_extract[0]} expects an Iso type, but got: ${D(o)}`});let a=o.childType,{optionType:s,env:l}=$u(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection||[]},Tt(e,!0),e}function Hp({expr:e,env:t,context:n}){Ge(e,[F.__yo_iso_dispose[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_iso_dispose[0]}":
10335
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function jp({expr:e,env:t,context:n}){Ge(e,[F.__yo_arc_dispose[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_arc_dispose[0]}":
10336
+ ${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Kp({expr:e,env:t,context:n}){Ge(e,[F.__yo_drop_array_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the array argument for "${F.__yo_drop_array_element[0]}":
10319
10337
  ${L(r)}`});t=o.$.env;let a=U({expr:i,env:t,context:{...n}});if(!a.$)throw d({token:i.token,errorMessage:`Failed to evaluate the index argument for "${F.__yo_drop_array_element[0]}":
10320
- ${L(i)}`});return t=a.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Kp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dup_array_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the array argument for "${F.__yo_dup_array_element[0]}":
10338
+ ${L(i)}`});return t=a.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Xp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dup_array_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the array argument for "${F.__yo_dup_array_element[0]}":
10321
10339
  ${L(r)}`});t=o.$.env;let a=U({expr:i,env:t,context:{...n}});if(!a.$)throw d({token:i.token,errorMessage:`Failed to evaluate the index argument for "${F.__yo_dup_array_element[0]}":
10322
- ${L(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Xe(s))throw d({token:r.token,errorMessage:`Expected array type for "${F.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function Xp({expr:e,env:t,context:n}){Ge(e,[F.__yo_drop_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${F.__yo_drop_tuple_element[0]}":
10340
+ ${L(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Xe(s))throw d({token:r.token,errorMessage:`Expected array type for "${F.__yo_dup_array_element[0]}"`});let l=s.childType;return e.$={env:t,type:l,value:void 0,pathCollection:[]},e}function Qp({expr:e,env:t,context:n}){Ge(e,[F.__yo_drop_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${F.__yo_drop_tuple_element[0]}":
10323
10341
  ${L(r)}`});t=o.$.env;let a=U({expr:i,env:t,context:{...n}});if(!a.$)throw d({token:i.token,errorMessage:`Failed to evaluate the index argument for "${F.__yo_drop_tuple_element[0]}":
10324
- ${L(i)}`});return t=a.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Qp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dup_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${F.__yo_dup_tuple_element[0]}":
10342
+ ${L(i)}`});return t=a.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Zp({expr:e,env:t,context:n}){Ge(e,[F.__yo_dup_tuple_element[0]],2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the tuple argument for "${F.__yo_dup_tuple_element[0]}":
10325
10343
  ${L(r)}`});t=o.$.env;let a=U({expr:i,env:t,context:{...n}});if(!a.$)throw d({token:i.token,errorMessage:`Failed to evaluate the index argument for "${F.__yo_dup_tuple_element[0]}":
10326
- ${L(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Qe(s))throw d({token:r.token,errorMessage:`Expected tuple type for "${F.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!ht(l))throw d({token:i.token,errorMessage:`Expected number value for index in "${F.__yo_dup_tuple_element[0]}"`});let u=Number(l.value);if(u<0||u>=s.fields.length)throw d({token:i.token,errorMessage:`Index out of bounds for tuple in "${F.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Zp({expr:e,env:t,context:n}){Ge(e,F.downcast,2);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate dyn value argument for downcast."});t=i.$.env;let o=i.$.type;if(!o||!Ke(o))throw d({token:r.token,errorMessage:`downcast expects a Dyn type as first argument, got ${o?D(o):"unknown"}.`});let a=e.args[1],s=U({expr:a,env:t,context:{...n}});if(!s.$)throw d({token:a.token,errorMessage:"Failed to evaluate type argument for downcast."});if(t=s.$.env,!s.$.value||!W(s.$.value))throw d({token:a.token,errorMessage:`downcast expects a type as second argument, got ${s.$.type?D(s.$.type):"unknown"}.`});let l=s.$.value.value,{optionType:u,env:c}=$u(l,t,n);t=c;let _=ue(u,{env:t,context:n});return e.$={env:t,type:u,value:_,pathCollection:[]},Tt(e,!0),e}function Ga(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Jp(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function ed(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function td(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function ta(e,t,n,r,i){var c;if(!i.isEvaluatingFunctionBodyOrAsyncBlock)return;let o;if(i.isEvaluatingFunctionBodyOrAsyncBlock&&(o=i.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!o||t>=o.frames.length)return;let a,s=-1;for(let _=0;_<o.frames.length;_++){let f=(c=o.frames[_])==null?void 0:c.variables.find(p=>p.name===e);if(f){a=f,s=_;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 Oh(e){let t=e;if(I(t)&&T(t,"?=",2)&&(t=t.args[0]),I(t)&&T(t,"=",2)&&(t=t.args[0]),!I(t)||!T(t,":",2))return;let n=t.args[0],r=t.args[1];if(!I(n)||!T(n,M.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!X(i)||!kt(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function Cu({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){var A,S,V;let o,a=r,s=!1,l=!1,u,c,_,f,p,m=e,y,g,h,v;if(I(m)&&T(m,"=")){let O=m.args[0];if(O&&I(O)&&T(O,":",2))u=O,c=m.args[1],v=c,m=u;else throw d({token:m.func.token,errorMessage:'Use "?=" for default parameter values. Assigned values require an explicit type: (name : Type) = value.'})}if(I(m)&&T(m,":=",2))throw d({token:m.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(I(m)&&T(m,"?=",2)&&(c=m.args[1],u=m.args[0],h=c,m=u),I(m)&&T(m,":",2)?(c=m.args[1],u=m.args[0],y=c):v?u=m:h?(y=void 0,u=m):y=m,!y)throw d({token:e.token,errorMessage:h?"Default parameters must specify a type: (name : Type) ?= value.":'Expected an explicit type annotation for function parameter. Use "(name : Type)".'});if(u){if(I(u)&&T(u,M.comptime)){if(r)throw d({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 d({token:u.token,errorMessage:`Expected one argument for "comptime" , got ${u.args.length}`});u=u.args[0]}if(I(u)&&T(u,"own")){if(l=!0,u.args.length!==1)throw d({token:u.token,errorMessage:`Expected one argument for "own", got ${u.args.length}`});u=u.args[0]}if(I(u)&&T(u,M.quote)){if(s=!0,u.args.length!==1)throw d({token:u.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${u.args.length}`});if(a)throw d({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(!X(u)||!kt(u))throw d({token:u.token,errorMessage:`Expected identifier for parameter label, got ${L(u)}`});o=u.token.value,g=u}if(!o)throw d({token:e.token,errorMessage:`Expected a label for function parameter, got ${L(e)}`});if(o==="Self")throw d({token:(g==null?void 0:g.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let O=U({expr:v,env:t,context:{...n}});if(!O.$)throw d({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${L(v)}`});t=O.$.env;let x=O.$.value;if(!W(x))throw d({token:v.token,errorMessage:`Expected type value for = assignment, got ${lt(x)}`});if(_=Mt(),p=x,!a)throw d({token:v.token,errorMessage:`Assigned value (=) is only allowed for compile-time parameters. Use "comptime(${o})" or put this in "forall(...)".`})}if(y){let O=U({expr:y,env:t,context:{...n}});if(!O.$)throw d({token:y.token,errorMessage:`(3) Failed to evaluate type expression: ${L(y)}`});t=O.$.env;let x=O.$.value;if(W(x))_=x.value;else throw d({token:y.token,errorMessage:`Expected type for function parameter, got ${lt(x)}`})}if(h){let O=U({expr:h,env:t,context:{...n}});if((A=O.$)!=null&&A.env&&(t=(S=O.$)==null?void 0:S.env),f=(V=O.$)==null?void 0:V.value,!f)throw d({token:h.token,errorMessage:`Expected a compile-time known value for default parameter, got ${L(h)}`});if(!_)_=f.type;else if(!ae({type:_,env:t},{type:f.type,env:t}))throw d({token:h.token,errorMessage:`Incompatible default value type:
10344
+ ${L(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Qe(s))throw d({token:r.token,errorMessage:`Expected tuple type for "${F.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!ht(l))throw d({token:i.token,errorMessage:`Expected number value for index in "${F.__yo_dup_tuple_element[0]}"`});let u=Number(l.value);if(u<0||u>=s.fields.length)throw d({token:i.token,errorMessage:`Index out of bounds for tuple in "${F.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function Jp({expr:e,env:t,context:n}){Ge(e,F.downcast,2);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate dyn value argument for downcast."});t=i.$.env;let o=i.$.type;if(!o||!Ke(o))throw d({token:r.token,errorMessage:`downcast expects a Dyn type as first argument, got ${o?D(o):"unknown"}.`});let a=e.args[1],s=U({expr:a,env:t,context:{...n}});if(!s.$)throw d({token:a.token,errorMessage:"Failed to evaluate type argument for downcast."});if(t=s.$.env,!s.$.value||!W(s.$.value))throw d({token:a.token,errorMessage:`downcast expects a type as second argument, got ${s.$.type?D(s.$.type):"unknown"}.`});let l=s.$.value.value,{optionType:u,env:c}=$u(l,t,n);t=c;let _=ue(u,{env:t,context:n});return e.$={env:t,type:u,value:_,pathCollection:[]},Tt(e,!0),e}function Ga(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function ed(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function td(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function nd(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function ta(e,t,n,r,i){var c;if(!i.isEvaluatingFunctionBodyOrAsyncBlock)return;let o;if(i.isEvaluatingFunctionBodyOrAsyncBlock&&(o=i.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!o||t>=o.frames.length)return;let a,s=-1;for(let _=0;_<o.frames.length;_++){let f=(c=o.frames[_])==null?void 0:c.variables.find(p=>p.name===e);if(f){a=f,s=_;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 Rh(e){let t=e;if(I(t)&&T(t,"?=",2)&&(t=t.args[0]),I(t)&&T(t,"=",2)&&(t=t.args[0]),!I(t)||!T(t,":",2))return;let n=t.args[0],r=t.args[1];if(!I(n)||!T(n,M.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!X(i)||!kt(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function Cu({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){var A,S,V;let o,a=r,s=!1,l=!1,u,c,_,f,p,m=e,y,g,h,v;if(I(m)&&T(m,"=")){let O=m.args[0];if(O&&I(O)&&T(O,":",2))u=O,c=m.args[1],v=c,m=u;else throw d({token:m.func.token,errorMessage:'Use "?=" for default parameter values. Assigned values require an explicit type: (name : Type) = value.'})}if(I(m)&&T(m,":=",2))throw d({token:m.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(I(m)&&T(m,"?=",2)&&(c=m.args[1],u=m.args[0],h=c,m=u),I(m)&&T(m,":",2)?(c=m.args[1],u=m.args[0],y=c):v?u=m:h?(y=void 0,u=m):y=m,!y)throw d({token:e.token,errorMessage:h?"Default parameters must specify a type: (name : Type) ?= value.":'Expected an explicit type annotation for function parameter. Use "(name : Type)".'});if(u){if(I(u)&&T(u,M.comptime)){if(r)throw d({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 d({token:u.token,errorMessage:`Expected one argument for "comptime" , got ${u.args.length}`});u=u.args[0]}if(I(u)&&T(u,"own")){if(l=!0,u.args.length!==1)throw d({token:u.token,errorMessage:`Expected one argument for "own", got ${u.args.length}`});u=u.args[0]}if(I(u)&&T(u,M.quote)){if(s=!0,u.args.length!==1)throw d({token:u.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${u.args.length}`});if(a)throw d({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(!X(u)||!kt(u))throw d({token:u.token,errorMessage:`Expected identifier for parameter label, got ${L(u)}`});o=u.token.value,g=u}if(!o)throw d({token:e.token,errorMessage:`Expected a label for function parameter, got ${L(e)}`});if(o==="Self")throw d({token:(g==null?void 0:g.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let O=U({expr:v,env:t,context:{...n}});if(!O.$)throw d({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${L(v)}`});t=O.$.env;let x=O.$.value;if(!W(x))throw d({token:v.token,errorMessage:`Expected type value for = assignment, got ${lt(x)}`});if(_=Mt(),p=x,!a)throw d({token:v.token,errorMessage:`Assigned value (=) is only allowed for compile-time parameters. Use "comptime(${o})" or put this in "forall(...)".`})}if(y){let O=U({expr:y,env:t,context:{...n}});if(!O.$)throw d({token:y.token,errorMessage:`(3) Failed to evaluate type expression: ${L(y)}`});t=O.$.env;let x=O.$.value;if(W(x))_=x.value;else throw d({token:y.token,errorMessage:`Expected type for function parameter, got ${lt(x)}`})}if(h){let O=U({expr:h,env:t,context:{...n}});if((A=O.$)!=null&&A.env&&(t=(S=O.$)==null?void 0:S.env),f=(V=O.$)==null?void 0:V.value,!f)throw d({token:h.token,errorMessage:`Expected a compile-time known value for default parameter, got ${L(h)}`});if(!_)_=f.type;else if(!ae({type:_,env:t},{type:f.type,env:t}))throw d({token:h.token,errorMessage:`Incompatible default value type:
10327
10345
  - Expected: ${D(_)}
10328
10346
  - Got : ${D(f.type)}`})}if(!_)throw d({token:e.token,errorMessage:"Expected type for function parameter}"});if(a&&Jr(_,t))throw d({token:(u==null?void 0:u.token)??e.token,errorMessage:`Parameter marked as "comptime" but type is not available at compile-time:
10329
10347
  ${D(_)}`});if(!a&&Zr(_,t))throw d({token:(u==null?void 0:u.token)??e.token,errorMessage:`Parameter marked as runtime but type is not available at runtime:
@@ -10345,7 +10363,7 @@ use_id :: (fn(forall(T : Type),
10345
10363
  ) -> T) {
10346
10364
  return val.id();
10347
10365
  }
10348
- `});let E=_e(t,o),C=E.length>0?E[E.length-1]:void 0,w=E.find(O=>{if(O.value&&W(O.value[0])){let x=O.value[0];if(z(x.value))return!0}return!1}),b=$,k=_;if(w){let O=w.value[0],x=O.value;if(p&&W(p)&&z(p.value)){let N=p.value,P=[...x.requiredTraits];for(let H of N.requiredTraits)P.some(G=>G.traitType.id===H.traitType.id)||P.push(H);let R=[...x.negativeTraits??[]];if(N.negativeTraits)for(let H of N.negativeTraits)R.some(G=>G.traitType.id===H.traitType.id)||R.push(H);x.requiredTraits=P,x.negativeTraits=R}b=O,k=pn(x)}else if(C&&C.isCompileTimeOnly&&C.value&&C.frameLevel===t.frames.length-1)b=C.value[0],k=C.type;else{let{env:O}=Pe({env:t,variable:{name:o,type:_,isCompileTimeOnly:a,value:p?[p]:a?[ue(_,{variableName:o,env:t,context:n})]:void 0,token:(u==null?void 0:u.token)??e.token,initializedAtToken:(u==null?void 0:u.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=O}return u&&(u.$={env:t,type:k,value:b,pathCollection:[]}),u!==e&&y!==e&&(e.$={env:t,type:se.type,value:se,pathCollection:[]}),_n(_),{parameter:{label:o,type:_,exprs:ro({expr:e,labelExpr:g,typeExpr:y,defaultValueExpr:h,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:p},env:t}}function Rh({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!I(i)||!T(i,"<:",2))continue;let o=i.args[0];if(X(o)){let s=o.token.value;if(_e(t,s).length===0){let u=fr(Mt(),s,{env:t,context:n}),c=ye(u),{env:_}=Pe({env:t,variable:{name:s,type:pn(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:pn(u),value:c,pathCollection:[]}}}let a=bu({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function nd({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=Ph({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 rd({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=U({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!W(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!st(s.value))throw d({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(s.value)}`});let l=s.value,u=vn({targetType:e,traitType:l,env:i});if(n){if(u)throw d({token:r.token,errorMessage:`Type ${D(e)} must NOT implement ${D(l)}, but it does.`})}else if(!u)throw d({token:r.token,errorMessage:`Type ${D(e)} does not implement required trait ${D(l)}.`});return{env:i,success:!0}}function Ph({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;I(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(X(e)){let _=e.token.value,f=_e(r,_);if(f.length===0)return{env:r,success:!1};let p=f[f.length-1];if(p.value&&W(p.value[0])&&z(p.value[0].value))s=p.value[0].value;else if(p.value&&W(p.value[0]))try{return rd({concreteType:p.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{_=U({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!_.$||!_.$.value||!W(_.$.value))return{env:r,success:!1};r=_.$.env;let f=_.$.value;if(!z(f.value))try{return rd({concreteType:f.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=f.value}let l;try{l=U({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!W(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!st(u.value))throw d({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(u.value)}`});let c=u.value;if(c.receiverType)throw d({token:a.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return r=Gr({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function bu({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!I(o)||!T(o,"<:",2))throw d({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${L(o)}`});let a=o.args[0],s=o.args[1],l;if(X(a)){let c=a.token.value,_=_e(t,c);if(_.length>0){let f=_[_.length-1];if(f.value&&W(f.value[0])&&z(f.value[0].value))l=f.value[0].value;else if(f.value&&W(f.value[0])){let p=f.value[0].value;t=id({concreteType:p,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}else throw d({token:a.token,errorMessage:`Expected type for left-hand side of where clause constraint, got variable "${c}".`})}else{l=fr(Mt(),c,{env:t,context:n});let f=ye(l),{env:p}=Pe({env:t,variable:{name:c,type:pn(l),isCompileTimeOnly:!0,value:[f],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=p,a.$={env:t,type:pn(l),value:f,pathCollection:[]}}}else{let c=U({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!W(c.$.value))throw d({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let _=c.$.value;if(!z(_.value)){t=id({concreteType:_.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=_.value}let u=[];I(s)&&T(s,M.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let _=u[c],f=!1,p=_;I(_)&&T(_,"!")&&_.args.length===1&&(f=!0,p=_.args[0]);let m;try{m=U({expr:p,env:t,context:{...n}})}catch(h){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw h}if(!m.$||!m.$.value||!W(m.$.value)){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw d({token:p.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=m.$.env;let y=m.$.value;if(!st(y.value))throw d({token:p.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(y.value)}`});let g=y.value;if(g.receiverType)throw d({token:p.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Gr({env:t,someType:l,traitType:g,isNegated:f})}}return{env:t,pendingTraits:i}}function Mi({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:bu({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function id({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(I(t)&&T(t,M.tuple))for(let a of t.args)I(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else I(t)&&T(t,"!")&&t.args.length===1?o.push({expr:t.args[0],isNegated:!0}):o.push({expr:t,isNegated:!1});for(let{expr:a,isNegated:s}of o){let l=U({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!W(l.$.value))throw d({token:a.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."});r=l.$.env;let u=l.$.value;if(!st(u.value))throw d({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(u.value)}`});let c=u.value,_=vn({targetType:e,traitType:c,env:r});if(s){if(_)throw d({token:n.token,errorMessage:`Type ${D(e)} must NOT implement ${D(c)}, but it does.`})}else if(!_)throw d({token:n.token,errorMessage:`Type ${D(e)} does not implement required trait ${D(c)}.`})}return r}function ku({parameterExprs:e,env:t,context:n}){var f,p,m;t=yt(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let y=e[0];if(I(y)&&T(y,M.forall)){let g=y.args;for(let h=0;h<g.length;h++){let v=g[h];if(I(v)&&T(v,"...")&&v.args.length===1&&X(v.args[0])){let w=v.args[0].token.value;if(i.find(O=>O.label===w))throw d({token:v.token,errorMessage:`Duplicate label "${w}" in type parameter`});let k=no(w,t),A=ir(1),{env:S}=Pe({env:t,variable:{name:w,type:A,isCompileTimeOnly:!0,value:[ye(k)],token:v.args[0].token,initializedAtToken:v.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=S,v.$={env:t,type:A,value:ye(k),pathCollection:[]};let V={label:w,type:A,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:ro({expr:v,labelExpr:v.args[0],typeExpr:v.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(V);continue}let{parameter:$,env:E}=Cu({expr:v,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(w=>w.label===$.label))throw d({token:v.token,errorMessage:`Duplicate label "${$.label}" in type parameter`});i.push($),t=E}}}let u=0;for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&T(g,M.using)){if(u++,u>1)throw d({token:g.token,errorMessage:'Only one "using(...)" clause is allowed per function signature. Combine all implicit parameters into a single using(), e.g.: using(a : TypeA, b : TypeB)'});let h=g.args;for(let v=0;v<h.length;v++){let $=h[v];if(I($)&&T($,"...")&&$.args.length===1&&X($.args[0])){let O=$.args[0].token.value,N=_e(t,O).at(-1);if(!N)throw d({token:$.token,errorMessage:`Effect row variable "${O}" not found in scope. Declare it with forall(..., ...(${O}))`});let P,R=(f=N.value)==null?void 0:f[0];if(R&&W(R)&&Ut(R.value)){let G=R.value;for(let Q of G.implicitParameters)o.push({...Q,isEffectRowSpread:!1});continue}else if(R&&W(R)){if(!(z(R.value)&&R.value.isEffectsRow||Ut(R.value)))throw d({token:$.token,errorMessage:`"...(${O})" requires "${O}" 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 : ${O}) instead of using(...(${O}))`});P=R.value}else if(R&&Oe(R)&&Ut(R.type)){let G=R.type;for(let Q of G.implicitParameters)o.push({...Q,isEffectRowSpread:!1});continue}else if(R&&Oe(R))P=no(O,t);else throw d({token:$.token,errorMessage:`Effect row variable "${O}" has invalid value. Expected a type.`});let H={label:O,type:P,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:ro({expr:$,labelExpr:$.args[0],typeExpr:$.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(H);continue}if(!(I($)&&(T($,":")||T($,"=")||T($,"?=")||T($,":="))))throw d({token:$.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:C,env:w}=Cu({expr:$,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(O=>O.label===C.label))throw d({token:$.token,errorMessage:`Duplicate label "${C.label}" in implicit parameter (already in forall)`});if(o.find(O=>O.label===C.label))throw d({token:$.token,errorMessage:`Duplicate label "${C.label}" in implicit parameter`});let A={...C,isCompileTimeOnly:!0,isImplicit:!0};o.push(A);let V=w.frames[w.frames.length-1].variables.find(O=>O.name===C.label);V&&(V.isImplicit=!0),t=w}}}let c=new Set;for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&(T(g,M.forall)||T(g,M.using)||T(g,M.where)||T(g,"...")))continue;let h=Oh(g);if(h){let v=U({expr:h.typeExpr,env:t,context:{...n}});if((p=v.$)!=null&&p.env&&(t=v.$.env),!v.$||!v.$.value||!W(v.$.value))continue;let $=v.$.value.value,E=ue($,{variableName:h.name,env:t,context:n}),{env:C}=Pe({env:t,variable:{name:h.name,type:$,isCompileTimeOnly:!0,value:[E],token:h.token,initializedAtToken:h.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,c.add(y)}}let _=[];if(e.length>0){let y=e[e.length-1];if(I(y)&&T(y,M.where)){if(s=y.args,s.length===0)throw d({token:y.token,errorMessage:"The where clause must have at least one constraint."});let g=Rh({constraintExprs:s,env:t,context:n});t=g.env,_=g.pendingConstraints}}for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&T(g,M.forall)){if(y!==0)throw d({token:g.token,errorMessage:`Expected type parameters to be the first argument, got ${y+1}`});continue}else{if(I(g)&&T(g,M.using))continue;if(I(g)&&T(g,M.where)){if(y!==e.length-1)throw d({token:g.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(X(g)&&Kt(g,"...")||I(g)&&T(g,"...")){l=!0;let h=!1,v=!1,$="...",E=g,C=se.type;if(I(g)){let k=g.args[0];if(k){if(I(k)&&T(k,M.comptime))throw h=!0,k.args.length!==1?d({token:k.token,errorMessage:`Expected one argument for "comptime" , got ${k.args.length}`}):(E=k.args[0],$=k.args[0].token.value,C=se.type,d({token:k.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(I(k)&&T(k,M.quote)){if(h=!0,v=!0,k.args.length!==1)throw d({token:k.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${k.args.length}`});E=k.args[0],$=k.args[0].token.value,C=wa()}else throw kt(k)?(E=k,$=k.token.value,C=se.type,d({token:k.token,errorMessage:"...(param_name) is not supported yet."})):d({token:k.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${L(k)}`})}else throw d({token:g.token,errorMessage:`Expected a name for variadic parameter, got ${L(g)}`})}else C=se.type;let w=On(D(C)),b={exprs:{expr:g,labelExpr:E,typeExpr:w},isCompileTimeOnly:h,isQuote:v,label:$,type:C,isOwningTheRcValue:!1,isImplicit:!1};if(a=b,$!=="..."){let{env:k}=Pe({env:t,variable:{name:$,type:C,isCompileTimeOnly:b.isCompileTimeOnly,value:h?[ue(C,{variableName:$,env:t,context:n})]:void 0,token:E.token,initializedAtToken:E.token,consumedAtToken:void 0,isOwningTheRcValue:b.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=k,E.$={env:t,type:C,value:h?ue(C,{variableName:$,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw d({token:g.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:h,env:v}=Cu({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(E=>E.label===h.label))throw d({token:I(g)?((m=g.args[0])==null?void 0:m.token)??g.token:g.token,errorMessage:`Duplicate label "${h.label}" in function parameter`});if(r.push(h),t=v,_.length>0){let E=nd({pendingConstraints:_,env:t,context:n});t=E.env,_=E.pendingConstraints}}}}if(r.forEach((y,g)=>{if(y.isQuote&&Bi(y.type)&&g!==r.length-1)throw d({token:y.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),_.length>0){let y=nd({pendingConstraints:_,env:t,context:n});if(t=y.env,y.pendingConstraints.length>0){let g=y.pendingConstraints[0];bu({constraintExprs:[g.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function Ps({expr:e,env:t,context:n}){var E;if(!T(e,"->",2))throw d({token:e.token,errorMessage:`Expected -> for function type, got:
10366
+ `});let E=_e(t,o),C=E.length>0?E[E.length-1]:void 0,w=E.find(O=>{if(O.value&&W(O.value[0])){let x=O.value[0];if(z(x.value))return!0}return!1}),b=$,k=_;if(w){let O=w.value[0],x=O.value;if(p&&W(p)&&z(p.value)){let N=p.value,P=[...x.requiredTraits];for(let H of N.requiredTraits)P.some(G=>G.traitType.id===H.traitType.id)||P.push(H);let R=[...x.negativeTraits??[]];if(N.negativeTraits)for(let H of N.negativeTraits)R.some(G=>G.traitType.id===H.traitType.id)||R.push(H);x.requiredTraits=P,x.negativeTraits=R}b=O,k=dn(x)}else if(C&&C.isCompileTimeOnly&&C.value&&C.frameLevel===t.frames.length-1)b=C.value[0],k=C.type;else{let{env:O}=Pe({env:t,variable:{name:o,type:_,isCompileTimeOnly:a,value:p?[p]:a?[ue(_,{variableName:o,env:t,context:n})]:void 0,token:(u==null?void 0:u.token)??e.token,initializedAtToken:(u==null?void 0:u.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=O}return u&&(u.$={env:t,type:k,value:b,pathCollection:[]}),u!==e&&y!==e&&(e.$={env:t,type:se.type,value:se,pathCollection:[]}),fn(_),{parameter:{label:o,type:_,exprs:ro({expr:e,labelExpr:g,typeExpr:y,defaultValueExpr:h,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:p},env:t}}function Ph({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!I(i)||!T(i,"<:",2))continue;let o=i.args[0];if(X(o)){let s=o.token.value;if(_e(t,s).length===0){let u=fr(Mt(),s,{env:t,context:n}),c=ye(u),{env:_}=Pe({env:t,variable:{name:s,type:dn(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:dn(u),value:c,pathCollection:[]}}}let a=bu({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function rd({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=Uh({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 id({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=U({expr:t,env:i,context:{...o}})}catch{return{env:i,success:!1}}if(!a.$||!a.$.value||!W(a.$.value))return{env:i,success:!1};i=a.$.env;let s=a.$.value;if(!st(s.value))throw d({token:t.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(s.value)}`});let l=s.value,u=vn({targetType:e,traitType:l,env:i});if(n){if(u)throw d({token:r.token,errorMessage:`Type ${D(e)} must NOT implement ${D(l)}, but it does.`})}else if(!u)throw d({token:r.token,errorMessage:`Type ${D(e)} does not implement required trait ${D(l)}.`});return{env:i,success:!0}}function Uh({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;I(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(X(e)){let _=e.token.value,f=_e(r,_);if(f.length===0)return{env:r,success:!1};let p=f[f.length-1];if(p.value&&W(p.value[0])&&z(p.value[0].value))s=p.value[0].value;else if(p.value&&W(p.value[0]))try{return id({concreteType:p.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{_=U({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!_.$||!_.$.value||!W(_.$.value))return{env:r,success:!1};r=_.$.env;let f=_.$.value;if(!z(f.value))try{return id({concreteType:f.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=f.value}let l;try{l=U({expr:a,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!l.$||!l.$.value||!W(l.$.value))return{env:r,success:!1};r=l.$.env;let u=l.$.value;if(!st(u.value))throw d({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(u.value)}`});let c=u.value;if(c.receiverType)throw d({token:a.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});return r=Gr({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function bu({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!I(o)||!T(o,"<:",2))throw d({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${L(o)}`});let a=o.args[0],s=o.args[1],l;if(X(a)){let c=a.token.value,_=_e(t,c);if(_.length>0){let f=_[_.length-1];if(f.value&&W(f.value[0])&&z(f.value[0].value))l=f.value[0].value;else if(f.value&&W(f.value[0])){let p=f.value[0].value;t=od({concreteType:p,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}else throw d({token:a.token,errorMessage:`Expected type for left-hand side of where clause constraint, got variable "${c}".`})}else{l=fr(Mt(),c,{env:t,context:n});let f=ye(l),{env:p}=Pe({env:t,variable:{name:c,type:dn(l),isCompileTimeOnly:!0,value:[f],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=p,a.$={env:t,type:dn(l),value:f,pathCollection:[]}}}else{let c=U({expr:a,env:t,context:{...n}});if(!c.$||!c.$.value||!W(c.$.value))throw d({token:a.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=c.$.env;let _=c.$.value;if(!z(_.value)){t=od({concreteType:_.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=_.value}let u=[];I(s)&&T(s,M.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let _=u[c],f=!1,p=_;I(_)&&T(_,"!")&&_.args.length===1&&(f=!0,p=_.args[0]);let m;try{m=U({expr:p,env:t,context:{...n}})}catch(h){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw h}if(!m.$||!m.$.value||!W(m.$.value)){if(r){i.push({lhsExpr:a,traitExpr:_,originalConstraintExpr:o});continue}throw d({token:p.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=m.$.env;let y=m.$.value;if(!st(y.value))throw d({token:p.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(y.value)}`});let g=y.value;if(g.receiverType)throw d({token:p.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Gr({env:t,someType:l,traitType:g,isNegated:f})}}return{env:t,pendingTraits:i}}function Mi({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:bu({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function od({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(I(t)&&T(t,M.tuple))for(let a of t.args)I(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else I(t)&&T(t,"!")&&t.args.length===1?o.push({expr:t.args[0],isNegated:!0}):o.push({expr:t,isNegated:!1});for(let{expr:a,isNegated:s}of o){let l=U({expr:a,env:r,context:{...i}});if(!l.$||!l.$.value||!W(l.$.value))throw d({token:a.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."});r=l.$.env;let u=l.$.value;if(!st(u.value))throw d({token:a.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(u.value)}`});let c=u.value,_=vn({targetType:e,traitType:c,env:r});if(s){if(_)throw d({token:n.token,errorMessage:`Type ${D(e)} must NOT implement ${D(c)}, but it does.`})}else if(!_)throw d({token:n.token,errorMessage:`Type ${D(e)} does not implement required trait ${D(c)}.`})}return r}function ku({parameterExprs:e,env:t,context:n}){var f,p,m;t=yt(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let y=e[0];if(I(y)&&T(y,M.forall)){let g=y.args;for(let h=0;h<g.length;h++){let v=g[h];if(I(v)&&T(v,"...")&&v.args.length===1&&X(v.args[0])){let w=v.args[0].token.value;if(i.find(O=>O.label===w))throw d({token:v.token,errorMessage:`Duplicate label "${w}" in type parameter`});let k=no(w,t),A=ir(1),{env:S}=Pe({env:t,variable:{name:w,type:A,isCompileTimeOnly:!0,value:[ye(k)],token:v.args[0].token,initializedAtToken:v.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=S,v.$={env:t,type:A,value:ye(k),pathCollection:[]};let V={label:w,type:A,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:ro({expr:v,labelExpr:v.args[0],typeExpr:v.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(V);continue}let{parameter:$,env:E}=Cu({expr:v,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(w=>w.label===$.label))throw d({token:v.token,errorMessage:`Duplicate label "${$.label}" in type parameter`});i.push($),t=E}}}let u=0;for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&T(g,M.using)){if(u++,u>1)throw d({token:g.token,errorMessage:'Only one "using(...)" clause is allowed per function signature. Combine all implicit parameters into a single using(), e.g.: using(a : TypeA, b : TypeB)'});let h=g.args;for(let v=0;v<h.length;v++){let $=h[v];if(I($)&&T($,"...")&&$.args.length===1&&X($.args[0])){let O=$.args[0].token.value,N=_e(t,O).at(-1);if(!N)throw d({token:$.token,errorMessage:`Effect row variable "${O}" not found in scope. Declare it with forall(..., ...(${O}))`});let P,R=(f=N.value)==null?void 0:f[0];if(R&&W(R)&&Ut(R.value)){let G=R.value;for(let Q of G.implicitParameters)o.push({...Q,isEffectRowSpread:!1});continue}else if(R&&W(R)){if(!(z(R.value)&&R.value.isEffectsRow||Ut(R.value)))throw d({token:$.token,errorMessage:`"...(${O})" requires "${O}" 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 : ${O}) instead of using(...(${O}))`});P=R.value}else if(R&&Oe(R)&&Ut(R.type)){let G=R.type;for(let Q of G.implicitParameters)o.push({...Q,isEffectRowSpread:!1});continue}else if(R&&Oe(R))P=no(O,t);else throw d({token:$.token,errorMessage:`Effect row variable "${O}" has invalid value. Expected a type.`});let H={label:O,type:P,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:ro({expr:$,labelExpr:$.args[0],typeExpr:$.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(H);continue}if(!(I($)&&(T($,":")||T($,"=")||T($,"?=")||T($,":="))))throw d({token:$.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:C,env:w}=Cu({expr:$,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(O=>O.label===C.label))throw d({token:$.token,errorMessage:`Duplicate label "${C.label}" in implicit parameter (already in forall)`});if(o.find(O=>O.label===C.label))throw d({token:$.token,errorMessage:`Duplicate label "${C.label}" in implicit parameter`});let A={...C,isCompileTimeOnly:!0,isImplicit:!0};o.push(A);let V=w.frames[w.frames.length-1].variables.find(O=>O.name===C.label);V&&(V.isImplicit=!0),t=w}}}let c=new Set;for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&(T(g,M.forall)||T(g,M.using)||T(g,M.where)||T(g,"...")))continue;let h=Rh(g);if(h){let v=U({expr:h.typeExpr,env:t,context:{...n}});if((p=v.$)!=null&&p.env&&(t=v.$.env),!v.$||!v.$.value||!W(v.$.value))continue;let $=v.$.value.value,E=ue($,{variableName:h.name,env:t,context:n}),{env:C}=Pe({env:t,variable:{name:h.name,type:$,isCompileTimeOnly:!0,value:[E],token:h.token,initializedAtToken:h.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=C,c.add(y)}}let _=[];if(e.length>0){let y=e[e.length-1];if(I(y)&&T(y,M.where)){if(s=y.args,s.length===0)throw d({token:y.token,errorMessage:"The where clause must have at least one constraint."});let g=Ph({constraintExprs:s,env:t,context:n});t=g.env,_=g.pendingConstraints}}for(let y=0;y<e.length;y++){let g=e[y];if(I(g)&&T(g,M.forall)){if(y!==0)throw d({token:g.token,errorMessage:`Expected type parameters to be the first argument, got ${y+1}`});continue}else{if(I(g)&&T(g,M.using))continue;if(I(g)&&T(g,M.where)){if(y!==e.length-1)throw d({token:g.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(X(g)&&Kt(g,"...")||I(g)&&T(g,"...")){l=!0;let h=!1,v=!1,$="...",E=g,C=se.type;if(I(g)){let k=g.args[0];if(k){if(I(k)&&T(k,M.comptime))throw h=!0,k.args.length!==1?d({token:k.token,errorMessage:`Expected one argument for "comptime" , got ${k.args.length}`}):(E=k.args[0],$=k.args[0].token.value,C=se.type,d({token:k.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(I(k)&&T(k,M.quote)){if(h=!0,v=!0,k.args.length!==1)throw d({token:k.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${k.args.length}`});E=k.args[0],$=k.args[0].token.value,C=wa()}else throw kt(k)?(E=k,$=k.token.value,C=se.type,d({token:k.token,errorMessage:"...(param_name) is not supported yet."})):d({token:k.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${L(k)}`})}else throw d({token:g.token,errorMessage:`Expected a name for variadic parameter, got ${L(g)}`})}else C=se.type;let w=On(D(C)),b={exprs:{expr:g,labelExpr:E,typeExpr:w},isCompileTimeOnly:h,isQuote:v,label:$,type:C,isOwningTheRcValue:!1,isImplicit:!1};if(a=b,$!=="..."){let{env:k}=Pe({env:t,variable:{name:$,type:C,isCompileTimeOnly:b.isCompileTimeOnly,value:h?[ue(C,{variableName:$,env:t,context:n})]:void 0,token:E.token,initializedAtToken:E.token,consumedAtToken:void 0,isOwningTheRcValue:b.isOwningTheRcValue,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=k,E.$={env:t,type:C,value:h?ue(C,{variableName:$,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw d({token:g.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:h,env:v}=Cu({expr:g,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(E=>E.label===h.label))throw d({token:I(g)?((m=g.args[0])==null?void 0:m.token)??g.token:g.token,errorMessage:`Duplicate label "${h.label}" in function parameter`});if(r.push(h),t=v,_.length>0){let E=rd({pendingConstraints:_,env:t,context:n});t=E.env,_=E.pendingConstraints}}}}if(r.forEach((y,g)=>{if(y.isQuote&&Bi(y.type)&&g!==r.length-1)throw d({token:y.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),_.length>0){let y=rd({pendingConstraints:_,env:t,context:n});if(t=y.env,y.pendingConstraints.length>0){let g=y.pendingConstraints[0];bu({constraintExprs:[g.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function Ps({expr:e,env:t,context:n}){var E;if(!T(e,"->",2))throw d({token:e.token,errorMessage:`Expected -> for function type, got:
10349
10367
  ${L(e)}
10350
10368
 
10351
10369
  Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],i=e.args[1],o=[];if(I(r)&&(T(r,M.fn)||T(r,M.unsafe_fn)))o=r.args;else throw d({token:r.token,errorMessage:`Expected a "fn" or "unsafe_fn" call for parameter list, got:
@@ -10355,32 +10373,32 @@ ${L(y)}`});if(Zr(h,t)&&!p&&(h=Qt({type:h,expectedType:void 0,expr:void 0,env:t})
10355
10373
  comptime(${L(y)})
10356
10374
 
10357
10375
  Given type:
10358
- ${D(h)}`});if(n.isUnsafeFunctionType||pi(h,y.token),p&&Jr(h,t))throw d({token:y.token,errorMessage:`Unexpected "comptime" for return type of ${D(h)} which can only be used at runtime.`});if(p){for(let C of a)if(!C.isCompileTimeOnly)throw d({token:Hu(C),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(m&&!yn(h))throw d({token:y.token,errorMessage:`Expected Expr type for "unquote" return type, got ${D(h)}`});let $=eo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:h,typeExpr:y,isCompileTimeOnly:p,isUnquote:m,label:f??`fn_return_${$t(t.modulePath)}`},env:Yt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,SelfTraitType:n.SelfTraitType,SelfModuleType:n.SelfModuleType});return t=Yt(t,!0),e.$={env:t,value:ye($),type:pn($),pathCollection:[]},e}function Wa({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){var s,l,u,c,_,f;let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let p=r??(((s=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:s.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),m=U({expr:et(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType,isEvaluatingFunctionBodyOrAsyncBlock:p?{kind:"function-body",type:p,evaluationEnv:t}:void 0}});if(!W((l=m.$)==null?void 0:l.value))throw d({token:o.token,errorMessage:`Expected type for parameter, got:
10376
+ ${D(h)}`});if(n.isUnsafeFunctionType||pi(h,y.token),p&&Jr(h,t))throw d({token:y.token,errorMessage:`Unexpected "comptime" for return type of ${D(h)} which can only be used at runtime.`});if(p){for(let C of a)if(!C.isCompileTimeOnly)throw d({token:Hu(C),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(m&&!yn(h))throw d({token:y.token,errorMessage:`Expected Expr type for "unquote" return type, got ${D(h)}`});let $=eo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:h,typeExpr:y,isCompileTimeOnly:p,isUnquote:m,label:f??`fn_return_${$t(t.modulePath)}`},env:Yt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,SelfTraitType:n.SelfTraitType,SelfModuleType:n.SelfModuleType});return t=Yt(t,!0),e.$={env:t,value:ye($),type:dn($),pathCollection:[]},e}function Wa({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){var s,l,u,c,_,f;let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let p=r??(((s=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:s.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),m=U({expr:et(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType,isEvaluatingFunctionBodyOrAsyncBlock:p?{kind:"function-body",type:p,evaluationEnv:t}:void 0}});if(!W((l=m.$)==null?void 0:l.value))throw d({token:o.token,errorMessage:`Expected type for parameter, got:
10359
10377
  ${L(m)}`});return(u=m.$)!=null&&u.env&&(t=(c=m.$)==null?void 0:c.env),{parameterType:(_=m.$)==null?void 0:_.value.value,calleeEnv:t}}else if(a){let p=U({expr:et(a),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType}});if(!p.$)throw d({token:a.token,errorMessage:`Failed to evaluate default value expression:
10360
- ${L(a)}`});return t=(f=p.$)==null?void 0:f.env,{parameterType:p.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function _o({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let i=e.return,o=U({expr:et(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType,SelfTraitType:e.SelfTraitType??n.SelfTraitType,SelfModuleType:e.SelfModuleType??n.SelfModuleType}}),a,s=(l=o.$)==null?void 0:l.value;if(W(s))a=s.value;else throw d({token:(r==null?void 0:r.token)??Ae,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return z(a)&&(a=kn(t,a)),{returnType:a,calleeEnv:((u=o.$)==null?void 0:u.env)??t}}function od({expr:e,env:t,context:n}){var f;let r=e.func,i=e.args;if(!X(r)||r.token.value!=="_")throw d({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
10378
+ ${L(a)}`});return t=(f=p.$)==null?void 0:f.env,{parameterType:p.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function _o({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let i=e.return,o=U({expr:et(i.typeExpr),env:t,context:{...n,SelfType:e.SelfType,SelfTraitType:e.SelfTraitType??n.SelfTraitType,SelfModuleType:e.SelfModuleType??n.SelfModuleType}}),a,s=(l=o.$)==null?void 0:l.value;if(W(s))a=s.value;else throw d({token:(r==null?void 0:r.token)??Ae,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return z(a)&&(a=kn(t,a)),{returnType:a,calleeEnv:((u=o.$)==null?void 0:u.env)??t}}function ad({expr:e,env:t,context:n}){var f;let r=e.func,i=e.args;if(!X(r)||r.token.value!=="_")throw d({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
10361
10379
  ${L(r)}`});let o=Ji(t),a=o.fields,s=[],l=[];for(let p=0;p<i.length;p++){let m=i[p],y,g=m,h;if(I(m)&&T(m,":",2)){if(y=m.args[0],g=m.args[1],!kt(y))throw d({token:y.token,errorMessage:`Expected identifier for anonymous struct field label, got:
10362
- ${L(y)}`});h=y.token.value}{let v=U({expr:g,env:t,context:{...n,SelfType:o}});if(Vn(v,n),!v.$)throw d({token:g.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${L(g)}`});t=v.$.env;let $=v.$.type,E={exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:g},type:$,label:h??`__field_${$t(t.modulePath)}`};a.push(E),l.push(v),v.$.value?s.push((f=v.$)==null?void 0:f.value):s.push(void 0),y&&(y.$=v.$)}}t=Qi({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(p=>!p)?void 0:Ir(o,s);let c=ye(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:_}=Pe({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},Tt(e,!0),e}function ad({expr:e,env:t,context:n}){let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for Arc:
10380
+ ${L(y)}`});h=y.token.value}{let v=U({expr:g,env:t,context:{...n,SelfType:o}});if(Vn(v,n),!v.$)throw d({token:g.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${L(g)}`});t=v.$.env;let $=v.$.type,E={exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:g},type:$,label:h??`__field_${$t(t.modulePath)}`};a.push(E),l.push(v),v.$.value?s.push((f=v.$)==null?void 0:f.value):s.push(void 0),y&&(y.$=v.$)}}t=Qi({structType:o,env:t,context:n,errorToken:r.token});let u;u=s.some(p=>!p)?void 0:Ir(o,s);let c=ye(o);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:_}=Pe({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},Tt(e,!0),e}function sd({expr:e,env:t,context:n}){let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for Arc:
10363
10381
  ${L(r)}`});if(t=i.$.env,!W(i.$.value))throw d({token:r.token,errorMessage:`Arc expects a type as argument, but got:
10364
- ${L(r)}`});let a=i.$.value.value,s=Lc(a,t);t=sc({arcType:s,env:t,context:n});let l=ye(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function sd({expr:e,env:t,context:n,arcType:r}){let i=e.args[0],o=U({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate the argument expression for Arc value constructor:
10365
- ${L(i)}`});return t=o.$.env,t=sr(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Tt(e,!0),e}function ld({expr:e,arrayType:t,arrayValue:n,sliceValue:r,argExprs:i,callerEnv:o,context:a}){if(i.length!==1)throw d({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${i.length}.`});if(X(e.args[0])&&Kt(e.args[0],":")||I(e.args[0])&&T(e.args[0],":")){let s=ms(t.childType);if(X(e.args[0]))return n?{value:os(s,[n],0,n.elements.length),type:s,callerEnv:o}:r?{value:r,type:s,callerEnv:o}:{value:void 0,type:s,callerEnv:o};{let l=e.args[0].args[0],u=e.args[0].args[1],c=U({expr:l,env:o,context:{...a,expectedType:{type:tn(),env:o}}});if(!c.$)throw d({token:l.token,errorMessage:`Failed to evaluate start expression:
10382
+ ${L(r)}`});let a=i.$.value.value,s=Lc(a,t);t=sc({arcType:s,env:t,context:n});let l=ye(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function ld({expr:e,env:t,context:n,arcType:r}){let i=e.args[0],o=U({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate the argument expression for Arc value constructor:
10383
+ ${L(i)}`});return t=o.$.env,t=sr(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Tt(e,!0),e}function ud({expr:e,arrayType:t,arrayValue:n,sliceValue:r,argExprs:i,callerEnv:o,context:a}){if(i.length!==1)throw d({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${i.length}.`});if(X(e.args[0])&&Kt(e.args[0],":")||I(e.args[0])&&T(e.args[0],":")){let s=ms(t.childType);if(X(e.args[0]))return n?{value:os(s,[n],0,n.elements.length),type:s,callerEnv:o}:r?{value:r,type:s,callerEnv:o}:{value:void 0,type:s,callerEnv:o};{let l=e.args[0].args[0],u=e.args[0].args[1],c=U({expr:l,env:o,context:{...a,expectedType:{type:tn(),env:o}}});if(!c.$)throw d({token:l.token,errorMessage:`Failed to evaluate start expression:
10366
10384
  ${L(l)}`});o=c.$.env;let _=c.$.type;if(!ae({type:tn(),env:o},{type:_,env:o}))throw d({token:l.token,errorMessage:`Expected usize for array start index, got:
10367
10385
  ${D(_)}`});let f=U({expr:u,env:o,context:{...a,expectedType:{type:tn(),env:o}}});if(!f.$)throw d({token:u.token,errorMessage:`Failed to evaluate end expression:
10368
10386
  ${L(u)}`});o=f.$.env;let p=f.$.type;if(!ae({type:tn(),env:o},{type:p,env:o}))throw d({token:u.token,errorMessage:`Expected usize for array end index, got:
10369
10387
  ${D(p)}`});if(n&&ht(c.$.value)&&ht(f.$.value)){let m=c.$.value.value,y=f.$.value.value,g=typeof m=="bigint"?Number(m):m,h=typeof y=="bigint"?Number(y):y;if(g<0||g>n.elements.length)throw d({token:l.token,errorMessage:`Slice start index out of bounds: ${g}. Expected index in range [0, ${n.elements.length}].`});if(h<g||h>n.elements.length)throw d({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${g}, ${n.elements.length}].`});return{value:os(s,[n],g,h),type:s,callerEnv:o}}if(r&&ht(c.$.value)&&ht(f.$.value)){let m=c.$.value.value,y=f.$.value.value,g=typeof m=="bigint"?Number(m):m,h=typeof y=="bigint"?Number(y):y,v=r.endIndex-r.startIndex;if(g<0||g>v)throw d({token:l.token,errorMessage:`Slice start index out of bounds: ${g}. Expected index in range [0, ${v}].`});if(h<g||h>v)throw d({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${g}, ${v}].`});let $=r.startIndex+g,E=r.startIndex+h;return{value:os(s,r.sourceArray,$,E),type:s,callerEnv:o}}return{value:void 0,type:s,callerEnv:o}}}else{let s=i[0],l=U({expr:s,env:o,context:{...a,expectedType:{type:tn(),env:o}}});if(!l.$)throw d({token:s.token,errorMessage:`Failed to evaluate argument expression:
10370
10388
  ${L(s)}`});o=l.$.env;let u=l.$.type;if(!ae({type:tn(),env:o},{type:u,env:o}))throw d({token:s.token,errorMessage:`Expected usize for array index, got:
10371
- ${D(u)}`});let c=t.childType;if(r)if(l.$.value)if(ht(l.$.value)){let _=l.$.value.value,f=typeof _=="bigint"?Number(_):_,p=r.endIndex-r.startIndex;if(f<0||f>=p)throw d({token:s.token,errorMessage:`Slice index out of bounds: ${f}. Expected index in range [0, ${p-1}].`});let m=r.startIndex+f,y=r.sourceArray[0];return{value:y.elements[m],index:f,arrayElementRef:{arrayValue:y,index:m},type:c,callerEnv:o}}else return{value:ue(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Qt({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(ht(l.$.value)){let _=l.$.value.value,f=typeof _=="bigint"?Number(_):_;if(f<0||f>=n.elements.length)throw d({token:s.token,errorMessage:`Array index out of bounds: ${f}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[f],index:f,arrayElementRef:{arrayValue:n,index:f},type:c,callerEnv:o}}else return{value:ue(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Qt({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function ud({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(ht(o)){if(s=Number(o.value),n.length!==s)throw d({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(Oe(o)){s=n.length;let f=Xr(BigInt(s));a=ni(t.childType,f)}else throw d({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${o}.`});let l=[],u=r,c=a.childType;for(let f=0;f<n.length;f++){let p=n[f],m=U({expr:p,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!m.$)throw d({token:p.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(Vn(m,i),u=m.$.env,f===0&&Xe(c)&&Oe(c.length)&&Xe(m.$.type)&&(c=m.$.type,a=ni(c,a.length)),!ae({type:c,env:u},{type:m.$.type,env:u}))throw d({token:p.token,errorMessage:`Array element at index ${f} has incompatible type:
10389
+ ${D(u)}`});let c=t.childType;if(r)if(l.$.value)if(ht(l.$.value)){let _=l.$.value.value,f=typeof _=="bigint"?Number(_):_,p=r.endIndex-r.startIndex;if(f<0||f>=p)throw d({token:s.token,errorMessage:`Slice index out of bounds: ${f}. Expected index in range [0, ${p-1}].`});let m=r.startIndex+f,y=r.sourceArray[0];return{value:y.elements[m],index:f,arrayElementRef:{arrayValue:y,index:m},type:c,callerEnv:o}}else return{value:ue(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Qt({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(ht(l.$.value)){let _=l.$.value.value,f=typeof _=="bigint"?Number(_):_;if(f<0||f>=n.elements.length)throw d({token:s.token,errorMessage:`Array index out of bounds: ${f}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[f],index:f,arrayElementRef:{arrayValue:n,index:f},type:c,callerEnv:o}}else return{value:ue(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Qt({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function cd({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(ht(o)){if(s=Number(o.value),n.length!==s)throw d({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(Oe(o)){s=n.length;let f=Xr(BigInt(s));a=ni(t.childType,f)}else throw d({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${o}.`});let l=[],u=r,c=a.childType;for(let f=0;f<n.length;f++){let p=n[f],m=U({expr:p,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!m.$)throw d({token:p.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(Vn(m,i),u=m.$.env,f===0&&Xe(c)&&Oe(c.length)&&Xe(m.$.type)&&(c=m.$.type,a=ni(c,a.length)),!ae({type:c,env:u},{type:m.$.type,env:u}))throw d({token:p.token,errorMessage:`Array element at index ${f} has incompatible type:
10372
10390
  - Expected: ${D(c)}
10373
- - Given : ${D(m.$.type)}`});m.$.value!==void 0?l.push(m.$.value):l.push(ue(c,{env:u,context:i}))}let _=ki(a,l);return e.$={env:u,value:_,type:a,pathCollection:[]},e}function cd({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=_e(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=vt(r,s,{...s,consumedAtToken:n}))}}return r}function na(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function Us({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!_n(i)&&!vn({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!vn({targetType:l.type,traitType:i,env:n})),a=D(i),s=o.map(l=>`\`${l.label}\` has type \`${D(l.type)}\` which does not implement \`${a}\``).join(`
10391
+ - Given : ${D(m.$.type)}`});m.$.value!==void 0?l.push(m.$.value):l.push(ue(c,{env:u,context:i}))}let _=ki(a,l);return e.$={env:u,value:_,type:a,pathCollection:[]},e}function _d({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=_e(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=vt(r,s,{...s,consumedAtToken:n}))}}return r}function na(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function Us({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!fn(i)&&!vn({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!vn({targetType:l.type,traitType:i,env:n})),a=D(i),s=o.map(l=>`\`${l.label}\` has type \`${D(l.type)}\` which does not implement \`${a}\``).join(`
10374
10392
  `);throw d({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function zs({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=Ji(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=Qi({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=Ir(s,u):a=void 0}else{let s=Ji(n);s.fields=[],n=Qi({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=Ir(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 d({token:r,errorMessage:`Captured variable "${_}" does not exist in expected capture struct "${D(s)}"`});for(let _ of s.fields)if(!l.includes(_.label))throw d({token:r,errorMessage:`Expected capture struct field "${_.label}" is not captured by this closure`});for(let[_,f]of t.entries()){let p=s.fields.find(m=>m.label===_);if(p&&!ae({type:p.type,env:n},{type:f.type,env:n}))throw d({token:f.token,errorMessage:`Captured variable "${_}" has type "${D(f.type)}" but expected struct field has type "${D(p.type)}"`})}let c=Array.from(t.values()).map(_=>_.value);c.every(_=>_!==void 0)?a=Ir(o,c):a=void 0}else a=Ir(o,[]);return{captureType:o,captureValue:a}}function Bs({capturedVariables:e,env:t}){var r;let n=new Map;for(let[i,o]of e.entries())if(o.frameLevel<t.frames.length){let s=t.frames[o.frameLevel].variables.find(l=>l.name===i);s&&!s.isCompileTimeOnly&&n.set(i,{...o,value:(r=s.value)==null?void 0:r[0],type:s.type})}return n}function Gs({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(Je(a.type)){let s=On(`${F.___dup[0]}(${o})`),l=U({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 wu({functionBodyExpr:e,functionType:t,functionValue:n,env:r,context:i}){var a,s,l;if(!Ze(t.return.type))return;let o;try{let u=et(e),c=ra({...i,capturedVariables:void 0},t,{...n},r),_=nn({expr:u,env:r,context:c.evaluationContext,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(o=(a=_.$)==null?void 0:a.type,Vt((s=_.$)==null?void 0:s.controlFlow,"escape")&&!Vt((l=_.$)==null?void 0:l.controlFlow,"return"))return}catch{return}if(o&&!ae({type:t.return.type,env:r},{type:o,env:r},!0))throw d({token:t.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10375
10393
  - Expected: ${D(t.return.type)}
10376
- - Given : ${D(o)}`})}function ra(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=$r()}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 _d({expr:e,functionType:t,callerEnv:n,context:r}){var w,b,k,A;let i=e.func,o=e.args;if(o.length!==1)throw d({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=(w=r.expectedType)==null?void 0:w.type,u=l&&J(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((S,V)=>S.label!==t.parameters[V].label),c=yt(s?n:Is(n));if(u&&l&&J(l)){for(let S of t.forallParameters){let{env:V}=Pe({env:c,variable:{name:S.label,type:S.type,isCompileTimeOnly:!0,value:[ue(S.type,{variableName:S.label,env:c,context:r})],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=V}for(let S=0;S<t.parameters.length;S++){let V=t.parameters[S],O=l.parameters[S],x=V.label,N=O.label,{env:P}=Pe({env:c,variable:{name:x,type:V.type,isCompileTimeOnly:V.isCompileTimeOnly,value:V.isCompileTimeOnly?[ue(V.type,{variableName:N,env:c,context:r})]:void 0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:V.isOwningTheRcValue,parameterAlias:x!==N?N:void 0}});c=P}}else c=yt(c,t.parametersFrame);let _=c.frames[c.frames.length-1],f={...t,parametersFrame:_,env:t.env},p={tag:"Function",type:f,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${$t(c.modulePath)}`,definitionSiteEnclosingFunctionType:((b=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if((k=f.whereClauseExprs)!=null&&k.length){let S=f.whereClauseExprs.map(O=>et(O));c=Mi({constraintExprs:S,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let m=f.forallParameters.length>0||f.parameters.some(S=>Ze(S.type))||f.SelfType&&Ze(f.SelfType),y,g;if(m)wu({functionBodyExpr:a,functionType:f,functionValue:p,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?ue(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},g={...r,capturedVariables:void 0},y=a;else{if(g=ra({...r,capturedVariables:void 0},f,p,c).evaluationContext,y=nn({expr:a,env:c,context:g,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!y.$)throw d({token:a.token,errorMessage:"Failed to evaluate the function body."});c=y.$.env}let h=g.capturedVariables,v=(A=y.$)==null?void 0:A.type;if(Ur(y)&&(p.isControlFunction=!0),!p.isControlFunction&&v&&!ae({type:f.return.type,env:c},{type:v,env:c}))throw d({token:f.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10394
+ - Given : ${D(o)}`})}function ra(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=$r()}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 fd({expr:e,functionType:t,callerEnv:n,context:r}){var w,b,k,A;let i=e.func,o=e.args;if(o.length!==1)throw d({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=(w=r.expectedType)==null?void 0:w.type,u=l&&J(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((S,V)=>S.label!==t.parameters[V].label),c=yt(s?n:Is(n));if(u&&l&&J(l)){for(let S of t.forallParameters){let{env:V}=Pe({env:c,variable:{name:S.label,type:S.type,isCompileTimeOnly:!0,value:[ue(S.type,{variableName:S.label,env:c,context:r})],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=V}for(let S=0;S<t.parameters.length;S++){let V=t.parameters[S],O=l.parameters[S],x=V.label,N=O.label,{env:P}=Pe({env:c,variable:{name:x,type:V.type,isCompileTimeOnly:V.isCompileTimeOnly,value:V.isCompileTimeOnly?[ue(V.type,{variableName:N,env:c,context:r})]:void 0,token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:V.isOwningTheRcValue,parameterAlias:x!==N?N:void 0}});c=P}}else c=yt(c,t.parametersFrame);let _=c.frames[c.frames.length-1],f={...t,parametersFrame:_,env:t.env},p={tag:"Function",type:f,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${$t(c.modulePath)}`,definitionSiteEnclosingFunctionType:((b=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if((k=f.whereClauseExprs)!=null&&k.length){let S=f.whereClauseExprs.map(O=>et(O));c=Mi({constraintExprs:S,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let m=f.forallParameters.length>0||f.parameters.some(S=>Ze(S.type))||f.SelfType&&Ze(f.SelfType),y,g;if(m)wu({functionBodyExpr:a,functionType:f,functionValue:p,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?ue(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},g={...r,capturedVariables:void 0},y=a;else{if(g=ra({...r,capturedVariables:void 0},f,p,c).evaluationContext,y=nn({expr:a,env:c,context:g,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!y.$)throw d({token:a.token,errorMessage:"Failed to evaluate the function body."});c=y.$.env}let h=g.capturedVariables,v=(A=y.$)==null?void 0:A.type;if(Ur(y)&&(p.isControlFunction=!0),!p.isControlFunction&&v&&!ae({type:f.return.type,env:c},{type:v,env:c}))throw d({token:f.return.typeExpr.token,errorMessage:`Incompatible function return type for:
10377
10395
  - Expected: ${D(f.return.type)}
10378
- - Given : ${D(v)}`});if(z(f.return.type)&&!f.return.type.resolvedConcreteType&&(z(v)?z(v)&&v.resolvedConcreteType&&(f.return.type.resolvedConcreteType=v.resolvedConcreteType):f.return.type.resolvedConcreteType=v),f.return.isCompileTimeOnly&&y.$&&!y.$.value)throw d({token:f.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=Yt(c,!0);let $=n;s&&h&&h.size>0&&($=cd({capturedVariables:h,env:n,closureToken:e.token}));let E=p,C=f;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let S=Zo(p,$,r);S&&(E=S,C=S.type)}return e.$={env:$,value:E,type:C,pathCollection:h&&h.size>0?na(h):[]},e}function fd({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){var E,C;let o=e.func,a=e.args;if(a.length!==1)throw d({token:o.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=yt(r,t.isFn.callType.parametersFrame);if((E=t.isFn.callType.whereClauseExprs)!=null&&E.length){let w=t.isFn.callType.whereClauseExprs.map(k=>et(k));l=Mi({constraintExprs:w,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_${$t(l.modulePath)}`,definitionSiteEnclosingFunctionType:((C=i.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:C.kind)==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=ra(i,t.isFn.callType,u,l),_=nn({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!_.$)throw d({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=_.$.env;let f=c.capturedVariables,p=_.$.type;if(!ae({type:t.isFn.callType.return.type,env:l},{type:p,env:l}))throw d({token:t.isFn.callType.return.typeExpr.token,errorMessage:`Incompatible closure return type:
10396
+ - Given : ${D(v)}`});if(z(f.return.type)&&!f.return.type.resolvedConcreteType&&(z(v)?z(v)&&v.resolvedConcreteType&&(f.return.type.resolvedConcreteType=v.resolvedConcreteType):f.return.type.resolvedConcreteType=v),f.return.isCompileTimeOnly&&y.$&&!y.$.value)throw d({token:f.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=Yt(c,!0);let $=n;s&&h&&h.size>0&&($=_d({capturedVariables:h,env:n,closureToken:e.token}));let E=p,C=f;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let S=Zo(p,$,r);S&&(E=S,C=S.type)}return e.$={env:$,value:E,type:C,pathCollection:h&&h.size>0?na(h):[]},e}function pd({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){var E,C;let o=e.func,a=e.args;if(a.length!==1)throw d({token:o.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=yt(r,t.isFn.callType.parametersFrame);if((E=t.isFn.callType.whereClauseExprs)!=null&&E.length){let w=t.isFn.callType.whereClauseExprs.map(k=>et(k));l=Mi({constraintExprs:w,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_${$t(l.modulePath)}`,definitionSiteEnclosingFunctionType:((C=i.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:C.kind)==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=ra(i,t.isFn.callType,u,l),_=nn({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!_.$)throw d({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=_.$.env;let f=c.capturedVariables,p=_.$.type;if(!ae({type:t.isFn.callType.return.type,env:l},{type:p,env:l}))throw d({token:t.isFn.callType.return.typeExpr.token,errorMessage:`Incompatible closure return type:
10379
10397
  - Expected: ${D(t.isFn.callType.return.type)}
10380
- - Given : ${D(p)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!_.$.value)throw d({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Yt(l,!0);let m=f&&f.size>0?Bs({capturedVariables:f,env:r}):void 0,y=r,{capturedVariableDupExpressions:g,env:h}=Gs({capturedVariablesWithValues:m,env:r,context:i});y=h;let{captureType:v}=zs({expectedCaptureType:void 0,capturedVariablesWithValues:m,env:y,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},z(n)&&v&&Us({wrapperType:n,captureType:v,env:y,errorToken:e.token});let $;return z(n)?(n.resolvedConcreteType=v,$={...n,resolvedConcreteType:v}):Ke(n)?$=n:$=t,e.$={env:y,value:void 0,type:$,pathCollection:f&&f.size>0?na(f):[],deferredDupExpressions:g&&g.length>0?g:void 0,captureType:v,closureFunctionValue:u},Ke(n)&&Tt(e,!0),e}function pd({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],_=U({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!_.$)throw d({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(Vn(_,i),a=_.$.env,!ae({type:s,env:a},{type:_.$.type,env:a}))throw d({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
10398
+ - Given : ${D(p)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!_.$.value)throw d({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Yt(l,!0);let m=f&&f.size>0?Bs({capturedVariables:f,env:r}):void 0,y=r,{capturedVariableDupExpressions:g,env:h}=Gs({capturedVariablesWithValues:m,env:r,context:i});y=h;let{captureType:v}=zs({expectedCaptureType:void 0,capturedVariablesWithValues:m,env:y,closureToken:e.token,context:{...i}});u.closureInfo={closureType:t,captureType:v},z(n)&&v&&Us({wrapperType:n,captureType:v,env:y,errorToken:e.token});let $;return z(n)?(n.resolvedConcreteType=v,$={...n,resolvedConcreteType:v}):Ke(n)?$=n:$=t,e.$={env:y,value:void 0,type:$,pathCollection:f&&f.size>0?na(f):[],deferredDupExpressions:g&&g.length>0?g:void 0,captureType:v,closureFunctionValue:u},Ke(n)&&Tt(e,!0),e}function dd({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],_=U({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!_.$)throw d({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(Vn(_,i),a=_.$.env,!ae({type:s,env:a},{type:_.$.type,env:a}))throw d({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
10381
10399
  - Expected: ${D(s)}
10382
- - Given : ${D(_.$.type)}`});if(_.$.value!==void 0)o.push(_.$.value);else throw d({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${D(_.$.type)}`})}let l=Ar(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function yd(e,t,n,r=!1,i){let o=J(n)?n:void 0,s=vs(e,{detect(u,c,_){var p,m,y;if(u.tag!=="FnCall")return;if(dd(u,t,i,!0)){let g=[];for(let v of u.args)(p=v.$)!=null&&p.type&&g.push(v.$.type);if(g.length===0&&o)for(let v of o.parameters)v.isCompileTimeOnly||g.push(v.type);let h=((m=u.$)==null?void 0:m.type)??(o==null?void 0:o.return.type);if(g.length>0&&h){let v=La(c);_.push({index:_.length,expr:u,operationArgTypes:g,operationResultType:h,targetVariableId:v})}}if(r&&!dd(u,t,i)){let g=Uh(u,t);if(g){let h=n,v=h.parameters.filter(E=>!E.isCompileTimeOnly).map(E=>E.type),$=g.viaClosure?h.return.type:(y=u.$)==null?void 0:y.type;if(v.length>0&&$){let E=La(c);_.push({index:_.length,expr:u,operationArgTypes:v,operationResultType:$,targetVariableId:E,isTransitiveEffectCall:!0,isTransitiveClosureCall:g.viaClosure})}}}},shouldSkipBody(u){return wn(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 dd(e,t,n,r=!1){var l,u;if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let c=(l=i.$)==null?void 0:l.type;return!(!r&&(!c||!J(c))||r&&c&&!J(c))}let o=[],a=i;for(;a.tag==="FnCall"&&T(a,".")&&a.args.length>=2;){let c=a.args[1];if(!c||c.tag!=="Atom")return!1;o.unshift(c.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let c=0;c<o.length;c++)if(o[c]!==n[c])return!1;let s=(u=i.$)==null?void 0:u.type;return!(!r&&(!s||!J(s))||r&&s&&!J(s))}function Uh(e,t){var i,o,a;if(e.tag!=="FnCall")return;let n=(i=e.func.$)==null?void 0:i.type;if(!n)return;if(J(n)){if(!n.implicitParameters)return;for(let s of n.implicitParameters){if(s.label===t&&(J(s.type)||We(s.type)))return{matched:!0,viaClosure:!1};if(s.isEffectRowSpread&&md(s,t,(o=e.func.$)==null?void 0:o.env))return{matched:!0,viaClosure:!1}}return}let r=Gn(n);if(r){let s=r.isFn.callType;if(s.implicitParameters)for(let l of s.implicitParameters){if(l.label===t&&(J(l.type)||We(l.type)))return{matched:!0,viaClosure:!0};if(l.isEffectRowSpread&&md(l,t,(a=e.func.$)==null?void 0:a.env))return{matched:!0,viaClosure:!0}}}}function md(e,t,n){var o,a;if(!n)return!1;let r=e.type,i;if(z(r)&&r.isEffectsRow){let l=(a=(o=_e(n,e.label).at(-1))==null?void 0:o.value)==null?void 0:a[0];if(l&&W(l)&&Ut(l.value))i=l.value;else{let u=kn(n,r);Ut(u)&&(i=u)}}else Ut(r)&&(i=r);if(i){for(let s of i.implicitParameters)if(s.label===t&&(J(s.type)||We(s.type)))return!0}return!1}function hd(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(J(r.type)){let i=t==null?void 0:t.fields[n];if(i&&Ce(i)&&i.isControlFunction)return!0}if(We(r.type)){let i=t==null?void 0:t.fields[n];if(hd(r.type,i&&Et(i)?i:void 0))return!0}}return!1}function zh({variablesToDrop:e,env:t,context:n}){var o;let r=[],i=t;for(let a of e){let s=On(`${F.___drop[0]}(${a.name})`),l=U({expr:s,env:i,context:{...n,expectedType:void 0}});if(r.push(l),(o=l.$)!=null&&o.env)i=l.$.env;else throw d({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
10383
- ${L(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Bh({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){var C,w,b,k,A,S,V,O;let c=r[i],_;if(c&&I(c)&&T(c,":",2)){if(_=c.args[0],c=c.args[1],!X(_))throw d({token:_.token,errorMessage:`Expected identifier for label, got:
10400
+ - Given : ${D(_.$.type)}`});if(_.$.value!==void 0)o.push(_.$.value);else throw d({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${D(_.$.type)}`})}let l=Ar(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function gd(e,t,n,r=!1,i){let o=J(n)?n:void 0,s=vs(e,{detect(u,c,_){var p,m,y;if(u.tag!=="FnCall")return;if(md(u,t,i,!0)){let g=[];for(let v of u.args)(p=v.$)!=null&&p.type&&g.push(v.$.type);if(g.length===0&&o)for(let v of o.parameters)v.isCompileTimeOnly||g.push(v.type);let h=((m=u.$)==null?void 0:m.type)??(o==null?void 0:o.return.type);if(g.length>0&&h){let v=La(c);_.push({index:_.length,expr:u,operationArgTypes:g,operationResultType:h,targetVariableId:v})}}if(r&&!md(u,t,i)){let g=zh(u,t);if(g){let h=n,v=h.parameters.filter(E=>!E.isCompileTimeOnly).map(E=>E.type),$=g.viaClosure?h.return.type:(y=u.$)==null?void 0:y.type;if(v.length>0&&$){let E=La(c);_.push({index:_.length,expr:u,operationArgTypes:v,operationResultType:$,targetVariableId:E,isTransitiveEffectCall:!0,isTransitiveClosureCall:g.viaClosure})}}}},shouldSkipBody(u){return wn(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 md(e,t,n,r=!1){var l,u;if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let c=(l=i.$)==null?void 0:l.type;return!(!r&&(!c||!J(c))||r&&c&&!J(c))}let o=[],a=i;for(;a.tag==="FnCall"&&T(a,".")&&a.args.length>=2;){let c=a.args[1];if(!c||c.tag!=="Atom")return!1;o.unshift(c.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let c=0;c<o.length;c++)if(o[c]!==n[c])return!1;let s=(u=i.$)==null?void 0:u.type;return!(!r&&(!s||!J(s))||r&&s&&!J(s))}function zh(e,t){var i,o,a;if(e.tag!=="FnCall")return;let n=(i=e.func.$)==null?void 0:i.type;if(!n)return;if(J(n)){if(!n.implicitParameters)return;for(let s of n.implicitParameters){if(s.label===t&&(J(s.type)||We(s.type)))return{matched:!0,viaClosure:!1};if(s.isEffectRowSpread&&yd(s,t,(o=e.func.$)==null?void 0:o.env))return{matched:!0,viaClosure:!1}}return}let r=Gn(n);if(r){let s=r.isFn.callType;if(s.implicitParameters)for(let l of s.implicitParameters){if(l.label===t&&(J(l.type)||We(l.type)))return{matched:!0,viaClosure:!0};if(l.isEffectRowSpread&&yd(l,t,(a=e.func.$)==null?void 0:a.env))return{matched:!0,viaClosure:!0}}}}function yd(e,t,n){var o,a;if(!n)return!1;let r=e.type,i;if(z(r)&&r.isEffectsRow){let l=(a=(o=_e(n,e.label).at(-1))==null?void 0:o.value)==null?void 0:a[0];if(l&&W(l)&&Ut(l.value))i=l.value;else{let u=kn(n,r);Ut(u)&&(i=u)}}else Ut(r)&&(i=r);if(i){for(let s of i.implicitParameters)if(s.label===t&&(J(s.type)||We(s.type)))return!0}return!1}function vd(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(J(r.type)){let i=t==null?void 0:t.fields[n];if(i&&Ce(i)&&i.isControlFunction)return!0}if(We(r.type)){let i=t==null?void 0:t.fields[n];if(vd(r.type,i&&Et(i)?i:void 0))return!0}}return!1}function Bh({variablesToDrop:e,env:t,context:n}){var o;let r=[],i=t;for(let a of e){let s=On(`${F.___drop[0]}(${a.name})`),l=U({expr:s,env:i,context:{...n,expectedType:void 0}});if(r.push(l),(o=l.$)!=null&&o.env)i=l.$.env;else throw d({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
10401
+ ${L(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Gh({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){var C,w,b,k,A,S,V,O;let c=r[i],_;if(c&&I(c)&&T(c,":",2)){if(_=c.args[0],c=c.args[1],!X(_))throw d({token:_.token,errorMessage:`Expected identifier for label, got:
10384
10402
  ${L(_)}`});let x=_.token.value;if(n.label==="")throw d({token:_.token,errorMessage:"Named argument call is not allowed for this parameter (it has no label)."});if(n.label!==x)throw d({token:_.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
10385
10403
  Expected ${n?`label "${n.label}"`:"no label"} at the argument position, but got "${x}".`})}let{parameterType:f,calleeEnv:p}=Wa({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=p;let m;if(!c||X(c)&&Kt(c,M.undefined))if(n.exprs.defaultValueExpr)m=U({expr:et(n.exprs.defaultValueExpr),env:o,context:{...s,expectedType:{type:f,env:o}}}),(C=m.$)!=null&&C.env&&(o=(w=m.$)==null?void 0:w.env),c&&(c.$=m.$),n.isCompileTimeOnly||u.push(m);else throw d({token:(c==null?void 0:c.token)??Ae,errorMessage:`Expected default value for parameter "${n.label}"`});else if(n.isQuote)if(yn(f))m=et(c),m.$={type:Jn(),value:Sr(c),env:a,pathCollection:[]};else throw d({token:c.token,errorMessage:`Expected "Expr" type for "quote" parameter "${n.label}", got:
10386
10404
  ${D(f)}`});else{let x=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"||e.ioBuiltin==="join_handle_await"?void 0:{type:f,env:o};if(m=U({expr:c,env:a,context:{...s,expectedType:x}}),(b=m.$)!=null&&b.env&&(a=(k=m.$)==null?void 0:k.env),n.isCompileTimeOnly||u.push(m),ji(m,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let N=(A=m.$)==null?void 0:A.variableName,P=N?_e(a,N):[],R=P.length?P[P.length-1]:void 0;R!=null&&R.isOwningTheRcValue?a=sr(m,a,!0):(Vn(m,s),(S=m.$)!=null&&S.env&&(a=m.$.env),a=sr(m,a,!0))}}if(!m.$)throw d({token:(c==null?void 0:c.token)??Ae,errorMessage:"Failed to evaluate argument expression."});let y=m.$.type;if(!((V=m.$)!=null&&V.value)&&n.isCompileTimeOnly)throw d({token:(c==null?void 0:c.token)??Ae,errorMessage:`Cannot assign runtime argument to compile-time parameter:
@@ -10390,7 +10408,7 @@ Got: ${lt(m.$.value)}`});let g=m.$.value;if(!n.isCompileTimeOnly&&qi(y,m.$.env
10390
10408
  ${L(m)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=Pe({env:o,variable:{name:n.label,type:y,isCompileTimeOnly:h,value:g?[g]:void 0,token:(c==null?void 0:c.token)??Ae,initializedAtToken:(c==null?void 0:c.token)??Ae,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,g&&W(g)&&z(g.value)){let x=g.value,N=Nr(a,x);if(N){for(let P of N.requiredTraits){let R={...P,receiverType:x};o=Gr({env:o,someType:x,traitType:R,isNegated:!1})}for(let P of N.negativeTraits){let R={...P,receiverType:x};o=Gr({env:o,someType:x,traitType:R,isNegated:!0})}}}try{let{expectedEnv:x}=It({type:f,env:o},{type:y,env:a});o=x}catch(x){throw d({token:(c==null?void 0:c.token)??Ae,errorMessage:`Failed to synthesize types for parameter "${n.label}":
10391
10409
  ${x.message}`})}let{parameterType:$,calleeEnv:E}=Wa({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=E,!ae({type:$,env:o},{type:y,env:a},i===0&&l))throw d({token:(c==null?void 0:c.token)??Ae,errorMessage:`Type mismatch for parameter "${n.label}":
10392
10410
  Expected: ${D($)}
10393
- Got: ${D(y)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:g,argType:y,parameterType:$}}function ia(e){if(e&&Ce(e))return e}function Ws(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var qs=Ws("YO_DEBUG_CALL")||Ws("YO_DEBUG_CALL_PROFILE")||Ws("YO_DEBUG_EVAL")||Ws("YO_DEBUG_EVAL_PROFILE"),gd=globalThis,si=gd.__yoCallProfilerState??(gd.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function Oi({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt,q,oe,re,ne,me,$e,Re,ft,an,St,wt,Ln,mt,sn,Jt,Gt,en;if(qs){si.tryCallCount++;let de="(unknown)";t&&"funcName"in t&&t.funcName?de=t.funcName:t&&"funcId"in t?de=String(t.funcId):r&&(de=L(r).slice(0,60)),si.tryCallNames.set(de,(si.tryCallNames.get(de)??0)+1),si.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${si.tryCallCount}: name=${de}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,_=[],f=[],p=[],m=t==null?void 0:t.definitionSiteEnclosingFunctionType,y=0;i.length>0&&I(i[0])&&T(i[0],M.forall)&&(c=i[0],y=1);let g,h=i.slice(y),v=h.findIndex(de=>I(de)&&T(de,M.using));if(v!==-1){let de=h.findIndex((ke,Te)=>Te>v&&I(ke)&&T(ke,M.using));if(de!==-1)throw d({token:h[de].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});g=h[v],h=[...h.slice(0,v),...h.slice(v+1)]}let $=n.parameters.length,E=h;if(!n.variadicParameter){if(E.length>$){let de=n.parameters.at(-1);if(!(de&&de.isQuote&&Bi(de.type)))throw d({token:(r==null?void 0:r.token)??Ae,errorMessage:`Too many arguments for function call:
10411
+ Got: ${D(y)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:g,argType:y,parameterType:$}}function ia(e){if(e&&Ce(e))return e}function Ws(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var qs=Ws("YO_DEBUG_CALL")||Ws("YO_DEBUG_CALL_PROFILE")||Ws("YO_DEBUG_EVAL")||Ws("YO_DEBUG_EVAL_PROFILE"),hd=globalThis,si=hd.__yoCallProfilerState??(hd.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function Oi({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt,q,oe,re,ne,me,$e,Re,ft,an,St,wt,An,mt,sn,Jt,Gt,en;if(qs){si.tryCallCount++;let de="(unknown)";t&&"funcName"in t&&t.funcName?de=t.funcName:t&&"funcId"in t?de=String(t.funcId):r&&(de=L(r).slice(0,60)),si.tryCallNames.set(de,(si.tryCallNames.get(de)??0)+1),si.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${si.tryCallCount}: name=${de}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,_=[],f=[],p=[],m=t==null?void 0:t.definitionSiteEnclosingFunctionType,y=0;i.length>0&&I(i[0])&&T(i[0],M.forall)&&(c=i[0],y=1);let g,h=i.slice(y),v=h.findIndex(de=>I(de)&&T(de,M.using));if(v!==-1){let de=h.findIndex((ke,Te)=>Te>v&&I(ke)&&T(ke,M.using));if(de!==-1)throw d({token:h[de].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});g=h[v],h=[...h.slice(0,v),...h.slice(v+1)]}let $=n.parameters.length,E=h;if(!n.variadicParameter){if(E.length>$){let de=n.parameters.at(-1);if(!(de&&de.isQuote&&Bi(de.type)))throw d({token:(r==null?void 0:r.token)??Ae,errorMessage:`Too many arguments for function call:
10394
10412
  Expected: ${$} arguments
10395
10413
  Got: ${E.length} arguments`})}else if(E.length<$&&!n.parameters.slice(E.length).every(ke=>ke.exprs.defaultValueExpr!==void 0))throw d({token:(r==null?void 0:r.token)??Ae,errorMessage:`Too few arguments for function call:
10396
10414
  Expected: ${$} arguments
@@ -10399,7 +10417,7 @@ ${L(we)}`});if(ke.label!==we.token.value)throw d({token:we.token,errorMessage:`E
10399
10417
  ${L(he)}`:"Expected type for default value."});Ne=(be=Be.$)==null?void 0:be.value}else throw d({token:(he==null?void 0:he.token)??(r==null?void 0:r.token)??Ae,errorMessage:"Type parameter does not have default value."});else{let Be=U({expr:he,env:o,context:{...a,expectedType:{type:ke.type,env:b}}});if((Ue=Be.$)!=null&&Ue.env&&(o=Be.$.env),!W((te=Be.$)==null?void 0:te.value))throw d({token:he.token,errorMessage:`Expected type for argument, got:
10400
10418
  ${L(he)}`});Ne=(le=Be.$)==null?void 0:le.value}we&&(we.$={env:b,type:Ne.type,value:Ne,pathCollection:[]});let{parameterType:ot,calleeEnv:Ve}=Wa({parameter:ke,calleeEnv:b,definitionSiteEnclosingFunctionType:m,context:{...a,isEvaluatingFunctionType:!0},functionType:n});b=Ve;let{expectedEnv:ge,givenEnv:Me}=It({type:ot,env:b},{type:Ne.type,env:o});if(b=ge,o=Me,!ae({type:ot,env:b},{type:Ne.type,env:o}))throw d({token:(he==null?void 0:he.token)??(r==null?void 0:r.token)??Ae,errorMessage:`Type mismatch for type parameter "${ke.label}":
10401
10419
  Expected: ${D(ot)}
10402
- Got: ${D(Ne.type)}`});if(ke.label)if(Te)b=vt(b,Te,{...Te,value:[Ne]});else{let Be=(he==null?void 0:he.token)??(r==null?void 0:r.token)??Ae,{env:at}=Pe({env:b,variable:{name:ke.label,type:Ne.type,isCompileTimeOnly:!0,value:[Ne],token:Be,initializedAtToken:Be,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=at}_.push({value:Ne,argType:Ne.type,parameterType:ot})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:de,calleeEnv:ke}=_o({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:Te}=It({type:de,env:ke},{type:a.expectedType.type,env:a.expectedType.env});b=Te}catch{}if(g&&n.implicitParameters.length>0&&n.implicitParameters.some(ke=>ke.isEffectRowSpread)){let Te=n.implicitParameters.filter(we=>!we.isEffectRowSpread).length,he=g.args.slice(Te);if(he.length>0){let we=[];for(let Ve of he){if(!X(Ve))throw d({token:Ve.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${L(Ve)}`});let ge=Ve.token.value,Be=_e(o,ge).at(-1);if(!Be)throw d({token:Ve.token,errorMessage:`Variable "${ge}" not found for using() argument in effect row spread.`});Ve.$={env:o,type:Be.type,value:(fe=Be.value)==null?void 0:fe[0],variableName:ge,pathCollection:[]},we.push({label:ge,type:Be.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:Ve,labelExpr:Ve,typeExpr:void 0,defaultValueExpr:void 0}})}let Ne=yi(we),ot=ye(Ne);for(let Ve of n.implicitParameters){if(!Ve.isEffectRowSpread)continue;let ge=Ve.label,Be=_e(b,ge).at(-1);Be&&(b=vt(b,Be,{...Be,value:[ot]})),z(Ve.type)&&Ve.type.isEffectsRow&&(Ve.type.resolvedConcreteType=Ne)}}}n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0});let k=n.parameters.length;for(let de=0;de<k;de++){let ke=n.parameters[de],{calleeEnv:Te,callerEnv:he,context:we,argValue:Ne,argType:ot,parameterType:Ve}=Bh({functionType:n,definitionSiteEnclosingFunctionType:m,parameter:ke,argExprs:i,argIndex:de,callerEnv:o,calleeEnv:b,context:a,isMethodCall:s,runtimeArgExprsInOrder:p});b=Te,o=he,a=we,f.push({value:Ne,parameterType:Ve,argType:ot})}if(!c&&n.forallParameters.length>0){for(let de of n.forallParameters)if(de.label){let Te=_e(b,de.label).at(-1);if((Se=Te==null?void 0:Te.value)!=null&&Se[0]&&W(Te.value[0])){let he=Te.value[0];if(z(he.value)&&he.value.resolvedConcreteType&&(!he.value.requiredTraits||he.value.requiredTraits.length===0)){let we=ye(he.value.resolvedConcreteType);b=vt(b,Te,{...Te,value:[we]})}}}}if(!c&&n.forallParameters.length>0){for(let de of n.forallParameters)if(de.label){let Te=_e(b,de.label).at(-1);(it=Te==null?void 0:Te.value)!=null&&it[0]&&W(Te.value[0])&&_.push({value:Te.value[0],argType:Te.value[0].type,parameterType:de.type})}}if((ct=n.whereClauseExprs)!=null&&ct.length){let de=n.whereClauseExprs.map(Te=>et(Te));b=Mi({constraintExprs:de,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let{returnType:A,calleeEnv:S}=_o({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(b=S,a.expectedType&&!n.return.isUnquote){let{expectedEnv:de}=It({type:A,env:b},{type:a.expectedType.type,env:a.expectedType.env});b=de;let ke=_o({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});A=ke.returnType,b=ke.calleeEnv,ae({type:a.expectedType.type,env:a.expectedType.env},{type:A,env:b})&&(A=a.expectedType.type)}let V=[];if(n.variadicParameter){for(let de=0;de<w.length;de++){let ke=w[de],Te;if(n.variadicParameter.isQuote)Te=et(ke),Te.$={type:Jn(),value:Sr(ke),env:o,pathCollection:[]},V.push({value:Te.$.value,argType:Te.$.type});else{if(Te=U({expr:ke,env:o,context:{...a}}),!((Ft=Te.$)!=null&&Ft.env))throw d({token:ke.token,errorMessage:`Failed to evaluate the expression:
10420
+ Got: ${D(Ne.type)}`});if(ke.label)if(Te)b=vt(b,Te,{...Te,value:[Ne]});else{let Be=(he==null?void 0:he.token)??(r==null?void 0:r.token)??Ae,{env:at}=Pe({env:b,variable:{name:ke.label,type:Ne.type,isCompileTimeOnly:!0,value:[Ne],token:Be,initializedAtToken:Be,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=at}_.push({value:Ne,argType:Ne.type,parameterType:ot})}}if(a.expectedType&&!c&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:de,calleeEnv:ke}=_o({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:Te}=It({type:de,env:ke},{type:a.expectedType.type,env:a.expectedType.env});b=Te}catch{}if(g&&n.implicitParameters.length>0&&n.implicitParameters.some(ke=>ke.isEffectRowSpread)){let Te=n.implicitParameters.filter(we=>!we.isEffectRowSpread).length,he=g.args.slice(Te);if(he.length>0){let we=[];for(let Ve of he){if(!X(Ve))throw d({token:Ve.token,errorMessage:`Expected identifier for using() argument in effect row spread, got ${L(Ve)}`});let ge=Ve.token.value,Be=_e(o,ge).at(-1);if(!Be)throw d({token:Ve.token,errorMessage:`Variable "${ge}" not found for using() argument in effect row spread.`});Ve.$={env:o,type:Be.type,value:(fe=Be.value)==null?void 0:fe[0],variableName:ge,pathCollection:[]},we.push({label:ge,type:Be.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:Ve,labelExpr:Ve,typeExpr:void 0,defaultValueExpr:void 0}})}let Ne=yi(we),ot=ye(Ne);for(let Ve of n.implicitParameters){if(!Ve.isEffectRowSpread)continue;let ge=Ve.label,Be=_e(b,ge).at(-1);Be&&(b=vt(b,Be,{...Be,value:[ot]})),z(Ve.type)&&Ve.type.isEffectsRow&&(Ve.type.resolvedConcreteType=Ne)}}}n.ioBuiltin==="io_async"&&(a={...a,isInsideIoAsyncCall:!0});let k=n.parameters.length;for(let de=0;de<k;de++){let ke=n.parameters[de],{calleeEnv:Te,callerEnv:he,context:we,argValue:Ne,argType:ot,parameterType:Ve}=Gh({functionType:n,definitionSiteEnclosingFunctionType:m,parameter:ke,argExprs:i,argIndex:de,callerEnv:o,calleeEnv:b,context:a,isMethodCall:s,runtimeArgExprsInOrder:p});b=Te,o=he,a=we,f.push({value:Ne,parameterType:Ve,argType:ot})}if(!c&&n.forallParameters.length>0){for(let de of n.forallParameters)if(de.label){let Te=_e(b,de.label).at(-1);if((Se=Te==null?void 0:Te.value)!=null&&Se[0]&&W(Te.value[0])){let he=Te.value[0];if(z(he.value)&&he.value.resolvedConcreteType&&(!he.value.requiredTraits||he.value.requiredTraits.length===0)){let we=ye(he.value.resolvedConcreteType);b=vt(b,Te,{...Te,value:[we]})}}}}if(!c&&n.forallParameters.length>0){for(let de of n.forallParameters)if(de.label){let Te=_e(b,de.label).at(-1);(it=Te==null?void 0:Te.value)!=null&&it[0]&&W(Te.value[0])&&_.push({value:Te.value[0],argType:Te.value[0].type,parameterType:de.type})}}if((ct=n.whereClauseExprs)!=null&&ct.length){let de=n.whereClauseExprs.map(Te=>et(Te));b=Mi({constraintExprs:de,env:b,context:{...a,isEvaluatingFunctionType:!0}}).env}let{returnType:A,calleeEnv:S}=_o({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(b=S,a.expectedType&&!n.return.isUnquote){let{expectedEnv:de}=It({type:A,env:b},{type:a.expectedType.type,env:a.expectedType.env});b=de;let ke=_o({functionType:n,calleeEnv:b,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});A=ke.returnType,b=ke.calleeEnv,ae({type:a.expectedType.type,env:a.expectedType.env},{type:A,env:b})&&(A=a.expectedType.type)}let V=[];if(n.variadicParameter){for(let de=0;de<w.length;de++){let ke=w[de],Te;if(n.variadicParameter.isQuote)Te=et(ke),Te.$={type:Jn(),value:Sr(ke),env:o,pathCollection:[]},V.push({value:Te.$.value,argType:Te.$.type});else{if(Te=U({expr:ke,env:o,context:{...a}}),!((Ft=Te.$)!=null&&Ft.env))throw d({token:ke.token,errorMessage:`Failed to evaluate the expression:
10403
10421
  ${L(ke)}`});o=Te.$.env,V.push({value:Te.$.value,argType:Te.$.type}),n.variadicParameter.isCompileTimeOnly||p.push(ke)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let de=Ar(Jn(),V.map(Te=>Te.value)),{env:ke}=Pe({env:b,variable:{name:n.variadicParameter.label,type:de.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:[de],token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});b=ke}}}let O=[],x=[];if(n.implicitParameters.length>0)for(let de=0;de<n.implicitParameters.length;de++){let ke=n.implicitParameters[de],Te=!1;if(ke.isEffectRowSpread){let Ne=[],Ve=(q=(Zt=_e(b,ke.label).at(-1))==null?void 0:Zt.value)==null?void 0:q[0],ge;if(Ve&&W(Ve)&&Ut(Ve.value))ge=Ve.value;else if(z(ke.type)&&ke.type.isEffectsRow){let Me=kn(b,ke.type);Ut(Me)&&(ge=Me)}else Ut(ke.type)&&(ge=ke.type);if(!ge&&z(ke.type)&&ke.type.isEffectsRow){let Me=tr(o,qe=>qe.isImplicit===!0&&qe.isCompileTimeOnly===!0&&(J(qe.type)||We(qe.type))),Be=new Set(n.implicitParameters.filter(qe=>!qe.isEffectRowSpread).map(qe=>qe.label)),at=Me.filter(qe=>!Be.has(qe.name));if(at.length>0){for(let Le of at){let nt=(oe=Le.value)==null?void 0:oe[0];if(nt){x.push({value:nt,parameterType:Le.type,argType:Le.type});let{env:_t}=Pe({env:b,variable:{name:Le.name,type:Le.type,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[nt],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=_t}}let qe=yi(at.map(Le=>({label:Le.name,type:Le.type,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!0,exprs:{expr:void 0,labelExpr:void 0,typeExpr:void 0}}))),He=ye(qe),pt=_e(b,ke.label).at(-1);pt&&(b=vt(b,pt,{...pt,value:[He],type:qe})),Te=!0;continue}}Ne=(ge==null?void 0:ge.implicitParameters)??[];for(let Me of Ne){let Be=Me.type,qe=tr(o,He=>He.isImplicit===!0&&He.isCompileTimeOnly===!0&&He.name===Me.label&&ae({type:Be,env:b},{type:He.type,env:o})).at(-1);if((re=qe==null?void 0:qe.value)!=null&&re[0]){let He=qe.value[0];x.push({value:He,parameterType:Be,argType:qe.type});let{env:Ie}=Pe({env:b,variable:{name:Me.label,type:Be,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[He],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Ie}else{let Ie=tr(o,nt=>nt.isImplicit===!0&&nt.isCompileTimeOnly===!0&&ae({type:Be,env:b},{type:nt.type,env:o})).at(-1);if(!((ne=Ie==null?void 0:Ie.value)!=null&&ne[0]))throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ae,errorMessage:`No "given" variable found for effect row parameter "${Me.label}" of type ${D(Be)} (expanded from effect row ...(${ke.label})).
10404
10422
  Please ensure a given variable of matching type is in scope.`});let pt=Ie.value[0];x.push({value:pt,parameterType:Be,argType:Ie.type});let{env:Le}=Pe({env:b,variable:{name:Me.label,type:Be,isCompileTimeOnly:!0,isImplicit:!0,isFromEffectSpread:!0,value:[pt],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Le}}continue}let{parameterType:he,calleeEnv:we}=Wa({parameter:ke,calleeEnv:b,definitionSiteEnclosingFunctionType:m,context:{...a,isEvaluatingFunctionType:!0},functionType:n});if(b=we,g){let Ne=g.args[de],ot=Ne&&X(Ne)&&Kt(Ne,M.undefined);if(Ne&&!ot){let Ve=U({expr:Ne,env:o,context:{...a}});if(!Ve.$)throw d({token:Ne.token,errorMessage:`Failed to evaluate using() argument: ${L(Ne)}`});o=Ve.$.env;let ge=Ve.$.value,Me=Ve.$.type;if(!ge)throw d({token:Ne.token,errorMessage:`Expected compile-time value for using() argument, got runtime value: ${L(Ne)}`});if(!ae({type:he,env:b},{type:Me,env:o}))throw d({token:Ne.token,errorMessage:`Incompatible type for implicit parameter "${ke.label}":
10405
10423
  Expected: ${D(he)}
@@ -10410,20 +10428,20 @@ Or pass it explicitly:
10410
10428
  ${(t==null?void 0:t.funcName)??"func"}(..., using(<value>))`});if(Ne[Ne.length-1].isFromEffectSpread&&!(()=>{if(!r||!X(r))return!1;let qe=r.token.value,He=a.isEvaluatingFunctionBodyOrAsyncBlock;return!He||He.kind!=="function-body"?!1:He.type.parameters.some(pt=>pt.label===qe)})())throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ae,errorMessage:`Effect "${ke.label}" of type ${D(he)} is available through an effect row spread but not explicitly declared in the function's using clause.
10411
10429
  Add it explicitly:
10412
10430
  using(${ke.label} : ${D(he)}, ...(E))`});let Ve=Ne;if(Ve.length>1){let at=Na(o,qe=>qe.isImplicit===!0&&qe.isCompileTimeOnly===!0&&ae({type:he,env:b},{type:qe.type,env:o}));if(at>=0){let He=o.frames[at].variables.filter(Ie=>Ie.isImplicit===!0&&Ie.isCompileTimeOnly===!0&&ae({type:he,env:b},{type:Ie.type,env:o}));He.length>0&&(Ve=He)}}if(Ve.length>1)throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ae,errorMessage:`Ambiguous implicit parameter "${ke.label}": found ${Ve.length} "given" variables with compatible type ${D(he)} in the same scope.
10413
- Please use explicit using() to disambiguate.`});let ge=Ve[Ve.length-1],Me=(Re=ge.value)==null?void 0:Re[0];if(!Me)throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ae,errorMessage:`The "given" variable "${ge.name}" has no compile-time value.`});x.push({value:Me,parameterType:he,argType:ge.type});let{env:Be}=Pe({env:b,variable:{name:ke.label,type:he,isCompileTimeOnly:!0,isImplicit:!0,value:[Me],token:((ft=ke.exprs.labelExpr)==null?void 0:ft.token)??Ae,initializedAtToken:((an=ke.exprs.labelExpr)==null?void 0:an.token)??Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Be}}let N={args:f,forallArgs:_,implicitArgs:x,variadicArgs:V},P;if(n.return.isCompileTimeOnly)if(u)P=ue(A,{variableName:n.return.label,env:n.env,context:a});else if(Ce(t)){let{value:de,callerEnv:ke,calleeEnv:Te}=ea({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:N,callerEnv:o,calleeEnv:b,context:{...a}});P=de,A=de.type,o=ke,b=Te}else{let de=bt(A)&&A.level===0,ke=`${n.id}_return_sometype`;if(de)if((St=a.expectedType)!=null&&St.type)P=ye(a.expectedType.type);else if(a.isEvaluatingFunctionType){let Te=fr(A,n.return.label,{id:ke,env:b,context:a});Te.functionApplication=e;let he=kn(b,Te);P=ye(he)}else throw d({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Ae,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else P=ue(A,{variableName:n.return.label,env:n.env,context:a})}qh({returnType:A,env:b,expr:e,context:a});let R,H=((wt=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:wt.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&Ce(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&Ce(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,G=(Ln=N.implicitArgs)==null?void 0:Ln.some(de=>Oe(de.value)),Q=G&&!((mt=N.implicitArgs)!=null&&mt.some(de=>Oe(de.value)&&!We(de.parameterType))),K=N.args.some(de=>de.argType&&z(de.argType)),j=Q&&K,ie=(()=>{if(!G||!n.implicitParameters.some(he=>he.isEffectRowSpread))return!1;let ke=0;for(let he of n.implicitParameters)he.isEffectRowSpread||ke++;let Te=N.implicitArgs??[];for(let he=0;he<ke&&he<Te.length;he++)if(Oe(Te[he].value))return!1;return!0})(),ee=Fr(n)&&!jr(n)&&n.implicitParameters.some(de=>We(de.type)?de.type.fields.some(ke=>J(ke.type)&&ke.type.forallParameters.length===0):!!de.isEffectRowSpread);if(!l&&!ee&&t&&Ce(t)&&!t.isControlFunction&&Fr(n)&&!H&&(!G||j||ie)){if(R=Gh({originalFunction:t,argValues:N,calleeEnv:b,callerEnv:o,context:a}),R&&z(A)){let de=(Jt=(sn=R.body)==null?void 0:sn.$)==null?void 0:Jt.type;de&&!z(de)&&(A=de,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:de}}))}if(R){let de=new Set,ke=0;for(let Te=0;Te<n.parameters.length;Te++)if(!n.parameters[Te].isCompileTimeOnly){let we=N.args[Te],Ne=we==null?void 0:we.value;Ne&&Ce(Ne)&&Ne.type.implicitParameters.some(ot=>J(ot.type)||We(ot.type))&&de.add(ke),ke++}if(de.size>0)for(let Te=p.length-1;Te>=0;Te--)de.has(Te)&&p.splice(Te,1)}}if(!l&&t&&Ce(t)&&t.isControlFunction&&n.forallParameters.length>0&&!R&&(R=Wh({originalFunction:t,argValues:N,calleeEnv:b,callerEnv:o,context:a}),R&&z(A))){let de=(en=(Gt=R.body)==null?void 0:Gt.$)==null?void 0:en.type;de&&!z(de)&&(A=de,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:de}}))}let pe=zo(o),Z;if(pe.length>0){let de=zh({variablesToDrop:pe,env:o,context:a});Z=de.deferredDropExpressions,o=de.env}return{returnType:A,calleeEnv:b,callerEnv:o,pathCollection:O,argValues:N,returnValue:P,specializedFunctionValue:R,runtimeArgExprsInOrder:p,deferredDropExpressions:Z}}function Gh({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var V,O,x,N,P,R,H,G,Q,K,j,ie,ce;if(qs){si.specializeCount++;let ee=e.funcName??e.funcId;si.specializeNames.set(ee,(si.specializeNames.get(ee)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(ee=>ee.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(ee=>ee.value)),o.parameters.forEach((ee,pe)=>{let Z=t.args[pe];if(ee.isCompileTimeOnly)Z.value&&a.push(Z.value);else if(Z.value&&Ce(Z.value)&&Z.value.type.implicitParameters.some(Fe=>J(Fe.type)||We(Fe.type)))Z.value&&a.push(Z.value);else{let be=z(Z.argType)&&Z.argType.resolvedConcreteType&&!je(Z.argType)?Z.argType.resolvedConcreteType:Z.argType;s.push({...ee,type:be})}});let l=s.map(ee=>ee.type),u=e.specializedFunctionCaches.find(ee=>ee.compileTimeArgValues.length===a.length&&ee.compileTimeArgValues.every((Ee,Fe)=>{let be=a[Fe];return gn({value:Ee,env:ee.env},{value:be,env:r})})?ee.runtimeParameterTypes.length===l.length&&ee.runtimeParameterTypes.every((Ee,Fe)=>{let be=l[Fe];return ae({type:Ee,env:ee.env},{type:be,env:r},!0)}):!1);if(u)return qs&&si.cacheHitCount++,u.specializedFunction;qs&&si.cacheMissCount++;let c=n;for(let ee of r.frames)for(let pe of ee.variables){if(!pe.isCompileTimeOnly||_e(c,pe.name).length>0)continue;let{env:Ee}=Pe({env:c,variable:{...pe},allowVariableShadowing:!0});c=Ee}for(let ee of s){let pe=_e(c,ee.label);if(pe.length>0){let Z=pe[pe.length-1],Ee={...Z,value:void 0};c=vt(c,Z,Ee)}}let _=et(e.body),{returnType:f,calleeEnv:p}=_o({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=p;let m=i.enclosingFunctionReturnType,y=((V=t.implicitArgs)==null?void 0:V.some(ee=>Ce(ee.value)&&ee.value.isControlFunction||Et(ee.value)&&hd(ee.value.type,ee.value)))??!1,g=nn({expr:_,env:c,context:{...i,expectedType:{type:f,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:y,...m?{enclosingFunctionReturnType:m}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw d({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let ee=0;ee<o.implicitParameters.length;ee++){let pe=o.implicitParameters[ee];if(J(pe.type)){let Z=(O=t.implicitArgs)==null?void 0:O[v],Ee=Z&&Ce(Z.value)?Z.value:void 0;Ee!=null&&Ee.isControlFunction&&h.push({handlerArgIndex:v,label:pe.label,type:pe.type,fromSpread:!1}),v+=1}else if(pe.isEffectRowSpread){let Z=pe.type;if(z(Z)){let Fe=(N=(x=_e(c,pe.label).at(-1))==null?void 0:x.value)==null?void 0:N[0];if(Fe&&W(Fe)&&Ut(Fe.value))Z=Fe.value;else{let be=kn(c,Z);be&&(Z=be)}}if(Ut(Z)){for(let Ee=0;Ee<Z.implicitParameters.length;Ee++){let Fe=Z.implicitParameters[Ee];if(J(Fe.type)){let be=(P=t.implicitArgs)==null?void 0:P[v+Ee],Ue=be&&Ce(be.value)?be.value:void 0;Ue!=null&&Ue.isControlFunction&&h.push({handlerArgIndex:v+Ee,label:Fe.label,type:Fe.type,fromSpread:!0})}else if(We(Fe.type)){let be=(R=t.implicitArgs)==null?void 0:R[v+Ee],Ue=be&&Et(be.value)?be.value:void 0,te=[],le=(fe,Se,it)=>{for(let ct=0;ct<fe.fields.length;ct++){let Ft=fe.fields[ct];if(J(Ft.type)){let Zt=it==null?void 0:it.fields[ct];if(Zt&&Ce(Zt)&&Zt.isControlFunction){let q=Zt.specializedType??Ft.type;te.push({path:[...Se,Ft.label],type:q})}}else if(We(Ft.type)){let Zt=it==null?void 0:it.fields[ct];le(Ft.type,[...Se,Ft.label],Zt&&Et(Zt)?Zt:void 0)}}};le(Fe.type,[],Ue);for(let fe of te)h.push({handlerArgIndex:v+Ee,label:Fe.label,type:fe.type,fromSpread:!0,effectFieldPath:fe.path})}}v+=Z.implicitParameters.length}else v+=1}else if(We(pe.type)){let Z=[],Ee=(H=t.implicitArgs)==null?void 0:H[v],Fe=(be,Ue,te)=>{for(let le=0;le<be.fields.length;le++){let fe=be.fields[le];if(J(fe.type)){let Se=te==null?void 0:te.fields[le];if(Se&&Ce(Se)&&Se.isControlFunction){let it=Se.specializedType??fe.type;Z.push({path:[...Ue,fe.label],type:it})}}else if(We(fe.type)){let Se=te==null?void 0:te.fields[le];Fe(fe.type,[...Ue,fe.label],Se&&Et(Se)?Se:void 0)}}};Fe(pe.type,[],Ee&&Et(Ee.value)?Ee.value:void 0);for(let be of Z)h.push({handlerArgIndex:v,label:pe.label,type:be.type,fromSpread:!1,effectFieldPath:be.path});v+=1}else v+=1}let $=[];for(let ee of h){let pe=yd(g,ee.label,ee.type,!0,ee.effectFieldPath);if(pe.hasEffects){let Z=(G=t.implicitArgs)==null?void 0:G[ee.handlerArgIndex],Ee,Fe=ee.effectFieldPath;if(Z&&Ce(Z.value))Ee=Z.value;else if(Z&&Et(Z.value)&&Fe&&Fe.length>0){let be=Z.value;for(let Ue of Fe){if(!Et(be)){be=void 0;break}let te=be.type.fields.findIndex(le=>le.label===Ue);if(te<0||!be.fields[te]){be=void 0;break}be=be.fields[te]}be&&Ce(be)&&(Ee=be)}if(Ee){let be=Ee,Ue=ee.type,te=!be.body.$;if(!te&&be.isControlFunction&&I(be.body)&&be.body.args.length>0&&!((Q=be.body.args[0])!=null&&Q.$)&&(te=!0),te&&J(Ue)&&Ue.forallParameters.length>0&&pe.effectCallPoints.length>0){let le=new Map,fe=Ue.return.type,Se=pe.effectCallPoints[0].operationResultType;if(z(fe)&&le.set(fe.name,Se),le.size===0&&Ue.forallParameters.length===1){let oe=Ue.forallParameters[0];le.set(oe.label,Se)}let it=et(be.body),ct=((K=be.body.$)==null?void 0:K.env)??c;ct=yt(ct);for(let oe of Ue.forallParameters){let re=le.get(oe.label);re&&(ct=Pe({env:ct,variable:{name:oe.label,type:oe.type,isCompileTimeOnly:!0,value:[ye(re)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let Ft=be.specializedType??be.type,Zt=((j=be.definitionSiteEnclosingFunctionType)==null?void 0:j.return.type)??$r(),q={...i,expectedType:void 0,enclosingFunctionReturnType:Zt,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:Ft,value:be,evaluationEnv:ct}};try{let oe=Ri({expr:it,env:ct,context:q}),re=Ft.parameters.map(Re=>{if(Re.isCompileTimeOnly)return Re;if(z(Re.type)){let ft=le.get(Re.type.name);if(ft)return{...Re,type:ft}}return Re}),ne=Ft.return.type;if(z(ne)){let Re=le.get(ne.name);Re&&(ne=Re)}let me={...Ft,parameters:re,return:{...Ft.return,type:ne}},$e={...be,body:oe,specializedType:me};pe.handlerValue=$e,pe.effectParameterType=me;for(let Re of pe.effectCallPoints)Re.isTransitiveEffectCall&&(Re.operationArgTypes=Re.operationArgTypes.map(ft=>z(ft)?le.get(ft.name)??ft:ft))}catch(oe){if(I(be.body)&&be.body.args.length>0&&!((ie=be.body.args[0])!=null&&ie.$))throw oe;pe.handlerValue=be}}else pe.handlerValue=be}else Z&&(pe.handlerValue=Z.value);$.push({analysis:pe,ctlParam:ee})}}if($.length===1)g.$.effectAnalysis=$[0].analysis;else if($.length>1){let ee=[],pe=new Map,Z=new Map,Ee=[];for(let Ue=0;Ue<$.length;Ue++){let{analysis:te}=$[Ue];Ee.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 le of te.effectCallPoints)ee.push({...le,effectIndex:Ue});for(let le of te.capturedVariables)pe.has(le.id)||pe.set(le.id,le);for(let[le,fe]of te.variableIdRemapping)Z.set(le,fe)}if(I(g)&&T(g,M.begin)){let Ue=g.args,te=new Map;for(let fe=0;fe<Ue.length;fe++)te.set(Ue[fe],fe);let le=fe=>{for(let Se=0;Se<Ue.length;Se++)if(Fu(Ue[Se],fe.expr))return Se;return 999};ee.sort((fe,Se)=>le(fe)-le(Se))}for(let Ue=0;Ue<ee.length;Ue++)ee[Ue].index=Ue;let Fe=$[0].analysis,be={effectCallPoints:ee,capturedVariables:Array.from(pe.values()),hasEffects:!0,variableIdRemapping:Z,effectParameterName:Fe.effectParameterName,effectParameterType:Fe.effectParameterType,effectFieldPath:Fe.effectFieldPath,handlerValue:Fe.handlerValue,effectHandlerInfos:Ee};g.$.effectAnalysis=be}let E=[],C=ee=>{if(W(ee)){let pe=ee.value;if(!pe.typeName&&pe.id)return`${lt(ee)}_id${pe.id}`}return Ce(ee)?`fn_${ee.funcId}`:lt(ee)};o.forallParameters.forEach((ee,pe)=>{var Z,Ee;if(pe<t.forallArgs.length){let Fe=t.forallArgs[pe];E.push(ve(C(Fe.value)))}else{let Fe=ee.label,be=_e(n,Fe);be.length>0&&((Ee=(Z=be[be.length-1])==null?void 0:Z.value)!=null&&Ee[0])?E.push(ve(C(be[be.length-1].value[0]))):E.push("unknown")}}),o.parameters.forEach((ee,pe)=>{if(ee.isCompileTimeOnly&&pe<t.args.length){let Z=t.args[pe];Z?E.push(ve(C(Z.value))):E.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(ee=>{E.push(ve(C(ee.value)))}),s.forEach((ee,pe)=>{let Z=ee.type;(!Z.typeName&&Z.id||Ze(Z))&&E.push(`rtparam${pe}_${ve(D(Z))}_id${Z.id}`)});let w=E.join("_"),b=[];for(let ee of o.implicitParameters)if(ee.isEffectRowSpread){let pe=ee.type;if(z(pe)){if(t.forallArgs){for(let Z=0;Z<o.forallParameters.length;Z++)if(o.forallParameters[Z].label===pe.name&&Z<t.forallArgs.length){let Fe=t.forallArgs[Z].value;W(Fe)&&Ut(Fe.value)&&(pe=Fe.value);break}}if(z(pe)&&pe.resolvedConcreteType&&Ut(pe.resolvedConcreteType)&&(pe=pe.resolvedConcreteType),z(pe)){let Z=_e(c,pe.name);if(Z.length>0){let Fe=(ce=Z[Z.length-1].value)==null?void 0:ce[0];Fe&&W(Fe)&&Ut(Fe.value)&&(pe=Fe.value)}}}Ut(pe)&&b.push(...pe.implicitParameters)}else We(ee.type)&&b.push(ee);let k=eo({forallParameters:[],parameters:s,implicitParameters:b.length>0?b:void 0,variadicParameter:void 0,return_:{...o.return,type:f},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),A={...e,specializedType:k,body:g,isControlFunction:e.isControlFunction||Ur(g),funcId:`${e.funcId}_${w}`,funcName:`${e.funcName}_${w}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},S={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:A,env:g.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,S],A}function Wh({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var h,v,$;let i=e.type,o=((h=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:h.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=((v=e.definitionSiteEnclosingFunctionType)==null?void 0:v.return.type)??$r(),s=ve(D(o)),l=e.specializedFunctionCaches.find(E=>E.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=yt(t);for(let E of n.frames)for(let C of E.variables){if(!C.isCompileTimeOnly||_e(u,C.name).length>0)continue;let{env:b}=Pe({env:u,variable:{...C},allowVariableShadowing:!0});u=b}for(let E of i.forallParameters){let C=o,{env:w}=Pe({env:u,variable:{name:E.label,type:E.type,isCompileTimeOnly:!0,value:[ye(C)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=w}let c=et(e.body),_={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},f=Ri({expr:c,env:u,context:_}),p={...e,body:f,isControlFunction:e.isControlFunction||Ur(f),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},m=new Set(i.forallParameters.map(E=>E.type)),y=E=>z(E)&&m.has(E)?o:E,g=eo({forallParameters:[],parameters:i.parameters.map(E=>({...E,type:y(E.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:y(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return p.specializedType=g,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:p,env:(($=f.$)==null?void 0:$.env)??u}],p}function qh({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=il(e);for(let a of i){if(je(a)||Nn(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!_e(n,a.name).length){let l=tr(n,()=>!0),u=!1;for(let c of l)if(W((o=c.value)==null?void 0:o[0])){let _=c.value[0].value,f=il(_);for(let p of f)if(p.name===a.name){u=!0;break}if(u)break}if(u)continue;throw d({token:(t==null?void 0:t.token)??Ae,errorMessage:`Failed to infer the function call return type.
10414
- Please consider providing the expected type.`})}}}function Fu(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(Fu(e.func,t))return!0;for(let n of e.args)if(Fu(n,t))return!0}return!1}function vd({expr:e,env:t,context:n}){let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
10431
+ Please use explicit using() to disambiguate.`});let ge=Ve[Ve.length-1],Me=(Re=ge.value)==null?void 0:Re[0];if(!Me)throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ae,errorMessage:`The "given" variable "${ge.name}" has no compile-time value.`});x.push({value:Me,parameterType:he,argType:ge.type});let{env:Be}=Pe({env:b,variable:{name:ke.label,type:he,isCompileTimeOnly:!0,isImplicit:!0,value:[Me],token:((ft=ke.exprs.labelExpr)==null?void 0:ft.token)??Ae,initializedAtToken:((an=ke.exprs.labelExpr)==null?void 0:an.token)??Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Be}}let N={args:f,forallArgs:_,implicitArgs:x,variadicArgs:V},P;if(n.return.isCompileTimeOnly)if(u)P=ue(A,{variableName:n.return.label,env:n.env,context:a});else if(Ce(t)){let{value:de,callerEnv:ke,calleeEnv:Te}=ea({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:N,callerEnv:o,calleeEnv:b,context:{...a}});P=de,A=de.type,o=ke,b=Te}else{let de=bt(A)&&A.level===0,ke=`${n.id}_return_sometype`;if(de)if((St=a.expectedType)!=null&&St.type)P=ye(a.expectedType.type);else if(a.isEvaluatingFunctionType){let Te=fr(A,n.return.label,{id:ke,env:b,context:a});Te.functionApplication=e;let he=kn(b,Te);P=ye(he)}else throw d({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Ae,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else P=ue(A,{variableName:n.return.label,env:n.env,context:a})}Yh({returnType:A,env:b,expr:e,context:a});let R,H=((wt=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:wt.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&Ce(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&Ce(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,G=(An=N.implicitArgs)==null?void 0:An.some(de=>Oe(de.value)),Q=G&&!((mt=N.implicitArgs)!=null&&mt.some(de=>Oe(de.value)&&!We(de.parameterType))),K=N.args.some(de=>de.argType&&z(de.argType)),j=Q&&K,ie=(()=>{if(!G||!n.implicitParameters.some(he=>he.isEffectRowSpread))return!1;let ke=0;for(let he of n.implicitParameters)he.isEffectRowSpread||ke++;let Te=N.implicitArgs??[];for(let he=0;he<ke&&he<Te.length;he++)if(Oe(Te[he].value))return!1;return!0})(),ee=Fr(n)&&!jr(n)&&n.implicitParameters.some(de=>We(de.type)?de.type.fields.some(ke=>J(ke.type)&&ke.type.forallParameters.length===0):!!de.isEffectRowSpread);if(!l&&!ee&&t&&Ce(t)&&!t.isControlFunction&&Fr(n)&&!H&&(!G||j||ie)){if(R=Wh({originalFunction:t,argValues:N,calleeEnv:b,callerEnv:o,context:a}),R&&z(A)){let de=(Jt=(sn=R.body)==null?void 0:sn.$)==null?void 0:Jt.type;de&&!z(de)&&(A=de,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:de}}))}if(R){let de=new Set,ke=0;for(let Te=0;Te<n.parameters.length;Te++)if(!n.parameters[Te].isCompileTimeOnly){let we=N.args[Te],Ne=we==null?void 0:we.value;Ne&&Ce(Ne)&&Ne.type.implicitParameters.some(ot=>J(ot.type)||We(ot.type))&&de.add(ke),ke++}if(de.size>0)for(let Te=p.length-1;Te>=0;Te--)de.has(Te)&&p.splice(Te,1)}}if(!l&&t&&Ce(t)&&t.isControlFunction&&n.forallParameters.length>0&&!R&&(R=qh({originalFunction:t,argValues:N,calleeEnv:b,callerEnv:o,context:a}),R&&z(A))){let de=(en=(Gt=R.body)==null?void 0:Gt.$)==null?void 0:en.type;de&&!z(de)&&(A=de,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:de}}))}let pe=zo(o),Z;if(pe.length>0){let de=Bh({variablesToDrop:pe,env:o,context:a});Z=de.deferredDropExpressions,o=de.env}return{returnType:A,calleeEnv:b,callerEnv:o,pathCollection:O,argValues:N,returnValue:P,specializedFunctionValue:R,runtimeArgExprsInOrder:p,deferredDropExpressions:Z}}function Wh({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var V,O,x,N,P,R,H,G,Q,K,j,ie,ce;if(qs){si.specializeCount++;let ee=e.funcName??e.funcId;si.specializeNames.set(ee,(si.specializeNames.get(ee)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(ee=>ee.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(ee=>ee.value)),o.parameters.forEach((ee,pe)=>{let Z=t.args[pe];if(ee.isCompileTimeOnly)Z.value&&a.push(Z.value);else if(Z.value&&Ce(Z.value)&&Z.value.type.implicitParameters.some(Fe=>J(Fe.type)||We(Fe.type)))Z.value&&a.push(Z.value);else{let be=z(Z.argType)&&Z.argType.resolvedConcreteType&&!je(Z.argType)?Z.argType.resolvedConcreteType:Z.argType;s.push({...ee,type:be})}});let l=s.map(ee=>ee.type),u=e.specializedFunctionCaches.find(ee=>ee.compileTimeArgValues.length===a.length&&ee.compileTimeArgValues.every((Ee,Fe)=>{let be=a[Fe];return gn({value:Ee,env:ee.env},{value:be,env:r})})?ee.runtimeParameterTypes.length===l.length&&ee.runtimeParameterTypes.every((Ee,Fe)=>{let be=l[Fe];return ae({type:Ee,env:ee.env},{type:be,env:r},!0)}):!1);if(u)return qs&&si.cacheHitCount++,u.specializedFunction;qs&&si.cacheMissCount++;let c=n;for(let ee of r.frames)for(let pe of ee.variables){if(!pe.isCompileTimeOnly||_e(c,pe.name).length>0)continue;let{env:Ee}=Pe({env:c,variable:{...pe},allowVariableShadowing:!0});c=Ee}for(let ee of s){let pe=_e(c,ee.label);if(pe.length>0){let Z=pe[pe.length-1],Ee={...Z,value:void 0};c=vt(c,Z,Ee)}}let _=et(e.body),{returnType:f,calleeEnv:p}=_o({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=p;let m=i.enclosingFunctionReturnType,y=((V=t.implicitArgs)==null?void 0:V.some(ee=>Ce(ee.value)&&ee.value.isControlFunction||Et(ee.value)&&vd(ee.value.type,ee.value)))??!1,g=nn({expr:_,env:c,context:{...i,expectedType:{type:f,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:y,...m?{enclosingFunctionReturnType:m}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw d({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let ee=0;ee<o.implicitParameters.length;ee++){let pe=o.implicitParameters[ee];if(J(pe.type)){let Z=(O=t.implicitArgs)==null?void 0:O[v],Ee=Z&&Ce(Z.value)?Z.value:void 0;Ee!=null&&Ee.isControlFunction&&h.push({handlerArgIndex:v,label:pe.label,type:pe.type,fromSpread:!1}),v+=1}else if(pe.isEffectRowSpread){let Z=pe.type;if(z(Z)){let Fe=(N=(x=_e(c,pe.label).at(-1))==null?void 0:x.value)==null?void 0:N[0];if(Fe&&W(Fe)&&Ut(Fe.value))Z=Fe.value;else{let be=kn(c,Z);be&&(Z=be)}}if(Ut(Z)){for(let Ee=0;Ee<Z.implicitParameters.length;Ee++){let Fe=Z.implicitParameters[Ee];if(J(Fe.type)){let be=(P=t.implicitArgs)==null?void 0:P[v+Ee],Ue=be&&Ce(be.value)?be.value:void 0;Ue!=null&&Ue.isControlFunction&&h.push({handlerArgIndex:v+Ee,label:Fe.label,type:Fe.type,fromSpread:!0})}else if(We(Fe.type)){let be=(R=t.implicitArgs)==null?void 0:R[v+Ee],Ue=be&&Et(be.value)?be.value:void 0,te=[],le=(fe,Se,it)=>{for(let ct=0;ct<fe.fields.length;ct++){let Ft=fe.fields[ct];if(J(Ft.type)){let Zt=it==null?void 0:it.fields[ct];if(Zt&&Ce(Zt)&&Zt.isControlFunction){let q=Zt.specializedType??Ft.type;te.push({path:[...Se,Ft.label],type:q})}}else if(We(Ft.type)){let Zt=it==null?void 0:it.fields[ct];le(Ft.type,[...Se,Ft.label],Zt&&Et(Zt)?Zt:void 0)}}};le(Fe.type,[],Ue);for(let fe of te)h.push({handlerArgIndex:v+Ee,label:Fe.label,type:fe.type,fromSpread:!0,effectFieldPath:fe.path})}}v+=Z.implicitParameters.length}else v+=1}else if(We(pe.type)){let Z=[],Ee=(H=t.implicitArgs)==null?void 0:H[v],Fe=(be,Ue,te)=>{for(let le=0;le<be.fields.length;le++){let fe=be.fields[le];if(J(fe.type)){let Se=te==null?void 0:te.fields[le];if(Se&&Ce(Se)&&Se.isControlFunction){let it=Se.specializedType??fe.type;Z.push({path:[...Ue,fe.label],type:it})}}else if(We(fe.type)){let Se=te==null?void 0:te.fields[le];Fe(fe.type,[...Ue,fe.label],Se&&Et(Se)?Se:void 0)}}};Fe(pe.type,[],Ee&&Et(Ee.value)?Ee.value:void 0);for(let be of Z)h.push({handlerArgIndex:v,label:pe.label,type:be.type,fromSpread:!1,effectFieldPath:be.path});v+=1}else v+=1}let $=[];for(let ee of h){let pe=gd(g,ee.label,ee.type,!0,ee.effectFieldPath);if(pe.hasEffects){let Z=(G=t.implicitArgs)==null?void 0:G[ee.handlerArgIndex],Ee,Fe=ee.effectFieldPath;if(Z&&Ce(Z.value))Ee=Z.value;else if(Z&&Et(Z.value)&&Fe&&Fe.length>0){let be=Z.value;for(let Ue of Fe){if(!Et(be)){be=void 0;break}let te=be.type.fields.findIndex(le=>le.label===Ue);if(te<0||!be.fields[te]){be=void 0;break}be=be.fields[te]}be&&Ce(be)&&(Ee=be)}if(Ee){let be=Ee,Ue=ee.type,te=!be.body.$;if(!te&&be.isControlFunction&&I(be.body)&&be.body.args.length>0&&!((Q=be.body.args[0])!=null&&Q.$)&&(te=!0),te&&J(Ue)&&Ue.forallParameters.length>0&&pe.effectCallPoints.length>0){let le=new Map,fe=Ue.return.type,Se=pe.effectCallPoints[0].operationResultType;if(z(fe)&&le.set(fe.name,Se),le.size===0&&Ue.forallParameters.length===1){let oe=Ue.forallParameters[0];le.set(oe.label,Se)}let it=et(be.body),ct=((K=be.body.$)==null?void 0:K.env)??c;ct=yt(ct);for(let oe of Ue.forallParameters){let re=le.get(oe.label);re&&(ct=Pe({env:ct,variable:{name:oe.label,type:oe.type,isCompileTimeOnly:!0,value:[ye(re)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let Ft=be.specializedType??be.type,Zt=((j=be.definitionSiteEnclosingFunctionType)==null?void 0:j.return.type)??$r(),q={...i,expectedType:void 0,enclosingFunctionReturnType:Zt,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:Ft,value:be,evaluationEnv:ct}};try{let oe=Ri({expr:it,env:ct,context:q}),re=Ft.parameters.map(Re=>{if(Re.isCompileTimeOnly)return Re;if(z(Re.type)){let ft=le.get(Re.type.name);if(ft)return{...Re,type:ft}}return Re}),ne=Ft.return.type;if(z(ne)){let Re=le.get(ne.name);Re&&(ne=Re)}let me={...Ft,parameters:re,return:{...Ft.return,type:ne}},$e={...be,body:oe,specializedType:me};pe.handlerValue=$e,pe.effectParameterType=me;for(let Re of pe.effectCallPoints)Re.isTransitiveEffectCall&&(Re.operationArgTypes=Re.operationArgTypes.map(ft=>z(ft)?le.get(ft.name)??ft:ft))}catch(oe){if(I(be.body)&&be.body.args.length>0&&!((ie=be.body.args[0])!=null&&ie.$))throw oe;pe.handlerValue=be}}else pe.handlerValue=be}else Z&&(pe.handlerValue=Z.value);$.push({analysis:pe,ctlParam:ee})}}if($.length===1)g.$.effectAnalysis=$[0].analysis;else if($.length>1){let ee=[],pe=new Map,Z=new Map,Ee=[];for(let Ue=0;Ue<$.length;Ue++){let{analysis:te}=$[Ue];Ee.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 le of te.effectCallPoints)ee.push({...le,effectIndex:Ue});for(let le of te.capturedVariables)pe.has(le.id)||pe.set(le.id,le);for(let[le,fe]of te.variableIdRemapping)Z.set(le,fe)}if(I(g)&&T(g,M.begin)){let Ue=g.args,te=new Map;for(let fe=0;fe<Ue.length;fe++)te.set(Ue[fe],fe);let le=fe=>{for(let Se=0;Se<Ue.length;Se++)if(Fu(Ue[Se],fe.expr))return Se;return 999};ee.sort((fe,Se)=>le(fe)-le(Se))}for(let Ue=0;Ue<ee.length;Ue++)ee[Ue].index=Ue;let Fe=$[0].analysis,be={effectCallPoints:ee,capturedVariables:Array.from(pe.values()),hasEffects:!0,variableIdRemapping:Z,effectParameterName:Fe.effectParameterName,effectParameterType:Fe.effectParameterType,effectFieldPath:Fe.effectFieldPath,handlerValue:Fe.handlerValue,effectHandlerInfos:Ee};g.$.effectAnalysis=be}let E=[],C=ee=>{if(W(ee)){let pe=ee.value;if(!pe.typeName&&pe.id)return`${lt(ee)}_id${pe.id}`}return Ce(ee)?`fn_${ee.funcId}`:lt(ee)};o.forallParameters.forEach((ee,pe)=>{var Z,Ee;if(pe<t.forallArgs.length){let Fe=t.forallArgs[pe];E.push(ve(C(Fe.value)))}else{let Fe=ee.label,be=_e(n,Fe);be.length>0&&((Ee=(Z=be[be.length-1])==null?void 0:Z.value)!=null&&Ee[0])?E.push(ve(C(be[be.length-1].value[0]))):E.push("unknown")}}),o.parameters.forEach((ee,pe)=>{if(ee.isCompileTimeOnly&&pe<t.args.length){let Z=t.args[pe];Z?E.push(ve(C(Z.value))):E.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(ee=>{E.push(ve(C(ee.value)))}),s.forEach((ee,pe)=>{let Z=ee.type;(!Z.typeName&&Z.id||Ze(Z))&&E.push(`rtparam${pe}_${ve(D(Z))}_id${Z.id}`)});let w=E.join("_"),b=[];for(let ee of o.implicitParameters)if(ee.isEffectRowSpread){let pe=ee.type;if(z(pe)){if(t.forallArgs){for(let Z=0;Z<o.forallParameters.length;Z++)if(o.forallParameters[Z].label===pe.name&&Z<t.forallArgs.length){let Fe=t.forallArgs[Z].value;W(Fe)&&Ut(Fe.value)&&(pe=Fe.value);break}}if(z(pe)&&pe.resolvedConcreteType&&Ut(pe.resolvedConcreteType)&&(pe=pe.resolvedConcreteType),z(pe)){let Z=_e(c,pe.name);if(Z.length>0){let Fe=(ce=Z[Z.length-1].value)==null?void 0:ce[0];Fe&&W(Fe)&&Ut(Fe.value)&&(pe=Fe.value)}}}Ut(pe)&&b.push(...pe.implicitParameters)}else We(ee.type)&&b.push(ee);let k=eo({forallParameters:[],parameters:s,implicitParameters:b.length>0?b:void 0,variadicParameter:void 0,return_:{...o.return,type:f},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),A={...e,specializedType:k,body:g,isControlFunction:e.isControlFunction||Ur(g),funcId:`${e.funcId}_${w}`,funcName:`${e.funcName}_${w}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},S={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:A,env:g.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,S],A}function qh({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var h,v,$;let i=e.type,o=((h=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:h.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:i.return.type,a=((v=e.definitionSiteEnclosingFunctionType)==null?void 0:v.return.type)??$r(),s=ve(D(o)),l=e.specializedFunctionCaches.find(E=>E.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=yt(t);for(let E of n.frames)for(let C of E.variables){if(!C.isCompileTimeOnly||_e(u,C.name).length>0)continue;let{env:b}=Pe({env:u,variable:{...C},allowVariableShadowing:!0});u=b}for(let E of i.forallParameters){let C=o,{env:w}=Pe({env:u,variable:{name:E.label,type:E.type,isCompileTimeOnly:!0,value:[ye(C)],token:Ae,initializedAtToken:Ae,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=w}let c=et(e.body),_={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},f=Ri({expr:c,env:u,context:_}),p={...e,body:f,isControlFunction:e.isControlFunction||Ur(f),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},m=new Set(i.forallParameters.map(E=>E.type)),y=E=>z(E)&&m.has(E)?o:E,g=eo({forallParameters:[],parameters:i.parameters.map(E=>({...E,type:y(E.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:y(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return p.specializedType=g,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:p,env:(($=f.$)==null?void 0:$.env)??u}],p}function Yh({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=il(e);for(let a of i){if(je(a)||Nn(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!_e(n,a.name).length){let l=tr(n,()=>!0),u=!1;for(let c of l)if(W((o=c.value)==null?void 0:o[0])){let _=c.value[0].value,f=il(_);for(let p of f)if(p.name===a.name){u=!0;break}if(u)break}if(u)continue;throw d({token:(t==null?void 0:t.token)??Ae,errorMessage:`Failed to infer the function call return type.
10432
+ Please consider providing the expected type.`})}}}function Fu(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(Fu(e.func,t))return!0;for(let n of e.args)if(Fu(n,t))return!0}return!1}function Td({expr:e,env:t,context:n}){let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
10415
10433
  ${L(r)}`});if(t=i.$.env,!W(i.$.value))throw d({token:r.token,errorMessage:`Iso expects a type as argument, but got:
10416
- ${L(r)}`});let a=i.$.value.value,s=Fc(a,t);t=ac({isoType:s,env:t,context:n});let l=ye(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Td({expr:e,env:t,context:n,isoType:r}){var s;let i=e.args[0],o=U({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
10434
+ ${L(r)}`});let a=i.$.value.value,s=Fc(a,t);t=ac({isoType:s,env:t,context:n});let l=ye(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Ed({expr:e,env:t,context:n,isoType:r}){var s;let i=e.args[0],o=U({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
10417
10435
  ${L(i)}`});t=o.$.env;let a=(s=o.$)==null?void 0:s.variableName;if(a){let l=_e(t,a);if(l.length>0){let u=l[l.length-1];if(di(u.type,new Set,t))throw d({token:i.token,errorMessage:`Cannot isolate variable ${a} because its type may form RC cycles.`});if(!u.isOwningTheRcValue)throw d({token:i.token,errorMessage:`Cannot isolate variable ${a} because it does not own its RC value.`});let _=t.frames.flatMap(f=>f.variables).filter(f=>{var p;return((p=f.isOwningTheSameRcValueAs)==null?void 0:p.id)===u.id&&f.id!==u.id});if(_.length>0){let f=_.map(p=>p.name).join(", ");throw d({token:i.token,errorMessage:`Cannot isolate ${a}, also owned by: ${f}
10418
- Iso requires unique ownership (no aliases). Drop other aliases first.`})}}else throw d({token:i.token,errorMessage:`Variable ${a} not found in the environment.`})}return t=sr(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Tt(e,!0),e}function Ed({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:i}){var l,u,c,_,f;if(n.length>t.fields.length)throw d({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((p,m)=>({...p,assignedValue:o[m]}))};for(let p=0;p<t.fields.length;p++){let m=t.fields[p],y=!1,g;for(let h=0;h<n.length;h++){let v=n[h],$;if(I(v)&&T(v,":",2)){if($=v.args[0],v=v.args[1],!X($))throw d({token:$.token,errorMessage:`Expected identifier for label, got:
10436
+ Iso requires unique ownership (no aliases). Drop other aliases first.`})}}else throw d({token:i.token,errorMessage:`Variable ${a} not found in the environment.`})}return t=sr(o,t),e.$={env:t,type:r,value:void 0,pathCollection:o.$.pathCollection||[]},Tt(e,!0),e}function $d({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:i}){var l,u,c,_,f;if(n.length>t.fields.length)throw d({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((p,m)=>({...p,assignedValue:o[m]}))};for(let p=0;p<t.fields.length;p++){let m=t.fields[p],y=!1,g;for(let h=0;h<n.length;h++){let v=n[h],$;if(I(v)&&T(v,":",2)){if($=v.args[0],v=v.args[1],!X($))throw d({token:$.token,errorMessage:`Expected identifier for label, got:
10419
10437
  ${L($)}`});g=$.token.value}else throw d({token:v.token,errorMessage:`Expected member label, but got:
10420
10438
  ${L(v)}`});if(!t.fields.find(E=>E.label===g))throw d({token:$.token,errorMessage:`Module member with label "${g}" does not exist in the module type.`});if(m.label===g){if(y=!0,m.assignedValue)throw d({token:v.token,errorMessage:`Module member "${m.label}" already has a assigned value:
10421
10439
  ${lt(m.assignedValue)}`});let E,C=m.exprs.typeExpr,w=m.exprs.defaultValueExpr;if(C){let V=(l=U({expr:et(C),env:yt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0,SelfModuleType:t}}).$)==null?void 0:l.value;if(!W(V))throw d({token:v.token,errorMessage:`Failed to evaluate the module member "${g}"`});E=V.value}else if(w){let V=(u=U({expr:et(w),env:yt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$)==null?void 0:u.value;if(!V)throw d({token:v.token,errorMessage:`Failed to evaluate the module member "${g}"`});E=V.type}else throw d({token:v.token,errorMessage:`Module member "${g}" has no type or default value or assigned value.`});let b=U({expr:v,env:r,context:{...i,expectedType:{type:E,env:r},ReceiverType:void 0,SelfType:void 0}}),k=(c=b.$)==null?void 0:c.type;if(!k)throw d({token:v.token,errorMessage:`Failed to evaluate the module member "${g}"`});if((_=b.$)!=null&&_.env&&(r=b.$.env),!ae({type:E,env:r},{type:k,env:r}))throw d({token:v.token,errorMessage:`Type mismatch for the module member "${g}":
10422
10440
  Expected: ${D(E)}
10423
- Got: ${D(k)}`});let A=(f=b.$)==null?void 0:f.value;k.ioBuiltin&&(t.fields[p].type.ioBuiltin=k.ioBuiltin),Ce(A)&&(A.funcId+=`_${m.label}`,!A.specializedType&&J(E)&&(A.specializedType={...E,parameters:A.type.parameters,parametersFrame:A.type.parametersFrame})),o[p]=A,a.fields[p].assignedValue=A,v.$={env:r,type:k,value:A,pathCollection:[]},$&&($.$=v.$);break}}if(!y){let h=m.defaultValue,v=m.assignedValue,$=v;if(!v&&h&&($=h),!$)throw d({token:e.token,errorMessage:`Module member "${m.label}" is not provided and has no required/default value.`});o[p]=$,a.fields[p].assignedValue=$}}return{moduleValue:rs({...t},o),callerEnv:r}}function $d({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!tt(e))return;let o=U({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw d({token:t.token,errorMessage:`Failed to evaluate argument: ${L(t)}`});let a=o.$.env,s=o.$.type;if(ln(s)&&(Mr(e.childType)||ho(e.childType))){let u=Qt({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(!tt(s))throw d({token:t.token,errorMessage:`Cannot cast ${D(s)} to ${D(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:F.__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 cs(n,l),{expr:n,env:a}}function Cd({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!I(a)||!T(a,":=",2))throw d({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
10441
+ Got: ${D(k)}`});let A=(f=b.$)==null?void 0:f.value;k.ioBuiltin&&(t.fields[p].type.ioBuiltin=k.ioBuiltin),Ce(A)&&(A.funcId+=`_${m.label}`,!A.specializedType&&J(E)&&(A.specializedType={...E,parameters:A.type.parameters,parametersFrame:A.type.parametersFrame})),o[p]=A,a.fields[p].assignedValue=A,v.$={env:r,type:k,value:A,pathCollection:[]},$&&($.$=v.$);break}}if(!y){let h=m.defaultValue,v=m.assignedValue,$=v;if(!v&&h&&($=h),!$)throw d({token:e.token,errorMessage:`Module member "${m.label}" is not provided and has no required/default value.`});o[p]=$,a.fields[p].assignedValue=$}}return{moduleValue:rs({...t},o),callerEnv:r}}function Cd({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!tt(e))return;let o=U({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw d({token:t.token,errorMessage:`Failed to evaluate argument: ${L(t)}`});let a=o.$.env,s=o.$.type;if(ln(s)&&(Mr(e.childType)||ho(e.childType))){let u=Qt({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(!tt(s))throw d({token:t.token,errorMessage:`Cannot cast ${D(s)} to ${D(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:F.__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 cs(n,l),{expr:n,env:a}}function bd({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!I(a)||!T(a,":=",2))throw d({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
10424
10442
  ${L(a)}`});let s=a.args[0],l=a.args[1];if(!X(s))throw d({token:s.token,errorMessage:`Expected identifier for associated type label, got:
10425
10443
  ${L(s)}`});let u=s.token.value,c=e.fields.find(f=>f.label===u);if(!c)throw d({token:s.token,errorMessage:`Field "${u}" not found in trait "${e.typeName??"unknown"}".`});if(!c.unassignedSomeType&&!bt(c.type))throw d({token:s.token,errorMessage:`Field "${u}" is not an associated type. Only associated type fields can be constrained with ":=".`});let _=U({expr:l,env:n,context:{...r}});if(!_.$||!W(_.$.value))throw d({token:l.token,errorMessage:`Expected type for associated type constraint "${u}", got:
10426
- ${L(l)}`});n=_.$.env,i.push({label:u,constraintType:_.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function bd({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){var _,f,p,m,y,g,h,v;if(n.length>t.fields.length)throw d({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(($,E)=>({...$,assignedValue:o[E]}))},s=i.ReceiverType,l=i.ReceiverType??a;if(!s)throw d({token:e.token,errorMessage:`Receiver type is undefined when implementing trait.
10444
+ ${L(l)}`});n=_.$.env,i.push({label:u,constraintType:_.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function kd({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){var _,f,p,m,y,g,h,v;if(n.length>t.fields.length)throw d({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(($,E)=>({...$,assignedValue:o[E]}))},s=i.ReceiverType,l=i.ReceiverType??a;if(!s)throw d({token:e.token,errorMessage:`Receiver type is undefined when implementing trait.
10427
10445
  Please consider using "impl" to specify the receiver type explicitly, like:
10428
10446
 
10429
10447
  // impl receiverType, traitImplementation
@@ -10441,11 +10459,11 @@ ${L(m)}`});if(m){let v=m.token.value,$=e.find(E=>E.label===v);if($){if($.assigne
10441
10459
  ${So($)}`});f=$}else throw d({token:p.token,errorMessage:`Failed to find "${v}" in the type.`})}if(a.has(f))throw d({token:p.token,errorMessage:`Type member "${f.label}" is already implemented.`});let y=e.indexOf(f),g=U({expr:p,env:r,context:{...i,expectedType:{type:f.type,env:r}}});if(!g.$)throw d({token:p.token,errorMessage:`Failed to evaluate argument expression:
10442
10460
  ${L(p)}`});Vn(g,i),r=g.$.env;let h=g.$.type;if(qi(f.type,r)||(h=Qt({type:h,expectedType:f.type,expr:g,env:r})),m&&(m.$=g.$),!ae({type:f.type,env:r},{type:h,env:r}))throw d({token:p.token,errorMessage:`Type mismatch for type member "${f.label}":
10443
10461
  Expected: ${D(f.type)}
10444
- Got: ${D(h)}`});s[y]=(c=g.$)==null?void 0:c.value,l[y]=g,a.add(f)}if(!o)for(let _=0;_<e.length;_++){let f=e[_];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw d({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[_]=f.defaultValue??f.assignedValue,l[_]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function Yh(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 W(l)&&W(c)?ae({type:l.value,env:s.env},{type:c.value,env:t},!0):gn({value:l,env:s.env},{value:c,env:t})}));if(o&&W(o.value)&&!(z(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&Ht(n.SelfType)||n!=null&&n.SelfType&&xe(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!W(s.value)||z(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&W(a.value))return a.value.value}function wr({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(I(o)){let q=U({expr:o,env:t,context:{...n}});if(o=q,(h=q.$)!=null&&h.type)l=[{type:q.$.type,value:q.$.value}];else if(I(q)&&T(q,".",2)){let oe=q.args[0];s=q.args[1];let re=(v=oe.$)==null?void 0:v.type;if(!re)throw d({token:oe.token,errorMessage:"Expected to be evaluated."});let ne=($=oe.$)==null?void 0:$.value,me=W(ne);if(X(s)){let $e=s.token.value;if(me){let Re=ne.value;l=Jc({env:t,context:n,methodName:$e,type:Re}).map(an=>({type:an.type,value:an.value,args:a}))}else l=Jl({env:t,context:n,methodName:$e,receiverType:re,isInfixOperatorCall:!1}).map(ft=>{let an;if(ft.needsPointerConversion){let St={tag:"Atom",token:oe.token,$:void 0};St.token={...oe.token,value:"&",type:"identifier"},an=[{tag:"FnCall",func:St,args:[oe],token:oe.token,$:void 0},...a]}else an=[oe,...a];return{type:ft.type,value:ft.value,needsPointerConversion:ft.needsPointerConversion,args:an}})}else{let $e=U({expr:s,env:t,context:{...n}});(E=$e.$)!=null&&E.env&&(t=(C=$e.$)==null?void 0:C.env),s=$e;let Re=(w=s.$)==null?void 0:w.type,ft=(b=s.$)==null?void 0:b.value;if(!Re)throw d({token:s.token,errorMessage:"Expected to be a function."});l=[{type:Re,value:ft}],a=[oe,...a]}}else throw d({token:o.token,errorMessage:`Expected type for function call, got ${L(q)}`})}else{let q=o.token.value;if(q==="_"){let oe=n.expectedType;if(!oe||z(oe.type))return od({expr:e,env:t,context:n});l=[{type:pn(oe.type),value:ye(oe.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Dr(q)&&e.isInfix){let oe=a[0];if(!oe)throw d({token:o.token,errorMessage:`Expected first argument for operator, got:
10462
+ Got: ${D(h)}`});s[y]=(c=g.$)==null?void 0:c.value,l[y]=g,a.add(f)}if(!o)for(let _=0;_<e.length;_++){let f=e[_];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw d({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[_]=f.defaultValue??f.assignedValue,l[_]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function Hh(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 W(l)&&W(c)?ae({type:l.value,env:s.env},{type:c.value,env:t},!0):gn({value:l,env:s.env},{value:c,env:t})}));if(o&&W(o.value)&&!(z(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&Ht(n.SelfType)||n!=null&&n.SelfType&&xe(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!W(s.value)||z(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&W(a.value))return a.value.value}function wr({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(I(o)){let q=U({expr:o,env:t,context:{...n}});if(o=q,(h=q.$)!=null&&h.type)l=[{type:q.$.type,value:q.$.value}];else if(I(q)&&T(q,".",2)){let oe=q.args[0];s=q.args[1];let re=(v=oe.$)==null?void 0:v.type;if(!re)throw d({token:oe.token,errorMessage:"Expected to be evaluated."});let ne=($=oe.$)==null?void 0:$.value,me=W(ne);if(X(s)){let $e=s.token.value;if(me){let Re=ne.value;l=Jc({env:t,context:n,methodName:$e,type:Re}).map(an=>({type:an.type,value:an.value,args:a}))}else l=Jl({env:t,context:n,methodName:$e,receiverType:re,isInfixOperatorCall:!1}).map(ft=>{let an;if(ft.needsPointerConversion){let St={tag:"Atom",token:oe.token,$:void 0};St.token={...oe.token,value:"&",type:"identifier"},an=[{tag:"FnCall",func:St,args:[oe],token:oe.token,$:void 0},...a]}else an=[oe,...a];return{type:ft.type,value:ft.value,needsPointerConversion:ft.needsPointerConversion,args:an}})}else{let $e=U({expr:s,env:t,context:{...n}});(E=$e.$)!=null&&E.env&&(t=(C=$e.$)==null?void 0:C.env),s=$e;let Re=(w=s.$)==null?void 0:w.type,ft=(b=s.$)==null?void 0:b.value;if(!Re)throw d({token:s.token,errorMessage:"Expected to be a function."});l=[{type:Re,value:ft}],a=[oe,...a]}}else throw d({token:o.token,errorMessage:`Expected type for function call, got ${L(q)}`})}else{let q=o.token.value;if(q==="_"){let oe=n.expectedType;if(!oe||z(oe.type))return ad({expr:e,env:t,context:n});l=[{type:dn(oe.type),value:ye(oe.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Dr(q)&&e.isInfix){let oe=a[0];if(!oe)throw d({token:o.token,errorMessage:`Expected first argument for operator, got:
10445
10463
  ${L(o)}`});let ne=(k=U({expr:oe,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:k.type;if(!ne)throw d({token:oe.token,errorMessage:"Expected to be evaluated."});let me=q;s=o,l=Jl({env:t,context:n,methodName:me,receiverType:ne,isInfixOperatorCall:!0}).map(Re=>({type:Re.type,value:Re.value,needsPointerConversion:Re.needsPointerConversion}))}else if(q==="Call"&&n.SelfType){let oe=ye(n.SelfType);l=[{type:oe.type,value:oe}]}else{let oe=U({expr:o,env:t,context:{...n}});if(o=oe,!oe.$)throw d({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(We(oe.$.type)){let re=oe.$.type,ne=re.fields.findIndex($e=>$e.label==="Call");if(ne<0)throw d({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let me=re.fields[ne];if(me.assignedValue){let $e=me.assignedValue;or($e)?l=$e.fields.map(Re=>({type:Re.type,value:Re})):l=[{type:$e.type,value:$e}]}else throw d({token:o.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:oe.$.type,value:oe.$.value}]}}let u=l.length===1&&J(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!bt(l[0].type.return.type)&&l[0].type.forallParameters.length===0,f=l.length===1&&(J(l[0].type)||(z(l[0].type)||Ke(l[0].type))&&!!Gn(l[0].type))?l.map(q=>({...q,result:{kind:"function",result:void 0}})):l.map(q=>{let oe=q.args??a;if(J(q.type))try{let re=Oi({functionValue:ia(q.value),functionType:q.type,expr:et(e),functionCalleeExpr:o,argExprs:oe.map(ne=>et(ne)),callerEnv:Zl(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...q,result:{kind:"function",result:re}}}catch(re){if(re instanceof rr&&re.kind==="overflow")throw Wt([{token:e.token,errorMessage:`Failed to call the function:
10446
10464
  `},...re.tokenAndErrorList],re.isAssertionError);return{...q,result:{kind:"error",error:re}}}else if((z(q.type)||Ke(q.type))&&Gn(q.type)){let re=Gn(q.type);try{let ne=Oi({functionValue:ia(q.value),functionType:re.isFn.callType,expr:et(e),functionCalleeExpr:o,argExprs:oe.map(me=>et(me)),callerEnv:Zl(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...q,result:{kind:"function",result:ne}}}catch(ne){if(ne instanceof rr&&ne.kind==="overflow")throw Wt([{token:e.token,errorMessage:`Failed to call the function:
10447
- `},...ne.tokenAndErrorList],ne.isAssertionError);return{...q,result:{kind:"error",error:ne}}}}else{let re=q.value;if(W(re)&&z(re.value)&&re.value.recursiveTypeRef){let ne=Yh(re.value,t,n);ne&&(re=ye(ne),q.value=re,q.type=re.type)}if(W(re)&&xe(re.value))try{let ne=Ys({typeFields:re.value.fields,functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"type",result:ne}}}catch(ne){return{...q,result:{kind:"error",error:ne}}}else if(W(re)&&ze(re.value)){let ne=re.value,me=ne.variants.find($e=>$e.name===ne.selectedVariantName);if(me)try{let $e=Ys({typeFields:me.fields||[],functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"type",result:$e}}}catch($e){return{...q,result:{kind:"error",error:$e}}}else return{...q,result:{kind:"error",error:d({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(W(re)&&Pt(re.value))try{let ne=Ys({typeFields:re.value.fields,functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n},isUnionType:!0});return{...q,result:{kind:"type",result:ne}}}catch(ne){return{...q,result:{kind:"error",error:ne}}}else if(W(re)&&We(re.value)){let ne=re.value;try{let me=Ed({moduleExpr:o,moduleType:ne,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"module-type",result:me}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&st(re.value)){let ne=re.value;if(oe.some($e=>I($e)&&T($e,":=",2)))try{let $e=Cd({traitExpr:o,traitType:ne,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"trait-specialization",result:$e}}}catch($e){return{...q,result:{kind:"error",error:$e}}}try{let $e=bd({traitExpr:o,traitType:ne,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"trait-type",result:$e}}}catch($e){return{...q,result:{kind:"error",error:$e}}}}else if(W(re)&&J(re.value)){let ne=re.value;try{return _d({expr:e,functionType:ne,callerEnv:t,context:{...n}}),{...q,result:{kind:"function-type"}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&Xe(re.value)){let ne=re.value;try{return ud({expr:e,arrayType:ne,argExprs:oe,callerEnv:t,context:{...n}}),{...q,result:{kind:"array-type"}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&En(re.value)){let ne=re.value;try{return pd({expr:e,comptimeListType:ne,argExprs:oe,callerEnv:t,context:{...n}}),{...q,result:{kind:"array-type"}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&(z(re.value)||Ke(re.value))){let ne=re.value,me=Gn(ne);if(me)try{return fd({expr:e,fnModuleType:me,wrapperType:ne,callerEnv:t,context:{...n}}),{...q,result:{kind:"closure-type"}}}catch($e){return{...q,result:{kind:"error",error:$e}}}else if(z(ne)&&ne.recursiveTypeRef)try{let $e=[];for(let Re of oe){let ft=U({expr:Re,env:t,context:{...n}});if(!ft.$)throw d({token:Re.token,errorMessage:"Failed to evaluate argument"});t=ft.$.env,$e.push(ft)}return{...q,result:{kind:"type",result:{values:$e.map(Re=>Re.$.value),pathCollection:[],runtimeArgExprsInOrder:$e,callerEnv:t}}}}catch($e){return{...q,result:{kind:"error",error:$e}}}else return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Invalid function call on type:
10448
- ${W(re)?D(re.value):D(q.type)}`})}}}else if(Xe(q.type)||Lt(q.type))try{let ne=q.value,me=Lr(ne)?ne:void 0,$e=es(ne)?ne:void 0,Re=ld({expr:e,arrayType:q.type,arrayValue:me,sliceValue:$e,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"array",result:Re}}}catch(ne){return{...q,result:{kind:"error",error:ne}}}else if(W(re)&&za(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${oe.length}`})}};try{let me=Sp({targetType:ne,argExpr:oe[0],expr:e,callerEnv:t,context:{...n}});return me?{...q,result:{kind:"numeric-type",result:me}}:{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Failed to convert to numeric type ${D(ne)}`})}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&tt(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${oe.length}`})}};try{let me=$d({targetType:ne,argExpr:oe[0],expr:e,callerEnv:t,context:{...n}});return me?{...q,result:{kind:"pointer-type",result:me}}:{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Failed to cast to pointer type ${D(ne)}`})}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&fn(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${oe.length}`})}};try{let me=Td({expr:e,env:t,context:{...n},isoType:ne});return{...q,result:{kind:"iso-value",result:me}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&un(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Arc value constructor expects exactly 1 argument, got ${oe.length}`})}};try{let me=sd({expr:e,env:t,context:{...n},arcType:ne});return{...q,result:{kind:"arc-value",result:me}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Invalid function call on type:
10465
+ `},...ne.tokenAndErrorList],ne.isAssertionError);return{...q,result:{kind:"error",error:ne}}}}else{let re=q.value;if(W(re)&&z(re.value)&&re.value.recursiveTypeRef){let ne=Hh(re.value,t,n);ne&&(re=ye(ne),q.value=re,q.type=re.type)}if(W(re)&&xe(re.value))try{let ne=Ys({typeFields:re.value.fields,functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"type",result:ne}}}catch(ne){return{...q,result:{kind:"error",error:ne}}}else if(W(re)&&ze(re.value)){let ne=re.value,me=ne.variants.find($e=>$e.name===ne.selectedVariantName);if(me)try{let $e=Ys({typeFields:me.fields||[],functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"type",result:$e}}}catch($e){return{...q,result:{kind:"error",error:$e}}}else return{...q,result:{kind:"error",error:d({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(W(re)&&Pt(re.value))try{let ne=Ys({typeFields:re.value.fields,functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n},isUnionType:!0});return{...q,result:{kind:"type",result:ne}}}catch(ne){return{...q,result:{kind:"error",error:ne}}}else if(W(re)&&We(re.value)){let ne=re.value;try{let me=$d({moduleExpr:o,moduleType:ne,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"module-type",result:me}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&st(re.value)){let ne=re.value;if(oe.some($e=>I($e)&&T($e,":=",2)))try{let $e=bd({traitExpr:o,traitType:ne,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"trait-specialization",result:$e}}}catch($e){return{...q,result:{kind:"error",error:$e}}}try{let $e=kd({traitExpr:o,traitType:ne,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"trait-type",result:$e}}}catch($e){return{...q,result:{kind:"error",error:$e}}}}else if(W(re)&&J(re.value)){let ne=re.value;try{return fd({expr:e,functionType:ne,callerEnv:t,context:{...n}}),{...q,result:{kind:"function-type"}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&Xe(re.value)){let ne=re.value;try{return cd({expr:e,arrayType:ne,argExprs:oe,callerEnv:t,context:{...n}}),{...q,result:{kind:"array-type"}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&En(re.value)){let ne=re.value;try{return dd({expr:e,comptimeListType:ne,argExprs:oe,callerEnv:t,context:{...n}}),{...q,result:{kind:"array-type"}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&(z(re.value)||Ke(re.value))){let ne=re.value,me=Gn(ne);if(me)try{return pd({expr:e,fnModuleType:me,wrapperType:ne,callerEnv:t,context:{...n}}),{...q,result:{kind:"closure-type"}}}catch($e){return{...q,result:{kind:"error",error:$e}}}else if(z(ne)&&ne.recursiveTypeRef)try{let $e=[];for(let Re of oe){let ft=U({expr:Re,env:t,context:{...n}});if(!ft.$)throw d({token:Re.token,errorMessage:"Failed to evaluate argument"});t=ft.$.env,$e.push(ft)}return{...q,result:{kind:"type",result:{values:$e.map(Re=>Re.$.value),pathCollection:[],runtimeArgExprsInOrder:$e,callerEnv:t}}}}catch($e){return{...q,result:{kind:"error",error:$e}}}else return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Invalid function call on type:
10466
+ ${W(re)?D(re.value):D(q.type)}`})}}}else if(Xe(q.type)||Lt(q.type))try{let ne=q.value,me=Lr(ne)?ne:void 0,$e=es(ne)?ne:void 0,Re=ud({expr:e,arrayType:q.type,arrayValue:me,sliceValue:$e,argExprs:oe,callerEnv:t,context:{...n}});return{...q,result:{kind:"array",result:Re}}}catch(ne){return{...q,result:{kind:"error",error:ne}}}else if(W(re)&&za(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${oe.length}`})}};try{let me=Np({targetType:ne,argExpr:oe[0],expr:e,callerEnv:t,context:{...n}});return me?{...q,result:{kind:"numeric-type",result:me}}:{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Failed to convert to numeric type ${D(ne)}`})}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&tt(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${oe.length}`})}};try{let me=Cd({targetType:ne,argExpr:oe[0],expr:e,callerEnv:t,context:{...n}});return me?{...q,result:{kind:"pointer-type",result:me}}:{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Failed to cast to pointer type ${D(ne)}`})}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&pn(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${oe.length}`})}};try{let me=Ed({expr:e,env:t,context:{...n},isoType:ne});return{...q,result:{kind:"iso-value",result:me}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else if(W(re)&&cn(re.value)){let ne=re.value;if(oe.length!==1)return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Arc value constructor expects exactly 1 argument, got ${oe.length}`})}};try{let me=ld({expr:e,env:t,context:{...n},arcType:ne});return{...q,result:{kind:"arc-value",result:me}}}catch(me){return{...q,result:{kind:"error",error:me}}}}else return{...q,result:{kind:"error",error:d({token:o.token,errorMessage:`Invalid function call on type:
10449
10467
  ${W(re)?D(re.value):D(q.type)}`})}}}}),p=f.filter(q=>q.result.kind!=="error"),m=p.filter(q=>J(q.type)&&q.type.return.isCompileTimeOnly);if(m.length===1&&(p=m),p.length>1){let q=p.filter(oe=>J(oe.type)?oe.type.parameters.some(ne=>rn(ne.type)||Tn(ne.type)||ln(ne.type)):!1);q.length===1&&(p=q)}if(p.length===0){if(f.length===1&&f[0].result.kind==="error"){let q=f[0].result.error;throw q instanceof rr?Wt([{token:e.token,errorMessage:`Failed to call the function:
10450
10468
 
10451
10469
  ${q.tokenAndErrorList.filter(({token:oe})=>oe.modulePath!==e.token.modulePath).map(({errorMessage:oe})=>`- ${oe}`).join(`
@@ -10463,90 +10481,90 @@ Found ${p.length} matching calls:
10463
10481
  ${p.map(q=>`${D(q.type)}`).join(`
10464
10482
  `)}
10465
10483
  `});let y=p[0];if(n.isInFunctionCallCheckingPhase&&u){let q=y.type,{returnType:oe}=_o({functionType:q,calleeEnv:q.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=Yt(t),e.$={env:t,type:oe,value:ue(oe,{variableName:"checking_phase_placeholder_"+$t(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(J(y.type)&&y.type.return.isUnquote){let{returnValue:q,callerEnv:oe,pathCollection:re,deferredDropExpressions:ne}=Oi({functionValue:ia(y.value),functionType:y.type,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=Yt(oe),e.$={env:t,type:Jn(),value:q,originType:Jn(),pathCollection:re,deferredDropExpressions:ne},e}else throw d({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(J(y.type)){let q=y.type;{let{returnType:oe,returnValue:re,callerEnv:ne,pathCollection:me,specializedFunctionValue:$e,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft}=Oi({functionValue:ia(y.value),functionType:y.type,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Yt(ne),q.return.isUnquote)if(Kn(re)){let wt=U({expr:re.value,env:t,context:{...n}});return e.$={env:((A=wt.$)==null?void 0:A.env)||t,type:((S=wt.$)==null?void 0:S.type)||oe,value:(V=wt.$)==null?void 0:V.value,originType:((O=wt.$)==null?void 0:O.originType)||((x=wt.$)==null?void 0:x.type)||oe,pathCollection:((N=wt.$)==null?void 0:N.pathCollection)||[],macroExpansion:wt,variableName:(P=wt.$)==null?void 0:P.variableName},e}else throw d({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
10466
- ${lt(re)}`});let an=(R=e.$)==null?void 0:R.variableName,St=oe;if(z(oe))if(y.value&&Ce(y.value)){let wt=y.value.body;if((H=wt.$)!=null&&H.type){let Ln=wt.$.type;z(Ln)&&Ln.resolvedConcreteType&&(Ln=Ln.resolvedConcreteType),St={...oe,resolvedConcreteType:Ln}}}else J(y.type)&&((G=y.type.return)!=null&&G.type)&&!z(y.type.return.type)&&(St={...oe,resolvedConcreteType:y.type.return.type});if(e.$={env:t,type:St,value:re,originType:St,pathCollection:me,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft,variableName:an},q.ioBuiltin==="io_async"&&Re[0]){let wt=Re[0],Ln=(Q=wt.$)==null?void 0:Q.closureFunctionValue;if((j=(K=Ln==null?void 0:Ln.body)==null?void 0:K.$)!=null&&j.awaitAnalysis){e.$.awaitAnalysis=Ln.body.$.awaitAnalysis,e.$.captureType=(ie=wt.$)==null?void 0:ie.captureType,e.$.deferredDupExpressions=(ce=wt.$)==null?void 0:ce.deferredDupExpressions,(ee=wt.$)!=null&&ee.deferredDupExpressions&&(wt.$.deferredDupExpressions=void 0);let sn=(pe=wt.$)==null?void 0:pe.captureType;if(sn&&e.$.awaitAnalysis){let Jt=new Set(sn.fields.map(Gt=>Gt.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(Gt=>Jt.has(Gt.name)?{...Gt,kind:"outer"}:Gt)}}Ln.isIoAsyncStateMachineClosure=!0}else(Z=wt.$)!=null&&Z.deferredDupExpressions&&(wt.$.deferredDupExpressions=void 0);let mt=(Ee=wt.$)==null?void 0:Ee.variableName;if(mt&&e.$.env){let sn=_e(e.$.env,mt),Jt=sn[sn.length-1];Jt&&(e.$.env=vt(e.$.env,Jt,{...Jt,consumedAtToken:e.token}))}}Tt(e,!0),o.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]},s&&(s.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]})}return e}else if((z(y.type)||Ke(y.type))&&Gn(y.type)){let q=Gn(y.type),{returnType:oe,returnValue:re,callerEnv:ne,pathCollection:me,specializedFunctionValue:$e,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft}=Oi({functionValue:ia(y.value),functionType:q.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Yt(ne),q.isFn.callType.return.isUnquote)if(Kn(re)){let an=U({expr:re.value,env:t,context:{...n}});return e.$={env:((Fe=an.$)==null?void 0:Fe.env)||t,type:((be=an.$)==null?void 0:be.type)||oe,value:(Ue=an.$)==null?void 0:Ue.value,originType:((te=an.$)==null?void 0:te.originType)||((le=an.$)==null?void 0:le.type)||oe,pathCollection:((fe=an.$)==null?void 0:fe.pathCollection)||[],macroExpansion:an},e}else throw d({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
10467
- ${lt(re)}`});return e.$={env:t,type:oe,value:re,originType:oe,pathCollection:me,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft},Tt(e,!0),o.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]},s&&(s.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]}),e}else{let q=y.value;if(W(q)&&xe(q.value)){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{values:re,pathCollection:ne,callerEnv:me,runtimeArgExprsInOrder:$e}=Ga(y);if(t=me,!re)throw d({token:o.token,errorMessage:"Error evaluating struct call."});let Re=re.some(ft=>!ft)?void 0:Ir(oe,re);return e.$.value=Ht(oe)?void 0:Re,e.$.pathCollection=ne,e.$.env=t,e.$.runtimeArgExprsInOrder=$e,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&ze(q.value)){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let re=oe.variants.find(ft=>ft.name===oe.selectedVariantName);if(!re)throw d({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:ne,pathCollection:me,callerEnv:$e,runtimeArgExprsInOrder:Re}=Ga(y);if(t=$e,ne.every(ft=>!!ft)){let ft=Gi(oe,re.name,ne);e.$.value=ft}return e.$.pathCollection=me,e.$.env=t,e.$.runtimeArgExprsInOrder=Re,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&Pt(q.value)){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{pathCollection:re,callerEnv:ne,runtimeArgExprsInOrder:me}=Ga(y);return t=ne,e.$.value=void 0,e.$.pathCollection=re,e.$.env=t,e.$.runtimeArgExprsInOrder=me,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&We(q.value)){let{moduleValue:oe,callerEnv:re}=Jp(y);return t=re,e.$={env:t,type:oe.type,value:oe,originType:oe.type,pathCollection:[]},o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&st(q.value)){if(y.result.kind==="trait-specialization"){let ne=y.result.result;t=ne.callerEnv;let me=ye(ne.specializedTraitType);return e.$={env:t,type:me.type,value:me,pathCollection:[]},o.$={env:t,type:q.type,value:q,pathCollection:[]},e}let{traitValue:oe,callerEnv:re}=ed(y);return t=re,e.$={env:t,type:oe.type,value:oe,originType:oe.type,pathCollection:[]},o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else{if(W(q)&&J(q.value))return e;if(W(q)&&Xe(q.value))return e;if(W(q)&&En(q.value))return e;if(W(q)&&(z(q.value)||Ke(q.value))){if(y.result.kind==="type"&&z(q.value)&&q.value.recursiveTypeRef){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{pathCollection:re,callerEnv:ne,runtimeArgExprsInOrder:me}=Ga(y);return t=ne,e.$.value=void 0,e.$.pathCollection=re,e.$.env=t,e.$.runtimeArgExprsInOrder=me,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}return e}else{if(W(q)&&za(q.value))return e;if(W(q)&&tt(q.value))return e;if(W(q)&&fn(q.value))return e;if(W(q)&&un(q.value))return e;if(Xe(y.type)||Lt(y.type)){let{value:oe,index:re,type:ne,arrayElementRef:me,callerEnv:$e}=td(y),Re=((Se=o.$)==null?void 0:Se.pathCollection)??[];return a.length===1&&typeof re=="number"&&(Re.length>0?Re=Re.map(ft=>[...ft,re.toString()]):(it=o.$)!=null&&it.variableName&&(Re=[[o.$.variableName,re.toString()]])),e.$={env:$e,type:ne,value:oe,originType:((ct=o.$)==null?void 0:ct.originType)??y.type,pathCollection:Re,sourceVariable:(Ft=o.$)==null?void 0:Ft.sourceVariable,arrayElementRef:me,isAccessingProperty:!0},o.$={env:t,type:y.type,value:y.value,pathCollection:((Zt=o.$)==null?void 0:Zt.pathCollection)??[],isAccessingProperty:!0},Tt(e,!1),e}}}}throw d({token:e.token,errorMessage:`Function call is not implemented yet:
10468
- ${L(e)}`})}function Hh(e){var i;if(!((i=e.$)!=null&&i.type)||!Qe(e.$.type))throw d({token:e.token,errorMessage:`Expected tuple type for drop generation:
10484
+ ${lt(re)}`});let an=(R=e.$)==null?void 0:R.variableName,St=oe;if(z(oe))if(y.value&&Ce(y.value)){let wt=y.value.body;if((H=wt.$)!=null&&H.type){let An=wt.$.type;z(An)&&An.resolvedConcreteType&&(An=An.resolvedConcreteType),St={...oe,resolvedConcreteType:An}}}else J(y.type)&&((G=y.type.return)!=null&&G.type)&&!z(y.type.return.type)&&(St={...oe,resolvedConcreteType:y.type.return.type});if(e.$={env:t,type:St,value:re,originType:St,pathCollection:me,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft,variableName:an},q.ioBuiltin==="io_async"&&Re[0]){let wt=Re[0],An=(Q=wt.$)==null?void 0:Q.closureFunctionValue;if((j=(K=An==null?void 0:An.body)==null?void 0:K.$)!=null&&j.awaitAnalysis){e.$.awaitAnalysis=An.body.$.awaitAnalysis,e.$.captureType=(ie=wt.$)==null?void 0:ie.captureType,e.$.deferredDupExpressions=(ce=wt.$)==null?void 0:ce.deferredDupExpressions,(ee=wt.$)!=null&&ee.deferredDupExpressions&&(wt.$.deferredDupExpressions=void 0);let sn=(pe=wt.$)==null?void 0:pe.captureType;if(sn&&e.$.awaitAnalysis){let Jt=new Set(sn.fields.map(Gt=>Gt.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(Gt=>Jt.has(Gt.name)?{...Gt,kind:"outer"}:Gt)}}An.isIoAsyncStateMachineClosure=!0}else(Z=wt.$)!=null&&Z.deferredDupExpressions&&(wt.$.deferredDupExpressions=void 0);let mt=(Ee=wt.$)==null?void 0:Ee.variableName;if(mt&&e.$.env){let sn=_e(e.$.env,mt),Jt=sn[sn.length-1];Jt&&(e.$.env=vt(e.$.env,Jt,{...Jt,consumedAtToken:e.token}))}}Tt(e,!0),o.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]},s&&(s.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]})}return e}else if((z(y.type)||Ke(y.type))&&Gn(y.type)){let q=Gn(y.type),{returnType:oe,returnValue:re,callerEnv:ne,pathCollection:me,specializedFunctionValue:$e,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft}=Oi({functionValue:ia(y.value),functionType:q.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Yt(ne),q.isFn.callType.return.isUnquote)if(Kn(re)){let an=U({expr:re.value,env:t,context:{...n}});return e.$={env:((Fe=an.$)==null?void 0:Fe.env)||t,type:((be=an.$)==null?void 0:be.type)||oe,value:(Ue=an.$)==null?void 0:Ue.value,originType:((te=an.$)==null?void 0:te.originType)||((le=an.$)==null?void 0:le.type)||oe,pathCollection:((fe=an.$)==null?void 0:fe.pathCollection)||[],macroExpansion:an},e}else throw d({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
10485
+ ${lt(re)}`});return e.$={env:t,type:oe,value:re,originType:oe,pathCollection:me,runtimeArgExprsInOrder:Re,deferredDropExpressions:ft},Tt(e,!0),o.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]},s&&(s.$={env:t,type:y.type,value:$e||y.value,pathCollection:[]}),e}else{let q=y.value;if(W(q)&&xe(q.value)){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{values:re,pathCollection:ne,callerEnv:me,runtimeArgExprsInOrder:$e}=Ga(y);if(t=me,!re)throw d({token:o.token,errorMessage:"Error evaluating struct call."});let Re=re.some(ft=>!ft)?void 0:Ir(oe,re);return e.$.value=Ht(oe)?void 0:Re,e.$.pathCollection=ne,e.$.env=t,e.$.runtimeArgExprsInOrder=$e,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&ze(q.value)){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let re=oe.variants.find(ft=>ft.name===oe.selectedVariantName);if(!re)throw d({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:ne,pathCollection:me,callerEnv:$e,runtimeArgExprsInOrder:Re}=Ga(y);if(t=$e,ne.every(ft=>!!ft)){let ft=Gi(oe,re.name,ne);e.$.value=ft}return e.$.pathCollection=me,e.$.env=t,e.$.runtimeArgExprsInOrder=Re,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&Pt(q.value)){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{pathCollection:re,callerEnv:ne,runtimeArgExprsInOrder:me}=Ga(y);return t=ne,e.$.value=void 0,e.$.pathCollection=re,e.$.env=t,e.$.runtimeArgExprsInOrder=me,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&We(q.value)){let{moduleValue:oe,callerEnv:re}=ed(y);return t=re,e.$={env:t,type:oe.type,value:oe,originType:oe.type,pathCollection:[]},o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else if(W(q)&&st(q.value)){if(y.result.kind==="trait-specialization"){let ne=y.result.result;t=ne.callerEnv;let me=ye(ne.specializedTraitType);return e.$={env:t,type:me.type,value:me,pathCollection:[]},o.$={env:t,type:q.type,value:q,pathCollection:[]},e}let{traitValue:oe,callerEnv:re}=td(y);return t=re,e.$={env:t,type:oe.type,value:oe,originType:oe.type,pathCollection:[]},o.$={env:t,type:q.type,value:q,pathCollection:[]},e}else{if(W(q)&&J(q.value))return e;if(W(q)&&Xe(q.value))return e;if(W(q)&&En(q.value))return e;if(W(q)&&(z(q.value)||Ke(q.value))){if(y.result.kind==="type"&&z(q.value)&&q.value.recursiveTypeRef){let oe=q.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{pathCollection:re,callerEnv:ne,runtimeArgExprsInOrder:me}=Ga(y);return t=ne,e.$.value=void 0,e.$.pathCollection=re,e.$.env=t,e.$.runtimeArgExprsInOrder=me,Tt(e,!0),o.$={env:t,type:q.type,value:q,pathCollection:[]},e}return e}else{if(W(q)&&za(q.value))return e;if(W(q)&&tt(q.value))return e;if(W(q)&&pn(q.value))return e;if(W(q)&&cn(q.value))return e;if(Xe(y.type)||Lt(y.type)){let{value:oe,index:re,type:ne,arrayElementRef:me,callerEnv:$e}=nd(y),Re=((Se=o.$)==null?void 0:Se.pathCollection)??[];return a.length===1&&typeof re=="number"&&(Re.length>0?Re=Re.map(ft=>[...ft,re.toString()]):(it=o.$)!=null&&it.variableName&&(Re=[[o.$.variableName,re.toString()]])),e.$={env:$e,type:ne,value:oe,originType:((ct=o.$)==null?void 0:ct.originType)??y.type,pathCollection:Re,sourceVariable:(Ft=o.$)==null?void 0:Ft.sourceVariable,arrayElementRef:me,isAccessingProperty:!0},o.$={env:t,type:y.type,value:y.value,pathCollection:((Zt=o.$)==null?void 0:Zt.pathCollection)??[],isAccessingProperty:!0},Tt(e,!1),e}}}}throw d({token:e.token,errorMessage:`Function call is not implemented yet:
10486
+ ${L(e)}`})}function jh(e){var i;if(!((i=e.$)!=null&&i.type)||!Qe(e.$.type))throw d({token:e.token,errorMessage:`Expected tuple type for drop generation:
10469
10487
  ${L(e)}`});if(!e.$.variableName)throw d({token:e.token,errorMessage:`Expected variable name for drop generation:
10470
10488
  ${L(e)}`});let n=e.$.type.fields.map((o,a)=>({index:a,element:o,needsDrop:Je(z(o.type)&&o.type.resolvedConcreteType?o.type.resolvedConcreteType:o.type)})).filter(({needsDrop:o})=>o);return n.length===0?"":`begin(
10471
10489
  ${n.map(({index:o})=>`${F.__yo_drop_tuple_element[0]}(${e.$.variableName}, ${o})`).join(`,
10472
10490
  `)}
10473
- )`}function jh(e){var s;if(!((s=e.$)!=null&&s.type)||!Xe(e.$.type))throw d({token:e.token,errorMessage:`Expected array type for drop generation:
10491
+ )`}function Kh(e){var s;if(!((s=e.$)!=null&&s.type)||!Xe(e.$.type))throw d({token:e.token,errorMessage:`Expected array type for drop generation:
10474
10492
  ${L(e)}`});if(!e.$.variableName)throw d({token:e.token,errorMessage:`Expected variable name for drop generation:
10475
10493
  ${L(e)}`});let t=e.$.type,n=t.childType,r=z(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!Je(r))return"";let i=t.length;if(!ht(i))return"";let o=i.value,a=[];for(let l=0;l<o;l++)a.push(`${F.__yo_drop_array_element[0]}(${e.$.variableName}, ${l})`);return`begin(
10476
10494
  ${a.join(`,
10477
10495
  `)}
10478
- )`}function kd({expr:e,env:t,context:n}){var u,c,_;Ge(e,F.___drop,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.___drop[0]}":
10496
+ )`}function wd({expr:e,env:t,context:n}){var u,c,_;Ge(e,F.___drop,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.___drop[0]}":
10479
10497
  ${L(r)}`});t=i.$.env;let o=(u=i.$)==null?void 0:u.variableName;if(!o)throw d({token:r.token,errorMessage:`Expected variable name as argument to "${F.___drop[0]}":
10480
10498
  ${L(i)}
10481
10499
 
10482
10500
  Original expression:
10483
- ${L(r)}`});let a=i.$.type,l=z(a)&&a.resolvedConcreteType&&!je(a)?a.resolvedConcreteType:a;if(Je(l))if(Qe(l)){let f=Hh(i);if(f){let p=On(f);t=sr(i,t,!0);let m=U({expr:p,env:t,context:{...n}});return I(m)?(ti(e,m),e):m}else return t=sr(i,t,!0),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}else if(Xe(l)){let f=jh(i);if(f){let p=On(f);t=sr(i,t,!0);let m=U({expr:p,env:t,context:{...n}});return I(m)?(ti(e,m),e):m}else return t=sr(i,t,!0),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}else{if(z(l)&&!je(l))return t=sr(i,t,!0),e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e;{let f=(c=i.$)==null?void 0:c.variableName;if(f){let v=_e(t,f),$=v.length?v[v.length-1]:void 0;if($&&!$.isOwningTheRcValue)return t=sr(i,t,!0),e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e}let p=On(`(${L(i)}).___drop()`),m=wr({env:t,context:{...n},expr:p});if(!((_=m.$)!=null&&_.env))throw d({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${F.___drop[0]}" method call:
10501
+ ${L(r)}`});let a=i.$.type,l=z(a)&&a.resolvedConcreteType&&!je(a)?a.resolvedConcreteType:a;if(Je(l))if(Qe(l)){let f=jh(i);if(f){let p=On(f);t=sr(i,t,!0);let m=U({expr:p,env:t,context:{...n}});return I(m)?(ti(e,m),e):m}else return t=sr(i,t,!0),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}else if(Xe(l)){let f=Kh(i);if(f){let p=On(f);t=sr(i,t,!0);let m=U({expr:p,env:t,context:{...n}});return I(m)?(ti(e,m),e):m}else return t=sr(i,t,!0),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}else{if(z(l)&&!je(l))return t=sr(i,t,!0),e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e;{let f=(c=i.$)==null?void 0:c.variableName;if(f){let v=_e(t,f),$=v.length?v[v.length-1]:void 0;if($&&!$.isOwningTheRcValue)return t=sr(i,t,!0),e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e}let p=On(`(${L(i)}).___drop()`),m=wr({env:t,context:{...n},expr:p});if(!((_=m.$)!=null&&_.env))throw d({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${F.___drop[0]}" method call:
10484
10502
  ${L(p)}`});let g=_e(m.$.env,o).at(-1);if(!g)throw d({token:e.token,errorMessage:`Variable "${o}" not found in environment after evaluating "${F.___drop[0]}" method call:
10485
- ${L(p)}`});let h=vt(m.$.env,g,{...g,consumedAtToken:e.token});return m.$.env=h,m}}else return t=sr(i,t,!0),e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e}function Kh(e){var i;if(!((i=e.$)!=null&&i.type)||!Qe(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw d({token:e.token,errorMessage:`Expected variable name for drop generation:
10503
+ ${L(p)}`});let h=vt(m.$.env,g,{...g,consumedAtToken:e.token});return m.$.env=h,m}}else return t=sr(i,t,!0),e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e}function Xh(e){var i;if(!((i=e.$)!=null&&i.type)||!Qe(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw d({token:e.token,errorMessage:`Expected variable name for drop generation:
10486
10504
  ${L(e)}`});let n=e.$.type.fields.map((o,a)=>({index:a,element:o,needsDup:Je(o.type)}));return n.every(({needsDup:o})=>!o)?"":`begin(
10487
10505
  ${n.map(({index:o,needsDup:a})=>{var s;return a?`${F.__yo_dup_tuple_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${o})`:""}).filter(o=>o.length>0).join(`,
10488
10506
  `)}
10489
- )`}function Xh(e){var r;if(!((r=e.$)!=null&&r.type)||!Xe(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw d({token:e.token,errorMessage:`Expected variable name for dup generation:
10507
+ )`}function Qh(e){var r;if(!((r=e.$)!=null&&r.type)||!Xe(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw d({token:e.token,errorMessage:`Expected variable name for dup generation:
10490
10508
  ${L(e)}`});let t=e.$.type,n=t.childType;if(!Je(n))return"";if(ht(t.length)){let i=t.length.value;return`begin(
10491
10509
  ${Array.from({length:Number(i)},(o,a)=>{var s;return`${F.__yo_dup_array_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${a})`}).join(", ")}
10492
- )`}else return""}function wd({expr:e,env:t,context:n}){var s;Ge(e,F.___dup,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.___dup[0]}":
10493
- ${L(r)}`});t=i.$.env;let o=i.$.type,a=z(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Je(a))if(Qe(a)){let l=Kh(i);if(l){let u=On(l),c=U({expr:u,env:t,context:{...n}});return I(c)?(ti(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(Xe(a)){let l=Xh(i);if(l){let u=On(l),c=U({expr:u,env:t,context:{...n}});return I(c)?(ti(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(z(a)&&!je(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let l=On(`(${L(i)}).___dup()`),u=wr({env:t,context:{...n},expr:l}),c=(s=u.$)==null?void 0:s.variableName;if(!c||!u.$)throw d({token:e.token,errorMessage:`Failed to evaluate the "${F.___dup[0]}" method call:
10494
- ${L(l)}`});let _=_e(u.$.env,c);if(_.length){let f=_[_.length-1];if(f.isOwningTheRcValue){let p=vt(u.$.env,f,{...f,isOwningTheRcValue:!1});u.$.env=p}}return u}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Fd({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_is_atom,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10510
+ )`}else return""}function Fd({expr:e,env:t,context:n}){var s;Ge(e,F.___dup,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.___dup[0]}":
10511
+ ${L(r)}`});t=i.$.env;let o=i.$.type,a=z(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(Je(a))if(Qe(a)){let l=Xh(i);if(l){let u=On(l),c=U({expr:u,env:t,context:{...n}});return I(c)?(ti(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(Xe(a)){let l=Qh(i);if(l){let u=On(l),c=U({expr:u,env:t,context:{...n}});return I(c)?(ti(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(z(a)&&!je(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let l=On(`(${L(i)}).___dup()`),u=wr({env:t,context:{...n},expr:l}),c=(s=u.$)==null?void 0:s.variableName;if(!c||!u.$)throw d({token:e.token,errorMessage:`Failed to evaluate the "${F.___dup[0]}" method call:
10512
+ ${L(l)}`});let _=_e(u.$.env,c);if(_.length){let f=_[_.length-1];if(f.isOwningTheRcValue){let p=vt(u.$.env,f,{...f,isOwningTheRcValue:!1});u.$.env=p}}return u}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Ld({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_is_atom,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10495
10513
  ${L(r)}`});if(!yn(i.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10496
10514
  ${L(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10497
- ${L(r)}`});let a=Kn(o)?jt(X(o.value)):ue(Nt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Ld({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_is_fn_call,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10515
+ ${L(r)}`});let a=Kn(o)?jt(X(o.value)):ue(Nt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Ad({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_is_fn_call,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10498
10516
  ${L(r)}`});if(!yn(i.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10499
10517
  ${L(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10500
- ${L(r)}`});let a=Kn(o)?jt(I(o.value)):ue(Nt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Ad({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_get_callee,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10518
+ ${L(r)}`});let a=Kn(o)?jt(I(o.value)):ue(Nt(),{env:i.$.env,context:n});return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Id({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_get_callee,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10501
10519
  ${L(r)}`});if(!yn(i.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10502
10520
  ${L(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10503
10521
  ${L(r)}`});if(e.$={env:i.$.env,type:Jn(),value:ue(Jn(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kn(o))if(I(o.value)){let a=o.value.func,s=Sr(a);e.$.value=s}else throw d({token:r.token,errorMessage:`Expected function call expression for argument, got:
10504
- ${L(e)}`});return e}function Id({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_get_args,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10522
+ ${L(e)}`});return e}function Sd({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_get_args,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10505
10523
  ${L(r)}`});if(!yn(i.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10506
10524
  ${L(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10507
10525
  ${L(r)}`});if(e.$={env:i.$.env,type:wa(),value:ue(wa(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kn(o))if(I(o.value)){let a=o.value.args,s=Ar(Jn(),a.map(l=>Sr(l)));e.$.value=s}else throw d({token:r.token,errorMessage:`Expected function call expression for argument, got:
10508
- ${L(e)}`});return e}function Sd({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_to_string,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10526
+ ${L(e)}`});return e}function Nd({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_to_string,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10509
10527
  ${L(r)}`});if(!yn(i.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
10510
10528
  ${L(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
10511
- ${L(r)}`});return e.$={env:i.$.env,type:$n(),value:ue($n(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kn(o)&&(e.$.value=qn(L(o.value))),e}function Nd({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_eq,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10529
+ ${L(r)}`});return e.$={env:i.$.env,type:$n(),value:ue($n(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Kn(o)&&(e.$.value=qn(L(o.value))),e}function Vd({expr:e,env:t,context:n}){Ge(e,F.__yo_expr_eq,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
10512
10530
  ${L(r)}`});if(!yn(o.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
10513
10531
  ${L(r)}`});let a=o.$.value;if(!a)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" first argument, got:
10514
10532
  ${L(r)}`});t=o.$.env;let s=U({expr:i,env:t,context:{...n}});if(!s.$)throw d({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
10515
10533
  ${L(i)}`});if(!yn(s.$.type))throw d({token:i.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
10516
10534
  ${L(i)}`});let l=s.$.value;if(!l)throw d({token:i.token,errorMessage:`Expected expression value for "${e.func.token.value}" second argument, got:
10517
- ${L(i)}`});t=s.$.env;let u;return Kn(a)&&Kn(l)?u=jt(gn({value:a,env:t},{value:l,env:t})):u=ue(Nt(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function Vd({expr:e,env:t}){return Ge(e,F.__yo_gc_collect,0),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function xd({expr:e,env:t,context:n}){let r=e.args[0],i="";if(r){if(e.args.length>1)throw d({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=U({expr:r,env:t,context:{...n}});if(!l.$)throw d({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
10535
+ ${L(i)}`});t=s.$.env;let u;return Kn(a)&&Kn(l)?u=jt(gn({value:a,env:t},{value:l,env:t})):u=ue(Nt(),{env:t,context:n}),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function xd({expr:e,env:t}){return Ge(e,F.__yo_gc_collect,0),e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function Dd({expr:e,env:t,context:n}){let r=e.args[0],i="";if(r){if(e.args.length>1)throw d({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=U({expr:r,env:t,context:{...n}});if(!l.$)throw d({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
10518
10536
  ${L(r)}`});if(!rt(l.$.value))throw d({token:r.token,errorMessage:`Expected comptime_string for prefix argument, got:
10519
- ${L(r)}`});i=l.$.value.value}let o=i+$t(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=Sr(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function Dd({expr:e,env:t,context:n}){if(!T(e,M.Impl))throw d({token:e.token,errorMessage:`Expected "Impl", got:
10537
+ ${L(r)}`});i=l.$.value.value}let o=i+$t(t.modulePath),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:o}},s=Sr(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function Md({expr:e,env:t,context:n}){if(!T(e,M.Impl))throw d({token:e.token,errorMessage:`Expected "Impl", got:
10520
10538
  ${L(e)}`});if(e.args.length===0)throw d({token:e.token,errorMessage:"Impl requires at least one trait argument."});let r=[],i=[],o;for(let l of e.args){let u=I(l)&&T(l,"!")&&l.args.length===1,c=u?l.args[0]:l,_=U({expr:c,env:t,context:{...n}});if(!_.$)throw d({token:c.token,errorMessage:"Failed to evaluate Impl argument."});if(t=_.$.env,!_.$.value||!W(_.$.value)||!st(_.$.value.value))throw d({token:c.token,errorMessage:`Impl argument must be a trait type, got: ${L(c)}`});let f=_.$.value.value;if(Za(f)){if(o!==void 0)throw d({token:c.token,errorMessage:"Impl can only have one Concrete(T) specifier"});o=f.isConcrete.concreteType;continue}u?i.push(f):r.push(f)}let a=fr(Mt(),"Impl",{requiredTraits:r,negativeTraits:i,env:t,context:n});o!==void 0&&(a.resolvedConcreteType=o);let s=ye(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function qa({expr:e,env:t,context:n}){if(X(e))return e;{let r=e.func,i=e.args;if(X(r)&&Kt(r,M.unquote)&&i.length===1){let o=i[0],a=U({expr:o,env:t,context:{...n}});if(!a.$||!yn(a.$.type)||!a.$.value)throw d({token:o.token,errorMessage:`Expected expression type for "unquote" argument, got:
10521
10539
  ${L(o)}`});let s=a.$.value;if(Oe(s))return e;if(Kn(s))return s.value;throw d({token:o.token,errorMessage:`Expected expression value for "unquote" argument, got:
10522
10540
  ${lt(s)}`})}else{let o=qa({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<i.length;l++){let u=i[l];if(I(u)&&T(u,M.unquote_splicing)){let c;if(u.args.length!==1)throw d({token:u.token,errorMessage:`Expected exactly one argument for "unquote_splicing", got ${u.args.length}`});let _=u.args[0],f=U({expr:_,env:t,context:{...n}});if(!f.$||!Bi(f.$.type)||!f.$.value)throw d({token:_.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
10523
- ${L(_)}`});let p=f.$.value;ju(p)&&p.elements.every(m=>Kn(m))&&(c=p.elements.map(m=>m.value)),c?c.forEach(m=>{a.push(m)}):a.push(u)}else a.push(qa({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function Md({expr:e,env:t,context:n}){Ge(e,M.quote,1);let r=qa({expr:e.args[0],env:t,context:{...n}}),i=Sr(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function Od({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw d({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
10541
+ ${L(_)}`});let p=f.$.value;ju(p)&&p.elements.every(m=>Kn(m))&&(c=p.elements.map(m=>m.value)),c?c.forEach(m=>{a.push(m)}):a.push(u)}else a.push(qa({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function Od({expr:e,env:t,context:n}){Ge(e,M.quote,1);let r=qa({expr:e.args[0],env:t,context:{...n}}),i=Sr(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function Rd({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw d({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
10524
10542
  ${r.toString()}`});if(t=i.$.env,!yn(i.$.type))throw d({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${D(i.$.type)}`});let o=null;if(e.args.length===2){let s=e.args[1],l=U({expr:s,env:t,context:{...n}});if(!l.$)throw d({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
10525
- ${s.toString()}`});if(!rn(l.$.type))throw d({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${D(l.$.type)}`});if(!gr(l.$.value))throw d({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 d({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${o}`})}let a=i.$.value;if(Kn(a)){let s=a.value,l=t,u=0;for(;I(s)&&(o===null||u<o);)try{let c=wr({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Kn(c.$.value)){let _=c.$.value.value;if(L(_)===L(s))break;s=_,u++}else break}catch(c){if(c instanceof rr&&c.isAssertionError)throw c;break}s=qa({expr:s,env:l,context:{...n}}),e.$={env:l,type:Jn(),value:Sr(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Rd({expr:e,env:t,context:n}){var i,o;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body"&&((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="test-block")throw d({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw d({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:se.type;if(e.args.length>0){let a=e.args[0],s=U({expr:a,env:t,context:{...n}});if(!s.$)throw d({token:a.token,errorMessage:"Failed to evaluate panic message"});if(!s.$.value||!rt(s.$.value)&&!(Oe(s.$.value)&&ln(s.$.value.type)))throw d({token:a.token,errorMessage:"panic message must be a comptime_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}var zd=new Set(["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"]),Au=new Set(["in"]),Iu=new Set(["out","lateout"]),Bd=new Set(["inout","inlateout"]),Gd=new Set(["const_val","sym"]),Qh=new Set([...Au,...Iu,...Bd,...Gd,"clobber","clobber_abi","asm_options"]),Pd=new Set(["pure","nomem","readonly","nostack","preserves_flags","att_syntax","intel_syntax","volatile","noreturn"]);function Lu(e){return Yr(e)||Hr(e)||tt(e)||Zn(e)}function Zh(e){return e.tag==="Atom"&&zd.has(e.token.value)}function Jh(e){return!I(e)||e.func.tag!=="Atom"?!1:Qh.has(e.func.token.value)}function Ud(e){return e.tag==="Atom"&&e.token.value==="_"}function ev(e,t,n){var i,o;if(e.tag==="Atom"&&zd.has(e.token.value))return e.token.value;let r=U({expr:e,env:t,context:{...n}});if((i=r.$)!=null&&i.value&&rt(r.$.value))return r.$.value.value;if(T(e,"raw",1)){let s=e.args[0],l=U({expr:s,env:t,context:{...n}});if((o=l.$)!=null&&o.value&&rt(l.$.value))return`raw:${l.$.value.value}`}throw d({token:e.token,errorMessage:'Invalid asm constraint. Expected a register class (reg, imm, mem, ...), an explicit register name string, or raw("constraint").'})}function tv(e,t,n,r){var y,g;let i=e.args;if(r==="const_val"||r==="sym")return nv(e,t,n,r);if(i.length<1||i.length>3)throw d({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(Zh(h))a=0;else if(Ud(h))a=0;else{let v=U({expr:h,env:t,context:{...n}});(y=v.$)!=null&&y.value&&rt(v.$.value)?(o=v.$.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 d({token:e.token,errorMessage:`asm ${r}() is missing its value/type argument.`});let _=Au.has(r);if(Iu.has(r)){if(Ud(c))return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:void 0,targetVarName:void 0,discarded:!0};if(c.tag==="Atom"){let v=c.token.value,$=_e(t,v);if($.length>0){let E=$[$.length-1];if(!(E.value&&W(E.value[0]))){let C=E.type;if(!Lu(C))throw d({token:c.token,errorMessage:`asm ${r}() target variable '${v}' has type that is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});let w;return E.initializedAtToken?w=U({expr:c,env:t,context:{...n}}):(w=c,w.$={env:t,type:C,value:void 0,pathCollection:[]}),{kind:r,name:o,constraint:l,valueExpr:w,outputType:C,targetVarName:v,discarded:!1}}}}let h=U({expr:c,env:t,context:{...n}});if((g=h.$)!=null&&g.value&&W(h.$.value)){let v=h.$.value.value;if(!Lu(v))throw d({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:v,targetVarName:void 0,discarded:!1}}throw d({token:c.token,errorMessage:`asm ${r}() last argument must be a type, variable, or _ (discard).`})}let p=U({expr:c,env:t,context:{...n}});if(!p.$)throw d({token:c.token,errorMessage:`Failed to evaluate asm ${r}() value expression.`});let m=p.$.type;if(!Lu(m))throw d({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:p,outputType:void 0,targetVarName:void 0,discarded:!1}:{kind:r,name:o,constraint:l,valueExpr:p,outputType:m,targetVarName:void 0,discarded:!1}}function nv(e,t,n,r){var u;let i=e.args;if(i.length<1||i.length>2)throw d({token:e.token,errorMessage:`asm ${r}() expects 1 or 2 arguments, got ${i.length}.`});let o,a=0;if(i.length===2){let c=U({expr:i[0],env:t,context:{...n}});(u=c.$)!=null&&u.value&&rt(c.$.value)&&(o=c.$.value.value,a=1)}let s=i[a],l=U({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 rv(e,t,n){let r={noreturn:!1};for(let i of e.args)if(i.tag==="Atom"){let o=i.token.value;if(!Pd.has(o))throw d({token:i.token,errorMessage:`Unknown asm_options flag: '${o}'. Valid flags: ${[...Pd].join(", ")}.`});o==="noreturn"&&(r.noreturn=!0)}else throw d({token:e.token,errorMessage:"asm_options() arguments must be flag identifiers (e.g., pure, nomem, noreturn)."});return r}function Wd({expr:e,env:t,context:n}){var m,y,g,h,v,$;if(((m=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:m.kind)!=="function-body"&&((y=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:y.kind)!=="test-block")throw d({token:e.token,errorMessage:"asm() can only be called inside a function body or test block."});if(n.isAnalyzingCtfeCapability)throw d({token:e.token,errorMessage:'Cannot use "asm" during compile-time function evaluation analysis.'});if(e.args.length===0)throw d({token:e.token,errorMessage:"asm() requires at least one argument (the assembly template string)."});let r=[],i=0;for(;i<e.args.length;){let E=e.args[i];if(Jh(E))break;let C=U({expr:E,env:t,context:{...n}});if((g=C.$)!=null&&g.value&&rt(C.$.value))r.push(C.$.value.value),i++;else if((h=C.$)!=null&&h.value&&Oe(C.$.value)&&ln(C.$.value.type))r.push(""),i++;else break}if(r.length===0)throw d({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 E=e.args[i];if(!I(E))throw d({token:E.token,errorMessage:"asm() arguments after the template must be operand or option calls (in, out, inout, clobber, asm_options, etc.)."});let C=E.func.tag==="Atom"?E.func.token.value:void 0;if(!C)throw d({token:E.token,errorMessage:"asm() operand must be a named call like in(...), out(...), etc."});if(Au.has(C)||Iu.has(C)||Bd.has(C)||Gd.has(C))o.push(tv(E,t,n,C));else if(C==="clobber"||C==="clobber_abi")for(let w of E.args){if(w.tag==="Atom"&&(w.token.value==="memory"||w.token.value==="cc"))continue;let b=U({expr:w,env:t,context:{...n}});if((!((v=b.$)!=null&&v.value)||!rt(b.$.value))&&!(w.tag==="Atom"&&w.token.value==="memory")&&!(w.tag==="Atom"&&w.token.value==="cc"))throw d({token:w.token,errorMessage:`${C}() arguments must be compile-time strings (e.g., "memory", "cc", "rax").`})}else if(C==="asm_options")a=rv(E,t,n);else throw d({token:E.token,errorMessage:`Unknown asm() operand or option: '${C}'. Expected: in, out, inout, lateout, inlateout, const_val, sym, clobber, clobber_abi, asm_options.`});i++}let s=t;for(let E of o){if(E.targetVarName===void 0||E.kind!=="out"&&E.kind!=="lateout")continue;let C=_e(s,E.targetVarName);if(C.length>0){let w=C[C.length-1];w.initializedAtToken||(s=vt(s,w,{...w,initializedAtToken:e.token}))}}t=s;let l=[];for(let E of o)E.discarded||E.targetVarName===void 0&&(E.kind==="const_val"||E.kind==="sym"||E.kind!=="in"&&E.outputType&&l.push(E.outputType));let u;if(a.noreturn)u=(($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:se.type;else if(l.length===0)u=se.type;else if(l.length===1)u=l[0];else{let E=l.map((C,w)=>({label:w.toString(),type:C,exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}}));u=Ro(E)}let c=r.join(`
10526
- `),_=/\{([^}:]+)(?::[^}]*)?\}/g,f,p=new Set;for(let E=0;E<o.length;E++)if(o[E].name){if(p.has(o[E].name))throw d({token:e.token,errorMessage:`Duplicate asm operand name: '${o[E].name}'.`});p.add(o[E].name)}for(;(f=_.exec(c))!==null;){let E=f[1];if(E==="{"||E==="}")continue;let C=parseInt(E,10);if(isNaN(C)){if(!p.has(E))throw d({token:e.token,errorMessage:`asm template references undefined operand '{${E}}'.`})}else if(C<0||C>=o.length)throw d({token:e.token,errorMessage:`asm template references positional operand {${C}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function qd({expr:e,env:t,context:n}){var o;if(e.args.length===0)throw d({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!((o=i.$)!=null&&o.value)||!rt(i.$.value)&&!(Oe(i.$.value)&&ln(i.$.value.type)))throw d({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e}function Yd({expr:e,env:t}){if(T(e,F.__yo_process_platform)){if(e.args.length!==0)throw d({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=xa(),r=n.os,i=qn(r);return e.$={env:t,type:$n(),value:i,pathCollection:[]},e}if(T(e,F.__yo_process_arch)){if(e.args.length!==0)throw d({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=xa(),r=n.arch,i=qn(r);return e.$={env:t,type:$n(),value:i,pathCollection:[]},e}throw d({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var Nu=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.artifacts.push({kind:"executable",...t})}registerStaticLibrary(t){this.artifacts.push({kind:"static_library",...t})}registerSharedLibrary(t){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)}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=[]}},Su,iv,ov=new Map;function Hd(){return iv}function jd(e){return ov.get(e)}function Vu(){return Su||(Su=new Nu),Su}function gt(e,t,n){if(!rt(e))throw d({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function lr(e,t){return e.$={env:t,type:$r(),value:se,pathCollection:[]},e}function oa(e,t,n){return e.$={env:t,type:$n(),value:qn(n),pathCollection:[]},e}function av(e){var t;for(let n of e.args){if(n===void 0)continue;let r=(t=n.$)==null?void 0:t.value;if(r===void 0||Oe(r))return!0}return!1}function Kd({expr:e,env:t}){var r,i,o,a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt,q,oe;if(av(e)){if(T(e,F.__yo_build_target_host)){let re=Ni();return oa(e,t,re.triple)}return T(e,F.__yo_build_option)?oa(e,t,""):lr(e,t)}let n=Vu();if(T(e,F.__yo_build_executable)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((r=e.args[0].$)==null?void 0:r.value,"name",e.token),ne=gt((i=e.args[1].$)==null?void 0:i.value,"root",e.token),me=e.args.length>2?gt((o=e.args[2].$)==null?void 0:o.value,"target",e.token):Ni().triple,$e=e.args.length>3?gt((a=e.args[3].$)==null?void 0:a.value,"optimize",e.token):"debug",Re=e.args.length>4?gt((s=e.args[4].$)==null?void 0:s.value,"allocator",e.token):"mimalloc",ft=e.args.length>5?gt((l=e.args[5].$)==null?void 0:l.value,"sanitize",e.token):"none";return n.registerExecutable({name:re,root:ne,target:me,optimize:$e,allocator:Re,sanitize:ft,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),lr(e,t)}if(T(e,F.__yo_build_static_library)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((u=e.args[0].$)==null?void 0:u.value,"name",e.token),ne=gt((c=e.args[1].$)==null?void 0:c.value,"root",e.token),me=e.args.length>2?gt((_=e.args[2].$)==null?void 0:_.value,"target",e.token):Ni().triple,$e=e.args.length>3?gt((f=e.args[3].$)==null?void 0:f.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:re,root:ne,target:me,optimize:$e,allocator:"mimalloc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),lr(e,t)}if(T(e,F.__yo_build_shared_library)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((p=e.args[0].$)==null?void 0:p.value,"name",e.token),ne=gt((m=e.args[1].$)==null?void 0:m.value,"root",e.token),me=e.args.length>2?gt((y=e.args[2].$)==null?void 0:y.value,"target",e.token):Ni().triple,$e=e.args.length>3?gt((g=e.args[3].$)==null?void 0:g.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:re,root:ne,target:me,optimize:$e,allocator:"mimalloc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),lr(e,t)}if(T(e,F.__yo_build_link)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let re=gt((h=e.args[0].$)==null?void 0:h.value,"artifact_name",e.token),ne=gt((v=e.args[1].$)==null?void 0:v.value,"library_name",e.token);if(n.findSystemLibrary(ne)){let me=n.findArtifact(re);me&&(me.linkedSystemLibraries.includes(ne)||me.linkedSystemLibraries.push(ne))}else n.registerLink(re,ne);return lr(e,t)}if(T(e,F.__yo_build_link_system_library)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let re=gt(($=e.args[0].$)==null?void 0:$.value,"artifact_name",e.token),ne=gt((E=e.args[1].$)==null?void 0:E.value,"system_lib_name",e.token),me=n.findArtifact(re);return me&&(me.linkedSystemLibraries.includes(ne)||me.linkedSystemLibraries.push(ne)),lr(e,t)}if(T(e,F.__yo_build_test)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((C=e.args[0].$)==null?void 0:C.value,"name",e.token),ne=gt((w=e.args[1].$)==null?void 0:w.value,"root",e.token),me=e.args.length>2?gt((b=e.args[2].$)==null?void 0:b.value,"target",e.token):Ni().triple;return n.registerTest({name:re,root:ne,target:me,verbose:!1,bail:!1,parallel:1}),lr(e,t)}if(T(e,F.__yo_build_run)){if(e.args.length<1)throw d({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let re=gt((k=e.args[0].$)==null?void 0:k.value,"artifact_name",e.token);return n.registerRun(re,[]),lr(e,t)}if(T(e,F.__yo_build_step)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let re=gt((A=e.args[0].$)==null?void 0:A.value,"name",e.token),ne=gt((S=e.args[1].$)==null?void 0:S.value,"description",e.token);return n.registerStep(re,ne),lr(e,t)}if(T(e,F.__yo_build_step_depend_on)){if(e.args.length<3)throw d({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let re=gt((V=e.args[0].$)==null?void 0:V.value,"step_name",e.token),ne=gt((O=e.args[1].$)==null?void 0:O.value,"dep_name",e.token),me=(x=e.args[2].$)==null?void 0:x.value,$e=ne;return me&&hn(me)&&me.variantName==="Run"&&($e=`run:${ne}`),n.addStepDependency(re,$e),lr(e,t)}if(T(e,F.__yo_build_target_host)){let re=Ni();return oa(e,t,re.triple)}if(T(e,F.__yo_build_target_parse)){if(e.args.length!==1)throw d({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let re=gt((N=e.args[0].$)==null?void 0:N.value,"triple",e.token),ne=c_(re);return oa(e,t,ne.triple)}if(T(e,F.__yo_build_dependency)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let re=gt((P=e.args[0].$)==null?void 0:P.value,"name",e.token),ne=gt((R=e.args[1].$)==null?void 0:R.value,"url",e.token),me=e.args.length>2?gt((H=e.args[2].$)==null?void 0:H.value,"ref",e.token):"HEAD",$e=e.args.length>3?gt((G=e.args[3].$)==null?void 0:G.value,"path",e.token):"";return n.registerDependency({name:re,url:ne,ref:me,path:$e}),lr(e,t)}if(T(e,F.__yo_build_path_dependency)){if(e.args.length!==2)throw d({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let re=gt((Q=e.args[0].$)==null?void 0:Q.value,"name",e.token),ne=gt((K=e.args[1].$)==null?void 0:K.value,"path",e.token);return n.registerPathDependency({name:re,path:ne}),lr(e,t)}if(T(e,F.__yo_build_system_library)){if(e.args.length<1)throw d({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let re=gt((j=e.args[0].$)==null?void 0:j.value,"name",e.token),ne=e.args.length>1?gt((ie=e.args[1].$)==null?void 0:ie.value,"fallback_include",e.token):"",me=e.args.length>2?gt((ce=e.args[2].$)==null?void 0:ce.value,"fallback_lib",e.token):"",$e=e.args.length>3?gt((ee=e.args[3].$)==null?void 0:ee.value,"fallback_link",e.token):"",Re=e.args.length>4?gt((pe=e.args[4].$)==null?void 0:pe.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:re,fallbackInclude:ne,fallbackLib:me,fallbackLink:$e,defines:Re}),lr(e,t)}if(T(e,F.__yo_build_option)){if(e.args.length<3)throw d({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let re=gt((Z=e.args[0].$)==null?void 0:Z.value,"name",e.token),ne=gt((Ee=e.args[1].$)==null?void 0:Ee.value,"description",e.token),me=gt((Fe=e.args[2].$)==null?void 0:Fe.value,"default",e.token);n.declaredOptions.set(re,{description:ne,defaultValue:me});let $e=n.cliOptions.get(re)??me;return oa(e,t,$e)}if(T(e,F.__yo_build_dep_artifact)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let re=gt((be=e.args[0].$)==null?void 0:be.value,"dependency_name",e.token),ne=gt((Ue=e.args[1].$)==null?void 0:Ue.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:re,artifactName:ne}),lr(e,t)}if(T(e,F.__yo_build_module)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let re=gt((te=e.args[0].$)==null?void 0:te.value,"name",e.token),ne=gt((le=e.args[1].$)==null?void 0:le.value,"root",e.token);return n.registerModule({name:re,root:ne,linkedSystemLibraries:[]}),lr(e,t)}if(T(e,F.__yo_build_module_link)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let re=gt((fe=e.args[0].$)==null?void 0:fe.value,"module_name",e.token),ne=gt((Se=e.args[1].$)==null?void 0:Se.value,"system_library_name",e.token);return n.registerModuleLink(re,ne),lr(e,t)}if(T(e,F.__yo_build_add_import)){if(e.args.length<4)throw d({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let re=gt((it=e.args[0].$)==null?void 0:it.value,"artifact_name",e.token),ne=gt((ct=e.args[1].$)==null?void 0:ct.value,"import_name",e.token),me=gt((Ft=e.args[2].$)==null?void 0:Ft.value,"module_name",e.token),$e=gt((Zt=e.args[3].$)==null?void 0:Zt.value,"dependency_name",e.token),Re=n.findArtifact(re);if(Re){let ft=Re.importedModules.find(an=>an.importName===ne);if(ft)throw d({token:e.token,errorMessage:`Duplicate import name "${ne}" on artifact "${re}". Already imported from module "${ft.moduleName}".`})}return n.registerImportedModule(re,{importName:ne,moduleName:me,dependencyName:$e}),lr(e,t)}if(T(e,F.__yo_build_dep_module)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let re=gt((q=e.args[0].$)==null?void 0:q.value,"dependency_name",e.token),ne=gt((oe=e.args[1].$)==null?void 0:oe.value,"module_name",e.token);return oa(e,t,`${re}\0${ne}`)}throw d({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}function Xd({expr:e,env:t,context:n}){Ge(e,F.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&tt(i.type)&&(i={...i,type:i.type.childType});let o=U({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
10543
+ ${s.toString()}`});if(!rn(l.$.type))throw d({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${D(l.$.type)}`});if(!gr(l.$.value))throw d({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 d({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${o}`})}let a=i.$.value;if(Kn(a)){let s=a.value,l=t,u=0;for(;I(s)&&(o===null||u<o);)try{let c=wr({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Kn(c.$.value)){let _=c.$.value.value;if(L(_)===L(s))break;s=_,u++}else break}catch(c){if(c instanceof rr&&c.isAssertionError)throw c;break}s=qa({expr:s,env:l,context:{...n}}),e.$={env:l,type:Jn(),value:Sr(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Pd({expr:e,env:t,context:n}){var i,o;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body"&&((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="test-block")throw d({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw d({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:se.type;if(e.args.length>0){let a=e.args[0],s=U({expr:a,env:t,context:{...n}});if(!s.$)throw d({token:a.token,errorMessage:"Failed to evaluate panic message"});if(!s.$.value||!rt(s.$.value)&&!(Oe(s.$.value)&&ln(s.$.value.type)))throw d({token:a.token,errorMessage:"panic message must be a comptime_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}var Bd=new Set(["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"]),Au=new Set(["in"]),Iu=new Set(["out","lateout"]),Gd=new Set(["inout","inlateout"]),Wd=new Set(["const_val","sym"]),Zh=new Set([...Au,...Iu,...Gd,...Wd,"clobber","clobber_abi","asm_options"]),Ud=new Set(["pure","nomem","readonly","nostack","preserves_flags","att_syntax","intel_syntax","volatile","noreturn"]);function Lu(e){return Yr(e)||Hr(e)||tt(e)||Zn(e)}function Jh(e){return e.tag==="Atom"&&Bd.has(e.token.value)}function ev(e){return!I(e)||e.func.tag!=="Atom"?!1:Zh.has(e.func.token.value)}function zd(e){return e.tag==="Atom"&&e.token.value==="_"}function tv(e,t,n){var i,o;if(e.tag==="Atom"&&Bd.has(e.token.value))return e.token.value;let r=U({expr:e,env:t,context:{...n}});if((i=r.$)!=null&&i.value&&rt(r.$.value))return r.$.value.value;if(T(e,"raw",1)){let s=e.args[0],l=U({expr:s,env:t,context:{...n}});if((o=l.$)!=null&&o.value&&rt(l.$.value))return`raw:${l.$.value.value}`}throw d({token:e.token,errorMessage:'Invalid asm constraint. Expected a register class (reg, imm, mem, ...), an explicit register name string, or raw("constraint").'})}function nv(e,t,n,r){var y,g;let i=e.args;if(r==="const_val"||r==="sym")return rv(e,t,n,r);if(i.length<1||i.length>3)throw d({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(Jh(h))a=0;else if(zd(h))a=0;else{let v=U({expr:h,env:t,context:{...n}});(y=v.$)!=null&&y.value&&rt(v.$.value)?(o=v.$.value.value,a=1):a=0}}else a=0;let s=a<i.length-1,l,u;s?(l=tv(i[a],t,n),u=a+1):(o!==void 0&&(l=o),u=a);let c=i[u];if(!c)throw d({token:e.token,errorMessage:`asm ${r}() is missing its value/type argument.`});let _=Au.has(r);if(Iu.has(r)){if(zd(c))return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:void 0,targetVarName:void 0,discarded:!0};if(c.tag==="Atom"){let v=c.token.value,$=_e(t,v);if($.length>0){let E=$[$.length-1];if(!(E.value&&W(E.value[0]))){let C=E.type;if(!Lu(C))throw d({token:c.token,errorMessage:`asm ${r}() target variable '${v}' has type that is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});let w;return E.initializedAtToken?w=U({expr:c,env:t,context:{...n}}):(w=c,w.$={env:t,type:C,value:void 0,pathCollection:[]}),{kind:r,name:o,constraint:l,valueExpr:w,outputType:C,targetVarName:v,discarded:!1}}}}let h=U({expr:c,env:t,context:{...n}});if((g=h.$)!=null&&g.value&&W(h.$.value)){let v=h.$.value.value;if(!Lu(v))throw d({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:v,targetVarName:void 0,discarded:!1}}throw d({token:c.token,errorMessage:`asm ${r}() last argument must be a type, variable, or _ (discard).`})}let p=U({expr:c,env:t,context:{...n}});if(!p.$)throw d({token:c.token,errorMessage:`Failed to evaluate asm ${r}() value expression.`});let m=p.$.type;if(!Lu(m))throw d({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:p,outputType:void 0,targetVarName:void 0,discarded:!1}:{kind:r,name:o,constraint:l,valueExpr:p,outputType:m,targetVarName:void 0,discarded:!1}}function rv(e,t,n,r){var u;let i=e.args;if(i.length<1||i.length>2)throw d({token:e.token,errorMessage:`asm ${r}() expects 1 or 2 arguments, got ${i.length}.`});let o,a=0;if(i.length===2){let c=U({expr:i[0],env:t,context:{...n}});(u=c.$)!=null&&u.value&&rt(c.$.value)&&(o=c.$.value.value,a=1)}let s=i[a],l=U({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 iv(e,t,n){let r={noreturn:!1};for(let i of e.args)if(i.tag==="Atom"){let o=i.token.value;if(!Ud.has(o))throw d({token:i.token,errorMessage:`Unknown asm_options flag: '${o}'. Valid flags: ${[...Ud].join(", ")}.`});o==="noreturn"&&(r.noreturn=!0)}else throw d({token:e.token,errorMessage:"asm_options() arguments must be flag identifiers (e.g., pure, nomem, noreturn)."});return r}function qd({expr:e,env:t,context:n}){var m,y,g,h,v,$;if(((m=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:m.kind)!=="function-body"&&((y=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:y.kind)!=="test-block")throw d({token:e.token,errorMessage:"asm() can only be called inside a function body or test block."});if(n.isAnalyzingCtfeCapability)throw d({token:e.token,errorMessage:'Cannot use "asm" during compile-time function evaluation analysis.'});if(e.args.length===0)throw d({token:e.token,errorMessage:"asm() requires at least one argument (the assembly template string)."});let r=[],i=0;for(;i<e.args.length;){let E=e.args[i];if(ev(E))break;let C=U({expr:E,env:t,context:{...n}});if((g=C.$)!=null&&g.value&&rt(C.$.value))r.push(C.$.value.value),i++;else if((h=C.$)!=null&&h.value&&Oe(C.$.value)&&ln(C.$.value.type))r.push(""),i++;else break}if(r.length===0)throw d({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 E=e.args[i];if(!I(E))throw d({token:E.token,errorMessage:"asm() arguments after the template must be operand or option calls (in, out, inout, clobber, asm_options, etc.)."});let C=E.func.tag==="Atom"?E.func.token.value:void 0;if(!C)throw d({token:E.token,errorMessage:"asm() operand must be a named call like in(...), out(...), etc."});if(Au.has(C)||Iu.has(C)||Gd.has(C)||Wd.has(C))o.push(nv(E,t,n,C));else if(C==="clobber"||C==="clobber_abi")for(let w of E.args){if(w.tag==="Atom"&&(w.token.value==="memory"||w.token.value==="cc"))continue;let b=U({expr:w,env:t,context:{...n}});if((!((v=b.$)!=null&&v.value)||!rt(b.$.value))&&!(w.tag==="Atom"&&w.token.value==="memory")&&!(w.tag==="Atom"&&w.token.value==="cc"))throw d({token:w.token,errorMessage:`${C}() arguments must be compile-time strings (e.g., "memory", "cc", "rax").`})}else if(C==="asm_options")a=iv(E,t,n);else throw d({token:E.token,errorMessage:`Unknown asm() operand or option: '${C}'. Expected: in, out, inout, lateout, inlateout, const_val, sym, clobber, clobber_abi, asm_options.`});i++}let s=t;for(let E of o){if(E.targetVarName===void 0||E.kind!=="out"&&E.kind!=="lateout")continue;let C=_e(s,E.targetVarName);if(C.length>0){let w=C[C.length-1];w.initializedAtToken||(s=vt(s,w,{...w,initializedAtToken:e.token}))}}t=s;let l=[];for(let E of o)E.discarded||E.targetVarName===void 0&&(E.kind==="const_val"||E.kind==="sym"||E.kind!=="in"&&E.outputType&&l.push(E.outputType));let u;if(a.noreturn)u=(($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:se.type;else if(l.length===0)u=se.type;else if(l.length===1)u=l[0];else{let E=l.map((C,w)=>({label:w.toString(),type:C,exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}}));u=Ro(E)}let c=r.join(`
10544
+ `),_=/\{([^}:]+)(?::[^}]*)?\}/g,f,p=new Set;for(let E=0;E<o.length;E++)if(o[E].name){if(p.has(o[E].name))throw d({token:e.token,errorMessage:`Duplicate asm operand name: '${o[E].name}'.`});p.add(o[E].name)}for(;(f=_.exec(c))!==null;){let E=f[1];if(E==="{"||E==="}")continue;let C=parseInt(E,10);if(isNaN(C)){if(!p.has(E))throw d({token:e.token,errorMessage:`asm template references undefined operand '{${E}}'.`})}else if(C<0||C>=o.length)throw d({token:e.token,errorMessage:`asm template references positional operand {${C}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function Yd({expr:e,env:t,context:n}){var o;if(e.args.length===0)throw d({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!((o=i.$)!=null&&o.value)||!rt(i.$.value)&&!(Oe(i.$.value)&&ln(i.$.value.type)))throw d({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:se.type,value:void 0,pathCollection:[]},e}function Hd({expr:e,env:t}){if(T(e,F.__yo_process_platform)){if(e.args.length!==0)throw d({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=xa(),r=n.os,i=qn(r);return e.$={env:t,type:$n(),value:i,pathCollection:[]},e}if(T(e,F.__yo_process_arch)){if(e.args.length!==0)throw d({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=xa(),r=n.arch,i=qn(r);return e.$={env:t,type:$n(),value:i,pathCollection:[]},e}throw d({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var Nu=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.artifacts.push({kind:"executable",...t})}registerStaticLibrary(t){this.artifacts.push({kind:"static_library",...t})}registerSharedLibrary(t){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)}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=[]}},Su,ov,av=new Map;function jd(){return ov}function Kd(e){return av.get(e)}function Vu(){return Su||(Su=new Nu),Su}function gt(e,t,n){if(!rt(e))throw d({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function lr(e,t){return e.$={env:t,type:$r(),value:se,pathCollection:[]},e}function oa(e,t,n){return e.$={env:t,type:$n(),value:qn(n),pathCollection:[]},e}function sv(e){var t;for(let n of e.args){if(n===void 0)continue;let r=(t=n.$)==null?void 0:t.value;if(r===void 0||Oe(r))return!0}return!1}function Xd({expr:e,env:t}){var r,i,o,a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b,k,A,S,V,O,x,N,P,R,H,G,Q,K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue,te,le,fe,Se,it,ct,Ft,Zt,q,oe;if(sv(e)){if(T(e,F.__yo_build_target_host)){let re=Ni();return oa(e,t,re.triple)}return T(e,F.__yo_build_option)?oa(e,t,""):lr(e,t)}let n=Vu();if(T(e,F.__yo_build_executable)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((r=e.args[0].$)==null?void 0:r.value,"name",e.token),ne=gt((i=e.args[1].$)==null?void 0:i.value,"root",e.token),me=e.args.length>2?gt((o=e.args[2].$)==null?void 0:o.value,"target",e.token):Ni().triple,$e=e.args.length>3?gt((a=e.args[3].$)==null?void 0:a.value,"optimize",e.token):"debug",Re=e.args.length>4?gt((s=e.args[4].$)==null?void 0:s.value,"allocator",e.token):"mimalloc",ft=e.args.length>5?gt((l=e.args[5].$)==null?void 0:l.value,"sanitize",e.token):"none";return n.registerExecutable({name:re,root:ne,target:me,optimize:$e,allocator:Re,sanitize:ft,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),lr(e,t)}if(T(e,F.__yo_build_static_library)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((u=e.args[0].$)==null?void 0:u.value,"name",e.token),ne=gt((c=e.args[1].$)==null?void 0:c.value,"root",e.token),me=e.args.length>2?gt((_=e.args[2].$)==null?void 0:_.value,"target",e.token):Ni().triple,$e=e.args.length>3?gt((f=e.args[3].$)==null?void 0:f.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:re,root:ne,target:me,optimize:$e,allocator:"mimalloc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),lr(e,t)}if(T(e,F.__yo_build_shared_library)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((p=e.args[0].$)==null?void 0:p.value,"name",e.token),ne=gt((m=e.args[1].$)==null?void 0:m.value,"root",e.token),me=e.args.length>2?gt((y=e.args[2].$)==null?void 0:y.value,"target",e.token):Ni().triple,$e=e.args.length>3?gt((g=e.args[3].$)==null?void 0:g.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:re,root:ne,target:me,optimize:$e,allocator:"mimalloc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),lr(e,t)}if(T(e,F.__yo_build_link)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let re=gt((h=e.args[0].$)==null?void 0:h.value,"artifact_name",e.token),ne=gt((v=e.args[1].$)==null?void 0:v.value,"library_name",e.token);if(n.findSystemLibrary(ne)){let me=n.findArtifact(re);me&&(me.linkedSystemLibraries.includes(ne)||me.linkedSystemLibraries.push(ne))}else n.registerLink(re,ne);return lr(e,t)}if(T(e,F.__yo_build_link_system_library)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let re=gt(($=e.args[0].$)==null?void 0:$.value,"artifact_name",e.token),ne=gt((E=e.args[1].$)==null?void 0:E.value,"system_lib_name",e.token),me=n.findArtifact(re);return me&&(me.linkedSystemLibraries.includes(ne)||me.linkedSystemLibraries.push(ne)),lr(e,t)}if(T(e,F.__yo_build_test)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let re=gt((C=e.args[0].$)==null?void 0:C.value,"name",e.token),ne=gt((w=e.args[1].$)==null?void 0:w.value,"root",e.token),me=e.args.length>2?gt((b=e.args[2].$)==null?void 0:b.value,"target",e.token):Ni().triple;return n.registerTest({name:re,root:ne,target:me,verbose:!1,bail:!1,parallel:1}),lr(e,t)}if(T(e,F.__yo_build_run)){if(e.args.length<1)throw d({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let re=gt((k=e.args[0].$)==null?void 0:k.value,"artifact_name",e.token);return n.registerRun(re,[]),lr(e,t)}if(T(e,F.__yo_build_step)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let re=gt((A=e.args[0].$)==null?void 0:A.value,"name",e.token),ne=gt((S=e.args[1].$)==null?void 0:S.value,"description",e.token);return n.registerStep(re,ne),lr(e,t)}if(T(e,F.__yo_build_step_depend_on)){if(e.args.length<3)throw d({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let re=gt((V=e.args[0].$)==null?void 0:V.value,"step_name",e.token),ne=gt((O=e.args[1].$)==null?void 0:O.value,"dep_name",e.token),me=(x=e.args[2].$)==null?void 0:x.value,$e=ne;return me&&hn(me)&&me.variantName==="Run"&&($e=`run:${ne}`),n.addStepDependency(re,$e),lr(e,t)}if(T(e,F.__yo_build_target_host)){let re=Ni();return oa(e,t,re.triple)}if(T(e,F.__yo_build_target_parse)){if(e.args.length!==1)throw d({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let re=gt((N=e.args[0].$)==null?void 0:N.value,"triple",e.token),ne=c_(re);return oa(e,t,ne.triple)}if(T(e,F.__yo_build_dependency)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let re=gt((P=e.args[0].$)==null?void 0:P.value,"name",e.token),ne=gt((R=e.args[1].$)==null?void 0:R.value,"url",e.token),me=e.args.length>2?gt((H=e.args[2].$)==null?void 0:H.value,"ref",e.token):"HEAD",$e=e.args.length>3?gt((G=e.args[3].$)==null?void 0:G.value,"path",e.token):"";return n.registerDependency({name:re,url:ne,ref:me,path:$e}),lr(e,t)}if(T(e,F.__yo_build_path_dependency)){if(e.args.length!==2)throw d({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let re=gt((Q=e.args[0].$)==null?void 0:Q.value,"name",e.token),ne=gt((K=e.args[1].$)==null?void 0:K.value,"path",e.token);return n.registerPathDependency({name:re,path:ne}),lr(e,t)}if(T(e,F.__yo_build_system_library)){if(e.args.length<1)throw d({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let re=gt((j=e.args[0].$)==null?void 0:j.value,"name",e.token),ne=e.args.length>1?gt((ie=e.args[1].$)==null?void 0:ie.value,"fallback_include",e.token):"",me=e.args.length>2?gt((ce=e.args[2].$)==null?void 0:ce.value,"fallback_lib",e.token):"",$e=e.args.length>3?gt((ee=e.args[3].$)==null?void 0:ee.value,"fallback_link",e.token):"",Re=e.args.length>4?gt((pe=e.args[4].$)==null?void 0:pe.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:re,fallbackInclude:ne,fallbackLib:me,fallbackLink:$e,defines:Re}),lr(e,t)}if(T(e,F.__yo_build_option)){if(e.args.length<3)throw d({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let re=gt((Z=e.args[0].$)==null?void 0:Z.value,"name",e.token),ne=gt((Ee=e.args[1].$)==null?void 0:Ee.value,"description",e.token),me=gt((Fe=e.args[2].$)==null?void 0:Fe.value,"default",e.token);n.declaredOptions.set(re,{description:ne,defaultValue:me});let $e=n.cliOptions.get(re)??me;return oa(e,t,$e)}if(T(e,F.__yo_build_dep_artifact)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let re=gt((be=e.args[0].$)==null?void 0:be.value,"dependency_name",e.token),ne=gt((Ue=e.args[1].$)==null?void 0:Ue.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:re,artifactName:ne}),lr(e,t)}if(T(e,F.__yo_build_module)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let re=gt((te=e.args[0].$)==null?void 0:te.value,"name",e.token),ne=gt((le=e.args[1].$)==null?void 0:le.value,"root",e.token);return n.registerModule({name:re,root:ne,linkedSystemLibraries:[]}),lr(e,t)}if(T(e,F.__yo_build_module_link)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let re=gt((fe=e.args[0].$)==null?void 0:fe.value,"module_name",e.token),ne=gt((Se=e.args[1].$)==null?void 0:Se.value,"system_library_name",e.token);return n.registerModuleLink(re,ne),lr(e,t)}if(T(e,F.__yo_build_add_import)){if(e.args.length<4)throw d({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let re=gt((it=e.args[0].$)==null?void 0:it.value,"artifact_name",e.token),ne=gt((ct=e.args[1].$)==null?void 0:ct.value,"import_name",e.token),me=gt((Ft=e.args[2].$)==null?void 0:Ft.value,"module_name",e.token),$e=gt((Zt=e.args[3].$)==null?void 0:Zt.value,"dependency_name",e.token),Re=n.findArtifact(re);if(Re){let ft=Re.importedModules.find(an=>an.importName===ne);if(ft)throw d({token:e.token,errorMessage:`Duplicate import name "${ne}" on artifact "${re}". Already imported from module "${ft.moduleName}".`})}return n.registerImportedModule(re,{importName:ne,moduleName:me,dependencyName:$e}),lr(e,t)}if(T(e,F.__yo_build_dep_module)){if(e.args.length<2)throw d({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let re=gt((q=e.args[0].$)==null?void 0:q.value,"dependency_name",e.token),ne=gt((oe=e.args[1].$)==null?void 0:oe.value,"module_name",e.token);return oa(e,t,`${re}\0${ne}`)}throw d({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}function Qd({expr:e,env:t,context:n}){Ge(e,F.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&tt(i.type)&&(i={...i,type:i.type.childType});let o=U({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
10527
10545
  ${L(r)}`});if(t=o.$.env,W(o.$.value))throw d({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
10528
- ${L(r)}`});{let a=o.$.type;if(rn(a)||Tn(a)||ln(a)){let c=Qt({type:a,expectedType:i==null?void 0:i.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=to(a),l=o.$.sourceVariable,u=o.$.arrayElementRef;if(u){let c=nl(s,[u.arrayValue],u.index);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else if(l&&l.value){let c=nl(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection};return Tt(e,!1),e}}function Qd({expr:e,env:t,context:n}){Ge(e,F.rc,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,jn(i.$.type)?e.$={env:t,type:tn(),value:void 0,pathCollection:[]}:e.$={env:t,type:tn(),value:Pn("Usize",1),pathCollection:[]},e}function Zd({expr:e,env:t,context:n}){Ge(e,F.sizeof,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&W(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Ai(o),s;return a===null?s=ue(tn(),{env:t,context:n}):s=Pn("Usize",Math.ceil(a/8)),e.$={env:t,type:tn(),value:s,pathCollection:[]},e}function $i({expr:e,type:t,env:n,context:r}){var i,o,a,s,l,u,c,_,f,p;if(Qe(t)&&I(e)&&T(e,M.tuple)){if(t.fields.length!==e.args.length)throw d({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let m=0;m<t.fields.length;m++){let y=t.fields[m].type,g=e.args[m],{env:h}=$i({expr:g,type:y,env:n,context:{...r}});n=h}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(I(e)&&T(e,"_"))if(xe(t)||Pt(t)||We(t)||st(t)){let m=wr({expr:e,env:n,givenFunc:{type:pn(t),value:ye(t)},context:{...r}});if(!((i=m.$)!=null&&i.type)||!((o=m.$)!=null&&o.env))throw d({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
10529
- ${L(e)}`});return{expr:m,type:(a=m.$)==null?void 0:a.type,env:(s=m.$)==null?void 0:s.env}}else throw d({token:e.token,errorMessage:`Cannot use _ with type ${D(t)}. Only supported with struct types.`});else if(I(e)&&T(e,".",1))if(ze(t)){let m=e.args[0];if(!X(m))throw d({token:e.token,errorMessage:`Expected identifier for enum variant, got ${L(m)}`});let y=m.token.value;if(!t.variants.find(v=>v.name===y))throw d({token:e.token,errorMessage:`Enum variant "${y}" not found in ${D(t)}`});let h={...t,selectedVariantName:y};return e.$={type:h,env:n,pathCollection:[]},{expr:e,type:h,env:n}}else throw d({token:e.token,errorMessage:`Cannot use . with type ${D(t)}. Only supported with enum types.`});else if(I(e)&&I(e.func)&&T(e.func,".",1))if(ze(t)){let m=e.func,y=m.args[0];if(!X(y))throw d({token:m.token,errorMessage:`Expected identifier for enum variant, got ${L(y)}`});let g=y.token.value;if(!t.variants.find(E=>E.name===g))throw d({token:e.token,errorMessage:`Enum variant "${g}" not found in ${D(t)}`});let v={...t,selectedVariantName:g},$=wr({expr:e,env:n,givenFunc:{type:pn(v),value:ye(v)},context:{...r}});if(!((l=$.$)!=null&&l.type)||!((u=$.$)!=null&&u.env))throw d({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
10530
- ${L(e)}`});return{expr:$,type:(c=$.$)==null?void 0:c.type,env:(_=$.$)==null?void 0:_.env}}else throw d({token:e.token,errorMessage:`Cannot use . with type ${D(t)}. Only supported with enum types.`});else if((f=e.$)!=null&&f.type&&t)try{let{expectedEnv:m}=It({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:m}}catch{return{expr:e,type:(p=e.$)==null?void 0:p.type,env:n}}else throw d({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${L(e)}`})}function Jd({expr:e,env:t,context:n}){var l,u;Ge(e,F.the,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=o.$.env,!o.$.value||!W(o.$.value))throw d({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${o.$.type}`});let a=o.$.value.value,s=U({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw d({token:i.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!ae({type:a,env:t},{type:s.$.type,env:t})){if(No(a))try{let{expr:c,type:_,env:f}=$i({expr:i,type:a,env:t,context:{...n}});if(ae({type:a,env:f},{type:_,env:f}))return e.$={env:f,type:a,value:(l=c.$)==null?void 0:l.value,pathCollection:((u=c.$)==null?void 0:u.pathCollection)||[]},e}catch{}throw d({token:i.token,errorMessage:`Type mismatch: expected '${D(a)}', got '${D(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function em({expr:e,env:t,context:n}){Ge(e,F.__yo_type_to_comptime_string,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10546
+ ${L(r)}`});{let a=o.$.type;if(rn(a)||Tn(a)||ln(a)){let c=Qt({type:a,expectedType:i==null?void 0:i.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=to(a),l=o.$.sourceVariable,u=o.$.arrayElementRef;if(u){let c=nl(s,[u.arrayValue],u.index);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else if(l&&l.value){let c=nl(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection};return Tt(e,!1),e}}function Zd({expr:e,env:t,context:n}){Ge(e,F.rc,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,jn(i.$.type)?e.$={env:t,type:tn(),value:void 0,pathCollection:[]}:e.$={env:t,type:tn(),value:Pn("Usize",1),pathCollection:[]},e}function Jd({expr:e,env:t,context:n}){Ge(e,F.sizeof,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&W(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Ai(o),s;return a===null?s=ue(tn(),{env:t,context:n}):s=Pn("Usize",Math.ceil(a/8)),e.$={env:t,type:tn(),value:s,pathCollection:[]},e}function $i({expr:e,type:t,env:n,context:r}){var i,o,a,s,l,u,c,_,f,p;if(Qe(t)&&I(e)&&T(e,M.tuple)){if(t.fields.length!==e.args.length)throw d({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let m=0;m<t.fields.length;m++){let y=t.fields[m].type,g=e.args[m],{env:h}=$i({expr:g,type:y,env:n,context:{...r}});n=h}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(I(e)&&T(e,"_"))if(xe(t)||Pt(t)||We(t)||st(t)){let m=wr({expr:e,env:n,givenFunc:{type:dn(t),value:ye(t)},context:{...r}});if(!((i=m.$)!=null&&i.type)||!((o=m.$)!=null&&o.env))throw d({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
10547
+ ${L(e)}`});return{expr:m,type:(a=m.$)==null?void 0:a.type,env:(s=m.$)==null?void 0:s.env}}else throw d({token:e.token,errorMessage:`Cannot use _ with type ${D(t)}. Only supported with struct types.`});else if(I(e)&&T(e,".",1))if(ze(t)){let m=e.args[0];if(!X(m))throw d({token:e.token,errorMessage:`Expected identifier for enum variant, got ${L(m)}`});let y=m.token.value;if(!t.variants.find(v=>v.name===y))throw d({token:e.token,errorMessage:`Enum variant "${y}" not found in ${D(t)}`});let h={...t,selectedVariantName:y};return e.$={type:h,env:n,pathCollection:[]},{expr:e,type:h,env:n}}else throw d({token:e.token,errorMessage:`Cannot use . with type ${D(t)}. Only supported with enum types.`});else if(I(e)&&I(e.func)&&T(e.func,".",1))if(ze(t)){let m=e.func,y=m.args[0];if(!X(y))throw d({token:m.token,errorMessage:`Expected identifier for enum variant, got ${L(y)}`});let g=y.token.value;if(!t.variants.find(E=>E.name===g))throw d({token:e.token,errorMessage:`Enum variant "${g}" not found in ${D(t)}`});let v={...t,selectedVariantName:g},$=wr({expr:e,env:n,givenFunc:{type:dn(v),value:ye(v)},context:{...r}});if(!((l=$.$)!=null&&l.type)||!((u=$.$)!=null&&u.env))throw d({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
10548
+ ${L(e)}`});return{expr:$,type:(c=$.$)==null?void 0:c.type,env:(_=$.$)==null?void 0:_.env}}else throw d({token:e.token,errorMessage:`Cannot use . with type ${D(t)}. Only supported with enum types.`});else if((f=e.$)!=null&&f.type&&t)try{let{expectedEnv:m}=It({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:m}}catch{return{expr:e,type:(p=e.$)==null?void 0:p.type,env:n}}else throw d({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${L(e)}`})}function em({expr:e,env:t,context:n}){var l,u;Ge(e,F.the,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw d({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=o.$.env,!o.$.value||!W(o.$.value))throw d({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${o.$.type}`});let a=o.$.value.value,s=U({expr:i,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw d({token:i.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!ae({type:a,env:t},{type:s.$.type,env:t})){if(No(a))try{let{expr:c,type:_,env:f}=$i({expr:i,type:a,env:t,context:{...n}});if(ae({type:a,env:f},{type:_,env:f}))return e.$={env:f,type:a,value:(l=c.$)==null?void 0:l.value,pathCollection:((u=c.$)==null?void 0:u.pathCollection)||[]},e}catch{}throw d({token:i.token,errorMessage:`Type mismatch: expected '${D(a)}', got '${D(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function tm({expr:e,env:t,context:n}){Ge(e,F.__yo_type_to_comptime_string,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10531
10549
  ${L(r)}`});if(!bt(r.$.type))throw d({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10532
10550
  ${L(r)}`});let i=r.$.value;if(!i)throw d({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
10533
- ${L(r)}`});return e.$={env:r.$.env,type:$n(),value:ue($n(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},W(i)&&(e.$.value=qn(D(i.value))),e}function tm({expr:e,env:t,context:n}){var f,p;let r=e.args,i=r[0],o=r[1],a=U({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!W((f=a.$)==null?void 0:f.value))throw d({token:i.token,errorMessage:`Expected type, got:
10551
+ ${L(r)}`});return e.$={env:r.$.env,type:$n(),value:ue($n(),{env:r.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},W(i)&&(e.$.value=qn(D(i.value))),e}function nm({expr:e,env:t,context:n}){var f,p;let r=e.args,i=r[0],o=r[1],a=U({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!W((f=a.$)==null?void 0:f.value))throw d({token:i.token,errorMessage:`Expected type, got:
10534
10552
  ${L(i)}`});let s=a.$.value.value;t=a.$.env;let l=U({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!W((p=l.$)==null?void 0:p.value))throw d({token:o.token,errorMessage:`Expected type, got:
10535
- ${L(o)}`});let u=l.$.value.value;t=l.$.env;let c=ae({type:s,env:t},{type:u,env:t}),_=jt(c);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}function nm({expr:e,env:t,context:n}){Ge(e,F.__yo_type_contains_rc_type,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10553
+ ${L(o)}`});let u=l.$.value.value;t=l.$.env;let c=ae({type:s,env:t},{type:u,env:t}),_=jt(c);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}function rm({expr:e,env:t,context:n}){Ge(e,F.__yo_type_contains_rc_type,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10536
10554
  ${L(r)}`});if(!bt(r.$.type))throw d({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10537
10555
  ${L(r)}`});let i=r.$.value;if(!i||!W(i))throw d({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
10538
- ${L(r)}`});let o=Je(i.value),a=jt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function rm({expr:e,env:t,context:n}){Ge(e,F.__yo_type_can_form_rc_cycle,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10556
+ ${L(r)}`});let o=Je(i.value),a=jt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function im({expr:e,env:t,context:n}){Ge(e,F.__yo_type_can_form_rc_cycle,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
10539
10557
  ${L(r)}`});if(!bt(r.$.type))throw d({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
10540
10558
  ${L(r)}`});let i=r.$.value;if(!i||!W(i))throw d({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
10541
- ${L(r)}`});let o=di(i.value,new Set,r.$.env),a=jt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function im({expr:e,env:t,context:n}){Ge(e,F.__yo_type_impls,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
10559
+ ${L(r)}`});let o=di(i.value,new Set,r.$.env),a=jt(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function om({expr:e,env:t,context:n}){Ge(e,F.__yo_type_impls,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw d({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
10542
10560
  ${L(r)}`});if(!bt(r.$.type))throw d({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
10543
10561
  ${L(r)}`});let i=r.$.value;if(!i||!W(i))throw d({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
10544
10562
  ${L(r)}`});t=r.$.env;let o=i.value,a=U({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw d({token:a.token,errorMessage:`Failed to evaluate the trait argument for "${e.func.token.value}":
10545
10563
  ${L(a)}`});let s;if(W(a.$.value)){let u=a.$.value;if(!st(u.value))throw d({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(st(a.$.type))s=a.$.type;else{if(bt(a.$.type))return e.$={env:a.$.env,type:Nt(),value:ue(Nt(),{env:a.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},e;throw d({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got:
10546
- ${L(a)}`})}t=a.$.env;let l=jt(vn({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function om({expr:e,env:t,context:n}){Ge(e,F.typeid,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression for typeid."});if(t=i.$.env,!i.$.value||!W(i.$.value))throw d({token:r.token,errorMessage:`typeid expects a type argument, got ${i.$.type?D(i.$.type):"unknown"}. Use is() or downcast() for runtime type checks on Dyn values.`});let o=ue(tn(),{env:t,context:n});return e.$={env:t,type:tn(),value:o,pathCollection:[]},e}function am({expr:e,env:t}){Ge(e,F.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!X(r)||!kt(r))throw d({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
10547
- ${L(r)}`});if(n===0){let i=r.token.value,o=_e(t,i);if(o.length===0)throw d({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`});let a=o[o.length-1];t=vt(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(_e(t,i).length===0)throw d({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:se.type,value:se,env:t,pathCollection:[]},e}function sm({expr:e,env:t,context:n}){var a;Ge(e,F.__yo_var_print_info,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(a=i.$)==null?void 0:a.variableName;if(o){let s=_e(t,o);if(s.length>0){let l=s.at(-1);console.log(Zc(l))}}return e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function lm({expr:e,env:t,context:n}){var s;Ge(e,F.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=_e(t,o);l.length>0&&(a=l.at(-1).isOwningTheRcValue)}return e.$={env:t,type:Nt(),value:jt(a),pathCollection:[]},e}function um({expr:e,env:t,context:n}){var s;Ge(e,F.__yo_var_has_other_aliases,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=_e(t,o);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameRcValueAs)a=!0;else{let _=u.id;for(let f=t.frames.length-1;f>=0;f--){let p=t.frames[f];for(let m=0;m<p.variables.length;m++){let y=p.variables[m];if(y.isOwningTheSameRcValueAs&&y.isOwningTheSameRcValueAs.id===_){a=!0;break}}}}}}return e.$={env:t,type:Nt(),value:jt(a),pathCollection:[]},e}function cm({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&tt(i.type)&&(i={...i,type:i.type.childType});let o=U({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
10564
+ ${L(a)}`})}t=a.$.env;let l=jt(vn({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function am({expr:e,env:t,context:n}){Ge(e,F.typeid,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:"Failed to evaluate expression for typeid."});if(t=i.$.env,!i.$.value||!W(i.$.value))throw d({token:r.token,errorMessage:`typeid expects a type argument, got ${i.$.type?D(i.$.type):"unknown"}. Use is() or downcast() for runtime type checks on Dyn values.`});let o=ue(tn(),{env:t,context:n});return e.$={env:t,type:tn(),value:o,pathCollection:[]},e}function sm({expr:e,env:t}){Ge(e,F.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!X(r)||!kt(r))throw d({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
10565
+ ${L(r)}`});if(n===0){let i=r.token.value,o=_e(t,i);if(o.length===0)throw d({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`});let a=o[o.length-1];t=vt(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(_e(t,i).length===0)throw d({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:se.type,value:se,env:t,pathCollection:[]},e}function lm({expr:e,env:t,context:n}){var a;Ge(e,F.__yo_var_print_info,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(a=i.$)==null?void 0:a.variableName;if(o){let s=_e(t,o);if(s.length>0){let l=s.at(-1);console.log(Zc(l))}}return e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function um({expr:e,env:t,context:n}){var s;Ge(e,F.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=_e(t,o);l.length>0&&(a=l.at(-1).isOwningTheRcValue)}return e.$={env:t,type:Nt(),value:jt(a),pathCollection:[]},e}function cm({expr:e,env:t,context:n}){var s;Ge(e,F.__yo_var_has_other_aliases,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=_e(t,o);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameRcValueAs)a=!0;else{let _=u.id;for(let f=t.frames.length-1;f>=0;f--){let p=t.frames[f];for(let m=0;m<p.variables.length;m++){let y=p.variables[m];if(y.isOwningTheSameRcValueAs&&y.isOwningTheSameRcValueAs.id===_){a=!0;break}}}}}}return e.$={env:t,type:Nt(),value:jt(a),pathCollection:[]},e}function _m({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&tt(i.type)&&(i={...i,type:i.type.childType});let o=U({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
10548
10566
  ${L(r)}`});if(t=o.$.env,W(o.$.value)){let s=o.$.value.value,l=to(s),u=ye(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw d({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
10549
- ${L(r)}`})}function _m({expr:e,env:t,context:n}){if(!T(e,M.Array,2))throw d({token:e.token,errorMessage:`Expected "Array(comptime(Type), comptime(usize))" with 2 arguments, like "Array(i32, 10)"
10567
+ ${L(r)}`})}function fm({expr:e,env:t,context:n}){if(!T(e,M.Array,2))throw d({token:e.token,errorMessage:`Expected "Array(comptime(Type), comptime(usize))" with 2 arguments, like "Array(i32, 10)"
10550
10568
  Got:
10551
10569
  ${L(e)}`});let r=e.args[0],i=e.args[1],o=X(i)&&i.token.value==="_",a=U({expr:r,env:t,context:{...n}});if(!a.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10552
10570
  ${L(r)}`});if(!W(a.$.value))throw d({token:r.token,errorMessage:`Expected type for element type, got:
@@ -10555,26 +10573,26 @@ ${L(r)}
10555
10573
  If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let s=a.$.value.value;if(o){let f=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=ue(tn(),{variableName:f,env:a.$.env,context:n}),{env:m}=Pe({env:a.$.env,variable:{name:f,value:[p],type:tn(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),y=ni(s,p),g=ye(y);return e.$={env:m,type:g.type,value:g,pathCollection:[]},e}let l=U({expr:i,env:t,context:{...n,expectedType:{type:tn(),env:t}}});if(!l.$)throw d({token:i.token,errorMessage:`Failed to evaluate the length expression:
10556
10574
  ${L(i)}`});if(!ae({type:tn(),env:t},{type:l.$.type,env:t}))throw d({token:i.token,errorMessage:`Expected usize for length, got:
10557
10575
  ${L(i)}`});let u=l.$.value;if(!u)throw d({token:i.token,errorMessage:`Expected compile-time known value for length, got:
10558
- ${L(i)}`});Oe(u)&&(u.type=tn());let c=ni(s,u),_=ye(c);return e.$={env:l.$.env,type:_.type,value:_,pathCollection:[]},e}function fm({expr:e,env:t,context:n}){return Ps({expr:e,env:t,context:n})}function pm({expr:e,env:t,context:n}){Ge(e,M.ComptimeList,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10576
+ ${L(i)}`});Oe(u)&&(u.type=tn());let c=ni(s,u),_=ye(c);return e.$={env:l.$.env,type:_.type,value:_,pathCollection:[]},e}function pm({expr:e,env:t,context:n}){return Ps({expr:e,env:t,context:n})}function dm({expr:e,env:t,context:n}){Ge(e,M.ComptimeList,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10559
10577
  ${L(r)}`});if(!W(i.$.value))throw d({token:r.token,errorMessage:`Expected type for element type, got:
10560
- ${L(r)}`});let o=i.$.value.value,a=$a(o),s=ye(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function dm({expr:e,env:t,context:n}){if(e.args.length!==1)throw d({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
10578
+ ${L(r)}`});let o=i.$.value.value,a=$a(o),s=ye(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function mm({expr:e,env:t,context:n}){if(e.args.length!==1)throw d({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
10561
10579
  ${L(r)}`});if(t=i.$.env,!W(i.$.value))throw d({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
10562
- ${L(r)}`});let o=i.$.value.value,a=ut(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:pn(a),value:ye(a),pathCollection:[]},e}function mm({expr:e,env:t,context:n}){Ge(e,M.Dyn);let r=e.args,i=[],o=[];for(let u=0;u<r.length;u++){let c=r[u],_=I(c)&&T(c,"!")&&c.args.length===1,f=_?c.args[0]:c,p=U({expr:f,env:t,context:{...n}});if(!p.$||!p.$.value||!W(p.$.value)||!st(p.$.value.value))throw new Error(`Expected a trait type for argument ${u+1} of 'dyn' expression.`);t=p.$.env;let m=p.$.value.value;if(_){if(o.some(y=>y.id===m.id))throw d({token:f.token,errorMessage:`Trait type ${D(m)} is already included in negative constraints of '${M.Dyn}' expression.`});o.push(m)}else{if(i.some(y=>y.id===m.id))throw d({token:f.token,errorMessage:`Trait type ${D(m)} is already included in '${M.Dyn}' expression.`});i.push(m)}}{let u=new Set(i.map(_=>_.id)),c=[...i];for(;c.length>0;){let _=c.pop();if(_.selfConstraints)for(let f of _.selfConstraints)u.has(f.id)||(u.add(f.id),i.push(f),c.push(f))}}for(let u=0;u<i.length;u++){let c=i[u];for(let _=u+1;_<i.length;_++){let f=i[_];for(let p of c.fields)for(let m of f.fields)if(p.label===m.label&&p.label!=="")throw d({token:e.token,errorMessage:`Trait types ${D(c)} and ${D(f)} have conflicting function name '${p.label}' in '${M.Dyn[0]}' expression.`})}}let a=[F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]];for(let u of i)for(let c of u.fields)if(a.includes(c.label)&&J(c.type))throw d({token:e.token,errorMessage:`Trait type ${D(u)} cannot have function '${c.label}' as it is reserved in 'dyn' expression.`});let s=Fa({requiredTraits:i,env:t,negativeTraits:o});t=ba({dynType:s,env:t,context:n});let l=ye(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function Pi({expr:e,tupleFieldIndex:t,env:n,context:r,forType:i}){var v,$,E,C,w,b;let o,a=e,s,l,u,c,_,f,p=!1,m;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2))){if(T(a,"::",2)){if(p=!0,s=a.args[0],!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for element label, got ${L(s)}`});o=s.token.value}_=a.args[1],a=a.args[0]}if(u&&_)throw d({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,M.comptime,1)){if(p)throw d({token:s.token,errorMessage:'Cannot combine the use of "comptime" with ::'});p=!0,s=s.args[0]}if(!X(s)||!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for element label, got ${L(s)}`});o=s.token.value}else if(I(a)&&T(a,M.comptime,1)){if(p)throw d({token:a.token,errorMessage:'Cannot combine the use of "comptime" with "::"'});if(p=!0,s=a.args[0],!X(s)||!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for element label, got ${L(s)}`});o=s.token.value}else!u&&!_&&(l=a);let y=(v=r.expectedType)==null?void 0:v.type,g;if(y&&(Qe(y)||xe(y)||We(y)||st(y))){let k=y.fields[t];if(!k)throw d({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=k.type}if(l){let k=U({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});($=k.$)!=null&&$.env&&(n=(E=k.$)==null?void 0:E.env);let A=(C=k.$)==null?void 0:C.value;if(!W(A))throw d({token:l.token,errorMessage:`(1) Expected type for element, got ${L(l)}`});m=A.value}if(_){if(!p)throw d({token:_.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
10580
+ ${L(r)}`});let o=i.$.value.value,a=ut(t);return a.isConcrete={concreteType:o},a.id=`concrete_module_${o.id}`,e.$={env:t,type:dn(a),value:ye(a),pathCollection:[]},e}function ym({expr:e,env:t,context:n}){Ge(e,M.Dyn);let r=e.args,i=[],o=[];for(let u=0;u<r.length;u++){let c=r[u],_=I(c)&&T(c,"!")&&c.args.length===1,f=_?c.args[0]:c,p=U({expr:f,env:t,context:{...n}});if(!p.$||!p.$.value||!W(p.$.value)||!st(p.$.value.value))throw new Error(`Expected a trait type for argument ${u+1} of 'dyn' expression.`);t=p.$.env;let m=p.$.value.value;if(_){if(o.some(y=>y.id===m.id))throw d({token:f.token,errorMessage:`Trait type ${D(m)} is already included in negative constraints of '${M.Dyn}' expression.`});o.push(m)}else{if(i.some(y=>y.id===m.id))throw d({token:f.token,errorMessage:`Trait type ${D(m)} is already included in '${M.Dyn}' expression.`});i.push(m)}}{let u=new Set(i.map(_=>_.id)),c=[...i];for(;c.length>0;){let _=c.pop();if(_.selfConstraints)for(let f of _.selfConstraints)u.has(f.id)||(u.add(f.id),i.push(f),c.push(f))}}for(let u=0;u<i.length;u++){let c=i[u];for(let _=u+1;_<i.length;_++){let f=i[_];for(let p of c.fields)for(let m of f.fields)if(p.label===m.label&&p.label!=="")throw d({token:e.token,errorMessage:`Trait types ${D(c)} and ${D(f)} have conflicting function name '${p.label}' in '${M.Dyn[0]}' expression.`})}}let a=[F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]];for(let u of i)for(let c of u.fields)if(a.includes(c.label)&&J(c.type))throw d({token:e.token,errorMessage:`Trait type ${D(u)} cannot have function '${c.label}' as it is reserved in 'dyn' expression.`});let s=Fa({requiredTraits:i,env:t,negativeTraits:o});t=ba({dynType:s,env:t,context:n});let l=ye(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function Pi({expr:e,tupleFieldIndex:t,env:n,context:r,forType:i}){var v,$,E,C,w,b;let o,a=e,s,l,u,c,_,f,p=!1,m;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2))){if(T(a,"::",2)){if(p=!0,s=a.args[0],!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for element label, got ${L(s)}`});o=s.token.value}_=a.args[1],a=a.args[0]}if(u&&_)throw d({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,M.comptime,1)){if(p)throw d({token:s.token,errorMessage:'Cannot combine the use of "comptime" with ::'});p=!0,s=s.args[0]}if(!X(s)||!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for element label, got ${L(s)}`});o=s.token.value}else if(I(a)&&T(a,M.comptime,1)){if(p)throw d({token:a.token,errorMessage:'Cannot combine the use of "comptime" with "::"'});if(p=!0,s=a.args[0],!X(s)||!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for element label, got ${L(s)}`});o=s.token.value}else!u&&!_&&(l=a);let y=(v=r.expectedType)==null?void 0:v.type,g;if(y&&(Qe(y)||xe(y)||We(y)||st(y))){let k=y.fields[t];if(!k)throw d({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=k.type}if(l){let k=U({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});($=k.$)!=null&&$.env&&(n=(E=k.$)==null?void 0:E.env);let A=(C=k.$)==null?void 0:C.value;if(!W(A))throw d({token:l.token,errorMessage:`(1) Expected type for element, got ${L(l)}`});m=A.value}if(_){if(!p)throw d({token:_.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
10563
10581
  Please consider adding "comptime" modifier to the field label.`});let k=m?{type:m,env:n}:g?{type:g,env:n}:void 0,A=U({expr:_,env:n,context:{...r,expectedType:k,forceCompileTimeBindings:void 0}});if(!A.$)throw d({token:_.token,errorMessage:`Failed to evaluate required value expression: ${L(_)}`});if(n=(w=A.$)==null?void 0:w.env,f=A.$.value,!f)throw d({token:_.token,errorMessage:`Expected compile-time known value for required value, got ${L(_)}`});let S=A.$.type;if(k){if(!ae({type:k.type,env:n},{type:S,env:n}))throw d({token:_.token,errorMessage:`Assigned value type mismatch:
10564
10582
  Expected type: ${D(k.type)}
10565
10583
  Given type: ${D(S)}`});m=k.type}else m=S}if(u){let k=m?{type:m,env:n}:g?{type:g,env:n}:void 0,A=U({expr:u,env:n,context:{...r,expectedType:k}});if(!A.$)throw d({token:u.token,errorMessage:`Failed to evaluate default value expression: ${L(u)}`});if(n=A.$.env,c=(b=A.$)==null?void 0:b.value,!c)throw d({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${L(u)}`});let S=A.$.type;if(k){if(!ae({type:k.type,env:n},{type:S,env:n}))throw d({token:u.token,errorMessage:`Default value type mismatch:
10566
10584
  Expected type: ${D(k.type)}
10567
- Given type: ${D(S)}`});m=k.type}else m=S}if(!m)throw d({token:e.token,errorMessage:"Failed to infer the element type"});if(i!=="tuple"&&!s)throw d({token:e.token,errorMessage:`Expected label for ${i} field, got ${L(a)}`});return s&&(s.$={env:n,type:m,value:f??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:se,type:se.type,pathCollection:[]}),pi(m,e.token),{field:{label:o??`${t}`,type:m,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f},env:n}}function ym({expr:e,env:t,context:n}){var s,l;if(!T(e,M.enum))throw d({token:e.token,errorMessage:`Expected "enum", got:
10585
+ Given type: ${D(S)}`});m=k.type}else m=S}if(!m)throw d({token:e.token,errorMessage:"Failed to infer the element type"});if(i!=="tuple"&&!s)throw d({token:e.token,errorMessage:`Expected label for ${i} field, got ${L(a)}`});return s&&(s.$={env:n,type:m,value:f??c??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:se,type:se.type,pathCollection:[]}),pi(m,e.token),{field:{label:o??`${t}`,type:m,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f},env:n}}function gm({expr:e,env:t,context:n}){var s,l;if(!T(e,M.enum))throw d({token:e.token,errorMessage:`Expected "enum", got:
10568
10586
  ${L(e)}`});let r=kc(t);_l({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=r.variants,o=0n;for(let u=0;u<e.args.length;u++){let c=e.args[u];if(I(c)&&T(c,"=",2)&&X(c.args[0])){let _=c.args[0],f=c.args[1];if(!kt(_))throw d({token:_.token,errorMessage:`Expected identifier for enum variant, got:
10569
10587
  ${L(_)}`});let p=_.token.value;if(i.some(v=>v.name===p))throw d({token:_.token,errorMessage:`Duplicate variant name "${p}" in enum`});let m=U({expr:f,env:t,context:{...n,SelfType:r}});if(!m.$)throw d({token:f.token,errorMessage:`Failed to evaluate discriminant value: ${L(f)}`});t=m.$.env;let y=m.$.value,g=m.$.type;if(!gr(y)&&!rn(g))throw d({token:f.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${L(f)}`});if(!gr(y))throw d({token:f.token,errorMessage:`Enum discriminant must be a compile-time known value, got: ${L(f)}`});let h=typeof y.value=="bigint"?y.value:BigInt(y.value);i.push({name:p,discriminant:h}),o=h+1n}else{if(I(c)&&(T(c,"::",2)||T(c,"?=",2)))throw d({token:c.token,errorMessage:'Please use "impl" block to define members/methods for enum types.'});if(X(c)){let _=c.token.value;if(!kt(c))throw d({token:c.token,errorMessage:`Expected identifier for enum variant, got:
10570
10588
  ${L(c)}`});if(i.some(f=>f.name===_))throw d({token:c.token,errorMessage:`Duplicate variant name "${_}" in enum`});i.push({name:_,discriminant:o}),o+=1n}else{let _=c,f;if(T(c,"=",2)){_=c.args[0];let g=c.args[1],h=U({expr:g,env:t,context:{...n,SelfType:r}});if(!h.$)throw d({token:g.token,errorMessage:`Failed to evaluate discriminant value: ${L(g)}`});t=h.$.env;let v=h.$.value;if(!gr(v))throw d({token:g.token,errorMessage:`Enum discriminant must be a compile-time integer, got: ${L(g)}`});f=typeof v.value=="bigint"?v.value:BigInt(v.value)}if(T(_,":"))throw d({token:_.token,errorMessage:"Enum variant with : is not implemented yet"});if(!I(_)||!kt(_.func))throw d({token:_.token,errorMessage:`Expected identifier for enum variant, got:
10571
- ${L(_)}`});let p=_.func.token.value;if(i.some(g=>g.name===p))throw d({token:_.func.token,errorMessage:`Duplicate variant name "${p}" in enum`});let m=[];for(let g=0;g<_.args.length;g++){let h=_.args[g],{field:v,env:$}=Pi({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:r},forType:"enum"});if(m.find(C=>C.label===v.label))throw d({token:I(h)?((s=h.args[0])==null?void 0:s.token)??h.token:h.token,errorMessage:`Duplicate field label "${v.label}" in enum variant`});if(v.assignedValue)throw d({token:((l=v.exprs.assignedValueExpr)==null?void 0:l.token)??v.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});m.push(v),t=$}let y=f??o;i.push({name:p,fields:m,discriminant:y}),o=y+1n}}}t=_c({enumType:r,env:t,context:n,errorToken:e.token});let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function gm({expr:e,env:t,context:n}){if(!T(e,"->",2))throw d({token:e.token,errorMessage:`Expected -> operator for Fn trait type, got:
10589
+ ${L(_)}`});let p=_.func.token.value;if(i.some(g=>g.name===p))throw d({token:_.func.token,errorMessage:`Duplicate variant name "${p}" in enum`});let m=[];for(let g=0;g<_.args.length;g++){let h=_.args[g],{field:v,env:$}=Pi({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:r},forType:"enum"});if(m.find(C=>C.label===v.label))throw d({token:I(h)?((s=h.args[0])==null?void 0:s.token)??h.token:h.token,errorMessage:`Duplicate field label "${v.label}" in enum variant`});if(v.assignedValue)throw d({token:((l=v.exprs.assignedValueExpr)==null?void 0:l.token)??v.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});m.push(v),t=$}let y=f??o;i.push({name:p,fields:m,discriminant:y}),o=y+1n}}}t=_c({enumType:r,env:t,context:n,errorToken:e.token});let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function hm({expr:e,env:t,context:n}){if(!T(e,"->",2))throw d({token:e.token,errorMessage:`Expected -> operator for Fn trait type, got:
10572
10590
  ${L(e)}`});let r=e.args[0],i=e.args[1];if(!I(r)||!T(r,M.Fn))throw d({token:r.token,errorMessage:`Expected Fn(...) for function trait, got:
10573
10591
  ${L(r)}`});let o=r.args,{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:_}=ku({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}}),f=U({expr:i,env:_,context:{...n,isEvaluatingFunctionType:!0}});if(!f.$)throw d({token:i.token,errorMessage:"Failed to evaluate return type for Fn trait."});let p=f.$.value,m;if(W(p))m=p.value;else throw d({token:i.token,errorMessage:`Expected a type for Fn return type, got:
10574
- ${L(i)}`});let y=eo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:m,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${$t(t.modulePath)}`},env:Yt(_,!0),parametersFrame:_.frames[_.frames.length-1],isClosure:!0}),g=ut(Yt(_,!0));return g.isFn={callType:y},t=Yt(_,!0),e.$={env:t,type:pn(g),value:ye(g),pathCollection:[]},e}function hm({expr:e,env:t,context:n}){if(e.args.length<1)throw d({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=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
10592
+ ${L(i)}`});let y=eo({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:m,typeExpr:i,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${$t(t.modulePath)}`},env:Yt(_,!0),parametersFrame:_.frames[_.frames.length-1],isClosure:!0}),g=ut(Yt(_,!0));return g.isFn={callType:y},t=Yt(_,!0),e.$={env:t,type:dn(g),value:ye(g),pathCollection:[]},e}function vm({expr:e,env:t,context:n}){if(e.args.length<1)throw d({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=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
10575
10593
  ${L(r)}`});if(t=i.$.env,!W(i.$.value))throw d({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
10576
- ${L(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],_=sv(c,t,n);a.push(_.effect),t=_.env}let s=ut(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:pn(s),value:ye(s),pathCollection:[]},e}function sv(e,t,n){if(I(e)&&T(e,"...")&&e.args.length===1&&X(e.args[0]))return lv(e,t);let r=U({expr:e,env:t,context:{...n}});if(!r.$||!W(r.$.value))throw d({token:e.token,errorMessage:`Future effect argument must be an effect type or ...(E) spread, but got:
10577
- ${L(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:uv(i,e),type:i,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!1,isQuote:!1,isOwningTheRcValue:!1,exprs:ro({expr:e,labelExpr:void 0,typeExpr:e,defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function lv(e,t){var l;let n=e.args[0].token.value,i=_e(t,n).at(-1);if(!i)throw d({token:e.token,errorMessage:`Effect row variable "${n}" not found in scope. Declare it with forall(..., ...(${n}))`});let o=(l=i.value)==null?void 0:l[0],a;if(o&&W(o))if(z(o.value)&&o.value.isEffectsRow||Ut(o.value))a=o.value;else throw d({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&&Oe(o)&&Ut(o.type))a=o.type;else if(o&&Oe(o)&&z(o.type)&&o.type.isEffectsRow)a=o.type;else if(o&&Oe(o)&&bt(o.type))a=no(n,t);else throw d({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:ro({expr:e,labelExpr:e.args[0],typeExpr:e.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function uv(e,t){return We(e)&&e.typeName?e.typeName:z(e)&&e.name?e.name:L(t)}function Ya({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:i}){var g,h,v,$,E,C;let o,a=e,s,l,u,c,_,f,p;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw d({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
10594
+ ${L(r)}`});let o=i.$.value.value,a=[];for(let u=1;u<e.args.length;u++){let c=e.args[u],_=lv(c,t,n);a.push(_.effect),t=_.env}let s=ut(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:dn(s),value:ye(s),pathCollection:[]},e}function lv(e,t,n){if(I(e)&&T(e,"...")&&e.args.length===1&&X(e.args[0]))return uv(e,t);let r=U({expr:e,env:t,context:{...n}});if(!r.$||!W(r.$.value))throw d({token:e.token,errorMessage:`Future effect argument must be an effect type or ...(E) spread, but got:
10595
+ ${L(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:cv(i,e),type:i,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!1,isQuote:!1,isOwningTheRcValue:!1,exprs:ro({expr:e,labelExpr:void 0,typeExpr:e,defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function uv(e,t){var l;let n=e.args[0].token.value,i=_e(t,n).at(-1);if(!i)throw d({token:e.token,errorMessage:`Effect row variable "${n}" not found in scope. Declare it with forall(..., ...(${n}))`});let o=(l=i.value)==null?void 0:l[0],a;if(o&&W(o))if(z(o.value)&&o.value.isEffectsRow||Ut(o.value))a=o.value;else throw d({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&&Oe(o)&&Ut(o.type))a=o.type;else if(o&&Oe(o)&&z(o.type)&&o.type.isEffectsRow)a=o.type;else if(o&&Oe(o)&&bt(o.type))a=no(n,t);else throw d({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:ro({expr:e,labelExpr:e.args[0],typeExpr:e.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})},env:t}}function cv(e,t){return We(e)&&e.typeName?e.typeName:z(e)&&e.name?e.name:L(t)}function Ya({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:i}){var g,h,v,$,E,C;let o,a=e,s,l,u,c,_,f,p;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw d({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
10578
10596
  All module fields are compile-time only by default.`});_=a.args[1],a=a.args[0]}if(u&&_)throw d({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,M.comptime,1))throw d({token:s.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!X(s)&&!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${L(s)}`});o=s.token.value}else{if(I(a)&&T(a,M.comptime,1))throw d({token:a.token,errorMessage:'No need to use "comptime" modifier. All module fields are compile-time only by default.'});if(!u&&!_)throw d({token:e.token,errorMessage:`Expected label for module field, got ${L(a)}`});if(s=a,!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for module field label, got ${L(s)}`});if(!X(s)&&!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for module field label, got ${L(s)}`});o=s.token.value}let m=(g=r.expectedType)==null?void 0:g.type,y;if(m&&We(m)){let w=m.fields[t];if(!w)throw d({token:e.token,errorMessage:`Failed to get the field at index ${t}`});y=w.type}if(l){let w=U({expr:l,env:n,context:{...r,expectedType:y?{type:y,env:n}:void 0}});(h=w.$)!=null&&h.env&&(n=(v=w.$)==null?void 0:v.env);let b=($=w.$)==null?void 0:$.value;if(!W(b))throw d({token:l.token,errorMessage:`Expected type for module field, got ${L(l)}`});p=b.value}if(_){let w=p?{type:p,env:n}:y?{type:y,env:n}:void 0,b=U({expr:_,env:n,context:{...r,expectedType:w}});if(!b.$)throw d({token:_.token,errorMessage:`Failed to evaluate required value expression: ${L(_)}`});if(n=(E=b.$)==null?void 0:E.env,f=b.$.value,!f)throw d({token:_.token,errorMessage:`Expected compile-time known value for required value, got ${L(_)}`});let k=b.$.type;if(w){if(!ae({type:w.type,env:n},{type:k,env:n}))throw d({token:_.token,errorMessage:`Assigned value type mismatch:
10579
10597
  Expected type: ${D(w.type)}
10580
10598
  Given type: ${D(k)}`});p=w.type}else p=k}if(u){let w=p?{type:p,env:n}:y?{type:y,env:n}:void 0,b=U({expr:u,env:n,context:{...r,expectedType:w}});if(!b.$)throw d({token:u.token,errorMessage:`Failed to evaluate default value expression: ${L(u)}`});if(n=b.$.env,c=(C=b.$)==null?void 0:C.value,!c)throw d({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${L(u)}`});let k=b.$.type;if(w){if(!ae({type:w.type,env:n},{type:k,env:n}))throw d({token:u.token,errorMessage:`Default value type mismatch:
@@ -10585,16 +10603,16 @@ Type expressions are required for all function parameters in module fields to su
10585
10603
  Type expressions are required for return types in module fields to support proper type specialization.`})}if(i&&u&&!J(p))throw d({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elements (excluding closures).
10586
10604
  Module field "${o??"unnamed"}" has type: ${D(p)}
10587
10605
 
10588
- To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:p,value:f??ue(p,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:se,type:se.type,pathCollection:[]}),{field:{label:o??`__field_${$t(n.modulePath)}`,type:p,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f},env:n}}function vm({expr:e,env:t,context:n}){var s;if(!T(e,M.module))throw d({token:e.token,errorMessage:`Expected "module", got:
10606
+ To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:p,value:f??ue(p,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:se,type:se.type,pathCollection:[]}),{field:{label:o??`__field_${$t(n.modulePath)}`,type:p,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f},env:n}}function Tm({expr:e,env:t,context:n}){var s;if(!T(e,M.module))throw d({token:e.token,errorMessage:`Expected "module", got:
10589
10607
  ${L(e)}`});let r=ys(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let o=e.args;for(let l=0;l<o.length;l++){let u=o[l];if(I(u)&&T(u,"...",1)){let c=u.args[0],_=U({expr:c,env:t,context:{...n,SelfType:void 0}});if(!_.$)throw d({token:c.token,errorMessage:`Failed to evaluate the extended struct expression: ${L(c)}`});let f=_.$.value;if(W(f)&&We(f.value)||Oe(f)&&We(f.type)){let p;W(f)&&We(f.value)?p=f.value:p=f.type;for(let m of p.fields){let y=i.findIndex(g=>g.label===m.label);if(y>=0){if(i[y].assignedValue&&m.assignedValue&&gn({value:i[y].assignedValue,env:t},{value:m.assignedValue,env:t})||!i[y].assignedValue&&!m.assignedValue&&ae({type:i[y].type,env:t},{type:m.type,env:t}))continue;throw console.log(!!i[y].assignedValue,!!m.assignedValue),console.log(D(i[y].type),`
10590
10608
  `,D(m.type),`
10591
10609
  `,ae({type:i[y].type,env:t},{type:m.type,env:t})),d({token:c.token,errorMessage:`Duplicate label 1 "${m.label}" in module`})}else i.push(m)}}else if(Et(f)){let p=f;for(let m=0;m<p.fields.length;m++){let y=p.fields[m],g=p.type.fields[m],h=i.findIndex(v=>v.label===g.label);if(h>=0){if(i[h].assignedValue&&g.assignedValue&&gn({value:i[h].assignedValue,env:t},{value:g.assignedValue,env:t})||!i[h].assignedValue&&!g.assignedValue&&ae({type:i[h].type,env:t},{type:g.type,env:t}))continue;throw d({token:c.token,errorMessage:`Duplicate label 2 "${g.label}" in module`})}else i.push({...p.type.fields[m],assignedValue:y})}}else throw d({token:c.token,errorMessage:`Expected a Module type or value for extending, got ${L(c)}`})}else{let{field:c,env:_}=Ya({expr:u,env:t,moduleFieldIndex:l,context:{...n,SelfType:void 0,SelfModuleType:r},isForEvaluatingModuleType:!0});if(i.find(p=>p.label===c.label))throw d({token:I(u)?((s=u.args[0])==null?void 0:s.token)??u.token:u.token,errorMessage:`Duplicate label 3 "${c.label}" in module`});i.push(c),t=_}}let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function aa({expr:e,env:t,context:n}){var _;let r=T(e,M.object),i=T(e,M.struct),o=T(e,M.newtype);if(!i&&!r&&!o)throw d({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
10592
- ${L(e)}`});let a=r,s=o,l=Ji(t,a,s);cl({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.trait.definedInModulePath=n.currentModulePath);let u=l.fields;for(let f=0;f<e.args.length;f++){let p=e.args[f];{let{field:m,env:y}=Pi({expr:p,env:t,tupleFieldIndex:f,context:{...n,SelfType:l},forType:"struct"});if(u.find(h=>h.label===m.label))throw d({token:I(p)?((_=p.args[0])==null?void 0:_.token)??p.token:p.token,errorMessage:`Duplicate label "${m.label}" in struct`});u.push(m),t=y}}if(s&&u.length!==1)throw d({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=Qi({structType:l,env:t,context:n,errorToken:e.token});let c=ye(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e.func.$=e.$,e}function Tm({expr:e,env:t,context:n}){return Ge(e,M.newtype),aa({expr:e,env:t,context:n})}function Em({expr:e,env:t,context:n}){if(!T(e,M.object))throw d({token:e.token,errorMessage:`Expected "object", got:
10593
- ${L(e)}`});return aa({expr:e,env:t,context:n})}function $m({expr:e,env:t,context:n}){Ge(e,M.Slice,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10610
+ ${L(e)}`});let a=r,s=o,l=Ji(t,a,s);cl({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.trait.definedInModulePath=n.currentModulePath);let u=l.fields;for(let f=0;f<e.args.length;f++){let p=e.args[f];{let{field:m,env:y}=Pi({expr:p,env:t,tupleFieldIndex:f,context:{...n,SelfType:l},forType:"struct"});if(u.find(h=>h.label===m.label))throw d({token:I(p)?((_=p.args[0])==null?void 0:_.token)??p.token:p.token,errorMessage:`Duplicate label "${m.label}" in struct`});u.push(m),t=y}}if(s&&u.length!==1)throw d({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=Qi({structType:l,env:t,context:n,errorToken:e.token});let c=ye(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e.func.$=e.$,e}function Em({expr:e,env:t,context:n}){return Ge(e,M.newtype),aa({expr:e,env:t,context:n})}function $m({expr:e,env:t,context:n}){if(!T(e,M.object))throw d({token:e.token,errorMessage:`Expected "object", got:
10611
+ ${L(e)}`});return aa({expr:e,env:t,context:n})}function Cm({expr:e,env:t,context:n}){Ge(e,M.Slice,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression:
10594
10612
  ${L(r)}`});if(!W(i.$.value))throw d({token:r.token,errorMessage:`Expected type for element type, got:
10595
10613
  ${L(r)}
10596
10614
 
10597
- 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=ms(o),s=ye(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function bm({lhsExpr:e,env:t,context:n,selfType:r}){if(X(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(X(e)){let a=e.token.value,s=_e(t,a);if(s.length>0){let _=s[s.length-1];if(_.value&&W(_.value[0])&&z(_.value[0].value))return{env:t,someType:_.value[0].value,isSelf:!1}}let l=fr(Mt(),a,{env:t,context:n}),u=ye(l),{env:c}=Pe({env:t,variable:{name:a,type:pn(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=U({expr:e,env:t,context:{...n,SelfType:r}});if(!i.$||!i.$.value||!W(i.$.value))throw d({token:e.token,errorMessage:"Expected type for left-hand side of where clause constraint."});let o=i.$.value;if(!z(o.value))throw d({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${D(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function cv({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;I(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=bm({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=U({expr:s,env:n,context:{...r,SelfType:i}})}catch{return{env:n,success:!1}}if(!u.$||!u.$.value||!W(u.$.value))return{env:n,success:!1};n=u.$.env;let c=u.$.value;if(!st(c.value))throw d({token:s.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(c.value)}`});let _=c.value;if(_.receiverType)throw d({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 f=n.frames.length-1;a?l.someType.negativeTraits.some(p=>p.traitType.id===_.id)||l.someType.negativeTraits.push({traitType:_,frameLevel:f}):l.someType.requiredTraits.some(p=>p.traitType.id===_.id)||l.someType.requiredTraits.push({traitType:_,frameLevel:f})}return n=Gr({env:n,someType:l.someType,traitType:_,isNegated:a}),{env:n,success:!0}}function Cm({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!I(s)||!T(s,"<:",2))throw d({token:s.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${L(s)}`});let l=s.args[0],u=s.args[1],c;try{c=bm({lhsExpr:l,env:t,context:n,selfType:r})}catch{if(o){a.push({lhsExpr:l,traitExpr:u,originalConstraintExpr:s});continue}throw d({token:l.token,errorMessage:"Expected type for left-hand side of where clause constraint."})}t=c.env;let _=[];I(u)&&T(u,M.tuple)?_.push(...u.args):_.push(u);for(let f of _){let p=!1,m=f;I(f)&&T(f,"!")&&f.args.length===1&&(p=!0,m=f.args[0]);let y;try{y=U({expr:m,env:t,context:{...n,SelfType:r,SelfTraitType:i}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw v}if(!y.$||!y.$.value||!W(y.$.value)){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw d({token:m.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=y.$.env;let g=y.$.value;if(!st(g.value))throw d({token:m.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(g.value)}`});let h=g.value;if(h.receiverType)throw d({token:m.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});c.isSelf&&(i.selfConstraints||(i.selfConstraints=[]),i.negativeSelfConstraints||(i.negativeSelfConstraints=[]),p?i.negativeSelfConstraints.push(h):i.selfConstraints.push(h)),t=Gr({env:t,someType:c.someType,traitType:h,isNegated:p})}}return{env:t,pendingTraits:a}}function _v({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){var h,v,$,E,C,w;let o,a=e,s,l,u,c,_,f,p;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw d({token:a.token,errorMessage:`Cannot use "::" for trait field. Use ":=" instead.
10615
+ 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=ms(o),s=ye(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function km({lhsExpr:e,env:t,context:n,selfType:r}){if(X(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(X(e)){let a=e.token.value,s=_e(t,a);if(s.length>0){let _=s[s.length-1];if(_.value&&W(_.value[0])&&z(_.value[0].value))return{env:t,someType:_.value[0].value,isSelf:!1}}let l=fr(Mt(),a,{env:t,context:n}),u=ye(l),{env:c}=Pe({env:t,variable:{name:a,type:dn(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=U({expr:e,env:t,context:{...n,SelfType:r}});if(!i.$||!i.$.value||!W(i.$.value))throw d({token:e.token,errorMessage:"Expected type for left-hand side of where clause constraint."});let o=i.$.value;if(!z(o.value))throw d({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${D(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function _v({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;I(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=km({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=U({expr:s,env:n,context:{...r,SelfType:i}})}catch{return{env:n,success:!1}}if(!u.$||!u.$.value||!W(u.$.value))return{env:n,success:!1};n=u.$.env;let c=u.$.value;if(!st(c.value))throw d({token:s.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(c.value)}`});let _=c.value;if(_.receiverType)throw d({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 f=n.frames.length-1;a?l.someType.negativeTraits.some(p=>p.traitType.id===_.id)||l.someType.negativeTraits.push({traitType:_,frameLevel:f}):l.someType.requiredTraits.some(p=>p.traitType.id===_.id)||l.someType.requiredTraits.push({traitType:_,frameLevel:f})}return n=Gr({env:n,someType:l.someType,traitType:_,isNegated:a}),{env:n,success:!0}}function bm({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!I(s)||!T(s,"<:",2))throw d({token:s.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${L(s)}`});let l=s.args[0],u=s.args[1],c;try{c=km({lhsExpr:l,env:t,context:n,selfType:r})}catch{if(o){a.push({lhsExpr:l,traitExpr:u,originalConstraintExpr:s});continue}throw d({token:l.token,errorMessage:"Expected type for left-hand side of where clause constraint."})}t=c.env;let _=[];I(u)&&T(u,M.tuple)?_.push(...u.args):_.push(u);for(let f of _){let p=!1,m=f;I(f)&&T(f,"!")&&f.args.length===1&&(p=!0,m=f.args[0]);let y;try{y=U({expr:m,env:t,context:{...n,SelfType:r,SelfTraitType:i}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw v}if(!y.$||!y.$.value||!W(y.$.value)){if(o){a.push({lhsExpr:l,traitExpr:f,originalConstraintExpr:s});continue}throw d({token:m.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=y.$.env;let g=y.$.value;if(!st(g.value))throw d({token:m.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${D(g.value)}`});let h=g.value;if(h.receiverType)throw d({token:m.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});c.isSelf&&(i.selfConstraints||(i.selfConstraints=[]),i.negativeSelfConstraints||(i.negativeSelfConstraints=[]),p?i.negativeSelfConstraints.push(h):i.selfConstraints.push(h)),t=Gr({env:t,someType:c.someType,traitType:h,isNegated:p})}}return{env:t,pendingTraits:a}}function fv({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){var h,v,$,E,C,w;let o,a=e,s,l,u,c,_,f,p;if(I(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),I(a)&&(T(a,"=",2)||T(a,"::",2)||T(a,":=",2))){if(T(a,"::",2))throw d({token:a.token,errorMessage:`Cannot use "::" for trait field. Use ":=" instead.
10598
10616
  All trait fields are compile-time only by default.`});_=a.args[1],a=a.args[0]}if(u&&_)throw d({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(I(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],I(s)&&T(s,M.comptime,1))throw d({token:s.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!X(s)&&!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${L(s)}`});o=s.token.value}else{if(I(a)&&T(a,M.comptime,1))throw d({token:a.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!u&&!_)throw d({token:e.token,errorMessage:`Expected label for trait field, got ${L(a)}`});if(s=a,!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for trait field label, got ${L(s)}`});if(!X(s)&&!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for trait field label, got ${L(s)}`});o=s.token.value}let m=(h=r.expectedType)==null?void 0:h.type,y;if(m&&st(m)){let b=m.fields[t];if(!b)throw d({token:e.token,errorMessage:`Failed to get the field at index ${t}`});y=b.type}if(l){let b=U({expr:l,env:n,context:{...r,expectedType:y?{type:y,env:n}:void 0}});(v=b.$)!=null&&v.env&&(n=($=b.$)==null?void 0:$.env);let k=(E=b.$)==null?void 0:E.value;if(!W(k))throw d({token:l.token,errorMessage:`Expected type for trait field, got ${L(l)}`});p=k.value}if(_){let b=p?{type:p,env:n}:y?{type:y,env:n}:void 0,k=U({expr:_,env:n,context:{...r,expectedType:b}});if(!k.$)throw d({token:_.token,errorMessage:`Failed to evaluate required value expression: ${L(_)}`});if(n=(C=k.$)==null?void 0:C.env,f=k.$.value,!f)throw d({token:_.token,errorMessage:`Expected compile-time known value for required value, got ${L(_)}`});let A=k.$.type;if(b){if(!ae({type:b.type,env:n},{type:A,env:n}))throw d({token:_.token,errorMessage:`Assigned value type mismatch:
10599
10617
  Expected type: ${D(b.type)}
10600
10618
  Given type: ${D(A)}`});p=b.type}else p=A}if(u){let b=p?{type:p,env:n}:y?{type:y,env:n}:void 0,k=U({expr:u,env:n,context:{...r,expectedType:b}});if(!k.$)throw d({token:u.token,errorMessage:`Failed to evaluate default value expression: ${L(u)}`});if(n=k.$.env,c=(w=k.$)==null?void 0:w.value,!c)throw d({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${L(u)}`});let A=k.$.type;if(b){if(!ae({type:b.type,env:n},{type:A,env:n}))throw d({token:u.token,errorMessage:`Default value type mismatch:
@@ -10606,8 +10624,8 @@ Type expressions are required for all function parameters in trait fields to sup
10606
10624
  Type expressions are required for return types in trait fields to support proper type specialization.`})}if(i&&u&&!J(p))throw d({token:u.token,errorMessage:`Default values (?=) are only allowed for function type trait elements (excluding closures).
10607
10625
  Trait field "${o??"unnamed"}" has type: ${D(p)}
10608
10626
 
10609
- To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:p,value:f??ue(p,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:se,type:se.type,pathCollection:[]});let g;if(i&&!f&&bt(p)&&p.level===0){if(o){let b=_e(n,o),k=b[b.length-1];k!=null&&k.value&&W(k.value[0])&&z(k.value[0].value)&&(g=k.value[0].value)}g||(g=fr(p,o??`__associated_type_${$t(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${$t(n.modulePath)}`,type:p,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f,unassignedSomeType:g},env:n}}function km({expr:e,env:t,context:n}){var f,p;if(!T(e,M.trait))throw d({token:e.token,errorMessage:`Expected "trait", got:
10610
- ${L(e)}`});let r=ut(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=yt(t);let o=e.args,a=fr(Mt(),"Self",{env:t,context:n});a.trait=r,Er(t,"Runtime")&&(t=Bn("Runtime",a,t,n));let l;if(o.length>0){let m=o[o.length-1];if(I(m)&&T(m,M.where)&&(l=m.args,l.length===0))throw d({token:m.token,errorMessage:"The where clause must have at least one constraint."})}let u=[],c={...n,SelfTraitType:r};if(l&&l.length>0){let m=Cm({constraintExprs:l,env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!0});t=m.env,u=m.pendingTraits}for(let m=0;m<o.length;m++){let y=o[m];if(I(y)&&T(y,M.where)){if(m!==o.length-1)throw d({token:y.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:g,env:h}=_v({expr:y,env:t,traitFieldIndex:m,context:{...c,SelfType:a,SelfTraitType:r},isForEvaluatingTraitType:!0});if(i.find($=>$.label===g.label))throw d({token:I(y)?((f=y.args[0])==null?void 0:f.token)??y.token:y.token,errorMessage:`Duplicate label 3 "${g.label}" in trait`});if(i.push(g),t=h,g.unassignedSomeType){let $=_e(t,g.label),E=$[$.length-1],C=E!=null&&E.value&&W(E.value[0])&&z(E.value[0].value)?E.value[0].value:void 0;if((C==null?void 0:C.id)!==g.unassignedSomeType.id){let w=ye(g.unassignedSomeType),b=((p=g.exprs.labelExpr)==null?void 0:p.token)??g.exprs.expr.token??y.token,{env:k}=Pe({env:t,variable:{name:g.label,type:w.type,isCompileTimeOnly:!0,value:[w],token:b,initializedAtToken:b,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=k}}}}if(u.length>0){let m=[];for(let y of u){let g=cv({lhsExpr:y.lhsExpr,traitExpr:y.traitExpr,originalConstraintExpr:y.originalConstraintExpr,env:t,context:c,selfType:a,traitType:r});t=g.env,g.success||m.push(y)}if(m.length>0){let y=m[0];Cm({constraintExprs:[y.originalConstraintExpr],env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!1})}}t=Yt(t,!0);let _=ye(r);return e.$={env:t,value:_,type:_.type,pathCollection:[]},e.func.$=e.$,e}function fv({args:e,env:t,context:n,forType:r}){var a;let i=[];for(let s=0;s<e.length;s++){let l=e[s],{field:u,env:c}=Pi({expr:l,env:t,tupleFieldIndex:s,context:{...n},forType:r});if(u.label&&i.find(f=>f.label===u.label))throw d({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in tuple`});i.push(u),t=c}return{type:Ro(i),env:t}}function wm({expr:e,env:t,context:n}){if(e.args.length===0){let o=ye($r());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=fv({args:e.args,env:t,context:{...n},forType:"tuple"});return t=i,r.fields.forEach(o=>{if(o.exprs.defaultValueExpr)throw d({token:o.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),t=fc({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:ye(r),type:pn(r),pathCollection:[]},e}function Fm({expr:e,env:t,context:n}){var s,l;if(!T(e,M.union))throw d({token:e.token,errorMessage:`Expected "union", got:
10627
+ To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:p,value:f??ue(p,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:se,type:se.type,pathCollection:[]});let g;if(i&&!f&&bt(p)&&p.level===0){if(o){let b=_e(n,o),k=b[b.length-1];k!=null&&k.value&&W(k.value[0])&&z(k.value[0].value)&&(g=k.value[0].value)}g||(g=fr(p,o??`__associated_type_${$t(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${$t(n.modulePath)}`,type:p,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f,unassignedSomeType:g},env:n}}function wm({expr:e,env:t,context:n}){var f,p;if(!T(e,M.trait))throw d({token:e.token,errorMessage:`Expected "trait", got:
10628
+ ${L(e)}`});let r=ut(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=yt(t);let o=e.args,a=fr(Mt(),"Self",{env:t,context:n});a.trait=r,Er(t,"Runtime")&&(t=Bn("Runtime",a,t,n));let l;if(o.length>0){let m=o[o.length-1];if(I(m)&&T(m,M.where)&&(l=m.args,l.length===0))throw d({token:m.token,errorMessage:"The where clause must have at least one constraint."})}let u=[],c={...n,SelfTraitType:r};if(l&&l.length>0){let m=bm({constraintExprs:l,env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!0});t=m.env,u=m.pendingTraits}for(let m=0;m<o.length;m++){let y=o[m];if(I(y)&&T(y,M.where)){if(m!==o.length-1)throw d({token:y.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:g,env:h}=fv({expr:y,env:t,traitFieldIndex:m,context:{...c,SelfType:a,SelfTraitType:r},isForEvaluatingTraitType:!0});if(i.find($=>$.label===g.label))throw d({token:I(y)?((f=y.args[0])==null?void 0:f.token)??y.token:y.token,errorMessage:`Duplicate label 3 "${g.label}" in trait`});if(i.push(g),t=h,g.unassignedSomeType){let $=_e(t,g.label),E=$[$.length-1],C=E!=null&&E.value&&W(E.value[0])&&z(E.value[0].value)?E.value[0].value:void 0;if((C==null?void 0:C.id)!==g.unassignedSomeType.id){let w=ye(g.unassignedSomeType),b=((p=g.exprs.labelExpr)==null?void 0:p.token)??g.exprs.expr.token??y.token,{env:k}=Pe({env:t,variable:{name:g.label,type:w.type,isCompileTimeOnly:!0,value:[w],token:b,initializedAtToken:b,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=k}}}}if(u.length>0){let m=[];for(let y of u){let g=_v({lhsExpr:y.lhsExpr,traitExpr:y.traitExpr,originalConstraintExpr:y.originalConstraintExpr,env:t,context:c,selfType:a,traitType:r});t=g.env,g.success||m.push(y)}if(m.length>0){let y=m[0];bm({constraintExprs:[y.originalConstraintExpr],env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!1})}}t=Yt(t,!0);let _=ye(r);return e.$={env:t,value:_,type:_.type,pathCollection:[]},e.func.$=e.$,e}function pv({args:e,env:t,context:n,forType:r}){var a;let i=[];for(let s=0;s<e.length;s++){let l=e[s],{field:u,env:c}=Pi({expr:l,env:t,tupleFieldIndex:s,context:{...n},forType:r});if(u.label&&i.find(f=>f.label===u.label))throw d({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in tuple`});i.push(u),t=c}return{type:Ro(i),env:t}}function Fm({expr:e,env:t,context:n}){if(e.args.length===0){let o=ye($r());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=pv({args:e.args,env:t,context:{...n},forType:"tuple"});return t=i,r.fields.forEach(o=>{if(o.exprs.defaultValueExpr)throw d({token:o.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),t=fc({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:ye(r),type:dn(r),pathCollection:[]},e}function Lm({expr:e,env:t,context:n}){var s,l;if(!T(e,M.union))throw d({token:e.token,errorMessage:`Expected "union", got:
10611
10629
  ${L(e)}`});let r=wc(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let u=0;u<o.length;u++){let c=o[u],{field:_,env:f}=Pi({expr:c,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(i.find(m=>m.label===_.label))throw d({token:I(c)?((s=c.args[0])==null?void 0:s.token)??c.token:c.token,errorMessage:`Duplicate label "${_.label}" in union field.`});if(_.defaultValue)throw d({token:((l=_.exprs.defaultValueExpr)==null?void 0:l.token)??_.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(Zi(_.type,t)||!mi(_.type,t))throw d({token:_.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(Je(_.type))throw d({token:_.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(_),t=f}t=lc({unionType:r,env:t,context:n}),t=uc({unionType:r,env:t,context:n}),t=cc({unionType:r,env:t,context:n});let a=ye(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Hs({expr:e,env:t,context:n}){var K,j,ie,ce,ee,pe,Z,Ee,Fe,be,Ue;let r=(K=n.expectedType)==null?void 0:K.type;if(!r)throw d({token:e.token,errorMessage:`Expected a function type, got:
10612
10630
  ${L(e)}`});let i,o=!1,a,s;if(J(r))i=r;else if(z(r)){let te=Gn(r);if(te)a=te,i=te.isFn.callType,o=!0,s=r;else throw d({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
10613
10631
  ${D(r)}`})}else throw d({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
@@ -10619,23 +10637,23 @@ Got: "${Se}"`})}for(let te=0;te<i.forallParameters.length;te++){let le=p[te
10619
10637
  Expected: "${fe.label}"
10620
10638
  Got: "${Ft}"`})}let Se=le.token.value,it=fe.label,{env:ct}=Pe({env:t,variable:{name:Se,type:fe.type,isCompileTimeOnly:fe.isCompileTimeOnly,value:fe.isCompileTimeOnly?[ue(fe.type,{variableName:fe.label,env:t,context:n})]:void 0,token:le.token,initializedAtToken:le.token,consumedAtToken:void 0,isOwningTheRcValue:fe.isOwningTheRcValue,parameterAlias:Se!==it?it:void 0}});t=ct,le.$={env:t,type:fe.type,value:fe.isCompileTimeOnly?ue(fe.type,{variableName:fe.label,env:t,context:n}):void 0,pathCollection:[]}}let C=t.frames[t.frames.length-1],w={...i,forallParameters:i.forallParameters,implicitParameters:$?v:v.map((te,le)=>{let fe=m[le];if(fe&&X(fe)){let Se=fe.token.value;if(Se!==te.label)return{...te,label:Se}}return te}),parameters:i.parameters.map((te,le)=>{if(te.isCompileTimeOnly)return te;{let fe=y[le];return{...te,label:X(fe)?fe.token.value:te.label,exprs:{...te.exprs,expr:fe,labelExpr:fe,typeExpr:te.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:C,env:Is(i.env)};if((Z=w.whereClauseExprs)!=null&&Z.length){let te=w.whereClauseExprs.map(fe=>et(fe));t=Mi({constraintExprs:te,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:w,body:_,frameLevel:t.frames.length-1,funcId:`fn_${$t(t.modulePath)}`,definitionSiteEnclosingFunctionType:((Ee=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Ee.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},k=!!a,A=p.length>0||i.parameters.some(te=>Ze(te.type))||i.SelfType&&Ze(i.SelfType),S,V;if(A)wu({functionBodyExpr:_,functionType:i,functionValue:b,env:t,context:n}),_.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?ue(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},S={...n,isExecuting:!1,capturedVariables:new Map},V=_;else{let{evaluationContext:te}=ra({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,b,t);if(S=te,n.isInsideIoAsyncCall&&o&&(S={...S,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),V=nn({expr:_,env:t,context:S,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!V.$)throw d({token:_.token,errorMessage:"Failed to evaluate the function body."});t=V.$.env}let O=S.capturedVariables;if(Ur(V)&&(b.isControlFunction=!0),V.$&&(i.implicitParameters.some(te=>We(te.type))||n.isInsideIoAsyncCall)){let te=xc(V);te.hasAwaits&&(V.$.awaitAnalysis=te)}let x=(Fe=V.$)==null?void 0:Fe.type;if(z(i.return.type)&&!i.return.type.resolvedConcreteType&&x){let te=x;if(z(te)&&te.resolvedConcreteType&&(te=te.resolvedConcreteType),!z(te)){let le=Qt({type:te,expectedType:void 0,expr:V,env:t});i.return.type.resolvedConcreteType=le}}if(!b.isControlFunction&&x&&!ae({type:i.return.type,env:t},{type:x,env:t}))throw d({token:_.token,errorMessage:`Incompatible return type:
10621
10639
  - Expected: ${D(i.return.type)}
10622
- - Got : ${D(x)}`});(be=V.$)!=null&&be.env&&(t=(Ue=V.$)==null?void 0:Ue.env),t=Yt(t,!0),t=g;let N;if(k&&O&&O.size>0&&(N=Bs({capturedVariables:O,env:t})),k&&E.length>0){N||(N=new Map);for(let te of E)N.set(te.name,{frameLevel:0,usageType:"read",token:te.token,value:void 0,type:te.type,isEffectParam:!0})}let P,R,H,G,Q=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let te=Zo(b,t,n);te&&(Q=te)}if(o&&a&&s){G=zs({expectedCaptureType:void 0,capturedVariablesWithValues:N,env:t,closureToken:e.token,context:{...n}}).captureType;let le=Ac(w,t),{capturedVariableDupExpressions:fe,env:Se}=Gs({capturedVariablesWithValues:N,env:t,context:n});H=fe,t=Se,b.funcId=`closure_${$t(t.modulePath)}`,b.closureInfo={closureType:le,captureType:G,effectParamNames:E.length>0?E.map(it=>it.name):void 0},z(s)&&G&&Us({wrapperType:s,captureType:G,env:t,errorToken:e.token}),s.resolvedConcreteType=G,P={...s,resolvedConcreteType:G},R=void 0}else P=Q.type,R=Q;return e.$={env:t,type:P,value:R,pathCollection:k&&O?na(O):[],deferredDupExpressions:o&&H?H:void 0,captureType:o?G:void 0,closureFunctionValue:o?Q:void 0,isAnonymousFunctionDefinition:!0},k&&Tt(e,!0),e}function Lm({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw d({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&Xe(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let _=0;_<r.length;_++){let f=r[_],p=U({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(Vn(p,n),!p.$)throw d({token:f.token,errorMessage:`Failed to evaluate array element: ${L(f)}`});if(t=p.$.env,s.push(p.$.value),!o)o=a||p.$.type;else if(!ae({type:o,env:t},{type:p.$.type,env:t}))if(ae({type:Qt({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:p.$.type,env:t}))o=p.$.type;else throw d({token:f.token,errorMessage:`Array element type mismatch:
10640
+ - Got : ${D(x)}`});(be=V.$)!=null&&be.env&&(t=(Ue=V.$)==null?void 0:Ue.env),t=Yt(t,!0),t=g;let N;if(k&&O&&O.size>0&&(N=Bs({capturedVariables:O,env:t})),k&&E.length>0){N||(N=new Map);for(let te of E)N.set(te.name,{frameLevel:0,usageType:"read",token:te.token,value:void 0,type:te.type,isEffectParam:!0})}let P,R,H,G,Q=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let te=Zo(b,t,n);te&&(Q=te)}if(o&&a&&s){G=zs({expectedCaptureType:void 0,capturedVariablesWithValues:N,env:t,closureToken:e.token,context:{...n}}).captureType;let le=Ac(w,t),{capturedVariableDupExpressions:fe,env:Se}=Gs({capturedVariablesWithValues:N,env:t,context:n});H=fe,t=Se,b.funcId=`closure_${$t(t.modulePath)}`,b.closureInfo={closureType:le,captureType:G,effectParamNames:E.length>0?E.map(it=>it.name):void 0},z(s)&&G&&Us({wrapperType:s,captureType:G,env:t,errorToken:e.token}),s.resolvedConcreteType=G,P={...s,resolvedConcreteType:G},R=void 0}else P=Q.type,R=Q;return e.$={env:t,type:P,value:R,pathCollection:k&&O?na(O):[],deferredDupExpressions:o&&H?H:void 0,captureType:o?G:void 0,closureFunctionValue:o?Q:void 0,isAnonymousFunctionDefinition:!0},k&&Tt(e,!0),e}function Am({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw d({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&Xe(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let _=0;_<r.length;_++){let f=r[_],p=U({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(Vn(p,n),!p.$)throw d({token:f.token,errorMessage:`Failed to evaluate array element: ${L(f)}`});if(t=p.$.env,s.push(p.$.value),!o)o=a||p.$.type;else if(!ae({type:o,env:t},{type:p.$.type,env:t}))if(ae({type:Qt({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:p.$.type,env:t}))o=p.$.type;else throw d({token:f.token,errorMessage:`Array element type mismatch:
10623
10641
  Expected type: ${D(o)}
10624
- Given type: ${D(p.$.type)}`});l.push(p)}let u=ni(o,Pn("Usize",i)),c=s.every(_=>!!_)?ki(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},Tt(e,!0),e}function Am(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=jt(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function Im(e,t){if(e.token.type==="char"){let n=pv(e.token.value),r=Xr(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function pv(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 Sm({expr:e,env:t,context:n}){let r=[],i=e.args;if(i.length===0)throw d({token:e.token,errorMessage:`Expected at least one element in comptime_list, got ${i.length}`});let o;n.expectedType&&En(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=U({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw d({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
10625
- ${L(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!ae({type:o,env:t},{type:u.$.type,env:t}))throw d({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${D(o)}, got ${D(u.$.type)}`})}let a=Ar(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Nm(e,t,n){let i=_e(t,"Box").find(p=>p.value&&Ce(p.value[0])&&J(p.type));if(!i||!i.value||!Ce(i.value[0]))throw new Error("Cannot find Box type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=ye(e),u=yt(a.env),{env:c}=Pe({env:u,variable:{name:s.label,token:Ae,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ae,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:f}=ea({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Mt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!W(_)||!Ht(_.value))throw new Error("Box type constructor did not return a type value");return{boxType:_.value,env:f}}function dv(e,t,n){var r;try{let i=U({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(Ce(o))return!!_e(t,"box").find(l=>l.value&&Ce(l.value[0])&&l.value[0]===o);if(W(o)){let s=o.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function Vm({expr:e,env:t,context:n}){Ge(e,M.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&Ke(n.expectedType.type)){let g=n.expectedType.type;if(o=fr(Mt(),"",{requiredTraits:g.requiredTraits.map(h=>h.traitType),negativeTraits:g.negativeTraits.map(h=>h.traitType),env:t,context:n}),I(r)&&dv(r.func,t,{...n})&&T(r.args[0],"=>")){let{boxType:h,env:v}=Nm(o,t,n);t=v,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=U({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw d({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
10626
- ${L(r)}`});let s=a.$.type,l=s,u=a;if(!Ht(l)&&!(z(l)&&je(l))){let{boxType:g,env:h}=Nm(l,t,{...n});t=h;let v={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},$={tag:"FnCall",func:v,args:[a],token:r.token,$:void 0},E=U({expr:$,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!E.$)throw d({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
10627
- ${L(r)}`});t=E.$.env,l=E.$.type,u=E,e.args[0]=E}else t=a.$.env;Vn(u,n),t=u.$.env;let c=[],_=[],f=new Set,p;if(n.expectedType&&Ke(n.expectedType.type))p=n.expectedType.type;else if(cr(l)){let g=l.fields[0].type;if(g.trait){let h=[];for(let v of g.trait.fields)v.assignedValue&&on(v.assignedValue)&&h.push(v.assignedValue.type);p=Fa({requiredTraits:h,negativeTraits:[],env:t}),t=ba({dynType:p,env:t,context:n})}else throw d({token:e.token,errorMessage:`'${M.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${D(g)}`})}else if(l.trait){let g=[];for(let h of l.trait.fields)h.assignedValue&&on(h.assignedValue)&&g.push(h.assignedValue.type);p=Fa({requiredTraits:g,negativeTraits:[],env:t}),t=ba({dynType:p,env:t,context:n})}else throw d({token:e.token,errorMessage:`'${M.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${D(l)}`});let m=[];if(cr(l)){let g=l.fields[0].type;(z(g)||Ke(g))&&m.push(...g.negativeTraits.map(h=>h.traitType)??[])}for(let{traitType:g}of p.requiredTraits)for(let h of m)if(ae({type:g,env:t},{type:h,env:t}))throw d({token:e.token,errorMessage:`Required trait ${D(g)} is in the negative traits list and cannot be used.`});for(let{traitType:g}of p.requiredTraits)if(!f.has(g))if(cr(l)&&(z(l.fields[0].type)||Ke(l.fields[0].type))){let h=l.fields[0].type,v=!1,$=z(h)&&h.resolvedConcreteType?h.resolvedConcreteType:s!==l?s:void 0;if($!=null&&$.trait){for(let E of $.trait.fields)if(E.assignedValue&&on(E.assignedValue)&&ae({type:g,env:t},{type:E.assignedValue.type,env:t})){_.push(E.assignedValue),c.push(E.assignedValue.type),f.add(g),v=!0;break}}if(!v){let E=h.requiredTraits.map(C=>C.traitType);for(let C of E)if(ae({type:g,env:t},{type:C,env:t})){let w=[];for(let k=0;k<g.fields.length;k++){let A=g.fields[k],S=C.fields.findIndex(V=>V.label===A.label);S===-1?w.push(void 0):w.push(C.fields[S].assignedValue)}let b=To(g,w);_.push(b),c.push(b.type),f.add(g),v=!0;break}if(!v)throw d({token:e.token,errorMessage:`Required trait ${D(g)} not found in SomeType's requiredTraits.`})}}else{let h=cr(l)?l.fields[0].type:l;if(h.trait){let v=!1;for(let $ of h.trait.fields)if($.assignedValue&&on($.assignedValue)&&ae({type:g,env:t},{type:$.assignedValue.type,env:t})){_.push($.assignedValue),c.push($.assignedValue.type),f.add(g),v=!0;break}if(!v)throw d({token:e.token,errorMessage:`Required trait ${D(g)} is not implemented by type ${D(l)}.`})}else throw d({token:e.token,errorMessage:`Cannot find trait ${D(g)} for value type ${D(l)}.`})}let y=[];for(let{traitType:g}of p.requiredTraits){let h=c.findIndex(v=>ae({type:g,env:t},{type:v,env:t}));if(h===-1)throw d({token:e.token,errorMessage:`No trait value found for expected trait type ${D(g)}.`});y.push(_[h])}return e.$={env:t,value:void 0,type:p,pathCollection:a.$.pathCollection,dynCallTraitValues:y},Tt(e,!0),e}function xm(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;va(a)?i="F32":Ta(a)&&(i="F64")}let o=Pn(i,r);return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function Dm(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;ca(u)?o="Usize":_a(u)?o="Isize":Mr(u)?o="U8":fa(u)?o="I8":pa(u)?o="U16":da(u)?o="I16":ma(u)?o="U32":ya(u)?o="I32":ga(u)?o="U64":ha(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=Pn(o,s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function Mm(e,t){if(e.token.type==="string"){let n=qn(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function mv({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){var p;let a=e,s=e,l;if(I(a)&&T(a,":",2)){let m=a.args[0];throw d({token:m.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(p=r.expectedType)==null?void 0:p.type,c;if(u){if(!Qe(u))throw d({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
10642
+ Given type: ${D(p.$.type)}`});l.push(p)}let u=ni(o,Pn("Usize",i)),c=s.every(_=>!!_)?ki(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},Tt(e,!0),e}function Im(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=jt(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function Sm(e,t){if(e.token.type==="char"){let n=dv(e.token.value),r=Xr(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function dv(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 Nm({expr:e,env:t,context:n}){let r=[],i=e.args;if(i.length===0)throw d({token:e.token,errorMessage:`Expected at least one element in comptime_list, got ${i.length}`});let o;n.expectedType&&En(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=U({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw d({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
10643
+ ${L(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!ae({type:o,env:t},{type:u.$.type,env:t}))throw d({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${D(o)}, got ${D(u.$.type)}`})}let a=Ar(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Vm(e,t,n){let i=_e(t,"Box").find(p=>p.value&&Ce(p.value[0])&&J(p.type));if(!i||!i.value||!Ce(i.value[0]))throw new Error("Cannot find Box type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=ye(e),u=yt(a.env),{env:c}=Pe({env:u,variable:{name:s.label,token:Ae,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ae,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:f}=ea({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Mt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!W(_)||!Ht(_.value))throw new Error("Box type constructor did not return a type value");return{boxType:_.value,env:f}}function mv(e,t,n){var r;try{let i=U({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(Ce(o))return!!_e(t,"box").find(l=>l.value&&Ce(l.value[0])&&l.value[0]===o);if(W(o)){let s=o.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function xm({expr:e,env:t,context:n}){Ge(e,M.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&Ke(n.expectedType.type)){let g=n.expectedType.type;if(o=fr(Mt(),"",{requiredTraits:g.requiredTraits.map(h=>h.traitType),negativeTraits:g.negativeTraits.map(h=>h.traitType),env:t,context:n}),I(r)&&mv(r.func,t,{...n})&&T(r.args[0],"=>")){let{boxType:h,env:v}=Vm(o,t,n);t=v,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=U({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw d({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
10644
+ ${L(r)}`});let s=a.$.type,l=s,u=a;if(!Ht(l)&&!(z(l)&&je(l))){let{boxType:g,env:h}=Vm(l,t,{...n});t=h;let v={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},$={tag:"FnCall",func:v,args:[a],token:r.token,$:void 0},E=U({expr:$,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!E.$)throw d({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
10645
+ ${L(r)}`});t=E.$.env,l=E.$.type,u=E,e.args[0]=E}else t=a.$.env;Vn(u,n),t=u.$.env;let c=[],_=[],f=new Set,p;if(n.expectedType&&Ke(n.expectedType.type))p=n.expectedType.type;else if(cr(l)){let g=l.fields[0].type;if(g.trait){let h=[];for(let v of g.trait.fields)v.assignedValue&&on(v.assignedValue)&&h.push(v.assignedValue.type);p=Fa({requiredTraits:h,negativeTraits:[],env:t}),t=ba({dynType:p,env:t,context:n})}else throw d({token:e.token,errorMessage:`'${M.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${D(g)}`})}else if(l.trait){let g=[];for(let h of l.trait.fields)h.assignedValue&&on(h.assignedValue)&&g.push(h.assignedValue.type);p=Fa({requiredTraits:g,negativeTraits:[],env:t}),t=ba({dynType:p,env:t,context:n})}else throw d({token:e.token,errorMessage:`'${M.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${D(l)}`});let m=[];if(cr(l)){let g=l.fields[0].type;(z(g)||Ke(g))&&m.push(...g.negativeTraits.map(h=>h.traitType)??[])}for(let{traitType:g}of p.requiredTraits)for(let h of m)if(ae({type:g,env:t},{type:h,env:t}))throw d({token:e.token,errorMessage:`Required trait ${D(g)} is in the negative traits list and cannot be used.`});for(let{traitType:g}of p.requiredTraits)if(!f.has(g))if(cr(l)&&(z(l.fields[0].type)||Ke(l.fields[0].type))){let h=l.fields[0].type,v=!1,$=z(h)&&h.resolvedConcreteType?h.resolvedConcreteType:s!==l?s:void 0;if($!=null&&$.trait){for(let E of $.trait.fields)if(E.assignedValue&&on(E.assignedValue)&&ae({type:g,env:t},{type:E.assignedValue.type,env:t})){_.push(E.assignedValue),c.push(E.assignedValue.type),f.add(g),v=!0;break}}if(!v){let E=h.requiredTraits.map(C=>C.traitType);for(let C of E)if(ae({type:g,env:t},{type:C,env:t})){let w=[];for(let k=0;k<g.fields.length;k++){let A=g.fields[k],S=C.fields.findIndex(V=>V.label===A.label);S===-1?w.push(void 0):w.push(C.fields[S].assignedValue)}let b=To(g,w);_.push(b),c.push(b.type),f.add(g),v=!0;break}if(!v)throw d({token:e.token,errorMessage:`Required trait ${D(g)} not found in SomeType's requiredTraits.`})}}else{let h=cr(l)?l.fields[0].type:l;if(h.trait){let v=!1;for(let $ of h.trait.fields)if($.assignedValue&&on($.assignedValue)&&ae({type:g,env:t},{type:$.assignedValue.type,env:t})){_.push($.assignedValue),c.push($.assignedValue.type),f.add(g),v=!0;break}if(!v)throw d({token:e.token,errorMessage:`Required trait ${D(g)} is not implemented by type ${D(l)}.`})}else throw d({token:e.token,errorMessage:`Cannot find trait ${D(g)} for value type ${D(l)}.`})}let y=[];for(let{traitType:g}of p.requiredTraits){let h=c.findIndex(v=>ae({type:g,env:t},{type:v,env:t}));if(h===-1)throw d({token:e.token,errorMessage:`No trait value found for expected trait type ${D(g)}.`});y.push(_[h])}return e.$={env:t,value:void 0,type:p,pathCollection:a.$.pathCollection,dynCallTraitValues:y},Tt(e,!0),e}function Dm(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;va(a)?i="F32":Ta(a)&&(i="F64")}let o=Pn(i,r);return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function Mm(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;ca(u)?o="Usize":_a(u)?o="Isize":Mr(u)?o="U8":fa(u)?o="I8":pa(u)?o="U16":da(u)?o="I16":ma(u)?o="U32":ya(u)?o="I32":ga(u)?o="U64":ha(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=Pn(o,s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function Om(e,t){if(e.token.type==="string"){let n=qn(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw d({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function yv({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){var p;let a=e,s=e,l;if(I(a)&&T(a,":",2)){let m=a.args[0];throw d({token:m.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(p=r.expectedType)==null?void 0:p.type,c;if(u){if(!Qe(u))throw d({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
10628
10646
  ${D(u)}`});let m=u.fields[t];if(!m)throw d({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});c=m.type}let _=U({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(Vn(_,r),!_.$)throw d({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${L(s)}`});n=_.$.env;let f=_.$.value;if(f&&W(_.$.value))throw d({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
10629
- ${L(s)}`});return!c||!qi(c,n)?l=Qt({type:_.$.type,expectedType:void 0,expr:void 0,env:n}):l=_.$.type,o.push(_),e!==s&&(e.$={env:n,type:l,value:f,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},type:l,label:i.toString()},value:f,env:n}}function yv({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:f}=mv({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(_),t=f}let a=Ro(r),s=i.some(l=>!l)?void 0:is(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function Om({expr:e,env:t,context:n}){if(!T(e,M.tuple))throw d({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:se,type:se.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=yv({args:e.args,env:t,context:n});return t=o,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw d({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw d({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:i,type:r,pathCollection:[],runtimeArgExprsInOrder:a},Tt(e,!0),e}function js({expr:e,env:t,context:n}){var f,p;if(!T(e,":",2))throw d({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],i=e.args[1],o=U({expr:i,env:t,context:{...n}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate rhs expression:
10647
+ ${L(s)}`});return!c||!qi(c,n)?l=Qt({type:_.$.type,expectedType:void 0,expr:void 0,env:n}):l=_.$.type,o.push(_),e!==s&&(e.$={env:n,type:l,value:f,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},type:l,label:i.toString()},value:f,env:n}}function gv({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:f}=yv({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(_),t=f}let a=Ro(r),s=i.some(l=>!l)?void 0:is(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function Rm({expr:e,env:t,context:n}){if(!T(e,M.tuple))throw d({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:se,type:se.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=gv({args:e.args,env:t,context:n});return t=o,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw d({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw d({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:i,type:r,pathCollection:[],runtimeArgExprsInOrder:a},Tt(e,!0),e}function js({expr:e,env:t,context:n}){var f,p;if(!T(e,":",2))throw d({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],i=e.args[1],o=U({expr:i,env:t,context:{...n}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate rhs expression:
10630
10648
  ${L(i)}`});t=o.$.env;let a=o.$.value;if(!W(a))throw d({token:i.token,errorMessage:`Expected type for rhs, got ${L(i)}`});let s=a.value;if(Xe(s)&&Oe(s.length))throw d({token:i.token,errorMessage:`Array type with inferred length '_' is not allowed in type annotations.
10631
10649
  Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});pi(s,o.token);let l=!1,u=!1;if(I(r)&&T(r,M.comptime)){if(l=!0,r.args.length!==1)throw d({token:r.token,errorMessage:`Expected one argument for "comptime" , got ${r.args.length}`});r=r.args[0]}if(I(r)&&T(r,M.given)){if(r.args.length!==1)throw d({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&&((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&((p=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&p.type.return.isCompileTimeOnly))throw d({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!kt(r))throw d({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(Zr(s,t)&&!l)throw d({token:r.token,errorMessage:`Expected "comptime" for compile-time known value binding:
10632
10650
  ${D(s)}`});if(Jr(s,t)&&l)throw d({token:r.token,errorMessage:`Unexpected "comptime" for ${D(s)} which can only be used at runtime.`});let c=r.token.value;if(!l&&J(s)&&Fr(s))throw d({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
10633
10651
  ${D(s)}
10634
10652
 
10635
10653
  Generic functions must be compile-time known to enable monomorphization. Consider using:
10636
- comptime(${c}) : ${D(s)}`});let{env:_}=Pe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[ue(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Je(s),isImplicit:u}});return t=_,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:se.type,value:se,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function Ks({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var o,a,s,l;let i=e.token.value;if(i==="Type"){let u=ye(Mt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Module"){let u=ye(ir(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Trait"){let u=ye(ir(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="unit"){let u=ye($r());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_int"){let u=ye(wi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_float"){let u=ye(Eo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_string"){let u=ye($n());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="bool"){let u=ye(Nt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="usize"){let u=ye(tn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="isize"){let u=ye($o());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u8"){let u=ye(Co());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i8"){let u=ye(bo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u16"){let u=ye(ko());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i16"){let u=ye(wo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u32"){let u=ye(Fo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i32"){let u=ye(Fi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u64"){let u=ye(Lo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i64"){let u=ye(Ao());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f32"){let u=ye(Io());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f64"){let u=ye(Li());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="char"){let u=ye(dc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="short"){let u=ye(mc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ushort"){let u=ye(yc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="int"){let u=ye(gc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="uint"){let u=ye(hc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="long"){let u=ye(vc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulong"){let u=ye(Tc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longlong"){let u=ye(Ec());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulonglong"){let u=ye($c());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longdouble"){let u=ye(Cc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="void"){let u=ye(bc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Expr"){let u=ye(Jn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let u=ye(n.SelfType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfTrait"&&n.SelfTraitType){let u=ye(n.SelfTraitType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfModule"&&n.SelfModuleType){let u=ye(n.SelfModuleType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else{let u=_e(t,i);if(u.length){let c=u[u.length-1];if(!c.initializedAtToken&&r&&!J(c.type)&&!W((o=c.value)==null?void 0:o[0]))throw d({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let _=c.type.isExtern==="c"&&Oe((a=c.value)==null?void 0:a[0])&&!(J(c.type)||bt(c.type))||(s=c.value)==null?void 0:s[0];if(e.$={env:t,type:c.type,value:_,originType:c.type,variableName:c.name,pathCollection:[[c.name]],sourceVariable:c},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let f=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<f&&ta(c.name,c.frameLevel,"own",e.token,n)}if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)==="async-block"){let f=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<f&&ta(c.name,c.frameLevel,"own",e.token,n)}return e}else throw d({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function xu(e,t){let n=rc(t),r=`Right-hand side contains "${n}" from function.`;throw I(e)&&T(e,M.cond)?r=`Cannot assign "cond" expression to variable when all cases contain "${n}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:I(e)&&T(e,M.match)?r=`Cannot assign "match" expression to variable when all cases contain "${n}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:I(e)&&T(e,M.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),d({token:e.token,errorMessage:r})}function gv(e,t){var n;if(Xe(e)&&Oe(e.length)){let r=e.length;if(r.variableName){let i=_e(t,r.variableName);if(i.length>0){let o=i[i.length-1];if((n=o.value)!=null&&n[0]&&!Oe(o.value[0]))return ni(e.childType,o.value[0])}}}return e}function Rm({expr:e,env:t,context:n}){var o,a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b;if(!T(e,"=",2))throw d({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(X(r)||I(r)&&T(r,":",2)){let k;if(X(r)){let K=Ks({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!K.$)throw d({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${L(r)}`});t=K.$.env,r=K,k=r.token.value}else{let{expr:K,variableExpr:j,variableName:ie}=js({expr:r,env:t,context:{...n}});(o=K.$)!=null&&o.env&&(t=(a=K.$)==null?void 0:a.env),r=j,k=ie}let A=_e(t,k);if(!A.length)throw d({token:r.token,errorMessage:`Variable ${k} not found in the environment`});let S=A[A.length-1];if(!S.isReassignable)throw d({token:r.token,errorMessage:`Cannot reassign "${k}".
10654
+ comptime(${c}) : ${D(s)}`});let{env:_}=Pe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[ue(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:Je(s),isImplicit:u}});return t=_,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:se.type,value:se,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function Ks({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var o,a,s,l;let i=e.token.value;if(i==="Type"){let u=ye(Mt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Module"){let u=ye(ir(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Trait"){let u=ye(ir(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="unit"){let u=ye($r());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_int"){let u=ye(wi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_float"){let u=ye(Eo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_string"){let u=ye($n());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="bool"){let u=ye(Nt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="usize"){let u=ye(tn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="isize"){let u=ye($o());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u8"){let u=ye(Co());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i8"){let u=ye(bo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u16"){let u=ye(ko());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i16"){let u=ye(wo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u32"){let u=ye(Fo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i32"){let u=ye(Fi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u64"){let u=ye(Lo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i64"){let u=ye(Ao());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f32"){let u=ye(Io());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f64"){let u=ye(Li());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="char"){let u=ye(dc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="short"){let u=ye(mc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ushort"){let u=ye(yc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="int"){let u=ye(gc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="uint"){let u=ye(hc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="long"){let u=ye(vc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulong"){let u=ye(Tc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longlong"){let u=ye(Ec());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulonglong"){let u=ye($c());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longdouble"){let u=ye(Cc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="void"){let u=ye(bc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Expr"){let u=ye(Jn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let u=ye(n.SelfType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfTrait"&&n.SelfTraitType){let u=ye(n.SelfTraitType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfModule"&&n.SelfModuleType){let u=ye(n.SelfModuleType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else{let u=_e(t,i);if(u.length){let c=u[u.length-1];if(!c.initializedAtToken&&r&&!J(c.type)&&!W((o=c.value)==null?void 0:o[0]))throw d({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let _=c.type.isExtern==="c"&&Oe((a=c.value)==null?void 0:a[0])&&!(J(c.type)||bt(c.type))||(s=c.value)==null?void 0:s[0];if(e.$={env:t,type:c.type,value:_,originType:c.type,variableName:c.name,pathCollection:[[c.name]],sourceVariable:c},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let f=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<f&&ta(c.name,c.frameLevel,"own",e.token,n)}if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)==="async-block"){let f=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<f&&ta(c.name,c.frameLevel,"own",e.token,n)}return e}else throw d({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function xu(e,t){let n=rc(t),r=`Right-hand side contains "${n}" from function.`;throw I(e)&&T(e,M.cond)?r=`Cannot assign "cond" expression to variable when all cases contain "${n}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:I(e)&&T(e,M.match)?r=`Cannot assign "match" expression to variable when all cases contain "${n}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:I(e)&&T(e,M.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),d({token:e.token,errorMessage:r})}function hv(e,t){var n;if(Xe(e)&&Oe(e.length)){let r=e.length;if(r.variableName){let i=_e(t,r.variableName);if(i.length>0){let o=i[i.length-1];if((n=o.value)!=null&&n[0]&&!Oe(o.value[0]))return ni(e.childType,o.value[0])}}}return e}function Pm({expr:e,env:t,context:n}){var o,a,s,l,u,c,_,f,p,m,y,g,h,v,$,E,C,w,b;if(!T(e,"=",2))throw d({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(X(r)||I(r)&&T(r,":",2)){let k;if(X(r)){let K=Ks({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!K.$)throw d({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${L(r)}`});t=K.$.env,r=K,k=r.token.value}else{let{expr:K,variableExpr:j,variableName:ie}=js({expr:r,env:t,context:{...n}});(o=K.$)!=null&&o.env&&(t=(a=K.$)==null?void 0:a.env),r=j,k=ie}let A=_e(t,k);if(!A.length)throw d({token:r.token,errorMessage:`Variable ${k} not found in the environment`});let S=A[A.length-1];if(!S.isReassignable)throw d({token:r.token,errorMessage:`Cannot reassign "${k}".
10637
10655
  You can mutate fields (e.g., ${k}.field = value) but cannot reassign itself.`});if(i=U({expr:i,env:t,context:{...n,expectedType:{type:S.type,env:t},isInsideGivenHandler:S.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw d({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${L(i)}`});t=i.$.env,ji(i,t),Si(i),Vn(i,n),t=i.$.env,Ot((s=i.$)==null?void 0:s.controlFlow)&&xu(i,i.$.controlFlow);let V=(l=i.$)==null?void 0:l.type;if(!V)try{let{expr:K,type:j,env:ie}=$i({expr:i,type:S.type,env:t,context:{...n}});i=K,V=j,t=ie}catch(K){throw d({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${L(i)}
10638
- ${K}`})}if(S.isCompileTimeOnly||(V=Qt({type:V,expectedType:S.type,expr:i,env:t})),!ae({type:S.type,env:t},{type:V,env:t}))if(No(S.type))try{let{expr:K,type:j,env:ie}=$i({expr:i,type:S.type,env:t,context:{...n}});if(ae({type:S.type,env:ie},{type:j,env:ie})){i=K,V=j,t=ie;let ce=gv(S.type,t);t=vt(t,S,{...S,type:ce})}else throw d({token:r.token,errorMessage:`Incompatible types:
10656
+ ${K}`})}if(S.isCompileTimeOnly||(V=Qt({type:V,expectedType:S.type,expr:i,env:t})),!ae({type:S.type,env:t},{type:V,env:t}))if(No(S.type))try{let{expr:K,type:j,env:ie}=$i({expr:i,type:S.type,env:t,context:{...n}});if(ae({type:S.type,env:ie},{type:j,env:ie})){i=K,V=j,t=ie;let ce=hv(S.type,t);t=vt(t,S,{...S,type:ce})}else throw d({token:r.token,errorMessage:`Incompatible types:
10639
10657
  - Expected: ${D(S.type)}
10640
10658
  - Given : ${D(V)}`})}catch{throw d({token:r.token,errorMessage:`Incompatible types:
10641
10659
  - Expected: ${D(S.type)}
@@ -10646,35 +10664,35 @@ Impl(...) uses static dispatch and the concrete type is fixed at first assignmen
10646
10664
  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)==null?void 0:_.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let ee=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;S.frameLevel<ee&&ta(S.name,S.frameLevel,"own",r.token,n)}let K=S.isCompileTimeOnly&&N?Yn(N):void 0,j=Hi(t.modulePath,k),ie=Aa(i,t,t.modulePath),ce=ie;ie!=null&&ie.consumedAtToken&&(ce=void 0),t=vt(t,S,{...S,id:j,value:K?[K]:void 0,type:P,isOwningTheRcValue:Je(P),isOwningTheSameRcValueAs:ce}),R=!0}else{if(n.isEvaluatingLoopBody&&S.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw Wt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:S.token,errorMessage:"Defined here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&S.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw Wt([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:S.token,errorMessage:"Defined here:"}]);let K=S.isCompileTimeOnly&&N?Yn(N):void 0,j=Aa(i,t,t.modulePath),ie=j;j!=null&&j.consumedAtToken&&(ie=void 0),t=vt(t,S,{...S,initializedAtToken:r.token,value:K?[K]:void 0,type:P,isOwningTheRcValue:Je(P),isOwningTheSameRcValueAs:ie})}let G=_e(t,k),Q=G[G.length-1];return r.$={env:t,type:Q.type,value:Q.isCompileTimeOnly?N:void 0,pathCollection:[[k]]},R?(e.$={env:t,value:(f=S.value)==null?void 0:f[0],type:S.type,pathCollection:[],isCompileTimeOnlyAssignment:S.isCompileTimeOnly},Tt(e,!0,(H==null?void 0:H.frameLevel)===t.frames.length-1?H:void 0)):e.$={env:t,value:se,type:se.type,pathCollection:[],isCompileTimeOnlyAssignment:S.isCompileTimeOnly},e}else{let k=U({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!k.$)throw d({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${L(r)}`});if(((p=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:p.kind)==="function-body"&&k.$.pathCollection){for(let P of k.$.pathCollection)if(P.length>0){let R=P[0];if(typeof R=="string"){let H=_e(t,R);if(H.length>0){let G=H[H.length-1];ta(R,G.frameLevel,"write",r.token,n)}}}}let A=k.$.type;if(i=U({expr:i,env:t,context:{...n,expectedType:{type:A,env:t}}}),!i.$)throw d({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${L(i)}`});t=i.$.env,ji(i,t),Si(i),Vn(i,n),t=i.$.env;let S=(m=i.$)==null?void 0:m.type;if(!S)try{let{expr:P,type:R,env:H}=$i({expr:i,type:A,env:t,context:{...n}});i=P,S=R,t=H}catch(P){throw d({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${L(i)}
10647
10665
  ${P}`})}if(!ae({type:A,env:t},{type:S,env:t}))throw d({token:r.token,errorMessage:`Incompatible types:
10648
10666
  - Expected: ${D(A)}
10649
- - Given : ${D(S)}`});let V=!1;if(k.$.pathCollection&&k.$.pathCollection.length>0){let P=k.$.pathCollection[0];if(P&&P.length>=2){let R=P[0],H=P[1],G=_e(t,R);if(G.length>0){let Q=G[G.length-1];if(Q.isCompileTimeOnly&&((y=Q.value)!=null&&y[0])){let K=Q.value[0];if((g=i.$)!=null&&g.value&&(V=!0),_r(K)||or(K)){let j=Q.type,ie=j.fields.findIndex(ce=>ce.label===H);if(ie>=0&&((h=i.$)!=null&&h.value))if(xe(Q.type)&&Q.type.isReferenceSemantics){let ce=[...K.fields];ce[ie]=i.$.value;let ee=Ir(Q.type,ce),pe=tr(t,Z=>{var Ee;return Z.isCompileTimeOnly&&((Ee=Z.value)==null?void 0:Ee[0])===K});for(let Z of pe)t=vt(t,Z,{...Z,value:[ee]})}else{let ce=[...K.fields];ce[ie]=i.$.value;let ee;_r(K)?ee=Ir(j,ce):ee=is(j,ce),t=vt(t,Q,{...Q,value:[ee]})}}else if(Lr(K)){let j=parseInt(H,10);if(!isNaN(j)&&j>=0&&j<K.elements.length&&((v=i.$)!=null&&v.value)){let ie=[...K.elements];ie[j]=i.$.value;let ce=Q.type,ee=ki(ce,ie);t=vt(t,Q,{...Q,value:[ee]})}}else if(hn(K)){let j=Q.type,ie=j.variants.find(ce=>ce.name===K.variantName);if(ie){let ce=(ie.fields??[]).findIndex(ee=>ee.label===H);if(ce>=0&&(($=i.$)!=null&&$.value)){let ee=[...K.fields];ee[ce]=i.$.value;let pe=Gi(j,K.variantName,ee);t=vt(t,Q,{...Q,value:[pe]})}}}}}}}let O=k.$.ptrTargetValue,x=k.$.ptrTargetIndex??0;if(O&&((E=i.$)!=null&&E.value)){let P=O[0];Lr(P)?P.elements[x]=i.$.value:O[0]=i.$.value,V=!0}let N=k.$.arrayElementRef;return N&&((C=i.$)!=null&&C.value)&&(N.arrayValue.elements[N.index]=i.$.value,V=!0),!V&&((w=k.$)==null?void 0:w.value)!==void 0&&((b=i.$)==null?void 0:b.value)!==void 0&&(V=!0),e.$={env:t,value:k.$.value,type:k.$.type,pathCollection:[],isCompileTimeOnlyAssignment:V},V||Tt(e,!0),e}}function Pm({expr:e,env:t,context:n}){var a;if(!T(e,M.c_include))throw d({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&X(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=U({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw d({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${L(s)}`});t=l.$.env;let u=l.$.value;if(!rt(u))throw d({token:s.token,errorMessage:`Expected string for C header file argument, got ${L(s)}`});r=u.value}if(!r)throw d({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
10667
+ - Given : ${D(S)}`});let V=!1;if(k.$.pathCollection&&k.$.pathCollection.length>0){let P=k.$.pathCollection[0];if(P&&P.length>=2){let R=P[0],H=P[1],G=_e(t,R);if(G.length>0){let Q=G[G.length-1];if(Q.isCompileTimeOnly&&((y=Q.value)!=null&&y[0])){let K=Q.value[0];if((g=i.$)!=null&&g.value&&(V=!0),_r(K)||or(K)){let j=Q.type,ie=j.fields.findIndex(ce=>ce.label===H);if(ie>=0&&((h=i.$)!=null&&h.value))if(xe(Q.type)&&Q.type.isReferenceSemantics){let ce=[...K.fields];ce[ie]=i.$.value;let ee=Ir(Q.type,ce),pe=tr(t,Z=>{var Ee;return Z.isCompileTimeOnly&&((Ee=Z.value)==null?void 0:Ee[0])===K});for(let Z of pe)t=vt(t,Z,{...Z,value:[ee]})}else{let ce=[...K.fields];ce[ie]=i.$.value;let ee;_r(K)?ee=Ir(j,ce):ee=is(j,ce),t=vt(t,Q,{...Q,value:[ee]})}}else if(Lr(K)){let j=parseInt(H,10);if(!isNaN(j)&&j>=0&&j<K.elements.length&&((v=i.$)!=null&&v.value)){let ie=[...K.elements];ie[j]=i.$.value;let ce=Q.type,ee=ki(ce,ie);t=vt(t,Q,{...Q,value:[ee]})}}else if(hn(K)){let j=Q.type,ie=j.variants.find(ce=>ce.name===K.variantName);if(ie){let ce=(ie.fields??[]).findIndex(ee=>ee.label===H);if(ce>=0&&(($=i.$)!=null&&$.value)){let ee=[...K.fields];ee[ce]=i.$.value;let pe=Gi(j,K.variantName,ee);t=vt(t,Q,{...Q,value:[pe]})}}}}}}}let O=k.$.ptrTargetValue,x=k.$.ptrTargetIndex??0;if(O&&((E=i.$)!=null&&E.value)){let P=O[0];Lr(P)?P.elements[x]=i.$.value:O[0]=i.$.value,V=!0}let N=k.$.arrayElementRef;return N&&((C=i.$)!=null&&C.value)&&(N.arrayValue.elements[N.index]=i.$.value,V=!0),!V&&((w=k.$)==null?void 0:w.value)!==void 0&&((b=i.$)==null?void 0:b.value)!==void 0&&(V=!0),e.$={env:t,value:k.$.value,type:k.$.type,pathCollection:[],isCompileTimeOnlyAssignment:V},V||Tt(e,!0),e}}function Um({expr:e,env:t,context:n}){var a;if(!T(e,M.c_include))throw d({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&X(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=U({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw d({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${L(s)}`});t=l.$.env;let u=l.$.value;if(!rt(u))throw d({token:s.token,errorMessage:`Expected string for C header file argument, got ${L(s)}`});r=u.value}if(!r)throw d({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
10650
10668
 
10651
- c_include "<stdio.h>" ...;`});let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=Ya({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===u.label))throw d({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(bt(u.type)||J(u.type)?u.type={...u.type,isExtern:"c",cInclude:r,externName:u.label}:u.type={...u.type,isExtern:"c",cInclude:r},u.assignedValue&&W(u.assignedValue)&&(xe(u.assignedValue.value)||ze(u.assignedValue.value)||Pt(u.assignedValue.value))){let p=u.assignedValue.value;p.isExtern="c",p.cInclude=r,p.externName=u.label}o.push(u),t=c;let{env:f}=Pe({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??ue(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=f}return e.$={env:t,value:se,type:se.type,pathCollection:[]},e.func.$={env:t,value:se,type:se.type,pathCollection:[]},e}function Um({expr:e,env:t,context:n}){var c,_,f,p,m,y,g;if(!T(e,M.cond))throw d({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw d({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let i=[];for(let h=0;h<r.length;h++){let v=r[h];if(!I(v)||!T(v,"=>",2))throw d({token:v.token,errorMessage:`Expected => for cond statement, got ${v.tag}`});let $=v.args[0],E=v.args[1],C=t;i.push({condExpr:$,caseBodyExpr:E,caseEnv:C})}let o=[];for(let h=0;h<i.length;h++){let{condExpr:v,caseBodyExpr:$,caseEnv:E}=i[h],C=X(v)?U({expr:v,env:E,context:{...n,expectedType:{type:Nt(),env:E}}}):nn({expr:v,env:E,context:{...n,expectedType:{type:Nt(),env:E}},variablesToAdd:[]});if(!C.$)throw d({token:C.token,errorMessage:`Failed to evaluate condition expression: ${L(C)}`});if(!Zn(C.$.type))throw d({token:C.token,errorMessage:`Expected bool for cond statement, got ${L(C)} of type ${D(C.$.type)}`});let w=C.$.value,b=C.$.env;if(h===i.length-1&&!(dt(w)&&w.value===!0))throw d({token:C.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:C,caseBodyExpr:$,caseEnv:b,condValue:w}),dt(w)&&w.value===!0)break}let a=-1;for(let h=0;h<o.length;h++){let{condValue:v}=o[h];if(dt(v)&&v.value===!0&&o.slice(0,h).every(({condValue:$})=>dt($)&&$.value===!1)){a=h;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:h,caseEnv:v,condExpr:$}=o[a];$.$&&($.$.caseExecuted=!0);let E=nn({expr:h,env:v,context:{...n},variablesToAdd:[]});if(Ot((c=E.$)==null?void 0:c.controlFlow))return e.$={env:E.$.env,type:((_=n.expectedType)==null?void 0:_.type)??E.$.type,value:E.$.value,pathCollection:E.$.pathCollection,controlFlow:E.$.controlFlow},e;{if(!((f=E.$)!=null&&f.type))throw d({token:E.token,errorMessage:`Expected type for cond statement, got ${L(E)}`});s.push(E),l.push(E.$.value),u={type:E.$.type,env:E.$.env},t=E.$.env;let C;return C=l[0],e.$={env:t,type:((p=n.expectedType)==null?void 0:p.type)??u.type,value:C,pathCollection:[],variableName:E.$.variableName},E.$.variableName||Tt(e,!0),e}}else{let h=!1,v=[],$=[];for(let{condExpr:C,condValue:w,caseBodyExpr:b,caseEnv:k}of o){if(dt(w)&&w.value===!1)continue;C.$&&(C.$.caseExecuted=!0);let A=nn({expr:b,env:k,context:{...n,isExecuting:!1},variablesToAdd:[]});if(Ot((m=A.$)==null?void 0:m.controlFlow)){v.push(A.$.controlFlow),Vt(A.$.controlFlow,"return")&&$.push(A);continue}else h=!0;if(!((y=A.$)!=null&&y.type))throw d({token:A.token,errorMessage:`Expected type for cond statement, got ${L(A)}`});if(s.push(A),l.push(A.$.value),n.expectedType&&!ae(n.expectedType,{type:A.$.type,env:A.$.env}))throw d({token:A.token,errorMessage:`Incompatible type with expected type:
10669
+ c_include "<stdio.h>" ...;`});let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=Ya({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===u.label))throw d({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(bt(u.type)||J(u.type)?u.type={...u.type,isExtern:"c",cInclude:r,externName:u.label}:u.type={...u.type,isExtern:"c",cInclude:r},u.assignedValue&&W(u.assignedValue)&&(xe(u.assignedValue.value)||ze(u.assignedValue.value)||Pt(u.assignedValue.value))){let p=u.assignedValue.value;p.isExtern="c",p.cInclude=r,p.externName=u.label}o.push(u),t=c;let{env:f}=Pe({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??ue(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=f}return e.$={env:t,value:se,type:se.type,pathCollection:[]},e.func.$={env:t,value:se,type:se.type,pathCollection:[]},e}function zm({expr:e,env:t,context:n}){var c,_,f,p,m,y,g;if(!T(e,M.cond))throw d({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw d({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let i=[];for(let h=0;h<r.length;h++){let v=r[h];if(!I(v)||!T(v,"=>",2))throw d({token:v.token,errorMessage:`Expected => for cond statement, got ${v.tag}`});let $=v.args[0],E=v.args[1],C=t;i.push({condExpr:$,caseBodyExpr:E,caseEnv:C})}let o=[];for(let h=0;h<i.length;h++){let{condExpr:v,caseBodyExpr:$,caseEnv:E}=i[h],C=X(v)?U({expr:v,env:E,context:{...n,expectedType:{type:Nt(),env:E}}}):nn({expr:v,env:E,context:{...n,expectedType:{type:Nt(),env:E}},variablesToAdd:[]});if(!C.$)throw d({token:C.token,errorMessage:`Failed to evaluate condition expression: ${L(C)}`});if(!Zn(C.$.type))throw d({token:C.token,errorMessage:`Expected bool for cond statement, got ${L(C)} of type ${D(C.$.type)}`});let w=C.$.value,b=C.$.env;if(h===i.length-1&&!(dt(w)&&w.value===!0))throw d({token:C.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:C,caseBodyExpr:$,caseEnv:b,condValue:w}),dt(w)&&w.value===!0)break}let a=-1;for(let h=0;h<o.length;h++){let{condValue:v}=o[h];if(dt(v)&&v.value===!0&&o.slice(0,h).every(({condValue:$})=>dt($)&&$.value===!1)){a=h;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:h,caseEnv:v,condExpr:$}=o[a];$.$&&($.$.caseExecuted=!0);let E=nn({expr:h,env:v,context:{...n},variablesToAdd:[]});if(Ot((c=E.$)==null?void 0:c.controlFlow))return e.$={env:E.$.env,type:((_=n.expectedType)==null?void 0:_.type)??E.$.type,value:E.$.value,pathCollection:E.$.pathCollection,controlFlow:E.$.controlFlow},e;{if(!((f=E.$)!=null&&f.type))throw d({token:E.token,errorMessage:`Expected type for cond statement, got ${L(E)}`});s.push(E),l.push(E.$.value),u={type:E.$.type,env:E.$.env},t=E.$.env;let C;return C=l[0],e.$={env:t,type:((p=n.expectedType)==null?void 0:p.type)??u.type,value:C,pathCollection:[],variableName:E.$.variableName},E.$.variableName||Tt(e,!0),e}}else{let h=!1,v=[],$=[];for(let{condExpr:C,condValue:w,caseBodyExpr:b,caseEnv:k}of o){if(dt(w)&&w.value===!1)continue;C.$&&(C.$.caseExecuted=!0);let A=nn({expr:b,env:k,context:{...n,isExecuting:!1},variablesToAdd:[]});if(Ot((m=A.$)==null?void 0:m.controlFlow)){v.push(A.$.controlFlow),Vt(A.$.controlFlow,"return")&&$.push(A);continue}else h=!0;if(!((y=A.$)!=null&&y.type))throw d({token:A.token,errorMessage:`Expected type for cond statement, got ${L(A)}`});if(s.push(A),l.push(A.$.value),n.expectedType&&!ae(n.expectedType,{type:A.$.type,env:A.$.env}))throw d({token:A.token,errorMessage:`Incompatible type with expected type:
10652
10670
  - Expected: ${D(n.expectedType.type)}
10653
10671
  - Actual : ${D(A.$.type)}`});if(!Ot(A.$.controlFlow)){if(!u)u={type:A.$.type,env:A.$.env};else if(!ae({type:u.type,env:u.env},{type:A.$.type,env:A.$.env}))if(ae({type:Qt({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:A.$.type,env:A.$.env}))u={type:A.$.type,env:A.$.env};else throw d({token:A.token,errorMessage:`Incompatible types:
10654
10672
  - Previous: ${D(u.type)}
10655
- - Current : ${D(A.$.type)}`})}}let E=v.length>0?Ca(v):void 0;if(h||!Ot(E)){if(h&&!u)throw d({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:se.type,env:t}),t=Mo(t,s.filter(w=>w.$&&!Vt(w.$.controlFlow,"return")&&!Vt(w.$.controlFlow,"escape")));let C;return l.some(w=>w===void 0)?C=void 0:C=ue(u.type,{env:t,context:n}),e.$={env:t,type:((g=n.expectedType)==null?void 0:g.type)??u.type,value:C,pathCollection:[]},Tt(e,!0),e}else{if(v.length===0)throw d({token:e.token,errorMessage:"No control flows found but expected some."});if(Vt(E,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let C;if($.length>0&&$[0].$?C=$[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?C=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(C=n.expectedType.type),!C)throw d({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:C,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Ea(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ue(C,{env:t,context:n}):void 0,pathCollection:[],controlFlow:E}}else if(Vt(E,"escape")){if(!n.enclosingFunctionReturnType)throw d({token:e.token,errorMessage:'All cases in cond use "escape", but not inside a function with an enclosing function.'});let C=n.enclosingFunctionReturnType;e.$={env:t,type:C,value:void 0,pathCollection:[],controlFlow:E}}else if(Vt(E,"break")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:E}}else if(Vt(E,"continue")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:E}}return e}}}function zm({expr:e,env:t,context:n}){let r=n.enclosingFunctionReturnType;if(!r)throw d({token:e.func.token,errorMessage:"`escape` can only be used inside a function that has an enclosing function."});if(!n.isInsideGivenHandler)throw d({token:e.func.token,errorMessage:"`escape` can only be used inside a `given` handler definition."});let i=e.args[0];if(!i)throw d({token:e.func.token,errorMessage:"`escape` requires exactly one argument."});let o=Ri({expr:i,env:t,context:{...n,expectedType:{type:r,env:t}}});if(!o.$)throw d({token:i.token,errorMessage:"Failed to evaluate the argument of `escape`."});if(!z(r)&&!ae({type:r,env:t},{type:o.$.type,env:t}))throw d({token:i.token,errorMessage:`Incompatible type for \`escape\` argument:
10673
+ - Current : ${D(A.$.type)}`})}}let E=v.length>0?Ca(v):void 0;if(h||!Ot(E)){if(h&&!u)throw d({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:se.type,env:t}),t=Mo(t,s.filter(w=>w.$&&!Vt(w.$.controlFlow,"return")&&!Vt(w.$.controlFlow,"escape")));let C;return l.some(w=>w===void 0)?C=void 0:C=ue(u.type,{env:t,context:n}),e.$={env:t,type:((g=n.expectedType)==null?void 0:g.type)??u.type,value:C,pathCollection:[]},Tt(e,!0),e}else{if(v.length===0)throw d({token:e.token,errorMessage:"No control flows found but expected some."});if(Vt(E,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let C;if($.length>0&&$[0].$?C=$[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?C=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(C=n.expectedType.type),!C)throw d({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:C,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Ea(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ue(C,{env:t,context:n}):void 0,pathCollection:[],controlFlow:E}}else if(Vt(E,"escape")){if(!n.enclosingFunctionReturnType)throw d({token:e.token,errorMessage:'All cases in cond use "escape", but not inside a function with an enclosing function.'});let C=n.enclosingFunctionReturnType;e.$={env:t,type:C,value:void 0,pathCollection:[],controlFlow:E}}else if(Vt(E,"break")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:E}}else if(Vt(E,"continue")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:E}}return e}}}function Bm({expr:e,env:t,context:n}){let r=n.enclosingFunctionReturnType;if(!r)throw d({token:e.func.token,errorMessage:"`escape` can only be used inside a function that has an enclosing function."});if(!n.isInsideGivenHandler)throw d({token:e.func.token,errorMessage:"`escape` can only be used inside a `given` handler definition."});let i=e.args[0];if(!i)throw d({token:e.func.token,errorMessage:"`escape` requires exactly one argument."});let o=Ri({expr:i,env:t,context:{...n,expectedType:{type:r,env:t}}});if(!o.$)throw d({token:i.token,errorMessage:"Failed to evaluate the argument of `escape`."});if(!z(r)&&!ae({type:r,env:t},{type:o.$.type,env:t}))throw d({token:i.token,errorMessage:`Incompatible type for \`escape\` argument:
10656
10674
  - Expected (enclosing function return type): ${D(r)}
10657
- - Got: ${D(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:Ii("escape")},e}function Bm({expr:e,env:t,context:n}){var a;if(!T(e,M.extern))throw d({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",i=e.args;if(e.args[0]&&X(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=U({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw d({token:s.token,errorMessage:`Failed to evaluate language argument: ${L(s)}`});t=l.$.env;let u=l.$.value;if(!rt(u))throw d({token:s.token,errorMessage:`Expected string for language argument, got ${L(s)}`});if(u.value.toLocaleLowerCase()==="yo")r="yo";else if(u.value.toLocaleLowerCase()==="c")r="c";else throw d({token:s.token,errorMessage:`Unsupported language "${u.value}" for extern, expected "c" or "yo"`})}let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=Ya({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===u.label))throw d({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(bt(u.type)||J(u.type)?u.type={...u.type,isExtern:r,externName:u.label,...u.label==="__yo_io_async"?{ioBuiltin:"io_async"}:{},...u.label==="__yo_io_await"?{ioBuiltin:"io_await"}:{},...u.label==="__yo_io_state"?{ioBuiltin:"io_state"}:{},...u.label==="__yo_io_spawn"?{ioBuiltin:"io_spawn"}:{},...u.label==="__yo_join_handle_await"?{ioBuiltin:"join_handle_await"}:{}}:u.type={...u.type,isExtern:r},u.assignedValue&&W(u.assignedValue)&&(xe(u.assignedValue.value)||ze(u.assignedValue.value)||Pt(u.assignedValue.value))){let p=u.assignedValue.value;p.isExtern=r,p.externName=u.label}o.push(u),t=c;let{env:f}=Pe({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??ue(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=f}return e.$={env:t,value:se,type:se.type,pathCollection:[]},e.func.$={env:t,value:se,type:se.type,pathCollection:[]},e}var po=require("fs"),Mn=xr(require("path"));var qr=xr(require("fs")),fo=xr(require("path")),Km=xr(require("crypto")),Ev=require("child_process");var Ha=xr(require("fs")),Wm=xr(require("path"));function hv(e){let t=[],n=e.split(`
10658
- `),r;for(let i of n){let o=i.trim();if(o===""||o.startsWith("#"))continue;if(o==="[[dependencies]]"){r&&r.name&&t.push(Gm(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(Gm(r)),{dependencies:t}}function Gm(e){return{name:e.name??"",url:e.url??"",ref:e.ref??"HEAD",commit:e.commit??"",hash:e.hash??""}}function qm(e){let t=Wm.join(e,"yo.lock");if(!Ha.existsSync(t))return{dependencies:[]};let n=Ha.readFileSync(t,"utf-8");return hv(n)}function Ym(e,t){return e.dependencies.find(n=>n.name===t)}var vv=xr(require("fs")),Du=xr(require("os")),sa=xr(require("path"));function Tv(){let e=process.env.YO_CACHE_DIR;if(e)return e;let t=process.env.XDG_CACHE_HOME;if(t)return sa.join(t,"yo");if(process.platform==="win32"){let n=process.env.LOCALAPPDATA??sa.join(Du.homedir(),"AppData","Local");return sa.join(n,"yo","cache")}return sa.join(Du.homedir(),".cache","yo")}function Hm(){return sa.join(Tv(),"deps")}var E3={...process.env,GIT_TERMINAL_PROMPT:"0"};function $v(e){return Hm()}function Cv(e){let t=Km.createHash("sha256");return Xm(t,e,""),`sha256-${t.digest("hex")}`}function Xm(e,t,n){let r=n?fo.join(t,n):t,i=qr.readdirSync(r,{withFileTypes:!0});i.sort((o,a)=>bv(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}
10659
- `),Xm(e,t,a)}else if(o.isFile()){if(o.name===Mu)continue;e.update(`file:${a}
10660
- `);let s=qr.readFileSync(fo.join(t,a));e.update(wv(s))}}}function bv(e,t){let n=e.toLowerCase(),r=t.toLowerCase();return n<r?-1:n>r?1:e<t?-1:e>t?1:0}var jm=13,kv=10;function wv(e){if(!e.includes(jm))return e;let t=[];for(let n=0;n<e.length;n++)e[n]===jm&&n+1<e.length&&e[n+1]===kv||t.push(e[n]);return Buffer.from(t)}var Mu=".yo-content-hash";function Fv(e,t){qr.writeFileSync(fo.join(e,Mu),t+`
10661
- `,"utf-8")}function Lv(e,t,n){return fo.join(e,`${t}-${n.slice(0,12)}`)}function Av(e,t,n){let r=Lv(e,t,n.commit);if(!qr.existsSync(r))return{status:"missing_path",cachedPath:r};if(!n.hash)return{status:"missing_hash",cachedPath:r};let i=fo.join(r,Mu),o;try{o=qr.readFileSync(i,"utf-8").trim()}catch{o=Cv(r),Fv(r,o)}return o!==n.hash?{status:"hash_mismatch",cachedPath:r,actualHash:o}:{status:"ok",cachedPath:r,actualHash:o}}function Iv(e,t,n,r){return`Cached dependency "${e}" failed integrity check.
10675
+ - Got: ${D(o.$.type)}`});return e.args[0]=o,e.$={...e.$,env:t,type:o.$.type,value:void 0,pathCollection:[],controlFlow:Ii("escape")},e}function Gm({expr:e,env:t,context:n}){var a;if(!T(e,M.extern))throw d({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",i=e.args;if(e.args[0]&&X(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=U({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw d({token:s.token,errorMessage:`Failed to evaluate language argument: ${L(s)}`});t=l.$.env;let u=l.$.value;if(!rt(u))throw d({token:s.token,errorMessage:`Expected string for language argument, got ${L(s)}`});if(u.value.toLocaleLowerCase()==="yo")r="yo";else if(u.value.toLocaleLowerCase()==="c")r="c";else throw d({token:s.token,errorMessage:`Unsupported language "${u.value}" for extern, expected "c" or "yo"`})}let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=Ya({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===u.label))throw d({token:I(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(bt(u.type)||J(u.type)?u.type={...u.type,isExtern:r,externName:u.label,...u.label==="__yo_io_async"?{ioBuiltin:"io_async"}:{},...u.label==="__yo_io_await"?{ioBuiltin:"io_await"}:{},...u.label==="__yo_io_state"?{ioBuiltin:"io_state"}:{},...u.label==="__yo_io_spawn"?{ioBuiltin:"io_spawn"}:{},...u.label==="__yo_join_handle_await"?{ioBuiltin:"join_handle_await"}:{}}:u.type={...u.type,isExtern:r},u.assignedValue&&W(u.assignedValue)&&(xe(u.assignedValue.value)||ze(u.assignedValue.value)||Pt(u.assignedValue.value))){let p=u.assignedValue.value;p.isExtern=r,p.externName=u.label}o.push(u),t=c;let{env:f}=Pe({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??ue(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=f}return e.$={env:t,value:se,type:se.type,pathCollection:[]},e.func.$={env:t,value:se,type:se.type,pathCollection:[]},e}var po=require("fs"),Mn=xr(require("path"));var qr=xr(require("fs")),fo=xr(require("path")),Xm=xr(require("crypto")),$v=require("child_process");var Ha=xr(require("fs")),qm=xr(require("path"));function vv(e){let t=[],n=e.split(`
10676
+ `),r;for(let i of n){let o=i.trim();if(o===""||o.startsWith("#"))continue;if(o==="[[dependencies]]"){r&&r.name&&t.push(Wm(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(Wm(r)),{dependencies:t}}function Wm(e){return{name:e.name??"",url:e.url??"",ref:e.ref??"HEAD",commit:e.commit??"",hash:e.hash??""}}function Ym(e){let t=qm.join(e,"yo.lock");if(!Ha.existsSync(t))return{dependencies:[]};let n=Ha.readFileSync(t,"utf-8");return vv(n)}function Hm(e,t){return e.dependencies.find(n=>n.name===t)}var Tv=xr(require("fs")),Du=xr(require("os")),sa=xr(require("path"));function Ev(){let e=process.env.YO_CACHE_DIR;if(e)return e;let t=process.env.XDG_CACHE_HOME;if(t)return sa.join(t,"yo");if(process.platform==="win32"){let n=process.env.LOCALAPPDATA??sa.join(Du.homedir(),"AppData","Local");return sa.join(n,"yo","cache")}return sa.join(Du.homedir(),".cache","yo")}function jm(){return sa.join(Ev(),"deps")}var C3={...process.env,GIT_TERMINAL_PROMPT:"0"};function Cv(e){return jm()}function bv(e){let t=Xm.createHash("sha256");return Qm(t,e,""),`sha256-${t.digest("hex")}`}function Qm(e,t,n){let r=n?fo.join(t,n):t,i=qr.readdirSync(r,{withFileTypes:!0});i.sort((o,a)=>kv(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}
10677
+ `),Qm(e,t,a)}else if(o.isFile()){if(o.name===Mu)continue;e.update(`file:${a}
10678
+ `);let s=qr.readFileSync(fo.join(t,a));e.update(Fv(s))}}}function kv(e,t){let n=e.toLowerCase(),r=t.toLowerCase();return n<r?-1:n>r?1:e<t?-1:e>t?1:0}var Km=13,wv=10;function Fv(e){if(!e.includes(Km))return e;let t=[];for(let n=0;n<e.length;n++)e[n]===Km&&n+1<e.length&&e[n+1]===wv||t.push(e[n]);return Buffer.from(t)}var Mu=".yo-content-hash";function Lv(e,t){qr.writeFileSync(fo.join(e,Mu),t+`
10679
+ `,"utf-8")}function Av(e,t,n){return fo.join(e,`${t}-${n.slice(0,12)}`)}function Iv(e,t,n){let r=Av(e,t,n.commit);if(!qr.existsSync(r))return{status:"missing_path",cachedPath:r};if(!n.hash)return{status:"missing_hash",cachedPath:r};let i=fo.join(r,Mu),o;try{o=qr.readFileSync(i,"utf-8").trim()}catch{o=bv(r),Lv(r,o)}return o!==n.hash?{status:"hash_mismatch",cachedPath:r,actualHash:o}:{status:"ok",cachedPath:r,actualHash:o}}function Sv(e,t,n,r){return`Cached dependency "${e}" failed integrity check.
10662
10680
  Expected: ${t}
10663
10681
  Actual: ${n}
10664
10682
  Path: ${r}
10665
- Run 'yo fetch' to refetch this dependency.`}function Qm(e,t,n=""){let r=qm(e),i=Ym(r,t);if(!i||!i.commit)return;let o=$v(),a=Av(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(Iv(t,i.hash,a.actualHash??"<unknown>",a.cachedPath));return n?fo.join(a.cachedPath,n):a.cachedPath}}function Zm({expr:e,env:t,context:n,stdPath:r}){var c;if(!T(e,M.import,1))throw d({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
10683
+ Run 'yo fetch' to refetch this dependency.`}function Zm(e,t,n=""){let r=Ym(e),i=Hm(r,t);if(!i||!i.commit)return;let o=Cv(),a=Iv(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(Sv(t,i.hash,a.actualHash??"<unknown>",a.cachedPath));return n?fo.join(a.cachedPath,n):a.cachedPath}}function Jm({expr:e,env:t,context:n,stdPath:r}){var c;if(!T(e,M.import,1))throw d({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
10666
10684
  ${L(e)}`});let i=e.args[0],a=(c=U({expr:i,env:t,context:{...n}}).$)==null?void 0:c.value;if(!rt(a))throw d({token:i.token,errorMessage:`Expected comptime_string for module path, got:
10667
- ${L(i)}`});let s=a.value;if(s.endsWith("prelude.yo"))throw d({token:i.token,errorMessage:'Directly importing module with name "prelude.yo" is not allowed.'});if(s.startsWith("std/")?(s=Mn.default.relative(Mn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Mn.default.resolve(r,s.replace("std/","./"))),s.startsWith(".")||(s="./"+s)):s==="std"&&(s=Mn.default.relative(Mn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Mn.default.resolve(r,"./index.yo")),s.startsWith(".")||(s="./"+s)),!s.startsWith(".")){let _=jd(s);if(_){let f=t.modulePath.replace(/^file:\/\//,"");s=Mn.default.relative(Mn.default.dirname(f),_),s.startsWith(".")||(s="./"+s)}}if(!s.startsWith(".")){let _=t.modulePath.replace(/^file:\/\//,""),f=Sv(_);if(f){let p=h=>{try{return Qm(h,s)}catch(v){throw d({token:i.token,errorMessage:v instanceof Error?v.message:String(v)})}},y=Vu().findPathDependency(s),g;if(y?g=Mn.default.resolve(f,y.path):g=p(f),!g){let h=Hd();h&&h!==f&&(g=p(h))}if(g){let h=Nv(g,s);s=Mn.default.relative(Mn.default.dirname(_),h),s.startsWith(".")||(s="./"+s)}}if(!s.startsWith("."))throw d({token:i.token,errorMessage:`Module "${s}" not found. If this is a dependency, add it to build.yo and run 'yo fetch'.
10685
+ ${L(i)}`});let s=a.value;if(s.endsWith("prelude.yo"))throw d({token:i.token,errorMessage:'Directly importing module with name "prelude.yo" is not allowed.'});if(s.startsWith("std/")?(s=Mn.default.relative(Mn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Mn.default.resolve(r,s.replace("std/","./"))),s.startsWith(".")||(s="./"+s)):s==="std"&&(s=Mn.default.relative(Mn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),Mn.default.resolve(r,"./index.yo")),s.startsWith(".")||(s="./"+s)),!s.startsWith(".")){let _=Kd(s);if(_){let f=t.modulePath.replace(/^file:\/\//,"");s=Mn.default.relative(Mn.default.dirname(f),_),s.startsWith(".")||(s="./"+s)}}if(!s.startsWith(".")){let _=t.modulePath.replace(/^file:\/\//,""),f=Nv(_);if(f){let p=h=>{try{return Zm(h,s)}catch(v){throw d({token:i.token,errorMessage:v instanceof Error?v.message:String(v)})}},y=Vu().findPathDependency(s),g;if(y?g=Mn.default.resolve(f,y.path):g=p(f),!g){let h=jd();h&&h!==f&&(g=p(h))}if(g){let h=Vv(g,s);s=Mn.default.relative(Mn.default.dirname(_),h),s.startsWith(".")||(s="./"+s)}}if(!s.startsWith("."))throw d({token:i.token,errorMessage:`Module "${s}" not found. If this is a dependency, add it to build.yo and run 'yo fetch'.
10668
10686
  ${L(e)}`})}let l="file://"+Mn.default.resolve(Mn.default.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!Mn.default.extname(l)){let _=l.replace(/^file:\/\//,"")+".yo",f=Mn.default.join(l.replace(/^file:\/\//,""),"index.yo"),p=(0,po.existsSync)(_),m=(0,po.existsSync)(f);if(p&&m)throw d({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://"+_;else if(m)l="file://"+f;else throw d({token:i.token,errorMessage:`Module not found: tried "${"file://"+_}" and "${f}"`})}if(!n.loadModule)throw d({token:i.token,errorMessage:"Module loader is not provided in the context."});try{let{moduleValue:_}=n.loadModule(l);return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}catch(_){throw d({token:i.token,errorMessage:`Failed to import module "${s}":
10669
- ${_ instanceof rr||_ instanceof vr?_.toString():_ instanceof Error?_.message:String(_)}`})}}function Sv(e){let t=Mn.default.dirname(e),n=Mn.default.parse(t).root;for(;t!==n;){if((0,po.existsSync)(Mn.default.join(t,"yo.lock"))||(0,po.existsSync)(Mn.default.join(t,"build.yo")))return t;t=Mn.default.dirname(t)}}function Nv(e,t){let n=Mn.default.join(e,"index.yo"),r=Mn.default.join(e,t+".yo");return(0,po.existsSync)(n)?n:(0,po.existsSync)(r)?r:e}function Ou({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:i,lhs:o,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!Qe(i),c=e.token.value;if(u&&c!=="_")throw d({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${c}"`});if(Pt(i)&&t.length!==1)throw d({token:o.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw d({token:o.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let _={};for(let p=0;p<t.length;p++){let m=t[p],y=p,g,h=n[y],v,$,E,C;if(I(m)&&T(m,":",2)&&m.args[0].token.value==="..."&&m.args[1].token.value==="..."||X(m)&&m.token.value==="..."){if(Pt(i))throw d({token:m.token,errorMessage:`Cannot destructure union type with _, got ${D(i)}`});for(let w=0;w<n.length;w++){let b=n[w];if(_[b.label])continue;_[b.label]={label:b.label,variableName:b.label,type:b.type};let k=or(r)||_r(r)||Et(r)||hn(r)?r.fields[w]:void 0;if(!k&&s)throw d({token:m.token,errorMessage:`Destructuring field "${b.label}" is not defined in compile-time only context.`});let{env:A}=Pe({env:a,variable:{name:b.label,value:k?[Yn(k)]:void 0,type:b.type,isCompileTimeOnly:s,token:m.token,initializedAtToken:m.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=A}m.$={env:a,type:i,value:r,pathCollection:[]};continue}else if(I(m)&&T(m,":",2)){let w=m.args[0],b=m.args[1];if(!X(w)||!kt(w))throw d({token:w.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${L(w)}`});E=w;let k=E.token.value,A=n.findIndex(V=>V.label===k);if(A===-1)throw d({token:m.token,errorMessage:`Label "${k}" being destructured not found.`});y=A,h=n[y];let S;if((or(r)||_r(r)||Et(r)||hn(r))&&(S=r.fields[y]),g=S,X(b)&&kt(b))C=b,v=b.token.value,$=b.token;else throw d({token:b.token,errorMessage:`Nested destructuring is not supported:
10687
+ ${_ instanceof rr||_ instanceof vr?_.toString():_ instanceof Error?_.message:String(_)}`})}}function Nv(e){let t=Mn.default.dirname(e),n=Mn.default.parse(t).root;for(;t!==n;){if((0,po.existsSync)(Mn.default.join(t,"yo.lock"))||(0,po.existsSync)(Mn.default.join(t,"build.yo")))return t;t=Mn.default.dirname(t)}}function Vv(e,t){let n=Mn.default.join(e,"index.yo"),r=Mn.default.join(e,t+".yo");return(0,po.existsSync)(n)?n:(0,po.existsSync)(r)?r:e}function Ou({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:i,lhs:o,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!Qe(i),c=e.token.value;if(u&&c!=="_")throw d({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${c}"`});if(Pt(i)&&t.length!==1)throw d({token:o.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw d({token:o.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let _={};for(let p=0;p<t.length;p++){let m=t[p],y=p,g,h=n[y],v,$,E,C;if(I(m)&&T(m,":",2)&&m.args[0].token.value==="..."&&m.args[1].token.value==="..."||X(m)&&m.token.value==="..."){if(Pt(i))throw d({token:m.token,errorMessage:`Cannot destructure union type with _, got ${D(i)}`});for(let w=0;w<n.length;w++){let b=n[w];if(_[b.label])continue;_[b.label]={label:b.label,variableName:b.label,type:b.type};let k=or(r)||_r(r)||Et(r)||hn(r)?r.fields[w]:void 0;if(!k&&s)throw d({token:m.token,errorMessage:`Destructuring field "${b.label}" is not defined in compile-time only context.`});let{env:A}=Pe({env:a,variable:{name:b.label,value:k?[Yn(k)]:void 0,type:b.type,isCompileTimeOnly:s,token:m.token,initializedAtToken:m.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=A}m.$={env:a,type:i,value:r,pathCollection:[]};continue}else if(I(m)&&T(m,":",2)){let w=m.args[0],b=m.args[1];if(!X(w)||!kt(w))throw d({token:w.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${L(w)}`});E=w;let k=E.token.value,A=n.findIndex(V=>V.label===k);if(A===-1)throw d({token:m.token,errorMessage:`Label "${k}" being destructured not found.`});y=A,h=n[y];let S;if((or(r)||_r(r)||Et(r)||hn(r))&&(S=r.fields[y]),g=S,X(b)&&kt(b))C=b,v=b.token.value,$=b.token;else throw d({token:b.token,errorMessage:`Nested destructuring is not supported:
10670
10688
 
10671
10689
  ${L(b)}`});if(_[h.label])throw d({token:m.token,errorMessage:`Label "${k}" being destructured already exists.`});_[h.label]={label:h.label,variableName:v,type:h.type}}else{if(I(m))throw d({token:m.token,errorMessage:`Nested destructuring is not supported:
10672
10690
 
10673
- ${L(m)}`});if(X(m)&&kt(m)){if(Pt(i))throw d({token:m.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${D(i)}`});if(_[h.label])throw d({token:m.token,errorMessage:`Label "${h.label}" being destructured already exists.`});_[h.label]={label:h.label,variableName:m.token.value,type:h.type},(or(r)||_r(r)||hn(r)||Et(r))&&(g=r.fields[y]),v=m.token.value,$=m.token}else throw d({token:m.token,errorMessage:`Unsupported destructuring pattern for: ${L(m)}`})}if(v&&$){if(!g&&s)throw d({token:m.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:w}=Pe({env:a,variable:{name:v,type:h.type,isCompileTimeOnly:s,value:g?[Yn(g)]:void 0,token:$,initializedAtToken:$,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=w,m.$={env:a,type:h.type,value:g,pathCollection:[]},E&&(E.$={env:a,type:h.type,value:g,pathCollection:[]}),C&&(C.$={env:a,type:h.type,value:g,pathCollection:[]})}}let f=[];for(let p in _){let m=_[p];f.push({label:m.label,type:m.type,variableName:m.variableName})}return{env:a,runtimeDestructurings:f}}function Jm({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:i}){var s;if(!((s=t.$)!=null&&s.type))throw d({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${L(t)}`});let o=t.$.type,a=t.$.value;if((xe(o)||Pt(o)||We(o))&&I(e))return Ou({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:X(t)});if(Qe(o)&&I(e)&&T(e,M.tuple))return Ou({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:X(t)});if(ze(o)&&I(e)){let l=o.selectedVariantName;if(!l)throw d({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${D(o)}`});let u=o.variants.find(c=>c.name===l);if(!u)throw d({token:t.token,errorMessage:`Expected enum variant "${l}" to be defined, got ${D(o)}`});if(!u.fields)throw d({token:t.token,errorMessage:`Cannot destructure enum variant "${l}" without fields, got ${D(o)}`});return Ou({lhsFunc:e.func,lhsFields:e.args,rhsFields:u.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:X(t)})}throw Qe(o)||xe(o)||Pt(o)||We(o)?d({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
10691
+ ${L(m)}`});if(X(m)&&kt(m)){if(Pt(i))throw d({token:m.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${D(i)}`});if(_[h.label])throw d({token:m.token,errorMessage:`Label "${h.label}" being destructured already exists.`});_[h.label]={label:h.label,variableName:m.token.value,type:h.type},(or(r)||_r(r)||hn(r)||Et(r))&&(g=r.fields[y]),v=m.token.value,$=m.token}else throw d({token:m.token,errorMessage:`Unsupported destructuring pattern for: ${L(m)}`})}if(v&&$){if(!g&&s)throw d({token:m.token,errorMessage:`Destructuring field "${v}" is not defined in compile-time only context.`});let{env:w}=Pe({env:a,variable:{name:v,type:h.type,isCompileTimeOnly:s,value:g?[Yn(g)]:void 0,token:$,initializedAtToken:$,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheRcValue:!1}});a=w,m.$={env:a,type:h.type,value:g,pathCollection:[]},E&&(E.$={env:a,type:h.type,value:g,pathCollection:[]}),C&&(C.$={env:a,type:h.type,value:g,pathCollection:[]})}}let f=[];for(let p in _){let m=_[p];f.push({label:m.label,type:m.type,variableName:m.variableName})}return{env:a,runtimeDestructurings:f}}function ey({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:i}){var s;if(!((s=t.$)!=null&&s.type))throw d({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${L(t)}`});let o=t.$.type,a=t.$.value;if((xe(o)||Pt(o)||We(o))&&I(e))return Ou({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:X(t)});if(Qe(o)&&I(e)&&T(e,M.tuple))return Ou({lhsFunc:e.func,lhsFields:e.args,rhsFields:o.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:X(t)});if(ze(o)&&I(e)){let l=o.selectedVariantName;if(!l)throw d({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${D(o)}`});let u=o.variants.find(c=>c.name===l);if(!u)throw d({token:t.token,errorMessage:`Expected enum variant "${l}" to be defined, got ${D(o)}`});if(!u.fields)throw d({token:t.token,errorMessage:`Cannot destructure enum variant "${l}" without fields, got ${D(o)}`});return Ou({lhsFunc:e.func,lhsFields:e.args,rhsFields:u.fields,rhsValue:a,rhsType:o,lhs:e,env:n,context:{...i},isCompileTimeOnly:r,isDestructuringAtomVariable:X(t)})}throw Qe(o)||xe(o)||Pt(o)||We(o)?d({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
10674
10692
 
10675
10693
  ${L(e)}`}):d({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
10676
10694
 
10677
- ${D(o)}`})}function ey({expr:e,env:t,context:n}){var u,c,_,f,p,m,y,g,h,v,$;if(!T(e,":=",2)&&!T(e,"::",2))throw d({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=T(e,"::")||n.forceCompileTimeBindings===!0,i=!T(e,"::");if(!r&&((u=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:u.kind)==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw d({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],a=e.args[1],s=!1,l=o;if(I(o)&&T(o,M.given)){if(o.args.length!==1)throw d({token:o.token,errorMessage:`Expected exactly one argument for "given", got ${o.args.length}`});s=!0,l=o.args[0]}if(I(l)&&T(l,":"))throw d({token:l.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
10695
+ ${D(o)}`})}function ty({expr:e,env:t,context:n}){var u,c,_,f,p,m,y,g,h,v,$;if(!T(e,":=",2)&&!T(e,"::",2))throw d({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=T(e,"::")||n.forceCompileTimeBindings===!0,i=!T(e,"::");if(!r&&((u=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:u.kind)==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw d({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],a=e.args[1],s=!1,l=o;if(I(o)&&T(o,M.given)){if(o.args.length!==1)throw d({token:o.token,errorMessage:`Expected exactly one argument for "given", got ${o.args.length}`});s=!0,l=o.args[0]}if(I(l)&&T(l,":"))throw d({token:l.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
10678
10696
  (${L(l)}) = ${L(a)}`});if(a=U({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),(c=a.$)!=null&&c.env&&(t=(_=a.$)==null?void 0:_.env),(f=a.$)!=null&&f.type&&pi(a.$.type,a.token),Ot((p=a.$)==null?void 0:p.controlFlow)&&xu(a,a.$.controlFlow),Si(a),X(l)){if(ji(a,t),Vn(a,{...n}),(m=a.$)!=null&&m.env&&(t=(y=a.$)==null?void 0:y.env),!kt(l))throw d({token:l.token,errorMessage:`Invalid assignment to ${l.token.value}, expected identifier or operator`});let E=s||r,C=s?!1:i,w=(g=a.$)==null?void 0:g.type;if((h=l.$)!=null&&h.type){try{let{expr:O,type:x,env:N}=$i({expr:a,type:(v=l.$)==null?void 0:v.type,env:t,context:{...n}});a=O,w=x,t=N}catch(O){throw d({token:a.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${L(a)}
10679
10697
  ${O}`})}if(!ae({type:l.$.type,env:t},{type:w,env:t}))throw d({token:l.token,errorMessage:`Incompatible types:
10680
10698
  - Defined: ${D(l.$.type)}
@@ -10685,7 +10703,7 @@ Type:
10685
10703
  ${D(l.$.type)}`});if(E&&Jr(l.$.type,t))throw d({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${D(l.$.type)}" which can only be used at the runtime:
10686
10704
  ${L(e)}`});let b=($=a.$)==null?void 0:$.value;if(W(b)&&!b.value.typeName&&b.value!==n.SelfType?b.value.typeName=l.token.value:Ce(b)&&!b.funcName?(b.funcName=l.token.value,b.funcId+=`_${l.token.value}`):(Et(b)||on(b))&&!b.type.typeName&&b.type!==n.SelfType&&(b.type.typeName=l.token.value),s&&Ce(b)&&(b.isModuleEffectMember=!0),!b&&E)throw d({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
10687
10705
  Got runtime value. Please consider using ":=" instead of "::":
10688
- ${L(a)}`});l.$={...l.$,env:t,type:l.$.type,value:E?b?Yn(b):ue(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let k=l.$.type;z(k)&&w&&z(w)&&w.resolvedConcreteType&&(k={...k,resolvedConcreteType:w.resolvedConcreteType},l.$.type=k);let A=Aa(a,t,t.modulePath),S=A;A!=null&&A.consumedAtToken&&(S=void 0);let{env:V}=Pe({env:t,variable:{name:l.token.value,type:k,isCompileTimeOnly:E,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Je(k),isOwningTheSameRcValueAs:S,isReassignable:!s,isImplicit:s}});return t=V,l.$.env=t,s&&(o.$={env:t,value:se,type:se.type,pathCollection:[]}),e.$={env:t,value:se,type:se.type,pathCollection:[],isCompileTimeOnlyAssignment:E},e}else{let E=s||r,{env:C,runtimeDestructurings:w}=Jm({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=C,e.$={env:t,value:se,type:se.type,pathCollection:[],runtimeDestructurings:w,isCompileTimeOnlyAssignment:E},e}}function Vv(e){return I(e)?T(e,"|",2):!1}function Ru(e){if(!Vv(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Ru(n),...Ru(r)]}function xv(e){return Yr(e)||Hr(e)||Or(e)||Zn(e)||rn(e)||Tn(e)||ln(e)}function ty({expr:e,env:t,context:n}){var E,C,w,b,k,A,S,V,O,x,N;if(!T(e,M.match))throw d({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw d({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=X(i)?U({expr:i,env:t,context:{...n,expectedType:void 0}}):nn({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw d({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${L(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(tt(a)?(u=a.childType,l=a.tag):u=a,xv(u))return Dv({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!ze(u))throw d({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?D(a):"unknown type"}`});let c=u,_=r.slice(1),f=[],p,m=new Set,y=!1,g=!1,h=[],v=[];for(let P=0;P<_.length;P++){let R=_[P],H=t;if(!I(R)||!T(R,"=>",2))throw d({token:R.token,errorMessage:`Expected ":" for match pattern, got ${L(R)}`});let G=R.args[0],Q=R.args[1];if(I(G)&&T(G,".",1)||Kt(G,"_")){if(g)throw d({token:G.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let K;if(I(G)){if(K=G.args[0],!X(K))throw d({token:G.token,errorMessage:`Expected identifier for enum variant, got ${L(K)}`})}else g=!0,K=G;let j=K.token.value,ie=c.variants.find(Fe=>Fe.name===j);if(!ie&&j!=="_")throw d({token:G.token,errorMessage:`Enum variant "${j}" not found in ${D(c)}`});if(ie&&ie.fields&&ie.fields.length>0)throw d({token:G.token,errorMessage:`Enum variant "${j}" has ${ie.fields.length} field(s) and must be destructured. Use .${j}(...) instead of .${j}`});if(m.add(j),j!=="_"&&hn(s)&&s.variantName!==j)continue;let ce={...c,selectedVariantName:j==="_"?void 0:j};K.$={env:H,type:ce,value:void 0,pathCollection:[]};let ee=ce;l&&l==="Ptr"&&(ee=to(ce));let pe=Q;H=yt(H),G.$={env:H,type:ee,value:void 0,pathCollection:[],caseExecuted:!0};let Z=nn({expr:pe,env:H,context:{...n,isExecuting:hn(s)&&s.variantName===j},variablesToAdd:[]});if(!((E=Z.$)!=null&&E.type))throw d({token:pe.token,errorMessage:`Expected type for match result expression, got ${L(pe)}`});let Ee=Yt(Z.$.env,!0);if(H=Ee,Z.$={...Z.$,env:Ee},n.expectedType&&!ae(n.expectedType,{type:Z.$.type,env:Z.$.env}))throw d({token:Z.token,errorMessage:`Incompatible type with expected type:
10706
+ ${L(a)}`});l.$={...l.$,env:t,type:l.$.type,value:E?b?Yn(b):ue(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let k=l.$.type;z(k)&&w&&z(w)&&w.resolvedConcreteType&&(k={...k,resolvedConcreteType:w.resolvedConcreteType},l.$.type=k);let A=Aa(a,t,t.modulePath),S=A;A!=null&&A.consumedAtToken&&(S=void 0);let{env:V}=Pe({env:t,variable:{name:l.token.value,type:k,isCompileTimeOnly:E,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:Je(k),isOwningTheSameRcValueAs:S,isReassignable:!s,isImplicit:s}});return t=V,l.$.env=t,s&&(o.$={env:t,value:se,type:se.type,pathCollection:[]}),e.$={env:t,value:se,type:se.type,pathCollection:[],isCompileTimeOnlyAssignment:E},e}else{let E=s||r,{env:C,runtimeDestructurings:w}=ey({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=C,e.$={env:t,value:se,type:se.type,pathCollection:[],runtimeDestructurings:w,isCompileTimeOnlyAssignment:E},e}}function xv(e){return I(e)?T(e,"|",2):!1}function Ru(e){if(!xv(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Ru(n),...Ru(r)]}function Dv(e){return Yr(e)||Hr(e)||Or(e)||Zn(e)||rn(e)||Tn(e)||ln(e)}function ny({expr:e,env:t,context:n}){var E,C,w,b,k,A,S,V,O,x,N;if(!T(e,M.match))throw d({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw d({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=X(i)?U({expr:i,env:t,context:{...n,expectedType:void 0}}):nn({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw d({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${L(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(tt(a)?(u=a.childType,l=a.tag):u=a,Dv(u))return Mv({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!ze(u))throw d({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?D(a):"unknown type"}`});let c=u,_=r.slice(1),f=[],p,m=new Set,y=!1,g=!1,h=[],v=[];for(let P=0;P<_.length;P++){let R=_[P],H=t;if(!I(R)||!T(R,"=>",2))throw d({token:R.token,errorMessage:`Expected ":" for match pattern, got ${L(R)}`});let G=R.args[0],Q=R.args[1];if(I(G)&&T(G,".",1)||Kt(G,"_")){if(g)throw d({token:G.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let K;if(I(G)){if(K=G.args[0],!X(K))throw d({token:G.token,errorMessage:`Expected identifier for enum variant, got ${L(K)}`})}else g=!0,K=G;let j=K.token.value,ie=c.variants.find(Fe=>Fe.name===j);if(!ie&&j!=="_")throw d({token:G.token,errorMessage:`Enum variant "${j}" not found in ${D(c)}`});if(ie&&ie.fields&&ie.fields.length>0)throw d({token:G.token,errorMessage:`Enum variant "${j}" has ${ie.fields.length} field(s) and must be destructured. Use .${j}(...) instead of .${j}`});if(m.add(j),j!=="_"&&hn(s)&&s.variantName!==j)continue;let ce={...c,selectedVariantName:j==="_"?void 0:j};K.$={env:H,type:ce,value:void 0,pathCollection:[]};let ee=ce;l&&l==="Ptr"&&(ee=to(ce));let pe=Q;H=yt(H),G.$={env:H,type:ee,value:void 0,pathCollection:[],caseExecuted:!0};let Z=nn({expr:pe,env:H,context:{...n,isExecuting:hn(s)&&s.variantName===j},variablesToAdd:[]});if(!((E=Z.$)!=null&&E.type))throw d({token:pe.token,errorMessage:`Expected type for match result expression, got ${L(pe)}`});let Ee=Yt(Z.$.env,!0);if(H=Ee,Z.$={...Z.$,env:Ee},n.expectedType&&!ae(n.expectedType,{type:Z.$.type,env:Z.$.env}))throw d({token:Z.token,errorMessage:`Incompatible type with expected type:
10689
10707
  - Expected: ${D(n.expectedType.type)}
10690
10708
  - Actual : ${D(Z.$.type)}`});if(s===void 0&&Z.$&&(Z.$.value=void 0),Ot(Z.$.controlFlow)?(h.push(Z.$.controlFlow),Vt(Z.$.controlFlow,"return")&&v.push(Z),s&&!Oe(s)&&hn(s)?e.$={env:Z.$.env,type:((C=n.expectedType)==null?void 0:C.type)??Z.$.type,value:Z.$.value,pathCollection:Z.$.pathCollection,controlFlow:Z.$.controlFlow}:s===void 0&&(e.$={env:Z.$.env,type:((w=n.expectedType)==null?void 0:w.type)??Z.$.type,value:void 0,pathCollection:Z.$.pathCollection,controlFlow:Z.$.controlFlow})):y=!0,H=Z.$.env,f.push(Z),n.expectedType&&!ae(n.expectedType,{type:Z.$.type,env:Z.$.env}))throw d({token:Z.token,errorMessage:`Incompatible type with expected type:
10691
10709
  - Expected: ${D(n.expectedType.type)}
@@ -10700,7 +10718,7 @@ Supported patterns:
10700
10718
  - _ (wildcard pattern)`})}let $=h.length>0?Ca(h):void 0;if(y||!Ot($)){if(y&&!p)throw d({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(p||(p={type:se.type,env:t}),!m.has("_")){let H=c.variants.filter(G=>!m.has(G.name));if(H.length>0)throw d({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
10701
10719
 
10702
10720
  - ${H.map(G=>G.name).join(`
10703
- - `)}`})}let P=f.filter(H=>H.$&&!Vt(H.$.controlFlow,"return")&&!Vt(H.$.controlFlow,"escape")),R;hn(s)&&!Oe(s)&&P.length===1&&P[0].$?(t=P[0].$.env,R=P[0].$.value):hn(s)&&P.length===1&&P[0].$?t=P[0].$.env:t=Mo(t,P),e.$={env:t,type:((N=n.expectedType)==null?void 0:N.type)??p.type,value:s===void 0?void 0:R!==void 0?R:ue(p.type,{env:t,context:n}),pathCollection:[]},Tt(e,!0)}else{if(h.length===0)throw d({token:e.token,errorMessage:"No control flows found but expected some."});if(Vt($,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let P;if(v.length>0&&v[0].$?P=v[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?P=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(P=n.expectedType.type),!P)throw d({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:P,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Ea(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ue(P,{env:t,context:n}):void 0,pathCollection:[],controlFlow:$}}else if(Vt($,"escape")){if(!n.enclosingFunctionReturnType)throw d({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let P=n.enclosingFunctionReturnType;e.$={env:t,type:P,value:void 0,pathCollection:[],controlFlow:$}}else if(Vt($,"break")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:$}}else if(Vt($,"continue")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:$}}return e}return e}function Dv({expr:e,env:t,context:n,scrutineeExpr:r,scrutineeType:i,scrutineeValue:o}){var y,g,h,v,$,E,C,w,b;let a=e.args.slice(1),s=[],l,u=new Set,c=!1,_=!1,f=[],p=[];for(let k=0;k<a.length;k++){let A=a[k],S=t;if(!I(A)||!T(A,"=>",2))throw d({token:A.token,errorMessage:`Expected "=>" for match pattern, got ${L(A)}`});let V=A.args[0],O=A.args[1];if(Kt(V,"_")){if(_)throw d({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:S,type:i,value:void 0,pathCollection:[],caseExecuted:!0},S=yt(S);let G=nn({expr:O,env:S,context:{...n,isExecuting:o!==void 0&&!Oe(o)},variablesToAdd:[]});if(!((y=G.$)!=null&&y.type))throw d({token:O.token,errorMessage:`Expected type for match result expression, got ${L(O)}`});let Q=Yt(G.$.env,!0);if(S=Q,G.$={...G.$,env:Q},n.expectedType&&!ae(n.expectedType,{type:G.$.type,env:G.$.env}))throw d({token:G.token,errorMessage:`Incompatible type with expected type:
10721
+ - `)}`})}let P=f.filter(H=>H.$&&!Vt(H.$.controlFlow,"return")&&!Vt(H.$.controlFlow,"escape")),R;hn(s)&&!Oe(s)&&P.length===1&&P[0].$?(t=P[0].$.env,R=P[0].$.value):hn(s)&&P.length===1&&P[0].$?t=P[0].$.env:t=Mo(t,P),e.$={env:t,type:((N=n.expectedType)==null?void 0:N.type)??p.type,value:s===void 0?void 0:R!==void 0?R:ue(p.type,{env:t,context:n}),pathCollection:[]},Tt(e,!0)}else{if(h.length===0)throw d({token:e.token,errorMessage:"No control flows found but expected some."});if(Vt($,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let P;if(v.length>0&&v[0].$?P=v[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?P=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(P=n.expectedType.type),!P)throw d({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:P,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Ea(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ue(P,{env:t,context:n}):void 0,pathCollection:[],controlFlow:$}}else if(Vt($,"escape")){if(!n.enclosingFunctionReturnType)throw d({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let P=n.enclosingFunctionReturnType;e.$={env:t,type:P,value:void 0,pathCollection:[],controlFlow:$}}else if(Vt($,"break")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:$}}else if(Vt($,"continue")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:$}}return e}return e}function Mv({expr:e,env:t,context:n,scrutineeExpr:r,scrutineeType:i,scrutineeValue:o}){var y,g,h,v,$,E,C,w,b;let a=e.args.slice(1),s=[],l,u=new Set,c=!1,_=!1,f=[],p=[];for(let k=0;k<a.length;k++){let A=a[k],S=t;if(!I(A)||!T(A,"=>",2))throw d({token:A.token,errorMessage:`Expected "=>" for match pattern, got ${L(A)}`});let V=A.args[0],O=A.args[1];if(Kt(V,"_")){if(_)throw d({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:S,type:i,value:void 0,pathCollection:[],caseExecuted:!0},S=yt(S);let G=nn({expr:O,env:S,context:{...n,isExecuting:o!==void 0&&!Oe(o)},variablesToAdd:[]});if(!((y=G.$)!=null&&y.type))throw d({token:O.token,errorMessage:`Expected type for match result expression, got ${L(O)}`});let Q=Yt(G.$.env,!0);if(S=Q,G.$={...G.$,env:Q},n.expectedType&&!ae(n.expectedType,{type:G.$.type,env:G.$.env}))throw d({token:G.token,errorMessage:`Incompatible type with expected type:
10704
10722
  - Expected: ${D(n.expectedType.type)}
10705
10723
  - Actual : ${D(G.$.type)}`});if(o===void 0&&G.$&&(G.$.value=void 0),Ot(G.$.controlFlow))f.push(G.$.controlFlow),Vt(G.$.controlFlow,"return")&&p.push(G),o!==void 0&&!Oe(o)?e.$={env:G.$.env,type:((g=n.expectedType)==null?void 0:g.type)??G.$.type,value:G.$.value,pathCollection:G.$.pathCollection,controlFlow:G.$.controlFlow}:o===void 0&&(e.$={env:G.$.env,type:((h=n.expectedType)==null?void 0:h.type)??G.$.type,value:void 0,pathCollection:G.$.pathCollection,controlFlow:G.$.controlFlow});else if(c=!0,o!==void 0&&!Oe(o))return t=Mo(t,s.filter(K=>K.$&&!Vt(K.$.controlFlow,"return")&&!Vt(K.$.controlFlow,"escape"))),e.$={env:t,type:((v=n.expectedType)==null?void 0:v.type)??G.$.type,value:G.$.value,pathCollection:[],isPrimitiveMatch:!0},Tt(e,!0),e;if(S=G.$.env,s.push(G),!Ot(G.$.controlFlow)){if(!l)l={type:G.$.type,env:S};else if(!ae({type:l.type,env:S},{type:G.$.type,env:t}))throw d({token:G.token,errorMessage:`Incompatible types in match branches:
10706
10724
  - Previous: ${D(l.type)}
@@ -10709,13 +10727,13 @@ Hint: Use "::" to define compile-time constants, e.g., "myConst :: 42"`});let j=
10709
10727
  - Expected: ${D(n.expectedType.type)}
10710
10728
  - Actual : ${D(R.$.type)}`});if(o===void 0&&R.$&&(R.$.value=void 0),Ot(R.$.controlFlow)){if(f.push(R.$.controlFlow),Vt(R.$.controlFlow,"return")&&p.push(R),o!==void 0&&P)return e.$={env:R.$.env,type:((E=n.expectedType)==null?void 0:E.type)??R.$.type,value:R.$.value,pathCollection:R.$.pathCollection,controlFlow:R.$.controlFlow},e;o===void 0&&(e.$={env:R.$.env,type:((C=n.expectedType)==null?void 0:C.type)??R.$.type,value:void 0,pathCollection:R.$.pathCollection,controlFlow:R.$.controlFlow})}else if(c=!0,o!==void 0&&!Oe(o)&&P)return e.$={env:R.$.env,type:((w=n.expectedType)==null?void 0:w.type)??R.$.type,value:R.$.value,pathCollection:R.$.pathCollection,isPrimitiveMatch:!0},Tt(e,!0),e;if(S=R.$.env,s.push(R),!Ot(R.$.controlFlow)){if(!l)l={type:R.$.type,env:S};else if(!ae({type:l.type,env:S},{type:R.$.type,env:t}))if(ae({type:Qt({type:l.type,expectedType:void 0,expr:void 0,env:l.env}),env:l.env},{type:R.$.type,env:S}))l={type:R.$.type,env:S};else throw d({token:R.token,errorMessage:`Incompatible types in match branches:
10711
10729
  - Previous: ${D(l.type)}
10712
- - Current : ${D(R.$.type)}`})}}if(!_)if(Zn(i)){let k=u.has("true"),A=u.has("false");if(!k||!A)throw d({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${k?"":"true"}${!k&&!A?", ":""}${A?"":"false"}`})}else throw d({token:e.token,errorMessage:`Match expression on ${D(i)} requires a wildcard pattern "_" for exhaustiveness.`});let m=f.length>0?Ca(f):void 0;if(c||!Ot(m)){if(c&&!l)throw d({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:se.type,env:t});let k=s.filter(A=>A.$&&!Vt(A.$.controlFlow,"return")&&!Vt(A.$.controlFlow,"escape"));o!==void 0&&!Oe(o)&&k.length===1&&k[0].$?t=k[0].$.env:t=Mo(t,k),e.$={env:t,type:((b=n.expectedType)==null?void 0:b.type)??l.type,value:o===void 0?void 0:ue(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},Tt(e,!0)}else{if(f.length===0)throw d({token:e.token,errorMessage:"No control flows found but expected some."});if(Vt(m,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let k;if(p.length>0&&p[0].$?k=p[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?k=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(k=n.expectedType.type),!k)throw d({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:k,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Ea(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ue(k,{env:t,context:n}):void 0,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}else if(Vt(m,"escape")){if(!n.enclosingFunctionReturnType)throw d({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let k=n.enclosingFunctionReturnType;e.$={env:t,type:k,value:void 0,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}else if(Vt(m,"break")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}else if(Vt(m,"continue")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}return e}return e}function ny({expr:e,env:t,context:n}){var l,u,c,_;let r=e.args[0];if(!r)throw d({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
10730
+ - Current : ${D(R.$.type)}`})}}if(!_)if(Zn(i)){let k=u.has("true"),A=u.has("false");if(!k||!A)throw d({token:e.token,errorMessage:`Match expression on bool is not exhaustive. Missing cases for: ${k?"":"true"}${!k&&!A?", ":""}${A?"":"false"}`})}else throw d({token:e.token,errorMessage:`Match expression on ${D(i)} requires a wildcard pattern "_" for exhaustiveness.`});let m=f.length>0?Ca(f):void 0;if(c||!Ot(m)){if(c&&!l)throw d({token:e.token,errorMessage:"Failed to determine the type of value from the match."});l||(l={type:se.type,env:t});let k=s.filter(A=>A.$&&!Vt(A.$.controlFlow,"return")&&!Vt(A.$.controlFlow,"escape"));o!==void 0&&!Oe(o)&&k.length===1&&k[0].$?t=k[0].$.env:t=Mo(t,k),e.$={env:t,type:((b=n.expectedType)==null?void 0:b.type)??l.type,value:o===void 0?void 0:ue(l.type,{env:t,context:n}),pathCollection:[],isPrimitiveMatch:!0},Tt(e,!0)}else{if(f.length===0)throw d({token:e.token,errorMessage:"No control flows found but expected some."});if(Vt(m,"return")){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let k;if(p.length>0&&p[0].$?k=p[0].$.type:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?k=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(k=n.expectedType.type),!k)throw d({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:k,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&Ea(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?ue(k,{env:t,context:n}):void 0,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}else if(Vt(m,"escape")){if(!n.enclosingFunctionReturnType)throw d({token:e.token,errorMessage:'All cases in match use "escape", but not inside a function with an enclosing function.'});let k=n.enclosingFunctionReturnType;e.$={env:t,type:k,value:void 0,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}else if(Vt(m,"break")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}else if(Vt(m,"continue")){if(!n.isEvaluatingLoopBody)throw d({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:se.type,value:se,pathCollection:[],controlFlow:m,isPrimitiveMatch:!0}}return e}return e}function ry({expr:e,env:t,context:n}){var l,u,c,_;let r=e.args[0];if(!r)throw d({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
10713
10731
  ${L(e)}`});{let f=r;for(;T(f,".")&&f.args.length>=1;)f=f.args[0];if(X(f)){let p=_e(t,f.token.value),m=p[p.length-1];if(m!=null&&m.isImplicit)throw d({token:r.token,errorMessage:`Cannot use "open" on implicit variable "${m.name}". Implicit variables must be passed via using() parameters.`})}}let i=U({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:i.token,errorMessage:`Failed to evaluate the module argument:
10714
10732
  ${L(i)}`});let o=i.$.type,a=i.$.value,s;if(Et(a)){let f=a,p=f.type;for(let m=0;m<p.fields.length;m++){let y=f.fields[m],g=p.fields[m],{env:h}=Pe({env:t,variable:{name:g.label,type:g.type,isCompileTimeOnly:!0,value:[y],token:((l=g.exprs.labelExpr)==null?void 0:l.token)??g.exprs.expr.token,initializedAtToken:((u=g.exprs.labelExpr)==null?void 0:u.token)??g.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=h}}else if(xe(o)){let f=a,p=o;s=[];for(let m=0;m<p.fields.length;m++){let y;_r(f)&&(y=f.fields[m]);let g=p.fields[m];try{let{env:h}=Pe({env:t,variable:{name:g.label,type:g.type,isCompileTimeOnly:!!y,value:y?[y]:void 0,token:((c=g.exprs.labelExpr)==null?void 0:c.token)??g.exprs.expr.token,initializedAtToken:((_=g.exprs.labelExpr)==null?void 0:_.token)??g.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});t=h,s.push({label:g.label,variableName:g.label,type:g.type})}catch(h){throw Wt([{token:r.token,errorMessage:`Failed to import struct field "${g.label}"`},...h instanceof rr?h.tokenAndErrorList:[{token:r.token,errorMessage:h instanceof Error?h.message:String(h)}]])}}}else throw d({token:r.token,errorMessage:`Expected module/struct for "${M.open}", got:
10715
- ${L(r)}`});return e.$={env:t,value:se,type:se.type,pathCollection:[],runtimeDestructurings:s},e}function ry({expr:e,env:t,context:n}){var s,l,u,c,_,f,p,m,y,g,h,v,$,E,C;if(!T(e,"."))throw d({token:e.token,errorMessage:`Expected "." for property access, got:
10733
+ ${L(r)}`});return e.$={env:t,value:se,type:se.type,pathCollection:[],runtimeDestructurings:s},e}function iy({expr:e,env:t,context:n}){var s,l,u,c,_,f,p,m,y,g,h,v,$,E,C;if(!T(e,"."))throw d({token:e.token,errorMessage:`Expected "." for property access, got:
10716
10734
  ${L(e)}`});if(T(e,".",1)){let w=e.args[0];if(!X(w)&&!kt(w))throw d({token:w.token,errorMessage:`Expected identifier for enum variant access, got:
10717
10735
  ${L(w)}`});let b=(s=n.expectedType)==null?void 0:s.type;if(!ze(b))throw d({token:e.token,errorMessage:"Failed to infer enum variant type."});let k=w.token.value,A=b,S=A.variants.find(O=>O.name===k);if(!S)throw d({token:w.token,errorMessage:`Enum variant "${k}" not found in enum`});let V={...A,selectedVariantName:k};if(!S.fields)e.$={env:t,type:V,value:Gi(V,k,[]),pathCollection:[]},w.$={env:t,type:V,pathCollection:[]};else{let O=ye(V);e.$={env:t,value:O,type:O.type,pathCollection:[]},w.$=e.$}return e}if(!T(e,".",2))throw d({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
10718
- ${L(e)}`});let r=e.args[0],i=e.args[1];if(r=U({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),X(i)&&i.token.value==="*"){if(tt((c=r.$)==null?void 0:c.type)){let w=r.$.type,b=w.childType;z(b)&&(b=kn(t,b));let k=(_=r.$)==null?void 0:_.value;if(vo(k)){let A=k.targetValue[0],S;return Lr(A)?S=A.elements[k.targetIndex]:S=A,e.$={env:t,type:b,value:S,originType:w,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=k.targetValue,e.$.ptrTargetIndex=k.targetIndex,i.$=e.$,e}if(Oe(k)){let A=ue(b,{variableName:k.variableName?`${k.variableName}.*`:void 0,env:t,context:n});return e.$={env:t,type:b,value:A,originType:w,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:b,value:void 0,originType:w,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Tt(e,!1),e}if(un((f=r.$)==null?void 0:f.type)){let w=r.$.type,b=w.childType;return z(b)&&(b=kn(t,b)),e.$={env:t,type:b,value:void 0,originType:w,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Tt(e,!1),e}}if(W((p=r.$)==null?void 0:p.value)){let w=r.$.value;if(ze(w.value)){if(!X(i))throw d({token:i.token,errorMessage:`Expected identifier for enum variant, got:
10736
+ ${L(e)}`});let r=e.args[0],i=e.args[1];if(r=U({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),X(i)&&i.token.value==="*"){if(tt((c=r.$)==null?void 0:c.type)){let w=r.$.type,b=w.childType;z(b)&&(b=kn(t,b));let k=(_=r.$)==null?void 0:_.value;if(vo(k)){let A=k.targetValue[0],S;return Lr(A)?S=A.elements[k.targetIndex]:S=A,e.$={env:t,type:b,value:S,originType:w,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=k.targetValue,e.$.ptrTargetIndex=k.targetIndex,i.$=e.$,e}if(Oe(k)){let A=ue(b,{variableName:k.variableName?`${k.variableName}.*`:void 0,env:t,context:n});return e.$={env:t,type:b,value:A,originType:w,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:b,value:void 0,originType:w,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Tt(e,!1),e}if(cn((f=r.$)==null?void 0:f.type)){let w=r.$.type,b=w.childType;return z(b)&&(b=kn(t,b)),e.$={env:t,type:b,value:void 0,originType:w,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,Tt(e,!1),e}}if(W((p=r.$)==null?void 0:p.value)){let w=r.$.value;if(ze(w.value)){if(!X(i))throw d({token:i.token,errorMessage:`Expected identifier for enum variant, got:
10719
10737
  ${L(i)}`});{let V=i.token.value,O=w.value.trait.fields.find(x=>x.label===V);if(O)return e.$={env:t,type:O.type,value:O.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let b=i.token.value,k=w.value,A=k.variants.find(V=>V.name===b);if(!A){let V=Br({concreteType:w.value,methodName:b,env:t});if(V.length===1){let O=V[0];return e.$={env:t,type:O.type,value:O.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(V.length>1)return e.$=void 0,e;throw d({token:i.token,errorMessage:`Enum variant "${b}" not found in enum`})}let S={...k,selectedVariantName:b};if(!A.fields)e.$={env:t,type:S,value:Gi(S,b,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let V=ye(S);e.$={env:t,type:V.type,value:V,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if(w.value.trait){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for type method, got:
10720
10738
  ${L(i)}`});let b=i.token.value,k=w.value.trait.fields.findLast(A=>A.label===b);if(k){if(k.assignedValue){let A=k.assignedValue.type;return e.$={env:t,type:A,value:k.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(k.unassignedSomeType){let A=ye(k.unassignedSomeType);return e.$={env:t,type:A.type,value:A,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:k.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let V of w.value.trait.fields)if(V.label===""&&V.assignedValue&&on(V.assignedValue)){let O=V.assignedValue,x=O.type,N=x.fields.findIndex(P=>P.label===b);if(N>=0){let P=x.fields[N],R=O.fields[N];if(J(P.type))continue;if(R)return e.$={env:t,type:R.type,value:R,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(P.unassignedSomeType){let H=ye(P.unassignedSomeType);return e.$={env:t,type:H.type,value:H,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let A=Br({concreteType:w.value,methodName:b,env:t});if(A.length===1){let V=A[0];return e.$={env:t,type:V.type,value:V.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let S=Ls({concreteType:w.value,propertyName:b,env:t});return S?(e.$={env:t,type:S.type,value:S.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}else if(We(w.value)){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for type method, got:
10721
10739
  ${L(i)}`});let b=i.token.value,A=w.value.fields.find(S=>S.label===b);return A?(e.$={env:t,type:A.type,value:A.assignedValue??ue(A.type,{variableName:A.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(st(w.value)){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for type method, got:
@@ -10723,19 +10741,19 @@ ${L(i)}`});let b=i.token.value,k=w.value;if(k.receiverType&&k.receiverType.trait
10723
10741
  ${L(i)}`});let A=w.length;if(k<0||k>=A)throw d({token:i.token,errorMessage:`Index out of bounds: ${k} for accessing field in:
10724
10742
  ${D((h=r.$)==null?void 0:h.type)}`});let S=w[k],V=r.$.originType||a,O=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(x=>[...x,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:S.type,originType:V,isAccessingProperty:!0,pathCollection:O},i.$=e.$,b){let x=[];(or(b)||_r(b))&&(x=b.fields),e.$.value=x==null?void 0:x[k]}return Tt(e,!1),e}else if(kt(i)){let k=i.token.value;{let A=w.findIndex(x=>x.label===k);if(A<0){if(We((v=r.$)==null?void 0:v.type))throw d({token:i.token,errorMessage:`Module field "${k}" not found in module type`});return e.$=void 0,e}let S=w[A],V=(($=r.$)==null?void 0:$.originType)||a,O=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(x=>[...x,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:S.type,originType:V,isAccessingProperty:!0,pathCollection:O},i.$=e.$,b)if(Oe(b))e.$.value=ue(S.type,{env:t,context:n});else{let x=[];(or(b)||_r(b))&&(x=b.fields);let N=x==null?void 0:x[A];N||(N=ue(S.type,{env:t,context:n})),e.$.value=N}return Tt(e,!1),e}}}}else if(We(o)){let w=o.fields,b=r.$.value;if(X(i)){if(i.token.type==="integer")throw d({token:i.token,errorMessage:`Accessomg module field by index is not allowed, got:
10725
10743
  ${L(i)}`});if(kt(i)){let k=i.token.value;{let A=w.findIndex(O=>O.label===k);if(A<0){if(We((E=r.$)==null?void 0:E.type))throw d({token:i.token,errorMessage:`Module field "${k}" not found in module type`});return e.$=void 0,e}let S=w[A],V=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(O=>[...O,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:S.type,isAccessingProperty:!0,pathCollection:V},i.$=e.$,b)if(Oe(b))e.$.value=ue(S.type,{env:t,context:n});else{let O=[];Et(b)&&(O=b.fields);let x=O==null?void 0:O[A];x||(x=ue(S.type,{env:t,context:n})),e.$.value=x}return e}}}}else if(ze(o)&&X(i)){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for enum variant property, got:
10726
- ${L(i)}`});let w=i.token.value,b=o.variants.find(k=>k.name===o.selectedVariantName);if(b){let k=(b.fields??[]).findIndex(V=>V.label===w);if(k<0)return e.$=void 0,e;let A=(b.fields??[])[k];e.$={env:t,type:A.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let S=(C=r.$)==null?void 0:C.value;return S&&hn(S)&&S.variantName===b.name&&(e.$.value=S.fields[k]),i.$=e.$,e}}return e.$=void 0,e}function iy({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw d({token:e.token,errorMessage:`Expected a function type for recur, got:
10744
+ ${L(i)}`});let w=i.token.value,b=o.variants.find(k=>k.name===o.selectedVariantName);if(b){let k=(b.fields??[]).findIndex(V=>V.label===w);if(k<0)return e.$=void 0,e;let A=(b.fields??[])[k];e.$={env:t,type:A.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let S=(C=r.$)==null?void 0:C.value;return S&&hn(S)&&S.variantName===b.name&&(e.$.value=S.fields[k]),i.$=e.$,e}}return e.$=void 0,e}function oy({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw d({token:e.token,errorMessage:`Expected a function type for recur, got:
10727
10745
  ${L(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!T(e,M.recur))throw d({token:e.token,errorMessage:`Expected recur, got:
10728
- ${L(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=Oi({functionValue:Ce(a)?a:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=Yt(u),e.$={type:s,value:ue(s,{variableName:"recur_result_"+$t(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return wr({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function oy({expr:e,env:t,context:n}){var a;if(!T(e,M.runtime,1))throw d({token:e.token,errorMessage:`Expected runtime(expr), got:
10746
+ ${L(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=Oi({functionValue:Ce(a)?a:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=Yt(u),e.$={type:s,value:ue(s,{variableName:"recur_result_"+$t(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return wr({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function ay({expr:e,env:t,context:n}){var a;if(!T(e,M.runtime,1))throw d({token:e.token,errorMessage:`Expected runtime(expr), got:
10729
10747
  ${L(e)}`});if(n.isAnalyzingCtfeCapability)throw d({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=U({expr:r,env:t,context:{...n}});if(!((a=i.$)!=null&&a.type))throw d({token:i.token,errorMessage:`Failed to evaluate runtime argument:
10730
- ${L(i)}`});let o=Qt({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 ay({expr:e,env:t,context:n}){Ge(e,"<:",2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!W(o.$.value))throw d({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=o.$.env;let a=o.$.value;if(n.isInsideWhereClause&&!z(a.value))throw d({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${L(r)} of type ${D(a.value)}`});let s=[];if(I(i)&&T(i,M.tuple))for(let p of i.args)I(p)&&T(p,"!")&&p.args.length===1?s.push({expr:p.args[0],isNegated:!0}):s.push({expr:p,isNegated:!1});else I(i)&&T(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:p,isNegated:m}of s){let y=U({expr:p,env:t,context:{...n}});if(!y.$||!y.$.value||!W(y.$.value)||!st(y.$.value.value))throw d({token:p.token,errorMessage:"Expected trait type for right-hand side expression."});t=y.$.env;let g=y.$.value.value;if(g.receiverType)throw d({token:p.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(m&&!n.isInsideWhereClause)throw d({token:p.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:g,expr:p,isNegated:m})}if(n.isInsideWhereClause&&z(a.value)){let p=a.value;for(let{traitType:m,isNegated:y}of l){let g={...m,receiverType:p};t=Gr({env:t,someType:p,traitType:g,isNegated:y})}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw d({token:i.token,errorMessage:"Multiple trait constraints (tuple form) are only allowed in where clauses."});let{traitType:u}=l[0],c=a.value;if(!z(c)&&!vn({targetType:c,traitType:u,env:t}))throw d({token:e.token,errorMessage:`Type "${D(c)}" does not implement trait "${u.typeName??D(u)}".`});let _={...u,receiverType:a.value},f=ye(_);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function sy({expr:e,env:t,context:n}){if(!T(e,M.test))throw d({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2&&e.args.length!==3)throw d({token:e.token,errorMessage:`test expects 2 or 3 arguments (name, [using clause], body), got ${e.args.length}`});let r=e.args.length===3,i=e.args[0],o=r?e.args[1]:void 0,a=r?e.args[2]:e.args[1];if(o&&!T(o,M.using))throw d({token:o.token,errorMessage:`Expected using(...) clause as second argument, got: ${L(o)}`});let s=U({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value)throw d({token:i.token,errorMessage:`Failed to evaluate test name: ${L(i)}`});if(t=s.$.env,!rt(s.$.value))throw d({token:i.token,errorMessage:`Expected string for test name, got ${L(i)}`});if(r){let l=et(o);o.$={env:t,type:se.type,value:se,pathCollection:[],originalExpr:l};let u=et(a);a.$={env:t,type:se.type,value:se,pathCollection:[],originalExpr:u}}else{let l=et(a),u=U({expr:a,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!u.$)throw d({token:a.token,errorMessage:`Failed to evaluate test body: ${L(a)}`});if(!De(u.$.type))throw d({token:a.token,errorMessage:`Test body must have 'unit' type, got ${D(u.$.type)}`});u.$.originalExpr=l}return e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function ly({expr:e,env:t,context:n}){var s,l;if(!T(e,F.typeof,1))throw d({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
10748
+ ${L(i)}`});let o=Qt({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 sy({expr:e,env:t,context:n}){Ge(e,"<:",2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!W(o.$.value))throw d({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=o.$.env;let a=o.$.value;if(n.isInsideWhereClause&&!z(a.value))throw d({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${L(r)} of type ${D(a.value)}`});let s=[];if(I(i)&&T(i,M.tuple))for(let p of i.args)I(p)&&T(p,"!")&&p.args.length===1?s.push({expr:p.args[0],isNegated:!0}):s.push({expr:p,isNegated:!1});else I(i)&&T(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:p,isNegated:m}of s){let y=U({expr:p,env:t,context:{...n}});if(!y.$||!y.$.value||!W(y.$.value)||!st(y.$.value.value))throw d({token:p.token,errorMessage:"Expected trait type for right-hand side expression."});t=y.$.env;let g=y.$.value.value;if(g.receiverType)throw d({token:p.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(m&&!n.isInsideWhereClause)throw d({token:p.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:g,expr:p,isNegated:m})}if(n.isInsideWhereClause&&z(a.value)){let p=a.value;for(let{traitType:m,isNegated:y}of l){let g={...m,receiverType:p};t=Gr({env:t,someType:p,traitType:g,isNegated:y})}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw d({token:i.token,errorMessage:"Multiple trait constraints (tuple form) are only allowed in where clauses."});let{traitType:u}=l[0],c=a.value;if(!z(c)&&!vn({targetType:c,traitType:u,env:t}))throw d({token:e.token,errorMessage:`Type "${D(c)}" does not implement trait "${u.typeName??D(u)}".`});let _={...u,receiverType:a.value},f=ye(_);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function ly({expr:e,env:t,context:n}){if(!T(e,M.test))throw d({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2&&e.args.length!==3)throw d({token:e.token,errorMessage:`test expects 2 or 3 arguments (name, [using clause], body), got ${e.args.length}`});let r=e.args.length===3,i=e.args[0],o=r?e.args[1]:void 0,a=r?e.args[2]:e.args[1];if(o&&!T(o,M.using))throw d({token:o.token,errorMessage:`Expected using(...) clause as second argument, got: ${L(o)}`});let s=U({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value)throw d({token:i.token,errorMessage:`Failed to evaluate test name: ${L(i)}`});if(t=s.$.env,!rt(s.$.value))throw d({token:i.token,errorMessage:`Expected string for test name, got ${L(i)}`});if(r){let l=et(o);o.$={env:t,type:se.type,value:se,pathCollection:[],originalExpr:l};let u=et(a);a.$={env:t,type:se.type,value:se,pathCollection:[],originalExpr:u}}else{let l=et(a),u=U({expr:a,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!u.$)throw d({token:a.token,errorMessage:`Failed to evaluate test body: ${L(a)}`});if(!De(u.$.type))throw d({token:a.token,errorMessage:`Test body must have 'unit' type, got ${D(u.$.type)}`});u.$.originalExpr=l}return e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function uy({expr:e,env:t,context:n}){var s,l;if(!T(e,F.typeof,1))throw d({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
10731
10749
  ${L(e)}`});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if((s=i.$)!=null&&s.env&&(t=i.$.env),!((l=i.$)!=null&&l.type))throw d({token:r.token,errorMessage:`Expected type for expression, got:
10732
- ${L(r)}`});let o=i.$.type,a=ye(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}var Uu=(()=>{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 uy(e,t){let n=Vt(t,"break")||Vt(t,"return")||Vt(t,"escape"),r=n||Uo(e);return{guaranteed:n,possible:r}}function Pu(e,t,n){let{possible:r}=uy(t,n);throw r?d({token:e.token,errorMessage:`Compile-time while loop exceeded the maximum iteration count (${Uu}). The loop body contains a conditional \`break\`, \`return\`, or \`escape\`, but the loop did not terminate within the limit.
10750
+ ${L(r)}`});let o=i.$.type,a=ye(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}var Uu=(()=>{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 cy(e,t){let n=Vt(t,"break")||Vt(t,"return")||Vt(t,"escape"),r=n||Uo(e);return{guaranteed:n,possible:r}}function Pu(e,t,n){let{possible:r}=cy(t,n);throw r?d({token:e.token,errorMessage:`Compile-time while loop exceeded the maximum iteration count (${Uu}). The loop body contains a conditional \`break\`, \`return\`, or \`escape\`, but the loop did not terminate within the limit.
10733
10751
  If this is an infinite runtime loop, use \`while runtime(true), { ... }\` instead.
10734
10752
  To increase the limit, set the YO_MAX_COMPTIME_LOOP_ITERATIONS environment variable.`}):d({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 Xs({expr:e,env:t,context:n,_comptimeIterationCount:r=0}){var c,_;if(e.args.length!==2&&e.args.length!==3)throw d({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=nn({expr:i,env:t,context:{...n},variablesToAdd:[]});if(!s.$)throw d({token:i.token,errorMessage:`Failed to evaluate the condition expression:
10735
10753
  ${L(i)}`});if(!Zn(s.$.type))throw d({token:i.token,errorMessage:`Expected bool type for condition expression, got:
10736
10754
  ${L(i)}`});let l=s.$.value,u=l!==void 0;if(dt(l)&&l.value===!1)return e.$={env:t,pathCollection:[],type:se.type,value:u?se:void 0},e;{let f=nn({expr:a,env:t,context:{...n,isEvaluatingLoopBody:{kind:"while",env:t}},variablesToAdd:[]});if(!f.$)throw d({token:a.token,errorMessage:`Failed to evaluate the body expression:
10737
10755
  ${L(a)}`});if(Ot(f.$.controlFlow)){if(Vt(f.$.controlFlow,"return")||Vt(f.$.controlFlow,"escape"))if(dt(l)&&l.value===!0){let y={};Vt(f.$.controlFlow,"return")&&(y.return=!0),Vt(f.$.controlFlow,"escape")&&(y.escape=!0),e.$={env:f.$.env,pathCollection:f.$.pathCollection,type:f.$.type,value:f.$.value,controlFlow:y}}else e.$={env:t,pathCollection:[],type:se.type,value:u?se:void 0};else if(Vt(f.$.controlFlow,"break"))e.$={env:f.$.env,pathCollection:[],type:se.type,value:u?se:void 0};else if(Vt(f.$.controlFlow,"continue")){let y=f.$.env;if(o){let g=U({expr:o,env:y,context:{...n}});if(!g.$)throw d({token:o.token,errorMessage:`Failed to evaluate the step expression:
10738
- ${L(o)}`});y=g.$.env}if(dt(l))return Xs({expr:e,env:y,context:{...n},_comptimeIterationCount:r+1});e.$={env:y,pathCollection:[],type:se.type,value:u?se:void 0}}return e}if(!dt(l)||l.value!==!0?!1:!!(Kt(i,"true")||T(i,"begin")&&i.args.length===1&&Kt(i.args[0],"true"))){let{guaranteed:y,possible:g}=uy(a,f.$.controlFlow);if(!y&&!g&&Pu(e,a,f.$.controlFlow),!y&&g)return e.$={env:f.$.env,pathCollection:[],type:se.type,value:void 0},e}if(!De(f.$.type))throw d({token:a.token,errorMessage:`Expected the while loop body to return unit, but got:
10756
+ ${L(o)}`});y=g.$.env}if(dt(l))return Xs({expr:e,env:y,context:{...n},_comptimeIterationCount:r+1});e.$={env:y,pathCollection:[],type:se.type,value:u?se:void 0}}return e}if(!dt(l)||l.value!==!0?!1:!!(Kt(i,"true")||T(i,"begin")&&i.args.length===1&&Kt(i.args[0],"true"))){let{guaranteed:y,possible:g}=cy(a,f.$.controlFlow);if(!y&&!g&&Pu(e,a,f.$.controlFlow),!y&&g)return e.$={env:f.$.env,pathCollection:[],type:se.type,value:void 0},e}if(!De(f.$.type))throw d({token:a.token,errorMessage:`Expected the while loop body to return unit, but got:
10739
10757
  ${D(f.$.type)}`});let m=f.$.value===void 0;if(t=f.$.env,o){let y=U({expr:o,env:t,context:{...n}});if(!y.$)throw d({token:o.token,errorMessage:`Failed to evaluate the step expression:
10740
- ${L(o)}`});t=y.$.env}if(dt(l)&&l.value===!0&&m){let y=et(i),h=(c=nn({expr:y,env:t,context:{...n},variablesToAdd:[]}).$)==null?void 0:c.value;if(dt(h)){let v=[a],$=t,E=h.value;for(let C=1;E&&C<Uu;C++){let w=et(a),b=nn({expr:w,env:$,context:{...n,isEvaluatingLoopBody:{kind:"while",env:$}},variablesToAdd:[]});if(!b.$)break;if(v.push(w),$=b.$.env,o){let V=et(o),O=U({expr:V,env:$,context:{...n}});if(!O.$)break;$=O.$.env}let k=et(i),S=(_=nn({expr:k,env:$,context:{...n},variablesToAdd:[]}).$)==null?void 0:_.value;if(dt(S)&&S.value===!1)E=!1;else if(dt(S)&&S.value===!0)E=!0;else return e.$={env:$,pathCollection:[],type:se.type,value:void 0,comptimeUnrolledBodies:v},e}if(!E)return e.$={env:$,pathCollection:[],type:se.type,value:void 0,comptimeUnrolledBodies:v},e}Pu(e,a,f.$.controlFlow)}if(dt(l)&&l.value===!0){let y=r+1;return y>=Uu&&Pu(e,a,f.$.controlFlow),Xs({expr:e,env:t,context:{...n},_comptimeIterationCount:y})}else return e.$={env:t,pathCollection:[],type:se.type,value:u?se:void 0},e}}function cy(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var Mv=cy("YO_DEBUG_EVAL")||cy("YO_DEBUG_EVAL_PROFILE"),_y=globalThis,la=_y.__yoEvalProfilerState??(_y.__yoEvalProfilerState={evalCount:0,evalStart:0});function Ri({expr:e,env:t,context:n}){if(Mv&&(la.evalStart||(la.evalStart=Date.now()),la.evalCount++,la.evalCount%1e5===0&&console.log(`[EVAL] ${la.evalCount} calls, ${Date.now()-la.evalStart}ms elapsed`)),X(e))switch(e.token.type){case"identifier":case"operator":return Ks({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return Dm(e,t,{...n});case"float":return xm(e,t,{...n});case"string":return Mm(e,t);case"char":return Im(e,t);case"bool":return Am(e,t);default:throw d({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
10741
- ${L(e)}`})}else if(T(e,":",2)){let{expr:r}=js({expr:e,env:t,context:n});return r}else{if(T(e,":=",2)||T(e,"::",2))return ey({expr:e,env:t,context:n});if(T(e,"=",2))return Rm({expr:e,env:t,context:n});if(T(e,"->",2))return I(e.args[0])&&(T(e.args[0],M.fn)||T(e.args[0],M.unsafe_fn))?Ps({expr:e,env:t,context:{...n,isUnsafeFunctionType:T(e.args[0],M.unsafe_fn)}}):I(e.args[0])&&T(e.args[0],M.Fn)?gm({expr:e,env:t,context:{...n}}):Hs({expr:e,env:t,context:{...n}});if(T(e,"=>",2))return I(e.args[0])&&T(e.args[0],M.fn)?fm({expr:e,env:t,context:{...n}}):Hs({expr:e,env:t,context:{...n}});if(T(e,"=>>",2))return Hs({expr:e,env:t,context:{...n}});if(T(e,M.recur))return iy({expr:e,env:t,context:{...n}});if(T(e,M.runtime))return oy({expr:e,env:t,context:{...n}});if(T(e,M.extern))return Bm({expr:e,env:t,context:{...n}});if(T(e,M.c_include))return Pm({expr:e,env:t,context:{...n}});if(T(e,M.test))return sy({expr:e,env:t,context:{...n}});if(T(e,M.cond))return Um({expr:e,env:t,context:{...n}});if(T(e,M.match))return ty({expr:e,env:t,context:{...n}});if(T(e,M.tuple))return Om({expr:e,env:t,context:{...n}});if(T(e,M.array))return Lm({expr:e,env:t,context:{...n}});if(T(e,M.comptime_list))return Sm({expr:e,env:t,context:{...n}});if(T(e,M.dyn))return Vm({expr:e,env:t,context:{...n}});if(T(e,M.struct))return aa({expr:e,env:t,context:{...n}});if(T(e,M.object))return Em({expr:e,env:t,context:{...n}});if(T(e,M.newtype))return Tm({expr:e,env:t,context:{...n}});if(T(e,M.enum))return ym({expr:e,env:t,context:{...n}});if(T(e,M.union))return Fm({expr:e,env:t,context:{...n}});if(T(e,"."))return ry({expr:e,env:t,context:{...n}});if(T(e,M.begin))return nn({expr:e,env:t,context:{...n},variablesToAdd:[]});if(T(e,M.module))return vm({expr:e,env:t,context:{...n}});if(T(e,M.trait))return km({expr:e,env:t,context:{...n}});if(T(e,M.Impl))return Dd({expr:e,env:t,context:{...n}});if(T(e,M.impl))return Wc({expr:e,env:t,context:{...n}});if(T(e,F.typeof))return ly({expr:e,env:t,context:{...n}});if(T(e,F.sizeof))return Zd({expr:e,env:t,context:{...n}});if(T(e,F.alignof))return gp({expr:e,env:t,context:{...n}});if(T(e,F.typeid))return om({expr:e,env:t,context:{...n}});if(T(e,F.downcast))return Zp({expr:e,env:t,context:{...n}});if(T(e,F.rc))return Qd({expr:e,env:t,context:{...n}});if(T(e,"<:"))return ay({expr:e,env:t,context:{...n}});if(T(e,F.the))return Jd({expr:e,env:t,context:{...n}});if(T(e,M.import))return Zm({expr:e,env:t,context:{...n},stdPath:n.stdPath});if(T(e,M.open))return ny({expr:e,env:t,context:{...n}});if(T(e,M.Ptr,1))return cm({expr:e,env:t,context:{...n}});if(T(e,M.Iso,1))return vd({expr:e,env:t,context:{...n}});if(T(e,M.Arc,1))return ad({expr:e,env:t,context:{...n}});if(T(e,F.__yo_address_of,1))return Xd({expr:e,env:t,context:{...n}});if(T(e,M.Tuple))return wm({expr:e,env:t,context:{...n}});if(T(e,M.Array))return _m({expr:e,env:t,context:{...n}});if(T(e,F.__yo_array_fill,2))return vp({expr:e,env:t,context:{...n}});if(T(e,M.Slice))return $m({expr:e,env:t,context:{...n}});if(T(e,M.ComptimeList))return pm({expr:e,env:t,context:{...n}});if(T(e,M.Future))return hm({expr:e,env:t,context:{...n}});if(T(e,M.Concrete))return dm({expr:e,env:t,context:{...n}});if(T(e,M.Dyn))return mm({expr:e,env:t,context:{...n}});if(T(e,F.comptime_expect_error))return $p({expr:e,env:t,context:{...n}});if(T(e,F.comptime_assert))return Tp({expr:e,env:t,context:{...n}});if(T(e,F.comptime_fn))return Cp({expr:e,env:t,context:{...n}});if(T(e,F.comptime_print))return Vp({expr:e,env:t,context:{...n}});if(T(e,F.panic))return Rd({expr:e,env:t,context:{...n}});if(T(e,F.asm))return Wd({expr:e,env:t,context:{...n}});if(T(e,F.global_asm))return qd({expr:e,env:t,context:{...n}});if(T(e,F.macro_expand))return Od({expr:e,env:t,context:{...n}});if(T(e,M.op_and)||T(e,M.op_or))return hp({expr:e,env:t,context:{...n}});if(T(e,M.escape))return zm({expr:e,env:t,context:{...n}});if(T(e,F.consume))return Dp({expr:e,env:t,context:{...n}});if(T(e,F.___drop))return kd({expr:e,env:t,context:{...n}});if(T(e,F.___dup))return wd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_decr_rc))return Mp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_incr_rc))return Op({expr:e,env:t,context:{...n}});if(T(e,F.__yo_decr_rc_atomic))return Pp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_incr_rc_atomic))return Rp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_iso_extract))return qp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_iso_dispose))return Yp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_arc_dispose))return Hp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_drop_array_element))return jp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dup_array_element))return Kp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_drop_tuple_element))return Xp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dup_tuple_element))return Qp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_rc_own))return Up({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dyn_drop))return zp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dyn_dup))return Bp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_sometype_drop))return Gp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_sometype_dup))return Wp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_gc_collect))return Vd({expr:e,env:t,context:{...n}});if(T(e,M.quote))return Md({expr:e,env:t,context:{...n}});if(T(e,M.gensym))return xd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_is_atom))return Fd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_is_fn_call))return Ld({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_get_callee))return Ad({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_get_args))return Id({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_to_string))return Sd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_eq))return Nd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_car))return bp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_cdr))return kp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_cons))return wp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_append))return Fp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_length))return Lp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_element_type))return Ap({expr:e,env:t,context:{...n}});if(I(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_")))return Np({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_bool_and,2)||T(e,F.__yo_comptime_bool_or,2)||T(e,F.__yo_comptime_bool_eq,2)||T(e,F.__yo_comptime_bool_neq,2)||T(e,F.__yo_comptime_bool_not,1)||T(e,F.__yo_comptime_bool_to_comptime_string,1))return Ep({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_string_concat,2)||T(e,F.__yo_comptime_string_eq,2)||T(e,F.__yo_comptime_string_neq,2)||T(e,F.__yo_comptime_string_lt,2)||T(e,F.__yo_comptime_string_lte,2)||T(e,F.__yo_comptime_string_gt,2)||T(e,F.__yo_comptime_string_gte,2)||T(e,F.__yo_comptime_string_length,1)||T(e,F.__yo_comptime_string_to_upper,1)||T(e,F.__yo_comptime_string_to_lower,1)||T(e,F.__yo_comptime_string_slice))return xp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_to_comptime_string,1))return em({expr:e,env:t,context:{...n}});if(T(e,F.__yo_are_types_compatible,2))return tm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_contains_rc_type,1))return nm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_can_form_rc_cycle,1))return rm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_impls,2))return im({expr:e,env:t,context:{...n}});if(T(e,F.__yo_var_print_info,1))return sm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_var_is_owning_the_rc_value))return lm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_var_has_other_aliases))return um({expr:e,env:t,context:{...n}});if(T(e,F.__yo_process_platform)||T(e,F.__yo_process_arch))return Yd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_build_executable)||T(e,F.__yo_build_static_library)||T(e,F.__yo_build_shared_library)||T(e,F.__yo_build_test)||T(e,F.__yo_build_run)||T(e,F.__yo_build_step)||T(e,F.__yo_build_step_depend_on)||T(e,F.__yo_build_target_host)||T(e,F.__yo_build_target_parse)||T(e,F.__yo_build_dependency)||T(e,F.__yo_build_path_dependency)||T(e,F.__yo_build_system_library)||T(e,F.__yo_build_link)||T(e,F.__yo_build_link_system_library)||T(e,F.__yo_build_option)||T(e,F.__yo_build_dep_artifact)||T(e,F.__yo_build_module)||T(e,F.__yo_build_module_link)||T(e,F.__yo_build_add_import)||T(e,F.__yo_build_dep_module)){for(let r=0;r<e.args.length;r++)e.args[r]=Ri({expr:e.args[r],env:t,context:{...n}});return Kd({expr:e,env:t,context:{...n}})}else return T(e,M.while)?Xs({expr:e,env:t,context:{...n}}):T(e,F.va_start)?am({expr:e,env:t,context:{...n}}):wr({expr:e,env:t,context:{...n}})}}function Ov(e){let t=e;for(;;){let n=ja.join(t,"std");if((0,fy.existsSync)(n))return n;let r=ja.dirname(t);if(r===t)break;t=r}return ja.join(__dirname,"../std")}var zu=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??Ov(__dirname),this.codeGenratorC=new Ds,Wu(Ri),d_(yp)}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)Go(r),Bo(r),this.clearDependencies(r),us(r),this.modules.delete(r);Go(t),Bo(t),this.clearDependencies(t),us(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())Go(t),Bo(t),us(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),ws(),Qc(),nc()}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.findExtensionDuplicates(t);for(let c of o)this.deleteModuleAndDependents(c);let a=t,s=new Va({modulePath:t,stdPath:this.stdPath,loadModule:c=>this.loadModule(c,void 0,a),inputString:n,allowPartialModule:this.allowPartialModule}),l=s.getModuleValue(),u=s.getModuleError();return this.modules.set(t,{moduleValue:l,moduleError:u,evaluator:s}),{moduleValue:l,moduleError:u}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,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}`);this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}};0&&(module.exports={Emitter,IdentifierRegex,ModuleManager,Operators,PlaceholderToken,RAIIToken,TokenType,charIsOperator,clearAllGlobalImplState,clearGenericImplsFromModule,clearImplsFromModule,debug,findMatchingBracketTokenIndex,generateExprFromCode,stringIsOperator,tokenize});
10758
+ ${L(o)}`});t=y.$.env}if(dt(l)&&l.value===!0&&m){let y=et(i),h=(c=nn({expr:y,env:t,context:{...n},variablesToAdd:[]}).$)==null?void 0:c.value;if(dt(h)){let v=[a],$=t,E=h.value;for(let C=1;E&&C<Uu;C++){let w=et(a),b=nn({expr:w,env:$,context:{...n,isEvaluatingLoopBody:{kind:"while",env:$}},variablesToAdd:[]});if(!b.$)break;if(v.push(w),$=b.$.env,o){let V=et(o),O=U({expr:V,env:$,context:{...n}});if(!O.$)break;$=O.$.env}let k=et(i),S=(_=nn({expr:k,env:$,context:{...n},variablesToAdd:[]}).$)==null?void 0:_.value;if(dt(S)&&S.value===!1)E=!1;else if(dt(S)&&S.value===!0)E=!0;else return e.$={env:$,pathCollection:[],type:se.type,value:void 0,comptimeUnrolledBodies:v},e}if(!E)return e.$={env:$,pathCollection:[],type:se.type,value:void 0,comptimeUnrolledBodies:v},e}Pu(e,a,f.$.controlFlow)}if(dt(l)&&l.value===!0){let y=r+1;return y>=Uu&&Pu(e,a,f.$.controlFlow),Xs({expr:e,env:t,context:{...n},_comptimeIterationCount:y})}else return e.$={env:t,pathCollection:[],type:se.type,value:u?se:void 0},e}}function _y(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var Ov=_y("YO_DEBUG_EVAL")||_y("YO_DEBUG_EVAL_PROFILE"),fy=globalThis,la=fy.__yoEvalProfilerState??(fy.__yoEvalProfilerState={evalCount:0,evalStart:0});function Ri({expr:e,env:t,context:n}){if(Ov&&(la.evalStart||(la.evalStart=Date.now()),la.evalCount++,la.evalCount%1e5===0&&console.log(`[EVAL] ${la.evalCount} calls, ${Date.now()-la.evalStart}ms elapsed`)),X(e))switch(e.token.type){case"identifier":case"operator":return Ks({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return Mm(e,t,{...n});case"float":return Dm(e,t,{...n});case"string":return Om(e,t);case"char":return Sm(e,t);case"bool":return Im(e,t);default:throw d({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
10759
+ ${L(e)}`})}else if(T(e,":",2)){let{expr:r}=js({expr:e,env:t,context:n});return r}else{if(T(e,":=",2)||T(e,"::",2))return ty({expr:e,env:t,context:n});if(T(e,"=",2))return Pm({expr:e,env:t,context:n});if(T(e,"->",2))return I(e.args[0])&&(T(e.args[0],M.fn)||T(e.args[0],M.unsafe_fn))?Ps({expr:e,env:t,context:{...n,isUnsafeFunctionType:T(e.args[0],M.unsafe_fn)}}):I(e.args[0])&&T(e.args[0],M.Fn)?hm({expr:e,env:t,context:{...n}}):Hs({expr:e,env:t,context:{...n}});if(T(e,"=>",2))return I(e.args[0])&&T(e.args[0],M.fn)?pm({expr:e,env:t,context:{...n}}):Hs({expr:e,env:t,context:{...n}});if(T(e,"=>>",2))return Hs({expr:e,env:t,context:{...n}});if(T(e,M.recur))return oy({expr:e,env:t,context:{...n}});if(T(e,M.runtime))return ay({expr:e,env:t,context:{...n}});if(T(e,M.extern))return Gm({expr:e,env:t,context:{...n}});if(T(e,M.c_include))return Um({expr:e,env:t,context:{...n}});if(T(e,M.test))return ly({expr:e,env:t,context:{...n}});if(T(e,M.cond))return zm({expr:e,env:t,context:{...n}});if(T(e,M.match))return ny({expr:e,env:t,context:{...n}});if(T(e,M.tuple))return Rm({expr:e,env:t,context:{...n}});if(T(e,M.array))return Am({expr:e,env:t,context:{...n}});if(T(e,M.comptime_list))return Nm({expr:e,env:t,context:{...n}});if(T(e,M.dyn))return xm({expr:e,env:t,context:{...n}});if(T(e,M.struct))return aa({expr:e,env:t,context:{...n}});if(T(e,M.object))return $m({expr:e,env:t,context:{...n}});if(T(e,M.newtype))return Em({expr:e,env:t,context:{...n}});if(T(e,M.enum))return gm({expr:e,env:t,context:{...n}});if(T(e,M.union))return Lm({expr:e,env:t,context:{...n}});if(T(e,"."))return iy({expr:e,env:t,context:{...n}});if(T(e,M.begin))return nn({expr:e,env:t,context:{...n},variablesToAdd:[]});if(T(e,M.module))return Tm({expr:e,env:t,context:{...n}});if(T(e,M.trait))return wm({expr:e,env:t,context:{...n}});if(T(e,M.Impl))return Md({expr:e,env:t,context:{...n}});if(T(e,M.impl))return Wc({expr:e,env:t,context:{...n}});if(T(e,F.typeof))return uy({expr:e,env:t,context:{...n}});if(T(e,F.sizeof))return Jd({expr:e,env:t,context:{...n}});if(T(e,F.alignof))return hp({expr:e,env:t,context:{...n}});if(T(e,F.typeid))return am({expr:e,env:t,context:{...n}});if(T(e,F.downcast))return Jp({expr:e,env:t,context:{...n}});if(T(e,F.rc))return Zd({expr:e,env:t,context:{...n}});if(T(e,"<:"))return sy({expr:e,env:t,context:{...n}});if(T(e,F.the))return em({expr:e,env:t,context:{...n}});if(T(e,M.import))return Jm({expr:e,env:t,context:{...n},stdPath:n.stdPath});if(T(e,M.open))return ry({expr:e,env:t,context:{...n}});if(T(e,M.Ptr,1))return _m({expr:e,env:t,context:{...n}});if(T(e,M.Iso,1))return Td({expr:e,env:t,context:{...n}});if(T(e,M.Arc,1))return sd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_address_of,1))return Qd({expr:e,env:t,context:{...n}});if(T(e,M.Tuple))return Fm({expr:e,env:t,context:{...n}});if(T(e,M.Array))return fm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_array_fill,2))return Tp({expr:e,env:t,context:{...n}});if(T(e,M.Slice))return Cm({expr:e,env:t,context:{...n}});if(T(e,M.ComptimeList))return dm({expr:e,env:t,context:{...n}});if(T(e,M.Future))return vm({expr:e,env:t,context:{...n}});if(T(e,M.Concrete))return mm({expr:e,env:t,context:{...n}});if(T(e,M.Dyn))return ym({expr:e,env:t,context:{...n}});if(T(e,F.comptime_expect_error))return Cp({expr:e,env:t,context:{...n}});if(T(e,F.comptime_assert))return Ep({expr:e,env:t,context:{...n}});if(T(e,F.comptime_fn))return bp({expr:e,env:t,context:{...n}});if(T(e,F.comptime_print))return xp({expr:e,env:t,context:{...n}});if(T(e,F.panic))return Pd({expr:e,env:t,context:{...n}});if(T(e,F.asm))return qd({expr:e,env:t,context:{...n}});if(T(e,F.global_asm))return Yd({expr:e,env:t,context:{...n}});if(T(e,F.macro_expand))return Rd({expr:e,env:t,context:{...n}});if(T(e,M.op_and)||T(e,M.op_or))return vp({expr:e,env:t,context:{...n}});if(T(e,M.escape))return Bm({expr:e,env:t,context:{...n}});if(T(e,F.consume))return Mp({expr:e,env:t,context:{...n}});if(T(e,F.___drop))return wd({expr:e,env:t,context:{...n}});if(T(e,F.___dup))return Fd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_decr_rc))return Op({expr:e,env:t,context:{...n}});if(T(e,F.__yo_incr_rc))return Rp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_decr_rc_atomic))return Up({expr:e,env:t,context:{...n}});if(T(e,F.__yo_incr_rc_atomic))return Pp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_iso_extract))return Yp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_iso_dispose))return Hp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_arc_dispose))return jp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_drop_array_element))return Kp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dup_array_element))return Xp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_drop_tuple_element))return Qp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dup_tuple_element))return Zp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_rc_own))return zp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dyn_drop))return Bp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_dyn_dup))return Gp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_sometype_drop))return Wp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_sometype_dup))return qp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_gc_collect))return xd({expr:e,env:t,context:{...n}});if(T(e,M.quote))return Od({expr:e,env:t,context:{...n}});if(T(e,M.gensym))return Dd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_is_atom))return Ld({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_is_fn_call))return Ad({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_get_callee))return Id({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_get_args))return Sd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_to_string))return Nd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_expr_eq))return Vd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_car))return kp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_cdr))return wp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_cons))return Fp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_append))return Lp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_length))return Ap({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_list_element_type))return Ip({expr:e,env:t,context:{...n}});if(I(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_")))return Vp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_bool_and,2)||T(e,F.__yo_comptime_bool_or,2)||T(e,F.__yo_comptime_bool_eq,2)||T(e,F.__yo_comptime_bool_neq,2)||T(e,F.__yo_comptime_bool_not,1)||T(e,F.__yo_comptime_bool_to_comptime_string,1))return $p({expr:e,env:t,context:{...n}});if(T(e,F.__yo_comptime_string_concat,2)||T(e,F.__yo_comptime_string_eq,2)||T(e,F.__yo_comptime_string_neq,2)||T(e,F.__yo_comptime_string_lt,2)||T(e,F.__yo_comptime_string_lte,2)||T(e,F.__yo_comptime_string_gt,2)||T(e,F.__yo_comptime_string_gte,2)||T(e,F.__yo_comptime_string_length,1)||T(e,F.__yo_comptime_string_to_upper,1)||T(e,F.__yo_comptime_string_to_lower,1)||T(e,F.__yo_comptime_string_slice))return Dp({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_to_comptime_string,1))return tm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_are_types_compatible,2))return nm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_contains_rc_type,1))return rm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_can_form_rc_cycle,1))return im({expr:e,env:t,context:{...n}});if(T(e,F.__yo_type_impls,2))return om({expr:e,env:t,context:{...n}});if(T(e,F.__yo_var_print_info,1))return lm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_var_is_owning_the_rc_value))return um({expr:e,env:t,context:{...n}});if(T(e,F.__yo_var_has_other_aliases))return cm({expr:e,env:t,context:{...n}});if(T(e,F.__yo_process_platform)||T(e,F.__yo_process_arch))return Hd({expr:e,env:t,context:{...n}});if(T(e,F.__yo_build_executable)||T(e,F.__yo_build_static_library)||T(e,F.__yo_build_shared_library)||T(e,F.__yo_build_test)||T(e,F.__yo_build_run)||T(e,F.__yo_build_step)||T(e,F.__yo_build_step_depend_on)||T(e,F.__yo_build_target_host)||T(e,F.__yo_build_target_parse)||T(e,F.__yo_build_dependency)||T(e,F.__yo_build_path_dependency)||T(e,F.__yo_build_system_library)||T(e,F.__yo_build_link)||T(e,F.__yo_build_link_system_library)||T(e,F.__yo_build_option)||T(e,F.__yo_build_dep_artifact)||T(e,F.__yo_build_module)||T(e,F.__yo_build_module_link)||T(e,F.__yo_build_add_import)||T(e,F.__yo_build_dep_module)){for(let r=0;r<e.args.length;r++)e.args[r]=Ri({expr:e.args[r],env:t,context:{...n}});return Xd({expr:e,env:t,context:{...n}})}else return T(e,M.while)?Xs({expr:e,env:t,context:{...n}}):T(e,F.va_start)?sm({expr:e,env:t,context:{...n}}):wr({expr:e,env:t,context:{...n}})}}function Rv(e){let t=e;for(;;){let n=ja.join(t,"std");if((0,py.existsSync)(n))return n;let r=ja.dirname(t);if(r===t)break;t=r}return ja.join(__dirname,"../std")}var zu=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??Rv(__dirname),this.codeGenratorC=new Ds,Wu(Ri),d_(gp)}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)Go(r),Bo(r),this.clearDependencies(r),us(r),this.modules.delete(r);Go(t),Bo(t),this.clearDependencies(t),us(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())Go(t),Bo(t),us(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),ws(),Qc(),nc()}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.findExtensionDuplicates(t);for(let c of o)this.deleteModuleAndDependents(c);let a=t,s=new Va({modulePath:t,stdPath:this.stdPath,loadModule:c=>this.loadModule(c,void 0,a),inputString:n,allowPartialModule:this.allowPartialModule}),l=s.getModuleValue(),u=s.getModuleError();return this.modules.set(t,{moduleValue:l,moduleError:u,evaluator:s}),{moduleValue:l,moduleError:u}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,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}`);this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}};0&&(module.exports={Emitter,IdentifierRegex,ModuleManager,Operators,PlaceholderToken,RAIIToken,TokenType,charIsOperator,clearAllGlobalImplState,clearGenericImplsFromModule,clearImplsFromModule,debug,findMatchingBracketTokenIndex,generateExprFromCode,stringIsOperator,tokenize});