@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/README.md +44 -0
- package/out/cjs/index.cjs +253 -235
- package/out/cjs/yo-cli.cjs +314 -296
- package/out/esm/index.mjs +255 -237
- package/out/types/src/codegen/parallelism/runtime.d.ts +1 -1
- package/out/types/src/codegen/utils/index.d.ts +1 -0
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/std/thread.yo +4 -3
- package/std/worker.yo +4 -2
package/out/cjs/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
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}},
|
|
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
|
|
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
|
|
73
|
-
`)}}function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
126
|
+
})`}function Uy(e){return`((fn(${Xt} : Self) -> unit) { // ___drop for ${D(e)}
|
|
127
127
|
${F.__yo_sometype_drop[0]}(${Xt});
|
|
128
|
-
})`}function
|
|
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=
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
171
|
-
First implementation was in: ${a.modulePath||"unknown"}`})}function
|
|
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(!
|
|
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),
|
|
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
|
|
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:
|
|
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
|
|
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(
|
|
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 -
|
|
196
|
+
// Async/Await Runtime - Per-Thread Cooperative Scheduler
|
|
197
197
|
// ============================================================================
|
|
198
|
-
// This implements a cooperative async runtime
|
|
199
|
-
//
|
|
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
|
-
${
|
|
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 (
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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; //
|
|
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=
|
|
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=
|
|
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):
|
|
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",
|
|
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
|
-
`:"",
|
|
9202
|
+
`:"",m=i?"__yo_worker_init_mutex();":"",y;i?y=` SYSTEM_INFO sysinfo;
|
|
9202
9203
|
GetSystemInfo(&sysinfo);
|
|
9203
|
-
return (size_t)sysinfo.dwNumberOfProcessors;`:
|
|
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;`:
|
|
9209
|
-
return count > 0 ? (size_t)count : 1;`;let
|
|
9210
|
-
return cpu;`:
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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(
|
|
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
|
-
`),
|
|
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(""),
|
|
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
|
|
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
|
|
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=
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
|
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||!
|
|
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&&
|
|
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
|
-
|
|
10261
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
10272
|
-
${L(r)}`})}function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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=
|
|
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
|
|
10307
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10308
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10309
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10310
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10311
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function
|
|
10312
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10313
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10314
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10315
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10316
|
-
${L(r)}`});t=i.$.env;let o=i.$.type;if(!
|
|
10317
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
10318
|
-
${L(r)}`});return t=i.$.env,e.$={env:t,type:se.type,value:se,pathCollection:[]},e}function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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&&($=
|
|
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
|
|
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
|
|
10383
|
-
${L(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function
|
|
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"),
|
|
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}=
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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=
|
|
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
|
|
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}=
|
|
10468
|
-
${L(e)}`})}function
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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:
|
|
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],_=
|
|
10577
|
-
${L(e)}`});let i=r.$.value.value;return t=r.$.env,{effect:{label:
|
|
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
|
|
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
|
|
10593
|
-
${L(e)}`});return aa({expr:e,env:t,context:n})}function
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
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
|
|
10626
|
-
${L(r)}`});let s=a.$.type,l=s,u=a;if(!Ht(l)&&!(z(l)&&je(l))){let{boxType:g,env:h}=
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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
|
|
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
|
|
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
|
|
10658
|
-
`),r;for(let i of n){let o=i.trim();if(o===""||o.startsWith("#"))continue;if(o==="[[dependencies]]"){r&&r.name&&t.push(
|
|
10659
|
-
`),
|
|
10660
|
-
`);let s=qr.readFileSync(fo.join(t,a));e.update(
|
|
10661
|
-
`,"utf-8")}function
|
|
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
|
|
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 _=
|
|
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
|
|
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
|
|
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
|
|
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}=
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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}=
|
|
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
|
|
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});
|