@shd101wyy/yo 0.0.28 → 0.0.29
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 +1 -1
- package/out/cjs/index.cjs +57 -57
- package/out/cjs/yo-cli.cjs +72 -72
- package/out/esm/index.mjs +62 -62
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/std/regex/compiler.yo +355 -0
- package/std/regex/flags.yo +104 -0
- package/std/regex/match.yo +83 -0
- package/std/regex/node.yo +283 -0
- package/std/regex/parser.yo +847 -0
- package/std/regex/regex.yo +714 -0
- package/std/regex/unicode.yo +365 -0
- package/std/regex/vm.yo +737 -0
- package/std/time/sleep.yo +18 -0
- package/std/time.yo +0 -13
package/out/cjs/index.cjs
CHANGED
|
@@ -39,13 +39,13 @@ ${e}
|
|
|
39
39
|
`,inputString:e});if(t.getParserError())throw t.getParserError();let n=t.getProgram();if(n.length!==1)throw new Error(`Expected exactly one expression from parsed code, got ${n.length}: "${e}"
|
|
40
40
|
${n.map(r=>F(r)).join(`
|
|
41
41
|
`)}
|
|
42
|
-
`);return n[0]}function Jo(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function xe(e){return(e==null?void 0:e.tag)==="unit"}function Zt(e){return(e==null?void 0:e.tag)==="comptime_int"}function hn(e){return(e==null?void 0:e.tag)==="comptime_float"}function pn(e){return(e==null?void 0:e.tag)==="comptime_string"}function vn(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Pi(e){return vn(e)&&dn(e.childType)}function ir(e){return(e==null?void 0:e.tag)==="bool"}function ea(e){return(e==null?void 0:e.tag)==="usize"}function ta(e){return(e==null?void 0:e.tag)==="isize"}function Vr(e){return(e==null?void 0:e.tag)==="u8"}function na(e){return(e==null?void 0:e.tag)==="i8"}function ra(e){return(e==null?void 0:e.tag)==="u16"}function ia(e){return(e==null?void 0:e.tag)==="i16"}function oa(e){return(e==null?void 0:e.tag)==="u32"}function aa(e){return(e==null?void 0:e.tag)==="i32"}function sa(e){return(e==null?void 0:e.tag)==="u64"}function la(e){return(e==null?void 0:e.tag)==="i64"}function ua(e){return(e==null?void 0:e.tag)==="f32"}function ca(e){return(e==null?void 0:e.tag)==="f64"}function dn(e){return(e==null?void 0:e.tag)==="Expr"}function Ze(e){return(e==null?void 0:e.tag)==="Array"}function Lt(e){return(e==null?void 0:e.tag)==="Slice"}function Je(e){return(e==null?void 0:e.tag)==="Tuple"}function jt(e){return(e==null?void 0:e.tag)==="Union"}function Ue(e){return(e==null?void 0:e.tag)==="Enum"}function Me(e){return(e==null?void 0:e.tag)==="Struct"}function Wt(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function
|
|
43
|
-
Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(Wt(a))continue;let s=[...n,o],l=cn(a,s);Ct(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?Jn(i):r?Dt(e):Dt(e)}function cn(e,t=[]){if(Qe(e))return Dt(e);if(Jo(e))return Dt(e);if(Ct(e))return Jn(e.level+1);if(Zt(e)||hn(e)||pn(e)||vn(e))return Dt(e);if(dn(e))return Dt(e);if(ee(e))return Dt(e);if(ln(e))return Dt(e);if(Ze(e))return cn(e.childType,t);if(Lt(e))return Dt(e);if(Je(e))return Wa(e,e.fields,t);if(Me(e))return Wa(e,e.fields,t);if(Ue(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Wa(e,n,t)}else{if(jt(e))return Wa(e,e.fields,t);if(We(e))return Jn(1,e);if(st(e))return Jn(1,e);if(U(e))return e.parentType;if(it(e))return Dt(e);if(un(e))return Dt(e);if(rn(e))return Dt(e);if(Sn(e))return Dt(e);if(ri(e))return Dt(e);if(Rt(e))return Jn(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function Iu(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 V(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 Sr(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 Sr(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 Sr(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 Sr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${F(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${V(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return wr(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 mr(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function Ha(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function bt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function Ur(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Nu(e){return Ur(e)&&dn(e.type.childType)}function yt(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 ht(e){return(e==null?void 0:e.tag)==="Bool"}function ve(e){return(e==null?void 0:e.tag)==="Function"}function Re(e){return(e==null?void 0:e.tag)==="Unknown"}function er(e){return(e==null?void 0:e.tag)==="Tuple"}function ar(e){return(e==null?void 0:e.tag)==="Struct"}function wr(e){return(e==null?void 0:e.tag)==="Array"}function qa(e){return(e==null?void 0:e.tag)==="Slice"}function yn(e){return(e==null?void 0:e.tag)==="Enum"}function vt(e){return(e==null?void 0:e.tag)==="Module"}function Jt(e){return(e==null?void 0:e.tag)==="Trait"}function co(e){return(e==null?void 0:e.tag)==="Ptr"}function Hn(e){return(e==null?void 0:e.tag)==="Expr"}function fe(e){return{tag:"Type",type:cn(e),value:e}}function Bn(e){return{tag:"ComptimeString",type:Tn(),value:e}}function Fr(e,t){return{tag:"ComptimeList",type:_a(e),elements:t}}function Vn(e,t){let n;if(e==="ComptimeInt")n=$i();else if(e==="ComptimeFloat")n=_o();else if(e==="U8")n=mo();else if(e==="I8")n=yo();else if(e==="U16")n=go();else if(e==="I16")n=ho();else if(e==="U32")n=vo();else if(e==="I32")n=Ci();else if(e==="U64")n=To();else if(e==="I64")n=Eo();else if(e==="F32")n=$o();else if(e==="F64")n=bi();else if(e==="Usize")n=Qt();else if(e==="Isize")n=po();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function zr(e){return Vn("ComptimeInt",e)}function Ya(e){return Vn("ComptimeFloat",e)}function qt(e){return{tag:"Bool",type:Nt(),value:e}}function ie(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(Ct(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${V(e)}`);let o=ur(e,t,{recursiveTypeRef:n,env:r,context:i});return fe(o)}return{tag:"Unknown",type:e,variableName:t}}function Lr(e,t){return{tag:"Struct",type:e,fields:t}}function ja(e,t){return{tag:"Module",type:e,fields:t}}function fo(e,t){return{tag:"Trait",type:e,fields:t}}function Ka(e,t){return{tag:"Tuple",type:e,fields:t}}function Ui(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Ei(e,t){return{tag:"Array",type:e,elements:t}}function Xa(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function Ar(e){return{tag:"Expr",type:Kn(),value:e}}function Gs(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function mn(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 ne({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(bt(n)&&bt(r))return n.value===r.value;if(Ur(n)&&Ur(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!mn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(yt(n)&&yt(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(ht(n)&&ht(r))return n.value===r.value;if(wr(n)&&wr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!mn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(qa(n)&&qa(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(!mn({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(er(n)&&er(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(ar(n)&&ar(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(yn(n)&&yn(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(vt(n)&&vt(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Jt(n)&&Jt(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Hn(n)&&Hn(r))return n.value===r.value||Qa(n.value,r.value);if(Re(n)&&Re(r)){let i,o;if(n.variableName){let a=le(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Re(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=le(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Re(s.value[0])&&(o=s.value[0])}}return i&&o?mn({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:ne({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Re(n)&&!Re(r)){if(n.variableName){let i=le(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Re(o.value[0]))return mn({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Re(n)&&Re(r)){if(r.variableName){let i=le(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Re(o.value[0]))return mn({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return co(n)&&co(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Gr(e,t){return e?Bi(e,t):!1}function Wr(e,t){return e?zm(e,t):!1}function Bi(e,t){return Dr(e,t)&&!ui(e,t)}function zm(e,t){let n=Dr(e,t),r=ui(e,t);return!n&&r}function tt(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(qn(e))return!0;switch(e.tag){case"Array":return tt(e.childType,t);case"Tuple":return e.fields.some(n=>tt(n.type,t));case"Union":return e.fields.some(n=>tt(n.type,t));case"Struct":return e.fields.some(n=>tt(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>tt(i.type,t))});case"Iso":return tt(e.childType,t);case"Arc":return tt(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return Ke(n)?!0:n.resolvedConcreteType?tt(n.resolvedConcreteType,t):!0}default:return!1}}function et(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),U(e))return e.isExtern?!1:e.resolvedConcreteType?et(e.resolvedConcreteType,t):!(xn(e)||Ke(e));switch(e.tag){case"Array":return et(e.childType,t);case"Tuple":return e.fields.some(n=>et(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&et(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>et(i.type,t))});case"Union":return e.fields.some(n=>et(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>et(r.type,t))||et(n.return.type,t)}case"Module":return e.fields.some(n=>et(n.type,t));case"Ptr":return et(e.childType,t);default:return!1}}function ii(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),Ze(e)?Re(e.length)?!0:ii(e.childType,t):it(e)||Lt(e)?ii(e.childType,t):Je(e)?e.fields.some(n=>ii(n.type,t)):Me(e)?e.fields.some(n=>ii(n.type,t)):Ue(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>ii(i.type,t))}):jt(e)?e.fields.some(n=>ii(n.type,t)):!1)}function qs(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),U(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 bo(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Re(t.length)||bo(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?bo(t.isFn.callType):!1}default:return!1}}function Kt({type:e,expectedType:t,expr:n,env:r}){let i;if(Zt(e))i=Ci();else if(hn(e))i=bi();else if(pn(e))t&&(it(t)&&(Vr(t.childType)||uo(t.childType))||Lt(t))&&(i=t),i||(i=Du(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function Ws(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=V(e.type,t),i=e.exprs.defaultValueExpr?F(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function Co(e,t=new Set){let n=e.label;Sr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n}: ${V(e.type,t)}) ?= ${r}`:i?`(${n}: ${V(e.type,t)}) = ${i}`:`${n}: ${V(e.type,t)}`}function Su(e,t=new Set){let n=e.label;Sr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n} : ${V(e.type,t)}) ?= ${r}`:i?`(${n} : ${V(e.type,t)}) = ${i}`:`${n} : ${V(e.type,t)}`}function Vu(e,t=new Set){var f;let n=e.parameters.map(p=>Ws(p,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(p=>Ws(p,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=V(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(p=>p.isEffectRowSpread?`...(${p.label})`:Ws(p,t)).join(", ")})`:"",l=[r,n,s,i].filter(p=>!!p).join(", "),u=(f=e.SelfType)==null?void 0:f.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function V(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 Bm(e,t)}finally{e.id&&t.delete(e.id)}}function Bm(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`[${V(e.childType,t)}; ${lt(e.length)}]`;case"Slice":return`[${V(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>Co(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=>Co(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=>Co(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=>Co(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=>Su(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(ln(n))return`Fn${Vu(n.isFn.callType,t).slice(2)}`;if(Sn(n)){let i=[V(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(V(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=>Su(i,t)).join(", ")})`,n.receiverType&&(r=`(${V(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:Vu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return F(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(V(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${V(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${V(e.childType,t)})`;case"Iso":return`Iso(${V(e.childType,t)})`;case"Arc":return`Arc(${V(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${V(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${V(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(V(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${V(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var xu=64;function ai(){return xu}function Za(){return xu/8}function Gm(e){let t=ki(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(yt(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function Wm(e){let t=0;for(let n of e.fields){let r=ki(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function qm(e){let t=0;for(let n of e.fields){let r=ki(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function Hm(e){let t=0,n=0;for(let m of e.variants){let g=0;if(m.fields)for(let y of m.fields){let h=ki(y.type);if(h===null)return null;if(h===-1)return-1;g+=h;let v=oi(y.type);if(v===null)return null;n=Math.max(n,v*8)}t=Math.max(t,g)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,i=32,o=Math.max(n,8),a=Math.max(i,o),s=r/8,l=o/8,u=(l-s%l)%l*8,c=r+u+t,f=c/8,p=a/8,_=(p-f%p)%p*8;return c+_}function Ym(e){let t=0;for(let n of e.fields){let r=ki(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function oi(e){if(U(e))return null;if(xe(e)||Ct(e)||Zt(e)||hn(e)||pn(e)||vn(e)||We(e)||st(e)||dn(e))return 1;if(ir(e))return 1;if(ea(e)||ta(e))return Za();if(Vr(e)||na(e))return 1;if(ra(e)||ia(e))return 2;if(oa(e)||aa(e))return 4;if(sa(e)||la(e))return 8;if(ua(e))return 4;if(ca(e))return 8;if(Ze(e))return oi(e.childType);if(Je(e)){let t=1;for(let n of e.fields){let r=oi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Me(e)){if(e.isReferenceSemantics)return Za();if(e.isNewtype)return oi(e.fields[0].type);let t=1;for(let n of e.fields){let r=oi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ue(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=oi(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(jt(e)){let t=1;for(let n of e.fields){let r=oi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(ee(e))return Za();if(it(e))return Za()}return null}function ki(e){return U(e)?null:xe(e)||Ct(e)||Zt(e)||hn(e)||pn(e)||vn(e)||We(e)||st(e)||dn(e)?0:ir(e)?8:ea(e)||ta(e)?ai():Vr(e)||na(e)?8:ra(e)||ia(e)?16:oa(e)||aa(e)?32:sa(e)||la(e)?64:ua(e)?32:ca(e)?64:Ze(e)?Gm(e):Je(e)?Wm(e):Me(e)?e.isReferenceSemantics?ai():e.isNewtype?ki(e.fields[0].type):qm(e):Ue(e)?Hm(e):jt(e)?Ym(e):ee(e)||it(e)?ai():null}function si(e,t){if(ri(e))throw zt([{token:t,errorMessage:`Cannot use 'void' type here.
|
|
42
|
+
`);return n[0]}function Jo(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function xe(e){return(e==null?void 0:e.tag)==="unit"}function Zt(e){return(e==null?void 0:e.tag)==="comptime_int"}function hn(e){return(e==null?void 0:e.tag)==="comptime_float"}function pn(e){return(e==null?void 0:e.tag)==="comptime_string"}function vn(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Pi(e){return vn(e)&&dn(e.childType)}function ir(e){return(e==null?void 0:e.tag)==="bool"}function ea(e){return(e==null?void 0:e.tag)==="usize"}function ta(e){return(e==null?void 0:e.tag)==="isize"}function Vr(e){return(e==null?void 0:e.tag)==="u8"}function na(e){return(e==null?void 0:e.tag)==="i8"}function ra(e){return(e==null?void 0:e.tag)==="u16"}function ia(e){return(e==null?void 0:e.tag)==="i16"}function oa(e){return(e==null?void 0:e.tag)==="u32"}function aa(e){return(e==null?void 0:e.tag)==="i32"}function sa(e){return(e==null?void 0:e.tag)==="u64"}function la(e){return(e==null?void 0:e.tag)==="i64"}function ua(e){return(e==null?void 0:e.tag)==="f32"}function ca(e){return(e==null?void 0:e.tag)==="f64"}function dn(e){return(e==null?void 0:e.tag)==="Expr"}function Ze(e){return(e==null?void 0:e.tag)==="Array"}function Lt(e){return(e==null?void 0:e.tag)==="Slice"}function Je(e){return(e==null?void 0:e.tag)==="Tuple"}function jt(e){return(e==null?void 0:e.tag)==="Union"}function Ue(e){return(e==null?void 0:e.tag)==="Enum"}function Me(e){return(e==null?void 0:e.tag)==="Struct"}function Wt(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function ri(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 ln(e){return st(e)&&e.isFn!==void 0}function ee(e){return(e==null?void 0:e.tag)==="Function"}function fa(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function Ct(e){return(e==null?void 0:e.tag)==="Type"}function Lu(e){return Ct(e)&&e.tag==="Type"&&e.level===0}function U(e){return(e==null?void 0:e.tag)==="SomeType"}function it(e){return(e==null?void 0:e.tag)==="Ptr"}function un(e){return(e==null?void 0:e.tag)==="Iso"}function rn(e){return(e==null?void 0:e.tag)==="Arc"}function Qe(e){return(e==null?void 0:e.tag)==="Dyn"}function qn(e){if(U(e)){let t=e;if(Ke(t))return!0;if(t.resolvedConcreteType)return qn(t.resolvedConcreteType)}return Wt(e)||Qe(e)||un(e)||rn(e)}function vi(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 Ti(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function Au(e){return(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="isize"}function uo(e){return(e==null?void 0:e.tag)==="char"}function ii(e){return(e==null?void 0:e.tag)==="void"}function Sn(e){return st(e)&&e.isFuture!==void 0}function Ga(e){return st(e)&&e.isConcrete!==void 0}function xr(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 kr(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&&U(i.type)&&!Ke(i.type));return t||n}function Ur(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&&U(i.type)&&!Ke(i.type));return t||n}function Bs(e){var n;let t=e.type;return t?kr(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function or(e){var t;return Wt(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function Rt(e){return(e==null?void 0:e.tag)==="EffectsRow"}function Wa(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}"
|
|
43
|
+
Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(Wt(a))continue;let s=[...n,o],l=cn(a,s);Ct(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?Jn(i):r?Dt(e):Dt(e)}function cn(e,t=[]){if(Qe(e))return Dt(e);if(Jo(e))return Dt(e);if(Ct(e))return Jn(e.level+1);if(Zt(e)||hn(e)||pn(e)||vn(e))return Dt(e);if(dn(e))return Dt(e);if(ee(e))return Dt(e);if(ln(e))return Dt(e);if(Ze(e))return cn(e.childType,t);if(Lt(e))return Dt(e);if(Je(e))return Wa(e,e.fields,t);if(Me(e))return Wa(e,e.fields,t);if(Ue(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Wa(e,n,t)}else{if(jt(e))return Wa(e,e.fields,t);if(We(e))return Jn(1,e);if(st(e))return Jn(1,e);if(U(e))return e.parentType;if(it(e))return Dt(e);if(un(e))return Dt(e);if(rn(e))return Dt(e);if(Sn(e))return Dt(e);if(ii(e))return Dt(e);if(Rt(e))return Jn(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function Iu(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 V(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 Sr(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 Sr(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 Sr(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 Sr(r)&&(r=`(${r})`),`${r}: ${lt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${F(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${V(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return wr(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 mr(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function Ha(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function bt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function zr(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Nu(e){return zr(e)&&dn(e.type.childType)}function yt(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 ht(e){return(e==null?void 0:e.tag)==="Bool"}function ve(e){return(e==null?void 0:e.tag)==="Function"}function Re(e){return(e==null?void 0:e.tag)==="Unknown"}function er(e){return(e==null?void 0:e.tag)==="Tuple"}function ar(e){return(e==null?void 0:e.tag)==="Struct"}function wr(e){return(e==null?void 0:e.tag)==="Array"}function qa(e){return(e==null?void 0:e.tag)==="Slice"}function yn(e){return(e==null?void 0:e.tag)==="Enum"}function vt(e){return(e==null?void 0:e.tag)==="Module"}function Jt(e){return(e==null?void 0:e.tag)==="Trait"}function co(e){return(e==null?void 0:e.tag)==="Ptr"}function Hn(e){return(e==null?void 0:e.tag)==="Expr"}function fe(e){return{tag:"Type",type:cn(e),value:e}}function Bn(e){return{tag:"ComptimeString",type:Tn(),value:e}}function Fr(e,t){return{tag:"ComptimeList",type:_a(e),elements:t}}function Vn(e,t){let n;if(e==="ComptimeInt")n=$i();else if(e==="ComptimeFloat")n=_o();else if(e==="U8")n=mo();else if(e==="I8")n=yo();else if(e==="U16")n=go();else if(e==="I16")n=ho();else if(e==="U32")n=vo();else if(e==="I32")n=Ci();else if(e==="U64")n=To();else if(e==="I64")n=Eo();else if(e==="F32")n=$o();else if(e==="F64")n=bi();else if(e==="Usize")n=Qt();else if(e==="Isize")n=po();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Br(e){return Vn("ComptimeInt",e)}function Ya(e){return Vn("ComptimeFloat",e)}function qt(e){return{tag:"Bool",type:Nt(),value:e}}function ie(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(Ct(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${V(e)}`);let o=ur(e,t,{recursiveTypeRef:n,env:r,context:i});return fe(o)}return{tag:"Unknown",type:e,variableName:t}}function Lr(e,t){return{tag:"Struct",type:e,fields:t}}function ja(e,t){return{tag:"Module",type:e,fields:t}}function fo(e,t){return{tag:"Trait",type:e,fields:t}}function Ka(e,t){return{tag:"Tuple",type:e,fields:t}}function Ui(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function Ei(e,t){return{tag:"Array",type:e,elements:t}}function Xa(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function Ar(e){return{tag:"Expr",type:Kn(),value:e}}function Gs(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function mn(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 ne({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(bt(n)&&bt(r))return n.value===r.value;if(zr(n)&&zr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!mn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(yt(n)&&yt(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(ht(n)&&ht(r))return n.value===r.value;if(wr(n)&&wr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!mn({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(qa(n)&&qa(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(!mn({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(er(n)&&er(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(ar(n)&&ar(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(yn(n)&&yn(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(vt(n)&&vt(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Jt(n)&&Jt(r)){if(n.fields.length!==r.fields.length||!ne({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(!mn({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(Hn(n)&&Hn(r))return n.value===r.value||Qa(n.value,r.value);if(Re(n)&&Re(r)){let i,o;if(n.variableName){let a=le(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Re(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=le(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Re(s.value[0])&&(o=s.value[0])}}return i&&o?mn({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:ne({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Re(n)&&!Re(r)){if(n.variableName){let i=le(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Re(o.value[0]))return mn({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Re(n)&&Re(r)){if(r.variableName){let i=le(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Re(o.value[0]))return mn({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return co(n)&&co(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function Wr(e,t){return e?Bi(e,t):!1}function qr(e,t){return e?zm(e,t):!1}function Bi(e,t){return Mr(e,t)&&!ui(e,t)}function zm(e,t){let n=Mr(e,t),r=ui(e,t);return!n&&r}function tt(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(qn(e))return!0;switch(e.tag){case"Array":return tt(e.childType,t);case"Tuple":return e.fields.some(n=>tt(n.type,t));case"Union":return e.fields.some(n=>tt(n.type,t));case"Struct":return e.fields.some(n=>tt(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>tt(i.type,t))});case"Iso":return tt(e.childType,t);case"Arc":return tt(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return Ke(n)?!0:n.resolvedConcreteType?tt(n.resolvedConcreteType,t):!0}default:return!1}}function et(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),U(e))return e.isExtern?!1:e.resolvedConcreteType?et(e.resolvedConcreteType,t):!(xn(e)||Ke(e));switch(e.tag){case"Array":return et(e.childType,t);case"Tuple":return e.fields.some(n=>et(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&et(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>et(i.type,t))});case"Union":return e.fields.some(n=>et(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>et(r.type,t))||et(n.return.type,t)}case"Module":return e.fields.some(n=>et(n.type,t));case"Ptr":return et(e.childType,t);default:return!1}}function oi(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),Ze(e)?Re(e.length)?!0:oi(e.childType,t):it(e)||Lt(e)?oi(e.childType,t):Je(e)?e.fields.some(n=>oi(n.type,t)):Me(e)?e.fields.some(n=>oi(n.type,t)):Ue(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>oi(i.type,t))}):jt(e)?e.fields.some(n=>oi(n.type,t)):!1)}function qs(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),U(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 bo(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Re(t.length)||bo(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?bo(t.isFn.callType):!1}default:return!1}}function Kt({type:e,expectedType:t,expr:n,env:r}){let i;if(Zt(e))i=Ci();else if(hn(e))i=bi();else if(pn(e))t&&(it(t)&&(Vr(t.childType)||uo(t.childType))||Lt(t))&&(i=t),i||(i=Du(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function Ws(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=V(e.type,t),i=e.exprs.defaultValueExpr?F(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function Co(e,t=new Set){let n=e.label;Sr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n}: ${V(e.type,t)}) ?= ${r}`:i?`(${n}: ${V(e.type,t)}) = ${i}`:`${n}: ${V(e.type,t)}`}function Su(e,t=new Set){let n=e.label;Sr(n)&&(n=`(${n})`);let r=e.defaultValue?lt(e.defaultValue):"",i=e.assignedValue?lt(e.assignedValue):"";return r?`(${n} : ${V(e.type,t)}) ?= ${r}`:i?`(${n} : ${V(e.type,t)}) = ${i}`:`${n} : ${V(e.type,t)}`}function Vu(e,t=new Set){var f;let n=e.parameters.map(p=>Ws(p,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(p=>Ws(p,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=V(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(p=>p.isEffectRowSpread?`...(${p.label})`:Ws(p,t)).join(", ")})`:"",l=[r,n,s,i].filter(p=>!!p).join(", "),u=(f=e.SelfType)==null?void 0:f.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function V(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 Bm(e,t)}finally{e.id&&t.delete(e.id)}}function Bm(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`[${V(e.childType,t)}; ${lt(e.length)}]`;case"Slice":return`[${V(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>Co(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=>Co(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=>Co(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=>Co(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=>Su(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(ln(n))return`Fn${Vu(n.isFn.callType,t).slice(2)}`;if(Sn(n)){let i=[V(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(V(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=>Su(i,t)).join(", ")})`,n.receiverType&&(r=`(${V(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:Vu(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return F(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(V(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${V(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${V(e.childType,t)})`;case"Iso":return`Iso(${V(e.childType,t)})`;case"Arc":return`Arc(${V(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${V(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${V(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(V(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${V(i,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var xu=64;function ai(){return xu}function Za(){return xu/8}function Gm(e){let t=ki(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(yt(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function Wm(e){let t=0,n=1;for(let r of e.fields){let i=ki(r.type);if(i===null)return null;if(i===-1)return-1;let o=Dr(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 qm(e){let t=0,n=1;for(let r of e.fields){let i=ki(r.type);if(i===null)return null;if(i===-1)return-1;let o=Dr(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 Hm(e){let t=0,n=0;for(let m of e.variants){let g=0,y=1;if(m.fields)for(let v of m.fields){let $=ki(v.type);if($===null)return null;if($===-1)return-1;let E=Dr(v.type);if(E===null)return null;let w=Math.ceil($/8);g=Math.ceil(g/E)*E,g+=w,y=Math.max(y,E),n=Math.max(n,E*8)}g=Math.ceil(g/y)*y;let h=g*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,f=c/8,p=a/8,_=(p-f%p)%p*8;return c+_}function Ym(e){let t=0;for(let n of e.fields){let r=ki(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Dr(e){if(U(e))return null;if(xe(e)||Ct(e)||Zt(e)||hn(e)||pn(e)||vn(e)||We(e)||st(e)||dn(e))return 1;if(ir(e))return 1;if(ea(e)||ta(e))return Za();if(Vr(e)||na(e))return 1;if(ra(e)||ia(e))return 2;if(oa(e)||aa(e))return 4;if(sa(e)||la(e))return 8;if(ua(e))return 4;if(ca(e))return 8;if(Ze(e))return Dr(e.childType);if(Je(e)){let t=1;for(let n of e.fields){let r=Dr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Me(e)){if(e.isReferenceSemantics)return Za();if(e.isNewtype)return Dr(e.fields[0].type);let t=1;for(let n of e.fields){let r=Dr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ue(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Dr(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(jt(e)){let t=1;for(let n of e.fields){let r=Dr(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(ee(e))return Za();if(it(e))return Za()}return null}function ki(e){return U(e)?null:xe(e)||Ct(e)||Zt(e)||hn(e)||pn(e)||vn(e)||We(e)||st(e)||dn(e)?0:ir(e)?8:ea(e)||ta(e)?ai():Vr(e)||na(e)?8:ra(e)||ia(e)?16:oa(e)||aa(e)?32:sa(e)||la(e)?64:ua(e)?32:ca(e)?64:Ze(e)?Gm(e):Je(e)?Wm(e):Me(e)?e.isReferenceSemantics?ai():e.isNewtype?ki(e.fields[0].type):qm(e):Ue(e)?Hm(e):jt(e)?Ym(e):ee(e)||it(e)?ai():null}function si(e,t){if(ii(e))throw zt([{token:t,errorMessage:`Cannot use 'void' type here.
|
|
44
44
|
Please consider use 'unit' type instead.
|
|
45
|
-
`}])}function li(e,t,n){if(!Wt(e)||Gi(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(zi(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function zi(e,t,n,r){if(Me(e)&&e.id===t.id)return!0;if(Me(e)&&e.isReferenceSemantics)return li(e,new Set(n),r);if(Ue(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(zi(o.type,t,n,r))return!0}}if(U(e))return Gi(e,r)?!1:e.resolvedConcreteType?zi(e.resolvedConcreteType,t,n,r):!0;if(Ze(e)||Lt(e))return zi(e.childType,t,n,r);if(Je(e)){for(let i of e.fields)if(zi(i.type,t,n,r))return!0}if(jt(e)){for(let i of e.fields)if(zi(i.type,t,n,r))return!0}return Qe(e)?!0:(it(e),!1)}function
|
|
45
|
+
`}])}function li(e,t,n){if(!Wt(e)||Gi(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(zi(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function zi(e,t,n,r){if(Me(e)&&e.id===t.id)return!0;if(Me(e)&&e.isReferenceSemantics)return li(e,new Set(n),r);if(Ue(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(zi(o.type,t,n,r))return!0}}if(U(e))return Gi(e,r)?!1:e.resolvedConcreteType?zi(e.resolvedConcreteType,t,n,r):!0;if(Ze(e)||Lt(e))return zi(e.childType,t,n,r);if(Je(e)){for(let i of e.fields)if(zi(i.type,t,n,r))return!0}if(jt(e)){for(let i of e.fields)if(zi(i.type,t,n,r))return!0}return Qe(e)?!0:(it(e),!1)}function Gr(e,t){return t?e.id===t.id?!0:Ze(e)||Lt(e)||it(e)?Gr(e.childType,t):Je(e)?e.fields.some(n=>Gr(n.type,t)):Me(e)?e.fields.some(n=>Gr(n.type,t)):jt(e)?e.fields.some(n=>Gr(n.type,t)):Ue(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Gr(i.type,t))}):ee(e)?Gr(e.return.type,t):!1:!1}var Ys=require("crypto");function ko(e){return"yo"+(0,Ys.createHash)("sha1").update(e).digest("hex").slice(0,8)}var Ja=new Map;function Et(e){let t=Ja.get(e);return t===void 0&&(t=0),Ja.set(e,t+1),`${ko(e)}_id_${t}`}function es(e){Ja.delete(e)}var Mu=1;function Ou(e){return`_${ko(e)}_temp_`}function Ru(e){return`${Ou(e)}${Mu++}`}function Bt(e,t){return t.startsWith(Ou(e))}var Hs=new Map;function Wi(e,t){let n="";for(let o=0;o<t.length;o++)if(so(t[o])){let a=za.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=ko(e)+"_"+n,i=Hs.get(r);return i===void 0?i=0:i++,Hs.set(r,i),r+(i==0?"":`_${i}`)}function js(e){return(0,Ys.createHash)("sha1").update(e).digest("hex").slice(0,10)}function Pu(){Ja.clear(),Hs.clear(),Mu=1}function wi(e){return{[e]:!0}}function Ot(e,t){return(e==null?void 0:e[t])===!0}function Xt(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function pa(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 Uu(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 ot(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:ot(e.func),args:e.args.map(ot),$:void 0}}}function N(e){return(e==null?void 0:e.tag)==="FnCall"}function Y(e){return(e==null?void 0:e.tag)==="Atom"}function on(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function wo(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 ze(e,t,n){if(!N(e))throw d({token:e.token,errorMessage:`Expected function call, got atom:
|
|
46
46
|
${F(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:
|
|
47
47
|
${F(e)}`});if(n!==void 0&&e.args.length!==n)throw d({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
|
|
48
|
-
${F(e)}`})}function Qa(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FnCall"&&t.tag==="FnCall"){if(!Qa(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!Qa(e.args[n],t.args[n]))return!1;return!0}return!1}var D={comptime:["comptime"],runtime:["runtime"],ref:["ref"],forall:["forall","\u2200"],using:["using"],given:["given"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],escape:["escape"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],trait:["trait"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],not:["not"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Arc:["Arc"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],Trait:["Trait"],ComptimeList:["ComptimeList"],tuple:["tuple"],array:["array"],comptime_list:["comptime_list"]},k={comptime_expect_error:["comptime_expect_error"],comptime_assert:["comptime_assert"],comptime_print:["comptime_print"],comptime_fn:["comptime_fn"],va_start:["va_start"],__yo_array_fill:["__yo_array_fill"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],typeid:["typeid"],downcast:["downcast"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_slice_new:["__yo_slice_new"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_comptime_list_car:["__yo_comptime_list_car"],__yo_comptime_list_cdr:["__yo_comptime_list_cdr"],__yo_comptime_list_cons:["__yo_comptime_list_cons"],__yo_comptime_list_append:["__yo_comptime_list_append"],__yo_comptime_list_length:["__yo_comptime_list_length"],__yo_comptime_list_element_type:["__yo_comptime_list_element_type"],__yo_comptime_int_add:["__yo_comptime_int_add"],__yo_comptime_int_sub:["__yo_comptime_int_sub"],__yo_comptime_int_mul:["__yo_comptime_int_mul"],__yo_comptime_int_div:["__yo_comptime_int_div"],__yo_comptime_int_mod:["__yo_comptime_int_mod"],__yo_comptime_int_eq:["__yo_comptime_int_eq"],__yo_comptime_int_neq:["__yo_comptime_int_neq"],__yo_comptime_int_lt:["__yo_comptime_int_lt"],__yo_comptime_int_lte:["__yo_comptime_int_lte"],__yo_comptime_int_gt:["__yo_comptime_int_gt"],__yo_comptime_int_gte:["__yo_comptime_int_gte"],__yo_comptime_int_bit_and:["__yo_comptime_int_bit_and"],__yo_comptime_int_bit_or:["__yo_comptime_int_bit_or"],__yo_comptime_int_bit_xor:["__yo_comptime_int_bit_xor"],__yo_comptime_int_shl:["__yo_comptime_int_shl"],__yo_comptime_int_shr:["__yo_comptime_int_shr"],__yo_comptime_int_neg:["__yo_comptime_int_neg"],__yo_comptime_int_bit_not:["__yo_comptime_int_bit_not"],__yo_comptime_int_to_comptime_string:["__yo_comptime_int_to_comptime_string"],__yo_comptime_float_add:["__yo_comptime_float_add"],__yo_comptime_float_sub:["__yo_comptime_float_sub"],__yo_comptime_float_mul:["__yo_comptime_float_mul"],__yo_comptime_float_div:["__yo_comptime_float_div"],__yo_comptime_float_eq:["__yo_comptime_float_eq"],__yo_comptime_float_neq:["__yo_comptime_float_neq"],__yo_comptime_float_lt:["__yo_comptime_float_lt"],__yo_comptime_float_lte:["__yo_comptime_float_lte"],__yo_comptime_float_gt:["__yo_comptime_float_gt"],__yo_comptime_float_gte:["__yo_comptime_float_gte"],__yo_comptime_float_neg:["__yo_comptime_float_neg"],__yo_comptime_float_to_comptime_string:["__yo_comptime_float_to_comptime_string"],__yo_comptime_u8_add:["__yo_comptime_u8_add"],__yo_comptime_u8_sub:["__yo_comptime_u8_sub"],__yo_comptime_u8_mul:["__yo_comptime_u8_mul"],__yo_comptime_u8_div:["__yo_comptime_u8_div"],__yo_comptime_u8_mod:["__yo_comptime_u8_mod"],__yo_comptime_u8_eq:["__yo_comptime_u8_eq"],__yo_comptime_u8_neq:["__yo_comptime_u8_neq"],__yo_comptime_u8_lt:["__yo_comptime_u8_lt"],__yo_comptime_u8_lte:["__yo_comptime_u8_lte"],__yo_comptime_u8_gt:["__yo_comptime_u8_gt"],__yo_comptime_u8_gte:["__yo_comptime_u8_gte"],__yo_comptime_u8_neg:["__yo_comptime_u8_neg"],__yo_comptime_u8_bit_and:["__yo_comptime_u8_bit_and"],__yo_comptime_u8_bit_or:["__yo_comptime_u8_bit_or"],__yo_comptime_u8_bit_xor:["__yo_comptime_u8_bit_xor"],__yo_comptime_u8_bit_not:["__yo_comptime_u8_bit_not"],__yo_comptime_u8_shl:["__yo_comptime_u8_shl"],__yo_comptime_u8_shr:["__yo_comptime_u8_shr"],__yo_comptime_u8_to_comptime_string:["__yo_comptime_u8_to_comptime_string"],__yo_comptime_i8_add:["__yo_comptime_i8_add"],__yo_comptime_i8_sub:["__yo_comptime_i8_sub"],__yo_comptime_i8_mul:["__yo_comptime_i8_mul"],__yo_comptime_i8_div:["__yo_comptime_i8_div"],__yo_comptime_i8_mod:["__yo_comptime_i8_mod"],__yo_comptime_i8_eq:["__yo_comptime_i8_eq"],__yo_comptime_i8_neq:["__yo_comptime_i8_neq"],__yo_comptime_i8_lt:["__yo_comptime_i8_lt"],__yo_comptime_i8_lte:["__yo_comptime_i8_lte"],__yo_comptime_i8_gt:["__yo_comptime_i8_gt"],__yo_comptime_i8_gte:["__yo_comptime_i8_gte"],__yo_comptime_i8_neg:["__yo_comptime_i8_neg"],__yo_comptime_i8_bit_and:["__yo_comptime_i8_bit_and"],__yo_comptime_i8_bit_or:["__yo_comptime_i8_bit_or"],__yo_comptime_i8_bit_xor:["__yo_comptime_i8_bit_xor"],__yo_comptime_i8_bit_not:["__yo_comptime_i8_bit_not"],__yo_comptime_i8_shl:["__yo_comptime_i8_shl"],__yo_comptime_i8_shr:["__yo_comptime_i8_shr"],__yo_comptime_i8_to_comptime_string:["__yo_comptime_i8_to_comptime_string"],__yo_comptime_u16_add:["__yo_comptime_u16_add"],__yo_comptime_u16_sub:["__yo_comptime_u16_sub"],__yo_comptime_u16_mul:["__yo_comptime_u16_mul"],__yo_comptime_u16_div:["__yo_comptime_u16_div"],__yo_comptime_u16_mod:["__yo_comptime_u16_mod"],__yo_comptime_u16_eq:["__yo_comptime_u16_eq"],__yo_comptime_u16_neq:["__yo_comptime_u16_neq"],__yo_comptime_u16_lt:["__yo_comptime_u16_lt"],__yo_comptime_u16_lte:["__yo_comptime_u16_lte"],__yo_comptime_u16_gt:["__yo_comptime_u16_gt"],__yo_comptime_u16_gte:["__yo_comptime_u16_gte"],__yo_comptime_u16_neg:["__yo_comptime_u16_neg"],__yo_comptime_u16_bit_and:["__yo_comptime_u16_bit_and"],__yo_comptime_u16_bit_or:["__yo_comptime_u16_bit_or"],__yo_comptime_u16_bit_xor:["__yo_comptime_u16_bit_xor"],__yo_comptime_u16_bit_not:["__yo_comptime_u16_bit_not"],__yo_comptime_u16_shl:["__yo_comptime_u16_shl"],__yo_comptime_u16_shr:["__yo_comptime_u16_shr"],__yo_comptime_u16_to_comptime_string:["__yo_comptime_u16_to_comptime_string"],__yo_comptime_i16_add:["__yo_comptime_i16_add"],__yo_comptime_i16_sub:["__yo_comptime_i16_sub"],__yo_comptime_i16_mul:["__yo_comptime_i16_mul"],__yo_comptime_i16_div:["__yo_comptime_i16_div"],__yo_comptime_i16_mod:["__yo_comptime_i16_mod"],__yo_comptime_i16_eq:["__yo_comptime_i16_eq"],__yo_comptime_i16_neq:["__yo_comptime_i16_neq"],__yo_comptime_i16_lt:["__yo_comptime_i16_lt"],__yo_comptime_i16_lte:["__yo_comptime_i16_lte"],__yo_comptime_i16_gt:["__yo_comptime_i16_gt"],__yo_comptime_i16_gte:["__yo_comptime_i16_gte"],__yo_comptime_i16_neg:["__yo_comptime_i16_neg"],__yo_comptime_i16_bit_and:["__yo_comptime_i16_bit_and"],__yo_comptime_i16_bit_or:["__yo_comptime_i16_bit_or"],__yo_comptime_i16_bit_xor:["__yo_comptime_i16_bit_xor"],__yo_comptime_i16_bit_not:["__yo_comptime_i16_bit_not"],__yo_comptime_i16_shl:["__yo_comptime_i16_shl"],__yo_comptime_i16_shr:["__yo_comptime_i16_shr"],__yo_comptime_i16_to_comptime_string:["__yo_comptime_i16_to_comptime_string"],__yo_comptime_u32_add:["__yo_comptime_u32_add"],__yo_comptime_u32_sub:["__yo_comptime_u32_sub"],__yo_comptime_u32_mul:["__yo_comptime_u32_mul"],__yo_comptime_u32_div:["__yo_comptime_u32_div"],__yo_comptime_u32_mod:["__yo_comptime_u32_mod"],__yo_comptime_u32_eq:["__yo_comptime_u32_eq"],__yo_comptime_u32_neq:["__yo_comptime_u32_neq"],__yo_comptime_u32_lt:["__yo_comptime_u32_lt"],__yo_comptime_u32_lte:["__yo_comptime_u32_lte"],__yo_comptime_u32_gt:["__yo_comptime_u32_gt"],__yo_comptime_u32_gte:["__yo_comptime_u32_gte"],__yo_comptime_u32_neg:["__yo_comptime_u32_neg"],__yo_comptime_u32_bit_and:["__yo_comptime_u32_bit_and"],__yo_comptime_u32_bit_or:["__yo_comptime_u32_bit_or"],__yo_comptime_u32_bit_xor:["__yo_comptime_u32_bit_xor"],__yo_comptime_u32_bit_not:["__yo_comptime_u32_bit_not"],__yo_comptime_u32_shl:["__yo_comptime_u32_shl"],__yo_comptime_u32_shr:["__yo_comptime_u32_shr"],__yo_comptime_u32_to_comptime_string:["__yo_comptime_u32_to_comptime_string"],__yo_comptime_i32_add:["__yo_comptime_i32_add"],__yo_comptime_i32_sub:["__yo_comptime_i32_sub"],__yo_comptime_i32_mul:["__yo_comptime_i32_mul"],__yo_comptime_i32_div:["__yo_comptime_i32_div"],__yo_comptime_i32_mod:["__yo_comptime_i32_mod"],__yo_comptime_i32_eq:["__yo_comptime_i32_eq"],__yo_comptime_i32_neq:["__yo_comptime_i32_neq"],__yo_comptime_i32_lt:["__yo_comptime_i32_lt"],__yo_comptime_i32_lte:["__yo_comptime_i32_lte"],__yo_comptime_i32_gt:["__yo_comptime_i32_gt"],__yo_comptime_i32_gte:["__yo_comptime_i32_gte"],__yo_comptime_i32_neg:["__yo_comptime_i32_neg"],__yo_comptime_i32_bit_and:["__yo_comptime_i32_bit_and"],__yo_comptime_i32_bit_or:["__yo_comptime_i32_bit_or"],__yo_comptime_i32_bit_xor:["__yo_comptime_i32_bit_xor"],__yo_comptime_i32_bit_not:["__yo_comptime_i32_bit_not"],__yo_comptime_i32_shl:["__yo_comptime_i32_shl"],__yo_comptime_i32_shr:["__yo_comptime_i32_shr"],__yo_comptime_i32_to_comptime_string:["__yo_comptime_i32_to_comptime_string"],__yo_comptime_u64_add:["__yo_comptime_u64_add"],__yo_comptime_u64_sub:["__yo_comptime_u64_sub"],__yo_comptime_u64_mul:["__yo_comptime_u64_mul"],__yo_comptime_u64_div:["__yo_comptime_u64_div"],__yo_comptime_u64_mod:["__yo_comptime_u64_mod"],__yo_comptime_u64_eq:["__yo_comptime_u64_eq"],__yo_comptime_u64_neq:["__yo_comptime_u64_neq"],__yo_comptime_u64_lt:["__yo_comptime_u64_lt"],__yo_comptime_u64_lte:["__yo_comptime_u64_lte"],__yo_comptime_u64_gt:["__yo_comptime_u64_gt"],__yo_comptime_u64_gte:["__yo_comptime_u64_gte"],__yo_comptime_u64_neg:["__yo_comptime_u64_neg"],__yo_comptime_u64_bit_and:["__yo_comptime_u64_bit_and"],__yo_comptime_u64_bit_or:["__yo_comptime_u64_bit_or"],__yo_comptime_u64_bit_xor:["__yo_comptime_u64_bit_xor"],__yo_comptime_u64_bit_not:["__yo_comptime_u64_bit_not"],__yo_comptime_u64_shl:["__yo_comptime_u64_shl"],__yo_comptime_u64_shr:["__yo_comptime_u64_shr"],__yo_comptime_u64_to_comptime_string:["__yo_comptime_u64_to_comptime_string"],__yo_comptime_i64_add:["__yo_comptime_i64_add"],__yo_comptime_i64_sub:["__yo_comptime_i64_sub"],__yo_comptime_i64_mul:["__yo_comptime_i64_mul"],__yo_comptime_i64_div:["__yo_comptime_i64_div"],__yo_comptime_i64_mod:["__yo_comptime_i64_mod"],__yo_comptime_i64_eq:["__yo_comptime_i64_eq"],__yo_comptime_i64_neq:["__yo_comptime_i64_neq"],__yo_comptime_i64_lt:["__yo_comptime_i64_lt"],__yo_comptime_i64_lte:["__yo_comptime_i64_lte"],__yo_comptime_i64_gt:["__yo_comptime_i64_gt"],__yo_comptime_i64_gte:["__yo_comptime_i64_gte"],__yo_comptime_i64_neg:["__yo_comptime_i64_neg"],__yo_comptime_i64_bit_and:["__yo_comptime_i64_bit_and"],__yo_comptime_i64_bit_or:["__yo_comptime_i64_bit_or"],__yo_comptime_i64_bit_xor:["__yo_comptime_i64_bit_xor"],__yo_comptime_i64_bit_not:["__yo_comptime_i64_bit_not"],__yo_comptime_i64_shl:["__yo_comptime_i64_shl"],__yo_comptime_i64_shr:["__yo_comptime_i64_shr"],__yo_comptime_i64_to_comptime_string:["__yo_comptime_i64_to_comptime_string"],__yo_comptime_usize_add:["__yo_comptime_usize_add"],__yo_comptime_usize_sub:["__yo_comptime_usize_sub"],__yo_comptime_usize_mul:["__yo_comptime_usize_mul"],__yo_comptime_usize_div:["__yo_comptime_usize_div"],__yo_comptime_usize_mod:["__yo_comptime_usize_mod"],__yo_comptime_usize_eq:["__yo_comptime_usize_eq"],__yo_comptime_usize_neq:["__yo_comptime_usize_neq"],__yo_comptime_usize_lt:["__yo_comptime_usize_lt"],__yo_comptime_usize_lte:["__yo_comptime_usize_lte"],__yo_comptime_usize_gt:["__yo_comptime_usize_gt"],__yo_comptime_usize_gte:["__yo_comptime_usize_gte"],__yo_comptime_usize_neg:["__yo_comptime_usize_neg"],__yo_comptime_usize_bit_and:["__yo_comptime_usize_bit_and"],__yo_comptime_usize_bit_or:["__yo_comptime_usize_bit_or"],__yo_comptime_usize_bit_xor:["__yo_comptime_usize_bit_xor"],__yo_comptime_usize_bit_not:["__yo_comptime_usize_bit_not"],__yo_comptime_usize_shl:["__yo_comptime_usize_shl"],__yo_comptime_usize_shr:["__yo_comptime_usize_shr"],__yo_comptime_usize_to_comptime_string:["__yo_comptime_usize_to_comptime_string"],__yo_comptime_isize_add:["__yo_comptime_isize_add"],__yo_comptime_isize_sub:["__yo_comptime_isize_sub"],__yo_comptime_isize_mul:["__yo_comptime_isize_mul"],__yo_comptime_isize_div:["__yo_comptime_isize_div"],__yo_comptime_isize_mod:["__yo_comptime_isize_mod"],__yo_comptime_isize_eq:["__yo_comptime_isize_eq"],__yo_comptime_isize_neq:["__yo_comptime_isize_neq"],__yo_comptime_isize_lt:["__yo_comptime_isize_lt"],__yo_comptime_isize_lte:["__yo_comptime_isize_lte"],__yo_comptime_isize_gt:["__yo_comptime_isize_gt"],__yo_comptime_isize_gte:["__yo_comptime_isize_gte"],__yo_comptime_isize_neg:["__yo_comptime_isize_neg"],__yo_comptime_isize_bit_and:["__yo_comptime_isize_bit_and"],__yo_comptime_isize_bit_or:["__yo_comptime_isize_bit_or"],__yo_comptime_isize_bit_xor:["__yo_comptime_isize_bit_xor"],__yo_comptime_isize_bit_not:["__yo_comptime_isize_bit_not"],__yo_comptime_isize_shl:["__yo_comptime_isize_shl"],__yo_comptime_isize_shr:["__yo_comptime_isize_shr"],__yo_comptime_isize_to_comptime_string:["__yo_comptime_isize_to_comptime_string"],__yo_comptime_f32_add:["__yo_comptime_f32_add"],__yo_comptime_f32_sub:["__yo_comptime_f32_sub"],__yo_comptime_f32_mul:["__yo_comptime_f32_mul"],__yo_comptime_f32_div:["__yo_comptime_f32_div"],__yo_comptime_f32_eq:["__yo_comptime_f32_eq"],__yo_comptime_f32_neq:["__yo_comptime_f32_neq"],__yo_comptime_f32_lt:["__yo_comptime_f32_lt"],__yo_comptime_f32_lte:["__yo_comptime_f32_lte"],__yo_comptime_f32_gt:["__yo_comptime_f32_gt"],__yo_comptime_f32_gte:["__yo_comptime_f32_gte"],__yo_comptime_f32_neg:["__yo_comptime_f32_neg"],__yo_comptime_f32_to_comptime_string:["__yo_comptime_f32_to_comptime_string"],__yo_comptime_f64_add:["__yo_comptime_f64_add"],__yo_comptime_f64_sub:["__yo_comptime_f64_sub"],__yo_comptime_f64_mul:["__yo_comptime_f64_mul"],__yo_comptime_f64_div:["__yo_comptime_f64_div"],__yo_comptime_f64_eq:["__yo_comptime_f64_eq"],__yo_comptime_f64_neq:["__yo_comptime_f64_neq"],__yo_comptime_f64_lt:["__yo_comptime_f64_lt"],__yo_comptime_f64_lte:["__yo_comptime_f64_lte"],__yo_comptime_f64_gt:["__yo_comptime_f64_gt"],__yo_comptime_f64_gte:["__yo_comptime_f64_gte"],__yo_comptime_f64_neg:["__yo_comptime_f64_neg"],__yo_comptime_f64_to_comptime_string:["__yo_comptime_f64_to_comptime_string"],__yo_comptime_bool_and:["__yo_comptime_bool_and"],__yo_comptime_bool_or:["__yo_comptime_bool_or"],__yo_comptime_bool_eq:["__yo_comptime_bool_eq"],__yo_comptime_bool_neq:["__yo_comptime_bool_neq"],__yo_comptime_bool_not:["__yo_comptime_bool_not"],__yo_comptime_bool_to_comptime_string:["__yo_comptime_bool_to_comptime_string"],__yo_comptime_string_concat:["__yo_comptime_string_concat"],__yo_comptime_string_eq:["__yo_comptime_string_eq"],__yo_comptime_string_neq:["__yo_comptime_string_neq"],__yo_comptime_string_lt:["__yo_comptime_string_lt"],__yo_comptime_string_lte:["__yo_comptime_string_lte"],__yo_comptime_string_gt:["__yo_comptime_string_gt"],__yo_comptime_string_gte:["__yo_comptime_string_gte"],__yo_comptime_string_length:["__yo_comptime_string_length"],__yo_comptime_string_to_upper:["__yo_comptime_string_to_upper"],__yo_comptime_string_to_lower:["__yo_comptime_string_to_lower"],__yo_comptime_string_slice:["__yo_comptime_string_slice"],__yo_type_to_comptime_string:["__yo_type_to_comptime_string"],__yo_type_contains_rc_type:["__yo_type_contains_rc_type"],__yo_type_can_form_rc_cycle:["__yo_type_can_form_rc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_type_impls:["__yo_type_impls"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_rc_value:["__yo_var_is_owning_the_rc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_arc_dispose:["__yo_arc_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_drop_array_element:["__yo_drop_array_element"],__yo_dup_array_element:["__yo_dup_array_element"],__yo_drop_tuple_element:["__yo_drop_tuple_element"],__yo_dup_tuple_element:["__yo_dup_tuple_element"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"],__yo_getrandom:["__yo_getrandom"],__yo_arc4random_buf:["__yo_arc4random_buf"],__yo_bcrypt_gen_random:["__yo_bcrypt_gen_random"],__yo_maybe_uninit_new:["__yo_maybe_uninit_new"],__yo_maybe_uninit_as_ptr:["__yo_maybe_uninit_as_ptr"],__yo_maybe_uninit_assume_init:["__yo_maybe_uninit_assume_init"],__yo_process_platform:["__yo_process_platform"],__yo_process_arch:["__yo_process_arch"],__yo_build_project:["__yo_build_project"],__yo_build_executable:["__yo_build_executable"],__yo_build_static_library:["__yo_build_static_library"],__yo_build_shared_library:["__yo_build_shared_library"],__yo_build_test:["__yo_build_test"],__yo_build_run:["__yo_build_run"],__yo_build_step:["__yo_build_step"],__yo_build_step_depend_on:["__yo_build_step_depend_on"],__yo_build_link:["__yo_build_link"],__yo_build_link_system_library:["__yo_build_link_system_library"],__yo_build_target_host:["__yo_build_target_host"],__yo_build_target_parse:["__yo_build_target_parse"],__yo_build_dependency:["__yo_build_dependency"],__yo_build_path_dependency:["__yo_build_path_dependency"],__yo_build_system_library:["__yo_build_system_library"],__yo_build_option:["__yo_build_option"],__yo_build_dep_artifact:["__yo_build_dep_artifact"]};function Fo(e){return!!(e.tag==="FnCall"&&e.isInfix&&e.func.tag==="Atom"&&e.func.token.type==="operator"&&e.args.length===2)}function F(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?cr(e,r):qr(e)}function qr(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){e.func.token.value==="."?t=`${e.func.token.value}${qr(e.args[0])}`:t=`${e.func.token.value}(${qr(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let i=qr(e.args[0]),o=qr(e.args[1]);i=Fo(e.args[0])||wo(e.args[0])?`(${i})`:i,o=Fo(e.args[1])||wo(e.args[1])?`(${o})`:o,e.func.token.value==="."?t=`(${i}.${o})`:t=`${i} ${e.func.token.value} ${o}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===D.tuple[0]){e.args.length===1?t=`(${qr(e.args[0])},)`:t=`(${e.args.map(i=>qr(i)).join(", ").trim()})`;break}let n=qr(e.func);n=Fo(e.func)||wo(e.func)?`(${n})`:n;let r=e.args.map(i=>qr(i)).join(", ").trim();t=`${n}(${r})`;break}}return t}function cr(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},i=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){if(e.func.token.value===".")return`${e.func.token.value}${cr(e.args[0],t)}`;{let u=cr(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=cr(e.args[0],t),c=cr(e.args[1],t);return u=Fo(e.args[0])||wo(e.args[0])?`(${u})`:u,c=Fo(e.args[1])||wo(e.args[1])?`(${c})`:c,e.func.token.value==="."?`(${u}.${c})`:`${u} ${e.func.token.value} ${c}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===D.tuple[0]){if(e.args.length===0)return"()";if(e.args.length===1)return`(${cr(e.args[0],t)},)`;{let u=e.args.map(f=>cr(f,t)),c=`(${u.join(", ")})`;return c.length<=t.maxLineLength?c:`(
|
|
48
|
+
${F(e)}`})}function Qa(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FnCall"&&t.tag==="FnCall"){if(!Qa(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!Qa(e.args[n],t.args[n]))return!1;return!0}return!1}var D={comptime:["comptime"],runtime:["runtime"],ref:["ref"],forall:["forall","\u2200"],using:["using"],given:["given"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],escape:["escape"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],trait:["trait"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],not:["not"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Arc:["Arc"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],Trait:["Trait"],ComptimeList:["ComptimeList"],tuple:["tuple"],array:["array"],comptime_list:["comptime_list"]},k={comptime_expect_error:["comptime_expect_error"],comptime_assert:["comptime_assert"],comptime_print:["comptime_print"],comptime_fn:["comptime_fn"],va_start:["va_start"],__yo_array_fill:["__yo_array_fill"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],typeid:["typeid"],downcast:["downcast"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_slice_new:["__yo_slice_new"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_comptime_list_car:["__yo_comptime_list_car"],__yo_comptime_list_cdr:["__yo_comptime_list_cdr"],__yo_comptime_list_cons:["__yo_comptime_list_cons"],__yo_comptime_list_append:["__yo_comptime_list_append"],__yo_comptime_list_length:["__yo_comptime_list_length"],__yo_comptime_list_element_type:["__yo_comptime_list_element_type"],__yo_comptime_int_add:["__yo_comptime_int_add"],__yo_comptime_int_sub:["__yo_comptime_int_sub"],__yo_comptime_int_mul:["__yo_comptime_int_mul"],__yo_comptime_int_div:["__yo_comptime_int_div"],__yo_comptime_int_mod:["__yo_comptime_int_mod"],__yo_comptime_int_eq:["__yo_comptime_int_eq"],__yo_comptime_int_neq:["__yo_comptime_int_neq"],__yo_comptime_int_lt:["__yo_comptime_int_lt"],__yo_comptime_int_lte:["__yo_comptime_int_lte"],__yo_comptime_int_gt:["__yo_comptime_int_gt"],__yo_comptime_int_gte:["__yo_comptime_int_gte"],__yo_comptime_int_bit_and:["__yo_comptime_int_bit_and"],__yo_comptime_int_bit_or:["__yo_comptime_int_bit_or"],__yo_comptime_int_bit_xor:["__yo_comptime_int_bit_xor"],__yo_comptime_int_shl:["__yo_comptime_int_shl"],__yo_comptime_int_shr:["__yo_comptime_int_shr"],__yo_comptime_int_neg:["__yo_comptime_int_neg"],__yo_comptime_int_bit_not:["__yo_comptime_int_bit_not"],__yo_comptime_int_to_comptime_string:["__yo_comptime_int_to_comptime_string"],__yo_comptime_float_add:["__yo_comptime_float_add"],__yo_comptime_float_sub:["__yo_comptime_float_sub"],__yo_comptime_float_mul:["__yo_comptime_float_mul"],__yo_comptime_float_div:["__yo_comptime_float_div"],__yo_comptime_float_eq:["__yo_comptime_float_eq"],__yo_comptime_float_neq:["__yo_comptime_float_neq"],__yo_comptime_float_lt:["__yo_comptime_float_lt"],__yo_comptime_float_lte:["__yo_comptime_float_lte"],__yo_comptime_float_gt:["__yo_comptime_float_gt"],__yo_comptime_float_gte:["__yo_comptime_float_gte"],__yo_comptime_float_neg:["__yo_comptime_float_neg"],__yo_comptime_float_to_comptime_string:["__yo_comptime_float_to_comptime_string"],__yo_comptime_u8_add:["__yo_comptime_u8_add"],__yo_comptime_u8_sub:["__yo_comptime_u8_sub"],__yo_comptime_u8_mul:["__yo_comptime_u8_mul"],__yo_comptime_u8_div:["__yo_comptime_u8_div"],__yo_comptime_u8_mod:["__yo_comptime_u8_mod"],__yo_comptime_u8_eq:["__yo_comptime_u8_eq"],__yo_comptime_u8_neq:["__yo_comptime_u8_neq"],__yo_comptime_u8_lt:["__yo_comptime_u8_lt"],__yo_comptime_u8_lte:["__yo_comptime_u8_lte"],__yo_comptime_u8_gt:["__yo_comptime_u8_gt"],__yo_comptime_u8_gte:["__yo_comptime_u8_gte"],__yo_comptime_u8_neg:["__yo_comptime_u8_neg"],__yo_comptime_u8_bit_and:["__yo_comptime_u8_bit_and"],__yo_comptime_u8_bit_or:["__yo_comptime_u8_bit_or"],__yo_comptime_u8_bit_xor:["__yo_comptime_u8_bit_xor"],__yo_comptime_u8_bit_not:["__yo_comptime_u8_bit_not"],__yo_comptime_u8_shl:["__yo_comptime_u8_shl"],__yo_comptime_u8_shr:["__yo_comptime_u8_shr"],__yo_comptime_u8_to_comptime_string:["__yo_comptime_u8_to_comptime_string"],__yo_comptime_i8_add:["__yo_comptime_i8_add"],__yo_comptime_i8_sub:["__yo_comptime_i8_sub"],__yo_comptime_i8_mul:["__yo_comptime_i8_mul"],__yo_comptime_i8_div:["__yo_comptime_i8_div"],__yo_comptime_i8_mod:["__yo_comptime_i8_mod"],__yo_comptime_i8_eq:["__yo_comptime_i8_eq"],__yo_comptime_i8_neq:["__yo_comptime_i8_neq"],__yo_comptime_i8_lt:["__yo_comptime_i8_lt"],__yo_comptime_i8_lte:["__yo_comptime_i8_lte"],__yo_comptime_i8_gt:["__yo_comptime_i8_gt"],__yo_comptime_i8_gte:["__yo_comptime_i8_gte"],__yo_comptime_i8_neg:["__yo_comptime_i8_neg"],__yo_comptime_i8_bit_and:["__yo_comptime_i8_bit_and"],__yo_comptime_i8_bit_or:["__yo_comptime_i8_bit_or"],__yo_comptime_i8_bit_xor:["__yo_comptime_i8_bit_xor"],__yo_comptime_i8_bit_not:["__yo_comptime_i8_bit_not"],__yo_comptime_i8_shl:["__yo_comptime_i8_shl"],__yo_comptime_i8_shr:["__yo_comptime_i8_shr"],__yo_comptime_i8_to_comptime_string:["__yo_comptime_i8_to_comptime_string"],__yo_comptime_u16_add:["__yo_comptime_u16_add"],__yo_comptime_u16_sub:["__yo_comptime_u16_sub"],__yo_comptime_u16_mul:["__yo_comptime_u16_mul"],__yo_comptime_u16_div:["__yo_comptime_u16_div"],__yo_comptime_u16_mod:["__yo_comptime_u16_mod"],__yo_comptime_u16_eq:["__yo_comptime_u16_eq"],__yo_comptime_u16_neq:["__yo_comptime_u16_neq"],__yo_comptime_u16_lt:["__yo_comptime_u16_lt"],__yo_comptime_u16_lte:["__yo_comptime_u16_lte"],__yo_comptime_u16_gt:["__yo_comptime_u16_gt"],__yo_comptime_u16_gte:["__yo_comptime_u16_gte"],__yo_comptime_u16_neg:["__yo_comptime_u16_neg"],__yo_comptime_u16_bit_and:["__yo_comptime_u16_bit_and"],__yo_comptime_u16_bit_or:["__yo_comptime_u16_bit_or"],__yo_comptime_u16_bit_xor:["__yo_comptime_u16_bit_xor"],__yo_comptime_u16_bit_not:["__yo_comptime_u16_bit_not"],__yo_comptime_u16_shl:["__yo_comptime_u16_shl"],__yo_comptime_u16_shr:["__yo_comptime_u16_shr"],__yo_comptime_u16_to_comptime_string:["__yo_comptime_u16_to_comptime_string"],__yo_comptime_i16_add:["__yo_comptime_i16_add"],__yo_comptime_i16_sub:["__yo_comptime_i16_sub"],__yo_comptime_i16_mul:["__yo_comptime_i16_mul"],__yo_comptime_i16_div:["__yo_comptime_i16_div"],__yo_comptime_i16_mod:["__yo_comptime_i16_mod"],__yo_comptime_i16_eq:["__yo_comptime_i16_eq"],__yo_comptime_i16_neq:["__yo_comptime_i16_neq"],__yo_comptime_i16_lt:["__yo_comptime_i16_lt"],__yo_comptime_i16_lte:["__yo_comptime_i16_lte"],__yo_comptime_i16_gt:["__yo_comptime_i16_gt"],__yo_comptime_i16_gte:["__yo_comptime_i16_gte"],__yo_comptime_i16_neg:["__yo_comptime_i16_neg"],__yo_comptime_i16_bit_and:["__yo_comptime_i16_bit_and"],__yo_comptime_i16_bit_or:["__yo_comptime_i16_bit_or"],__yo_comptime_i16_bit_xor:["__yo_comptime_i16_bit_xor"],__yo_comptime_i16_bit_not:["__yo_comptime_i16_bit_not"],__yo_comptime_i16_shl:["__yo_comptime_i16_shl"],__yo_comptime_i16_shr:["__yo_comptime_i16_shr"],__yo_comptime_i16_to_comptime_string:["__yo_comptime_i16_to_comptime_string"],__yo_comptime_u32_add:["__yo_comptime_u32_add"],__yo_comptime_u32_sub:["__yo_comptime_u32_sub"],__yo_comptime_u32_mul:["__yo_comptime_u32_mul"],__yo_comptime_u32_div:["__yo_comptime_u32_div"],__yo_comptime_u32_mod:["__yo_comptime_u32_mod"],__yo_comptime_u32_eq:["__yo_comptime_u32_eq"],__yo_comptime_u32_neq:["__yo_comptime_u32_neq"],__yo_comptime_u32_lt:["__yo_comptime_u32_lt"],__yo_comptime_u32_lte:["__yo_comptime_u32_lte"],__yo_comptime_u32_gt:["__yo_comptime_u32_gt"],__yo_comptime_u32_gte:["__yo_comptime_u32_gte"],__yo_comptime_u32_neg:["__yo_comptime_u32_neg"],__yo_comptime_u32_bit_and:["__yo_comptime_u32_bit_and"],__yo_comptime_u32_bit_or:["__yo_comptime_u32_bit_or"],__yo_comptime_u32_bit_xor:["__yo_comptime_u32_bit_xor"],__yo_comptime_u32_bit_not:["__yo_comptime_u32_bit_not"],__yo_comptime_u32_shl:["__yo_comptime_u32_shl"],__yo_comptime_u32_shr:["__yo_comptime_u32_shr"],__yo_comptime_u32_to_comptime_string:["__yo_comptime_u32_to_comptime_string"],__yo_comptime_i32_add:["__yo_comptime_i32_add"],__yo_comptime_i32_sub:["__yo_comptime_i32_sub"],__yo_comptime_i32_mul:["__yo_comptime_i32_mul"],__yo_comptime_i32_div:["__yo_comptime_i32_div"],__yo_comptime_i32_mod:["__yo_comptime_i32_mod"],__yo_comptime_i32_eq:["__yo_comptime_i32_eq"],__yo_comptime_i32_neq:["__yo_comptime_i32_neq"],__yo_comptime_i32_lt:["__yo_comptime_i32_lt"],__yo_comptime_i32_lte:["__yo_comptime_i32_lte"],__yo_comptime_i32_gt:["__yo_comptime_i32_gt"],__yo_comptime_i32_gte:["__yo_comptime_i32_gte"],__yo_comptime_i32_neg:["__yo_comptime_i32_neg"],__yo_comptime_i32_bit_and:["__yo_comptime_i32_bit_and"],__yo_comptime_i32_bit_or:["__yo_comptime_i32_bit_or"],__yo_comptime_i32_bit_xor:["__yo_comptime_i32_bit_xor"],__yo_comptime_i32_bit_not:["__yo_comptime_i32_bit_not"],__yo_comptime_i32_shl:["__yo_comptime_i32_shl"],__yo_comptime_i32_shr:["__yo_comptime_i32_shr"],__yo_comptime_i32_to_comptime_string:["__yo_comptime_i32_to_comptime_string"],__yo_comptime_u64_add:["__yo_comptime_u64_add"],__yo_comptime_u64_sub:["__yo_comptime_u64_sub"],__yo_comptime_u64_mul:["__yo_comptime_u64_mul"],__yo_comptime_u64_div:["__yo_comptime_u64_div"],__yo_comptime_u64_mod:["__yo_comptime_u64_mod"],__yo_comptime_u64_eq:["__yo_comptime_u64_eq"],__yo_comptime_u64_neq:["__yo_comptime_u64_neq"],__yo_comptime_u64_lt:["__yo_comptime_u64_lt"],__yo_comptime_u64_lte:["__yo_comptime_u64_lte"],__yo_comptime_u64_gt:["__yo_comptime_u64_gt"],__yo_comptime_u64_gte:["__yo_comptime_u64_gte"],__yo_comptime_u64_neg:["__yo_comptime_u64_neg"],__yo_comptime_u64_bit_and:["__yo_comptime_u64_bit_and"],__yo_comptime_u64_bit_or:["__yo_comptime_u64_bit_or"],__yo_comptime_u64_bit_xor:["__yo_comptime_u64_bit_xor"],__yo_comptime_u64_bit_not:["__yo_comptime_u64_bit_not"],__yo_comptime_u64_shl:["__yo_comptime_u64_shl"],__yo_comptime_u64_shr:["__yo_comptime_u64_shr"],__yo_comptime_u64_to_comptime_string:["__yo_comptime_u64_to_comptime_string"],__yo_comptime_i64_add:["__yo_comptime_i64_add"],__yo_comptime_i64_sub:["__yo_comptime_i64_sub"],__yo_comptime_i64_mul:["__yo_comptime_i64_mul"],__yo_comptime_i64_div:["__yo_comptime_i64_div"],__yo_comptime_i64_mod:["__yo_comptime_i64_mod"],__yo_comptime_i64_eq:["__yo_comptime_i64_eq"],__yo_comptime_i64_neq:["__yo_comptime_i64_neq"],__yo_comptime_i64_lt:["__yo_comptime_i64_lt"],__yo_comptime_i64_lte:["__yo_comptime_i64_lte"],__yo_comptime_i64_gt:["__yo_comptime_i64_gt"],__yo_comptime_i64_gte:["__yo_comptime_i64_gte"],__yo_comptime_i64_neg:["__yo_comptime_i64_neg"],__yo_comptime_i64_bit_and:["__yo_comptime_i64_bit_and"],__yo_comptime_i64_bit_or:["__yo_comptime_i64_bit_or"],__yo_comptime_i64_bit_xor:["__yo_comptime_i64_bit_xor"],__yo_comptime_i64_bit_not:["__yo_comptime_i64_bit_not"],__yo_comptime_i64_shl:["__yo_comptime_i64_shl"],__yo_comptime_i64_shr:["__yo_comptime_i64_shr"],__yo_comptime_i64_to_comptime_string:["__yo_comptime_i64_to_comptime_string"],__yo_comptime_usize_add:["__yo_comptime_usize_add"],__yo_comptime_usize_sub:["__yo_comptime_usize_sub"],__yo_comptime_usize_mul:["__yo_comptime_usize_mul"],__yo_comptime_usize_div:["__yo_comptime_usize_div"],__yo_comptime_usize_mod:["__yo_comptime_usize_mod"],__yo_comptime_usize_eq:["__yo_comptime_usize_eq"],__yo_comptime_usize_neq:["__yo_comptime_usize_neq"],__yo_comptime_usize_lt:["__yo_comptime_usize_lt"],__yo_comptime_usize_lte:["__yo_comptime_usize_lte"],__yo_comptime_usize_gt:["__yo_comptime_usize_gt"],__yo_comptime_usize_gte:["__yo_comptime_usize_gte"],__yo_comptime_usize_neg:["__yo_comptime_usize_neg"],__yo_comptime_usize_bit_and:["__yo_comptime_usize_bit_and"],__yo_comptime_usize_bit_or:["__yo_comptime_usize_bit_or"],__yo_comptime_usize_bit_xor:["__yo_comptime_usize_bit_xor"],__yo_comptime_usize_bit_not:["__yo_comptime_usize_bit_not"],__yo_comptime_usize_shl:["__yo_comptime_usize_shl"],__yo_comptime_usize_shr:["__yo_comptime_usize_shr"],__yo_comptime_usize_to_comptime_string:["__yo_comptime_usize_to_comptime_string"],__yo_comptime_isize_add:["__yo_comptime_isize_add"],__yo_comptime_isize_sub:["__yo_comptime_isize_sub"],__yo_comptime_isize_mul:["__yo_comptime_isize_mul"],__yo_comptime_isize_div:["__yo_comptime_isize_div"],__yo_comptime_isize_mod:["__yo_comptime_isize_mod"],__yo_comptime_isize_eq:["__yo_comptime_isize_eq"],__yo_comptime_isize_neq:["__yo_comptime_isize_neq"],__yo_comptime_isize_lt:["__yo_comptime_isize_lt"],__yo_comptime_isize_lte:["__yo_comptime_isize_lte"],__yo_comptime_isize_gt:["__yo_comptime_isize_gt"],__yo_comptime_isize_gte:["__yo_comptime_isize_gte"],__yo_comptime_isize_neg:["__yo_comptime_isize_neg"],__yo_comptime_isize_bit_and:["__yo_comptime_isize_bit_and"],__yo_comptime_isize_bit_or:["__yo_comptime_isize_bit_or"],__yo_comptime_isize_bit_xor:["__yo_comptime_isize_bit_xor"],__yo_comptime_isize_bit_not:["__yo_comptime_isize_bit_not"],__yo_comptime_isize_shl:["__yo_comptime_isize_shl"],__yo_comptime_isize_shr:["__yo_comptime_isize_shr"],__yo_comptime_isize_to_comptime_string:["__yo_comptime_isize_to_comptime_string"],__yo_comptime_f32_add:["__yo_comptime_f32_add"],__yo_comptime_f32_sub:["__yo_comptime_f32_sub"],__yo_comptime_f32_mul:["__yo_comptime_f32_mul"],__yo_comptime_f32_div:["__yo_comptime_f32_div"],__yo_comptime_f32_eq:["__yo_comptime_f32_eq"],__yo_comptime_f32_neq:["__yo_comptime_f32_neq"],__yo_comptime_f32_lt:["__yo_comptime_f32_lt"],__yo_comptime_f32_lte:["__yo_comptime_f32_lte"],__yo_comptime_f32_gt:["__yo_comptime_f32_gt"],__yo_comptime_f32_gte:["__yo_comptime_f32_gte"],__yo_comptime_f32_neg:["__yo_comptime_f32_neg"],__yo_comptime_f32_to_comptime_string:["__yo_comptime_f32_to_comptime_string"],__yo_comptime_f64_add:["__yo_comptime_f64_add"],__yo_comptime_f64_sub:["__yo_comptime_f64_sub"],__yo_comptime_f64_mul:["__yo_comptime_f64_mul"],__yo_comptime_f64_div:["__yo_comptime_f64_div"],__yo_comptime_f64_eq:["__yo_comptime_f64_eq"],__yo_comptime_f64_neq:["__yo_comptime_f64_neq"],__yo_comptime_f64_lt:["__yo_comptime_f64_lt"],__yo_comptime_f64_lte:["__yo_comptime_f64_lte"],__yo_comptime_f64_gt:["__yo_comptime_f64_gt"],__yo_comptime_f64_gte:["__yo_comptime_f64_gte"],__yo_comptime_f64_neg:["__yo_comptime_f64_neg"],__yo_comptime_f64_to_comptime_string:["__yo_comptime_f64_to_comptime_string"],__yo_comptime_bool_and:["__yo_comptime_bool_and"],__yo_comptime_bool_or:["__yo_comptime_bool_or"],__yo_comptime_bool_eq:["__yo_comptime_bool_eq"],__yo_comptime_bool_neq:["__yo_comptime_bool_neq"],__yo_comptime_bool_not:["__yo_comptime_bool_not"],__yo_comptime_bool_to_comptime_string:["__yo_comptime_bool_to_comptime_string"],__yo_comptime_string_concat:["__yo_comptime_string_concat"],__yo_comptime_string_eq:["__yo_comptime_string_eq"],__yo_comptime_string_neq:["__yo_comptime_string_neq"],__yo_comptime_string_lt:["__yo_comptime_string_lt"],__yo_comptime_string_lte:["__yo_comptime_string_lte"],__yo_comptime_string_gt:["__yo_comptime_string_gt"],__yo_comptime_string_gte:["__yo_comptime_string_gte"],__yo_comptime_string_length:["__yo_comptime_string_length"],__yo_comptime_string_to_upper:["__yo_comptime_string_to_upper"],__yo_comptime_string_to_lower:["__yo_comptime_string_to_lower"],__yo_comptime_string_slice:["__yo_comptime_string_slice"],__yo_type_to_comptime_string:["__yo_type_to_comptime_string"],__yo_type_contains_rc_type:["__yo_type_contains_rc_type"],__yo_type_can_form_rc_cycle:["__yo_type_can_form_rc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_type_impls:["__yo_type_impls"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_rc_value:["__yo_var_is_owning_the_rc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_arc_dispose:["__yo_arc_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_drop_array_element:["__yo_drop_array_element"],__yo_dup_array_element:["__yo_dup_array_element"],__yo_drop_tuple_element:["__yo_drop_tuple_element"],__yo_dup_tuple_element:["__yo_dup_tuple_element"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"],__yo_getrandom:["__yo_getrandom"],__yo_arc4random_buf:["__yo_arc4random_buf"],__yo_bcrypt_gen_random:["__yo_bcrypt_gen_random"],__yo_maybe_uninit_new:["__yo_maybe_uninit_new"],__yo_maybe_uninit_as_ptr:["__yo_maybe_uninit_as_ptr"],__yo_maybe_uninit_assume_init:["__yo_maybe_uninit_assume_init"],__yo_process_platform:["__yo_process_platform"],__yo_process_arch:["__yo_process_arch"],__yo_build_project:["__yo_build_project"],__yo_build_executable:["__yo_build_executable"],__yo_build_static_library:["__yo_build_static_library"],__yo_build_shared_library:["__yo_build_shared_library"],__yo_build_test:["__yo_build_test"],__yo_build_run:["__yo_build_run"],__yo_build_step:["__yo_build_step"],__yo_build_step_depend_on:["__yo_build_step_depend_on"],__yo_build_link:["__yo_build_link"],__yo_build_link_system_library:["__yo_build_link_system_library"],__yo_build_target_host:["__yo_build_target_host"],__yo_build_target_parse:["__yo_build_target_parse"],__yo_build_dependency:["__yo_build_dependency"],__yo_build_path_dependency:["__yo_build_path_dependency"],__yo_build_system_library:["__yo_build_system_library"],__yo_build_option:["__yo_build_option"],__yo_build_dep_artifact:["__yo_build_dep_artifact"]};function Fo(e){return!!(e.tag==="FnCall"&&e.isInfix&&e.func.tag==="Atom"&&e.func.token.type==="operator"&&e.args.length===2)}function F(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?cr(e,r):Hr(e)}function Hr(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){e.func.token.value==="."?t=`${e.func.token.value}${Hr(e.args[0])}`:t=`${e.func.token.value}(${Hr(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let i=Hr(e.args[0]),o=Hr(e.args[1]);i=Fo(e.args[0])||wo(e.args[0])?`(${i})`:i,o=Fo(e.args[1])||wo(e.args[1])?`(${o})`:o,e.func.token.value==="."?t=`(${i}.${o})`:t=`${i} ${e.func.token.value} ${o}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===D.tuple[0]){e.args.length===1?t=`(${Hr(e.args[0])},)`:t=`(${e.args.map(i=>Hr(i)).join(", ").trim()})`;break}let n=Hr(e.func);n=Fo(e.func)||wo(e.func)?`(${n})`:n;let r=e.args.map(i=>Hr(i)).join(", ").trim();t=`${n}(${r})`;break}}return t}function cr(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},i=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){if(e.func.token.value===".")return`${e.func.token.value}${cr(e.args[0],t)}`;{let u=cr(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=cr(e.args[0],t),c=cr(e.args[1],t);return u=Fo(e.args[0])||wo(e.args[0])?`(${u})`:u,c=Fo(e.args[1])||wo(e.args[1])?`(${c})`:c,e.func.token.value==="."?`(${u}.${c})`:`${u} ${e.func.token.value} ${c}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===D.tuple[0]){if(e.args.length===0)return"()";if(e.args.length===1)return`(${cr(e.args[0],t)},)`;{let u=e.args.map(f=>cr(f,t)),c=`(${u.join(", ")})`;return c.length<=t.maxLineLength?c:`(
|
|
49
49
|
${i}${u.join(`,
|
|
50
50
|
${i}`)}
|
|
51
51
|
${n})`}}let o=e.func.tag==="Atom"?e.func.token.value:null,a=o&&[...D.begin,...D.cond,...D.match,...D.fn,...D.if,...D.while].includes(o),s=cr(e.func,t);if(s=Fo(e.func)||wo(e.func)?`(${s})`:s,e.args.length===0)return`${s}()`;if(!a){let u=e.args.map(f=>cr(f,t)),c=`${s}(${u.join(", ")})`;if(c.length<=t.maxLineLength)return c}if(a){if(o===D.begin[0]){if(e.args.length===1){let c=cr(e.args[0],t);if(c.length<=t.maxLineLength&&!c.includes(`
|
|
@@ -61,14 +61,14 @@ ${i}`)}
|
|
|
61
61
|
${n})`}}let l=e.args.map(u=>cr(u,r));return`${s}(
|
|
62
62
|
${i}${l.join(`,
|
|
63
63
|
${i}`)}
|
|
64
|
-
${n})`}}return
|
|
64
|
+
${n})`}}return Hr(e)}function gt(e,t,n){if(!e.$)throw new Error(`Expected expression to be evaluated, but it is not:
|
|
65
65
|
${F(e)}`);let{env:r,type:i,value:o,originType:a}=e.$,s=r.modulePath,l=t&&tt(i);if(e.$.variableName){let f=le(r,e.$.variableName);if(f.length>0){let _=f[f.length-1],m=_.isOwningTheRcValue?l:!1,g={..._,type:i,value:m?void 0:o?[o]:void 0,isCompileTimeOnly:m?!1:!!o,isOwningTheRcValue:m,isOwningTheSameRcValueAs:n};e.$.env=Tt(r,_,g),a||(e.$.originType=i);return}let{env:p}=Oe({env:r,variable:{name:e.$.variableName,type:i,value:l?void 0:o?[o]:void 0,isCompileTimeOnly:l?!1:!!o,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});a||(e.$.originType=i),e.$.env=p;return}let u=Ru(s),{env:c}=Oe({env:r,variable:{name:u,type:i,value:l?void 0:o?[o]:void 0,isCompileTimeOnly:l?!1:!!o,initializedAtToken:e.token,isOwningTheRcValue:l,isOwningTheSameRcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});e.$.variableName=u,a||(e.$.originType=i),e.$.env=c}function Lo(e,t){let n=e.frames.length-1,r=[];for(let i=0;i<t.length;i++){let o=t[i];if(!o.$)throw zt([{token:o.token,errorMessage:"Expected the body of the case to be evaluated, but it is not."}]);let a=o.$.env;r.push(a)}for(let i=0;i<r.length;i++)if(r[i].frames.length-1!==n)throw zt([{token:t[i].token,errorMessage:"Frame level is different for different cases."}]);for(let i=0;i<=n;i++){let o=i,a=e.frames[i],s=[...a.variables],l=[[]];s.forEach(f=>{l[0].push({consumedAtToken:f.consumedAtToken,initializedAtToken:f.initializedAtToken,type:f.type,isOwningTheRcValue:f.isOwningTheRcValue??!1})});for(let f=0;f<r.length;f++){let m=r[f].frames[i].variables;if(i!==n&&s.length!==m.length)if(m.length>s.length){let g=[...m].slice(s.length);if(g.every(h=>Bt(e.modulePath,h.name))){for(let v of g)s.push(v),l[0].push({consumedAtToken:void 0,initializedAtToken:v.initializedAtToken,type:v.type,isOwningTheRcValue:v.isOwningTheRcValue??!1});let h={...a,variables:[...s]};e={...e,frames:e.frames.map((v,$)=>$===i?h:v)}}else throw zt([{token:t[f].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}])}else throw zt([{token:t[f].token,errorMessage:`Frame level ${i} has different number of values for different cases.`}]);for(let g=0;g<s.length;g++){let y=s[g],h=m[g];if(y.name!==h.name){if(Bt(e.modulePath,y.name)&&Bt(e.modulePath,h.name))continue;throw zt([{token:t[f].token,errorMessage:`Frame level ${i} has different variable names for different cases.`}])}}l.push([]),m.forEach(g=>{l[l.length-1].push({consumedAtToken:g.consumedAtToken,initializedAtToken:g.initializedAtToken,type:g.type,isOwningTheRcValue:g.isOwningTheRcValue??!1})})}let u=l.length,c=l[0].length;for(let f=0;f<c;f++){let p=s[f].name,_=[],m=[],g=[],y=[];for(let w=1;w<u;w++){let b=r[w-1].frames[o].variables;_.push(l[w][f].initializedAtToken),m.push(l[w][f].isOwningTheRcValue?b[f].token:void 0),g.push(l[w][f].consumedAtToken),y.push(l[w][f].type)}let h=_.map((w,L)=>({token:w,index:L})).filter(({token:w})=>!!w);if(h.length>1){let w=y[h[0].index],L=r[h[0].index];for(let b=1;b<h.length;b++){let C=y[h[b].index],A=r[h[b].index];if(U(w)&&U(C)){let I=w.resolvedConcreteType,S=C.resolvedConcreteType;if(I&&S&&!ne({type:I,env:L},{type:S,env:A}))throw zt([{token:t[h[0].index].token,errorMessage:`Variable "${p}" has type Impl(...) but different concrete types across branches.
|
|
66
66
|
Impl(...) uses static dispatch and requires the same concrete type in all branches.
|
|
67
67
|
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:_[h[0].index],errorMessage:`First branch has concrete type: ${V(I)}`},{token:_[h[b].index],errorMessage:`Conflicting branch has concrete type: ${V(S)}`}])}if(w!==C&&!ne({type:w,env:L},{type:C,env:A}))throw zt([{token:t[h[0].index].token,errorMessage:`Variable "${p}" has incompatible types across different cases:`},{token:_[h[0].index],errorMessage:`First initialization: ${V(w)}`},{token:_[h[b].index],errorMessage:`Conflicting initialization: ${V(C)}`}])}}if(_.length===1){if(_[0]&&!s[f].initializedAtToken)throw zt([{token:s[f].token,errorMessage:`Variable "${s[f].name}" might not be initialized in all cases.`},{token:_[0],errorMessage:"Might be initialized here:"}])}else if(!s[f].initializedAtToken&&_.every(w=>w)){let w={...s[f],initializedAtToken:_[0]};e=Tt(e,s[f],w),s[f]=w}else{let w=_.filter(b=>!!b),L=_.filter(b=>!b);if(w.length>0&&L.length>0)throw zt(_.map((b,C)=>({errorMessage:(C===0?`Variable "${p}" might be initialized in some cases but not initialized in other cases:
|
|
68
68
|
`:"")+(b?"Might be initialized here:":"Not initialized here:"),token:b??t[C].token})))}if(g.length===1){if(g[0]&&!s[f].consumedAtToken){let w={...s[f],consumedAtToken:g[0]};e=Tt(e,s[f],w),s[f]=w}}else if(!s[f].consumedAtToken&&g.every(w=>w)){let w={...s[f],consumedAtToken:g[0]};e=Tt(e,s[f],w),s[f]=w}else{let w=g.filter(b=>!!b),L=g.filter(b=>!b);if(w.length>0&&L.length>0)throw zt(g.map((b,C)=>({errorMessage:(C===0?`Variable "${p}" is consumed in some cases but not in other cases:
|
|
69
69
|
`:"")+(b?"Consumed here:":"Not consumed here:"),token:b??t[C].token})))}if(!s[f].isOwningTheRcValue&&m.every(w=>w)){let w={...s[f],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=Tt(e,s[f],w),s[f]=w}else{let w=m.filter(b=>!!b),L=m.filter(b=>!b);if(w.length>0&&L.length>0)throw zt(m.map((b,C)=>({errorMessage:(C===0?`Variable "${p}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
|
|
70
|
-
`:"")+(b?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:b??t[C].token})))}let v=s[f].id,$=[];for(let w=1;w<u;w++){let C=r[w-1].frames[o].variables[f];$.push(C.id)}if($.some(w=>w!==v)){let w=Wi(e.modulePath,p),L={...s[f],id:w,isOwningTheSameRcValueAs:void 0};e=Tt(e,s[f],L),s[f]=L}}}return e}function
|
|
71
|
-
${F(e)}`});if(tt(e.$.type)){if(Bt(e.$.env.modulePath,n)&&!(Y(e)&&e.token.value!==n)){let a=le(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=Tt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=Nn(`${k.___dup[0]}(${n})`),o=R({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=le(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=Tt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function qi(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=le(t,n);if(r.length===0)throw zt([{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 zt([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var Ht="__yo_self";function Hi(e,t,n){if(Me(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hi(i.type,t,n));return n.delete(e.id),r}if(Je(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hi(i.type,t,n));return n.delete(e.id),r}if(Ue(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Hi(o.type,t,n)));return n.delete(e.id),r}return Ze(e)||Lt(e)||it(e)?Hi(e.childType,t,n):
|
|
70
|
+
`:"")+(b?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:b??t[C].token})))}let v=s[f].id,$=[];for(let w=1;w<u;w++){let C=r[w-1].frames[o].variables[f];$.push(C.id)}if($.some(w=>w!==v)){let w=Wi(e.modulePath,p),L={...s[f],id:w,isOwningTheSameRcValueAs:void 0};e=Tt(e,s[f],L),s[f]=L}}}return e}function Yr(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 ts(e,t){N(e)||(e.tag=t.tag),Yr(e,t)}function nr(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=le(t,r);if(i.length===0)throw zt([{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 zt([{token:e.token,errorMessage:u},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=Tt(t,o,{...o,consumedAtToken:e.token});return t}function wn(e,t){var r;if(!e.$||!e.$.variableName)return;if(e.$.value){let i=e.$.variableName;if(i&&Bt(e.$.env.modulePath,i)&&tt(e.$.type)){let o=le(e.$.env,i);if(o.length>0){let a=o[o.length-1];a.isOwningTheRcValue&&!a.consumedAtToken&&(e.$.env=Tt(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 ${k.___dup} on:
|
|
71
|
+
${F(e)}`});if(tt(e.$.type)){if(Bt(e.$.env.modulePath,n)&&!(Y(e)&&e.token.value!==n)){let a=le(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=Tt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=Nn(`${k.___dup[0]}(${n})`),o=R({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=le(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=Tt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function qi(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=le(t,n);if(r.length===0)throw zt([{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 zt([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var Ht="__yo_self";function Hi(e,t,n){if(Me(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hi(i.type,t,n));return n.delete(e.id),r}if(Je(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Hi(i.type,t,n));return n.delete(e.id),r}if(Ue(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Hi(o.type,t,n)));return n.delete(e.id),r}return Ze(e)||Lt(e)||it(e)?Hi(e.childType,t,n):Mr(e,t)}function Yi(e,t,n){if(Me(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Yi(i.type,t,n));return n.delete(e.id),r}if(Je(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Yi(i.type,t,n));return n.delete(e.id),r}if(Ue(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Yi(o.type,t,n)));return n.delete(e.id),r}return Ze(e)||Lt(e)||it(e)?Yi(e.childType,t,n):ui(e,t)}function zu(e,t,n,r){let i=Nn(e),o=R({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${F(i)}`);return{expr:o,env:o.$.env}}function Ao({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=zu(t,n,r,i);if(N(o)&&o.$&&o.$.value&&W(o.$.value)&&ee(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 fr({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=zu(t,n,r,i);if(N(o)&&o.$&&o.$.value&&ve(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 Ks=`(fn(${Ht} : Self) -> unit)`,ns=`(fn(${Ht} : Self) -> unit)`,rs=`(fn(${Ht} : Self) -> Self)`;function jm(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function Km(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Xs(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(Km(i)){let o=Et("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=Et("field_"+jm(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${Ht};`,callsExpr:r.join(`
|
|
72
72
|
`)}}function Xm(e){let t=Ks;if(!qn(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>tt(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=Xs(n,k.___drop[0]),o=`
|
|
73
73
|
${r}
|
|
74
74
|
${i}
|
|
@@ -145,9 +145,9 @@ ${l}
|
|
|
145
145
|
})`}function _y(e){return`((fn(${Ht} : Self) -> Self) { // ___dup for Arc
|
|
146
146
|
${k.__yo_incr_rc_atomic[0]}(${Ht});
|
|
147
147
|
return ${k.__yo_rc_own[0]}(${Ht});
|
|
148
|
-
})`}function Wu({arcType:e,env:t,context:n}){let r=cy(e),i=fy(e),o=_y(e);return t=fr({label:k.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=fr({label:k.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=fr({label:k.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Pn(e,t,n,r){let i=`${e}()`,o=Nn(i),a=R({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Jt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:Jn(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function py({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>ma(i.type,t))&&(t=Pn("Send",e,t,n)),t}function dy({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=Pn("Rc",e,t,n)),t}function my({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>ma(o.type,t)))&&(t=Pn("Send",e,t,n)),t}function qu({unionType:e,env:t,context:n}){return e.fields.every(i=>ma(i.type,t))&&(t=Pn("Send",e,t,n)),t}function yy({structType:e,env:t,context:n}){return e.isReferenceSemantics?li(e,new Set,t)||(t=Pn("Acyclic",e,t,n)):e.fields.every(i=>Gi(i.type,t))&&(t=Pn("Acyclic",e,t,n)),t}function gy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Gi(o.type,t)))&&(t=Pn("Acyclic",e,t,n)),t}function Hu({unionType:e,env:t,context:n}){return e.fields.every(i=>Gi(i.type,t))&&(t=Pn("Acyclic",e,t,n)),t}function hy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Hi(i.type,t,new Set([e.id])))&&(t=Pn("Comptime",e,t,n)),t}function vy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Hi(o.type,t,new Set([e.id]))))&&(t=Pn("Comptime",e,t,n)),t}function Ty({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=Pn("Runtime",e,t,n),t):(e.fields.every(i=>Yi(i.type,t,new Set([e.id])))&&(t=Pn("Runtime",e,t,n)),t)}function Ey({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,new Set([e.id]))))&&(t=Pn("Runtime",e,t,n)),t}function Yu({unionType:e,env:t,context:n}){return t=Pn("Runtime",e,t,n),t}function $y({tupleType:e,env:t,context:n}){return e.fields.every(i=>ma(i.type,t))&&(t=Pn("Send",e,t,n)),t}function Cy({tupleType:e,env:t,context:n}){return e.fields.every(i=>Hi(i.type,t,new Set([e.id])))&&(t=Pn("Comptime",e,t,n)),t}function by({tupleType:e,env:t,context:n}){return e.fields.every(i=>Yi(i.type,t,new Set([e.id])))&&(t=Pn("Runtime",e,t,n)),t}function ji({structType:e,env:t,context:n,errorToken:r}){return t=py({structType:e,env:t,context:n}),t=dy({structType:e,env:t,context:n}),t=yy({structType:e,env:t,context:n}),t=hy({structType:e,env:t,context:n}),t=Ty({structType:e,env:t,context:n}),t=Jm({structType:e,env:t,context:n}),is(e,t,r,n),t}function ju({enumType:e,env:t,context:n,errorToken:r}){return t=my({enumType:e,env:t,context:n}),t=gy({enumType:e,env:t,context:n}),t=vy({enumType:e,env:t,context:n}),t=Ey({enumType:e,env:t,context:n}),t=ny({enumType:e,env:t,context:n}),is(e,t,r,n),t}function Ku({tupleType:e,env:t,context:n,errorToken:r}){return t=$y({tupleType:e,env:t,context:n}),t=Cy({tupleType:e,env:t,context:n}),t=by({tupleType:e,env:t,context:n}),is(e,t,r,n),t}function vr(e,t){let n=le(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 bn(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||U(s.value)&&s.value.id===t.id)return t;U(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=le(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(U(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"){let f=c;if(f.value===t){a=!0;break}if(U(f.value)&&f.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(U(t));return r.value}var Js=null;function $i(){if(Js)return Js;let e=Pt(),t=ft(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Js=n,n}var el=null;function _o(){if(el)return el;let e=Pt(),t=ft(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,el=n,n}var tl=null;function Tn(){if(tl)return tl;let e=Pt(),t=ft(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,tl=n,n}var nl=null;function Kn(){if(nl)return nl;let e=Pt(),t=ft(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,nl=n,n}var rl=new Map;function _a(e){if(rl.has(e))return rl.get(e);let t=Pt(),n=ft(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,rl.set(e,i),i}function ya(){return _a(Kn())}var il=null;function Nt(){if(il)return il;let e=Pt(),t=ft(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,il=n,n}var ol=null;function Qt(){if(ol)return ol;let e=Pt(),t=ft(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,ol=n,n}var al=null;function po(){if(al)return al;let e=Pt(),t=ft(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,al=n,n}var sl=null;function mo(){if(sl)return sl;let e=Pt(),t=ft(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,sl=n,n}var ll=null;function yo(){if(ll)return ll;let e=Pt(),t=ft(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,ll=n,n}var ul=null;function go(){if(ul)return ul;let e=Pt(),t=ft(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,ul=n,n}var cl=null;function ho(){if(cl)return cl;let e=Pt(),t=ft(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,cl=n,n}var fl=null;function vo(){if(fl)return fl;let e=Pt(),t=ft(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,fl=n,n}var _l=null;function Ci(){if(_l)return _l;let e=Pt(),t=ft(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,_l=n,n}var pl=null;function To(){if(pl)return pl;let e=Pt(),t=ft(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,pl=n,n}var dl=null;function Eo(){if(dl)return dl;let e=Pt(),t=ft(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,dl=n,n}var ml=null;function $o(){if(ml)return ml;let e=Pt(),t=ft(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,ml=n,n}var yl=null;function bi(){if(yl)return yl;let e=Pt(),t=ft(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,yl=n,n}var gl=null;function Tr(){if(gl)return gl;let e=Pt(),t=ft(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,gl=n,n}var hl=null;function Qu(){if(hl)return hl;let e=Pt(),t=ft(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,hl=n,n}var vl=null;function Zu(){if(vl)return vl;let e=Pt(),t=ft(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,vl=n,n}var Tl=null;function Ju(){if(Tl)return Tl;let e=Pt(),t=ft(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,Tl=n,n}var El=null;function ec(){if(El)return El;let e=Pt(),t=ft(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,El=n,n}var $l=null;function tc(){if($l)return $l;let e=Pt(),t=ft(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,$l=n,n}var Cl=null;function nc(){if(Cl)return Cl;let e=Pt(),t=ft(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,Cl=n,n}var bl=null;function rc(){if(bl)return bl;let e=Pt(),t=ft(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,bl=n,n}var kl=null;function ic(){if(kl)return kl;let e=Pt(),t=ft(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,kl=n,n}var wl=null;function oc(){if(wl)return wl;let e=Pt(),t=ft(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,wl=n,n}var Fl=null;function ac(){if(Fl)return Fl;let e=Pt(),t=ft(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,Fl=n,n}function Dt(e){return Jn(0,e)}function Yr(e,t){let n=Pt(),r=ft(n),i={id:`array_${e.id+"_"+js(lt(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var Ll=new Map;function as(e){if(Ll.has(e))return Ll.get(e);let t=Pt(),n=ft(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,Ll.set(e,r),r}function Du(e){var r;let n=le(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 Al;function sc(){if(Al)return Al;let e=Pt(),t=ft(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,Al=n,n}function ss(e){let t=Pt(),n=ft(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Xi(e,t=!1,n=!1){let r=ft(e),i={id:`struct_${Et(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function ls(e){return{id:`module_${Et(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function ft(e){return{id:`trait_${Et(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function lc(e){let t=ft(e),n={id:`enum_${Et(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function uc(e){let t=ft(e),n={id:`union_${Et(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function Qi({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,isClosure:f}){let p=Pt(),_=ft(p),m={id:`fn_${Et(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:_,isClosure:f};return _.receiverType=m,m}var Il=new Map;function Zi(e){if(Il.has(e))return Il.get(e);let t=Pt(),n=ft(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,Il.set(e,r),r}var Nl=new Map;function cc(e,t){if(Nl.has(e))return Nl.get(e);let n=ft(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,Nl.set(e,r),r}var Sl=new Map;function fc(e,t){if(Sl.has(e))return Sl.get(e);let n=ft(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,Sl.set(e,r),r}function ur(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=ft(a),u=(r==null?void 0:r.map(p=>({traitType:p,frameLevel:-1})))??[],c=(i==null?void 0:i.map(p=>({traitType:p,frameLevel:-1})))??[],f={id:n??`sometype_${Et(a.modulePath)}`,tag:"SomeType",name:t,definitionFrameLevel:a.frames.length>0?a.frames.length-1:void 0,parentType:e,size:void 0,requiredTraits:u,negativeTraits:c,trait:l,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:o};return l.receiverType=f,vr(a,"Runtime")&&Pn("Runtime",f,a,s),Bu({someType:f,env:a,context:{SelfType:f,stdPath:""}}),f}var os=new Map;function Ji(e,t){let n=ft(t),r=Jn(1),i={id:`effects_row_sometype_${Et(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 ci(e){let t=Pt(),n=ft(t),r={id:`EffectsRow_${Et(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function Jn(e,t){if(os.has(e)){let i=os.get(e);if(i.has(t))return i.get(t)}else os.set(e,new Map);let n=ft(Pt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,os.get(e).set(t,r),r}function eo({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function _c(e,t){let n=`fn_trait_${e.id}`,r=ft(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function Xu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${V(a.type)}`).join(","),o=V(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${V(n.type)}`}).join(";")}function ga({requiredTraits:e,env:t,negativeTraits:n}){let r=ft(t),i=e.map(c=>Xu(c)).join("__"),o=n?n.map(c=>Xu(c)).join("__"):"",a=`dyn_${js(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 pc(e,t){return!Ct(e)||!Ct(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Er(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),U(t))return e===t.id;if(Me(t))return t.fields.some(r=>Er(e,r.type,n));if(Ue(t))return t.variants.some(r=>r.fields?r.fields.some(i=>Er(e,i.type,n)):!1);if(Je(t))return t.fields.some(r=>Er(e,r.type,n));if(Ze(t)||Lt(t)||vn(t))return Er(e,t.childType,n);if(it(t))return!1;if(un(t)||rn(t))return Er(e,t.childType,n);if(ee(t))return t.parameters.some(r=>Er(e,r.type,n))||Er(e,t.return.type,n);if(Sn(t)){if(Er(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(Er(e,r.type,n))return!0;return!1}return ln(t)?Er(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}),U(e.type)&&U(t.type)){let r=bn(e.env,e.type),i=bn(t.env,t.type);if(U(r))if(U(i)){if(r!==i){let o=fe(t.type);{let a=le(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Tt(e.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=le(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Tt(t.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=fe(i),a=le(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Tt(e.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=fe(r),a=le(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Tt(t.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(ln(l)){let u=a.find(c=>ln(c.traitType));if(u&&ln(u.traitType)){let{expectedEnv:c,givenEnv:f}=It({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=f}}else if(Sn(l)){let u=a.find(c=>Sn(c.traitType));if(u&&Sn(u.traitType)){let{expectedEnv:c,givenEnv:f}=It({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=f,Vl(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(U(e.type)){let r=bn(e.env,e.type);if(U(r)&&(r.id===e.type.id||r.name===e.type.name)){if(Er(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${V(t.type)}" because it would create an infinite type.`);let i=fe(t.type),o=le(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=Tt(e.env,a,{...a,value:[i]}));else{let{env:s}=Oe({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(ln(s)&&ee(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(Sn(s)&&Sn(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,Vl(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!U(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(U(t.type)){let r=bn(t.env,t.type);if(U(r)){if(Er(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${V(e.type)}" because it would create an infinite type.`);let i=fe(e.type),o=le(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=Tt(t.env,a,{...a,value:[i]}));else{let{env:s}=Oe({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(Je(e.type)&&Je(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(Je(e.type)&&Je(t.type))throw new Error(`Cannot unify incompatible tuple types: "${V(e.type)}" and "${V(t.type)}"`);if(Me(e.type)&&Me(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: "${V(e.type)}" and "${V(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(Ue(e.type)&&Ue(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(Ue(e.type)&&Ue(t.type))throw new Error(`Cannot unify incompatible enum types: "${V(e.type)}" and "${V(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(it(e.type)&&it(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(rn(e.type)&&rn(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(Ze(e.type)&&Ze(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,Re(e.type.length)&&e.type.length.variableName&&!Re(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=le(e.env,o),l=s[s.length-1];if(l)l&&(e.env=Tt(e.env,l,{...l,value:[a]}));else{let{env:u}=Oe({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(vn(e.type)&&vn(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(Sn(e.type)&&Sn(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,Vl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(ln(e.type)&&ln(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(ee(e.type)&&ee(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,i=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=i.forallParameters[s],{expectedEnv:c,givenEnv:f}=It({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=f}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=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 _ of i.implicitParameters)_.isEffectRowSpread?Rt(_.type)&&l.push(..._.type.implicitParameters):l.push(_);let u=[],c=[],f=[];for(let _ of s)_.isEffectRowSpread?Rt(_.type)?c.push(_):U(_.type)&&_.type.isEffectsRow&&f.push(_):u.push(_);if(f.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${f.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let p=new Set;for(let _ of u)for(let m=0;m<l.length;m++)if(!p.has(m)&&_.type.id===l[m].type.id){let{expectedEnv:g,givenEnv:y}=It({type:_.type,env:e.env},{type:l[m].type,env:t.env},n);e.env=g,t.env=y,p.add(m);break}for(let _ of c){let m=_.type.implicitParameters;for(let g of m)for(let y=0;y<l.length;y++)if(!p.has(y)&&g.type.id===l[y].type.id){let{expectedEnv:h,givenEnv:v}=It({type:g.type,env:e.env},{type:l[y].type,env:t.env},n);e.env=h,t.env=v,p.add(y);break}}if(f.length===1){let _=f[0],m=[];for(let g=0;g<l.length;g++)p.has(g)||m.push(l[g]);if(U(_.type)&&_.type.isEffectsRow){let g=ci(m),y=fe(g),h=le(e.env,_.type.name),v=h[h.length-1];if(v)e.env=Tt(e.env,v,{...v,value:[y]});else{let{env:$}=Oe({env:e.env,variable:{name:_.type.name,value:[y],type:y.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(!(Ct(e.type)&&!Ct(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
|
|
148
|
+
})`}function Wu({arcType:e,env:t,context:n}){let r=cy(e),i=fy(e),o=_y(e);return t=fr({label:k.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=fr({label:k.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=fr({label:k.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Pn(e,t,n,r){let i=`${e}()`,o=Nn(i),a=R({expr:o,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Jt(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:Jn(1),assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:o}};return t.trait.fields.push(l),n}function py({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>ma(i.type,t))&&(t=Pn("Send",e,t,n)),t}function dy({structType:e,env:t,context:n}){return e.isReferenceSemantics&&(t=Pn("Rc",e,t,n)),t}function my({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>ma(o.type,t)))&&(t=Pn("Send",e,t,n)),t}function qu({unionType:e,env:t,context:n}){return e.fields.every(i=>ma(i.type,t))&&(t=Pn("Send",e,t,n)),t}function yy({structType:e,env:t,context:n}){return e.isReferenceSemantics?li(e,new Set,t)||(t=Pn("Acyclic",e,t,n)):e.fields.every(i=>Gi(i.type,t))&&(t=Pn("Acyclic",e,t,n)),t}function gy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Gi(o.type,t)))&&(t=Pn("Acyclic",e,t,n)),t}function Hu({unionType:e,env:t,context:n}){return e.fields.every(i=>Gi(i.type,t))&&(t=Pn("Acyclic",e,t,n)),t}function hy({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.every(i=>Hi(i.type,t,new Set([e.id])))&&(t=Pn("Comptime",e,t,n)),t}function vy({enumType:e,env:t,context:n}){return e.variants.every(i=>!i.fields||i.fields.length===0?!0:i.fields.every(o=>Hi(o.type,t,new Set([e.id]))))&&(t=Pn("Comptime",e,t,n)),t}function Ty({structType:e,env:t,context:n}){return e.isReferenceSemantics?(t=Pn("Runtime",e,t,n),t):(e.fields.every(i=>Yi(i.type,t,new Set([e.id])))&&(t=Pn("Runtime",e,t,n)),t)}function Ey({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,new Set([e.id]))))&&(t=Pn("Runtime",e,t,n)),t}function Yu({unionType:e,env:t,context:n}){return t=Pn("Runtime",e,t,n),t}function $y({tupleType:e,env:t,context:n}){return e.fields.every(i=>ma(i.type,t))&&(t=Pn("Send",e,t,n)),t}function Cy({tupleType:e,env:t,context:n}){return e.fields.every(i=>Hi(i.type,t,new Set([e.id])))&&(t=Pn("Comptime",e,t,n)),t}function by({tupleType:e,env:t,context:n}){return e.fields.every(i=>Yi(i.type,t,new Set([e.id])))&&(t=Pn("Runtime",e,t,n)),t}function ji({structType:e,env:t,context:n,errorToken:r}){return t=py({structType:e,env:t,context:n}),t=dy({structType:e,env:t,context:n}),t=yy({structType:e,env:t,context:n}),t=hy({structType:e,env:t,context:n}),t=Ty({structType:e,env:t,context:n}),t=Jm({structType:e,env:t,context:n}),is(e,t,r,n),t}function ju({enumType:e,env:t,context:n,errorToken:r}){return t=my({enumType:e,env:t,context:n}),t=gy({enumType:e,env:t,context:n}),t=vy({enumType:e,env:t,context:n}),t=Ey({enumType:e,env:t,context:n}),t=ny({enumType:e,env:t,context:n}),is(e,t,r,n),t}function Ku({tupleType:e,env:t,context:n,errorToken:r}){return t=$y({tupleType:e,env:t,context:n}),t=Cy({tupleType:e,env:t,context:n}),t=by({tupleType:e,env:t,context:n}),is(e,t,r,n),t}function vr(e,t){let n=le(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 bn(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||U(s.value)&&s.value.id===t.id)return t;U(s.value)&&(s.value.id,t.id)}}}let r,i=new Set;do{if(i.has(t))return t;i.add(t);let o=le(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(U(r.value)){if(r.value.name===t.name&&r.value.id!==t.id){let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"&&c.value===t){a=!0;break}}if(a)break}}if(!a)return t}t=r.value}else{let a=!1;for(let s=e.frames.length-1;s>=0;s--){let l=e.frames[s];if(l){for(let u of l.variables)if(u.name===t.name&&u.value){let c=u.value[0];if((c==null?void 0:c.tag)==="Type"){let f=c;if(f.value===t){a=!0;break}if(U(f.value)&&f.value.id!==t.id)return t}}if(a)break}}if(!a)return t;break}}while(U(t));return r.value}var Js=null;function $i(){if(Js)return Js;let e=Pt(),t=ft(e),n={id:"comptime_int",tag:"comptime_int",trait:t};return t.receiverType=n,Js=n,n}var el=null;function _o(){if(el)return el;let e=Pt(),t=ft(e),n={id:"comptime_float",tag:"comptime_float",trait:t};return t.receiverType=n,el=n,n}var tl=null;function Tn(){if(tl)return tl;let e=Pt(),t=ft(e),n={id:"comptime_string",tag:"comptime_string",trait:t};return t.receiverType=n,tl=n,n}var nl=null;function Kn(){if(nl)return nl;let e=Pt(),t=ft(e),n={id:"Expr",tag:"Expr",trait:t};return t.receiverType=n,nl=n,n}var rl=new Map;function _a(e){if(rl.has(e))return rl.get(e);let t=Pt(),n=ft(t),i={id:`comptime_list_${e.id}`,tag:"ComptimeList",childType:e,trait:n};return n.receiverType=i,rl.set(e,i),i}function ya(){return _a(Kn())}var il=null;function Nt(){if(il)return il;let e=Pt(),t=ft(e),n={id:"bool",tag:"bool",trait:t};return t.receiverType=n,il=n,n}var ol=null;function Qt(){if(ol)return ol;let e=Pt(),t=ft(e),n={id:"usize",tag:"usize",trait:t};return t.receiverType=n,ol=n,n}var al=null;function po(){if(al)return al;let e=Pt(),t=ft(e),n={id:"isize",tag:"isize",trait:t};return t.receiverType=n,al=n,n}var sl=null;function mo(){if(sl)return sl;let e=Pt(),t=ft(e),n={id:"u8",tag:"u8",trait:t};return t.receiverType=n,sl=n,n}var ll=null;function yo(){if(ll)return ll;let e=Pt(),t=ft(e),n={id:"i8",tag:"i8",trait:t};return t.receiverType=n,ll=n,n}var ul=null;function go(){if(ul)return ul;let e=Pt(),t=ft(e),n={id:"u16",tag:"u16",trait:t};return t.receiverType=n,ul=n,n}var cl=null;function ho(){if(cl)return cl;let e=Pt(),t=ft(e),n={id:"i16",tag:"i16",trait:t};return t.receiverType=n,cl=n,n}var fl=null;function vo(){if(fl)return fl;let e=Pt(),t=ft(e),n={id:"u32",tag:"u32",trait:t};return t.receiverType=n,fl=n,n}var _l=null;function Ci(){if(_l)return _l;let e=Pt(),t=ft(e),n={id:"i32",tag:"i32",trait:t};return t.receiverType=n,_l=n,n}var pl=null;function To(){if(pl)return pl;let e=Pt(),t=ft(e),n={id:"u64",tag:"u64",trait:t};return t.receiverType=n,pl=n,n}var dl=null;function Eo(){if(dl)return dl;let e=Pt(),t=ft(e),n={id:"i64",tag:"i64",trait:t};return t.receiverType=n,dl=n,n}var ml=null;function $o(){if(ml)return ml;let e=Pt(),t=ft(e),n={id:"f32",tag:"f32",trait:t};return t.receiverType=n,ml=n,n}var yl=null;function bi(){if(yl)return yl;let e=Pt(),t=ft(e),n={id:"f64",tag:"f64",trait:t};return t.receiverType=n,yl=n,n}var gl=null;function Tr(){if(gl)return gl;let e=Pt(),t=ft(e),n={id:"unit",tag:"unit",trait:t};return t.receiverType=n,gl=n,n}var hl=null;function Qu(){if(hl)return hl;let e=Pt(),t=ft(e),n={id:"char",tag:"char",trait:t};return t.receiverType=n,hl=n,n}var vl=null;function Zu(){if(vl)return vl;let e=Pt(),t=ft(e),n={id:"short",tag:"short",trait:t};return t.receiverType=n,vl=n,n}var Tl=null;function Ju(){if(Tl)return Tl;let e=Pt(),t=ft(e),n={id:"ushort",tag:"ushort",trait:t};return t.receiverType=n,Tl=n,n}var El=null;function ec(){if(El)return El;let e=Pt(),t=ft(e),n={id:"int",tag:"int",trait:t};return t.receiverType=n,El=n,n}var $l=null;function tc(){if($l)return $l;let e=Pt(),t=ft(e),n={id:"uint",tag:"uint",trait:t};return t.receiverType=n,$l=n,n}var Cl=null;function nc(){if(Cl)return Cl;let e=Pt(),t=ft(e),n={id:"long",tag:"long",trait:t};return t.receiverType=n,Cl=n,n}var bl=null;function rc(){if(bl)return bl;let e=Pt(),t=ft(e),n={id:"ulong",tag:"ulong",trait:t};return t.receiverType=n,bl=n,n}var kl=null;function ic(){if(kl)return kl;let e=Pt(),t=ft(e),n={id:"longlong",tag:"longlong",trait:t};return t.receiverType=n,kl=n,n}var wl=null;function oc(){if(wl)return wl;let e=Pt(),t=ft(e),n={id:"ulonglong",tag:"ulonglong",trait:t};return t.receiverType=n,wl=n,n}var Fl=null;function ac(){if(Fl)return Fl;let e=Pt(),t=ft(e),n={id:"longdouble",tag:"longdouble",trait:t};return t.receiverType=n,Fl=n,n}function Dt(e){return Jn(0,e)}function jr(e,t){let n=Pt(),r=ft(n),i={id:`array_${e.id+"_"+js(lt(t))}`,tag:"Array",childType:e,length:t,trait:r};return r.receiverType=i,i}var Ll=new Map;function as(e){if(Ll.has(e))return Ll.get(e);let t=Pt(),n=ft(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,trait:n};return n.receiverType=r,Ll.set(e,r),r}function Du(e){var r;let n=le(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 Al;function sc(){if(Al)return Al;let e=Pt(),t=ft(e),n={id:"void",tag:"void",trait:t};return t.receiverType=n,Al=n,n}function ss(e){let t=Pt(),n=ft(t),r={id:`tuple_${e.map(i=>i.type.id).join("_")}`,tag:"Tuple",fields:e,trait:n};return n.receiverType=r,r}function Xi(e,t=!1,n=!1){let r=ft(e),i={id:`struct_${Et(e.modulePath)}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],trait:r,env:e};return r.receiverType=i,i}function ls(e){return{id:`module_${Et(e.modulePath)}`,tag:"Module",fields:[],env:e,trait:void 0}}function ft(e){return{id:`trait_${Et(e.modulePath)}`,tag:"Trait",fields:[],env:e,trait:void 0}}function lc(e){let t=ft(e),n={id:`enum_${Et(e.modulePath)}`,tag:"Enum",variants:[],trait:t,env:e};return t.receiverType=n,n}function uc(e){let t=ft(e),n={id:`union_${Et(e.modulePath)}`,tag:"Union",fields:[],trait:t,env:e};return t.receiverType=n,n}function Qi({parameters:e,forallParameters:t,implicitParameters:n,variadicParameter:r,whereClauseExprs:i,return_:o,env:a,parametersFrame:s,SelfType:l,SelfTraitType:u,SelfModuleType:c,isClosure:f}){let p=Pt(),_=ft(p),m={id:`fn_${Et(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:_,isClosure:f};return _.receiverType=m,m}var Il=new Map;function Zi(e){if(Il.has(e))return Il.get(e);let t=Pt(),n=ft(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,trait:n};return n.receiverType=r,Il.set(e,r),r}var Nl=new Map;function cc(e,t){if(Nl.has(e))return Nl.get(e);let n=ft(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,trait:n,env:t};return n.receiverType=r,Nl.set(e,r),r}var Sl=new Map;function fc(e,t){if(Sl.has(e))return Sl.get(e);let n=ft(t),r={id:`arc_${e.id}`,tag:"Arc",childType:e,trait:n,env:t};return n.receiverType=r,Sl.set(e,r),r}function ur(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=ft(a),u=(r==null?void 0:r.map(p=>({traitType:p,frameLevel:-1})))??[],c=(i==null?void 0:i.map(p=>({traitType:p,frameLevel:-1})))??[],f={id:n??`sometype_${Et(a.modulePath)}`,tag:"SomeType",name:t,definitionFrameLevel:a.frames.length>0?a.frames.length-1:void 0,parentType:e,size:void 0,requiredTraits:u,negativeTraits:c,trait:l,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:o};return l.receiverType=f,vr(a,"Runtime")&&Pn("Runtime",f,a,s),Bu({someType:f,env:a,context:{SelfType:f,stdPath:""}}),f}var os=new Map;function Ji(e,t){let n=ft(t),r=Jn(1),i={id:`effects_row_sometype_${Et(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 ci(e){let t=Pt(),n=ft(t),r={id:`EffectsRow_${Et(t.modulePath)}`,tag:"EffectsRow",implicitParameters:e,trait:n};return n.receiverType=r,r}function Jn(e,t){if(os.has(e)){let i=os.get(e);if(i.has(t))return i.get(t)}else os.set(e,new Map);let n=ft(Pt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,trait:n};return n.receiverType=r,os.get(e).set(t,r),r}function eo({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}){return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:i}}function _c(e,t){let n=`fn_trait_${e.id}`,r=ft(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}function Xu(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,i=r.parameters.map(a=>`${a.label}:${V(a.type)}`).join(","),o=V(r.return.type);return`${n.label}:(${i})->${o}`}return`${n.label}:${V(n.type)}`}).join(";")}function ga({requiredTraits:e,env:t,negativeTraits:n}){let r=ft(t),i=e.map(c=>Xu(c)).join("__"),o=n?n.map(c=>Xu(c)).join("__"):"",a=`dyn_${js(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 pc(e,t){return!Ct(e)||!Ct(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function Er(e,t,n=new Set){if(n.has(t.id))return!1;if(n.add(t.id),U(t))return e===t.id;if(Me(t))return t.fields.some(r=>Er(e,r.type,n));if(Ue(t))return t.variants.some(r=>r.fields?r.fields.some(i=>Er(e,i.type,n)):!1);if(Je(t))return t.fields.some(r=>Er(e,r.type,n));if(Ze(t)||Lt(t)||vn(t))return Er(e,t.childType,n);if(it(t))return!1;if(un(t)||rn(t))return Er(e,t.childType,n);if(ee(t))return t.parameters.some(r=>Er(e,r.type,n))||Er(e,t.return.type,n);if(Sn(t)){if(Er(e,t.isFuture.outputType,n))return!0;for(let r of t.isFuture.effects)if(Er(e,r.type,n))return!0;return!1}return ln(t)?Er(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}),U(e.type)&&U(t.type)){let r=bn(e.env,e.type),i=bn(t.env,t.type);if(U(r))if(U(i)){if(r!==i){let o=fe(t.type);{let a=le(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Tt(e.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}{let a=le(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Tt(t.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});t.env=l}}}}else{let o=fe(i),a=le(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Tt(e.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:e.env,variable:{name:e.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=l}}else{let o=fe(r),a=le(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Tt(t.env,s,{...s,value:[o]});else{let{env:l}=Oe({env:t.env,variable:{name:t.type.name,value:[o],type:o.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(ln(l)){let u=a.find(c=>ln(c.traitType));if(u&&ln(u.traitType)){let{expectedEnv:c,givenEnv:f}=It({type:l.isFn.callType,env:e.env},{type:u.traitType.isFn.callType,env:t.env},n);e.env=c,t.env=f}}else if(Sn(l)){let u=a.find(c=>Sn(c.traitType));if(u&&Sn(u.traitType)){let{expectedEnv:c,givenEnv:f}=It({type:l.isFuture.outputType,env:e.env},{type:u.traitType.isFuture.outputType,env:t.env},n);e.env=c,t.env=f,Vl(l.isFuture.effects,u.traitType.isFuture.effects,e,t,n)}}}}}else if(U(e.type)){let r=bn(e.env,e.type);if(U(r)&&(r.id===e.type.id||r.name===e.type.name)){if(Er(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${V(t.type)}" because it would create an infinite type.`);let i=fe(t.type),o=le(e.env,e.type.name),a=o[o.length-1];if(a)a&&(e.env=Tt(e.env,a,{...a,value:[i]}));else{let{env:s}=Oe({env:e.env,variable:{name:e.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});e.env=s}if(e.type.requiredTraits){for(let{traitType:s}of e.type.requiredTraits)if(ln(s)&&ee(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(Sn(s)&&Sn(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,Vl(s.isFuture.effects,t.type.isFuture.effects,e,t,n)}}}else if(!U(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(U(t.type)){let r=bn(t.env,t.type);if(U(r)){if(Er(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${V(e.type)}" because it would create an infinite type.`);let i=fe(e.type),o=le(t.env,t.type.name),a=o[o.length-1];if(a)a&&(t.env=Tt(t.env,a,{...a,value:[i]}));else{let{env:s}=Oe({env:t.env,variable:{name:t.type.name,value:[i],type:i.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(Je(e.type)&&Je(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(Je(e.type)&&Je(t.type))throw new Error(`Cannot unify incompatible tuple types: "${V(e.type)}" and "${V(t.type)}"`);if(Me(e.type)&&Me(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: "${V(e.type)}" and "${V(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(Ue(e.type)&&Ue(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(Ue(e.type)&&Ue(t.type))throw new Error(`Cannot unify incompatible enum types: "${V(e.type)}" and "${V(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(it(e.type)&&it(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(rn(e.type)&&rn(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(Ze(e.type)&&Ze(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,Re(e.type.length)&&e.type.length.variableName&&!Re(t.type.length)){let o=e.type.length.variableName,a=t.type.length,s=le(e.env,o),l=s[s.length-1];if(l)l&&(e.env=Tt(e.env,l,{...l,value:[a]}));else{let{env:u}=Oe({env:e.env,variable:{name:o,value:[a],type:t.type.length.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(vn(e.type)&&vn(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(Sn(e.type)&&Sn(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,Vl(e.type.isFuture.effects,t.type.isFuture.effects,e,t,n)}else if(ln(e.type)&&ln(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(ee(e.type)&&ee(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,i=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=i.forallParameters[s],{expectedEnv:c,givenEnv:f}=It({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=c,t.env=f}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=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 _ of i.implicitParameters)_.isEffectRowSpread?Rt(_.type)&&l.push(..._.type.implicitParameters):l.push(_);let u=[],c=[],f=[];for(let _ of s)_.isEffectRowSpread?Rt(_.type)?c.push(_):U(_.type)&&_.type.isEffectsRow&&f.push(_):u.push(_);if(f.length>1)throw new Error(`Ambiguous effect row unification: multiple unsolved effect row variables (${f.map(_=>_.label).join(", ")}). At most one effect row spread can be unsolved during type unification.`);let p=new Set;for(let _ of u)for(let m=0;m<l.length;m++)if(!p.has(m)&&_.type.id===l[m].type.id){let{expectedEnv:g,givenEnv:y}=It({type:_.type,env:e.env},{type:l[m].type,env:t.env},n);e.env=g,t.env=y,p.add(m);break}for(let _ of c){let m=_.type.implicitParameters;for(let g of m)for(let y=0;y<l.length;y++)if(!p.has(y)&&g.type.id===l[y].type.id){let{expectedEnv:h,givenEnv:v}=It({type:g.type,env:e.env},{type:l[y].type,env:t.env},n);e.env=h,t.env=v,p.add(y);break}}if(f.length===1){let _=f[0],m=[];for(let g=0;g<l.length;g++)p.has(g)||m.push(l[g]);if(U(_.type)&&_.type.isEffectsRow){let g=ci(m),y=fe(g),h=le(e.env,_.type.name),v=h[h.length-1];if(v)e.env=Tt(e.env,v,{...v,value:[y]});else{let{env:$}=Oe({env:e.env,variable:{name:_.type.name,value:[y],type:y.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,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(!(Ct(e.type)&&!Ct(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types:
|
|
149
149
|
Expected: "${V(e.type)}"
|
|
150
|
-
Given: "${V(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function Vl(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?Rt(c.type)?a.push(c):U(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?Rt(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let f=0;f<l.length;f++)if(!u.has(f)&&c.type.id===l[f].type.id){let{expectedEnv:p,givenEnv:_}=It({type:c.type,env:n.env},{type:l[f].type,env:r.env},i);n.env=p,r.env=_,u.add(f);break}for(let c of a){let f=c.type.implicitParameters;for(let p of f)for(let _=0;_<l.length;_++)if(!u.has(_)&&p.type.id===l[_].type.id){let{expectedEnv:m,givenEnv:g}=It({type:p.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=m,r.env=g,u.add(_);break}}if(s.length===1){let c=s[0],f=[];for(let p=0;p<l.length;p++)u.has(p)||f.push(l[p]);if(U(c.type)&&c.type.isEffectsRow){let p=ci(f),_=fe(p),m=le(n.env,c.type.name),g=m[m.length-1];if(g)n.env=Tt(n.env,g,{...g,value:[_]});else{let{env:y}=Oe({env:n.env,variable:{name:c.type.name,value:[_],type:_.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=y}}}}function xl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Ir(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function dc(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=Ir(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function Dl(e){let t=[];for(let n of e)n.isEffectRowSpread&&Rt(n.type)?t.push(...Dl(n.type.implicitParameters)):(n.isEffectRowSpread&&U(n.type)&&n.type.isEffectsRow,t.push(n));return t}function ne(e,t,n=!1,r=new Set){var a,s;let i=e.type.id,o=t.type.id;if(i&&o&&(Me(e.type)||Ue(e.type)||jt(e.type))&&(Me(t.type)||Ue(t.type)||jt(t.type))){let l=`${i}:${o}`;if(r.has(l))return!0;r.add(l)}if(Jo(e.type)&&Jo(t.type))return e.type.tag===t.type.tag;if((Zt(e.type)||e.type.tag==="u8"||e.type.tag==="i8"||e.type.tag==="u16"||e.type.tag==="i16"||e.type.tag==="u32"||e.type.tag==="i32"||e.type.tag==="u64"||e.type.tag==="i64"||e.type.tag==="usize"||e.type.tag==="isize"||xr(e.type))&&Zt(t.type))return!(n&&!Zt(e.type));if((hn(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&hn(t.type))return!(n&&!hn(e.type));if((pn(e.type)||Lt(e.type)&&Vr(e.type.childType)||it(e.type)&&(Vr(e.type.childType)||uo(e.type.childType))||ni(e.type)&&e.type.typeName==="str")&&pn(t.type))return!0;if(xr(e.type)&&xr(t.type))return e.type.tag===t.type.tag;if(dn(e.type)&&dn(t.type))return!0;if(vn(e.type)&&vn(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Ze(e.type)&&Ze(t.type))return mn({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Lt(e.type)&&Lt(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Je(e.type)&&Je(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(!ne({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Me(e.type)&&Me(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!et(e.type)&&!et(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||!ne({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Ue(e.type)&&Ue(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],c=t.type.variants[l];if(u.name!==c.name||((a=u.fields)==null?void 0:a.length)!==((s=c.fields)==null?void 0:s.length))return!1;if(u.fields)for(let f=0;f<u.fields.length;f++){let p=u.fields[f],_=c.fields[f];if(p.label!==_.label||!ne({type:p.type,env:e.env},{type:_.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(jt(e.type)&&jt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!et(e.type)&&!et(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||!ne({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||!ne({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(ln(e.type))return!(!ln(t.type)||!mc({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(Sn(e.type)){if(!Sn(t.type)||!ne({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let l=Dl(e.type.isFuture.effects),u=Dl(t.type.isFuture.effects);if(l.length>0&&u.length>0){if(l.length!==u.length)return!1;let c=new Set;for(let f of l){let p=!1;for(let _=0;_<u.length;_++)if(!c.has(_)&&ne({type:f.type,env:e.env},{type:u[_].type,env:t.env},n,r)){c.add(_),p=!0;break}if(!p)return!1}}return!0}return e.type.id===t.type.id}return Ct(t.type)&&t.type.baseType&&t.type.baseType.trait&&st(e.type)?ne({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(ee(e.type)&&ee(t.type))return mc({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(Ct(e.type)&&Ct(t.type))return pc(e.type,t.type);if(it(e.type)&&it(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(un(e.type)&&un(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(rn(e.type)&&rn(t.type))return ne({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(Qe(e.type)&&Qe(t.type)){for(let{traitType:l}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:c})=>ne({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})=>ne({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1}return!0}if(U(e.type)){if(Qe(t.type))return!0;if(U(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?ne({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=xl(e.env,e.type),u=xl(t.env,t.type);if(n&&l.length!==u.length)return!1;for(let f of l)if(!u.find(_=>ne({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1;let c=dc(e.env,e.type);if(c.length>0){for(let f of c)if(u.find(_=>ne({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!ne({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 ne({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let l=xl(e.env,e.type);if(l.length===0)return!n;if(l.length>0){for(let p of l)if(!gn({targetType:t.type,traitType:p,env:e.env}))break;let c=dc(e.env,e.type);if(c.length>0){for(let p of c)if(gn({targetType:t.type,traitType:p,env:e.env}))return!1}let f=!0;for(let p of l)if(!gn({targetType:t.type,traitType:p,env:e.env})){f=!1;break}if(f)return!0}let u=bn(e.env,e.type);return e.type===u?!1:ne({type:u,env:e.env},t,n,r)}}else if(U(t.type)){if(t.type.resolvedConcreteType&&ne(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=bn(t.env,t.type);return t.type===l?!1:ne(e,{type:l,env:t.env},n,r)}return!1}function mc(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(!ne({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||!ne({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return ne({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function Ml(e){var t;return T(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||N(e)&&N(e.func)&&(T(e.func,D.fn)||T(e.func,D.unsafe_fn)||T(e.func,D.Fn))||!e.$):!1}function Ol(e,t){if(!N(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(N(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Mr(e){var t,n,r;if(Y(e))return on(e,D.escape);if(N(e)){if((t=e.$)!=null&&t.macroExpansion)return Mr(e.$.macroExpansion);if(T(e,D.cond)||T(e,D.match))return Ol(e,Mr);if(Ml(e)||N(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&ee(e.func.$.value.value)||N(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&xn(e.func.$.value.value))return!1;if(Mr(e.func))return!0;for(let i of e.args)if(Mr(i))return!0}return!1}function Io(e){var t,n,r;if(Y(e))return on(e,D.return)||on(e,D.escape);if(N(e)){if(T(e,D.return)||T(e,D.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Io(e.$.macroExpansion);if(T(e,D.cond)||T(e,D.match))return Ol(e,Io);if(Ml(e)||N(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&ee(e.func.$.value.value)||N(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&xn(e.func.$.value.value))return!1;if(Io(e.func))return!0;for(let i of e.args)if(Io(i))return!0}return!1}function Yn(e){var t,n,r,i,o,a,s;if(N(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 Yn(e.$.macroExpansion);if(T(e,D.cond)||T(e,D.match))return Ol(e,Yn);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||Ml(e)||W((a=e.func.$)==null?void 0:a.value)&&ee(e.func.$.value.value)||N(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&W(e.func.$.value)&&xn(e.func.$.value.value))return!1;if(Yn(e.func))return!0;for(let l of e.args)if(Yn(l))return!0}return!1}var ae={tag:"Unit",type:Tr()};function ha(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=le(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function us(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(jr(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)jr(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 jr(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,f=le(e.$.env,u);if(f.length>0){let p=f[f.length-1];if(p&&!n.has(p.id)&&!p.isCompileTimeOnly){let _=`${p.name}:${p.frameLevel}`,m=r.get(_);if(m&&m!==p.id)i.set(p.id,m);else if(p.isOwningTheSameRcValueAs){let g=p.isOwningTheSameRcValueAs;if(!n.has(g.id)){let y={id:g.id,name:g.name,type:g.type,isOwningTheSameRcValueAs:void 0};n.set(g.id,y);let h=`${g.name}:${g.frameLevel}`;r.has(h)||r.set(h,g.id)}}else n.set(p.id,{id:p.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,p.id)}}}break;case"FnCall":{if(T(e,D.while)){let u=t.length;jr(e.func,t,n,r,i,o,e);for(let f of e.args)jr(f,t,n,r,i,o,e);let c=t.length;if(c>u)for(let f=u;f<c;f++)t[f].isInsideWhile=!0,t[f].whileNestingDepth=(t[f].whileNestingDepth??0)+1,t[f].enclosingWhileExpr||(t[f].enclosingWhileExpr=e);break}if(T(e,D.cond)){yc(e,t,n,r,i,o);break}if(T(e,D.match)){yc(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)jr(u,t,n,r,i,o,e);break}jr(e.func,t,n,r,i,o,e);for(let u of e.args)jr(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)jr(u,t,n,r,i,o,e);break}}}function yc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;jr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let f=t.length;jr(c,t,n,r,i,o,e),l.push(t.slice(f))}r.clear();for(let[c,f]of s)r.set(c,f);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let f=0;f<u;f++){let p;for(let _ of l)if(f<_.length){p=_[f];break}p&&(p.index=t.length,p.isInsideCond=!0,f===0&&(p.needsOwnCondBranchField=!0),f>0&&(p.condBranchSourceIndex=c),t.push(p))}}}function gc(e){let n=us(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&sr(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&Ke(u)){let c=En(u);if(!c)return;let f=c.isFuture.outputType,p;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let m=l.token.value,g=le(l.$.env,m);if(g.length>0){let y=g[g.length-1];y.isOwningTheSameRcValueAs?p=y.isOwningTheSameRcValueAs.id:p=y.id}}let _=ha(o);a.push({index:a.length,expr:i,resultType:f,futureType:c,targetVariableId:_,futureVariableId:p})}}},shouldSkipBody(i){return Fn(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 Fn(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 sr(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 hc(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 vc(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 Tc(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 Y(e)&&e.token.type==="identifier"||e.token.type==="operator"}function va(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=le(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 Fi(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else Y(e)&&(n=e.token.value);if(n){let o=le(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 cs=!0;function Ec({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Nn(`${k.___drop[0]}(${o.name})`),s=R({expr:a,env:i,context:{...n,expectedType:{env:i,type:ae.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Ta(e,t,n){var s,l;if(N(e)&&Fn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)Ta(u,t,n);if(N(e)&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=le(e.$.env,u);if(c.length>0){let f=c[c.length-1];t.has(f.id)||t.set(f.id,[]),t.get(f.id).push(e)}return}if(N(e)&&T(e,D.while))return;function i(u){var c,f;if(Xt((c=u.$)==null?void 0:c.controlFlow))return!0;if(N(u)&&T(u,D.begin)){let p=u.args[u.args.length-1];if(Xt((f=p==null?void 0:p.$)==null?void 0:f.controlFlow)||N(p)&&T(p,D.return))return!0}return!!(N(u)&&T(u,D.return))}function o(u){if(N(u)&&T(u,D.tuple,0))return!0;if(N(u)&&T(u,D.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(N(c)&&T(c,D.tuple,0))return!0}}return!1}function a(u,c){let f=[],p=[],_=[];for(let g=c;g<u.args.length;g++){let y=u.args[g];if(N(y)&&T(y,"=>",2)){let h=y.args[1],v=$c(h);f.push(v),p.push(i(h)),_.push(o(h))}}let m=new Set;for(let g of f){for(let y of g.dupCalls.keys())m.add(y);for(let y of g.varsWithPartialBranchDups)n.add(y)}if(f.length>0)for(let g of m){let y=[],h=[];for(let v=0;v<f.length;v++){let $=f[v],E=$.dupCalls.has(g),w=p[v];if(E){let L=$.dupCalls.get(g);w?y.push(...L):h.push(...L)}}for(let v of y)t.has(g)||t.set(g,[]),v.__isEarlyReturnDup=!0,t.get(g).push(v);if(h.length>0){let v=0,$=0;for(let E=0;E<f.length;E++)p[E]||(v++,f[E].dupCalls.has(g)&&$++);if($===v){t.has(g)||t.set(g,[]);for(let E of h)t.get(g).push(E)}else n.add(g)}}}if(N(e)&&T(e,D.cond)){a(e,0);return}if(N(e)&&T(e,D.match)){e.args[0]&&Ta(e.args[0],t,n),a(e,1);return}if(N(e)){Ta(e.func,t,n);for(let u of e.args)Ta(u,t,n)}}function $c(e){let t=new Map,n=new Set;return Ta(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function fs(e){return N(e)&&T(e,D.tuple,0)}function Rl(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)),N(e)){Rl(e.func,t);for(let r of e.args)Rl(r,t)}}function en({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var E,w,L,b,C,A,I,S,O;if(!N(e)||!T(e,D.begin)){let x={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:D.begin[0]}},args:[ot(e)],token:{...e.token,value:D.begin[0]}};Hr(e,x),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e;t=dt(t,void 0,!0);for(let x=0;x<r.length;x++){let M=r[x],{env:q}=Oe({env:t,variable:M});t=q}let s=o[o.length-1],l,u=!1;for(let x=0;x<o.length;x++){let M=o[x];if(Y(M)&&on(M,D.return)||N(M)&&T(M,D.return)){if(x!==o.length-1&&!(x===o.length-2&&fs(o[o.length-1])))throw d({token:M.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(N(M)&&ze(M,D.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:M.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=M,Y(M)){M.$={env:t,type:ae.type,value:ae,pathCollection:[],controlFlow:wi("return")},s=M;break}else{ze(M,D.return,1);let q=M.args[0],P=R({expr:q,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!P.$)throw d({token:q.token,errorMessage:`Return expression is not evaluated correctly:
|
|
150
|
+
Given: "${V(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function Vl(e,t,n,r,i){if(e.length===0&&t.length===0)return;let o=[],a=[],s=[];for(let c of e)c.isEffectRowSpread?Rt(c.type)?a.push(c):U(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?Rt(c.type)&&l.push(...c.type.implicitParameters):l.push(c);let u=new Set;for(let c of o)for(let f=0;f<l.length;f++)if(!u.has(f)&&c.type.id===l[f].type.id){let{expectedEnv:p,givenEnv:_}=It({type:c.type,env:n.env},{type:l[f].type,env:r.env},i);n.env=p,r.env=_,u.add(f);break}for(let c of a){let f=c.type.implicitParameters;for(let p of f)for(let _=0;_<l.length;_++)if(!u.has(_)&&p.type.id===l[_].type.id){let{expectedEnv:m,givenEnv:g}=It({type:p.type,env:n.env},{type:l[_].type,env:r.env},i);n.env=m,r.env=g,u.add(_);break}}if(s.length===1){let c=s[0],f=[];for(let p=0;p<l.length;p++)u.has(p)||f.push(l[p]);if(U(c.type)&&c.type.isEffectsRow){let p=ci(f),_=fe(p),m=le(n.env,c.type.name),g=m[m.length-1];if(g)n.env=Tt(n.env,g,{...g,value:[_]});else{let{env:y}=Oe({env:n.env,variable:{name:c.type.name,value:[_],type:_.type,isCompileTimeOnly:!0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});n.env=y}}}}function xl(e,t){let n=new Map;for(let i of t.requiredTraits??[])n.set(i.traitType.id,i.traitType);let r=Ir(e,t);if(r)for(let i of r.requiredTraits)n.set(i.id,i);return[...n.values()]}function dc(e,t){let n=new Map;for(let i of t.negativeTraits??[])n.set(i.traitType.id,i.traitType);let r=Ir(e,t);if(r)for(let i of r.negativeTraits)n.set(i.id,i);return[...n.values()]}function Dl(e){let t=[];for(let n of e)n.isEffectRowSpread&&Rt(n.type)?t.push(...Dl(n.type.implicitParameters)):(n.isEffectRowSpread&&U(n.type)&&n.type.isEffectsRow,t.push(n));return t}function ne(e,t,n=!1,r=new Set){var a,s;let i=e.type.id,o=t.type.id;if(i&&o&&(Me(e.type)||Ue(e.type)||jt(e.type))&&(Me(t.type)||Ue(t.type)||jt(t.type))){let l=`${i}:${o}`;if(r.has(l))return!0;r.add(l)}if(Jo(e.type)&&Jo(t.type))return e.type.tag===t.type.tag;if((Zt(e.type)||e.type.tag==="u8"||e.type.tag==="i8"||e.type.tag==="u16"||e.type.tag==="i16"||e.type.tag==="u32"||e.type.tag==="i32"||e.type.tag==="u64"||e.type.tag==="i64"||e.type.tag==="usize"||e.type.tag==="isize"||xr(e.type))&&Zt(t.type))return!(n&&!Zt(e.type));if((hn(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&hn(t.type))return!(n&&!hn(e.type));if((pn(e.type)||Lt(e.type)&&Vr(e.type.childType)||it(e.type)&&(Vr(e.type.childType)||uo(e.type.childType))||ri(e.type)&&e.type.typeName==="str")&&pn(t.type))return!0;if(xr(e.type)&&xr(t.type))return e.type.tag===t.type.tag;if(dn(e.type)&&dn(t.type))return!0;if(vn(e.type)&&vn(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Ze(e.type)&&Ze(t.type))return mn({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Lt(e.type)&&Lt(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Je(e.type)&&Je(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(!ne({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Me(e.type)&&Me(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!et(e.type)&&!et(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||!ne({type:u.type,env:e.env},{type:c.type,env:t.env},n,r))return!1}return!0}if(Ue(e.type)&&Ue(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],c=t.type.variants[l];if(u.name!==c.name||((a=u.fields)==null?void 0:a.length)!==((s=c.fields)==null?void 0:s.length))return!1;if(u.fields)for(let f=0;f<u.fields.length;f++){let p=u.fields[f],_=c.fields[f];if(p.label!==_.label||!ne({type:p.type,env:e.env},{type:_.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(jt(e.type)&&jt(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!et(e.type)&&!et(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||!ne({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||!ne({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(ln(e.type))return!(!ln(t.type)||!mc({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n));if(Sn(e.type)){if(!Sn(t.type)||!ne({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r))return!1;let l=Dl(e.type.isFuture.effects),u=Dl(t.type.isFuture.effects);if(l.length>0&&u.length>0){if(l.length!==u.length)return!1;let c=new Set;for(let f of l){let p=!1;for(let _=0;_<u.length;_++)if(!c.has(_)&&ne({type:f.type,env:e.env},{type:u[_].type,env:t.env},n,r)){c.add(_),p=!0;break}if(!p)return!1}}return!0}return e.type.id===t.type.id}return Ct(t.type)&&t.type.baseType&&t.type.baseType.trait&&st(e.type)?ne({type:e.type,env:e.env},{type:t.type.baseType.trait,env:t.env},n,r):!1}if(ee(e.type)&&ee(t.type))return mc({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(Ct(e.type)&&Ct(t.type))return pc(e.type,t.type);if(it(e.type)&&it(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},!0,r);if(un(e.type)&&un(t.type))return ne({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(rn(e.type)&&rn(t.type))return ne({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(Qe(e.type)&&Qe(t.type)){for(let{traitType:l}of e.type.requiredTraits)if(!t.type.requiredTraits.find(({traitType:c})=>ne({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})=>ne({type:l,env:e.env},{type:c,env:t.env},n,r)))return!1}return!0}if(U(e.type)){if(Qe(t.type))return!0;if(U(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?ne({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=xl(e.env,e.type),u=xl(t.env,t.type);if(n&&l.length!==u.length)return!1;for(let f of l)if(!u.find(_=>ne({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1;let c=dc(e.env,e.type);if(c.length>0){for(let f of c)if(u.find(_=>ne({type:f,env:e.env},{type:_,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!ne({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 ne({type:e.type.resolvedConcreteType,env:e.env},t,n,r);let l=xl(e.env,e.type);if(l.length===0)return!n;if(l.length>0){for(let p of l)if(!gn({targetType:t.type,traitType:p,env:e.env}))break;let c=dc(e.env,e.type);if(c.length>0){for(let p of c)if(gn({targetType:t.type,traitType:p,env:e.env}))return!1}let f=!0;for(let p of l)if(!gn({targetType:t.type,traitType:p,env:e.env})){f=!1;break}if(f)return!0}let u=bn(e.env,e.type);return e.type===u?!1:ne({type:u,env:e.env},t,n,r)}}else if(U(t.type)){if(t.type.resolvedConcreteType&&ne(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=bn(t.env,t.type);return t.type===l?!1:ne(e,{type:l,env:t.env},n,r)}return!1}function mc(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(!ne({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||!ne({type:o.type,env:e.env},{type:a.type,env:t.env},n))return!1}return ne({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function Ml(e){var t;return T(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||N(e)&&N(e.func)&&(T(e.func,D.fn)||T(e.func,D.unsafe_fn)||T(e.func,D.Fn))||!e.$):!1}function Ol(e,t){if(!N(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(N(n)&&T(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function Or(e){var t,n,r;if(Y(e))return on(e,D.escape);if(N(e)){if((t=e.$)!=null&&t.macroExpansion)return Or(e.$.macroExpansion);if(T(e,D.cond)||T(e,D.match))return Ol(e,Or);if(Ml(e)||N(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&ee(e.func.$.value.value)||N(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&xn(e.func.$.value.value))return!1;if(Or(e.func))return!0;for(let i of e.args)if(Or(i))return!0}return!1}function Io(e){var t,n,r;if(Y(e))return on(e,D.return)||on(e,D.escape);if(N(e)){if(T(e,D.return)||T(e,D.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Io(e.$.macroExpansion);if(T(e,D.cond)||T(e,D.match))return Ol(e,Io);if(Ml(e)||N(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&W(e.func.$.value)&&ee(e.func.$.value.value)||N(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&W(e.func.$.value)&&xn(e.func.$.value.value))return!1;if(Io(e.func))return!0;for(let i of e.args)if(Io(i))return!0}return!1}function Yn(e){var t,n,r,i,o,a,s;if(N(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 Yn(e.$.macroExpansion);if(T(e,D.cond)||T(e,D.match))return Ol(e,Yn);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||Ml(e)||W((a=e.func.$)==null?void 0:a.value)&&ee(e.func.$.value.value)||N(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&W(e.func.$.value)&&xn(e.func.$.value.value))return!1;if(Yn(e.func))return!0;for(let l of e.args)if(Yn(l))return!0}return!1}var ae={tag:"Unit",type:Tr()};function ha(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=le(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function us(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(Kr(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)Kr(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 Kr(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,f=le(e.$.env,u);if(f.length>0){let p=f[f.length-1];if(p&&!n.has(p.id)&&!p.isCompileTimeOnly){let _=`${p.name}:${p.frameLevel}`,m=r.get(_);if(m&&m!==p.id)i.set(p.id,m);else if(p.isOwningTheSameRcValueAs){let g=p.isOwningTheSameRcValueAs;if(!n.has(g.id)){let y={id:g.id,name:g.name,type:g.type,isOwningTheSameRcValueAs:void 0};n.set(g.id,y);let h=`${g.name}:${g.frameLevel}`;r.has(h)||r.set(h,g.id)}}else n.set(p.id,{id:p.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,p.id)}}}break;case"FnCall":{if(T(e,D.while)){let u=t.length;Kr(e.func,t,n,r,i,o,e);for(let f of e.args)Kr(f,t,n,r,i,o,e);let c=t.length;if(c>u)for(let f=u;f<c;f++)t[f].isInsideWhile=!0,t[f].whileNestingDepth=(t[f].whileNestingDepth??0)+1,t[f].enclosingWhileExpr||(t[f].enclosingWhileExpr=e);break}if(T(e,D.cond)){yc(e,t,n,r,i,o);break}if(T(e,D.match)){yc(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)Kr(u,t,n,r,i,o,e);break}Kr(e.func,t,n,r,i,o,e);for(let u of e.args)Kr(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)Kr(u,t,n,r,i,o,e);break}}}function yc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;Kr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let f=t.length;Kr(c,t,n,r,i,o,e),l.push(t.slice(f))}r.clear();for(let[c,f]of s)r.set(c,f);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let f=0;f<u;f++){let p;for(let _ of l)if(f<_.length){p=_[f];break}p&&(p.index=t.length,p.isInsideCond=!0,f===0&&(p.needsOwnCondBranchField=!0),f>0&&(p.condBranchSourceIndex=c),t.push(p))}}}function gc(e){let n=us(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&sr(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&Ke(u)){let c=En(u);if(!c)return;let f=c.isFuture.outputType,p;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let m=l.token.value,g=le(l.$.env,m);if(g.length>0){let y=g[g.length-1];y.isOwningTheSameRcValueAs?p=y.isOwningTheSameRcValueAs.id:p=y.id}}let _=ha(o);a.push({index:a.length,expr:i,resultType:f,futureType:c,targetVariableId:_,futureVariableId:p})}}},shouldSkipBody(i){return Fn(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 Fn(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 sr(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 hc(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 vc(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 Tc(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 Y(e)&&e.token.type==="identifier"||e.token.type==="operator"}function va(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=le(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 Fi(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else Y(e)&&(n=e.token.value);if(n){let o=le(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 cs=!0;function Ec({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Nn(`${k.___drop[0]}(${o.name})`),s=R({expr:a,env:i,context:{...n,expectedType:{env:i,type:ae.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Ta(e,t,n){var s,l;if(N(e)&&Fn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)Ta(u,t,n);if(N(e)&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=le(e.$.env,u);if(c.length>0){let f=c[c.length-1];t.has(f.id)||t.set(f.id,[]),t.get(f.id).push(e)}return}if(N(e)&&T(e,D.while))return;function i(u){var c,f;if(Xt((c=u.$)==null?void 0:c.controlFlow))return!0;if(N(u)&&T(u,D.begin)){let p=u.args[u.args.length-1];if(Xt((f=p==null?void 0:p.$)==null?void 0:f.controlFlow)||N(p)&&T(p,D.return))return!0}return!!(N(u)&&T(u,D.return))}function o(u){if(N(u)&&T(u,D.tuple,0))return!0;if(N(u)&&T(u,D.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(N(c)&&T(c,D.tuple,0))return!0}}return!1}function a(u,c){let f=[],p=[],_=[];for(let g=c;g<u.args.length;g++){let y=u.args[g];if(N(y)&&T(y,"=>",2)){let h=y.args[1],v=$c(h);f.push(v),p.push(i(h)),_.push(o(h))}}let m=new Set;for(let g of f){for(let y of g.dupCalls.keys())m.add(y);for(let y of g.varsWithPartialBranchDups)n.add(y)}if(f.length>0)for(let g of m){let y=[],h=[];for(let v=0;v<f.length;v++){let $=f[v],E=$.dupCalls.has(g),w=p[v];if(E){let L=$.dupCalls.get(g);w?y.push(...L):h.push(...L)}}for(let v of y)t.has(g)||t.set(g,[]),v.__isEarlyReturnDup=!0,t.get(g).push(v);if(h.length>0){let v=0,$=0;for(let E=0;E<f.length;E++)p[E]||(v++,f[E].dupCalls.has(g)&&$++);if($===v){t.has(g)||t.set(g,[]);for(let E of h)t.get(g).push(E)}else n.add(g)}}}if(N(e)&&T(e,D.cond)){a(e,0);return}if(N(e)&&T(e,D.match)){e.args[0]&&Ta(e.args[0],t,n),a(e,1);return}if(N(e)){Ta(e.func,t,n);for(let u of e.args)Ta(u,t,n)}}function $c(e){let t=new Map,n=new Set;return Ta(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function fs(e){return N(e)&&T(e,D.tuple,0)}function Rl(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)),N(e)){Rl(e.func,t);for(let r of e.args)Rl(r,t)}}function en({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var E,w,L,b,C,A,I,S,O;if(!N(e)||!T(e,D.begin)){let x={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:D.begin[0]}},args:[ot(e)],token:{...e.token,value:D.begin[0]}};Yr(e,x),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e;t=dt(t,void 0,!0);for(let x=0;x<r.length;x++){let M=r[x],{env:q}=Oe({env:t,variable:M});t=q}let s=o[o.length-1],l,u=!1;for(let x=0;x<o.length;x++){let M=o[x];if(Y(M)&&on(M,D.return)||N(M)&&T(M,D.return)){if(x!==o.length-1&&!(x===o.length-2&&fs(o[o.length-1])))throw d({token:M.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(N(M)&&ze(M,D.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw d({token:M.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=M,Y(M)){M.$={env:t,type:ae.type,value:ae,pathCollection:[],controlFlow:wi("return")},s=M;break}else{ze(M,D.return,1);let q=M.args[0],P=R({expr:q,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!P.$)throw d({token:q.token,errorMessage:`Return expression is not evaluated correctly:
|
|
151
151
|
${F(q)}`});if(((E=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:E.kind)==="function-body"&&U(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let G=P.$.type;if(n.functionReturnImplConcreteType.length>0){let z=n.functionReturnImplConcreteType[0];if(!ne({type:z.concreteType,env:z.env},{type:G,env:t}))throw zt([{token:M.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
|
|
152
152
|
Impl(...) uses static dispatch and requires the same concrete type across all returns.
|
|
153
153
|
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:z.token,errorMessage:`First return has concrete type: ${V(z.concreteType)}`},{token:M.token,errorMessage:`Conflicting return has concrete type: ${V(G)}`}])}else n.functionReturnImplConcreteType.push({concreteType:G,env:t,token:M.token})}gt(P,!0),t=P.$.env,M.$={env:t,type:P.$.type,value:P.$.value,pathCollection:P.$.pathCollection,variableName:P.$.variableName,controlFlow:wi("return")},s=M;break}}else if(Y(M)&&on(M,D.break)){if(x!==o.length-1&&!(x===o.length-2&&fs(o[o.length-1])))throw d({token:M.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw d({token:M.token,errorMessage:'The "break" keyword can only be used inside a loop.'});M.$={env:t,type:ae.type,value:ae,pathCollection:[],controlFlow:wi("break")},s=M;break}else if(Y(M)&&on(M,D.continue)){if(x!==o.length-1&&!(x===o.length-2&&fs(o[o.length-1])))throw d({token:M.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw d({token:M.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});M.$={env:t,type:ae.type,value:ae,pathCollection:[],controlFlow:wi("continue")},s=M;break}else if(N(M)&&T(M,D.escape)){if(x!==o.length-1&&!(x===o.length-2&&fs(o[o.length-1])))throw d({token:M.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw d({token:M.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=M,ze(M,D.escape,1);let q=M.args[0],P=R({expr:q,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!P.$)throw d({token:q.token,errorMessage:`Escape expression is not evaluated correctly:
|
|
@@ -165,30 +165,30 @@ ${F(b)}`});if(v=b.token.value,!Y(C))throw d({token:C.token,errorMessage:`Expecte
|
|
|
165
165
|
${F(C)}`});if(!kt(C))throw d({token:C.token,errorMessage:`Expected identifier for export, got:
|
|
166
166
|
${F(C)}`});$=C.token.value}let E=le(t,$);if(E.length===0)throw d({token:h.token,errorMessage:`Variable "${$}" is not defined in the module.`});let w=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(!w.isCompileTimeOnly)throw d({token:h.token,errorMessage:`Variable "${$}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:v,type:w.type,assignedValue:w.isCompileTimeOnly?(l=w.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=w.value)==null?void 0:u[0]),h.$={env:t,type:w.type,value:(c=w.value)==null?void 0:c[0],pathCollection:[]}}}}else{let g=R({expr:m,env:t,context:{...n,expectedType:void 0}});(f=g.$)!=null&&f.env&&(t=(p=g.$)==null?void 0:p.env)}}catch(g){if(r){a=g;break}else throw g}}try{a||(t=Gt(t))}catch(_){if(r)a=_;else throw _}return{moduleValue:ja({...i},o),moduleType:i,env:t,partialModuleError:a}}function ps({functionType:e,specializedEnv:t,SelfType:n}){var u;let r=e.parameters.map(c=>{var _;if(!c.exprs.typeExpr)return c;let f=ot(c.exprs.typeExpr),p=R({expr:f,env:t,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return W((_=p.$)==null?void 0:_.value)?{...c,type:p.$.value.value,exprs:{...c.exprs}}:c}),i=e.return.type,o=ot(e.return.typeExpr),a=R({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 f=r.find(_=>_.label===c.name),p=f?f.type:c.type;return p!==c.type?{...c,type:p}:c})};return{...e,env:t,forallParameters:[],parameters:r,parametersFrame:l,return:{...e.return,type:i},SelfType:s}}var Ea=new Map;function ky({traitExpr:e,traitType:t}){if(!e||!N(e))return{};let n=e.func;if(N(n)){let r=n.args.map(o=>ot(o)),i;if(t.functionValue&&ee(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(N(o)&&T(o,":",2)){let a=o.args[0],s=o.args[1];if(Y(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!ee(u.type)&&(r.push(ot(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function Cc({fieldExprs:e,env:t,context:n,receiverType:r}){var u;let i=[],o=ft(t),a=[],s=!1,l=r==null?void 0:r.trait;r!=null&&r.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=dt(t);for(let c of e){if(N(c)&&T(c,D.begin))throw d({token:c.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(N(c)&&(T(c,"::",2)||T(c,":=",2)))throw d({token:c.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(N(c)&&T(c,":",2)){let p=c.args[0],_=c.args[1];if(!Y(p)||!kt(p))throw d({token:p.token,errorMessage:`Expected identifier for impl field name, got:
|
|
167
167
|
${F(p)}`});let m=p.token.value,g=R({expr:_,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!((u=g.$)!=null&&u.type))throw d({token:_.token,errorMessage:`Failed to evaluate impl field value for "${m}".`});t=g.$.env;let y=g.$.type,h=g.$.value;if(!h)throw d({token:_.token,errorMessage:`impl field "${m}" must be a compile-time value.`});ve(h)&&!h.funcName&&(h.funcName=m,h.funcId+=`_${m}`);let{env:v}=Oe({env:t,variable:{name:m,type:y,isCompileTimeOnly:!0,value:[h],token:p.token,initializedAtToken:p.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=v,o.fields.push({label:m,type:y,assignedValue:h,defaultValue:void 0,exprs:{expr:c}}),a.push(h),s=!0,r!=null&&r.trait&&r.trait.fields.push({label:m,type:y,assignedValue:h,defaultValue:void 0,exprs:{expr:c}});continue}let f=R({expr:c,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!f.$||!Jt(f.$.value))throw d({token:c.token,errorMessage:`Expected trait value in impl field list, got:
|
|
168
|
-
${F(c)}`});t=f.$.env,i.push({traitValue:f.$.value,sourceExpr:c,isAnonymousTrait:!1})}if(t=Gt(t),r&&(r.trait=l),s){let c=fo({...o,receiverType:r},a);i.unshift({traitValue:c,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var
|
|
168
|
+
${F(c)}`});t=f.$.env,i.push({traitValue:f.$.value,sourceExpr:c,isAnonymousTrait:!1})}if(t=Gt(t),r&&(r.trait=l),s){let c=fo({...o,receiverType:r},a);i.unshift({traitValue:c,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var Xr=new Map,to=new Map;function So(e){for(let[t,n]of Xr.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?Xr.delete(t):Xr.set(t,r)}}function wy(e){for(let[t,n]of to.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?to.delete(t):to.set(t,r)}}function ms(){Ea.clear(),Xr.clear(),to.clear()}function ds(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function bc(e,t){let n=Xr.get(e);n||(n=[],Xr.set(e,n)),n.push(t)}function Fy({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(to.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 "${V(e)}".
|
|
169
169
|
First implementation was in: ${a.modulePath||"unknown"}`})}function Ly({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=to.get(i);o||(o=[],to.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function Ay({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 "${V(e)}".
|
|
170
170
|
At least one of the trait or the type must be defined in this module.
|
|
171
171
|
Trait defined in: ${t.definedInModulePath||"unknown"}
|
|
172
172
|
Type defined in: ${e.definedInModulePath||"unknown"}
|
|
173
|
-
Current module: ${n}`})}function ys({concreteType:e,traitType:t,env:n}){let r=ds(t),i=
|
|
173
|
+
Current module: ${n}`})}function ys({concreteType:e,traitType:t,env:n}){let r=ds(t),i=Xr.get(r);if(!(!i||i.length===0)){for(let o of i)if(hs({concreteType:e,impl:o,env:n}).matched)return o}}function Qr({concreteType:e,methodName:t,env:n}){if(U(e)){let i=bn(n,e);U(i)||(e=i)}let r=[];for(let[i,o]of Xr.entries())for(let a of o){let s=hs({concreteType:e,impl:a,env:n});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(f=>f.label===t&&ee(f.type));if(c>=0){let f=l.fields[c];if(ee(f.type)){let p=u.fields[c],_=oi(e);if(ve(p)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)&&!_){let g=a.definitionEnv,y=dt(g);for(let[w,L]of s.substitutions){let{env:b}=Oe({env:y,variable:{name:w,type:Dt(),isCompileTimeOnly:!0,value:[fe(L)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=b}for(let[w,L]of s.valueSubstitutions){let{env:b}=Oe({env:y,variable:{name:w,type:L.type,isCompileTimeOnly:!0,value:[L],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=b}if(a.traitTypeArgExprs&&a.traitFunctionParamNames&&a.traitTypeArgExprs.length===a.traitFunctionParamNames.length)for(let w=0;w<a.traitTypeArgExprs.length;w++){let L=a.traitTypeArgExprs[w],b=a.traitFunctionParamNames[w],C=R({expr:ot(L),env:y,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(C.$&&W(C.$.value)){let{env:A}=Oe({env:y,variable:{name:b,type:Dt(),isCompileTimeOnly:!0,value:[C.$.value],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});y=A}}let h=ps({functionType:f.type,specializedEnv:y,SelfType:s.substitutions.get("Self")});y=dt(y,h.parametersFrame);let v=ot(p.body),$=en({expr:v,env:y,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:h.return.type,env:y},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:h,value:p,evaluationEnv:y},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),E={...p,specializedType:h,body:$,funcId:`${p.funcId}_specialized_${[...s.substitutions.entries()].map(([w,L])=>`${w}_${V(L)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([w,L])=>`${w}_${lt(L)}`).join("_")}`,funcName:p.funcName?`${p.funcName}_specialized`:void 0};r.push({type:h,value:E})}else if(_){let g=a.definitionEnv,y=dt(g);for(let[v,$]of s.substitutions){let{env:E}=Oe({env:y,variable:{name:v,type:Dt(),isCompileTimeOnly:!0,value:[fe($)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}for(let[v,$]of s.valueSubstitutions){let{env:E}=Oe({env:y,variable:{name:v,type:$.type,isCompileTimeOnly:!0,value:[$],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}let h=ps({functionType:f.type,specializedEnv:y,SelfType:s.substitutions.get("Self")});r.push({type:h,value:void 0})}else if(ve(p)){let g={...p,specializedType:f.type};r.push({type:f.type,value:g})}else if(!ve(p)&&(s.substitutions.size>0||s.valueSubstitutions.size>0)){let g=a.definitionEnv,y=dt(g);for(let[v,$]of s.substitutions){let{env:E}=Oe({env:y,variable:{name:v,type:Dt(),isCompileTimeOnly:!0,value:[fe($)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}for(let[v,$]of s.valueSubstitutions){let{env:E}=Oe({env:y,variable:{name:v,type:$.type,isCompileTimeOnly:!0,value:[$],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});y=E}let h=ps({functionType:f.type,specializedEnv:y,SelfType:s.substitutions.get("Self")});r.push({type:h,value:p})}else r.push({type:f.type,value:p})}}}return r}function gs({concreteType:e,propertyName:t,env:n}){if(U(e)){let r=bn(n,e);U(r)||(e=r)}for(let[r,i]of Xr.entries())for(let o of i){let a;try{a=hs({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(f=>f.label===t&&!ee(f.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let f=o.definitionEnv,p=dt(f);for(let[_,m]of a.substitutions){let{env:g}=Oe({env:p,variable:{name:_,type:Dt(),isCompileTimeOnly:!0,value:[fe(m)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});p=g}for(let _=0;_<o.traitTypeArgExprs.length;_++){let m=o.traitTypeArgExprs[_];if(o.traitFunctionParamNames[_]===t)try{let y=ot(m),h=R({expr:y,env:p,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(!U(c.value))return{type:c.type,value:c};for(let f of o.forallParameters)if(f.kind==="type"&&f.someType===c.value){let p=a.substitutions.get(f.name);if(p){let _=fe(p);return{type:_.type,value:_}}}}}}function wc({concreteType:e,traitType:t,methodName:n,env:r}){let i=ds(t),o=Xr.get(i);if(!(!o||o.length===0))for(let a of o){let s=hs({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(f=>f.label===n&&ee(f.type));if(c>=0){let f=l.fields[c];if(ee(f.type)){let p=u.fields[c];if(ve(p)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let _=a.definitionEnv,m=dt(_);for(let[$,E]of s.substitutions){let{env:w}=Oe({env:m,variable:{name:$,type:Dt(),isCompileTimeOnly:!0,value:[fe(E)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});m=w}for(let[$,E]of s.valueSubstitutions){let{env:w}=Oe({env:m,variable:{name:$,type:E.type,isCompileTimeOnly:!0,value:[E],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});m=w}let g=ps({functionType:f.type,specializedEnv:m,SelfType:s.substitutions.get("Self")});m=dt(m,g.parametersFrame);let y=ot(p.body),h=en({expr:y,env:m,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:g.return.type,env:m},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:g,value:p,evaluationEnv:m},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),v={...p,specializedType:g,body:h,funcId:`${p.funcId}_specialized_${[...s.substitutions.entries()].map(([$,E])=>`${$}_${V(E)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([$,E])=>`${$}_${lt(E)}`).join("_")}`,funcName:p.funcName?`${p.funcName}_specialized`:void 0};return{type:g,value:v}}else if(ve(p)){let _={...p,specializedType:f.type};return{type:f.type,value:_}}else return{type:f.type,value:p}}}}}function hs({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(U(e)){let o=bn(n,e);if(U(o))return r;e=o}let i=dt(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=Oe({env:i,variable:{name:o.name,type:Dt(),isCompileTimeOnly:!0,value:[fe(o.someType)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=Oe({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:Fe,initializedAtToken:Fe,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 f=kc(o,l);if(!f)return r;let p=u;if(c)try{let _=ot(c),m=R({expr:_,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});m.$&&W(m.$.value)&&st(m.$.value.value)&&(p=m.$.value.value)}catch{}if(p.isNegatedConstraint){if(U(f)){if(!Ny(f,p,n))return r;continue}if(gn({targetType:f,traitType:p,env:n}))return r;continue}if(U(f)){if(!Iy(f,p,n))return r;continue}if(!gn({targetType:f,traitType:p,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=kc(o,l.someType);u&&!U(u)&&a.set(l.name,u)}else{let u=le(o,l.name),c=u[u.length-1];if(c&&c.value&&!Re(c.value[0])){let f={...c.value[0],type:l.type};s.set(l.name,f)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function Iy(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=Ir(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(Jt(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function Ny(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=Ir(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function Sy({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(gn({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 "${V(e)}" does not satisfy constraint "${o.typeName??V(o)}" required by trait "${t.typeName??V(t)}".
|
|
174
174
|
Consider adding "where(T <: ${o.typeName??V(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(gn({targetType:e,traitType:o,env:r}))throw d({token:i,errorMessage:`Generic impl receiver type "${V(e)}" implements "${o.typeName??V(o)}" but trait "${t.typeName??V(t)}" requires it to NOT implement this trait.
|
|
175
175
|
Consider adding "where(T <: !(${o.typeName??V(o)}))" to the impl.`})}}function kc(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 Vo(e){let t=Ea.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Ea.delete(e),wy(e)}}function Vy(e,t){let n=Ea.get(e);n||(n=new Set,Ea.set(e,n)),n.add(t)}function xy(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(Ay({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Fy({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),Ly({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&Vy(n,r.trait),e.type.typeName){let i={label:"",type:Jn(1),assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(i)}else for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=e.fields[i],s={label:o.label,type:o.type,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(s)}}function Fc({expr:e,env:t,context:n}){var E,w;if(!T(e,D.impl))throw d({token:e.token,errorMessage:`Expected "impl", got:
|
|
176
|
-
${F(e)}`});if(e.args.length===1&&N(e.args[0])&&T(e.args[0],D.begin)){let L=e.args[0].args,{moduleType:b,moduleValue:C,env:A}=_s({beginExprs:L,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=A,e.$={env:t,type:b,value:C,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&N(r[i])&&T(r[i],D.forall)&&(o=r[i],i++),r[i]&&N(r[i])&&T(r[i],D.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]&&N(r[i])&&T(r[i],D.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 L=R({expr:s,env:t,context:{...n}});if(!L.$||!L.$.value||!W(L.$.value))throw d({token:s.token,errorMessage:"Expected type for receiver type argument."});t=L.$.env;let b=L.$.value.value,C=Lt(b)||Ze(b),{env:A,traitEntries:I}=Cc({fieldExprs:l,env:t,context:{...n},receiverType:b});if(t=A,I.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let O of I){let x=O.traitValue,M=x.type;if(O.isAnonymousTrait||Lc({targetType:b,traitType:M,env:t,errorToken:e.token}),C){let q=ds(M),P={forallParameters:[],whereConstraints:[],receiverTypePattern:b,traitType:M,traitValue:x,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};bc(q,P)}else xy(x,e,n.currentModulePath)}let S=I[0].traitValue;return e.$={env:t,type:S.type,value:S,pathCollection:[]},e}let c=o.args,f=[];t=dt(t);for(let L of c){let b,C;if(N(L)&&T(L,":",2)){let M=L.args[0];if(!Y(M))throw d({token:M.token,errorMessage:`Expected identifier for forall parameter name, got: ${F(M)}`});b=M.token.value,C=L.args[1]}else if(Y(L))b=L.token.value;else throw d({token:L.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${F(L)}`});let A;if(C){let M=R({expr:C,env:t,context:{...n}});if((E=M.$)!=null&&E.env&&(t=M.$.env),!M.$||!M.$.value||!W(M.$.value))throw d({token:C.token,errorMessage:`Expected type for forall parameter type, got: ${F(C)}`});A=M.$.value.value}let I=!A||Lu(A),S=A||Dt(),O=ie(S,{variableName:b,env:t,context:n}),{env:x}=Oe({env:t,variable:{name:b,type:S,isCompileTimeOnly:!0,value:[O],token:L.token,initializedAtToken:L.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=x,I){let M=O.value;f.push({kind:"type",name:b,someType:M})}else f.push({kind:"value",name:b,type:S,unknownValue:O})}let p=new Map;if(a)for(let L of a.args){if(!N(L)||!T(L,"<:",2))throw d({token:L.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${F(L)}`});let b=R({expr:L,env:t,context:{...n,isInsideWhereClause:!0}});(w=b.$)!=null&&w.env&&(t=b.$.env);let C=L.args[0],A=L.args[1],I=R({expr:C,env:t,context:{...n}});if(!I.$||!I.$.value||!W(I.$.value)||!U(I.$.value.value))throw d({token:C.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${F(C)}`});t=I.$.env;let S=[];if(N(A)&&T(A,D.tuple))for(let O of A.args)N(O)&&T(O,"!")&&O.args.length===1?S.push({expr:O.args[0],isNegated:!0}):S.push({expr:O,isNegated:!1});else N(A)&&T(A,"!")&&A.args.length===1?S.push({expr:A.args[0],isNegated:!0}):S.push({expr:A,isNegated:!1});for(let{expr:O}of S){let x=R({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 M=x.$.value.value;p.set(M.id,ot(O))}}let _=[];for(let L of f){if(L.kind!=="type")continue;let{someType:b}=L,C=Ir(t,b);if(C){for(let A of C.requiredTraits)_.push({someType:b,traitType:A,traitExpr:p.get(A.id)});for(let A of C.negativeTraits){let I={...A,isNegatedConstraint:!0};_.push({someType:b,traitType:I,traitExpr:p.get(A.id)})}}}let m=R({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 g=m.$.value.value,{env:y,traitEntries:h}=Cc({fieldExprs:l,env:t,context:{...n},receiverType:g});if(t=y,h.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let L of h){let b=L.traitValue,C=b.type;Sy({receiverTypePattern:g,traitType:C,whereConstraints:_,env:t,errorToken:e.token});let{traitTypeArgExprs:A,traitFunctionParamNames:I}=L.isAnonymousTrait?{}:ky({traitExpr:L.sourceExpr,traitType:C});v.push({traitType:C,traitValue:b,traitTypeArgExprs:A,traitFunctionParamNames:I})}t=Gt(t);for(let L of v){let b=ds(L.traitType),C={forallParameters:f,whereConstraints:_,receiverTypePattern:g,traitType:L.traitType,traitValue:L.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:L.traitTypeArgExprs,traitFunctionParamNames:L.traitFunctionParamNames};bc(b,C)}let $=v[0].traitValue;return e.$={env:t,type:$.type,value:$,pathCollection:[]},e}var Pl=new Set;function Ic(e){if(!e||Me(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(Ct(e))return!0}function Nc(e){if(!e)return!1;if(Me(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 Ac(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&&Jt(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=gs({concreteType:e,propertyName:r.label,env:n});o&&W(o.value)&&(i=o.value.value)}if(!i||!ne({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function gn({targetType:e,traitType:t,env:n}){let r=vr(n,"Comptime");if(r&&t.id===r.id){let l=Ic(e);if(l!==void 0)return l}let i=vr(n,"Runtime");if(i&&t.id===i.id){let l=Nc(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||!Jt(l.assignedValue))continue;let c=l.assignedValue.type;if(ne({type:o,env:n},{type:c,env:n})&&Ac(e,t,n))return!0}if(Qe(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(U(e)){let l=!1,u=!1;for(let f of e.requiredTraits)f.traitType.id===t.id&&(l=!0);let c=Ir(n,e);if(c){for(let f of c.requiredTraits)f.id===t.id&&(l=!0);for(let f of c.negativeTraits)f.id===t.id&&(u=!0)}if(e.negativeTraits)for(let f of e.negativeTraits)f.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(U(e)){let l=bn(n,e);if(U(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(Pl.has(s))return!1;Pl.add(s);try{return ys({concreteType:e,traitType:t,env:n})===void 0?!1:Ac(e,t,n)}finally{Pl.delete(s)}}function Lc({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!gn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${V(e)}" does not implement required constraint "${i.typeName??V(i)}" from trait "${t.typeName??V(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(gn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${V(e)}" implements "${i.typeName??V(i)}" but the trait "${t.typeName??V(t)}"'s where clause requires it to NOT implement this trait.`})}}function
|
|
176
|
+
${F(e)}`});if(e.args.length===1&&N(e.args[0])&&T(e.args[0],D.begin)){let L=e.args[0].args,{moduleType:b,moduleValue:C,env:A}=_s({beginExprs:L,env:t,context:{...n,expectedType:void 0,SelfType:n.SelfType}});return t=A,e.$={env:t,type:b,value:C,pathCollection:[]},e}let r=e.args,i=0,o,a;if(r[i]&&N(r[i])&&T(r[i],D.forall)&&(o=r[i],i++),r[i]&&N(r[i])&&T(r[i],D.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]&&N(r[i])&&T(r[i],D.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 L=R({expr:s,env:t,context:{...n}});if(!L.$||!L.$.value||!W(L.$.value))throw d({token:s.token,errorMessage:"Expected type for receiver type argument."});t=L.$.env;let b=L.$.value.value,C=Lt(b)||Ze(b),{env:A,traitEntries:I}=Cc({fieldExprs:l,env:t,context:{...n},receiverType:b});if(t=A,I.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});for(let O of I){let x=O.traitValue,M=x.type;if(O.isAnonymousTrait||Lc({targetType:b,traitType:M,env:t,errorToken:e.token}),C){let q=ds(M),P={forallParameters:[],whereConstraints:[],receiverTypePattern:b,traitType:M,traitValue:x,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};bc(q,P)}else xy(x,e,n.currentModulePath)}let S=I[0].traitValue;return e.$={env:t,type:S.type,value:S,pathCollection:[]},e}let c=o.args,f=[];t=dt(t);for(let L of c){let b,C;if(N(L)&&T(L,":",2)){let M=L.args[0];if(!Y(M))throw d({token:M.token,errorMessage:`Expected identifier for forall parameter name, got: ${F(M)}`});b=M.token.value,C=L.args[1]}else if(Y(L))b=L.token.value;else throw d({token:L.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${F(L)}`});let A;if(C){let M=R({expr:C,env:t,context:{...n}});if((E=M.$)!=null&&E.env&&(t=M.$.env),!M.$||!M.$.value||!W(M.$.value))throw d({token:C.token,errorMessage:`Expected type for forall parameter type, got: ${F(C)}`});A=M.$.value.value}let I=!A||Lu(A),S=A||Dt(),O=ie(S,{variableName:b,env:t,context:n}),{env:x}=Oe({env:t,variable:{name:b,type:S,isCompileTimeOnly:!0,value:[O],token:L.token,initializedAtToken:L.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});if(t=x,I){let M=O.value;f.push({kind:"type",name:b,someType:M})}else f.push({kind:"value",name:b,type:S,unknownValue:O})}let p=new Map;if(a)for(let L of a.args){if(!N(L)||!T(L,"<:",2))throw d({token:L.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${F(L)}`});let b=R({expr:L,env:t,context:{...n,isInsideWhereClause:!0}});(w=b.$)!=null&&w.env&&(t=b.$.env);let C=L.args[0],A=L.args[1],I=R({expr:C,env:t,context:{...n}});if(!I.$||!I.$.value||!W(I.$.value)||!U(I.$.value.value))throw d({token:C.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${F(C)}`});t=I.$.env;let S=[];if(N(A)&&T(A,D.tuple))for(let O of A.args)N(O)&&T(O,"!")&&O.args.length===1?S.push({expr:O.args[0],isNegated:!0}):S.push({expr:O,isNegated:!1});else N(A)&&T(A,"!")&&A.args.length===1?S.push({expr:A.args[0],isNegated:!0}):S.push({expr:A,isNegated:!1});for(let{expr:O}of S){let x=R({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 M=x.$.value.value;p.set(M.id,ot(O))}}let _=[];for(let L of f){if(L.kind!=="type")continue;let{someType:b}=L,C=Ir(t,b);if(C){for(let A of C.requiredTraits)_.push({someType:b,traitType:A,traitExpr:p.get(A.id)});for(let A of C.negativeTraits){let I={...A,isNegatedConstraint:!0};_.push({someType:b,traitType:I,traitExpr:p.get(A.id)})}}}let m=R({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 g=m.$.value.value,{env:y,traitEntries:h}=Cc({fieldExprs:l,env:t,context:{...n},receiverType:g});if(t=y,h.length===0)throw d({token:e.token,errorMessage:"impl requires at least one trait or member field."});let v=[];for(let L of h){let b=L.traitValue,C=b.type;Sy({receiverTypePattern:g,traitType:C,whereConstraints:_,env:t,errorToken:e.token});let{traitTypeArgExprs:A,traitFunctionParamNames:I}=L.isAnonymousTrait?{}:ky({traitExpr:L.sourceExpr,traitType:C});v.push({traitType:C,traitValue:b,traitTypeArgExprs:A,traitFunctionParamNames:I})}t=Gt(t);for(let L of v){let b=ds(L.traitType),C={forallParameters:f,whereConstraints:_,receiverTypePattern:g,traitType:L.traitType,traitValue:L.traitValue,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t,traitTypeArgExprs:L.traitTypeArgExprs,traitFunctionParamNames:L.traitFunctionParamNames};bc(b,C)}let $=v[0].traitValue;return e.$={env:t,type:$.type,value:$,pathCollection:[]},e}var Pl=new Set;function Ic(e){if(!e||Me(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(Ct(e))return!0}function Nc(e){if(!e)return!1;if(Me(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 Ac(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&&Jt(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=gs({concreteType:e,propertyName:r.label,env:n});o&&W(o.value)&&(i=o.value.value)}if(!i||!ne({type:r.constraintType,env:n},{type:i,env:n}))return!1}return!0}function gn({targetType:e,traitType:t,env:n}){let r=vr(n,"Comptime");if(r&&t.id===r.id){let l=Ic(e);if(l!==void 0)return l}let i=vr(n,"Runtime");if(i&&t.id===i.id){let l=Nc(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||!Jt(l.assignedValue))continue;let c=l.assignedValue.type;if(ne({type:o,env:n},{type:c,env:n})&&Ac(e,t,n))return!0}if(Qe(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(U(e)){let l=!1,u=!1;for(let f of e.requiredTraits)f.traitType.id===t.id&&(l=!0);let c=Ir(n,e);if(c){for(let f of c.requiredTraits)f.id===t.id&&(l=!0);for(let f of c.negativeTraits)f.id===t.id&&(u=!0)}if(e.negativeTraits)for(let f of e.negativeTraits)f.traitType.id===t.id&&(u=!0);if(l)return!u;if(u)return!1}if(U(e)){let l=bn(n,e);if(U(l))return!1;e=l}let s=`${e.id}:${t.id}`;if(Pl.has(s))return!1;Pl.add(s);try{return ys({concreteType:e,traitType:t,env:n})===void 0?!1:Ac(e,t,n)}finally{Pl.delete(s)}}function Lc({targetType:e,traitType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let i of t.selfConstraints)if(!gn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${V(e)}" does not implement required constraint "${i.typeName??V(i)}" from trait "${t.typeName??V(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(gn({targetType:e,traitType:i,env:n}))throw d({token:r,errorMessage:`Type "${V(e)}" implements "${i.typeName??V(i)}" but the trait "${t.typeName??V(t)}"'s where clause requires it to NOT implement this trait.`})}}function Mr(e,t){let n=Ic(e);if(n!==void 0)return n;let r=vr(t,"Comptime");return r?gn({targetType:e,traitType:r,env:t}):!1}function ui(e,t){let n=Nc(e);if(n!==void 0)return n;let r=vr(t,"Runtime");return r?gn({targetType:e,traitType:r,env:t}):!1}function ma(e,t){if(!e)return!1;let n=vr(t,"Send");return n?gn({targetType:e,traitType:n,env:t}):!1}function Gi(e,t){if(!e)return!1;let n=vr(t,"Acyclic");return n?gn({targetType:e,traitType:n,env:t}):!1}function Ki(e,t){return Mr(e,t)&&!ui(e,t)}function xn(e){if(!e)return!1;if(U(e)||Qe(e)){for(let{traitType:t}of e.requiredTraits)if(ln(t))return!0}return!1}function Un(e){if(ln(e))return e;if(U(e)||Qe(e)){for(let{traitType:t}of e.requiredTraits)if(ln(t))return t}}function Ke(e){if(!e)return!1;if(U(e)||Qe(e)){for(let{traitType:t}of e.requiredTraits)if(Sn(t))return!0}return!1}function En(e){if(Sn(e))return e;if(U(e)||Qe(e)){for(let{traitType:t}of e.requiredTraits)if(Sn(t))return t}}function is(e,t,n,r){if(!et(e)&&!Mr(e,t)&&!ui(e,t))throw d({token:n,errorMessage:`Type ${V(e)} has incompatible field contexts and cannot be used in any evaluation context.
|
|
177
177
|
|
|
178
178
|
This typically happens when a struct/enum/array/tuple contains fields with conflicting availability:
|
|
179
179
|
- Compile-time only fields (e.g., comptime_int, Type, Module)
|
|
180
180
|
- Runtime only fields (e.g., *(T), [T], void, C-compatible types)
|
|
181
181
|
|
|
182
|
-
Consider restructuring the type to avoid mixing incompatible field types.`})}function Gn(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=[Gn(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=>Gn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Gn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Gn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Gn(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=[Gn(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=>Gn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Gn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Gn(i,t,n):void 0)}}default:return e}}function Ul({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function Pt(){let e=Ul({modulePath:"",inputString:""});return dt(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=Gn(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=Gn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:Dy(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function Dy(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
|
|
183
|
-
Typeof "${a.name}": ${V(a.type)}`})));if(o.length>0)throw zt(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 Tt(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 Dc(e){var t,n;return{id:e.id,name:e.name,type:V(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 Mc({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&&ee(a.type));if(o&&ee(o.type)){let a=o.assignedValue;Re(a)&&(a=ie(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&&Jt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&ee(c.type));if(u>=0){let c=l.fields[u];if(ee(c.type)){let f=s.fields[u],p=c.type;ve(f)&&f.specializedType&&(p=f.specializedType),i.push({type:p,value:f})}}}if(i.length===0){let a=
|
|
182
|
+
Consider restructuring the type to avoid mixing incompatible field types.`})}function Gn(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=[Gn(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=>Gn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Gn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Gn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Gn(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=[Gn(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=>Gn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Gn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Gn(i,t,n):void 0)}}default:return e}}function Ul({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function Pt(){let e=Ul({modulePath:"",inputString:""});return dt(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=Gn(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=Gn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:Dy(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function Dy(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 Rr({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 Ir(e,t){var l;let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let u of e.frames)for(let c of u.variables){let f=(l=c.value)==null?void 0:l[0];W(f)&&U(f.value)&&f.value.id===t.id&&s.add(c.name)}for(let u of e.frames)for(let c of u.whereClauseConstraints.values())if(!(c.someType.id!==t.id&&!s.has(c.someType.name))){a=!0;for(let f of c.requiredTraits)i.has(f.id)||(i.add(f.id),n.push(f));for(let f of c.negativeTraits)o.has(f.id)||(o.add(f.id),r.push(f))}if(a)return{requiredTraits:n,negativeTraits:r}}var Sc=null;function Vc(e){Sc=e}function xc(){Sc=null}var My="__yo_self";function Oe({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0);if(i){let _=Py(e);_>=0&&(a=_)}if(t.name!==My){let _=le(e,t.name);if(_.length>0&&!o){let m=_[_.length-1];throw zt([{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=Bt(e.modulePath,t.name)?t.name:r??Wi(e.modulePath,t.name),u={...t,frameLevel:a,id:l},c=Oy({frame:s,variable:u}),f=e.frames.slice();return f[a]=c,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:f,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function Oy({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw zt([{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 Ry(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function le(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=Ry(o,t,n);r.push(...a)}return n?r.filter(n):r}function Xn(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 $a(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function dt(e,t={id:Wi(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 Gt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=No(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw zt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
|
|
183
|
+
Typeof "${a.name}": ${V(a.type)}`})));if(o.length>0)throw zt(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 Tt(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 Dc(e){var t,n;return{id:e.id,name:e.name,type:V(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 Mc({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&&ee(a.type));if(o&&ee(o.type)){let a=o.assignedValue;Re(a)&&(a=ie(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&&Jt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&ee(c.type));if(u>=0){let c=l.fields[u];if(ee(c.type)){let f=s.fields[u],p=c.type;ve(f)&&f.specializedType&&(p=f.specializedType),i.push({type:p,value:f})}}}if(i.length===0){let a=Qr({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Bl({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){var p;let o=[],a=r;for(;it(a);)a=a.childType;function s(_,m){let g=_.fields.find(y=>y.label===n&&(ee(y.type)||st(y.type)));if(g){let y;if(ee(g.type)){if(Re(m))y=ie(g.type,{variableName:g.label,env:e,context:t});else if(Jt(m)){let h=_.fields.findIndex(v=>v.label===g.label);y=m.fields[h]}o.push({type:g.type,value:y})}else if(We(g.type)){let h=g.assignedValue;vt(h)&&l(h)}}if(!g)for(let y of _.fields)st(y.type)&&y.assignedValue&&s(y.type,y.assignedValue)}function l(_){let m=_.type.fields.findIndex(g=>g.label==="Call");if(m>=0){let g=_.type.fields[m];if(g.assignedValue){let y=g.assignedValue;er(y)?y.fields.forEach(h=>{o.push({type:h.type,value:h})}):o.push({type:y.type,value:y})}}}function u(_){return _.filter(g=>{if(ee(g.type)){if(g.type.parameters.length===0)return!1;let h=g.type.parameters[0].type;if(!i&&it(h)){let $=h.childType,E=r;if((Zt(r)||hn(r)||pn(r))&&(E=Kt({type:r,expectedType:void 0,expr:void 0,env:e})),ne({type:$,env:g.type.env},{type:E,env:e},!0))return g.needsPointerConversion=!0,!0}if(et(h)||et(h)&&!et(r)||U(r)&&r.resolvedConcreteType&&!Ke(r)&&!et(h)&&ne({type:h,env:g.type.env},{type:r.resolvedConcreteType,env:e},!0))return!0;if(!et(h)&&et(r))return!1;if(Zt(r)||hn(r)||pn(r)){let $=Kt({type:r,expectedType:void 0,expr:void 0,env:e});if(ne({type:h,env:g.type.env},{type:$,env:e},!0))return!0}if(Qe(r)&&g.value===void 0){if(g.type.parameters.length>0&&g.type.SelfType){let E=g.type.parameters[0];if(E){let w=E.type;if(!Wt(w)&&!Qe(w)&&!it(w))return!1}}let $=g.type.return.type;if(Gr($,g.type.SelfType))return!1}return ne({type:h,env:g.type.env},{type:r,env:e},!0)}return!0})}function c(_,m,g=new Set){if(g.has(_.id))return;g.add(_.id);let y=_.fields.find(h=>h.label===m&&ee(h.type));if(y&&ee(y.type)){let h=y.assignedValue;Re(h)&&(h=ie(y.type,{variableName:y.label,env:e,context:t})),o.push({type:y.type,value:h});return}for(let h of _.fields)st(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}if(r!==a&&r.trait){let _=r.trait.fields.find(m=>m.label===n&&ee(m.type));if(_&&ee(_.type)){let m=_.assignedValue;Re(m)&&(m=ie(_.type,{variableName:_.label,env:e,context:t})),o.push({type:_.type,value:m})}else c(r.trait,n);for(let m of r.trait.fields)if(m.label===""&&m.assignedValue&&Jt(m.assignedValue)){let g=m.assignedValue,y=g.type,h=y.fields.findIndex(v=>v.label===n&&ee(v.type));if(h>=0){let v=y.fields[h];if(ee(v.type)){let $=g.fields[h],E=v.type;ve($)&&$.specializedType&&(E=$.specializedType),o.push({type:E,value:$})}}}}if(o.length===0&&r!==a){let _=Qr({concreteType:r,methodName:n,env:e});o.push(..._)}let f=U(a)&&a.resolvedConcreteType&&!Ke(a);if(a.trait&&!Qe(a)&&!f){let _=a.trait.fields.find(m=>m.label===n&&(ee(m.type)||We(m.type)));if(_&&ee(_.type)){let m=_.assignedValue;Re(m)&&(m=ie(_.type,{variableName:_.label,env:e,context:t})),o.push({type:_.type,value:m})}else if(_&&We(_.type)){let m=_.assignedValue;vt(m)&&l(m)}else c(a.trait,n);for(let m of a.trait.fields)if(m.label===""&&m.assignedValue&&Jt(m.assignedValue)){let g=m.assignedValue,y=g.type,h=y.fields.findIndex(v=>v.label===n&&ee(v.type));if(h>=0){let v=y.fields[h];if(ee(v.type)){let $=g.fields[h],E=v.type;ve($)&&$.specializedType&&(E=$.specializedType),o.push({type:E,value:$})}}}if(o.length===0){let m=Qr({concreteType:a,methodName:n,env:e});o.push(...m)}}if(Zt(a)||hn(a)||pn(a)){let _=Kt({type:a,expectedType:void 0,expr:void 0,env:e});if(_.trait){let m=_.trait.fields.find(g=>g.label===n&&ee(g.type));if(m&&ee(m.type)){let g=m.assignedValue;Re(g)&&(g=ie(m.type,{variableName:m.label,env:e,context:t})),o.push({type:m.type,value:g})}else c(_.trait,n);for(let g of _.trait.fields)if(g.label===""&&g.assignedValue&&Jt(g.assignedValue)){let y=g.assignedValue,h=y.type,v=h.fields.findIndex($=>$.label===n&&ee($.type));if(v>=0){let $=h.fields[v];if(ee($.type)){let E=y.fields[v],w=$.type;ve(E)&&E.specializedType&&(w=E.specializedType),o.push({type:w,value:E})}}}if(o.length===0){let g=Qr({concreteType:_,methodName:n,env:e});o.push(...g)}}}if(U(a)){if((p=a.resolvedConcreteType)!=null&&p.trait&&!Ke(a)){let _=a.resolvedConcreteType,m=_.trait,g=m==null?void 0:m.fields.find(y=>y.label===n&&ee(y.type));if(g&&ee(g.type)){let y=g.assignedValue||ie(g.type,{variableName:g.label,env:e,context:t});o.push({type:g.type,value:y})}if(o.length===0){for(let y of(m==null?void 0:m.fields)??[])if(y.label===""&&y.assignedValue&&Jt(y.assignedValue)){let h=y.assignedValue,v=h.type,$=v.fields.findIndex(E=>E.label===n&&ee(E.type));if($>=0){let E=v.fields[$];if(ee(E.type)){let w=h.fields[$],L=E.type;ve(w)&&w.specializedType&&(L=w.specializedType),o.push({type:L,value:w});break}}}}if(o.length===0){let y=Qr({concreteType:_,methodName:n,env:e});o.push(...y)}}if(!(o.length>0)){let _=[],m=new Set;for(let y of a.requiredTraits??[])m.has(y.traitType.id)||(m.add(y.traitType.id),_.push(y.traitType));let g=Ir(e,a);if(g)for(let y of g.requiredTraits)m.has(y.id)||(m.add(y.id),_.push(y));if(U(a))for(let y=e.frames.length-1;y>=0;y--){let h=e.frames[y];for(let v of h.whereClauseConstraints.values())if(ne({type:v.someType,env:e},{type:a,env:e},!1))for(let $ of v.requiredTraits)m.has($.id)||(m.add($.id),_.push($))}for(let y of _){let h=y.fields.find(v=>v.label===n&&ee(v.type));if(h&&ee(h.type)){let v={...h.type,SelfType:a},$=!1;if(v.parameters.length>0&&it(v.parameters[0].type)){let w=v.parameters[0].type.childType;(U(w)&&w.name==="Self"||ne({type:w,env:v.env},{type:r,env:e},!0))&&($=!0)}let E=ie(v,{variableName:h.label,env:e,context:t});o.push({type:v,value:E,needsPointerConversion:$})}}if(o.length===0){for(let y of a.trait.fields)if(y.label===""&&y.assignedValue&&W(y.assignedValue)&&st(y.assignedValue.value)){let v=y.assignedValue.value.fields.find($=>$.label===n&&ee($.type));if(v&&ee(v.type)){let $=ie(v.type,{variableName:v.label,env:e,context:t});o.push({type:v.type,value:$})}}}}}if(Qe(a)){let _=a.trait.fields.find(g=>g.label===n&&(ee(g.type)||st(g.type)));if(_&&ee(_.type)){let g=_.assignedValue||ie(_.type,{variableName:_.label,env:e,context:t});o.push({type:_.type,value:g})}let m=a.requiredTraits;for(let{traitType:g}of m){let y=g.fields.find(h=>h.label===n&&(ee(h.type)||st(h.type)));y&&ee(y.type)&&y.type.parameters.length>0&&(et(y.type.parameters[0].type)||et(r)||ne({type:y.type.parameters[0].type,env:y.type.env},{type:r,env:e},!0))&&o.push({type:y.type,value:void 0})}}return o.length>0,u(o)}function Oc(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function vs(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 No(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!tt(r.type))return!1;let i=r.type;return!(U(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function Py(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 Uy=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function zy(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment")&&n.value.includes(t))}var Ca=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,Rc.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new lo({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(a){throw new Error(`Failed to import module "${t}":
|
|
184
184
|
${a instanceof Zn||a instanceof gr?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=Ul({modulePath:this.modulePath,inputString:this.inputString});if(!zy(this.tokens,"@skip_prelude")&&!Uy){let c="file://"+Pc.default.join(t,"prelude.yo"),{moduleValue:f,moduleError:p}=n(c);if(p)throw p;if(f&&We(f.type)){r=dt(r);for(let _=0;_<f.type.fields.length;_++){let m=f.type.fields[_],g=f.fields[_],{env:y}=Oe({env:r,variable:{name:m.label,type:m.type,value:g?[g]: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=y}}Vc(r)}let{moduleValue:o,env:a,partialModuleError:s}=_s({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 By(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}var Sm=require("fs"),Pa=Nr(require("path"));function Uc(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 zc(e){e.emitter.emitHeaderLine("#ifndef _WIN32"),e.emitter.emitHeaderLine("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine("#ifndef WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#define WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#ifndef _WINSOCKAPI_"),e.emitter.emitHeaderLine("#define _WINSOCKAPI_"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("");for(let t of e.cIncludes)e.emitter.emitHeaderLine(`#include ${t}`);e.emitter.emitHeaderLine("#ifdef _WIN32"),e.emitter.emitHeaderLine(" #include <windows.h>"),e.emitter.emitHeaderLine(" #include <bcrypt.h>"),e.emitter.emitHeaderLine(" #include <io.h>"),e.emitter.emitHeaderLine(" #include <sys/stat.h>"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" #include <unistd.h>"),e.emitter.emitHeaderLine(" #include <sys/stat.h>"),e.emitter.emitHeaderLine(" #include <sys/random.h>"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine(""),e.allocator==="mimalloc"?(e.emitter.emitHeaderLine("// Mimalloc compatibility layer - try mimalloc first, fallback to stdlib"),e.emitter.emitHeaderLine("#ifdef __has_include"),e.emitter.emitHeaderLine(" #if __has_include(<mimalloc.h>)"),e.emitter.emitHeaderLine(" #include <mimalloc.h>"),e.emitter.emitHeaderLine(" #define __yo_malloc mi_malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc mi_calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc mi_realloc"),e.emitter.emitHeaderLine(" #define __yo_free mi_free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc mi_aligned_alloc"),e.emitter.emitHeaderLine(" #else"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #endif"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" // Fallback for older compilers without __has_include"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#endif")):(e.emitter.emitHeaderLine("// Using libc allocator"),e.emitter.emitHeaderLine("#define __yo_malloc malloc"),e.emitter.emitHeaderLine("#define __yo_calloc calloc"),e.emitter.emitHeaderLine("#define __yo_realloc realloc"),e.emitter.emitHeaderLine("#define __yo_free free"),e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc")),e.emitter.emitHeaderLine("")}function fi(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 $r(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 no=[...k.__yo_op_add,...k.__yo_op_sub,...k.__yo_op_mul,...k.__yo_op_div,...k.__yo_op_mod,...k.__yo_op_neg,...k.__yo_op_eq,...k.__yo_op_neq,...k.__yo_op_lt,...k.__yo_op_lte,...k.__yo_op_gt,...k.__yo_op_gte,...k.__yo_op_not,...k.__yo_op_bit_and,...k.__yo_op_bit_or,...k.__yo_op_bit_xor,...k.__yo_op_bit_complement,...k.__yo_op_bit_left_shift,...k.__yo_op_bit_right_shift,...k.__yo_ptr_add,...k.__yo_ptr_sub,...k.__yo_ptr_diff,...k.__yo_ptr_eq,...k.__yo_ptr_neq,...k.__yo_ptr_lt,...k.__yo_ptr_lte,...k.__yo_ptr_gt,...k.__yo_ptr_gte,...k.__yo_slice_len,...k.__yo_slice_new,...k.__yo_as,...k.__yo_getrandom,...k.__yo_arc4random_buf,...k.__yo_bcrypt_gen_random,...k.__yo_maybe_uninit_new,...k.__yo_maybe_uninit_as_ptr,...k.__yo_maybe_uninit_assume_init,...k.__yo_noop,...k.__yo_return_self,...k.__yo_ms_sleep],Bc=new Set(["bool","usize","isize","u8","i8","u16","i16","u32","i32","u64","i64","f32","f64","char","short","ushort","int","uint","long","ulong","longlong","ulonglong","longdouble"]);function me(e,t=!1){let n=new Set(["auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","inline","int","long","register","restrict","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while","_Alignas","_Alignof","_Atomic","_Bool","_Complex","_Generic","_Imaginary","_Noreturn","_Static_assert","_Thread_local","errno","stdin","stdout","stderr","NULL","true","false"]),r=e.replace(/[^a-zA-Z0-9_]/g,i=>`_u${i.charCodeAt(0)}_`);return!t&&n.has(r)&&(r="__yo_c_reserved_"+r),r}function H(e,t){var n,r,i,o,a,s,l;if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"comptime_int":return"int32_t";case"comptime_float":return"double";case"comptime_string":return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let f=Ln(e);if(f)return H(f,t)}let u;switch(e.tag){case"Tuple":u="tuple";break;case"Struct":u="struct";break;case"Union":u="union";break;case"Enum":u="enum";break;default:throw new Error("Unreachable")}let c=(n=t.types[e.id])==null?void 0:n.cName;if(!c)throw new Error(`No C type name found for ${u} ${V(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&Me(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 ${V(e)}`);return u}case"Array":{let u=e,c=u.childType,f=u.length;if(yt(f)){let p=H(c,t),_=`Array_${me(p)}_${f.value}`;return t.arrayStructTypes.has(_)||t.arrayStructTypes.set(_,{childType:p,length:typeof f.value=="bigint"?Number(f.value):f.value}),_}break}case"Slice":{let u=e,f=`Slice_${me(H(u.childType,t))}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:H(u.childType,t)}),f}case"SomeType":{let u=e;if(Ke(u)){if((i=u.resolvedConcreteType)!=null&&i.isExtern)return`${H(u.resolvedConcreteType,t)}*`;let c=(o=t.types[u.id])==null?void 0:o.cName;if(c)return`${c}*`;if(u.resolvedConcreteType&&U(u.resolvedConcreteType)&&Ke(u.resolvedConcreteType)){let p=u.resolvedConcreteType,_=(a=t.types[p.id])==null?void 0:a.cName;if(_)return`${_}*`}if(u.resolvedConcreteType&&Me(u.resolvedConcreteType)){let p=u.resolvedConcreteType.id;for(let[_,m]of Object.entries(t.types))if(U(m.type)&&Ke(m.type)&&m.type.resolvedConcreteType&&Me(m.type.resolvedConcreteType)&&m.type.resolvedConcreteType.id===p)return`${m.cName}*`}let f=En(u);if(f){let p=(s=t.types[f.id])==null?void 0:s.cName;if(p)return`${p}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(f==null?void 0:f.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
|
|
185
185
|
resolvedConcreteType: ${((l=u.resolvedConcreteType)==null?void 0:l.id)??"none"}
|
|
186
|
-
registered type IDs: ${Object.keys(t.types).filter(p=>p.startsWith("sometype")).join(", ")}`)}return xn(u)&&u.resolvedConcreteType||u.resolvedConcreteType?H(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Lt(c)){let _=H(c.childType,t),m=`Slice_${me(_)}`;return t.sliceStructTypes.has(m)||t.sliceStructTypes.set(m,{childType:_}),`${m}*`}let f=H(c,t);return Wt(c)?`${f}*`:Ue(c)&&Ln(c)?`${f}*`:`${f}*`}case"Iso":{let u=e,c=u.childType,f=H(c,t),p=f.replace(/\*/g,"").trim(),_=`Iso_${me(p)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(_)||t.isoTypes.set(_,{childTypeCName:f,isoType:u}),_}case"Arc":{let u=e,c=u.childType,f=H(c,t),p=f.replace(/\*/g,"").trim(),_=`Arc_${me(p)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(_)||t.arcTypes.set(_,{childTypeCName:f,arcType:u}),_}}return`// Unknown type: ${V(e)}`}function Ut(e,t,n){let r=me(t);return`${H(e,n)} ${r}`}function Dn(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} (${V(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Li(e){return e.type.return.isCompileTimeOnly}function xo(e){let t=e.body,n=null;return N(t)&&T(t,"begin")&&t.args.length===1&&N(t.args[0])&&T(t.args[0],no)?n=t.args[0].func.token.value:N(t)&&T(t,no)&&(n=t.func.token.value),n&&k.__yo_as.includes(n)?null:n}function Ln(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(it(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function _r(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function He(e,t){if(!t)return me(e);let n=le(t,e);if(n.length>0){let r=n[n.length-1];return me(r.name,r.type.isExtern==="c")}return me(e)}function Ts(e){if(N(e)&&e.args.length>=1){let t=e.args[0];if(t&&Y(t))return t.token.value}if(N(e)&&e.args.length===0&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0])return e.func.args[0].token.value}function yr(e){if(N(e)&&e.args.length===0&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&Y(e.func.args[0]))return e.func.args[0].token.value;if(!N(e)||!T(e,k.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!Y(t)))return t.token.value}function ba(e){if(e){if(Fn(e))return e;if(N(e)){let t=e;for(let n of t.args){let r=ba(n);if(r)return r}}}}var Gl;function Gc(e){Gl=e}function B(e,t,n){if(!Gl)throw new Error("Internal Error: generateExpr function is not set.");return Gl(e,t,n)}function _i(e,t,n){let r=U(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!tt(r))return"";if(Ze(r)){let i=r.length;if(!yt(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=_i(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Je(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=U(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(tt(s)){let l=_i(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Qe(r))return`__yo_decr_rc((void*)(${e}).data)`;if(Wt(r))return`__yo_decr_rc((void*)(${e}))`;if(un(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(rn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Me(r)||Ue(r)){let i=
|
|
186
|
+
registered type IDs: ${Object.keys(t.types).filter(p=>p.startsWith("sometype")).join(", ")}`)}return xn(u)&&u.resolvedConcreteType||u.resolvedConcreteType?H(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Lt(c)){let _=H(c.childType,t),m=`Slice_${me(_)}`;return t.sliceStructTypes.has(m)||t.sliceStructTypes.set(m,{childType:_}),`${m}*`}let f=H(c,t);return Wt(c)?`${f}*`:Ue(c)&&Ln(c)?`${f}*`:`${f}*`}case"Iso":{let u=e,c=u.childType,f=H(c,t),p=f.replace(/\*/g,"").trim(),_=`Iso_${me(p)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(_)||t.isoTypes.set(_,{childTypeCName:f,isoType:u}),_}case"Arc":{let u=e,c=u.childType,f=H(c,t),p=f.replace(/\*/g,"").trim(),_=`Arc_${me(p)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(_)||t.arcTypes.set(_,{childTypeCName:f,arcType:u}),_}}return`// Unknown type: ${V(e)}`}function Ut(e,t,n){let r=me(t);return`${H(e,n)} ${r}`}function Dn(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} (${V(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Li(e){return e.type.return.isCompileTimeOnly}function xo(e){let t=e.body,n=null;return N(t)&&T(t,"begin")&&t.args.length===1&&N(t.args[0])&&T(t.args[0],no)?n=t.args[0].func.token.value:N(t)&&T(t,no)&&(n=t.func.token.value),n&&k.__yo_as.includes(n)?null:n}function Ln(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(it(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function _r(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function He(e,t){if(!t)return me(e);let n=le(t,e);if(n.length>0){let r=n[n.length-1];return me(r.name,r.type.isExtern==="c")}return me(e)}function Ts(e){if(N(e)&&e.args.length>=1){let t=e.args[0];if(t&&Y(t))return t.token.value}if(N(e)&&e.args.length===0&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[0])&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0])return e.func.args[0].token.value}function yr(e){if(N(e)&&e.args.length===0&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&Y(e.func.args[0]))return e.func.args[0].token.value;if(!N(e)||!T(e,k.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!Y(t)))return t.token.value}function ba(e){if(e){if(Fn(e))return e;if(N(e)){let t=e;for(let n of t.args){let r=ba(n);if(r)return r}}}}var Gl;function Gc(e){Gl=e}function B(e,t,n){if(!Gl)throw new Error("Internal Error: generateExpr function is not set.");return Gl(e,t,n)}function _i(e,t,n){let r=U(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!tt(r))return"";if(Ze(r)){let i=r.length;if(!yt(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=_i(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Je(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=U(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(tt(s)){let l=_i(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Qe(r))return`__yo_decr_rc((void*)(${e}).data)`;if(Wt(r))return`__yo_decr_rc((void*)(${e}))`;if(un(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(rn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Me(r)||Ue(r)){let i=Zr(r,n);if(i)return`${i}(${e})`}return""}function Do(e,t,n){let r=U(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(Ze(r)){let i=r.length;if(!yt(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Et("")}`,a=`i_${Et("")}`,s=H(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=Do(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Je(r)){let i=n.emitter,o=`temp_dup_tuple_${Et("")}`,a=H(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=U(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(tt(u)){let c=Do(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Qe(r))return`((${H(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(Wt(r))return`((${H(r,n)})__yo_incr_rc((void*)(${e})))`;if(un(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(rn(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Me(r)||Ue(r)){let i=Cr(r,n);if(i)return`${i}(${e})`}return e}function Zr(e,t){var n;if(Me(e)||Ue(e)||Qe(e)||U(e)||un(e)||rn(e)){let r=e.trait.fields.find(i=>i.label===k.___drop[0]);if(r&&r.assignedValue&&ve(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Cr(e,t){var n;if(Me(e)||Ue(e)||Qe(e)||U(e)||un(e)||rn(e)){let r=e.trait.fields.find(i=>i.label===k.___dup[0]);if(r&&r.assignedValue&&ve(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function an(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 Mt(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(N(o)){let a=B(o,t,n);a&&r.emitLine(`${t}${a};`)}}}function Mn(e,t,n){var r,i,o,a,s,l,u,c;if(yt(e)){let f=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(f.includes(".")?f:f+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?f.includes(".")?f:f+".0":e.tag==="U64"||e.tag==="Usize"?f+"ULL":e.tag==="I64"||e.tag==="Isize"?f+"LL":e.tag==="U32"?f+"U":f}else{if(ht(e))return e.value?"true":"false";if(bt(e)){let f=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(f&&ri(f)&&f.fields.length===1){let p=f.fields[0].type;if(Lt(p)){let _=H(f,t),m=JSON.stringify(e.value),g=Buffer.byteLength(e.value,"utf8");return`(${_}){ .data = (uint8_t*)${m}, .length = ${g} }`}}if(f&&Lt(f)){let p=H(f,t),_=JSON.stringify(e.value),m=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${_}, .length = ${m} }`}return JSON.stringify(e.value)}else if(yn(e)){let f=e.type;if(Ln(f)){let y=f.variants.find(h=>h.name===e.variantName);if(!y)return`// Error: Variant ${e.variantName} not found in enum`;if(!y.fields||y.fields.length===0)return"NULL";if(y.fields.length===1&&e.fields.length===1)return Mn(e.fields[0],t)}if(_r(f))return Dn(f,e.variantName,t);let m=(o=t.types[f.id])==null?void 0:o.cName;if(!m)return`// Error: No C type name found for enum ${V(f)}`;let g=Dn(f,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${m}){ .tag = ${g} }`;{let y=f.variants.find(v=>v.name===e.variantName);if(!y||!y.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((v,$)=>{let E=y.fields[$];if(E&&!xe(E.type)){let w=me(E.label),L=Mn(v,t);return`.${w} = ${L}`}return null}).filter(v=>v!==null);return h.length===0?`(${m}){ .tag = ${g} }`:`(${m}){ .tag = ${g}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(er(e)){let f=e.type,p=(a=t.types[f.id])==null?void 0:a.cName;if(!p)return`// Error: No C type name found for tuple ${V(f)}
|
|
187
187
|
`;let _=e.fields.map((m,g)=>{let y=Mn(m,t);return`._${g} = ${y}`});return`(${p}){ ${_.join(", ")} }`}else if(ar(e)){let f=e.type;if(f&&Me(f)){let p=(s=t.types[f.id])==null?void 0:s.cName;if(!p)return`// Error: No C type name found for struct ${V(f)}
|
|
188
188
|
`;if(f.isNewtype&&f.fields.length===1&&e.fields.length===1){let _=Mn(e.fields[0],t);return`((${p})(${_}))`}if(f.isReferenceSemantics){let _=e.fields.map(g=>Mn(g,t));return`${`__yo_new_${p}`}(${_.join(", ")})`}else{let _=e.fields.map((m,g)=>{let y=m,h=Je(f)?`_${g}`:me(f.fields[g].label),v=Mn(y,t);return`.${h} = ${v}`});return`(${p}){ ${_.join(", ")} }`}}}else if(wr(e)){let f=e.type,p=H(f,t),_=e.elements.map(m=>Mn(m,t));return`(${p}){ .data = { ${_.join(", ")} } }`}else if(ve(e)){let f=(l=t.functions[e.funcId])==null?void 0:l.cName;return f||`// Error: No C function name found for function value with ID ${e.funcId}
|
|
189
189
|
`}else if(W(e)){let f=e.value;if(f)return t.types[f.id]?t.types[f.id].cName:`/* Error: No C type name found for type ${V(f)} */`}else if(co(e)){let f=e.targetValue[0];if(f){let p=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(p&&it(p)){let _=p.childType,m=Mn(f,t,{$:{type:_,convertedRuntimeType:_}});if(m&&!m.startsWith("/*")&&!m.startsWith("//"))return`(&${m})`}}return`/* Error: Cannot generate pointer value ${lt(e)} */`}}return`/* skip generating: ${lt(e)} */`}function Mo(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(Mo(e.func,t,n))return!0;for(let r of e.args)if(Mo(r,t,n))return!0}return!1}function Gy(e,t,n){for(let r=0;r<t.length;r++)if(Mo(e,t[r].expr,n))return r;return-1}function Wc(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=Gy(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(on(l,"return")||T(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let f=u+1;f<t.length&&Mo(l,t[f].expr,i);f++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}function qc(e,t){let r=Wc(e,t,{shouldSkipBody:Fn,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 Wy(e,t){return Mo(e,t,Fn)}function Hc(e,t,n,r=!1){let i=n.emitter;for(let o=0;o<e.expressions.length;o++){let a=e.expressions[o],s=o===e.expressions.length-1,l=e.awaitPoint&&Wy(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(T(a,D.while)||T(a,D.cond)||T(a,D.match))&&Yn(a);if((l||u)&&e.awaitPoint)Uo(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.$||Bt(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function Uo(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&sr(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"&&sr(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let f=(a=l.token)==null?void 0:a.value;if(!f||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let p=B(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${f})`),o.emitLine(`${r}sm->await_future_${t.index} = ${p};`)}else o.emitLine(`${r}// Store Future for await (variable: ${f}) - future already in state machine`);return}if(u.tag==="FnCall"&&T(u,D.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,p=le(l.$.env,f);p.length>0&&(c=p[p.length-1].id)}ka(u,t,r,i,c);return}if(u.tag==="FnCall"&&T(u,D.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,p=le(l.$.env,f);p.length>0&&(c=p[p.length-1].id)}wa(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,D.cond)){let c=B(l,r,i);ka(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&T(u,D.match)){let c=B(l,r,i);wa(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&T(e,D.cond)){ka(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,D.match)){wa(e,t,r,i);return}if(e.tag==="FnCall"&&T(e,D.while)){ql(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 ka(e,t,n,r,i,o){var y,h,v,$,E,w,L,b,C,A,I,S,O,x,M,q;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,D.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 P=0;P<s.length;P++){let G=s[P];if(G.tag==="FnCall"&&T(G,"=>")){let z=G.args[0];if(z&&!(ht((y=z.$)==null?void 0:y.value)&&z.$.value.value===!1)){u=P;break}}}let c=!1;if(u>=0){let P=s[u];if(P.tag==="FnCall"&&T(P,"=>")){let G=P.args[0];G&&ht((h=G.$)==null?void 0:h.value)&&G.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let P=s[u],G=N(P)?P.args[1]:void 0;if(G)if(Ai(G)){let J=Po(G,t,n,r),ue=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(ue&&J.length>0){let ge=($=r.asyncCondBranchInfo)==null?void 0:$.get(t.index),Z=(ge==null?void 0:ge.branches.some(ce=>ce.hasAwait&&ce.remainingExprs&&ce.remainingExprs.length>0))??!1;ue.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:J,deferredDropExpressions:(E=G.$)==null?void 0:E.deferredDropExpressions,skipCondBranchCheck:Z},l.push({index:u,value:G,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(w=G.$)==null?void 0:w.deferredDropExpressions})}else l.push({index:u,value:G,hasAwait:!0,remainingExprs:J,deferredDropExpressions:(L=G.$)==null?void 0:L.deferredDropExpressions})}else{if(Oo(e,G,r,i,o))Ro(G,n,r);else if(N(G)&&T(G,D.begin)){let J=G.args;for(let ue=0;ue<J.length;ue++){let ge=J[ue],Z=B(ge,n,r);if(Z==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ce=Z==="break"||Z==="continue"||(Z==null?void 0:Z.includes("return"));Z&&(ce||ge.$&&!Bt(ge.$.env.modulePath,Z))&&a.emitLine(`${n}${Z};`)}}if((b=G.$)!=null&&b.deferredDropExpressions)for(let ue of G.$.deferredDropExpressions){let ge=B(ue,n,r);ge&&a.emitLine(`${n}${ge};`)}}else{let J=B(G,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 ue=J==="break"||J==="continue"||(J==null?void 0:J.includes("return"));J&&(ue||G.$&&!Bt(G.$.env.modulePath,J))&&a.emitLine(`${n}${J};`)}}l.push({index:u,value:G,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let z=r.asyncCondBranchInfo.get(t.index);((z==null?void 0:z.branches.some(re=>re.hasAwait&&re.remainingExprs&&re.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let f=!1,p=0,_=n;for(let P=0;P<s.length;P++){let G=s[P];if(G.tag!=="FnCall"||!T(G,"=>")){a.emitLine(`${_}// Error: Expected => pair in cond`);continue}let z=G.args[0],K=G.args[1];if(!z||!K){a.emitLine(`${_}// Error: Invalid pair in cond`);continue}if(ht((C=z.$)==null?void 0:C.value)&&z.$.value.value===!1)continue;f&&(a.emitLine(`${_}else {`),p++,_+=" ");let re=P===s.length-1&&z.tag==="Atom"&&((A=z.token)==null?void 0:A.value)==="true"?null:B(z,_,r);re?a.emitLine(`${_}if (${re}) {`):a.emitLine(`${_}{`),f=!0;let J=`${_} `;if(Ai(K)){a.emitLine(`${J}sm->cond_branch_${t.index} = ${P};`);let ge=Po(K,t,J,r),Z=(I=r.asyncWhileLoopInfo)==null?void 0:I.get(t.index);if(Z&&ge.length>0){let ce=(S=r.asyncCondBranchInfo)==null?void 0:S.get(t.index),X=(ce==null?void 0:ce.branches.some(pe=>pe.hasAwait&&pe.remainingExprs&&pe.remainingExprs.length>0))??!1;Z.condBranchPostWhileExprs={branchIndex:P,condBranchFieldIndex:t.index,exprs:ge,deferredDropExpressions:(O=K.$)==null?void 0:O.deferredDropExpressions,skipCondBranchCheck:X},l.push({index:P,value:K,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(x=K.$)==null?void 0:x.deferredDropExpressions})}else l.push({index:P,value:K,hasAwait:!0,remainingExprs:ge,deferredDropExpressions:(M=K.$)==null?void 0:M.deferredDropExpressions})}else{if(Oo(e,K,r,i,o))Ro(K,J,r);else if(N(K)&&T(K,D.begin)){let ge=K.args;for(let Z=0;Z<ge.length;Z++){let ce=ge[Z],X=B(ce,J,r);if(X==="break"&&t.isInsideWhile)a.emitLine(`${J}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${J}goto while_loop_${t.index}_end;`);else{let pe=X==="break"||X==="continue"||(X==null?void 0:X.includes("return"));X&&(pe||ce.$&&!Bt(ce.$.env.modulePath,X))&&a.emitLine(`${J}${X};`)}}if((q=K.$)!=null&&q.deferredDropExpressions)for(let Z of K.$.deferredDropExpressions){let ce=B(Z,J,r);ce&&a.emitLine(`${J}${ce};`)}}else{let ge=B(K,J,r);if(ge==="break"&&t.isInsideWhile)a.emitLine(`${J}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${J}goto while_loop_${t.index}_end;`);else{let Z=ge==="break"||ge==="continue"||(ge==null?void 0:ge.includes("return"));ge&&(Z||K.$&&!Bt(K.$.env.modulePath,ge))&&a.emitLine(`${J}${ge};`)}}l.push({index:P,value:K,hasAwait:!1})}a.emitLine(`${_}}`)}for(let P=0;P<p;P++)_=_.slice(0,-2),a.emitLine(`${_}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let m=r.asyncCondBranchInfo.get(t.index);((m==null?void 0:m.branches.some(P=>P.hasAwait&&P.remainingExprs&&P.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function Oo(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!Yc(t)}function Ro(e,t,n){var o,a;let r=n.emitter,i=xe((o=e.$)==null?void 0:o.type);if(N(e)&&T(e,D.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],f=B(c,t,n);f&&c.$&&!Bt(c.$.env.modulePath,f)&&r.emitLine(`${t}${f};`)}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};`)}fi({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function Ai(e){if(e.tag==="FnCall"&&sr(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Ai(t))return!0}return!1}function Yc(e){if(on(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Yc(t))return!0}return!1}function wa(e,t,n,r,i,o){var m,g,y,h,v,$;let a=r.emitter;if(e.tag!=="FnCall"||!T(e,D.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((g=e.$)!=null&&g.isPrimitiveMatch){Hy(e,l,u,t,n,r,i,o);return}if(!Ue(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let f=c,p=(y=r.types[f.id])==null?void 0:y.cName;if(!p){a.emitLine(`${n}// Error: enum type has no C name`);return}let _=Ln(f);if(_){let E=-1,w=-1,L;for(let b=0;b<l.length;b++){let C=l[b];if(N(C)&&T(C,"=>",2)){let A=C.args[0];if(A&&N(A)&&T(A,"."))E=b;else if(A&&N(A)){let I=A.func;I&&N(I)&&T(I,".")&&(w=b,A.args.length>0&&Y(A.args[0])&&(L=A.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),w>=0){let b=l[w];if(!N(b))a.emitLine(`${n} // Error: Expected => in case`);else{let C=b.args[1];if(L){let A=r,I=!1,S;if(A.stateMachineVariables){for(let[O,x]of A.stateMachineVariables)if(x.name===L){I=!0,S=O;break}}I&&S?a.emitLine(`${n} sm->var_${S} = ${u};`):a.emitLine(`${n} ${H(_,r)} ${L} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${w};`),Ai(C)){let A=Po(C,t,n+" ",r);if(A.length>0){let I=r;I.asyncCondBranchInfo||(I.asyncCondBranchInfo=new Map);let S=I.asyncCondBranchInfo.get(t.index)||{branches:[]};S.branches.push({index:w,value:C,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(h=C.$)==null?void 0:h.deferredDropExpressions}),I.asyncCondBranchInfo.set(t.index,S)}}else if(Oo(e,C,r,i,o))Ro(C,n+" ",r);else{let A=B(C,n+" ",r);if(i){let I=me(`var_${i}`);A&&a.emitLine(`${n} sm->${I} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&C.$&&!Bt(C.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}if(a.emitLine(`${n}} else {`),E>=0){let b=l[E];if(!N(b))a.emitLine(`${n} // Error: Expected => in case`);else{let C=b.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`),Ai(C)){let A=Po(C,t,n+" ",r);if(A.length>0){let I=r;I.asyncCondBranchInfo||(I.asyncCondBranchInfo=new Map);let S=I.asyncCondBranchInfo.get(t.index)||{branches:[]};S.branches.push({index:E,value:C,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(v=C.$)==null?void 0:v.deferredDropExpressions}),I.asyncCondBranchInfo.set(t.index,S)}}else if(Oo(e,C,r,i,o))Ro(C,n+" ",r);else{let A=B(C,n+" ",r);if(i){let I=me(`var_${i}`);A&&a.emitLine(`${n} sm->${I} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&C.$&&!Bt(C.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let E=!1;for(let w=0;w<l.length;w++){let L=l[w];if(!N(L)||!T(L,"=>",2))continue;let b=L.args[0],C=L.args[1],A=Y(b)&&b.token.value==="_",I;if(!A){if(N(b)&&T(b,".",1))I=b.args[0].token.value;else if(N(b)){let S=b.func;S&&N(S)&&T(S,".",1)&&(I=S.args[0].token.value)}}if(!A&&!I){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(A)E=!0,a.emitLine(`${n} default: {`);else{let S=`${p.toUpperCase()}_${I.toUpperCase()}`;a.emitLine(`${n} case ${S}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${w};`),N(b)&&b.args.length>=1){let S=b.func;if(S&&N(S)&&T(S,".")){let O=f.variants.find(x=>x.name===I);if(O&&O.fields)for(let x=0;x<Math.min(b.args.length,O.fields.length);x++){let M=b.args[x],q=O.fields[x];if(Y(M)&&q){let P=M.token.value,G=me(P),z=r,K=!1,re;if(z.stateMachineVariables){for(let[ge,Z]of z.stateMachineVariables)if(Z.name===P){K=!0,re=ge;break}}let J=me(q.label,q.type.isExtern==="c"),ue=`${u}.data.${I}.${J}`;if(K&&re)a.emitLine(`${n} sm->var_${re} = ${ue};`);else{let ge=H(q.type,r);a.emitLine(`${n} ${ge} ${G} = ${ue};`)}}}}}if(Ai(C)){let S=Po(C,t,n+" ",r);if(S.length>0){let O=r;O.asyncCondBranchInfo||(O.asyncCondBranchInfo=new Map);let x=O.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:w,value:C,hasAwait:!0,remainingExprs:S,deferredDropExpressions:($=C.$)==null?void 0:$.deferredDropExpressions}),O.asyncCondBranchInfo.set(t.index,x)}}else if(Oo(e,C,r,i,o))Ro(C,n+" ",r);else{let S=B(C,n+" ",r);if(i){let O=me(`var_${i}`);S&&a.emitLine(`${n} sm->${O} = ${S};`)}else o?S&&a.emitLine(`${n} ${o} = ${S};`):S&&C.$&&!Bt(C.$.env.modulePath,S)&&a.emitLine(`${n} ${S};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}E||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function qy(e){return N(e)?T(e,"|",2):!1}function Wl(e){if(!qy(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Wl(t),...Wl(n)]}function Hy(e,t,n,r,i,o,a,s){var c,f,p;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let _=0;_<t.length;_++){let m=t[_];if(!N(m)||!T(m,"=>",2))continue;let g=m.args[0],y=m.args[1];if(on(g,"_"))l.emitLine(`${i} default:`);else{let h=(c=g.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let v of h)if(v!==void 0){let $=Mn(v,o);l.emitLine(`${i} case ${$}:`)}}else{let v=Wl(g);for(let $ of v){let E=(f=$.$)==null?void 0:f.value;if(E!==void 0){let w=Mn(E,o);l.emitLine(`${i} case ${w}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${_};`),Ai(y)){let h=Po(y,r,i+" ",o);u.push({index:_,value:y,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(p=y.$)==null?void 0:p.deferredDropExpressions})}else{if(Oo(e,y,o,a,s))Ro(y,i+" ",o);else{let h=B(y,i+" ",o);if(a){let v=me(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&y.$&&!Bt(y.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:_,value:y,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 Po(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(Ai(l))if(s=!0,l.tag==="FnCall"&&T(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&sr(u)){let c=u.args[0];if(c){let f=B(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${f};`)}}}else if(l.tag==="FnCall"&&sr(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,D.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),ka(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&T(l,D.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),wa(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&T(l,D.while)&&ql(l,t,n,r);else{let u=B(l,n,r);u&&l.$&&!Bt(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function ql(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!T(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length!==2){i.emitLine(`${n}// Error: while must have exactly 2 arguments (condition, body)`);return}let a=o[0],s=o[1],l=jy(s),u;l?(u=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=u+1):u=t.index,i.emitLine(`${n}sm->while_loop_${u}_active = true;`),i.emitLine(`${n}while_loop_${u}_start:`);let c=B(a,n,r);i.emitLine(`${n}if (!(${c})) {`),i.emitLine(`${n} sm->while_loop_${u}_active = false;`),i.emitLine(`${n} goto while_loop_${u}_end;`),i.emitLine(`${n}}`);let f=Yy(s,t,n,r,u);if(i.emitLine(`${n}while_loop_${u}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),l){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:u,conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:f})}function Yy(e,t,n,r,i){var _;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&T(e,"begin")?s=e.args:s=[e];let l=-1;for(let m=0;m<s.length;m++){let g=s[m];if(Yn(g)){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,f=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...((_=e.$)==null?void 0:_.deferredDropExpressions)??[]];for(let m=0;m<l;m++){let g=s[m],y=B(g,n,r);y&&g.$&&!Bt(g.$.env.modulePath,y)&&o.emitLine(`${n}${y};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=f;let p=s[l];if(N(p)&&T(p,D.while)&&Yn(p)){ql(p,t,n,r);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}if(N(p)&&T(p,":=")){let m=p.args[1];if(m&&m.tag==="FnCall"&&sr(m)){let g=m.args[0];if(g){let y=B(g,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(p.tag==="FnCall"&&sr(p)){let m=p.args[0];if(m&&t.futureVariableId===void 0){let g=B(m,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(N(p)&&T(p,D.cond)){ka(p,t,n,r,void 0);for(let m=l+1;m<s.length;m++)a.push(s[m]);return a}else if(N(p)&&T(p,D.match)){wa(p,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 jy(e){let t=e.tag==="FnCall"&&T(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&T(n,D.while)&&Yn(n))return!0;return!1}function Yl(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 La(e){return!e||!U(e)?!1:e.resolvedConcreteType&&U(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Ga(t.traitType))}function Fa(e,t){return t==="outer"?`__capture.${me(e)}`:me(`var_${e}`)}function Kc(e,t,n,r,i,o,a,s){var y,h,v,$,E,w,L,b,C,A,I,S,O,x,M,q,P,G,z,K,re,J,ue,ge,Z,ce,X;let l=s.emitter,c=En(o).isFuture.outputType,f=xe(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let p=qc(e,i.awaitPoints),_=e.tag==="FnCall"&&T(e,"begin")?e.args:[e],m=_.length>0?_[_.length-1]:void 0;l.emitLine(`// Resume function for async block ${t}`),l.emitLine(`void ${r}(${n}* sm) {`),l.emitLine(` ASYNC_DEBUG("${t}_resume: state=%d\\n", sm->state);`),l.emitLine(" switch (sm->state) {");let g=[];for(let pe=0;pe<p.length;pe++){let Ce=p[pe];if(!Ce)continue;let Ae=Ce.stateNumber,ut=pe===p.length-1;if(l.emitLine(`
|
|
190
190
|
state_${Ae}:`),l.emitLine(` case ${Ae}: { // State ${Ae}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${Ae}\\n");`),Ae>0&&i.awaitPoints[Ae-1]){let Q=i.awaitPoints[Ae-1],oe=Yl(Q,i);Q.isInsideCond&&l.emitLine(` if (sm->${oe} != NULL) {`);let we=xe(Q.resultType)||U(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;`),$r({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),Q&&!we){if(l.emitLine(` // Extract result from await ${Ae-1}`),l.emitLine(` int state_before_read = sm->${oe}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${Ae-1}, state=%d\\n", state_before_read);`),tt(Q.resultType)){let Ve=Cr(Q.resultType,s);Ve?l.emitLine(` sm->await_result_${Ae-1} = ${Ve}(sm->${oe}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${Ae-1} = sm->${oe}->result;`))}else l.emitLine(` sm->await_result_${Ae-1} = sm->${oe}->result;`);if(Q.targetVariableId){let Ve=Fa(Q.targetVariableId,"local");l.emitLine(` sm->${Ve} = sm->await_result_${Ae-1};`)}l.emitLine("")}if(!Q.futureVariableId){let Ve=Q.expr;if(Ve.tag==="FnCall"){let Ge=Ve.args[0],je=(y=Ge==null?void 0:Ge.$)==null?void 0:y.type;je&&(U(je)||Qe(je))&&(l.emitLine(` if (sm->${oe} != NULL) { __yo_decr_rc((void*)sm->${oe}); sm->${oe} = NULL; }`),l.emitLine(""))}}let Ie=s;if(Q){let Ve=(h=Ie.asyncCondBranchInfo)==null?void 0:h.get(Q.index);if(Ve&&Ve.branches.some(je=>je.hasAwait)){let je=Ve.condBranchFieldIndex??Q.index,St=je===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),St||l.emitLine(` switch (sm->cond_branch_${je}) {`);let zn=((v=Ce.awaitPoint)==null?void 0:v.isInsideCond)??!1;for(let ct of Ve.branches)if(ct.hasAwait){if(St||l.emitLine(` case ${ct.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${ct.index}\\n");`),ct.remainingExprs&&ct.remainingExprs.length>0){let Yt=s.inAsyncStateMachine,lr=s.stateMachineVariables,mt=s.variableIdRemapping,tn=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let nn=($=Ie.asyncWhileLoopInfo)==null?void 0:$.get(Q.index);s.pendingDeferredDrops=[...ct.deferredDropExpressions??[],...((E=nn==null?void 0:nn.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...((w=e.$)==null?void 0:w.deferredDropExpressions)??[]];let Cn=new Map;for(let $e of i.capturedVariables)Cn.set($e.id,$e);if(a)for(let $e of a.fields)Cn.set($e.label,{id:$e.label,name:$e.label,type:$e.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Cn;let sn=!1,ye=[],Te=Ve.targetAssignmentCode;for(let $e=0;$e<ct.remainingExprs.length;$e++){let de=ct.remainingExprs[$e],Ee=$e===ct.remainingExprs.length-1;if(sn){ye.push(de);continue}if(zn&&Yn(de)){sn=!0,Hl(de,Ce.awaitPoint,i," ",s);continue}let Ne=B(de," ",s);!Ne||!de.$||Bt(de.$.env.modulePath,Ne)||(Ee&&Te?l.emitLine(` ${Te} = ${Ne};`):l.emitLine(` ${Ne};`))}if(ct.remainingExprs.length===0&&Te&&l.emitLine(` ${Te} = sm->await_result_${Q.index};`),sn&&Ce.awaitPoint){let $e=Ce.awaitPoint.index;Ie.asyncCondBranchInfo||(Ie.asyncCondBranchInfo=new Map);let de=Ie.asyncCondBranchInfo.get($e);if(de)de.chainedBranches||(de.chainedBranches=[]),de.chainedBranches.push({branches:[{index:ct.index,value:ct.value,hasAwait:ye.length>0||ye.some(Ee=>Yn(Ee)),remainingExprs:ye,deferredDropExpressions:ct.deferredDropExpressions}],condBranchFieldIndex:je});else{let Ee={branches:[{index:ct.index,value:ct.value,hasAwait:ye.length>0||ye.some(Ne=>Yn(Ne)),remainingExprs:ye,deferredDropExpressions:ct.deferredDropExpressions}],condBranchFieldIndex:je};Ie.asyncCondBranchInfo.set($e,Ee)}}else if(ct.deferredDropExpressions)for(let $e of ct.deferredDropExpressions){let de=B($e," ",s);de&&de.includes("sm->")&&l.emitLine(` ${de};`)}s.inAsyncStateMachine=Yt,s.stateMachineVariables=lr,s.variableIdRemapping=mt,s.pendingDeferredDrops=tn}St||(l.emitLine(" break;"),l.emitLine(" }"))}if(St||l.emitLine(" }"),Ve.chainedBranches){for(let ct of Ve.chainedBranches)for(let Yt of ct.branches)if(Yt.hasAwait&&Yt.remainingExprs&&Yt.remainingExprs.length>0){let lr=s.inAsyncStateMachine,mt=s.stateMachineVariables,tn=s.variableIdRemapping,nn=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Cn=(L=Ie.asyncWhileLoopInfo)==null?void 0:L.get(Q.index);s.pendingDeferredDrops=[...Yt.deferredDropExpressions??[],...((b=Cn==null?void 0:Cn.bodyExpr.$)==null?void 0:b.deferredDropExpressions)??[],...((C=e.$)==null?void 0:C.deferredDropExpressions)??[]];let sn=new Map;for(let de of i.capturedVariables)sn.set(de.id,de);if(a)for(let de of a.fields)sn.set(de.label,{id:de.label,name:de.label,type:de.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=sn;let ye=((A=Ce.awaitPoint)==null?void 0:A.isInsideCond)??!1,Te=!1,$e=[];for(let de of Yt.remainingExprs){if(Te){$e.push(de);continue}if(ye&&Yn(de)){Te=!0,Hl(de,Ce.awaitPoint,i," ",s);continue}let Ee=B(de," ",s);!Ee||!de.$||Bt(de.$.env.modulePath,Ee)||l.emitLine(` ${Ee};`)}if(Te&&Ce.awaitPoint){let de=Ce.awaitPoint.index;Ie.asyncCondBranchInfo||(Ie.asyncCondBranchInfo=new Map);let Ee=Ie.asyncCondBranchInfo.get(de);Ee?(Ee.chainedBranches||(Ee.chainedBranches=[]),Ee.chainedBranches.push({branches:[{index:Yt.index,value:Yt.value,hasAwait:$e.length>0||$e.some(Ne=>Yn(Ne)),remainingExprs:$e,deferredDropExpressions:Yt.deferredDropExpressions}],condBranchFieldIndex:ct.condBranchFieldIndex})):Ie.asyncCondBranchInfo.set(de,{branches:[{index:Yt.index,value:Yt.value,hasAwait:$e.length>0||$e.some(Ne=>Yn(Ne)),remainingExprs:$e,deferredDropExpressions:Yt.deferredDropExpressions}],condBranchFieldIndex:ct.condBranchFieldIndex})}else if(Yt.deferredDropExpressions)for(let de of Yt.deferredDropExpressions){let Ee=B(de," ",s);Ee&&Ee.includes("sm->")&&l.emitLine(` ${Ee};`)}s.inAsyncStateMachine=lr,s.stateMachineVariables=mt,s.variableIdRemapping=tn,s.pendingDeferredDrops=nn}}if(Ve.targetVariableId){let ct=Fa(Ve.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${ct} = sm->await_result_${Q.index};`)}l.emitLine("")}Q.isInsideCond&&l.emitLine(" }");let Ge=(I=Ie.asyncWhileLoopInfo)==null?void 0:I.get(Q.index);if(Ge){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${Q.index}_active) {`),Ge.bodyExprsAfterAwait&&Ge.bodyExprsAfterAwait.length>0){let mt=s.inAsyncStateMachine,tn=s.stateMachineVariables,nn=s.variableIdRemapping,Cn=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((S=Ge.bodyExpr.$)==null?void 0:S.deferredDropExpressions)??[],...((O=e.$)==null?void 0:O.deferredDropExpressions)??[]];let sn=new Map;for(let de of i.capturedVariables)sn.set(de.id,de);if(a)for(let de of a.fields)sn.set(de.label,{id:de.label,name:de.label,type:de.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=sn;let ye=s.smWhileBreakInfo,Te=s.smWhileContinueInfo,$e=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Q.index}`,activeIndex:Q.index},s.smWhileContinueInfo={label:`while_loop_${Q.index}_continue`},s.smWhileBodyDrops=[...((x=Ge.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[]];for(let de of Ge.bodyExprsAfterAwait){let Ee=B(de," ",s);!Ee||!de.$||Bt(de.$.env.modulePath,Ee)||l.emitLine(` ${Ee};`)}s.smWhileBreakInfo=ye,s.smWhileContinueInfo=Te,s.smWhileBodyDrops=$e,s.inAsyncStateMachine=mt,s.stateMachineVariables=tn,s.variableIdRemapping=nn,s.pendingDeferredDrops=Cn}l.emitLine(` while_loop_${Q.index}_continue:`);{let mt=((M=Ge.bodyExpr.$)==null?void 0:M.deferredDropExpressions)??[];if(mt.length>0){let tn=s.inAsyncStateMachine,nn=s.stateMachineVariables,Cn=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let sn=new Map;for(let ye of i.capturedVariables)sn.set(ye.id,ye);if(a)for(let ye of a.fields)sn.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=sn;for(let ye of mt){let Te=B(ye," ",s);Te&&Te.includes("sm->")&&l.emitLine(` ${Te};`)}s.inAsyncStateMachine=tn,s.stateMachineVariables=nn,s.variableIdRemapping=Cn}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let je=s.inAsyncStateMachine,St=s.stateMachineVariables,zn=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ct=new Map;for(let mt of i.capturedVariables)ct.set(mt.id,mt);if(a)for(let mt of a.fields)ct.set(mt.label,{id:mt.label,name:mt.label,type:mt.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ct;let Yt=B(Ge.conditionExpr," ",s);s.inAsyncStateMachine=je,s.stateMachineVariables=St,s.variableIdRemapping=zn,l.emitLine(` if (!(${Yt})) {`),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 lr=Q.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${lr};`),l.emitLine(` goto while_loop_${lr}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Q.index}:`),Ge.condBranchPostWhileExprs){let mt=Ge.condBranchPostWhileExprs,tn=mt.condBranchFieldIndex,nn=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_${tn} == ${nn}) {`));let Cn=s.inAsyncStateMachine,sn=s.stateMachineVariables,ye=s.variableIdRemapping,Te=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((q=e.$)==null?void 0:q.deferredDropExpressions)??[]];let $e=new Map;for(let rt of i.capturedVariables)$e.set(rt.id,rt);if(a)for(let rt of a.fields)$e.set(rt.label,{id:rt.label,name:rt.label,type:rt.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=$e;let de=Ce.awaitPoint!=null,Ee=!1,Ne=[];for(let rt=0;rt<mt.exprs.length;rt++){let Se=mt.exprs[rt];if(Ee){Ne.push(Se);continue}if(de&&Yn(Se)){Ee=!0,Hl(Se,Ce.awaitPoint,i," ",s);continue}let _e=B(Se," ",s);!_e||!Se.$||Bt(Se.$.env.modulePath,_e)||l.emitLine(` ${_e};`)}if(Ee&&Ce.awaitPoint){let rt=Ce.awaitPoint.index;Ie.asyncCondBranchInfo||(Ie.asyncCondBranchInfo=new Map);let Se=mt.skipCondBranchCheck?-1:mt.condBranchFieldIndex,_e=Ie.asyncCondBranchInfo.get(rt);_e?(_e.chainedBranches||(_e.chainedBranches=[]),_e.chainedBranches.push({branches:[{index:mt.branchIndex,value:mt.exprs[0],hasAwait:Ne.length>0||Ne.some(De=>Yn(De)),remainingExprs:Ne,deferredDropExpressions:mt.deferredDropExpressions}],condBranchFieldIndex:Se})):Ie.asyncCondBranchInfo.set(rt,{branches:[{index:mt.branchIndex,value:mt.exprs[0],hasAwait:Ne.length>0||Ne.some(De=>Yn(De)),remainingExprs:Ne,deferredDropExpressions:mt.deferredDropExpressions}],condBranchFieldIndex:Se})}if(!Ee&&mt.deferredDropExpressions)for(let rt of mt.deferredDropExpressions){let Se=B(rt," ",s);Se&&Se.includes("sm->")&&l.emitLine(` ${Se};`)}l.emitLine(" }"),s.inAsyncStateMachine=Cn,s.stateMachineVariables=sn,s.variableIdRemapping=ye,s.pendingDeferredDrops=Te}if(Ge.outerWhileLoop){let mt=Ge.outerWhileLoop,tn=mt.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${tn}_active) {`),mt.bodyExprsAfterAwait.length>0){let nn=s.inAsyncStateMachine,Cn=s.stateMachineVariables,sn=s.variableIdRemapping,ye=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=mt.bodyExpr.$)==null?void 0:P.deferredDropExpressions)??[],...((G=e.$)==null?void 0:G.deferredDropExpressions)??[]];let Te=new Map;for(let Ne of i.capturedVariables)Te.set(Ne.id,Ne);if(a)for(let Ne of a.fields)Te.set(Ne.label,{id:Ne.label,name:Ne.label,type:Ne.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Te;let $e=s.smWhileBreakInfo,de=s.smWhileContinueInfo,Ee=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${tn}`,activeIndex:tn},s.smWhileContinueInfo={label:`while_loop_${tn}_continue`},s.smWhileBodyDrops=[...((z=mt.bodyExpr.$)==null?void 0:z.deferredDropExpressions)??[]];for(let Ne of mt.bodyExprsAfterAwait){let rt=B(Ne," ",s);!rt||!Ne.$||Bt(Ne.$.env.modulePath,rt)||l.emitLine(` ${rt};`)}s.smWhileBreakInfo=$e,s.smWhileContinueInfo=de,s.smWhileBodyDrops=Ee,s.inAsyncStateMachine=nn,s.stateMachineVariables=Cn,s.variableIdRemapping=sn,s.pendingDeferredDrops=ye}l.emitLine(` while_loop_${tn}_continue:`);{let nn=((K=mt.bodyExpr.$)==null?void 0:K.deferredDropExpressions)??[];if(nn.length>0){let Cn=s.inAsyncStateMachine,sn=s.stateMachineVariables,ye=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Te=new Map;for(let $e of i.capturedVariables)Te.set($e.id,$e);if(a)for(let $e of a.fields)Te.set($e.label,{id:$e.label,name:$e.label,type:$e.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Te;for(let $e of nn){let de=B($e," ",s);de&&de.includes("sm->")&&l.emitLine(` ${de};`)}s.inAsyncStateMachine=Cn,s.stateMachineVariables=sn,s.variableIdRemapping=ye}}{let nn=s.inAsyncStateMachine,Cn=s.stateMachineVariables,sn=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ye=new Map;for(let $e of i.capturedVariables)ye.set($e.id,$e);if(a)for(let $e of a.fields)ye.set($e.label,{id:$e.label,name:$e.label,type:$e.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let Te=B(mt.conditionExpr," ",s);s.inAsyncStateMachine=nn,s.stateMachineVariables=Cn,s.variableIdRemapping=sn,l.emitLine(` if (!(${Te})) {`),l.emitLine(` sm->while_loop_${tn}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${Q.index};`),l.emitLine(` goto while_loop_${tn}_start;`),l.emitLine(" }")}l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${tn}:`)}}}}let se=s.inAsyncStateMachine,he=s.stateMachineVariables,te=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ke=new Map;for(let Q of i.capturedVariables)ke.set(Q.id,Q);if(a)for(let Q of a.fields)ke.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ke;let Be=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((re=e.$)==null?void 0:re.deferredDropExpressions)??[]];let Xe=ut&&!f&&Ce.expressions.length>0,wt=Ce.expressions.length>0?Ce.expressions[Ce.expressions.length-1]:void 0,j=s.asyncBodyReturnExpr;if(!f&&wt&&m&&wt===m&&Ce.awaitPoint?s.asyncBodyReturnExpr=wt:s.asyncBodyReturnExpr=void 0,Hc(Ce," ",s,Xe),s.asyncBodyReturnExpr=j,s.pendingDeferredDrops=Be,l.emitLine(""),Ce.awaitPoint){s.inAsyncStateMachine=se,s.stateMachineVariables=he,s.variableIdRemapping=te;let Q=Ae+1;{let oe=Yl(Ce.awaitPoint,i),Ie=(J=Ce.awaitPoint.expr.args)==null?void 0:J[0],Ve=La((ue=Ie==null?void 0:Ie.$)==null?void 0:ue.type),Ge=(ge=Ce.awaitPoint)==null?void 0:ge.isInsideCond;Ge&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${oe} != NULL) {`));let je=(Z=Ce.awaitPoint)==null?void 0:Z.isInsideWhile,St=je?(ce=s.asyncWhileLoopInfo)==null?void 0:ce.get(Ce.awaitPoint.index):void 0;if(je&&St){let zn=Ce.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${zn}_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(""),Ve?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`)),Ve||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),Xy(Ce.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;"),je&&St){let zn=Ce.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${zn};`),l.emitLine(" }")}Ge&&(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(ut){if(!Ce.expressions.some(oe=>Xc(oe))){if((X=e.$)!=null&&X.deferredDropExpressions){let oe=new Ri,we=s.emitter;s.emitter=oe;for(let Ve of e.$.deferredDropExpressions){let Ge=B(Ve,"",s);Ge&&oe.emitLine(`${Ge};`)}s.emitter=we;let Ie=oe.print().trim();if(Ie){l.emitLine(" // Drop local variables before completion");for(let Ve of Ie.split(`
|
|
191
|
-
`)){let Ge=Ve.trim();Ge&&(l.emitLine(` ${Ge}`),g.push(Ge))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),fi({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=se,s.stateMachineVariables=he,s.variableIdRemapping=te}else s.inAsyncStateMachine=se,s.stateMachineVariables=he,s.variableIdRemapping=te;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),g}function Hl(e,t,n,r,i){let o=i.emitter,a=Yl(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&sr(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"&&sr(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,D.cond)){Uo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,D.match)){Uo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,D.while)){Uo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,D.begin)){Uo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Xc(e){if(on(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Xc(t))return!0}return!1}function Ky(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Xy(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=En(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=Ky(o.isFuture.effects),s=r.emitter,l=(p=e.args)==null?void 0:p.find(m=>N(m)&&T(m,D.using));if(l){let m=l.args;for(let g=0;g<a.length&&g<m.length;g++){let y=a[g],h=m[g];if(ee(y.type)){if(y.type.forallParameters.length>0)continue;let v=B(h,n,r),$=y.label;s.emitLine(`${n}${t}->__capture.${$} = (void*)${v};`)}else We(y.type)&&jc(y.type,t,n,(_=h.$)==null?void 0:_.value,r,e)}}else for(let m of a)if(ee(m.type)){if(m.type.forallParameters.length>0)continue;let g=Qy(m.label,r,e);g&&s.emitLine(`${n}${t}->__capture.${m.label} = (void*)${g};`)}else We(m.type)&&jc(m.type,t,n,void 0,r,e)}function jc(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let f of e.fields){if(!ee(f.type))continue;let p;if(i.stateMachineVariables){for(let[,_]of i.stateMachineVariables)if(_.name===f.label&&_.kind==="outer"){p=`sm->__capture.${f.label}`;break}}if(!p&&r&&vt(r)){let _=e.fields.indexOf(f),m=r.fields[_];if(m&&ve(m)){let g=i.functions[m.funcId];g&&(p=g.cName)}}if(!p&&i.currentEvidenceParams){for(let _ of i.currentEvidenceParams.values())if(_.fieldLabel===f.label){p=_.cParamName;break}}if(!p){let _=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(_){let m=Xn(_,g=>g.isImplicit===!0);for(let g=m.length-1;g>=0;g--){let y=m[g],h=(u=y.value)==null?void 0:u[y.value.length-1];if(h&&vt(h)){let v=h.type.fields.findIndex($=>$.label===f.label);if(v>=0){let $=h.fields[v];if($&&ve($)){let E=(c=i.functions[$.funcId])==null?void 0:c.cName;if(E){p=E;break}}}}}}}p&&a.emitLine(`${n}${t}->__capture.${f.label} = (void*)${p};`)}}function Qy(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 Zy=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_create","yo_thread_join","yo_thread_self"]);function Qc(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(Zy.has(l))continue;jl(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||jl(u,l,!0,e)}t.emitDeclarationLine(""),t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("void yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("void yo_future_dispose(void* ptr);"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Object constructors"),eg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),tg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",f=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,p=f&&f.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!p&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&fn(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter(E=>E.isImplicit)].some(E=>ee(E.type)))continue;let m=u.specializedType??u.type,g=fn(m).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!p&&!g&&!u.isModuleEffectMember&&(Pr(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Li(u)||xo(u)||u.isIoAsyncStateMachineClosure))continue;let y=u.specializedType??u.type,h=!p&&!u.isModuleEffectMember&&(y.parameters.some(E=>et(E.type))||y.forallParameters.length>0),v=et(y.return.type),$=U(y.return.type)&&y.return.type.requiredTraits.length>0;h||v&&!$&&!u.isModuleEffectMember||jl(y,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&fn(y).length===0&&fn(u.type).some(E=>E.fieldFunctionType.forallParameters&&E.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function fn(e){let t=[],n=Jy(e.implicitParameters);for(let r of n)We(r.type)?Zc(r.label,r.type,[],t):ee(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:me(r.label)});return t}function Zc(e,t,n,r){for(let i of t.fields)if(ee(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:me(`${e}__${a}`)})}else We(i.type)&&Zc(e,i.type,[...n,i.label],r)}function Jy(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Zr(e,t,n,r,i){let o=r||H(e.return.type,n),a=e.parameters.filter(f=>!f.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((f,p)=>{let _=me(f.label||`param${p}`);if(ee(f.type))return Zr(f.type,"(*)",n).replace(" (*)(",` (*${_})(`);{let m;return U(f.type)&&Ke(f.type)?f.type.resolvedConcreteType?m=H(f.type.resolvedConcreteType,n)+"*":m=H(f.type,n):m=H(f.type,n),`${m} ${_}`}});s.push(...l);let u=fn(i??e);for(let f of u)if(f.fieldFunctionType.forallParameters&&f.fieldFunctionType.forallParameters.length>0)s.push(`void* ${f.cParamName}`);else{let p=Zr(f.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${f.cParamName})(`);s.push(p)}let c=s.join(", ");return`${o} ${t}(${c})`}function jl(e,t,n,r,i,o){var u,c,f,p;let a;if(i&&Ke(e.return.type)){let _=ba(i);(u=_==null?void 0:_.$)!=null&&u.asyncStateMachineStructName?a=`${_.$.asyncStateMachineStructName}*`:(c=i.$)!=null&&c.type&&U(i.$.type)&&Ke(i.$.type)&&(a=H(i.$.type,r))}if(i&&U(e.return.type)&&!Ke(e.return.type)&&(f=i.$)!=null&&f.type&&(a=H(i.$.type,r)),!a&&i&&((p=i.$)!=null&&p.type)&&!Ke(e.return.type)){let _=H(e.return.type,r),m=H(i.$.type,r);_!==m&&(a=m)}let s=a?Zr(e,t,r,a,o):Zr(e,t,r,void 0,o),l=V(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${s}; // ${l}`)}function eg(e){let t=e.emitter;t.emitDeclarationLine("void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Me(r)&&r.isReferenceSemantics){if(r.fields.some(l=>et(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=H(l.type,e),c=me(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`${i}* ${a}(${s}); // Constructor`)}}}function tg(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}}function Jc(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Li(r)||!o||!kr(r.type)||kr(o))continue;let a=o.parameters.some(u=>et(u.type)),s=et(o.return.type);a||s||fn(r.type).some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${Zr(o,i,e)}; // specialized function: ${V(r.type)}`))}}function Jr(e,t,n){let r=le(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function ef(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&xn(e.$.type))}function ng(e,t,n,r,i,o=!1){var _;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((_=n.$)!=null&&_.deferredDupExpressions)for(let m of n.$.deferredDupExpressions){let g=Ts(m);g&&l.set(g,m)}let u=e.fields.map(m=>{var v,$;if(m.isEffectParam)return"NULL";let g,y=m.exprs.expr;if(($=(v=y.$)==null?void 0:v.deferredDupExpressions)!=null&&$.length&&(g=y.$.deferredDupExpressions[0]),!g){let E=[m.label];Y(y)&&E.push(y.token.value);for(let w of E){let L=l.get(w);if(L){g=L;break}}}if(g)return B(g,r,i);let h={tag:"Atom",token:y.token,$:y.$};return B(h,r,i)}),c=`(${s}){ ${u.map((m,g)=>{let y=e.fields[g];return y?`.${y.label} = ${m}`:`/* Error: missing field at index ${g} */`}).join(", ")} }`,f=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=`__capture_${t}_${f}`;return o?i.emitter.emitLine(`${r}${s} ${p} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${p} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${p} = ${c};`)),{captureTempVar:p,captureCName:s}}function tf(e,t,n){var m;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=Un(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=Qe(e.$.type),u;if(l){let g=n.types[e.$.type.id];if(!g)return"// Error: Dyn closure type not found in context";u=g.cName}let c=a&&Me(a)&&a.fields.length>0,f=H(i.return.type,n),p=i.parameters.map(g=>H(g.type,n)).join(", "),_=`(${f} (*)(void*${p?", "+p:""}))${s}`;if(c&&a&&Me(a)){let g=!l,y=ng(a,i.id,e,t,n,g);if(!y)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=y;if(l){let v=`__yo_create_${u}`,$=`__yo_dispose_${u}`;return`${v}(${h}, ${$}, ${_})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let g=`__yo_create_${u}`,y=`__yo_dispose_${u}`;return`${g}(NULL, ${y}, ${_})`}else{if(e.$.type.tag==="SomeType"){let g=e.$.type;if(g.resolvedConcreteType)return n.implClosureCallMap.set(g.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${H(g.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function Kl(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 zo(e,t,n=""){var a,s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b,C,A,I,S,O,x,M,q,P;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return Kl(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return Kl(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let G=t.emitter;for(let z of r.smWhileBodyDrops){let K=B(z,n,t);K&&K.includes("sm->")&&G.emitLine(`${n}${K};`)}}if(r.smWhileContinueInfo.stepExpr){let G=t.emitter,z=B(r.smWhileContinueInfo.stepExpr,n,t);z&&G.emitLine(`${n}${z};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return Kl(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:G,activeIndex:z}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let K=t.emitter;for(let re of r.smWhileBodyDrops){let J=B(re,n,t);J&&J.includes("sm->")&&K.emitLine(`${n}${J};`)}}return z!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${z}_active = false;`),`goto ${G}`):`goto ${G}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let G=t.emitter,z=r.inAsyncStateMachine.futureType,re=En(z).isFuture.outputType,J=xe(re);if((a=e.$)!=null&&a.deferredDropExpressions)for(let ge of e.$.deferredDropExpressions){let Z=B(ge,n,t);Z&&Z.includes("sm->")&&G.emitLine(`${n}${Z};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){G.emitLine(`${n}// Drop local variables before early completion`);for(let ge of r.pendingDeferredDrops){let Z=B(ge,n,t);Z&&Z.includes("sm->")&&G.emitLine(`${n}${Z};`)}}G.emitLine(`${n}// Early return - complete the result Future`);let ue=J?void 0:`(${H(re,t)}){0}`;return fi({emitter:G,indent:n,resultCode:ue,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&xe(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let G=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(G))return me(G);let z=!1;if((u=e.$)!=null&&u.env){let K=le(e.$.env,G);if(K.length>0){let re=K[K.length-1],J=re.isOwningTheSameRcValueAs?re.isOwningTheSameRcValueAs.id:re.id;(c=r.variableIdRemapping)!=null&&c.has(J)&&(J=r.variableIdRemapping.get(J));let ue=r.stateMachineVariables.get(J);if(ue){let ge=ue.kind==="outer"?`__capture.${G}`:`var_${ue.id}`;return z=!0,`sm->${ge}`}}}if(!z){for(let[K,re]of r.stateMachineVariables)if(re.name===G){let J=re.kind==="outer"?`__capture.${G}`:`var_${K}`;return z=!0,`sm->${J}`}}if((f=e.$)!=null&&f.env){let K=le(e.$.env,G);if(K.length>0){let re=K[K.length-1];if(re.isOwningTheSameRcValueAs){let J=re.isOwningTheSameRcValueAs.name,ue=re.isOwningTheSameRcValueAs.id;for(let[ge,Z]of r.stateMachineVariables)if(Z.name===J||ge===ue)return`sm->${Z.kind==="outer"?`__capture.${J}`:`var_${ge}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(G)&&r.currentClosureCaptureFrameLevel!==void 0){let K=r.currentClosureCaptureTypeCName;return K?`((${K}*)closure_context)->${He(G,(p=e.$)==null?void 0:p.env)}`:`closure_context->${He(G,(_=e.$)==null?void 0:_.env)}`}if((m=e.$)!=null&&m.variableName){if((g=e.$)!=null&&g.env&&((y=e.$)!=null&&y.value)&&!Re(e.$.value)){let K=le(e.$.env,e.$.variableName);if(K.length>0&&K[K.length-1].isCompileTimeOnly)return Mn(e.$.value,t,e)}return He(e.$.variableName,e.$.env)}}if((h=e.$)!=null&&h.variableName){if((v=e.$)!=null&&v.env&&(($=e.$)!=null&&$.value)&&!Re(e.$.value)){let G=le(e.$.env,e.$.variableName);if(G.length>0&&G[G.length-1].isCompileTimeOnly)return Mn(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((E=e.$)!=null&&E.env)&&r.currentClosureCaptureFrameLevel!==void 0&&Jr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return He(e.$.variableName,(w=e.$)==null?void 0:w.env)}if((L=e.$)!=null&&L.value&&!Re(e.$.value))return Mn(e.$.value,t,e);let i=(b=e.$)!=null&&b.env&&r.currentClosureCaptureFrameLevel!==void 0?Jr(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((C=e.$)!=null&&C.env)||i)){let G=r.currentClosureCaptureTypeCName;return G?`((${G}*)closure_context)->${He(e.token.value,(A=e.$)==null?void 0:A.env)}`:`closure_context->${He(e.token.value,(I=e.$)==null?void 0:I.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let G=Object.values(r.functions).find(z=>z.cName===r.currentFunctionName);if(G&&G.value.type.isClosure){let z=Object.values(r.types).find(K=>ee(K.type)&&K.type.isClosure&&K.type===G.value.type);if(z)return`((${`${z.cName}_capture`}*)closure_context->data)->${He(e.token.value,(S=e.$)==null?void 0:S.env)}`}}if((O=e.$)!=null&&O.env){let G=le(e.$.env,e.token.value);if(G.length>0){let z=G[G.length-1];if((x=z.value)!=null&&x[0]&&ve(z.value[0])){let K=(M=t.functions[z.value[0].funcId])==null?void 0:M.cName;if(K)return K}else if(ee(z.type)&&(Re((q=z.value)==null?void 0:q[0])||z.value===void 0)){let K=Object.entries(t.functions).find(([re,J])=>J.value.funcName===e.token.value);if(K)return K[1].cName}}}return He(e.token.value,(P=e.$)==null?void 0:P.env)}function nf(e,t,n){var y,h,v,$,E,w,L,b,C,A,I,S,O;let r;if(Fn(e)){let x=(h=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder)==null?void 0:h[0],M=(v=x==null?void 0:x.$)==null?void 0:v.closureFunctionValue;M&&ve(M)&&(r=M.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=($=e.$)==null?void 0:$.type;if(!i||!Ke(i))return"/* Error: async block must have Future type */";let o=En(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 f=(w=e.$)==null?void 0:w.awaitAnalysis;if(!f)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let p=o.isFuture.outputType,_=H(p,n),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(""),(L=e.$)!=null&&L.captureType){let x=e.$.captureType,M=Object.values(n.types).find(P=>P.type===x),q=M?M.cName:`async_capture_${x.id}`;m.emitDeclarationLine(`${s}* ${u}(${q} __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:p,resultTypeCName:_,captureType:(b=e.$)==null?void 0:b.captureType,analysis:f});let g=(C=e.$)==null?void 0:C.captureType;if(g){let x=Object.values(n.types).find(ue=>ue.type===g),M=x?x.cName:`async_capture_${g.id}`,q=n,P=q.currentClosureCaptures!==void 0||q.inAsyncStateMachine!==void 0||q.inEffectStateMachine!==void 0,G=!1,z=g.fields.map(ue=>{var ce,X;if(ue.isEffectParam)return`.${ue.label} = NULL`;let ge;if(!P&&((ce=e.$)!=null&&ce.deferredDupExpressions))for(let pe of e.$.deferredDupExpressions){let Ce;if(N(pe)&&(pe.args.length>0&&Y(pe.args[0])?Ce=pe.args[0].token.value:pe.args.length===0&&N(pe.func)&&T(pe.func,".")&&pe.func.args.length>=2&&Y(pe.func.args[0])&&(Ce=pe.func.args[0].token.value)),Ce===ue.label){ge=pe;break}}if(ge)return G=!0,(X=ge.$)!=null&&X.variableName?(B(ge,t,n),`.${ue.label} = ${ge.$.variableName}`):`.${ue.label} = ${B(ge,t,n)}`;let Z={tag:"Atom",token:ue.exprs.expr.token,$:ue.exprs.expr.$};return`.${ue.label} = ${zo(Z,n)}`}).join(", "),K=`(${M}){${z}}`;if(!G){let ue=Cr(g,n);ue&&(K=`${ue}(${K})`)}let re=((A=e.$)==null?void 0:A.variableName)||"async_result",J=`${u}(${K})`;if(re&&((I=e.$)!=null&&I.type)){let ue=Ut(e.$.type,re,n);return n.emitter.emitLine(`${t}${ue} = ${J};`),re}else return J}else{let x=((S=e.$)==null?void 0:S.variableName)||"async_result",M=`${u}()`;if(x&&((O=e.$)!=null&&O.type)){let q=Ut(e.$.type,x,n);return n.emitter.emitLine(`${t}${q} = ${M};`),x}else return M}}function rf(e,t){var p;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${V(o)})`),n.emitDeclarationLine(`struct ${i}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(" int state; // Current state (0 = cold, 1..N = intermediate, -1 = completed, -2 = aborted)"),xe(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${V(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let _=Object.values(t.types).find(g=>g.type===s),m=_?_.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${m} __capture;`),n.emitDeclarationLine("")}let u=l.capturedVariables.filter(_=>_.kind!=="outer");if(u.length>0){n.emitDeclarationLine(" // Local variables");for(let _ of u){let m=H(_.type,t),g=Fa(_.id,"local");n.emitDeclarationLine(` ${m} ${g}; // ${_.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let _ of l.awaitPoints)if(!(xe(_.resultType)||U(_.resultType)&&!_.resultType.resolvedConcreteType)){let g=_.resultType;if(_.futureType){let h=En(_.futureType);h&&(g=h.isFuture.outputType)}let y=H(g,t);n.emitDeclarationLine(` ${y} await_result_${_.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let _=l.awaitPoints.filter(m=>m.futureVariableId===void 0);if(_.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let m of _){let g=m.expr;if(g.tag!=="FnCall")continue;let y=g.args[0],h=(p=y==null?void 0:y.$)==null?void 0:p.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let v=H(h,t);n.emitDeclarationLine(` ${v} await_future_${m.index};`)}n.emitDeclarationLine("")}}let c=l.awaitPoints.filter(_=>_.needsOwnCondBranchField);if(c.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let _ of c)n.emitDeclarationLine(` int cond_branch_${_.index}; // Which branch was taken in cond with await ${_.index}`);n.emitDeclarationLine("")}let f=l.awaitPoints.filter(_=>_.isInsideWhile);if(f.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let _=l.awaitPoints.length;for(let m of f){n.emitDeclarationLine(` _Bool while_loop_${m.index}_active; // Whether while loop ${m.index} should continue`);let g=(m.whileNestingDepth??1)-1;for(let y=0;y<g;y++)n.emitDeclarationLine(` _Bool while_loop_${_}_active; // Whether outer while loop ${_} should continue`),_++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function rg(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=f=>{let p=r.get(f);p.has(u.structName)||(p.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let f of u.analysis.capturedVariables){let p;try{p=H(f.type,e)}catch{continue}let _=n.get(p);_&&_.structName!==u.structName&&c(_.structName)}for(let f of u.analysis.awaitPoints){if(f.futureVariableId!==void 0)continue;let p=f.expr;if(p.tag!=="FnCall")continue;let _=p.args[0],m=(l=_==null?void 0:_.$)==null?void 0:l.type;if(!m)continue;let g;try{g=H(m,e)}catch{continue}let y=n.get(g);y&&y.structName!==u.structName&&c(y.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let f of c){let p=(i.get(f)??0)-1;i.set(f,p),p===0&&o.push(f)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)rf({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function ig(e,t,n,r,i,o,a,s){var u;let l=s.emitter;if(l.emitLine(`// Dispose function for async block ${e} state machine`),l.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),l.emitLine(`void ${n}(void* sm_ptr) {`),l.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),l.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),l.emitLine(""),i&&tt(i)){let c=Object.values(s.types).find(f=>f.type===i);if(!c)l.emitLine(" /* Error: capture struct type not found in context */");else{let f=c.cName,p=i.trait.fields.find(_=>_.label===k.___drop[0]);if(p&&p.assignedValue&&ve(p.assignedValue)){let _=(u=s.functions[p.assignedValue.funcId])==null?void 0:u.cName;_&&(l.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),l.emitLine(` ${_}(sm->__capture);`))}else l.emitLine(` /* Warning: ___drop function not found for capture struct ${f} */`)}}if(l.emitLine(""),!xe(r)&&tt(r)){let c=H(r,s);l.emitLine(" // Drop result field if it was set (state == -1 means completed)"),l.emitLine(" int final_state = sm->state;"),l.emitLine(" if (final_state == -1) {"),l.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let f=Qr(r,s);f?l.emitLine(` ${f}(sm->result);`):l.emitLine(` /* Warning: No ___drop function found for result type ${c} */`),l.emitLine(" }")}l.emitLine("");{let c=[];for(let f of o.capturedVariables){if(f.kind!=="local"||f.isOwningTheSameRcValueAs!==void 0)continue;let _=`sm->${Fa(f.id,"local")}`;if(Qe(f.type))c.push(` if ((${_}).data != NULL) { __yo_decr_rc((void*)(${_}).data); }`);else if(un(f.type)||rn(f.type))c.push(` if (${_} != NULL) { __yo_decr_rc_atomic((void*)${_}); }`);else if(Wt(f.type)||U(f.type)&&qn(f.type)){let m=Qr(f.type,s);m?c.push(` if (${_} != NULL) { ${m}(${_}); }`):c.push(` if (${_} != NULL) { __yo_decr_rc((void*)${_}); }`)}else if(tt(f.type)){let m=Qr(f.type,s);m&&c.push(` ${m}(${_});`)}}if(c.length>0){l.emitLine(" // Drop local variables on escape (state == -2)"),l.emitLine(" if (sm->state == -2) {");for(let f of c)l.emitLine(f);l.emitLine(" }")}}l.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),l.emitLine("}")}function og(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let f=Object.values(u.types).find(_=>_.type===l),p=f?f.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${p} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;"),c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`),c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),xe(a)?c.emitLine(" // Result is unit type, no initialization needed"):c.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),c.emitLine(""),c.emitLine(` sm->__yo_resume_fn = (void(*)(void*))${n};`),c.emitLine(""),c.emitLine(" return sm;"),c.emitLine("}"),c.emitLine("")}function of(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;rg(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:f,resultType:p,resultTypeCName:_,captureType:m,analysis:g}=r,y=e.stateMachineVariables,h=e.currentEvidenceParams,v=new Map;for(let E of g.capturedVariables)v.set(E.id,E);if(m)for(let E of m.fields)v.set(E.label,{id:E.label,name:E.label,type:E.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let $=Kc(o,a,s,l,g,f,m,e);if(e.stateMachineVariables=y,e.currentEvidenceParams=h,t.emitLine(""),ig(a,s,c,p,m,g,$,e),t.emitLine(""),og(a,s,l,u,c,f,p,_,m,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let E=e.deferredAsyncBlocks.slice(i);for(let w of E)rf({asyncBlockId:w.asyncBlockId,structName:w.structName,resultType:w.resultType,resultTypeCName:w.resultTypeCName,captureType:w.captureType,analysis:w.analysis},e)}n++}}function af(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&sf(n.body,e)}}function sf(e,t){var n,r,i,o,a;if(e&&N(e)){let s=e;if(Fn(e)){let l=(n=e.$)==null?void 0:n.type;if(l&&Ke(l)&&En(l)){let f=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=f),t.types[l.id]={type:l,cName:f},t.emitter.emitDeclarationLine(`typedef struct ${f}_struct ${f}; // Forward declaration for async state machine`)}}if(Fn(e)){let l=(i=e.$)==null?void 0:i.type;if(l&&Ke(l)&&En(l)){let c=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,f=!!((a=e.$)!=null&&a.awaitAnalysis),p=f?`${c}_state_t`:`${c}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[l.id]={type:l,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for io.async ${f?"state machine":"sync future"}`)}}for(let l of s.args)sf(l,t)}}function lf(e,t,n){var b,C,A,I,S;let r=(b=e.$)==null?void 0:b.type;if(!r||!Ke(r))return"/* Error: io.async must return a Future type */";let i=En(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType,a=H(o,n),s=(C=e.$)==null?void 0:C.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,f=(I=(A=e.$)==null?void 0:A.runtimeArgExprsInOrder)==null?void 0:I[0];if(!(f!=null&&f.$))return"/* Error: Missing closure argument for io.async */";let p=B(f,t,n),_=f.$.type,m,g;if(U(_)&&_.resolvedConcreteType){let O=_.resolvedConcreteType,x=n.implClosureCallMap.get(O.id);x&&(m=x.functionCName);let M=n.types[O.id];M&&(g=M.cName)}if(!m||!g)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;"),xe(o)?c.emitDeclarationLine(" uint8_t result;"):c.emitDeclarationLine(` ${a} result;`),c.emitDeclarationLine(" void (*continuation_fn)(void*);"),c.emitDeclarationLine(" void* continuation_sm;"),c.emitDeclarationLine(" void (*__yo_resume_fn)(void*);"),c.emitDeclarationLine(` ${g} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let y="";for(let O in n.functions){let x=n.functions[O];if(x.cName===m){let M=fn(x.value.type);M.length>0&&(y=", "+M.map(q=>`(void*)sm->__capture.${q.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),xe(o)?c.emitDeclarationLine(` ${m}(&sm->__capture${y});`):c.emitDeclarationLine(` sm->result = ${m}(&sm->__capture${y});`),y&&(c.emitDeclarationLine(" if (__yo_effect_escaped) {"),c.emitDeclarationLine(" __yo_effect_escaped = 0;"),c.emitDeclarationLine(" sm->state = -2;"),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=f.$.captureType,v=h&&tt(h)?Qr(h,n):void 0,$=h&&tt(h)?Cr(h,n):void 0,E=Qr(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 w=((S=e.$)==null?void 0:S.variableName)||"__io_async_result",L=Ut(r,w,n);return c.emitLine(`${t}${L} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${w}, 0, sizeof(${s}));`),c.emitLine(`${t}${w}->header.ref_count = 1;`),c.emitLine(`${t}${w}->header.gc_flags = 0;`),c.emitLine(`${t}${w}->header.gc_mark = YO_GC_UNMARKED;`),c.emitLine(`${t}${w}->header.gc_next = NULL;`),c.emitLine(`${t}${w}->header.gc_prev = NULL;`),c.emitLine(`${t}${w}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${w}->header.traverse_fn = NULL;`),c.emitLine(`${t}${w}->__capture = ${p};`),$&&c.emitLine(`${t}${w}->__capture = ${$}(${w}->__capture);`),c.emitLine(`${t}${w}->state = 0;`),c.emitLine(`${t}${w}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${w}->continuation_fn = NULL;`),c.emitLine(`${t}${w}->continuation_sm = NULL;`),w}function uf(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];ve(o)&&(pi(o.type,t),ro(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(pi(o.value.type,t),o.value.specializedType&&pi(o.value.specializedType,t),ro(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&$n(a.value.type,t),ro(a.body,t)}}}function pi(e,t){for(let n of e.parameters)$n(n.type,t);for(let n of e.forallParameters)$n(n.type,t);$n(e.return.type,t)}function ro(e,t){var n;if(e.$&&e.$.type&&$n(e.$.type,t),e.$&&e.$.value&&ve(e.$.value)){let r=e.$.value;r.isControlFunction?(pi(r.type,t),An(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>U(a)&&Ke(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:me(r.funcId)},pi(r.type,t),An(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)ro(r,t);if(e.$&&e.$.macroExpansion&&ro(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)$n(r,t);if(e.$&&e.$.captureType&&Me(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)$n(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&ve(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},pi(o.type,t),An(o.body,t))}}}switch(e.tag){case"FnCall":if(T(e,D.test))break;ro(e.func,t);for(let r of e.args)ro(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&W(e.$.value)&&$n(e.$.value.value,t);break}}function $n(e,t){if(!t.types[e.id]){if(U(e)&&xn(e)){if(e.resolvedConcreteType){$n(e.resolvedConcreteType,t);return}let n=Un(e);n&&$n(n,t);return}if(U(e)&&Ke(e)){let n=En(e);n&&$n(n.isFuture.outputType,t);return}if(U(e)&&e.resolvedConcreteType){$n(e.resolvedConcreteType,t);return}if(!et(e)){if(Me(e)||jt(e)||Ue(e)||Je(e)||Qe(e)||We(e)||st(e)||Lt(e)||un(e)||rn(e)){let n=Lt(e)?H(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Me(e))for(let r of e.fields)$n(r.type,t);if(Ue(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)$n(i.type,t)}if(jt(e))for(let r of e.fields)$n(r.type,t);if(Qe(e)){let r=e;for(let i of r.requiredTraits)$n(i.traitType,t)}if(un(e)){let r=e;$n(r.childType,t),H(r,t)}if(rn(e)){let r=e;$n(r.childType,t),H(r,t)}if(Lt(e)&&$n(e.childType,t),We(e)||st(e)){for(let r of e.fields)$n(r.type,t);for(let r of e.fields)if(r.assignedValue&&ve(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:me(i.funcId)},pi(i.type,t),An(i.body,t))}else if(r.assignedValue&&(vt(r.assignedValue)||Jt(r.assignedValue))){let i=r.assignedValue;Aa(i,t)}}}else if(Ze(e)){let n=e,r=n.childType,i=n.length;if(yt(i)){$n(r,t);let o=H(r,t),a=`Array_${me(o)}_${i.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),t.types[e.id]={type:e,cName:a}}}else if(it(e)){if($n(e.childType,t),Lt(e.childType)){let r=e.childType.childType;$n(r,t);let i=H(r,t),o=`Slice_${me(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:H(e,t)}}else Bc.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.trait&&$n(e.trait,t)}}}function io(e){var t,n,r;if(e.$&&e.$.value&&Re(e.$.value)&&!(ee(e.$.type)&&e.$.type.isExtern)){if(!xe(e.$.type))return!0}if(N(e)){if(io(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&xe(i.$.type))&&io(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&xe(e.$.type))return!1;if(io(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(io(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(io(i))return!0}return!1}function Aa(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];if(ve(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=me(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:me(r.funcId)};else t.functions[r.funcId]={value:r,cName:me(r.funcId)};An(r.body,t)}}}function cf(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&ve(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:me(r.funcId)},An(r.body,t)):r&&vt(r)&&cf(r,t)}}function An(e,t){var i,o,a,s,l,u,c,f,p,_,m;if((i=e.$)!=null&&i.value&&vt(e.$.value)){let g=e.$.value;cf(g,t)}if(N(e)&&T(e,D.test)||N(e)&&T(e,k.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&An(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let g=e.$.effectAnalysis.handlerValue;g&&ve(g)&&An(g.body,t)}if(e.$&&e.$.closureFunctionValue){let g=e.$.closureFunctionValue;t.functions[g.funcId]||(t.functions[g.funcId]={value:g,cName:me(g.funcId)},An(g.body,t))}if(N(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let g=e.$.type,y=e.args[0];if(Qe(g)&&y&&((a=y.$)!=null&&a.type)){let h=y.$.type,v=e.$.dynCallTraitValues;if(v.length>0&&(Wt(h)||or(h))){let $=or(h)?h.fields[0].type:h,E=`${$.id}_${g.id}`;t.dynImpls.set(E,{dynType:g,concreteType:$,dataType:h,traitValues:v})}}}if(N(e)){let g=(s=e.func.$)==null?void 0:s.type,y=(l=e.func.$)==null?void 0:l.value;if(e.func.token.value==="?=")return;if(ee(g)){if(ve(y)&&y.isControlFunction){An(y.body,t);for(let h of e.args)An(h,t);return}if(ve(y)){if(y.type.return.isCompileTimeOnly||Bs(y)&&!y.specializedType)return;if(y.specializedType&&Pr(y.specializedType)&&fn(y.specializedType).length===0){An(e.func,t);for(let v of e.args)An(v,t);return}if(!t.functions[y.funcId]){let h=!1;if(io(y.body)){let v=y.specializedType??y.type;if(h=v.implicitParameters.length>0&&(fn(v).length>0||!Pr(y.type)&&y.type.implicitParameters.length>0),!h)return}if(!h&&!(fn(y.specializedType??y.type).length>0)&&(y.specializedType??y.type).parameters.map(w=>w.type).some(w=>U(w)&&Ke(w)&&!w.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:me(y.funcId)},An(y.body,t)}}else if(g.isExtern==="c"){let h=g.externName?g.externName:Y(e.func)?e.func.token.value:g.id;t.externFunctions[g.id]={type:g,cName:h}}else if(g.isExtern==="yo"){let h=g.externName;if(!(h&&h.startsWith("__yo_"))){let v=h?me(h):Y(e.func)?me(e.func.token.value):me(g.id);t.externFunctions[g.id]={type:g,cName:v}}}}An(e.func,t);for(let h of e.args)An(h,t)}let n=(u=e.$)==null?void 0:u.type,r=(c=e.$)==null?void 0:c.value;if(ee(n)){if(ve(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:me(r.funcId)}),r.specializedFunctionCaches)for(let g of r.specializedFunctionCaches){let y=g.specializedFunction;y&&!t.functions[y.funcId]&&(y.isModuleEffectMember=!0,t.functions[y.funcId]={value:y,cName:me(y.funcId)},An(y.body,t))}An(r.body,t);return}if(ve(r)){if(Bs(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(io(r.body))return;t.functions[r.funcId]={value:r,cName:me(r.funcId)},An(r.body,t)}}if(W((f=e.$)==null?void 0:f.value)&&$n(e.$.value.value,t),(p=e.$)!=null&&p.deferredDupExpressions)for(let g of e.$.deferredDupExpressions)An(g,t);if((_=e.$)!=null&&_.deferredDropExpressions)for(let g of e.$.deferredDropExpressions)An(g,t);if((m=e.$)!=null&&m.dynCallTraitValues)for(let g of e.$.dynCallTraitValues)Aa(g,t)}function ff(e){let t=k.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Me(r)||!r.isReferenceSemantics)continue;let i=Xr({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&ve(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:me(a.funcId)},pi(a.type,e),An(a.body,e)}}}function _f(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 pf(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=U(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=H(s,e);t.emitLine(`${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(`void __yo_dispose_${u}(void* ptr) {`),t.emitLine(` ${u}* box = (${u}*)ptr;`);let p=(i=(U(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(_=>_.label===k.___drop[0]);if(p&&p.assignedValue&&ve(p.assignedValue)){let _=(o=e.functions[p.assignedValue.funcId])==null?void 0:o.cName;_&&t.emitLine(` ${_}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function df(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([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!ln(c))continue;let f=c.isFn.callType,p=H(f.return.type,e),_=`yo_wrap_${a}_call`,m=["void* self_ptr"];for(let g=0;g<f.parameters.length;g++){let y=f.parameters[g],h=H(y.type,e);m.push(`${h} arg${g+1}`)}if(t.emitDeclarationLine(`static ${p} ${_}(${m.join(", ")}) {`),or(l)){let g=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,y=me(l.fields[0].label);t.emitDeclarationLine(` ${g}* box = (${g}*)self_ptr;`);let h=l.fields[0].type,v=U(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,$=e.implClosureCallMap.get(v.id),E=(()=>{var L;if($)return $.functionCName;for(let[,b]of Object.entries(e.functions)){let A=b.value.closureInfo;if(((L=A==null?void 0:A.captureType)==null?void 0:L.id)===v.id)return b.cName}})(),w=[];if(E){w.push(`(void*)&box->${y}`);for(let L=0;L<f.parameters.length;L++)w.push(`arg${L+1}`);ri(f.return.type)?t.emitDeclarationLine(` ${E}(${w.join(", ")});`):t.emitDeclarationLine(` return ${E}(${w.join(", ")});`)}else{w.push(`box->${y}.data`);for(let L=0;L<f.parameters.length;L++)w.push(`arg${L+1}`);ri(f.return.type)?t.emitDeclarationLine(` box->${y}.call(${w.join(", ")});`):t.emitDeclarationLine(` return box->${y}.call(${w.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let g=0;g<f.parameters.length;g++)t.emitDeclarationLine(` (void)arg${g+1};`);ri(f.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${p} zero = (${p})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:f}=s.dynType.requiredTraits[c];if(ln(f))continue;let p=s.traitValues[c];if(!p){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let m=p.type.fields;for(let g=0;g<m.length;g++){let y=m[g];if(y.label==="Self"||u.has(y.label))continue;let h=p.fields[g];if(!h||!ve(h)){t.emitDeclarationLine(`/* Warning: Module field ${y.label} is not a function value */`);continue}let v=y.type;if(!ee(v)){t.emitDeclarationLine(`/* Warning: Module field ${y.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 ${y.label} not found */`);continue}let w=`yo_wrap_${a}_${y.label}`,L=H(v.return.type,e),b=["void* self_ptr"];for(let S=1;S<v.parameters.length;S++){let O=v.parameters[S],x=H(O.type,e);b.push(`${x} arg${S}`)}t.emitDeclarationLine(`static ${L} ${w}(${b.join(", ")}) {`);let C=(i=v.parameters[0])==null?void 0:i.type,A;if(or(l)){let S=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,O=me(l.fields[0].label);t.emitDeclarationLine(` ${S}* box = (${S}*)self_ptr;`),C&&it(C)?A=`&box->${O}`:A=`box->${O}`}else{let S=H(s.concreteType,e);t.emitDeclarationLine(` ${S} concrete_value = (${S})self_ptr;`),C&&it(C)?A="&concrete_value":A="concrete_value"}let I=[A];for(let S=1;S<v.parameters.length;S++)I.push(`arg${S}`);ri(v.return.type)?t.emitDeclarationLine(` ${E}(${I.join(", ")});`):t.emitDeclarationLine(` return ${E}(${I.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function mf(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=U(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=U(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,f=`yo_vtable_${a}`,p=`${l}_vtable`,_=`yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:y})=>y.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${p} ${f} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${_},`);let m=new Set,g=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:y}of s.dynType.requiredTraits){if(ln(y)){let h=`yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),m.add("call");continue}for(let h of y.fields)if(h.label!=="Self"&&!g.has(h.label)&&!m.has(h.label)&&(m.add(h.label),ee(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(` .${me(h.label)} = ${E},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function yf(e){e.emitLine(`
|
|
191
|
+
`)){let Ge=Ve.trim();Ge&&(l.emitLine(` ${Ge}`),g.push(Ge))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),fi({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=se,s.stateMachineVariables=he,s.variableIdRemapping=te}else s.inAsyncStateMachine=se,s.stateMachineVariables=he,s.variableIdRemapping=te;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),g}function Hl(e,t,n,r,i){let o=i.emitter,a=Yl(t,n);if(e.tag==="FnCall"&&T(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&sr(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"&&sr(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,D.cond)){Uo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,D.match)){Uo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,D.while)){Uo(e,t,0,r,i);return}if(e.tag==="FnCall"&&T(e,D.begin)){Uo(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Xc(e){if(on(e,"return")||T(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Xc(t))return!0}return!1}function Ky(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Xy(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=En(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=Ky(o.isFuture.effects),s=r.emitter,l=(p=e.args)==null?void 0:p.find(m=>N(m)&&T(m,D.using));if(l){let m=l.args;for(let g=0;g<a.length&&g<m.length;g++){let y=a[g],h=m[g];if(ee(y.type)){if(y.type.forallParameters.length>0)continue;let v=B(h,n,r),$=y.label;s.emitLine(`${n}${t}->__capture.${$} = (void*)${v};`)}else We(y.type)&&jc(y.type,t,n,(_=h.$)==null?void 0:_.value,r,e)}}else for(let m of a)if(ee(m.type)){if(m.type.forallParameters.length>0)continue;let g=Qy(m.label,r,e);g&&s.emitLine(`${n}${t}->__capture.${m.label} = (void*)${g};`)}else We(m.type)&&jc(m.type,t,n,void 0,r,e)}function jc(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let f of e.fields){if(!ee(f.type))continue;let p;if(i.stateMachineVariables){for(let[,_]of i.stateMachineVariables)if(_.name===f.label&&_.kind==="outer"){p=`sm->__capture.${f.label}`;break}}if(!p&&r&&vt(r)){let _=e.fields.indexOf(f),m=r.fields[_];if(m&&ve(m)){let g=i.functions[m.funcId];g&&(p=g.cName)}}if(!p&&i.currentEvidenceParams){for(let _ of i.currentEvidenceParams.values())if(_.fieldLabel===f.label){p=_.cParamName;break}}if(!p){let _=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(_){let m=Xn(_,g=>g.isImplicit===!0);for(let g=m.length-1;g>=0;g--){let y=m[g],h=(u=y.value)==null?void 0:u[y.value.length-1];if(h&&vt(h)){let v=h.type.fields.findIndex($=>$.label===f.label);if(v>=0){let $=h.fields[v];if($&&ve($)){let E=(c=i.functions[$.funcId])==null?void 0:c.cName;if(E){p=E;break}}}}}}}p&&a.emitLine(`${n}${t}->__capture.${f.label} = (void*)${p};`)}}function Qy(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 Zy=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_create","yo_thread_join","yo_thread_self"]);function Qc(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(Zy.has(l))continue;jl(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||jl(u,l,!0,e)}t.emitDeclarationLine(""),t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("void yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("void yo_future_dispose(void* ptr);"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Object constructors"),eg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),tg(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",f=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,p=f&&f.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!p&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&fn(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter(E=>E.isImplicit)].some(E=>ee(E.type)))continue;let m=u.specializedType??u.type,g=fn(m).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!p&&!g&&!u.isModuleEffectMember&&(Ur(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Li(u)||xo(u)||u.isIoAsyncStateMachineClosure))continue;let y=u.specializedType??u.type,h=!p&&!u.isModuleEffectMember&&(y.parameters.some(E=>et(E.type))||y.forallParameters.length>0),v=et(y.return.type),$=U(y.return.type)&&y.return.type.requiredTraits.length>0;h||v&&!$&&!u.isModuleEffectMember||jl(y,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&fn(y).length===0&&fn(u.type).some(E=>E.fieldFunctionType.forallParameters&&E.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function fn(e){let t=[],n=Jy(e.implicitParameters);for(let r of n)We(r.type)?Zc(r.label,r.type,[],t):ee(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:me(r.label)});return t}function Zc(e,t,n,r){for(let i of t.fields)if(ee(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:me(`${e}__${a}`)})}else We(i.type)&&Zc(e,i.type,[...n,i.label],r)}function Jy(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Jr(e,t,n,r,i){let o=r||H(e.return.type,n),a=e.parameters.filter(f=>!f.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((f,p)=>{let _=me(f.label||`param${p}`);if(ee(f.type))return Jr(f.type,"(*)",n).replace(" (*)(",` (*${_})(`);{let m;return U(f.type)&&Ke(f.type)?f.type.resolvedConcreteType?m=H(f.type.resolvedConcreteType,n)+"*":m=H(f.type,n):m=H(f.type,n),`${m} ${_}`}});s.push(...l);let u=fn(i??e);for(let f of u)if(f.fieldFunctionType.forallParameters&&f.fieldFunctionType.forallParameters.length>0)s.push(`void* ${f.cParamName}`);else{let p=Jr(f.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${f.cParamName})(`);s.push(p)}let c=s.join(", ");return`${o} ${t}(${c})`}function jl(e,t,n,r,i,o){var u,c,f,p;let a;if(i&&Ke(e.return.type)){let _=ba(i);(u=_==null?void 0:_.$)!=null&&u.asyncStateMachineStructName?a=`${_.$.asyncStateMachineStructName}*`:(c=i.$)!=null&&c.type&&U(i.$.type)&&Ke(i.$.type)&&(a=H(i.$.type,r))}if(i&&U(e.return.type)&&!Ke(e.return.type)&&(f=i.$)!=null&&f.type&&(a=H(i.$.type,r)),!a&&i&&((p=i.$)!=null&&p.type)&&!Ke(e.return.type)){let _=H(e.return.type,r),m=H(i.$.type,r);_!==m&&(a=m)}let s=a?Jr(e,t,r,a,o):Jr(e,t,r,void 0,o),l=V(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${s}; // ${l}`)}function eg(e){let t=e.emitter;t.emitDeclarationLine("void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Me(r)&&r.isReferenceSemantics){if(r.fields.some(l=>et(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=H(l.type,e),c=me(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`${i}* ${a}(${s}); // Constructor`)}}}function tg(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}}function Jc(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Li(r)||!o||!kr(r.type)||kr(o))continue;let a=o.parameters.some(u=>et(u.type)),s=et(o.return.type);a||s||fn(r.type).some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${Jr(o,i,e)}; // specialized function: ${V(r.type)}`))}}function ei(e,t,n){let r=le(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function ef(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&xn(e.$.type))}function ng(e,t,n,r,i,o=!1){var _;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((_=n.$)!=null&&_.deferredDupExpressions)for(let m of n.$.deferredDupExpressions){let g=Ts(m);g&&l.set(g,m)}let u=e.fields.map(m=>{var v,$;if(m.isEffectParam)return"NULL";let g,y=m.exprs.expr;if(($=(v=y.$)==null?void 0:v.deferredDupExpressions)!=null&&$.length&&(g=y.$.deferredDupExpressions[0]),!g){let E=[m.label];Y(y)&&E.push(y.token.value);for(let w of E){let L=l.get(w);if(L){g=L;break}}}if(g)return B(g,r,i);let h={tag:"Atom",token:y.token,$:y.$};return B(h,r,i)}),c=`(${s}){ ${u.map((m,g)=>{let y=e.fields[g];return y?`.${y.label} = ${m}`:`/* Error: missing field at index ${g} */`}).join(", ")} }`,f=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,p=`__capture_${t}_${f}`;return o?i.emitter.emitLine(`${r}${s} ${p} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${p} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${p} = ${c};`)),{captureTempVar:p,captureCName:s}}function tf(e,t,n){var m;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=Un(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=Qe(e.$.type),u;if(l){let g=n.types[e.$.type.id];if(!g)return"// Error: Dyn closure type not found in context";u=g.cName}let c=a&&Me(a)&&a.fields.length>0,f=H(i.return.type,n),p=i.parameters.map(g=>H(g.type,n)).join(", "),_=`(${f} (*)(void*${p?", "+p:""}))${s}`;if(c&&a&&Me(a)){let g=!l,y=ng(a,i.id,e,t,n,g);if(!y)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=y;if(l){let v=`__yo_create_${u}`,$=`__yo_dispose_${u}`;return`${v}(${h}, ${$}, ${_})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id}),h}else if(l){let g=`__yo_create_${u}`,y=`__yo_dispose_${u}`;return`${g}(NULL, ${y}, ${_})`}else{if(e.$.type.tag==="SomeType"){let g=e.$.type;if(g.resolvedConcreteType)return n.implClosureCallMap.set(g.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id}),`(${H(g.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function Kl(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 zo(e,t,n=""){var a,s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b,C,A,I,S,O,x,M,q,P;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return Kl(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return Kl(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let G=t.emitter;for(let z of r.smWhileBodyDrops){let K=B(z,n,t);K&&K.includes("sm->")&&G.emitLine(`${n}${K};`)}}if(r.smWhileContinueInfo.stepExpr){let G=t.emitter,z=B(r.smWhileContinueInfo.stepExpr,n,t);z&&G.emitLine(`${n}${z};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return Kl(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:G,activeIndex:z}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let K=t.emitter;for(let re of r.smWhileBodyDrops){let J=B(re,n,t);J&&J.includes("sm->")&&K.emitLine(`${n}${J};`)}}return z!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${z}_active = false;`),`goto ${G}`):`goto ${G}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let G=t.emitter,z=r.inAsyncStateMachine.futureType,re=En(z).isFuture.outputType,J=xe(re);if((a=e.$)!=null&&a.deferredDropExpressions)for(let ge of e.$.deferredDropExpressions){let Z=B(ge,n,t);Z&&Z.includes("sm->")&&G.emitLine(`${n}${Z};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){G.emitLine(`${n}// Drop local variables before early completion`);for(let ge of r.pendingDeferredDrops){let Z=B(ge,n,t);Z&&Z.includes("sm->")&&G.emitLine(`${n}${Z};`)}}G.emitLine(`${n}// Early return - complete the result Future`);let ue=J?void 0:`(${H(re,t)}){0}`;return fi({emitter:G,indent:n,resultCode:ue,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&xe(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let G=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(G))return me(G);let z=!1;if((u=e.$)!=null&&u.env){let K=le(e.$.env,G);if(K.length>0){let re=K[K.length-1],J=re.isOwningTheSameRcValueAs?re.isOwningTheSameRcValueAs.id:re.id;(c=r.variableIdRemapping)!=null&&c.has(J)&&(J=r.variableIdRemapping.get(J));let ue=r.stateMachineVariables.get(J);if(ue){let ge=ue.kind==="outer"?`__capture.${G}`:`var_${ue.id}`;return z=!0,`sm->${ge}`}}}if(!z){for(let[K,re]of r.stateMachineVariables)if(re.name===G){let J=re.kind==="outer"?`__capture.${G}`:`var_${K}`;return z=!0,`sm->${J}`}}if((f=e.$)!=null&&f.env){let K=le(e.$.env,G);if(K.length>0){let re=K[K.length-1];if(re.isOwningTheSameRcValueAs){let J=re.isOwningTheSameRcValueAs.name,ue=re.isOwningTheSameRcValueAs.id;for(let[ge,Z]of r.stateMachineVariables)if(Z.name===J||ge===ue)return`sm->${Z.kind==="outer"?`__capture.${J}`:`var_${ge}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(G)&&r.currentClosureCaptureFrameLevel!==void 0){let K=r.currentClosureCaptureTypeCName;return K?`((${K}*)closure_context)->${He(G,(p=e.$)==null?void 0:p.env)}`:`closure_context->${He(G,(_=e.$)==null?void 0:_.env)}`}if((m=e.$)!=null&&m.variableName){if((g=e.$)!=null&&g.env&&((y=e.$)!=null&&y.value)&&!Re(e.$.value)){let K=le(e.$.env,e.$.variableName);if(K.length>0&&K[K.length-1].isCompileTimeOnly)return Mn(e.$.value,t,e)}return He(e.$.variableName,e.$.env)}}if((h=e.$)!=null&&h.variableName){if((v=e.$)!=null&&v.env&&(($=e.$)!=null&&$.value)&&!Re(e.$.value)){let G=le(e.$.env,e.$.variableName);if(G.length>0&&G[G.length-1].isCompileTimeOnly)return Mn(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((E=e.$)!=null&&E.env)&&r.currentClosureCaptureFrameLevel!==void 0&&ei(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return He(e.$.variableName,(w=e.$)==null?void 0:w.env)}if((L=e.$)!=null&&L.value&&!Re(e.$.value))return Mn(e.$.value,t,e);let i=(b=e.$)!=null&&b.env&&r.currentClosureCaptureFrameLevel!==void 0?ei(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((C=e.$)!=null&&C.env)||i)){let G=r.currentClosureCaptureTypeCName;return G?`((${G}*)closure_context)->${He(e.token.value,(A=e.$)==null?void 0:A.env)}`:`closure_context->${He(e.token.value,(I=e.$)==null?void 0:I.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let G=Object.values(r.functions).find(z=>z.cName===r.currentFunctionName);if(G&&G.value.type.isClosure){let z=Object.values(r.types).find(K=>ee(K.type)&&K.type.isClosure&&K.type===G.value.type);if(z)return`((${`${z.cName}_capture`}*)closure_context->data)->${He(e.token.value,(S=e.$)==null?void 0:S.env)}`}}if((O=e.$)!=null&&O.env){let G=le(e.$.env,e.token.value);if(G.length>0){let z=G[G.length-1];if((x=z.value)!=null&&x[0]&&ve(z.value[0])){let K=(M=t.functions[z.value[0].funcId])==null?void 0:M.cName;if(K)return K}else if(ee(z.type)&&(Re((q=z.value)==null?void 0:q[0])||z.value===void 0)){let K=Object.entries(t.functions).find(([re,J])=>J.value.funcName===e.token.value);if(K)return K[1].cName}}}return He(e.token.value,(P=e.$)==null?void 0:P.env)}function nf(e,t,n){var y,h,v,$,E,w,L,b,C,A,I,S,O;let r;if(Fn(e)){let x=(h=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder)==null?void 0:h[0],M=(v=x==null?void 0:x.$)==null?void 0:v.closureFunctionValue;M&&ve(M)&&(r=M.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=($=e.$)==null?void 0:$.type;if(!i||!Ke(i))return"/* Error: async block must have Future type */";let o=En(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 f=(w=e.$)==null?void 0:w.awaitAnalysis;if(!f)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let p=o.isFuture.outputType,_=H(p,n),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(""),(L=e.$)!=null&&L.captureType){let x=e.$.captureType,M=Object.values(n.types).find(P=>P.type===x),q=M?M.cName:`async_capture_${x.id}`;m.emitDeclarationLine(`${s}* ${u}(${q} __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:p,resultTypeCName:_,captureType:(b=e.$)==null?void 0:b.captureType,analysis:f});let g=(C=e.$)==null?void 0:C.captureType;if(g){let x=Object.values(n.types).find(ue=>ue.type===g),M=x?x.cName:`async_capture_${g.id}`,q=n,P=q.currentClosureCaptures!==void 0||q.inAsyncStateMachine!==void 0||q.inEffectStateMachine!==void 0,G=!1,z=g.fields.map(ue=>{var ce,X;if(ue.isEffectParam)return`.${ue.label} = NULL`;let ge;if(!P&&((ce=e.$)!=null&&ce.deferredDupExpressions))for(let pe of e.$.deferredDupExpressions){let Ce;if(N(pe)&&(pe.args.length>0&&Y(pe.args[0])?Ce=pe.args[0].token.value:pe.args.length===0&&N(pe.func)&&T(pe.func,".")&&pe.func.args.length>=2&&Y(pe.func.args[0])&&(Ce=pe.func.args[0].token.value)),Ce===ue.label){ge=pe;break}}if(ge)return G=!0,(X=ge.$)!=null&&X.variableName?(B(ge,t,n),`.${ue.label} = ${ge.$.variableName}`):`.${ue.label} = ${B(ge,t,n)}`;let Z={tag:"Atom",token:ue.exprs.expr.token,$:ue.exprs.expr.$};return`.${ue.label} = ${zo(Z,n)}`}).join(", "),K=`(${M}){${z}}`;if(!G){let ue=Cr(g,n);ue&&(K=`${ue}(${K})`)}let re=((A=e.$)==null?void 0:A.variableName)||"async_result",J=`${u}(${K})`;if(re&&((I=e.$)!=null&&I.type)){let ue=Ut(e.$.type,re,n);return n.emitter.emitLine(`${t}${ue} = ${J};`),re}else return J}else{let x=((S=e.$)==null?void 0:S.variableName)||"async_result",M=`${u}()`;if(x&&((O=e.$)!=null&&O.type)){let q=Ut(e.$.type,x,n);return n.emitter.emitLine(`${t}${q} = ${M};`),x}else return M}}function rf(e,t){var p;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${V(o)})`),n.emitDeclarationLine(`struct ${i}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(" int state; // Current state (0 = cold, 1..N = intermediate, -1 = completed, -2 = aborted)"),xe(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${V(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let _=Object.values(t.types).find(g=>g.type===s),m=_?_.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${m} __capture;`),n.emitDeclarationLine("")}let u=l.capturedVariables.filter(_=>_.kind!=="outer");if(u.length>0){n.emitDeclarationLine(" // Local variables");for(let _ of u){let m=H(_.type,t),g=Fa(_.id,"local");n.emitDeclarationLine(` ${m} ${g}; // ${_.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let _ of l.awaitPoints)if(!(xe(_.resultType)||U(_.resultType)&&!_.resultType.resolvedConcreteType)){let g=_.resultType;if(_.futureType){let h=En(_.futureType);h&&(g=h.isFuture.outputType)}let y=H(g,t);n.emitDeclarationLine(` ${y} await_result_${_.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let _=l.awaitPoints.filter(m=>m.futureVariableId===void 0);if(_.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let m of _){let g=m.expr;if(g.tag!=="FnCall")continue;let y=g.args[0],h=(p=y==null?void 0:y.$)==null?void 0:p.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let v=H(h,t);n.emitDeclarationLine(` ${v} await_future_${m.index};`)}n.emitDeclarationLine("")}}let c=l.awaitPoints.filter(_=>_.needsOwnCondBranchField);if(c.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let _ of c)n.emitDeclarationLine(` int cond_branch_${_.index}; // Which branch was taken in cond with await ${_.index}`);n.emitDeclarationLine("")}let f=l.awaitPoints.filter(_=>_.isInsideWhile);if(f.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let _=l.awaitPoints.length;for(let m of f){n.emitDeclarationLine(` _Bool while_loop_${m.index}_active; // Whether while loop ${m.index} should continue`);let g=(m.whileNestingDepth??1)-1;for(let y=0;y<g;y++)n.emitDeclarationLine(` _Bool while_loop_${_}_active; // Whether outer while loop ${_} should continue`),_++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function rg(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=f=>{let p=r.get(f);p.has(u.structName)||(p.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let f of u.analysis.capturedVariables){let p;try{p=H(f.type,e)}catch{continue}let _=n.get(p);_&&_.structName!==u.structName&&c(_.structName)}for(let f of u.analysis.awaitPoints){if(f.futureVariableId!==void 0)continue;let p=f.expr;if(p.tag!=="FnCall")continue;let _=p.args[0],m=(l=_==null?void 0:_.$)==null?void 0:l.type;if(!m)continue;let g;try{g=H(m,e)}catch{continue}let y=n.get(g);y&&y.structName!==u.structName&&c(y.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let f of c){let p=(i.get(f)??0)-1;i.set(f,p),p===0&&o.push(f)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)rf({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function ig(e,t,n,r,i,o,a,s){var u;let l=s.emitter;if(l.emitLine(`// Dispose function for async block ${e} state machine`),l.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),l.emitLine(`void ${n}(void* sm_ptr) {`),l.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),l.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),l.emitLine(""),i&&tt(i)){let c=Object.values(s.types).find(f=>f.type===i);if(!c)l.emitLine(" /* Error: capture struct type not found in context */");else{let f=c.cName,p=i.trait.fields.find(_=>_.label===k.___drop[0]);if(p&&p.assignedValue&&ve(p.assignedValue)){let _=(u=s.functions[p.assignedValue.funcId])==null?void 0:u.cName;_&&(l.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),l.emitLine(` ${_}(sm->__capture);`))}else l.emitLine(` /* Warning: ___drop function not found for capture struct ${f} */`)}}if(l.emitLine(""),!xe(r)&&tt(r)){let c=H(r,s);l.emitLine(" // Drop result field if it was set (state == -1 means completed)"),l.emitLine(" int final_state = sm->state;"),l.emitLine(" if (final_state == -1) {"),l.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let f=Zr(r,s);f?l.emitLine(` ${f}(sm->result);`):l.emitLine(` /* Warning: No ___drop function found for result type ${c} */`),l.emitLine(" }")}l.emitLine("");{let c=[];for(let f of o.capturedVariables){if(f.kind!=="local"||f.isOwningTheSameRcValueAs!==void 0)continue;let _=`sm->${Fa(f.id,"local")}`;if(Qe(f.type))c.push(` if ((${_}).data != NULL) { __yo_decr_rc((void*)(${_}).data); }`);else if(un(f.type)||rn(f.type))c.push(` if (${_} != NULL) { __yo_decr_rc_atomic((void*)${_}); }`);else if(Wt(f.type)||U(f.type)&&qn(f.type)){let m=Zr(f.type,s);m?c.push(` if (${_} != NULL) { ${m}(${_}); }`):c.push(` if (${_} != NULL) { __yo_decr_rc((void*)${_}); }`)}else if(tt(f.type)){let m=Zr(f.type,s);m&&c.push(` ${m}(${_});`)}}if(c.length>0){l.emitLine(" // Drop local variables on escape (state == -2)"),l.emitLine(" if (sm->state == -2) {");for(let f of c)l.emitLine(f);l.emitLine(" }")}}l.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),l.emitLine("}")}function og(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let f=Object.values(u.types).find(_=>_.type===l),p=f?f.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${p} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;"),c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`),c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),xe(a)?c.emitLine(" // Result is unit type, no initialization needed"):c.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),c.emitLine(""),c.emitLine(` sm->__yo_resume_fn = (void(*)(void*))${n};`),c.emitLine(""),c.emitLine(" return sm;"),c.emitLine("}"),c.emitLine("")}function of(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;rg(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:f,resultType:p,resultTypeCName:_,captureType:m,analysis:g}=r,y=e.stateMachineVariables,h=e.currentEvidenceParams,v=new Map;for(let E of g.capturedVariables)v.set(E.id,E);if(m)for(let E of m.fields)v.set(E.label,{id:E.label,name:E.label,type:E.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let $=Kc(o,a,s,l,g,f,m,e);if(e.stateMachineVariables=y,e.currentEvidenceParams=h,t.emitLine(""),ig(a,s,c,p,m,g,$,e),t.emitLine(""),og(a,s,l,u,c,f,p,_,m,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let E=e.deferredAsyncBlocks.slice(i);for(let w of E)rf({asyncBlockId:w.asyncBlockId,structName:w.structName,resultType:w.resultType,resultTypeCName:w.resultTypeCName,captureType:w.captureType,analysis:w.analysis},e)}n++}}function af(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&sf(n.body,e)}}function sf(e,t){var n,r,i,o,a;if(e&&N(e)){let s=e;if(Fn(e)){let l=(n=e.$)==null?void 0:n.type;if(l&&Ke(l)&&En(l)){let f=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=f),t.types[l.id]={type:l,cName:f},t.emitter.emitDeclarationLine(`typedef struct ${f}_struct ${f}; // Forward declaration for async state machine`)}}if(Fn(e)){let l=(i=e.$)==null?void 0:i.type;if(l&&Ke(l)&&En(l)){let c=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,f=!!((a=e.$)!=null&&a.awaitAnalysis),p=f?`${c}_state_t`:`${c}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[l.id]={type:l,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for io.async ${f?"state machine":"sync future"}`)}}for(let l of s.args)sf(l,t)}}function lf(e,t,n){var b,C,A,I,S;let r=(b=e.$)==null?void 0:b.type;if(!r||!Ke(r))return"/* Error: io.async must return a Future type */";let i=En(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType,a=H(o,n),s=(C=e.$)==null?void 0:C.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,f=(I=(A=e.$)==null?void 0:A.runtimeArgExprsInOrder)==null?void 0:I[0];if(!(f!=null&&f.$))return"/* Error: Missing closure argument for io.async */";let p=B(f,t,n),_=f.$.type,m,g;if(U(_)&&_.resolvedConcreteType){let O=_.resolvedConcreteType,x=n.implClosureCallMap.get(O.id);x&&(m=x.functionCName);let M=n.types[O.id];M&&(g=M.cName)}if(!m||!g)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;"),xe(o)?c.emitDeclarationLine(" uint8_t result;"):c.emitDeclarationLine(` ${a} result;`),c.emitDeclarationLine(" void (*continuation_fn)(void*);"),c.emitDeclarationLine(" void* continuation_sm;"),c.emitDeclarationLine(" void (*__yo_resume_fn)(void*);"),c.emitDeclarationLine(` ${g} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let y="";for(let O in n.functions){let x=n.functions[O];if(x.cName===m){let M=fn(x.value.type);M.length>0&&(y=", "+M.map(q=>`(void*)sm->__capture.${q.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),xe(o)?c.emitDeclarationLine(` ${m}(&sm->__capture${y});`):c.emitDeclarationLine(` sm->result = ${m}(&sm->__capture${y});`),y&&(c.emitDeclarationLine(" if (__yo_effect_escaped) {"),c.emitDeclarationLine(" __yo_effect_escaped = 0;"),c.emitDeclarationLine(" sm->state = -2;"),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=f.$.captureType,v=h&&tt(h)?Zr(h,n):void 0,$=h&&tt(h)?Cr(h,n):void 0,E=Zr(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 w=((S=e.$)==null?void 0:S.variableName)||"__io_async_result",L=Ut(r,w,n);return c.emitLine(`${t}${L} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${w}, 0, sizeof(${s}));`),c.emitLine(`${t}${w}->header.ref_count = 1;`),c.emitLine(`${t}${w}->header.gc_flags = 0;`),c.emitLine(`${t}${w}->header.gc_mark = YO_GC_UNMARKED;`),c.emitLine(`${t}${w}->header.gc_next = NULL;`),c.emitLine(`${t}${w}->header.gc_prev = NULL;`),c.emitLine(`${t}${w}->header.dispose_fn = (void(*)(void*))${l};`),c.emitLine(`${t}${w}->header.traverse_fn = NULL;`),c.emitLine(`${t}${w}->__capture = ${p};`),$&&c.emitLine(`${t}${w}->__capture = ${$}(${w}->__capture);`),c.emitLine(`${t}${w}->state = 0;`),c.emitLine(`${t}${w}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${w}->continuation_fn = NULL;`),c.emitLine(`${t}${w}->continuation_sm = NULL;`),w}function uf(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];ve(o)&&(pi(o.type,t),ro(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(pi(o.value.type,t),o.value.specializedType&&pi(o.value.specializedType,t),ro(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&$n(a.value.type,t),ro(a.body,t)}}}function pi(e,t){for(let n of e.parameters)$n(n.type,t);for(let n of e.forallParameters)$n(n.type,t);$n(e.return.type,t)}function ro(e,t){var n;if(e.$&&e.$.type&&$n(e.$.type,t),e.$&&e.$.value&&ve(e.$.value)){let r=e.$.value;r.isControlFunction?(pi(r.type,t),An(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>U(a)&&Ke(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:me(r.funcId)},pi(r.type,t),An(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)ro(r,t);if(e.$&&e.$.macroExpansion&&ro(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)$n(r,t);if(e.$&&e.$.captureType&&Me(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)$n(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&ve(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},pi(o.type,t),An(o.body,t))}}}switch(e.tag){case"FnCall":if(T(e,D.test))break;ro(e.func,t);for(let r of e.args)ro(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&W(e.$.value)&&$n(e.$.value.value,t);break}}function $n(e,t){if(!t.types[e.id]){if(U(e)&&xn(e)){if(e.resolvedConcreteType){$n(e.resolvedConcreteType,t);return}let n=Un(e);n&&$n(n,t);return}if(U(e)&&Ke(e)){let n=En(e);n&&$n(n.isFuture.outputType,t);return}if(U(e)&&e.resolvedConcreteType){$n(e.resolvedConcreteType,t);return}if(!et(e)){if(Me(e)||jt(e)||Ue(e)||Je(e)||Qe(e)||We(e)||st(e)||Lt(e)||un(e)||rn(e)){let n=Lt(e)?H(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Me(e))for(let r of e.fields)$n(r.type,t);if(Ue(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)$n(i.type,t)}if(jt(e))for(let r of e.fields)$n(r.type,t);if(Qe(e)){let r=e;for(let i of r.requiredTraits)$n(i.traitType,t)}if(un(e)){let r=e;$n(r.childType,t),H(r,t)}if(rn(e)){let r=e;$n(r.childType,t),H(r,t)}if(Lt(e)&&$n(e.childType,t),We(e)||st(e)){for(let r of e.fields)$n(r.type,t);for(let r of e.fields)if(r.assignedValue&&ve(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:me(i.funcId)},pi(i.type,t),An(i.body,t))}else if(r.assignedValue&&(vt(r.assignedValue)||Jt(r.assignedValue))){let i=r.assignedValue;Aa(i,t)}}}else if(Ze(e)){let n=e,r=n.childType,i=n.length;if(yt(i)){$n(r,t);let o=H(r,t),a=`Array_${me(o)}_${i.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),t.types[e.id]={type:e,cName:a}}}else if(it(e)){if($n(e.childType,t),Lt(e.childType)){let r=e.childType.childType;$n(r,t);let i=H(r,t),o=`Slice_${me(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:H(e,t)}}else Bc.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.trait&&$n(e.trait,t)}}}function io(e){var t,n,r;if(e.$&&e.$.value&&Re(e.$.value)&&!(ee(e.$.type)&&e.$.type.isExtern)){if(!xe(e.$.type))return!0}if(N(e)){if(io(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&xe(i.$.type))&&io(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&xe(e.$.type))return!1;if(io(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(io(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(io(i))return!0}return!1}function Aa(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],i=e.type.fields[n];if(ve(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=me(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:me(r.funcId)};else t.functions[r.funcId]={value:r,cName:me(r.funcId)};An(r.body,t)}}}function cf(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&ve(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:me(r.funcId)},An(r.body,t)):r&&vt(r)&&cf(r,t)}}function An(e,t){var i,o,a,s,l,u,c,f,p,_,m;if((i=e.$)!=null&&i.value&&vt(e.$.value)){let g=e.$.value;cf(g,t)}if(N(e)&&T(e,D.test)||N(e)&&T(e,k.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&An(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let g=e.$.effectAnalysis.handlerValue;g&&ve(g)&&An(g.body,t)}if(e.$&&e.$.closureFunctionValue){let g=e.$.closureFunctionValue;t.functions[g.funcId]||(t.functions[g.funcId]={value:g,cName:me(g.funcId)},An(g.body,t))}if(N(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let g=e.$.type,y=e.args[0];if(Qe(g)&&y&&((a=y.$)!=null&&a.type)){let h=y.$.type,v=e.$.dynCallTraitValues;if(v.length>0&&(Wt(h)||or(h))){let $=or(h)?h.fields[0].type:h,E=`${$.id}_${g.id}`;t.dynImpls.set(E,{dynType:g,concreteType:$,dataType:h,traitValues:v})}}}if(N(e)){let g=(s=e.func.$)==null?void 0:s.type,y=(l=e.func.$)==null?void 0:l.value;if(e.func.token.value==="?=")return;if(ee(g)){if(ve(y)&&y.isControlFunction){An(y.body,t);for(let h of e.args)An(h,t);return}if(ve(y)){if(y.type.return.isCompileTimeOnly||Bs(y)&&!y.specializedType)return;if(y.specializedType&&Ur(y.specializedType)&&fn(y.specializedType).length===0){An(e.func,t);for(let v of e.args)An(v,t);return}if(!t.functions[y.funcId]){let h=!1;if(io(y.body)){let v=y.specializedType??y.type;if(h=v.implicitParameters.length>0&&(fn(v).length>0||!Ur(y.type)&&y.type.implicitParameters.length>0),!h)return}if(!h&&!(fn(y.specializedType??y.type).length>0)&&(y.specializedType??y.type).parameters.map(w=>w.type).some(w=>U(w)&&Ke(w)&&!w.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:me(y.funcId)},An(y.body,t)}}else if(g.isExtern==="c"){let h=g.externName?g.externName:Y(e.func)?e.func.token.value:g.id;t.externFunctions[g.id]={type:g,cName:h}}else if(g.isExtern==="yo"){let h=g.externName;if(!(h&&h.startsWith("__yo_"))){let v=h?me(h):Y(e.func)?me(e.func.token.value):me(g.id);t.externFunctions[g.id]={type:g,cName:v}}}}An(e.func,t);for(let h of e.args)An(h,t)}let n=(u=e.$)==null?void 0:u.type,r=(c=e.$)==null?void 0:c.value;if(ee(n)){if(ve(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:me(r.funcId)}),r.specializedFunctionCaches)for(let g of r.specializedFunctionCaches){let y=g.specializedFunction;y&&!t.functions[y.funcId]&&(y.isModuleEffectMember=!0,t.functions[y.funcId]={value:y,cName:me(y.funcId)},An(y.body,t))}An(r.body,t);return}if(ve(r)){if(Bs(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(io(r.body))return;t.functions[r.funcId]={value:r,cName:me(r.funcId)},An(r.body,t)}}if(W((f=e.$)==null?void 0:f.value)&&$n(e.$.value.value,t),(p=e.$)!=null&&p.deferredDupExpressions)for(let g of e.$.deferredDupExpressions)An(g,t);if((_=e.$)!=null&&_.deferredDropExpressions)for(let g of e.$.deferredDropExpressions)An(g,t);if((m=e.$)!=null&&m.dynCallTraitValues)for(let g of e.$.dynCallTraitValues)Aa(g,t)}function ff(e){let t=k.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Me(r)||!r.isReferenceSemantics)continue;let i=Qr({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&ve(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:me(a.funcId)},pi(a.type,e),An(a.body,e)}}}function _f(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 pf(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=U(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=H(s,e);t.emitLine(`${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(`void __yo_dispose_${u}(void* ptr) {`),t.emitLine(` ${u}* box = (${u}*)ptr;`);let p=(i=(U(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(_=>_.label===k.___drop[0]);if(p&&p.assignedValue&&ve(p.assignedValue)){let _=(o=e.functions[p.assignedValue.funcId])==null?void 0:o.cName;_&&t.emitLine(` ${_}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function df(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([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!ln(c))continue;let f=c.isFn.callType,p=H(f.return.type,e),_=`yo_wrap_${a}_call`,m=["void* self_ptr"];for(let g=0;g<f.parameters.length;g++){let y=f.parameters[g],h=H(y.type,e);m.push(`${h} arg${g+1}`)}if(t.emitDeclarationLine(`static ${p} ${_}(${m.join(", ")}) {`),or(l)){let g=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,y=me(l.fields[0].label);t.emitDeclarationLine(` ${g}* box = (${g}*)self_ptr;`);let h=l.fields[0].type,v=U(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,$=e.implClosureCallMap.get(v.id),E=(()=>{var L;if($)return $.functionCName;for(let[,b]of Object.entries(e.functions)){let A=b.value.closureInfo;if(((L=A==null?void 0:A.captureType)==null?void 0:L.id)===v.id)return b.cName}})(),w=[];if(E){w.push(`(void*)&box->${y}`);for(let L=0;L<f.parameters.length;L++)w.push(`arg${L+1}`);ii(f.return.type)?t.emitDeclarationLine(` ${E}(${w.join(", ")});`):t.emitDeclarationLine(` return ${E}(${w.join(", ")});`)}else{w.push(`box->${y}.data`);for(let L=0;L<f.parameters.length;L++)w.push(`arg${L+1}`);ii(f.return.type)?t.emitDeclarationLine(` box->${y}.call(${w.join(", ")});`):t.emitDeclarationLine(` return box->${y}.call(${w.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let g=0;g<f.parameters.length;g++)t.emitDeclarationLine(` (void)arg${g+1};`);ii(f.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${p} zero = (${p})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:f}=s.dynType.requiredTraits[c];if(ln(f))continue;let p=s.traitValues[c];if(!p){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let m=p.type.fields;for(let g=0;g<m.length;g++){let y=m[g];if(y.label==="Self"||u.has(y.label))continue;let h=p.fields[g];if(!h||!ve(h)){t.emitDeclarationLine(`/* Warning: Module field ${y.label} is not a function value */`);continue}let v=y.type;if(!ee(v)){t.emitDeclarationLine(`/* Warning: Module field ${y.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 ${y.label} not found */`);continue}let w=`yo_wrap_${a}_${y.label}`,L=H(v.return.type,e),b=["void* self_ptr"];for(let S=1;S<v.parameters.length;S++){let O=v.parameters[S],x=H(O.type,e);b.push(`${x} arg${S}`)}t.emitDeclarationLine(`static ${L} ${w}(${b.join(", ")}) {`);let C=(i=v.parameters[0])==null?void 0:i.type,A;if(or(l)){let S=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,O=me(l.fields[0].label);t.emitDeclarationLine(` ${S}* box = (${S}*)self_ptr;`),C&&it(C)?A=`&box->${O}`:A=`box->${O}`}else{let S=H(s.concreteType,e);t.emitDeclarationLine(` ${S} concrete_value = (${S})self_ptr;`),C&&it(C)?A="&concrete_value":A="concrete_value"}let I=[A];for(let S=1;S<v.parameters.length;S++)I.push(`arg${S}`);ii(v.return.type)?t.emitDeclarationLine(` ${E}(${I.join(", ")});`):t.emitDeclarationLine(` return ${E}(${I.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function mf(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=U(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=U(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,f=`yo_vtable_${a}`,p=`${l}_vtable`,_=`yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:y})=>y.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${p} ${f} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${_},`);let m=new Set,g=new Set([k.___dup[0],k.___drop[0],k.___dispose[0],k.dispose[0]]);for(let{traitType:y}of s.dynType.requiredTraits){if(ln(y)){let h=`yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),m.add("call");continue}for(let h of y.fields)if(h.label!=="Self"&&!g.has(h.label)&&!m.has(h.label)&&(m.add(h.label),ee(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(` .${me(h.label)} = ${E},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function yf(e){e.emitLine(`
|
|
192
192
|
// ============================================================================
|
|
193
193
|
// Async/Await Runtime - Single-Threaded Cooperative Scheduler
|
|
194
194
|
// ============================================================================
|
|
@@ -9528,7 +9528,7 @@ static int __yo_poll_and_fs_event_tick(void) {
|
|
|
9528
9528
|
}
|
|
9529
9529
|
|
|
9530
9530
|
#endif // _WIN32
|
|
9531
|
-
`)}function Ef(e,t){yf(e),hf(e),vf(e),Tf(e),gf(e)}function ag(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Mt(e,n,r);let a=e.$.deferredDupExpressions[0];if(N(a)&&((o=a.$)!=null&&o.variableName))return He(a.$.variableName,a.$.env)}return t}function sg(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=H(e.$.type,n),c=me(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=B(e,t,n);n.emitter.emitLine(`${t}${s};`)}Mt(e,t,n);let a=e.$.deferredDupExpressions[0];if(N(a)&&((o=a.$)!=null&&o.variableName))return He(a.$.variableName,a.$.env)}return B(e,t,n)}function lg(e){var t,n;if(N(e)&&T(e,k.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&Y(r))return He(r.token.value,(t=r.$)==null?void 0:t.env)}if(N(e)&&e.args.length===0&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&Y(e.func.args[0])){let r=e.func.args[0];return He(r.token.value,(n=r.$)==null?void 0:n.env)}}function Qn(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let f of n.$.deferredDropExpressions){let p=yr(f);p&&l.add(p)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(f=>{let p=yr(f);return!p||l.has(p)?!1:le(n.$.env,p).length>0}):t.pendingDeferredDrops.filter(f=>{let p=yr(f);if(!p||l.has(p))return!1;if(u&&u.size>0){let _=lg(f);if(_&&u.has(_))return!1}return!0});if(c.length>0){let f=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${f}`);for(let p of c){let _=B(p,e,t);_&&t.emitter.emitLine(`${e}${_};`)}}}}function
|
|
9531
|
+
`)}function Ef(e,t){yf(e),hf(e),vf(e),Tf(e),gf(e)}function ag(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Mt(e,n,r);let a=e.$.deferredDupExpressions[0];if(N(a)&&((o=a.$)!=null&&o.variableName))return He(a.$.variableName,a.$.env)}return t}function sg(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=H(e.$.type,n),c=me(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=B(e,t,n);n.emitter.emitLine(`${t}${s};`)}Mt(e,t,n);let a=e.$.deferredDupExpressions[0];if(N(a)&&((o=a.$)!=null&&o.variableName))return He(a.$.variableName,a.$.env)}return B(e,t,n)}function lg(e){var t,n;if(N(e)&&T(e,k.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&Y(r))return He(r.token.value,(t=r.$)==null?void 0:t.env)}if(N(e)&&e.args.length===0&&N(e.func)&&T(e.func,".",2)&&Y(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&Y(e.func.args[0])){let r=e.func.args[0];return He(r.token.value,(n=r.$)==null?void 0:n.env)}}function Qn(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let f of n.$.deferredDropExpressions){let p=yr(f);p&&l.add(p)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(f=>{let p=yr(f);return!p||l.has(p)?!1:le(n.$.env,p).length>0}):t.pendingDeferredDrops.filter(f=>{let p=yr(f);if(!p||l.has(p))return!1;if(u&&u.size>0){let _=lg(f);if(_&&u.has(_))return!1}return!0});if(c.length>0){let f=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${f}`);for(let p of c){let _=B(p,e,t);_&&t.emitter.emitLine(`${e}${_};`)}}}}function Pr(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=yr(a);return s?le(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 $f(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let f=r.continuationVariables.get("resume");if(f&&"directReturnVar"in f){if(!f.isUnitReturn){let p=e.args[0];if(p){let _=B(p,t,n);_&&n.emitter.emitLine(`${t}${f.directReturnVar} = ${_};`)}}return Qn(t,r,e,!1,!0),f.directExitLabel&&n.emitter.emitLine(`${t}goto ${f.directExitLabel};`),""}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!xe(e.$.type))return"// Error: return expression missing temporary variable name";let f,p=!1;if(r.inAsyncStateMachine&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,f=B(i,t,n),i.$.variableName=h,p=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=B(i,t,n);i.$.variableName=h;let $=H(i.$.type,n),E=He(h,i.$.env);E!==v&&n.emitter.emitLine(`${t}${$} ${E} = ${v};`),f=E}else f=B(i,t,n);let _=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Mt(i,t,r);let h=i.$.deferredDupExpressions[0];N(h)&&((u=h.$)!=null&&u.variableName)&&(f=He(h.$.variableName,h.$.env),_=!0)}let m=H(e.$.type,n),g=e.$.variableName?He(e.$.variableName,e.$.env):void 0;if(!_&&!xe(e.$.type)&&g&&g!==f&&n.emitter.emitLine(`${t}${m} ${g} = ${f};`),e.$.deferredDropExpressions&&an(e,t,n),r.inAsyncStateMachine){let h=r.inAsyncStateMachine.futureType,$=En(h).isFuture.outputType,E=xe($);Qn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let w;return E||(w=e.$.variableName&&p?e.$.variableName:e.$.variableName||f),fi({emitter:n.emitter,indent:t,resultCode:w,debugLabel:n.currentFunctionName}),""}return Qn(t,r,e),xe(e.$.type)?"return":`return ${_?f:g??f}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&an(e,t,n),r.inAsyncStateMachine){let f=r.inAsyncStateMachine.futureType,_=En(f).isFuture.outputType,m=xe(_);Qn(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let g=m?void 0:`(${H(_,n)}){0}`;return fi({emitter:n.emitter,indent:t,resultCode:g,debugLabel:n.currentFunctionName}),""}return Qn(t,r,e),"return"}}function Cf(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=zo(e,n),o=ag(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(T(e,D.return)){let i=B(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=sg(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}function bf(e,t){e.emitLine(`
|
|
9532
9532
|
// ============================================================================
|
|
9533
9533
|
// Parallelism Runtime - Thread and Worker
|
|
9534
9534
|
// ============================================================================
|
|
@@ -10192,7 +10192,7 @@ void __yo_arc_dispose_${r}(${r} arc) {
|
|
|
10192
10192
|
}`),t.emitLine(`
|
|
10193
10193
|
static void __yo_dispose_arc_${r}(void* ptr) {
|
|
10194
10194
|
__yo_arc_dispose_${r}((${r})ptr);
|
|
10195
|
-
}`),i.disposeGenerated=!0}}}function pg(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=H(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${V(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${V(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${V(e)}`);for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function dg(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${V(e)}`),e.fields.length===0)r.emitDeclarationLine(" uint8_t _dummy; // zero-sized type marker");else for(let i=0;i<e.fields.length;i++){let o=e.fields[i],a=H(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function mg(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${V(e)}`);for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Jl(e,t,n){let r=n.emitter,i=Ln(e);if(i){let l=H(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${V(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(_r(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${V(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Dn(e,u.name,n),f=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${f}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Dn(e,u.name,n),f=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${f}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!xe(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let f of u){let p=H(f.type,n),_=me(f.label);r.emitDeclarationLine(` ${p} ${_};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${V(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function yg(e,t){let n=vr(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!Jt(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ne({type:r,env:t},{type:s,env:t}))return a}let i=ys({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function gg(e,t,n){var s;let r=yg(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===k.dispose[0]);if(i<0)return;let o=r.fields[i];if(!ve(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,f=c.specializedType??c.type;if(c.funcName===k.dispose[0]&&f.SelfType&&ne({type:f.SelfType,env:t},{type:e,env:t}))return u.cName}}function wf(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),Ef(e.emitter,e.debugAsyncAwait),bf(e.emitter,e.debugParallelism),vg(e),Eg(e);for(let u in e.functions){let{value:c,cName:f}=e.functions[u],p=f==="__yo_user_main",_=(n=(t=c.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,m=_&&_.hasEffects;if(!p&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!p&&!m&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&fn(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(A=>A.isImplicit)].some(A=>ee(A.type)))continue;let y=c.specializedType&&!kr(c.type),h=c.specializedType??c.type,v=fn(h).length>0,$=c.type.parameters.some(A=>A.isCompileTimeOnly);if(!p&&(!c.isModuleEffectMember||$)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(
|
|
10195
|
+
}`),i.disposeGenerated=!0}}}function pg(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=H(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${V(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${V(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${V(e)}`);for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function dg(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${V(e)}`),e.fields.length===0)r.emitDeclarationLine(" uint8_t _dummy; // zero-sized type marker");else for(let i=0;i<e.fields.length;i++){let o=e.fields[i],a=H(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function mg(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${V(e)}`);for(let i of e.fields){let o=H(i.type,n),a=me(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Jl(e,t,n){let r=n.emitter,i=Ln(e);if(i){let l=H(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${V(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(_r(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${V(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Dn(e,u.name,n),f=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${f}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=Dn(e,u.name,n),f=l<e.variants.length-1?",":"",p=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${p}${f}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!xe(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let f of u){let p=H(f.type,n),_=me(f.label);r.emitDeclarationLine(` ${p} ${_};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${V(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function yg(e,t){let n=vr(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!Jt(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ne({type:r,env:t},{type:s,env:t}))return a}let i=ys({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function gg(e,t,n){var s;let r=yg(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===k.dispose[0]);if(i<0)return;let o=r.fields[i];if(!ve(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,f=c.specializedType??c.type;if(c.funcName===k.dispose[0]&&f.SelfType&&ne({type:f.SelfType,env:t},{type:e,env:t}))return u.cName}}function wf(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),Ef(e.emitter,e.debugAsyncAwait),bf(e.emitter,e.debugParallelism),vg(e),Eg(e);for(let u in e.functions){let{value:c,cName:f}=e.functions[u],p=f==="__yo_user_main",_=(n=(t=c.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,m=_&&_.hasEffects;if(!p&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!p&&!m&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&fn(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(A=>A.isImplicit)].some(A=>ee(A.type)))continue;let y=c.specializedType&&!kr(c.type),h=c.specializedType??c.type,v=fn(h).length>0,$=c.type.parameters.some(A=>A.isCompileTimeOnly);if(!p&&(!c.isModuleEffectMember||$)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(Ur(c.type)||Li(c))||!p&&c.isIoAsyncStateMachineClosure||!p&&!m&&!v&&!c.isModuleEffectMember&&(Ur(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!y||Li(c)||xo(c)||c.isIoAsyncStateMachineClosure))continue;let E=c.specializedType??c.type,w=!m&&!c.isModuleEffectMember&&(E.parameters.some(A=>et(A.type))||E.forallParameters.length>0),L=et(E.return.type),b=U(E.return.type)&&E.return.type.requiredTraits.length>0;if(w||L&&!b&&!c.isModuleEffectMember)continue;let C=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;C&&C.hasEffects,Af(c,f,e)}eu(e)}function Ff(e){let t=e.emitter,n=!1,r=null;for(let a in e.functions){let{cName:s,value:l}=e.functions[a];if(s==="__yo_user_main"){n=!0,r=l;break}}if(!n||!r)return;let i=r.type.return.type;if(!xe(i))throw new Error(`main function must return unit , but it returns ${V(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);{let s=fn(r.type).map(()=>"NULL").join(", "),l=s?`(${s})`:"()";t.emitLine(`
|
|
10196
10196
|
// Main wrapper - calls __yo_user_main directly
|
|
10197
10197
|
int main(int argc, char** argv) {
|
|
10198
10198
|
// Store command-line arguments
|
|
@@ -10212,7 +10212,7 @@ int main(int argc, char** argv) {
|
|
|
10212
10212
|
|
|
10213
10213
|
return 0;
|
|
10214
10214
|
}
|
|
10215
|
-
`)}}function Lf(e){var t,n;for(let r in e.functions){let{value:i}=e.functions[r];if(Li(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(_=>_.isCompileTimeOnly),c=l.parameters.some(_=>!_.isCompileTimeOnly&&U(_.type)&&!Ke(_.type));if(u||c)continue;let f=i.specializedType.parameters.some(_=>et(_.type)),p=et(i.specializedType.return.type);if(f||p)continue}let a=fn(i.specializedType??i.type);if(a.length===0&&i.specializedType){let l=fn(i.type);l.some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)&&(a=l)}a.length>0}}function Af(e,t,n){var E,w,L,b,C,A;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&Ke(o.return.type)){let I=ba(e.body);(E=I==null?void 0:I.$)!=null&&E.asyncStateMachineStructName?a=`${I.$.asyncStateMachineStructName}*`:(w=e.body.$)!=null&&w.type&&U(e.body.$.type)&&Ke(e.body.$.type)&&(a=H(e.body.$.type,n))}e.body&&U(o.return.type)&&!Ke(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&(L=e.body.$)!=null&&L.type&&(a=H(e.body.$.type,n));let s=e.specializedType&&fn(o).length===0&&fn(e.type).some(I=>I.fieldFunctionType.forallParameters&&I.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?
|
|
10215
|
+
`)}}function Lf(e){var t,n;for(let r in e.functions){let{value:i}=e.functions[r];if(Li(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(_=>_.isCompileTimeOnly),c=l.parameters.some(_=>!_.isCompileTimeOnly&&U(_.type)&&!Ke(_.type));if(u||c)continue;let f=i.specializedType.parameters.some(_=>et(_.type)),p=et(i.specializedType.return.type);if(f||p)continue}let a=fn(i.specializedType??i.type);if(a.length===0&&i.specializedType){let l=fn(i.type);l.some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)&&(a=l)}a.length>0}}function Af(e,t,n){var E,w,L,b,C,A;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&Ke(o.return.type)){let I=ba(e.body);(E=I==null?void 0:I.$)!=null&&E.asyncStateMachineStructName?a=`${I.$.asyncStateMachineStructName}*`:(w=e.body.$)!=null&&w.type&&U(e.body.$.type)&&Ke(e.body.$.type)&&(a=H(e.body.$.type,n))}e.body&&U(o.return.type)&&!Ke(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&(L=e.body.$)!=null&&L.type&&(a=H(e.body.$.type,n));let s=e.specializedType&&fn(o).length===0&&fn(e.type).some(I=>I.fieldFunctionType.forallParameters&&I.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?Jr(o,t,n,a,s):Jr(o,t,n,void 0,s);r.emitLine(`${l} {`);let u=n.currentFunctionName,c=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let f=n.isModuleEffectMemberFunction,p=n.overrideReturnTypeStr;e.isModuleEffectMember&&(n.isModuleEffectMemberFunction=!0),n.overrideReturnTypeStr=a;let _=n.currentEvidenceParams,m=fn(o);if(m.length===0&&e.specializedType){let I=fn(e.type);I.some(S=>S.fieldFunctionType.forallParameters&&S.fieldFunctionType.forallParameters.length>0)&&(m=I)}if(m.length>0){let I=new Map;for(let S of m)I.set(`${S.implicitLabel}.${S.fieldLabel}`,S);n.currentEvidenceParams=I}let g=n.currentClosureCaptures,y=n.currentClosureCaptureFrameLevel,h=n.currentClosureType,v=n.currentClosureCaptureTypeCName;if(o.isClosure){let I=e.closureInfo;if(I){let S=I.closureType.isFn,O=I.captureType;if(n.currentClosureType=S.callType,O&&Me(O)&&O.fields.length>0){let x=O.fields.map(q=>q.label);n.currentClosureCaptures=x,n.currentClosureCaptureFrameLevel=e.frameLevel;let M=(b=n.types[O.id])==null?void 0:b.cName;M&&(n.currentClosureCaptureTypeCName=M)}}}if(e.funcName===k.___dispose[0]&&o.SelfType){let I=gg(o.SelfType,e.type.env,n);if(I){let S=((C=o.parameters[0])==null?void 0:C.label)==="__yo_self"?"__yo_self":((A=o.parameters[0])==null?void 0:A.label)??"__yo_self";r.emitLine(` ${I}(${S}); // Call user's dispose method`)}}hg(e.body,o," ",n),n.currentFunctionName=u,n.currentFunctionType=c,n.isModuleEffectMemberFunction=f,n.overrideReturnTypeStr=p,n.currentEvidenceParams=_,n.currentClosureCaptures=g,n.currentClosureCaptureFrameLevel=y,n.currentClosureType=h,n.currentClosureCaptureTypeCName=v,r.emitLine("}")}function hg(e,t,n,r){var o,a,s,l,u,c,f,p,_,m,g;let i=r.emitter;if(N(e)&&T(e,D.begin)){let y=e.args;r.pendingDeferredDrops=[...((o=e.$)==null?void 0:o.deferredDropExpressions)??[]],r.consumedVarPendingDrops=[...((a=e.$)==null?void 0:a.consumedVariableDropExpressions)??[]];let h=!1;for(let v=0;v<y.length-1;v++){let $=y[v];T($,D.return)&&(h=!0);let E=B($,n,r);if(E&&(!$.$||!Bt($.$.env.modulePath,E))&&i.emitLine(`${n}${E};`),h)break}if(!h&&y.length>0){let v=y[y.length-1];if(Ke(t.return.type)&&v){let E=Fn(v),w=(s=v.$)==null?void 0:s.type,L=w&&Ke(w);if(E||L){let b=B(v,n,r);if((l=e.$)!=null&&l.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&w){let C=H(w,r),A=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${C} ${A} = ${b};`),an(e,n,r),i.emitLine(`${n}return ${A};`)}else i.emitLine(`${n}return ${b};`);return}}else if(v&&xe(t.return.type)){let E=B(v,n,r);E&&i.emitLine(`${n}${E};`),an(e,n,r)}else if(v){let E=Xt((u=v.$)==null?void 0:u.controlFlow),w=xe((c=v.$)==null?void 0:c.type)||N(v)&&T(v,D.tuple)&&v.args.length===0,L=y.length>1?y[y.length-2]:null,b=Xt((f=L==null?void 0:L.$)==null?void 0:f.controlFlow);if(!(w&&b))if(E){let C=B(v,n,r);C&&i.emitLine(`${n}${C};`)}else{if((p=v.$)!=null&&p.deferredDupExpressions&&v.$.deferredDupExpressions.length>0){if((_=v.$)!=null&&_.variableName){let I=H(t.return.type,r),S=He(v.$.variableName,v.$.env),O=B(v,n,r);S!==O&&i.emitLine(`${n}${I} ${S} = ${O};`)}Mt(v,n,r);let A=v.$.deferredDupExpressions[0];if(N(A)&&((m=A.$)!=null&&m.variableName)){let I=me(A.$.variableName);an(e,n,r),i.emitLine(`${n}return ${I};`);return}}let C=B(v,n,r);an(e,n,r),C&&i.emitLine(`${n}return ${C};`)}}}else if(h&&y.length>0){let v=y[y.length-1];v&&xe((g=v.$)==null?void 0:g.type)}}else if(an(e,n,r),xe(t.return.type)){let y=B(e,n,r);y&&i.emitLine(`${n}${y};`)}else Cf(e,n,r)}function If(e){var t,n;for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(Li(i)||!i.specializedType||!kr(i.type))continue;let a=i.specializedType,s=a.forallParameters.length>0||a.parameters.some(_=>_.isCompileTimeOnly),l=a.parameters.some(_=>!_.isCompileTimeOnly&&U(_.type)&&!Ke(_.type));if(s||l)continue;let u=i.specializedType.parameters.some(_=>et(_.type)),c=et(i.specializedType.return.type);if(u||c)continue;let f=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;f&&f.hasEffects||i.isModuleEffectMember||fn(i.specializedType??i.type).length>0||Af(i,o,e)}}function vg(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
|
|
10216
10216
|
void __yo_decr_rc(void* ptr) {
|
|
10217
10217
|
if (ptr == NULL) return;
|
|
10218
10218
|
yo_ref_header_t* header = (yo_ref_header_t*)ptr;
|
|
@@ -10644,16 +10644,16 @@ static uint8_t** __yo_argv;
|
|
|
10644
10644
|
static Slice_uint8_t_u42_ __yo_args;
|
|
10645
10645
|
`),Sf(i),Zl(i),af(i),Qc(i),Lf(i),wf(i),pf(i),df(i),mf(i),_f(i),of(i),r.isLibrary||Ff(i),Nf(i),Jc(i),If(i)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}};var Vf=0;function xf(e){var t,n;return(t=e.$)!=null&&t.variableName?!0:(((n=e.$)==null?void 0:n.value)!==void 0,!1)}function $s(e,t){var n;if(N(e)){(n=e.$)!=null&&n.variableName&&t.add(e.$.variableName);for(let r of e.args)$s(r,t);e.func&&$s(e.func,t)}}function Df(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=yr(o);if(a&&e.has(a)){let s=B(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function Mf(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(ht(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=>xf(u)))return`(${r.map(c=>B(c,t,n)).join(" && ")})`;let o=`__yo_sc_${Vf++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=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],f=new Set;$s(c,f),Df(f,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Of(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(ht(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=>xf(u)))return`(${r.map(c=>B(c,t,n)).join(" || ")})`;let o=`__yo_sc_${Vf++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=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],f=new Set;$s(c,f),Df(f,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Rf(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||!rn(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${H(o,n)}(${i})`}function tu(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&rn(t.value)&&e.args.length===1}function Pf(e,t,n){var c;if(!tu(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=H(i,n),u=H(o,n);return n.arcTypes||(n.arcTypes=new Map),n.arcTypes.has(l)||n.arcTypes.set(l,{childTypeCName:u,arcType:i}),`__yo_create_arc_${l}(${s})`}function Uf(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(Ze(i)&&r){let c=n,f=r.map(_=>{var g,y;let m=B(_,t,n);if((g=_.$)!=null&&g.deferredDupExpressions&&_.$.deferredDupExpressions.length>0){Mt(_,t,c);let h=_.$.deferredDupExpressions[0];if(N(h)&&((y=h.$)!=null&&y.variableName))return He(h.$.variableName,h.$.env)}return m}).join(", "),p=H(i,n);if(o&&((u=e.$)!=null&&u.type)){let _=`(${p}){ .data = { ${f} } }`,m=Ut(e.$.type,o,n);return n.emitter.emitLine(`${t}${m} = ${_};`),o}else return`(${p}){ .data = { ${f} } }`}}function zf(e,t,n){var _,m,g;let r=n.emitter,i=e.args[0],o=e.args[1],a=(_=i.$)==null?void 0:_.value;if(!a||!W(a)||!Ze(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!yt(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=H(s,n),c=B(o,t,n),f=((m=e.$)==null?void 0:m.variableName)||`temp_array_${Date.now()}`,p=`i_${Et(((g=e.$)==null?void 0:g.env.modulePath)??"")}`;return r.emitLine(`${t}${u} ${f};`),r.emitLine(`${t}for (int ${p} = 0; ${p} < ${l.value}; ${p}++) {`),r.emitLine(`${t} ${f}.data[${p}] = ${c};`),r.emitLine(`${t}}`),f}function Bf(e,t,n){var l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b,C,A,I,S,O,x;if((l=e.$)!=null&&l.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(N(r)&&T(r,":",2)&&(o=!0,r=r.args[0]),N(r)&&T(r,D.comptime)||N(r)&&T(r,D.given))return"";if((u=r.$)!=null&&u.pathCollection&&((c=r.$)==null?void 0:c.pathCollection.length)>0){let M=r.$.pathCollection[0];if(M&&M.length>=2){let q=M[0];if(typeof q=="string"&&((f=r.$)!=null&&f.env)){let P=le(r.$.env,q);if(P.length>0&&P[P.length-1].isCompileTimeOnly)return""}}}if(Y(r)&&((p=r.$)!=null&&p.env)){let M=r.token.value,q=le(r.$.env,M);if(q.length>0&&q[q.length-1].isCompileTimeOnly)return""}if(!((_=r.$)!=null&&_.type))return`// Error: No type information for left-hand side ${F(r)}
|
|
10646
10646
|
`;let a=B(r,t,n),s=!1;if((m=e.$)!=null&&m.variableName){let M=e.$.variableName,q=n;if((q.inAsyncStateMachine||q.inEffectStateMachine)&&a.startsWith("sm->")){let G=(g=q.stateMachineVariables)==null?void 0:g.get(M);if(!G&&q.stateMachineVariables){for(let[,z]of q.stateMachineVariables)if(z.name===M){G=z;break}}if(G&&G.kind!=="outer"){let z=`var_${G.id}`;xe(r.$.type)||n.emitter.emitLine(`${t}sm->${z} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let G=Ut(r.$.type,M,n);Ze(r.$.type)?n.emitter.emitLine(`${t}${G} = ${a}; // Save old value for later use`):xe(r.$.type)||n.emitter.emitLine(`${t}${G} = ${a}; // Save old value for later use`)}}if(Ze(r.$.type)){let M=B(i,t,n),q=N(i)&&((y=i.$)==null?void 0:y.closureFunctionValue)&&((h=i.$)==null?void 0:h.type)&&xn(i.$.type),P=n,G=M;if(!q&&((v=i.$)!=null&&v.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if(($=i.$)!=null&&$.variableName&&((E=i.$)!=null&&E.type)){let K=He(i.$.variableName,i.$.env);if(K!==M.trim()){let re=i.$.convertedRuntimeType||i.$.type,J=H(re,n);n.emitter.emitLine(`${t}${J} ${K} = ${M};`)}}Mt(i,t,P);let z=i.$.deferredDupExpressions[0];N(z)&&((w=z.$)!=null&&w.variableName)&&(G=He(z.$.variableName,z.$.env))}if(o){let z=Ut(r.$.type,B(r,t,n),n);n.emitter.emitLine(`${t}${z} = ${G};`)}else n.emitter.emitLine(`${t}${a} = ${G};`)}else{let M=B(i,t,n),q=N(i)&&((L=i.$)==null?void 0:L.closureFunctionValue)&&((b=i.$)==null?void 0:b.type)&&xn(i.$.type),P=n,G=M;if(!q&&((C=i.$)!=null&&C.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((A=i.$)!=null&&A.variableName&&((I=i.$)!=null&&I.type)){let K=He(i.$.variableName,i.$.env);if(K!==M.trim()){let re=i.$.convertedRuntimeType||i.$.type,J=H(re,n);n.emitter.emitLine(`${t}${J} ${K} = ${M};`)}}Mt(i,t,P);let z=i.$.deferredDupExpressions[0];N(z)&&((S=z.$)!=null&&S.variableName)&&(G=He(z.$.variableName,z.$.env))}if(!xe(r.$.type)){let z=r.$.type,K=(O=i.$)==null?void 0:O.type,re,J=Bt(i.$.env.modulePath,G.trim());J&&n.tempVarAsyncStructNames&&(re=n.tempVarAsyncStructNames.get(G.trim()));let ue=o&&K&&Ke(z)&&Ke(K),ge;J&&ue?re?ge=`${re}*`:ge=H(K,n):ue&&re?ge=`${re}*`:ge=H(ue?K:z,n);let Z=(P.inAsyncStateMachine||P.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!Z?ge+" ":""}${a} = ${G};`)}}return s?"":((x=e.$)==null?void 0:x.variableName)??""}function Wf(e,t,n){var s,l,u,c,f,p,_,m,g,y;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||!Ke(i))return"// Error: await argument must be a Future type";let o=En(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(sr(e)){let h=B(r,t,n),v=H(i,n),$=o.isFuture.outputType,E=a.emitter,w=xe($)||U($)&&xe(((l=e.$)==null?void 0:l.type)??$),L=(u=e.$)!=null&&u.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",b=(c=e.$)!=null&&c.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";E.emitLine(`${t}// Synchronous await (io.await outside state machine)`),E.emitLine(`${t}${v} ${L} = ${h};`),E.emitLine(`${t}int ${b} = ${L}->state;`),La((f=r.$)==null?void 0:f.type)||(E.emitLine(`${t}if (${b} == 0 && ${L}->__yo_resume_fn) {`),Cg(e,L,t,n),E.emitLine(`${t} __yo_incr_rc((void*)${L}); // event loop reference`),E.emitLine(`${t} ${L}->__yo_resume_fn((void*)${L});`),E.emitLine(`${t}}`)),E.emitLine(`${t}{`),E.emitLine(`${t} int __await_state = ${L}->state;`),E.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),E.emitLine(`${t} yo_async_poll_step();`),E.emitLine(`${t} __await_state = ${L}->state;`),E.emitLine(`${t} }`),E.emitLine(`${t} if (__await_state == -2) {`);let A=En(i),I=((p=A==null?void 0:A.isFuture.effects)==null?void 0:p.some(S=>ee(S.type)||We(S.type)||S.isEffectRowSpread))??!1;if(I){E.emitLine(`${t} if (${b} == -2) {`),E.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),E.emitLine(`${t} abort();`),E.emitLine(`${t} }`),E.emitLine(`${t} __yo_decr_rc((void*)${L});`),E.emitLine(`${t} ${h} = NULL;`);let S=a.pendingDeferredDrops;if(S){let M=(_=e.$)==null?void 0:_.variableName;a.pendingDeferredDrops=S.filter(q=>yr(q)!==M)}Qn(t+" ",a,e),a.pendingDeferredDrops=S;let O=$g(A,a),x=(g=(m=a.currentFunctionType)==null?void 0:m.return)==null?void 0:g.type;if(O)if(E.emitLine(`${t} __yo_effect_escaped = 0;`),x&&!xe(x)){let M=H(x,n);M!=="void"?(E.emitLine(`${t} ${M} _esc_result;`),E.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${M}));`),E.emitLine(`${t} return _esc_result;`)):E.emitLine(`${t} return;`)}else E.emitLine(`${t} return;`);else if(E.emitLine(`${t} __yo_effect_escaped = 1;`),x&&!xe(x)){let M=H(x,n);E.emitLine(`${t} return (${M}){0};`)}else E.emitLine(`${t} return;`)}else E.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),E.emitLine(`${t} abort();`);if(E.emitLine(`${t} }`),E.emitLine(`${t}}`),w)return"";{let S=((y=e.$)==null?void 0:y.variableName)||"__sync_await_result",O=H($,n),x=Ut($,S,n);if(I){if(E.emitLine(`${t}${x};`),E.emitLine(`${t}if (${L}->state == -1) {`),tt($)){let M=Cr($,n);M?E.emitLine(`${t} ${S} = ${M}(${L}->result);`):E.emitLine(`${t} ${S} = ${L}->result;`)}else E.emitLine(`${t} ${S} = ${L}->result;`);E.emitLine(`${t}} else {`),E.emitLine(`${t} ${S} = (${O}){0};`),E.emitLine(`${t}}`)}else if(tt($)){let M=Cr($,n);M?E.emitLine(`${t}${x} = ${M}(${L}->result);`):E.emitLine(`${t}${x} = ${L}->result;`)}else E.emitLine(`${t}${x} = ${L}->result;`);return S}}return"// Error: await should only be used inside async blocks"}function qf(e,t,n){var c,f,p;let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=(c=r.$)==null?void 0:c.type;if(!i||!Ke(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=B(r,t,n),l=(f=e.$)!=null&&f.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((p=e.$)==null?void 0:p.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Hf(e,t,n){var w,L,b,C,A;let i=n.emitter,o=N(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=(w=e.$)==null?void 0:w.type;if(!s||!Ue(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=H(s,n),u=s.variants.find(I=>I.name==="Some"),c=(b=(L=u==null?void 0:u.fields)==null?void 0:L[0])==null?void 0:b.type,f=!c||xe(c),p=f?"uint8_t":c?H(c,n):"uint8_t",_=Dn(s,"Some",n),m=Dn(s,"None",n),g=((C=e.$)==null?void 0:C.variableName)||"jh",y=`__jh_future_${g}`,h=`__jh_header_${g}`,v=((A=e.$)==null?void 0:A.variableName)||"__jh_result",$=`__yo_jh_header_${g}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let E=Ut(s,v,n);if(i.emitLine(`${t}${E};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${y} = ${a}.__future;`),i.emitLine(`${t} struct ${$} {`),i.emitLine(`${t} yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${p} result;`),i.emitLine(`${t} void (*continuation_fn)(void*);`),i.emitLine(`${t} void* continuation_sm;`),i.emitLine(`${t} void (*__yo_resume_fn)(void*);`),i.emitLine(`${t} };`),i.emitLine(`${t} struct ${$}* ${h} = (struct ${$}*)${y};`),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) {`),f)i.emitLine(`${t} ${v} = (${l}){ .tag = ${_} };`);else if(c&&tt(c)){let I=Cr(c,n);I?i.emitLine(`${t} ${v} = (${l}){ .tag = ${_}, .data = { .Some = { .value = ${I}(${h}->result) } } };`):i.emitLine(`${t} ${v} = (${l}){ .tag = ${_}, .data = { .Some = { .value = ${h}->result } } };`)}else i.emitLine(`${t} ${v} = (${l}){ .tag = ${_}, .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 $g(e,t){let n=e.isFuture.effects;if(!(n!=null&&n.length))return!1;let r=Yf(n),i=t.currentEvidenceParams;for(let o of r)if(ee(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 Yf(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Cg(e,t,n,r){var c,f,p;let i=e.args[0];if(!((c=i==null?void 0:i.$)!=null&&c.type))return;let o=En(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=Yf(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(_=>N(_)&&T(_,D.using));if(u){let _=u.args;for(let m=0;m<a.length&&m<_.length;m++){let g=a[m],y=_[m];if(ee(g.type)){let h=B(y,n,r),v=g.label;l.emitLine(`${n} ${t}->__capture.${v} = (void*)${h};`)}else We(g.type)&&Gf(g.type,t,n,(p=y.$)==null?void 0:p.value,s,e)}}else for(let _ of a)if(ee(_.type)){let m=kg(_.label,s,e);m&&l.emitLine(`${n} ${t}->__capture.${_.label} = (void*)${m};`)}else We(_.type)&&Gf(_.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(!ee(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&&vt(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&ve(c)){let f=i.functions[c.funcId];f&&(l=f.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}l||(l=bg(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function bg(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=Xn(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],p=(l=f.value)==null?void 0:l[f.value.length-1];if(p&&vt(p)){let _=p.type.fields.findIndex(m=>m.label===e);if(_>=0){let m=p.fields[_];if(m&&ve(m)){let g=(u=n.functions[m.funcId])==null?void 0:u.cName;if(g)return g}}}}}function kg(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 jf(e,t,n){var a,s,l,u,c,f,p,_,m,g,y,h,v,$;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!xe(i)&&!Xt((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${H(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,w=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...w,...E??[]];let L=o.consumedVarPendingDrops,b=((c=e.$)==null?void 0:c.consumedVariableDropExpressions)??[];o.consumedVarPendingDrops=[...b,...L??[]];let C=[],A=!xe(i)&&!Xt((f=e.$)==null?void 0:f.controlFlow);for(let I=0;I<e.args.length;I++){let S=e.args[I],O=B(S,t+" ",n);C.push(O);let x=I===e.args.length-1;O&&!(x&&A)&&(S.$&&Bt(S.$.env.modulePath,O)||n.emitter.emitLine(`${t} ${O};`))}if(A){let I=e.args[e.args.length-1],S=C[C.length-1];if((p=I.$)!=null&&p.deferredDupExpressions&&I.$.deferredDupExpressions.length>0){if((_=I.$)!=null&&_.variableName){let x=I.$.variableName;I.$.variableName=void 0;let M=B(I,t+" ",n);I.$.variableName=x;let q=H(I.$.type,n),P=He(x,I.$.env);P!==M&&n.emitter.emitLine(`${t} ${q} ${P} = ${M};`),S=P}Mt(I,t+" ",n);let O=I.$.deferredDupExpressions[0];N(O)&&((m=O.$)!=null&&m.variableName)&&(S=He(O.$.variableName,O.$.env))}n.emitter.emitLine(`${t} ${r} = ${S};`)}if((g=e.$)!=null&&g.deferredDropExpressions)for(let I of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let O=yr(I);if(O&&o.shortCircuitHandledDropVarNames.has(O)){o.shortCircuitHandledDropVarNames.delete(O);continue}}let S=B(I,t+" ",n);S&&n.emitter.emitLine(`${t} ${S};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=L,xe(i)||Xt((y=e.$)==null?void 0:y.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,w=((h=e.$)==null?void 0:h.deferredDropExpressions)??[];o.pendingDeferredDrops=[...w,...E??[]];let L=o.consumedVarPendingDrops,b=((v=e.$)==null?void 0:v.consumedVariableDropExpressions)??[];if(o.consumedVarPendingDrops=[...b,...L??[]],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 S=yr(A);if(S&&o.shortCircuitHandledDropVarNames.has(S)){o.shortCircuitHandledDropVarNames.delete(S);continue}}let I=B(A,t+" ",n);I&&n.emitter.emitLine(`${t} ${I};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=L,""}}function Kf(e,t,n){var a;let r=e.args[0];if(N(r)&&T(r,D.comptime,1)||N(r)&&T(r,D.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${F(r)}
|
|
10647
|
-
`;let i=r.token.value,o=Ut(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function Xf(e,t,n){var r,i,o,a,s,l,u,c,f,p,_;if(e.$){let m=e.$.variableName,g=e.$.type,y=g&&xe(g),h=-1;for(let L=0;L<e.args.length;L++){let b=e.args[L];if(N(b)&&T(b,"=>",2)){let C=b.args[0];if(C&&!(ht((r=C.$)==null?void 0:r.value)&&C.$.value.value===!1)){h=L;break}}}let v=!1;if(h>=0){let L=e.args[h];if(L&&N(L)&&T(L,"=>",2)){let b=L.args[0];b&&ht((i=b.$)==null?void 0:i.value)&&b.$.value.value===!0&&(v=!0)}}if(!y&&m&&!v){let L=H(g,n);n.emitter.emitLine(`${t}${L} ${m};`)}if(v&&h>=0){let L=e.args[h];if(L&&N(L)&&T(L,"=>",2)){let b=L.args[1];if(b){let C=B(b,t,n);m&&!y&&(C&&C!==""&&!C.startsWith("goto")&&C!=="continue"&&C!=="break"&&!C.includes("return")?n.emitter.emitLine(`${t}${m} = ${C};`):C&&(C.startsWith("goto")||C==="continue"||C==="break"||C.includes("return"))&&n.emitter.emitLine(`${t}${C};`))}}return y?"":m??""}let $=t,E=0,w=!1;for(let L=0;L<e.args.length;L++){let b=e.args[L];if(N(b)&&T(b,"=>",2)){let C=b.args[0],A=b.args[1];if(C&&A){if(ht((o=C.$)==null?void 0:o.value)&&C.$.value.value===!1)continue;if(w){if(n.emitter.emitLine(`${$}else {`),E++,$+=" ",!(ht((s=C.$)==null?void 0:s.value)&&C.$.value.value===!0)){let M=B(C,$,n);n.emitter.emitLine(`${$}if (${M}) {`)}}else{if(ht((a=C.$)==null?void 0:a.value)&&C.$.value.value===!0)n.emitter.emitLine(`${$}{`);else{let x=B(C,$,n);n.emitter.emitLine(`${$}if (${x}) {`)}w=!0}let I=ht((l=C.$)==null?void 0:l.value)&&C.$.value.value===!0,S=w&&I?$:$+" ";if(N(A)&&T(A,D.begin)){let x=A.args,M=n,q=M.pendingDeferredDrops,P=((u=A.$)==null?void 0:u.deferredDropExpressions)??[];M.pendingDeferredDrops=[...P,...q??[]];let G=M.consumedVarPendingDrops,z=((c=A.$)==null?void 0:c.consumedVariableDropExpressions)??[];M.consumedVarPendingDrops=[...z,...G??[]];for(let K=0;K<x.length-1;K++){let re=x[K],J=B(re,S,n);J&&re.$&&!Bt(re.$.env.modulePath,J)&&n.emitter.emitLine(`${S}${J};`)}if(x.length>0){let K=x[x.length-1];(f=K.$)!=null&&f.deferredDupExpressions&&Mt(K,S,n);let re=B(K,S,n);re&&(re==="continue"||re==="break"||re.startsWith("goto")||N(K)&&T(K,D.return)||re.includes("return")?n.emitter.emitLine(`${S}${re};`):m&&!y&&n.emitter.emitLine(`${S}${m} = ${re};`))}(p=A.$)!=null&&p.deferredDropExpressions&&an(A,S,n),M.pendingDeferredDrops=q,M.consumedVarPendingDrops=G}else{(_=A.$)!=null&&_.deferredDupExpressions&&Mt(A,S,n);let x=B(A,S,n);x==="continue"||x==="break"||x.startsWith("goto")||N(A)&&T(A,D.return)||x.includes("return")?n.emitter.emitLine(`${S}${x};`):x===""||!x||m&&(y||n.emitter.emitLine(`${S}${m} = ${x};`))}!(w&&I)&&n.emitter.emitLine(`${$}}`)}}}for(let L=0;L<E;L++)$=$.slice(0,-2),n.emitter.emitLine(`${$}}`);return y?"":m??""}return'/* "cond" expression is not evaluated */'}function Qf(e,t,n){let r=e.args[0];return B(r,t,n)}function Zf(e,t,n){var C,A,I,S,O;let r=e.args[0],i=(C=r.$)==null?void 0:C.type;if(!i||!Qe(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=H(l,n),c=((I=n.types[l.id])==null?void 0:I.cName)||u,f=`yo_typeid_${me(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,f),n.emitter.emitDeclarationLine(`static const char ${f} = 0;`)),n.cIncludes.add("<stdint.h>");let p=`${o}.vtable->__yo_type_id == (uintptr_t)&${f}`,_,m=!1,g="",y="";for(let[,x]of n.dynImpls){if(x.dynType.id!==i.id)continue;if((U(x.concreteType)&&x.concreteType.resolvedConcreteType?x.concreteType.resolvedConcreteType:x.concreteType).id===l.id&&or(x.dataType)){m=!0,g=((S=n.types[x.dataType.id])==null?void 0:S.cName)||`unknown_box_${x.dataType.id}`,y=me(x.dataType.fields[0].label);break}}if(m){let x=Wt(l);if(!x){let M=l;for(;
|
|
10648
|
-
`;if((u=r.$)!=null&&u.env){let S=le(r.$.env,C);if(S.length>0&&S[S.length-1].isCompileTimeOnly)return""}let A=!1,I;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((c=r.$)!=null&&c.env)){let S=le(r.$.env,C);if(S.length>0){let O=S[S.length-1],x=O.isOwningTheSameRcValueAs?O.isOwningTheSameRcValueAs.id:O.id;o.stateMachineVariables.has(x)&&(A=!0,I=x)}}if(Ze(r.$.type))if(N(i)&&T(i,D.array)){let S=B(i,t,n);if(A&&I)n.emitter.emitLine(`${t}sm->var_${I} = ${S};`);else if(!xe(r.$.type)){let O=Ut(r.$.type,C,n);n.emitter.emitLine(`${t}${O} = ${S};`)}}else{let S;if((f=i.$)!=null&&f.variableName){let O=He(i.$.variableName,i.$.env),x=B(i,t,n);if(!A){let M=Ut(i.$.type,O,n);O!==x&&n.emitter.emitLine(`${t}${M} = ${x};`)}S=O}else S=B(i,t,n);if(A&&I)n.emitter.emitLine(`${t}sm->var_${I} = ${S};`);else if(!xe(r.$.type)){let O=Ut(r.$.type,C,n);n.emitter.emitLine(`${t}${O} = ${S};`)}}else{let S,O=N(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((_=i.$)==null?void 0:_.type)&&xn(i.$.type),x=N(i)&&Fn(i);if((m=i.$)!=null&&m.variableName){let M=He(i.$.variableName,i.$.env),q=He(C,r.$.env);if(M===q){if(S=B(i,t,n),!O&&!x&&((g=i.$)!=null&&g.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Mt(i,t,o);let P=i.$.deferredDupExpressions[0];N(P)&&((y=P.$)!=null&&y.variableName)&&(S=He(P.$.variableName,P.$.env))}}else if(Y(i)&&M===He(i.token.value,i.$.env)){if(S=B(i,t,n),!O&&!x&&((h=i.$)!=null&&h.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Mt(i,t,o);let P=i.$.deferredDupExpressions[0];N(P)&&((v=P.$)!=null&&v.variableName)&&(S=He(P.$.variableName,P.$.env))}}else if(Y(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&(($=i.$)!=null&&$.env)&&o.currentClosureCaptureFrameLevel!==void 0&&
|
|
10647
|
+
`;let i=r.token.value,o=Ut(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function Xf(e,t,n){var r,i,o,a,s,l,u,c,f,p,_;if(e.$){let m=e.$.variableName,g=e.$.type,y=g&&xe(g),h=-1;for(let L=0;L<e.args.length;L++){let b=e.args[L];if(N(b)&&T(b,"=>",2)){let C=b.args[0];if(C&&!(ht((r=C.$)==null?void 0:r.value)&&C.$.value.value===!1)){h=L;break}}}let v=!1;if(h>=0){let L=e.args[h];if(L&&N(L)&&T(L,"=>",2)){let b=L.args[0];b&&ht((i=b.$)==null?void 0:i.value)&&b.$.value.value===!0&&(v=!0)}}if(!y&&m&&!v){let L=H(g,n);n.emitter.emitLine(`${t}${L} ${m};`)}if(v&&h>=0){let L=e.args[h];if(L&&N(L)&&T(L,"=>",2)){let b=L.args[1];if(b){let C=B(b,t,n);m&&!y&&(C&&C!==""&&!C.startsWith("goto")&&C!=="continue"&&C!=="break"&&!C.includes("return")?n.emitter.emitLine(`${t}${m} = ${C};`):C&&(C.startsWith("goto")||C==="continue"||C==="break"||C.includes("return"))&&n.emitter.emitLine(`${t}${C};`))}}return y?"":m??""}let $=t,E=0,w=!1;for(let L=0;L<e.args.length;L++){let b=e.args[L];if(N(b)&&T(b,"=>",2)){let C=b.args[0],A=b.args[1];if(C&&A){if(ht((o=C.$)==null?void 0:o.value)&&C.$.value.value===!1)continue;if(w){if(n.emitter.emitLine(`${$}else {`),E++,$+=" ",!(ht((s=C.$)==null?void 0:s.value)&&C.$.value.value===!0)){let M=B(C,$,n);n.emitter.emitLine(`${$}if (${M}) {`)}}else{if(ht((a=C.$)==null?void 0:a.value)&&C.$.value.value===!0)n.emitter.emitLine(`${$}{`);else{let x=B(C,$,n);n.emitter.emitLine(`${$}if (${x}) {`)}w=!0}let I=ht((l=C.$)==null?void 0:l.value)&&C.$.value.value===!0,S=w&&I?$:$+" ";if(N(A)&&T(A,D.begin)){let x=A.args,M=n,q=M.pendingDeferredDrops,P=((u=A.$)==null?void 0:u.deferredDropExpressions)??[];M.pendingDeferredDrops=[...P,...q??[]];let G=M.consumedVarPendingDrops,z=((c=A.$)==null?void 0:c.consumedVariableDropExpressions)??[];M.consumedVarPendingDrops=[...z,...G??[]];for(let K=0;K<x.length-1;K++){let re=x[K],J=B(re,S,n);J&&re.$&&!Bt(re.$.env.modulePath,J)&&n.emitter.emitLine(`${S}${J};`)}if(x.length>0){let K=x[x.length-1];(f=K.$)!=null&&f.deferredDupExpressions&&Mt(K,S,n);let re=B(K,S,n);re&&(re==="continue"||re==="break"||re.startsWith("goto")||N(K)&&T(K,D.return)||re.includes("return")?n.emitter.emitLine(`${S}${re};`):m&&!y&&n.emitter.emitLine(`${S}${m} = ${re};`))}(p=A.$)!=null&&p.deferredDropExpressions&&an(A,S,n),M.pendingDeferredDrops=q,M.consumedVarPendingDrops=G}else{(_=A.$)!=null&&_.deferredDupExpressions&&Mt(A,S,n);let x=B(A,S,n);x==="continue"||x==="break"||x.startsWith("goto")||N(A)&&T(A,D.return)||x.includes("return")?n.emitter.emitLine(`${S}${x};`):x===""||!x||m&&(y||n.emitter.emitLine(`${S}${m} = ${x};`))}!(w&&I)&&n.emitter.emitLine(`${$}}`)}}}for(let L=0;L<E;L++)$=$.slice(0,-2),n.emitter.emitLine(`${$}}`);return y?"":m??""}return'/* "cond" expression is not evaluated */'}function Qf(e,t,n){let r=e.args[0];return B(r,t,n)}function Zf(e,t,n){var C,A,I,S,O;let r=e.args[0],i=(C=r.$)==null?void 0:C.type;if(!i||!Qe(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=H(l,n),c=((I=n.types[l.id])==null?void 0:I.cName)||u,f=`yo_typeid_${me(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,f),n.emitter.emitDeclarationLine(`static const char ${f} = 0;`)),n.cIncludes.add("<stdint.h>");let p=`${o}.vtable->__yo_type_id == (uintptr_t)&${f}`,_,m=!1,g="",y="";for(let[,x]of n.dynImpls){if(x.dynType.id!==i.id)continue;if((U(x.concreteType)&&x.concreteType.resolvedConcreteType?x.concreteType.resolvedConcreteType:x.concreteType).id===l.id&&or(x.dataType)){m=!0,g=((S=n.types[x.dataType.id])==null?void 0:S.cName)||`unknown_box_${x.dataType.id}`,y=me(x.dataType.fields[0].label);break}}if(m){let x=Wt(l);if(!x){let M=l;for(;ri(M)&&M.fields.length===1;)M=M.fields[0].type;x=Wt(M)}x?_=`((${u})__yo_incr_rc((void*)((${g}*)${o}.data)->${y}))`:_=`((${u})((${g}*)${o}.data)->${y})`}else _=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(O=e.$)==null?void 0:O.type;if(!h||!Ue(h))throw new Error("downcast codegen: expected Option enum as result type");if(Ln(h))return`((${p}) ? ${_} : NULL)`;let $=H(h,n),E=Dn(h,"Some",n),w=Dn(h,"None",n),L=`(${$}){ .tag = ${E}, .data = { .Some = { .value = ${_} } } }`,b=`(${$}){ .tag = ${w} }`;return`((${p}) ? ${L} : ${b})`}function Jf(e,t,n){var h,v,$,E,w,L,b,C,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(!Qe(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(!Wt(o)&&!or(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=or(o)?o.fields[0].type:o,l=U(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=((w=n.types[i.id])==null?void 0:w.cName)||`yo_dyn_${i.id}`,f=`${(()=>{var x,M;let I=(x=n.types[l.id])==null?void 0:x.cName;if(I)return I;let S=Un(l);return(S?(M=n.types[S.id])==null?void 0:M.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(f,{dynType:i,concreteType:s,dataType:o,traitValues:a});let p=B(r,t,n);if((L=r.$)!=null&&L.variableName&&p!==r.$.variableName){let I=Ut(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${I} = ${p};`),p=r.$.variableName}if((b=r.$)!=null&&b.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Mt(r,t,n);let I=r.$.deferredDupExpressions[0];N(I)&&((C=I.$)!=null&&C.variableName)&&(p=He(I.$.variableName,I.$.env))}let _=(A=e.$)==null?void 0:A.variableName;if(!_)return"/* Error: dyn() expression missing temp variable name */";let m=n,g;if(m.inAsyncStateMachine&&m.stateMachineVariables){for(let[,I]of m.stateMachineVariables)if(I.kind==="local"&&I.id===_){g=`sm->var_${I.id}`;break}}let y=`yo_vtable_${f}`;return g?(n.emitter.emitLine(`${t}${g} = (${u}){`),n.emitter.emitLine(`${t} .data = ${p},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),g):(n.emitter.emitLine(`${t}${u} ${_} = {`),n.emitter.emitLine(`${t} .data = ${p},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),_)}function e_(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function t_(e,t,n){var a,s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b;let r=e.args[0],i=e.args[1],o=n;if(N(r)&&T(r,D.comptime,1)||N(r)&&T(r,D.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&Y(r)&&Y(i)){let C=r.token.value,A=i.token.value,I=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(O=>O.name===C),S=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(O=>O.name===A);if(C===A&&(I||S))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let C=e.$.runtimeDestructurings,A=B(i,t,n),I=(s=i.$)==null?void 0:s.type;return C.forEach(({label:S,type:O,variableName:x})=>{let M=me(x,O.isExtern==="c"),q=Ut(O,M,n);if(I&&Me(I)&&I.isNewtype&&I.fields.length===1){let z=I.fields[0];if(z&&z.label===S){n.emitter.emitLine(`${t}${q} = ${A}; // Destructuring ${S} (newtype)`);return}}let P=S.match(/^\d+$/)?`_${S}`:me(S,O.isExtern==="c");if(I&&Je(I)&&!S.match(/^\d+$/)){let z=I.fields.findIndex(K=>K.label===S);P=z>=0?`_${z}`:P}let G=I&&Wt(I)?"->":".";n.emitter.emitLine(`${t}${q} = ${A}${G}${P}; // Destructuring ${S}`)}),""}if(Y(r)){let C=r.token.value;if(!((l=r.$)!=null&&l.type))return`// Error: No type information for variable ${C}
|
|
10648
|
+
`;if((u=r.$)!=null&&u.env){let S=le(r.$.env,C);if(S.length>0&&S[S.length-1].isCompileTimeOnly)return""}let A=!1,I;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((c=r.$)!=null&&c.env)){let S=le(r.$.env,C);if(S.length>0){let O=S[S.length-1],x=O.isOwningTheSameRcValueAs?O.isOwningTheSameRcValueAs.id:O.id;o.stateMachineVariables.has(x)&&(A=!0,I=x)}}if(Ze(r.$.type))if(N(i)&&T(i,D.array)){let S=B(i,t,n);if(A&&I)n.emitter.emitLine(`${t}sm->var_${I} = ${S};`);else if(!xe(r.$.type)){let O=Ut(r.$.type,C,n);n.emitter.emitLine(`${t}${O} = ${S};`)}}else{let S;if((f=i.$)!=null&&f.variableName){let O=He(i.$.variableName,i.$.env),x=B(i,t,n);if(!A){let M=Ut(i.$.type,O,n);O!==x&&n.emitter.emitLine(`${t}${M} = ${x};`)}S=O}else S=B(i,t,n);if(A&&I)n.emitter.emitLine(`${t}sm->var_${I} = ${S};`);else if(!xe(r.$.type)){let O=Ut(r.$.type,C,n);n.emitter.emitLine(`${t}${O} = ${S};`)}}else{let S,O=N(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((_=i.$)==null?void 0:_.type)&&xn(i.$.type),x=N(i)&&Fn(i);if((m=i.$)!=null&&m.variableName){let M=He(i.$.variableName,i.$.env),q=He(C,r.$.env);if(M===q){if(S=B(i,t,n),!O&&!x&&((g=i.$)!=null&&g.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Mt(i,t,o);let P=i.$.deferredDupExpressions[0];N(P)&&((y=P.$)!=null&&y.variableName)&&(S=He(P.$.variableName,P.$.env))}}else if(Y(i)&&M===He(i.token.value,i.$.env)){if(S=B(i,t,n),!O&&!x&&((h=i.$)!=null&&h.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Mt(i,t,o);let P=i.$.deferredDupExpressions[0];N(P)&&((v=P.$)!=null&&v.variableName)&&(S=He(P.$.variableName,P.$.env))}}else if(Y(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&(($=i.$)!=null&&$.env)&&o.currentClosureCaptureFrameLevel!==void 0&&ei(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let P=o.currentClosureType;if(P&&P.isClosure){let G=Object.values(o.types).find(z=>z.type===P);G?S=`((${`${G.cName}_capture`}*)closure_context->data)->${He(i.token.value,i.$.env)}`:S=`closure_context->${He(i.token.value,i.$.env)}`}else S=`closure_context->${He(i.token.value,i.$.env)}`}else{let P=B(i,t,n);if(P.trim()!==M){let G=i.$.convertedRuntimeType||i.$.type,z=Ut(G,M,n);n.emitter.emitLine(`${t}${z} = ${P};`)}if(!O&&!x&&((E=i.$)!=null&&E.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Mt(i,t,o);let G=i.$.deferredDupExpressions[0];N(G)&&((w=G.$)!=null&&w.variableName)?S=He(G.$.variableName,G.$.env):S=M}else S=M}}else if(S=B(i,t,n),!O&&!x&&((L=i.$)!=null&&L.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Mt(i,t,o);let M=i.$.deferredDupExpressions[0];N(M)&&((b=M.$)!=null&&b.variableName)&&(S=He(M.$.variableName,M.$.env))}if(Lt(r.$.type)){let M=r.$.type;if(A&&I)n.emitter.emitLine(`${t}sm->var_${I} = ${S};`);else if(!xe(M)){let q=Ut(M,C,n);n.emitter.emitLine(`${t}${q} = ${S};`)}}else if(A&&I)n.emitter.emitLine(`${t}sm->var_${I} = ${S};`);else{let M=Bt(i.$.env.modulePath,S.trim()),q;if(M&&n.tempVarAsyncStructNames){let P=n.tempVarAsyncStructNames.get(S.trim());P?q=`${P}*`:q=H(r.$.type,n)}else q=H(r.$.type,n);xe(r.$.type)||n.emitter.emitLine(`${t}${q} ${He(C,r.$.env)} = ${S};`)}}return""}}var wg=0;function Ia(e,t,n,r,i=" "){var o,a,s,l,u,c;if(k.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(k.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(k.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(k.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(k.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(k.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(k.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(k.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(k.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(k.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(k.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(k.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(k.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(k.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(k.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(k.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(k.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(k.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(k.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(k.__yo_noop.includes(e))return"";if(k.__yo_return_self.includes(e))return`(*${t[0]})`;if(k.__yo_ms_sleep.includes(e))return`(
|
|
10649
10649
|
#ifdef _WIN32
|
|
10650
10650
|
Sleep(${t[0]})
|
|
10651
10651
|
#else
|
|
10652
10652
|
usleep((${t[0]}) * 1000)
|
|
10653
10653
|
#endif
|
|
10654
|
-
)`;if(k.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(k.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let f=H(n.$.type,r),p=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return p&&Ue(p)&&!_r(p)?`((${f})((${t[0]}).tag))`:`((${f})(${t[0]}))`}else{if(k.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(k.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(k.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(k.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(k.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(k.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(k.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(k.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(k.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${H(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(k.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(k.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(k.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(k.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let f=H(n.$.type,r),p=`__yo_uninit_${wg++}`;return r.emitter.emitLine(`${i}${f} ${p};`),p}else return k.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${H(n.$.type,r)})(${t[0]}))`:k.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function n_(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||!un(o))return"// Error: __yo_iso_extract requires an Iso type";let a=H(o,n),s=(f=e.$)==null?void 0:f.type;if(s&&((p=n.isoTypes)!=null&&p.has(a))){let m=n.isoTypes.get(a);m.optionTypeCName||(m.optionTypeCName=H(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(_=e.$)==null?void 0:_.variableName;return u&&s?(n.emitter.emitLine(`${t}${H(s,n)} ${u} = ${l};`),u):l}function r_(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||!un(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(o,n)}(${i})`}function nu(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&un(t.value)&&e.args.length===1}function i_(e,t,n){var c;if(!nu(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=H(i,n),u=H(o,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(l)||n.isoTypes.set(l,{childTypeCName:u,isoType:i}),`__yo_create_iso_${l}(${s})`}function di(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function mi(e,t,n){var r,i,o,a,s,l,u;if(N(e)&&T(e,D.begin)){let c=e.args,f=n,p=f.pendingDeferredDrops,_=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];f.pendingDeferredDrops=[..._,...p??[]];let m=f.consumedVarPendingDrops,g=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];f.consumedVarPendingDrops=[...g,...m??[]];for(let h=0;h<c.length-1;h++){let v=c[h],$=B(v,t,n);$&&n.emitter.emitLine(`${t}${$};`)}let y="";if(c.length>0){let h=c[c.length-1];if((o=h.$)!=null&&o.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){if((a=h.$)!=null&&a.variableName){let $=h.$.variableName;h.$.variableName=void 0;let E=B(h,t,n);h.$.variableName=$;let w=H(h.$.type,n),L=He($,h.$.env);L!==E&&n.emitter.emitLine(`${t}${w} ${L} = ${E};`)}Mt(h,t,n);let v=h.$.deferredDupExpressions[0];N(v)&&((s=v.$)!=null&&s.variableName)?y=He(v.$.variableName,v.$.env):y=B(h,t,n)}else y=B(h,t,n)}return(l=e.$)!=null&&l.deferredDropExpressions&&an(e,t,n),f.pendingDeferredDrops=p,f.consumedVarPendingDrops=m,y}else return(u=e.$)!=null&&u.deferredDupExpressions&&Mt(e,t,n),B(e,t,n)}function a_(e,t,n){var g,y,h,v,$,E,w;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&xe(i);if(!o&&r){let L=H(i,n);n.emitter.emitLine(`${t}${L} ${r};`)}let a=B(e.args[0],t,n),s=(g=e.args[0].$)==null?void 0:g.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return Lg(e,t,n,a,s,r,o);let l,u;if(it(s)?(u=s.childType,l=s.tag):Wt(s)?(u=s,l="ref_semantics"):u=s,!Ue(u))return'// Error: "match" expression requires an enum type';if(!((y=n.types[u.id])==null?void 0:y.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let f=Ln(u);if(f){let L=e.args.slice(1),b=null,C=null;for(let A of L)if(N(A)&&T(A,"=>",2)){let I=A.args[0],S=A.args[1];if(I&&S&&N(I)&&T(I,"."))b={caseBody:S};else{let O=I.func;if(O&&N(O)&&T(O,".")){let x=O.args[0];if(x&&Y(x)){let M=x.token.value;C={caseBody:S,variantName:M,casePattern:I}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),C){let A;if(N(C.casePattern)&&C.casePattern.args.length>0){let x=C.casePattern.args[0];if(x&&Y(x)){A=me(x.token.value);let M=f;n.emitter.emitLine(`${t} ${H(M,n)} ${A} = ${a};`)}}let I=n;A&&(I.inAsyncStateMachine||I.inEffectStateMachine)&&(I.localShadowedVariables||(I.localShadowedVariables=new Set),I.localShadowedVariables.add(A));let S=mi(C.caseBody,t+" ",n);A&&I.localShadowedVariables&&I.localShadowedVariables.delete(A);let O=di(S);if(!o&&r&&!O){let x=S||a;n.emitter.emitLine(`${t} ${r} = ${x};`)}else S&&S!==""&&n.emitter.emitLine(`${t} ${S};`)}if(n.emitter.emitLine(`${t}} else {`),b){let A=mi(b.caseBody,t+" ",n),I=di(A);!o&&r&&!I?n.emitter.emitLine(`${t} ${r} = ${A};`):A&&A!==""&&n.emitter.emitLine(`${t} ${A};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(_r(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let L=n.insideMatch;n.insideMatch=!0;let b=e.args.slice(1);for(let C=0;C<b.length;C++){let A=b[C];if(N(A)&&T(A,"=>",2)){let I=A.args[0],S=A.args[1];if(I&&S&&Y(I)&&I.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let O=mi(S,t+" ",n);!o&&r&&O&&!di(O)?n.emitter.emitLine(`${t} ${r} = ${O};`):O&&n.emitter.emitLine(`${t} ${O};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(I&&S&&N(I)&&T(I,".",1)){let O=I.args[0].token.value,x=Dn(u,O,n);n.emitter.emitLine(`${t}case ${x}: {`);let M=mi(S,t+" ",n);!o&&r&&M&&!di(M)?n.emitter.emitLine(`${t} ${r} = ${M};`):M&&n.emitter.emitLine(`${t} ${M};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=L,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let _=n.insideMatch;n.insideMatch=!0;let m=e.args.slice(1);for(let L=0;L<m.length;L++){let b=m[L];if(N(b)&&T(b,"=>",2)){let C=b.args[0],A=b.args[1];if(C&&A&&Y(C)&&C.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let I=mi(A,t+" ",n);!o&&r&&I&&!di(I)?n.emitter.emitLine(`${t} ${r} = ${I};`):I&&n.emitter.emitLine(`${t} ${I};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&A&&N(C)&&C.func.tag==="Atom"&&C.func.token.value==="."&&C.args.length>=1){let I=C.args[0].token.value,S=Dn(u,I,n);if(n.emitter.emitLine(`${t}case ${S}: {`),C.args.length>1){let x=u.variants.find(M=>M.name===I);if(x&&x.fields){let M=C.args.slice(1);if(M.some(P=>N(P)&&T(P,":",2))){for(let P of M)if(N(P)&&T(P,":",2)){let G=P.args[0],z=P.args[1];if(!Y(G))continue;let K=G.token.value,re=x.fields.find(J=>J.label===K);if(!re||xe(re.type))continue;if(Y(z)){let J=z.token.value;if(J!=="_"){let ue=me(J),ge=me(K),Z=H(re.type,n),ce=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Z} ${ue} = ${a}${ce}data.${I}.${ge};`);let X=n;if((X!=null&&X.inAsyncStateMachine||X!=null&&X.inEffectStateMachine)&&X.stateMachineVariables){let pe;if((h=z.$)!=null&&h.env){let Ce=le(z.$.env,J);Ce.length>0&&(pe=Ce[Ce.length-1].id)}pe&&X.stateMachineVariables.has(pe)&&n.emitter.emitLine(`${t} sm->var_${pe} = ${ue};`)}}}}}else for(let P=0;P<M.length&&P<x.fields.length;P++){let G=M[P],z=x.fields[P];if(Y(G)&&z){if(xe(z.type))continue;let K=G.token.value;if(K!=="_"){let re=me(K),J=me(z.label),ue=H(z.type,n),ge=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ue} ${re} = ${a}${ge}data.${I}.${J};`);let Z=n;if((Z!=null&&Z.inAsyncStateMachine||Z!=null&&Z.inEffectStateMachine)&&Z.stateMachineVariables){let ce;if((v=G.$)!=null&&v.env){let X=le(G.$.env,K);X.length>0&&(ce=X[X.length-1].id)}ce&&Z.stateMachineVariables.has(ce)&&n.emitter.emitLine(`${t} sm->var_${ce} = ${re};`)}}}}}}if(N(A)&&T(A,"=>",2)){let x=A.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${me(x.token.value)} = ${a};`),A=A.args[1]}let O=mi(A,t+" ",n);!o&&r&&O&&!di(O)?n.emitter.emitLine(`${t} ${r} = ${O};`):O&&n.emitter.emitLine(`${t} ${O};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&A&&N(C)&&N(C.func)&&C.func.func.tag==="Atom"&&C.func.func.token.value==="."&&C.func.args.length===1){let I=C.func.args[0].token.value,S=Dn(u,I,n),O=C.args;n.emitter.emitLine(`${t}case ${S}: {`);let x=u.variants.find(q=>q.name===I);if(x&&x.fields&&O.length>0)if(O.some(P=>N(P)&&T(P,":",2))){for(let P of O)if(N(P)&&T(P,":",2)){let G=P.args[0],z=P.args[1];if(!Y(G))continue;let K=G.token.value,re=x.fields.find(J=>J.label===K);if(!re)continue;if(Y(z)){let J=z.token.value;if(J!=="_"){let ue=me(J);if(xe(re.type))n.emitter.emitLine(`${t} // ${ue} is unit type (no value)`);else{let ge=me(K),Z=H(re.type,n),ce=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Z} ${ue} = ${a}${ce}data.${I}.${ge};`);let X=n;if((X!=null&&X.inAsyncStateMachine||X!=null&&X.inEffectStateMachine)&&X.stateMachineVariables){let pe;if(($=z.$)!=null&&$.env){let Ce=le(z.$.env,ue);Ce.length>0&&(pe=Ce[Ce.length-1].id)}pe&&X.stateMachineVariables.has(pe)&&n.emitter.emitLine(`${t} sm->var_${pe} = ${ue};`)}}}}}}else for(let P=0;P<Math.min(O.length,x.fields.length);P++){let G=O[P],z=x.fields[P];if(G.tag==="Atom"&&z){let K=G.token.value;if(K!=="_"){let re=me(K);if(xe(z.type))n.emitter.emitLine(`${t} // ${re} is unit type (no value)`);else{let J=me(z.label),ue=H(z.type,n),ge=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ue} ${re} = ${a}${ge}data.${I}.${J};`);let Z=n;if((Z!=null&&Z.inAsyncStateMachine||Z!=null&&Z.inEffectStateMachine)&&Z.stateMachineVariables){let ce;if((E=G.$)!=null&&E.env){let X=le(G.$.env,K);X.length>0&&(ce=X[X.length-1].id)}ce&&Z.stateMachineVariables.has(ce)&&n.emitter.emitLine(`${t} sm->var_${ce} = ${re};`)}}}}}if(N(A)&&T(A,"=>",2)){let q=A.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${me(q.token.value)} = ${a};`),A=A.args[1]}let M=mi(A,t+" ",n);!o&&r&&M&&!di(M)?n.emitter.emitLine(`${t} ${r} = ${M};`):M&&n.emitter.emitLine(`${t} ${M};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=_,n.emitter.emitLine(`${t}}`),(w=e.$)!=null&&w.deferredDropExpressions&&an(e,t,n),o?"":r??""}function Fg(e){return N(e)?T(e,"|",2):!1}function ru(e){if(!Fg(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...ru(n),...ru(r)]}function o_(e){if(e!==void 0){if(yt(e))return String(e.value);if(ht(e))return e.value?"true":"false"}}function Lg(e,t,n,r,i,o,a){var u,c,f;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let p=0;p<l.length;p++){let _=l[p];if(N(_)&&T(_,"=>",2)){let m=_.args[0],g=_.args[1];if(!m||!g)continue;if(Y(m)&&m.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let $=mi(g,t+" ",n);!a&&o&&$&&!di($)?n.emitter.emitLine(`${t} ${o} = ${$};`):$&&n.emitter.emitLine(`${t} ${$};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let y=ru(m),h=(u=m.$)==null?void 0:u.primitivePatternValues;if(h&&h.length>0)for(let $ of h){let E=o_($);E!==void 0&&n.emitter.emitLine(`${t}case ${E}:`)}else for(let $ of y){let E=(c=$.$)==null?void 0:c.value,w=o_(E);w!==void 0&&n.emitter.emitLine(`${t}case ${w}:`)}n.emitter.emitLine(`${t}{`);let v=mi(g,t+" ",n);!a&&o&&v&&!di(v)?n.emitter.emitLine(`${t} ${o} = ${v};`):v&&n.emitter.emitLine(`${t} ${v};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(f=e.$)!=null&&f.deferredDropExpressions&&an(e,t,n),a?"":o??""}function s_(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(Me(a)&&s===void 0){let l=B(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let f=H(c.type,n),p=me(c.variableName),_=me(c.label);n.emitter.emitLine(`${t}${f} ${p} = ${l}.${_};`)}}}return""}function l_(e,t,n){var g,y,h,v,$;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=(y=i.$)==null?void 0:y.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(U(o)){let E=o;E.resolvedConcreteType&&(a=E.resolvedConcreteType.id,s=E.resolvedConcreteType)}else Me(o)&&(a=o.id,s=o);if(!a||!s)return"/* Error: __yo_thread_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_thread_spawn could not find closure function for type ${a} */`;let u=l.functionCName,c=H(s,n),f=B(i,t,n),p=(h=i.$)!=null&&h.variableName?He(i.$.variableName,i.$.env):f,_=`_thread_closure_data_${Et(((v=e.$)==null?void 0:v.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`);let m=($=e.$)==null?void 0:$.variableName;return m?(n.emitter.emitLine(`${t}__yo_thread_t ${m} = __yo_thread_spawn(${u}, ${_});`),m):`__yo_thread_spawn(${u}, ${_})`}function u_(e,t,n){var m,g,y,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=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(U(o)){let v=o;v.resolvedConcreteType&&(a=v.resolvedConcreteType.id,s=v.resolvedConcreteType)}else Me(o)&&(a=o.id,s=o);if(!a||!s)return"/* Error: __yo_worker_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_worker_spawn could not find closure function for type ${a} */`;let u=l.functionCName,c=H(s,n),f=B(i,t,n),p=(y=i.$)!=null&&y.variableName?He(i.$.variableName,i.$.env):f,_=`_worker_closure_data_${Et(((h=e.$)==null?void 0:h.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${_});`),""}function c_(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 f_(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 pr(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&&Ke(i.type))return;let o=`var_${i.id}`,a=me(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function d_(e,t,n){var o,a,s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b,C,A,I,S,O,x,M,q,P,G,z,K,re,J,ue,ge,Z,ce,X,pe,Ce,Ae,ut,se,he,te,ke,Be,Xe,wt,j,Q,oe,we,Ie,Ve,Ge,je,St,zn,ct,Yt,lr,mt,tn,nn,Cn,sn,ye,Te,$e,de;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Re(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&an(e,t,n),xe(e.$.type)?"":Mn(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(ve(r)?r.specializedType??r.type:void 0);if(ee(i)){let Ee=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(Ee){let Ne=!1;if(N(e.func)&&T(e.func,".",2)){let _e=e.func.args[0],De=(c=_e==null?void 0:_e.$)==null?void 0:c.type;De&&Qe(De)&&(Ne=!0)}let rt=Ee.map((_e,De)=>{var Pe,at,qe,Ye,Le,pt,be,nt,_t;if((Pe=_e.$)!=null&&Pe.variableName&&((at=_e.$)!=null&&at.type)){let $t=n,Vt=$t.currentClosureCaptures&&$t.currentClosureCaptures.includes(_e.$.variableName)&&Y(_e)&&_e.$.env&&$t.currentClosureCaptureFrameLevel!==void 0&&Jr(_e.token.value,_e.$.env,$t.currentClosureCaptureFrameLevel),At=B(_e,t,n),xt=!1;if(Y(_e)&&_e.$.env&&_e.$.variableName){let Wn=le(_e.$.env,_e.$.variableName);Wn.length>0&&Wn[Wn.length-1].isCompileTimeOnly&&(xt=!0)}let _n=($t.inAsyncStateMachine||$t.inEffectStateMachine)&&At.startsWith("sm->"),rr=!1;if(At&&At!==_e.$.variableName&&!Vt&&!_n&&!xt){let Wn=He(_e.$.variableName,_e.$.env);if(At!==Wn){let jn=_e.$.convertedRuntimeType||_e.$.type,ti=Ut(jn,_e.$.variableName,n);n.emitter.emitLine(`${t}${ti} = ${At};`),rr=!0,pr(_e.$.variableName,t,n)}}let gi=rr?_e.$.variableName:At;if((qe=_e.$)!=null&&qe.deferredDupExpressions&&_e.$.deferredDupExpressions.length>0){let Wn=new Set;(Ye=_e.$)!=null&&Ye.variableName&&Wn.add(He(_e.$.variableName,_e.$.env)),At&&Wn.add(At),Y(_e)&&Wn.add(He(_e.token.value,_e.$.env));let jn=_e.$.deferredDupExpressions.find(ti=>{var Oi;let hi=Ts(ti);return hi?Wn.has(He(hi,(Oi=ti.$)==null?void 0:Oi.env)):!1});jn&&(Mt(_e,t,$t),N(jn)&&((Le=jn.$)!=null&&Le.variableName)&&(gi=He(jn.$.variableName,jn.$.env)))}if(Ne&&De===0){if(N(e.func)&&T(e.func,".",2)){let jn=e.func.args[0],ti=(pt=jn==null?void 0:jn.$)==null?void 0:pt.type,hi=e.func.args[1];if(Y(hi)&&Qe(ti)){let Oi=hi.token.value;if(ti.trait.fields.find(Rs=>Rs.label===Oi))return _n?At:me(gi,_e.$.type.isExtern==="c")}}let Wn=(be=_e.$)==null?void 0:be.type;return Wn&&it(Wn)?_n?`${At}->data`:`${me(gi,_e.$.type.isExtern==="c")}->data`:_n?`(${At}).data`:`(${me(gi,_e.$.type.isExtern==="c")}).data`}else return Vt||_n||xt?At:me(gi,_e.$.type.isExtern==="c")}else if(Ne&&De===0){let $t=B(_e,t,n);if(N(e.func)&&T(e.func,".",2)){let At=e.func.args[0],xt=(nt=At==null?void 0:At.$)==null?void 0:nt.type,_n=e.func.args[1];if(Y(_n)&&Qe(xt)){let rr=_n.token.value;if(xt.trait.fields.find(Wn=>Wn.label===rr))return $t}}let Vt=(_t=_e.$)==null?void 0:_t.type;return Vt&&it(Vt)?`(${$t})->data`:`(${$t}).data`}else return B(_e,t,n)}),Se=rt.join(", ");if(i.isExtern==="yo"&&i.externName){let _e=i.externName;return no.includes(_e)?Ia(_e,rt,e,n,t):_e==="__yo_thread_spawn"?l_(e,t,n):_e==="__yo_worker_spawn"?u_(e,t,n):xe(i.return.type)?(n.emitter.emitLine(`${t}${_e}(${Se});`),(f=e.$)!=null&&f.deferredDropExpressions&&an(e,t,n),""):`${_e}(${Se})`}{let _e=n;if((p=_e.currentEvidenceParams)!=null&&p.size){let De=(_=e.func.token)==null?void 0:_.value,Pe;if(De==="."&&N(e.func)&&T(e.func,".",2)){let at=e.func.args[1];at&&Y(at)&&(De=at.token.value);let qe=e.func.args[0];if(qe&&Y(qe))Pe=qe.token.value;else if(qe&&N(qe)&&T(qe,".",2)){let Ye=qe.args[0];Ye&&Y(Ye)&&(Pe=Ye.token.value)}}if(De&&De!=="."){for(let at of _e.currentEvidenceParams.values())if(at.fieldLabel===De||at.implicitLabel===De||at.fieldPath[at.fieldPath.length-1]===De){if(Pe&&Pe!==at.implicitLabel)continue;return p_(at.cParamName,i,rt,Ee,e,t,_e,at)}}}}if(ve(r)){let _e=xo(r);if(_e)return Ia(_e,rt,e,n,t);let De=r.specializedType??r.type,Pe=n;if(Pe.currentEvidenceParams&&r.isModuleEffectMember){let qe,Ye=((m=e.func.$)==null?void 0:m.env)??((g=e.$)==null?void 0:g.env);if(Ye)for(let Le of Pe.currentEvidenceParams.values()){let pt=le(Ye,Le.implicitLabel),be=pt[pt.length-1],nt=(y=be==null?void 0:be.value)==null?void 0:y[0];if(nt&&vt(nt)){let _t=nt,$t=!0;for(let Vt=0;Vt<Le.fieldPath.length-1;Vt++){let At=Le.fieldPath[Vt],xt=_t.type.fields.findIndex(_n=>_n.label===At);if(xt>=0&&_t.fields[xt]&&vt(_t.fields[xt]))_t=_t.fields[xt];else{$t=!1;break}}if($t){let Vt=Le.fieldPath[Le.fieldPath.length-1],At=_t.type.fields.findIndex(xt=>xt.label===Vt);if(At>=0){let xt=_t.fields[At];if(xt&&ve(xt)&&xt.funcId===r.funcId){qe=Le;break}}}}}if(qe){let Le=qe.cParamName;return p_(Le,De,rt,Ee,e,t,Pe,qe)}}let at=(h=n.functions[r.funcId])==null?void 0:h.cName;if(at){let qe=r.specializedType??r.type,Ye=fn(qe);if(Ye.length===0&&r.specializedType){let be=fn(r.type);be.length>0&&be.some(nt=>nt.fieldFunctionType.forallParameters&&nt.fieldFunctionType.forallParameters.length>0)&&(Ye=be)}if(Ye.length>0){let{args:be,isHandlerInstallation:nt}=iu(Ye,r,e,n);if(be.length>0){let _t=Se?`${Se}, ${be.join(", ")}`:be.join(", ");return ou(at,_t,De,e,Ee,t,n,nt)}}let Le=r.isControlFunction||r.isModuleEffectMember||((E=($=(v=r.body)==null?void 0:v.$)==null?void 0:$.effectAnalysis)==null?void 0:E.hasEffects),pt=!1;if(Le){if(r.isControlFunction||r.isModuleEffectMember){let be=((L=(w=e.func)==null?void 0:w.$)==null?void 0:L.env)??((b=e.$)==null?void 0:b.env);if(be){let nt=$a(be,_t=>{var $t;return _t.isImplicit===!0&&ve(($t=_t.value)==null?void 0:$t[0])&&_t.value[0].funcId===r.funcId});nt>=0&&nt>be.functionDeclarationFrameLevel&&((C=be.frames[nt])!=null&&C.isBeginBlockFrame)&&(pt=!0)}}else if(r.specializedType){let be=fn(r.type);if(be.length>0){let nt=((I=(A=e.func)==null?void 0:A.$)==null?void 0:I.env)??((S=e.$)==null?void 0:S.env);if(nt)for(let _t of be){let $t=$a(nt,Vt=>Vt.isImplicit===!0&&(Vt.name===_t.implicitLabel||Vt.name===_t.fieldLabel));if($t>=0&&$t>nt.functionDeclarationFrameLevel&&((O=nt.frames[$t])!=null&&O.isBeginBlockFrame)){pt=!0;break}}}}}if(xe(De.return.type))return n.emitter.emitLine(`${t}${at}(${Se});`),(x=e.$)!=null&&x.deferredDropExpressions&&an(e,t,n),Le&&__(t,n,pt,e),"";{let be=(M=e.$)==null?void 0:M.variableName;if(be){let nt=((q=r.specializedType)==null?void 0:q.return.type)??De.return.type,_t=(P=e.$)==null?void 0:P.type,$t=_t&&Ke(_t),Vt=nt&&Ke(nt),At;if($t&&Vt){let xt=r.body;if(xt&&T(xt,"begin")){let _n=xt.args;if(_n.length>0){let rr=_n[_n.length-1];Fn(rr)&&(xt=rr)}}if(xt&&Fn(xt)&&((G=xt.$)!=null&&G.asyncStateMachineStructName)){let _n=xt.$.asyncStateMachineStructName;At=`${_n}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(be,_n)}else _t&&U(_t)&&_t.resolvedConcreteType?At=H(_t,n):At=H(nt,n)}else At=H(nt??_t,n);return n.emitter.emitLine(`${t}${At} ${be} = ${at}(${Se});`),pr(be,t,n),(z=e.$)!=null&&z.deferredDropExpressions&&an(e,t,n),Le&&__(t,n,pt,e),be}else return`// Error: Regular function call returns ${H(((K=r.specializedType)==null?void 0:K.return.type)??De.return.type,n)} but no temp variable assigned`}}}else{let _e=n.externFunctions[i.id];if(_e){let De=_e.cName;return(re=e.$)!=null&&re.deferredDropExpressions&&an(e,t,n),`${De}(${Se})`}else{let De=B(e.func,t,n);if(r&&ee(r.type)){let be=fn(r.type);if(be.length>0){let{args:nt,isHandlerInstallation:_t}=iu(be,r,e,n);if(nt.length>0){let $t=Se?`${Se}, ${nt.join(", ")}`:nt.join(", ");return ou(De,$t,i,e,Ee,t,n,_t)}}}let Pe=((J=e.$)==null?void 0:J.type)??i.return.type,at=H(Pe,n),qe=i.parameters.filter(be=>!be.isCompileTimeOnly).map(be=>H(be.type,n)),Ye=`((${at} (*)(${qe.join(", ")}))${De})`,Le=n,pt=De.includes("__capture.")&&!!Le.inAsyncStateMachine;if(pt&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),xe(i.return.type)||xe(Pe)){if(n.emitter.emitLine(`${t}${Ye}(${Se});`),(ue=e.$)!=null&&ue.deferredDropExpressions&&an(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Ee){for(let be of Ee)if((ge=be.$)!=null&&ge.variableName&&((Z=be.$)!=null&&Z.type)&&tt(be.$.type)){let nt=f_(me(be.$.variableName),n),_t=_i(nt,be.$.type,n);_t&&(n.emitter.emitLine(`${t} ${_t};`),n.emitter.emitLine(`${t} memset(&${nt}, 0, sizeof(${nt}));`))}}$r({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let be=(ce=e.$)==null?void 0:ce.variableName;if(be){let nt=i.return.type,_t=(X=e.$)==null?void 0:X.type,$t=_t&&nt&&Ke(_t)&&Ke(nt)?nt:_t??nt;if(n.emitter.emitLine(`${t}${H($t,n)} ${be} = ${Ye}(${Se});`),pr(be,t,n),(pe=e.$)!=null&&pe.deferredDropExpressions&&an(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Ee){for(let Vt of Ee)if((Ce=Vt.$)!=null&&Ce.variableName&&((Ae=Vt.$)!=null&&Ae.type)&&tt(Vt.$.type)){let At=f_(me(Vt.$.variableName),n),xt=_i(At,Vt.$.type,n);xt&&(n.emitter.emitLine(`${t} ${xt};`),n.emitter.emitLine(`${t} memset(&${At}, 0, sizeof(${At}));`))}}$r({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return be}else return`// Error: Function parameter call returns ${H(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&xn(i)){let Ee=i,Ne=Un(Ee),rt=Qe(Ee);{let Se=Ne.isFn.callType,_e=(ut=e.$)==null?void 0:ut.runtimeArgExprsInOrder;if(_e){let De=n;for(let Le of _e)if((se=Le.$)!=null&&se.variableName&&((he=Le.$)!=null&&he.type)){let pt=De.currentClosureCaptures&&De.currentClosureCaptures.includes(Le.$.variableName)&&Y(Le)&&Le.$.env&&De.currentClosureCaptureFrameLevel!==void 0&&Jr(Le.token.value,Le.$.env,De.currentClosureCaptureFrameLevel),be=B(Le,t,n),nt=!1;if(Y(Le)&&Le.$.env&&Le.$.variableName){let $t=le(Le.$.env,Le.$.variableName);$t.length>0&&$t[$t.length-1].isCompileTimeOnly&&(nt=!0)}let _t=(De.inAsyncStateMachine||De.inEffectStateMachine)&&be.startsWith("sm->");if(be&&be!==Le.$.variableName&&!pt&&!_t&&!nt){let $t=Le.$.convertedRuntimeType||Le.$.type,Vt=Ut($t,Le.$.variableName,n);n.emitter.emitLine(`${t}${Vt} = ${be};`),pr(Le.$.variableName,t,n)}}let Pe=B(e.func,t,n),at=_e.map(Le=>{var pt,be,nt,_t;if((pt=Le.$)!=null&&pt.variableName&&((be=Le.$)!=null&&be.type)){if(De.currentClosureCaptures&&De.currentClosureCaptures.includes(Le.$.variableName)&&Y(Le)&&Le.$.env&&De.currentClosureCaptureFrameLevel!==void 0&&Jr(Le.token.value,Le.$.env,De.currentClosureCaptureFrameLevel))return B(Le,t,n);{let Vt=He(Le.$.variableName,Le.$.env),At=(De.inAsyncStateMachine||De.inEffectStateMachine)&&Vt.startsWith("sm->"),xt=Vt;if((nt=Le.$)!=null&&nt.deferredDupExpressions&&Le.$.deferredDupExpressions.length>0){Mt(Le,t,De);let _n=Le.$.deferredDupExpressions[0];N(_n)&&((_t=_n.$)!=null&&_t.variableName)&&(xt=He(_n.$.variableName,_n.$.env))}return At?Vt:xt}}else return B(Le,t,n)}),qe;if(rt){let Le=[`(${Pe}).data`,...at];qe=`(${Pe}).vtable->call(${Le.join(", ")})`}else{let Le;if(U(Ee)){let be=Ee;be.resolvedConcreteType&&(Le=be.resolvedConcreteType.id)}let pt=Le?n.implClosureCallMap.get(Le):void 0;if(pt){let be=fn(Se);if(be.length>0){let{args:_t,isHandlerInstallation:$t}=iu(be,{},e,De);if(_t.length>0){let Vt=[`&(${Pe})`,...at,..._t];return ou(pt.functionCName,Vt.join(", "),Se,e,_e,t,De,$t)}}let nt=[`&(${Pe})`,...at];qe=`${pt.functionCName}(${nt.join(", ")})`}else{let be=[`(${Pe}).data`,...at];qe=`(${Pe}).call(${be.join(", ")})`}}let Ye=Se.return.type;if(xe(Ye))return n.emitter.emitLine(`${t}${qe};`),(te=e.$)!=null&&te.deferredDropExpressions&&an(e,t,n),"";{let Le=(ke=e.$)==null?void 0:ke.variableName;return Le?(n.emitter.emitLine(`${t}${H(Ye,n)} ${Le} = ${qe};`),pr(Le,t,n),(Be=e.$)!=null&&Be.deferredDropExpressions&&an(e,t,n),Le):`// Error: Closure call returns ${H(Ye,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(W(r))if(Me(r.value)){let Ee=r.value,Ne=(Xe=e.$)==null?void 0:Xe.runtimeArgExprsInOrder,rt=(wt=n.types[Ee.id])==null?void 0:wt.cName,Se=Ee.fields.map(De=>De.label),_e=(j=e.$)==null?void 0:j.variableName;if(Ne&&rt&&Se.length===Ne.length){if(Ee.isNewtype&&Ee.fields.length===1){let De=Ne[0],Pe=B(De,t,n),at=Pe;if((Q=De.$)!=null&&Q.deferredDupExpressions&&De.$.deferredDupExpressions.length>0){let Ye=n;if((oe=De.$)!=null&&oe.variableName&&((we=De.$)!=null&&we.type)){let pt=He(De.$.variableName,De.$.env);if(Pe!==pt){let be=De.$.type,nt=H(be,n);n.emitter.emitLine(`${t}${nt} ${pt} = ${Pe};`)}}Mt(De,t,Ye);let Le=De.$.deferredDupExpressions[0];N(Le)&&((Ie=Le.$)!=null&&Ie.variableName)&&(at=He(Le.$.variableName,Le.$.env))}let qe=`((${rt})(${at}))`;if(_e&&((Ve=e.$)!=null&&Ve.type)){let Ye=Ut(e.$.type,_e,n);return n.emitter.emitLine(`${t}${Ye} = ${qe};`),pr(_e,t,n),_e}else return qe}if(Ee.isReferenceSemantics){let De=n,Pe=Ne.map(Ye=>{var pt,be,nt,_t;let Le=B(Ye,t,n);if((pt=Ye.$)!=null&&pt.deferredDupExpressions&&Ye.$.deferredDupExpressions.length>0){if((be=Ye.$)!=null&&be.variableName&&((nt=Ye.$)!=null&&nt.type)){let Vt=He(Ye.$.variableName,Ye.$.env);if(Le!==Vt){let At=Ye.$.type,xt=H(At,n);n.emitter.emitLine(`${t}${xt} ${Vt} = ${Le};`)}}Mt(Ye,t,De);let $t=Ye.$.deferredDupExpressions[0];if(N($t)&&((_t=$t.$)!=null&&_t.variableName))return He($t.$.variableName,$t.$.env)}return Le}).join(", "),qe=`${`__yo_new_${rt}`}(${Pe})`;if(_e&&((Ge=e.$)!=null&&Ge.type)){let Ye=Ut(e.$.type,_e,n);return n.emitter.emitLine(`${t}${Ye} = ${qe};`),pr(_e,t,n),_e}else return qe}else{let De=n,Pe=Ne.map((qe,Ye)=>{var nt,_t,$t,Vt;let Le=B(qe,t,n),pt=Je(Ee)?`_${Ye}`:me(Se[Ye],Ee.isExtern==="c"),be=Le;if((nt=qe.$)!=null&&nt.deferredDupExpressions&&qe.$.deferredDupExpressions.length>0){if((_t=qe.$)!=null&&_t.variableName&&(($t=qe.$)!=null&&$t.type)){let xt=He(qe.$.variableName,qe.$.env),_n=qe.$.type,rr=H(_n,n);Le!==xt&&n.emitter.emitLine(`${t}${rr} ${xt} = ${Le};`)}Mt(qe,t,De);let At=qe.$.deferredDupExpressions[0];N(At)&&((Vt=At.$)!=null&&Vt.variableName)&&(be=He(At.$.variableName,At.$.env))}return`.${pt} = `+be}).join(", "),at=`(${rt}){ ${Pe} }`;if(_e&&((je=e.$)!=null&&je.type)){let qe=Ut(e.$.type,_e,n);return n.emitter.emitLine(`${t}${qe} = ${at};`),pr(_e,t,n),_e}else return at}}}else{if(xn(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(jt(r.value)){let Ee=(St=e.$)==null?void 0:St.variableName,Ne=e.args[0];if(Ne&&N(Ne)&&T(Ne,":",2)){let rt=Ne.args[0],Se=Ne.args[1],_e=(zn=n.types[r.value.id])==null?void 0:zn.cName;if(_e&&Y(rt)&&Se){let De=n,Pe=rt.token.value,at=He(Pe,(ct=rt.$)==null?void 0:ct.env),Ye=B(Se,t,n);if((Yt=Se.$)!=null&&Yt.deferredDupExpressions&&Se.$.deferredDupExpressions.length>0){Mt(Se,t,De);let pt=Se.$.deferredDupExpressions[0];N(pt)&&((lr=pt.$)!=null&&lr.variableName)&&(Ye=He(pt.$.variableName,pt.$.env))}let Le=`(${_e}){ .${at} = ${Ye} }`;if(Ee&&((mt=e.$)!=null&&mt.type)){let pt=Ut(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${pt} = ${Le};`),pr(Ee,t,n),Ee}else return Le}}}else if(Ue(r.value)){let Ee=r.value,Ne=(tn=e.$)==null?void 0:tn.runtimeArgExprsInOrder,rt=(nn=n.types[Ee.id])==null?void 0:nn.cName,Se=(Cn=e.$)==null?void 0:Cn.variableName;if(Ee.selectedVariantName&&Ne&&rt){if(Ln(Ee)){let qe=Ee.selectedVariantName,Ye=Ee.variants.find(Le=>Le.name===qe);if(Ye){if(!Ye.fields||Ye.fields.length===0){let Le="NULL";if(Se&&((sn=e.$)!=null&&sn.type)){let pt=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${pt} = ${Le};`),pr(Se,t,n),Se}else return Le}else if(Ye.fields.length===1){let Le=B(Ne[0],t,n);if(Se&&((ye=e.$)!=null&&ye.type)){let pt=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${pt} = ${Le};`),pr(Se,t,n),Se}else return Le}}}if(_r(Ee)){let qe=Ee.selectedVariantName,Ye=Dn(Ee,qe,n);if(Se&&((Te=e.$)!=null&&Te.type)){let Le=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${Le} = ${Ye};`),pr(Se,t,n),Se}else return Ye}let Pe=Ee.selectedVariantName,at=Ee.variants.find(qe=>qe.name===Pe);if(at){let qe=(($e=at.fields)==null?void 0:$e.filter(be=>!xe(be.type)))||[],Ye=n,Le=Ne.map((be,nt)=>{var _t,$t,Vt,At,xt;if(at.fields){let _n=at.fields[nt];if(_n&&!xe(_n.type)){let rr=B(be,t,n),gi=He(_n.label,(_t=be.$)==null?void 0:_t.env),Wn=rr;if(($t=be.$)!=null&&$t.variableName&&((Vt=be.$)!=null&&Vt.type)){let jn=Ye.currentClosureCaptures&&Ye.currentClosureCaptures.includes(be.$.variableName)&&Y(be)&&be.$.env&&Ye.currentClosureCaptureFrameLevel!==void 0&&Jr(be.token.value,be.$.env,Ye.currentClosureCaptureFrameLevel),ti=(Ye.inAsyncStateMachine||Ye.inEffectStateMachine)&&rr.startsWith("sm->"),hi=!1;if(Y(be)&&be.$.env&&be.$.variableName){let ao=le(be.$.env,be.$.variableName);ao.length>0&&ao[ao.length-1].isCompileTimeOnly&&(hi=!0)}let Oi=!1;if(rr&&rr!==be.$.variableName&&!jn&&!ti&&!hi){let ao=He(be.$.variableName,be.$.env);if(rr!==ao){let Rs=Ut(be.$.type,be.$.variableName,n);n.emitter.emitLine(`${t}${Rs} = ${rr};`),Oi=!0,pr(be.$.variableName,t,n)}}Oi&&(Wn=He(be.$.variableName,be.$.env))}if((At=be.$)!=null&&At.deferredDupExpressions&&be.$.deferredDupExpressions.length>0){Mt(be,t,Ye);let jn=be.$.deferredDupExpressions[0];N(jn)&&((xt=jn.$)!=null&&xt.variableName)&&(Wn=He(jn.$.variableName,jn.$.env))}return`.${gi} = `+Wn}return""}else return""}).filter(be=>be).join(", "),pt=qe.length>0?`(${rt}){ .tag = ${Dn(Ee,Pe,n)}, .data = { .${Pe} = { ${Le} } } }`:`(${rt}){ .tag = ${Dn(Ee,Pe,n)} }`;if(Se&&((de=e.$)!=null&&de.type)){let be=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${be} = ${pt};`),pr(Se,t,n),Se}else return pt}}}}else if(Ze(i)){let Ee=e.args[0];if(Ee&&N(Ee)&&T(Ee,":")){let Se=B(e.func,t,n),_e=B(Ee.args[0],t,n),De=B(Ee.args[1],t,n),Pe=`Slice_${me(H(i.childType,n))}`;return n.sliceStructTypes.has(Pe)||n.sliceStructTypes.set(Pe,{childType:H(i.childType,n)}),`(${Pe}){ .data = &${Se}.data[${_e}], .length = (${De}) - (${_e}) }`}else if(Ee&&Y(Ee)&&Ee.token.value===":"){let Se=B(e.func,t,n),_e=i,De=_e.childType,Pe=`Slice_${me(H(De,n))}`;return n.sliceStructTypes.has(Pe)||n.sliceStructTypes.set(Pe,{childType:H(De,n)}),yt(_e.length)?`(${Pe}){ .data = &${Se}.data[0], .length = ${_e.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let Ne=B(e.func,t,n),rt=B(Ee,t,n);return`${Ne}.data[${rt}]`}else if(Lt(i)){let Ee=e.args[0];if(Ee&&N(Ee)&&T(Ee,":")){let Se=B(e.func,t,n),_e=B(Ee.args[0],t,n),De=B(Ee.args[1],t,n),Pe=`Slice_${me(H(i.childType,n))}`;return n.sliceStructTypes.has(Pe)||n.sliceStructTypes.set(Pe,{childType:H(i.childType,n)}),`(${Pe}){ .data = &${Se}.data[${_e}], .length = (${De}) - (${_e}) }`}else if(Ee&&Y(Ee)&&Ee.token.value===":"){let Se=B(e.func,t,n),_e=`Slice_${me(H(i.childType,n))}`;return n.sliceStructTypes.has(_e)||n.sliceStructTypes.set(_e,{childType:H(i.childType,n)}),`(${_e}){ .data = ${Se}.data, .length = ${Se}.length }`}let Ne=B(e.func,t,n),rt=B(Ee,t,n);return`${Ne}.data[${rt}]`}else if(i&&it(i)&&Lt(i.childType)){let Ee=B(e.func,t,n),Ne=B(e.args[0],t,n);return`${Ee}.data[${Ne}]`}}function __(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(Qn(e+" ",t,r,!1,!0,!1),Rr(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),$r({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&&!xe(s)){let l=H(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&&!xe(s)){let l=H(s,t);l!=="void"?i.emitLine(`${e} return (${l}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function p_(e,t,n,r,i,o,a,s){var p,_,m,g,y,h,v,$,E,w,L,b;let l=n.join(", "),u=t.return.type,c=a.emitter,f;if(s!=null&&s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let C=(p=i.$)!=null&&p.type?H(i.$.type,a):H(u,a),A=[],S=s.fieldFunctionType.parameters.filter(x=>!x.isCompileTimeOnly);for(let x=0;x<S.length;x++){let M=S[x].type,q=U(M)&&((m=(_=r==null?void 0:r[x])==null?void 0:_.$)!=null&&m.type)?r[x].$.type:M,P=ee(q)?Zr(q,"(*)",a):H(q,a);A.push(P)}let O=A.join(", ");f=`((${C} (*)(${O}))${e})`}else f=e;if(xe(u)){if(c.emitLine(`${o}${f}(${l});`),(g=i.$)!=null&&g.deferredDropExpressions&&an(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,i,!1,!0,!1),Rr(o+" ",a,i)),a.inAsyncStateMachine)$r({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let C=(y=a.currentFunctionType)==null?void 0:y.return.type;if(C&&!xe(C)){let A=H(C,a);A!=="void"?c.emitLine(`${o} return (${A}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let C=(h=i.$)==null?void 0:h.variableName;if(C){let A=(v=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&v.length&&(($=i.$)!=null&&$.type)?i.$.type:u,I=H(A,a);if(I==="void"||xe(A)){if(c.emitLine(`${o}${f}(${l});`),(E=i.$)!=null&&E.deferredDropExpressions&&an(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,i,!1,!0,!1),Rr(o+" ",a,i)),a.inAsyncStateMachine)$r({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let S=(w=a.currentFunctionType)==null?void 0:w.return.type;if(S&&!xe(S)){let O=H(S,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}${I} ${C} = ${f}(${l});`),(L=i.$)!=null&&L.deferredDropExpressions&&an(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,i,!1,!0,!1),Rr(o+" ",a,i)),a.inAsyncStateMachine)$r({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let S=(b=a.currentFunctionType)==null?void 0:b.return.type;if(S&&!xe(S)){let O=H(S,a);O!=="void"?c.emitLine(`${o} return (${O}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),C}else return`${f}(${l})`}}function iu(e,t,n,r){var s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let C of e){let A=`${C.implicitLabel}.${C.fieldLabel}`,I=!1;if(r.currentEvidenceParams){let S=r.currentEvidenceParams.get(A);S&&(i.push(S.cParamName),I=!0)}if(!I){if(o){if(o.effectHandlerInfos)for(let S of o.effectHandlerInfos){if(S.effectParameterName!==C.fieldLabel&&S.effectParameterName!==C.implicitLabel)continue;let O=S.handlerValue;if(O&&ve(O)){if((u=O.specializedFunctionCaches)!=null&&u.length){let M=O.specializedFunctionCaches[0].specializedFunction,q=(c=r.functions[M.funcId])==null?void 0:c.cName;if(q){i.push(`(void*)${q}`),I=!0,a=!0;break}}let x=(f=r.functions[O.funcId])==null?void 0:f.cName;if(x){i.push(x),I=!0,a=!0;break}}}if(!I&&o.handlerValue&&e.length===1){let S=o.handlerValue;if(S&&ve(S)){if((p=S.specializedFunctionCaches)!=null&&p.length){let O=S.specializedFunctionCaches[0].specializedFunction,x=(_=r.functions[O.funcId])==null?void 0:_.cName;x&&(i.push(`(void*)${x}`),I=!0,a=!0)}if(!I){let O=(m=r.functions[S.funcId])==null?void 0:m.cName;O&&(i.push(O),I=!0,a=!0)}}}}if(!I){let S=((g=n.func.$)==null?void 0:g.env)??((y=n.$)==null?void 0:y.env);if(S){let O=le(S,C.implicitLabel),x=Xn(S,z=>z.isImplicit===!0&&ee(z.type)&&ee(C.fieldFunctionType)&&z.type===C.fieldFunctionType),M=O[O.length-1],q=x[x.length-1],P=q&&q!==M?q:M??q,G=(h=P==null?void 0:P.value)==null?void 0:h[0];if(G&&vt(G)){let z=G,K=!0;for(let re=0;re<C.fieldPath.length-1;re++){let J=C.fieldPath[re],ue=z.type.fields.findIndex(ge=>ge.label===J);if(ue>=0&&z.fields[ue]&&vt(z.fields[ue]))z=z.fields[ue];else{K=!1;break}}if(K){let re=C.fieldPath[C.fieldPath.length-1],J=z.type.fields.findIndex(ue=>ue.label===re);if(J>=0){let ue=z.fields[J];if(ue&&ve(ue)){if(((v=ue.specializedFunctionCaches)==null?void 0:v.length)>0){let ge=ue.specializedFunctionCaches[0].specializedFunction,Z=($=r.functions[ge.funcId])==null?void 0:$.cName;Z&&(i.push(`(void*)${Z}`),I=!0)}if(!I){let ge=(E=r.functions[ue.funcId])==null?void 0:E.cName;ge&&(i.push(ge),I=!0)}}}}}else if(G&&ve(G)){if((w=G.specializedFunctionCaches)!=null&&w.length){let z=G.specializedFunctionCaches[0].specializedFunction,K=(L=r.functions[z.funcId])==null?void 0:L.cName;K&&(i.push(`(void*)${K}`),I=!0)}if(!I){let z=(b=r.functions[G.funcId])==null?void 0:b.cName;z&&(i.push(z),I=!0)}}I&&(a=!0)}}if(!I&&r.stateMachineVariables){let S=C.fieldPath[C.fieldPath.length-1];for(let[,O]of r.stateMachineVariables)if(O.name===S&&O.kind==="outer"){i.push(`sm->__capture.${S}`),I=!0;break}}if(!I)break}}return{args:i,isHandlerInstallation:a}}function ou(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;`),xe(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&an(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,r,!1,!0,!1),Rr(o+" ",a,r)),a.inAsyncStateMachine)$r({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=(f=a.currentFunctionType)==null?void 0:f.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),g&&!xe(g))if(s){let y=H(g,a);y!=="void"?(l.emitLine(`${o} ${y} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${y}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let y=H(g,a);y!=="void"?l.emitLine(`${o} return (${y}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let g=(p=r.$)==null?void 0:p.variableName;if(g){let y=H(u,a);if(l.emitLine(`${o}${y} ${g} = ${e}(${t});`),pr(g,o,a),(_=r.$)!=null&&_.deferredDropExpressions&&an(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,r,!1,!0,!1),Rr(o+" ",a,r)),a.inAsyncStateMachine)$r({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&&!xe(h)){let v=H(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&&!xe(h)){let v=H(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}}`),g}else return`${e}(${t})`}}function m_(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&&bt(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`(*((${H(i,n)}*)NULL))`}function y_(e,t,n){var l,u,c,f,p,_,m,g,y,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(Y(i)){let v=i.token.value,$=n;if($.currentEvidenceParams&&Y(r)){let w=`${r.token.value}.${v}`,L=$.currentEvidenceParams.get(w);if(L)return L.cParamName}if((c=e.$)!=null&&c.value&&ve(e.$.value)){let E=e.$.value;return((f=n.functions[E.funcId])==null?void 0:f.cName)||E.funcId}if(!((p=e.$)!=null&&p.value)&&(k.___dispose.includes(v)||k.___drop.includes(v)||k.___dup.includes(v))&&a){let E=null;if((Me(a)||Ue(a))&&(E=a.trait),E){let w=E.fields.find(L=>L.label===v&&L.assignedValue&&ve(L.assignedValue));if(w&&ve(w.assignedValue)){let L=w.assignedValue;return((_=n.functions[L.funcId])==null?void 0:_.cName)||L.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)||vt(s)){let E=(m=e.$)==null?void 0:m.value;if(E){if(Re(E)){if(E.variableName)return He(E.variableName,(g=e.$)==null?void 0:g.env);if(($.inAsyncStateMachine||$.inEffectStateMachine)&&$.stateMachineVariables){for(let[,w]of $.stateMachineVariables)if(w.name===v&&w.kind==="outer")return`sm->__capture.${v}`}}else if(!vt(E))return Mn(E,n,e)}return He(v,(y=e.$)==null?void 0:y.env)}if(ni(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===v)return o}if(Ue(a)){let E=a;if(Ln(E))return o;for(let L of E.variants)if(L.fields){for(let b of L.fields)if(b.label===v){let C=L.name;return`${o}.data.${C}.${me(v)}`}}return`/* ERROR: field ${v} not found in enum ${E.typeName} */`}else if(W(s)&&Ue(s.value)){let E=s.value,w=E.variants.find(b=>b.name===v),L=(h=n.types[E.id])==null?void 0:h.cName;if(w&&!w.fields&&L){let b=Dn(E,w.name,n);return`(${L}){ .tag = ${b}, .data = { } }`}}else{if(rn(a)&&v==="*")return`${o}->value`;if(it(a)){if(v==="*")return`(*${o})`;if(Lt(a.childType))return`${o}->${me(v)}`;{let E=0,w=a;for(;it(w);)E++,w=w.childType;if(E>0&&Me(w)&&w.isReferenceSemantics&&E++,ni(w)&&w.fields.length===1){let L=w.fields[0];if(L&&L.label===v)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${me(v)}`:`${`(${"*".repeat(E-1)}${o})`}->${me(v)}`:`${o}.${me(v)}`}}else if(Je(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let E=a.fields.findIndex(w=>w.label===v);return`${o}._${E}`}}else return Qe(a)?`${o}.vtable->${me(v)}`:Wt(a)?`${o}->${me(v)}`:`${o}.${me(v)}`}}return"/* ERROR: field name must be an identifier */"}function g_(e,t,n){var l,u,c,f,p;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${F(e)}
|
|
10655
|
-
`;let i=e.args[0];if(N(i)){let _=(u=i.func.$)==null?void 0:u.type;if(_&&Ze(_)){let m=i.args[0];if(m&&N(m)&&T(m,":")){let g=B(i.func,t,n),y=B(m.args[0],t,n),h=B(m.args[1],t,n),v=`Slice_${me(H(_.childType,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:H(_.childType,n)}),`(${v}){ .data = &${g}.data[${y}], .length = ${h} - ${y} }`}else if(m&&Y(m)&&m.token.value===":"){let g=B(i.func,t,n),y=_,h=y.childType,v=`Slice_${me(H(h,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:H(h,n)}),yt(y.length)?`(${v}){ .data = &${g}.data[0], .length = ${y.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(_&&(Lt(_)||it(_)&&Lt(_.childType))){let m=Lt(_)?_:_.childType,g=i.args[0];if(g&&N(g)&&T(g,":")){let y=B(i.func,t,n),h=B(g.args[0],t,n),v=B(g.args[1],t,n),$=`Slice_${me(H(m.childType,n))}`;return n.sliceStructTypes.has($)||n.sliceStructTypes.set($,{childType:H(m.childType,n)}),`(${$}){ .data = &${y}.data[${h}], .length = ${v} - ${h} }`}else if(g&&Y(g)&&g.token.value===":"){let y=B(i.func,t,n),h=`Slice_${me(H(m.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:H(m.childType,n)}),`(${h}){ .data = ${y}.data, .length = ${y}.length }`}}}let o=(c=i.$)==null?void 0:c.value,a=(f=i.$)==null?void 0:f.type;if(o!==void 0&&a){if(yt(o)||ht(o)){let _=B(i,t,n);return`(&(${H(a,n)}){${_}})`}if(bt(o)&&((p=i.$)!=null&&p.convertedRuntimeType))return`(&${B(i,t,n)})`}return`(&${B(i,t,n)})`}function h_(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 v_(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 T_(e,t,n){let r=e.args[0];return r?B(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function E_(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!Ze(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=U(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Ze(u)){let p=u.length;if(!yt(p))return"// Error: array element has non-constant length";let _=`i_${Math.floor(Math.random()*1e6)}`,m=n.emitter;m.emitLine(`for (size_t ${_} = 0; ${_} < ${p.value}; ${_}++) {`);let g=`(${o}).data[${a}].data[${_}]`;m.emitLine(" { // drop nested array element");let y=_i(g,u.childType,n);return y&&m.emitLine(` ${y};`),m.emitLine(" }"),m.emitLine("}"),""}let c=
|
|
10656
|
-
`}function D_(e,t,n){let r=e.args[0];return`sizeof(${B(r,t,n)})`}function M_(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 g=n,y=r.map((h,v)=>{var w,L;let E=B(h,t,n);if((w=h.$)!=null&&w.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Mt(h,t,g);let b=h.$.deferredDupExpressions[0];N(b)&&((L=b.$)!=null&&L.variableName)&&(E=He(b.$.variableName,b.$.env))}return`._${v} = ${E}`}).join(", ");if(o&&((f=e.$)!=null&&f.type)){let h=`(${i}){ ${y} }`,v=Ut(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${y} }`}else{if(e.args.length===0)return"";{let g=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((_=(p=e.$)==null?void 0:p.type)==null?void 0:_.id)??"none"} */`;let y=g.map((h,v)=>{let $=B(h,t,n);return`._${v} = ${$}`}).join(", ");if(o&&((m=e.$)!=null&&m.type)){let h=`(${i}){ ${y} }`,v=Ut(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${y} }`}}}function O_(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)||H(o,n),l=`yo_typeid_${me(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 Ag(e,t){if(N(e)&&T(e,D.begin)){let n=[];for(let r of e.args)if(N(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(N(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 R_(e,t,n){var r,i,o,a;if(N(e)&&T(e,D.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let m of u){let g=yr(m);g&&c.set(g,m)}s.pendingDeferredDrops=[...l??[]];let f=s.consumedVarPendingDrops,p=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[...p,...f??[]];let _=new Set;for(let m of e.args){let g=B(m,t,n);if(g&&n.emitter.emitLine(`${t}${g};`),(o=m.$)!=null&&o.env&&c.size>_.size)for(let y of m.$.env.frames)for(let h of y.variables)c.has(h.name)&&!_.has(h.name)&&(_.add(h.name),s.pendingDeferredDrops.unshift(c.get(h.name)))}if((a=e.$)!=null&&a.deferredDropExpressions)for(let m of e.$.deferredDropExpressions){let g=B(m,t,n);g&&n.emitter.emitLine(`${t}${g};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=f}else{let s=B(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function P_(e,t,n){var i,o;let r=e.args;if(r.length===2){let a=r[0],s=r[1],l=n.currentLoopLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u;let c=n,f=c.loopBodyDropsBaselineCount;c.loopBodyDropsBaselineCount=((i=c.pendingDeferredDrops)==null?void 0:i.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=B(a,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),R_(s,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),c.loopBodyDropsBaselineCount=f,n.currentLoopLabel=l,""}else if(r.length===3){let a=r[0],s=r[1],l=r[2],u=n.currentLoopLabel,c=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let _=n,m=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let g=B(a,t+" ",n);n.emitter.emitLine(`${t} if (!(${g})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),R_(l,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let y=Ag(s,n);return n.emitter.emitLine(`${t} ${y};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),_.loopBodyDropsBaselineCount=m,n.currentLoopLabel=u,n.currentContinueLabel=c,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Ig(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Ng(e,t,n,r){var f,p,_,m;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(g=>N(g)&&T(g,D.using));if(!o)return;let a=En(i.$.type);if(!((p=a==null?void 0:a.isFuture.effects)!=null&&p.length))return;let s=Ig(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let g=0;g<s.length&&g<l.length;g++){let y=s[g],h=l[g];if(ee(y.type)){let v=y.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=(_=h.$)==null?void 0:_.value;if(E&&ve(E)){let w=r.functions[E.funcId];w&&($=w.cName)}}$||($=B(h,n,r)),$&&c.emitLine(`${n} ${t}->__capture.${v} = (void*)${$};`)}else if(We(y.type)){let v=y.type;for(let $ of v.fields){if(!ee($.type))continue;let E;if(u.stateMachineVariables){for(let[,w]of u.stateMachineVariables)if(w.name===$.label&&w.kind==="outer"){E=`sm->__capture.${$.label}`;break}}if(!E){let w=(m=h.$)==null?void 0:m.value;if(w&&vt(w)){let L=v.fields.indexOf($),b=w.fields[L];if(b&&ve(b)){let C=r.functions[b.funcId];C&&(E=C.cName)}}}if(!E&&u.currentEvidenceParams){for(let w of u.currentEvidenceParams.values())if(w.fieldLabel===$.label){E=w.cParamName;break}}E||(E=Sg($.label,v,u,e)),E&&c.emitLine(`${n} ${t}->__capture.${$.label} = (void*)${E};`)}}}}function Sg(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=Xn(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],p=(l=f.value)==null?void 0:l[f.value.length-1];if(p&&vt(p)){let _=p.type.fields.findIndex(m=>m.label===e);if(_>=0){let m=p.fields[_];if(m&&ve(m)){let g=(u=n.functions[m.funcId])==null?void 0:u.cName;if(g)return g}}}}}function Vg(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 f of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${f};`);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 f=B(i,t,n);f&&f!=="(void)0"&&c.emitLine(`${t}(void)${f};`)}if(r.effectHandlerParamDrops)for(let f of r.effectHandlerParamDrops)c.emitLine(`${t}${f};`);return Qn(t,r,e,!1,!0,!0),Rr(t,r,e,!0),$r({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(Qn(t,r,e,!1,!0,!0),Rr(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!xe(c)){let f=r.overrideReturnTypeStr??H(c,n);if(f!=="void")return`return (${f}){0}`}}return"return"}let s=B(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(Qn(t,r,e,!1,!0,!0),Rr(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&&!xe(c)){let p=H(c,n);r.emitter.emitLine(`${t}{ ${p} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${p})); }`)}let f=r.currentFunctionType.return.type;if(!xe(f)){let p=r.overrideReturnTypeStr??H(f,n);if(p!=="void")return`return (${p}){0}`}return"return"}return`return ${s}`}function U_(e,t,n){let r;switch(e.tag){case"FnCall":r=xg(e,t,n);break;case"Atom":r=zo(e,n,t);break}return r}function xg(e,t,n){var r,i,o,a,s,l,u,c,f,p,_,m,g;if((r=e.$)!=null&&r.macroExpansion)return B(e.$.macroExpansion,t,n);if(N(e.func)&&T(e.func,".",2)&&e.func.args[1]&&Y(e.func.args[1])){let y=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&&U(v)&&Ke(v)){if(y===k.___drop[0]){let $=B(h,t,n);return`if (${$} != NULL) { __yo_decr_rc((void*)${$}); }`}if(y===k.___dup[0])return`__yo_incr_rc((void*)${B(h,t,n)})`}}if(ef(e))return tf(e,t,n);if(T(e,k.__yo_decr_rc))return h_(e,t,n);if(T(e,k.__yo_incr_rc))return v_(e,t,n);if(T(e,k.__yo_rc_own))return T_(e,t,n);if(T(e,k.__yo_drop_array_element))return E_(e,t,n);if(T(e,k.__yo_dup_array_element))return $_(e,t,n);if(T(e,k.__yo_drop_tuple_element))return C_(e,t,n);if(T(e,k.__yo_dup_tuple_element))return b_(e,t,n);if(T(e,k.___dup))return k_(e,t,n);if(T(e,k.___drop))return w_(e,t,n);if(T(e,k.__yo_dyn_drop))return F_(e,t,n);if(T(e,k.__yo_dyn_dup))return L_(e,t,n);if(T(e,k.__yo_incr_rc_atomic))return A_(e,t,n);if(T(e,k.__yo_decr_rc_atomic))return I_(e,t,n);if(T(e,k.__yo_iso_extract))return n_(e,t,n);if(T(e,k.__yo_iso_dispose))return r_(e,t,n);if(T(e,k.__yo_arc_dispose))return Rf(e,t,n);if(nu(e))return i_(e,t,n);if(tu(e))return Pf(e,t,n);if(T(e,k.__yo_sometype_drop))return N_(e,t,n);if(T(e,k.__yo_sometype_dup))return S_(e,t,n);if(T(e,k.__yo_gc_collect))return e_(e,t,n);if(T(e,k.rc))return V_(e,t,n);if(T(e,k.panic))return m_(e,t,n);if(T(e,D.test))return"/* test declaration skipped */";if(T(e,k.__yo_thread_set_maximum_threads))return c_(e,t,n);if(T(e,D.op_and))return Mf(e,t,n);if(T(e,D.op_or))return Of(e,t,n);if(Fn(e))return(o=e.$)!=null&&o.awaitAnalysis?nf(e,t,n):lf(e,t,n);if(T(e,D.dyn))return Jf(e,t,n);if(sr(e))return Wf(e,t,n);if(hc(e))return qf(e,t,n);if(vc(e)){let y=e.args[0];if(!y)return"// Error: spawn requires a Future argument";let v=n.emitter,$=B(y,t,n),E=(a=y.$)==null?void 0:a.type,w=E?H(E,n):"void*",L=(s=e.$)==null?void 0:s.type,b=L?H(L,n):null,C=(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}${w} ${C} = ${$};`),v.emitLine(`${t}int ${A} = ${C}->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}}`),La((c=y.$)==null?void 0:c.type)||(v.emitLine(`${t}if (${A} == 0 && ${C}->__yo_resume_fn) {`),Ng(e,C,t,n),v.emitLine(`${t} __yo_incr_rc((void*)${C});`),v.emitLine(`${t} ${C}->__yo_resume_fn((void*)${C});`),v.emitLine(`${t}}`)),b?`(${b}){ .__future = (void*)${C} }`:`(void*)${C}`}if(Tc(e))return Hf(e,t,n);if(T(e,D.return))return $f(e,t,n);if(T(e,D.escape))return Vg(e,t,n);if(T(e,k.__yo_array_fill,2))return zf(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return Kf(e,t,n);if(T(e,":=",2)){let y=t_(e,t,n);if(y!==void 0)return y}else{if(T(e,"=",2))return Bf(e,t,n);if((f=e.$)!=null&&f.value&&!Re((p=e.$)==null?void 0:p.value)&&!xe(e.$.type)&&!Xt((_=e.$)==null?void 0:_.controlFlow)){let y=e.$.value;return Mn(y,n,e)}else{if(T(e,".",2))return y_(e,t,n);if(T(e,D.begin))return jf(e,t,n);if(T(e,D.cond))return Xf(e,t,n);if(T(e,D.match))return a_(e,t,n);if(T(e,k.__yo_address_of,1))return g_(e,t,n);if(T(e,D.tuple))return M_(e,t,n);if(T(e,D.array)){let y=Uf(e,t,n);if(y!==void 0)return y}else{if(T(e,D.recur))return x_(e,t,n);if(T(e,D.runtime,1))return B(e.args[0],t,n);if(T(e,k.sizeof,1))return D_(e,t,n);if(T(e,k.typeid,1))return O_(e,t,n);if(T(e,k.downcast,2))return Zf(e,t,n);if(T(e,no)){let y=((m=e.$)==null?void 0:m.runtimeArgExprsInOrder)||e.args;if(y){let h=n,v=y.map($=>{var w,L;let E=B($,t,n);if((w=$.$)!=null&&w.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){Mt($,t,h);let b=$.$.deferredDupExpressions[0];if(N(b)&&((L=b.$)!=null&&L.variableName))return He(b.$.variableName,b.$.env)}return E});return Ia(e.func.token.value,v,e,n,t)}}else{if(T(e,D.while))return P_(e,t,n);if(T(e,"->",2)&&N(e.args[0])&&T(e.args[0],D.fn)){let y=(g=e.$)==null?void 0:g.value;return ve(y)?Mn(y,n):"// Error: Anonymous function missing function value"}else{if(T(e,k.consume))return Qf(e,t,n);if(T(e,k.comptime_expect_error)||T(e,k.comptime_assert)||T(e,k.__yo_var_print_info)||T(e,k.__yo_var_is_owning_the_rc_value)||T(e,k.__yo_var_has_other_aliases))return"";if(T(e,D.open))return s_(e,t,n);{let y=d_(e,t,n);if(y!==void 0)return y}}}}}}if(N(e))throw new Error(`Unhandled function call: ${F(e)}`);return`// Failed to transpile ${F(e)}`}function z_({expr:e,env:t,context:n}){ze(e,k.alignof,1);let r=e.args[0],i=R({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=oi(o),s;return a===null?s=ie(Qt(),{env:t,context:n}):s=Vn("Usize",a),e.$={env:t,type:Qt(),value:s,pathCollection:[]},e}function B_({expr:e,env:t,context:n}){let r=T(e,D.op_and)?"and":"or",i=e.args;if(i.length===0){let u=qt(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],f=R({expr:c,env:o,context:{...n}});if(!f.$||!ir(f.$.type))throw d({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
|
|
10654
|
+
)`;if(k.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(k.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let f=H(n.$.type,r),p=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return p&&Ue(p)&&!_r(p)?`((${f})((${t[0]}).tag))`:`((${f})(${t[0]}))`}else{if(k.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(k.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(k.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(k.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(k.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(k.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(k.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(k.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(k.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(k.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${H(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(k.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(k.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(k.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(k.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let f=H(n.$.type,r),p=`__yo_uninit_${wg++}`;return r.emitter.emitLine(`${i}${f} ${p};`),p}else return k.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${H(n.$.type,r)})(${t[0]}))`:k.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:`/* Unhandled operator ${e} */`}}function n_(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||!un(o))return"// Error: __yo_iso_extract requires an Iso type";let a=H(o,n),s=(f=e.$)==null?void 0:f.type;if(s&&((p=n.isoTypes)!=null&&p.has(a))){let m=n.isoTypes.get(a);m.optionTypeCName||(m.optionTypeCName=H(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(_=e.$)==null?void 0:_.variableName;return u&&s?(n.emitter.emitLine(`${t}${H(s,n)} ${u} = ${l};`),u):l}function r_(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||!un(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(o,n)}(${i})`}function nu(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return W(t)&&un(t.value)&&e.args.length===1}function i_(e,t,n){var c;if(!nu(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=H(i,n),u=H(o,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(l)||n.isoTypes.set(l,{childTypeCName:u,isoType:i}),`__yo_create_iso_${l}(${s})`}function di(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function mi(e,t,n){var r,i,o,a,s,l,u;if(N(e)&&T(e,D.begin)){let c=e.args,f=n,p=f.pendingDeferredDrops,_=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];f.pendingDeferredDrops=[..._,...p??[]];let m=f.consumedVarPendingDrops,g=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];f.consumedVarPendingDrops=[...g,...m??[]];for(let h=0;h<c.length-1;h++){let v=c[h],$=B(v,t,n);$&&n.emitter.emitLine(`${t}${$};`)}let y="";if(c.length>0){let h=c[c.length-1];if((o=h.$)!=null&&o.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){if((a=h.$)!=null&&a.variableName){let $=h.$.variableName;h.$.variableName=void 0;let E=B(h,t,n);h.$.variableName=$;let w=H(h.$.type,n),L=He($,h.$.env);L!==E&&n.emitter.emitLine(`${t}${w} ${L} = ${E};`)}Mt(h,t,n);let v=h.$.deferredDupExpressions[0];N(v)&&((s=v.$)!=null&&s.variableName)?y=He(v.$.variableName,v.$.env):y=B(h,t,n)}else y=B(h,t,n)}return(l=e.$)!=null&&l.deferredDropExpressions&&an(e,t,n),f.pendingDeferredDrops=p,f.consumedVarPendingDrops=m,y}else return(u=e.$)!=null&&u.deferredDupExpressions&&Mt(e,t,n),B(e,t,n)}function a_(e,t,n){var g,y,h,v,$,E,w;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&xe(i);if(!o&&r){let L=H(i,n);n.emitter.emitLine(`${t}${L} ${r};`)}let a=B(e.args[0],t,n),s=(g=e.args[0].$)==null?void 0:g.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return Lg(e,t,n,a,s,r,o);let l,u;if(it(s)?(u=s.childType,l=s.tag):Wt(s)?(u=s,l="ref_semantics"):u=s,!Ue(u))return'// Error: "match" expression requires an enum type';if(!((y=n.types[u.id])==null?void 0:y.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let f=Ln(u);if(f){let L=e.args.slice(1),b=null,C=null;for(let A of L)if(N(A)&&T(A,"=>",2)){let I=A.args[0],S=A.args[1];if(I&&S&&N(I)&&T(I,"."))b={caseBody:S};else{let O=I.func;if(O&&N(O)&&T(O,".")){let x=O.args[0];if(x&&Y(x)){let M=x.token.value;C={caseBody:S,variantName:M,casePattern:I}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),C){let A;if(N(C.casePattern)&&C.casePattern.args.length>0){let x=C.casePattern.args[0];if(x&&Y(x)){A=me(x.token.value);let M=f;n.emitter.emitLine(`${t} ${H(M,n)} ${A} = ${a};`)}}let I=n;A&&(I.inAsyncStateMachine||I.inEffectStateMachine)&&(I.localShadowedVariables||(I.localShadowedVariables=new Set),I.localShadowedVariables.add(A));let S=mi(C.caseBody,t+" ",n);A&&I.localShadowedVariables&&I.localShadowedVariables.delete(A);let O=di(S);if(!o&&r&&!O){let x=S||a;n.emitter.emitLine(`${t} ${r} = ${x};`)}else S&&S!==""&&n.emitter.emitLine(`${t} ${S};`)}if(n.emitter.emitLine(`${t}} else {`),b){let A=mi(b.caseBody,t+" ",n),I=di(A);!o&&r&&!I?n.emitter.emitLine(`${t} ${r} = ${A};`):A&&A!==""&&n.emitter.emitLine(`${t} ${A};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(_r(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let L=n.insideMatch;n.insideMatch=!0;let b=e.args.slice(1);for(let C=0;C<b.length;C++){let A=b[C];if(N(A)&&T(A,"=>",2)){let I=A.args[0],S=A.args[1];if(I&&S&&Y(I)&&I.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let O=mi(S,t+" ",n);!o&&r&&O&&!di(O)?n.emitter.emitLine(`${t} ${r} = ${O};`):O&&n.emitter.emitLine(`${t} ${O};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(I&&S&&N(I)&&T(I,".",1)){let O=I.args[0].token.value,x=Dn(u,O,n);n.emitter.emitLine(`${t}case ${x}: {`);let M=mi(S,t+" ",n);!o&&r&&M&&!di(M)?n.emitter.emitLine(`${t} ${r} = ${M};`):M&&n.emitter.emitLine(`${t} ${M};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=L,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let _=n.insideMatch;n.insideMatch=!0;let m=e.args.slice(1);for(let L=0;L<m.length;L++){let b=m[L];if(N(b)&&T(b,"=>",2)){let C=b.args[0],A=b.args[1];if(C&&A&&Y(C)&&C.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let I=mi(A,t+" ",n);!o&&r&&I&&!di(I)?n.emitter.emitLine(`${t} ${r} = ${I};`):I&&n.emitter.emitLine(`${t} ${I};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&A&&N(C)&&C.func.tag==="Atom"&&C.func.token.value==="."&&C.args.length>=1){let I=C.args[0].token.value,S=Dn(u,I,n);if(n.emitter.emitLine(`${t}case ${S}: {`),C.args.length>1){let x=u.variants.find(M=>M.name===I);if(x&&x.fields){let M=C.args.slice(1);if(M.some(P=>N(P)&&T(P,":",2))){for(let P of M)if(N(P)&&T(P,":",2)){let G=P.args[0],z=P.args[1];if(!Y(G))continue;let K=G.token.value,re=x.fields.find(J=>J.label===K);if(!re||xe(re.type))continue;if(Y(z)){let J=z.token.value;if(J!=="_"){let ue=me(J),ge=me(K),Z=H(re.type,n),ce=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Z} ${ue} = ${a}${ce}data.${I}.${ge};`);let X=n;if((X!=null&&X.inAsyncStateMachine||X!=null&&X.inEffectStateMachine)&&X.stateMachineVariables){let pe;if((h=z.$)!=null&&h.env){let Ce=le(z.$.env,J);Ce.length>0&&(pe=Ce[Ce.length-1].id)}pe&&X.stateMachineVariables.has(pe)&&n.emitter.emitLine(`${t} sm->var_${pe} = ${ue};`)}}}}}else for(let P=0;P<M.length&&P<x.fields.length;P++){let G=M[P],z=x.fields[P];if(Y(G)&&z){if(xe(z.type))continue;let K=G.token.value;if(K!=="_"){let re=me(K),J=me(z.label),ue=H(z.type,n),ge=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ue} ${re} = ${a}${ge}data.${I}.${J};`);let Z=n;if((Z!=null&&Z.inAsyncStateMachine||Z!=null&&Z.inEffectStateMachine)&&Z.stateMachineVariables){let ce;if((v=G.$)!=null&&v.env){let X=le(G.$.env,K);X.length>0&&(ce=X[X.length-1].id)}ce&&Z.stateMachineVariables.has(ce)&&n.emitter.emitLine(`${t} sm->var_${ce} = ${re};`)}}}}}}if(N(A)&&T(A,"=>",2)){let x=A.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${me(x.token.value)} = ${a};`),A=A.args[1]}let O=mi(A,t+" ",n);!o&&r&&O&&!di(O)?n.emitter.emitLine(`${t} ${r} = ${O};`):O&&n.emitter.emitLine(`${t} ${O};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(C&&A&&N(C)&&N(C.func)&&C.func.func.tag==="Atom"&&C.func.func.token.value==="."&&C.func.args.length===1){let I=C.func.args[0].token.value,S=Dn(u,I,n),O=C.args;n.emitter.emitLine(`${t}case ${S}: {`);let x=u.variants.find(q=>q.name===I);if(x&&x.fields&&O.length>0)if(O.some(P=>N(P)&&T(P,":",2))){for(let P of O)if(N(P)&&T(P,":",2)){let G=P.args[0],z=P.args[1];if(!Y(G))continue;let K=G.token.value,re=x.fields.find(J=>J.label===K);if(!re)continue;if(Y(z)){let J=z.token.value;if(J!=="_"){let ue=me(J);if(xe(re.type))n.emitter.emitLine(`${t} // ${ue} is unit type (no value)`);else{let ge=me(K),Z=H(re.type,n),ce=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Z} ${ue} = ${a}${ce}data.${I}.${ge};`);let X=n;if((X!=null&&X.inAsyncStateMachine||X!=null&&X.inEffectStateMachine)&&X.stateMachineVariables){let pe;if(($=z.$)!=null&&$.env){let Ce=le(z.$.env,ue);Ce.length>0&&(pe=Ce[Ce.length-1].id)}pe&&X.stateMachineVariables.has(pe)&&n.emitter.emitLine(`${t} sm->var_${pe} = ${ue};`)}}}}}}else for(let P=0;P<Math.min(O.length,x.fields.length);P++){let G=O[P],z=x.fields[P];if(G.tag==="Atom"&&z){let K=G.token.value;if(K!=="_"){let re=me(K);if(xe(z.type))n.emitter.emitLine(`${t} // ${re} is unit type (no value)`);else{let J=me(z.label),ue=H(z.type,n),ge=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ue} ${re} = ${a}${ge}data.${I}.${J};`);let Z=n;if((Z!=null&&Z.inAsyncStateMachine||Z!=null&&Z.inEffectStateMachine)&&Z.stateMachineVariables){let ce;if((E=G.$)!=null&&E.env){let X=le(G.$.env,K);X.length>0&&(ce=X[X.length-1].id)}ce&&Z.stateMachineVariables.has(ce)&&n.emitter.emitLine(`${t} sm->var_${ce} = ${re};`)}}}}}if(N(A)&&T(A,"=>",2)){let q=A.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${me(q.token.value)} = ${a};`),A=A.args[1]}let M=mi(A,t+" ",n);!o&&r&&M&&!di(M)?n.emitter.emitLine(`${t} ${r} = ${M};`):M&&n.emitter.emitLine(`${t} ${M};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=_,n.emitter.emitLine(`${t}}`),(w=e.$)!=null&&w.deferredDropExpressions&&an(e,t,n),o?"":r??""}function Fg(e){return N(e)?T(e,"|",2):!1}function ru(e){if(!Fg(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...ru(n),...ru(r)]}function o_(e){if(e!==void 0){if(yt(e))return String(e.value);if(ht(e))return e.value?"true":"false"}}function Lg(e,t,n,r,i,o,a){var u,c,f;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let p=0;p<l.length;p++){let _=l[p];if(N(_)&&T(_,"=>",2)){let m=_.args[0],g=_.args[1];if(!m||!g)continue;if(Y(m)&&m.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let $=mi(g,t+" ",n);!a&&o&&$&&!di($)?n.emitter.emitLine(`${t} ${o} = ${$};`):$&&n.emitter.emitLine(`${t} ${$};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let y=ru(m),h=(u=m.$)==null?void 0:u.primitivePatternValues;if(h&&h.length>0)for(let $ of h){let E=o_($);E!==void 0&&n.emitter.emitLine(`${t}case ${E}:`)}else for(let $ of y){let E=(c=$.$)==null?void 0:c.value,w=o_(E);w!==void 0&&n.emitter.emitLine(`${t}case ${w}:`)}n.emitter.emitLine(`${t}{`);let v=mi(g,t+" ",n);!a&&o&&v&&!di(v)?n.emitter.emitLine(`${t} ${o} = ${v};`):v&&n.emitter.emitLine(`${t} ${v};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(f=e.$)!=null&&f.deferredDropExpressions&&an(e,t,n),a?"":o??""}function s_(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(Me(a)&&s===void 0){let l=B(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let f=H(c.type,n),p=me(c.variableName),_=me(c.label);n.emitter.emitLine(`${t}${f} ${p} = ${l}.${_};`)}}}return""}function l_(e,t,n){var g,y,h,v,$;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=(y=i.$)==null?void 0:y.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(U(o)){let E=o;E.resolvedConcreteType&&(a=E.resolvedConcreteType.id,s=E.resolvedConcreteType)}else Me(o)&&(a=o.id,s=o);if(!a||!s)return"/* Error: __yo_thread_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_thread_spawn could not find closure function for type ${a} */`;let u=l.functionCName,c=H(s,n),f=B(i,t,n),p=(h=i.$)!=null&&h.variableName?He(i.$.variableName,i.$.env):f,_=`_thread_closure_data_${Et(((v=e.$)==null?void 0:v.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`);let m=($=e.$)==null?void 0:$.variableName;return m?(n.emitter.emitLine(`${t}__yo_thread_t ${m} = __yo_thread_spawn(${u}, ${_});`),m):`__yo_thread_spawn(${u}, ${_})`}function u_(e,t,n){var m,g,y,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=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(U(o)){let v=o;v.resolvedConcreteType&&(a=v.resolvedConcreteType.id,s=v.resolvedConcreteType)}else Me(o)&&(a=o.id,s=o);if(!a||!s)return"/* Error: __yo_worker_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_worker_spawn could not find closure function for type ${a} */`;let u=l.functionCName,c=H(s,n),f=B(i,t,n),p=(y=i.$)!=null&&y.variableName?He(i.$.variableName,i.$.env):f,_=`_worker_closure_data_${Et(((h=e.$)==null?void 0:h.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${_} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${_} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${_});`),""}function c_(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 f_(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 pr(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&&Ke(i.type))return;let o=`var_${i.id}`,a=me(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function d_(e,t,n){var o,a,s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b,C,A,I,S,O,x,M,q,P,G,z,K,re,J,ue,ge,Z,ce,X,pe,Ce,Ae,ut,se,he,te,ke,Be,Xe,wt,j,Q,oe,we,Ie,Ve,Ge,je,St,zn,ct,Yt,lr,mt,tn,nn,Cn,sn,ye,Te,$e,de;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Re(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&an(e,t,n),xe(e.$.type)?"":Mn(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(ve(r)?r.specializedType??r.type:void 0);if(ee(i)){let Ee=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(Ee){let Ne=!1;if(N(e.func)&&T(e.func,".",2)){let _e=e.func.args[0],De=(c=_e==null?void 0:_e.$)==null?void 0:c.type;De&&Qe(De)&&(Ne=!0)}let rt=Ee.map((_e,De)=>{var Pe,at,qe,Ye,Le,pt,be,nt,_t;if((Pe=_e.$)!=null&&Pe.variableName&&((at=_e.$)!=null&&at.type)){let $t=n,Vt=$t.currentClosureCaptures&&$t.currentClosureCaptures.includes(_e.$.variableName)&&Y(_e)&&_e.$.env&&$t.currentClosureCaptureFrameLevel!==void 0&&ei(_e.token.value,_e.$.env,$t.currentClosureCaptureFrameLevel),At=B(_e,t,n),xt=!1;if(Y(_e)&&_e.$.env&&_e.$.variableName){let Wn=le(_e.$.env,_e.$.variableName);Wn.length>0&&Wn[Wn.length-1].isCompileTimeOnly&&(xt=!0)}let _n=($t.inAsyncStateMachine||$t.inEffectStateMachine)&&At.startsWith("sm->"),rr=!1;if(At&&At!==_e.$.variableName&&!Vt&&!_n&&!xt){let Wn=He(_e.$.variableName,_e.$.env);if(At!==Wn){let jn=_e.$.convertedRuntimeType||_e.$.type,ni=Ut(jn,_e.$.variableName,n);n.emitter.emitLine(`${t}${ni} = ${At};`),rr=!0,pr(_e.$.variableName,t,n)}}let gi=rr?_e.$.variableName:At;if((qe=_e.$)!=null&&qe.deferredDupExpressions&&_e.$.deferredDupExpressions.length>0){let Wn=new Set;(Ye=_e.$)!=null&&Ye.variableName&&Wn.add(He(_e.$.variableName,_e.$.env)),At&&Wn.add(At),Y(_e)&&Wn.add(He(_e.token.value,_e.$.env));let jn=_e.$.deferredDupExpressions.find(ni=>{var Oi;let hi=Ts(ni);return hi?Wn.has(He(hi,(Oi=ni.$)==null?void 0:Oi.env)):!1});jn&&(Mt(_e,t,$t),N(jn)&&((Le=jn.$)!=null&&Le.variableName)&&(gi=He(jn.$.variableName,jn.$.env)))}if(Ne&&De===0){if(N(e.func)&&T(e.func,".",2)){let jn=e.func.args[0],ni=(pt=jn==null?void 0:jn.$)==null?void 0:pt.type,hi=e.func.args[1];if(Y(hi)&&Qe(ni)){let Oi=hi.token.value;if(ni.trait.fields.find(Rs=>Rs.label===Oi))return _n?At:me(gi,_e.$.type.isExtern==="c")}}let Wn=(be=_e.$)==null?void 0:be.type;return Wn&&it(Wn)?_n?`${At}->data`:`${me(gi,_e.$.type.isExtern==="c")}->data`:_n?`(${At}).data`:`(${me(gi,_e.$.type.isExtern==="c")}).data`}else return Vt||_n||xt?At:me(gi,_e.$.type.isExtern==="c")}else if(Ne&&De===0){let $t=B(_e,t,n);if(N(e.func)&&T(e.func,".",2)){let At=e.func.args[0],xt=(nt=At==null?void 0:At.$)==null?void 0:nt.type,_n=e.func.args[1];if(Y(_n)&&Qe(xt)){let rr=_n.token.value;if(xt.trait.fields.find(Wn=>Wn.label===rr))return $t}}let Vt=(_t=_e.$)==null?void 0:_t.type;return Vt&&it(Vt)?`(${$t})->data`:`(${$t}).data`}else return B(_e,t,n)}),Se=rt.join(", ");if(i.isExtern==="yo"&&i.externName){let _e=i.externName;return no.includes(_e)?Ia(_e,rt,e,n,t):_e==="__yo_thread_spawn"?l_(e,t,n):_e==="__yo_worker_spawn"?u_(e,t,n):xe(i.return.type)?(n.emitter.emitLine(`${t}${_e}(${Se});`),(f=e.$)!=null&&f.deferredDropExpressions&&an(e,t,n),""):`${_e}(${Se})`}{let _e=n;if((p=_e.currentEvidenceParams)!=null&&p.size){let De=(_=e.func.token)==null?void 0:_.value,Pe;if(De==="."&&N(e.func)&&T(e.func,".",2)){let at=e.func.args[1];at&&Y(at)&&(De=at.token.value);let qe=e.func.args[0];if(qe&&Y(qe))Pe=qe.token.value;else if(qe&&N(qe)&&T(qe,".",2)){let Ye=qe.args[0];Ye&&Y(Ye)&&(Pe=Ye.token.value)}}if(De&&De!=="."){for(let at of _e.currentEvidenceParams.values())if(at.fieldLabel===De||at.implicitLabel===De||at.fieldPath[at.fieldPath.length-1]===De){if(Pe&&Pe!==at.implicitLabel)continue;return p_(at.cParamName,i,rt,Ee,e,t,_e,at)}}}}if(ve(r)){let _e=xo(r);if(_e)return Ia(_e,rt,e,n,t);let De=r.specializedType??r.type,Pe=n;if(Pe.currentEvidenceParams&&r.isModuleEffectMember){let qe,Ye=((m=e.func.$)==null?void 0:m.env)??((g=e.$)==null?void 0:g.env);if(Ye)for(let Le of Pe.currentEvidenceParams.values()){let pt=le(Ye,Le.implicitLabel),be=pt[pt.length-1],nt=(y=be==null?void 0:be.value)==null?void 0:y[0];if(nt&&vt(nt)){let _t=nt,$t=!0;for(let Vt=0;Vt<Le.fieldPath.length-1;Vt++){let At=Le.fieldPath[Vt],xt=_t.type.fields.findIndex(_n=>_n.label===At);if(xt>=0&&_t.fields[xt]&&vt(_t.fields[xt]))_t=_t.fields[xt];else{$t=!1;break}}if($t){let Vt=Le.fieldPath[Le.fieldPath.length-1],At=_t.type.fields.findIndex(xt=>xt.label===Vt);if(At>=0){let xt=_t.fields[At];if(xt&&ve(xt)&&xt.funcId===r.funcId){qe=Le;break}}}}}if(qe){let Le=qe.cParamName;return p_(Le,De,rt,Ee,e,t,Pe,qe)}}let at=(h=n.functions[r.funcId])==null?void 0:h.cName;if(at){let qe=r.specializedType??r.type,Ye=fn(qe);if(Ye.length===0&&r.specializedType){let be=fn(r.type);be.length>0&&be.some(nt=>nt.fieldFunctionType.forallParameters&&nt.fieldFunctionType.forallParameters.length>0)&&(Ye=be)}if(Ye.length>0){let{args:be,isHandlerInstallation:nt}=iu(Ye,r,e,n);if(be.length>0){let _t=Se?`${Se}, ${be.join(", ")}`:be.join(", ");return ou(at,_t,De,e,Ee,t,n,nt)}}let Le=r.isControlFunction||r.isModuleEffectMember||((E=($=(v=r.body)==null?void 0:v.$)==null?void 0:$.effectAnalysis)==null?void 0:E.hasEffects),pt=!1;if(Le){if(r.isControlFunction||r.isModuleEffectMember){let be=((L=(w=e.func)==null?void 0:w.$)==null?void 0:L.env)??((b=e.$)==null?void 0:b.env);if(be){let nt=$a(be,_t=>{var $t;return _t.isImplicit===!0&&ve(($t=_t.value)==null?void 0:$t[0])&&_t.value[0].funcId===r.funcId});nt>=0&&nt>be.functionDeclarationFrameLevel&&((C=be.frames[nt])!=null&&C.isBeginBlockFrame)&&(pt=!0)}}else if(r.specializedType){let be=fn(r.type);if(be.length>0){let nt=((I=(A=e.func)==null?void 0:A.$)==null?void 0:I.env)??((S=e.$)==null?void 0:S.env);if(nt)for(let _t of be){let $t=$a(nt,Vt=>Vt.isImplicit===!0&&(Vt.name===_t.implicitLabel||Vt.name===_t.fieldLabel));if($t>=0&&$t>nt.functionDeclarationFrameLevel&&((O=nt.frames[$t])!=null&&O.isBeginBlockFrame)){pt=!0;break}}}}}if(xe(De.return.type))return n.emitter.emitLine(`${t}${at}(${Se});`),(x=e.$)!=null&&x.deferredDropExpressions&&an(e,t,n),Le&&__(t,n,pt,e),"";{let be=(M=e.$)==null?void 0:M.variableName;if(be){let nt=((q=r.specializedType)==null?void 0:q.return.type)??De.return.type,_t=(P=e.$)==null?void 0:P.type,$t=_t&&Ke(_t),Vt=nt&&Ke(nt),At;if($t&&Vt){let xt=r.body;if(xt&&T(xt,"begin")){let _n=xt.args;if(_n.length>0){let rr=_n[_n.length-1];Fn(rr)&&(xt=rr)}}if(xt&&Fn(xt)&&((G=xt.$)!=null&&G.asyncStateMachineStructName)){let _n=xt.$.asyncStateMachineStructName;At=`${_n}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(be,_n)}else _t&&U(_t)&&_t.resolvedConcreteType?At=H(_t,n):At=H(nt,n)}else At=H(nt??_t,n);return n.emitter.emitLine(`${t}${At} ${be} = ${at}(${Se});`),pr(be,t,n),(z=e.$)!=null&&z.deferredDropExpressions&&an(e,t,n),Le&&__(t,n,pt,e),be}else return`// Error: Regular function call returns ${H(((K=r.specializedType)==null?void 0:K.return.type)??De.return.type,n)} but no temp variable assigned`}}}else{let _e=n.externFunctions[i.id];if(_e){let De=_e.cName;return(re=e.$)!=null&&re.deferredDropExpressions&&an(e,t,n),`${De}(${Se})`}else{let De=B(e.func,t,n);if(r&&ee(r.type)){let be=fn(r.type);if(be.length>0){let{args:nt,isHandlerInstallation:_t}=iu(be,r,e,n);if(nt.length>0){let $t=Se?`${Se}, ${nt.join(", ")}`:nt.join(", ");return ou(De,$t,i,e,Ee,t,n,_t)}}}let Pe=((J=e.$)==null?void 0:J.type)??i.return.type,at=H(Pe,n),qe=i.parameters.filter(be=>!be.isCompileTimeOnly).map(be=>H(be.type,n)),Ye=`((${at} (*)(${qe.join(", ")}))${De})`,Le=n,pt=De.includes("__capture.")&&!!Le.inAsyncStateMachine;if(pt&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),xe(i.return.type)||xe(Pe)){if(n.emitter.emitLine(`${t}${Ye}(${Se});`),(ue=e.$)!=null&&ue.deferredDropExpressions&&an(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Ee){for(let be of Ee)if((ge=be.$)!=null&&ge.variableName&&((Z=be.$)!=null&&Z.type)&&tt(be.$.type)){let nt=f_(me(be.$.variableName),n),_t=_i(nt,be.$.type,n);_t&&(n.emitter.emitLine(`${t} ${_t};`),n.emitter.emitLine(`${t} memset(&${nt}, 0, sizeof(${nt}));`))}}$r({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let be=(ce=e.$)==null?void 0:ce.variableName;if(be){let nt=i.return.type,_t=(X=e.$)==null?void 0:X.type,$t=_t&&nt&&Ke(_t)&&Ke(nt)?nt:_t??nt;if(n.emitter.emitLine(`${t}${H($t,n)} ${be} = ${Ye}(${Se});`),pr(be,t,n),(pe=e.$)!=null&&pe.deferredDropExpressions&&an(e,t,n),pt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Ee){for(let Vt of Ee)if((Ce=Vt.$)!=null&&Ce.variableName&&((Ae=Vt.$)!=null&&Ae.type)&&tt(Vt.$.type)){let At=f_(me(Vt.$.variableName),n),xt=_i(At,Vt.$.type,n);xt&&(n.emitter.emitLine(`${t} ${xt};`),n.emitter.emitLine(`${t} memset(&${At}, 0, sizeof(${At}));`))}}$r({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return be}else return`// Error: Function parameter call returns ${H(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&xn(i)){let Ee=i,Ne=Un(Ee),rt=Qe(Ee);{let Se=Ne.isFn.callType,_e=(ut=e.$)==null?void 0:ut.runtimeArgExprsInOrder;if(_e){let De=n;for(let Le of _e)if((se=Le.$)!=null&&se.variableName&&((he=Le.$)!=null&&he.type)){let pt=De.currentClosureCaptures&&De.currentClosureCaptures.includes(Le.$.variableName)&&Y(Le)&&Le.$.env&&De.currentClosureCaptureFrameLevel!==void 0&&ei(Le.token.value,Le.$.env,De.currentClosureCaptureFrameLevel),be=B(Le,t,n),nt=!1;if(Y(Le)&&Le.$.env&&Le.$.variableName){let $t=le(Le.$.env,Le.$.variableName);$t.length>0&&$t[$t.length-1].isCompileTimeOnly&&(nt=!0)}let _t=(De.inAsyncStateMachine||De.inEffectStateMachine)&&be.startsWith("sm->");if(be&&be!==Le.$.variableName&&!pt&&!_t&&!nt){let $t=Le.$.convertedRuntimeType||Le.$.type,Vt=Ut($t,Le.$.variableName,n);n.emitter.emitLine(`${t}${Vt} = ${be};`),pr(Le.$.variableName,t,n)}}let Pe=B(e.func,t,n),at=_e.map(Le=>{var pt,be,nt,_t;if((pt=Le.$)!=null&&pt.variableName&&((be=Le.$)!=null&&be.type)){if(De.currentClosureCaptures&&De.currentClosureCaptures.includes(Le.$.variableName)&&Y(Le)&&Le.$.env&&De.currentClosureCaptureFrameLevel!==void 0&&ei(Le.token.value,Le.$.env,De.currentClosureCaptureFrameLevel))return B(Le,t,n);{let Vt=He(Le.$.variableName,Le.$.env),At=(De.inAsyncStateMachine||De.inEffectStateMachine)&&Vt.startsWith("sm->"),xt=Vt;if((nt=Le.$)!=null&&nt.deferredDupExpressions&&Le.$.deferredDupExpressions.length>0){Mt(Le,t,De);let _n=Le.$.deferredDupExpressions[0];N(_n)&&((_t=_n.$)!=null&&_t.variableName)&&(xt=He(_n.$.variableName,_n.$.env))}return At?Vt:xt}}else return B(Le,t,n)}),qe;if(rt){let Le=[`(${Pe}).data`,...at];qe=`(${Pe}).vtable->call(${Le.join(", ")})`}else{let Le;if(U(Ee)){let be=Ee;be.resolvedConcreteType&&(Le=be.resolvedConcreteType.id)}let pt=Le?n.implClosureCallMap.get(Le):void 0;if(pt){let be=fn(Se);if(be.length>0){let{args:_t,isHandlerInstallation:$t}=iu(be,{},e,De);if(_t.length>0){let Vt=[`&(${Pe})`,...at,..._t];return ou(pt.functionCName,Vt.join(", "),Se,e,_e,t,De,$t)}}let nt=[`&(${Pe})`,...at];qe=`${pt.functionCName}(${nt.join(", ")})`}else{let be=[`(${Pe}).data`,...at];qe=`(${Pe}).call(${be.join(", ")})`}}let Ye=Se.return.type;if(xe(Ye))return n.emitter.emitLine(`${t}${qe};`),(te=e.$)!=null&&te.deferredDropExpressions&&an(e,t,n),"";{let Le=(ke=e.$)==null?void 0:ke.variableName;return Le?(n.emitter.emitLine(`${t}${H(Ye,n)} ${Le} = ${qe};`),pr(Le,t,n),(Be=e.$)!=null&&Be.deferredDropExpressions&&an(e,t,n),Le):`// Error: Closure call returns ${H(Ye,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(W(r))if(Me(r.value)){let Ee=r.value,Ne=(Xe=e.$)==null?void 0:Xe.runtimeArgExprsInOrder,rt=(wt=n.types[Ee.id])==null?void 0:wt.cName,Se=Ee.fields.map(De=>De.label),_e=(j=e.$)==null?void 0:j.variableName;if(Ne&&rt&&Se.length===Ne.length){if(Ee.isNewtype&&Ee.fields.length===1){let De=Ne[0],Pe=B(De,t,n),at=Pe;if((Q=De.$)!=null&&Q.deferredDupExpressions&&De.$.deferredDupExpressions.length>0){let Ye=n;if((oe=De.$)!=null&&oe.variableName&&((we=De.$)!=null&&we.type)){let pt=He(De.$.variableName,De.$.env);if(Pe!==pt){let be=De.$.type,nt=H(be,n);n.emitter.emitLine(`${t}${nt} ${pt} = ${Pe};`)}}Mt(De,t,Ye);let Le=De.$.deferredDupExpressions[0];N(Le)&&((Ie=Le.$)!=null&&Ie.variableName)&&(at=He(Le.$.variableName,Le.$.env))}let qe=`((${rt})(${at}))`;if(_e&&((Ve=e.$)!=null&&Ve.type)){let Ye=Ut(e.$.type,_e,n);return n.emitter.emitLine(`${t}${Ye} = ${qe};`),pr(_e,t,n),_e}else return qe}if(Ee.isReferenceSemantics){let De=n,Pe=Ne.map(Ye=>{var pt,be,nt,_t;let Le=B(Ye,t,n);if((pt=Ye.$)!=null&&pt.deferredDupExpressions&&Ye.$.deferredDupExpressions.length>0){if((be=Ye.$)!=null&&be.variableName&&((nt=Ye.$)!=null&&nt.type)){let Vt=He(Ye.$.variableName,Ye.$.env);if(Le!==Vt){let At=Ye.$.type,xt=H(At,n);n.emitter.emitLine(`${t}${xt} ${Vt} = ${Le};`)}}Mt(Ye,t,De);let $t=Ye.$.deferredDupExpressions[0];if(N($t)&&((_t=$t.$)!=null&&_t.variableName))return He($t.$.variableName,$t.$.env)}return Le}).join(", "),qe=`${`__yo_new_${rt}`}(${Pe})`;if(_e&&((Ge=e.$)!=null&&Ge.type)){let Ye=Ut(e.$.type,_e,n);return n.emitter.emitLine(`${t}${Ye} = ${qe};`),pr(_e,t,n),_e}else return qe}else{let De=n,Pe=Ne.map((qe,Ye)=>{var nt,_t,$t,Vt;let Le=B(qe,t,n),pt=Je(Ee)?`_${Ye}`:me(Se[Ye],Ee.isExtern==="c"),be=Le;if((nt=qe.$)!=null&&nt.deferredDupExpressions&&qe.$.deferredDupExpressions.length>0){if((_t=qe.$)!=null&&_t.variableName&&(($t=qe.$)!=null&&$t.type)){let xt=He(qe.$.variableName,qe.$.env),_n=qe.$.type,rr=H(_n,n);Le!==xt&&n.emitter.emitLine(`${t}${rr} ${xt} = ${Le};`)}Mt(qe,t,De);let At=qe.$.deferredDupExpressions[0];N(At)&&((Vt=At.$)!=null&&Vt.variableName)&&(be=He(At.$.variableName,At.$.env))}return`.${pt} = `+be}).join(", "),at=`(${rt}){ ${Pe} }`;if(_e&&((je=e.$)!=null&&je.type)){let qe=Ut(e.$.type,_e,n);return n.emitter.emitLine(`${t}${qe} = ${at};`),pr(_e,t,n),_e}else return at}}}else{if(xn(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(jt(r.value)){let Ee=(St=e.$)==null?void 0:St.variableName,Ne=e.args[0];if(Ne&&N(Ne)&&T(Ne,":",2)){let rt=Ne.args[0],Se=Ne.args[1],_e=(zn=n.types[r.value.id])==null?void 0:zn.cName;if(_e&&Y(rt)&&Se){let De=n,Pe=rt.token.value,at=He(Pe,(ct=rt.$)==null?void 0:ct.env),Ye=B(Se,t,n);if((Yt=Se.$)!=null&&Yt.deferredDupExpressions&&Se.$.deferredDupExpressions.length>0){Mt(Se,t,De);let pt=Se.$.deferredDupExpressions[0];N(pt)&&((lr=pt.$)!=null&&lr.variableName)&&(Ye=He(pt.$.variableName,pt.$.env))}let Le=`(${_e}){ .${at} = ${Ye} }`;if(Ee&&((mt=e.$)!=null&&mt.type)){let pt=Ut(e.$.type,Ee,n);return n.emitter.emitLine(`${t}${pt} = ${Le};`),pr(Ee,t,n),Ee}else return Le}}}else if(Ue(r.value)){let Ee=r.value,Ne=(tn=e.$)==null?void 0:tn.runtimeArgExprsInOrder,rt=(nn=n.types[Ee.id])==null?void 0:nn.cName,Se=(Cn=e.$)==null?void 0:Cn.variableName;if(Ee.selectedVariantName&&Ne&&rt){if(Ln(Ee)){let qe=Ee.selectedVariantName,Ye=Ee.variants.find(Le=>Le.name===qe);if(Ye){if(!Ye.fields||Ye.fields.length===0){let Le="NULL";if(Se&&((sn=e.$)!=null&&sn.type)){let pt=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${pt} = ${Le};`),pr(Se,t,n),Se}else return Le}else if(Ye.fields.length===1){let Le=B(Ne[0],t,n);if(Se&&((ye=e.$)!=null&&ye.type)){let pt=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${pt} = ${Le};`),pr(Se,t,n),Se}else return Le}}}if(_r(Ee)){let qe=Ee.selectedVariantName,Ye=Dn(Ee,qe,n);if(Se&&((Te=e.$)!=null&&Te.type)){let Le=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${Le} = ${Ye};`),pr(Se,t,n),Se}else return Ye}let Pe=Ee.selectedVariantName,at=Ee.variants.find(qe=>qe.name===Pe);if(at){let qe=(($e=at.fields)==null?void 0:$e.filter(be=>!xe(be.type)))||[],Ye=n,Le=Ne.map((be,nt)=>{var _t,$t,Vt,At,xt;if(at.fields){let _n=at.fields[nt];if(_n&&!xe(_n.type)){let rr=B(be,t,n),gi=He(_n.label,(_t=be.$)==null?void 0:_t.env),Wn=rr;if(($t=be.$)!=null&&$t.variableName&&((Vt=be.$)!=null&&Vt.type)){let jn=Ye.currentClosureCaptures&&Ye.currentClosureCaptures.includes(be.$.variableName)&&Y(be)&&be.$.env&&Ye.currentClosureCaptureFrameLevel!==void 0&&ei(be.token.value,be.$.env,Ye.currentClosureCaptureFrameLevel),ni=(Ye.inAsyncStateMachine||Ye.inEffectStateMachine)&&rr.startsWith("sm->"),hi=!1;if(Y(be)&&be.$.env&&be.$.variableName){let ao=le(be.$.env,be.$.variableName);ao.length>0&&ao[ao.length-1].isCompileTimeOnly&&(hi=!0)}let Oi=!1;if(rr&&rr!==be.$.variableName&&!jn&&!ni&&!hi){let ao=He(be.$.variableName,be.$.env);if(rr!==ao){let Rs=Ut(be.$.type,be.$.variableName,n);n.emitter.emitLine(`${t}${Rs} = ${rr};`),Oi=!0,pr(be.$.variableName,t,n)}}Oi&&(Wn=He(be.$.variableName,be.$.env))}if((At=be.$)!=null&&At.deferredDupExpressions&&be.$.deferredDupExpressions.length>0){Mt(be,t,Ye);let jn=be.$.deferredDupExpressions[0];N(jn)&&((xt=jn.$)!=null&&xt.variableName)&&(Wn=He(jn.$.variableName,jn.$.env))}return`.${gi} = `+Wn}return""}else return""}).filter(be=>be).join(", "),pt=qe.length>0?`(${rt}){ .tag = ${Dn(Ee,Pe,n)}, .data = { .${Pe} = { ${Le} } } }`:`(${rt}){ .tag = ${Dn(Ee,Pe,n)} }`;if(Se&&((de=e.$)!=null&&de.type)){let be=Ut(e.$.type,Se,n);return n.emitter.emitLine(`${t}${be} = ${pt};`),pr(Se,t,n),Se}else return pt}}}}else if(Ze(i)){let Ee=e.args[0];if(Ee&&N(Ee)&&T(Ee,":")){let Se=B(e.func,t,n),_e=B(Ee.args[0],t,n),De=B(Ee.args[1],t,n),Pe=`Slice_${me(H(i.childType,n))}`;return n.sliceStructTypes.has(Pe)||n.sliceStructTypes.set(Pe,{childType:H(i.childType,n)}),`(${Pe}){ .data = &${Se}.data[${_e}], .length = (${De}) - (${_e}) }`}else if(Ee&&Y(Ee)&&Ee.token.value===":"){let Se=B(e.func,t,n),_e=i,De=_e.childType,Pe=`Slice_${me(H(De,n))}`;return n.sliceStructTypes.has(Pe)||n.sliceStructTypes.set(Pe,{childType:H(De,n)}),yt(_e.length)?`(${Pe}){ .data = &${Se}.data[0], .length = ${_e.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let Ne=B(e.func,t,n),rt=B(Ee,t,n);return`${Ne}.data[${rt}]`}else if(Lt(i)){let Ee=e.args[0];if(Ee&&N(Ee)&&T(Ee,":")){let Se=B(e.func,t,n),_e=B(Ee.args[0],t,n),De=B(Ee.args[1],t,n),Pe=`Slice_${me(H(i.childType,n))}`;return n.sliceStructTypes.has(Pe)||n.sliceStructTypes.set(Pe,{childType:H(i.childType,n)}),`(${Pe}){ .data = &${Se}.data[${_e}], .length = (${De}) - (${_e}) }`}else if(Ee&&Y(Ee)&&Ee.token.value===":"){let Se=B(e.func,t,n),_e=`Slice_${me(H(i.childType,n))}`;return n.sliceStructTypes.has(_e)||n.sliceStructTypes.set(_e,{childType:H(i.childType,n)}),`(${_e}){ .data = ${Se}.data, .length = ${Se}.length }`}let Ne=B(e.func,t,n),rt=B(Ee,t,n);return`${Ne}.data[${rt}]`}else if(i&&it(i)&&Lt(i.childType)){let Ee=B(e.func,t,n),Ne=B(e.args[0],t,n);return`${Ee}.data[${Ne}]`}}function __(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(Qn(e+" ",t,r,!1,!0,!1),Pr(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),$r({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&&!xe(s)){let l=H(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&&!xe(s)){let l=H(s,t);l!=="void"?i.emitLine(`${e} return (${l}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function p_(e,t,n,r,i,o,a,s){var p,_,m,g,y,h,v,$,E,w,L,b;let l=n.join(", "),u=t.return.type,c=a.emitter,f;if(s!=null&&s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let C=(p=i.$)!=null&&p.type?H(i.$.type,a):H(u,a),A=[],S=s.fieldFunctionType.parameters.filter(x=>!x.isCompileTimeOnly);for(let x=0;x<S.length;x++){let M=S[x].type,q=U(M)&&((m=(_=r==null?void 0:r[x])==null?void 0:_.$)!=null&&m.type)?r[x].$.type:M,P=ee(q)?Jr(q,"(*)",a):H(q,a);A.push(P)}let O=A.join(", ");f=`((${C} (*)(${O}))${e})`}else f=e;if(xe(u)){if(c.emitLine(`${o}${f}(${l});`),(g=i.$)!=null&&g.deferredDropExpressions&&an(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,i,!1,!0,!1),Pr(o+" ",a,i)),a.inAsyncStateMachine)$r({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let C=(y=a.currentFunctionType)==null?void 0:y.return.type;if(C&&!xe(C)){let A=H(C,a);A!=="void"?c.emitLine(`${o} return (${A}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let C=(h=i.$)==null?void 0:h.variableName;if(C){let A=(v=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&v.length&&(($=i.$)!=null&&$.type)?i.$.type:u,I=H(A,a);if(I==="void"||xe(A)){if(c.emitLine(`${o}${f}(${l});`),(E=i.$)!=null&&E.deferredDropExpressions&&an(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,i,!1,!0,!1),Pr(o+" ",a,i)),a.inAsyncStateMachine)$r({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let S=(w=a.currentFunctionType)==null?void 0:w.return.type;if(S&&!xe(S)){let O=H(S,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}${I} ${C} = ${f}(${l});`),(L=i.$)!=null&&L.deferredDropExpressions&&an(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,i,!1,!0,!1),Pr(o+" ",a,i)),a.inAsyncStateMachine)$r({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let S=(b=a.currentFunctionType)==null?void 0:b.return.type;if(S&&!xe(S)){let O=H(S,a);O!=="void"?c.emitLine(`${o} return (${O}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),C}else return`${f}(${l})`}}function iu(e,t,n,r){var s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let C of e){let A=`${C.implicitLabel}.${C.fieldLabel}`,I=!1;if(r.currentEvidenceParams){let S=r.currentEvidenceParams.get(A);S&&(i.push(S.cParamName),I=!0)}if(!I){if(o){if(o.effectHandlerInfos)for(let S of o.effectHandlerInfos){if(S.effectParameterName!==C.fieldLabel&&S.effectParameterName!==C.implicitLabel)continue;let O=S.handlerValue;if(O&&ve(O)){if((u=O.specializedFunctionCaches)!=null&&u.length){let M=O.specializedFunctionCaches[0].specializedFunction,q=(c=r.functions[M.funcId])==null?void 0:c.cName;if(q){i.push(`(void*)${q}`),I=!0,a=!0;break}}let x=(f=r.functions[O.funcId])==null?void 0:f.cName;if(x){i.push(x),I=!0,a=!0;break}}}if(!I&&o.handlerValue&&e.length===1){let S=o.handlerValue;if(S&&ve(S)){if((p=S.specializedFunctionCaches)!=null&&p.length){let O=S.specializedFunctionCaches[0].specializedFunction,x=(_=r.functions[O.funcId])==null?void 0:_.cName;x&&(i.push(`(void*)${x}`),I=!0,a=!0)}if(!I){let O=(m=r.functions[S.funcId])==null?void 0:m.cName;O&&(i.push(O),I=!0,a=!0)}}}}if(!I){let S=((g=n.func.$)==null?void 0:g.env)??((y=n.$)==null?void 0:y.env);if(S){let O=le(S,C.implicitLabel),x=Xn(S,z=>z.isImplicit===!0&&ee(z.type)&&ee(C.fieldFunctionType)&&z.type===C.fieldFunctionType),M=O[O.length-1],q=x[x.length-1],P=q&&q!==M?q:M??q,G=(h=P==null?void 0:P.value)==null?void 0:h[0];if(G&&vt(G)){let z=G,K=!0;for(let re=0;re<C.fieldPath.length-1;re++){let J=C.fieldPath[re],ue=z.type.fields.findIndex(ge=>ge.label===J);if(ue>=0&&z.fields[ue]&&vt(z.fields[ue]))z=z.fields[ue];else{K=!1;break}}if(K){let re=C.fieldPath[C.fieldPath.length-1],J=z.type.fields.findIndex(ue=>ue.label===re);if(J>=0){let ue=z.fields[J];if(ue&&ve(ue)){if(((v=ue.specializedFunctionCaches)==null?void 0:v.length)>0){let ge=ue.specializedFunctionCaches[0].specializedFunction,Z=($=r.functions[ge.funcId])==null?void 0:$.cName;Z&&(i.push(`(void*)${Z}`),I=!0)}if(!I){let ge=(E=r.functions[ue.funcId])==null?void 0:E.cName;ge&&(i.push(ge),I=!0)}}}}}else if(G&&ve(G)){if((w=G.specializedFunctionCaches)!=null&&w.length){let z=G.specializedFunctionCaches[0].specializedFunction,K=(L=r.functions[z.funcId])==null?void 0:L.cName;K&&(i.push(`(void*)${K}`),I=!0)}if(!I){let z=(b=r.functions[G.funcId])==null?void 0:b.cName;z&&(i.push(z),I=!0)}}I&&(a=!0)}}if(!I&&r.stateMachineVariables){let S=C.fieldPath[C.fieldPath.length-1];for(let[,O]of r.stateMachineVariables)if(O.name===S&&O.kind==="outer"){i.push(`sm->__capture.${S}`),I=!0;break}}if(!I)break}}return{args:i,isHandlerInstallation:a}}function ou(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;`),xe(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&an(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,r,!1,!0,!1),Pr(o+" ",a,r)),a.inAsyncStateMachine)$r({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=(f=a.currentFunctionType)==null?void 0:f.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),g&&!xe(g))if(s){let y=H(g,a);y!=="void"?(l.emitLine(`${o} ${y} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${y}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let y=H(g,a);y!=="void"?l.emitLine(`${o} return (${y}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let g=(p=r.$)==null?void 0:p.variableName;if(g){let y=H(u,a);if(l.emitLine(`${o}${y} ${g} = ${e}(${t});`),pr(g,o,a),(_=r.$)!=null&&_.deferredDropExpressions&&an(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Qn(o+" ",a,r,!1,!0,!1),Pr(o+" ",a,r)),a.inAsyncStateMachine)$r({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&&!xe(h)){let v=H(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&&!xe(h)){let v=H(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}}`),g}else return`${e}(${t})`}}function m_(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&&bt(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`(*((${H(i,n)}*)NULL))`}function y_(e,t,n){var l,u,c,f,p,_,m,g,y,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(Y(i)){let v=i.token.value,$=n;if($.currentEvidenceParams&&Y(r)){let w=`${r.token.value}.${v}`,L=$.currentEvidenceParams.get(w);if(L)return L.cParamName}if((c=e.$)!=null&&c.value&&ve(e.$.value)){let E=e.$.value;return((f=n.functions[E.funcId])==null?void 0:f.cName)||E.funcId}if(!((p=e.$)!=null&&p.value)&&(k.___dispose.includes(v)||k.___drop.includes(v)||k.___dup.includes(v))&&a){let E=null;if((Me(a)||Ue(a))&&(E=a.trait),E){let w=E.fields.find(L=>L.label===v&&L.assignedValue&&ve(L.assignedValue));if(w&&ve(w.assignedValue)){let L=w.assignedValue;return((_=n.functions[L.funcId])==null?void 0:_.cName)||L.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)||vt(s)){let E=(m=e.$)==null?void 0:m.value;if(E){if(Re(E)){if(E.variableName)return He(E.variableName,(g=e.$)==null?void 0:g.env);if(($.inAsyncStateMachine||$.inEffectStateMachine)&&$.stateMachineVariables){for(let[,w]of $.stateMachineVariables)if(w.name===v&&w.kind==="outer")return`sm->__capture.${v}`}}else if(!vt(E))return Mn(E,n,e)}return He(v,(y=e.$)==null?void 0:y.env)}if(ri(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===v)return o}if(Ue(a)){let E=a;if(Ln(E))return o;for(let L of E.variants)if(L.fields){for(let b of L.fields)if(b.label===v){let C=L.name;return`${o}.data.${C}.${me(v)}`}}return`/* ERROR: field ${v} not found in enum ${E.typeName} */`}else if(W(s)&&Ue(s.value)){let E=s.value,w=E.variants.find(b=>b.name===v),L=(h=n.types[E.id])==null?void 0:h.cName;if(w&&!w.fields&&L){let b=Dn(E,w.name,n);return`(${L}){ .tag = ${b}, .data = { } }`}}else{if(rn(a)&&v==="*")return`${o}->value`;if(it(a)){if(v==="*")return`(*${o})`;if(Lt(a.childType))return`${o}->${me(v)}`;{let E=0,w=a;for(;it(w);)E++,w=w.childType;if(E>0&&Me(w)&&w.isReferenceSemantics&&E++,ri(w)&&w.fields.length===1){let L=w.fields[0];if(L&&L.label===v)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${me(v)}`:`${`(${"*".repeat(E-1)}${o})`}->${me(v)}`:`${o}.${me(v)}`}}else if(Je(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let E=a.fields.findIndex(w=>w.label===v);return`${o}._${E}`}}else return Qe(a)?`${o}.vtable->${me(v)}`:Wt(a)?`${o}->${me(v)}`:`${o}.${me(v)}`}}return"/* ERROR: field name must be an identifier */"}function g_(e,t,n){var l,u,c,f,p;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${F(e)}
|
|
10655
|
+
`;let i=e.args[0];if(N(i)){let _=(u=i.func.$)==null?void 0:u.type;if(_&&Ze(_)){let m=i.args[0];if(m&&N(m)&&T(m,":")){let g=B(i.func,t,n),y=B(m.args[0],t,n),h=B(m.args[1],t,n),v=`Slice_${me(H(_.childType,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:H(_.childType,n)}),`(${v}){ .data = &${g}.data[${y}], .length = ${h} - ${y} }`}else if(m&&Y(m)&&m.token.value===":"){let g=B(i.func,t,n),y=_,h=y.childType,v=`Slice_${me(H(h,n))}`;return n.sliceStructTypes.has(v)||n.sliceStructTypes.set(v,{childType:H(h,n)}),yt(y.length)?`(${v}){ .data = &${g}.data[0], .length = ${y.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(_&&(Lt(_)||it(_)&&Lt(_.childType))){let m=Lt(_)?_:_.childType,g=i.args[0];if(g&&N(g)&&T(g,":")){let y=B(i.func,t,n),h=B(g.args[0],t,n),v=B(g.args[1],t,n),$=`Slice_${me(H(m.childType,n))}`;return n.sliceStructTypes.has($)||n.sliceStructTypes.set($,{childType:H(m.childType,n)}),`(${$}){ .data = &${y}.data[${h}], .length = ${v} - ${h} }`}else if(g&&Y(g)&&g.token.value===":"){let y=B(i.func,t,n),h=`Slice_${me(H(m.childType,n))}`;return n.sliceStructTypes.has(h)||n.sliceStructTypes.set(h,{childType:H(m.childType,n)}),`(${h}){ .data = ${y}.data, .length = ${y}.length }`}}}let o=(c=i.$)==null?void 0:c.value,a=(f=i.$)==null?void 0:f.type;if(o!==void 0&&a){if(yt(o)||ht(o)){let _=B(i,t,n);return`(&(${H(a,n)}){${_}})`}if(bt(o)&&((p=i.$)!=null&&p.convertedRuntimeType))return`(&${B(i,t,n)})`}return`(&${B(i,t,n)})`}function h_(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 v_(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 T_(e,t,n){let r=e.args[0];return r?B(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function E_(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!Ze(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=U(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Ze(u)){let p=u.length;if(!yt(p))return"// Error: array element has non-constant length";let _=`i_${Math.floor(Math.random()*1e6)}`,m=n.emitter;m.emitLine(`for (size_t ${_} = 0; ${_} < ${p.value}; ${_}++) {`);let g=`(${o}).data[${a}].data[${_}]`;m.emitLine(" { // drop nested array element");let y=_i(g,u.childType,n);return y&&m.emitLine(` ${y};`),m.emitLine(" }"),m.emitLine("}"),""}let c=Zr(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function $_(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=B(r,t,n),a=B(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!Ze(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=U(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Ze(u)){let p=u.length;if(!yt(p))return"// Error: array element has non-constant length";let _=`temp_array_${Math.floor(Math.random()*1e6)}`,m=`i_${Math.floor(Math.random()*1e6)}`,g=H(u,n),y=n.emitter;y.emitLine(`${g} ${_} = (${o}).data[${a}];`),y.emitLine(`for (size_t ${m} = 0; ${m} < ${p.value}; ${m}++) {`);let h=Do(`${_}.data[${m}]`,u.childType,n);return y.emitLine(` ${_}.data[${m}] = ${h};`),y.emitLine("}"),_}let c=Cr(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function C_(e,t,n){var p,_;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=B(r,t,n);B(i,t,n);let a=(p=r.$)==null?void 0:p.type;if(!a||!Je(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(_=i.$)==null?void 0:_.value;if(!yt(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=U(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Je(c)){let m=`(${o})._${l}`;return _i(m,c,n)}let f=Zr(c,n);return f?`${f}((${o})._${l})`:"// No drop function for tuple element type"}function b_(e,t,n){var p,_;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=B(r,t,n);B(i,t,n);let a=(p=r.$)==null?void 0:p.type;if(!a||!Je(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(_=i.$)==null?void 0:_.value;if(!yt(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=U(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Je(c)){let m=`(${o})._${l}`;return Do(m,c,n)}let f=Cr(c,n);return f?`${f}((${o})._${l})`:"// No dup function for tuple element type"}function k_(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?Do(i,o,n):i}function w_(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?_i(i,o,n):""}function F_(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 L_(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 A_(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 I_(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 N_(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&&U(i)&&Ke(i)){let l=B(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&U(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===k.___drop[0]);if(u&&u.assignedValue&&ve(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=B(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_drop: no-op */"}function S_(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&&U(i)&&Ke(i))return`__yo_incr_rc((void*)${B(r,t,n)})`;if(i&&U(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===k.___dup[0]);if(u&&u.assignedValue&&ve(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=B(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_dup: no-op */"}function V_(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 qn(i)?`((yo_ref_header_t*)(${o}))->ref_count`:"1"}function x_(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){Mt(s,t,o);let f=s.$.deferredDupExpressions[0];if(N(f)&&((c=f.$)!=null&&c.variableName))return He(f.$.variableName,f.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${F(e)}
|
|
10656
|
+
`}function D_(e,t,n){let r=e.args[0];return`sizeof(${B(r,t,n)})`}function M_(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 g=n,y=r.map((h,v)=>{var w,L;let E=B(h,t,n);if((w=h.$)!=null&&w.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Mt(h,t,g);let b=h.$.deferredDupExpressions[0];N(b)&&((L=b.$)!=null&&L.variableName)&&(E=He(b.$.variableName,b.$.env))}return`._${v} = ${E}`}).join(", ");if(o&&((f=e.$)!=null&&f.type)){let h=`(${i}){ ${y} }`,v=Ut(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${y} }`}else{if(e.args.length===0)return"";{let g=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((_=(p=e.$)==null?void 0:p.type)==null?void 0:_.id)??"none"} */`;let y=g.map((h,v)=>{let $=B(h,t,n);return`._${v} = ${$}`}).join(", ");if(o&&((m=e.$)!=null&&m.type)){let h=`(${i}){ ${y} }`,v=Ut(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${y} }`}}}function O_(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)||H(o,n),l=`yo_typeid_${me(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 Ag(e,t){if(N(e)&&T(e,D.begin)){let n=[];for(let r of e.args)if(N(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(N(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 R_(e,t,n){var r,i,o,a;if(N(e)&&T(e,D.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let m of u){let g=yr(m);g&&c.set(g,m)}s.pendingDeferredDrops=[...l??[]];let f=s.consumedVarPendingDrops,p=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[...p,...f??[]];let _=new Set;for(let m of e.args){let g=B(m,t,n);if(g&&n.emitter.emitLine(`${t}${g};`),(o=m.$)!=null&&o.env&&c.size>_.size)for(let y of m.$.env.frames)for(let h of y.variables)c.has(h.name)&&!_.has(h.name)&&(_.add(h.name),s.pendingDeferredDrops.unshift(c.get(h.name)))}if((a=e.$)!=null&&a.deferredDropExpressions)for(let m of e.$.deferredDropExpressions){let g=B(m,t,n);g&&n.emitter.emitLine(`${t}${g};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=f}else{let s=B(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function P_(e,t,n){var i,o;let r=e.args;if(r.length===2){let a=r[0],s=r[1],l=n.currentLoopLabel,u=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=u;let c=n,f=c.loopBodyDropsBaselineCount;c.loopBodyDropsBaselineCount=((i=c.pendingDeferredDrops)==null?void 0:i.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=B(a,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),R_(s,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${u}:;`),c.loopBodyDropsBaselineCount=f,n.currentLoopLabel=l,""}else if(r.length===3){let a=r[0],s=r[1],l=r[2],u=n.currentLoopLabel,c=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let _=n,m=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let g=B(a,t+" ",n);n.emitter.emitLine(`${t} if (!(${g})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),R_(l,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let y=Ag(s,n);return n.emitter.emitLine(`${t} ${y};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),_.loopBodyDropsBaselineCount=m,n.currentLoopLabel=u,n.currentContinueLabel=c,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Ig(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;U(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),Rt(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Ng(e,t,n,r){var f,p,_,m;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(g=>N(g)&&T(g,D.using));if(!o)return;let a=En(i.$.type);if(!((p=a==null?void 0:a.isFuture.effects)!=null&&p.length))return;let s=Ig(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let g=0;g<s.length&&g<l.length;g++){let y=s[g],h=l[g];if(ee(y.type)){let v=y.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=(_=h.$)==null?void 0:_.value;if(E&&ve(E)){let w=r.functions[E.funcId];w&&($=w.cName)}}$||($=B(h,n,r)),$&&c.emitLine(`${n} ${t}->__capture.${v} = (void*)${$};`)}else if(We(y.type)){let v=y.type;for(let $ of v.fields){if(!ee($.type))continue;let E;if(u.stateMachineVariables){for(let[,w]of u.stateMachineVariables)if(w.name===$.label&&w.kind==="outer"){E=`sm->__capture.${$.label}`;break}}if(!E){let w=(m=h.$)==null?void 0:m.value;if(w&&vt(w)){let L=v.fields.indexOf($),b=w.fields[L];if(b&&ve(b)){let C=r.functions[b.funcId];C&&(E=C.cName)}}}if(!E&&u.currentEvidenceParams){for(let w of u.currentEvidenceParams.values())if(w.fieldLabel===$.label){E=w.cParamName;break}}E||(E=Sg($.label,v,u,e)),E&&c.emitLine(`${n} ${t}->__capture.${$.label} = (void*)${E};`)}}}}function Sg(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=Xn(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],p=(l=f.value)==null?void 0:l[f.value.length-1];if(p&&vt(p)){let _=p.type.fields.findIndex(m=>m.label===e);if(_>=0){let m=p.fields[_];if(m&&ve(m)){let g=(u=n.functions[m.funcId])==null?void 0:u.cName;if(g)return g}}}}}function Vg(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 f of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${f};`);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 f=B(i,t,n);f&&f!=="(void)0"&&c.emitLine(`${t}(void)${f};`)}if(r.effectHandlerParamDrops)for(let f of r.effectHandlerParamDrops)c.emitLine(`${t}${f};`);return Qn(t,r,e,!1,!0,!0),Pr(t,r,e,!0),$r({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(Qn(t,r,e,!1,!0,!0),Pr(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!xe(c)){let f=r.overrideReturnTypeStr??H(c,n);if(f!=="void")return`return (${f}){0}`}}return"return"}let s=B(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(Qn(t,r,e,!1,!0,!0),Pr(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&&!xe(c)){let p=H(c,n);r.emitter.emitLine(`${t}{ ${p} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${p})); }`)}let f=r.currentFunctionType.return.type;if(!xe(f)){let p=r.overrideReturnTypeStr??H(f,n);if(p!=="void")return`return (${p}){0}`}return"return"}return`return ${s}`}function U_(e,t,n){let r;switch(e.tag){case"FnCall":r=xg(e,t,n);break;case"Atom":r=zo(e,n,t);break}return r}function xg(e,t,n){var r,i,o,a,s,l,u,c,f,p,_,m,g;if((r=e.$)!=null&&r.macroExpansion)return B(e.$.macroExpansion,t,n);if(N(e.func)&&T(e.func,".",2)&&e.func.args[1]&&Y(e.func.args[1])){let y=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&&U(v)&&Ke(v)){if(y===k.___drop[0]){let $=B(h,t,n);return`if (${$} != NULL) { __yo_decr_rc((void*)${$}); }`}if(y===k.___dup[0])return`__yo_incr_rc((void*)${B(h,t,n)})`}}if(ef(e))return tf(e,t,n);if(T(e,k.__yo_decr_rc))return h_(e,t,n);if(T(e,k.__yo_incr_rc))return v_(e,t,n);if(T(e,k.__yo_rc_own))return T_(e,t,n);if(T(e,k.__yo_drop_array_element))return E_(e,t,n);if(T(e,k.__yo_dup_array_element))return $_(e,t,n);if(T(e,k.__yo_drop_tuple_element))return C_(e,t,n);if(T(e,k.__yo_dup_tuple_element))return b_(e,t,n);if(T(e,k.___dup))return k_(e,t,n);if(T(e,k.___drop))return w_(e,t,n);if(T(e,k.__yo_dyn_drop))return F_(e,t,n);if(T(e,k.__yo_dyn_dup))return L_(e,t,n);if(T(e,k.__yo_incr_rc_atomic))return A_(e,t,n);if(T(e,k.__yo_decr_rc_atomic))return I_(e,t,n);if(T(e,k.__yo_iso_extract))return n_(e,t,n);if(T(e,k.__yo_iso_dispose))return r_(e,t,n);if(T(e,k.__yo_arc_dispose))return Rf(e,t,n);if(nu(e))return i_(e,t,n);if(tu(e))return Pf(e,t,n);if(T(e,k.__yo_sometype_drop))return N_(e,t,n);if(T(e,k.__yo_sometype_dup))return S_(e,t,n);if(T(e,k.__yo_gc_collect))return e_(e,t,n);if(T(e,k.rc))return V_(e,t,n);if(T(e,k.panic))return m_(e,t,n);if(T(e,D.test))return"/* test declaration skipped */";if(T(e,k.__yo_thread_set_maximum_threads))return c_(e,t,n);if(T(e,D.op_and))return Mf(e,t,n);if(T(e,D.op_or))return Of(e,t,n);if(Fn(e))return(o=e.$)!=null&&o.awaitAnalysis?nf(e,t,n):lf(e,t,n);if(T(e,D.dyn))return Jf(e,t,n);if(sr(e))return Wf(e,t,n);if(hc(e))return qf(e,t,n);if(vc(e)){let y=e.args[0];if(!y)return"// Error: spawn requires a Future argument";let v=n.emitter,$=B(y,t,n),E=(a=y.$)==null?void 0:a.type,w=E?H(E,n):"void*",L=(s=e.$)==null?void 0:s.type,b=L?H(L,n):null,C=(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}${w} ${C} = ${$};`),v.emitLine(`${t}int ${A} = ${C}->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}}`),La((c=y.$)==null?void 0:c.type)||(v.emitLine(`${t}if (${A} == 0 && ${C}->__yo_resume_fn) {`),Ng(e,C,t,n),v.emitLine(`${t} __yo_incr_rc((void*)${C});`),v.emitLine(`${t} ${C}->__yo_resume_fn((void*)${C});`),v.emitLine(`${t}}`)),b?`(${b}){ .__future = (void*)${C} }`:`(void*)${C}`}if(Tc(e))return Hf(e,t,n);if(T(e,D.return))return $f(e,t,n);if(T(e,D.escape))return Vg(e,t,n);if(T(e,k.__yo_array_fill,2))return zf(e,t,n);if(T(e,"::",2))return"";if(T(e,":",2))return Kf(e,t,n);if(T(e,":=",2)){let y=t_(e,t,n);if(y!==void 0)return y}else{if(T(e,"=",2))return Bf(e,t,n);if((f=e.$)!=null&&f.value&&!Re((p=e.$)==null?void 0:p.value)&&!xe(e.$.type)&&!Xt((_=e.$)==null?void 0:_.controlFlow)){let y=e.$.value;return Mn(y,n,e)}else{if(T(e,".",2))return y_(e,t,n);if(T(e,D.begin))return jf(e,t,n);if(T(e,D.cond))return Xf(e,t,n);if(T(e,D.match))return a_(e,t,n);if(T(e,k.__yo_address_of,1))return g_(e,t,n);if(T(e,D.tuple))return M_(e,t,n);if(T(e,D.array)){let y=Uf(e,t,n);if(y!==void 0)return y}else{if(T(e,D.recur))return x_(e,t,n);if(T(e,D.runtime,1))return B(e.args[0],t,n);if(T(e,k.sizeof,1))return D_(e,t,n);if(T(e,k.typeid,1))return O_(e,t,n);if(T(e,k.downcast,2))return Zf(e,t,n);if(T(e,no)){let y=((m=e.$)==null?void 0:m.runtimeArgExprsInOrder)||e.args;if(y){let h=n,v=y.map($=>{var w,L;let E=B($,t,n);if((w=$.$)!=null&&w.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){Mt($,t,h);let b=$.$.deferredDupExpressions[0];if(N(b)&&((L=b.$)!=null&&L.variableName))return He(b.$.variableName,b.$.env)}return E});return Ia(e.func.token.value,v,e,n,t)}}else{if(T(e,D.while))return P_(e,t,n);if(T(e,"->",2)&&N(e.args[0])&&T(e.args[0],D.fn)){let y=(g=e.$)==null?void 0:g.value;return ve(y)?Mn(y,n):"// Error: Anonymous function missing function value"}else{if(T(e,k.consume))return Qf(e,t,n);if(T(e,k.comptime_expect_error)||T(e,k.comptime_assert)||T(e,k.__yo_var_print_info)||T(e,k.__yo_var_is_owning_the_rc_value)||T(e,k.__yo_var_has_other_aliases))return"";if(T(e,D.open))return s_(e,t,n);{let y=d_(e,t,n);if(y!==void 0)return y}}}}}}if(N(e))throw new Error(`Unhandled function call: ${F(e)}`);return`// Failed to transpile ${F(e)}`}function z_({expr:e,env:t,context:n}){ze(e,k.alignof,1);let r=e.args[0],i=R({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=Dr(o),s;return a===null?s=ie(Qt(),{env:t,context:n}):s=Vn("Usize",a),e.$={env:t,type:Qt(),value:s,pathCollection:[]},e}function B_({expr:e,env:t,context:n}){let r=T(e,D.op_and)?"and":"or",i=e.args;if(i.length===0){let u=qt(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],f=R({expr:c,env:o,context:{...n}});if(!f.$||!ir(f.$.type))throw d({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
|
|
10657
10657
|
${F(c)}`});o=f.$.env;let p=f.$.value;if(Re(p)){s=!0;continue}if(ht(p)){let _=p.value;if(r==="and"){if(!_){a=qt(!1);break}!s&&!l&&(a=qt(!0))}else{if(_){a=qt(!0);break}!s&&!l&&(a=qt(!1))}}else l=!0}return ht(a)||(l||s)&&(l?a=void 0:a=ie(Nt(),{env:o,context:n})),e.$={env:o,type:Nt(),value:a,pathCollection:[],isAccessingProperty:!1},e}function G_({expr:e,env:t,context:n}){var g,y,h,v,$;ze(e,k.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=R({expr:r,env:t,context:{...n}});(g=o.$)!=null&&g.env&&(t=o.$.env);let a=(y=o.$)==null?void 0:y.value;if(!W(a)||!Ze(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=R({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(!ne({type:s.childType,env:t},{type:u,env:t}))throw d({token:i.token,errorMessage:`Fill value type ${V(u)} is not compatible with array element type ${V(s.childType)}`});let f=s.length;if(Re(f)){let E=ie(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}let p;if(yt(f)){let E=f.value;if(p=typeof E=="bigint"?Number(E):E,!Number.isInteger(p)||p<0)throw d({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${p}`})}else throw d({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${lt(f)}`});let _=[];if(Re(c)){let E=ie(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}for(let E=0;E<p;E++)_.push(c);let m=Ei(s,_);return e.$={env:t,type:s,value:m,pathCollection:[]},e}function W_({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)??ae.type;return e.$={env:t,type:c,value:xe(c)?ae:ie(c,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=R({expr:r,env:t,context:{...n}});if(!o.$||!ht(o.$.value))throw d({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
|
|
10658
10658
|
${F(r)}
|
|
10659
10659
|
|
|
@@ -10663,36 +10663,36 @@ ${F(r)}`,isAssertionError:!0})}function q_({expr:e,env:t,context:n}){if(T(e,k.__
|
|
|
10663
10663
|
${F(r)}`});t=r.$.env;let i;if(T(e,k.__yo_comptime_bool_not))ht(r.$.value)?i=qt(!r.$.value.value):i=ie(Nt(),{env:t,context:n});else if(T(e,k.__yo_comptime_bool_to_comptime_string))ht(r.$.value)?i=Bn(r.$.value.value.toString()):i=ie(Tn(),{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=R({expr:e.args[0],env:t,context:{...n}});if(!r.$||!ir(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
|
|
10664
10664
|
${F(r)}`});t=r.$.env;let i=R({expr:e.args[1],env:t,context:{...n}});if(!i.$||!ir(i.$.type)||!i.$.value)throw d({token:i.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
|
|
10665
10665
|
${F(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(T(e,k.__yo_comptime_bool_and))ht(o)&&ht(a)?s=qt(o.value&&a.value):s=ie(Nt(),{env:t,context:n});else if(T(e,k.__yo_comptime_bool_or))ht(o)&&ht(a)?s=qt(o.value||a.value):s=ie(Nt(),{env:t,context:n});else if(T(e,k.__yo_comptime_bool_eq))ht(o)&&ht(a)?s=qt(o.value===a.value):s=ie(Nt(),{env:t,context:n});else if(T(e,k.__yo_comptime_bool_neq))ht(o)&&ht(a)?s=qt(o.value!==a.value):s=ie(Nt(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${F(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function H_({expr:e,env:t,context:n}){var o;let r=ot(e.args[0]),i=e.args[1]?ot(e.args[1]):void 0;try{R({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e}if(i){let a=R({expr:i,env:t,context:{...n}});if((o=a.$)!=null&&o.value)throw d({token:e.token,errorMessage:bt(a.$.value)?a.$.value.value:lt(a.$.value)})}throw d({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
|
|
10666
|
-
${F(r)}`})}function Dg(e){return{...e,forallParameters:e.forallParameters.map(t=>({...t,isCompileTimeOnly:!0})),parameters:e.parameters.map(t=>({...t,isCompileTimeOnly:!0})),return:{...e.return,isCompileTimeOnly:!0}}}function Bo(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(
|
|
10666
|
+
${F(r)}`})}function Dg(e){return{...e,forallParameters:e.forallParameters.map(t=>({...t,isCompileTimeOnly:!0})),parameters:e.parameters.map(t=>({...t,isCompileTimeOnly:!0})),return:{...e.return,isCompileTimeOnly:!0}}}function Bo(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(qr(o.type,t))return;if(qr(e.type.return.type,t))return;let r=Dg(e.type);try{let o=ot(e.body),a=dt(r.env);for(let u of r.parameters){let{env:c}=Oe({env:a,variable:{name:u.label,type:u.type,isCompileTimeOnly:!0,value:[ie(u.type,{variableName:u.label,env:a,context:n})],token:Fe,initializedAtToken:Fe,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=en({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,Gt(a,!0),s;Gt(a,!0);return}catch{return}}function Y_({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=R({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(!ve(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=Bo(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 j_({expr:e,env:t,context:n}){ze(e,k.__yo_comptime_list_car,1);let r=e.args[0],i=R({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}":
|
|
10667
10667
|
${F(r)}`});if(!vn(i.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10668
10668
|
${F(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:
|
|
10669
|
-
${F(r)}`});if(e.$={env:i.$.env,type:o.childType,value:ie(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10669
|
+
${F(r)}`});if(e.$={env:i.$.env,type:o.childType,value:ie(o.childType,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},zr(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 K_({expr:e,env:t,context:n}){ze(e,k.__yo_comptime_list_cdr,1);let r=e.args[0],i=R({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}":
|
|
10670
10670
|
${F(r)}`});if(!vn(i.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10671
10671
|
${F(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:
|
|
10672
|
-
${F(r)}`});if(e.$={env:i.$.env,type:o,value:ie(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10672
|
+
${F(r)}`});if(e.$={env:i.$.env,type:o,value:ie(o,{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},zr(a)){let s=a.elements;if(s.length>0)e.$.value=Fr(o.childType,[...s.slice(1)]);else throw d({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function X_({expr:e,env:t,context:n}){ze(e,k.__yo_comptime_list_cons,2);let r=R({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}":
|
|
10673
10673
|
${F(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:
|
|
10674
10674
|
${F(r)}`});let o=R({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}":
|
|
10675
10675
|
${F(o)}`});if(t=o.$.env,!vn(o.$.type))throw d({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
|
|
10676
10676
|
${F(o)}`});let a=o.$.value;if(!a)throw d({token:o.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" second argument, got:
|
|
10677
|
-
${F(o)}`});let s=o.$.type,l=r.$.type;if(!ne({type:l,env:t},{type:s.childType,env:t}))throw d({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${V(l)}" to ComptimeList of base type "${V(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ie(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10677
|
+
${F(o)}`});let s=o.$.type,l=r.$.type;if(!ne({type:l,env:t},{type:s.childType,env:t}))throw d({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${V(l)}" to ComptimeList of base type "${V(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ie(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},zr(a)){let u=[i,...a.elements];e.$.value=Fr(s.childType,u)}return e}function Q_({expr:e,env:t,context:n}){ze(e,k.__yo_comptime_list_append,2);let r=R({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}":
|
|
10678
10678
|
${F(r)}`});if(t=r.$.env,!vn(r.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" first argument, got:
|
|
10679
10679
|
${F(r)}`});let i=r.$.value;if(!i)throw d({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
|
|
10680
10680
|
${F(r)}`});let o=R({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}":
|
|
10681
10681
|
${F(o)}`});if(t=o.$.env,!vn(o.$.type))throw d({token:o.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" second argument, got:
|
|
10682
10682
|
${F(o)}`});let a=o.$.value;if(!a)throw d({token:o.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" second argument, got:
|
|
10683
|
-
${F(o)}`});let s=r.$.type,l=o.$.type;if(!ne({type:s,env:t},{type:l,env:t}))throw d({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${V(l.childType)}" to ComptimeList of base type "${V(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ie(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10683
|
+
${F(o)}`});let s=r.$.type,l=o.$.type;if(!ne({type:s,env:t},{type:l,env:t}))throw d({token:e.token,errorMessage:`Type mismatch: cannot append ComptimeList of base type "${V(l.childType)}" to ComptimeList of base type "${V(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:ie(s,{env:t,context:n}),pathCollection:[],isAccessingProperty:!1},zr(i)&&zr(a)){let u=[...i.elements,...a.elements];e.$.value=Fr(s.childType,u)}return e}function Z_({expr:e,env:t,context:n}){ze(e,k.__yo_comptime_list_length,1);let r=e.args[0],i=R({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}":
|
|
10684
10684
|
${F(r)}`});if(!vn(i.$.type))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10685
10685
|
${F(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
|
|
10686
|
-
${F(r)}`});if(e.$={env:i.$.env,type:Qt(),value:ie(Qt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},
|
|
10686
|
+
${F(r)}`});if(e.$={env:i.$.env,type:Qt(),value:ie(Qt(),{env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},zr(o)){let a=o.elements.length,s=Vn("Usize",a);e.$.value=s}return e}function J_({expr:e,env:t,context:n}){var s;ze(e,k.__yo_comptime_list_element_type,1);let r=e.args[0],i=R({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}":
|
|
10687
10687
|
${F(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:
|
|
10688
10688
|
${F(r)}`});let o=i.$.value.value;if(!vn(o))throw d({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
|
|
10689
|
-
${V(o)}`});let a=fe(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function bs(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=ai();return{min:0n,max:(1n<<BigInt(t))-1n}}case"isize":{let t=ai();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 ep(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 Na(e){return vi(e)||Ti(e)||Zt(e)||hn(e)||xr(e)||e.isExtern==="c"&&U(e)}function Mg(e){let n=e.type.variants.find(r=>r.name===e.variantName);return n==null?void 0:n.discriminant}function Og(e){if(e&&yt(e))return e.value}function Rg(e){return mr(e)||Ha(e)||yt(e)}function Cs(e,t,n){let r=bs(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 ${V(t)} (${r.min} to ${r.max})`})}if(Zt(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return
|
|
10689
|
+
${V(o)}`});let a=fe(o.childType);return e.$={env:i.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function bs(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=ai();return{min:0n,max:(1n<<BigInt(t))-1n}}case"isize":{let t=ai();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 ep(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 Na(e){return vi(e)||Ti(e)||Zt(e)||hn(e)||xr(e)||e.isExtern==="c"&&U(e)}function Mg(e){let n=e.type.variants.find(r=>r.name===e.variantName);return n==null?void 0:n.discriminant}function Og(e){if(e&&yt(e))return e.value}function Rg(e){return mr(e)||Ha(e)||yt(e)}function Cs(e,t,n){let r=bs(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 ${V(t)} (${r.min} to ${r.max})`})}if(Zt(t)){let i=typeof e=="bigint"?e:BigInt(Math.floor(e));return Br(i)}if(hn(t)){let i=typeof e=="bigint"?Number(e):e;return Ya(i)}if(Ti(t)){let i=ep(t);if(i){let o=typeof e=="bigint"?Number(e):e;return Vn(i,o)}}if(vi(t)){let i=ep(t);if(i)if(i==="U64"||i==="I64"||i==="Usize"||i==="Isize"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Vn(i,a)}else{let a=typeof e=="bigint"?Number(e):Math.floor(e);return Vn(i,a)}}throw d({token:n,errorMessage:`Cannot create compile-time value for type ${V(t)}`})}function tp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!Na(e))return;let o=R({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw d({token:t.token,errorMessage:`Failed to evaluate argument: ${F(t)}`});let a=o.$.env,s=o.$.value,l=o.$.type;if(Ue(l)&&yn(s)){let c=Mg(s);if(c===void 0)throw d({token:t.token,errorMessage:`Failed to get discriminant for enum variant "${s.variantName}"`});if(Mr(e,a)){let f=Cs(c,e,n.token);return n.$={env:a,type:e,value:f,pathCollection:[]},{expr:n,env:a}}}if(!Na(l)&&!Zt(l)&&!hn(l)&&!Ue(l))throw d({token:t.token,errorMessage:`Cannot convert ${V(l)} to ${V(e)}. Expected a numeric type.`});let u=Og(s);if(u!==void 0&&Mr(e,a)){let c=Cs(u,e,n.token);return n.$={env:a,type:e,value:c,pathCollection:[]},{expr:n,env:a}}if((Zt(e)||hn(e))&&u===void 0)throw d({token:t.token,errorMessage:`Cannot convert runtime value to ${V(e)}. Only compile-time values can be converted to ${V(e)}.`});if((Zt(l)||hn(l))&&Mr(e,a))if(u!==void 0){let c=Cs(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:ie(e,{variableName:"comptime_conversion_placeholder",env:a,context:i}),pathCollection:[]},{expr:n,env:a};if(xr(e)||!Rg(s)){let c={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:k.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection}};return ts(n,c),{expr:n,env:a}}if(u!==void 0){let c=Cs(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 kn(e){return e&&(mr(e)||Ha(e)||yt(e))?e.value:null}function Ii(e,t,n,r){if(t.tag==="comptime_int"){let a=typeof e=="bigint"?e:BigInt(Math.floor(e));return Br(a)}if(t.tag==="comptime_float"){let a=typeof e=="bigint"?Number(e):e;return Ya(a)}if(xr(t))return ie(t,{env:n,context:r});let i=Pg(t),o=zg(e,t);return Vn(i,o)}function Pg(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 au(e,t,n,r,i,o){let a=bs(t);if(a===void 0||a.min===-1/0&&a.max===1/0)return;let s=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let f=typeof u=="bigint"?u:BigInt(Math.floor(u)),p=typeof c=="bigint"?c:BigInt(Math.floor(c));return f<p}return u<c},l=(u,c)=>{if(typeof u=="bigint"||typeof c=="bigint"){let f=typeof u=="bigint"?u:BigInt(Math.floor(u)),p=typeof c=="bigint"?c:BigInt(Math.floor(c));return f>p}return u>c};if(s(e,a.min)||l(e,a.max))throw d({token:o,errorMessage:`Integer overflow in compile-time evaluation
|
|
10690
10690
|
${r} ${n==="multiply"?"*":n==="add"?"+":"-"} ${i} = ${e}
|
|
10691
10691
|
Result ${e} exceeds ${t.tag} range [${a.min}, ${a.max}]`,kind:"overflow"})}function Ug(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 ai();default:return null}}function zg(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=bs(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 Sa(e,t,n,r,i,o){let a=kn(e),s=kn(t);return a===null||s===null?ie(n,{env:i,context:o}):Ii(r(a,s),n,i,o)??ie(n,{env:i,context:o})}function Go(e,t,n,r,i){let o=kn(e),a=kn(t);if(o===null||a===null)return ie(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 qt(n(s,l))}return qt(n(o,a))}function Bg(e,t,n,r,i){let o=kn(e);return o===null?ie(t,{env:r,context:i}):Ii(n(o),t,r,i)??ie(t,{env:r,context:i})}function np({expr:e,env:t,context:n}){let r=e.func.token.value,i=/^__yo_comptime_(u8|i8|u16|i16|u32|i32|u64|i64|usize|isize|f32|f64|int|float)_(add|sub|mul|div|mod|eq|neq|lt|lte|gt|gte|neg|to_comptime_string|bit_and|bit_or|bit_xor|bit_not|shl|shr)$/,o=r.match(i);if(!o)throw d({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=o,u=(()=>{switch(a){case"u8":return mo();case"i8":return yo();case"u16":return go();case"i16":return ho();case"u32":return vo();case"i32":return Ci();case"u64":return To();case"i64":return Eo();case"usize":return Qt();case"isize":return po();case"f32":return $o();case"f64":return bi();case"int":case"comptime_int":return $i();case"float":case"comptime_float":return _o();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_comptime_string"||s==="bit_not"){let y=R({expr:e.args[0],env:t,context:{...n}});if(!y.$||!y.$.value)throw d({token:y.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
|
|
10692
10692
|
${F(y)}`});t=y.$.env;let h;if(s==="neg")if(yt(y.$.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=Bg(y.$.value,u,v=>-v,t,n)}else h=ie(u,{env:t,context:n});else if(s==="bit_not")if(yt(y.$.value)||mr(y.$.value)){let v=kn(y.$.value);if(v!==null){let $=typeof v=="bigint"?v:BigInt(Math.floor(v)),E=Ug(u),w;if(E!==null){let b=(1n<<BigInt(E))-1n;if(w=$^b,Au(u)){let C=1n<<BigInt(E-1);w>=C&&(w=w-(1n<<BigInt(E)))}}else w=~$;h=Ii(w,u,t,n)??ie(u,{env:t,context:n})}else h=ie(u,{env:t,context:n})}else h=ie(u,{env:t,context:n});else if(s==="to_comptime_string")if(yt(y.$.value)){let v=kn(y.$.value);v!==null?h=Bn(v.toString()):h=ie(Tn(),{env:t,context:n})}else h=ie(Tn(),{env:t,context:n});else throw d({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_comptime_string"?Tn():u,value:h,pathCollection:[]},e}let c=R({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:
|
|
10693
10693
|
${F(c)}`});t=c.$.env;let f=R({expr:e.args[1],env:t,context:{...n}});if(!f.$||!f.$.value)throw d({token:f.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
|
|
10694
10694
|
${F(f)}`});t=f.$.env;let p=c.$.value,_=f.$.value,m,g;switch(s){case"add":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"||typeof h=="bigint"?(typeof y=="bigint"?y:BigInt(y))+(typeof h=="bigint"?h:BigInt(h)):y+h;au(v,u,"add",y,h,e.token)}m=Sa(p,_,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),w=typeof $=="bigint"?$:BigInt($);return E+w}return v+$},t,n),g=u;break}case"sub":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"||typeof h=="bigint"?(typeof y=="bigint"?y:BigInt(y))-(typeof h=="bigint"?h:BigInt(h)):y-h;au(v,u,"subtract",y,h,e.token)}m=Sa(p,_,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),w=typeof $=="bigint"?$:BigInt($);return E-w}return v-$},t,n),g=u;break}case"mul":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"||typeof h=="bigint"?(typeof y=="bigint"?y:BigInt(y))*(typeof h=="bigint"?h:BigInt(h)):y*h;au(v,u,"multiply",y,h,e.token)}m=Sa(p,_,u,(v,$)=>{if(typeof v=="bigint"||typeof $=="bigint"){let E=typeof v=="bigint"?v:BigInt(v),w=typeof $=="bigint"?$:BigInt($);return E*w}return v*$},t,n),g=u;break}case"div":{let y=kn(_);if(y===0||y===0n)throw d({token:f.token,errorMessage:`Division by zero in "${r}" operation`});m=Sa(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 vi(u)||u.tag==="comptime_int"?Math.trunc(h/v):h/v},t,n),g=u;break}case"mod":{if(Ti(u))throw d({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});let y=kn(_);if(y===0||y===0n)throw d({token:f.token,errorMessage:`Modulo by zero in "${r}" operation`});m=Sa(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),g=u;break}case"eq":m=Go(p,_,(y,h)=>y===h,t,n),g=Nt();break;case"neq":m=Go(p,_,(y,h)=>y!==h,t,n),g=Nt();break;case"lt":m=Go(p,_,(y,h)=>y<h,t,n),g=Nt();break;case"lte":m=Go(p,_,(y,h)=>y<=h,t,n),g=Nt();break;case"gt":m=Go(p,_,(y,h)=>y>h,t,n),g=Nt();break;case"gte":m=Go(p,_,(y,h)=>y>=h,t,n),g=Nt();break;case"bit_and":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"?y:BigInt(Math.floor(y)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Ii(v&$,u,t,n)??ie(u,{env:t,context:n})}else m=ie(u,{env:t,context:n});g=u;break}case"bit_or":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"?y:BigInt(Math.floor(y)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Ii(v|$,u,t,n)??ie(u,{env:t,context:n})}else m=ie(u,{env:t,context:n});g=u;break}case"bit_xor":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"?y:BigInt(Math.floor(y)),$=typeof h=="bigint"?h:BigInt(Math.floor(h));m=Ii(v^$,u,t,n)??ie(u,{env:t,context:n})}else m=ie(u,{env:t,context:n});g=u;break}case"shl":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"?y:BigInt(Math.floor(y)),$=typeof h=="bigint"?Number(h):Math.floor(h);m=Ii(v<<BigInt($),u,t,n)??ie(u,{env:t,context:n})}else m=ie(u,{env:t,context:n});g=u;break}case"shr":{let y=kn(p),h=kn(_);if(y!==null&&h!==null){let v=typeof y=="bigint"?y:BigInt(Math.floor(y)),$=typeof h=="bigint"?Number(h):Math.floor(h);m=Ii(v>>BigInt($),u,t,n)??ie(u,{env:t,context:n})}else m=ie(u,{env:t,context:n});g=u;break}default:throw d({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:g,value:m,pathCollection:[]},e}function rp({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=R({expr:i,env:t,context:{...n}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate argument for "comptime_print": ${F(i)}`});t=o.$.env,bt(o.$.value)?r.push(o.$.value.value):r.push(lt(o.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e}function ip({expr:e,env:t,context:n}){if(T(e,k.__yo_comptime_string_length)||T(e,k.__yo_comptime_string_to_upper)||T(e,k.__yo_comptime_string_to_lower)){let r=R({expr:e.args[0],env:t,context:{...n}});if(!r.$||!pn(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" argument, got:
|
|
10695
|
-
${F(r)}`});t=r.$.env;let i;if(T(e,k.__yo_comptime_string_length))bt(r.$.value)?i=
|
|
10695
|
+
${F(r)}`});t=r.$.env;let i;if(T(e,k.__yo_comptime_string_length))bt(r.$.value)?i=Br(BigInt(r.$.value.value.length)):i=ie($i(),{env:t,context:n});else if(T(e,k.__yo_comptime_string_to_upper))bt(r.$.value)?i=Bn(r.$.value.value.toUpperCase()):i=ie(Tn(),{env:t,context:n});else if(T(e,k.__yo_comptime_string_to_lower))bt(r.$.value)?i=Bn(r.$.value.value.toLowerCase()):i=ie(Tn(),{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,k.__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=R({expr:e.args[0],env:t,context:{...n}});if(!r.$||!pn(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" string argument, got:
|
|
10696
10696
|
${F(r)}`});t=r.$.env;let i=R({expr:e.args[1],env:t,context:{...n}});if(!i.$||!Zt(i.$.type)||!i.$.value)throw d({token:i.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" start argument, got:
|
|
10697
10697
|
${F(i)}`});t=i.$.env;let o;if(e.args.length===3){if(o=R({expr:e.args[2],env:t,context:{...n}}),!o.$||!Zt(o.$.type)||!o.$.value)throw d({token:o.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" end argument, got:
|
|
10698
10698
|
${F(o)}`});t=o.$.env}let a;if(bt(r.$.value)&&mr(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&&mr(o.$.value)){let f=o.$.value.value;c=typeof f=="bigint"?Number(f):f}a=Bn(s.slice(u,c))}else a=ie(Tn(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=R({expr:e.args[0],env:t,context:{...n}});if(!r.$||!pn(r.$.type)||!r.$.value)throw d({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
|
|
@@ -10719,8 +10719,8 @@ ${F(i)}`});return t=a.$.env,e.$={env:t,type:ae.type,value:ae,pathCollection:[]},
|
|
|
10719
10719
|
${F(r)}`});t=o.$.env;let a=R({expr:i,env:t,context:{...n}});if(!a.$)throw d({token:i.token,errorMessage:`Failed to evaluate the index argument for "${k.__yo_dup_tuple_element[0]}":
|
|
10720
10720
|
${F(i)}`});t=a.$.env;let s=o.$.type;if(!s||!Je(s))throw d({token:r.token,errorMessage:`Expected tuple type for "${k.__yo_dup_tuple_element[0]}"`});let l=a.$.value;if(!yt(l))throw d({token:i.token,errorMessage:`Expected number value for index in "${k.__yo_dup_tuple_element[0]}"`});let u=Number(l.value);if(u<0||u>=s.fields.length)throw d({token:i.token,errorMessage:`Index out of bounds for tuple in "${k.__yo_dup_tuple_element[0]}"`});let c=s.fields[u].type;return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function $p({expr:e,env:t,context:n}){ze(e,k.downcast,2);let r=e.args[0],i=R({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||!Qe(o))throw d({token:r.token,errorMessage:`downcast expects a Dyn type as first argument, got ${o?V(o):"unknown"}.`});let a=e.args[1],s=R({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?V(s.$.type):"unknown"}.`});let l=s.$.value.value,{optionType:u,env:c}=su(l,t,n);t=c;let f=ie(u,{env:t,context:n});return e.$={env:t,type:u,value:f,pathCollection:[]},gt(e,!0),e}function Va(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Cp(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function bp(e){if(e.result.kind!=="trait-type")throw new Error("Expected trait type call result");return e.result.result}function kp(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function qo(e,t,n,r,i){var c;if(!i.isEvaluatingFunctionBodyOrAsyncBlock)return;let o;if(i.isEvaluatingFunctionBodyOrAsyncBlock&&(o=i.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!o||t>=o.frames.length)return;let a,s=-1;for(let f=0;f<o.frames.length;f++){let p=(c=o.frames[f])==null?void 0:c.variables.find(_=>_.name===e);if(p){a=p,s=f;break}}if(!a||s<0||a.isCompileTimeOnly)return;i.capturedVariables||(i.capturedVariables=new Map);let l=i.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;i.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function Gg(e){let t=e;if(N(t)&&T(t,"?=",2)&&(t=t.args[0]),N(t)&&T(t,"=",2)&&(t=t.args[0]),!N(t)||!T(t,":",2))return;let n=t.args[0],r=t.args[1];if(!N(n)||!T(n,D.comptime)||n.args.length!==1)return;let i=n.args[0];if(!(!Y(i)||!kt(i)))return{name:i.token.value,typeExpr:r,token:i.token}}function lu({expr:e,env:t,context:n,isParameterComptimeByDefault:r,allowVariableShadowing:i}){var A,I,S;let o,a=r,s=!1,l=!1,u,c,f,p,_,m=e,g,y,h,v;if(N(m)&&T(m,"=")){let O=m.args[0];if(O&&N(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(N(m)&&T(m,":=",2))throw d({token:m.func.token,errorMessage:'":=" is not allowed in parameter lists. Use (name : Type) = value instead.'});if(N(m)&&T(m,"?=",2)&&(c=m.args[1],u=m.args[0],h=c,m=u),N(m)&&T(m,":",2)?(c=m.args[1],u=m.args[0],g=c):v?u=m:h?(g=void 0,u=m):g=m,!g)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(N(u)&&T(u,D.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(N(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(N(u)&&T(u,D.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(!Y(u)||!kt(u))throw d({token:u.token,errorMessage:`Expected identifier for parameter label, got ${F(u)}`});o=u.token.value,y=u}if(!o)throw d({token:e.token,errorMessage:`Expected a label for function parameter, got ${F(e)}`});if(o==="Self")throw d({token:(y==null?void 0:y.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(v){let O=R({expr:v,env:t,context:{...n}});if(!O.$)throw d({token:v.token,errorMessage:`Failed to evaluate assigned value expression: ${F(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(f=Dt(),_=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(g){let O=R({expr:g,env:t,context:{...n}});if(!O.$)throw d({token:g.token,errorMessage:`(3) Failed to evaluate type expression: ${F(g)}`});t=O.$.env;let x=O.$.value;if(W(x))f=x.value;else throw d({token:g.token,errorMessage:`Expected type for function parameter, got ${lt(x)}`})}if(h){let O=R({expr:h,env:t,context:{...n}});if((A=O.$)!=null&&A.env&&(t=(I=O.$)==null?void 0:I.env),p=(S=O.$)==null?void 0:S.value,!p)throw d({token:h.token,errorMessage:`Expected a compile-time known value for default parameter, got ${F(h)}`});if(!f)f=p.type;else if(!ne({type:f,env:t},{type:p.type,env:t}))throw d({token:h.token,errorMessage:`Incompatible default value type:
|
|
10721
10721
|
- Expected: ${V(f)}
|
|
10722
|
-
- Got : ${V(p.type)}`})}if(!f)throw d({token:e.token,errorMessage:"Expected type for function parameter}"});if(a&&
|
|
10723
|
-
${V(f)}`});if(!a&&
|
|
10722
|
+
- Got : ${V(p.type)}`})}if(!f)throw d({token:e.token,errorMessage:"Expected type for function parameter}"});if(a&&qr(f,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:
|
|
10723
|
+
${V(f)}`});if(!a&&Wr(f,t))throw d({token:(u==null?void 0:u.token)??e.token,errorMessage:`Parameter marked as runtime but type is not available at runtime:
|
|
10724
10724
|
${V(f)}`});if(!a&&ee(f)&&(f.forallParameters.length>0||f.parameters.some(O=>O.isCompileTimeOnly)))throw d({token:(u==null?void 0:u.token)??e.token,errorMessage:`Runtime function parameters with generic function types are not allowed:
|
|
10725
10725
|
${V(f)}
|
|
10726
10726
|
|
|
@@ -10739,17 +10739,17 @@ use_id :: (fn(forall(T : Type),
|
|
|
10739
10739
|
) -> T) {
|
|
10740
10740
|
return val.id();
|
|
10741
10741
|
}
|
|
10742
|
-
`});let E=le(t,o),w=E.length>0?E[E.length-1]:void 0,L=E.find(O=>{if(O.value&&W(O.value[0])){let x=O.value[0];if(U(x.value))return!0}return!1}),b=$,C=f;if(L){let O=L.value[0],x=O.value;if(_&&W(_)&&U(_.value)){let M=_.value,q=[...x.requiredTraits];for(let G of M.requiredTraits)q.some(z=>z.traitType.id===G.traitType.id)||q.push(G);let P=[...x.negativeTraits??[]];if(M.negativeTraits)for(let G of M.negativeTraits)P.some(z=>z.traitType.id===G.traitType.id)||P.push(G);x.requiredTraits=q,x.negativeTraits=P}b=O,C=cn(x)}else if(w&&w.isCompileTimeOnly&&w.value&&w.frameLevel===t.frames.length-1)b=w.value[0],C=w.type;else{let{env:O}=Oe({env:t,variable:{name:o,type:f,isCompileTimeOnly:a,value:_?[_]:a?[ie(f,{variableName:o,env:t,context:n})]:void 0,token:(u==null?void 0:u.token)??e.token,initializedAtToken:(u==null?void 0:u.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=O}return u&&(u.$={env:t,type:C,value:b,pathCollection:[]}),u!==e&&g!==e&&(e.$={env:t,type:ae.type,value:ae,pathCollection:[]}),ln(f),{parameter:{label:o,type:f,exprs:eo({expr:e,labelExpr:y,typeExpr:g,defaultValueExpr:h,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:_},env:t}}function Wg({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!N(i)||!T(i,"<:",2))continue;let o=i.args[0];if(Y(o)){let s=o.token.value;if(le(t,s).length===0){let u=ur(Dt(),s,{env:t,context:n}),c=fe(u),{env:f}=Oe({env:t,variable:{name:s,type:cn(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=f,o.$={env:t,type:cn(u),value:c,pathCollection:[]}}}let a=uu({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function wp({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=qg({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 Fp({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=R({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: ${V(s.value)}`});let l=s.value,u=gn({targetType:e,traitType:l,env:i});if(n){if(u)throw d({token:r.token,errorMessage:`Type ${V(e)} must NOT implement ${V(l)}, but it does.`})}else if(!u)throw d({token:r.token,errorMessage:`Type ${V(e)} does not implement required trait ${V(l)}.`});return{env:i,success:!0}}function qg({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;N(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(Y(e)){let f=e.token.value,p=le(r,f);if(p.length===0)return{env:r,success:!1};let _=p[p.length-1];if(_.value&&W(_.value[0])&&U(_.value[0].value))s=_.value[0].value;else if(_.value&&W(_.value[0]))try{return Fp({concreteType:_.value[0].value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}else return{env:r,success:!1}}else{let f;try{f=R({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!f.$||!f.$.value||!W(f.$.value))return{env:r,success:!1};r=f.$.env;let p=f.$.value;if(!U(p.value))try{return Fp({concreteType:p.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=p.value}let l;try{l=R({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: ${V(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=Or({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function uu({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!N(o)||!T(o,"<:",2))throw d({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${F(o)}`});let a=o.args[0],s=o.args[1],l;if(Y(a)){let c=a.token.value,f=le(t,c);if(f.length>0){let p=f[f.length-1];if(p.value&&W(p.value[0])&&U(p.value[0].value))l=p.value[0].value;else if(p.value&&W(p.value[0])){let _=p.value[0].value;t=Lp({concreteType:_,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=ur(Dt(),c,{env:t,context:n});let p=fe(l),{env:_}=Oe({env:t,variable:{name:c,type:cn(l),isCompileTimeOnly:!0,value:[p],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,a.$={env:t,type:cn(l),value:p,pathCollection:[]}}}else{let c=R({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 f=c.$.value;if(!U(f.value)){t=Lp({concreteType:f.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=f.value}let u=[];N(s)&&T(s,D.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let f=u[c],p=!1,_=f;N(f)&&T(f,"!")&&f.args.length===1&&(p=!0,_=f.args[0]);let m;try{m=R({expr:_,env:t,context:{...n}})}catch(h){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw h}if(!m.$||!m.$.value||!W(m.$.value)){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw d({token:_.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=m.$.env;let g=m.$.value;if(!st(g.value))throw d({token:_.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${V(g.value)}`});let y=g.value;if(y.receiverType)throw d({token:_.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Or({env:t,someType:l,traitType:y,isNegated:p})}}return{env:t,pendingTraits:i}}function Ni({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:uu({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function Lp({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(N(t)&&T(t,D.tuple))for(let a of t.args)N(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else N(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=R({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: ${V(u.value)}`});let c=u.value,f=gn({targetType:e,traitType:c,env:r});if(s){if(f)throw d({token:n.token,errorMessage:`Type ${V(e)} must NOT implement ${V(c)}, but it does.`})}else if(!f)throw d({token:n.token,errorMessage:`Type ${V(e)} does not implement required trait ${V(c)}.`})}return r}function cu({parameterExprs:e,env:t,context:n}){var p,_,m;t=dt(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let g=e[0];if(N(g)&&T(g,D.forall)){let y=g.args;for(let h=0;h<y.length;h++){let v=y[h];if(N(v)&&T(v,"...")&&v.args.length===1&&Y(v.args[0])){let L=v.args[0].token.value;if(i.find(O=>O.label===L))throw d({token:v.token,errorMessage:`Duplicate label "${L}" in type parameter`});let C=Ji(L,t),A=Jn(1),{env:I}=Oe({env:t,variable:{name:L,type:A,isCompileTimeOnly:!0,value:[fe(C)],token:v.args[0].token,initializedAtToken:v.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=I,v.$={env:t,type:A,value:fe(C),pathCollection:[]};let S={label:L,type:A,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:eo({expr:v,labelExpr:v.args[0],typeExpr:v.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(S);continue}let{parameter:$,env:E}=lu({expr:v,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(L=>L.label===$.label))throw d({token:v.token,errorMessage:`Duplicate label "${$.label}" in type parameter`});i.push($),t=E}}}let u=0;for(let g=0;g<e.length;g++){let y=e[g];if(N(y)&&T(y,D.using)){if(u++,u>1)throw d({token:y.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=y.args;for(let v=0;v<h.length;v++){let $=h[v];if(N($)&&T($,"...")&&$.args.length===1&&Y($.args[0])){let O=$.args[0].token.value,M=le(t,O).at(-1);if(!M)throw d({token:$.token,errorMessage:`Effect row variable "${O}" not found in scope. Declare it with forall(..., ...(${O}))`});let q,P=(p=M.value)==null?void 0:p[0];if(P&&W(P)&&Rt(P.value)){let z=P.value;for(let K of z.implicitParameters)o.push({...K,isEffectRowSpread:!1});continue}else if(P&&W(P)){if(!(U(P.value)&&P.value.isEffectsRow||Rt(P.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}))`});q=P.value}else if(P&&Re(P)&&Rt(P.type)){let z=P.type;for(let K of z.implicitParameters)o.push({...K,isEffectRowSpread:!1});continue}else if(P&&Re(P))q=Ji(O,t);else throw d({token:$.token,errorMessage:`Effect row variable "${O}" has invalid value. Expected a type.`});let G={label:O,type:q,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:eo({expr:$,labelExpr:$.args[0],typeExpr:$.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(G);continue}if(!(N($)&&(T($,":")||T($,"=")||T($,"?=")||T($,":="))))throw d({token:$.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:w,env:L}=lu({expr:$,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(O=>O.label===w.label))throw d({token:$.token,errorMessage:`Duplicate label "${w.label}" in implicit parameter (already in forall)`});if(o.find(O=>O.label===w.label))throw d({token:$.token,errorMessage:`Duplicate label "${w.label}" in implicit parameter`});let A={...w,isCompileTimeOnly:!0,isImplicit:!0};o.push(A);let S=L.frames[L.frames.length-1].variables.find(O=>O.name===w.label);S&&(S.isImplicit=!0),t=L}}}let c=new Set;for(let g=0;g<e.length;g++){let y=e[g];if(N(y)&&(T(y,D.forall)||T(y,D.using)||T(y,D.where)||T(y,"...")))continue;let h=Gg(y);if(h){let v=R({expr:h.typeExpr,env:t,context:{...n}});if((_=v.$)!=null&&_.env&&(t=v.$.env),!v.$||!v.$.value||!W(v.$.value))continue;let $=v.$.value.value,E=ie($,{variableName:h.name,env:t,context:n}),{env:w}=Oe({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=w,c.add(g)}}let f=[];if(e.length>0){let g=e[e.length-1];if(N(g)&&T(g,D.where)){if(s=g.args,s.length===0)throw d({token:g.token,errorMessage:"The where clause must have at least one constraint."});let y=Wg({constraintExprs:s,env:t,context:n});t=y.env,f=y.pendingConstraints}}for(let g=0;g<e.length;g++){let y=e[g];if(N(y)&&T(y,D.forall)){if(g!==0)throw d({token:y.token,errorMessage:`Expected type parameters to be the first argument, got ${g+1}`});continue}else{if(N(y)&&T(y,D.using))continue;if(N(y)&&T(y,D.where)){if(g!==e.length-1)throw d({token:y.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(Y(y)&&on(y,"...")||N(y)&&T(y,"...")){l=!0;let h=!1,v=!1,$="...",E=y,w=ae.type;if(N(y)){let C=y.args[0];if(C){if(N(C)&&T(C,D.comptime))throw h=!0,C.args.length!==1?d({token:C.token,errorMessage:`Expected one argument for "comptime" , got ${C.args.length}`}):(E=C.args[0],$=C.args[0].token.value,w=ae.type,d({token:C.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(N(C)&&T(C,D.quote)){if(h=!0,v=!0,C.args.length!==1)throw d({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});E=C.args[0],$=C.args[0].token.value,w=ya()}else throw kt(C)?(E=C,$=C.token.value,w=ae.type,d({token:C.token,errorMessage:"...(param_name) is not supported yet."})):d({token:C.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${F(C)}`})}else throw d({token:y.token,errorMessage:`Expected a name for variadic parameter, got ${F(y)}`})}else w=ae.type;let L=Nn(V(w)),b={exprs:{expr:y,labelExpr:E,typeExpr:L},isCompileTimeOnly:h,isQuote:v,label:$,type:w,isOwningTheRcValue:!1,isImplicit:!1};if(a=b,$!=="..."){let{env:C}=Oe({env:t,variable:{name:$,type:w,isCompileTimeOnly:b.isCompileTimeOnly,value:h?[ie(w,{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=C,E.$={env:t,type:w,value:h?ie(w,{variableName:$,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw d({token:y.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:h,env:v}=lu({expr:y,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(E=>E.label===h.label))throw d({token:N(y)?((m=y.args[0])==null?void 0:m.token)??y.token:y.token,errorMessage:`Duplicate label "${h.label}" in function parameter`});if(r.push(h),t=v,f.length>0){let E=wp({pendingConstraints:f,env:t,context:n});t=E.env,f=E.pendingConstraints}}}}if(r.forEach((g,y)=>{if(g.isQuote&&Pi(g.type)&&y!==r.length-1)throw d({token:g.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),f.length>0){let g=wp({pendingConstraints:f,env:t,context:n});if(t=g.env,g.pendingConstraints.length>0){let y=g.pendingConstraints[0];uu({constraintExprs:[y.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function ks({expr:e,env:t,context:n}){var E;if(!T(e,"->",2))throw d({token:e.token,errorMessage:`Expected -> for function type, got:
|
|
10742
|
+
`});let E=le(t,o),w=E.length>0?E[E.length-1]:void 0,L=E.find(O=>{if(O.value&&W(O.value[0])){let x=O.value[0];if(U(x.value))return!0}return!1}),b=$,C=f;if(L){let O=L.value[0],x=O.value;if(_&&W(_)&&U(_.value)){let M=_.value,q=[...x.requiredTraits];for(let G of M.requiredTraits)q.some(z=>z.traitType.id===G.traitType.id)||q.push(G);let P=[...x.negativeTraits??[]];if(M.negativeTraits)for(let G of M.negativeTraits)P.some(z=>z.traitType.id===G.traitType.id)||P.push(G);x.requiredTraits=q,x.negativeTraits=P}b=O,C=cn(x)}else if(w&&w.isCompileTimeOnly&&w.value&&w.frameLevel===t.frames.length-1)b=w.value[0],C=w.type;else{let{env:O}=Oe({env:t,variable:{name:o,type:f,isCompileTimeOnly:a,value:_?[_]:a?[ie(f,{variableName:o,env:t,context:n})]:void 0,token:(u==null?void 0:u.token)??e.token,initializedAtToken:(u==null?void 0:u.token)??e.token,consumedAtToken:void 0,isOwningTheRcValue:l,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:i});t=O}return u&&(u.$={env:t,type:C,value:b,pathCollection:[]}),u!==e&&g!==e&&(e.$={env:t,type:ae.type,value:ae,pathCollection:[]}),ln(f),{parameter:{label:o,type:f,exprs:eo({expr:e,labelExpr:y,typeExpr:g,defaultValueExpr:h,assignedValueExpr:v}),isCompileTimeOnly:a,isQuote:s,isOwningTheRcValue:l,isImplicit:!1,assignedValue:_},env:t}}function Wg({constraintExprs:e,env:t,context:n}){let r=[];for(let i of e){if(!N(i)||!T(i,"<:",2))continue;let o=i.args[0];if(Y(o)){let s=o.token.value;if(le(t,s).length===0){let u=ur(Dt(),s,{env:t,context:n}),c=fe(u),{env:f}=Oe({env:t,variable:{name:s,type:cn(u),isCompileTimeOnly:!0,value:[c],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=f,o.$={env:t,type:cn(u),value:c,pathCollection:[]}}}let a=uu({constraintExprs:[i],env:t,context:n,collectPendingTraits:!0});t=a.env,r.push(...a.pendingTraits)}return{env:t,pendingConstraints:r}}function wp({pendingConstraints:e,env:t,context:n}){let r=[];for(let i of e){let o=qg({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 Fp({concreteType:e,traitExpr:t,isNegated:n,constraintExpr:r,env:i,context:o}){let a;try{a=R({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: ${V(s.value)}`});let l=s.value,u=gn({targetType:e,traitType:l,env:i});if(n){if(u)throw d({token:r.token,errorMessage:`Type ${V(e)} must NOT implement ${V(l)}, but it does.`})}else if(!u)throw d({token:r.token,errorMessage:`Type ${V(e)} does not implement required trait ${V(l)}.`});return{env:i,success:!0}}function qg({lhsExpr:e,traitExpr:t,originalConstraintExpr:n,env:r,context:i}){let o=!1,a=t;N(t)&&T(t,"!")&&t.args.length===1&&(o=!0,a=t.args[0]);let s;if(Y(e)){let f=e.token.value,p=le(r,f);if(p.length===0)return{env:r,success:!1};let _=p[p.length-1];if(_.value&&W(_.value[0])&&U(_.value[0].value))s=_.value[0].value;else if(_.value&&W(_.value[0]))try{return Fp({concreteType:_.value[0].value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}else return{env:r,success:!1}}else{let f;try{f=R({expr:e,env:r,context:{...i}})}catch{return{env:r,success:!1}}if(!f.$||!f.$.value||!W(f.$.value))return{env:r,success:!1};r=f.$.env;let p=f.$.value;if(!U(p.value))try{return Fp({concreteType:p.value,traitExpr:a,isNegated:o,constraintExpr:n,env:r,context:i})}catch{return{env:r,success:!1}}s=p.value}let l;try{l=R({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: ${V(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=Rr({env:r,someType:s,traitType:c,isNegated:o}),{env:r,success:!0}}function uu({constraintExprs:e,env:t,context:n,collectPendingTraits:r=!1}){let i=[];for(let o of e){if(!N(o)||!T(o,"<:",2))throw d({token:o.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${F(o)}`});let a=o.args[0],s=o.args[1],l;if(Y(a)){let c=a.token.value,f=le(t,c);if(f.length>0){let p=f[f.length-1];if(p.value&&W(p.value[0])&&U(p.value[0].value))l=p.value[0].value;else if(p.value&&W(p.value[0])){let _=p.value[0].value;t=Lp({concreteType:_,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=ur(Dt(),c,{env:t,context:n});let p=fe(l),{env:_}=Oe({env:t,variable:{name:c,type:cn(l),isCompileTimeOnly:!0,value:[p],token:a.token,initializedAtToken:a.token,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1}});t=_,a.$={env:t,type:cn(l),value:p,pathCollection:[]}}}else{let c=R({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 f=c.$.value;if(!U(f.value)){t=Lp({concreteType:f.value,rhsExpr:s,constraintExpr:o,env:t,context:n});continue}l=f.value}let u=[];N(s)&&T(s,D.tuple)?u.push(...s.args):u.push(s);for(let c=0;c<u.length;c++){let f=u[c],p=!1,_=f;N(f)&&T(f,"!")&&f.args.length===1&&(p=!0,_=f.args[0]);let m;try{m=R({expr:_,env:t,context:{...n}})}catch(h){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw h}if(!m.$||!m.$.value||!W(m.$.value)){if(r){i.push({lhsExpr:a,traitExpr:f,originalConstraintExpr:o});continue}throw d({token:_.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=m.$.env;let g=m.$.value;if(!st(g.value))throw d({token:_.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${V(g.value)}`});let y=g.value;if(y.receiverType)throw d({token:_.token,errorMessage:"Trait type in where clause already has a receiver type assigned."});t=Rr({env:t,someType:l,traitType:y,isNegated:p})}}return{env:t,pendingTraits:i}}function Ni({constraintExprs:e,env:t,context:n}){return e.length===0?{env:t}:{env:uu({constraintExprs:e,env:t,context:n,collectPendingTraits:!1}).env}}function Lp({concreteType:e,rhsExpr:t,constraintExpr:n,env:r,context:i}){let o=[];if(N(t)&&T(t,D.tuple))for(let a of t.args)N(a)&&T(a,"!")&&a.args.length===1?o.push({expr:a.args[0],isNegated:!0}):o.push({expr:a,isNegated:!1});else N(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=R({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: ${V(u.value)}`});let c=u.value,f=gn({targetType:e,traitType:c,env:r});if(s){if(f)throw d({token:n.token,errorMessage:`Type ${V(e)} must NOT implement ${V(c)}, but it does.`})}else if(!f)throw d({token:n.token,errorMessage:`Type ${V(e)} does not implement required trait ${V(c)}.`})}return r}function cu({parameterExprs:e,env:t,context:n}){var p,_,m;t=dt(t);let r=[],i=[],o=[],a,s,l=!1;if(e.length>0){let g=e[0];if(N(g)&&T(g,D.forall)){let y=g.args;for(let h=0;h<y.length;h++){let v=y[h];if(N(v)&&T(v,"...")&&v.args.length===1&&Y(v.args[0])){let L=v.args[0].token.value;if(i.find(O=>O.label===L))throw d({token:v.token,errorMessage:`Duplicate label "${L}" in type parameter`});let C=Ji(L,t),A=Jn(1),{env:I}=Oe({env:t,variable:{name:L,type:A,isCompileTimeOnly:!0,value:[fe(C)],token:v.args[0].token,initializedAtToken:v.args[0].token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=I,v.$={env:t,type:A,value:fe(C),pathCollection:[]};let S={label:L,type:A,isCompileTimeOnly:!0,isQuote:!1,isOwningTheRcValue:!1,isImplicit:!1,isEffectRowSpread:!1,exprs:eo({expr:v,labelExpr:v.args[0],typeExpr:v.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};i.push(S);continue}let{parameter:$,env:E}=lu({expr:v,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(L=>L.label===$.label))throw d({token:v.token,errorMessage:`Duplicate label "${$.label}" in type parameter`});i.push($),t=E}}}let u=0;for(let g=0;g<e.length;g++){let y=e[g];if(N(y)&&T(y,D.using)){if(u++,u>1)throw d({token:y.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=y.args;for(let v=0;v<h.length;v++){let $=h[v];if(N($)&&T($,"...")&&$.args.length===1&&Y($.args[0])){let O=$.args[0].token.value,M=le(t,O).at(-1);if(!M)throw d({token:$.token,errorMessage:`Effect row variable "${O}" not found in scope. Declare it with forall(..., ...(${O}))`});let q,P=(p=M.value)==null?void 0:p[0];if(P&&W(P)&&Rt(P.value)){let z=P.value;for(let K of z.implicitParameters)o.push({...K,isEffectRowSpread:!1});continue}else if(P&&W(P)){if(!(U(P.value)&&P.value.isEffectsRow||Rt(P.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}))`});q=P.value}else if(P&&Re(P)&&Rt(P.type)){let z=P.type;for(let K of z.implicitParameters)o.push({...K,isEffectRowSpread:!1});continue}else if(P&&Re(P))q=Ji(O,t);else throw d({token:$.token,errorMessage:`Effect row variable "${O}" has invalid value. Expected a type.`});let G={label:O,type:q,isCompileTimeOnly:!0,isImplicit:!0,isEffectRowSpread:!0,isQuote:!1,isOwningTheRcValue:!1,exprs:eo({expr:$,labelExpr:$.args[0],typeExpr:$.args[0],defaultValueExpr:void 0,assignedValueExpr:void 0})};o.push(G);continue}if(!(N($)&&(T($,":")||T($,"=")||T($,"?=")||T($,":="))))throw d({token:$.token,errorMessage:'Implicit parameter requires a label. Use "using(name : Type)" instead of "using(Type)".'});let{parameter:w,env:L}=lu({expr:$,env:t,context:{...n},isParameterComptimeByDefault:!0,allowVariableShadowing:!0});if(i.find(O=>O.label===w.label))throw d({token:$.token,errorMessage:`Duplicate label "${w.label}" in implicit parameter (already in forall)`});if(o.find(O=>O.label===w.label))throw d({token:$.token,errorMessage:`Duplicate label "${w.label}" in implicit parameter`});let A={...w,isCompileTimeOnly:!0,isImplicit:!0};o.push(A);let S=L.frames[L.frames.length-1].variables.find(O=>O.name===w.label);S&&(S.isImplicit=!0),t=L}}}let c=new Set;for(let g=0;g<e.length;g++){let y=e[g];if(N(y)&&(T(y,D.forall)||T(y,D.using)||T(y,D.where)||T(y,"...")))continue;let h=Gg(y);if(h){let v=R({expr:h.typeExpr,env:t,context:{...n}});if((_=v.$)!=null&&_.env&&(t=v.$.env),!v.$||!v.$.value||!W(v.$.value))continue;let $=v.$.value.value,E=ie($,{variableName:h.name,env:t,context:n}),{env:w}=Oe({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=w,c.add(g)}}let f=[];if(e.length>0){let g=e[e.length-1];if(N(g)&&T(g,D.where)){if(s=g.args,s.length===0)throw d({token:g.token,errorMessage:"The where clause must have at least one constraint."});let y=Wg({constraintExprs:s,env:t,context:n});t=y.env,f=y.pendingConstraints}}for(let g=0;g<e.length;g++){let y=e[g];if(N(y)&&T(y,D.forall)){if(g!==0)throw d({token:y.token,errorMessage:`Expected type parameters to be the first argument, got ${g+1}`});continue}else{if(N(y)&&T(y,D.using))continue;if(N(y)&&T(y,D.where)){if(g!==e.length-1)throw d({token:y.token,errorMessage:"The where clause must be the last parameter in the function signature."});continue}else if(Y(y)&&on(y,"...")||N(y)&&T(y,"...")){l=!0;let h=!1,v=!1,$="...",E=y,w=ae.type;if(N(y)){let C=y.args[0];if(C){if(N(C)&&T(C,D.comptime))throw h=!0,C.args.length!==1?d({token:C.token,errorMessage:`Expected one argument for "comptime" , got ${C.args.length}`}):(E=C.args[0],$=C.args[0].token.value,w=ae.type,d({token:C.token,errorMessage:"...(comptime(param_name)) is not supported yet."}));if(N(C)&&T(C,D.quote)){if(h=!0,v=!0,C.args.length!==1)throw d({token:C.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${C.args.length}`});E=C.args[0],$=C.args[0].token.value,w=ya()}else throw kt(C)?(E=C,$=C.token.value,w=ae.type,d({token:C.token,errorMessage:"...(param_name) is not supported yet."})):d({token:C.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${F(C)}`})}else throw d({token:y.token,errorMessage:`Expected a name for variadic parameter, got ${F(y)}`})}else w=ae.type;let L=Nn(V(w)),b={exprs:{expr:y,labelExpr:E,typeExpr:L},isCompileTimeOnly:h,isQuote:v,label:$,type:w,isOwningTheRcValue:!1,isImplicit:!1};if(a=b,$!=="..."){let{env:C}=Oe({env:t,variable:{name:$,type:w,isCompileTimeOnly:b.isCompileTimeOnly,value:h?[ie(w,{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=C,E.$={env:t,type:w,value:h?ie(w,{variableName:$,env:t,context:n}):void 0,pathCollection:[]}}}else{if(l)throw d({token:y.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:h,env:v}=lu({expr:y,env:t,context:{...n},isParameterComptimeByDefault:!1,allowVariableShadowing:!0});if(r.find(E=>E.label===h.label))throw d({token:N(y)?((m=y.args[0])==null?void 0:m.token)??y.token:y.token,errorMessage:`Duplicate label "${h.label}" in function parameter`});if(r.push(h),t=v,f.length>0){let E=wp({pendingConstraints:f,env:t,context:n});t=E.env,f=E.pendingConstraints}}}}if(r.forEach((g,y)=>{if(g.isQuote&&Pi(g.type)&&y!==r.length-1)throw d({token:g.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),f.length>0){let g=wp({pendingConstraints:f,env:t,context:n});if(t=g.env,g.pendingConstraints.length>0){let y=g.pendingConstraints[0];uu({constraintExprs:[y.originalConstraintExpr],env:t,context:n,collectPendingTraits:!1})}}return{parameters:r,forallParameters:i,implicitParameters:o,variadicParameter:a,whereClauseExprs:s,env:t}}function ks({expr:e,env:t,context:n}){var E;if(!T(e,"->",2))throw d({token:e.token,errorMessage:`Expected -> for function type, got:
|
|
10743
10743
|
${F(e)}
|
|
10744
10744
|
|
|
10745
10745
|
Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],i=e.args[1],o=[];if(N(r)&&(T(r,D.fn)||T(r,D.unsafe_fn)))o=r.args;else throw d({token:r.token,errorMessage:`Expected a "fn" or "unsafe_fn" call for parameter list, got:
|
|
10746
10746
|
${F(r)}`});let{parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,env:f}=cu({parameterExprs:o,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=f;let p,_=!1,m=!1,g=i;if(N(i)&&T(i,":",2)){let w=i.args[0];if(g=i.args[1],N(w)&&T(w,D.comptime)){if(_=!0,w.args.length!==1)throw d({token:w.token,errorMessage:`Expected one argument for "comptime" , got ${w.args.length}`});w=w.args[0]}if(N(w)&&T(w,D.unquote)){if(m=!0,w.args.length!==1)throw d({token:w.token,errorMessage:`Expected one argument for "unquote", got ${w.args.length}`});if(_)throw d({token:w.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,w=w.args[0]}if(N(w)&&T(w,D.quote))throw d({token:w.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!kt(w))throw d({token:w.token,errorMessage:`Expected a valid variable name for return label, got ${F(w)}`});p=w.token.value}else{if(N(g)&&T(g,D.comptime)){if(_=!0,g.args.length!==1)throw d({token:g.token,errorMessage:`Expected one argument for "comptime" , got ${g.args.length}`});g=g.args[0]}if(N(g)&&T(g,D.unquote)){if(m=!0,g.args.length!==1)throw d({token:g.token,errorMessage:`Expected one argument for "unquote", got ${g.args.length}`});if(_)throw d({token:g.token,errorMessage:'Cannot use "comptime" with "unquote". "unquote" return type means compile-time only, so "comptime" is redundant.'});_=!0,g=g.args[0]}if(N(g)&&T(g,D.quote))throw d({token:g.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let y=R({expr:g,env:t,context:{...n,isEvaluatingFunctionType:!0}}),h,v=(E=y.$)==null?void 0:E.value;if(W(v))h=v.value;else throw d({token:g.token,errorMessage:`Expected a type for function return type, got:
|
|
10747
|
-
${F(g)}`});if(
|
|
10747
|
+
${F(g)}`});if(Wr(h,t)&&!_&&(h=Kt({type:h,expectedType:void 0,expr:void 0,env:t}),Wr(h,t)))throw d({token:g.token,errorMessage:`Expected a "comptime" for return type, like:
|
|
10748
10748
|
|
|
10749
10749
|
comptime(${F(g)})
|
|
10750
10750
|
|
|
10751
10751
|
Given type:
|
|
10752
|
-
${V(h)}`});if(n.isUnsafeFunctionType||si(h,g.token),_&&
|
|
10752
|
+
${V(h)}`});if(n.isUnsafeFunctionType||si(h,g.token),_&&qr(h,t))throw d({token:g.token,errorMessage:`Unexpected "comptime" for return type of ${V(h)} which can only be used at runtime.`});if(_){for(let w of a)if(!w.isCompileTimeOnly)throw d({token:Iu(w),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(m&&!dn(h))throw d({token:g.token,errorMessage:`Expected Expr type for "unquote" return type, got ${V(h)}`});let $=Qi({parameters:a,forallParameters:s,implicitParameters:l,variadicParameter:u,whereClauseExprs:c,return_:{type:h,typeExpr:g,isCompileTimeOnly:_,isUnquote:m,label:p??`fn_return_${Et(t.modulePath)}`},env:Gt(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,SelfTraitType:n.SelfTraitType,SelfModuleType:n.SelfModuleType});return t=Gt(t,!0),e.$={env:t,value:fe($),type:cn($),pathCollection:[]},e}function xa({parameter:e,calleeEnv:t,context:n,definitionSiteEnclosingFunctionType:r,functionType:i}){var s,l,u,c,f,p;let o=e.exprs.typeExpr,a=e.exprs.defaultValueExpr;if(o){let _=r??(((s=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:s.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0),m=R({expr:ot(o),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType,isEvaluatingFunctionBodyOrAsyncBlock:_?{kind:"function-body",type:_,evaluationEnv:t}:void 0}});if(!W((l=m.$)==null?void 0:l.value))throw d({token:o.token,errorMessage:`Expected type for parameter, got:
|
|
10753
10753
|
${F(m)}`});return(u=m.$)!=null&&u.env&&(t=(c=m.$)==null?void 0:c.env),{parameterType:(f=m.$)==null?void 0:f.value.value,calleeEnv:t}}else if(a){let _=R({expr:ot(a),env:t,context:{...n,expectedType:void 0,SelfType:i.SelfType,SelfTraitType:i.SelfTraitType??n.SelfTraitType,SelfModuleType:i.SelfModuleType??n.SelfModuleType}});if(!_.$)throw d({token:a.token,errorMessage:`Failed to evaluate default value expression:
|
|
10754
10754
|
${F(a)}`});return t=(p=_.$)==null?void 0:p.env,{parameterType:_.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function oo({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let i=e.return,o=R({expr:ot(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)??Fe,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return U(a)&&(a=bn(t,a)),{returnType:a,calleeEnv:((u=o.$)==null?void 0:u.env)??t}}function Ap({expr:e,env:t,context:n}){var p;let r=e.func,i=e.args;if(!Y(r)||r.token.value!=="_")throw d({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
|
|
10755
10755
|
${F(r)}`});let o=Xi(t),a=o.fields,s=[],l=[];for(let _=0;_<i.length;_++){let m=i[_],g,y=m,h;if(N(m)&&T(m,":",2)){if(g=m.args[0],y=m.args[1],!kt(g))throw d({token:g.token,errorMessage:`Expected identifier for anonymous struct field label, got:
|
|
@@ -10762,12 +10762,12 @@ ${V(f)}`});let p=R({expr:u,env:o,context:{...a,expectedType:{type:Qt(),env:o}}})
|
|
|
10762
10762
|
${F(u)}`});o=p.$.env;let _=p.$.type;if(!ne({type:Qt(),env:o},{type:_,env:o}))throw d({token:u.token,errorMessage:`Expected usize for array end index, got:
|
|
10763
10763
|
${V(_)}`});if(n&&yt(c.$.value)&&yt(p.$.value)){let m=c.$.value.value,g=p.$.value.value,y=typeof m=="bigint"?Number(m):m,h=typeof g=="bigint"?Number(g):g;if(y<0||y>n.elements.length)throw d({token:l.token,errorMessage:`Slice start index out of bounds: ${y}. Expected index in range [0, ${n.elements.length}].`});if(h<y||h>n.elements.length)throw d({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${y}, ${n.elements.length}].`});return{value:Xa(s,[n],y,h),type:s,callerEnv:o}}if(r&&yt(c.$.value)&&yt(p.$.value)){let m=c.$.value.value,g=p.$.value.value,y=typeof m=="bigint"?Number(m):m,h=typeof g=="bigint"?Number(g):g,v=r.endIndex-r.startIndex;if(y<0||y>v)throw d({token:l.token,errorMessage:`Slice start index out of bounds: ${y}. Expected index in range [0, ${v}].`});if(h<y||h>v)throw d({token:u.token,errorMessage:`Slice end index out of bounds: ${h}. Expected index in range [${y}, ${v}].`});let $=r.startIndex+y,E=r.startIndex+h;return{value:Xa(s,r.sourceArray,$,E),type:s,callerEnv:o}}return{value:void 0,type:s,callerEnv:o}}}else{let s=i[0],l=R({expr:s,env:o,context:{...a,expectedType:{type:Qt(),env:o}}});if(!l.$)throw d({token:s.token,errorMessage:`Failed to evaluate argument expression:
|
|
10764
10764
|
${F(s)}`});o=l.$.env;let u=l.$.type;if(!ne({type:Qt(),env:o},{type:u,env:o}))throw d({token:s.token,errorMessage:`Expected usize for array index, got:
|
|
10765
|
-
${V(u)}`});let c=t.childType;if(r)if(l.$.value)if(yt(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f,_=r.endIndex-r.startIndex;if(p<0||p>=_)throw d({token:s.token,errorMessage:`Slice index out of bounds: ${p}. Expected index in range [0, ${_-1}].`});let m=r.startIndex+p,g=r.sourceArray[0];return{value:g.elements[m],index:p,arrayElementRef:{arrayValue:g,index:m},type:c,callerEnv:o}}else return{value:ie(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Kt({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(yt(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f;if(p<0||p>=n.elements.length)throw d({token:s.token,errorMessage:`Array index out of bounds: ${p}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[p],index:p,arrayElementRef:{arrayValue:n,index:p},type:c,callerEnv:o}}else return{value:ie(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Kt({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function Vp({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(yt(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(Re(o)){s=n.length;let p=
|
|
10765
|
+
${V(u)}`});let c=t.childType;if(r)if(l.$.value)if(yt(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f,_=r.endIndex-r.startIndex;if(p<0||p>=_)throw d({token:s.token,errorMessage:`Slice index out of bounds: ${p}. Expected index in range [0, ${_-1}].`});let m=r.startIndex+p,g=r.sourceArray[0];return{value:g.elements[m],index:p,arrayElementRef:{arrayValue:g,index:m},type:c,callerEnv:o}}else return{value:ie(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Kt({type:c,env:o}),callerEnv:o};if(n)if(l.$.value)if(yt(l.$.value)){let f=l.$.value.value,p=typeof f=="bigint"?Number(f):f;if(p<0||p>=n.elements.length)throw d({token:s.token,errorMessage:`Array index out of bounds: ${p}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[p],index:p,arrayElementRef:{arrayValue:n,index:p},type:c,callerEnv:o}}else return{value:ie(c,{env:o,context:a}),type:c,callerEnv:o};else return{value:void 0,type:Kt({type:c,env:o}),callerEnv:o};else return{value:void 0,type:c,callerEnv:o}}}function Vp({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:i}){let o=t.length,a=t,s;if(yt(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(Re(o)){s=n.length;let p=Br(BigInt(s));a=jr(t.childType,p)}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 p=0;p<n.length;p++){let _=n[p],m=R({expr:_,env:u,context:{...i,expectedType:{type:c,env:u}}});if(!m.$)throw d({token:_.token,errorMessage:`Failed to evaluate array element at index ${p}.`});if(wn(m,i),u=m.$.env,p===0&&Ze(c)&&Re(c.length)&&Ze(m.$.type)&&(c=m.$.type,a=jr(c,a.length)),!ne({type:c,env:u},{type:m.$.type,env:u}))throw d({token:_.token,errorMessage:`Array element at index ${p} has incompatible type:
|
|
10766
10766
|
- Expected: ${V(c)}
|
|
10767
10767
|
- Given : ${V(m.$.type)}`});m.$.value!==void 0?l.push(m.$.value):l.push(ie(c,{env:u,context:i}))}let f=Ei(a,l);return e.$={env:u,value:f,type:a,pathCollection:[]},e}function xp({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=le(r,i);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=Tt(r,s,{...s,consumedAtToken:n}))}}return r}function Ho(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function ws({wrapperType:e,captureType:t,env:n,errorToken:r}){for(let{traitType:i}of e.requiredTraits)if(!ln(i)&&!gn({targetType:t,traitType:i,env:n})){let o=t.fields.filter(l=>!gn({targetType:l.type,traitType:i,env:n})),a=V(i),s=o.map(l=>`\`${l.label}\` has type \`${V(l.type)}\` which does not implement \`${a}\``).join(`
|
|
10768
10768
|
`);throw d({token:r,errorMessage:`Closure does not implement \`${a}\` because captured variable ${s}`})}}function Fs({expectedCaptureType:e,capturedVariablesWithValues:t,env:n,closureToken:r,context:i}){let o=e,a;if(o===void 0)if(t&&t.size>0){let s=Xi(n),l=Array.from(t.entries()).map(([c,f])=>({label:c,type:f.type,isCompileTimeOnly:!1,assignedValue:void 0,isEffectParam:f.isEffectParam||void 0,exprs:{expr:{tag:"Atom",token:f.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,o=s,n=ji({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=Lr(s,u):a=void 0}else{let s=Xi(n);s.fields=[],n=ji({structType:s,env:n,context:{...i},errorToken:r}),o=s,a=Lr(s,[])}else if(t&&t.size>0){let s=o,l=Array.from(t.keys()),u=s.fields.map(f=>f.label);for(let f of l)if(!u.includes(f))throw d({token:r,errorMessage:`Captured variable "${f}" does not exist in expected capture struct "${V(s)}"`});for(let f of s.fields)if(!l.includes(f.label))throw d({token:r,errorMessage:`Expected capture struct field "${f.label}" is not captured by this closure`});for(let[f,p]of t.entries()){let _=s.fields.find(m=>m.label===f);if(_&&!ne({type:_.type,env:n},{type:p.type,env:n}))throw d({token:p.token,errorMessage:`Captured variable "${f}" has type "${V(p.type)}" but expected struct field has type "${V(_.type)}"`})}let c=Array.from(t.values()).map(f=>f.value);c.every(f=>f!==void 0)?a=Lr(o,c):a=void 0}else a=Lr(o,[]);return{captureType:o,captureValue:a}}function Ls({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 As({capturedVariablesWithValues:e,env:t,context:n}){let r=[],i=t;if(e&&e.size>0){for(let[o,a]of e.entries())if(tt(a.type)){let s=Nn(`${k.___dup[0]}(${o})`),l=R({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 fu({functionBodyExpr:e,functionType:t,functionValue:n,env:r,context:i}){var a,s,l;if(!et(t.return.type))return;let o;try{let u=ot(e),c=Yo({...i,capturedVariables:void 0},t,{...n},r),f=en({expr:u,env:r,context:c.evaluationContext,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(o=(a=f.$)==null?void 0:a.type,Ot((s=f.$)==null?void 0:s.controlFlow,"escape")&&!Ot((l=f.$)==null?void 0:l.controlFlow,"return"))return}catch{return}if(o&&!ne({type:t.return.type,env:r},{type:o,env:r},!0))throw d({token:t.return.typeExpr.token,errorMessage:`Incompatible function return type for:
|
|
10769
10769
|
- Expected: ${V(t.return.type)}
|
|
10770
|
-
- Given : ${V(o)}`})}function Yo(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=Tr()}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 Dp({expr:e,functionType:t,callerEnv:n,context:r}){var L,b,C,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=(L=r.expectedType)==null?void 0:L.type,u=l&&ee(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((I,S)=>I.label!==t.parameters[S].label),c=dt(s?n:vs(n));if(u&&l&&ee(l)){for(let I of t.forallParameters){let{env:S}=Oe({env:c,variable:{name:I.label,type:I.type,isCompileTimeOnly:!0,value:[ie(I.type,{variableName:I.label,env:c,context:r})],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=S}for(let I=0;I<t.parameters.length;I++){let S=t.parameters[I],O=l.parameters[I],x=S.label,M=O.label,{env:q}=Oe({env:c,variable:{name:x,type:S.type,isCompileTimeOnly:S.isCompileTimeOnly,value:S.isCompileTimeOnly?[ie(S.type,{variableName:M,env:c,context:r})]:void 0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:S.isOwningTheRcValue,parameterAlias:x!==M?M:void 0}});c=q}}else c=dt(c,t.parametersFrame);let f=c.frames[c.frames.length-1],p={...t,parametersFrame:f,env:t.env},_={tag:"Function",type:p,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${Et(c.modulePath)}`,definitionSiteEnclosingFunctionType:((b=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if((C=p.whereClauseExprs)!=null&&C.length){let I=p.whereClauseExprs.map(O=>ot(O));c=Ni({constraintExprs:I,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let m=p.forallParameters.length>0||p.parameters.some(I=>et(I.type))||p.SelfType&&et(p.SelfType),g,y;if(m)fu({functionBodyExpr:a,functionType:p,functionValue:_,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?ie(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},y={...r,capturedVariables:void 0},g=a;else{if(y=Yo({...r,capturedVariables:void 0},p,_,c).evaluationContext,g=en({expr:a,env:c,context:y,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!g.$)throw d({token:a.token,errorMessage:"Failed to evaluate the function body."});c=g.$.env}let h=y.capturedVariables,v=(A=g.$)==null?void 0:A.type;if(
|
|
10770
|
+
- Given : ${V(o)}`})}function Yo(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=Tr()}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 Dp({expr:e,functionType:t,callerEnv:n,context:r}){var L,b,C,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=(L=r.expectedType)==null?void 0:L.type,u=l&&ee(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((I,S)=>I.label!==t.parameters[S].label),c=dt(s?n:vs(n));if(u&&l&&ee(l)){for(let I of t.forallParameters){let{env:S}=Oe({env:c,variable:{name:I.label,type:I.type,isCompileTimeOnly:!0,value:[ie(I.type,{variableName:I.label,env:c,context:r})],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1}});c=S}for(let I=0;I<t.parameters.length;I++){let S=t.parameters[I],O=l.parameters[I],x=S.label,M=O.label,{env:q}=Oe({env:c,variable:{name:x,type:S.type,isCompileTimeOnly:S.isCompileTimeOnly,value:S.isCompileTimeOnly?[ie(S.type,{variableName:M,env:c,context:r})]:void 0,token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:S.isOwningTheRcValue,parameterAlias:x!==M?M:void 0}});c=q}}else c=dt(c,t.parametersFrame);let f=c.frames[c.frames.length-1],p={...t,parametersFrame:f,env:t.env},_={tag:"Function",type:p,body:a,frameLevel:c.frames.length-1,funcName:void 0,funcId:`fn_${Et(c.modulePath)}`,definitionSiteEnclosingFunctionType:((b=r.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="function-body"?r.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};if((C=p.whereClauseExprs)!=null&&C.length){let I=p.whereClauseExprs.map(O=>ot(O));c=Ni({constraintExprs:I,env:c,context:{...r,isEvaluatingFunctionType:!0}}).env}let m=p.forallParameters.length>0||p.parameters.some(I=>et(I.type))||p.SelfType&&et(p.SelfType),g,y;if(m)fu({functionBodyExpr:a,functionType:p,functionValue:_,env:c,context:r}),a.$={env:c,type:t.return.type,value:t.return.isCompileTimeOnly?ie(t.return.type,{variableName:"function_body",env:c,context:r}):void 0,pathCollection:[]},y={...r,capturedVariables:void 0},g=a;else{if(y=Yo({...r,capturedVariables:void 0},p,_,c).evaluationContext,g=en({expr:a,env:c,context:y,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!g.$)throw d({token:a.token,errorMessage:"Failed to evaluate the function body."});c=g.$.env}let h=y.capturedVariables,v=(A=g.$)==null?void 0:A.type;if(Or(g)&&(_.isControlFunction=!0),!_.isControlFunction&&v&&!ne({type:p.return.type,env:c},{type:v,env:c}))throw d({token:p.return.typeExpr.token,errorMessage:`Incompatible function return type for:
|
|
10771
10771
|
- Expected: ${V(p.return.type)}
|
|
10772
10772
|
- Given : ${V(v)}`});if(U(p.return.type)&&!p.return.type.resolvedConcreteType&&(U(v)?U(v)&&v.resolvedConcreteType&&(p.return.type.resolvedConcreteType=v.resolvedConcreteType):p.return.type.resolvedConcreteType=v),p.return.isCompileTimeOnly&&g.$&&!g.$.value)throw d({token:p.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});c=Gt(c,!0);let $=n;s&&h&&h.size>0&&($=xp({capturedVariables:h,env:n,closureToken:e.token}));let E=_,w=p;if(r.isAnalyzingCtfeCapability||r.forceCompileTimeBindings){let I=Bo(_,$,r);I&&(E=I,w=I.type)}return e.$={env:$,value:E,type:w,pathCollection:h&&h.size>0?Ho(h):[]},e}function Mp({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:i}){var E,w;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=dt(r,t.isFn.callType.parametersFrame);if((E=t.isFn.callType.whereClauseExprs)!=null&&E.length){let L=t.isFn.callType.whereClauseExprs.map(C=>ot(C));l=Ni({constraintExprs:L,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_${Et(l.modulePath)}`,definitionSiteEnclosingFunctionType:((w=i.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:w.kind)==="function-body"?i.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:c}=Yo(i,t.isFn.callType,u,l),f=en({expr:s,env:l,context:c,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!f.$)throw d({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=f.$.env;let p=c.capturedVariables,_=f.$.type;if(!ne({type:t.isFn.callType.return.type,env:l},{type:_,env:l}))throw d({token:t.isFn.callType.return.typeExpr.token,errorMessage:`Incompatible closure return type:
|
|
10773
10773
|
- Expected: ${V(t.isFn.callType.return.type)}
|
|
@@ -10780,11 +10780,11 @@ ${F(f)}`});let x=f.token.value;if(n.label==="")throw d({token:f.token,errorMessa
|
|
|
10780
10780
|
${V(p)}`});else{let x=e.ioBuiltin==="io_await"||e.ioBuiltin==="io_state"||e.ioBuiltin==="io_spawn"||e.ioBuiltin==="join_handle_await"?void 0:{type:p,env:o};if(m=R({expr:c,env:a,context:{...s,expectedType:x}}),(b=m.$)!=null&&b.env&&(a=(C=m.$)==null?void 0:C.env),n.isCompileTimeOnly||u.push(m),qi(m,a),n.isOwningTheRcValue&&!n.isCompileTimeOnly){let M=(A=m.$)==null?void 0:A.variableName,q=M?le(a,M):[],P=q.length?q[q.length-1]:void 0;P!=null&&P.isOwningTheRcValue?a=nr(m,a,!0):(wn(m,s),(I=m.$)!=null&&I.env&&(a=m.$.env),a=nr(m,a,!0))}}if(!m.$)throw d({token:(c==null?void 0:c.token)??Fe,errorMessage:"Failed to evaluate argument expression."});let g=m.$.type;if(!((S=m.$)!=null&&S.value)&&n.isCompileTimeOnly)throw d({token:(c==null?void 0:c.token)??Fe,errorMessage:`Cannot assign runtime argument to compile-time parameter:
|
|
10781
10781
|
${c?F(c):""}`});if(n.assignedValue&&((O=m.$)!=null&&O.value)&&!mn({value:n.assignedValue,env:o},{value:m.$.value,env:a}))throw d({token:(c==null?void 0:c.token)??Fe,errorMessage:`Value mismatch for parameter "${n.label}":
|
|
10782
10782
|
Expected: ${lt(n.assignedValue)}
|
|
10783
|
-
Got: ${lt(m.$.value)}`});let y=m.$.value;if(!n.isCompileTimeOnly&&Bi(g,m.$.env)&&(s.forceCompileTimeBindings||(y=void 0),g=Kt({type:g,expectedType:p,expr:m,env:m.$.env}),
|
|
10784
|
-
${F(m)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=Oe({env:o,variable:{name:n.label,type:g,isCompileTimeOnly:h,value:y?[y]:void 0,token:(c==null?void 0:c.token)??Fe,initializedAtToken:(c==null?void 0:c.token)??Fe,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,y&&W(y)&&U(y.value)){let x=y.value,M=Ir(a,x);if(M){for(let q of M.requiredTraits){let P={...q,receiverType:x};o=
|
|
10783
|
+
Got: ${lt(m.$.value)}`});let y=m.$.value;if(!n.isCompileTimeOnly&&Bi(g,m.$.env)&&(s.forceCompileTimeBindings||(y=void 0),g=Kt({type:g,expectedType:p,expr:m,env:m.$.env}),Wr(g,m.$.env)))throw d({token:(c==null?void 0:c.token)??Fe,errorMessage:`Cannot convert compile-time type to runtime type for argument:
|
|
10784
|
+
${F(m)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=Oe({env:o,variable:{name:n.label,type:g,isCompileTimeOnly:h,value:y?[y]:void 0,token:(c==null?void 0:c.token)??Fe,initializedAtToken:(c==null?void 0:c.token)??Fe,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,y&&W(y)&&U(y.value)){let x=y.value,M=Ir(a,x);if(M){for(let q of M.requiredTraits){let P={...q,receiverType:x};o=Rr({env:o,someType:x,traitType:P,isNegated:!1})}for(let q of M.negativeTraits){let P={...q,receiverType:x};o=Rr({env:o,someType:x,traitType:P,isNegated:!0})}}}try{let{expectedEnv:x}=It({type:p,env:o},{type:g,env:a});o=x}catch(x){throw d({token:(c==null?void 0:c.token)??Fe,errorMessage:`Failed to synthesize types for parameter "${n.label}":
|
|
10785
10785
|
${x.message}`})}let{parameterType:$,calleeEnv:E}=xa({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=E,!ne({type:$,env:o},{type:g,env:a},i===0&&l))throw d({token:(c==null?void 0:c.token)??Fe,errorMessage:`Type mismatch for parameter "${n.label}":
|
|
10786
10786
|
Expected: ${V($)}
|
|
10787
|
-
Got: ${V(g)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:y,argType:g,parameterType:$}}function jo(e){if(e&&ve(e))return e}function Is(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var Ns=Is("YO_DEBUG_CALL")||Is("YO_DEBUG_CALL_PROFILE")||Is("YO_DEBUG_EVAL")||Is("YO_DEBUG_EVAL_PROFILE"),zp=globalThis,
|
|
10787
|
+
Got: ${V(g)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:y,argType:g,parameterType:$}}function jo(e){if(e&&ve(e))return e}function Is(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var Ns=Is("YO_DEBUG_CALL")||Is("YO_DEBUG_CALL_PROFILE")||Is("YO_DEBUG_EVAL")||Is("YO_DEBUG_EVAL_PROFILE"),zp=globalThis,ti=zp.__yoCallProfilerState??(zp.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function Si({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var pe,Ce,Ae,ut,se,he,te,ke,Be,Xe,wt,j,Q,oe,we,Ie,Ve,Ge,je,St,zn,ct,Yt,lr,mt,tn,nn,Cn,sn;if(Ns){ti.tryCallCount++;let ye="(unknown)";t&&"funcName"in t&&t.funcName?ye=t.funcName:t&&"funcId"in t?ye=String(t.funcId):r&&(ye=F(r).slice(0,60)),ti.tryCallNames.set(ye,(ti.tryCallNames.get(ye)??0)+1),ti.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${ti.tryCallCount}: name=${ye}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,f=[],p=[],_=[],m=t==null?void 0:t.definitionSiteEnclosingFunctionType,g=0;i.length>0&&N(i[0])&&T(i[0],D.forall)&&(c=i[0],g=1);let y,h=i.slice(g),v=h.findIndex(ye=>N(ye)&&T(ye,D.using));if(v!==-1){let ye=h.findIndex((Te,$e)=>$e>v&&N(Te)&&T(Te,D.using));if(ye!==-1)throw d({token:h[ye].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});y=h[v],h=[...h.slice(0,v),...h.slice(v+1)]}let $=n.parameters.length,E=h;if(!n.variadicParameter){if(E.length>$){let ye=n.parameters.at(-1);if(!(ye&&ye.isQuote&&Pi(ye.type)))throw d({token:(r==null?void 0:r.token)??Fe,errorMessage:`Too many arguments for function call:
|
|
10788
10788
|
Expected: ${$} arguments
|
|
10789
10789
|
Got: ${E.length} arguments`})}else if(E.length<$&&!n.parameters.slice(E.length).every(Te=>Te.exprs.defaultValueExpr!==void 0))throw d({token:(r==null?void 0:r.token)??Fe,errorMessage:`Too few arguments for function call:
|
|
10790
10790
|
Expected: ${$} arguments
|
|
@@ -10804,7 +10804,7 @@ Or pass it explicitly:
|
|
|
10804
10804
|
${(t==null?void 0:t.funcName)??"func"}(..., using(<value>))`});if(Ne[Ne.length-1].isFromEffectSpread&&!(()=>{if(!r||!Y(r))return!1;let qe=r.token.value,Ye=a.isEvaluatingFunctionBodyOrAsyncBlock;return!Ye||Ye.kind!=="function-body"?!1:Ye.type.parameters.some(pt=>pt.label===qe)})())throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Fe,errorMessage:`Effect "${Te.label}" of type ${V(de)} is available through an effect row spread but not explicitly declared in the function's using clause.
|
|
10805
10805
|
Add it explicitly:
|
|
10806
10806
|
using(${Te.label} : ${V(de)}, ...(E))`});let Se=Ne;if(Se.length>1){let at=$a(o,qe=>qe.isImplicit===!0&&qe.isCompileTimeOnly===!0&&ne({type:de,env:b},{type:qe.type,env:o}));if(at>=0){let Ye=o.frames[at].variables.filter(Le=>Le.isImplicit===!0&&Le.isCompileTimeOnly===!0&&ne({type:de,env:b},{type:Le.type,env:o}));Ye.length>0&&(Se=Ye)}}if(Se.length>1)throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Fe,errorMessage:`Ambiguous implicit parameter "${Te.label}": found ${Se.length} "given" variables with compatible type ${V(de)} in the same scope.
|
|
10807
|
-
Please use explicit using() to disambiguate.`});let _e=Se[Se.length-1],De=(je=_e.value)==null?void 0:je[0];if(!De)throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Fe,errorMessage:`The "given" variable "${_e.name}" has no compile-time value.`});x.push({value:De,parameterType:de,argType:_e.type});let{env:Pe}=Oe({env:b,variable:{name:Te.label,type:de,isCompileTimeOnly:!0,isImplicit:!0,value:[De],token:((St=Te.exprs.labelExpr)==null?void 0:St.token)??Fe,initializedAtToken:((zn=Te.exprs.labelExpr)==null?void 0:zn.token)??Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Pe}}let M={args:p,forallArgs:f,implicitArgs:x,variadicArgs:S},q;if(n.return.isCompileTimeOnly)if(u)q=ie(A,{variableName:n.return.label,env:n.env,context:a});else if(ve(t)){let{value:ye,callerEnv:Te,calleeEnv:$e}=Wo({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:M,callerEnv:o,calleeEnv:b,context:{...a}});q=ye,A=ye.type,o=Te,b=$e}else{let ye=Ct(A)&&A.level===0,Te=`${n.id}_return_sometype`;if(ye)if((ct=a.expectedType)!=null&&ct.type)q=fe(a.expectedType.type);else if(a.isEvaluatingFunctionType){let $e=ur(A,n.return.label,{id:Te,env:b,context:a});$e.functionApplication=e;let de=bn(b,$e);q=fe(de)}else throw d({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Fe,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else q=ie(A,{variableName:n.return.label,env:n.env,context:a})}Qg({returnType:A,env:b,expr:e,context:a});let P,G=((Yt=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Yt.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&ve(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&ve(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,z=(lr=M.implicitArgs)==null?void 0:lr.some(ye=>Re(ye.value)),K=z&&!((mt=M.implicitArgs)!=null&&mt.some(ye=>Re(ye.value)&&!We(ye.parameterType))),re=M.args.some(ye=>ye.argType&&U(ye.argType)),J=K&&re,ue=(()=>{if(!z||!n.implicitParameters.some(de=>de.isEffectRowSpread))return!1;let Te=0;for(let de of n.implicitParameters)de.isEffectRowSpread||Te++;let $e=M.implicitArgs??[];for(let de=0;de<Te&&de<$e.length;de++)if(Re($e[de].value))return!1;return!0})(),Z=kr(n)&&!Pr(n)&&n.implicitParameters.some(ye=>We(ye.type)?ye.type.fields.some(Te=>ee(Te.type)&&Te.type.forallParameters.length===0):!!ye.isEffectRowSpread);if(!l&&!Z&&t&&ve(t)&&!t.isControlFunction&&kr(n)&&!G&&(!z||J||ue)){if(P=Kg({originalFunction:t,argValues:M,calleeEnv:b,callerEnv:o,context:a}),P&&U(A)){let ye=(nn=(tn=P.body)==null?void 0:tn.$)==null?void 0:nn.type;ye&&!U(ye)&&(A=ye,P.specializedType&&(P.specializedType={...P.specializedType,return:{...P.specializedType.return,type:ye}}))}if(P){let ye=new Set,Te=0;for(let $e=0;$e<n.parameters.length;$e++)if(!n.parameters[$e].isCompileTimeOnly){let Ee=M.args[$e],Ne=Ee==null?void 0:Ee.value;Ne&&ve(Ne)&&Ne.type.implicitParameters.some(rt=>ee(rt.type)||We(rt.type))&&ye.add(Te),Te++}if(ye.size>0)for(let $e=_.length-1;$e>=0;$e--)ye.has($e)&&_.splice($e,1)}}if(!l&&t&&ve(t)&&t.isControlFunction&&n.forallParameters.length>0&&!P&&(P=Xg({originalFunction:t,argValues:M,calleeEnv:b,callerEnv:o,context:a}),P&&U(A))){let ye=(sn=(Cn=P.body)==null?void 0:Cn.$)==null?void 0:sn.type;ye&&!U(ye)&&(A=ye,P.specializedType&&(P.specializedType={...P.specializedType,return:{...P.specializedType.return,type:ye}}))}let ce=No(o),X;if(ce.length>0){let ye=Yg({variablesToDrop:ce,env:o,context:a});X=ye.deferredDropExpressions,o=ye.env}return{returnType:A,calleeEnv:b,callerEnv:o,pathCollection:O,argValues:M,returnValue:q,specializedFunctionValue:P,runtimeArgExprsInOrder:_,deferredDropExpressions:X}}function Kg({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var S,O,x,M,q,P,G,z,K,re,J,ue,ge;if(Ns){ei.specializeCount++;let Z=e.funcName??e.funcId;ei.specializeNames.set(Z,(ei.specializeNames.get(Z)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(Z=>Z.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(Z=>Z.value)),o.parameters.forEach((Z,ce)=>{let X=t.args[ce];if(Z.isCompileTimeOnly)X.value&&a.push(X.value);else if(X.value&&ve(X.value)&&X.value.type.implicitParameters.some(Ce=>ee(Ce.type)||We(Ce.type)))X.value&&a.push(X.value);else{let Ae=U(X.argType)&&X.argType.resolvedConcreteType&&!Ke(X.argType)?X.argType.resolvedConcreteType:X.argType;s.push({...Z,type:Ae})}});let l=s.map(Z=>Z.type),u=e.specializedFunctionCaches.find(Z=>Z.compileTimeArgValues.length===a.length&&Z.compileTimeArgValues.every((pe,Ce)=>{let Ae=a[Ce];return mn({value:pe,env:Z.env},{value:Ae,env:r})})?Z.runtimeParameterTypes.length===l.length&&Z.runtimeParameterTypes.every((pe,Ce)=>{let Ae=l[Ce];return ne({type:pe,env:Z.env},{type:Ae,env:r},!0)}):!1);if(u)return Ns&&ei.cacheHitCount++,u.specializedFunction;Ns&&ei.cacheMissCount++;let c=n;for(let Z of r.frames)for(let ce of Z.variables){if(!ce.isCompileTimeOnly||le(c,ce.name).length>0)continue;let{env:pe}=Oe({env:c,variable:{...ce},allowVariableShadowing:!0});c=pe}for(let Z of s){let ce=le(c,Z.label);if(ce.length>0){let X=ce[ce.length-1],pe={...X,value:void 0};c=Tt(c,X,pe)}}let f=ot(e.body),{returnType:p,calleeEnv:_}=oo({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=_;let m=i.enclosingFunctionReturnType,g=((S=t.implicitArgs)==null?void 0:S.some(Z=>ve(Z.value)&&Z.value.isControlFunction||vt(Z.value)&&Bp(Z.value.type,Z.value)))??!1,y=en({expr:f,env:c,context:{...i,expectedType:{type:p,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:g,...m?{enclosingFunctionReturnType:m}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!y.$)throw d({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let Z=0;Z<o.implicitParameters.length;Z++){let ce=o.implicitParameters[Z];if(ee(ce.type)){let X=(O=t.implicitArgs)==null?void 0:O[v],pe=X&&ve(X.value)?X.value:void 0;pe!=null&&pe.isControlFunction&&h.push({handlerArgIndex:v,label:ce.label,type:ce.type,fromSpread:!1}),v+=1}else if(ce.isEffectRowSpread){let X=ce.type;if(U(X)){let Ce=(M=(x=le(c,ce.label).at(-1))==null?void 0:x.value)==null?void 0:M[0];if(Ce&&W(Ce)&&Rt(Ce.value))X=Ce.value;else{let Ae=bn(c,X);Ae&&(X=Ae)}}if(Rt(X)){for(let pe=0;pe<X.implicitParameters.length;pe++){let Ce=X.implicitParameters[pe];if(ee(Ce.type)){let Ae=(q=t.implicitArgs)==null?void 0:q[v+pe],ut=Ae&&ve(Ae.value)?Ae.value:void 0;ut!=null&&ut.isControlFunction&&h.push({handlerArgIndex:v+pe,label:Ce.label,type:Ce.type,fromSpread:!0})}else if(We(Ce.type)){let Ae=(P=t.implicitArgs)==null?void 0:P[v+pe],ut=Ae&&vt(Ae.value)?Ae.value:void 0,se=[],he=(te,ke,Be)=>{for(let Xe=0;Xe<te.fields.length;Xe++){let wt=te.fields[Xe];if(ee(wt.type)){let j=Be==null?void 0:Be.fields[Xe];if(j&&ve(j)&&j.isControlFunction){let Q=j.specializedType??wt.type;se.push({path:[...ke,wt.label],type:Q})}}else if(We(wt.type)){let j=Be==null?void 0:Be.fields[Xe];he(wt.type,[...ke,wt.label],j&&vt(j)?j:void 0)}}};he(Ce.type,[],ut);for(let te of se)h.push({handlerArgIndex:v+pe,label:Ce.label,type:te.type,fromSpread:!0,effectFieldPath:te.path})}}v+=X.implicitParameters.length}else v+=1}else if(We(ce.type)){let X=[],pe=(G=t.implicitArgs)==null?void 0:G[v],Ce=(Ae,ut,se)=>{for(let he=0;he<Ae.fields.length;he++){let te=Ae.fields[he];if(ee(te.type)){let ke=se==null?void 0:se.fields[he];if(ke&&ve(ke)&&ke.isControlFunction){let Be=ke.specializedType??te.type;X.push({path:[...ut,te.label],type:Be})}}else if(We(te.type)){let ke=se==null?void 0:se.fields[he];Ce(te.type,[...ut,te.label],ke&&vt(ke)?ke:void 0)}}};Ce(ce.type,[],pe&&vt(pe.value)?pe.value:void 0);for(let Ae of X)h.push({handlerArgIndex:v,label:ce.label,type:Ae.type,fromSpread:!1,effectFieldPath:Ae.path});v+=1}else v+=1}let $=[];for(let Z of h){let ce=Up(y,Z.label,Z.type,!0,Z.effectFieldPath);if(ce.hasEffects){let X=(z=t.implicitArgs)==null?void 0:z[Z.handlerArgIndex],pe,Ce=Z.effectFieldPath;if(X&&ve(X.value))pe=X.value;else if(X&&vt(X.value)&&Ce&&Ce.length>0){let Ae=X.value;for(let ut of Ce){if(!vt(Ae)){Ae=void 0;break}let se=Ae.type.fields.findIndex(he=>he.label===ut);if(se<0||!Ae.fields[se]){Ae=void 0;break}Ae=Ae.fields[se]}Ae&&ve(Ae)&&(pe=Ae)}if(pe){let Ae=pe,ut=Z.type,se=!Ae.body.$;if(!se&&Ae.isControlFunction&&N(Ae.body)&&Ae.body.args.length>0&&!((K=Ae.body.args[0])!=null&&K.$)&&(se=!0),se&&ee(ut)&&ut.forallParameters.length>0&&ce.effectCallPoints.length>0){let he=new Map,te=ut.return.type,ke=ce.effectCallPoints[0].operationResultType;if(U(te)&&he.set(te.name,ke),he.size===0&&ut.forallParameters.length===1){let oe=ut.forallParameters[0];he.set(oe.label,ke)}let Be=ot(Ae.body),Xe=((re=Ae.body.$)==null?void 0:re.env)??c;Xe=dt(Xe);for(let oe of ut.forallParameters){let we=he.get(oe.label);we&&(Xe=Oe({env:Xe,variable:{name:oe.label,type:oe.type,isCompileTimeOnly:!0,value:[fe(we)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let wt=Ae.specializedType??Ae.type,j=((J=Ae.definitionSiteEnclosingFunctionType)==null?void 0:J.return.type)??Tr(),Q={...i,expectedType:void 0,enclosingFunctionReturnType:j,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:wt,value:Ae,evaluationEnv:Xe}};try{let oe=Vi({expr:Be,env:Xe,context:Q}),we=wt.parameters.map(je=>{if(je.isCompileTimeOnly)return je;if(U(je.type)){let St=he.get(je.type.name);if(St)return{...je,type:St}}return je}),Ie=wt.return.type;if(U(Ie)){let je=he.get(Ie.name);je&&(Ie=je)}let Ve={...wt,parameters:we,return:{...wt.return,type:Ie}},Ge={...Ae,body:oe,specializedType:Ve};ce.handlerValue=Ge,ce.effectParameterType=Ve;for(let je of ce.effectCallPoints)je.isTransitiveEffectCall&&(je.operationArgTypes=je.operationArgTypes.map(St=>U(St)?he.get(St.name)??St:St))}catch(oe){if(N(Ae.body)&&Ae.body.args.length>0&&!((ue=Ae.body.args[0])!=null&&ue.$))throw oe;ce.handlerValue=Ae}}else ce.handlerValue=Ae}else X&&(ce.handlerValue=X.value);$.push({analysis:ce,ctlParam:Z})}}if($.length===1)y.$.effectAnalysis=$[0].analysis;else if($.length>1){let Z=[],ce=new Map,X=new Map,pe=[];for(let ut=0;ut<$.length;ut++){let{analysis:se}=$[ut];pe.push({effectParameterName:se.effectParameterName,effectParameterType:se.effectParameterType,effectFieldPath:se.effectFieldPath,handlerValue:se.handlerValue,operationArgTypes:se.effectCallPoints.length>0?se.effectCallPoints[0].operationArgTypes:[],operationResultType:se.effectCallPoints.length>0?se.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let he of se.effectCallPoints)Z.push({...he,effectIndex:ut});for(let he of se.capturedVariables)ce.has(he.id)||ce.set(he.id,he);for(let[he,te]of se.variableIdRemapping)X.set(he,te)}if(N(y)&&T(y,D.begin)){let ut=y.args,se=new Map;for(let te=0;te<ut.length;te++)se.set(ut[te],te);let he=te=>{for(let ke=0;ke<ut.length;ke++)if(_u(ut[ke],te.expr))return ke;return 999};Z.sort((te,ke)=>he(te)-he(ke))}for(let ut=0;ut<Z.length;ut++)Z[ut].index=ut;let Ce=$[0].analysis,Ae={effectCallPoints:Z,capturedVariables:Array.from(ce.values()),hasEffects:!0,variableIdRemapping:X,effectParameterName:Ce.effectParameterName,effectParameterType:Ce.effectParameterType,effectFieldPath:Ce.effectFieldPath,handlerValue:Ce.handlerValue,effectHandlerInfos:pe};y.$.effectAnalysis=Ae}let E=[],w=Z=>{if(W(Z)){let ce=Z.value;if(!ce.typeName&&ce.id)return`${lt(Z)}_id${ce.id}`}return ve(Z)?`fn_${Z.funcId}`:lt(Z)};o.forallParameters.forEach((Z,ce)=>{var X,pe;if(ce<t.forallArgs.length){let Ce=t.forallArgs[ce];E.push(me(w(Ce.value)))}else{let Ce=Z.label,Ae=le(n,Ce);Ae.length>0&&((pe=(X=Ae[Ae.length-1])==null?void 0:X.value)!=null&&pe[0])?E.push(me(w(Ae[Ae.length-1].value[0]))):E.push("unknown")}}),o.parameters.forEach((Z,ce)=>{if(Z.isCompileTimeOnly&&ce<t.args.length){let X=t.args[ce];X?E.push(me(w(X.value))):E.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(Z=>{E.push(me(w(Z.value)))}),s.forEach((Z,ce)=>{let X=Z.type;(!X.typeName&&X.id||et(X))&&E.push(`rtparam${ce}_${me(V(X))}_id${X.id}`)});let L=E.join("_"),b=[];for(let Z of o.implicitParameters)if(Z.isEffectRowSpread){let ce=Z.type;if(U(ce)){if(t.forallArgs){for(let X=0;X<o.forallParameters.length;X++)if(o.forallParameters[X].label===ce.name&&X<t.forallArgs.length){let Ce=t.forallArgs[X].value;W(Ce)&&Rt(Ce.value)&&(ce=Ce.value);break}}if(U(ce)&&ce.resolvedConcreteType&&Rt(ce.resolvedConcreteType)&&(ce=ce.resolvedConcreteType),U(ce)){let X=le(c,ce.name);if(X.length>0){let Ce=(ge=X[X.length-1].value)==null?void 0:ge[0];Ce&&W(Ce)&&Rt(Ce.value)&&(ce=Ce.value)}}}Rt(ce)&&b.push(...ce.implicitParameters)}else We(Z.type)&&b.push(Z);let C=Qi({forallParameters:[],parameters:s,implicitParameters:b.length>0?b:void 0,variadicParameter:void 0,return_:{...o.return,type:p},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),A={...e,specializedType:C,body:y,isControlFunction:e.isControlFunction||Mr(y),funcId:`${e.funcId}_${L}`,funcName:`${e.funcName}_${L}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},I={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:A,env:y.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,I],A}function Xg({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)??Tr(),s=me(V(o)),l=e.specializedFunctionCaches.find(E=>E.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=dt(t);for(let E of n.frames)for(let w of E.variables){if(!w.isCompileTimeOnly||le(u,w.name).length>0)continue;let{env:b}=Oe({env:u,variable:{...w},allowVariableShadowing:!0});u=b}for(let E of i.forallParameters){let w=o,{env:L}=Oe({env:u,variable:{name:E.label,type:E.type,isCompileTimeOnly:!0,value:[fe(w)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=L}let c=ot(e.body),f={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},p=Vi({expr:c,env:u,context:f}),_={...e,body:p,isControlFunction:e.isControlFunction||Mr(p),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},m=new Set(i.forallParameters.map(E=>E.type)),g=E=>U(E)&&m.has(E)?o:E,y=Qi({forallParameters:[],parameters:i.parameters.map(E=>({...E,type:g(E.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:g(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return _.specializedType=y,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:_,env:(($=p.$)==null?void 0:$.env)??u}],_}function Qg({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=qs(e);for(let a of i){if(Ke(a)||xn(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!le(n,a.name).length){let l=Xn(n,()=>!0),u=!1;for(let c of l)if(W((o=c.value)==null?void 0:o[0])){let f=c.value[0].value,p=qs(f);for(let _ of p)if(_.name===a.name){u=!0;break}if(u)break}if(u)continue;throw d({token:(t==null?void 0:t.token)??Fe,errorMessage:`Failed to infer the function call return type.
|
|
10807
|
+
Please use explicit using() to disambiguate.`});let _e=Se[Se.length-1],De=(je=_e.value)==null?void 0:je[0];if(!De)throw d({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Fe,errorMessage:`The "given" variable "${_e.name}" has no compile-time value.`});x.push({value:De,parameterType:de,argType:_e.type});let{env:Pe}=Oe({env:b,variable:{name:Te.label,type:de,isCompileTimeOnly:!0,isImplicit:!0,value:[De],token:((St=Te.exprs.labelExpr)==null?void 0:St.token)??Fe,initializedAtToken:((zn=Te.exprs.labelExpr)==null?void 0:zn.token)??Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});b=Pe}}let M={args:p,forallArgs:f,implicitArgs:x,variadicArgs:S},q;if(n.return.isCompileTimeOnly)if(u)q=ie(A,{variableName:n.return.label,env:n.env,context:a});else if(ve(t)){let{value:ye,callerEnv:Te,calleeEnv:$e}=Wo({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:M,callerEnv:o,calleeEnv:b,context:{...a}});q=ye,A=ye.type,o=Te,b=$e}else{let ye=Ct(A)&&A.level===0,Te=`${n.id}_return_sometype`;if(ye)if((ct=a.expectedType)!=null&&ct.type)q=fe(a.expectedType.type);else if(a.isEvaluatingFunctionType){let $e=ur(A,n.return.label,{id:Te,env:b,context:a});$e.functionApplication=e;let de=bn(b,$e);q=fe(de)}else throw d({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Fe,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else q=ie(A,{variableName:n.return.label,env:n.env,context:a})}Qg({returnType:A,env:b,expr:e,context:a});let P,G=((Yt=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Yt.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&ve(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&ve(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,z=(lr=M.implicitArgs)==null?void 0:lr.some(ye=>Re(ye.value)),K=z&&!((mt=M.implicitArgs)!=null&&mt.some(ye=>Re(ye.value)&&!We(ye.parameterType))),re=M.args.some(ye=>ye.argType&&U(ye.argType)),J=K&&re,ue=(()=>{if(!z||!n.implicitParameters.some(de=>de.isEffectRowSpread))return!1;let Te=0;for(let de of n.implicitParameters)de.isEffectRowSpread||Te++;let $e=M.implicitArgs??[];for(let de=0;de<Te&&de<$e.length;de++)if(Re($e[de].value))return!1;return!0})(),Z=kr(n)&&!Ur(n)&&n.implicitParameters.some(ye=>We(ye.type)?ye.type.fields.some(Te=>ee(Te.type)&&Te.type.forallParameters.length===0):!!ye.isEffectRowSpread);if(!l&&!Z&&t&&ve(t)&&!t.isControlFunction&&kr(n)&&!G&&(!z||J||ue)){if(P=Kg({originalFunction:t,argValues:M,calleeEnv:b,callerEnv:o,context:a}),P&&U(A)){let ye=(nn=(tn=P.body)==null?void 0:tn.$)==null?void 0:nn.type;ye&&!U(ye)&&(A=ye,P.specializedType&&(P.specializedType={...P.specializedType,return:{...P.specializedType.return,type:ye}}))}if(P){let ye=new Set,Te=0;for(let $e=0;$e<n.parameters.length;$e++)if(!n.parameters[$e].isCompileTimeOnly){let Ee=M.args[$e],Ne=Ee==null?void 0:Ee.value;Ne&&ve(Ne)&&Ne.type.implicitParameters.some(rt=>ee(rt.type)||We(rt.type))&&ye.add(Te),Te++}if(ye.size>0)for(let $e=_.length-1;$e>=0;$e--)ye.has($e)&&_.splice($e,1)}}if(!l&&t&&ve(t)&&t.isControlFunction&&n.forallParameters.length>0&&!P&&(P=Xg({originalFunction:t,argValues:M,calleeEnv:b,callerEnv:o,context:a}),P&&U(A))){let ye=(sn=(Cn=P.body)==null?void 0:Cn.$)==null?void 0:sn.type;ye&&!U(ye)&&(A=ye,P.specializedType&&(P.specializedType={...P.specializedType,return:{...P.specializedType.return,type:ye}}))}let ce=No(o),X;if(ce.length>0){let ye=Yg({variablesToDrop:ce,env:o,context:a});X=ye.deferredDropExpressions,o=ye.env}return{returnType:A,calleeEnv:b,callerEnv:o,pathCollection:O,argValues:M,returnValue:q,specializedFunctionValue:P,runtimeArgExprsInOrder:_,deferredDropExpressions:X}}function Kg({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var S,O,x,M,q,P,G,z,K,re,J,ue,ge;if(Ns){ti.specializeCount++;let Z=e.funcName??e.funcId;ti.specializeNames.set(Z,(ti.specializeNames.get(Z)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(Z=>Z.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(Z=>Z.value)),o.parameters.forEach((Z,ce)=>{let X=t.args[ce];if(Z.isCompileTimeOnly)X.value&&a.push(X.value);else if(X.value&&ve(X.value)&&X.value.type.implicitParameters.some(Ce=>ee(Ce.type)||We(Ce.type)))X.value&&a.push(X.value);else{let Ae=U(X.argType)&&X.argType.resolvedConcreteType&&!Ke(X.argType)?X.argType.resolvedConcreteType:X.argType;s.push({...Z,type:Ae})}});let l=s.map(Z=>Z.type),u=e.specializedFunctionCaches.find(Z=>Z.compileTimeArgValues.length===a.length&&Z.compileTimeArgValues.every((pe,Ce)=>{let Ae=a[Ce];return mn({value:pe,env:Z.env},{value:Ae,env:r})})?Z.runtimeParameterTypes.length===l.length&&Z.runtimeParameterTypes.every((pe,Ce)=>{let Ae=l[Ce];return ne({type:pe,env:Z.env},{type:Ae,env:r},!0)}):!1);if(u)return Ns&&ti.cacheHitCount++,u.specializedFunction;Ns&&ti.cacheMissCount++;let c=n;for(let Z of r.frames)for(let ce of Z.variables){if(!ce.isCompileTimeOnly||le(c,ce.name).length>0)continue;let{env:pe}=Oe({env:c,variable:{...ce},allowVariableShadowing:!0});c=pe}for(let Z of s){let ce=le(c,Z.label);if(ce.length>0){let X=ce[ce.length-1],pe={...X,value:void 0};c=Tt(c,X,pe)}}let f=ot(e.body),{returnType:p,calleeEnv:_}=oo({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=_;let m=i.enclosingFunctionReturnType,g=((S=t.implicitArgs)==null?void 0:S.some(Z=>ve(Z.value)&&Z.value.isControlFunction||vt(Z.value)&&Bp(Z.value.type,Z.value)))??!1,y=en({expr:f,env:c,context:{...i,expectedType:{type:p,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:g,...m?{enclosingFunctionReturnType:m}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!y.$)throw d({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let Z=0;Z<o.implicitParameters.length;Z++){let ce=o.implicitParameters[Z];if(ee(ce.type)){let X=(O=t.implicitArgs)==null?void 0:O[v],pe=X&&ve(X.value)?X.value:void 0;pe!=null&&pe.isControlFunction&&h.push({handlerArgIndex:v,label:ce.label,type:ce.type,fromSpread:!1}),v+=1}else if(ce.isEffectRowSpread){let X=ce.type;if(U(X)){let Ce=(M=(x=le(c,ce.label).at(-1))==null?void 0:x.value)==null?void 0:M[0];if(Ce&&W(Ce)&&Rt(Ce.value))X=Ce.value;else{let Ae=bn(c,X);Ae&&(X=Ae)}}if(Rt(X)){for(let pe=0;pe<X.implicitParameters.length;pe++){let Ce=X.implicitParameters[pe];if(ee(Ce.type)){let Ae=(q=t.implicitArgs)==null?void 0:q[v+pe],ut=Ae&&ve(Ae.value)?Ae.value:void 0;ut!=null&&ut.isControlFunction&&h.push({handlerArgIndex:v+pe,label:Ce.label,type:Ce.type,fromSpread:!0})}else if(We(Ce.type)){let Ae=(P=t.implicitArgs)==null?void 0:P[v+pe],ut=Ae&&vt(Ae.value)?Ae.value:void 0,se=[],he=(te,ke,Be)=>{for(let Xe=0;Xe<te.fields.length;Xe++){let wt=te.fields[Xe];if(ee(wt.type)){let j=Be==null?void 0:Be.fields[Xe];if(j&&ve(j)&&j.isControlFunction){let Q=j.specializedType??wt.type;se.push({path:[...ke,wt.label],type:Q})}}else if(We(wt.type)){let j=Be==null?void 0:Be.fields[Xe];he(wt.type,[...ke,wt.label],j&&vt(j)?j:void 0)}}};he(Ce.type,[],ut);for(let te of se)h.push({handlerArgIndex:v+pe,label:Ce.label,type:te.type,fromSpread:!0,effectFieldPath:te.path})}}v+=X.implicitParameters.length}else v+=1}else if(We(ce.type)){let X=[],pe=(G=t.implicitArgs)==null?void 0:G[v],Ce=(Ae,ut,se)=>{for(let he=0;he<Ae.fields.length;he++){let te=Ae.fields[he];if(ee(te.type)){let ke=se==null?void 0:se.fields[he];if(ke&&ve(ke)&&ke.isControlFunction){let Be=ke.specializedType??te.type;X.push({path:[...ut,te.label],type:Be})}}else if(We(te.type)){let ke=se==null?void 0:se.fields[he];Ce(te.type,[...ut,te.label],ke&&vt(ke)?ke:void 0)}}};Ce(ce.type,[],pe&&vt(pe.value)?pe.value:void 0);for(let Ae of X)h.push({handlerArgIndex:v,label:ce.label,type:Ae.type,fromSpread:!1,effectFieldPath:Ae.path});v+=1}else v+=1}let $=[];for(let Z of h){let ce=Up(y,Z.label,Z.type,!0,Z.effectFieldPath);if(ce.hasEffects){let X=(z=t.implicitArgs)==null?void 0:z[Z.handlerArgIndex],pe,Ce=Z.effectFieldPath;if(X&&ve(X.value))pe=X.value;else if(X&&vt(X.value)&&Ce&&Ce.length>0){let Ae=X.value;for(let ut of Ce){if(!vt(Ae)){Ae=void 0;break}let se=Ae.type.fields.findIndex(he=>he.label===ut);if(se<0||!Ae.fields[se]){Ae=void 0;break}Ae=Ae.fields[se]}Ae&&ve(Ae)&&(pe=Ae)}if(pe){let Ae=pe,ut=Z.type,se=!Ae.body.$;if(!se&&Ae.isControlFunction&&N(Ae.body)&&Ae.body.args.length>0&&!((K=Ae.body.args[0])!=null&&K.$)&&(se=!0),se&&ee(ut)&&ut.forallParameters.length>0&&ce.effectCallPoints.length>0){let he=new Map,te=ut.return.type,ke=ce.effectCallPoints[0].operationResultType;if(U(te)&&he.set(te.name,ke),he.size===0&&ut.forallParameters.length===1){let oe=ut.forallParameters[0];he.set(oe.label,ke)}let Be=ot(Ae.body),Xe=((re=Ae.body.$)==null?void 0:re.env)??c;Xe=dt(Xe);for(let oe of ut.forallParameters){let we=he.get(oe.label);we&&(Xe=Oe({env:Xe,variable:{name:oe.label,type:oe.type,isCompileTimeOnly:!0,value:[fe(we)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let wt=Ae.specializedType??Ae.type,j=((J=Ae.definitionSiteEnclosingFunctionType)==null?void 0:J.return.type)??Tr(),Q={...i,expectedType:void 0,enclosingFunctionReturnType:j,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:wt,value:Ae,evaluationEnv:Xe}};try{let oe=Vi({expr:Be,env:Xe,context:Q}),we=wt.parameters.map(je=>{if(je.isCompileTimeOnly)return je;if(U(je.type)){let St=he.get(je.type.name);if(St)return{...je,type:St}}return je}),Ie=wt.return.type;if(U(Ie)){let je=he.get(Ie.name);je&&(Ie=je)}let Ve={...wt,parameters:we,return:{...wt.return,type:Ie}},Ge={...Ae,body:oe,specializedType:Ve};ce.handlerValue=Ge,ce.effectParameterType=Ve;for(let je of ce.effectCallPoints)je.isTransitiveEffectCall&&(je.operationArgTypes=je.operationArgTypes.map(St=>U(St)?he.get(St.name)??St:St))}catch(oe){if(N(Ae.body)&&Ae.body.args.length>0&&!((ue=Ae.body.args[0])!=null&&ue.$))throw oe;ce.handlerValue=Ae}}else ce.handlerValue=Ae}else X&&(ce.handlerValue=X.value);$.push({analysis:ce,ctlParam:Z})}}if($.length===1)y.$.effectAnalysis=$[0].analysis;else if($.length>1){let Z=[],ce=new Map,X=new Map,pe=[];for(let ut=0;ut<$.length;ut++){let{analysis:se}=$[ut];pe.push({effectParameterName:se.effectParameterName,effectParameterType:se.effectParameterType,effectFieldPath:se.effectFieldPath,handlerValue:se.handlerValue,operationArgTypes:se.effectCallPoints.length>0?se.effectCallPoints[0].operationArgTypes:[],operationResultType:se.effectCallPoints.length>0?se.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let he of se.effectCallPoints)Z.push({...he,effectIndex:ut});for(let he of se.capturedVariables)ce.has(he.id)||ce.set(he.id,he);for(let[he,te]of se.variableIdRemapping)X.set(he,te)}if(N(y)&&T(y,D.begin)){let ut=y.args,se=new Map;for(let te=0;te<ut.length;te++)se.set(ut[te],te);let he=te=>{for(let ke=0;ke<ut.length;ke++)if(_u(ut[ke],te.expr))return ke;return 999};Z.sort((te,ke)=>he(te)-he(ke))}for(let ut=0;ut<Z.length;ut++)Z[ut].index=ut;let Ce=$[0].analysis,Ae={effectCallPoints:Z,capturedVariables:Array.from(ce.values()),hasEffects:!0,variableIdRemapping:X,effectParameterName:Ce.effectParameterName,effectParameterType:Ce.effectParameterType,effectFieldPath:Ce.effectFieldPath,handlerValue:Ce.handlerValue,effectHandlerInfos:pe};y.$.effectAnalysis=Ae}let E=[],w=Z=>{if(W(Z)){let ce=Z.value;if(!ce.typeName&&ce.id)return`${lt(Z)}_id${ce.id}`}return ve(Z)?`fn_${Z.funcId}`:lt(Z)};o.forallParameters.forEach((Z,ce)=>{var X,pe;if(ce<t.forallArgs.length){let Ce=t.forallArgs[ce];E.push(me(w(Ce.value)))}else{let Ce=Z.label,Ae=le(n,Ce);Ae.length>0&&((pe=(X=Ae[Ae.length-1])==null?void 0:X.value)!=null&&pe[0])?E.push(me(w(Ae[Ae.length-1].value[0]))):E.push("unknown")}}),o.parameters.forEach((Z,ce)=>{if(Z.isCompileTimeOnly&&ce<t.args.length){let X=t.args[ce];X?E.push(me(w(X.value))):E.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(Z=>{E.push(me(w(Z.value)))}),s.forEach((Z,ce)=>{let X=Z.type;(!X.typeName&&X.id||et(X))&&E.push(`rtparam${ce}_${me(V(X))}_id${X.id}`)});let L=E.join("_"),b=[];for(let Z of o.implicitParameters)if(Z.isEffectRowSpread){let ce=Z.type;if(U(ce)){if(t.forallArgs){for(let X=0;X<o.forallParameters.length;X++)if(o.forallParameters[X].label===ce.name&&X<t.forallArgs.length){let Ce=t.forallArgs[X].value;W(Ce)&&Rt(Ce.value)&&(ce=Ce.value);break}}if(U(ce)&&ce.resolvedConcreteType&&Rt(ce.resolvedConcreteType)&&(ce=ce.resolvedConcreteType),U(ce)){let X=le(c,ce.name);if(X.length>0){let Ce=(ge=X[X.length-1].value)==null?void 0:ge[0];Ce&&W(Ce)&&Rt(Ce.value)&&(ce=Ce.value)}}}Rt(ce)&&b.push(...ce.implicitParameters)}else We(Z.type)&&b.push(Z);let C=Qi({forallParameters:[],parameters:s,implicitParameters:b.length>0?b:void 0,variadicParameter:void 0,return_:{...o.return,type:p},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),A={...e,specializedType:C,body:y,isControlFunction:e.isControlFunction||Or(y),funcId:`${e.funcId}_${L}`,funcName:`${e.funcName}_${L}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},I={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:A,env:y.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,I],A}function Xg({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)??Tr(),s=me(V(o)),l=e.specializedFunctionCaches.find(E=>E.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=dt(t);for(let E of n.frames)for(let w of E.variables){if(!w.isCompileTimeOnly||le(u,w.name).length>0)continue;let{env:b}=Oe({env:u,variable:{...w},allowVariableShadowing:!0});u=b}for(let E of i.forallParameters){let w=o,{env:L}=Oe({env:u,variable:{name:E.label,type:E.type,isCompileTimeOnly:!0,value:[fe(w)],token:Fe,initializedAtToken:Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=L}let c=ot(e.body),f={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},p=Vi({expr:c,env:u,context:f}),_={...e,body:p,isControlFunction:e.isControlFunction||Or(p),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},m=new Set(i.forallParameters.map(E=>E.type)),g=E=>U(E)&&m.has(E)?o:E,y=Qi({forallParameters:[],parameters:i.parameters.map(E=>({...E,type:g(E.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:g(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return _.specializedType=y,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:_,env:(($=p.$)==null?void 0:$.env)??u}],_}function Qg({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=qs(e);for(let a of i){if(Ke(a)||xn(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!le(n,a.name).length){let l=Xn(n,()=>!0),u=!1;for(let c of l)if(W((o=c.value)==null?void 0:o[0])){let f=c.value[0].value,p=qs(f);for(let _ of p)if(_.name===a.name){u=!0;break}if(u)break}if(u)continue;throw d({token:(t==null?void 0:t.token)??Fe,errorMessage:`Failed to infer the function call return type.
|
|
10808
10808
|
Please consider providing the expected type.`})}}}function _u(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(_u(e.func,t))return!0;for(let n of e.args)if(_u(n,t))return!0}return!1}function Gp({expr:e,env:t,context:n}){let r=e.args[0],i=R({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
|
|
10809
10809
|
${F(r)}`});if(t=i.$.env,!W(i.$.value))throw d({token:r.token,errorMessage:`Iso expects a type as argument, but got:
|
|
10810
10810
|
${F(r)}`});let a=i.$.value.value,s=cc(a,t);t=Gu({isoType:s,env:t,context:n});let l=fe(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Wp({expr:e,env:t,context:n,isoType:r}){var s;let i=e.args[0],o=R({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:
|
|
@@ -10874,7 +10874,7 @@ ${F(r)}`});t=i.$.env;let o=(u=i.$)==null?void 0:u.variableName;if(!o)throw d({to
|
|
|
10874
10874
|
${F(i)}
|
|
10875
10875
|
|
|
10876
10876
|
Original expression:
|
|
10877
|
-
${F(r)}`});let a=i.$.type,l=U(a)&&a.resolvedConcreteType&&!Ke(a)?a.resolvedConcreteType:a;if(tt(l))if(Je(l)){let p=Jg(i);if(p){let _=Nn(p);t=nr(i,t,!0);let m=R({expr:_,env:t,context:{...n}});return N(m)?(
|
|
10877
|
+
${F(r)}`});let a=i.$.type,l=U(a)&&a.resolvedConcreteType&&!Ke(a)?a.resolvedConcreteType:a;if(tt(l))if(Je(l)){let p=Jg(i);if(p){let _=Nn(p);t=nr(i,t,!0);let m=R({expr:_,env:t,context:{...n}});return N(m)?(Yr(e,m),e):m}else return t=nr(i,t,!0),e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e}else if(Ze(l)){let p=eh(i);if(p){let _=Nn(p);t=nr(i,t,!0);let m=R({expr:_,env:t,context:{...n}});return N(m)?(Yr(e,m),e):m}else return t=nr(i,t,!0),e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e}else{if(U(l)&&!Ke(l))return t=nr(i,t,!0),e.$={env:t,type:ae.type,value:void 0,pathCollection:[]},e;{let p=(c=i.$)==null?void 0:c.variableName;if(p){let v=le(t,p),$=v.length?v[v.length-1]:void 0;if($&&!$.isOwningTheRcValue)return t=nr(i,t,!0),e.$={env:t,type:ae.type,value:void 0,pathCollection:[]},e}let _=Nn(`(${F(i)}).___drop()`),m=br({env:t,context:{...n},expr:_});if(!((f=m.$)!=null&&f.env))throw d({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${k.___drop[0]}" method call:
|
|
10878
10878
|
${F(_)}`});let y=le(m.$.env,o).at(-1);if(!y)throw d({token:e.token,errorMessage:`Variable "${o}" not found in environment after evaluating "${k.___drop[0]}" method call:
|
|
10879
10879
|
${F(_)}`});let h=Tt(m.$.env,y,{...y,consumedAtToken:e.token});return m.$.env=h,m}}else return t=nr(i,t,!0),e.$={env:t,type:ae.type,value:void 0,pathCollection:[]},e}function th(e){var i;if(!((i=e.$)!=null&&i.type)||!Je(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:
|
|
10880
10880
|
${F(e)}`});let n=e.$.type.fields.map((o,a)=>({index:a,element:o,needsDup:tt(o.type)}));return n.every(({needsDup:o})=>!o)?"":`begin(
|
|
@@ -10884,7 +10884,7 @@ ${F(e)}`});let n=e.$.type.fields.map((o,a)=>({index:a,element:o,needsDup:tt(o.ty
|
|
|
10884
10884
|
${F(e)}`});let t=e.$.type,n=t.childType;if(!tt(n))return"";if(yt(t.length)){let i=t.length.value;return`begin(
|
|
10885
10885
|
${Array.from({length:Number(i)},(o,a)=>{var s;return`${k.__yo_dup_array_element[0]}(${(s=e.$)==null?void 0:s.variableName}, ${a})`}).join(", ")}
|
|
10886
10886
|
)`}else return""}function Xp({expr:e,env:t,context:n}){var s;ze(e,k.___dup,1);let r=e.args[0],i=R({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${k.___dup[0]}":
|
|
10887
|
-
${F(r)}`});t=i.$.env;let o=i.$.type,a=U(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(tt(a))if(Je(a)){let l=th(i);if(l){let u=Nn(l),c=R({expr:u,env:t,context:{...n}});return N(c)?(
|
|
10887
|
+
${F(r)}`});t=i.$.env;let o=i.$.type,a=U(o)&&o.resolvedConcreteType?o.resolvedConcreteType:o;if(tt(a))if(Je(a)){let l=th(i);if(l){let u=Nn(l),c=R({expr:u,env:t,context:{...n}});return N(c)?(Yr(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else if(Ze(a)){let l=nh(i);if(l){let u=Nn(l),c=R({expr:u,env:t,context:{...n}});return N(c)?(Yr(e,c),e):c}else return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}else{if(U(a)&&!Ke(a))return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e;{let l=Nn(`(${F(i)}).___dup()`),u=br({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 "${k.___dup[0]}" method call:
|
|
10888
10888
|
${F(l)}`});let f=le(u.$.env,c);if(f.length){let p=f[f.length-1];if(p.isOwningTheRcValue){let _=Tt(u.$.env,p,{...p,isOwningTheRcValue:!1});u.$.env=_}}return u}}return e.$={env:t,type:i.$.type,value:void 0,pathCollection:[]},e}function Qp({expr:e,env:t,context:n}){ze(e,k.__yo_expr_is_atom,1);let r=e.args[0],i=R({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}":
|
|
10889
10889
|
${F(r)}`});if(!dn(i.$.type))throw d({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
|
|
10890
10890
|
${F(r)}`});let o=i.$.value;if(!o)throw d({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
|
|
@@ -10945,10 +10945,10 @@ ${F(e)}`});let r=e.args[0],i=e.args[1],o=Y(i)&&i.token.value==="_",a=R({expr:r,e
|
|
|
10945
10945
|
${F(r)}`});if(!W(a.$.value))throw d({token:r.token,errorMessage:`Expected type for element type, got:
|
|
10946
10946
|
${F(r)}
|
|
10947
10947
|
|
|
10948
|
-
If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let s=a.$.value.value;if(o){let p=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=ie(Qt(),{variableName:p,env:a.$.env,context:n}),{env:m}=Oe({env:a.$.env,variable:{name:p,value:[_],type:Qt(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),g=
|
|
10948
|
+
If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let s=a.$.value.value;if(o){let p=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=ie(Qt(),{variableName:p,env:a.$.env,context:n}),{env:m}=Oe({env:a.$.env,variable:{name:p,value:[_],type:Qt(),isCompileTimeOnly:!0,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isOwningTheRcValue:!1}}),g=jr(s,_),y=fe(g);return e.$={env:m,type:y.type,value:y,pathCollection:[]},e}let l=R({expr:i,env:t,context:{...n,expectedType:{type:Qt(),env:t}}});if(!l.$)throw d({token:i.token,errorMessage:`Failed to evaluate the length expression:
|
|
10949
10949
|
${F(i)}`});if(!ne({type:Qt(),env:t},{type:l.$.type,env:t}))throw d({token:i.token,errorMessage:`Expected usize for length, got:
|
|
10950
10950
|
${F(i)}`});let u=l.$.value;if(!u)throw d({token:i.token,errorMessage:`Expected compile-time known value for length, got:
|
|
10951
|
-
${F(i)}`});Re(u)&&(u.type=Qt());let c=
|
|
10951
|
+
${F(i)}`});Re(u)&&(u.type=Qt());let c=jr(s,u),f=fe(c);return e.$={env:l.$.env,type:f.type,value:f,pathCollection:[]},e}function Od({expr:e,env:t,context:n}){return ks({expr:e,env:t,context:n})}function Rd({expr:e,env:t,context:n}){ze(e,D.ComptimeList,1);let r=e.args[0],i=R({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the element type expression:
|
|
10952
10952
|
${F(r)}`});if(!W(i.$.value))throw d({token:r.token,errorMessage:`Expected type for element type, got:
|
|
10953
10953
|
${F(r)}`});let o=i.$.value.value,a=_a(o),s=fe(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function Pd({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=R({expr:r,env:t,context:{...n}});if(!i.$)throw d({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
|
|
10954
10954
|
${F(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:
|
|
@@ -10987,7 +10987,7 @@ ${F(e)}`});return Ko({expr:e,env:t,context:n})}function Yd({expr:e,env:t,context
|
|
|
10987
10987
|
${F(r)}`});if(!W(i.$.value))throw d({token:r.token,errorMessage:`Expected type for element type, got:
|
|
10988
10988
|
${F(r)}
|
|
10989
10989
|
|
|
10990
|
-
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=as(o),s=fe(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function Kd({lhsExpr:e,env:t,context:n,selfType:r}){if(Y(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(Y(e)){let a=e.token.value,s=le(t,a);if(s.length>0){let f=s[s.length-1];if(f.value&&W(f.value[0])&&U(f.value[0].value))return{env:t,someType:f.value[0].value,isSelf:!1}}let l=ur(Dt(),a,{env:t,context:n}),u=fe(l),{env:c}=Oe({env:t,variable:{name:a,type:cn(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=R({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(!U(o.value))throw d({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${V(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function _h({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;N(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=Kd({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=R({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: ${V(c.value)}`});let f=c.value;if(f.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(f):o.selfConstraints.push(f)),!l.isSelf){let p=n.frames.length-1;a?l.someType.negativeTraits.some(_=>_.traitType.id===f.id)||l.someType.negativeTraits.push({traitType:f,frameLevel:p}):l.someType.requiredTraits.some(_=>_.traitType.id===f.id)||l.someType.requiredTraits.push({traitType:f,frameLevel:p})}return n=
|
|
10990
|
+
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=as(o),s=fe(a);return e.$={env:i.$.env,type:s.type,value:s,pathCollection:[]},e}function Kd({lhsExpr:e,env:t,context:n,selfType:r}){if(Y(e)&&e.token.value==="Self")return{env:t,someType:r,isSelf:!0};if(Y(e)){let a=e.token.value,s=le(t,a);if(s.length>0){let f=s[s.length-1];if(f.value&&W(f.value[0])&&U(f.value[0].value))return{env:t,someType:f.value[0].value,isSelf:!1}}let l=ur(Dt(),a,{env:t,context:n}),u=fe(l),{env:c}=Oe({env:t,variable:{name:a,type:cn(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=R({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(!U(o.value))throw d({token:e.token,errorMessage:`Expected SomeType for left-hand side of where clause constraint, got ${V(o.value)}`});return{env:i.$.env,someType:o.value,isSelf:!1}}function _h({lhsExpr:e,traitExpr:t,env:n,context:r,selfType:i,traitType:o}){let a=!1,s=t;N(t)&&T(t,"!")&&t.args.length===1&&(a=!0,s=t.args[0]);let l;try{l=Kd({lhsExpr:e,env:n,context:r,selfType:i})}catch{return{env:n,success:!1}}n=l.env;let u;try{u=R({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: ${V(c.value)}`});let f=c.value;if(f.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(f):o.selfConstraints.push(f)),!l.isSelf){let p=n.frames.length-1;a?l.someType.negativeTraits.some(_=>_.traitType.id===f.id)||l.someType.negativeTraits.push({traitType:f,frameLevel:p}):l.someType.requiredTraits.some(_=>_.traitType.id===f.id)||l.someType.requiredTraits.push({traitType:f,frameLevel:p})}return n=Rr({env:n,someType:l.someType,traitType:f,isNegated:a}),{env:n,success:!0}}function jd({constraintExprs:e,env:t,context:n,selfType:r,traitType:i,collectPendingTraits:o=!1}){let a=[];for(let s of e){if(!N(s)||!T(s,"<:",2))throw d({token:s.token,errorMessage:`Expected constraint in the form "T <: Trait" or "T <: (Trait1, Trait2)", got: ${F(s)}`});let l=s.args[0],u=s.args[1],c;try{c=Kd({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 f=[];N(u)&&T(u,D.tuple)?f.push(...u.args):f.push(u);for(let p of f){let _=!1,m=p;N(p)&&T(p,"!")&&p.args.length===1&&(_=!0,m=p.args[0]);let g;try{g=R({expr:m,env:t,context:{...n,SelfType:r,SelfTraitType:i}})}catch(v){if(o){a.push({lhsExpr:l,traitExpr:p,originalConstraintExpr:s});continue}throw v}if(!g.$||!g.$.value||!W(g.$.value)){if(o){a.push({lhsExpr:l,traitExpr:p,originalConstraintExpr:s});continue}throw d({token:m.token,errorMessage:"Expected trait type for right-hand side of where clause constraint."})}t=g.$.env;let y=g.$.value;if(!st(y.value))throw d({token:m.token,errorMessage:`Expected trait type for right-hand side of where clause constraint, got: ${V(y.value)}`});let h=y.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=[]),_?i.negativeSelfConstraints.push(h):i.selfConstraints.push(h)),t=Rr({env:t,someType:c.someType,traitType:h,isNegated:_})}}return{env:t,pendingTraits:a}}function ph({expr:e,traitFieldIndex:t,env:n,context:r,isForEvaluatingTraitType:i}){var h,v,$,E,w,L;let o,a=e,s,l,u,c,f,p,_;if(N(e)&&T(e,"?=",2)&&(u=e.args[1],a=e.args[0]),N(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.
|
|
10991
10991
|
All trait fields are compile-time only by default.`});f=a.args[1],a=a.args[0]}if(u&&f)throw d({token:e.token,errorMessage:"Cannot have both default value and required value for trait field."});if(N(a)&&T(a,":",2)){if(s=a.args[0],l=a.args[1],N(s)&&T(s,D.comptime,1))throw d({token:s.token,errorMessage:'No need to use "comptime" modifier. All trait fields are compile-time only by default.'});if(!Y(s)&&!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${F(s)}`});o=s.token.value}else{if(N(a)&&T(a,D.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&&!f)throw d({token:e.token,errorMessage:`Expected label for trait field, got ${F(a)}`});if(s=a,!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for trait field label, got ${F(s)}`});if(!Y(s)&&!kt(s))throw d({token:s.token,errorMessage:`Expected identifier for trait field label, got ${F(s)}`});o=s.token.value}let m=(h=r.expectedType)==null?void 0:h.type,g;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}`});g=b.type}if(l){let b=R({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});(v=b.$)!=null&&v.env&&(n=($=b.$)==null?void 0:$.env);let C=(E=b.$)==null?void 0:E.value;if(!W(C))throw d({token:l.token,errorMessage:`Expected type for trait field, got ${F(l)}`});_=C.value}if(f){let b=_?{type:_,env:n}:g?{type:g,env:n}:void 0,C=R({expr:f,env:n,context:{...r,expectedType:b}});if(!C.$)throw d({token:f.token,errorMessage:`Failed to evaluate required value expression: ${F(f)}`});if(n=(w=C.$)==null?void 0:w.env,p=C.$.value,!p)throw d({token:f.token,errorMessage:`Expected compile-time known value for required value, got ${F(f)}`});let A=C.$.type;if(b){if(!ne({type:b.type,env:n},{type:A,env:n}))throw d({token:f.token,errorMessage:`Assigned value type mismatch:
|
|
10992
10992
|
Expected type: ${V(b.type)}
|
|
10993
10993
|
Given type: ${V(A)}`});_=b.type}else _=A}if(u){let b=_?{type:_,env:n}:g?{type:g,env:n}:void 0,C=R({expr:u,env:n,context:{...r,expectedType:b}});if(!C.$)throw d({token:u.token,errorMessage:`Failed to evaluate default value expression: ${F(u)}`});if(n=C.$.env,c=(L=C.$)==null?void 0:L.value,!c)throw d({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${F(u)}`});let A=C.$.type;if(b){if(!ne({type:b.type,env:n},{type:A,env:n}))throw d({token:u.token,errorMessage:`Default value type mismatch:
|
|
@@ -11010,23 +11010,23 @@ ${F(e)}`});let c=e.args[0],f=e.args[1],p=[];N(c)&&T(c,D.tuple)?p=c.args:p=[c];le
|
|
|
11010
11010
|
Expected: "${te.label}"
|
|
11011
11011
|
Got: "${ke}"`})}for(let se=0;se<i.forallParameters.length;se++){let he=_[se],te=i.forallParameters[se],{env:ke}=Oe({env:t,variable:{name:te.label,type:te.type,isCompileTimeOnly:te.isCompileTimeOnly,value:[ie(te.type,{variableName:te.label,env:t,context:n})],token:(he==null?void 0:he.token)??Fe,initializedAtToken:(he==null?void 0:he.token)??Fe,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=ke,he&&(he.$={env:t,type:te.type,value:ie(te.type,{variableName:te.label,env:t,context:n}),pathCollection:[]})}let h=i.implicitParameters.some(se=>se.isEffectRowSpread),v,$;if(h&&m.length>0){v=[];for(let se of m)if(N(se)&&T(se,":",2)){let he=se.args[0],te=se.args[1];if(!Y(he))throw d({token:he.token,errorMessage:`Expected identifier for effect name, got ${F(he)}`});let ke=he.token.value,Be=R({expr:ot(te),env:y,context:{...n,isEvaluatingFunctionType:!0}});if(!((J=Be.$)!=null&&J.value)||!W(Be.$.value))throw d({token:te.token,errorMessage:`Expected a type for effect parameter "${ke}", got ${F(te)}`});let Xe=Be.$.value.value;v.push({label:ke,type:Xe,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:se,labelExpr:he,typeExpr:te,defaultValueExpr:void 0}})}else if(Y(se)){let he=se.token.value,ke=le(y,he).at(-1);if(!ke)throw d({token:se.token,errorMessage:`Variable "${he}" not found. Cannot infer type for using() parameter.`});v.push({label:he,type:ke.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:se,labelExpr:se,typeExpr:se,defaultValueExpr:void 0}})}else throw d({token:se.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${F(se)}`});$=ci(v);for(let se of i.implicitParameters)se.isEffectRowSpread&&U(se.type)&&se.type.isEffectsRow&&(se.type.resolvedConcreteType=$)}else if(m.length>0){let se=[];for(let te of m)if(N(te)&&T(te,":",2)){let ke=te.args[0],Be=te.args[1];if(!Y(ke))throw d({token:ke.token,errorMessage:`Expected identifier for effect name, got ${F(ke)}`});let Xe=R({expr:ot(Be),env:y,context:{...n,isEvaluatingFunctionType:!0}});if(!((ue=Xe.$)!=null&&ue.value)||!W(Xe.$.value))throw d({token:Be.token,errorMessage:`Expected a type for effect parameter "${ke.token.value}", got ${F(Be)}`});se.push({name:ke.token.value,type:Xe.$.value.value,nameExpr:ke})}else if(Y(te))se.push({name:te.token.value,type:void 0,nameExpr:te});else throw d({token:te.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${F(te)}`});if(se.some(te=>te.type!==void 0)){if(se.length!==i.implicitParameters.length)throw d({token:e.token,errorMessage:`Effect row mismatch: closure declares ${se.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let te=new Set,ke=[];for(let Be=0;Be<se.length;Be++){let Xe=se[Be];if(!Xe.type){ke.push({...i.implicitParameters[Be],label:Xe.name,exprs:{...i.implicitParameters[Be].exprs,expr:Xe.nameExpr,labelExpr:Xe.nameExpr}}),te.add(Be);continue}let wt=!1;for(let j=0;j<i.implicitParameters.length;j++){if(te.has(j))continue;let Q=i.implicitParameters[j];if(ne({type:Xe.type,env:y},{type:Q.type,env:y})){ke.push({...Q,label:Xe.name,exprs:{...Q.exprs,expr:Xe.nameExpr,labelExpr:Xe.nameExpr}}),te.add(j),wt=!0;break}}if(!wt)throw d({token:Xe.nameExpr.token,errorMessage:`Effect row type mismatch for "${Xe.name}": closure declares ${V(Xe.type)}, but no matching resolved effect found.`})}v=ke,$=ci(v)}else{if(m.length!==i.implicitParameters.length)throw d({token:e.token,errorMessage:`Expected ${i.implicitParameters.length} implicit parameters in using(...), got ${m.length}`});v=i.implicitParameters}}else v=i.implicitParameters;let E=[];for(let se=0;se<v.length;se++){let he=v[se],te=$?(ge=he.exprs)==null?void 0:ge.labelExpr:m[se],ke=he.label;te&&Y(te)&&(ke=te.token.value);let Be;if(ee(he.type)){let oe=(Z=i.implicitParameters[se])==null?void 0:Z.label,we=[he.label];oe&&oe!==he.label&&we.push(oe);for(let Ie of we){let Ve=le(y,Ie),Ge=Ve[Ve.length-1];if(Ge!=null&&Ge.value&&Ge.value.length>0){let je=Ge.value[0];if(je&&ve(je)){Be=je;break}}}if(!Be){let Ve=Xn(y,Ge=>{var je;return Ge.isImplicit===!0&&Ge.isCompileTimeOnly===!0&&ve((je=Ge.value)==null?void 0:je[0])&&ne({type:he.type,env:y},{type:Ge.type,env:y})}).at(-1);(ce=Ve==null?void 0:Ve.value)!=null&&ce[0]&&ve(Ve.value[0])&&(Be=Ve.value[0])}}let Xe=Be||ie(he.type,{variableName:ke,env:t,context:n}),wt=n.isInsideIoAsyncCall&&o&&ee(he.type)&&!Be;if(wt&&E.push({name:ke,type:he.type,token:(te==null?void 0:te.token)??Fe}),!wt&&n.isInsideIoAsyncCall&&o&&We(he.type)&&!Be){let oe=he.type;for(let we of oe.fields)ee(we.type)&&E.push({name:we.label,type:we.type,token:(te==null?void 0:te.token)??Fe})}let{env:Q}=Oe({env:t,variable:{name:ke,type:he.type,isCompileTimeOnly:!wt,isImplicit:!0,value:wt?void 0:[Xe],token:(te==null?void 0:te.token)??Fe,initializedAtToken:(te==null?void 0:te.token)??Fe,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:wt||void 0},allowVariableShadowing:!0});t=Q,te&&(te.$={env:t,type:he.type,value:wt?void 0:Xe,pathCollection:[]})}for(let se=0;se<g.length;se++){let he=g[se],te=i.parameters[se];if(te.isCompileTimeOnly){if(!Y(he))throw d({token:he.token,errorMessage:`Expected parameter name for compile-time parameter, got ${F(he)}`});let wt=he.token.value;if(wt!=="_"&&wt!==te.label)throw d({token:he.token,errorMessage:`Compile-time parameter name must match expected name.
|
|
11012
11012
|
Expected: "${te.label}"
|
|
11013
|
-
Got: "${wt}"`})}let ke=he.token.value,Be=te.label,{env:Xe}=Oe({env:t,variable:{name:ke,type:te.type,isCompileTimeOnly:te.isCompileTimeOnly,value:te.isCompileTimeOnly?[ie(te.type,{variableName:te.label,env:t,context:n})]:void 0,token:he.token,initializedAtToken:he.token,consumedAtToken:void 0,isOwningTheRcValue:te.isOwningTheRcValue,parameterAlias:ke!==Be?Be:void 0}});t=Xe,he.$={env:t,type:te.type,value:te.isCompileTimeOnly?ie(te.type,{variableName:te.label,env:t,context:n}):void 0,pathCollection:[]}}let w=t.frames[t.frames.length-1],L={...i,forallParameters:i.forallParameters,implicitParameters:$?v:v.map((se,he)=>{let te=m[he];if(te&&Y(te)){let ke=te.token.value;if(ke!==se.label)return{...se,label:ke}}return se}),parameters:i.parameters.map((se,he)=>{if(se.isCompileTimeOnly)return se;{let te=g[he];return{...se,label:Y(te)?te.token.value:se.label,exprs:{...se.exprs,expr:te,labelExpr:te,typeExpr:se.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:w,env:vs(i.env)};if((X=L.whereClauseExprs)!=null&&X.length){let se=L.whereClauseExprs.map(te=>ot(te));t=Ni({constraintExprs:se,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:L,body:f,frameLevel:t.frames.length-1,funcId:`fn_${Et(t.modulePath)}`,definitionSiteEnclosingFunctionType:((pe=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:pe.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},C=!!a,A=_.length>0||i.parameters.some(se=>et(se.type))||i.SelfType&&et(i.SelfType),I,S;if(A)fu({functionBodyExpr:f,functionType:i,functionValue:b,env:t,context:n}),f.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?ie(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},I={...n,isExecuting:!1,capturedVariables:new Map},S=f;else{let{evaluationContext:se}=Yo({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,b,t);if(I=se,n.isInsideIoAsyncCall&&o&&(I={...I,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),S=en({expr:f,env:t,context:I,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!S.$)throw d({token:f.token,errorMessage:"Failed to evaluate the function body."});t=S.$.env}let O=I.capturedVariables;if(
|
|
11013
|
+
Got: "${wt}"`})}let ke=he.token.value,Be=te.label,{env:Xe}=Oe({env:t,variable:{name:ke,type:te.type,isCompileTimeOnly:te.isCompileTimeOnly,value:te.isCompileTimeOnly?[ie(te.type,{variableName:te.label,env:t,context:n})]:void 0,token:he.token,initializedAtToken:he.token,consumedAtToken:void 0,isOwningTheRcValue:te.isOwningTheRcValue,parameterAlias:ke!==Be?Be:void 0}});t=Xe,he.$={env:t,type:te.type,value:te.isCompileTimeOnly?ie(te.type,{variableName:te.label,env:t,context:n}):void 0,pathCollection:[]}}let w=t.frames[t.frames.length-1],L={...i,forallParameters:i.forallParameters,implicitParameters:$?v:v.map((se,he)=>{let te=m[he];if(te&&Y(te)){let ke=te.token.value;if(ke!==se.label)return{...se,label:ke}}return se}),parameters:i.parameters.map((se,he)=>{if(se.isCompileTimeOnly)return se;{let te=g[he];return{...se,label:Y(te)?te.token.value:se.label,exprs:{...se.exprs,expr:te,labelExpr:te,typeExpr:se.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:w,env:vs(i.env)};if((X=L.whereClauseExprs)!=null&&X.length){let se=L.whereClauseExprs.map(te=>ot(te));t=Ni({constraintExprs:se,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let b={tag:"Function",type:L,body:f,frameLevel:t.frames.length-1,funcId:`fn_${Et(t.modulePath)}`,definitionSiteEnclosingFunctionType:((pe=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:pe.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},C=!!a,A=_.length>0||i.parameters.some(se=>et(se.type))||i.SelfType&&et(i.SelfType),I,S;if(A)fu({functionBodyExpr:f,functionType:i,functionValue:b,env:t,context:n}),f.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?ie(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},I={...n,isExecuting:!1,capturedVariables:new Map},S=f;else{let{evaluationContext:se}=Yo({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,b,t);if(I=se,n.isInsideIoAsyncCall&&o&&(I={...I,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),S=en({expr:f,env:t,context:I,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!S.$)throw d({token:f.token,errorMessage:"Failed to evaluate the function body."});t=S.$.env}let O=I.capturedVariables;if(Or(S)&&(b.isControlFunction=!0),S.$&&(i.implicitParameters.some(se=>We(se.type))||n.isInsideIoAsyncCall)){let se=gc(S);se.hasAwaits&&(S.$.awaitAnalysis=se)}let x=(Ce=S.$)==null?void 0:Ce.type;if(U(i.return.type)&&!i.return.type.resolvedConcreteType&&x&&!U(x)){let se=Kt({type:x,expectedType:void 0,expr:S,env:t});i.return.type.resolvedConcreteType=se}if(!b.isControlFunction&&x&&!ne({type:i.return.type,env:t},{type:x,env:t}))throw d({token:f.token,errorMessage:`Incompatible return type:
|
|
11014
11014
|
- Expected: ${V(i.return.type)}
|
|
11015
11015
|
- Got : ${V(x)}`});(Ae=S.$)!=null&&Ae.env&&(t=(ut=S.$)==null?void 0:ut.env),t=Gt(t,!0),t=y;let M;if(C&&O&&O.size>0&&(M=Ls({capturedVariables:O,env:t})),C&&E.length>0){M||(M=new Map);for(let se of E)M.set(se.name,{frameLevel:0,usageType:"read",token:se.token,value:void 0,type:se.type,isEffectParam:!0})}let q,P,G,z,K=b;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let se=Bo(b,t,n);se&&(K=se)}if(o&&a&&s){z=Fs({expectedCaptureType:void 0,capturedVariablesWithValues:M,env:t,closureToken:e.token,context:{...n}}).captureType;let he=_c(L,t),{capturedVariableDupExpressions:te,env:ke}=As({capturedVariablesWithValues:M,env:t,context:n});G=te,t=ke,b.funcId=`closure_${Et(t.modulePath)}`,b.closureInfo={closureType:he,captureType:z,effectParamNames:E.length>0?E.map(Be=>Be.name):void 0},U(s)&&z&&ws({wrapperType:s,captureType:z,env:t,errorToken:e.token}),s.resolvedConcreteType=z,q={...s,resolvedConcreteType:z},P=void 0}else q=K.type,P=K;return e.$={env:t,type:q,value:P,pathCollection:C&&O?Ho(O):[],deferredDupExpressions:o&&G?G:void 0,captureType:o?z:void 0,closureFunctionValue:o?K:void 0,isAnonymousFunctionDefinition:!0},C&>(e,!0),e}function Jd({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&&Ze(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let f=0;f<r.length;f++){let p=r[f],_=R({expr:p,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(wn(_,n),!_.$)throw d({token:p.token,errorMessage:`Failed to evaluate array element: ${F(p)}`});if(t=_.$.env,s.push(_.$.value),!o)o=a||_.$.type;else if(!ne({type:o,env:t},{type:_.$.type,env:t}))if(ne({type:Kt({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:_.$.type,env:t}))o=_.$.type;else throw d({token:p.token,errorMessage:`Array element type mismatch:
|
|
11016
11016
|
Expected type: ${V(o)}
|
|
11017
|
-
Given type: ${V(_.$.type)}`});l.push(_)}let u=
|
|
11017
|
+
Given type: ${V(_.$.type)}`});l.push(_)}let u=jr(o,Vn("Usize",i)),c=s.every(f=>!!f)?Ei(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},gt(e,!0),e}function em(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=qt(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 tm(e,t){if(e.token.type==="char"){let n=mh(e.token.value),r=Br(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 mh(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&&vn(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=R({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:
|
|
11018
11018
|
${F(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!ne({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 ${V(o)}, got ${V(u.$.type)}`})}let a=Fr(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function rm(e,t,n){let i=le(t,"Box").find(_=>_.value&&ve(_.value[0])&&ee(_.type));if(!i||!i.value||!ve(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=fe(e),u=dt(a.env),{env:c}=Oe({env:u,variable:{name:s.label,token:Fe,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Fe,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:p}=Wo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Dt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!W(f)||!Wt(f.value))throw new Error("Box type constructor did not return a type value");return{boxType:f.value,env:p}}function yh(e,t,n){var r;try{let i=R({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(ve(o))return!!le(t,"box").find(l=>l.value&&ve(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 im({expr:e,env:t,context:n}){ze(e,D.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&Qe(n.expectedType.type)){let y=n.expectedType.type;if(o=ur(Dt(),"",{requiredTraits:y.requiredTraits.map(h=>h.traitType),negativeTraits:y.negativeTraits.map(h=>h.traitType),env:t,context:n}),N(r)&&yh(r.func,t,{...n})&&T(r.args[0],"=>")){let{boxType:h,env:v}=rm(o,t,n);t=v,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=R({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw d({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
|
|
11019
11019
|
${F(r)}`});let s=a.$.type,l=s,u=a;if(!Wt(l)&&!(U(l)&&Ke(l))){let{boxType:y,env:h}=rm(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=R({expr:$,env:t,context:{...n,expectedType:{type:y,env:t}}});if(!E.$)throw d({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
|
|
11020
11020
|
${F(r)}`});t=E.$.env,l=E.$.type,u=E,e.args[0]=E}else t=a.$.env;wn(u,n),t=u.$.env;let c=[],f=[],p=new Set,_;if(n.expectedType&&Qe(n.expectedType.type))_=n.expectedType.type;else if(or(l)){let y=l.fields[0].type;if(y.trait){let h=[];for(let v of y.trait.fields)v.assignedValue&&Jt(v.assignedValue)&&h.push(v.assignedValue.type);_=ga({requiredTraits:h,negativeTraits:[],env:t}),t=da({dynType:_,env:t,context:n})}else throw d({token:e.token,errorMessage:`'${D.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${V(y)}`})}else if(l.trait){let y=[];for(let h of l.trait.fields)h.assignedValue&&Jt(h.assignedValue)&&y.push(h.assignedValue.type);_=ga({requiredTraits:y,negativeTraits:[],env:t}),t=da({dynType:_,env:t,context:n})}else throw d({token:e.token,errorMessage:`'${D.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${V(l)}`});let m=[];if(or(l)){let y=l.fields[0].type;(U(y)||Qe(y))&&m.push(...y.negativeTraits.map(h=>h.traitType)??[])}for(let{traitType:y}of _.requiredTraits)for(let h of m)if(ne({type:y,env:t},{type:h,env:t}))throw d({token:e.token,errorMessage:`Required trait ${V(y)} is in the negative traits list and cannot be used.`});for(let{traitType:y}of _.requiredTraits)if(!p.has(y))if(or(l)&&(U(l.fields[0].type)||Qe(l.fields[0].type))){let h=l.fields[0].type,v=!1,$=U(h)&&h.resolvedConcreteType?h.resolvedConcreteType:s!==l?s:void 0;if($!=null&&$.trait){for(let E of $.trait.fields)if(E.assignedValue&&Jt(E.assignedValue)&&ne({type:y,env:t},{type:E.assignedValue.type,env:t})){f.push(E.assignedValue),c.push(E.assignedValue.type),p.add(y),v=!0;break}}if(!v){let E=h.requiredTraits.map(w=>w.traitType);for(let w of E)if(ne({type:y,env:t},{type:w,env:t})){let L=[];for(let C=0;C<y.fields.length;C++){let A=y.fields[C],I=w.fields.findIndex(S=>S.label===A.label);I===-1?L.push(void 0):L.push(w.fields[I].assignedValue)}let b=fo(y,L);f.push(b),c.push(b.type),p.add(y),v=!0;break}if(!v)throw d({token:e.token,errorMessage:`Required trait ${V(y)} not found in SomeType's requiredTraits.`})}}else{let h=or(l)?l.fields[0].type:l;if(h.trait){let v=!1;for(let $ of h.trait.fields)if($.assignedValue&&Jt($.assignedValue)&&ne({type:y,env:t},{type:$.assignedValue.type,env:t})){f.push($.assignedValue),c.push($.assignedValue.type),p.add(y),v=!0;break}if(!v)throw d({token:e.token,errorMessage:`Required trait ${V(y)} is not implemented by type ${V(l)}.`})}else throw d({token:e.token,errorMessage:`Cannot find trait ${V(y)} for value type ${V(l)}.`})}let g=[];for(let{traitType:y}of _.requiredTraits){let h=c.findIndex(v=>ne({type:y,env:t},{type:v,env:t}));if(h===-1)throw d({token:e.token,errorMessage:`No trait value found for expected trait type ${V(y)}.`});g.push(f[h])}return e.$={env:t,value:void 0,type:_,pathCollection:a.$.pathCollection,dynCallTraitValues:g},gt(e,!0),e}function om(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;ua(a)?i="F32":ca(a)&&(i="F64")}let o=Vn(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 am(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;ea(u)?o="Usize":ta(u)?o="Isize":Vr(u)?o="U8":na(u)?o="I8":ra(u)?o="U16":ia(u)?o="I16":oa(u)?o="U32":aa(u)?o="I32":sa(u)?o="U64":la(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=Vn(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 sm(e,t){if(e.token.type==="string"){let n=Bn(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 gh({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){var _;let a=e,s=e,l;if(N(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=(_=r.expectedType)==null?void 0:_.type,c;if(u){if(!Je(u))throw d({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
|
|
11021
11021
|
${V(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 f=R({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(wn(f,r),!f.$)throw d({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${F(s)}`});n=f.$.env;let p=f.$.value;if(p&&W(f.$.value))throw d({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
|
|
11022
11022
|
${F(s)}`});return!c||!Bi(c,n)?l=Kt({type:f.$.type,expectedType:void 0,expr:void 0,env:n}):l=f.$.type,o.push(f),e!==s&&(e.$={env:n,type:l,value:p,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},type:l,label:i.toString()},value:p,env:n}}function hh({args:e,env:t,context:n}){let r=[],i=[],o=[];for(let l=0;l<e.length;l++){let u=e[l],{type:c,value:f,env:p}=gh({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:o});r.push(c),i.push(f),t=p}let a=ss(r),s=i.some(l=>!l)?void 0:Ka(a,i);return{type:a,value:s,env:t,runtimeArgExprsInOrder:o}}function lm({expr:e,env:t,context:n}){if(!T(e,D.tuple))throw d({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:ae,type:ae.type,pathCollection:[]},e;let{type:r,value:i,env:o,runtimeArgExprsInOrder:a}=hh({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},gt(e,!0),e}function Ds({expr:e,env:t,context:n}){var 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=R({expr:i,env:t,context:{...n}});if(!o.$)throw d({token:i.token,errorMessage:`Failed to evaluate rhs expression:
|
|
11023
11023
|
${F(i)}`});t=o.$.env;let a=o.$.value;if(!W(a))throw d({token:i.token,errorMessage:`Expected type for rhs, got ${F(i)}`});let s=a.value;if(Ze(s)&&Re(s.length))throw d({token:i.token,errorMessage:`Array type with inferred length '_' is not allowed in type annotations.
|
|
11024
|
-
Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});si(s,o.token);let l=!1,u=!1;if(N(r)&&T(r,D.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(N(r)&&T(r,D.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&&((p=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:p.kind)==="function-body"&&((_=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&_.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(
|
|
11025
|
-
${V(s)}`});if(
|
|
11024
|
+
Use explicit length like 'Array(i32, 3)' or omit the type annotation and initialize with 'arr := Array(i32, _)(1, 2, 3)'`});si(s,o.token);let l=!1,u=!1;if(N(r)&&T(r,D.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(N(r)&&T(r,D.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&&((p=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:p.kind)==="function-body"&&((_=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&_.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(Wr(s,t)&&!l)throw d({token:r.token,errorMessage:`Expected "comptime" for compile-time known value binding:
|
|
11025
|
+
${V(s)}`});if(qr(s,t)&&l)throw d({token:r.token,errorMessage:`Unexpected "comptime" for ${V(s)} which can only be used at runtime.`});let c=r.token.value;if(!l&&ee(s)&&kr(s))throw d({token:r.token,errorMessage:`Runtime variables with generic function types are not allowed:
|
|
11026
11026
|
${V(s)}
|
|
11027
11027
|
|
|
11028
11028
|
Generic functions must be compile-time known to enable monomorphization. Consider using:
|
|
11029
|
-
comptime(${c}) : ${V(s)}`});let{env:f}=Oe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[ie(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:tt(s),isImplicit:u}});return t=f,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:ae.type,value:ae,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function Ms({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var o,a,s,l;let i=e.token.value;if(i==="Type"){let u=fe(Dt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Module"){let u=fe(Jn(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Trait"){let u=fe(Jn(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="unit"){let u=fe(Tr());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_int"){let u=fe($i());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_float"){let u=fe(_o());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_string"){let u=fe(Tn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="bool"){let u=fe(Nt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="usize"){let u=fe(Qt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="isize"){let u=fe(po());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u8"){let u=fe(mo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i8"){let u=fe(yo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u16"){let u=fe(go());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i16"){let u=fe(ho());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u32"){let u=fe(vo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i32"){let u=fe(Ci());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u64"){let u=fe(To());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i64"){let u=fe(Eo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f32"){let u=fe($o());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f64"){let u=fe(bi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="char"){let u=fe(Qu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="short"){let u=fe(Zu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ushort"){let u=fe(Ju());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="int"){let u=fe(ec());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="uint"){let u=fe(tc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="long"){let u=fe(nc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulong"){let u=fe(rc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longlong"){let u=fe(ic());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulonglong"){let u=fe(oc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longdouble"){let u=fe(ac());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="void"){let u=fe(sc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Expr"){let u=fe(Kn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let u=fe(n.SelfType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfTrait"&&n.SelfTraitType){let u=fe(n.SelfTraitType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfModule"&&n.SelfModuleType){let u=fe(n.SelfModuleType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else{let u=le(t,i);if(u.length){let c=u[u.length-1];if(!c.initializedAtToken&&r&&!ee(c.type)&&!W((o=c.value)==null?void 0:o[0]))throw d({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let f=c.type.isExtern==="c"&&Re((a=c.value)==null?void 0:a[0])&&!(ee(c.type)||Ct(c.type))||(s=c.value)==null?void 0:s[0];if(e.$={env:t,type:c.type,value:f,originType:c.type,variableName:c.name,pathCollection:[[c.name]],sourceVariable:c},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<p&&qo(c.name,c.frameLevel,"own",e.token,n)}if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)==="async-block"){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<p&&qo(c.name,c.frameLevel,"own",e.token,n)}return e}else throw d({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function hu(e,t){let n=Uu(t),r=`Right-hand side contains "${n}" from function.`;throw N(e)&&T(e,D.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.`:N(e)&&T(e,D.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.`:N(e)&&T(e,D.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),d({token:e.token,errorMessage:r})}function vh(e,t){var n;if(Ze(e)&&Re(e.length)){let r=e.length;if(r.variableName){let i=le(t,r.variableName);if(i.length>0){let o=i[i.length-1];if((n=o.value)!=null&&n[0]&&!Re(o.value[0]))return
|
|
11029
|
+
comptime(${c}) : ${V(s)}`});let{env:f}=Oe({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[ie(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:tt(s),isImplicit:u}});return t=f,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:ae.type,value:ae,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function Ms({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var o,a,s,l;let i=e.token.value;if(i==="Type"){let u=fe(Dt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Module"){let u=fe(Jn(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Trait"){let u=fe(Jn(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="unit"){let u=fe(Tr());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_int"){let u=fe($i());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_float"){let u=fe(_o());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_string"){let u=fe(Tn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="bool"){let u=fe(Nt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="usize"){let u=fe(Qt());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="isize"){let u=fe(po());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u8"){let u=fe(mo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i8"){let u=fe(yo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u16"){let u=fe(go());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i16"){let u=fe(ho());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u32"){let u=fe(vo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i32"){let u=fe(Ci());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u64"){let u=fe(To());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i64"){let u=fe(Eo());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f32"){let u=fe($o());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f64"){let u=fe(bi());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="char"){let u=fe(Qu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="short"){let u=fe(Zu());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ushort"){let u=fe(Ju());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="int"){let u=fe(ec());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="uint"){let u=fe(tc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="long"){let u=fe(nc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulong"){let u=fe(rc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longlong"){let u=fe(ic());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulonglong"){let u=fe(oc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longdouble"){let u=fe(ac());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="void"){let u=fe(sc());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Expr"){let u=fe(Kn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let u=fe(n.SelfType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfTrait"&&n.SelfTraitType){let u=fe(n.SelfTraitType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfModule"&&n.SelfModuleType){let u=fe(n.SelfModuleType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else{let u=le(t,i);if(u.length){let c=u[u.length-1];if(!c.initializedAtToken&&r&&!ee(c.type)&&!W((o=c.value)==null?void 0:o[0]))throw d({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let f=c.type.isExtern==="c"&&Re((a=c.value)==null?void 0:a[0])&&!(ee(c.type)||Ct(c.type))||(s=c.value)==null?void 0:s[0];if(e.$={env:t,type:c.type,value:f,originType:c.type,variableName:c.name,pathCollection:[[c.name]],sourceVariable:c},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<p&&qo(c.name,c.frameLevel,"own",e.token,n)}if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)==="async-block"){let p=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<p&&qo(c.name,c.frameLevel,"own",e.token,n)}return e}else throw d({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function hu(e,t){let n=Uu(t),r=`Right-hand side contains "${n}" from function.`;throw N(e)&&T(e,D.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.`:N(e)&&T(e,D.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.`:N(e)&&T(e,D.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),d({token:e.token,errorMessage:r})}function vh(e,t){var n;if(Ze(e)&&Re(e.length)){let r=e.length;if(r.variableName){let i=le(t,r.variableName);if(i.length>0){let o=i[i.length-1];if((n=o.value)!=null&&n[0]&&!Re(o.value[0]))return jr(e.childType,o.value[0])}}}return e}function um({expr:e,env:t,context:n}){var o,a,s,l,u,c,f,p,_,m,g,y,h,v,$,E,w,L,b;if(!T(e,"=",2))throw d({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(Y(r)||N(r)&&T(r,":",2)){let C;if(Y(r)){let re=Ms({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!re.$)throw d({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${F(r)}`});t=re.$.env,r=re,C=r.token.value}else{let{expr:re,variableExpr:J,variableName:ue}=Ds({expr:r,env:t,context:{...n}});(o=re.$)!=null&&o.env&&(t=(a=re.$)==null?void 0:a.env),r=J,C=ue}let A=le(t,C);if(!A.length)throw d({token:r.token,errorMessage:`Variable ${C} not found in the environment`});let I=A[A.length-1];if(!I.isReassignable)throw d({token:r.token,errorMessage:`Cannot reassign "${C}".
|
|
11030
11030
|
You can mutate fields (e.g., ${C}.field = value) but cannot reassign itself.`});if(i=R({expr:i,env:t,context:{...n,expectedType:{type:I.type,env:t},isInsideGivenHandler:I.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw d({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${F(i)}`});t=i.$.env,qi(i,t),Fi(i),wn(i,n),t=i.$.env,Xt((s=i.$)==null?void 0:s.controlFlow)&&hu(i,i.$.controlFlow);let S=(l=i.$)==null?void 0:l.type;if(!S)try{let{expr:re,type:J,env:ue}=yi({expr:i,type:I.type,env:t,context:{...n}});i=re,S=J,t=ue}catch(re){throw d({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${F(i)}
|
|
11031
11031
|
${re}`})}if(I.isCompileTimeOnly||(S=Kt({type:S,expectedType:I.type,expr:i,env:t})),!ne({type:I.type,env:t},{type:S,env:t}))if(bo(I.type))try{let{expr:re,type:J,env:ue}=yi({expr:i,type:I.type,env:t,context:{...n}});if(ne({type:I.type,env:ue},{type:J,env:ue})){i=re,S=J,t=ue;let ge=vh(I.type,t);t=Tt(t,I,{...I,type:ge})}else throw d({token:r.token,errorMessage:`Incompatible types:
|
|
11032
11032
|
- Expected: ${V(I.type)}
|
|
@@ -11064,11 +11064,11 @@ ${f instanceof Zn||f instanceof gr?f.toString():f instanceof Error?f.message:Str
|
|
|
11064
11064
|
(${F(l)}) = ${F(a)}`});if(a=R({expr:a,env:t,context:{...n,expectedType:void 0,isInsideGivenHandler:s?!0:n.isInsideGivenHandler}}),(c=a.$)!=null&&c.env&&(t=(f=a.$)==null?void 0:f.env),(p=a.$)!=null&&p.type&&si(a.$.type,a.token),Xt((_=a.$)==null?void 0:_.controlFlow)&&hu(a,a.$.controlFlow),Fi(a),Y(l)){if(qi(a,t),wn(a,{...n}),(m=a.$)!=null&&m.env&&(t=(g=a.$)==null?void 0:g.env),!kt(l))throw d({token:l.token,errorMessage:`Invalid assignment to ${l.token.value}, expected identifier or operator`});let E=s||r,w=s?!1:i,L=(y=a.$)==null?void 0:y.type;if((h=l.$)!=null&&h.type){try{let{expr:O,type:x,env:M}=yi({expr:a,type:(v=l.$)==null?void 0:v.type,env:t,context:{...n}});a=O,L=x,t=M}catch(O){throw d({token:a.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${F(a)}
|
|
11065
11065
|
${O}`})}if(!ne({type:l.$.type,env:t},{type:L,env:t}))throw d({token:l.token,errorMessage:`Incompatible types:
|
|
11066
11066
|
- Defined: ${V(l.$.type)}
|
|
11067
|
-
- Given : ${V(L)}`})}else{if(!L)throw d({token:a.token,errorMessage:`Failed to evaluate, got ${F(a)}`});let O=L;w&&(O=Kt({type:L,expectedType:void 0,expr:a,env:t})),l.$={...l.$,env:t,type:O,pathCollection:[]}}if(!E&&
|
|
11067
|
+
- Given : ${V(L)}`})}else{if(!L)throw d({token:a.token,errorMessage:`Failed to evaluate, got ${F(a)}`});let O=L;w&&(O=Kt({type:L,expectedType:void 0,expr:a,env:t})),l.$={...l.$,env:t,type:O,pathCollection:[]}}if(!E&&Wr(l.$.type,t))throw d({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
|
|
11068
11068
|
${F(e)}
|
|
11069
11069
|
|
|
11070
11070
|
Type:
|
|
11071
|
-
${V(l.$.type)}`});if(E&&
|
|
11071
|
+
${V(l.$.type)}`});if(E&&qr(l.$.type,t))throw d({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${V(l.$.type)}" which can only be used at the runtime:
|
|
11072
11072
|
${F(e)}`});let b=($=a.$)==null?void 0:$.value;if(W(b)&&!b.value.typeName&&b.value!==n.SelfType?b.value.typeName=l.token.value:ve(b)&&!b.funcName?(b.funcName=l.token.value,b.funcId+=`_${l.token.value}`):(vt(b)||Jt(b))&&!b.type.typeName&&b.type!==n.SelfType&&(b.type.typeName=l.token.value),s&&ve(b)&&(b.isModuleEffectMember=!0),!b&&E)throw d({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
|
|
11073
11073
|
Got runtime value. Please consider using ":=" instead of "::":
|
|
11074
11074
|
${F(a)}`});l.$={...l.$,env:t,type:l.$.type,value:E?b?Gn(b):ie(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let C=l.$.type;U(C)&&L&&U(L)&&L.resolvedConcreteType&&(C={...C,resolvedConcreteType:L.resolvedConcreteType},l.$.type=C);let A=va(a,t,t.modulePath),I=A;A!=null&&A.consumedAtToken&&(I=void 0);let{env:S}=Oe({env:t,variable:{name:l.token.value,type:C,isCompileTimeOnly:E,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:tt(C),isOwningTheSameRcValueAs:I,isReassignable:!s,isImplicit:s}});return t=S,l.$.env=t,s&&(o.$={env:t,value:ae,type:ae.type,pathCollection:[]}),e.$={env:t,value:ae,type:ae.type,pathCollection:[],isCompileTimeOnlyAssignment:E},e}else{let E=s||r,{env:w,runtimeDestructurings:L}=Tm({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=w,e.$={env:t,value:ae,type:ae.type,pathCollection:[],runtimeDestructurings:L,isCompileTimeOnlyAssignment:E},e}}function Lh(e){return N(e)?T(e,"|",2):!1}function Cu(e){if(!Lh(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Cu(n),...Cu(r)]}function Ah(e){return vi(e)||Ti(e)||xr(e)||ir(e)||Zt(e)||hn(e)||pn(e)}function $m({expr:e,env:t,context:n}){var E,w,L,b,C,A,I,S,O,x,M;if(!T(e,D.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=Y(i)?R({expr:i,env:t,context:{...n,expectedType:void 0}}):en({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: ${F(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(it(a)?(u=a.childType,l=a.tag):u=a,Ah(u))return Ih({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!Ue(u))throw d({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?V(a):"unknown type"}`});let c=u,f=r.slice(1),p=[],_,m=new Set,g=!1,y=!1,h=[],v=[];for(let q=0;q<f.length;q++){let P=f[q],G=t;if(!N(P)||!T(P,"=>",2))throw d({token:P.token,errorMessage:`Expected ":" for match pattern, got ${F(P)}`});let z=P.args[0],K=P.args[1];if(N(z)&&T(z,".",1)||on(z,"_")){if(y)throw d({token:z.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let re;if(N(z)){if(re=z.args[0],!Y(re))throw d({token:z.token,errorMessage:`Expected identifier for enum variant, got ${F(re)}`})}else y=!0,re=z;let J=re.token.value,ue=c.variants.find(Ce=>Ce.name===J);if(!ue&&J!=="_")throw d({token:z.token,errorMessage:`Enum variant "${J}" not found in ${V(c)}`});if(ue&&ue.fields&&ue.fields.length>0)throw d({token:z.token,errorMessage:`Enum variant "${J}" has ${ue.fields.length} field(s) and must be destructured. Use .${J}(...) instead of .${J}`});if(m.add(J),J!=="_"&&yn(s)&&s.variantName!==J)continue;let ge={...c,selectedVariantName:J==="_"?void 0:J};re.$={env:G,type:ge,value:void 0,pathCollection:[]};let Z=ge;l&&l==="Ptr"&&(Z=Zi(ge));let ce=K;G=dt(G),z.$={env:G,type:Z,value:void 0,pathCollection:[],caseExecuted:!0};let X=en({expr:ce,env:G,context:{...n,isExecuting:yn(s)&&s.variantName===J},variablesToAdd:[]});if(!((E=X.$)!=null&&E.type))throw d({token:ce.token,errorMessage:`Expected type for match result expression, got ${F(ce)}`});let pe=Gt(X.$.env,!0);if(G=pe,X.$={...X.$,env:pe},n.expectedType&&!ne(n.expectedType,{type:X.$.type,env:X.$.env}))throw d({token:X.token,errorMessage:`Incompatible type with expected type:
|
|
@@ -11103,7 +11103,7 @@ ${F(e)}`});if(T(e,".",1)){let L=e.args[0];if(!Y(L)&&!kt(L))throw d({token:L.toke
|
|
|
11103
11103
|
${F(L)}`});let b=(s=n.expectedType)==null?void 0:s.type;if(!Ue(b))throw d({token:e.token,errorMessage:"Failed to infer enum variant type."});let C=L.token.value,A=b,I=A.variants.find(O=>O.name===C);if(!I)throw d({token:L.token,errorMessage:`Enum variant "${C}" not found in enum`});let S={...A,selectedVariantName:C};if(!I.fields)e.$={env:t,type:S,value:Ui(S,C,[]),pathCollection:[]},L.$={env:t,type:S,pathCollection:[]};else{let O=fe(S);e.$={env:t,value:O,type:O.type,pathCollection:[]},L.$=e.$}return e}if(!T(e,".",2))throw d({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
|
|
11104
11104
|
${F(e)}`});let r=e.args[0],i=e.args[1];if(r=R({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),Y(i)&&i.token.value==="*"){if(it((c=r.$)==null?void 0:c.type)){let L=r.$.type,b=L.childType;U(b)&&(b=bn(t,b));let C=(f=r.$)==null?void 0:f.value;if(co(C)){let A=C.targetValue[0],I;return wr(A)?I=A.elements[C.targetIndex]:I=A,e.$={env:t,type:b,value:I,originType:L,isAccessingProperty:!0,pathCollection:[],sourceVariable:r.$.sourceVariable},e.$.ptrTargetValue=C.targetValue,e.$.ptrTargetIndex=C.targetIndex,i.$=e.$,e}if(Re(C)){let A=ie(b,{variableName:C.variableName?`${C.variableName}.*`:void 0,env:t,context:n});return e.$={env:t,type:b,value:A,originType:L,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,e}return e.$={env:t,type:b,value:void 0,originType:L,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,gt(e,!1),e}if(rn((p=r.$)==null?void 0:p.type)){let L=r.$.type,b=L.childType;return U(b)&&(b=bn(t,b)),e.$={env:t,type:b,value:void 0,originType:L,isAccessingProperty:!0,pathCollection:[]},i.$=e.$,gt(e,!1),e}}if(W((_=r.$)==null?void 0:_.value)){let L=r.$.value;if(Ue(L.value)){if(!Y(i))throw d({token:i.token,errorMessage:`Expected identifier for enum variant, got:
|
|
11105
11105
|
${F(i)}`});{let S=i.token.value,O=L.value.trait.fields.find(x=>x.label===S);if(O)return e.$={env:t,type:O.type,value:O.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let b=i.token.value,C=L.value,A=C.variants.find(S=>S.name===b);if(!A)throw d({token:i.token,errorMessage:`Enum variant "${b}" not found in enum`});let I={...C,selectedVariantName:b};if(!A.fields)e.$={env:t,type:I,value:Ui(I,b,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let S=fe(I);e.$={env:t,type:S.type,value:S,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if(L.value.trait){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11106
|
-
${F(i)}`});let b=i.token.value,C=L.value.trait.fields.findLast(A=>A.label===b);if(C){if(C.assignedValue){let A=C.assignedValue.type;return e.$={env:t,type:A,value:C.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(C.unassignedSomeType){let A=fe(C.unassignedSomeType);return e.$={env:t,type:A.type,value:A,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:C.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let S of L.value.trait.fields)if(S.label===""&&S.assignedValue&&Jt(S.assignedValue)){let O=S.assignedValue,x=O.type,M=x.fields.findIndex(q=>q.label===b);if(M>=0){let q=x.fields[M],P=O.fields[M];if(ee(q.type))continue;if(P)return e.$={env:t,type:P.type,value:P,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(q.unassignedSomeType){let G=fe(q.unassignedSomeType);return e.$={env:t,type:G.type,value:G,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let A=
|
|
11106
|
+
${F(i)}`});let b=i.token.value,C=L.value.trait.fields.findLast(A=>A.label===b);if(C){if(C.assignedValue){let A=C.assignedValue.type;return e.$={env:t,type:A,value:C.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(C.unassignedSomeType){let A=fe(C.unassignedSomeType);return e.$={env:t,type:A.type,value:A,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:C.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let S of L.value.trait.fields)if(S.label===""&&S.assignedValue&&Jt(S.assignedValue)){let O=S.assignedValue,x=O.type,M=x.fields.findIndex(q=>q.label===b);if(M>=0){let q=x.fields[M],P=O.fields[M];if(ee(q.type))continue;if(P)return e.$={env:t,type:P.type,value:P,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(q.unassignedSomeType){let G=fe(q.unassignedSomeType);return e.$={env:t,type:G.type,value:G,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let A=Qr({concreteType:L.value,methodName:b,env:t});if(A.length===1){let S=A[0];return e.$={env:t,type:S.type,value:S.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let I=gs({concreteType:L.value,propertyName:b,env:t});return I?(e.$={env:t,type:I.type,value:I.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}else if(We(L.value)){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11107
11107
|
${F(i)}`});let b=i.token.value,A=L.value.fields.find(I=>I.label===b);return A?(e.$={env:t,type:A.type,value:A.assignedValue??ie(A.type,{variableName:A.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(st(L.value)){if(!kt(i))throw d({token:i.token,errorMessage:`Expected identifier for type method, got:
|
|
11108
11108
|
${F(i)}`});let b=i.token.value,C=L.value;if(C.receiverType&&C.receiverType.trait){for(let S of C.receiverType.trait.fields)if(S.label===""&&S.assignedValue&&Jt(S.assignedValue)){let O=S.assignedValue,x=O.type;if(!ne({type:C,env:t},{type:x,env:t}))continue;let M=x.fields.findIndex(q=>q.label===b&&ee(q.type));if(M>=0){let q=x.fields[M];if(ee(q.type)){let P=O.fields[M];if(P){let G=q.type;return ve(P)&&P.specializedType&&(G=P.specializedType),e.$={env:t,type:G,value:P,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let I=wc({concreteType:C.receiverType,traitType:C,methodName:b,env:t});if(I)return e.$={env:t,type:I.type,value:I.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let A=C.fields.find(I=>I.label===b);return A?(e.$={env:t,type:A.type,value:A.assignedValue??ie(A.type,{variableName:A.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=(m=r.$)==null?void 0:m.type,a=(g=r.$)==null?void 0:g.type;for(;o&&it(o);)o=o.childType;if(Je(o)||Me(o)||jt(o)){let L=o.fields,b=r.$.value;if(Y(i)){if(i.token.type==="integer"){if(!Je((y=r.$)==null?void 0:y.type))throw d({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let C=parseInt(i.token.value,10);if(isNaN(C))throw d({token:i.token,errorMessage:`Expected integer for tuple index, got:
|
|
11109
11109
|
${F(i)}`});let A=L.length;if(C<0||C>=A)throw d({token:i.token,errorMessage:`Index out of bounds: ${C} for accessing field in:
|
|
@@ -11113,7 +11113,7 @@ ${F(i)}`});let L=i.token.value,b=o.variants.find(C=>C.name===o.selectedVariantNa
|
|
|
11113
11113
|
${F(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!T(e,D.recur))throw d({token:e.token,errorMessage:`Expected recur, got:
|
|
11114
11114
|
${F(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=Si({functionValue:ve(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=Gt(u),e.$={type:s,value:ie(s,{variableName:"recur_result_"+Et(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return br({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function wm({expr:e,env:t,context:n}){var a;if(!T(e,D.runtime,1))throw d({token:e.token,errorMessage:`Expected runtime(expr), got:
|
|
11115
11115
|
${F(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=R({expr:r,env:t,context:{...n}});if(!((a=i.$)!=null&&a.type))throw d({token:i.token,errorMessage:`Failed to evaluate runtime argument:
|
|
11116
|
-
${F(i)}`});let o=Kt({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 Fm({expr:e,env:t,context:n}){ze(e,"<:",2);let r=e.args[0],i=e.args[1],o=R({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&&!U(a.value))throw d({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${F(r)} of type ${V(a.value)}`});let s=[];if(N(i)&&T(i,D.tuple))for(let _ of i.args)N(_)&&T(_,"!")&&_.args.length===1?s.push({expr:_.args[0],isNegated:!0}):s.push({expr:_,isNegated:!1});else N(i)&&T(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:_,isNegated:m}of s){let g=R({expr:_,env:t,context:{...n}});if(!g.$||!g.$.value||!W(g.$.value)||!st(g.$.value.value))throw d({token:_.token,errorMessage:"Expected trait type for right-hand side expression."});t=g.$.env;let y=g.$.value.value;if(y.receiverType)throw d({token:_.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(m&&!n.isInsideWhereClause)throw d({token:_.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:y,expr:_,isNegated:m})}if(n.isInsideWhereClause&&U(a.value)){let _=a.value;for(let{traitType:m,isNegated:g}of l){let y={...m,receiverType:_};t=
|
|
11116
|
+
${F(i)}`});let o=Kt({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 Fm({expr:e,env:t,context:n}){ze(e,"<:",2);let r=e.args[0],i=e.args[1],o=R({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&&!U(a.value))throw d({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${F(r)} of type ${V(a.value)}`});let s=[];if(N(i)&&T(i,D.tuple))for(let _ of i.args)N(_)&&T(_,"!")&&_.args.length===1?s.push({expr:_.args[0],isNegated:!0}):s.push({expr:_,isNegated:!1});else N(i)&&T(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:_,isNegated:m}of s){let g=R({expr:_,env:t,context:{...n}});if(!g.$||!g.$.value||!W(g.$.value)||!st(g.$.value.value))throw d({token:_.token,errorMessage:"Expected trait type for right-hand side expression."});t=g.$.env;let y=g.$.value.value;if(y.receiverType)throw d({token:_.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(m&&!n.isInsideWhereClause)throw d({token:_.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:y,expr:_,isNegated:m})}if(n.isInsideWhereClause&&U(a.value)){let _=a.value;for(let{traitType:m,isNegated:g}of l){let y={...m,receiverType:_};t=Rr({env:t,someType:_,traitType:y,isNegated:g})}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(!U(c)&&!gn({targetType:c,traitType:u,env:t}))throw d({token:e.token,errorMessage:`Type "${V(c)}" does not implement trait "${u.typeName??V(u)}".`});let f={...u,receiverType:a.value},p=fe(f);return e.$={env:t,value:p,type:p.type,pathCollection:[]},e}function Lm({expr:e,env:t,context:n}){if(!T(e,D.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,D.using))throw d({token:o.token,errorMessage:`Expected using(...) clause as second argument, got: ${F(o)}`});let s=R({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value)throw d({token:i.token,errorMessage:`Failed to evaluate test name: ${F(i)}`});if(t=s.$.env,!bt(s.$.value))throw d({token:i.token,errorMessage:`Expected string for test name, got ${F(i)}`});if(r){let l=ot(o);o.$={env:t,type:ae.type,value:ae,pathCollection:[],originalExpr:l};let u=ot(a);a.$={env:t,type:ae.type,value:ae,pathCollection:[],originalExpr:u}}else{let l=ot(a),u=R({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: ${F(a)}`});if(!xe(u.$.type))throw d({token:a.token,errorMessage:`Test body must have 'unit' type, got ${V(u.$.type)}`});u.$.originalExpr=l}return e.$={env:t,type:ae.type,value:ae,pathCollection:[]},e}function Am({expr:e,env:t,context:n}){var s,l;if(!T(e,k.typeof,1))throw d({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
|
|
11117
11117
|
${F(e)}`});let r=e.args[0],i=R({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:
|
|
11118
11118
|
${F(r)}`});let o=i.$.type,a=fe(o);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Os({expr:e,env:t,context:n}){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 r=e.args[0],i,o;e.args.length===3?(i=e.args[1],o=e.args[2]):o=e.args[1];let a=en({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw d({token:r.token,errorMessage:`Failed to evaluate the condition expression:
|
|
11119
11119
|
${F(r)}`});if(!ir(a.$.type))throw d({token:r.token,errorMessage:`Expected bool type for condition expression, got:
|